Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include sdktools
- #include sdkhooks
- new bool:IsFucked[2048+1] = false;
- float LastMessage[MAXPLAYERS+1];
- new ref[MAXPLAYERS+1];
- Handle EndLoadBar[MAXPLAYERS+1];
- int Shots[MAXPLAYERS+1];
- ConVar hChanceOfKlin, hCountOfShots, hTimerOfOutKlin;
- public OnPluginStart()
- {
- HookEvent("weapon_fire", FireBulletsPost)
- hChanceOfKlin = CreateConVar("vChance", "25", "Шанс того что оружия заклинит от 0 до 100");
- hCountOfShots = CreateConVar("vShots", "25", "Кол-во выстрелов для срабатывания шанса");
- hTimerOfOutKlin = CreateConVar("vTime", "20.0", "Время расклина(желательно ставить флоат число(20.0).");
- AutoExecConfig(true, "KlinikaWeapon");
- }
- public OnClientPutInServer(client)
- {
- SDKHook(client, SDKHook_WeaponCanUse, WeaponCanUse);
- }
- public OnClientDisconnect(client)
- {
- SDKUnhook(client, SDKHook_WeaponCanUse, WeaponCanUse);
- if (EndLoadBar[client] != null)
- {
- KillTimer(EndLoadBar[client]);
- EndLoadBar[client] = null;
- }
- }
- public Action:WeaponCanUse(client, weapon)
- {
- if(bIsSurvivor(client))
- {
- if(EndLoadBar[client] != INVALID_HANDLE)
- {
- KillTimer(EndLoadBar[client])
- EndLoadBar[client] = INVALID_HANDLE
- }
- }
- return Plugin_Continue;
- }
- public Action FireBulletsPost(Event event, const char[] name, bool dontBroadcast)
- {
- int client = GetClientOfUserId(event.GetInt("userid"));
- new vSlot = GetPlayerWeaponSlot(client, 0);
- int iCurrentWeapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
- if(iCurrentWeapon == vSlot)
- {
- if(bIsSurvivor(client) && !IsFakeClient(client))
- {
- if(!IsFucked[iCurrentWeapon])
- {
- if(Shots[client] > GetConVarInt(hCountOfShots))
- {
- if(GetRandomInt(0, 100) < GetConVarInt(hChanceOfKlin))
- {
- IsFucked[iCurrentWeapon] = true;
- ref[client] = EntIndexToEntRef(iCurrentWeapon)
- PrintToChat(client, "Ваше оружие заклинило")
- }
- Shots[client] = 0;
- }
- Shots[client]++
- }
- }
- }
- }
- public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapon)
- {
- int iCurrentWeapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon");
- new FuckedWeapon = EntRefToEntIndex(ref[client])
- if(FuckedWeapon == iCurrentWeapon)
- {
- if(IsFucked[FuckedWeapon])
- {
- if(buttons & IN_ATTACK)
- {
- if((GetEngineTime() - LastMessage[client]) > 30)
- {
- PrintHintText(client, "Дурак? Заклинила пушка, нажми Е!");
- LastMessage[client] = GetEngineTime();
- }
- SetEntPropFloat(client, Prop_Send, "m_flNextAttack", 99999.0);
- SetEntPropFloat(iCurrentWeapon, Prop_Send, "m_flNextPrimaryAttack", 99999.0);
- }
- else if(buttons & IN_SPEED)
- {
- if(EndLoadBar[client] == INVALID_HANDLE)
- {
- SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime());
- SetEntPropFloat(client, Prop_Send, "m_flProgressBarDuration", GetConVarFloat(hTimerOfOutKlin));
- new Handle:vPosition;
- EndLoadBar[client] = CreateDataTimer(GetConVarFloat(hTimerOfOutKlin), EndBar, vPosition, TIMER_REPEAT | TIMER_DATA_HNDL_CLOSE);
- WritePackCell(vPosition, FuckedWeapon);
- WritePackCell(vPosition, client);
- }
- }
- else if (!(buttons & IN_SPEED))
- {
- if(EndLoadBar[client] != INVALID_HANDLE)
- {
- KillTimer(EndLoadBar[client])
- EndLoadBar[client] = INVALID_HANDLE
- }
- SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", 0.0);
- SetEntPropFloat(client, Prop_Send, "m_flProgressBarDuration", 0.0);
- }
- }
- }
- return Plugin_Continue;
- }
- public Action EndBar(Handle timer, Handle vPosition)
- {
- ResetPack(vPosition);
- int IsFuck = ReadPackCell(vPosition);
- int client = ReadPackCell(vPosition);
- SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", 0.0);
- SetEntPropFloat(client, Prop_Send, "m_flProgressBarDuration", 0.0);
- IsFucked[IsFuck] = false;
- PrintHintText(client, "Отклинило)))");
- SetEntPropFloat(client, Prop_Send, "m_flNextAttack", 0.0);
- SetEntPropFloat(IsFuck, Prop_Send, "m_flNextPrimaryAttack", 0.0);
- KillTimer(EndLoadBar[client])
- EndLoadBar[client] = INVALID_HANDLE
- }
- stock bool bIsSurvivor(int client)
- {
- return client > 0 && client <= MaxClients && IsClientInGame(client) && GetClientTeam(client) == 2 && !IsClientInKickQueue(client) && IsPlayerAlive(client);
- }
Advertisement
Add Comment
Please, Sign In to add comment