· 6 years ago · Apr 10, 2019, 05:10 PM
1/* Plugin generated by AMXX-Studio */
2
3#include <amxmodx>
4#include <sqlx>
5#include <colorchat>
6
7new const nazwy[][] = { "Zlote", "Srebrne", "Brazowe" }
8
9new Handle: g_SqlTuple;
10new gQuery[512];
11
12enum _:staty { KILL, GOLD, SILVER, BRONZE }
13enum _:cvary { HOST, PASS, USER, DBNAME, MIMPLR }
14
15new gStaty[staty][33];
16new gCvary[cvary];
17new gNick[33][33];
18
19new gData[2048], len, gLast;
20
21public plugin_end() SQL_FreeHandle(g_SqlTuple);
22
23public plugin_init() {
24 register_plugin("Medale SQL Ver", "1.2", "byCZEK");
25
26 register_event("DeathMsg", "event_death", "a");
27
28 register_message(SVC_INTERMISSION, "MsgIntermission");
29
30 register_clcmd("say /medale", "MenuMedali");
31 register_clcmd("say_team /medale", "MenuMedali");
32
33 gCvary[HOST] = register_cvar("medale_hostname", "sql.pukawka.pl");
34 gCvary[PASS] = register_cvar("medale_password", "xxx]xx");
35 gCvary[USER] = register_cvar("medale_username", "xx");
36 gCvary[DBNAME] = register_cvar("medale_dbname", "738346_medals");
37 gCvary[MIMPLR] = register_cvar("medale_minp", "3");
38
39 new temp[staty][64];
40
41 get_pcvar_string(gCvary[HOST], temp[HOST], 63);
42 get_pcvar_string(gCvary[PASS], temp[PASS], 63);
43 get_pcvar_string(gCvary[USER], temp[USER], 63);
44 get_pcvar_string(gCvary[DBNAME], temp[DBNAME], 63);
45
46 g_SqlTuple = SQL_MakeDbTuple(temp[HOST], temp[USER], temp[PASS], temp[DBNAME]);
47
48 if(g_SqlTuple == Empty_Handle)
49 set_fail_state("Nie mozna utworzyc uchwytu do polaczenia.");
50
51 new iErr, szError[32];
52 new Handle:link = SQL_Connect(g_SqlTuple, iErr, szError, 31);
53 if(link == Empty_Handle){
54 log_amx("Error (%d): %s", iErr, szError);
55 set_fail_state("Brak polaczenia z baza danych");
56 }
57
58 new Handle:query;
59 query = SQL_PrepareQuery(link,
60 "CREATE TABLE IF NOT EXISTS `medale` ( \
61 `id` int(5) NOT NULL auto_increment, \
62 `nick` varchar(36) NOT NULL, \
63 `kill` INT(11) NOT NULL DEFAULT 0, \
64 `gold` INT(11) NOT NULL DEFAULT 0, \
65 `silver` INT(11) NOT NULL DEFAULT 0, \
66 `bronze` INT(11) NOT NULL DEFAULT 0, \
67 `suma` INT(11) NOT NULL DEFAULT 0, \
68 PRIMARY KEY (`id`) \
69 )");
70 SQL_Execute(query);
71 SQL_FreeHandle(query);
72
73 WczytajMedale();
74}
75
76public plugin_natives()
77{
78 register_native("get_user_orders", "native_guo");
79}
80
81public native_guo(index, which)
82 return gStaty[which][index];
83
84public client_putinserver(id) {
85 Wyczysc(id);
86 get_user_name(id, gNick[id], 32);
87
88 formatex(gQuery, charsmax(gQuery), "SELECT * FROM `medale` WHERE `nick` = ^"%s^" ORDER BY `id` LIMIT 1", gNick[id]);
89 new ids[1]; ids[0] = id;
90 SQL_ThreadQuery(g_SqlTuple, "handleLoadData", gQuery, ids, 1);
91}
92
93public client_disconnect(id) {
94 new suma = gStaty[GOLD][id]*3 + gStaty[SILVER][id]*2 + gStaty[BRONZE][id];
95
96 formatex(gQuery, charsmax(gQuery), "UPDATE `medale` SET `kill` = %d, `gold` = %d, `silver` = %d, `bronze` = %d, `suma` = %d WHERE `nick` = ^"%s^"", gStaty[KILL][id], gStaty[GOLD][id], gStaty[SILVER][id], gStaty[BRONZE][id], suma, gNick[id]);
97 SQL_ThreadQuery(g_SqlTuple, "handleStandard", gQuery);
98
99 Wyczysc(id);
100}
101
102public Wyczysc(id) {
103 for(new i = 0; i < staty; i++)
104 gStaty[i][id] = 0;
105}
106
107public WczytajMedale() {
108 gLast = get_systime();
109 SQL_ThreadQuery(g_SqlTuple, "handeLoadRank", "SELECT * FROM `medale` ORDER BY `suma` DESC LIMIT 15");
110}
111
112public handleLoadData(failstate, Handle:query, error[], errnum, data[], size){
113 if(failstate != TQUERY_SUCCESS){
114 log_amx("SQL Load error: %s",error);
115 return;
116 }
117
118 new id = data[0];
119 if(!is_user_connected(id)) return;
120
121 if(SQL_MoreResults(query)) {
122 gStaty[KILL][id] = SQL_ReadResult(query, 2);
123 gStaty[GOLD][id] = SQL_ReadResult(query, 3);
124 gStaty[SILVER][id] = SQL_ReadResult(query, 4);
125 gStaty[BRONZE][id] = SQL_ReadResult(query, 5);
126 } else {
127 formatex(gQuery, charsmax(gQuery), "INSERT INTO `medale` (`nick`) VALUES (^"%s^")", gNick[id]);
128 SQL_ThreadQuery(g_SqlTuple, "handleStandard", gQuery);
129 }
130}
131
132public handleStandard(failstate, Handle:query, error[], errnum, data[], size) {
133 if(failstate != TQUERY_SUCCESS) {
134 log_amx("SQL Insert error: %s",error);
135 return;
136 }
137}
138
139public event_death() {
140 new kid = read_data(1);
141 new vid = read_data(2);
142
143 if(kid != vid && get_user_team(kid) != get_user_team(vid))
144 gStaty[KILL][kid]++;
145}
146
147public MenuMedali(id) {
148 new m = menu_create("Medale", "MenuMedali_");
149
150 menu_additem(m, "\rTwoje \wMedale");
151 menu_additem(m, "\wRanking");
152
153 menu_setprop(m, MPROP_EXIT, MEXIT_ALL);
154 menu_display(id, m);
155}
156
157public MenuMedali_(id, m, i) {
158 if(i == MENU_EXIT) {
159 menu_destroy(m);
160 return PLUGIN_CONTINUE;
161 }
162
163 switch(i) {
164 case 0: { TwojeMedale(id); }
165 case 1: { RankingMedali(id); }
166 }
167
168 return PLUGIN_CONTINUE;
169}
170
171public TwojeMedale(id) {
172 new m = menu_create("Twoje medale", "TwojeMedale_");
173 new t[128];
174
175 for(new i = 1; i < staty; i++) {
176 formatex(t, charsmax(t), "%s: \r%d", nazwy[i-1], gStaty[i][id]);
177 menu_additem(m, t);
178 }
179
180 menu_display(id, m);
181}
182
183public TwojeMedale_(id, m) menu_destroy(m);
184
185public RankingMedali(id) {
186 if(get_systime() - gLast > 20) {
187 WczytajMedale();
188 }
189
190 show_motd(id, gData, "Top 15 Medali");
191}
192
193public handeLoadRank(failstate, Handle:query, error[], errnum, data[], size) {
194 if(failstate != TQUERY_SUCCESS) {
195 log_amx("SQL Load error: %s",error);
196 return;
197 }
198
199 new nick[33], medale[4], i = 0;
200 len = formatex(gData, charsmax(gData), "<body bgcolor=#000000><font color=#FFB000><pre>%2s %-22.22s %6s %8s %8s %5s^n", "#", "Nick", nazwy[0], nazwy[1], nazwy[2], "Suma");
201
202 while(SQL_MoreResults(query)) {
203 i++;
204 SQL_ReadResult(query, 1, nick, 32);
205
206 medale[0] = SQL_ReadResult(query, 3);
207 medale[1] = SQL_ReadResult(query, 4);
208 medale[2] = SQL_ReadResult(query, 5);
209
210 medale[3] = medale[0] + medale[1] + medale[2];
211
212 replace_all(nick, charsmax(nick), "<", "[");
213 replace_all(nick, charsmax(nick), ">", "]");
214
215 len += formatex(gData[len], charsmax(gData) - len, "%2d %-22.22s %6d %8d %8d %5d^n", i, nick, medale[0], medale[1], medale[2], medale[3]);
216
217 SQL_NextRow(query);
218 }
219}
220
221public MsgIntermission() {
222 new name[33], players[32], best[3], num, id, fragi;
223 get_players(players, num, "h");
224
225 if(num < get_pcvar_num(gCvary[MIMPLR]))
226 return PLUGIN_CONTINUE;
227
228 new const typ[][] = { "Zloty", "Srebrny", "Brazowy" }
229
230 for(new i = 0; i < 3; i++) {
231 for(new j = 0; j < num; j++) {
232 id = players[j];
233
234 if(!is_user_connected(id) || best[0] == id || best[1] == id)
235 continue;
236
237 if(get_user_frags(id) > fragi) {
238 fragi = get_user_frags(id);
239 best[i] = id;
240 }
241 }
242 fragi = 0;
243
244 if(best[i]) {
245 gStaty[1+i][best[i]]++;
246 get_user_name(best[i], name, 32);
247 //ColorChat(0, NORM, "[Medale] %s^x03 -^x04 %s Medal -^x04 %i^x03 Miejsce", name, typ[i], i+1);
248 ColorChat(0, NORMAL, "[^x04Medale^x01] ^x04%s ^x01 | Medal -^x04 %s ^x01| Miejsce -^x04 %i", name, typ[i], i+1);
249 }
250 }
251 return PLUGIN_CONTINUE;
252}