From 574eba7ee56517dc92d3df65808cc71bdeca23b9 Mon Sep 17 00:00:00 2001 From: BotoX Date: Sun, 8 May 2016 23:03:46 +0200 Subject: [PATCH] added convars to PlayerVisibility fixed errors in SelfMute, StopSound and ExtraCommands added server crash prevention to SvGravityFix --- ExtraCommands/scripting/ExtraCommands.sp | 4 +- .../scripting/PlayerVisibility.sp | 50 ++++++++++++++++--- SelfMute/scripting/SelfMute.sp | 24 +++++---- StopSound/scripting/StopSound.sp | 22 ++++---- SvGravityFix/scripting/SvGravityFix.sp | 25 ++++++++-- .../configs/custom-chatcolorsreplace.cfg | 1 - 6 files changed, 93 insertions(+), 33 deletions(-) diff --git a/ExtraCommands/scripting/ExtraCommands.sp b/ExtraCommands/scripting/ExtraCommands.sp index ae01d5d1..2ce9de32 100644 --- a/ExtraCommands/scripting/ExtraCommands.sp +++ b/ExtraCommands/scripting/ExtraCommands.sp @@ -93,7 +93,7 @@ public Action Listener_Pause(int client, const char[] command, int argc) public Action:Event_BombPlanted(Handle:event, const String:name[], bool:dontBroadcast) { - for(new i = 1; i <= MAXPLAYERS; i++) + for(new i = 1; i <= MaxClients; i++) { if(IsClientInGame(i)) ClientCommand(i, "playgamesound \"radio/bombpl.wav\""); @@ -103,7 +103,7 @@ public Action:Event_BombPlanted(Handle:event, const String:name[], bool:dontBroa public Action:Event_BombDefused(Handle:event, const String:name[], bool:dontBroadcast) { - for(new i = 1; i <= MAXPLAYERS; i++) + for(new i = 1; i <= MaxClients; i++) { if(IsClientInGame(i)) ClientCommand(i, "playgamesound \"radio/bombdef.wav\""); diff --git a/PlayerVisibility/scripting/PlayerVisibility.sp b/PlayerVisibility/scripting/PlayerVisibility.sp index 5bc32d13..7c11efc6 100644 --- a/PlayerVisibility/scripting/PlayerVisibility.sp +++ b/PlayerVisibility/scripting/PlayerVisibility.sp @@ -13,15 +13,49 @@ public Plugin myinfo = url = "" }; +ConVar g_CVar_MaxDistance; +ConVar g_CVar_MinFactor; +ConVar g_CVar_MinAlpha; + +float g_fMaxDistance; +float g_fMinFactor; +float g_fMinAlpha; + int g_Client_Alpha[MAXPLAYERS + 1] = {255, ...}; public void OnPluginStart() { + g_CVar_MaxDistance = CreateConVar("sm_pvis_maxdistance", "100.0", "Distance at which models stop fading.", 0, true, 0.0); + g_fMaxDistance = g_CVar_MaxDistance.FloatValue; + g_CVar_MaxDistance.AddChangeHook(OnConVarChanged); + + g_CVar_MinFactor = CreateConVar("sm_pvis_minfactor", "0.75", "Smallest allowed alpha factor per client.", 0, true, 0.0, true, 1.0); + g_fMinFactor = g_CVar_MinFactor.FloatValue; + g_CVar_MinFactor.AddChangeHook(OnConVarChanged); + + g_CVar_MinAlpha = CreateConVar("sm_pvis_minalpha", "75.0", "Minimum allowed alpha value.", 0, true, 0.0, true, 255.0); + g_fMinAlpha = g_CVar_MinAlpha.FloatValue; + g_CVar_MinAlpha.AddChangeHook(OnConVarChanged); + for(int client = 1; client <= MaxClients; client++) { if(IsClientInGame(client)) OnClientPutInServer(client); } + + AutoExecConfig(true, "plugin.PlayerVisibility"); +} + +public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) +{ + if(convar == g_CVar_MaxDistance) + g_fMaxDistance = g_CVar_MaxDistance.FloatValue; + + else if(convar == g_CVar_MinFactor) + g_fMinFactor = g_CVar_MinFactor.FloatValue; + + else if(convar == g_CVar_MinAlpha) + g_fMinAlpha = g_CVar_MinAlpha.FloatValue; } public void OnPluginEnd() @@ -40,11 +74,13 @@ public void OnPluginEnd() public void OnClientPutInServer(int client) { + g_Client_Alpha[client] = 255; SDKHook(client, SDKHook_PostThink, OnPostThink); } public void OnClientDisconnect(int client) { + g_Client_Alpha[client] = 255; SDKUnhook(client, SDKHook_PostThink, OnPostThink); } @@ -84,21 +120,19 @@ public void OnPostThink(client) GetClientAbsOrigin(client, fVec1); GetClientAbsOrigin(i, fVec2); - float fMaxDistance = 150.0; float fDistance = GetVectorDistance(fVec1, fVec2, false); - - if(fDistance <= fMaxDistance) + if(fDistance <= g_fMaxDistance) { - float fFactor = fDistance / fMaxDistance; - if(fFactor < 0.75) - fFactor = 0.75; + float fFactor = fDistance / g_fMaxDistance; + if(fFactor < g_fMinFactor) + fFactor = g_fMinFactor; fAlpha *= fFactor; } } - if(fAlpha < 100.0) - fAlpha = 100.0; + if(fAlpha < g_fMinAlpha) + fAlpha = g_fMinAlpha; int Alpha = RoundToNearest(fAlpha); int LastAlpha = g_Client_Alpha[client]; diff --git a/SelfMute/scripting/SelfMute.sp b/SelfMute/scripting/SelfMute.sp index 655db581..92e8d08c 100644 --- a/SelfMute/scripting/SelfMute.sp +++ b/SelfMute/scripting/SelfMute.sp @@ -859,6 +859,9 @@ public Action Hook_UserMessageSendAudio(UserMsg msg_id, Handle bf, const int[] p BfReadString(bf, g_MsgRadioSound, sizeof(g_MsgRadioSound), false); + if(StrEqual(g_MsgRadioSound, "radio.locknload")) + return Plugin_Continue; + DataPack pack = new DataPack(); pack.WriteCell(g_MsgDest); pack.WriteCell(g_MsgClient); @@ -870,9 +873,8 @@ public Action Hook_UserMessageSendAudio(UserMsg msg_id, Handle bf, const int[] p pack.WriteString(g_MsgRadioSound); pack.WriteCell(g_MsgPlayersNum); - ArrayList aPlayers = new ArrayList(g_MsgPlayersNum, 1); - aPlayers.SetArray(0, g_MsgPlayers, g_MsgPlayersNum); - pack.WriteCell(aPlayers); + for(int i = 0; i < g_MsgPlayersNum; i++) + pack.WriteCell(g_MsgPlayers[i]); RequestFrame(OnPlayerRadio, pack); @@ -891,13 +893,17 @@ public void OnPlayerRadio(DataPack pack) pack.ReadString(g_MsgParam4, sizeof(g_MsgParam4)); pack.ReadString(g_MsgRadioSound, sizeof(g_MsgRadioSound)); g_MsgPlayersNum = pack.ReadCell(); - ArrayList aPlayers = pack.ReadCell(); + + int playersNum = 0; + for(int i = 0; i < g_MsgPlayersNum; i++) + { + int client_ = pack.ReadCell(); + if(IsClientInGame(client_)) + g_MsgPlayers[playersNum++] = client_; + } CloseHandle(pack); - aPlayers.GetArray(0, g_MsgPlayers, g_MsgPlayersNum); - delete aPlayers; - - Handle RadioText = StartMessage("RadioText", g_MsgPlayers, g_MsgPlayersNum, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); + Handle RadioText = StartMessage("RadioText", g_MsgPlayers, playersNum, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); BfWriteByte(RadioText, g_MsgDest); BfWriteByte(RadioText, g_MsgClient); BfWriteString(RadioText, g_MsgName); @@ -907,7 +913,7 @@ public void OnPlayerRadio(DataPack pack) BfWriteString(RadioText, g_MsgParam4); EndMessage(); - Handle SendAudio = StartMessage("SendAudio", g_MsgPlayers, g_MsgPlayersNum, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); + Handle SendAudio = StartMessage("SendAudio", g_MsgPlayers, playersNum, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); BfWriteString(SendAudio, g_MsgRadioSound); EndMessage(); } diff --git a/StopSound/scripting/StopSound.sp b/StopSound/scripting/StopSound.sp index 1cbab971..4f66adbd 100644 --- a/StopSound/scripting/StopSound.sp +++ b/StopSound/scripting/StopSound.sp @@ -344,9 +344,8 @@ public Action Hook_ReloadEffect(UserMsg msg_id, BfRead msg, const int[] players, pack.WriteCell(client); pack.WriteCell(newTotal); - ArrayList aPlayers = new ArrayList(newTotal, 1); - aPlayers.SetArray(0, newClients, newTotal); - pack.WriteCell(aPlayers); + for(int i = 0; i < newTotal; i++) + pack.WriteCell(newClients[i]); RequestFrame(OnReloadEffect, pack); @@ -357,13 +356,18 @@ public void OnReloadEffect(DataPack pack) { pack.Reset(); int client = pack.ReadCell(); - int playersNum = pack.ReadCell(); - ArrayList aPlayers = pack.ReadCell(); - CloseHandle(pack); + int newTotal = pack.ReadCell(); - int[] players = new int[playersNum]; - aPlayers.GetArray(0, players, playersNum); - delete aPlayers; + int[] players = new int[newTotal]; + int playersNum = 0; + + for(int i = 0; i < newTotal; i++) + { + int client_ = pack.ReadCell(); + if(IsClientInGame(client_)) + players[playersNum++] = client_; + } + CloseHandle(pack); Handle ReloadEffect = StartMessage("ReloadEffect", players, playersNum, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); if(GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available && GetUserMessageType() == UM_Protobuf) diff --git a/SvGravityFix/scripting/SvGravityFix.sp b/SvGravityFix/scripting/SvGravityFix.sp index feb3e5a8..a7726125 100644 --- a/SvGravityFix/scripting/SvGravityFix.sp +++ b/SvGravityFix/scripting/SvGravityFix.sp @@ -9,13 +9,30 @@ public Plugin myinfo = { name = "sv_gravity fix", author = "BotoX", - description = "Resets sv_gravity at game_end", - version = "1.0", + description = "Resets sv_gravity at game_end and prevents stupid admins from crashing your server.", + version = "1.1", url = "" }; +ConVar g_ConVar_SvGravity; + +public void OnPluginStart() +{ + g_ConVar_SvGravity = FindConVar("sv_gravity"); + g_ConVar_SvGravity.AddChangeHook(OnConVarChanged); +} + public void OnMapEnd() { - ConVar SvGravity = FindConVar("sv_gravity"); - SvGravity.IntValue = 800; + g_ConVar_SvGravity.IntValue = 800; +} + +public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) +{ + if(convar.IntValue < 1) + { + convar.IntValue = 800; + for(int i = 0; i < 10; i++) + PrintToChatAll("Setting sv_gravity to values less than 1 will crash the server!!!"); + } } diff --git a/custom-chatcolors/configs/custom-chatcolorsreplace.cfg b/custom-chatcolors/configs/custom-chatcolorsreplace.cfg index f675174e..c2c251a9 100644 --- a/custom-chatcolors/configs/custom-chatcolorsreplace.cfg +++ b/custom-chatcolors/configs/custom-chatcolorsreplace.cfg @@ -1,6 +1,5 @@ "AutoReplace" { - "teh" "the" ":lenny:" "( ͡° ͜ʖ ͡°)" ":feel:" "( ´_ゝ`)" ":chill:" "( ≖‿≖)"