From 6358338703090b8046956032703745caa331250e Mon Sep 17 00:00:00 2001 From: Jackz Date: Mon, 8 Feb 2021 11:33:40 -0600 Subject: [PATCH] L4D2Tools: Fixes & changes --- plugins/L4D2Tools.smx | Bin 11999 -> 12844 bytes scripting/L4D2Tools.sp | 129 ++++++++++++++++++++++++++++++++--------- 2 files changed, 100 insertions(+), 29 deletions(-) diff --git a/plugins/L4D2Tools.smx b/plugins/L4D2Tools.smx index 6012b927880cf112ad927d30a962b3a98c0eb5cc..766652a5c1c5e184b9d5381ddeda714c3b4593bf 100644 GIT binary patch literal 12844 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 N7uq{w>OFA#{{wnRMJoUR diff --git a/scripting/L4D2Tools.sp b/scripting/L4D2Tools.sp index b2b7659..45ed5e2 100644 --- a/scripting/L4D2Tools.sp +++ b/scripting/L4D2Tools.sp @@ -59,7 +59,6 @@ public void OnPluginStart() { HookEvent("gauntlet_finale_start", Event_GauntletStart); HookEvent("finale_start", Event_FinaleStart); HookEvent("finale_vehicle_leaving", Event_FinaleEnd); - HookEvent("player_entered_checkpoint", Event_EnterSaferoom); HookEvent("player_bot_replace", Event_BotPlayerSwap); HookEvent("bot_player_replace", Event_BotPlayerSwap); @@ -76,6 +75,8 @@ public void OnPluginStart() { HookUserMessage(GetUserMessageId("VGUIMenu"), VGUIMenu, true); RegAdminCmd("sm_model", Command_SetClientModel, ADMFLAG_ROOT); + RegAdminCmd("sm_respawn_all", Command_RespawnAll, ADMFLAG_CHEATS, "Makes all dead players respawn in a closet"); + RegConsoleCmd("sm_pmodels", Command_ListClientModels, "Lists all player's models"); } public void CVC_FFNotice(ConVar convar, const char[] oldValue, const char[] newValue) { @@ -89,14 +90,27 @@ public void CVC_FFNotice(ConVar convar, const char[] oldValue, const char[] newV public Action Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) { LasersUsed.Clear(); } - +public Action Command_RespawnAll(int client, int args) { + L4D_CreateRescuableSurvivors(); +} +//TODO: Implement idle bot support +public Action Command_ListClientModels(int client, int args) { + char model[64]; + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { + GetClientModel(i, model, sizeof(model)); + ReplyToCommand(client, "%N's model: %s", i, model); + } + } +} public Action Command_SetClientModel(int client, int args) { if(args < 1) { - ReplyToCommand(client, "Usage: sm_model "); + ReplyToCommand(client, "Usage: sm_model [keep]"); }else{ - char arg1[32], arg2[16]; + char arg1[32], arg2[16], arg3[8]; GetCmdArg(1, arg1, sizeof(arg1)); GetCmdArg(2, arg2, sizeof(arg2)); + GetCmdArg(3, arg3, sizeof(arg3)); char modelPath[64]; int modelID = GetSurvivorId(arg2); @@ -114,7 +128,7 @@ public Action Command_SetClientModel(int client, int args) { client, target_list, MAXPLAYERS, - COMMAND_FILTER_ALIVE, /* Only allow alive players */ + COMMAND_FILTER_CONNECTED, target_name, sizeof(target_name), tn_is_ml)) <= 0) @@ -123,26 +137,47 @@ public Action Command_SetClientModel(int client, int args) { ReplyToTargetError(client, target_count); return Plugin_Handled; } + int target; for (int i = 0; i < target_count; i++) { int team = GetClientTeam(target_list[i]); - if(IsClientConnected(target_list[i]) && IsClientInGame(target_list[i]) && IsPlayerAlive(target_list[i]) && team == 2 || team == 3) { - SetEntProp(target_list[i], Prop_Send, "m_survivorCharacter", modelID); - SetEntityModel(target_list[i], modelPath); - if (IsFakeClient(target_list[i])) { - char name[32]; - GetSurvivorName(target_list[i], name, sizeof(name)); - SetClientInfo(target_list[i], "name", name); + target = target_list[i]; + /*if(team == 1) { + int bot = GetIdleBot(target); + if(bot > -1) { + target = bot; + team = 2; } - UpdatePlayerIdentity(target_list[i], view_as(modelID)); + else { + ReplyToCommand(client, "Player %N is spectating and is not idle.", target); + return Plugin_Handled; + } + }*/ + bool keepModel = StrEqual(arg3, "keep", false); + if(IsClientConnected(target) && IsClientInGame(target) && IsClientInGame(target) && IsPlayerAlive(target) && team == 2 || team == 3) { + SetEntProp(target, Prop_Send, "m_survivorCharacter", modelID); + SetEntityModel(target, modelPath); + if (IsFakeClient(target)) { + char name[32]; + GetSurvivorName(target, name, sizeof(name)); + SetClientInfo(target, "name", name); + } + UpdatePlayerIdentity(target, view_as(modelID), keepModel); - int primaryWeapon = GetPlayerWeaponSlot(target_list[i], 0); - if(primaryWeapon > -1) { - SDKHooks_DropWeapon(target_list[i], primaryWeapon, NULL_VECTOR, NULL_VECTOR); + int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon"); + if( weapon != -1 ) { + DataPack pack = new DataPack(); + pack.WriteCell(GetClientUserId(target)); + pack.WriteCell(EntIndexToEntRef(weapon)); // Save last held weapon to switch back - Handle pack; - CreateDataTimer(0.1, Timer_RequipWeapon, pack); - WritePackCell(pack, target_list[i]); - WritePackCell(pack, primaryWeapon); + CreateTimer(0.1, Timer_RequipWeapon, pack); + + for( int slot = 0; slot <= 4; slot++ ) { + weapon = GetPlayerWeaponSlot(target, slot); + if( weapon != -1 ) { + pack.WriteCell(EntIndexToEntRef(weapon)); + SDKHooks_DropWeapon(target, weapon, NULL_VECTOR, NULL_VECTOR); + } + } } } } @@ -150,11 +185,24 @@ public Action Command_SetClientModel(int client, int args) { return Plugin_Handled; } -public Action Timer_RequipWeapon(Handle hdl, Handle pack) { - ResetPack(pack); - int client = ReadPackCell(pack); - int weaponID = ReadPackCell(pack); - EquipPlayerWeapon(client, weaponID); +public Action Timer_RequipWeapon(Handle hdl, DataPack pack) { + pack.Reset(); + int client = GetClientOfUserId(pack.ReadCell()); + if(client == 0) return; + + int activeWeapon = pack.ReadCell(); + int weapon; + + while( pack.IsReadable() ) + { + weapon = pack.ReadCell(); + if( EntRefToEntIndex(weapon) != INVALID_ENT_REFERENCE ) { + EquipPlayerWeapon(client, weapon); + } + } + if( EntRefToEntIndex(activeWeapon) != INVALID_ENT_REFERENCE ) { + SetEntPropEnt(client, Prop_Data, "m_hActiveWeapon", activeWeapon); + } } public Action Event_BotPlayerSwap(Event event, const char[] name, bool dontBroadcast) { @@ -191,6 +239,10 @@ public void OnClientDisconnect(int client) { botDropMeleeWeapon[client] = -1; } } +public void OnMapStart() { + HookEntityOutput("info_changelevel", "OnStartTouch", EntityOutput_OnStartTouchSaferoom); + HookEntityOutput("trigger_changelevel", "OnStartTouch", EntityOutput_OnStartTouchSaferoom); +} public Action Event_OnWeaponDrop(int client, int weapon) { if(!IsValidEntity(weapon)) return Plugin_Continue; @@ -209,10 +261,8 @@ public void Frame_HideEntity(int entity) { TeleportEntity(entity, OUT_OF_BOUNDS, NULL_VECTOR, NULL_VECTOR); } -public void Event_EnterSaferoom(Event event, const char[] name, bool dontBroadcast) { - - int client = GetClientOfUserId(event.GetInt("userid")); - if(client > 0) { +public void EntityOutput_OnStartTouchSaferoom(const char[] output, int caller, int client, float time) { + if(client > 0 && client <= MaxClients && IsValidClient(client) && GetClientTeam(client) == 2) { if(botDropMeleeWeapon[client] > 0) { PrintToServer("Giving melee weapon back to %N", client); float pos[3]; @@ -337,3 +387,24 @@ stock int GetAnyValidClient() { } return -1; } + +stock int GetRealClient(int client) { + if(IsFakeClient(client)) { + int realPlayer = GetClientOfUserId(GetEntProp(client, Prop_Send, "m_humanSpectatorUserID")); + return realPlayer > 0 ? realPlayer : -1; + }else{ + return client; + } +} + +stock int GetIdleBot(int client) { + for(int i = 1; i <= MaxClients; i++ ) { + if(IsClientConnected(i) && HasEntProp(i, Prop_Send, "m_humanSpectatorUserID")) { + int realPlayer = GetClientOfUserId(GetEntProp(i, Prop_Send, "m_humanSpectatorUserID")); + if(realPlayer == client) { + return i; + } + } + } + return -1; +} \ No newline at end of file