· 8 years ago · Dec 30, 2017, 06:34 PM
1/* Plugin generated by AMXX-Studio */
2
3#include <amxmodx>
4#include <fun>
5#include <engine>
6#include <fakemeta>
7#include <hamsandwich>
8#include <fakemeta_util>
9#include <colorchat>
10#include <fvault>
11#include < sqlx >
12#include < amxmisc >
13
14#define PLUGIN "Weapon Skin System [WSS]"
15#define VERSION "1.0"
16#define AUTHOR "6almasok"
17
18#define IsValidPlayers(%1,%2) ((1 <= %1 <= 32) && (1 <= %2 <= 32))
19
20//#define USE_ICHAT
21
22#if defined USE_ICHAT
23 #include < ichat >
24#endif
25
26#pragma semicolon 1
27
28#define MinOnlineTime 18000
29#define SubPoint 200
30#define MaxRang 19
31
32
33new oles[33],csomag[33], kredit[33],switchbutton[33],knife[33],getfrag[3][33]
34new ModelData[40][64], ModelNum, MaximumBtton
35
36new const File[] = "addons/amxmodx/configs/wss_models.ini"
37new const szVaultName[] = "wss_vault"
38new const prefix[] = "WSS"
39
40/*Rust Kills | Silver Kills | Gold Kills | Veteran Kills | Knife Kredit*/
41new const need_kills[] = { 500, 1000, 2000, 4000, 500 }
42
43/*Pack Names*/
44new const csomagmsg[6][] = { "Nincs","Rozsdás Csomag","Ezüst Csomag","Arany Csomag","Veterán Csomag","Speed Knife" }
45
46new const knifedisenable[2][] = { "Kikapcsolva", "Bekapcsolva" }
47
48new const menuszoveg[][][] = {
49 {"Rozsdás Csomag \r[MEGSZEREZVE]", "\dRozsdás Csomag \r[%i/%i Ölés]"}, //0
50 {"Ezüst Csomag \r[MEGSZEREZVE]", "\dEzüst Csomag \r[%i/%i Ölés]"}, //1
51 {"Arany Csomag \r[MEGSZEREZVE]", "\dArany Csomag \r[%i/%i Ölés]"}, //2
52 {"Veterán Csomag \r[MEGSZEREZVE]", "\dVeterán Csomag \r[%i/%i Ölés]"}, //3
53 {"Speed Knife \r[MEGSZEREZVE]^n", "\dSpeed Knife \r[%i/%i Ölés]^n"}, //4
54 {"\ySkin Csomagok \r[KIKAPCSOLVA]", "\ySkin Csomagok \r[BEKAPCSOLVA]"} //5
55}
56new const chatszoveg[10][] =
57{
58 "^4[%s]^1 FEJLÖVÉS!^3 %s ^1megöléséért kaptál ^3+%i^1 ölést!",
59 "^4[%s]^3 %s ^1megöléséért kaptál ^3+%i^1 ölést!",
60 "^4[%s]^3 %s ^1kapott ^3+1 ^1ölést ember lesebzésért!",
61 "^4[%s]^1 Találtál^3 +%i^1 kreditet a csomagbol!",
62 "^4[%s]^1 Kiválasztottad a(z)^3 %s^1-ot!",
63 "^4[%s]^1 Sajnos nincs elég ölésed!",
64 "^4[%s]^1 Kikapcsoltad a Skin Csomagokat!",
65 "^4[%s]^1 Bekapcsoltad a Skin Csomagokat!",
66 "^4[%s]^1 A Szerveren Jelenleg a(z) ^3Weapon Skin System^1 fut. Megnyitáshoz Ä‚Ârd be ^3/menu^1.",
67 "^4[%s]^1 Sajnos nincs elég kredited!"
68}
69new const g_sPrefix[ ] = "Prefix";
70
71new const g_sTable[ ] = "rang_system_new";
72new const g_sSQL_INFOS[ ][ ] =
73{
74 "Host", // HOST
75 "Username", // USERNAME
76 "Password", // PASSWORD
77 "DB" // DATABASE
78};
79new Handle: g_iSqlTuple;
80
81enum _:ePlayerInfos { iOnlineTime, iOnlineTimeW, iKills, iDeaths, iPoints, iFCTime, sPrefix[ 16 ] };
82enum _:eRangInfos { sRangName[ 32 ], iRangPoint };
83
84new g_iUserData[ 33 ][ ePlayerInfos ];
85new const g_iRangs[ MaxRang ][ eRangInfos ] =
86{
87 { "Ăšjonc", 0 },
88 { "Honvéd", 300 },
89 { "Õrvezetõ", 500 },
90 { "Tizedes", 700 },
91 { "Szakaszvezetõ", 900 },
92 { "Õrmester", 1100 },
93 { "Törzsõrmester", 1400 },
94 { "Fõtörzsõrmester", 1700 },
95 { "Hadnagy", 2100 },
96 { "Fõhadnagy", 2600 },
97 { "Százados", 3300 },
98 { "Õrnagy", 4000 },
99 { "Alezredes", 4600 },
100 { "Ezredes", 5300 },
101 { "Dandártábornok", 6500 },
102 { "Vezérnagy", 8000 },
103 { "Altábornok", 10000 },
104 { "Vezérezredes", 12000 },
105 { "Egyedi prefix", 15000 }
106};
107new g_iRoundKills[ 33 ], g_iRang[ 33 ], g_sAuthID[ 33 ][ 32 ], g_sUsername[ 33 ][ 32 ], bool: g_bHud[ 33 ];
108
109public plugin_init() {
110 register_plugin(PLUGIN, VERSION, AUTHOR)
111
112 /* Client Command */
113 register_clcmd("say /menu" , "fomenu")
114
115 /* Events */
116 register_event("CurWeapon", "changeweapon", "be", "1=1")
117 register_event("Damage", "sebzes_event", "be", "2!0", "3=0", "4!0")
118 register_event("DeathMsg","Halal","a")
119
120 /* Cvars */
121 register_cvar("wss_hudenable", "1");
122 register_cvar("wss_advertmp", "40.0");
123 register_cvar("kill_recived", "1");
124 register_cvar("hs_recived", "2");
125 register_cvar("found_kredit", "1");
126
127 /* Other */
128 register_forward(FM_Touch,"ForwardTouch" );
129 RegisterHam(Ham_Spawn, "player", "spawn_event", 1)
130 set_task(1.0, "infohud", 0, _, _, "b")
131 set_task(get_cvar_float("wss_advertmp"), "advertist", 0, "", 0, "b", 0)
132 register_cvar( "Rang Rendsze", "By Demon", FCVAR_SERVER );
133
134 register_dictionary( "RangSystem.txt" );
135
136 g_iSqlTuple = SQL_MakeDbTuple( g_sSQL_INFOS[ 0 ], g_sSQL_INFOS[ 1 ], g_sSQL_INFOS[ 2 ], g_sSQL_INFOS[ 3 ] );
137
138 new sThread[ 512 ];
139 formatex( sThread, charsmax( sThread ), "CREATE TABLE IF NOT EXISTS `%s` (`authid` varchar(32) NOT NULL,`online_time` INT(11) NOT NULL,`online_timew` INT(11) NOT NULL,`kills` INT(11) NOT NULL,`deaths` INT(11) NOT NULL,`points` INT(11) NOT NULL,`first_con_time` INT(15) NOT NULL,`prefix` varchar(16) NOT NULL,`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY);", g_sTable );
140
141 SQL_ThreadQuery( g_iSqlTuple, "ThreadHandler", sThread, { 0 }, 1 );
142
143 Load( );
144
145 register_event( "SendAudio", "evCTWin", "a", "2&%!MRAD_ctwin" );
146 register_event( "SendAudio", "evTEWin", "a", "2&%!MRAD_terwin" );
147 register_event( "DeathMsg", "evDeath", "a" );
148
149 register_clcmd( "say /hud", "cmdHud" );
150 register_clcmd( "say /rang", "cmdRang" );
151 register_clcmd( "say /myrank", "cmdRang" );
152 register_clcmd( "say /rangok", "cmdRangs" );
153 register_clcmd( "say /ranks", "cmdRangs" );
154 register_clcmd( "say /prefix", "cmdPrefix" );
155 register_clcmd( "reset_prefix", "cmdResetPrefix", ADMIN_RCON, "<jatekos> - Reset prefix." );
156
157 register_concmd( "PREFIX", "GetPrefix" );
158
159 register_forward( FM_ClientUserInfoChanged, "fwClientUserInfoChanged" );
160
161 LoadModel();
162}
163public advertist(){
164 ColorChat(0, GREEN, chatszoveg[8],prefix);
165 return PLUGIN_HANDLED;
166}
167public plugin_precache() {
168
169 new Len, btton[196], Data[64], Letoltes[40][64];
170 MaximumBtton = file_size(File, 1);
171
172 for(new Num = 0; Num < MaximumBtton; Num++){
173 read_file(File, Num, btton, 196, Len);
174 parse(btton, Data, 63);
175 remove_quotes(btton);
176 if(btton[0] == ';')
177 {
178 continue;
179 }
180 remove_quotes(Data);
181 format(Letoltes[Num], 63, "%s", Data);
182 precache_model(Letoltes[Num]);
183 }
184 precache_model("models/wss/pack/kredit.mdl");
185}
186public LoadModel()
187{
188 new Len, btton[196], Data[64];
189 MaximumBtton = file_size(File, 1);
190 for(new Num; Num < MaximumBtton; Num++){
191 ModelNum++;
192 read_file(File, Num, btton, 196, Len);
193 parse(btton, Data, 63);
194 remove_quotes(btton);
195 if(btton[0] == ';')
196 {
197 continue;
198 }
199 remove_quotes(Data);
200 format(ModelData[ModelNum], 63, "%s", Data);
201 }
202}
203public changeweapon(id)
204{
205 if(!is_user_alive(id) || !is_user_connected(id) || id < 1 || id > 32 || switchbutton[id] == 1)
206 return
207
208 new fegyver = get_user_weapon(id)
209
210 if(csomag[id] == 1){
211 if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[1]) //Rozsdas ak
212 if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[2]) //Rozsdas awp
213 if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[3]) //Rozsdas desi
214 if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[4]) //Rozsdas m4
215 }
216 else if(csomag[id] == 2){
217 if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[5]) //ezust ak
218 if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[6]) //ezust awp
219 if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[7]) //ezust desi
220 if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[8]) //ezust m4
221 }
222 else if(csomag[id] == 3){
223 if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[9]) //arany ak
224 if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[10]) //arany awp
225 if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[11]) //arany desi
226 if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[12]) //arany m4
227 }
228 else if(csomag[id] == 4){
229 if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[13]) //veteran ak
230 if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[14]) //veteran awp
231 if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[15]) //veteran desi
232 if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[16]) //veteran m4
233 }
234 if(knife[id] == 1 && fegyver == CSW_KNIFE){
235
236 set_user_maxspeed(id, Float:320.0)
237 set_pev(id, pev_viewmodel2, ModelData[17]) //knife
238 }
239
240}
241public spawn_event(id){
242 getfrag[0][id] = 0;
243 getfrag[1][id] = 0;
244 getfrag[2][id] = 0;
245}
246public sebzes_event(id)
247{
248 new tamado = get_user_attacker(id);
249 if(id == tamado || !IsValidPlayers(id, tamado )) return;
250 getfrag[1][tamado] += read_data(2);
251
252 if(!getfrag[2][id] && getfrag[1][tamado] >= 50)
253 {
254 getfrag[0][tamado] = id;
255 getfrag[2][id] = tamado;
256 }
257}
258public Halal() {
259
260 new attacker = read_data(1)
261 new victim = read_data(2)
262
263 new nev[32]
264 get_user_name(victim, nev, charsmax(nev))
265
266 if(attacker == victim || attacker == 0)
267 return PLUGIN_HANDLED
268
269 if(read_data( 3 )){
270 oles[attacker] += get_cvar_num("hs_recived");
271 ColorChat(attacker, GREEN, chatszoveg[0] ,prefix ,nev, get_cvar_num("hs_recived"))
272 }
273 else{
274 oles[attacker] += get_cvar_num("kill_recived");
275 ColorChat(attacker, GREEN, chatszoveg[1],prefix, nev, get_cvar_num("kill_recived"))
276 }
277 if(getfrag[2][victim] && getfrag[2][victim] != attacker){
278 new fragetkap = getfrag[2][victim];
279 new fragetkapneve[32];
280 getfrag[0][fragetkap] = 0;
281 getfrag[1][fragetkap] = 0;
282 getfrag[2][victim] = 0;
283 get_user_name(fragetkap, fragetkapneve, charsmax(fragetkapneve));
284 oles[fragetkap]++
285 ColorChat(0, GREEN, chatszoveg[2],prefix ,fragetkapneve);
286 }
287 switch(random_num(1,3)){
288 case 1: dropdobas()
289 }
290 return PLUGIN_HANDLED;
291}
292public dropdobas()
293{
294 new victim = read_data( 2 );
295
296 static Float:origin[ 3 ];
297 pev( victim, pev_origin, origin );
298
299 new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );
300 origin[ 2 ] -= 36;
301 engfunc( EngFunc_SetOrigin, ent, origin );
302
303 if( !pev_valid( ent ) )
304 {
305 return PLUGIN_HANDLED;
306 }
307
308 set_pev( ent, pev_classname, "kredit" );
309 engfunc( EngFunc_SetModel, ent, "models/wss/pack/kredit.mdl" );
310 dllfunc( DLLFunc_Spawn, ent );
311 set_pev( ent, pev_solid, SOLID_BBOX );
312 set_pev( ent, pev_movetype, MOVETYPE_NONE );
313 engfunc( EngFunc_SetSize, ent, Float:{ -23.160000, -13.660000, -0.050000 }, Float:{ 11.470000, 12.780000, 6.720000 } );
314 engfunc( EngFunc_DropToFloor, ent );
315
316 return PLUGIN_HANDLED;
317}
318public ForwardTouch( ent, id )
319{
320 if(pev_valid(ent))
321 {
322 new classname[ 32 ];
323 pev( ent, pev_classname, classname, charsmax( classname ) );
324
325 if( !equal( classname, "kredit") )
326 {
327 return FMRES_IGNORED;
328 }
329
330 kredit[id] += get_cvar_num("found_kredit");
331 ColorChat(id, GREEN, chatszoveg[3],prefix, get_cvar_num("found_kredit"));
332
333 engfunc( EngFunc_RemoveEntity, ent );
334 }
335 return FMRES_IGNORED
336}
337public logevent_round_start()
338{
339 new hkt = FM_NULLENT;
340 while ( ( hkt = fm_find_ent_by_class( hkt, "kredit") ) )
341 {
342 engfunc( EngFunc_RemoveEntity, hkt );
343 }
344}
345public fomenu(id)
346{
347 new String[96]
348 format(String, charsmax(String), "\r[Weapon Skin System] \wFőmenü^n\yÖlések: \d%i \w|\y Kreditek: \d%i", oles[id],kredit[id])
349 new menu = menu_create(String, "fomenu_MyMenu");
350
351 menu_additem(menu, "Fegyver Skin Csomagok", "0");
352 menu_additem(menu, "Játékos Infók", "1");
353 menu_additem(menu, "Pack Információk", "2");
354
355 menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
356 menu_setprop(menu, MPROP_EXITNAME, "\rKilépés");
357
358 menu_display(id, menu, 0);
359
360 return PLUGIN_HANDLED;
361}
362public fomenu_MyMenu(id, menu, item)
363{
364 if(item == MENU_EXIT)
365 {
366 menu_destroy(menu);
367 return PLUGIN_HANDLED;
368 }
369
370 new command[6], name[64], access, callback;
371 menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
372
373 switch(item)
374 {
375 case 0: fegymenu(id)
376 case 1: playerinfo(id)
377 case 2: show_motd(id, "addons/amxmodx/configs/wssinfo.txt", "[WSS] Infok")
378 }
379
380 menu_destroy(menu);
381
382 return PLUGIN_HANDLED;
383}
384public playerinfo(id)
385{
386 new some[256], menu
387 static players[32],szTemp[10],pnum
388 get_players(players,pnum,"ch");
389
390 formatex(some,255,"\r[Weapon Skin System] \wJátékos \d|\w Ölés \d|\w Kredit");
391 menu = menu_create(some,"pinfo_Handler");
392
393 for (new i; i < pnum; i++)
394 {
395 formatex(some,256,"%s \r(\yÖlése: \w%i \d| \yKreditje: \w%i\r)",get_player_name(players[i]), oles[players[i]],kredit[players[i]]);
396 num_to_str(players[i],szTemp,charsmax(szTemp));
397 menu_additem(menu, some, szTemp);
398 }
399
400 menu_setprop(menu, MPROP_EXIT, MEXIT_ALL );
401 menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
402 menu_display(id, menu);
403 return PLUGIN_HANDLED;
404}
405public pinfo_Handler(id,menu, item)
406{
407 if(item == MENU_EXIT)
408 {
409 menu_destroy(menu);
410 return;
411 }
412
413 playerinfo(id)
414}
415public fegymenu(id)
416{
417 new String[96]
418 format(String, charsmax(String), "\r[Weapon Skin System] \wSkin csomagok^n\yKiválasztott Csomag: \d[%s]", csomagmsg[csomag[id]])
419 new menu = menu_create(String, "fegymenu_handler" )
420
421 format(String, charsmax(String), oles[id] >= need_kills[0] ? (menuszoveg[0][0]):(menuszoveg[0][1]), oles[id], need_kills[0]);
422 menu_additem(menu, String, "0" );
423 formatex(String, charsmax(String), oles[id] >= need_kills[1] ? (menuszoveg[1][0]):(menuszoveg[1][1]), oles[id], need_kills[1]);
424 menu_additem(menu, String, "1");
425 formatex(String, charsmax(String), oles[id] >= need_kills[2] ? (menuszoveg[2][0]):(menuszoveg[2][1]), oles[id], need_kills[2]);
426 menu_additem(menu, String, "2");
427 format(String, charsmax(String), oles[id] >= need_kills[3] ? (menuszoveg[3][0]):(menuszoveg[3][1]), oles[id], need_kills[3]);
428 menu_additem(menu, String, "3");
429 formatex(String, charsmax(String), kredit[id] >= need_kills[4] ? (menuszoveg[4][0]):(menuszoveg[4][1]), kredit[id], need_kills[4]);
430 menu_additem(menu, String, "4");
431 menu_additem(menu, switchbutton[id] == 1 ? (menuszoveg[5][0]):(menuszoveg[5][1]), "5");
432
433 menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
434 menu_setprop(menu, MPROP_BACKNAME, "Vissza");
435 menu_setprop(menu, MPROP_NEXTNAME, "Előre");
436 menu_setprop(menu, MPROP_EXITNAME, "Kilépés");
437
438 menu_display(id, menu, 0);
439 return PLUGIN_HANDLED;
440}
441public fegymenu_handler(id, menu, item)
442{
443 if(item == MENU_EXIT)
444 {
445 menu_destroy(menu)
446 return PLUGIN_HANDLED;
447 }
448
449 new command[6], name[64], access, callback;
450 menu_item_getinfo(menu, item, access, command, sizeof command - 1, name, sizeof name - 1, callback);
451
452 switch(item)
453 {
454 case 0: {
455 if(oles[id] >= need_kills[0]) {
456 csomag[id] = 1
457 ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
458 }
459 else {
460 ColorChat(id, GREEN, chatszoveg[5],prefix);
461 }
462 }
463 case 1: {
464 if(oles[id] >= need_kills[1]) {
465 csomag[id] = 2
466 ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
467 }
468 else {
469 ColorChat(id, GREEN, chatszoveg[5],prefix);
470 }
471 }
472 case 2: {
473 if(oles[id] >= need_kills[2]) {
474 csomag[id] = 3
475 ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
476 }
477 else {
478 ColorChat(id, GREEN, chatszoveg[5],prefix);
479 }
480 }
481 case 3: {
482 if(oles[id] >= need_kills[3]) {
483 csomag[id] = 4
484 ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[csomag[id]]);
485 }
486 else {
487 ColorChat(id, GREEN, chatszoveg[5],prefix);
488 }
489 }
490 case 4: {
491 if(kredit[id] >= need_kills[4]) {
492 knife[id] = 1
493 ColorChat(id, GREEN, chatszoveg[4],prefix, csomagmsg[5]);
494 }
495 else {
496 ColorChat(id, GREEN, chatszoveg[9],prefix);
497 }
498 }
499 case 5: {
500 if(switchbutton[id] == 0){
501 switchbutton[id] = 1
502 csomag[id] = 0
503 knife[id] = 0
504 ColorChat(id, GREEN, chatszoveg[6],prefix);
505 }
506 else {
507 switchbutton[id] = 0
508 ColorChat(id, GREEN, chatszoveg[7],prefix);
509 }
510 }
511 case 6: {
512 ColorChat(id, GREEN, chatszoveg[5],prefix);
513 }
514 }
515
516 fegymenu(id)
517 return PLUGIN_HANDLED;
518}
519public infohud() {
520
521 if(!get_cvar_num("wss_hudenable")) return PLUGIN_HANDLED
522
523 static id
524 for(id = 1; id <= get_maxplayers(); id++)
525 {
526 if(is_user_alive(id)){
527 set_hudmessage(0, 127, 255, 0.01, 0.20, 0, 6.0, 1.0)
528 show_hudmessage(id, "[Ölés: %i]^n[Kredit: %i]^n[Kiválasztott Csomag: %s]^n[Speed Knife: %s]", oles[id],kredit[id],csomagmsg[csomag[id]], knifedisenable[knife[id]])
529 }
530 else{
531 new target = entity_get_int(id, EV_INT_iuser2);
532
533 if(!target)
534 return PLUGIN_CONTINUE;
535
536 set_hudmessage(255, 255, 255, 0.01, 0.20, 0, 6.0, 1.0)
537 show_hudmessage(id, "[Ölés: %i]^n[Kredit: %i]^n[Kiválasztott Csomag: %s]^n[Speed Knife: %s]", oles[target],kredit[target],csomagmsg[csomag[target]], knifedisenable[knife[target]])
538 }
539 }
540 return PLUGIN_CONTINUE;
541}
542stock get_player_name(id){
543 static szName[32];
544 get_user_name(id,szName,31);
545 return szName;
546}
547public client_disconnect(id){
548 if(is_user_bot(id)) return;
549
550 save(id);
551}
552public client_putinserver( id ) {
553 if(is_user_bot(id)) return;
554
555 oles[id] = 0;
556 kredit[id] = 0;
557 csomag[id] = 0;
558 switchbutton[id] = 0;
559 load(id);
560}
561load(id) {
562 new szAuthid[32], szData[32];
563 get_user_name( id, szAuthid, charsmax(szAuthid));
564 new s1[16],s2[16],s3[16],s4[16]
565 fvault_get_data( szVaultName, szAuthid, szData, 31 );
566 parse( szData, s1, 15, s2, 15 , s3 , 15, s4 ,15);
567 oles[id] = str_to_num(s1);
568 kredit[id] = str_to_num(s2);
569 csomag[id] = str_to_num(s3);
570 switchbutton[id] = str_to_num(s4);
571}
572save(id) {
573 new szAuthid[ 32 ], szData[ 32 ];
574 get_user_name( id, szAuthid, charsmax(szAuthid));
575
576 formatex( szData, 31, "%i %i %i %i", oles[id], kredit[id], csomag[id], switchbutton[id]);
577 fvault_set_data( szVaultName, szAuthid, szData );
578}
579public plugin_natives( )
580{
581 register_library( "rang_sys" );
582 register_native( "get_user_rang", "_get_rang", 1 );
583}
584
585public _get_rang( iPlayerId, sRang[ ], iLen )
586{
587 param_convert( 2 );
588 if ( g_iRang[ iPlayerId ] >= MaxRang ) copy( sRang, iLen, g_iUserData[ iPlayerId ][ sPrefix ] );
589 else copy( sRang, iLen, g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
590}
591
592public SaveDatas( iPlayerId, iMode )
593{
594 static sText[ 512 ];
595
596 if ( iMode == 1 ) formatex( sText, charsmax( sText ), "INSERT INTO `%s` (`authid`,`first_con_time`,`prefix`) VALUES (^"%s^",^"%d^",^"%s^");", g_sTable, g_sAuthID[ iPlayerId ], get_systime( ), g_iRangs[ MaxRang - 1 ][ sRangName ] );
597 else if ( iMode == 2 ) formatex( sText, charsmax( sText ), "UPDATE `%s` SET online_time = ^"%d^", online_timew = ^"%d^", kills = ^"%d^", deaths = ^"%d^", points = ^"%d^", prefix = ^"%s^" WHERE authid = ^"%s^";", g_sTable, g_iUserData[ iPlayerId ][ iOnlineTime ], g_iUserData[ iPlayerId ][ iOnlineTimeW ], g_iUserData[ iPlayerId ][ iKills ], g_iUserData[ iPlayerId ][ iDeaths ], g_iUserData[ iPlayerId ][ iPoints ], g_iUserData[ iPlayerId ][ sPrefix ], g_sAuthID[ iPlayerId ] );
598 else if ( iMode == 3 ) formatex( sText, charsmax( sText ), "UPDATE `%s` SET online_timew = ^"0^";", g_sTable );
599 else formatex( sText, charsmax( sText ), "UPDATE `%s` SET points = points - %d WHERE %d - first_con_time > 604799 AND online_timew < %d AND points > %d;", g_sTable, SubPoint, get_systime( ), MinOnlineTime, ( SubPoint - 1 ) );
600
601 SQL_ThreadQuery( g_iSqlTuple, "ThreadHandler", sText, { 0 }, 1 );
602}
603
604public LoadDatas( iPlayerId )
605{
606 static sText[ 128 ], iArray[ 1 ];
607
608 formatex( sText, charsmax( sText ), "SELECT * FROM `%s` WHERE authid = ^"%s^";", g_sTable, g_sAuthID[ iPlayerId ] );
609 iArray[ 0 ] = iPlayerId;
610
611 SQL_ThreadQuery( g_iSqlTuple, "ThreadHandler", sText, iArray, sizeof ( iArray ) );
612}
613
614public ThreadHandler( iFailState, Handle:iQuery, const sErrorMsg[ ], iErrorCode, const iARRAY[ ], iArraySize, Float:fQueueTime )
615{
616 if ( iFailState == TQUERY_CONNECT_FAILED )
617 {
618 set_fail_state( "Nem tudtam csatlakozni az adatbazishoz." );
619 return;
620 }
621 else if ( iFailState == TQUERY_QUERY_FAILED )
622 {
623 set_fail_state( "Query Error" );
624 return;
625 }
626
627 if ( iErrorCode )
628 {
629 log_amx( "%i - %s", iErrorCode, sErrorMsg );
630 return;
631 }
632
633 new iPlayerId = iARRAY[ 0 ];
634 if ( iPlayerId )
635 {
636 if ( SQL_NumResults( iQuery ) > 0 )
637 {
638 g_iUserData[ iPlayerId ][ iOnlineTime ] = SQL_ReadResult( iQuery, 1 );
639 g_iUserData[ iPlayerId ][ iOnlineTimeW ] = SQL_ReadResult( iQuery, 2 );
640 g_iUserData[ iPlayerId ][ iKills ] = SQL_ReadResult( iQuery, 3 );
641 g_iUserData[ iPlayerId ][ iDeaths ] = SQL_ReadResult( iQuery, 4 );
642 g_iUserData[ iPlayerId ][ iPoints ] = SQL_ReadResult( iQuery, 5 );
643 g_iUserData[ iPlayerId ][ iFCTime ] = SQL_ReadResult( iQuery, 6 );
644 SQL_ReadResult( iQuery, 7, g_iUserData[ iPlayerId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ) );
645
646 g_iRang[ iPlayerId ] = 0;
647 for ( new i; i < MaxRang; ++i ) if ( g_iUserData[ iPlayerId ][ iPoints ] >= g_iRangs[ i ][ iRangPoint ] ) ++g_iRang[ iPlayerId ];
648
649#if defined USE_ICHAT
650 if ( g_iRang[ iPlayerId ] >= MaxRang ) iChatSendCustomData( iPlayerId, 0, g_iUserData[ iPlayerId ][ sPrefix ] );
651 else iChatSendCustomData( iPlayerId, 0, g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
652#endif
653 }
654 else SaveDatas( iPlayerId, 1 );
655 }
656
657 return;
658}
659
660public evCTWin( ) { GivePoint( "CT" ); }
661public evTEWin( ) { GivePoint( "TERRORIST" ); }
662
663public GivePoint( const sTeam[ ] )
664{
665 static iPlayers[ 32 ], iPlrNum, iPlayerId;
666
667 get_players( iPlayers, iPlrNum, "ech", sTeam );
668
669 for ( new i; i < iPlrNum; ++i )
670 {
671 iPlayerId = iPlayers[ i ];
672
673 if ( g_iRoundKills[ iPlayerId ] == 0 ) continue;
674
675 if ( get_playersnum( ) > 11 )
676 {
677 if ( 14400 <= g_iUserData[ iPlayerId ][ iOnlineTimeW ] < 21600 )
678 g_iRoundKills[ iPlayerId ] *= 2;
679 else if ( 21600 <= g_iUserData[ iPlayerId ][ iOnlineTimeW ] < 28800 )
680 g_iRoundKills[ iPlayerId ] *= 3;
681 else if ( g_iUserData[ iPlayerId ][ iOnlineTimeW ] >= 28800 )
682 g_iRoundKills[ iPlayerId ] *= 4;
683 }
684
685 g_iUserData[ iPlayerId ][ iPoints ] += g_iRoundKills[ iPlayerId ];
686 if ( g_iRang[ iPlayerId ] < MaxRang )
687 {
688 if ( g_iUserData[ iPlayerId ][ iPoints ] >= g_iRangs[ g_iRang[ iPlayerId ] ][ iRangPoint ] )
689 {
690 ++g_iRang[ iPlayerId ];
691#if defined USE_ICHAT
692 if ( g_iRang[ iPlayerId ] >= MaxRang ) iChatSendCustomData( iPlayerId, 0, g_iUserData[ iPlayerId ][ sPrefix ] );
693 else iChatSendCustomData( iPlayerId, 0, g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
694#endif
695 }
696 }
697 }
698 arrayset( g_iRoundKills, 0, sizeof( g_iRoundKills ) );
699}
700
701public evDeath( )
702{
703 new iKiller = read_data( 1 );
704 new iVictim = read_data( 2 );
705
706 if ( ( iKiller != iVictim ) && !( get_user_team( iKiller ) == get_user_team( iVictim ) ))
707 {
708 ++g_iUserData[ iKiller ][ iKills ];
709 ++g_iUserData[ iVictim ][ iDeaths ];
710 ++g_iRoundKills[ iKiller ];
711 }
712}
713
714public cmdHud( iPlayerId ) { ChatColor( iPlayerId, "%L", iPlayerId, "HUD", iPlayerId, ( g_bHud[ iPlayerId ] ^= true ) ? "ON" : "OFF" ); }
715
716public cmdRang( iPlayerId )
717{
718 static sCurRang[ 32 ], sNextRang[ 32 ], iLen = 0, sMotd[ 2048 ], iMotdLen = charsmax( sMotd ), iTime;
719 copy( sCurRang, charsmax( sCurRang ), g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
720
721 iTime = get_systime( ) - g_iUserData[ iPlayerId ][ iFCTime ];
722
723 if ( g_iRang[ iPlayerId ] >= MaxRang )
724 format( sCurRang, charsmax( sCurRang ), "%s (%s)", sCurRang, g_iUserData[ iPlayerId ][ sPrefix ] );
725
726 if ( g_iRang[ iPlayerId ] < MaxRang )
727 copy( sNextRang, charsmax( sNextRang ), g_iRangs[ g_iRang[ iPlayerId ] ][ sRangName ] );
728
729 iLen = formatex( sMotd, iMotdLen, "<meta charset=utf-8><body bgcolor=#000000><font color=#FFB000><pre>" );
730 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD0", iTime / 3600,( iTime / 60 ) % 60, iTime % 60 );
731 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD1", g_iUserData[ iPlayerId ][ iOnlineTime ] / 3600,(g_iUserData[ iPlayerId ][ iOnlineTime ] / 60 ) % 60, g_iUserData[ iPlayerId ][ iOnlineTime ] % 60 );
732 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD2", g_iUserData[ iPlayerId ][ iOnlineTimeW ] / 3600, (g_iUserData[ iPlayerId ][ iOnlineTimeW ] / 60 ) % 60, g_iUserData[ iPlayerId ][ iOnlineTimeW ] % 60 );
733 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n%L^n%L^n", iPlayerId, "MOTD3", g_iUserData[ iPlayerId ][ iKills ], iPlayerId, "MOTD4", g_iUserData[ iPlayerId ][ iDeaths ], iPlayerId, "MOTD5", g_iUserData[ iPlayerId ][ iPoints ] );
734
735 if ( g_iRang[ iPlayerId ] >= MaxRang ) iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n^n", iPlayerId, "MOTD6", sCurRang );
736 else iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n%L^n^n", iPlayerId, "MOTD6", sCurRang, iPlayerId, "MOTD7", sNextRang, ( g_iRangs[ g_iRang[ iPlayerId ] ][ iRangPoint ] - g_iUserData[ iPlayerId ][ iPoints ] ) );
737
738 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD8", MinOnlineTime / 3600 );
739 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD9" );
740 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD13" );
741 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L", iPlayerId, "MOTD10" );
742
743 show_motd( iPlayerId, sMotd, "Rangrendszer info" );
744}
745
746public cmdRangs( iPlayerId )
747{
748 static sRang[ 32 ], iLen = 0, sMotd[ 2048 ], iMotdLen = charsmax( sMotd );
749
750 iLen = formatex( sMotd, iMotdLen, "<meta charset=utf-8><style>table{color:#FFB000;} td,th{border:1px solid #666;text-align:center;}</style><body bgcolor=#000000><center><h1><font color=#FFB000>%L</h1><br><table width='400'><tr><th>%L</th><th>%L</th><tr>", iPlayerId, "MOTD11", iPlayerId, "RANG", iPlayerId, "MOTD12" );
751
752 for ( new i; i < MaxRang; ++i )
753 {
754 copy( sRang, charsmax( sRang ), g_iRangs[ i ][ sRangName ] );
755
756 if ( i < g_iRang[ iPlayerId ] - 1 )
757 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr><td>%s</td><td>0</td><tr>", sRang );
758 else if ( i == g_iRang[ iPlayerId ] - 1 )
759 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr style='background-color:#666;'><td>%s</td><td>0</td><tr>", sRang );
760 else
761 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr><td>%s</td><td>%d</td><tr>", sRang, ( g_iRangs[ i ][ iRangPoint ] - g_iUserData[ iPlayerId ][ iPoints ] ) );
762 }
763
764 show_motd( iPlayerId, sMotd, "Rangrendszer info" );
765}
766
767public cmdPrefix( iPlayerId )
768{
769 if ( g_iRang[ iPlayerId ] < MaxRang )
770 {
771 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX1" );
772 return;
773 }
774 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX2" );
775 client_cmd( iPlayerId, "messagemode PREFIX" );
776}
777
778public cmdResetPrefix( iPlayerId, iLevel, iCid )
779{
780 if ( !cmd_access( iPlayerId, iLevel, iCid, 2 ) ) return PLUGIN_HANDLED;
781
782 static sUser[ 32 ], iPlrId;
783 read_argv( 1, sUser, charsmax( sUser ) );
784
785 iPlrId = cmd_target( iPlayerId, sUser, ( CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF ) );
786
787 if ( !iPlrId )
788 {
789 ChatColor( iPlayerId, "Nincs %s nevezetű játékos.", sUser );
790 return PLUGIN_HANDLED;
791 }
792
793 copy( g_iUserData[ iPlrId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ), g_iRangs[ MaxRang - 1 ][ sRangName ] );
794
795#if defined USE_ICHAT
796 iChatSendCustomData( iPlrId, 0, g_iRangs[ MaxRang - 1 ][ sRangName ] );
797#endif
798
799 ChatColor( iPlayerId, "Sikeresen resetelted a jatekos prefixet." );
800
801 return PLUGIN_CONTINUE;
802}
803
804public GetPrefix( iPlayerId )
805{
806 if ( g_iRang[ iPlayerId ] < MaxRang ) return PLUGIN_HANDLED;
807
808 static sString[ 17 ], iLen;
809 read_args( sString, charsmax( sString ) );
810 remove_quotes( sString );
811
812 replace_all( sString, charsmax( sString ), "'", "" );
813 replace_all( sString, charsmax( sString ), "^"", "" );
814 replace_all( sString, charsmax( sString ), "`", "" );
815
816 iLen = strlen( sString );
817
818 if ( iLen < 3 || iLen > 15 )
819 {
820 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX3" );
821
822 return PLUGIN_HANDLED;
823 }
824 format( sString, charsmax( sString ), "%s", sString );
825 copy( g_iUserData[ iPlayerId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ), sString );
826#if defined USE_ICHAT
827 iChatSendCustomData( iPlayerId, 0, sString );
828#endif
829 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX4", sString );
830
831 return PLUGIN_CONTINUE;
832}
833
834public fwClientUserInfoChanged( iPlayerId, iBuffer )
835{
836 if ( !is_user_connected( iPlayerId ) ) return FMRES_IGNORED;
837
838 static sOldName[ 32 ], sNewName[ 32 ];
839 get_user_name( iPlayerId, sOldName, charsmax( sOldName ) );
840
841 engfunc( EngFunc_InfoKeyValue, iBuffer, "name", sNewName, charsmax( sNewName ) );
842
843 if ( equal( sNewName, sOldName ) ) return FMRES_IGNORED;
844
845 engfunc( EngFunc_SetClientKeyValue, iPlayerId, iBuffer, "name", sOldName );
846 client_cmd( iPlayerId, "name ^"%s^"; setinfo name ^"%s^"", sOldName, sOldName );
847
848 return FMRES_SUPERCEDE;
849}
850
851public OnlineTimeCounter( iPlayerId )
852{
853 ++g_iUserData[ iPlayerId ][ iOnlineTime ];
854 ++g_iUserData[ iPlayerId ][ iOnlineTimeW ];
855
856 if ( g_bHud[ iPlayerId ] )
857 {
858 if ( !is_user_alive( iPlayerId ) )
859 {
860 set_hudmessage( 0, 255, 0, 0.01, 0.20, 0, 6.0, 0.9 );
861 new iTarget = entity_get_int( iPlayerId, EV_INT_iuser2 );
862
863 if ( iTarget != 0 )
864 {
865 show_hudmessage( iPlayerId, "%L^n%L^n%L^n%L^n%L^n%L^n%L", iPlayerId, "HUD1",
866 g_sUsername[ iTarget ], iPlayerId, "HUD2",
867 g_iUserData[ iTarget ][ iOnlineTime ] / 3600,( g_iUserData[ iTarget ][ iOnlineTime ] / 60 ) % 60, g_iUserData[ iTarget ][ iOnlineTime ] % 60, iPlayerId, "HUD3",
868 g_iUserData[ iTarget ][ iOnlineTimeW ] / 3600, ( g_iUserData[ iTarget ][ iOnlineTimeW ] / 60 ) % 60, g_iUserData[ iTarget ][ iOnlineTimeW ] % 60, iPlayerId, "HUD4",
869 g_iUserData[ iTarget ][ iKills ], iPlayerId, "HUD5", g_iUserData[ iTarget ][ iDeaths ], iPlayerId, "HUD6", g_iRangs[ g_iRang[ iTarget ] - 1 ][ sRangName ], g_iUserData[ iTarget ][ iPoints ], iPlayerId, "MOTD10" );
870 }
871 else
872 {
873 show_hudmessage( iPlayerId, "%L^n%L^n%L^n%L^n%L^n%L^n%L", iPlayerId, "HUD7", iPlayerId, "HUD2",
874 g_iUserData[ iPlayerId ][ iOnlineTime ] / 3600,( g_iUserData[ iPlayerId ][ iOnlineTime ] / 60 ) % 60, g_iUserData[ iPlayerId ][ iOnlineTime ] % 60, iPlayerId, "HUD3",
875 g_iUserData[ iPlayerId ][ iOnlineTimeW ] / 3600, ( g_iUserData[ iPlayerId ][ iOnlineTimeW ] / 60 ) % 60, g_iUserData[ iPlayerId ][ iOnlineTimeW ] % 60, iPlayerId, "HUD4",
876 g_iUserData[ iPlayerId ][ iKills ], iPlayerId, "HUD5", g_iUserData[ iPlayerId ][ iDeaths ], iPlayerId, "HUD6", g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ], g_iUserData[ iPlayerId ][ iPoints ], iPlayerId, "MOTD10" );
877 }
878 }
879 }
880}
881
882public Save( iNum )
883{
884 new sNewLine[ 16 ];
885
886 formatex( sNewLine, charsmax( sNewLine ), "^"%d^"", iNum );
887 write_file( "addons/amxmodx/configs/rangsys.ini", sNewLine, 0 );
888}
889
890public Load( )
891{
892 new pFile = fopen( "addons/amxmodx/configs/rangsys.ini", "rt" );
893
894 if ( pFile )
895 {
896 new sLine[ 16 ], sTime[ 64 ], iNum;
897 fgets( pFile, sLine, charsmax( sLine ) );
898
899 trim( sLine );
900 remove_quotes( sLine );
901
902 iNum = str_to_num( sLine );
903
904 get_time( "%a", sTime, charsmax( sTime ) );
905
906 if ( equal( sTime, "Mon" ) )
907 {
908 if ( iNum == 0 )
909 {
910 SaveDatas( 0, 4 );
911 Save( 1 );
912 set_task( 2.5, "ResetOTimeW" );
913 }
914 }
915 else { if ( iNum == 1 ) Save( 0 ); }
916
917 fclose(pFile);
918 }
919 else Save( 0 );
920}
921
922public ResetOTimeW( ) { SaveDatas( 0, 3 ); }
923
924public client_putinserver( iPlayerId )
925{
926 if ( is_user_bot( iPlayerId ) || is_user_hltv( iPlayerId ) ) return;
927
928 g_iRoundKills[ iPlayerId ] = 0;
929 g_bHud[ iPlayerId ] = true;
930 g_iRang[ iPlayerId ] = 1;
931
932 arrayset( g_iUserData[ iPlayerId ], 0, sizeof( g_iUserData[ ] ) );
933 copy( g_iUserData[ iPlayerId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ), g_iRangs[ MaxRang - 1 ][ sRangName ] );
934#if defined USE_ICHAT
935 iChatSendCustomData( iPlayerId, 0, g_iRangs[ 0 ][ sRangName ] );
936#endif
937 get_user_name( iPlayerId, g_sUsername[ iPlayerId ], charsmax( g_sUsername[ ] ) );
938 get_user_authid( iPlayerId, g_sAuthID[ iPlayerId ], charsmax( g_sAuthID[ ] ) );
939
940 LoadDatas( iPlayerId );
941 set_task( 1.0, "OnlineTimeCounter", iPlayerId, _, _, "b" );
942}
943
944public client_disconnect( iPlayerId ) { if ( task_exists( iPlayerId ) ) remove_task( iPlayerId ); SaveDatas( iPlayerId, 2 ); }
945public plugin_end( ) { SQL_FreeHandle( g_iSqlTuple ); }
946
947stock ChatColor( iPlayerId, const sMessage[ ], any:... )
948{
949 static iPlrNum, iPlayers[ 32 ], sMsg[ 256 ], iIdMsg, iMsgLen = charsmax( sMsg );
950
951 vformat( sMsg, iMsgLen, sMessage, 3 );
952 format( sMsg, iMsgLen, "!g[%s]!y %s", g_sPrefix, sMsg );
953
954 replace_all( sMsg, iMsgLen, "!g", "^4" );
955 replace_all( sMsg, iMsgLen, "!y", "^1" );
956 replace_all( sMsg, iMsgLen, "!t", "^3" );
957
958 if ( !iIdMsg ) iIdMsg = get_user_msgid( "SayText" );
959
960 if ( iPlayerId )
961 {
962 iPlayers[ 0 ] = iPlayerId;
963 iPlrNum = 1;
964 }
965 else get_players( iPlayers, iPlrNum, "ch" );
966
967 for ( new i, iPId; i < iPlrNum; ++i )
968 {
969 iPId = iPlayers[ i ];
970
971 if ( !is_user_connected( iPId ) ) continue;
972
973 message_begin( MSG_ONE, iIdMsg, _, iPId );
974 write_byte( iPId );
975 write_string( sMsg );
976 message_end( );
977 }
978}