/[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.5 - (hide annotations)
Tue Jun 3 13:14:26 2025 UTC (9 months, 1 week ago) by sysadm
Branch: MAIN
Changes since 1.4: +1 -1 lines
Content type: text/x-csrc
Refine

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

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