diff options
| author | navewindre <nw@moneybot.cc> | 2023-11-15 20:39:23 +0100 |
|---|---|---|
| committer | navewindre <nw@moneybot.cc> | 2023-11-15 20:39:23 +0100 |
| commit | 32743641d07fb202bfc51d0f525d1b4450edf877 (patch) | |
| tree | cf5146e0c3582ae1089b50772ecce6134218dffc | |
| parent | 88bbabd07320f94d1ba34c83d66592193f014980 (diff) | |
fix anims glitching when taking over bot
| -rw-r--r-- | sourcemod/scripting/bot2player_public.sp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/sourcemod/scripting/bot2player_public.sp b/sourcemod/scripting/bot2player_public.sp index 65a14ee..c646c84 100644 --- a/sourcemod/scripting/bot2player_public.sp +++ b/sourcemod/scripting/bot2player_public.sp @@ -1,5 +1,7 @@ #include <sourcemod> #include <cstrike> +#include <sdktools> +#include <sdkhooks> #include <smlib> new const String:PLUGIN_NAME[]= "CS:S Bot2Player (public)" @@ -23,6 +25,7 @@ new TeleportWarning[MAXPLAYERS + 1] = {0, ...} new BotTakeverCost[MAXPLAYERS + 1] = {0, ...} new NeedsDuck[MAXPLAYERS + 1] = {0, ...} new Nades[MAXPLAYERS + 1][3] +new CanUseWeapons[MAXPLAYERS + 1] = {true, ...}; new Float:Round_Restart_Delay = 0.0 new Float:Weapon_Strip_Delay = 0.0 @@ -108,6 +111,7 @@ public Action:Event_RoundStart(Handle:Event, const String:name[], bool:dontBroad ClientSpecClient[i] = 0 WrongTeamWarning[i] = 0 NeedsDuck[i] = 0 + CanUseWeapons[i] = true; if (IsClientConnected(i) && IsClientInGame(i) && !IsClientObserver(i) && ClientTookover[i]) { @@ -193,6 +197,8 @@ public Action:OnPlayerRunCmd(iClient, &buttons, &impulse, Float:vel[3], Float:an Client_GetActiveWeaponName(iTarget, iTargetActiveWeaponName, sizeof(iTargetActiveWeaponName)) iTargetClip[i] = Weapon_GetPrimaryClip(iTargetWeapon[i]) Client_GetWeaponPlayerAmmo(iTarget, iTargetActiveWeaponName, iTargetAmmo[i]) + + CS_DropWeapon(iTarget, GetPlayerWeaponSlot(iTarget, i), false, false); } else { @@ -249,6 +255,10 @@ public Action:OnPlayerRunCmd(iClient, &buttons, &impulse, Float:vel[3], Float:an injumpduck = GetEntProp(iTarget, Prop_Send, "m_bInDuckJump", 1); CS_RespawnPlayer(iClient) + Client_RemoveAllWeapons(iClient) + Client_GiveWeapon(iClient, "weapon_knife", true) + CanUseWeapons[iClient] = false; + CreateTimer(0.1, AllowUse, GetClientUserId(iClient)); SetEntProp(iClient, Prop_Send, "m_bDucked", ducked, 1); SetEntProp(iClient, Prop_Send, "m_bDucking", ducking, 1); @@ -307,7 +317,9 @@ public OnClientPostAdminCheck(client) ClientSpecClient[client] = 0 ClientTookover[client] = 0 WrongTeamWarning[client] = 0 + SDKHook(client, SDKHook_WeaponCanUse, SDKWeaponCanUse); } + public Action:StripWeapons(Handle:timer, any:UserID) { new client = GetClientOfUserId(UserID) @@ -322,6 +334,20 @@ public Action:StripWeapons(Handle:timer, any:UserID) GivePlayerItem( client, "weapon_usp" ); } } + +public Action:AllowUse(Handle:timer, any:userID) { + new client = GetClientOfUserId(userID); + if (!client || !IsClientConnected(client)) return + CanUseWeapons[client] = true; +} + +public Action:SDKWeaponCanUse(int client, int weapon) { + if(!CanUseWeapons[client]) + return Plugin_Handled; + + return Plugin_Continue; +} + public Action:NewTarget(iClient, const String:cmd[], args) { new iTarget = GetEntPropEnt(iClient, Prop_Send, "m_hObserverTarget") |
