FlacoBey

Untitled

Feb 19th, 2019
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.40 KB | None | 0 0
  1. #include sdktools
  2. #include sdkhooks
  3.  
  4. new bool:IsFucked[2048+1] = false;
  5. float LastMessage[MAXPLAYERS+1];
  6. new ref[MAXPLAYERS+1];
  7. Handle EndLoadBar[MAXPLAYERS+1];
  8. int Shots[MAXPLAYERS+1];
  9.  
  10. ConVar hChanceOfKlin, hCountOfShots, hTimerOfOutKlin;
  11.  
  12. public OnPluginStart()
  13. {
  14.     HookEvent("weapon_fire", FireBulletsPost)
  15.     hChanceOfKlin = CreateConVar("vChance", "25", "Шанс того что оружия заклинит от 0 до 100");
  16.     hCountOfShots = CreateConVar("vShots", "25", "Кол-во выстрелов для срабатывания шанса");
  17.     hTimerOfOutKlin = CreateConVar("vTime", "20.0", "Время расклина(желательно ставить флоат число(20.0).");
  18.    
  19.     AutoExecConfig(true, "KlinikaWeapon");
  20. }
  21.  
  22. public OnClientPutInServer(client)
  23. {
  24.     SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
  25. }
  26.  
  27. public OnClientDisconnect(client)
  28. {
  29.     SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
  30.     if (EndLoadBar[client] != null)
  31.     {
  32.         KillTimer(EndLoadBar[client]);
  33.         EndLoadBar[client] = null;
  34.     }
  35. }
  36.  
  37. public Action:WeaponCanUse(client, weapon)
  38. {
  39.     if(bIsSurvivor(client))
  40.     {
  41.         if(EndLoadBar[client] != INVALID_HANDLE)
  42.         {
  43.             KillTimer(EndLoadBar[client])
  44.             EndLoadBar[client] = INVALID_HANDLE
  45.         }
  46.     }
  47.     return Plugin_Continue;
  48. }
  49. public Action FireBulletsPost(Event event, const char[] name, bool dontBroadcast)
  50. {
  51.     int client = GetClientOfUserId(event.GetInt("userid"));
  52.    
  53.     new vSlot = GetPlayerWeaponSlot(client, 0);
  54.     int iCurrentWeapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
  55.     if(iCurrentWeapon == vSlot)
  56.     {
  57.         if(bIsSurvivor(client) && !IsFakeClient(client))
  58.         {
  59.             if(!IsFucked[iCurrentWeapon])
  60.             {
  61.                 if(Shots[client] > GetConVarInt(hCountOfShots))
  62.                 {
  63.                     if(GetRandomInt(0, 100) < GetConVarInt(hChanceOfKlin))
  64.                     {
  65.                         IsFucked[iCurrentWeapon] = true;
  66.                         ref[client] = EntIndexToEntRef(iCurrentWeapon)
  67.                         PrintToChat(client, "Ваше оружие заклинило")
  68.                     }
  69.                     Shots[client] = 0;
  70.                 }
  71.                 Shots[client]++
  72.             }
  73.         }
  74.     }
  75. }
  76.  
  77. public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapon)
  78. {
  79.     int iCurrentWeapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
  80.     new FuckedWeapon = EntRefToEntIndex(ref[client])
  81.     if(FuckedWeapon == iCurrentWeapon)
  82.     {
  83.         if(IsFucked[FuckedWeapon])
  84.         {
  85.             if(buttons & IN_ATTACK)
  86.             {
  87.                 if((GetEngineTime() - LastMessage[client]) > 30)
  88.                 {
  89.                     PrintHintText(client, "Дурак? Заклинила пушка, нажми Е!");
  90.                     LastMessage[client] = GetEngineTime();
  91.                 }
  92.                 SetEntPropFloat(client, Prop_Send, "m_flNextAttack", 99999.0);
  93.                 SetEntPropFloat(iCurrentWeapon, Prop_Send, "m_flNextPrimaryAttack", 99999.0);
  94.             }
  95.             else if(buttons & IN_SPEED)
  96.             {
  97.                 if(EndLoadBar[client] == INVALID_HANDLE)
  98.                 {
  99.                     SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime());
  100.                     SetEntPropFloat(client, Prop_Send, "m_flProgressBarDuration", GetConVarFloat(hTimerOfOutKlin));
  101.                     new Handle:vPosition;
  102.                     EndLoadBar[client] = CreateDataTimer(GetConVarFloat(hTimerOfOutKlin), EndBar, vPosition, TIMER_REPEAT | TIMER_DATA_HNDL_CLOSE);
  103.                     WritePackCell(vPosition, FuckedWeapon);
  104.                     WritePackCell(vPosition, client);
  105.                 }
  106.             }
  107.             else if (!(buttons & IN_SPEED))
  108.             {
  109.                 if(EndLoadBar[client] != INVALID_HANDLE)
  110.                 {
  111.                     KillTimer(EndLoadBar[client])
  112.                     EndLoadBar[client] = INVALID_HANDLE
  113.                 }
  114.                 SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", 0.0);
  115.                 SetEntPropFloat(client, Prop_Send, "m_flProgressBarDuration", 0.0);
  116.             }
  117.         }
  118.     }
  119.     return Plugin_Continue;
  120. }
  121.  
  122. public Action EndBar(Handle timer, Handle vPosition)
  123. {
  124.     ResetPack(vPosition);
  125.    
  126.     int IsFuck = ReadPackCell(vPosition);
  127.     int client = ReadPackCell(vPosition);
  128.    
  129.     SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", 0.0);
  130.     SetEntPropFloat(client, Prop_Send, "m_flProgressBarDuration", 0.0);
  131.     IsFucked[IsFuck] = false;
  132.     PrintHintText(client, "Отклинило)))");
  133.     SetEntPropFloat(client, Prop_Send, "m_flNextAttack", 0.0);
  134.     SetEntPropFloat(IsFuck, Prop_Send, "m_flNextPrimaryAttack", 0.0);
  135.     KillTimer(EndLoadBar[client])
  136.     EndLoadBar[client] = INVALID_HANDLE
  137. }
  138.  
  139. stock bool bIsSurvivor(int client)
  140. {
  141.     return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
  142. }
Advertisement
Add Comment
Please, Sign In to add comment