Skip to content

Commit 531239a

Browse files
committed
Elimina el archivo .gitkeep y actualiza la versión del plugin a 1.2. Modifica la gestión de modos de juego y mejora la lógica de configuración de nombres de modo.
1 parent 260c07e commit 531239a

File tree

4 files changed

+94
-98
lines changed

4 files changed

+94
-98
lines changed

addons/sourcemod/plugins/optional/.gitkeep

Lines changed: 0 additions & 2 deletions
This file was deleted.
100 Bytes
Binary file not shown.
-329 Bytes
Binary file not shown.

addons/sourcemod/scripting/scavenge_gamemode.sp

Lines changed: 94 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
G L O B A L V A R S
1515
*****************************************************************/
1616

17-
#define PLUGIN_VERSION "1.1"
17+
#define PLUGIN_VERSION "1.2"
1818
#define CONSOLE 0
1919

2020
ConVar
@@ -24,16 +24,15 @@ ConVar
2424
g_cvarCFGName,
2525

2626
l4d_ready_cfg_name,
27+
survivor_limit,
28+
2729
z_versus_hunter_limit,
2830
z_versus_boomer_limit,
2931
z_versus_smoker_limit,
3032
z_versus_jockey_limit,
3133
z_versus_charger_limit,
3234
z_versus_spitter_limit;
3335

34-
char
35-
g_sConfigName[16];
36-
3736
Handle
3837
g_hVote;
3938

@@ -84,6 +83,7 @@ enum struct GameMode
8483
{
8584
Mode mode;
8685
bool ishunter;
86+
char name[32];
8787
}
8888

8989
GameMode
@@ -127,7 +127,7 @@ public void OnPluginStart()
127127

128128
g_cvarDebug = CreateConVar("sm_scavenge_gamemode_debug", "0", "Enable debug", FCVAR_NOTIFY, true, 0.0, true, 1.0);
129129
g_cvarEnable = CreateConVar("sm_scavenge_gamemode_enable", "1", "Enable Scavenge Rounds", FCVAR_NOTIFY, true, 0.0, true, 1.0);
130-
g_cvarPrintCvar = CreateConVar("sm_scavenge_gamemode_printcvar", "1", "Print cvar changes", FCVAR_NOTIFY, true, 0.0, true, 1.0);
130+
g_cvarPrintCvar = CreateConVar("sm_scavenge_gamemode_printcvar", "0", "Print cvar changes", FCVAR_NOTIFY, true, 0.0, true, 1.0);
131131
g_cvarCFGName = CreateConVar("sm_scavenge_gamemode_forcename", "1", "Force the convar l4d_ready_cfg_name according to the game mode.", FCVAR_NOTIFY, true, 0.0, true, 1.0);
132132

133133
z_versus_hunter_limit = FindConVar("z_versus_hunter_limit");
@@ -136,6 +136,7 @@ public void OnPluginStart()
136136
z_versus_jockey_limit = FindConVar("z_versus_jockey_limit");
137137
z_versus_charger_limit = FindConVar("z_versus_charger_limit");
138138
z_versus_spitter_limit = FindConVar("z_versus_spitter_limit");
139+
survivor_limit = FindConVar("survivor_limit");
139140

140141
z_versus_hunter_limit.AddChangeHook(OnVersusLimitChange);
141142
z_versus_boomer_limit.AddChangeHook(OnVersusLimitChange);
@@ -155,7 +156,7 @@ public void OnVersusLimitChange(ConVar Convar, const char[] sOldValue, const cha
155156

156157
char sCvarName[32];
157158
Convar.GetName(sCvarName, sizeof(sCvarName));
158-
CPrintToChatAll("[ScavOgl] Server CVar '%s' changed from '%s' to '%s'", sCvarName, sOldValue, sNewValue);
159+
PrintDebug("[ScavOgl] Server CVar '%s' changed from '%s' to '%s'", sCvarName, sOldValue, sNewValue);
159160
}
160161

161162
public Action ModeRequest(int iClient, int iArgs)
@@ -172,44 +173,6 @@ public Action ModeRequest(int iClient, int iArgs)
172173
return Plugin_Handled;
173174
}
174175

