Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
300632db86 | ||
|
|
d1776dd641 | ||
|
|
22cee6a2dd | ||
|
|
a2194df273 | ||
|
|
27e20996dd | ||
|
|
b5f16142e5 | ||
|
|
23f1f9e148 | ||
|
|
990f99af5a | ||
|
|
6ca9d86e8f | ||
|
|
fae8b4d49a | ||
|
|
7f2d9dd8eb | ||
|
|
8ae1b3e1e7 | ||
|
|
c77c853c02 | ||
|
|
2b0daba573 | ||
|
|
ba4aa4d37f |
@@ -3,3 +3,4 @@ e6ef5ecdf8d75740ca2685a709bf321f8873bc3b sourcemod-1.1.0
|
||||
e877885fac80be71822641f7a9122cebc9812521 sourcemod-1.1.1
|
||||
b3ffa8a4511c4eadaf533fc790aa6b14f7f0c6ea sourcemod-1.1.2
|
||||
3a73bbf60f34befa9b66be03fa5974b394bb3411 sourcemod-1.2.0
|
||||
78a1f1b1c6fa86fd7691c70ebf48a9fb3dfb3c11 sourcemod-1.5.0
|
||||
|
||||
@@ -1,5 +1,25 @@
|
||||
SourceMod Changelog
|
||||
|
||||
SourceMod 1.5.1 [2013-09-10]
|
||||
|
||||
URL: http://wiki.alliedmods.net/SourceMod_1.5.1_Release_Notes
|
||||
|
||||
User Changes:
|
||||
- Updated gamedata support for TF2.
|
||||
- Added missing DispatchKeyValue gamedata for HL2 CTF (bug 5114) (peace-maker).
|
||||
- Fixed translations not being loaded if identifier was not two or three characters (fixes Portuguese) (bug 5888).
|
||||
- Fixed runoff voting occurring when receiving the exact number of required votes (bug 5890).
|
||||
- Fixed reserve slot plugin hiding too many slots on Orangebox gamesif SourceTV and/or Replay are present (bug 5499).
|
||||
- Fixed some crashes in TF2 and unexpected behavior in all games with SDKHook_TakeDamage due to uninitialized var.
|
||||
- Fixed attempted triggers from gagged users displaying in chat (bug 5918, r=asherkin).
|
||||
- Fixed errors in Italian translation (Oktober).
|
||||
- Added Norwegian translation (checkster).
|
||||
|
||||
Developer Changes:
|
||||
- Added CS_UpdateClientModel native to CStrike extension for CS:S and CS:GO (bug 5905) (Drifter).
|
||||
- Fixed setting weapon param in SDKHook_TakeDamage overwriting attacker instead of setting weapon (bug 5911) (KyleS)
|
||||
|
||||
----------------------------------------------------------
|
||||
SourceMod 1.5.0 [2013-08-25]
|
||||
|
||||
URL: http://wiki.alliedmods.net/SourceMod_1.5.0_Release_Notes
|
||||
|
||||
@@ -479,13 +479,6 @@ SMCResult CPhraseFile::ReadSMC_KeyValue(const SMCStates *states, const char *key
|
||||
}
|
||||
else
|
||||
{
|
||||
size_t len = strlen(key);
|
||||
if (len < 2 || len > 3)
|
||||
{
|
||||
ParseWarning("Ignoring translation to invalid language \"%s\" on line %d.", key, states->line);
|
||||
return SMCResult_Continue;
|
||||
}
|
||||
|
||||
unsigned int lang;
|
||||
if (!m_pTranslator->GetLanguageByCode(key, &lang))
|
||||
{
|
||||
@@ -498,7 +491,7 @@ SMCResult CPhraseFile::ReadSMC_KeyValue(const SMCStates *states, const char *key
|
||||
/* See how many bytes we need for this string, then allocate.
|
||||
* NOTE: THIS SHOULD GUARANTEE THAT WE DO NOT NEED TO NEED TO SIZE CHECK
|
||||
*/
|
||||
len = strlen(value) + pPhrase->fmt_bytes + 1;
|
||||
size_t len = strlen(value) + pPhrase->fmt_bytes + 1;
|
||||
char *out_buf;
|
||||
int out_idx;
|
||||
|
||||
@@ -921,14 +914,6 @@ SMCResult Translator::ReadSMC_LeavingSection(const SMCStates *states)
|
||||
|
||||
SMCResult Translator::ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value)
|
||||
{
|
||||
size_t len = strlen(key);
|
||||
|
||||
if (len < 2 || len > 3)
|
||||
{
|
||||
smcore.LogError("[SM] Warning encountered parsing languages.cfg file.");
|
||||
smcore.LogError("[SM] Invalid language code \"%s\" is being ignored.", key);
|
||||
}
|
||||
|
||||
AddLanguage(key, value);
|
||||
|
||||
return SMCResult_Continue;
|
||||
|
||||
@@ -787,6 +787,25 @@ static cell_t CS_GetClientAssists(IPluginContext *pContext, const cell_t *params
|
||||
#endif
|
||||
}
|
||||
|
||||
static cell_t CS_UpdateClientModel(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
static ICallWrapper *pWrapper = NULL;
|
||||
if (!pWrapper)
|
||||
{
|
||||
REGISTER_NATIVE_ADDR("SetModelFromClass",
|
||||
pWrapper = g_pBinTools->CreateCall(addr, CallConv_ThisCall, NULL, NULL, 0));
|
||||
}
|
||||
|
||||
CBaseEntity *pEntity;
|
||||
if (!(pEntity=GetCBaseEntity(params[1], true)))
|
||||
{
|
||||
return pContext->ThrowNativeError("Client index %d is not valid", params[1]);
|
||||
}
|
||||
|
||||
pWrapper->Execute(&pEntity, NULL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
sp_nativeinfo_t g_CSNatives[] =
|
||||
{
|
||||
{"CS_RespawnPlayer", CS_RespawnPlayer},
|
||||
@@ -807,6 +826,7 @@ sp_nativeinfo_t g_CSNatives[] =
|
||||
{"CS_SetClientContributionScore", CS_SetClientContributionScore},
|
||||
{"CS_GetClientAssists", CS_GetClientAssists},
|
||||
{"CS_SetClientAssists", CS_SetClientAssists},
|
||||
{"CS_UpdateClientModel", CS_UpdateClientModel},
|
||||
{"CS_IsValidWeaponID", CS_IsValidWeaponID},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@@ -116,7 +116,7 @@ cell_t Native_TakeDamage(IPluginContext *pContext, const cell_t *params)
|
||||
if (!pInflictor)
|
||||
return pContext->ThrowNativeError("Invalid entity index %d for inflictor", params[2]);
|
||||
|
||||
CBaseEntity *pAttacker = NULL;
|
||||
CBaseEntity *pAttacker;
|
||||
if (params[3] != -1)
|
||||
{
|
||||
pAttacker = UTIL_GetCBaseEntity(params[3]);
|
||||
@@ -125,21 +125,28 @@ cell_t Native_TakeDamage(IPluginContext *pContext, const cell_t *params)
|
||||
return pContext->ThrowNativeError("Invalid entity index %d for attackerr", params[3]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pAttacker = NULL;
|
||||
}
|
||||
|
||||
float flDamage = sp_ctof(params[4]);
|
||||
int iDamageType = params[5];
|
||||
|
||||
CBaseEntity *pWeapon = NULL;
|
||||
CBaseEntity *pWeapon;
|
||||
if (params[6] != -1)
|
||||
{
|
||||
pAttacker = UTIL_GetCBaseEntity(params[6]);
|
||||
if (!pAttacker)
|
||||
pWeapon = UTIL_GetCBaseEntity(params[6]);
|
||||
if (!pWeapon)
|
||||
{
|
||||
return pContext->ThrowNativeError("Invalid entity index %d for weapon", params[6]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pWeapon = NULL;
|
||||
}
|
||||
|
||||
Vector vecDamageForce = Vector(0.0f, 0.0f, 0.0f);
|
||||
cell_t *addr;
|
||||
int err;
|
||||
if ((err = pContext->LocalToPhysAddr(params[7], &addr)) != SP_ERROR_NONE)
|
||||
@@ -147,26 +154,29 @@ cell_t Native_TakeDamage(IPluginContext *pContext, const cell_t *params)
|
||||
return pContext->ThrowNativeError("Could not read damageForce vector");
|
||||
}
|
||||
|
||||
Vector vecDamageForce;
|
||||
if (addr != pContext->GetNullRef(SP_NULL_VECTOR))
|
||||
{
|
||||
vecDamageForce = Vector(
|
||||
sp_ctof(addr[0]),
|
||||
sp_ctof(addr[1]),
|
||||
sp_ctof(addr[2]));
|
||||
vecDamageForce.Init(sp_ctof(addr[0]), sp_ctof(addr[1]), sp_ctof(addr[2]));
|
||||
}
|
||||
else
|
||||
{
|
||||
vecDamageForce.Init();
|
||||
}
|
||||
|
||||
Vector vecDamagePosition = vec3_origin;
|
||||
if ((err = pContext->LocalToPhysAddr(params[8], &addr)) != SP_ERROR_NONE)
|
||||
{
|
||||
return pContext->ThrowNativeError("Could not read damagePosition vector");
|
||||
}
|
||||
|
||||
Vector vecDamagePosition;
|
||||
if (addr != pContext->GetNullRef(SP_NULL_VECTOR))
|
||||
{
|
||||
vecDamagePosition = Vector(
|
||||
sp_ctof(addr[0]),
|
||||
sp_ctof(addr[1]),
|
||||
sp_ctof(addr[2]));
|
||||
vecDamagePosition.Init(sp_ctof(addr[0]), sp_ctof(addr[1]), sp_ctof(addr[2]));
|
||||
}
|
||||
else
|
||||
{
|
||||
vecDamagePosition = vec3_origin;
|
||||
}
|
||||
|
||||
CTakeDamageInfoHack info(pInflictor, pAttacker, flDamage, iDamageType, pWeapon, vecDamageForce, vecDamagePosition);
|
||||
|
||||
@@ -62,6 +62,12 @@ CTakeDamageInfoHack::CTakeDamageInfoHack( CBaseEntity *pInflictor, CBaseEntity *
|
||||
m_vecReportedPosition = vec3_origin;
|
||||
m_iAmmoType = -1;
|
||||
|
||||
#if SOURCE_ENGINE < SE_ORANGEBOX
|
||||
m_iCustomKillType = 0;
|
||||
#else
|
||||
m_iDamageCustom = 0;
|
||||
#endif
|
||||
|
||||
#if SOURCE_ENGINE == SE_CSS || SOURCE_ENGINE == SE_HL2DM || SOURCE_ENGINE == SE_DODS || SOURCE_ENGINE == SE_TF2
|
||||
m_iDamagedOtherPlayers = 0;
|
||||
m_iPlayerPenetrateCount = 0;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
"plugin_24602c74f183cfcd157b3d50dee96c52" "" /* UCP Server (Endi) - Version 7.8.3 */
|
||||
"plugin_78140f1a0f26cd3297767d0598eac4b1" "" /* [Any] PReplay (DarthNinja) - Version 1.0.0 */
|
||||
"plugin_55923ba6bfe41569a3e4fbd7ca4606e5" "" /* VIP Plugin (World-Source.Ru) - Version 2.0 */
|
||||
"plugin_4bf983e1d5b61ba0b1ab9a7e53bfda27" "" /* WarMod CS:GO (Twelve-60) */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
"Games"
|
||||
{
|
||||
/* HL2:CTF 2.1 */
|
||||
"hl2ctf"
|
||||
{
|
||||
"Offsets"
|
||||
{
|
||||
"EndTouch"
|
||||
{
|
||||
"windows" "83"
|
||||
"linux" "84"
|
||||
}
|
||||
"FireBullets"
|
||||
{
|
||||
"windows" "93"
|
||||
"Linux" "94"
|
||||
}
|
||||
"GroundEntChanged"
|
||||
{
|
||||
"windows" "146"
|
||||
"linux" "147"
|
||||
}
|
||||
"OnTakeDamage"
|
||||
{
|
||||
"windows" "54"
|
||||
"linux" "55"
|
||||
}
|
||||
"PreThink"
|
||||
{
|
||||
"windows" "247"
|
||||
"linux" "248"
|
||||
}
|
||||
"PostThink"
|
||||
{
|
||||
"windows" "248"
|
||||
"linux" "249"
|
||||
}
|
||||
"SetTransmit"
|
||||
{
|
||||
"windows" "21"
|
||||
"linux" "22"
|
||||
}
|
||||
"ShouldCollide"
|
||||
{
|
||||
"windows" "17"
|
||||
"linux" "18"
|
||||
}
|
||||
"Spawn"
|
||||
{
|
||||
"windows" "23"
|
||||
"linux" "24"
|
||||
}
|
||||
"StartTouch"
|
||||
{
|
||||
"windows" "81"
|
||||
"linux" "82"
|
||||
}
|
||||
"Think"
|
||||
{
|
||||
"windows" "45"
|
||||
"linux" "46"
|
||||
}
|
||||
"Touch"
|
||||
{
|
||||
"windows" "82"
|
||||
"linux" "83"
|
||||
}
|
||||
"TraceAttack"
|
||||
{
|
||||
"windows" "53"
|
||||
"linux" "54"
|
||||
}
|
||||
"VPhysicsUpdate"
|
||||
{
|
||||
"windows" "130"
|
||||
"linux" "131"
|
||||
}
|
||||
"Weapon_CanSwitchTo"
|
||||
{
|
||||
"windows" "205"
|
||||
"linux" "206"
|
||||
}
|
||||
"Weapon_CanUse"
|
||||
{
|
||||
"windows" "199"
|
||||
"linux" "200"
|
||||
}
|
||||
"Weapon_Drop"
|
||||
{
|
||||
"windows" "202"
|
||||
"linux" "203"
|
||||
}
|
||||
"Weapon_Equip"
|
||||
{
|
||||
"windows" "200"
|
||||
"linux" "201"
|
||||
}
|
||||
"Weapon_Switch"
|
||||
{
|
||||
"windows" "203"
|
||||
"linux" "204"
|
||||
}
|
||||
"Reload"
|
||||
{
|
||||
"windows" "213"
|
||||
"linux" "214"
|
||||
}
|
||||
"Use"
|
||||
{
|
||||
"windows" "80"
|
||||
"linux" "81"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -159,4 +159,9 @@
|
||||
{
|
||||
"game" "synergy"
|
||||
}
|
||||
|
||||
"game.hl2ctf.txt"
|
||||
{
|
||||
"game" "hl2ctf"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
"Games"
|
||||
{
|
||||
/* HL2:CTF 2.0 RC1 */
|
||||
/* HL2:CTF 2.1 */
|
||||
"hl2ctf"
|
||||
{
|
||||
|
||||
@@ -87,6 +87,21 @@
|
||||
"windows" "0"
|
||||
"linux" "0"
|
||||
}
|
||||
"DispatchKeyValue"
|
||||
{
|
||||
"windows" "30"
|
||||
"linux" "29"
|
||||
}
|
||||
"DispatchKeyValueFloat"
|
||||
{
|
||||
"windows" "29"
|
||||
"linux" "30"
|
||||
}
|
||||
"DispatchKeyValueVector"
|
||||
{
|
||||
"windows" "28"
|
||||
"linux" "31"
|
||||
}
|
||||
}
|
||||
"Signatures"
|
||||
{
|
||||
|
||||
@@ -138,6 +138,13 @@
|
||||
"linux" "@_ZNK16FileWeaponInfo_t15GetAttributeIntEPKcPK13CEconItemView"
|
||||
"mac" "@_ZNK16FileWeaponInfo_t15GetAttributeIntEPKcPK13CEconItemView"
|
||||
}
|
||||
"SetModelFromClass"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x51\x53\x56\x8B\xF1\x57\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x8B\xD8"
|
||||
"linux" "@_ZN9CCSPlayer17SetModelFromClassEv"
|
||||
"mac" "@_ZN9CCSPlayer17SetModelFromClassEv"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -138,6 +138,13 @@
|
||||
"linux" "@_ZN12CCSGameRules13CheckWinLimitEv"
|
||||
"mac" "@_ZN12CCSGameRules5ThinkEv"
|
||||
}
|
||||
"SetModelFromClass"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2C\x89\x4D\xD4\x8B\x4D\xD4\xE8\x2A\x2A\x2A\x2A\x83\xF8\x02\x0F\x85\x2A\x2A\x2A\x2A\x8B"
|
||||
"linux" "@_ZN9CCSPlayer17SetModelFromClassEv"
|
||||
"mac" "@_ZN9CCSPlayer17SetModelFromClassEv"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -60,14 +60,14 @@
|
||||
"Regenerate"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\xF3\x0F\x2A\x2A\x2A\x2A\x2A\x2A\x53\x56\x8B\xF1\x8B"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x2A\x53\x56\x8B\xF1\x8B\x06\x8B\x2A\x2A\x2A\x2A\x2A\x57\xFF\xD2\x8B\x8E\x2A\x2A\x2A\x2A\x8D\x9E"
|
||||
"linux" "@_ZN9CTFPlayer10RegenerateEb"
|
||||
"mac" "@_ZN9CTFPlayer10RegenerateEb"
|
||||
}
|
||||
"AddCondition"
|
||||
{
|
||||
"library" "server"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x56\x8B\x75\x08\x57\x8B\xD9"
|
||||
"windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x8B\xD9\x83\xBB\x2A\x2A\x2A\x2A\x00\x0F"
|
||||
"linux" "@_ZN15CTFPlayerShared7AddCondE7ETFCondfP11CBaseEntity"
|
||||
"mac" "@_ZN15CTFPlayerShared7AddCondE7ETFCondfP11CBaseEntity"
|
||||
}
|
||||
|
||||
+17
-1
@@ -98,6 +98,22 @@ public OnPluginStart()
|
||||
{
|
||||
OnAdminMenuReady(topmenu);
|
||||
}
|
||||
|
||||
// Normally, OnClientSayCommand would be aqequate and more appropirate here, but it does
|
||||
// not catch attempted chat triggers, which we also want to be blocked if a player is gagged.
|
||||
AddCommandListener(Command_Say, "say");
|
||||
AddCommandListener(Command_Say, "say_team");
|
||||
|
||||
new String:gameDir[64];
|
||||
GetGameFolderName(gameDir, sizeof(gameDir));
|
||||
if (StrEqual(gameDir, "insurgency", false))
|
||||
{
|
||||
AddCommandListener(Command_Say, "say2");
|
||||
}
|
||||
else if (StrEqual(gameDir, "nucleardawn", false))
|
||||
{
|
||||
AddCommandListener(Command_Say, "say_squad");
|
||||
}
|
||||
}
|
||||
|
||||
public OnAdminMenuReady(Handle:topmenu)
|
||||
@@ -151,7 +167,7 @@ public bool:OnClientConnect(client, String:rejectmsg[], maxlen)
|
||||
return true;
|
||||
}
|
||||
|
||||
public Action:OnClientSayCommand(client, const String:command[], const String:sArgs[])
|
||||
public Action:Command_Say(client, const String:command[], argc)
|
||||
{
|
||||
if (client)
|
||||
{
|
||||
|
||||
@@ -367,6 +367,15 @@ native CS_WeaponIDToAlias(CSWeaponID:weaponID, String:destination[], len);
|
||||
*/
|
||||
native bool:CS_IsValidWeaponID(CSWeaponID:id);
|
||||
|
||||
/**
|
||||
* Sets a player's model based on their current class
|
||||
*
|
||||
* @param client Player's index.
|
||||
* @noreturn
|
||||
* @error Invalid client index, client not in game.
|
||||
*/
|
||||
native CS_UpdateClientModel(client);
|
||||
|
||||
/**
|
||||
* Do not edit below this line!
|
||||
*/
|
||||
@@ -404,6 +413,7 @@ public __ext_cstrike_SetNTVOptional()
|
||||
MarkNativeAsOptional("CS_AliasToWeaponID");
|
||||
MarkNativeAsOptional("CS_WeaponIDToAlias");
|
||||
MarkNativeAsOptional("CS_IsValidWeaponID");
|
||||
MarkNativeAsOptional("CS_UpdateClientModel");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -790,7 +790,7 @@ public Handler_MapVoteFinished(Handle:menu,
|
||||
new Float:winningvotes = float(item_info[0][VOTEINFO_ITEM_VOTES]);
|
||||
new Float:required = num_votes * (GetConVarFloat(g_Cvar_RunOffPercent) / 100.0);
|
||||
|
||||
if (winningvotes <= required)
|
||||
if (winningvotes < required)
|
||||
{
|
||||
/* Insufficient Winning margin - Lets do a runoff */
|
||||
g_VoteMenu = CreateMenu(Handler_MapVoteMenu, MenuAction:MENU_ACTIONS_ALL);
|
||||
|
||||
@@ -55,10 +55,6 @@ new Handle:sm_reserve_type;
|
||||
new Handle:sm_reserve_maxadmins;
|
||||
new Handle:sm_reserve_kicktype;
|
||||
|
||||
new bool:g_BotsSubtractFromMax;
|
||||
new g_SourceTV = -1;
|
||||
new g_Replay = -1;
|
||||
|
||||
enum KickType
|
||||
{
|
||||
Kick_HighestPing,
|
||||
@@ -79,27 +75,6 @@ public OnPluginStart()
|
||||
|
||||
HookConVarChange(sm_reserved_slots, SlotCountChanged);
|
||||
HookConVarChange(sm_hide_slots, SlotHideChanged);
|
||||
|
||||
new EngineVersion:engineVersion = GetEngineVersion();
|
||||
g_BotsSubtractFromMax = engineVersion == Engine_TF2 || engineVersion == Engine_CSS || engineVersion == Engine_DODS || engineVersion == Engine_HL2DM;
|
||||
|
||||
if (g_BotsSubtractFromMax)
|
||||
{
|
||||
for (new i = 1; i <= MaxClients; i++)
|
||||
{
|
||||
if (!IsClientConnected(i))
|
||||
continue;
|
||||
|
||||
if (IsClientSourceTV(i))
|
||||
{
|
||||
g_SourceTV = i;
|
||||
}
|
||||
else if (IsClientReplay(i))
|
||||
{
|
||||
g_Replay = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public OnPluginEnd()
|
||||
@@ -143,18 +118,6 @@ public Action:OnTimedKick(Handle:timer, any:client)
|
||||
|
||||
public OnClientPostAdminCheck(client)
|
||||
{
|
||||
if (g_BotsSubtractFromMax)
|
||||
{
|
||||
if (IsClientSourceTV(client))
|
||||
{
|
||||
g_SourceTV = client;
|
||||
}
|
||||
else if (IsClientReplay(client))
|
||||
{
|
||||
g_Replay = client;
|
||||
}
|
||||
}
|
||||
|
||||
new reserved = GetConVarInt(sm_reserved_slots);
|
||||
|
||||
if (reserved > 0)
|
||||
@@ -235,18 +198,6 @@ public OnClientPostAdminCheck(client)
|
||||
|
||||
public OnClientDisconnect_Post(client)
|
||||
{
|
||||
if (g_BotsSubtractFromMax)
|
||||
{
|
||||
if (client == g_SourceTV)
|
||||
{
|
||||
g_SourceTV = -1;
|
||||
}
|
||||
else if (client == g_Replay)
|
||||
{
|
||||
g_Replay = -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (GetConVarBool(sm_hide_slots))
|
||||
{
|
||||
SetVisibleMaxSlots(GetClientCount(false), GetMaxHumanPlayers() - GetConVarInt(sm_reserved_slots));
|
||||
@@ -297,19 +248,6 @@ SetVisibleMaxSlots(clients, limit)
|
||||
num = limit;
|
||||
}
|
||||
|
||||
if (g_BotsSubtractFromMax)
|
||||
{
|
||||
if (g_SourceTV > -1)
|
||||
{
|
||||
--num;
|
||||
}
|
||||
|
||||
if (g_Replay > -1)
|
||||
{
|
||||
--num;
|
||||
}
|
||||
}
|
||||
|
||||
SetConVarInt(sv_visiblemaxplayers, num);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
1.5.0
|
||||
1.5.1
|
||||
|
||||
Reference in New Issue
Block a user