From aef0d1c1268ab7d4bc18996c9c6b4da16a40aadc Mon Sep 17 00:00:00 2001 From: navewindre Date: Mon, 4 Dec 2023 18:06:10 +0100 Subject: bbbbbbbbwaaaaaaaaaaa --- sourcemod/scripting/gokz-playermodels.sp | 198 +++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 sourcemod/scripting/gokz-playermodels.sp (limited to 'sourcemod/scripting/gokz-playermodels.sp') diff --git a/sourcemod/scripting/gokz-playermodels.sp b/sourcemod/scripting/gokz-playermodels.sp new file mode 100644 index 0000000..237b7df --- /dev/null +++ b/sourcemod/scripting/gokz-playermodels.sp @@ -0,0 +1,198 @@ +#include + +#include +#include + +#include + +#include + +#undef REQUIRE_EXTENSIONS +#undef REQUIRE_PLUGIN +#include + +#pragma newdecls required +#pragma semicolon 1 + + + +public Plugin myinfo = +{ + name = "GOKZ Player Models", + author = "DanZay", + description = "Sets player's model upon spawning", + version = GOKZ_VERSION, + url = GOKZ_SOURCE_URL +}; + +#define UPDATER_URL GOKZ_UPDATER_BASE_URL..."gokz-playermodels.txt" +#define PLAYER_MODEL_T "models/player/tm_leet_varianta.mdl" +#define PLAYER_MODEL_CT "models/player/ctm_idf_variantc.mdl" +#define PLAYER_MODEL_T_BOT "models/player/custom_player/legacy/tm_leet_varianta.mdl" +#define PLAYER_MODEL_CT_BOT "models/player/custom_player/legacy/ctm_idf_variantc.mdl" +ConVar gCV_gokz_player_models_alpha; +ConVar gCV_sv_disable_immunity_alpha; + + + +// =====[ PLUGIN EVENTS ]===== + +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + RegPluginLibrary("gokz-playermodels"); + return APLRes_Success; +} + +public void OnPluginStart() +{ + CreateConVars(); + HookEvents(); +} + +public void OnAllPluginsLoaded() +{ + if (LibraryExists("updater")) + { + Updater_AddPlugin(UPDATER_URL); + } +} + +public void OnLibraryAdded(const char[] name) +{ + if (StrEqual(name, "updater")) + { + Updater_AddPlugin(UPDATER_URL); + } +} + + + +// =====[ CLIENT EVENTS ]===== + +public void OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast) // player_spawn post hook +{ + int client = GetClientOfUserId(event.GetInt("userid")); + if (IsValidClient(client)) + { + // Can't use a timer here because it's not precise enough. We want exactly 2 ticks of delay! + // 2 ticks is the minimum amount of time after which gloves will work. + // The reason we need precision is because SetEntityModel momentarily resets the + // player hull to standing (or something along those lines), so when a player + // spawns/gets reset to a crouch tunnel where there's a trigger less than 18 units from the top + // of the ducked player hull, then they touch that trigger! SetEntityModel interferes with the + // fix for that (JoinTeam in gokz-core/misc calls TeleportPlayer in gokz.inc, which fixes that bug). + RequestFrame(RequestFrame_UpdatePlayerModel, GetClientUserId(client)); + } +} + + + +// =====[ OTHER EVENTS ]===== + +public void OnMapStart() +{ + PrecachePlayerModels(); +} + + + +// =====[ GENERAL ]===== + +void HookEvents() +{ + HookEvent("player_spawn", OnPlayerSpawn, EventHookMode_Post); +} + + + +// =====[ CONVARS ]===== + +void CreateConVars() +{ + AutoExecConfig_SetFile("gokz-playermodels", "sourcemod/gokz"); + AutoExecConfig_SetCreateFile(true); + + gCV_gokz_player_models_alpha = AutoExecConfig_CreateConVar("gokz_player_models_alpha", "65", "Amount of alpha (transparency) to set player models to.", _, true, 0.0, true, 255.0); + gCV_gokz_player_models_alpha.AddChangeHook(OnConVarChanged); + + AutoExecConfig_ExecuteFile(); + AutoExecConfig_CleanFile(); + + gCV_sv_disable_immunity_alpha = FindConVar("sv_disable_immunity_alpha"); +} + +public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) +{ + if (convar == gCV_gokz_player_models_alpha) + { + for (int client = 1; client <= MaxClients; client++) + { + if (IsClientInGame(client) && IsPlayerAlive(client)) + { + UpdatePlayerModelAlpha(client); + } + } + } +} + + + +// =====[ PLAYER MODELS ]===== + +public void RequestFrame_UpdatePlayerModel(int userid) +{ + RequestFrame(RequestFrame_UpdatePlayerModel2, userid); +} + +public void RequestFrame_UpdatePlayerModel2(int userid) +{ + int client = GetClientOfUserId(userid); + if (!IsValidClient(client) || !IsPlayerAlive(client)) + { + return; + } + // Bots are unaffected by the bobbing animation caused by the new models. + switch (GetClientTeam(client)) + { + case CS_TEAM_T: + { + if (IsFakeClient(client)) + { + SetEntityModel(client, PLAYER_MODEL_T_BOT); + } + else + { + SetEntityModel(client, PLAYER_MODEL_T); + } + } + case CS_TEAM_CT: + { + if (IsFakeClient(client)) + { + SetEntityModel(client, PLAYER_MODEL_CT_BOT); + } + else + { + SetEntityModel(client, PLAYER_MODEL_CT); + } + } + } + + UpdatePlayerModelAlpha(client); +} + +void UpdatePlayerModelAlpha(int client) +{ + SetEntityRenderMode(client, RENDER_TRANSCOLOR); + SetEntityRenderColor(client, _, _, _, gCV_gokz_player_models_alpha.IntValue); +} + +void PrecachePlayerModels() +{ + gCV_sv_disable_immunity_alpha.IntValue = 1; // Ensures player transparency works + + PrecacheModel(PLAYER_MODEL_T, true); + PrecacheModel(PLAYER_MODEL_CT, true); + PrecacheModel(PLAYER_MODEL_T_BOT, true); + PrecacheModel(PLAYER_MODEL_CT_BOT, true); +} \ No newline at end of file -- cgit v1.2.3