· 6 years ago · Jan 31, 2020, 06:32 PM
1/* put the line below after all of the includes!
2#pragma newdecls required
3*/
4
5/*
6sv_disable_immunity_alpha 1
7sv_hibernate_when_empty 0
8
9dr_stone
10dr_bandicoot_zn
11deathrun_iceworld_v2fix_csgo
12deathrun_lego_world_final
13deathrun_snowstone
14deathrun_minecraft_b3_fix2
15deathrun_simpsons_ff
16deathrun_minecraftworld_fix
17deathrun_hot_desert_nf
18deathrun_pro_v3_csgo
19Deathrun_Ecliptic
20dr_winterfault-IDM-_DEMO1
21deathrun_classic
22deathrun_dust_2016_hard
23deathrun_helix
24deathrun_nightfury_V1
25deathrun_geometry_v1_n_final_fix
26deathrun_clazsmap_sn
27deathrun_nuke_v2_fix
28deathrun_revolution_beta
29dr_grassy_death_go
30deathrun_aztecan_csgo_v1
31deathrun_blblblblblblbl_ogogo
32deathrun_stone_extended_dz
33deathrun_deluxe_csgo_v2
34deathrun_flatdeath_csgo
35deathrun_holyshit_stable_4
36deathrun_darkwoods_csgo
37deathrun_coldmetal2_go
38deathrun_texture_extreme_v2
39*/
40
41#include <sourcemod>
42#include <sdkhooks>
43#include <cstrike>
44
45#define MAX_PLAYERS 16
46
47int limit_poziomu = 25;
48int co_ile_zapisywac = 30;
49
50int xp_kill = 2;
51int xp_kill_hs = 8;
52int xp_winround = 10;
53
54int xp_kill_vip = 2;
55int xp_kill_hs_vip = 8;
56int xp_winround_vip = 10;
57
58Handle sql;
59
60char nazwa_gracza[65][65];
61
62int vip_gracza[MAX_PLAYERS+1];
63
64int poziom_gracza[MAX_PLAYERS+1], doswiadczenie_gracza[MAX_PLAYERS+1];
65int punkty_gracza[MAX_PLAYERS+1], zdrowie_gracza[MAX_PLAYERS+1], obrazenia_gracza[MAX_PLAYERS+1], wytrzymalosc_gracza[MAX_PLAYERS+1], regeneracjahp_gracza[MAX_PLAYERS+1], niewidzialnosc_gracza[MAX_PLAYERS+1];
66int headshot[MAX_PLAYERS+1];
67int RegeneracjaHPZapis[MAX_PLAYERS+1];
68int freeze_time;
69int ReklamaInfoo[MAX_PLAYERS+1];
70Handle WelcomeTimers[MAXPLAYERS+1];
71Handle VipRespawnTimers[MAXPLAYERS+1];
72
73int g_iAccount = -1;
74int g_iMoney = 0;
75
76Handle sql_task[MAX_PLAYERS+1];
77int zapisz_dane[MAX_PLAYERS+1];
78
79int LiczSkoki[MAX_PLAYERS+1];
80int VipRespawnTak[MAX_PLAYERS+1];
81int VipRespawnRaz[MAX_PLAYERS+1];
82
83int lastplace[MAXPLAYERS+1];
84
85int const doswiadczenie_poziomu[] = {
86 0, 110, 310, 612, 977, 1521, 2129, 2890, 3824, 4840, 5870,
87 6940, 8044, 9527, 11078, 12631, 14376, 16404, 18544, 20766, 23147,
88 25633, 28201, 30815, 33579, 36558
89}
90
91Database stats_db = null;
92int g_iPlayerPlace[MAXPLAYERS+1];
93
94public Plugin myinfo =
95{
96 name = "Deathrun Exp Mod",
97 author = "xBBBay",
98 description = "",
99 version = "1.0",
100 url = "http://steamcommunity.com/id/xbbbay"
101};
102
103public void OnPluginStart()
104{
105 CreateConVar("Deathrun Exp Mod", "1.0", "xBBBay");
106
107 //RegAdminCmd("sm_exp", CmdExp, ADMFLAG_RCON);
108 //RegAdminCmd("sm_lvl", CmdLvl, ADMFLAG_RCON);
109
110 RegConsoleCmd("sm_menu", Command_MENU);
111 RegConsoleCmd("sm_respawn", Command_RESPAWN);
112
113 RegConsoleCmd("say", ChatAll);
114 RegConsoleCmd("say_team", ChatTeam);
115
116 AddCommandListener(HideCommands, "say")
117 AddCommandListener(HideCommands, "say_team")
118
119 HookEvent("round_freeze_end", PoczatekRundy);
120 HookEvent("round_start", NowaRunda);
121 HookEvent("round_end", KoniecRundy);
122
123 HookEvent("player_spawn", PlayerSpawn);
124 HookEvent("player_death", PlayerDeath);
125
126 HookEvent("player_hurt", HookPlayerHurt);
127
128 g_iAccount = FindSendPropInfo("CCSPlayer", "m_iAccount");
129
130 AutoExecConfig(true, "deathrunexpmod", "deathrunexpmod")
131
132 LoadTranslations("common.phrases");
133
134 DataBaseConnect();
135}
136public void OnClientPutInServer(int client)
137{
138 GetClientName(client, nazwa_gracza[client], 64);
139 SDKHook(client, SDKHook_PreThink, Prethink);
140 SDKHook(client, SDKHook_OnTakeDamage, TakeDamage);
141 SDKHook(client, SDKHook_TraceAttack, TraceAttack);
142
143 poziom_gracza[client] = 1;
144 doswiadczenie_gracza[client] = 0;
145 punkty_gracza[client] = 1;
146 zdrowie_gracza[client] = 0;
147 obrazenia_gracza[client] = 0;
148 wytrzymalosc_gracza[client] = 0;
149 regeneracjahp_gracza[client] = 0;
150 RegeneracjaHPZapis[client] = 0;
151 niewidzialnosc_gracza[client] = 0;
152 vip_gracza[client] = 0;
153 ReklamaInfoo[client] = 0;
154 zapisz_dane[client] = 0;
155
156 LiczSkoki[client] = 0;
157
158 WelcomeTimers[client] = CreateTimer(5.0, ReklamaInfo, client, TIMER_FLAG_NO_MAPCHANGE);
159 VipRespawnTimers[client] = CreateTimer(15.0, VipRespawnNie, client, TIMER_FLAG_NO_MAPCHANGE);
160
161 WczytajDane(client);
162}
163public void OnClientDisconnect(int client)
164{
165 SDKUnhook(client, SDKHook_PreThink, Prethink);
166 SDKUnhook(client, SDKHook_OnTakeDamage, TakeDamage);
167 SDKUnhook(client, SDKHook_TraceAttack, TraceAttack);
168 ZapiszDane(client);
169}
170public Action NowaRunda(Handle event_newround, const char[] name, bool dontBroadcast)
171{
172 freeze_time = 1;
173}
174public Action PoczatekRundy(Handle event_freezetime, const char[] name, bool dontBroadcast)
175{
176 freeze_time = 0;
177}
178float maksymalne_obrazenia_gracza[MAX_PLAYERS+1], maksymalna_wytrzymalosc_gracza[MAX_PLAYERS+1];
179public Action Odrodzenie(int client)
180{
181 if(!IsValidClient(client) || !IsPlayerAlive(client))
182 return;
183
184 CS_UpdateClientModel(client);
185
186 if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
187 {
188 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), 110+(zdrowie_gracza[client]*6));
189 RegeneracjaHPZapis[client] = 110+(zdrowie_gracza[client]*6);
190 }
191 else
192 {
193 SetEntData(client, FindDataMapInfo(client, "m_iHealth"), 100+(zdrowie_gracza[client]*6));
194 RegeneracjaHPZapis[client] = 100+(zdrowie_gracza[client]*6);
195 }
196
197 SetEntityRenderMode(client, RENDER_TRANSCOLOR);
198 SetEntityRenderColor(client, 255, 255, 255, 255-niewidzialnosc_gracza[client]*23);
199
200 maksymalne_obrazenia_gracza[client] = (obrazenia_gracza[client])*1.5;
201 maksymalna_wytrzymalosc_gracza[client] = (wytrzymalosc_gracza[client])*1.1;
202
203 LiczSkoki[client] = 0;
204 VipRespawnTak[client] = 1;
205 VipRespawnRaz[client] = 0;
206
207 if(punkty_gracza[client])
208 PrzydzielPunkty(client);
209
210 if(zapisz_dane[client])
211 {
212 zapisz_dane[client] = 0;
213 ZapiszDane(client);
214 }
215
216 VipRespawnTimers[client] = CreateTimer(30.0, VipRespawnNie, client, TIMER_FLAG_NO_MAPCHANGE);
217}
218public Action VipRespawnNie(Handle timer, any client)
219{
220 if(!IsValidClient(client))
221 return;
222
223 VipRespawnTak[client] = 0;
224}
225public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
226{
227 if(buttons & IN_JUMP)
228 {
229 LiczSkoki[client]++;
230 }
231}
232public Action Prethink(int client)
233{
234 if(!IsValidClient(client) || IsFakeClient(client) || freeze_time)
235 return Plugin_Continue;
236
237 if(IsPlayerAlive(client))
238 {
239 int ile = poziom_gracza[client]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[client]-1]: 0;
240 float procent_gracza = 0.0;
241 procent_gracza = (float(doswiadczenie_gracza[client]-ile)/float(doswiadczenie_poziomu[poziom_gracza[client]]-ile))*100.0;
242 PrintHintText(client, "<font size='16'><font color='#006699'>Google.pl</font>\n<font color='#666699'>Poziom:</font> <b>%i</b> | <b>%0.1f</b>/<b>100.0%%</b>\n<font color='#666699'>Prędkość:</font> <b>%.1f</b>\n<font color='#666699'>Skoki:</font> <b>%i</b></font>", poziom_gracza[client], procent_gracza, GetPlayerSpeed(client), LiczSkoki[client]);
243 }
244 else
245 {
246 int spect = GetEntProp(client, Prop_Send, "m_iObserverMode");
247 if(spect == 4 || spect == 5)
248 {
249 int target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
250 if(!(target == -1) && IsValidClient(target))
251 {
252 int ile = poziom_gracza[target]-1 >= 0? doswiadczenie_poziomu[poziom_gracza[target]-1]: 0;
253 float procent_gracza = 0.0;
254 procent_gracza = (float(doswiadczenie_gracza[target]-ile)/float(doswiadczenie_poziomu[poziom_gracza[target]]-ile))*100.0;
255 PrintHintText(client, "<font size='16'><font color='#006699'>Google.pl - <b>%s</b></font>\n<font color='#666699'>Poziom:</font> <b>%i</b> | <b>%0.1f</b>/<b>100.0%%</b>\n<font color='#666699'>Prędkość:</font> <b>%.1f</b>\n<font color='#666699'>Skoki:</font> <b>%i</b></font>", nazwa_gracza[target], poziom_gracza[target], procent_gracza, GetPlayerSpeed(target), LiczSkoki[target]);
256 }
257 }
258 }
259
260 return Plugin_Continue;
261}
262stock float GetPlayerSpeed(int iClient)
263{
264 float faVelocity[3];
265 GetEntPropVector(iClient, Prop_Data, "m_vecVelocity", faVelocity);
266
267 float fSpeed;
268 fSpeed = SquareRoot(faVelocity[0] * faVelocity[0] + faVelocity[1] * faVelocity[1]);
269 fSpeed *= GetEntPropFloat(iClient, Prop_Data, "m_flLaggedMovementValue");
270
271 return fSpeed;
272}
273public void HookPlayerHurt(Handle event, const char[] name, bool dontBroadcast)
274{
275 int iUserId = GetEventInt(event, "userid");
276 int client = GetClientOfUserId(iUserId);
277
278 if(g_hRegenTimer[client] == INVALID_HANDLE)
279 {
280 g_hRegenTimer[client] = CreateTimer(3.0, Regenerate, client, TIMER_REPEAT);
281 }
282}
283public Action Regenerate(Handle timer, any client)
284{
285 if(!IsValidClient(client) || IsFakeClient(client))
286 return;
287
288 int ClientHealth = GetClientHealth(client);
289
290 if(ClientHealth < RegeneracjaHPZapis[client])
291 {
292 SetClientHealth(client, ClientHealth + regeneracjahp_gracza[client]);
293 }
294 else
295 {
296 SetClientHealth(client, RegeneracjaHPZapis[client]);
297 g_hRegenTimer[client] = INVALID_HANDLE;
298 KillTimer(timer);
299 }
300}
301
302void SetClientHealth(int client, int amount)
303{
304 int HealthOffs = FindDataMapInfo(client, "m_iHealth");
305 SetEntData(client, HealthOffs, amount, true);
306}
307public Action PlayerSpawn(Handle event_spawn, char[] name, bool dontBroadcast)
308{
309 int client = GetClientOfUserId(GetEventInt(event_spawn, "userid"));
310 if(!IsValidClient(client) || IsFakeClient(client))
311 return;
312
313 if(poziom_gracza[client]>0)
314 {
315 CS_SetClientClanTag(client, "[Gracz]");
316 }
317 if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
318 {
319 CS_SetClientClanTag(client, "[VIP]");
320 vip_gracza[client] = 1;
321 g_iMoney = GetEntData(client, g_iAccount);
322 SetEntData(client, g_iAccount, g_iMoney + 500);
323 //custom1 = o
324 }
325 if(GetUserFlagBits(client) & ADMFLAG_GENERIC)
326 {
327 CS_SetClientClanTag(client, "[Admin]");
328 //custom1 = b
329 }
330 if(GetUserFlagBits(client) & ADMFLAG_ROOT)
331 {
332 CS_SetClientClanTag(client, "[HeadAdmin]");
333 //custom1 = z
334 }
335 Odrodzenie(client);
336}
337public Action PlayerDeath(Handle event_death, char[] name, bool dontBroadcast)
338{
339 int client = GetClientOfUserId(GetEventInt(event_death, "userid"));
340 int killer = GetClientOfUserId(GetEventInt(event_death, "attacker"));
341 if(!IsValidClient(client) || !IsValidClient(killer))
342 return;
343
344 if(GetClientTeam(client) != GetClientTeam(killer))
345 {
346 int doswiadczenie = 0;
347 if(headshot[client])
348 {
349 char godzina_str[8];
350 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
351 int godzina = StringToInt(godzina_str);
352 if(godzina >= 15 && godzina < 16)
353 {
354 if(vip_gracza[killer])
355 {
356 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs+xp_kill_vip+xp_kill_hs_vip*2;
357 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(+\x04%i \x01HS VIP x2) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill+xp_kill_hs*2, xp_kill_vip+xp_kill_hs_vip*2);
358 DodajDoswiadczenie(killer, doswiadczenie);
359 }
360 else
361 {
362 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs*2;
363 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(HS x2) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill+xp_kill_hs*2);
364 DodajDoswiadczenie(killer, doswiadczenie);
365 }
366 }
367 else if(godzina >= 23 && godzina < 7)
368 {
369 if(vip_gracza[killer])
370 {
371 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs+xp_kill_vip+xp_kill_hs_vip*2;
372 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(+\x04%i \x01HS VIP x2) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill+xp_kill_hs*2, xp_kill_vip+xp_kill_hs_vip*2);
373 DodajDoswiadczenie(killer, doswiadczenie);
374 }
375 else
376 {
377 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs*2;
378 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(HS x2) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill+xp_kill_hs*2);
379 DodajDoswiadczenie(killer, doswiadczenie);
380 }
381 }
382 else
383 {
384 if(vip_gracza[killer])
385 {
386 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs+xp_kill_vip+xp_kill_hs_vip;
387 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(+\x04%i \x01HS VIP) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill+xp_kill_hs, xp_kill_vip+xp_kill_hs_vip);
388 DodajDoswiadczenie(killer, doswiadczenie);
389 }
390 else
391 {
392 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_hs;
393 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01 doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill+xp_kill_hs);
394 DodajDoswiadczenie(killer, doswiadczenie);
395 }
396 }
397 }
398 else
399 {
400 char godzina_str[8];
401 FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
402 int godzina = StringToInt(godzina_str);
403 if(godzina >= 15 && godzina < 16)
404 {
405 if(vip_gracza[killer])
406 {
407 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_vip*2;
408 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(+\x04%i \x01VIP x2) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill*2, xp_kill_vip*2);
409 DodajDoswiadczenie(killer, doswiadczenie);
410 }
411 else
412 {
413 doswiadczenie += poziom_gracza[client]+xp_kill*2;
414 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i(x2) \x01doświadczenia za zabicie wroga.", doswiadczenie);
415 DodajDoswiadczenie(killer, doswiadczenie);
416 }
417 }
418 else if(godzina >= 23 && godzina < 7)
419 {
420 if(vip_gracza[killer])
421 {
422 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_vip*2;
423 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(+\x04%i \x01VIP x2) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill*2, xp_kill_vip*2);
424 DodajDoswiadczenie(killer, doswiadczenie);
425 }
426 else
427 {
428 doswiadczenie += poziom_gracza[client]+xp_kill*2;
429 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i(x2) \x01doświadczenia za zabicie wroga.", doswiadczenie);
430 DodajDoswiadczenie(killer, doswiadczenie);
431 }
432 }
433 else
434 {
435 if(vip_gracza[killer])
436 {
437 doswiadczenie += poziom_gracza[client]+xp_kill+xp_kill_vip;
438 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i\x01(+\x04%i \x01VIP) doświadczenia za zabicie wroga.", poziom_gracza[client]+xp_kill, xp_kill_vip);
439 DodajDoswiadczenie(killer, doswiadczenie);
440 }
441 else
442 {
443 doswiadczenie += poziom_gracza[client]+xp_kill;
444 PrintToChat(killer, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i \x01doświadczenia za zabicie wroga.", doswiadczenie);
445 DodajDoswiadczenie(killer, doswiadczenie);
446 }
447 }
448 }
449 }
450}
451public Action Respawn(Handle Timer, any i)
452{
453 if(!IsValidClient(i) || GetClientTeam(i) < 2)
454 {
455 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] Respawnu możesz użyć tylko w CT.");
456 return Plugin_Stop;
457 }
458
459 if(IsPlayerAlive(i))
460 {
461 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] Nie możesz się zrespić gdy żyjesz.");
462 }
463 else
464 {
465 if(GetUserFlagBits(i) & ADMFLAG_CUSTOM1)
466 {
467 if(VipRespawnTak[i] == 1)
468 {
469 if(VipRespawnRaz[i] == 1)
470 {
471 if (GetClientTeam(i) == CS_TEAM_CT)
472 {
473 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] Już raz się odrodziłeś w tej rundzie.");
474 }
475 }
476 else if(VipRespawnRaz[i] == 0)
477 {
478 if (GetClientTeam(i) == CS_TEAM_CT)
479 {
480 CS_RespawnPlayer(i);
481 VipRespawnRaz[i] = 1;
482 }
483 }
484 }
485 else if(VipRespawnTak[i] == 0)
486 {
487 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] Minął już czas 30s respawnu.");
488 }
489 }
490 else
491 {
492 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] Nie posiadasz VIP'a, nie możesz się ponownie odrodzić.");
493 }
494 }
495 return Plugin_Stop;
496}
497public Action DodajDoswiadczenie(int client, int doswiadczenie)
498{
499 if(!IsValidClient(client))
500 return;
501
502 if(poziom_gracza[client] < limit_poziomu)
503 {
504 doswiadczenie_gracza[client] += doswiadczenie;
505 }
506 else if(poziom_gracza[client] == limit_poziomu)
507 {
508
509 }
510
511 while(doswiadczenie_gracza[client] >= doswiadczenie_poziomu[poziom_gracza[client]] && poziom_gracza[client] < limit_poziomu)
512 {
513 poziom_gracza[client] ++;
514 punkty_gracza[client] ++;
515 }
516
517 while(doswiadczenie_gracza[client] < doswiadczenie_poziomu[poziom_gracza[client]-1])
518 {
519 poziom_gracza[client] --;
520 ResetujPunkty(client);
521 }
522
523 if(poziom_gracza[client] > limit_poziomu)
524 {
525 poziom_gracza[client] = limit_poziomu;
526 ResetujPunkty(client);
527 }
528
529 if(!zapisz_dane[client])
530 zapisz_dane[client] = 1;
531}
532public Action DataBaseConnect()
533{
534 sql = SQL_Connect("DeathrunExpMod_SQL", true, dbError, sizeof(dbError));
535 stats_db = SQL_Connect("DeathrunExpMod_SQL", false, dbError, 256);
536
537 if(sql == INVALID_HANDLE)
538 PrintToServer("Error DataBaseConnect: %s", dbError);
539
540 SQL_LockDatabase(sql);
541 SQL_FastQuery(sql, "CREATE TABLE IF NOT EXISTS `DeathrunExpMod` (`id` INT(11) NOT NULL AUTO_INCREMENT, `nick` VARCHAR(48) NOT NULL, `steamid` VARCHAR(48) NOT NULL, `poziom` INT(11) DEFAULT 1, `exp` INT(14), `punkty` INT(9), `zdrowie` INT(9), `obrazenia` INT(9), `wytrzymalosc` INT(9), `regeneracjahp` INT(9), `niewidzialnosc` INT(9), PRIMARY KEY (`id`), UNIQUE KEY (`steamid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;");
542 SQL_UnlockDatabase(sql);
543}
544public Action ZapiszDane(int client)
545{
546 char tmp[1024];
547 char authid[64];
548 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
549 return;
550
551 GetClientName(client, nazwa_gracza[client], 64);
552
553 Format(tmp, sizeof(tmp), "INSERT INTO `DeathrunExpMod` (`nick`, `steamid`, `poziom`, `exp`, `punkty`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `regeneracjahp`, `niewidzialnosc`) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d) ON DUPLICATE KEY UPDATE `nick`=VALUES(`nick`), `poziom`=VALUES(`poziom`), `exp`=VALUES(`exp`), `punkty`=VALUES(`punkty`), `zdrowie`=VALUES(`zdrowie`), `obrazenia`=VALUES(`obrazenia`), `wytrzymalosc`=VALUES(`wytrzymalosc`), `regeneracjahp`=VALUES(`regeneracjahp`), `niewidzialnosc`=VALUES(`niewidzialnosc`);", nazwa_gracza[client], authid, poziom_gracza[client], doswiadczenie_gracza[client], punkty_gracza[client], zdrowie_gracza[client], obrazenia_gracza[client], wytrzymalosc_gracza[client], regeneracjahp_gracza[client], niewidzialnosc_gracza[client]);
554 SQL_TQuery(sql, ZapiszDane_Handler, tmp, client);
555
556}
557public void ZapiszDane_Handler(Handle owner, Handle query, const char[] error, any client)
558{
559 if(query == INVALID_HANDLE)
560 {
561 LogError("Error ZapiszDane_Handler: %s", error);
562 return;
563 }
564}
565
566public int WczytajDane(int client)
567{
568 char tmp[512];
569 char authid[64];
570 if(!GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)))
571 return -1;
572
573 Format(tmp, sizeof(tmp), "SELECT `poziom`, `exp`, `punkty`, `zdrowie`, `obrazenia`, `wytrzymalosc`, `regeneracjahp`, `niewidzialnosc` FROM `DeathrunExpMod` WHERE steamid = '%s';", authid);
574 Handle query = SQL_Query(sql, tmp);
575
576 if(query == INVALID_HANDLE){
577 SQL_GetError(sql, dbError, sizeof(dbError))
578 PrintToServer("Error WczytajDane: %s", dbError)
579 return 0;
580 }
581
582 if(SQL_FetchRow(query))
583 {
584 poziom_gracza[client] = SQL_FetchInt(query, 0);
585 doswiadczenie_gracza[client] = SQL_FetchInt(query, 1);
586 punkty_gracza[client] = SQL_FetchInt(query, 2);
587 zdrowie_gracza[client] = SQL_FetchInt(query, 3);
588 obrazenia_gracza[client] = SQL_FetchInt(query, 4);
589 wytrzymalosc_gracza[client] = SQL_FetchInt(query, 5);
590 regeneracjahp_gracza[client] = SQL_FetchInt(query, 6);
591 niewidzialnosc_gracza[client] = SQL_FetchInt(query, 7);
592 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
593 LogMessage("Nick: %s | SteamID: %s | poziom_gracza: %i | doswiadczenie_gracza: %i | punkty_gracza: %i | zdrowie_gracza: %i | obrazenia_gracza: %i | wytrzymalosc_gracza: %i | regeneracjahp_gracza: %i | niewidzialnosc_gracza: %i", nazwa_gracza[client], authid, SQL_FetchInt(query, 0), SQL_FetchInt(query, 1), SQL_FetchInt(query, 2), SQL_FetchInt(query, 3), SQL_FetchInt(query, 4), SQL_FetchInt(query, 5), SQL_FetchInt(query, 6), SQL_FetchInt(query, 7))
594 }
595 else
596 {
597 poziom_gracza[client] = 1;
598 doswiadczenie_gracza[client] = 0;
599 punkty_gracza[client] = 1;
600 zdrowie_gracza[client] = 0;
601 obrazenia_gracza[client] = 0;
602 wytrzymalosc_gracza[client] = 0;
603 regeneracjahp_gracza[client] = 0;
604 RegeneracjaHPZapis[client] = 0;
605 niewidzialnosc_gracza[client] = 0;
606
607 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
608 }
609 LastPlace(client);
610 Stats_GetPlayerRankLevel(client);
611 CloseHandle(query)
612 return 1;
613}
614public Action TaskZapiszDane(Handle timer, any client)
615{
616 if(!IsValidClient(client))
617 return;
618
619 if(zapisz_dane[client])
620 {
621 zapisz_dane[client] = 0;
622 ZapiszDane(client);
623 }
624
625 sql_task[client] = CreateTimer(float(co_ile_zapisywac), TaskZapiszDane, client, TIMER_FLAG_NO_MAPCHANGE);
626}
627void PrintResults(int client, Handle query)
628{
629 char name[MAX_NAME_LENGTH];
630 char poziom[MAX_NAME_LENGTH];
631 int liczba=0;
632 while (SQL_FetchRow(query))
633 {
634 liczba++;
635 SQL_FetchString(query, 0, name, sizeof(name));
636 SQL_FetchString(query, 1, poziom, sizeof(poziom));
637 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] %i. Nick: %s Poziom: %s", liczba, name, poziom);
638 }
639}
640bool Top15(int client)
641{
642 char query[100];
643 Format(query, sizeof(query), "SELECT nick, poziom FROM DeathrunExpMod ORDER BY exp DESC LIMIT 15");
644
645 DBResultSet hQuery = SQL_Query(sql, query);
646 if (hQuery == null)
647 {
648 return false;
649 }
650
651 PrintResults(client, hQuery);
652
653 delete hQuery;
654
655 return true;
656}
657void LastPlaceSave(int client, Handle query)
658{
659 char lastplacesave[MAX_NAME_LENGTH];
660 while (SQL_FetchRow(query))
661 {
662 SQL_FetchString(query, 0, lastplacesave, sizeof(lastplacesave));
663 lastplace[client] = SQL_FetchInt(query, 0);
664 }
665}
666bool LastPlace(int client)
667{
668 char query[100];
669 Format(query, sizeof(query), "SELECT max(id) FROM DeathrunExpMod");
670
671 DBResultSet hQuery = SQL_Query(sql, query);
672 if (hQuery == null)
673 {
674 return false;
675 }
676
677 LastPlaceSave(client, hQuery);
678
679 delete hQuery;
680
681 return true;
682}
683public bool IsValidClient(int client)
684{
685 if(client >= 1 && client <= MaxClients && IsClientInGame(client))
686 return true;
687
688 return false;
689}
690public Action TakeDamage(int victim, int &attacker, int &inflictor, &float damage, int &damagetype)
691{
692 if(!IsValidClient(victim))
693 return Plugin_Continue;
694
695 //if(damagetype & DMG_FALL) //brak hp przy upadku
696 //return Plugin_Handled;
697
698 if(IsValidClient(attacker) && GetClientTeam(victim) != GetClientTeam(attacker))
699 {
700 int dmg = 0;
701
702 damage = RoundFloat(damage+dmg)+(maksymalne_obrazenia_gracza[attacker]-maksymalna_wytrzymalosc_gracza[victim]);
703 //PrintToChat(attacker, "\x0B\x01[\x04DeathrunExpMod\x01] %f %f %f %f", damage, maksymalne_obrazenia_gracza[attacker], maksymalna_wytrzymalosc_gracza[victim], (1.0+maksymalne_obrazenia_gracza[attacker]-maksymalna_wytrzymalosc_gracza[victim]));
704
705 return Plugin_Changed;
706 }
707
708 return Plugin_Continue;
709}
710public Action PrzydzielPunkty(int client)
711{
712 char tytul[64];
713 char regeneracjahp[64];
714 char zdrowie[64];
715 char obrazenia[64];
716 char wytrzymalosc[64];
717 char niewidzialnosc[64];
718
719 if(punkty_gracza[client])
720 Format(tytul, sizeof(tytul), "Ilość punktów [%i]", punkty_gracza[client]);
721 else
722 Format(tytul, sizeof(tytul), "Nie posiadasz żadnych punktów do rozdania!");
723
724 if(regeneracjahp_gracza[client]==5)
725 Format(regeneracjahp, sizeof(regeneracjahp), "Regeneracja HP [MAX] (+%i co 3s)", regeneracjahp_gracza[client]);
726 else
727 Format(regeneracjahp, sizeof(regeneracjahp), "Regeneracja HP [%i] (+%i co 3s)", regeneracjahp_gracza[client], regeneracjahp_gracza[client]);
728
729 if(zdrowie_gracza[client]==5)
730 Format(zdrowie, sizeof(zdrowie), "Zdrowie [MAX] (+%i HP)", zdrowie_gracza[client]*6);
731 else
732 Format(zdrowie, sizeof(zdrowie), "Zdrowie [%i] (+%i HP)", zdrowie_gracza[client], zdrowie_gracza[client]*6);
733
734 if(obrazenia_gracza[client]==5)
735 Format(obrazenia, sizeof(obrazenia), "Obrażenia [MAX] (+%i%% DMG)", RoundFloat(obrazenia_gracza[client]*1.5));
736 else
737 Format(obrazenia, sizeof(obrazenia), "Obrażenia [%i] (+%i%% DMG)", obrazenia_gracza[client], RoundFloat(obrazenia_gracza[client]*1.5));
738
739 if(wytrzymalosc_gracza[client]==5)
740 Format(wytrzymalosc, sizeof(wytrzymalosc), "Pancerz [MAX] (-%i%% DMG)", RoundFloat(wytrzymalosc_gracza[client]*1.1));
741 else
742 Format(wytrzymalosc, sizeof(wytrzymalosc), "Pancerz [%i] (-%i%% DMG)", wytrzymalosc_gracza[client], RoundFloat(wytrzymalosc_gracza[client]*1.1));
743
744 if(niewidzialnosc_gracza[client]==5)
745 Format(niewidzialnosc, sizeof(niewidzialnosc), "Niewidzialność [MAX] (255 - %i)", (niewidzialnosc_gracza[client]*23));
746 else
747 Format(niewidzialnosc, sizeof(niewidzialnosc), "Niewidzialność [%i] (255 - %i)", niewidzialnosc_gracza[client], (niewidzialnosc_gracza[client]*23));
748
749 Handle menu = CreateMenu(PrzydzielPunkty_Handler);
750 SetMenuTitle(menu, tytul);
751 AddMenuItem(menu, "1", regeneracjahp);
752 AddMenuItem(menu, "2", zdrowie);
753 AddMenuItem(menu, "3", obrazenia);
754 AddMenuItem(menu, "4", wytrzymalosc);
755 AddMenuItem(menu, "5", niewidzialnosc);
756 DisplayMenu(menu, client, 250);
757}
758public int PrzydzielPunkty_Handler(Handle classhandle, MenuAction action, int client, int Position)
759{
760 if(action == MenuAction_Select)
761 {
762 if(punkty_gracza[client])
763 {
764 char Item[32];
765 GetMenuItem(classhandle, Position, Item, sizeof(Item));
766
767 if(StrEqual(Item, "1"))
768 {
769 if(regeneracjahp_gracza[client] != 5)
770 {
771 if(regeneracjahp_gracza[client] + 1 <= 5)
772 {
773 regeneracjahp_gracza[client] += 1;
774 punkty_gracza[client] -= 1;
775 }
776 else
777 {
778 int punktydododania;
779 punktydododania = 5 - regeneracjahp_gracza[client];
780 regeneracjahp_gracza[client] += punktydododania;
781 punkty_gracza[client] -= punktydododania;
782 }
783 }
784 else
785 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyka została rozwinięta do maksymalnego poziomu!");
786 }
787 else if(StrEqual(Item, "2"))
788 {
789 if(zdrowie_gracza[client] != 5)
790 {
791 if(zdrowie_gracza[client] + 1 <= 5)
792 {
793 zdrowie_gracza[client] += 1;
794 punkty_gracza[client] -= 1;
795 }
796 else
797 {
798 int punktydododania;
799 punktydododania = 5 - zdrowie_gracza[client];
800 zdrowie_gracza[client] += punktydododania;
801 punkty_gracza[client] -= punktydododania;
802 }
803 }
804 else
805 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyka została rozwinięta do maksymalnego poziomu!");
806 }
807 else if(StrEqual(Item, "3"))
808 {
809 if(obrazenia_gracza[client] != 5)
810 {
811 if(obrazenia_gracza[client] + 1 <= 5)
812 {
813 obrazenia_gracza[client] += 1;
814 punkty_gracza[client] -= 1;
815 }
816 else
817 {
818 int punktydododania;
819 punktydododania = 5 - obrazenia_gracza[client];
820 obrazenia_gracza[client] += punktydododania;
821 punkty_gracza[client] -= punktydododania;
822 }
823 }
824 else
825 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyka została rozwinięta do maksymalnego poziomu!");
826 }
827 else if(StrEqual(Item, "4"))
828 {
829 if(wytrzymalosc_gracza[client] != 5)
830 {
831 if(wytrzymalosc_gracza[client] + 1 <= 5)
832 {
833 wytrzymalosc_gracza[client] += 1;
834 punkty_gracza[client] -= 1;
835 }
836 else
837 {
838 int punktydododania;
839 punktydododania = 5 - wytrzymalosc_gracza[client];
840 wytrzymalosc_gracza[client] += punktydododania;
841 punkty_gracza[client] -= punktydododania;
842 }
843 }
844 else
845 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyka została rozwinięta do maksymalnego poziomu!");
846 }
847 else if(StrEqual(Item, "5"))
848 {
849 if(niewidzialnosc_gracza[client] != 5)
850 {
851 if(niewidzialnosc_gracza[client] + 1 <= 5)
852 {
853 niewidzialnosc_gracza[client] += 1;
854 punkty_gracza[client] -= 1;
855 }
856 else
857 {
858 int punktydododania;
859 punktydododania = 5 - niewidzialnosc_gracza[client];
860 niewidzialnosc_gracza[client] += punktydododania;
861 punkty_gracza[client] -= punktydododania;
862 }
863 }
864 else
865 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyka została rozwinięta do maksymalnego poziomu!");
866 }
867 if(punkty_gracza[client])
868 PrzydzielPunkty(client);
869
870 if(!zapisz_dane[client])
871 zapisz_dane[client] = 1;
872 }
873 }
874 else if(action == MenuAction_End)
875 CloseHandle(classhandle);
876}
877public Action ResetujPunkty(int client)
878{
879 punkty_gracza[client] = poziom_gracza[client];
880 zdrowie_gracza[client] = 0;
881 obrazenia_gracza[client] = 0;
882 wytrzymalosc_gracza[client] = 0;
883 regeneracjahp_gracza[client] = 0;
884 niewidzialnosc_gracza[client] = 0;
885 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyki zostały zresetowane.");
886 //ResetujPunkty_Potwierdzenie(client);
887}
888public Action ResetujPunkty_Potwierdzenie(int client)
889{
890 char tytul[64];
891 char a1[64];
892 char a2[64];
893
894 Format(tytul, sizeof(tytul), "Czy napewno chcesz zresetować swoje punkty?\nZostanie zwrócone %i punktów", punkty_gracza[client] = poziom_gracza[client]);
895 Format(a1, sizeof(a1), "Tak");
896 Format(a2, sizeof(a2), "Nie");
897
898 Handle menu = CreateMenu(ResetujPunkty_Potwierdzenie_Handler);
899 SetMenuTitle(menu, tytul);
900 AddMenuItem(menu, "1", a1);
901 AddMenuItem(menu, "2", a2);
902 DisplayMenu(menu, client, 250);
903}
904public int ResetujPunkty_Potwierdzenie_Handler(Handle classhandle, MenuAction action, int client, int Position)
905{
906 if(action == MenuAction_Select)
907 {
908 char Item[32];
909 GetMenuItem(classhandle, Position, Item, sizeof(Item));
910
911 if(StrEqual(Item, "1"))
912 {
913 punkty_gracza[client] = poziom_gracza[client];
914 zdrowie_gracza[client] = 0;
915 obrazenia_gracza[client] = 0;
916 wytrzymalosc_gracza[client] = 0;
917 regeneracjahp_gracza[client] = 0;
918 niewidzialnosc_gracza[client] = 0;
919 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyki zostały zresetowane.");
920
921 if(punkty_gracza[client])
922 {
923 PrzydzielPunkty(client);
924 if(!zapisz_dane[client])
925 zapisz_dane[client] = 1;
926 }
927 }
928 else if(StrEqual(Item, "2"))
929 {
930 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Statystyki nie zostały zresetowane.");
931 }
932 }
933 else if(action == MenuAction_End)
934 CloseHandle(classhandle);
935}
936public Action KoniecRundy(Handle event_endround, const char[] name, bool dontBroadcast)
937{
938 for(int i = 1; i <= MaxClients; i++)
939 {
940 if(!IsClientInGame(i))
941 continue;
942
943 int ilosc_graczy = i;
944 int doswiadczenie = 0;
945 int druzyna = GetEventInt(event_endround, "winner");
946 if(ilosc_graczy>1)
947 {
948 if(druzyna == 2 && GetClientTeam(i) == CS_TEAM_T || druzyna == 3 && GetClientTeam(i) == CS_TEAM_CT)
949 {
950 if(IsPlayerAlive(i))
951 {
952 if(vip_gracza[i])
953 {
954 doswiadczenie += xp_winround+xp_winround_vip;
955 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i(+\x04%i \x01VIP) doświadczenia za wygranie rundy.", xp_winround, xp_winround_vip);
956 DodajDoswiadczenie(i, doswiadczenie);
957 }
958 else
959 {
960 doswiadczenie += xp_winround;
961 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i \x01doświadczenia za wygranie rundy.", doswiadczenie);
962 DodajDoswiadczenie(i, doswiadczenie);
963 }
964 }
965 else
966 {
967 if(vip_gracza[i])
968 {
969 doswiadczenie += xp_winround+xp_winround_vip;
970 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i(+\x04%i \x01VIP) doswiadczenia za wygranie rundy przez twoja druzyne.", xp_winround/2, xp_winround_vip/2);
971 DodajDoswiadczenie(i, doswiadczenie/2);
972 }
973 else
974 {
975 doswiadczenie += xp_winround;
976 PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] +\x04%i \x01doswiadczenia za wygranie rundy przez twoja druzyne.", doswiadczenie/2);
977 DodajDoswiadczenie(i, doswiadczenie/2);
978 }
979 }
980 }
981 }
982 else PrintToChat(i, "\x0B\x01[\x04DeathrunExpMod\x01] Minimum 2 osoby do zdobycia doświadczenia za wygranie rundy.");
983 }
984}
985public Action CmdExp(int client, int args)
986{
987 char arg1[32];
988 char arg2[6];
989 GetCmdArg(1, arg1, sizeof(arg1));
990 GetCmdArg(2, arg2, sizeof(arg2));
991 int target = FindTarget(client, arg1);
992 int zmienna = StringToInt(arg2);
993
994 if(!(target == -1))
995 {
996 if((-zmienna) > doswiadczenie_gracza[target])
997 PrintToConsole(client, "[DeathrunExpMod] Chciales odjac graczowi zbyt duzo doswiadczenia.");
998 else
999 {
1000 DodajDoswiadczenie(target, zmienna);
1001 LogMessage("%s - dal graczowi %s (%i expa).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
1002 PrintToConsole(client, "[DeathrunExpMod] Dales graczowi %s (%i expa).", nazwa_gracza[target], zmienna);
1003 }
1004 }
1005}
1006public Action CmdLvl(int client, int args)
1007{
1008 char arg1[32];
1009 char arg2[6];
1010 GetCmdArg(1, arg1, sizeof(arg1));
1011 GetCmdArg(2, arg2, sizeof(arg2));
1012 int target = FindTarget(client, arg1);
1013 int zmienna = StringToInt(arg2);
1014
1015 if(!(target == -1))
1016 {
1017 if((-zmienna) > poziom_gracza[target])
1018 PrintToConsole(client, "[DeathrunExpMod] Chciales ustawic graczowi zbyt maly poziom.");
1019 else
1020 {
1021 if(poziom_gracza[target] + zmienna > limit_poziomu)
1022 PrintToConsole(client, "[DeathrunExpMod] Chciales ustawic graczowi zbyt duzy poziom.");
1023 else
1024 {
1025 DodajDoswiadczenie(target, doswiadczenie_poziomu[poziom_gracza[target] += zmienna]);
1026 LogMessage("%s - dal graczowi %s (%i Lv).", nazwa_gracza[client], nazwa_gracza[target], zmienna);
1027 PrintToConsole(client, "[DeathrunExpMod] Dales graczowi %s (%i Lv).", nazwa_gracza[target], zmienna);
1028 }
1029 }
1030 }
1031}
1032public Action Command_MENU(int client, int args)
1033{
1034 MainMenu(client);
1035 return Plugin_Handled;
1036}
1037public Action Command_RESPAWN(int client, int args)
1038{
1039 CreateTimer(0.5, Respawn, client);
1040 return Plugin_Handled;
1041}
1042public Action HideCommands(int client, const char[] command, int argc)
1043{
1044 if(IsChatTrigger())
1045 return Plugin_Handled
1046
1047 return Plugin_Continue
1048}
1049public Action ChatAll(int client, int args)
1050{
1051 char text[192];
1052 GetCmdArg(1, text, sizeof(text));
1053
1054 ReplySource old = SetCmdReplySource(SM_REPLY_TO_CHAT);
1055 if(strcmp(text, "", false) != 0)
1056 {
1057 if(IsPlayerAlive(client))
1058 {
1059 if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
1060 {
1061 PrintToChatAll("\x0B \x04[VIP]-[%i]\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1062 }
1063 else
1064 {
1065 PrintToChatAll("\x0B \x04[%i]\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1066 }
1067 }
1068 else
1069 {
1070 for(int i = 1, max = GetMaxClients(); i <= max; ++ i)
1071 {
1072 if(!IsClientInGame(i) || IsPlayerAlive(i))
1073 continue;
1074
1075 if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
1076 {
1077 PrintToChat(i, "\x0B \x01*DEAD* \x04[VIP]-[%i]\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1078 }
1079 else
1080 {
1081 PrintToChat(i, "\x0B \x01*DEAD* \x04[%i]\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1082 }
1083 }
1084 }
1085 }
1086 SetCmdReplySource(old);
1087 return Plugin_Handled;
1088}
1089public Action ChatTeam(int client, int args)
1090{
1091 char text[192];
1092 GetCmdArg(1, text, sizeof(text));
1093
1094 ReplySource old = SetCmdReplySource(SM_REPLY_TO_CHAT);
1095 if(strcmp(text, "", false) != 0)
1096 {
1097 for(int i = 1, max = GetMaxClients(); i <= max; ++ i)
1098 {
1099 if(!IsClientInGame(i) || GetClientTeam(client) != GetClientTeam(i))
1100 continue;
1101
1102 if(IsPlayerAlive(client))
1103 {
1104 if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
1105 {
1106 PrintToChat(i, "\x0B \x04[VIP]-[%i]\x01 (TEAM)\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1107 }
1108 else
1109 {
1110 PrintToChat(i, "\x0B \x04[%i]\x01 (TEAM)\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1111 }
1112 }
1113 else
1114 {
1115 if(IsPlayerAlive(i))
1116 continue;
1117
1118 if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
1119 {
1120 PrintToChat(i, "\x0B \x01*DEAD* \x04[VIP]-[%i]\x01 (TEAM)\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1121 }
1122 else
1123 {
1124 PrintToChat(i, "\x0B \x01*DEAD* \x04[%i]\x01 (TEAM)\x09 %s :\x01 %s", poziom_gracza[client], nazwa_gracza[client], text);
1125 }
1126 }
1127 }
1128 }
1129 SetCmdReplySource(old);
1130 return Plugin_Handled;
1131}
1132
1133void MainMenu(int client)
1134{
1135 char text[64];
1136 SetGlobalTransTarget(client);
1137 Handle menu = CreateMenu(MainMenuHandler);
1138
1139 Format(text, sizeof(text), "DeathrunExpMod\n \nPoziom: %i | Exp: %i\nRank: %i na %i\n ", poziom_gracza[client], doswiadczenie_gracza[client], g_iPlayerPlace[client], lastplace[client]);
1140 SetMenuTitle(menu, text);
1141
1142 if(punkty_gracza[client]>0)
1143 {
1144 Format(text, sizeof(text), "Statystyki / Przydziel punkty - %i dostępnych punktów!", punkty_gracza[client]);
1145 AddMenuItem(menu, "", text);
1146 }
1147 else
1148 {
1149 Format(text, sizeof(text), "Statystyki / Przydziel punkty");
1150 AddMenuItem(menu, "", text);
1151 }
1152
1153 Format(text, sizeof(text), "Resetuj przydzielone punkty");
1154 AddMenuItem(menu, "", text);
1155
1156 Format(text, sizeof(text), "Top15");
1157 AddMenuItem(menu, "", text);
1158
1159 Format(text, sizeof(text), "Informacje o VIP");
1160 AddMenuItem(menu, "", text);
1161
1162 /*if(IsPlayerAlive(client))
1163 {
1164 }
1165 else
1166 {
1167 Format(text, sizeof(text), "Odrodzenie - natychmiastowe odrodzenie");
1168 AddMenuItem(menu, "", text);
1169 }*/
1170
1171 /*Format(text, sizeof(text), "Panel Gracza");
1172 AddMenuItem(menu, "", text);
1173
1174 Format(text, sizeof(text), "Panel Admina");
1175 AddMenuItem(menu, "", text);*/
1176
1177 SetMenuExitButton(menu, true);
1178 DisplayMenu(menu, client, 0);
1179}
1180
1181public int MainMenuHandler(Handle menu, MenuAction action, int client, int itemNum)
1182{
1183 if(action == MenuAction_Select)
1184 {
1185 switch(itemNum)
1186 {
1187 case 0: PrzydzielPunkty(client);
1188 case 1: ResetujPunkty(client);
1189 case 2: Top15(client);
1190 case 3:
1191 {
1192 vip_help(client, 1);
1193 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Jeżeli chcesz kupić zgłoś się do \x04xBBBay \x01http://steamcommunity.com/profiles/76561198028032735/");
1194 }
1195 case 4: CreateTimer(0.5, Respawn, client);
1196 //case 5: PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Panel Gracza");
1197 //case 6: PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Panel Admina");
1198 }
1199 }
1200 else if(action == MenuAction_End)
1201 {
1202 delete(menu);
1203 }
1204}
1205public Action vip_help(int client, int intargs)
1206{
1207 Panel panels = int Panel();
1208 char buffer[512];
1209
1210 Format(buffer, sizeof(buffer), "VIP\nFunkcje vipa:\n+Zwiększone podwójnie zdobywane doświadczenie,\n+10hp,\n+500$,\n+skrzydła [wybór pod say /skrzydla],\n+VIP w tabeli(+chat),\n+użycie komendy /respawn [max 30s po odrodzeniu]\nKoszt [30dni/15dni -50%%]: 7,38 zł sms | 5 zł przelew\nJeżeli chcesz kupić zgłoś się do xBBBay http://steamcommunity.com/profiles/76561198028032735/");
1211 panels.SetTitle(buffer);
1212 panels.DrawItem("Zamknij");
1213
1214 panels.Send(client, vip_help2, 20);
1215 delete panels;
1216
1217 return Plugin_Handled;
1218}
1219public int vip_help2(Menu menu, MenuAction action, int param1, int param2)
1220{
1221}
1222public Action ReklamaInfo(Handle timer, any client)
1223{
1224 if(!IsValidClient(client))
1225 return;
1226
1227 if(ReklamaInfoo[client] == 0)
1228 {
1229 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Witaj \x04%s\x01 na serwerze [\x04DeathrunExpMod\x01]!", nazwa_gracza[client]);
1230 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Wszystkie informacje znajdziesz pod \x04/menu.");
1231 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Życzymy miłej gry!");
1232
1233 if(GetUserFlagBits(client) & ADMFLAG_CUSTOM1)
1234 {
1235 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Jesteś VIP'em, posiadasz zwiększone podwójnie doświadczenie, co runde otrzymujesz +10 hp i +500$");
1236 }
1237
1238 ReklamaInfoo[client] = 1;
1239 }
1240 else if(ReklamaInfoo[client] == 1)
1241 {
1242 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Wszystkie informacje znajdziesz pod \x04/menu.");
1243 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Jeżeli chcesz inną kosę wpisz \x04!knife.");
1244 ReklamaInfoo[client] = 2;
1245 }
1246 else if(ReklamaInfoo[client] == 2)
1247 {
1248 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Jeżeli chcesz kupić VIP'a wpisz\x01 /menu -> vip");
1249 ReklamaInfoo[client] = 3;
1250 }
1251 else if(ReklamaInfoo[client] == 3)
1252 {
1253 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] HeadAdmin serwera to: \x04xBBBay");
1254 ReklamaInfoo[client] = 4;
1255 }
1256 else if(ReklamaInfoo[client] == 4)
1257 {
1258 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Nasze forum to: \x04www.Google.pl");
1259 ReklamaInfoo[client] = 5;
1260 }
1261 else if(ReklamaInfoo[client] == 5)
1262 {
1263 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Jeżeli znalazłeś błąd zgłoś to do \x04HeadAdmina\x01!");
1264 ReklamaInfoo[client] = 6;
1265 }
1266 else if(ReklamaInfoo[client] == 6)
1267 {
1268 PrintToChat(client, "\x0B\x01[\x04DeathrunExpMod\x01] Od godziny\x04 15 \x01do\x04 16 \x01i\x04 23 \x01do\x04 6 \x01zwiększony exp \x04x2!");
1269 ReklamaInfoo[client] = 1;
1270 }
1271
1272 WelcomeTimers[client] = CreateTimer(40.0, ReklamaInfo, client, TIMER_FLAG_NO_MAPCHANGE);
1273}
1274public Action TraceAttack(int victim, int &attacker, int &inflictor, &float damage, int &damagetype, int &ammotype, int hitbox, int hitgroup)
1275{
1276 if(!IsValidClient(victim) || !IsValidClient(attacker))
1277 return Plugin_Continue;
1278
1279 if(GetClientTeam(victim) == GetClientTeam(attacker))
1280 return Plugin_Continue;
1281
1282 if(hitgroup == 1)
1283 headshot[victim] = 1;
1284 else
1285 headshot[victim] = 0;
1286
1287 return Plugin_Continue;
1288}
1289
1290void Stats_GetPlayerRankLevel(int iClient)
1291{
1292 char query[192];
1293 Format(query, sizeof(query), "SELECT exp FROM DeathrunExpMod WHERE exp >= %i ORDER BY exp ASC;", doswiadczenie_gracza[iClient]);
1294 stats_db.Query(SQL_RankCallback, query, iClient);
1295}
1296
1297public void SQL_RankCallback(Database db, DBResultSet dbRs, const char[][] sError, any iClient)
1298{
1299 if(dbRs == null)
1300 {
1301 LogError("SQL_LoadPlayerCallback failure: %s", sError);
1302 return;
1303 }
1304
1305 g_iPlayerPlace[iClient] = dbRs.RowCount;
1306}