/[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.8 - (hide annotations)
Mon Jun 30 04:52:00 2025 UTC (8 months, 2 weeks ago) by sysadm
Branch: MAIN
Changes since 1.7: +16 -0 lines
Content type: text/x-csrc
Add file header

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

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