summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornavewindre <nw@moneybot.cc>2023-11-15 20:39:23 +0100
committernavewindre <nw@moneybot.cc>2023-11-15 20:39:23 +0100
commit32743641d07fb202bfc51d0f525d1b4450edf877 (patch)
treecf5146e0c3582ae1089b50772ecce6134218dffc
parent88bbabd07320f94d1ba34c83d66592193f014980 (diff)
fix anims glitching when taking over bot
-rw-r--r--sourcemod/scripting/bot2player_public.sp26
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")