· 8 years ago · Dec 30, 2017, 07:04 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 tabsize 0
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() {
110register_plugin(PLUGIN, VERSION, AUTHOR)
111
112/* Client Command */
113register_clcmd("say /menu" , "fomenu")
114
115/* Events */
116register_event("CurWeapon", "changeweapon", "be", "1=1")
117register_event("Damage", "sebzes_event", "be", "2!0", "3=0", "4!0")
118register_event("DeathMsg","Halal","a")
119
120/* Cvars */
121register_cvar("wss_hudenable", "1");
122register_cvar("wss_advertmp", "40.0");
123register_cvar("kill_recived", "1");
124register_cvar("hs_recived", "2");
125register_cvar("found_kredit", "1");
126
127/* Other */
128register_forward(FM_Touch,"ForwardTouch" );
129RegisterHam(Ham_Spawn, "player", "spawn_event", 1)
130set_task(1.0, "infohud", 0, _, _, "b")
131set_task(get_cvar_float("wss_advertmp"), "advertist", 0, "", 0, "b", 0)
132register_cvar( "Rang Rendsze", "By Demon", FCVAR_SERVER );
133
134register_dictionary( "RangSystem.txt" );
135
136g_iSqlTuple = SQL_MakeDbTuple( g_sSQL_INFOS[ 0 ], g_sSQL_INFOS[ 1 ], g_sSQL_INFOS[ 2 ], g_sSQL_INFOS[ 3 ] );
137
138new sThread[ 512 ];
139formatex( 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
141SQL_ThreadQuery( g_iSqlTuple, "ThreadHandler", sThread, { 0 }, 1 );
142
143Load( );
144
145register_event( "SendAudio", "evCTWin", "a", "2&%!MRAD_ctwin" );
146register_event( "SendAudio", "evTEWin", "a", "2&%!MRAD_terwin" );
147register_event( "DeathMsg", "evDeath", "a" );
148
149register_clcmd( "say /hud", "cmdHud" );
150register_clcmd( "say /rang", "cmdRang" );
151register_clcmd( "say /myrank", "cmdRang" );
152register_clcmd( "say /rangok", "cmdRangs" );
153register_clcmd( "say /ranks", "cmdRangs" );
154register_clcmd( "say /prefix", "cmdPrefix" );
155register_clcmd( "reset_prefix", "cmdResetPrefix", ADMIN_RCON, "<jatekos> - Reset prefix." );
156
157register_concmd( "PREFIX", "GetPrefix" );
158
159register_forward( FM_ClientUserInfoChanged, "fwClientUserInfoChanged" );
160
161LoadModel();
162}
163public advertist(){
164ColorChat(0, GREEN, chatszoveg[8],prefix);
165return PLUGIN_HANDLED;
166}
167public plugin_precache() {
168
169new Len, btton[196], Data[64], Letoltes[40][64];
170MaximumBtton = file_size(File, 1);
171
172for(new Num = 0; Num < MaximumBtton; Num++){
173read_file(File, Num, btton, 196, Len);
174parse(btton, Data, 63);
175remove_quotes(btton);
176if(btton[0] == ';')
177{
178continue;
179}
180remove_quotes(Data);
181format(Letoltes[Num], 63, "%s", Data);
182precache_model(Letoltes[Num]);
183}
184precache_model("models/wss/pack/kredit.mdl");
185}
186public LoadModel()
187{
188new Len, btton[196], Data[64];
189MaximumBtton = file_size(File, 1);
190for(new Num; Num < MaximumBtton; Num++){
191ModelNum++;
192read_file(File, Num, btton, 196, Len);
193parse(btton, Data, 63);
194remove_quotes(btton);
195if(btton[0] == ';')
196{
197continue;
198}
199remove_quotes(Data);
200format(ModelData[ModelNum], 63, "%s", Data);
201}
202}
203public changeweapon(id)
204{
205if(!is_user_alive(id) || !is_user_connected(id) || id < 1 || id > 32 || switchbutton[id] == 1)
206return
207
208new fegyver = get_user_weapon(id)
209
210if(csomag[id] == 1){
211if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[1]) //Rozsdas ak
212if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[2]) //Rozsdas awp
213if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[3]) //Rozsdas desi
214if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[4]) //Rozsdas m4
215}
216else if(csomag[id] == 2){
217if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[5]) //ezust ak
218if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[6]) //ezust awp
219if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[7]) //ezust desi
220if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[8]) //ezust m4
221}
222else if(csomag[id] == 3){
223if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[9]) //arany ak
224if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[10]) //arany awp
225if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[11]) //arany desi
226if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[12]) //arany m4
227}
228else if(csomag[id] == 4){
229if(fegyver == CSW_AK47)set_pev(id, pev_viewmodel2, ModelData[13]) //veteran ak
230if(fegyver == CSW_AWP)set_pev(id, pev_viewmodel2, ModelData[14]) //veteran awp
231if(fegyver == CSW_DEAGLE)set_pev(id, pev_viewmodel2, ModelData[15]) //veteran desi
232if(fegyver == CSW_M4A1)set_pev(id, pev_viewmodel2, ModelData[16]) //veteran m4
233}
234if(knife[id] == 1 && fegyver == CSW_KNIFE){
235
236set_user_maxspeed(id, Float:320.0)
237set_pev(id, pev_viewmodel2, ModelData[17]) //knife
238}
239
240}
241public spawn_event(id){
242getfrag[0][id] = 0;
243getfrag[1][id] = 0;
244getfrag[2][id] = 0;
245}
246public sebzes_event(id)
247{
248new tamado = get_user_attacker(id);
249if(id == tamado || !IsValidPlayers(id, tamado )) return;
250getfrag[1][tamado] += read_data(2);
251
252if(!getfrag[2][id] && getfrag[1][tamado] >= 50)
253{
254getfrag[0][tamado] = id;
255getfrag[2][id] = tamado;
256}
257}
258public Halal() {
259
260new attacker = read_data(1)
261new victim = read_data(2)
262
263new nev[32]
264get_user_name(victim, nev, charsmax(nev))
265
266if(attacker == victim || attacker == 0)
267return PLUGIN_HANDLED
268
269if(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}
273else{
274 oles[attacker] += get_cvar_num("kill_recived");
275 ColorChat(attacker, GREEN, chatszoveg[1],prefix, nev, get_cvar_num("kill_recived"))
276}
277if(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}
287switch(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}
547
548load(id) {
549 new szAuthid[32], szData[32];
550 get_user_name( id, szAuthid, charsmax(szAuthid));
551 new s1[16],s2[16],s3[16],s4[16]
552 fvault_get_data( szVaultName, szAuthid, szData, 31 );
553 parse( szData, s1, 15, s2, 15 , s3 , 15, s4 ,15);
554 oles[id] = str_to_num(s1);
555 kredit[id] = str_to_num(s2);
556 csomag[id] = str_to_num(s3);
557 switchbutton[id] = str_to_num(s4);
558 }
559save(id) {
560 new szAuthid[ 32 ], szData[ 32 ];
561 get_user_name( id, szAuthid, charsmax(szAuthid));
562
563 formatex( szData, 31, "%i %i %i %i", oles[id], kredit[id], csomag[id], switchbutton[id]);
564 fvault_set_data( szVaultName, szAuthid, szData );
565}
566public plugin_natives( )
567{
568 register_library( "rang_sys" );
569 register_native( "get_user_rang", "_get_rang", 1 );
570}
571
572public _get_rang( iPlayerId, sRang[ ], iLen )
573{
574 param_convert( 2 );
575 if ( g_iRang[ iPlayerId ] >= MaxRang ) copy( sRang, iLen, g_iUserData[ iPlayerId ][ sPrefix ] );
576 else copy( sRang, iLen, g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
577}
578
579public SaveDatas( iPlayerId, iMode )
580{
581 static sText[ 512 ];
582
583 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 ] );
584 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 ] );
585 else if ( iMode == 3 ) formatex( sText, charsmax( sText ), "UPDATE `%s` SET online_timew = ^"0^";", g_sTable );
586 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 ) );
587
588 SQL_ThreadQuery( g_iSqlTuple, "ThreadHandler", sText, { 0 }, 1 );
589}
590
591public LoadDatas( iPlayerId )
592{
593 static sText[ 128 ], iArray[ 1 ];
594
595 formatex( sText, charsmax( sText ), "SELECT * FROM `%s` WHERE authid = ^"%s^";", g_sTable, g_sAuthID[ iPlayerId ] );
596 iArray[ 0 ] = iPlayerId;
597
598 SQL_ThreadQuery( g_iSqlTuple, "ThreadHandler", sText, iArray, sizeof ( iArray ) );
599}
600
601public ThreadHandler( iFailState, Handle:iQuery, const sErrorMsg[ ], iErrorCode, const iARRAY[ ], iArraySize, Float:fQueueTime )
602{
603 if ( iFailState == TQUERY_CONNECT_FAILED )
604 {
605 set_fail_state( "Nem tudtam csatlakozni az adatbazishoz." );
606 return;
607 }
608 else if ( iFailState == TQUERY_QUERY_FAILED )
609 {
610 set_fail_state( "Query Error" );
611 return;
612 }
613
614 if ( iErrorCode )
615 {
616 log_amx( "%i - %s", iErrorCode, sErrorMsg );
617 return;
618 }
619
620 new iPlayerId = iARRAY[ 0 ];
621 if ( iPlayerId )
622 {
623 if ( SQL_NumResults( iQuery ) > 0 )
624 {
625 g_iUserData[ iPlayerId ][ iOnlineTime ] = SQL_ReadResult( iQuery, 1 );
626 g_iUserData[ iPlayerId ][ iOnlineTimeW ] = SQL_ReadResult( iQuery, 2 );
627 g_iUserData[ iPlayerId ][ iKills ] = SQL_ReadResult( iQuery, 3 );
628 g_iUserData[ iPlayerId ][ iDeaths ] = SQL_ReadResult( iQuery, 4 );
629 g_iUserData[ iPlayerId ][ iPoints ] = SQL_ReadResult( iQuery, 5 );
630 g_iUserData[ iPlayerId ][ iFCTime ] = SQL_ReadResult( iQuery, 6 );
631 SQL_ReadResult( iQuery, 7, g_iUserData[ iPlayerId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ) );
632
633 g_iRang[ iPlayerId ] = 0;
634 for ( new i; i < MaxRang; ++i ) if ( g_iUserData[ iPlayerId ][ iPoints ] >= g_iRangs[ i ][ iRangPoint ] ) ++g_iRang[ iPlayerId ];
635
636 #if defined USE_ICHAT
637 if ( g_iRang[ iPlayerId ] >= MaxRang ) iChatSendCustomData( iPlayerId, 0, g_iUserData[ iPlayerId ][ sPrefix ] );
638 else iChatSendCustomData( iPlayerId, 0, g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
639 #endif
640 }
641 else SaveDatas( iPlayerId, 1 );
642 }
643
644 return;
645}
646
647public evCTWin( ) { GivePoint( "CT" ); }
648public evTEWin( ) { GivePoint( "TERRORIST" ); }
649
650public GivePoint( const sTeam[ ] )
651{
652 static iPlayers[ 32 ], iPlrNum, iPlayerId;
653
654 get_players( iPlayers, iPlrNum, "ech", sTeam );
655
656 for ( new i; i < iPlrNum; ++i )
657 {
658 iPlayerId = iPlayers[ i ];
659
660 if ( g_iRoundKills[ iPlayerId ] == 0 ) continue;
661
662 if ( get_playersnum( ) > 11 )
663 {
664 if ( 14400 <= g_iUserData[ iPlayerId ][ iOnlineTimeW ] < 21600 )
665 g_iRoundKills[ iPlayerId ] *= 2;
666 else if ( 21600 <= g_iUserData[ iPlayerId ][ iOnlineTimeW ] < 28800 )
667 g_iRoundKills[ iPlayerId ] *= 3;
668 else if ( g_iUserData[ iPlayerId ][ iOnlineTimeW ] >= 28800 )
669 g_iRoundKills[ iPlayerId ] *= 4;
670 }
671
672 g_iUserData[ iPlayerId ][ iPoints ] += g_iRoundKills[ iPlayerId ];
673 if ( g_iRang[ iPlayerId ] < MaxRang )
674 {
675 if ( g_iUserData[ iPlayerId ][ iPoints ] >= g_iRangs[ g_iRang[ iPlayerId ] ][ iRangPoint ] )
676 {
677 ++g_iRang[ iPlayerId ];
678 #if defined USE_ICHAT
679 if ( g_iRang[ iPlayerId ] >= MaxRang ) iChatSendCustomData( iPlayerId, 0, g_iUserData[ iPlayerId ][ sPrefix ] );
680 else iChatSendCustomData( iPlayerId, 0, g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
681 #endif
682 }
683 }
684 }
685 arrayset( g_iRoundKills, 0, sizeof( g_iRoundKills ) );
686}
687
688public evDeath( )
689{
690 new iKiller = read_data( 1 );
691 new iVictim = read_data( 2 );
692
693 if ( ( iKiller != iVictim ) && !( get_user_team( iKiller ) == get_user_team( iVictim ) ))
694 {
695 ++g_iUserData[ iKiller ][ iKills ];
696 ++g_iUserData[ iVictim ][ iDeaths ];
697 ++g_iRoundKills[ iKiller ];
698 }
699}
700
701public cmdHud( iPlayerId ) { ChatColor( iPlayerId, "%L", iPlayerId, "HUD", iPlayerId, ( g_bHud[ iPlayerId ] ^= true ) ? "ON" : "OFF" ); }
702
703public cmdRang( iPlayerId )
704{
705 static sCurRang[ 32 ], sNextRang[ 32 ], iLen = 0, sMotd[ 2048 ], iMotdLen = charsmax( sMotd ), iTime;
706 copy( sCurRang, charsmax( sCurRang ), g_iRangs[ g_iRang[ iPlayerId ] - 1 ][ sRangName ] );
707
708 iTime = get_systime( ) - g_iUserData[ iPlayerId ][ iFCTime ];
709
710 if ( g_iRang[ iPlayerId ] >= MaxRang )
711 format( sCurRang, charsmax( sCurRang ), "%s (%s)", sCurRang, g_iUserData[ iPlayerId ][ sPrefix ] );
712
713 if ( g_iRang[ iPlayerId ] < MaxRang )
714 copy( sNextRang, charsmax( sNextRang ), g_iRangs[ g_iRang[ iPlayerId ] ][ sRangName ] );
715
716 iLen = formatex( sMotd, iMotdLen, "<meta charset=utf-8><body bgcolor=#000000><font color=#FFB000><pre>" );
717 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD0", iTime / 3600,( iTime / 60 ) % 60, iTime % 60 );
718 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 );
719 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 );
720 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 ] );
721
722 if ( g_iRang[ iPlayerId ] >= MaxRang ) iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n^n", iPlayerId, "MOTD6", sCurRang );
723 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 ] ) );
724
725 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD8", MinOnlineTime / 3600 );
726 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD9" );
727 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L^n", iPlayerId, "MOTD13" );
728 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "%L", iPlayerId, "MOTD10" );
729
730 show_motd( iPlayerId, sMotd, "Rangrendszer info" );
731}
732
733public cmdRangs( iPlayerId )
734{
735 static sRang[ 32 ], iLen = 0, sMotd[ 2048 ], iMotdLen = charsmax( sMotd );
736
737 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" );
738
739 for ( new i; i < MaxRang; ++i )
740 {
741 copy( sRang, charsmax( sRang ), g_iRangs[ i ][ sRangName ] );
742
743 if ( i < g_iRang[ iPlayerId ] - 1 )
744 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr><td>%s</td><td>0</td><tr>", sRang );
745 else if ( i == g_iRang[ iPlayerId ] - 1 )
746 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr style='background-color:#666;'><td>%s</td><td>0</td><tr>", sRang );
747 else
748 iLen += formatex( sMotd[ iLen ], iMotdLen - iLen, "<tr><td>%s</td><td>%d</td><tr>", sRang, ( g_iRangs[ i ][ iRangPoint ] - g_iUserData[ iPlayerId ][ iPoints ] ) );
749 }
750
751 show_motd( iPlayerId, sMotd, "Rangrendszer info" );
752}
753
754public cmdPrefix( iPlayerId )
755{
756 if ( g_iRang[ iPlayerId ] < MaxRang )
757 {
758 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX1" );
759 return;
760 }
761 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX2" );
762 client_cmd( iPlayerId, "messagemode PREFIX" );
763}
764
765public cmdResetPrefix( iPlayerId, iLevel, iCid )
766{
767 if ( !cmd_access( iPlayerId, iLevel, iCid, 2 ) ) return PLUGIN_HANDLED;
768
769 static sUser[ 32 ], iPlrId;
770 read_argv( 1, sUser, charsmax( sUser ) );
771
772 iPlrId = cmd_target( iPlayerId, sUser, ( CMDTARGET_OBEY_IMMUNITY | CMDTARGET_ALLOW_SELF ) );
773
774 if ( !iPlrId )
775 {
776 ChatColor( iPlayerId, "Nincs %s nevezetű játékos.", sUser );
777 return PLUGIN_HANDLED;
778 }
779
780 copy( g_iUserData[ iPlrId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ), g_iRangs[ MaxRang - 1 ][ sRangName ] );
781
782 #if defined USE_ICHAT
783 iChatSendCustomData( iPlrId, 0, g_iRangs[ MaxRang - 1 ][ sRangName ] );
784 #endif
785
786 ChatColor( iPlayerId, "Sikeresen resetelted a jatekos prefixet." );
787
788 return PLUGIN_CONTINUE;
789}
790
791public GetPrefix( iPlayerId )
792{
793 if ( g_iRang[ iPlayerId ] < MaxRang ) return PLUGIN_HANDLED;
794
795 static sString[ 17 ], iLen;
796 read_args( sString, charsmax( sString ) );
797 remove_quotes( sString );
798
799 replace_all( sString, charsmax( sString ), "'", "" );
800 replace_all( sString, charsmax( sString ), "^"", "" );
801 replace_all( sString, charsmax( sString ), "`", "" );
802
803 iLen = strlen( sString );
804
805 if ( iLen < 3 || iLen > 15 )
806 {
807 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX3" );
808
809 return PLUGIN_HANDLED;
810 }
811 format( sString, charsmax( sString ), "%s", sString );
812 copy( g_iUserData[ iPlayerId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ), sString );
813 #if defined USE_ICHAT
814 iChatSendCustomData( iPlayerId, 0, sString );
815 #endif
816 ChatColor( iPlayerId, "%L", iPlayerId, "PREFIX4", sString );
817
818 return PLUGIN_CONTINUE;
819}
820
821public fwClientUserInfoChanged( iPlayerId, iBuffer )
822{
823 if ( !is_user_connected( iPlayerId ) ) return FMRES_IGNORED;
824
825 static sOldName[ 32 ], sNewName[ 32 ];
826 get_user_name( iPlayerId, sOldName, charsmax( sOldName ) );
827
828 engfunc( EngFunc_InfoKeyValue, iBuffer, "name", sNewName, charsmax( sNewName ) );
829
830 if ( equal( sNewName, sOldName ) ) return FMRES_IGNORED;
831
832 engfunc( EngFunc_SetClientKeyValue, iPlayerId, iBuffer, "name", sOldName );
833 client_cmd( iPlayerId, "name ^"%s^"; setinfo name ^"%s^"", sOldName, sOldName );
834
835 return FMRES_SUPERCEDE;
836}
837
838public OnlineTimeCounter( iPlayerId )
839{
840 ++g_iUserData[ iPlayerId ][ iOnlineTime ];
841 ++g_iUserData[ iPlayerId ][ iOnlineTimeW ];
842
843 if ( g_bHud[ iPlayerId ] )
844 {
845 if ( !is_user_alive( iPlayerId ) )
846 {
847 set_hudmessage( 0, 255, 0, 0.01, 0.20, 0, 6.0, 0.9 );
848 new iTarget = entity_get_int( iPlayerId, EV_INT_iuser2 );
849
850 if ( iTarget != 0 )
851 {
852 show_hudmessage( iPlayerId, "%L^n%L^n%L^n%L^n%L^n%L^n%L", iPlayerId, "HUD1",
853 g_sUsername[ iTarget ], iPlayerId, "HUD2",
854 g_iUserData[ iTarget ][ iOnlineTime ] / 3600,( g_iUserData[ iTarget ][ iOnlineTime ] / 60 ) % 60, g_iUserData[ iTarget ][ iOnlineTime ] % 60, iPlayerId, "HUD3",
855 g_iUserData[ iTarget ][ iOnlineTimeW ] / 3600, ( g_iUserData[ iTarget ][ iOnlineTimeW ] / 60 ) % 60, g_iUserData[ iTarget ][ iOnlineTimeW ] % 60, iPlayerId, "HUD4",
856 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" );
857 }
858 else
859 {
860 show_hudmessage( iPlayerId, "%L^n%L^n%L^n%L^n%L^n%L^n%L", iPlayerId, "HUD7", iPlayerId, "HUD2",
861 g_iUserData[ iPlayerId ][ iOnlineTime ] / 3600,( g_iUserData[ iPlayerId ][ iOnlineTime ] / 60 ) % 60, g_iUserData[ iPlayerId ][ iOnlineTime ] % 60, iPlayerId, "HUD3",
862 g_iUserData[ iPlayerId ][ iOnlineTimeW ] / 3600, ( g_iUserData[ iPlayerId ][ iOnlineTimeW ] / 60 ) % 60, g_iUserData[ iPlayerId ][ iOnlineTimeW ] % 60, iPlayerId, "HUD4",
863 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" );
864 }
865 }
866 }
867}
868
869public Save( iNum )
870{
871 new sNewLine[ 16 ];
872
873 formatex( sNewLine, charsmax( sNewLine ), "^"%d^"", iNum );
874 write_file( "addons/amxmodx/configs/rangsys.ini", sNewLine, 0 );
875}
876
877public Load( )
878{
879 new pFile = fopen( "addons/amxmodx/configs/rangsys.ini", "rt" );
880
881 if ( pFile )
882 {
883 new sLine[ 16 ], sTime[ 64 ], iNum;
884 fgets( pFile, sLine, charsmax( sLine ) );
885
886 trim( sLine );
887 remove_quotes( sLine );
888
889 iNum = str_to_num( sLine );
890
891 get_time( "%a", sTime, charsmax( sTime ) );
892
893 if ( equal( sTime, "Mon" ) )
894 {
895 if ( iNum == 0 )
896 {
897 SaveDatas( 0, 4 );
898 Save( 1 );
899 set_task( 2.5, "ResetOTimeW" );
900 }
901 }
902 else { if ( iNum == 1 ) Save( 0 ); }
903
904 fclose(pFile);
905 }
906 else Save( 0 );
907}
908
909public ResetOTimeW( ) { SaveDatas( 0, 3 ); }
910
911public client_putinserver( iPlayerId )
912{
913 if ( is_user_bot( iPlayerId ) || is_user_hltv( iPlayerId ) ) return;
914
915 if(is_user_bot(iPlayerId)) return;
916
917 oles[iPlayerId] = 0;
918 kredit[iPlayerId] = 0;
919 csomag[iPlayerId] = 0;
920 switchbutton[iPlayerId] = 0;
921 load(iPlayerId);
922
923 g_iRoundKills[ iPlayerId ] = 0;
924 g_bHud[ iPlayerId ] = true;
925 g_iRang[ iPlayerId ] = 1;
926
927 arrayset( g_iUserData[ iPlayerId ], 0, sizeof( g_iUserData[ ] ) );
928 copy( g_iUserData[ iPlayerId ][ sPrefix ], charsmax( g_iUserData[ ][ sPrefix ] ), g_iRangs[ MaxRang - 1 ][ sRangName ] );
929 #if defined USE_ICHAT
930 iChatSendCustomData( iPlayerId, 0, g_iRangs[ 0 ][ sRangName ] );
931 #endif
932 get_user_name( iPlayerId, g_sUsername[ iPlayerId ], charsmax( g_sUsername[ ] ) );
933 get_user_authid( iPlayerId, g_sAuthID[ iPlayerId ], charsmax( g_sAuthID[ ] ) );
934
935 LoadDatas( iPlayerId );
936 set_task( 1.0, "OnlineTimeCounter", iPlayerId, _, _, "b" );
937}
938
939public client_disconnect( iPlayerId ) {
940 if ( !task_exists( iPlayerId ) || is_user_bot(iPlayerId)) {
941 return
942 }
943 remove_task( iPlayerId )
944 SaveDatas( iPlayerId, 2 )
945
946 save(iPlayerId)
947}
948public plugin_end( ) { SQL_FreeHandle( g_iSqlTuple ); }
949
950stock ChatColor( iPlayerId, const sMessage[ ], any:... )
951{
952 static iPlrNum, iPlayers[ 32 ], sMsg[ 256 ], iIdMsg, iMsgLen = charsmax( sMsg );
953
954 vformat( sMsg, iMsgLen, sMessage, 3 );
955 format( sMsg, iMsgLen, "!g[%s]!y %s", g_sPrefix, sMsg );
956
957 replace_all( sMsg, iMsgLen, "!g", "^4" );
958 replace_all( sMsg, iMsgLen, "!y", "^1" );
959 replace_all( sMsg, iMsgLen, "!t", "^3" );
960
961 if ( !iIdMsg ) iIdMsg = get_user_msgid( "SayText" );
962
963 if ( iPlayerId )
964 {
965 iPlayers[ 0 ] = iPlayerId;
966 iPlrNum = 1;
967 }
968 else get_players( iPlayers, iPlrNum, "ch" );
969
970 for ( new i, iPId; i < iPlrNum; ++i )
971 {
972 iPId = iPlayers[ i ];
973
974 if ( !is_user_connected( iPId ) ) continue;
975
976 message_begin( MSG_ONE, iIdMsg, _, iPId );
977 write_byte( iPId );
978 write_string( sMsg );
979 message_end( );
980 }
981}