175-
if (iArgs > 0)
176-
{
177-
if (!CheckCommandAccess(iClient, "sm_kick", ADMFLAG_KICK))
178-
{
179-
CReplyToCommand(iClient, "%t %t", "Tag", "NoAccess");
180-
return Plugin_Handled;
181-
}
182-
183-
char sGamemode[32];
184-
GetCmdArg(1, sGamemode, sizeof(sGamemode));
185-
CurrentConfigName();
186-
187-
GameMode
188-
gmArg,
189-
gmCurrent;
190-
191-
bool bArgGameMode = GetGamemode(sGamemode, gmArg);
192-
bool bCurrentGameMode = GetGamemode(g_sConfigName, gmCurrent);
193-
194-
if (!bCurrentGameMode)
195-
{
196-
CReplyToCommand(iClient, "%t %t", "Tag", "ModeNoSupported");
197-
return Plugin_Handled;
198-
}
199-
200-
char sCorrectMode[16];
201-
Format(sCorrectMode, sizeof(sCorrectMode), "%s", gmCurrent.ishunter ? sScavMode[gmCurrent.mode] : sHunterMode[gmCurrent.mode]);
202-
203-
if (!bArgGameMode || !StrEqual(sGamemode, sCorrectMode))
204-
{
205-
CReplyToCommand(iClient, "%t %t sm_scavmode %s", "Tag", "Usage", sCorrectMode);
206-
return Plugin_Handled;
207-
}
208-
209-
ChangeGameMode(gmArg.mode, gmArg.ishunter);
210-
return Plugin_Handled;
211-
}
212-
213176
ModeMenu(iClient);
214177
return Plugin_Handled;
215178
}
@@ -231,16 +194,18 @@ public Action InfectedLimit(int iArgs)
231194
char sGamemode[32];
232195
GetCmdArg(1, sGamemode, sizeof(sGamemode));
233196

234-
GameMode gmArg;
235-
bool bArgGameMode = GetGamemode(sGamemode, gmArg);
197+
GameMode
198+
gmTarget;
199+
200+
GetGamemode(gmTarget, sGamemode);
236201

237-
if (!bArgGameMode)
202+
if (gmTarget.mode == mode_none)
238203
{
239204
CReplyToCommand(CONSOLE, "%t %t z_scavogl_infected_limit <scav1v1|scav2v2|scav3v3|scavogl>", "Tag", "Usage");
240205
return Plugin_Handled;
241206
}
242207

243-
ChangeGameMode(gmArg.mode, gmArg.ishunter, false);
208+
ChangeGameMode(gmTarget.mode, gmTarget.ishunter, false);
244209
return Plugin_Handled;
245210
}
246211

@@ -305,27 +270,22 @@ void PrintDebug(const char[] sMessage, any...)
305270
*/
306271
void ModeMenu(int iClient)
307272
{
308-
CurrentConfigName();
309-
310-
GameMode gm;
311-
if (!GetGamemode(g_sConfigName, gm))
273+
GameMode
274+
gmCurrent,
275+
gmTarget;
276+
277+
CurrentGameMode(gmCurrent);
278+
GetTergetMode(gmCurrent, gmTarget);
279+
280+
if (gmCurrent.mode == mode_none)
312281
{
313282
CReplyToCommand(iClient, "%t %t", "Tag", "ModeNoSupported");
314283
return;
315284
}
316285

317-
if (gm.mode == mode_none)
318-
{
319-
CReplyToCommand(iClient, "%t %t", "Tag", "Error_InvalidMode");
320-
return;
321-
}
322-
323-
char sGamemode[32];
324-
Format(sGamemode, sizeof(sGamemode), "%s", gm.ishunter ? sScavMode[gm.mode] : sHunterMode[gm.mode]);
325-
326286
Menu hMenu = new Menu(MenuHandler, MENU_ACTIONS_ALL);
327287
hMenu.SetTitle("%t", "MenuTitle");
328-
hMenu.AddItem(sGamemode, sGamemode);
288+
hMenu.AddItem(gmTarget.name, gmTarget.name);
329289

330290
hMenu.Display(iClient, 20);
331291
}
@@ -341,7 +301,7 @@ public int MenuHandler(Menu menu, MenuAction action, int iParam, int iParam2)
341301
menu.GetItem(iParam2, sInfo, sizeof(sInfo));
342302
GameMode gm;
343303

