· 8 years ago · Mar 04, 2018, 09:26 PM
1#include <amxmodx>
2#include <amxmisc>
3#include <sqlx>
4#include <hamsandwich>
5
6
7#define flag_get(%1,%2) (%1 & (1 << (%2 & 31)))
8#define flag_get_boolean(%1,%2) (flag_get(%1,%2) ? true : false)
9#define flag_set(%1,%2) %1 |= (1 << (%2 & 31))
10#define flag_unset(%1,%2) %1 &= ~(1 << (%2 & 31))
11
12
13new c_SqlHost
14new c_SqlUser
15new c_SqlPass
16new c_SqlDB
17new c_SqlType
18
19new g_Error[512]
20
21
22new Handle:g_SqlTuple
23
24public plugin_init()
25{
26 register_plugin("ZP Ammo Saving", "1.0.5", "wbyokomo")
27
28 register_event("DeathMsg", "event_death", "a")
29 register_logevent("event_round_end", 2, "1=Round_End")
30 register_event("TextMsg","event_round_end","a","2=#Game_Commencing","2=#Game_will_restart_in")
31
32 register_clcmd("say /achievement", "show_medal")
33 register_clcmd("ach", "show_medal")
34 RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage", 1);
35 c_SqlHost = register_cvar( "zp_ammo_bank_host", "linuxclub.ro" )
36 c_SqlUser = register_cvar( "zp_ammo_bank_user", "darkcs_zm" )
37 c_SqlPass = register_cvar( "zp_ammo_bank_pass", "1234567890" )
38 c_SqlDB = register_cvar( "zp_ammo_bank_db", "darkcs_zm" )
39 c_SqlType = register_cvar( "zp_ammo_bank_type", "mysql" )
40
41 if( !_PrepareSQL() )
42 {
43 set_fail_state( "[ZP Ammo Bank] Fail to prepare SQL" )
44 return;
45 }
46
47 //g_maxplayers = get_maxplayers()
48}
49public client_putinserver(id)
50{
51 _LoadSQL(id)
52}
53
54public client_disconnect(id)
55{
56 _SaveSQL(id)
57}
58_PrepareSQL() {
59
60 new host[32], user[32], pass[32], db[32], type[12]
61 get_pcvar_string( c_SqlHost, host, charsmax(host) )
62 get_pcvar_string( c_SqlUser, user, charsmax(user) )
63 get_pcvar_string( c_SqlPass, pass, charsmax(pass) )
64 get_pcvar_string( c_SqlDB, db, charsmax(db) )
65 get_pcvar_string( c_SqlType, type, charsmax(type) )
66
67 new get_type[12]
68 SQL_GetAffinity( get_type, charsmax(get_type) )
69
70 log_amx( "[ZP Ammo Bank] SQL affinity type is %s", get_type )
71
72 if( !equali(get_type, type) )
73 {
74 if( !SQL_SetAffinity(type) )
75 {
76 log_amx( "[ZP Ammo Bank] Failed to set affinity from %s to %s", get_type, type )
77 }
78 }
79
80 g_SqlTuple = SQL_MakeDbTuple( host, user, pass, db )
81
82 if( g_SqlTuple == Empty_Handle )
83 {
84 log_amx( "[ZP Ammo Bank] Failed to create SQL tuple." )
85 return 0;
86 }
87
88 new const queryString[] = "CREATE TABLE IF NOT EXISTS `achievement` (\
89 `auth` VARCHAR(64) NOT NULL,\
90 `ZHunter` INT UNSIGNED NOT NULL,\
91 PRIMARY KEY (`auth`) );"
92
93 new errcode, error[128];
94 new Handle:link = SQL_Connect( g_SqlTuple, errcode, error, charsmax(error) )
95
96 if( link == Empty_Handle )
97 {
98 log_amx( "[ZP Ammo Bank] Failed to connect to database (%d): %s", errcode, error )
99 return 0;
100 }
101
102 new Handle:query = SQL_PrepareQuery( link, "%s", queryString )
103
104 if( !SQL_Execute(query) )
105 {
106 SQL_QueryError( query, error, charsmax(error) )
107 log_amx( "[ZP Ammo Bank] Error creating table: %s", error )
108
109 return 0;
110 }
111 else
112 {
113 server_print( "[ZP Ammo Bank] SQL table successful create!" )
114 }
115
116 SQL_FreeHandle(query)
117 SQL_FreeHandle(link)
118
119 return 1;
120}
121
122_MakeStringSQLSafe( output[], len ) {
123
124 replace_all( output, len, "'", "*" )
125 replace_all( output, len, "^"", "*" ) //" - fix Sublime Text syntax highlight
126 replace_all( output, len, "`", "*" )
127}
128
129_LoadSQL(id) {
130 new Name[64]
131 get_user_name( id, Name, charsmax(Name) )
132
133 _MakeStringSQLSafe( Name, charsmax(Name) )
134
135 new queryString[512]
136
137 new data[2]
138 data[0] = id
139
140 new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
141 if(SqlConnection == Empty_Handle)
142 set_fail_state(g_Error)
143
144 formatex( queryString, charsmax(queryString), "UPDATE `achievement` SET `ZHunter` = '1' WHERE `achievement`.`auth` = '%s';", Name)
145 new Handle:Query = SQL_PrepareQuery(SqlConnection,queryString)
146
147 if(!SQL_Execute(Query))
148 {
149 SQL_QueryError(Query,g_Error,511)
150 }
151
152 while(SQL_MoreResults(Query))
153 {
154
155 //User [ id ] [ g_zh_kill ] = SQL_ReadResult(Query,0);
156 SQL_NextRow(Query)
157 }
158
159 SQL_FreeHandle(Query)
160
161 SQL_FreeHandle(SqlConnection)
162}
163
164_SaveSQL(id) {
165 new data[2]
166 data[0] = id
167
168 new Name[64]
169 get_user_name( id, Name, charsmax(Name) )
170
171 _MakeStringSQLSafe( Name, charsmax(Name) )
172
173 new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
174 if(SqlConnection == Empty_Handle)
175 set_fail_state(g_Error)
176
177 new queryString[ 1024 ];
178
179 formatex( queryString, charsmax(queryString),
180 "INSERT INTO achievement(auth, ZHunter) VALUES ('%s',0) ON DUPLICATE KEY UPDATE auth = VALUES(auth)",
181 Name);
182
183 new Handle:Query = SQL_PrepareQuery(SqlConnection,queryString)
184 if(!SQL_Execute(Query))
185 {
186 SQL_QueryError(Query,g_Error,511)
187 set_fail_state(g_Error)
188 }
189 SQL_FreeHandle(Query)
190
191 SQL_FreeHandle(SqlConnection)
192}
193public QuerySaveData( failstate, Handle:query, error[], errcode, data[], size, Float:queueTime )
194{
195 if( failstate == TQUERY_CONNECT_FAILED )
196 {
197 log_amx( "[ZP Achievement] Failed connecting to save data (%d): %s", errcode, error )
198 }
199 else if( failstate == TQUERY_QUERY_FAILED )
200 {
201 log_amx( "[ZP Achievement] Failed query on save data (%d): %s", errcode, error )
202 }
203 else
204 {
205 }
206}