· 8 years ago · Feb 04, 2018, 10:16 AM
1#pragma semicolon 1
2
3#define LoopValidClients(%1) for(int %1 = 1; %1 < MaxClients; %1++) if(IsValidClient(%1))
4
5#define PLUGIN_AUTHOR "Roberrt.."
6#define PLUGIN_VERSION "1.00"
7
8#include <sourcemod>
9#include <sdktools>
10#include <cstrike>
11//#include <smartjaildoors>
12#include <smlib>
13#include <sdkhooks>
14#include <colors>
15
16// ** CONFIG ** //
17
18// Nazwy przedmiotów
19
20#define DEFINED_NAME_1 "Otwarcie Cel"
21#define DEFINED_NAME_2 "Niewidzialność na 10 sekund"
22#define DEFINED_NAME_3 "Zamrożenie CT na 8 sekund"
23#define DEFINED_NAME_4 "AWP z jednym nabojem"
24#define DEFINED_NAME_5 "Zamiana w ptaka"
25#define DEFINED_NAME_6 "TeleportujÄ…cy Smoke"
26#define DEFINED_NAME_7 "Mniejsza Grawitacja"
27#define DEFINED_NAME_8 "BunnyHop"
28#define DEFINED_NAME_9 "Nieśmiertelność na 4 sekundy"
29#define DEFINED_NAME_10 "Oślepienie CT na 8 sekund"
30#define DEFINED_NAME_RESPAWN "Zresp siÄ™"
31
32char EntityList[][] = { "func_door", "func_movinglinear" };
33char BreakList[] = { "func_button" };
34char DoorRotatingList[] = { "func_door_rotating" };
35int iEnt;
36int Ientmap;
37int DoorRotatingUnlock;
38// Ceny przedmiotów
39
40#define DEFINED_PRICE_1 4500
41#define DEFINED_PRICE_2 2000
42#define DEFINED_PRICE_3 4500
43#define DEFINED_PRICE_4 2000
44#define DEFINED_PRICE_5 5500
45#define DEFINED_PRICE_6 2800
46#define DEFINED_PRICE_7 800
47#define DEFINED_PRICE_8 1000
48#define DEFINED_PRICE_9 4200
49#define DEFINED_PRICE_10 4500
50#define DEFINED_PRICE_RESPAWN 3500
51
52// Zarabianie
53// Jeżeli więzień zabije strażnika otrzyma:
54#define DEFINED_MONEY_KILL_CT 100 // hajs za zabicie ct
55#define DEFINED_MONEY_KILL_CT_VIP 200 // hajs za zabicie ct przez VIP
56// Jeżeli strażnik zabije więźnia:
57#define DEFINED_MONEY_KILL_T 10 // hajs za zabicie t
58#define DEFINED_MONEY_KILL_T_VIP 20 // hajs za zabicie t przez VIP
59// Jeżeli więzień zabije więźnia
60#define DEFINED_MONEY_KILL_T_BY_T 50 // hajs za zabicie wieznia przez wieznia
61#define DEFINED_MONEY_KILL_T_BY_T_VIP 100 // hajs za zabicie wieznia przez wieznia przez vipa
62// Jeżeli gracz gra na serwerze
63#define DEFINED_MONEY_BY_PLAYING_ON_SERVER 20 // hajs za granie na serwerze
64#define DEFINED_MONEY_BY_PLAYING_ON_SERVER_VIP 40 // hajs za granie na serwerze przez vipa
65// Ogólne konfiguracja
66
67#define EARN_BUY 120.0 // Czas co który gracz dostaje hajsik wyżej podany 0.0 = nigdy pamiętaj wartość musi zostać podana np. 20.0, 120.0 jako FLOAT (DEFINED_MONEY_BY_PLAYING_ON_SERVER oraz DEFINED_MONEY_BY_PLAYING_ON_SERVER_VIP)
68static int ENABLE_VIP = 1; // 1 = wlaczenie systemu zarbiania vipa 0 = nie
69#define VIP_FLAG ADMFLAG_CUSTOM6 // flaga vipa przydatna do zarabiania
70static int MAX_BUYS = 2; // Maksymalna ilość zakupionych przedmiotów w sklepie
71
72// DZIAÅANIE PRZEDMIOTÓW
73#define DEFINED_ROUNDS_OTWIERANIE 3 // co ile rund można kupić otwarcie cel
74#define DEFINED_GRAVITY 0.75 // grawitka po zakupie im mniejszy float tym mniejsza grawitka np. 0.2 0.3
75#define DEFINED_GOD_TIMER 4.0 // czas goda jako float np. 4.0 10.0
76
77// ** CONFIG ** //
78
79
80#include <nox_ashop>
81#include <jail_menu>
82#pragma newdecls required
83
84EngineVersion g_Game;
85Handle earnTimer;
86int g_iClientBuys[MAXPLAYERS];
87int g_iCele;
88bool g_Fly[MAXPLAYERS];
89bool g_bHopping[MAXPLAYERS];
90bool g_bHasUsedRespawn[MAXPLAYERS];
91bool g_bSmoke[MAXPLAYERS];
92bool g_bNoDamage[MAXPLAYERS];
93bool g_bInvi[MAXPLAYERS];
94int g_ClientCredits[MAXPLAYERS];
95int g_iNiewidzialnosc[MAXPLAYERS];
96UserMsg g_FadeUserMsgId;
97
98Handle DB;
99//int randomint =
100public Plugin myinfo =
101{
102 name = "[Roberrt] JailBreak: Sklepik",
103 author = PLUGIN_AUTHOR,
104 description = "",
105 version = PLUGIN_VERSION,
106 url = ""
107};
108
109public void OnPluginStart()
110{
111 g_Game = GetEngineVersion();
112
113 if (g_Game != Engine_CSGO && g_Game != Engine_CSS)
114 {
115 SetFailState("This plugin is for CSGO/CSS only.");
116 }
117
118 RegConsoleCmd("sm_sklep", Sklep);
119 RegConsoleCmd("sm_s", Sklep);
120 RegConsoleCmd("sm_sklepik", Sklep);
121 RegConsoleCmd("sm_resp", Resp);
122 RegConsoleCmd("sm_fajki", Fajki);
123 RegConsoleCmd("drop", Command_ToggleFly);
124 RegAdminCmd("sm_dajmonety", DodajHajs, ADMFLAG_ROOT);
125
126 HookEvent("round_start", round_start);
127 HookEvent("player_death", player_death);
128 HookEvent("smokegrenade_detonate", Event_SmokeGrenadeDetonate, EventHookMode_Post);
129
130 PrecacheModel("models/pigeon.mdl");
131
132 if (earnTimer == INVALID_HANDLE)
133 if (EARN_BUY > 0.0)earnTimer = CreateTimer(EARN_BUY, earnTimerHandle, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
134 SQL();
135 ServerCommand("sv_allow_thirdperson 1");
136}
137public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
138{
139 CreateNative("API_SetFajki", API_AddFajki);
140 CreateNative("API_GetFajki", API_GetFajki);
141 RegPluginLibrary("jail");
142
143 return APLRes_Success;
144}
145//public void
146public int API_AddFajki(Handle api, int costam)
147{
148 int client = GetNativeCell(1);
149 int fajki = GetNativeCell(2);
150 g_ClientCredits[client] = fajki;
151}
152public int API_GetFajki(Handle api, int costam)
153{
154 int client = GetNativeCell(1);
155 return g_ClientCredits[client];
156}
157void SQL()
158{
159 char DBBuffer[512];
160 if (SQL_CheckConfig("gsystems"))
161 {
162 DB = SQL_Connect("gsystems", true, DBBuffer, sizeof(DBBuffer));
163
164 if (DB == INVALID_HANDLE)
165 PrintToServer("[jailSHOP] Could not connect: %s", DBBuffer);
166 else
167 {
168 SQL_Generate();
169 }
170 }
171 else
172 SetFailState("[jailSHOP]Nie mozna odnalezc konfiguracji 'gsystems' w databases.cfg.");
173}
174public Action DodajHajs(int client, int args)
175{
176 char arg[128], arg2[64];
177 GetCmdArg(1, arg, 128);
178 GetCmdArg(2, arg2, 64);
179 int target = FindTarget(client, arg, true, false);
180 int amm = StringToInt(arg2);
181 if (target == -1 || target == 0)
182 {
183 CPrintToChat(client, "{darkred}[#Uprawnienia]{lime} Nie posiadasz do tego {darkred}uprawnień");
184 return Plugin_Handled;
185 }
186 //ShowWarnMenu(client, target);
187 g_ClientCredits[target] += amm;
188 CPrintToChatAll("{darkred}[#Fajki]{lime} %N: Dodano {blue}%i fajek{lime} dla {orange}%N", client, amm, target);
189 PrintHintText(target, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'>Otrzymałeś %i fajek", amm);
190 return Plugin_Handled;
191}
192public Action Fajki(int client, int args)
193{
194 PrintToChat(client, " ----------------------------------------------------------");
195 CPrintToChat(client, "{green}[JB]\x01 Aktualnie posiadasz \x02%i fajek", GetFajki(client));
196 PrintToChat(client, " ----------------------------------------------------------");
197}
198public int ASHOP_OnClientBuyService(int client, const char[] service_string, int value)
199{
200 if (StrEqual(service_string, "Fajki"))
201 {
202 g_ClientCredits[client] += value;
203 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x10%d fajek\x01 przez \x02ASHOP\x01.", value);
204 PrintHintText(client, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'Poprawnie zakupiłeś %i fajek", value);
205 }
206}
207public void OnClientPutInServer(int i)
208{
209 g_Fly[i] = false;
210 g_iClientBuys[i] = 0;
211 g_bHopping[i] = false;
212 g_bHasUsedRespawn[i] = false;
213 ClientCommand(i, "firstperson");
214 SDKHook(i, SDKHook_OnTakeDamage, Hook_OnTakeDamage);
215 SQL_FetchCredits(i);
216}
217public void OnClientDisconnect(int client)
218{
219 SDKUnhook(client, SDKHook_OnTakeDamage, Hook_OnTakeDamage);
220}
221public Action Hook_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
222{
223 if (attacker > 0 && attacker <= MaxClients && victim > 0 && victim <= MaxClients)
224 {
225 if (g_bNoDamage[victim])
226 {
227 damage = 0.0;
228 return Plugin_Changed;
229 }
230 }
231 return Plugin_Continue;
232}
233public Action Command_ToggleFly(int client, int args)
234{
235 if (g_Fly[client])
236 {
237 MoveType movetype = GetEntityMoveType(client);
238
239 if (movetype != MOVETYPE_FLY)
240 {
241 CPrintToChat(client, "{green}[JB]\x01 Zmieniłeś swój tryb na \x02latanie\x01.");
242 SetEntityMoveType(client, MOVETYPE_FLY);
243 }
244 else
245 {
246 CPrintToChat(client, "{green}[JB]\x01 Zmieniłeś swój tryb na \x02chodzenie\x01.");
247 SetEntityMoveType(client, MOVETYPE_WALK);
248 }
249 }
250 return Plugin_Continue;
251}
252public Action earnTimerHandle(Handle timer)
253{
254 LoopValidClients(i)
255 {
256 if (ENABLE_VIP == 1)
257 {
258 if (GetUserFlagBits(i) & VIP_FLAG)
259 {
260 CPrintToChat(i, "{green}[JB]\x01 Otrzymałeś \x02%i fajek\x01 za granie na serwerze.", DEFINED_MONEY_BY_PLAYING_ON_SERVER_VIP);
261 ZwiekszFajki(i, DEFINED_MONEY_BY_PLAYING_ON_SERVER_VIP);
262 }
263 else
264 {
265 CPrintToChat(i, "{green}[JB]\x01 Otrzymałeś \x02%i fajek\x01 za granie na serwerze.", DEFINED_MONEY_BY_PLAYING_ON_SERVER);
266 ZwiekszFajki(i, DEFINED_MONEY_BY_PLAYING_ON_SERVER);
267 }
268 }
269 else
270 {
271 CPrintToChat(i, "{green}[JB]\x01 Otrzymałeś \x02%i fajek\x01 za granie na serwerze.", DEFINED_MONEY_BY_PLAYING_ON_SERVER);
272 ZwiekszFajki(i, DEFINED_MONEY_BY_PLAYING_ON_SERVER);
273 }
274 }
275 PlaySong("UI/item_showcase_coin_02.wav");
276}
277public Action Resp(int client, int args)
278{
279 int ZywiT = IloscZywych(CS_TEAM_T);
280
281 if (GetClientTeam(client) == CS_TEAM_CT)
282 {
283 CPrintToChat(client, "{green}[JB]\x01Musisz być \x02więźniem\x01 aby tego użyć.");
284 return Plugin_Handled;
285 }
286 if (IsPlayerAlive(client))
287 {
288 CPrintToChat(client, "{green}[JB]\x01Musisz być \x02martwy\x01 aby tego użyć.");
289 return Plugin_Handled;
290 }
291 if (g_bHasUsedRespawn[client])
292 {
293 CPrintToChat(client, "{green}[JB]\x01Użyłeś już możliwości \x02zrespienia się\x01.");
294 return Plugin_Handled;
295 }
296 if (ZywiT < 10)
297 {
298 CPrintToChat(client, "{green}[JB]\x01 Aktualnie jest \x02zbyt mało\x01 więźniów.");
299 return Plugin_Handled;
300 }
301 if (GetFajki(client) < DEFINED_PRICE_RESPAWN)
302 {
303 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
304 return Plugin_Handled;
305 }
306 if (API_Zabawa())
307 {
308 CPrintToChat(client, "{green}[JB]\x01 Aktualnie trwa \x02zabawa\x01.");
309 return Plugin_Handled;
310 }
311 ZmniejszFajki(client, DEFINED_PRICE_RESPAWN);
312 CS_RespawnPlayer(client);
313 PrintCenterTextAll("%N <font color='#ff1111'>zrespił się</font> (<font color='#ff1111'>!resp</font>)", client);
314 LoopValidClients(i)
315 {
316 ClientCommand(i, "play *buttons/light_power_on_switch_01.wav");
317 }
318 g_bHasUsedRespawn[client] = true;
319 CPrintToChatAll("{green}[JB]\x01 Gracz \x10%N\x01 zrespił się. Zresp się za pomocą komendy \x02!resp\x01.", client);
320 return Plugin_Handled;
321}
322public Action OnWeaponCanUse(int client, int weapon)
323{
324 if (g_Fly[client])
325 {
326 char sClassname[32];
327 GetEdictClassname(weapon, sClassname, sizeof(sClassname));
328 if (!StrEqual(sClassname, "weapon_knife"))
329 return Plugin_Handled;
330 }
331 return Plugin_Continue;
332}
333public Action Sklep(int client, int args)
334{
335 if (IsPlayerAlive(client))
336 {
337 if (GetClientTeam(client) == CS_TEAM_T)
338 {
339 if (g_iClientBuys[client] < MAX_BUYS)
340 {
341 char buffer[512];
342
343 Menu menu = CreateMenu(MenuHandler);
344
345 Format(buffer, 512, "JailBreak :: Sklepik Więzienny\n \n# Witaj w sklepiku więziennym by Roberrt\n# Aktualnie posiadasz %i fajek\n# Życzymy miłych zakupów\n ", GetFajki(client));
346 menu.SetTitle(buffer);
347
348 // ** Structure ** //
349 /*
350 Ex. Item - Price fajek
351 Niewidzialność na 10 sekund - 4000 fajek.
352 */
353
354 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_1, DEFINED_PRICE_1);
355 menu.AddItem("Item_1", buffer, g_iCele == 0 ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
356
357 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_2, DEFINED_PRICE_2);
358 menu.AddItem("Item_2", buffer, g_iNiewidzialnosc[client] == 0 ? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
359
360 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_3, DEFINED_PRICE_3);
361 menu.AddItem("Item_3", buffer);
362
363 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_4, DEFINED_PRICE_4);
364 menu.AddItem("Item_4", buffer);
365
366 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_5, DEFINED_PRICE_5);
367 menu.AddItem("Item_5", buffer);
368
369 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_6, DEFINED_PRICE_6);
370 menu.AddItem("Item_6", buffer);
371
372 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_7, DEFINED_PRICE_7);
373 menu.AddItem("Item_7", buffer);
374
375 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_8, DEFINED_PRICE_8);
376 menu.AddItem("Item_8", buffer);
377
378 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_9, DEFINED_PRICE_9);
379 menu.AddItem("Item_9", buffer);
380
381 Format(buffer, 512, "%s - %i fajek", DEFINED_NAME_10, DEFINED_PRICE_10);
382 menu.AddItem("Item_10", buffer, ITEMDRAW_DISABLED);
383
384 menu.Display(client, 120);
385 }
386 else SklepLocked(client);
387 }
388 else CPrintToChat(client, "{green}[JB]\x01 Z sklepu mogą korzystać tylko \x02więźniowie\x01.");
389 }
390 else CPrintToChat(client, "{green}[JB]\x01 Z sklepu mogą korzystać tylko \x02żywi więźniowie\x01.");
391 return Plugin_Handled;
392}
393stock void SklepLocked(int client)
394{
395 CPrintToChat(client, "{green}[JB]\x01 Sklep jest aktualnie \x02zablokowany\x01.");
396 PrintHintText(client, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Błąd\n</font><font color='#26ff00'>Sklep aktualnie jest zablokowany");
397}
398public int MenuHandler(Menu menu, MenuAction action, int client, int itemNum)
399{
400 switch (action)
401 {
402 case MenuAction_Select:
403 {
404 char item[64];
405 GetMenuItem(menu, itemNum, item, sizeof(item));
406 if (API_Zabawa())
407 {
408 SklepLocked(client);
409 //return
410 }
411 /*
412 if (StrEqual(item, "Item_"))
413 {
414 if (GetFajki(client) >= DEFINED_PRICE_)
415 {
416 ZmniejszFajki(client, DEFINED_PRICE_);
417 ClientCommand(client, "sm_sklep");
418 }
419 else
420 {
421 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
422 ClientCommand(client, "sm_sklep");
423 }
424 }
425 */
426 else if (StrEqual(item, "Item_1"))
427 {
428 if (GetFajki(client) >= DEFINED_PRICE_1)
429 {
430 g_iClientBuys[client] += 1;
431 g_iCele = DEFINED_ROUNDS_OTWIERANIE;
432 ZmniejszFajki(client, DEFINED_PRICE_1);
433 vOtworz();
434 PrintCenterTextAll("%N wykupił otwarcie cel!", client);
435 CPrintToChatAll("{green}[JB]\x01 %N wykupił \x02otwarcie cel\x01", client);
436 ClientCommand(client, "sm_sklep");
437 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_1, DEFINED_PRICE_1);
438 }
439 else
440 {
441 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
442 ClientCommand(client, "sm_sklep");
443 }
444 }
445 else if (StrEqual(item, "Item_2"))
446 {
447 if (GetFajki(client) >= DEFINED_PRICE_2)
448 {
449 g_iClientBuys[client] += 1;
450 g_iNiewidzialnosc[client] += 2;
451 g_bInvi[client] = true;
452 ZmniejszFajki(client, DEFINED_PRICE_2);
453 CreateTimer(10.0, inviDisable, client);
454 SetEntityRenderMode(client, RENDER_NONE);
455 CPrintToChatAll("{green}[JB]\x01 %N stał się \x02niewidzialny\x01 na 10 sekund", client);
456 ClientCommand(client, "sm_sklep");
457 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_2, DEFINED_PRICE_2);
458 }
459 else
460 {
461 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
462 ClientCommand(client, "sm_sklep");
463 }
464 }
465 else if (StrEqual(item, "Item_3"))
466 {
467 if (GetFajki(client) >= DEFINED_PRICE_3)
468 {
469 g_iClientBuys[client] += 1;
470 ZmniejszFajki(client, DEFINED_PRICE_3);
471 CPrintToChatAll("{green}[JB]\x01 %N \x02zamroził strażników\x01 na 8 sekund", client);
472 LoopValidClients(i)
473 {
474 if (GetClientTeam(i) == CS_TEAM_CT)
475 {
476 SetEntityMoveType(i, MOVETYPE_NONE);
477 }
478 }
479 CreateTimer(8.0, freezeDisable);
480 ClientCommand(client, "sm_sklep");
481 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_3, DEFINED_PRICE_3);
482 }
483 else
484 {
485 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
486 ClientCommand(client, "sm_sklep");
487 }
488 }
489 else if (StrEqual(item, "Item_4"))
490 {
491 if (GetFajki(client) >= DEFINED_PRICE_4)
492 {
493 g_iClientBuys[client] += 1;
494 ZmniejszFajki(client, DEFINED_PRICE_4);
495 Client_GiveWeaponAndAmmo(client, "weapon_awp", false, 1, 0, 0, 0);
496
497 ClientCommand(client, "sm_sklep");
498 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_4, DEFINED_PRICE_4);
499 }
500 else
501 {
502 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
503 ClientCommand(client, "sm_sklep");
504 }
505 }
506 else if (StrEqual(item, "Item_5"))
507 {
508 if (GetFajki(client) >= DEFINED_PRICE_5)
509 {
510 g_iClientBuys[client] += 1;
511 g_Fly[client] = true;
512 ZmniejszFajki(client, DEFINED_PRICE_5);
513 SetEntityMoveType(client, MOVETYPE_FLY);
514 SetEntityModel(client, "models/pigeon.mdl");
515 SetEntityHealth(client, 1);
516 UsunBronie(client);
517 GivePlayerItem(client, "weapon_knife");
518 ClientCommand(client, "sm_sklep");
519 ClientCommand(client, "thirdperson");
520 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_5, DEFINED_PRICE_5);
521 }
522 else
523 {
524 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
525 ClientCommand(client, "sm_sklep");
526 }
527 }
528 else if (StrEqual(item, "Item_6"))
529 {
530 if (GetFajki(client) >= DEFINED_PRICE_6)
531 {
532 g_iClientBuys[client] += 1;
533 g_bSmoke[client] = true;
534 GivePlayerItem(client, "weapon_smokegrenade");
535 ZmniejszFajki(client, DEFINED_PRICE_6);
536 ClientCommand(client, "sm_sklep");
537 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_6, DEFINED_PRICE_6);
538 }
539 else
540 {
541 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
542 ClientCommand(client, "sm_sklep");
543 }
544 }
545 else if (StrEqual(item, "Item_7"))
546 {
547 if (GetFajki(client) >= DEFINED_PRICE_7)
548 {
549 g_iClientBuys[client] += 1;
550 ZmniejszFajki(client, DEFINED_PRICE_7);
551 SetEntityGravity(client, DEFINED_GRAVITY);
552 ClientCommand(client, "sm_sklep");
553 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_7, DEFINED_PRICE_7);
554 }
555 else
556 {
557 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
558 ClientCommand(client, "sm_sklep");
559 }
560 }
561 else if (StrEqual(item, "Item_8"))
562 {
563 if (GetFajki(client) >= DEFINED_PRICE_8)
564 {
565 g_iClientBuys[client] += 1;
566 g_bHopping[client] = true;
567 ZmniejszFajki(client, DEFINED_PRICE_8);
568 ClientCommand(client, "sm_sklep");
569 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_8, DEFINED_PRICE_8);
570 }
571 else
572 {
573 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
574 ClientCommand(client, "sm_sklep");
575 }
576 }
577 else if (StrEqual(item, "Item_9"))
578 {
579 if (GetFajki(client) >= DEFINED_PRICE_9)
580 {
581 g_iClientBuys[client] += 1;
582 g_bNoDamage[client] = true;
583 CreateTimer(DEFINED_GOD_TIMER, godDisable, client);
584 ZmniejszFajki(client, DEFINED_PRICE_9);
585 ClientCommand(client, "sm_sklep");
586 CPrintToChatAll("{green}[JB]\x01 Gracz \x10%N\x01 stał się \x02nieśmiertelny\x01.", client);
587 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_9, DEFINED_PRICE_9);
588 }
589 else
590 {
591 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
592 ClientCommand(client, "sm_sklep");
593 }
594 }
595 else if (StrEqual(item, "Item_10"))
596 {
597 if (GetFajki(client) >= DEFINED_PRICE_10)
598 {
599 g_iClientBuys[client] += 1;
600 ZmniejszFajki(client, DEFINED_PRICE_10);
601 CPrintToChatAll("{green}[JB]\x01 %N \x02oślepił strażników\x01 na 8 sekund", client);
602 CreateTimer(8.0, blindDisable);
603 ClientCommand(client, "sm_sklep");
604 LoopValidClients(i)
605 {
606 if (IsPlayerAlive(i) && GetClientTeam(i) == CS_TEAM_CT)
607 {
608 PerformBlind(i, 0);
609 }
610 }
611 CPrintToChat(client, "{green}[JB]\x01 Poprawnie zakupiłeś \x02%s\x01 za \x10%i fajek\x01.", DEFINED_NAME_10, DEFINED_PRICE_10);
612 }
613 else
614 {
615 CPrintToChat(client, "{green}[JB]\x01 Nie posiadasz tylu \x02fajek\x01 aby to zakupić!");
616 ClientCommand(client, "sm_sklep");
617 }
618 }
619
620 }
621 }
622}
623stock void vOtworz()
624{
625 for (int i = 0; i < sizeof(EntityList); i++)
626 while ((iEnt = FindEntityByClassname(iEnt, EntityList[i])) != -1)AcceptEntityInput(iEnt, "Open");
627 for (int i = 0; i < sizeof(DoorRotatingList); i++)
628 while ((DoorRotatingUnlock = FindEntityByClassname(DoorRotatingUnlock, DoorRotatingList[i])) != -1)
629 AcceptEntityInput(DoorRotatingUnlock, "unlock");
630 for (int i = 0; i < sizeof(BreakList); i++)
631 while ((Ientmap = FindEntityByClassname(Ientmap, BreakList[i])) != -1)
632 {
633 AcceptEntityInput(Ientmap, "press");
634 }
635}
636public Action godDisable(Handle timer, int client)
637{
638 PrintHintText(client, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'>Twoja nieśmiertelność skończyła się");
639 CPrintToChatAll("{green}[JB]\x01 Gracz \x10%N\x01 jest już \x02śmiertelny\x01.", client);
640 g_bNoDamage[client] = false;
641}
642public Action inviDisable(Handle timer, int client)
643{
644 PrintHintText(client, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'>Twoja niewidzialność skończyła się");
645 g_bInvi[client] = false;
646 SetEntityRenderMode(client, RENDER_NORMAL);
647 CPrintToChatAll("{green}[JB]\x01 %N jest już \x02widzialny\x01.", client);
648}
649public Action freezeDisable(Handle timer)
650{
651 LoopValidClients(i)
652 {
653 if (GetClientTeam(i) == CS_TEAM_CT)
654 {
655 SetEntityMoveType(i, MOVETYPE_WALK);
656 PrintHintText(i, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'>Zostałeś odmrożony");
657 }
658 if (GetClientTeam(i) == CS_TEAM_T)PrintHintText(i, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'>Zamrożenie strażników skończyło się");
659 }
660
661}
662public Action blindDisable(Handle timer)
663{
664 LoopValidClients(i)
665 {
666 if (GetClientTeam(i) == CS_TEAM_CT)
667 {
668 PerformBlind(i, 0);
669 PrintHintText(i, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'>Oślepienie skończyło się");
670 }
671 if (GetClientTeam(i) == CS_TEAM_T)PrintHintText(i, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Powiadomienie\n</font><font color='#26ff00'>Oślepienie strażników skończyło się");
672 }
673}
674void PerformBlind(int target, int amount)
675{
676 int targets[2];
677 targets[0] = target;
678
679 int duration = 1536;
680 int holdtime = 1536;
681 int flags;
682 if (amount == 0)
683 {
684 flags = (0x0001 | 0x0010);
685 }
686 else
687 {
688 flags = (0x0002 | 0x0008);
689 }
690
691 int color[4] = { 0, 0, 0, 0 };
692 color[3] = amount;
693
694 Handle message = StartMessageEx(g_FadeUserMsgId, targets, 1);
695 if (GetUserMessageType() == UM_Protobuf)
696 {
697 Protobuf pb = UserMessageToProtobuf(message);
698 pb.SetInt("duration", duration);
699 pb.SetInt("hold_time", holdtime);
700 pb.SetInt("flags", flags);
701 pb.SetColor("clr", color);
702 }
703 else
704 {
705 BfWrite bf = UserMessageToBfWrite(message);
706 bf.WriteShort(duration);
707 bf.WriteShort(holdtime);
708 bf.WriteShort(flags);
709 bf.WriteByte(color[0]);
710 bf.WriteByte(color[1]);
711 bf.WriteByte(color[2]);
712 bf.WriteByte(color[3]);
713 }
714
715 EndMessage();
716}
717public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
718{
719 if (!IsClientInGame(client))
720 {
721 return Plugin_Continue;
722 }
723 if (g_Fly[client])
724 {
725 if (buttons & IN_ATTACK || buttons & IN_ATTACK2)
726 {
727 PrintHintText(client, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Błąd\n</font><font color='#26ff00'>Atakowanie zablokowane");
728 buttons &= ~IN_ATTACK2;
729 buttons &= ~IN_ATTACK;
730 return Plugin_Handled;
731 }
732 }
733 if (g_bInvi[client])
734 {
735 if (buttons & IN_ATTACK || buttons & IN_ATTACK2)
736 {
737 PrintHintText(client, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Błąd\n</font><font color='#26ff00'>Atakowanie zablokowane");
738 buttons &= ~IN_ATTACK2;
739 buttons &= ~IN_ATTACK;
740 return Plugin_Handled;
741 }
742 if (buttons & IN_USE)
743 {
744 PrintHintText(client, "<font color='#ff0000'><font size='20'><u>CS-4Frags.PL</u></font><font color='#ffffff'> :: <font color='#ff9d00'>Błąd\n</font><font color='#26ff00'>Przycisk użycia zablokowany");
745 buttons &= ~IN_USE;
746 return Plugin_Handled;
747 }
748 }
749 if (!g_bHopping[client])
750 return Plugin_Continue;
751 if (IsPlayerAlive(client))
752 {
753 int g_fLastButtons1[MAXPLAYERS + 1], g_fLastFlags1[MAXPLAYERS + 1], g_iJumps1[MAXPLAYERS + 1], fCurFlags1, fCurButtons1;
754 fCurFlags1 = GetEntityFlags(client);
755 fCurButtons1 = GetClientButtons(client);
756 if (g_fLastFlags1[client] & FL_ONGROUND && !(fCurFlags1 & FL_ONGROUND) && !(g_fLastButtons1[client] & IN_JUMP) && fCurButtons1 & IN_JUMP)g_iJumps1[client]++;
757 else if (fCurFlags1 & FL_ONGROUND)g_iJumps1[client] = 0;
758 else if (!(g_fLastButtons1[client] & IN_JUMP) && fCurButtons1 & IN_JUMP && g_iJumps1[client] == 1)
759 {
760 g_iJumps1[client]++;
761 float vVel[3];
762 GetEntPropVector(client, Prop_Data, "m_vecVelocity", vVel);
763 vVel[2] = 250.0;
764 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vVel);
765 }
766
767 g_fLastFlags1[client] = fCurFlags1;
768 g_fLastButtons1[client] = fCurButtons1;
769 }
770 if (IsPlayerAlive(client) && GetEntityFlags(client) & FL_ONGROUND && buttons & IN_JUMP)
771 {
772 float fVelocity[3];
773 GetEntPropVector(client, Prop_Data, "m_vecVelocity", fVelocity);
774 fVelocity[2] = 267.0;
775 TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, fVelocity);
776 }
777 return Plugin_Continue;
778}
779public Action round_start(Handle event, const char[] name, bool dontBroadcast)
780{
781 LoopValidClients(i)
782 {
783 g_bSmoke[i] = false;
784 g_Fly[i] = false;
785 g_iClientBuys[i] = 0;
786 g_bHopping[i] = false;
787 g_bHasUsedRespawn[i] = false;
788 g_bNoDamage[i] = false;
789 if (g_iNiewidzialnosc[i] > 0)g_iNiewidzialnosc[i] -= 1;
790 SQL_AddClient(i);
791 }
792 if (g_iCele > 0)g_iCele -= 1;
793}
794public Action player_death(Handle event, const char[] name, bool dontBroadcast)
795{
796 int attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
797 int client = GetClientOfUserId(GetEventInt(event, "userid"));
798 SetEntityGravity(client, 1.0);
799 if (g_Fly[client])ClientCommand(client, "firstperson");
800 g_bHopping[client] = false;
801 g_Fly[client] = false;
802 g_bSmoke[client] = false;
803 g_bNoDamage[client] = false;
804 //zarabianie
805 if (attacker != client)
806 {
807 if (GetClientTeam(attacker) == CS_TEAM_CT && GetClientTeam(client) == CS_TEAM_T)
808 {
809 if (ENABLE_VIP == 1)
810 {
811 if (GetUserFlagBits(attacker) & ADMFLAG_CUSTOM6)
812 {
813 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_T_VIP);
814 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_T_VIP);
815 }
816 else
817 {
818 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_T);
819 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_T);
820 }
821 }
822 else
823 {
824 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_T);
825 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_T);
826 }
827 }
828 else if (GetClientTeam(attacker) == CS_TEAM_T && GetClientTeam(client) == CS_TEAM_CT)
829 {
830 if (ENABLE_VIP == 1)
831 {
832 if (GetUserFlagBits(attacker) & ADMFLAG_CUSTOM6)
833 {
834 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_CT_VIP);
835 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_CT_VIP);
836 }
837 else
838 {
839 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_CT);
840 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_CT);
841 }
842 }
843 else
844 {
845 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_CT);
846 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_CT);
847 }
848 }
849 else if (GetClientTeam(attacker) == CS_TEAM_T && GetClientTeam(client) == CS_TEAM_T)
850 {
851 if (ENABLE_VIP == 1)
852 {
853 if (GetUserFlagBits(attacker) & ADMFLAG_CUSTOM6)
854 {
855 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_T_BY_T_VIP);
856 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_T_BY_T_VIP);
857 }
858 else
859 {
860 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_T_BY_T);
861 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_T_BY_T);
862 }
863 }
864 else
865 {
866 ZwiekszFajki(attacker, DEFINED_MONEY_KILL_T_BY_T);
867 CPrintToChat(attacker, "{green}[JB]\x01 Otrzymałeś \x10%i fajek\x01 za \x02zabójstwo\x01.", DEFINED_MONEY_KILL_T_BY_T);
868 }
869 }
870 }
871}
872public Action Event_SmokeGrenadeDetonate(Event event, const char[] name, bool dontBroadcast)
873{
874 float DetonateOrigin[3];
875 DetonateOrigin[0] = event.GetFloat("x");
876 DetonateOrigin[1] = event.GetFloat("y");
877 DetonateOrigin[2] = event.GetFloat("z");
878
879 int client = GetClientOfUserId(event.GetInt("userid"));
880
881 if (g_bSmoke[client])
882 {
883 g_bSmoke[client] = false;
884 if (IsClientInGame(client))
885 SetClientViewEntity(client, client);
886
887 TeleportEntity(client, DetonateOrigin, NULL_VECTOR, NULL_VECTOR);
888 }
889}
890stock void UsunBronie(int client)
891{
892 int wepIdx;
893
894 // strip all weapons
895 for (int s = 0; s < 4; s++)
896 {
897 if ((wepIdx = GetPlayerWeaponSlot(client, s)) != -1)
898 {
899 RemovePlayerItem(client, wepIdx);
900 RemoveEdict(wepIdx);
901 }
902 }
903}
904stock int IloscZywych(int team)
905{
906 int c;
907 LoopValidClients(i)
908 {
909 if (GetClientTeam(i) == team && IsPlayerAlive(i))c++;
910 }
911 return c;
912}
913stock int GetFajki(int client)
914{
915 return g_ClientCredits[client];
916}
917stock int ZmniejszFajki(int client, int amount)
918{
919 g_ClientCredits[client] -= amount;
920}
921stock int ZwiekszFajki(int client, int amount)
922{
923 g_ClientCredits[client] += amount;
924}
925stock void SQL_FetchCredits(int client)
926{
927 if (DB != INVALID_HANDLE)
928 {
929 char g_sSQLBuffer[128];
930 char sid[64];
931 GetClientAuthId(client, AuthId_SteamID64, sid, 64);
932 Format(g_sSQLBuffer, sizeof(g_sSQLBuffer), "SELECT `credits` FROM `jailbreak_fajki` WHERE `authid64`='%s'", sid);
933 SQL_TQuery(DB, Fetch_CB, g_sSQLBuffer, client);
934 //CloseHandle(query);
935 }
936}
937public void Fetch_CB(Handle owner, Handle hndl, const char[] error, any client)
938{
939 if (!StrEqual("", error))
940 {
941 LogError("Query failed: %s", error);
942 }
943 if (SQL_FetchRow(hndl))g_ClientCredits[client] = SQL_FetchInt(hndl, 0);
944 else SQL_AddClient(client);
945}
946public void SQL_Error(Handle owner, Handle hndl, const char[] error, any data)
947{
948 if (!StrEqual("", error))
949 {
950 LogError("Query failed: %s", error);
951 }
952}
953stock void SQL_Generate()
954{
955 if (DB != INVALID_HANDLE)
956 {
957 SQL_TQuery(DB, SQL_Error, "CREATE TABLE IF NOT EXISTS `jailbreak_fajki` (`authid64` int(11) NOT NULL PRIMARY KEY, `credits` int(11) NOT NULL) DEFAULT CHARSET=latin1;");
958 }
959 else
960 {
961 SQL();
962 SQL_Generate();
963 }
964}
965stock void SQL_AddClient(int client)
966{
967 if (DB != INVALID_HANDLE)
968 {
969 char steamid[64];
970 GetClientAuthId(client, AuthId_SteamID64, steamid, sizeof(steamid));
971 char g_sSQLBuffer[128];
972 Format(g_sSQLBuffer, sizeof(g_sSQLBuffer), "INSERT INTO `jailbreak_fajki` VALUES ('%s', 0) ON DUPLICATE KEY UPDATE `credits`=%i;", steamid, g_ClientCredits[client]);
973 SQL_TQuery(DB, SQL_Error, g_sSQLBuffer);
974 SQL_FetchCredits(client);
975 }
976 else
977 {
978 SQL();
979 SQL_Generate();
980 }
981}
982stock void PlaySong(const char[] path)
983{
984 LoopValidClients(i)
985 {
986 ClientCommand(i, "play *%s", path);
987 }
988}
989stock bool IsValidClient(int client)
990{
991 if (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client))
992 return true;
993
994 return false;
995}