/[LeafOK_CVS]/lbbs/utils/game/money.c
ViewVC logotype

Annotation of /lbbs/utils/game/money.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (hide annotations)
Tue Nov 4 14:58:56 2025 UTC (4 months, 1 week ago) by sysadm
Branch: MAIN
Changes since 1.9: +1 -1 lines
Content type: text/x-csrc
Refine file header information comments

1 sysadm 1.9 /* SPDX-License-Identifier: GPL-3.0-or-later */
2     /*
3     * money
4     * - basic operations of user money
5     *
6 sysadm 1.10 * Copyright (C) 2004-2025 Leaflet <leaflet@leafok.com>
7 sysadm 1.9 */
8 sysadm 1.8
9 sysadm 1.3 #include "database.h"
10     #include "log.h"
11 sysadm 1.7 #include "money.h"
12 sysadm 1.3 #include "user_priv.h"
13     #include <stdio.h>
14 sysadm 1.4 #include <stdlib.h>
15 sysadm 1.5 #include <mysql/mysql.h>
16 sysadm 1.1
17 sysadm 1.3 int BBS_user_money = 0;
18    
19     int money_balance()
20     {
21     return BBS_user_money;
22     }
23    
24     int money_deposit(int money)
25 sysadm 1.2 {
26 sysadm 1.3 MYSQL *db;
27     MYSQL_RES *rs;
28     MYSQL_ROW row;
29     char sql[SQL_BUFFER_LEN];
30     int ret = 0;
31    
32     if (money <= 0)
33     {
34     return 0;
35     }
36    
37     db = db_open();
38     if (db == NULL)
39     {
40     return -1;
41     }
42    
43     // Begin transaction
44     if (mysql_query(db, "SET autocommit=0") != 0)
45     {
46 sysadm 1.4 log_error("SET autocommit=0 error: %s\n", mysql_error(db));
47 sysadm 1.3 return -1;
48     }
49    
50     if (mysql_query(db, "BEGIN") != 0)
51     {
52 sysadm 1.4 log_error("Begin transaction error: %s\n", mysql_error(db));
53 sysadm 1.3 return -1;
54     }
55    
56     snprintf(sql, sizeof(sql),
57 sysadm 1.6 "SELECT game_money FROM user_pubinfo WHERE UID = %d FOR UPDATE",
58 sysadm 1.3 BBS_priv.uid);
59    
60     if (mysql_query(db, sql) != 0)
61     {
62 sysadm 1.4 log_error("Query user_pubinfo error: %s\n", mysql_error(db));
63 sysadm 1.3 return -1;
64     }
65     if ((rs = mysql_store_result(db)) == NULL)
66     {
67     log_error("Get user money failed\n");
68     return -1;
69     }
70     if ((row = mysql_fetch_row(rs)))
71     {
72     BBS_user_money = atoi(row[0]);
73     }
74     mysql_free_result(rs);
75    
76     if (BBS_user_money + money < USER_MONEY_MAX)
77     {
78     ret = money;
79 sysadm 1.2 BBS_user_money += money;
80 sysadm 1.3 }
81     else if (BBS_user_money < USER_MONEY_MAX)
82     {
83     ret = USER_MONEY_MAX - BBS_user_money;
84     BBS_user_money = USER_MONEY_MAX;
85     }
86     else // Balance exceeds 1 billion !!!
87     {
88     mysql_close(db);
89     return -2;
90     }
91    
92     snprintf(sql, sizeof(sql),
93 sysadm 1.6 "UPDATE user_pubinfo SET game_money = %d WHERE UID = %d",
94 sysadm 1.3 BBS_user_money, BBS_priv.uid);
95    
96     if (mysql_query(db, sql) != 0)
97     {
98 sysadm 1.4 log_error("Update user_pubinfo error: %s\n", mysql_error(db));
99 sysadm 1.3 return -1;
100     }
101    
102     // Commit transaction
103     if (mysql_query(db, "COMMIT") != 0)
104     {
105 sysadm 1.4 log_error("Commit transaction error: %s\n", mysql_error(db));
106 sysadm 1.3 return -1;
107     }
108    
109     mysql_close(db);
110    
111     return ret;
112 sysadm 1.1 }
113    
114 sysadm 1.3 int money_withdraw(int money)
115 sysadm 1.2 {
116 sysadm 1.3 MYSQL *db;
117     MYSQL_RES *rs;
118     MYSQL_ROW row;
119     char sql[SQL_BUFFER_LEN];
120     int ret = 0;
121    
122     if (money <= 0)
123     {
124     return 0;
125     }
126    
127     db = db_open();
128     if (db == NULL)
129     {
130     return -1;
131     }
132    
133     // Begin transaction
134     if (mysql_query(db, "SET autocommit=0") != 0)
135     {
136 sysadm 1.4 log_error("SET autocommit=0 error: %s\n", mysql_error(db));
137 sysadm 1.3 return -1;
138     }
139    
140     if (mysql_query(db, "BEGIN") != 0)
141     {
142 sysadm 1.4 log_error("Begin transaction error: %s\n", mysql_error(db));
143 sysadm 1.3 return -1;
144     }
145    
146     snprintf(sql, sizeof(sql),
147 sysadm 1.6 "SELECT game_money FROM user_pubinfo WHERE UID = %d FOR UPDATE",
148 sysadm 1.3 BBS_priv.uid);
149    
150     if (mysql_query(db, sql) != 0)
151     {
152 sysadm 1.4 log_error("Query user_pubinfo error: %s\n", mysql_error(db));
153 sysadm 1.3 return -1;
154     }
155     if ((rs = mysql_store_result(db)) == NULL)
156     {
157     log_error("Get user money failed\n");
158     return -1;
159     }
160     if ((row = mysql_fetch_row(rs)))
161     {
162     BBS_user_money = atoi(row[0]);
163     }
164     mysql_free_result(rs);
165    
166     if (BBS_user_money >= money)
167     {
168     ret = money;
169 sysadm 1.2 BBS_user_money -= money;
170 sysadm 1.3 }
171     else // No enough balance
172     {
173     mysql_close(db);
174     return -2;
175     }
176    
177     snprintf(sql, sizeof(sql),
178 sysadm 1.6 "UPDATE user_pubinfo SET game_money = %d WHERE UID = %d",
179 sysadm 1.3 BBS_user_money, BBS_priv.uid);
180    
181     if (mysql_query(db, sql) != 0)
182     {
183 sysadm 1.4 log_error("Update user_pubinfo error: %s\n", mysql_error(db));
184 sysadm 1.3 return -1;
185     }
186    
187     // Commit transaction
188     if (mysql_query(db, "COMMIT") != 0)
189     {
190 sysadm 1.4 log_error("Commit transaction error: %s\n", mysql_error(db));
191 sysadm 1.3 return -1;
192     }
193    
194     mysql_close(db);
195    
196     return ret;
197     }
198    
199     int money_refresh(void)
200     {
201     MYSQL *db;
202     MYSQL_RES *rs;
203     MYSQL_ROW row;
204     char sql[SQL_BUFFER_LEN];
205    
206     db = db_open();
207     if (db == NULL)
208     {
209     return -1;
210     }
211    
212     snprintf(sql, sizeof(sql),
213 sysadm 1.6 "SELECT game_money FROM user_pubinfo WHERE UID = %d FOR UPDATE",
214 sysadm 1.3 BBS_priv.uid);
215    
216     if (mysql_query(db, sql) != 0)
217     {
218 sysadm 1.4 log_error("Query user_pubinfo error: %s\n", mysql_error(db));
219 sysadm 1.3 return -1;
220     }
221     if ((rs = mysql_store_result(db)) == NULL)
222     {
223     log_error("Get user money failed\n");
224     return -1;
225     }
226     if ((row = mysql_fetch_row(rs)))
227     {
228     BBS_user_money = atoi(row[0]);
229     }
230     mysql_free_result(rs);
231    
232     mysql_close(db);
233    
234     return 0;
235 sysadm 1.1 }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1