344-
GetGamemode(sInfo, gm);
304+
GetGamemode(gm, sInfo);
345305

346306
if (gm.mode == mode_none)
347307
{
@@ -396,7 +356,7 @@ bool CreateVote(int iClient, GameMode gm)
396356
}
397357

398358
char sBuffer[64];
399-
Format(sBuffer, sizeof(sBuffer), "%t", "Question", gm.ishunter ? sHunterName[gm.mode] : sScavName[gm.mode]);
359+
Format(sBuffer, sizeof(sBuffer), "%t", "Question", gm.name);
400360
g_gmVote = gm;
401361

402362
g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End);
@@ -405,7 +365,7 @@ bool CreateVote(int iClient, GameMode gm)
405365
SetBuiltinVoteResultCallback(g_hVote, MatchVoteResultHandler);
406366
DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20);
407367

408-
PrintDebug("Vote created successfully for game mode %s by client %d", gm.ishunter ? sHunterName[gm.mode] : sScavName[gm.mode], iClient);
368+
PrintDebug("Vote created successfully for game mode %s by client %N", gm.name, iClient);
409369
return true;
410370
}
411371

@@ -441,7 +401,7 @@ public void MatchVoteResultHandler(Handle vote, int num_votes, int num_clients,
441401
{
442402
if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2))
443403
{
444-
PrintDebug("Vote passed, game mode changed to %s", g_gmVote.ishunter ? sHunterName[g_gmVote.mode] : sScavName[g_gmVote.mode]);
404+
PrintDebug("Vote passed, game mode changed to %s", g_gmVote.name);
445405
DisplayBuiltinVotePass2(vote, "VotePassed");
446406

447407
ChangeGameMode(g_gmVote.mode, g_gmVote.ishunter);
@@ -457,31 +417,34 @@ public void MatchVoteResultHandler(Handle vote, int num_votes, int num_clients,
457417
PrintDebug("Vote failed");
458418
}
459419

420+
460421
/**
461-
* Determines the game mode based on the provided gamemode string.
422+
* Retrieves the game mode based on the provided game mode string.
462423
*
463-
* @param sGamemode The gamemode string to check.
464-
* @param gm The GameMode struct to store the result.
465-
* @return True if the gamemode was found, false otherwise.
424+
* @param sGamemode The string representing the game mode to be retrieved.
425+
* @return A GameMode structure containing the game mode and whether it is a hunter mode.
466426
*/
467-
bool GetGamemode(const char[] sGamemode, GameMode gm)
427+
void GetGamemode(GameMode gm, const char[] sGamemode)
468428
{
469-
bool bFound = false;
470429
gm.mode = mode_none;
471430
for (Mode i = mode_none; i <= mode_4v4; i++)
472431
{
473-
bool
474-
bScav = StrEqual(sScavMode[i], sGamemode),
475-
bHunt = StrEqual(sHunterMode[i], sGamemode);
476432

477-
if (bScav || bHunt)
433+
if (StrEqual(sScavMode[i], sGamemode) || StrEqual(sScavName[i], sGamemode))
478434
{
479-
gm.ishunter = bHunt;
435+
gm.ishunter = false;
480436
gm.mode = i;
481-
bFound = true;
437+
strcopy(gm.name, sizeof(gm.name), sGamemode);
438+
break;
439+
}
440+
else if (StrEqual(sHunterMode[i], sGamemode) || StrEqual(sHunterName[i], sGamemode))
441+
{
442+
gm.ishunter = true;
443+
gm.mode = i;
444+
strcopy(gm.name, sizeof(gm.name), sGamemode);
445+
break;
482446
}
483447
}
484-
return bFound;
485448
}
486449

487450
/**
@@ -496,17 +459,17 @@ bool GetGamemode(const char[] sGamemode, GameMode gm)
496459
void ChangeCFGName(GameMode gm)
497460
{
498461
char
499-
sCurrentConfigName[32];
500-
501-
l4d_ready_cfg_name.GetString(sCurrentConfigName, sizeof(sCurrentConfigName));
462+
sConfigName[32];
463+
464+
l4d_ready_cfg_name.GetString(sConfigName, sizeof(sConfigName));
502465

503466
if (gm.ishunter)
504-
ReplaceString(sCurrentConfigName, sizeof(sCurrentConfigName), sScavName[gm.mode], sHunterName[gm.mode], false);
467+
ReplaceString(sConfigName, sizeof(sConfigName), sScavName[gm.mode], sHunterName[gm.mode], false);
505468
else
506-
ReplaceString(sCurrentConfigName, sizeof(sCurrentConfigName), sHunterName[gm.mode], sScavName[gm.mode], false);
469+
ReplaceString(sConfigName, sizeof(sConfigName), sHunterName[gm.mode], sScavName[gm.mode], false);
507470

508-
PrintDebug("New CFG Name: %s", sCurrentConfigName);
509-
l4d_ready_cfg_name.SetString(sCurrentConfigName);
471+
PrintDebug("New CFG Name: %s", sConfigName);
472+
l4d_ready_cfg_name.SetString(sConfigName);
510473
}
511474

512475
/**
@@ -537,7 +500,7 @@ void ChangeGameMode(Mode mode, bool bIshunter, bool bAnnounce = true)
537500
ChangeCFGName(gm);
538501

539502
if (bAnnounce)
540-
CPrintToChatAll("%t %t", "Tag", LANG_SERVER, "ChangeMode", gm.ishunter ? sHunterName[gm.mode] : sScavName[gm.mode]);
503+
CPrintToChatAll("%t %t", "Tag", "ChangeMode", gm.ishunter ? sHunterName[gm.mode] : sScavName[gm.mode]);
541504

542505
switch (gm.mode)
543506
{
@@ -635,18 +598,53 @@ void ChangeGameMode(Mode mode, bool bIshunter, bool bAnnounce = true)
635598
}
636599
}
637600

601+
638602
/**
639-
* Retrieves the current configuration name.
640-
* If the global variable `g_sConfigName` is empty, it calls `LGO_GetConfigName` to get the configuration name
641-
* and copies it to `g_sConfigName`.
603+
* Sets the current game mode based on the configuration name.
604+
*
605+
* @param gm The GameMode object to be updated.
606+
*
607+
* The function retrieves the configuration name and checks if it contains
608+
* specific substrings to determine the game mode and whether it is a hunter mode.
609+
* It updates the GameMode object with the appropriate values.
642610
*/
643-
void CurrentConfigName()
611+
void CurrentGameMode(GameMode gm)
644612
{
645-
if (StrEqual(g_sConfigName, ""))
646-
{
647-
char sConfigName[16];
648-
LGO_GetConfigName(sConfigName, sizeof(sConfigName));
613+
char
614+
sConfigName[32];
615+
616+
gm.mode = view_as<Mode>(survivor_limit.IntValue);
617+
618+
l4d_ready_cfg_name.GetString(sConfigName, sizeof(sConfigName));
649619

650-
strcopy(g_sConfigName, sizeof(g_sConfigName), sConfigName);
620+
if (StrContains(sConfigName, sScavName[gm.mode], false) != -1)
621+
{
622+
gm.ishunter = false;
623+
strcopy(gm.name, sizeof(gm.name), sScavName[gm.mode]);
624+
}
625+
else if (StrContains(sConfigName, sHunterName[gm.mode], false) != -1)
626+
{
627+
gm.ishunter = true;
628+
strcopy(gm.name, sizeof(gm.name), sHunterName[gm.mode]);
651629
}
630+
else
631+
{
632+
gm.ishunter = false;
633+
gm.mode = mode_none;
634+
strcopy(gm.name, sizeof(gm.name), sScavName[mode_none]);
635+
}
636+
}
637+
638+
/**
639+
* Copies the current game mode to the target game mode and toggles the hunter status.
640+
*
641+
* @param gmCurrent The current game mode.
642+
* @param gmTarget The target game mode to be modified.
643+
*/
644+
void GetTergetMode(GameMode gmCurrent, GameMode gmTarget)
645+
{
646+
gmTarget.mode = gmCurrent.mode;
647+
gmTarget.ishunter = !gmCurrent.ishunter;
648+
649+
strcopy(gmTarget.name, sizeof(gmTarget.name), gmTarget.ishunter ? sHunterName[gmTarget.mode] : sScavName[gmTarget.mode]);
652650
}

0 commit comments

Comments
 (0)