From 76fd3221e0a84df57d81308eefa1c637116f37b9 Mon Sep 17 00:00:00 2001 From: Jackz Date: Tue, 20 Apr 2021 21:40:05 -0500 Subject: [PATCH] Update identity fix --- README.md | 2 +- plugins/BetterWitchAvoidance.smx | Bin 6725 -> 5161 bytes plugins/l4d_survivor_identity_fix.smx | Bin 10529 -> 10733 bytes scripting/l4d_survivor_identity_fix.sp | 59 ++++++++++++++++--------- 4 files changed, 39 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 55a0523..4913733 100644 --- a/README.md +++ b/README.md @@ -217,7 +217,7 @@ Also features a part that will increase the item count on any item, kit, or weap * `l4d2_extraitem_chance` - The base chance (multiplied by player count) of an extra item being spawned. Default: 0.056 ### l4d_survivor_identity_fix -A fork of Merudo, Shadowysn's identity fix plugin that adds support for other plugins to update the model cache. This is used by [L4D2Tools](#L4D2Tools) to update the identity when someone changes their model with sm_model. It also will clear the memory of model when a player disconnects entirely or on a new map. +A fork of [Survivor Identity Fix plugin](https://forums.alliedmods.net/showthread.php?t=280539) that adds support for other plugins to update the model cache. This is used by [L4D2Tools](#L4D2Tools) to update the identity when someone changes their model with `sm_model`. It also will clear the memory of model when a player disconnects entirely or on a new map. In addition, has a fix for the passing finale, and will automatically move L4D characters to L4D2 until finale starts preventing game messing up their characters. diff --git a/plugins/BetterWitchAvoidance.smx b/plugins/BetterWitchAvoidance.smx index 85b7efeb147d83642a9a1ae61fd4c1005fabc468..be11d0cf9d9050019cbc9d8f25cb0ec922cfa87a 100644 GIT binary patch literal 5161 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 C65%KS literal 6725 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 COE$~^ diff --git a/plugins/l4d_survivor_identity_fix.smx b/plugins/l4d_survivor_identity_fix.smx index f4bc83e6695579399889dff6f4b782ce32af6d25..28f59053c3494d060f4ebbe163b5c9ff85918b55 100644 GIT binary patch literal 10733 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 A_y7O^ literal 10529 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 M^|KTZz-jsa04rU<&j0`b diff --git a/scripting/l4d_survivor_identity_fix.sp b/scripting/l4d_survivor_identity_fix.sp index 5291070..8d65e37 100644 --- a/scripting/l4d_survivor_identity_fix.sp +++ b/scripting/l4d_survivor_identity_fix.sp @@ -17,21 +17,25 @@ #define TEAM_SURVIVOR 2 #define TEAM_PASSING 4 -char g_Models[MAXPLAYERS+1][128]; -int g_iPendingCookieModel[MAXPLAYERS+1]; #define GAMEDATA "l4d_survivor_identity_fix" +#define NAME_SetModel "CBasePlayer::SetModel" +#define SIG_SetModel_LINUX "@_ZN11CBasePlayer8SetModelEPKc" +#define SIG_SetModel_WINDOWS "\\x55\\x8B\\x2A\\x8B\\x2A\\x2A\\x56\\x57\\x50\\x8B\\x2A\\xE8\\x2A\\x2A\\x2A\\x2A\\x8B\\x2A\\x2A\\x2A\\x2A\\x2A\\x8B\\x2A\\x8B\\x2A\\x2A\\x8B" +#define SIG_L4D1SetModel_WINDOWS "\\x8B\\x2A\\x2A\\x2A\\x56\\x57\\x50\\x8B\\x2A\\xE8\\x2A\\x2A\\x2A\\x2A\\x8B\\x3D" + +char g_Models[MAXPLAYERS+1][128]; +static int g_iPendingCookieModel[MAXPLAYERS+1]; Handle hConf = null; -#define NAME_SetModel "CBasePlayer::SetModel" static Handle hDHookSetModel = null, hModelPrefCookie; static ConVar hCookiesEnabled; static bool isLateLoad, cookieModelsSet; static int survivors; -#define SIG_SetModel_LINUX "@_ZN11CBasePlayer8SetModelEPKc" -#define SIG_SetModel_WINDOWS "\\x55\\x8B\\x2A\\x8B\\x2A\\x2A\\x56\\x57\\x50\\x8B\\x2A\\xE8\\x2A\\x2A\\x2A\\x2A\\x8B\\x2A\\x2A\\x2A\\x2A\\x2A\\x8B\\x2A\\x8B\\x2A\\x2A\\x8B" +static bool IsTemporarilyL4D2[MAXPLAYERS]; //Use index 0 to state if its activated +static char currentMap[16]; + -#define SIG_L4D1SetModel_WINDOWS "\\x8B\\x2A\\x2A\\x2A\\x56\\x57\\x50\\x8B\\x2A\\xE8\\x2A\\x2A\\x2A\\x2A\\x8B\\x3D" //TODO: Setup cookies @@ -224,20 +228,17 @@ public void OnClientCookiesCached(int client) { char modelPref[2]; GetClientCookie(client, hModelPrefCookie, modelPref, sizeof(modelPref)); if(strlen(modelPref) > 0) { - int type = StringToInt(modelPref); - if(type > 0 && type <= 8) { + int type; + if(StringToIntEx(modelPref, type) > 0) { + PrintToServer(">>> %N has cookie for: %s", client, survivor_models[type - 1]); strcopy(g_Models[client], 64, survivor_models[type - 1]); g_iPendingCookieModel[client] = type; - //A valid cookie was found, set their model. - }else{ - SetClientCookie(client, hModelPrefCookie, "0"); - //Set to current model? } } } + //Prevent issues with L4D1 characters being TP'd and stuck in brain dead form -static bool IsTemporarilyL4D2[MAXPLAYERS]; //Use index 0 to state if its activated -static char currentMap[16]; + public void OnMapStart() { for(int i = 0; i < sizeof(survivor_models); i++) { PrecacheModel(survivor_models[i], true); @@ -251,12 +252,19 @@ public void OnMapStart() { } public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); - SwapL4D1Survivor(client); + if(StrEqual(currentMap, "c6m1_riverbank") && GetClientTeam(client) == 2) { + //If player died as l4d1 character on first map, revert it + RevertL4D1Survivor(client); + }else if(StrEqual(currentMap, "c6m3_port") && GetClientTeam(client) == 2) { + //If player not swapped (joined, or via prev. map, switch) + RequestFrame(Frame_SwapSurvivor, client); + } } public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) { - if(StrEqual(currentMap, "c6m3_port")) { + //Switch players to L4D2 right before death. + if(StrEqual(currentMap, "c6m3_port") || StrEqual(currentMap, "c6m1_riverbank")) { int client = GetClientOfUserId(event.GetInt("userid")); - if(GetClientTeam(client) == 2) { + if(client && GetClientTeam(client) == 2) { SwapL4D1Survivor(client); } } @@ -273,12 +281,21 @@ public void Event_DoorOpen(Event event, const char[] name, bool dontBroadcast) { } //On finale start: Set back to their L4D1 character. public Action Event_FinaleStart(Event event, const char[] name, bool dontBroadcast) { - for(int i = 1; i <= MaxClients; i++) { - if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { - RevertL4D1Survivor(i); + if(StrEqual(currentMap, "c6m3_port")) { + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { + RevertL4D1Survivor(i); + } } } } +public void Frame_SwapSurvivor(int client) { + SwapL4D1Survivor(client); +} +public void Frame_RevertSurvivor(int client) { + RevertL4D1Survivor(client); +} + void SwapL4D1Survivor(int client) { int playerType = GetEntProp(client, Prop_Send, "m_survivorCharacter"); //If character is L4D1 Character (4: bill, etc..) then swap @@ -303,7 +320,7 @@ public Action Event_PlayerFirstSpawn(Event event, const char[] name, bool dontBr if(!cookieModelsSet) { cookieModelsSet = true; - CreateTimer(0.1, Timer_SetAllCookieModels); + CreateTimer(0.2, Timer_SetAllCookieModels); PrintToServer("Over 4 clients, setting models for all users based on cookie."); }else { PrintToServer("Client joined with model cookie | client %N | cookie %d", client, g_iPendingCookieModel[client]);