· 7 years ago · Feb 01, 2019, 03:08 PM
1/*============================================================================================
2
3 ---------------------------------
4 -*- [ZombiePlague] Bank -*-
5 ---------------------------------
6
7
8============================================================================================*/
9
10
11#include <amxmodx>
12#include <cstrike>
13#include <auth_core>
14#include <zp50_ammopacks>
15#include <sqlx>
16
17/*==========================================================================================*/
18#define PLUG_OBJNAME "ZP AmmoBank"
19#define PLUG_VERSION "1.0"
20#define PLUG_CREATOR "Boec[SpecOPs]"
21
22#define DB_HOST "localhost"
23#define DB_USER "root"
24#define DB_PASS "root"
25#define DB_NAME "zombielite"
26
27/*==========================================================================================*/
28
29new const BANK_CREATE[] =
30 " CREATE TABLE IF NOT EXISTS zp_bank \
31 ( \
32 uID INT(10) UNSIGNED PRIMARY KEY, \
33 ammo INT(10) UNSIGNED DEFAULT 0, \
34 money INT(10) UNSIGNED DEFAULT 0 \
35 ) ENGINE = InnoDB;";
36
37new Handle:db_tuple;
38new fwd_bank_save, fwd_bank_load;
39
40/*==========================================================================================*/
41
42enum _:BankRecord {
43 br_uID,
44 br_ammo,
45 br_money
46}
47
48/*=========================================================================================*/
49
50public plugin_init()
51{
52 register_plugin(PLUG_OBJNAME, PLUG_VERSION, PLUG_CREATOR);
53
54 fwd_bank_save = CreateMultiForward("zp_bank_save", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL);
55 fwd_bank_load = CreateMultiForward("zp_bank_load", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL, FP_CELL);
56
57 mysql_db_init();
58}
59
60mysql_db_init()
61{
62 db_tuple = SQL_MakeDbTuple(DB_HOST, DB_USER, DB_PASS, DB_NAME);
63 SQL_ThreadQuery(db_tuple, "mysql_query_handler", BANK_CREATE);
64}
65
66
67/*==========================================================================================*/
68
69public mysql_query_handler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
70{
71 if(failstate != TQUERY_SUCCESS) server_print("[MySQL] SQL error [%d]: %s", errnum, error);
72}
73
74public auth_status_change(pID, new_status, old_status, uID)
75{
76 server_print("[Bank] StatusChange %d -> %d for %d", old_status, new_status, uID);
77 if(new_status == AUTH_SUCCESS) {
78 bank_withdraw(pID, uID);
79 } else if(old_status == AUTH_SUCCESS) {
80 bank_deposit(pID, uID);
81 }
82}
83
84/*==========================================================================================*/
85
86bank_deposit(pID, uID)
87{
88 new query[1024];
89 new ammo = zp_ammopacks_get(pID);
90 new money = cs_get_user_money(pID);
91 new res;
92
93 // updating information
94 ExecuteForward(fwd_bank_save, res, pID, uID, ammo, money);
95 ammo = zp_ammopacks_get(pID);
96 money = cs_get_user_money(pID);
97
98 format(query, charsmax(query), "REPLACE INTO zp_bank(uID, ammo, money) VALUES(%d, %d, %d);", uID, ammo, money);
99 zp_ammopacks_set(pID, 0);
100
101 SQL_ThreadQuery(db_tuple, "mysql_query_handler", query);
102}
103
104bank_withdraw(pID, uID)
105{
106 new query[1024];
107 new data[1]; data[0]=pID;
108
109 format(query, charsmax(query), "SELECT uID, ammo, money FROM zp_bank WHERE uID=%d;", uID);
110
111 SQL_ThreadQuery(db_tuple, "mysql_withdraw", query, data, 1);
112}
113
114public mysql_withdraw(failstate, Handle:query_results, error[], errnum, data[], size, Float:queuetime)
115{
116 if(failstate != TQUERY_SUCCESS) {
117 server_print("[MySQL] SQL error [%d]: %s", errnum, error);
118 return;
119 }
120
121 new results[BankRecord];
122 if(SQL_MoreResults(query_results)) {
123 results = parse_results(query_results);
124 }
125 new res;
126 server_print("uID: %d; pID %d; ammo: %d", results[br_uID], data[0], results[br_ammo] );
127 zp_ammopacks_set(data[0], results[br_ammo]);
128 //cs_set_user_money(data[0], results[br_money]);
129
130 // updating information
131 ExecuteForward(fwd_bank_save, res, data[0], results[br_uID], results[br_ammo], results[br_money]);
132}
133
134parse_results(Handle:sql_results)
135{
136 new results[BankRecord];
137 new parsed = 0;
138
139 results[br_uID] = SQL_ReadResult(sql_results, parsed);
140 parsed += 1;
141 results[br_ammo] = SQL_ReadResult(sql_results, parsed);
142 parsed += 1;
143 results[br_money] = SQL_ReadResult(sql_results, parsed);
144 parsed += 1;
145
146 return results;
147}