Advertisement
supertimor

Untitled

Jan 27th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.80 KB | None | 0 0
  1. #include <sourcemod>
  2. #include <sdkhooks>
  3. #include <sdktools>
  4. #include <codmod>
  5. #include <cstrike>
  6. // lista broni :
  7. //"weapon_ak47","weapon_m4a1","weapon_m4a1_silencer","weapon_awp", "weapon_sg552","weapon_aug","weapon_p90","weapon_galilar", "weapon_famas","weapon_ssg08","weapon_g3sg1","weapon_scar20","weapon_m249","weapon_negev","weapon_nova","weapon_xm1014", "weapon_sawedoff","weapon_mag7","weapon_mac10","weapon_mp9","weapon_mp7","weapon_ump45","weapon_bizon","weapon_glock","weapon_fiveseven","weapon_deagle","weapon_revolver","weapon_hkp2000","weapon_usp_silencer","weapon_p250","weapon_elite","weapon_tec9","weapon_cz75a,"weapon_mp5sd"
  8. #define PREFIX "\x01\x0B \x02★Multi Head★\x01"
  9.  
  10. // statystyki klasy /////////////////////////////////////////////////////
  11. new const String:nazwa[] = "Medyk";
  12. new const String:opis[] = "Ma dwie apteczki, które leczą w zależności od inteligencji.\nRegeneruje mu się życie.\nMoże wskrzesić jednego gracza na rundę, używając R na nożu.";
  13. new const String:bronie[] = "#weapon_aug#weapon_glock";
  14. new const inteligencja = 0;
  15. new const zdrowie = 10;
  16. new const obrazenia = 10;
  17. new const wytrzymalosc = 10;
  18. new const kondycja = 10;
  19. new const String:frakcja[] = "DARMOWE"; // "PREMIUM"
  20. /////////////////////////////////////////////////////////////////////////
  21. // zmienne globalne
  22. //Skille : 2 apteczki, wskrzeszenie 1 czlonka w ciagu rundy (+dodatkowy exp za wskreszenie), regeneracja 5 hp co 3 sekundy
  23. bool ma_klase[65];
  24. bool moze_wskrzesic;
  25. int ilosc_apteczek_medyka;
  26. int dead_t, dead_ct, umarlct, umarltt;
  27.  
  28. Handle timer_regeneracja[MAXPLAYERS + 1];
  29. ConVar medyk_apteczka_podstawa;
  30. ConVar medyk_apteczka_wspolczynnik;
  31. ConVar medyk_wskrzeszenie_doswiadczenie;
  32. ConVar medyk_regeneracja_hp;
  33. ConVar medyk_regeneracja_czas;
  34. //
  35. public Plugin:myinfo =
  36. {
  37. name = nazwa,
  38. author = "SUPER TIMOR",
  39. description = "Klasa - Medyk",
  40. version = "1.0.0",
  41. url = "http://steamcommunity.com/id/bonkwszlaufrocku"
  42. };
  43. public OnPluginStart()
  44. {
  45. cod_register_class(nazwa, opis, bronie, inteligencja, zdrowie, obrazenia, wytrzymalosc, kondycja, frakcja);
  46.  
  47. HookEvent("player_spawn", OdrodzenieGracza);
  48. HookEvent("player_death", Event_PlayerDeath);
  49.  
  50. medyk_apteczka_podstawa = CreateConVar("medyk_apteczka_podstawa", "40", "Podstawa leczenia apteczki medyka");
  51. medyk_apteczka_wspolczynnik = CreateConVar("medyk_apteczka_wspolczynnik", "0.5", "Współczynnik do mnożenia inteligencji dodawanej do podstawy leczenia apteczki medyka.\nWartość we float, np 0.1");
  52. medyk_wskrzeszenie_doswiadczenie = CreateConVar("medyk_wskrzeszenie_doswiadczenie", "20", "Doświadczenie za wskrzeszenie kompana.");
  53. medyk_regeneracja_hp = CreateConVar("medyk_regeneracja_hp", "5", "HP, które medyk otrzymuje co X sekund.");
  54. medyk_regeneracja_czas = CreateConVar("medyk_regeneracja_czas", "3", "CO ile sekund medyk otrzymuje X HP.");
  55.  
  56. AutoExecConfig(true, "medyk", "sourcemod/cod_configi");
  57. }
  58. public cod_class_enabled(client)
  59. {
  60. ma_klase[client] = true;
  61. ilosc_apteczek_medyka = 2;
  62. }
  63. public cod_class_disabled(client)
  64. {
  65. ma_klase[client] = false;
  66. }
  67. public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
  68. {
  69. int victim = GetClientOfUserId(event.GetInt("userid"));
  70. int team = GetClientTeam(victim);
  71.  
  72. if(team == 2)
  73. {
  74. dead_ct = victim;
  75. umarlct = 1;
  76. }
  77. else if(team == 3)
  78. {
  79. dead_t = victim;
  80. umarltt = 1;
  81. }
  82. }
  83. public cod_class_skill_used(client)
  84. {
  85. if(!IsValidClient(client) || !ma_klase[client])
  86. return;
  87.  
  88. if(ilosc_apteczek_medyka)
  89. {
  90. int zdrowie_gracza = GetClientHealth(client);
  91. int maksymalne_zdrowie = cod_get_user_maks_health(client);
  92. int ilosc_uleczonego_hp = medyk_apteczka_podstawa.IntValue+RoundFloat(cod_get_user_maks_intelligence(client)*medyk_apteczka_wspolczynnik.FloatValue);
  93. if(!IsPlayerAlive(client) || maksymalne_zdrowie <= zdrowie_gracza)
  94. PrintToChat(client, "%s Jesteś w pełni uleczony!", PREFIX);
  95. else
  96. {
  97.  
  98. SetEntData(client, FindDataMapInfo(client, "m_iHealth"), (zdrowie_gracza+ilosc_uleczonego_hp < maksymalne_zdrowie)? zdrowie_gracza+ilosc_uleczonego_hp: maksymalne_zdrowie);
  99. ilosc_apteczek_medyka --;
  100. }
  101. }
  102. else
  103. PrintToChat(client, "%s Wykorzystałeś już moc klasy w tym życiu!", PREFIX);
  104. }
  105. public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapons)
  106. {
  107. if(!IsValidClient(client) || !ma_klase[client])
  108. return Plugin_Continue;
  109.  
  110. if(!IsPlayerAlive(client))
  111. return Plugin_Continue;
  112.  
  113. static bool:oldbuttons[65];
  114.  
  115. new active_weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
  116. if(active_weapon != -1)
  117. {
  118. new String:weapon[32];
  119. GetEdictClassname(active_weapon, weapon, sizeof(weapon));
  120.  
  121. if(StrContains(weapon, "knife") >= 0 || StrContains(weapon, "bayonet") >= 0)
  122. {
  123. if(!oldbuttons[client] && buttons & IN_RELOAD)
  124. {
  125. int druzynagracza = GetClientTeam(client);
  126. if(moze_wskrzesic)
  127. {
  128. if ((druzynagracza == 2 && umarlct) || (druzynagracza == 3 && umarltt))
  129. {
  130. if (druzynagracza == 3)
  131. {
  132. CS_RespawnPlayer(dead_t);
  133. cod_set_user_xp(client, cod_get_user_xp(client)+medyk_wskrzeszenie_doswiadczenie.IntValue);
  134. }
  135. else if (druzynagracza == 2)
  136. {
  137. CS_RespawnPlayer(dead_ct);
  138. cod_set_user_xp(client, cod_get_user_xp(client)+medyk_wskrzeszenie_doswiadczenie.IntValue);
  139. }
  140.  
  141. moze_wskrzesic = false;
  142. }
  143. else if ((druzynagracza == 2 && !umarlct) || (druzynagracza == 3 && !umarltt))
  144. PrintToChat(client, "%s Nie ma świeżej duszy do wskrzeszenia.", PREFIX);
  145. }
  146. else
  147. PrintToChat(client, "%s Wykorzystałeś już moc klasy w tym życiu!", PREFIX);
  148. oldbuttons[client] = true;
  149. }
  150. else if(oldbuttons[client] && !(buttons & IN_RELOAD))
  151. oldbuttons[client] = false;
  152. }
  153. }
  154. return Plugin_Continue;
  155. }
  156. public Action:OdrodzenieGracza(Handle:event, String:name[], bool:dontBroadcast)
  157. {
  158. new client = GetClientOfUserId(GetEventInt(event, "userid"));
  159.  
  160. umarlct = 0;
  161. umarltt = 0;
  162.  
  163. ilosc_apteczek_medyka = 2;
  164. moze_wskrzesic = true;
  165. timer_regeneracja[client] = CreateTimer(medyk_regeneracja_czas.FloatValue, Regeneracja, client);
  166. }
  167. public Action:Regeneracja(Handle timer, any client)
  168. {
  169. if(!IsClientInGame(client))
  170. ClearTimer(timer_regeneracja[client]);
  171. if(IsPlayerAlive(client))
  172. {
  173. int zdrowie_gracza = GetClientHealth(client);
  174. int maksymalne_zdrowie = cod_get_user_maks_health(client);
  175. SetEntData(client, FindDataMapInfo(client, "m_iHealth"), (zdrowie_gracza+medyk_regeneracja_hp.IntValue < maksymalne_zdrowie)? zdrowie_gracza+medyk_regeneracja_hp.IntValue: maksymalne_zdrowie);
  176. }
  177. else
  178. ClearTimer(timer_regeneracja[client]);
  179. }
  180. stock ClearTimer(&Handle:timer)
  181. {
  182. if (timer != INVALID_HANDLE)
  183. {
  184. KillTimer(timer);
  185. timer = INVALID_HANDLE;
  186. }
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement