From 445e0ea8782c814fa8a21041687c9cea8a1291cd Mon Sep 17 00:00:00 2001 From: Jackz Date: Mon, 4 Jan 2021 16:03:02 -0600 Subject: [PATCH] L4D2Tools: Add minor changes to anti-melee idle drop - Teleport dropped wpn out of bounds to prevent pickup - On disconnect, teleport pending item to player? --- plugins/L4D2Tools.smx | Bin 9856 -> 10050 bytes scripting/L4D2Tools.sp | 29 ++++++++--- scripting/include/jutils.inc | 98 +++++++++++++++++------------------ 3 files changed, 70 insertions(+), 57 deletions(-) diff --git a/plugins/L4D2Tools.smx b/plugins/L4D2Tools.smx index e1bd61619120c964c165a214b201ab1e0b53c7f9..eeeee515d6ec6634b71e017375e4a05dd01d2510 100644 GIT binary patch literal 10050 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

FWp?8=zY)nKoYL*Y@tPK&|ln-VzU>D${Yt{hc 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 T^JI;Yo&+%xj|_kAD1rYE+{2X_ literal 9856 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%0AC@5xO?jPwC0< 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 #include "jutils.inc" +static bool bLasersUsed[2048]; +static ConVar hLaserNotice, hFinaleTimer, hFFNotice, hMPGamemode; +static int iFinaleStartTime, botDropMeleeWeapon[MAXPLAYERS+1]; -bool bLasersUsed[2048]; -ConVar hLaserNotice, hFinaleTimer, hFFNotice, hMPGamemode; -int iFinaleStartTime; -int botDropMeleeWeapon[MAXPLAYERS+1]; +static float OUT_OF_BOUNDS[3] = {0.0, -1000.0, 0.0}; //TODO: Remove the Plugin_Stop on pickup, and give item back instead. keep reference to dropped weapon to delete. public Plugin myinfo = { @@ -112,7 +112,8 @@ public Action Event_BotPlayerSwap(Event event, const char[] name, bool dontBroad //Player replaced a bot int client = GetClientOfUserId(event.GetInt("player")); if(botDropMeleeWeapon[bot] > 0) { - //todo: + //TODO: If entity (weapon) not valid (aka level switched), give them a new one no matter what + //Also possibly prevent players from picking up any dropped weapons (no duplicates then ^) int meleeOwnerEnt = GetEntPropEnt(botDropMeleeWeapon[bot], Prop_Send, "m_hOwnerEntity"); if(meleeOwnerEnt == -1) { EquipPlayerWeapon(client, botDropMeleeWeapon[bot]); @@ -126,17 +127,29 @@ public Action Event_BotPlayerSwap(Event event, const char[] name, bool dontBroad } public void OnClientDisconnect(int client) { - botDropMeleeWeapon[client] = -1; + if(botDropMeleeWeapon[client] > -1) { + float pos[3]; + GetClientAbsOrigin(client, pos); + TeleportEntity(botDropMeleeWeapon[client], pos, NULL_VECTOR, NULL_VECTOR); + botDropMeleeWeapon[client] = -1; + } } public Action Event_OnWeaponDrop(int client, int weapon) { char wpn[32]; GetEdictClassname(weapon, wpn, sizeof(wpn)); - if(StrEqual(wpn, "weapon_melee") && GetEntProp(client, Prop_Send, "m_humanSpectatorUserID") > 0) { + if(IsFakeClient(client) && StrEqual(wpn, "weapon_melee") && GetEntProp(client, Prop_Send, "m_humanSpectatorUserID") > 0) { + #if defined DEBUG 0 + PrintToServer("Bot %N dropped melee weapon %s", client, wpn); + #endif + CreateTimer(0.1, Timer_HideEntity, weapon); botDropMeleeWeapon[client] = weapon; } return Plugin_Continue; } +public Action Timer_HideEntity(Handle timer, int entity) { + TeleportEntity(entity, OUT_OF_BOUNDS, NULL_VECTOR, NULL_VECTOR); +} public void Event_EnterSaferoom(Event event, const char[] name, bool dontBroadcast) { diff --git a/scripting/include/jutils.inc b/scripting/include/jutils.inc index d71f788..e8fd50f 100644 --- a/scripting/include/jutils.inc +++ b/scripting/include/jutils.inc @@ -139,6 +139,54 @@ stock bool FindSurvivorModel(const char str[16], char[] model, int modelStrSize) } return false; } +//returns true if model found +stock bool GetSurvivorName(int client, char[] buffer, int length) { + + char modelName[38]; + GetClientModel(client, modelName, sizeof(modelName)); + if(StrContains(modelName,"biker",false) > -1) { + strcopy(buffer, length, "Francis"); + }else if(StrContains(modelName,"teenangst",false) > -1) { + strcopy(buffer, length, "Zoey"); + }else if(StrContains(modelName,"namvet",false) > -1) { + strcopy(buffer, length, "Bill"); + }else if(StrContains(modelName,"manager",false) > -1) { + strcopy(buffer, length, "Louis"); + }else if(StrContains(modelName,"coach",false) > -1) { + strcopy(buffer, length, "Coach"); + }else if(StrContains(modelName,"producer",false) > -1) { + strcopy(buffer, length, "Rochelle"); + }else if(StrContains(modelName,"gambler",false) > -1) { + strcopy(buffer, length, "Nick"); + }else if(StrContains(modelName,"mechanic",false) > -1) { + strcopy(buffer, length, "Ellis"); + }else{ + return false; + } + return true; +} + +stock int GetSurvivorType(const char[] modelName) { + if(StrContains(modelName,"biker",false) > -1) { + return 6; + }else if(StrContains(modelName,"teenangst",false) > -1) { + return 5; + }else if(StrContains(modelName,"namvet",false) > -1) { + return 4; + }else if(StrContains(modelName,"manager",false) > -1) { + return 7; + }else if(StrContains(modelName,"coach",false) > -1) { + return 2; + }else if(StrContains(modelName,"producer",false) > -1) { + return 1; + }else if(StrContains(modelName,"gambler",false) > -1) { + return 0; + }else if(StrContains(modelName,"mechanic",false) > -1) { + return 3; + }else{ + return false; + } +} stock bool TraceFilter(int entity, int contentsMask) { if( entity <= MaxClients ) return false; @@ -193,54 +241,7 @@ stock bool SpawnMinigun(const float vPos[3], const float vAng[3]) { return false; } } -//returns true if model found -stock bool GetSurvivorName(int client, char[] buffer, int length) { - char modelName[38]; - GetClientModel(client, modelName, sizeof(modelName)); - if(StrContains(modelName,"biker",false) > -1) { - strcopy(buffer, length, "Francis"); - }else if(StrContains(modelName,"teenangst",false) > -1) { - strcopy(buffer, length, "Zoey"); - }else if(StrContains(modelName,"namvet",false) > -1) { - strcopy(buffer, length, "Bill"); - }else if(StrContains(modelName,"manager",false) > -1) { - strcopy(buffer, length, "Louis"); - }else if(StrContains(modelName,"coach",false) > -1) { - strcopy(buffer, length, "Coach"); - }else if(StrContains(modelName,"producer",false) > -1) { - strcopy(buffer, length, "Rochelle"); - }else if(StrContains(modelName,"gambler",false) > -1) { - strcopy(buffer, length, "Nick"); - }else if(StrContains(modelName,"mechanic",false) > -1) { - strcopy(buffer, length, "Ellis"); - }else{ - return false; - } - return true; -} - -stock int GetSurvivorType(const char[] modelName) { - if(StrContains(modelName,"biker",false) > -1) { - return 6; - }else if(StrContains(modelName,"teenangst",false) > -1) { - return 5; - }else if(StrContains(modelName,"namvet",false) > -1) { - return 4; - }else if(StrContains(modelName,"manager",false) > -1) { - return 7; - }else if(StrContains(modelName,"coach",false) > -1) { - return 2; - }else if(StrContains(modelName,"producer",false) > -1) { - return 1; - }else if(StrContains(modelName,"gambler",false) > -1) { - return 0; - }else if(StrContains(modelName,"mechanic",false) > -1) { - return 3; - }else{ - return false; - } -} stock bool GiveClientWeapon(int client, const char[] wpnName, bool lasers) { char sTemp[64]; @@ -298,8 +299,7 @@ stock int GetPrimaryAmmo(int client) { else return -1; } -stock void CheatCommand(int client, const char[] command, const char[] argument1, const char[] argument2) -{ +stock void CheatCommand(int client, const char[] command, const char[] argument1, const char[] argument2) { int userFlags = GetUserFlagBits(client); SetUserFlagBits(client, ADMFLAG_ROOT); int flags = GetCommandFlags(command);