Refactored whole plugin to use enum structs

SourceMod 1.10 is now a requirement.
This commit is contained in:
shavit 2018-12-24 00:30:27 +02:00
parent 98d9b29c1d
commit 2ab6c57e1f
13 changed files with 1074 additions and 1010 deletions

2
.gitignore vendored
View File

@ -6,3 +6,5 @@
# editors
*.atom-build.json
.vscode/tasks.json
\.vscode/settings\.json

View File

@ -5,7 +5,7 @@ addons:
- lib32stdc++6 # needed for spcomp
env:
- SMVERSION=1.9
- SMVERSION=1.10
before_script:
# install smbuilder

View File

@ -17,7 +17,7 @@ Includes a records system, map zones (start/end marks etc), bonuses, HUD with us
# Requirements:
* Steam version of Counter-Strike: Source or Counter-Strike: Global Offensive.
* [SourceMod 1.9 or above](http://www.sourcemod.net/downloads.php)
* [SourceMod 1.10 or above](http://www.sourcemod.net/downloads.php?branch=dev)
* A MySQL database (preferably locally hosted) if your database is likely to grow big, or if you want to use the rankings plugin. MySQL server version of 5.5.5 or above (MariaDB equivalent works too) is highly recommended.
# Optional requirements, for the best experience:

View File

@ -23,7 +23,7 @@
#endif
#define _shavit_included
#define SHAVIT_VERSION "2.3.6"
#define SHAVIT_VERSION "2.4.0"
#define STYLE_LIMIT 256
#define MAX_ZONES 64
#define MAX_NAME_LENGTH_SQL 32
@ -44,26 +44,17 @@
#define HUD_NOSOUNDS (1 << 11) // disables sounds on personal best, world record etc
#define HUD_NOPRACALERT (1 << 12) // hides practice mode chat alert
// for reference, not used anymore
// game types
enum ServerGame
{
Game_CSS = 0,
Game_CSGO,
Game_Unknown
};
// status
enum TimerStatus
{
Timer_Stopped = 0,
Timer_Stopped,
Timer_Running,
Timer_Paused
};
enum ReplayStatus
{
Replay_Start = 0,
Replay_Start,
Replay_Running,
Replay_End,
Replay_Idle
@ -71,10 +62,34 @@ enum ReplayStatus
enum ReplayBotType
{
Replay_Central = 0,
Replay_Central,
Replay_Legacy
};
enum
{
Zone_Start,
Zone_End,
Zone_Respawn,
Zone_Stop,
Zone_Slay,
Zone_Freestyle,
Zone_NoVelLimit,
Zone_Teleport,
Zone_CustomSpawn,
Zone_Easybhop,
Zone_Slide,
ZONETYPES_SIZE
};
enum
{
Track_Main,
Track_Bonus,
TRACKS_SIZE
};
// for Shavit_GetStyleStrings
enum
{
sStyleName,
@ -83,46 +98,10 @@ enum
sChangeCommand,
sClanTag,
sSpecialString,
sStylePermission,
STYLESTRINGS_SIZE
};
enum
{
bAutobhop,
bEasybhop,
bPrespeed,
fVelocityLimit,
bEnableBunnyhopping,
fAiraccelerate,
fRunspeed,
fGravityMultiplier,
fSpeedMultiplier,
fTimescale,
fVelocity,
fBonusVelocity,
fMinVelocity,
bBlockW,
bBlockA,
bBlockS,
bBlockD,
bBlockUse,
iForceHSW,
iBlockPLeft,
iBlockPRight,
iBlockPStrafe,
bUnranked,
bNoReplay,
bSync,
bStrafeCountW,
bStrafeCountA,
bStrafeCountS,
bStrafeCountD,
fRankingMultiplier,
iSpecial,
STYLESETTINGS_SIZE
sStylePermission
};
// for Shavit_GetChatStrings
enum
{
sMessagePrefix,
@ -130,26 +109,80 @@ enum
sMessageWarning,
sMessageVariable,
sMessageVariable2,
sMessageStyle,
CHATSETTINGS_SIZE
sMessageStyle
};
enum
enum struct stylestrings_t
{
bTimerEnabled,
fCurrentTime,
bClientPaused,
iJumps,
bsStyle,
iStrafes,
iTotalMeasures,
iGoodGains,
fServerTime,
iSHSWCombination,
iTimerTrack,
iMeasuredJumps,
iPerfectJumps,
TIMERSNAPSHOT_SIZE
char sStyleName[64];
char sShortName[32];
char sHTMLColor[32];
char sChangeCommand[128];
char sClanTag[32];
char sSpecialString[128];
char sStylePermission[64];
};
enum struct stylesettings_t
{
bool bAutobhop;
bool bEasybhop;
bool bPrespeed;
float fVelocityLimit;
bool bEnableBunnyhopping;
float fAiraccelerate;
float fRunspeed;
float fGravityMultiplier;
float fSpeedMultiplier;
float fTimescale;
float fVelocity;
float fBonusVelocity;
float fMinVelocity;
bool bBlockW;
bool bBlockA;
bool bBlockS;
bool bBlockD;
bool bBlockUse;
int iForceHSW;
int iBlockPLeft;
int iBlockPRight;
int iBlockPStrafe;
bool bUnranked;
bool bNoReplay;
bool bSync;
bool bStrafeCountW;
bool bStrafeCountA;
bool bStrafeCountS;
bool bStrafeCountD;
float fRankingMultiplier;
int iSpecial;
};
enum struct chatstrings_t
{
char sPrefix[64];
char sText[16];
char sWarning[16];
char sVariable[16];
char sVariable2[16];
char sStyle[16];
};
enum struct timer_snapshot_t
{
bool bTimerEnabled;
float fCurrentTime;
bool bClientPaused;
int iJumps;
int bsStyle;
int iStrafes;
int iTotalMeasures;
int iGoodGains;
float fServerTime;
int iSHSWCombination;
int iTimerTrack;
int iMeasuredJumps;
int iPerfectJumps;
};
#if defined USES_CHAT_COLORS
@ -203,39 +236,6 @@ char gS_CSGOColors[][] =
};
#endif
enum(+=1)
{
Zone_Start = 0,
Zone_End,
Zone_Respawn,
Zone_Stop,
Zone_Slay,
Zone_Freestyle,
Zone_NoVelLimit,
Zone_Teleport,
Zone_CustomSpawn,
Zone_Easybhop,
Zone_Slide,
ZONETYPES_SIZE
};
enum
{
bZoneInitialized,
iZoneType,
iZoneTrack, // 0 - main, 1 - bonus
iEntityID,
iDatabaseID,
ZONECACHE_SIZE
};
enum
{
Track_Main,
Track_Bonus,
TRACKS_SIZE
};
stock bool IsValidClient(int client, bool bAlive = false)
{
return (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && !IsClientSourceTV(client) && (!bAlive || IsPlayerAlive(client)));
@ -301,11 +301,11 @@ stock void FormatSeconds(float time, char[] newtime, int newtimesize, bool preci
* @param status The player's timer status.
* @param track The player's timer track.
* @param style The player's bhop style.
* @param stylesettings An array that contains the player's bhop style's settings.
* @param stylesettings A stylesettings_t struct that contains the player's bhop style's settings.
* @param mouse Mouse direction (x, y).
* @return Plugin_Continue to let shavit-core keep doing what it does, Plugin_Changed to pass different values.
*/
forward Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, any stylesettings[STYLESETTINGS_SIZE], int mouse[2]);
forward Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, stylesettings_t stylesettings, int mouse[2]);
/**
* Called just before shavit-core adds time to a player's timer.
@ -315,10 +315,10 @@ forward Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float
* @param client Client index.
* @param snapshot A snapshot with the player's current timer. You cannot manipulate it here.
* @param time The time to be added to the player's timer.
* @param stylesettings An array that contains the player's bhop style's settings.
* @param stylesettings A stylesettings_t struct that contains the player's bhop style's settings.
* @noreturn
*/
forward void Shavit_OnTimeIncrement(int client, any snapshot[TIMERSNAPSHOT_SIZE], float &time, any stylesettings[STYLESETTINGS_SIZE]);
forward void Shavit_OnTimeIncrement(int client, any snapshot[sizeof(timer_snapshot_t)], float &time, stylesettings_t stylesettings);
/**
* Called just before shavit-core adds time to a player's timer.
@ -328,10 +328,10 @@ forward void Shavit_OnTimeIncrement(int client, any snapshot[TIMERSNAPSHOT_SIZE]
* @param client Client index.
* @param snapshot A snapshot with the player's current timer. Read above in shavit.inc for more information.
* @param time The time to be added to the player's timer.
* @param stylesettings An array that contains the player's bhop style's settings.
* @param stylesettings A stylesettings_t struct that contains the player's bhop style's settings.
* @noreturn
*/
forward void Shavit_OnTimeIncrementPost(int client, float time, any stylesettings[STYLESETTINGS_SIZE]);
forward void Shavit_OnTimeIncrementPost(int client, float time, stylesettings_t stylesettings);
/**
* Called when a player's timer starts.
@ -377,7 +377,7 @@ forward void Shavit_OnStop(int client, int track);
* @param snapshot A snapshot of the player's timer.
* @return Plugin_Continue to do nothing, Plugin_Changed to change the variables or anything else to stop the timer from finishing.
*/
forward Action Shavit_OnFinishPre(int client, any snapshot[TIMERSNAPSHOT_SIZE]);
forward Action Shavit_OnFinishPre(int client, any snapshot[sizeof(timer_snapshot_t)]);
/**
* Called when a player finishes a map. (touches the end zone)
@ -568,7 +568,7 @@ forward void Shavit_OnReplayEnd(int client);
* @return Game type. (See "enum ServerGame")
*/
#pragma deprecated Use GetEngineVersion() instead.
native ServerGame Shavit_GetGameType();
native EngineVersion Shavit_GetGameType();
/**
* Returns the database handle the timer is using.
@ -1022,7 +1022,7 @@ native int Shavit_GetWRCount(int client);
* @param StyleSettings Reference to the settings array.
* @return SP_ERROR_NONE on success, anything else on failure.
*/
native int Shavit_GetStyleSettings(int style, any StyleSettings[STYLESETTINGS_SIZE]);
native int Shavit_GetStyleSettings(int style, any StyleSettings[sizeof(stylesettings_t)]);
/**
* Saves the style related strings on string references.
@ -1083,13 +1083,13 @@ native bool Shavit_IsPracticeMode(int client);
/**
* Save a client's timer into a snapshot.
* See the enumeration that ends with TIMERSNAPSHOT_SIZE.
* See the timer_snapshot_t enum struct.
*
* @param client Client index.
* @param snapshot Full snapshot of the client's timer.
* @noreturn
*/
native void Shavit_SaveSnapshot(int client, any snapshot[TIMERSNAPSHOT_SIZE]);
native void Shavit_SaveSnapshot(int client, any snapshot[sizeof(timer_snapshot_t)]);
/**
* Restores the client's timer from a snapshot.
@ -1098,7 +1098,7 @@ native void Shavit_SaveSnapshot(int client, any snapshot[TIMERSNAPSHOT_SIZE]);
* @param snapshot Full snapshot of the client's timer.
* @noreturn
*/
native void Shavit_LoadSnapshot(int client, any snapshot[TIMERSNAPSHOT_SIZE]);
native void Shavit_LoadSnapshot(int client, any snapshot[sizeof(timer_snapshot_t)]);
/**
* Sets a player's replay recording frames from a provided ArrayList.

View File

@ -39,18 +39,17 @@
#define MAXLENGTH_CMESSAGE 16
#define MAXLENGTH_BUFFER 255
enum ChatRanksCache
enum struct chatranks_cache_t
{
iCRRangeType, // 0 - flat, 1 - percent, 2 - point range
Float:fCRFrom,
Float:fCRTo,
bool:bCRFree,
bool:bCREasterEgg,
String:sCRAdminFlag[32],
String:sCRName[MAXLENGTH_NAME],
String:sCRMessage[MAXLENGTH_MESSAGE],
String:sCRDisplay[MAXLENGTH_DISPLAY],
CRCACHE_SIZE
int iRangeType; // 0 - flat, 1 - percent, 2 - point range
float fFrom;
float fTo;
bool bFree;
bool bEasterEgg;
char sAdminFlag[32];
char sName[MAXLENGTH_NAME];
char sMessage[MAXLENGTH_MESSAGE];
char sDisplay[MAXLENGTH_DISPLAY];
}
enum
@ -159,7 +158,7 @@ public void OnPluginStart()
HookUserMessage(GetUserMessageId("SayText2"), Hook_SayText2, true);
gH_ChatCookie = RegClientCookie("shavit_chat_selection", "Chat settings", CookieAccess_Protected);
gA_ChatRanks = new ArrayList(view_as<int>(CRCACHE_SIZE));
gA_ChatRanks = new ArrayList(sizeof(chatranks_cache_t));
for(int i = 1; i <= MaxClients; i++)
{
@ -206,18 +205,18 @@ bool LoadChatConfig()
do
{
any[] aChatTitle = new any[CRCACHE_SIZE];
chatranks_cache_t chat_title;
char sRanks[32];
kv.GetString("ranks", sRanks, MAXLENGTH_NAME, "0");
if(sRanks[0] == 'p')
{
aChatTitle[iCRRangeType] = Rank_Points;
chat_title.iRangeType = Rank_Points;
}
else
{
aChatTitle[iCRRangeType] = (StrContains(sRanks, "%") == -1)? Rank_Flat:Rank_Percentage;
chat_title.iRangeType = (StrContains(sRanks, "%") == -1)? Rank_Flat:Rank_Percentage;
}
ReplaceString(sRanks, 32, "p", "");
@ -227,29 +226,29 @@ bool LoadChatConfig()
{
char sExplodedString[2][16];
ExplodeString(sRanks, "-", sExplodedString, 2, 64);
aChatTitle[fCRFrom] = StringToFloat(sExplodedString[0]);
aChatTitle[fCRTo] = StringToFloat(sExplodedString[1]);
chat_title.fFrom = StringToFloat(sExplodedString[0]);
chat_title.fTo = StringToFloat(sExplodedString[1]);
}
else
{
float fRank = StringToFloat(sRanks);
aChatTitle[fCRFrom] = fRank;
aChatTitle[fCRTo] = (aChatTitle[iCRRangeType] == Rank_Flat)? fRank:MAGIC_NUMBER;
chat_title.fFrom = fRank;
chat_title.fTo = (chat_title.iRangeType == Rank_Flat)? fRank:MAGIC_NUMBER;
}
aChatTitle[bCRFree] = view_as<bool>(kv.GetNum("free", false));
aChatTitle[bCREasterEgg] = view_as<bool>(kv.GetNum("easteregg", false));
chat_title.bFree = view_as<bool>(kv.GetNum("free", false));
chat_title.bEasterEgg = view_as<bool>(kv.GetNum("easteregg", false));
kv.GetString("name", aChatTitle[sCRName], MAXLENGTH_NAME, "{name}");
kv.GetString("message", aChatTitle[sCRMessage], MAXLENGTH_MESSAGE, "");
kv.GetString("display", aChatTitle[sCRDisplay], MAXLENGTH_DISPLAY, "");
kv.GetString("flag", aChatTitle[sCRAdminFlag], 32, "");
kv.GetString("name", chat_title.sName, MAXLENGTH_NAME, "{name}");
kv.GetString("message", chat_title.sMessage, MAXLENGTH_MESSAGE, "");
kv.GetString("display", chat_title.sDisplay, MAXLENGTH_DISPLAY, "");
kv.GetString("flag", chat_title.sAdminFlag, 32, "");
if(strlen(aChatTitle[sCRDisplay]) > 0)
if(strlen(chat_title.sDisplay) > 0)
{
gA_ChatRanks.PushArray(aChatTitle);
gA_ChatRanks.PushArray(chat_title);
}
}
@ -813,11 +812,11 @@ Action ShowChatRanksMenu(int client, int item)
continue;
}
any[] aCache = new any[CRCACHE_SIZE];
gA_ChatRanks.GetArray(i, aCache, view_as<int>(CRCACHE_SIZE));
chatranks_cache_t cache;
gA_ChatRanks.GetArray(i, cache, sizeof(chatranks_cache_t));
char sMenuDisplay[MAXLENGTH_DISPLAY];
strcopy(sMenuDisplay, MAXLENGTH_DISPLAY, aCache[sCRDisplay]);
strcopy(sMenuDisplay, MAXLENGTH_DISPLAY, cache.sDisplay);
ReplaceString(sMenuDisplay, MAXLENGTH_DISPLAY, "<n>", "\n");
StrCat(sMenuDisplay, MAXLENGTH_DISPLAY, "\n "); // to add spacing between each entry
@ -874,11 +873,11 @@ Action ShowRanksMenu(int client, int item)
for(int i = 0; i < iLength; i++)
{
any[] aCache = new any[CRCACHE_SIZE];
gA_ChatRanks.GetArray(i, aCache, view_as<int>(CRCACHE_SIZE));
chatranks_cache_t cache;
gA_ChatRanks.GetArray(i, cache, sizeof(chatranks_cache_t));
char sFlag[32];
strcopy(sFlag, 32, aCache[sCRAdminFlag]);
strcopy(sFlag, 32, cache.sAdminFlag);
bool bFlagAccess = false;
int iSize = strlen(sFlag);
@ -903,13 +902,13 @@ Action ShowRanksMenu(int client, int item)
bFlagAccess = CheckCommandAccess(client, sFlag, 0, true);
}
if(aCache[bCREasterEgg] || !bFlagAccess)
if(cache.bEasterEgg || !bFlagAccess)
{
continue;
}
char sDisplay[MAXLENGTH_DISPLAY];
strcopy(sDisplay, MAXLENGTH_DISPLAY, aCache[sCRDisplay]);
strcopy(sDisplay, MAXLENGTH_DISPLAY, cache.sDisplay);
ReplaceString(sDisplay, MAXLENGTH_DISPLAY, "<n>", "\n");
char sExplodedString[2][32];
@ -919,9 +918,9 @@ Action ShowRanksMenu(int client, int item)
char sRequirements[64];
if(!aCache[bCRFree])
if(!cache.bFree)
{
if(aCache[fCRFrom] == 0.0 && (aCache[fCRFrom] == aCache[fCRTo] || aCache[fCRTo] == MAGIC_NUMBER))
if(cache.fFrom == 0.0 && (cache.fFrom == cache.fTo || cache.fTo == MAGIC_NUMBER))
{
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Unranked", client);
}
@ -929,44 +928,44 @@ Action ShowRanksMenu(int client, int item)
else
{
// this is really ugly
bool bRanged = (aCache[fCRFrom] != aCache[fCRTo] && aCache[fCRTo] != MAGIC_NUMBER);
bool bRanged = (cache.fFrom != cache.fTo && cache.fTo != MAGIC_NUMBER);
if(aCache[iCRRangeType] == Rank_Flat)
if(cache.iRangeType == Rank_Flat)
{
if(bRanged)
{
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Flat_Ranged", client, RoundToZero(aCache[fCRFrom]), RoundToZero(aCache[fCRTo]));
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Flat_Ranged", client, RoundToZero(cache.fFrom), RoundToZero(cache.fTo));
}
else
{
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Flat", client, RoundToZero(aCache[fCRFrom]));
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Flat", client, RoundToZero(cache.fFrom));
}
}
else if(aCache[iCRRangeType] == Rank_Percentage)
else if(cache.iRangeType == Rank_Percentage)
{
if(bRanged)
{
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Percentage_Ranged", client, aCache[fCRFrom], '%', aCache[fCRTo], '%');
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Percentage_Ranged", client, cache.fFrom, '%', cache.fTo, '%');
}
else
{
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Percentage", client, aCache[fCRFrom], '%');
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Percentage", client, cache.fFrom, '%');
}
}
else if(aCache[iCRRangeType] == Rank_Points)
else if(cache.iRangeType == Rank_Points)
{
if(bRanged)
{
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Points_Ranged", client, RoundToZero(aCache[fCRFrom]), RoundToZero(aCache[fCRTo]));
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Points_Ranged", client, RoundToZero(cache.fFrom), RoundToZero(cache.fTo));
}
else
{
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Points", client, RoundToZero(aCache[fCRFrom]));
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Points", client, RoundToZero(cache.fFrom));
}
}
}
@ -1025,14 +1024,14 @@ void PreviewChat(int client, int rank)
ReplaceString(sOriginalName, MAXLENGTH_NAME, gS_ControlCharacters[i], "");
}
any[] aCache = new any[CRCACHE_SIZE];
gA_ChatRanks.GetArray(rank, aCache, view_as<int>(CRCACHE_SIZE));
chatranks_cache_t cache;
gA_ChatRanks.GetArray(rank, cache, sizeof(chatranks_cache_t));
char sName[MAXLENGTH_NAME];
strcopy(sName, MAXLENGTH_NAME, aCache[sCRName]);
strcopy(sName, MAXLENGTH_NAME, cache.sName);
char sCMessage[MAXLENGTH_CMESSAGE];
strcopy(sCMessage, MAXLENGTH_CMESSAGE, aCache[sCRMessage]);
strcopy(sCMessage, MAXLENGTH_CMESSAGE, cache.sMessage);
FormatChat(client, sName, MAXLENGTH_NAME);
@ -1100,11 +1099,11 @@ bool HasRankAccess(int client, int rank)
return false;
}
any[] aCache = new any[CRCACHE_SIZE];
gA_ChatRanks.GetArray(rank, aCache, view_as<int>(CRCACHE_SIZE));
chatranks_cache_t cache;
gA_ChatRanks.GetArray(rank, cache, sizeof(chatranks_cache_t));
char sFlag[32];
strcopy(sFlag, 32, aCache[sCRAdminFlag]);
strcopy(sFlag, 32, cache.sAdminFlag);
bool bFlagAccess = false;
int iSize = strlen(sFlag);
@ -1134,7 +1133,7 @@ bool HasRankAccess(int client, int rank)
return false;
}
if(aCache[bCRFree])
if(cache.bFree)
{
return true;
}
@ -1144,11 +1143,11 @@ bool HasRankAccess(int client, int rank)
return false;
}
float fRank = (aCache[iCRRangeType] != Rank_Points)? float(Shavit_GetRank(client)):Shavit_GetPoints(client);
float fRank = (cache.iRangeType != Rank_Points)? float(Shavit_GetRank(client)):Shavit_GetPoints(client);
if(aCache[iCRRangeType] == Rank_Flat || aCache[iCRRangeType] == Rank_Points)
if(cache.iRangeType == Rank_Flat || cache.iRangeType == Rank_Points)
{
if(aCache[fCRFrom] <= fRank <= aCache[fCRTo])
if(cache.fFrom <= fRank <= cache.fTo)
{
return true;
}
@ -1166,7 +1165,7 @@ bool HasRankAccess(int client, int rank)
float fPercentile = (fRank / iRanked) * 100.0;
if(aCache[fCRFrom] <= fPercentile <= aCache[fCRTo])
if(cache.fFrom <= fPercentile <= cache.fTo)
{
return true;
}
@ -1202,11 +1201,11 @@ void GetPlayerChatSettings(int client, char[] name, char[] message)
if(0 <= iRank <= (iLength - 1))
{
any[] aCache = new any[CRCACHE_SIZE];
gA_ChatRanks.GetArray(iRank, aCache, view_as<int>(CRCACHE_SIZE));
chatranks_cache_t cache;
gA_ChatRanks.GetArray(iRank, cache, sizeof(chatranks_cache_t));
strcopy(name, MAXLENGTH_NAME, aCache[sCRName]);
strcopy(message, MAXLENGTH_NAME, aCache[sCRMessage]);
strcopy(name, MAXLENGTH_NAME, cache.sName);
strcopy(message, MAXLENGTH_NAME, cache.sMessage);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -72,8 +72,8 @@ int gI_TicksPerUpdate = 5;
int gI_SpectatorList = 1;
// timer settings
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
public Plugin myinfo =
{
@ -250,12 +250,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
for(int i = 0; i < styles; i++)
{
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
Shavit_GetStyleStrings(i, sHTMLColor, gS_StyleStrings[i][sHTMLColor], 128);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
Shavit_GetStyleStrings(i, sHTMLColor, gS_StyleStrings[i].sHTMLColor, sizeof(stylestrings_t::sHTMLColor));
}
}
public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, any stylesettings[STYLESETTINGS_SIZE])
public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, stylesettings_t stylsettings)
{
gI_Buttons[client] = buttons;
@ -765,19 +765,19 @@ void UpdateHUD(int client)
if(status >= Timer_Running)
{
Format(sHintText, 512, "%s\n%T: %d%s\t%T: <font color='#%s'>%s</font>", sHintText, "HudJumpsText", client, jumps, (jumps < 1000)? "\t":"", "HudStyleText", client, gS_StyleStrings[style][sHTMLColor], gS_StyleStrings[style][sStyleName]);
Format(sHintText, 512, "%s\n%T: %d%s\t%T: <font color='#%s'>%s</font>", sHintText, "HudJumpsText", client, jumps, (jumps < 1000)? "\t":"", "HudStyleText", client, gS_StyleStrings[style].sHTMLColor, gS_StyleStrings[style].sStyleName);
}
else
{
Format(sHintText, 512, "%s\n%T: <font color='#%s'>%s</font>", sHintText, "HudStyleText", client, gS_StyleStrings[style][sHTMLColor], gS_StyleStrings[style][sStyleName]);
Format(sHintText, 512, "%s\n%T: <font color='#%s'>%s</font>", sHintText, "HudStyleText", client, gS_StyleStrings[style].sHTMLColor, gS_StyleStrings[style].sStyleName);
}
Format(sHintText, 512, "%s\n%T: %d", sHintText, "HudSpeedText", client, iSpeed);
if(status >= Timer_Running)
{
if(gA_StyleSettings[style][bSync])
if(gA_StyleSettings[style].bSync)
{
Format(sHintText, 512, "%s%s\t%T: %d (%.01f%%)", sHintText, (iSpeed < 1000)? "\t":"", "HudStrafeText", client, strafes, Shavit_GetSync(target));
}
@ -794,14 +794,17 @@ void UpdateHUD(int client)
if(status != Timer_Stopped)
{
char sFirstLine[64];
strcopy(sFirstLine, 64, gS_StyleStrings[style][sStyleName]);
strcopy(sFirstLine, 64, gS_StyleStrings[style].sStyleName);
if(Shavit_IsPracticeMode(target))
{
Format(sFirstLine, 64, "%s %T", sFirstLine, "HudPracticeMode", client);
}
FormatEx(sHintText, 512, "%s\n%T: %s (%d)\n%T: %d\n%T: %d\n%T: %d%s", sFirstLine, "HudTimeText", client, sTime, rank, "HudJumpsText", client, jumps, "HudStrafeText", client, strafes, "HudSpeedText", client, iSpeed, (gA_StyleSettings[style][fVelocityLimit] > 0.0 && Shavit_InsideZone(target, Zone_NoVelLimit, -1))? "\nNo Speed Limit":"");
FormatEx(sHintText, 512, "%s\n%T: %s (%d)\n%T: %d\n%T: %d\n%T: %d%s",
sFirstLine, "HudTimeText", client, sTime, rank, "HudJumpsText", client, jumps,
"HudStrafeText", client, strafes, "HudSpeedText", client, iSpeed,
(gA_StyleSettings[style].fVelocityLimit > 0.0 && Shavit_InsideZone(target, Zone_NoVelLimit, -1))? "\nNo Speed Limit":"");
if(Shavit_GetTimerStatus(target) == Timer_Paused)
{
@ -836,10 +839,10 @@ void UpdateHUD(int client)
return;
}
iSpeed = RoundToNearest(float(iSpeed) / view_as<float>(gA_StyleSettings[style][fSpeedMultiplier]));
iSpeed = RoundToNearest(float(iSpeed) / gA_StyleSettings[style].fSpeedMultiplier);
track = Shavit_GetReplayBotTrack(target);
float fReplayTime = Shavit_GetReplayTime(style, track) * view_as<float>(gA_StyleSettings[style][fTimescale]);
float fReplayTime = (Shavit_GetReplayTime(style, track) * gA_StyleSettings[style].fTimescale);
float fReplayLength = Shavit_GetReplayLength(style, track);
if(fReplayTime < 0.0 || fReplayTime > fReplayLength || !Shavit_IsReplayDataLoaded(style, track))
@ -864,7 +867,7 @@ void UpdateHUD(int client)
if(gEV_Type == Engine_CSGO)
{
FormatEx(sHintText, 512, "<font face=''>");
Format(sHintText, 512, "%s\t<u><font color='#%s'>%s %T</font></u>", sHintText, gS_StyleStrings[style][sHTMLColor], gS_StyleStrings[style][sStyleName], "ReplayText", client);
Format(sHintText, 512, "%s\t<u><font color='#%s'>%s %T</font></u>", sHintText, gS_StyleStrings[style].sHTMLColor, gS_StyleStrings[style].sStyleName, "ReplayText", client);
Format(sHintText, 512, "%s\n\t%T: <font color='#00FF00'>%s</font> / %s", sHintText, "HudTimeText", client, sReplayTime, sReplayLength);
Format(sHintText, 512, "%s\n\t%T: %d", sHintText, "HudSpeedText", client, iSpeed);
}
@ -874,7 +877,7 @@ void UpdateHUD(int client)
char sPlayerName[MAX_NAME_LENGTH];
Shavit_GetReplayName(style, track, sPlayerName, MAX_NAME_LENGTH);
FormatEx(sHintText, 512, "%s %s%T", gS_StyleStrings[style][sStyleName], sTrack, "ReplayText", client);
FormatEx(sHintText, 512, "%s %s%T", gS_StyleStrings[style].sStyleName, sTrack, "ReplayText", client);
Format(sHintText, 512, "%s\n%s", sHintText, sPlayerName);
Format(sHintText, 512, "%s\n%T: %s/%s", sHintText, "HudTimeText", client, sReplayTime, sReplayLength);
Format(sHintText, 512, "%s\n%T: %d", sHintText, "HudSpeedText", client, iSpeed);
@ -912,7 +915,7 @@ void UpdateKeyOverlay(int client, Panel panel, bool &draw)
style = 0;
}
if(gB_BhopStats && !gA_StyleSettings[style][bAutobhop])
if(gB_BhopStats && !gA_StyleSettings[style].bAutobhop)
{
FormatEx(sPanelLine, 64, " %d%s%d\n", gI_ScrollCount[target], (gI_ScrollCount[target] > 9)? " ":" ", gI_LastScrollCount[target]);
}
@ -966,7 +969,7 @@ void UpdateCenterKeys(int client)
style = 0;
}
if(gB_BhopStats && !gA_StyleSettings[style][bAutobhop])
if(gB_BhopStats && !gA_StyleSettings[style].bAutobhop)
{
Format(sCenterText, 64, "%s\n  %d %d", sCenterText, gI_ScrollCount[target], gI_LastScrollCount[target]);
}
@ -1117,11 +1120,11 @@ void UpdateKeyHint(int client)
{
int style = Shavit_GetBhopStyle(target);
if((gI_HUDSettings[client] & HUD_SYNC) > 0 && Shavit_GetTimerStatus(target) == Timer_Running && gA_StyleSettings[style][bSync] && !IsFakeClient(target) && (!gB_Zones || !Shavit_InsideZone(target, Zone_Start, -1)))
if((gI_HUDSettings[client] & HUD_SYNC) > 0 && Shavit_GetTimerStatus(target) == Timer_Running && gA_StyleSettings[style].bSync && !IsFakeClient(target) && (!gB_Zones || !Shavit_InsideZone(target, Zone_Start, -1)))
{
Format(sMessage, 256, "%s%s%T: %.01f", sMessage, (strlen(sMessage) > 0)? "\n\n":"", "HudSync", client, Shavit_GetSync(target));
if(!gA_StyleSettings[style][bAutobhop])
if(!gA_StyleSettings[style].bAutobhop)
{
Format(sMessage, 256, "%s\n%T: %.1f", sMessage, "HudPerfs", client, Shavit_GetPerfectJumps(target));
}

View File

@ -33,32 +33,6 @@
#undef REQUIRE_PLUGIN
#include <shavit>
// this one is here because enum structs don't work with new syntax
enum CheckpointsCache
{
Float:fCPPosition[3],
Float:fCPAngles[3],
Float:fCPVelocity[3],
MoveType:mtCPMoveType,
Float:fCPGravity,
Float:fCPSpeed,
Float:fCPStamina,
bool:bCPDucked,
bool:bCPDucking,
Float:fCPDucktime, // m_flDuckAmount in csgo
Float:fCPDuckSpeed, // m_flDuckSpeed in csgo, doesn't exist in css
iCPFlags,
any:aCPSnapshot[TIMERSNAPSHOT_SIZE],
iCPTargetname,
iCPClassname,
ArrayList:aCPFrames,
bool:bCPSegmented,
iCPSerial,
bool:bCPPractice,
iCPGroundEntity,
PCPCACHE_SIZE
}
#pragma newdecls required
#pragma semicolon 1
#pragma dynamic 524288
@ -68,6 +42,36 @@ enum CheckpointsCache
#define CP_DEFAULT (CP_ANGLES|CP_VELOCITY)
enum struct cp_cache_t
{
float fPosition[3];
float fAngles[3];
float fVelocity[3];
MoveType iMoveType;
float fGravity;
float fSpeed;
float fStamina;
bool bDucked;
bool bDucking;
float fDucktime; // m_flDuckAmount in csgo
float fDuckSpeed; // m_flDuckSpeed in csgo; doesn't exist in css
int iFlags;
timer_snapshot_t aSnapshot;
int iTargetname;
int iClassname;
ArrayList aFrames;
bool bSegmented;
int iSerial;
bool bPractice;
int iGroundEntity;
}
enum struct player_cpcache_t
{
int iCheckpoints;
int iCurrentCheckpoint;
};
// game specific
EngineVersion gEV_Type = Engine_Unknown;
int gI_Ammo = -1;
@ -91,14 +95,7 @@ int gI_AdvertisementsCycle = 0;
char gS_CurrentMap[192];
int gI_Style[MAXPLAYERS+1];
enum
{
iCheckpoints,
iCurrentCheckpoint,
CPCACHE_SIZE
};
int gI_CheckpointsCache[MAXPLAYERS+1][CPCACHE_SIZE];
player_cpcache_t gA_CheckpointsCache[MAXPLAYERS+1];
int gI_CheckpointsSettings[MAXPLAYERS+1];
StringMap gSM_Checkpoints = null;
ArrayList gA_Targetnames = null;
@ -106,7 +103,7 @@ ArrayList gA_Classnames = null;
// save states
float gF_SaveStateData[MAXPLAYERS+1][3][3];
any gA_SaveStates[MAXPLAYERS+1][TIMERSNAPSHOT_SIZE];
timer_snapshot_t gA_SaveStates[MAXPLAYERS+1];
bool gB_SaveStates[MAXPLAYERS+1];
char gS_SaveStateTargetname[MAXPLAYERS+1][32];
ArrayList gA_SaveFrames[MAXPLAYERS+1];
@ -191,11 +188,11 @@ bool gB_Replay = false;
bool gB_Zones = false;
// timer settings
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
// chat settings
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
chatstrings_t gS_ChatStrings;
public Plugin myinfo =
{
@ -468,18 +465,20 @@ public void Shavit_OnStyleConfigLoaded(int styles)
for(int i = 0; i < styles; i++)
{
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i][sClanTag], 128);
Shavit_GetStyleStrings(i, sSpecialString, gS_StyleStrings[i][sSpecialString], 128);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i].sClanTag, sizeof(stylestrings_t::sClanTag));
Shavit_GetStyleStrings(i, sSpecialString, gS_StyleStrings[i].sSpecialString, sizeof(stylestrings_t::sSpecialString));
}
}
public void Shavit_OnChatConfigLoaded()
{
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
{
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
}
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
Shavit_GetChatStrings(sMessageWarning, gS_ChatStrings.sWarning, sizeof(chatstrings_t::sWarning));
Shavit_GetChatStrings(sMessageVariable, gS_ChatStrings.sVariable, sizeof(chatstrings_t::sVariable));
Shavit_GetChatStrings(sMessageVariable2, gS_ChatStrings.sVariable2, sizeof(chatstrings_t::sVariable2));
Shavit_GetChatStrings(sMessageStyle, gS_ChatStrings.sStyle, sizeof(chatstrings_t::sStyle));
if(!LoadAdvertisementsConfig())
{
@ -491,10 +490,10 @@ public void Shavit_OnStyleChanged(int client, int oldstyle, int newstyle, int tr
{
gI_Style[client] = newstyle;
if(StrContains(gS_StyleStrings[newstyle][sSpecialString], "segments") != -1)
if(StrContains(gS_StyleStrings[newstyle].sSpecialString, "segments") != -1)
{
OpenCheckpointsMenu(client, 0);
Shavit_PrintToChat(client, "%T", "MiscSegmentedCommand", client, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "MiscSegmentedCommand", client, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
}
}
@ -641,11 +640,11 @@ bool LoadAdvertisementsConfig()
char sTempMessage[300];
kv.GetString(NULL_STRING, sTempMessage, 300, "<EMPTY ADVERTISEMENT>");
ReplaceString(sTempMessage, 300, "{text}", gS_ChatStrings[sMessageText]);
ReplaceString(sTempMessage, 300, "{warning}", gS_ChatStrings[sMessageWarning]);
ReplaceString(sTempMessage, 300, "{variable}", gS_ChatStrings[sMessageVariable]);
ReplaceString(sTempMessage, 300, "{variable2}", gS_ChatStrings[sMessageVariable2]);
ReplaceString(sTempMessage, 300, "{style}", gS_ChatStrings[sMessageStyle]);
ReplaceString(sTempMessage, 300, "{text}", gS_ChatStrings.sText);
ReplaceString(sTempMessage, 300, "{warning}", gS_ChatStrings.sWarning);
ReplaceString(sTempMessage, 300, "{variable}", gS_ChatStrings.sVariable);
ReplaceString(sTempMessage, 300, "{variable2}", gS_ChatStrings.sVariable2);
ReplaceString(sTempMessage, 300, "{style}", gS_ChatStrings.sStyle);
gA_Advertisements.PushString(sTempMessage);
}
@ -805,7 +804,7 @@ public MRESReturn CCSPlayer__GetPlayerMaxSpeed(int pThis, Handle hReturn)
return MRES_Ignored;
}
DHookSetReturn(hReturn, view_as<float>(gA_StyleSettings[gI_Style[pThis]][fRunspeed]));
DHookSetReturn(hReturn, view_as<float>(gA_StyleSettings[gI_Style[pThis]].fRunspeed));
return MRES_Override;
}
@ -966,8 +965,8 @@ void UpdateClanTag(int client)
char sCustomTag[32];
strcopy(sCustomTag, 32, gS_ClanTag);
ReplaceString(sCustomTag, 32, "{style}", gS_StyleStrings[gI_Style[client]][sStyleName]);
ReplaceString(sCustomTag, 32, "{styletag}", gS_StyleStrings[gI_Style[client]][sClanTag]);
ReplaceString(sCustomTag, 32, "{style}", gS_StyleStrings[gI_Style[client]].sStyleName);
ReplaceString(sCustomTag, 32, "{styletag}", gS_StyleStrings[gI_Style[client]].sClanTag);
ReplaceString(sCustomTag, 32, "{time}", sTime);
ReplaceString(sCustomTag, 32, "{tr}", sTrack);
@ -984,7 +983,7 @@ void RemoveRagdoll(int client)
}
}
public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, any stylesettings[STYLESETTINGS_SIZE])
public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, stylesettings_t stylesettings)
{
bool bNoclip = (GetEntityMoveType(client) == MOVETYPE_NOCLIP);
@ -997,12 +996,12 @@ public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float
int iGroundEntity = GetEntPropEnt(client, Prop_Send, "m_hGroundEntity");
// prespeed
if(!bNoclip && !gA_StyleSettings[gI_Style[client]][bPrespeed] && Shavit_InsideZone(client, Zone_Start, track))
if(!bNoclip && !gA_StyleSettings[gI_Style[client]].bPrespeed && Shavit_InsideZone(client, Zone_Start, track))
{
if((gI_PreSpeed == 2 || gI_PreSpeed == 3) && gI_GroundEntity[client] == -1 && iGroundEntity != -1 && (buttons & IN_JUMP) > 0)
{
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, view_as<float>({0.0, 0.0, 0.0}));
Shavit_PrintToChat(client, "%T", "BHStartZoneDisallowed", client, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "BHStartZoneDisallowed", client, gS_ChatStrings.sVariable, gS_ChatStrings.sText, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
gI_GroundEntity[client] = iGroundEntity;
@ -1014,7 +1013,7 @@ public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float
float fSpeed[3];
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", fSpeed);
float fLimit = view_as<float>(gA_StyleSettings[gI_Style[client]][fRunspeed]) + gF_PrestrafeLimit;
float fLimit = (gA_StyleSettings[gI_Style[client]].fRunspeed + gF_PrestrafeLimit);
if(gI_PreSpeed < 4)
{
@ -1109,22 +1108,22 @@ void ResetCheckpoints(int client)
int serial = GetClientSerial(client);
char key[32];
for(int i = 0; i < gI_CheckpointsCache[client][iCheckpoints]; i++)
for(int i = 0; i < gA_CheckpointsCache[client].iCheckpoints; i++)
{
FormatEx(key, 32, "%d_%d", serial, i);
CheckpointsCache cpcache[PCPCACHE_SIZE];
cp_cache_t cpcache;
if(gSM_Checkpoints.GetArray(key, cpcache[0], view_as<int>(PCPCACHE_SIZE)))
if(gSM_Checkpoints.GetArray(key, cpcache, sizeof(cp_cache_t)))
{
delete cpcache[aCPFrames]; // free up replay frames if there are any
delete cpcache.aFrames; // free up replay frames if there are any
}
gSM_Checkpoints.Remove(key);
}
gI_CheckpointsCache[client][iCheckpoints] = 0;
gI_CheckpointsCache[client][iCurrentCheckpoint] = 1;
gA_CheckpointsCache[client].iCheckpoints = 0;
gA_CheckpointsCache[client].iCurrentCheckpoint = 1;
}
public Action OnTakeDamage(int victim, int attacker)
@ -1204,7 +1203,7 @@ public void OnPreThink(int client)
if(IsPlayerAlive(client))
{
// not the best method, but only one i found for tf2
SetEntPropFloat(client, Prop_Send, "m_flMaxspeed", view_as<float>(gA_StyleSettings[gI_Style[client]][fRunspeed]));
SetEntPropFloat(client, Prop_Send, "m_flMaxspeed", gA_StyleSettings[gI_Style[client]].fRunspeed);
}
}
@ -1259,12 +1258,12 @@ public Action Command_Hide(int client, int args)
if(gB_Hide[client])
{
Shavit_PrintToChat(client, "%T", "HideEnabled", client, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "HideEnabled", client, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
}
else
{
Shavit_PrintToChat(client, "%T", "HideDisabled", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "HideDisabled", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
}
return Plugin_Handled;
@ -1316,7 +1315,7 @@ public Action Command_Teleport(int client, int args)
if(!gB_TeleportCommands)
{
Shavit_PrintToChat(client, "%T", "CommandDisabled", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CommandDisabled", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -1398,7 +1397,7 @@ bool Teleport(int client, int targetserial)
if(Shavit_InsideZone(client, Zone_Start, -1) || Shavit_InsideZone(client, Zone_End, -1))
{
Shavit_PrintToChat(client, "%T", "TeleportInZone", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "TeleportInZone", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
return false;
}
@ -1429,14 +1428,14 @@ public Action Command_Weapon(int client, int args)
if(gI_WeaponCommands == 0)
{
Shavit_PrintToChat(client, "%T", "CommandDisabled", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CommandDisabled", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
if(!IsPlayerAlive(client))
{
Shavit_PrintToChat(client, "%T", "WeaponAlive", client, gS_ChatStrings[sMessageVariable2], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "WeaponAlive", client, gS_ChatStrings.sVariable2, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -1519,13 +1518,13 @@ public Action Command_Save(int client, int args)
if(!gB_Checkpoints && !bSegmenting)
{
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
bool bOverflow = gI_CheckpointsCache[client][iCheckpoints] >= iMaxCPs;
int index = gI_CheckpointsCache[client][iCheckpoints] + 1;
bool bOverflow = gA_CheckpointsCache[client].iCheckpoints >= iMaxCPs;
int index = gA_CheckpointsCache[client].iCheckpoints + 1;
if(!bSegmenting)
{
@ -1536,15 +1535,15 @@ public Action Command_Save(int client, int args)
if(bOverflow)
{
Shavit_PrintToChat(client, "%T", "MiscCheckpointsOverflow", client, index, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "MiscCheckpointsOverflow", client, index, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
return Plugin_Handled;
}
if(SaveCheckpoint(client, index))
{
gI_CheckpointsCache[client][iCurrentCheckpoint] = ++gI_CheckpointsCache[client][iCheckpoints];
Shavit_PrintToChat(client, "%T", "MiscCheckpointsSaved", client, gI_CheckpointsCache[client][iCurrentCheckpoint], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
gA_CheckpointsCache[client].iCurrentCheckpoint = ++gA_CheckpointsCache[client].iCheckpoints;
Shavit_PrintToChat(client, "%T", "MiscCheckpointsSaved", client, gA_CheckpointsCache[client].iCurrentCheckpoint, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
}
}
@ -1552,8 +1551,8 @@ public Action Command_Save(int client, int args)
{
if(SaveCheckpoint(client, index, bOverflow))
{
gI_CheckpointsCache[client][iCurrentCheckpoint] = (bOverflow)? iMaxCPs:++gI_CheckpointsCache[client][iCheckpoints];
Shavit_PrintToChat(client, "%T", "MiscCheckpointsSaved", client, gI_CheckpointsCache[client][iCurrentCheckpoint], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
gA_CheckpointsCache[client].iCurrentCheckpoint = (bOverflow)? iMaxCPs:++gA_CheckpointsCache[client].iCheckpoints;
Shavit_PrintToChat(client, "%T", "MiscCheckpointsSaved", client, gA_CheckpointsCache[client].iCurrentCheckpoint, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
}
}
@ -1571,12 +1570,12 @@ public Action Command_Tele(int client, int args)
if(!gB_Checkpoints)
{
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
int index = gI_CheckpointsCache[client][iCurrentCheckpoint];
int index = gA_CheckpointsCache[client].iCurrentCheckpoint;
if(args > 0)
{
@ -1602,7 +1601,7 @@ public Action OpenCheckpointsMenu(int client, int item)
if(!gB_Checkpoints && !bSegmented)
{
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -1620,12 +1619,12 @@ public Action OpenCheckpointsMenu(int client, int item)
}
char sDisplay[64];
FormatEx(sDisplay, 64, "%T", "MiscCheckpointSave", client, (gI_CheckpointsCache[client][iCheckpoints] + 1));
menu.AddItem("save", sDisplay, (gI_CheckpointsCache[client][iCheckpoints] < gI_MaxCP)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
FormatEx(sDisplay, 64, "%T", "MiscCheckpointSave", client, (gA_CheckpointsCache[client].iCheckpoints + 1));
menu.AddItem("save", sDisplay, (gA_CheckpointsCache[client].iCheckpoints < gI_MaxCP)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
if(gI_CheckpointsCache[client][iCheckpoints] > 0)
if(gA_CheckpointsCache[client].iCheckpoints > 0)
{
FormatEx(sDisplay, 64, "%T", "MiscCheckpointTeleport", client, gI_CheckpointsCache[client][iCurrentCheckpoint]);
FormatEx(sDisplay, 64, "%T", "MiscCheckpointTeleport", client, gA_CheckpointsCache[client].iCurrentCheckpoint);
menu.AddItem("tele", sDisplay, ITEMDRAW_DEFAULT);
}
@ -1668,14 +1667,14 @@ public int MenuHandler_Checkpoints(Menu menu, MenuAction action, int param1, int
if(action == MenuAction_Select)
{
int iMaxCPs = GetMaxCPs(param1);
int iCurrent = gI_CheckpointsCache[param1][iCurrentCheckpoint];
int iCurrent = gA_CheckpointsCache[param1].iCurrentCheckpoint;
switch(param2)
{
case 0:
{
bool bSegmenting = CanSegment(param1);
bool bOverflow = gI_CheckpointsCache[param1][iCheckpoints] >= iMaxCPs;
bool bOverflow = gA_CheckpointsCache[param1].iCheckpoints >= iMaxCPs;
if(!bSegmenting)
{
@ -1685,14 +1684,14 @@ public int MenuHandler_Checkpoints(Menu menu, MenuAction action, int param1, int
return 0;
}
SaveCheckpoint(param1, ++gI_CheckpointsCache[param1][iCheckpoints]);
gI_CheckpointsCache[param1][iCurrentCheckpoint] = gI_CheckpointsCache[param1][iCheckpoints];
SaveCheckpoint(param1, ++gA_CheckpointsCache[param1].iCheckpoints);
gA_CheckpointsCache[param1].iCurrentCheckpoint = gA_CheckpointsCache[param1].iCheckpoints;
}
else
{
SaveCheckpoint(param1, gI_CheckpointsCache[param1][iCheckpoints] + 1, bOverflow);
gI_CheckpointsCache[param1][iCurrentCheckpoint] = (bOverflow)? iMaxCPs:++gI_CheckpointsCache[param1][iCheckpoints];
SaveCheckpoint(param1, gA_CheckpointsCache[param1].iCheckpoints + 1, bOverflow);
gA_CheckpointsCache[param1].iCurrentCheckpoint = (bOverflow)? iMaxCPs:++gA_CheckpointsCache[param1].iCheckpoints;
}
}
@ -1705,17 +1704,17 @@ public int MenuHandler_Checkpoints(Menu menu, MenuAction action, int param1, int
{
if(iCurrent > 1)
{
gI_CheckpointsCache[param1][iCurrentCheckpoint]--;
gA_CheckpointsCache[param1].iCurrentCheckpoint--;
}
}
case 3:
{
CheckpointsCache cpcache[PCPCACHE_SIZE];
cp_cache_t cpcache;
if(iCurrent++ < iMaxCPs && GetCheckpoint(param1, iCurrent, cpcache))
{
gI_CheckpointsCache[param1][iCurrentCheckpoint]++;
gA_CheckpointsCache[param1].iCurrentCheckpoint++;
}
}
@ -1781,7 +1780,7 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
else if(!IsPlayerAlive(client))
{
Shavit_PrintToChat(client, "%T", "CommandAliveSpectate", client, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CommandAliveSpectate", client, gS_ChatStrings.sVariable, gS_ChatStrings.sText, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
return false;
}
@ -1790,25 +1789,25 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
int iSerial = GetClientSerial(client);
FormatEx(sKey, 32, "%d_%d", iSerial, index);
CheckpointsCache cpcacheprev[PCPCACHE_SIZE];
cp_cache_t cpcacheprev;
if(gSM_Checkpoints.GetArray(sKey, cpcacheprev[0], view_as<int>(PCPCACHE_SIZE)))
if(gSM_Checkpoints.GetArray(sKey, cpcacheprev, sizeof(cp_cache_t)))
{
delete cpcacheprev[aCPFrames];
delete cpcacheprev.aFrames;
gSM_Checkpoints.Remove(sKey);
}
CheckpointsCache cpcache[PCPCACHE_SIZE];
cp_cache_t cpcache;
float temp[3];
GetClientAbsOrigin(target, temp);
CopyArray(temp, cpcache[fCPPosition], 3);
CopyArray(temp, cpcache.fPosition, 3);
GetClientEyeAngles(target, temp);
CopyArray(temp, cpcache[fCPAngles], 3);
CopyArray(temp, cpcache.fAngles, 3);
GetEntPropVector(target, Prop_Data, "m_vecAbsVelocity", temp);
CopyArray(temp, cpcache[fCPVelocity], 3);
CopyArray(temp, cpcache.fVelocity, 3);
char sTargetname[64];
GetEntPropString(target, Prop_Data, "m_iName", sTargetname, 64);
@ -1830,13 +1829,13 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
iClassname = gA_Classnames.PushString(sClassname);
}
cpcache[iCPTargetname] = iTargetname;
cpcache[iCPClassname] = iClassname;
cpcache[mtCPMoveType] = GetEntityMoveType(target);
cpcache[fCPGravity] = GetEntityGravity(target);
cpcache[fCPSpeed] = GetEntPropFloat(target, Prop_Send, "m_flLaggedMovementValue");
cpcache[fCPStamina] = (gEV_Type != Engine_TF2)? GetEntPropFloat(target, Prop_Send, "m_flStamina"):0.0;
cpcache[iCPGroundEntity] = GetEntPropEnt(target, Prop_Data, "m_hGroundEntity");
cpcache.iTargetname = iTargetname;
cpcache.iClassname = iClassname;
cpcache.iMoveType = GetEntityMoveType(target);
cpcache.fGravity = GetEntityGravity(target);
cpcache.fSpeed = GetEntPropFloat(target, Prop_Send, "m_flLaggedMovementValue");
cpcache.fStamina = (gEV_Type != Engine_TF2)? GetEntPropFloat(target, Prop_Send, "m_flStamina"):0.0;
cpcache.iGroundEntity = GetEntPropEnt(target, Prop_Data, "m_hGroundEntity");
int iFlags = GetEntityFlags(target);
@ -1846,26 +1845,26 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
iFlags |= FL_AIMTARGET;
}
cpcache[iCPFlags] = iFlags;
cpcache.iFlags = iFlags;
if(gEV_Type != Engine_TF2)
{
cpcache[bCPDucked] = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucked"));
cpcache[bCPDucking] = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucking"));
cpcache.bDucked = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucked"));
cpcache.bDucking = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucking"));
}
if(gEV_Type == Engine_CSS)
{
cpcache[fCPDucktime] = GetEntPropFloat(target, Prop_Send, "m_flDucktime");
cpcache.fDucktime = GetEntPropFloat(target, Prop_Send, "m_flDucktime");
}
else if(gEV_Type == Engine_CSGO)
{
cpcache[fCPDucktime] = GetEntPropFloat(target, Prop_Send, "m_flDuckAmount");
cpcache[fCPDuckSpeed] = GetEntPropFloat(target, Prop_Send, "m_flDuckSpeed");
cpcache.fDucktime = GetEntPropFloat(target, Prop_Send, "m_flDuckAmount");
cpcache.fDuckSpeed = GetEntPropFloat(target, Prop_Send, "m_flDuckSpeed");
}
any snapshot[TIMERSNAPSHOT_SIZE];
timer_snapshot_t snapshot;
if(IsFakeClient(target))
{
@ -1875,22 +1874,22 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
if(style < 0 || track < 0)
{
Shavit_PrintToChat(client, "%T", "CommandAliveSpectate", client, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CommandAliveSpectate", client, gS_ChatStrings.sVariable, gS_ChatStrings.sText, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
return false;
}
snapshot[bTimerEnabled] = true;
snapshot[fCurrentTime] = Shavit_GetReplayTime(style, track);
snapshot[bClientPaused] = false;
snapshot[bsStyle] = style;
snapshot[iJumps] = 0;
snapshot[iStrafes] = 0;
snapshot[iTotalMeasures] = 0;
snapshot[iGoodGains] = 0;
snapshot[fServerTime] = GetEngineTime();
snapshot[iSHSWCombination] = -1;
snapshot[iTimerTrack] = track;
snapshot.bTimerEnabled = true;
snapshot.fCurrentTime = Shavit_GetReplayTime(style, track);
snapshot.bClientPaused = false;
snapshot.bsStyle = style;
snapshot.iJumps = 0;
snapshot.iStrafes = 0;
snapshot.iTotalMeasures = 0;
snapshot.iGoodGains = 0;
snapshot.fServerTime = GetEngineTime();
snapshot.iSHSWCombination = -1;
snapshot.iTimerTrack = track;
}
else
@ -1898,26 +1897,26 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
Shavit_SaveSnapshot(target, snapshot);
}
CopyArray(snapshot, cpcache[aCPSnapshot], TIMERSNAPSHOT_SIZE);
CopyArray(snapshot, cpcache.aSnapshot, sizeof(timer_snapshot_t));
if(CanSegment(target))
{
if(gB_Replay)
{
cpcache[aCPFrames] = Shavit_GetReplayData(target);
cpcache.aFrames = Shavit_GetReplayData(target);
}
cpcache[bCPSegmented] = true;
cpcache.bSegmented = true;
}
else
{
cpcache[aCPFrames] = null;
cpcache[bCPSegmented] = false;
cpcache.aFrames = null;
cpcache.bSegmented = false;
}
cpcache[iCPSerial] = GetClientSerial(target);
cpcache[bCPPractice] = Shavit_IsPracticeMode(target);
cpcache.iSerial = GetClientSerial(target);
cpcache.bPractice = Shavit_IsPracticeMode(target);
if(overflow)
{
@ -1925,17 +1924,17 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
for(int i = 1; i <= iMaxCPs; i++)
{
CheckpointsCache cpcacheold[PCPCACHE_SIZE];
cp_cache_t cpcacheold;
FormatEx(sKey, 32, "%d_%d", iSerial, i);
if(!gSM_Checkpoints.GetArray(sKey, cpcacheold[0], view_as<int>(PCPCACHE_SIZE)))
if(!gSM_Checkpoints.GetArray(sKey, cpcacheold, sizeof(cp_cache_t)))
{
continue; // ???
}
if(i == 1)
{
delete cpcacheold[aCPFrames];
delete cpcacheold.aFrames;
gSM_Checkpoints.Remove(sKey);
continue;
@ -1943,7 +1942,7 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
gSM_Checkpoints.Remove(sKey);
FormatEx(sKey, 32, "%d_%d", iSerial, (i - 1)); // set cp index to one less
gSM_Checkpoints.SetArray(sKey, cpcacheold[0], view_as<int>(PCPCACHE_SIZE));
gSM_Checkpoints.SetArray(sKey, cpcacheold, sizeof(cp_cache_t));
}
SetCheckpoint(client, iMaxCPs, cpcache);
@ -1964,17 +1963,17 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
return;
}
CheckpointsCache cpcache[PCPCACHE_SIZE];
cp_cache_t cpcache;
if(!GetCheckpoint(client, index, cpcache))
{
Shavit_PrintToChat(client, "%T", "MiscCheckpointsEmpty", client, index, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "MiscCheckpointsEmpty", client, index, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return;
}
float pos[3];
CopyArray(cpcache[fCPPosition], pos, 3);
CopyArray(cpcache.fPosition, pos, 3);
if(IsNullVector(pos))
{
@ -1983,7 +1982,7 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
if(!IsPlayerAlive(client))
{
Shavit_PrintToChat(client, "%T", "CommandAlive", client, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CommandAlive", client, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
return;
}
@ -1993,18 +1992,18 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
Shavit_StopTimer(client);
}
any snapshot[TIMERSNAPSHOT_SIZE];
CopyArray(cpcache[aCPSnapshot], snapshot, TIMERSNAPSHOT_SIZE);
timer_snapshot_t snapshot;
CopyArray(cpcache.aSnapshot, snapshot, sizeof(timer_snapshot_t));
Shavit_LoadSnapshot(client, snapshot);
float ang[3];
CopyArray(cpcache[fCPAngles], ang, 3);
CopyArray(cpcache.fAngles, ang, 3);
float vel[3];
if((gI_CheckpointsSettings[client] & CP_VELOCITY) > 0 || cpcache[bCPSegmented])
if((gI_CheckpointsSettings[client] & CP_VELOCITY) > 0 || cpcache.bSegmented)
{
CopyArray(cpcache[fCPVelocity], vel, 3);
CopyArray(cpcache.fVelocity, vel, 3);
}
else
@ -2013,28 +2012,28 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
}
TeleportEntity(client, pos,
((gI_CheckpointsSettings[client] & CP_ANGLES) > 0 || cpcache[bCPSegmented])? ang:NULL_VECTOR,
((gI_CheckpointsSettings[client] & CP_ANGLES) > 0 || cpcache.bSegmented)? ang:NULL_VECTOR,
vel);
if(cpcache[bCPPractice] || !cpcache[bCPSegmented] || GetClientSerial(client) != cpcache[iCPSerial])
if(cpcache.bPractice || !cpcache.bSegmented || GetClientSerial(client) != cpcache.iSerial)
{
Shavit_SetPracticeMode(client, true, true);
}
MoveType mt = cpcache[mtCPMoveType];
MoveType mt = cpcache.iMoveType;
if(mt == MOVETYPE_LADDER || mt == MOVETYPE_WALK)
{
SetEntityMoveType(client, mt);
}
SetEntityGravity(client, cpcache[fCPGravity]);
SetEntityFlags(client, cpcache[iCPFlags]);
SetEntityGravity(client, cpcache.fGravity);
SetEntityFlags(client, cpcache.iFlags);
SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", cpcache[fCPSpeed]);
SetEntPropEnt(client, Prop_Data, "m_hGroundEntity", cpcache[iCPGroundEntity]);
SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", cpcache.fSpeed);
SetEntPropEnt(client, Prop_Data, "m_hGroundEntity", cpcache.iGroundEntity);
int iTargetname = gA_Targetnames.FindValue(cpcache[iCPTargetname]);
int iTargetname = gA_Targetnames.FindValue(cpcache.iTargetname);
if(iTargetname != -1)
{
@ -2044,7 +2043,7 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
SetEntPropString(client, Prop_Data, "m_iName", sTargetname);
}
int iClassname = gA_Classnames.FindValue(cpcache[iCPClassname]);
int iClassname = gA_Classnames.FindValue(cpcache.iClassname);
if(iClassname != -1)
{
@ -2056,38 +2055,38 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
if(gEV_Type != Engine_TF2)
{
SetEntPropFloat(client, Prop_Send, "m_flStamina", cpcache[fCPStamina]);
SetEntProp(client, Prop_Send, "m_bDucked", cpcache[bCPDucked]);
SetEntProp(client, Prop_Send, "m_bDucking", cpcache[bCPDucking]);
SetEntPropFloat(client, Prop_Send, "m_flStamina", cpcache.fStamina);
SetEntProp(client, Prop_Send, "m_bDucked", cpcache.bDucked);
SetEntProp(client, Prop_Send, "m_bDucking", cpcache.bDucking);
}
if(gEV_Type == Engine_CSS)
{
SetEntPropFloat(client, Prop_Send, "m_flDucktime", cpcache[fCPDucktime]);
SetEntPropFloat(client, Prop_Send, "m_flDucktime", cpcache.fDucktime);
}
else if(gEV_Type == Engine_CSGO)
{
SetEntPropFloat(client, Prop_Send, "m_flDuckAmount", cpcache[fCPDucktime]);
SetEntPropFloat(client, Prop_Send, "m_flDuckSpeed", cpcache[fCPDuckSpeed]);
SetEntPropFloat(client, Prop_Send, "m_flDuckAmount", cpcache.fDucktime);
SetEntPropFloat(client, Prop_Send, "m_flDuckSpeed", cpcache.fDuckSpeed);
}
if(cpcache[bCPSegmented] && gB_Replay)
if(cpcache.bSegmented && gB_Replay)
{
if(cpcache[aCPFrames] == null)
if(cpcache.aFrames == null)
{
LogError("SetReplayData for %L failed, recorded frames are null.", client);
}
else
{
Shavit_SetReplayData(client, cpcache[aCPFrames]);
Shavit_SetReplayData(client, cpcache.aFrames);
}
}
if(!suppressMessage)
{
Shavit_PrintToChat(client, "%T", "MiscCheckpointsTeleported", client, index, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "MiscCheckpointsTeleported", client, index, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
}
}
@ -2100,21 +2099,21 @@ public Action Command_Noclip(int client, int args)
if(gI_NoclipMe == 0)
{
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "FeatureDisabled", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
else if(gI_NoclipMe == 2 && !CheckCommandAccess(client, "admin_noclipme", ADMFLAG_CHEATS))
{
Shavit_PrintToChat(client, "%T", "LackingAccess", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "LackingAccess", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
if(!IsPlayerAlive(client))
{
Shavit_PrintToChat(client, "%T", "CommandAlive", client, gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CommandAlive", client, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -2197,7 +2196,7 @@ public Action Command_Specs(int client, int args)
if(!IsPlayerAlive(iNewTarget))
{
Shavit_PrintToChat(client, "%T", "SpectateDead", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "SpectateDead", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -2228,24 +2227,24 @@ public Action Command_Specs(int client, int args)
if(iCount == 1)
{
FormatEx(sSpecs, 192, "%s%N", gS_ChatStrings[sMessageVariable2], i);
FormatEx(sSpecs, 192, "%s%N", gS_ChatStrings.sVariable2, i);
}
else
{
Format(sSpecs, 192, "%s%s, %s%N", sSpecs, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable2], i);
Format(sSpecs, 192, "%s%s, %s%N", sSpecs, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, i);
}
}
}
if(iCount > 0)
{
Shavit_PrintToChat(client, "%T", "SpectatorCount", client, gS_ChatStrings[sMessageVariable2], iObserverTarget, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], iCount, gS_ChatStrings[sMessageText], sSpecs);
Shavit_PrintToChat(client, "%T", "SpectatorCount", client, gS_ChatStrings.sVariable2, iObserverTarget, gS_ChatStrings.sText, gS_ChatStrings.sVariable, iCount, gS_ChatStrings.sText, sSpecs);
}
else
{
Shavit_PrintToChat(client, "%T", "SpectatorCountZero", client, gS_ChatStrings[sMessageVariable2], iObserverTarget, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "SpectatorCountZero", client, gS_ChatStrings.sVariable2, iObserverTarget, gS_ChatStrings.sText);
}
return Plugin_Handled;
@ -2253,7 +2252,7 @@ public Action Command_Specs(int client, int args)
public Action Shavit_OnStart(int client)
{
if(!gA_StyleSettings[gI_Style[client]][bPrespeed] && GetEntityMoveType(client) == MOVETYPE_NOCLIP)
if(!gA_StyleSettings[gI_Style[client]].bPrespeed && GetEntityMoveType(client) == MOVETYPE_NOCLIP)
{
return Plugin_Stop;
}
@ -2284,7 +2283,7 @@ void GetTrackName(int client, int track, char[] output, int size)
public void Shavit_OnWorldRecord(int client, int style, float time, int jumps, int strafes, float sync, int track)
{
char sUpperCase[64];
strcopy(sUpperCase, 64, gS_StyleStrings[style][sStyleName]);
strcopy(sUpperCase, 64, gS_StyleStrings[style].sStyleName);
for(int i = 0; i < strlen(sUpperCase); i++)
{
@ -2308,12 +2307,12 @@ public void Shavit_OnWorldRecord(int client, int style, float time, int jumps, i
{
if(track == Track_Main)
{
Shavit_PrintToChat(i, "%T", "WRNotice", i, gS_ChatStrings[sMessageWarning], sUpperCase);
Shavit_PrintToChat(i, "%T", "WRNotice", i, gS_ChatStrings.sWarning, sUpperCase);
}
else
{
Shavit_PrintToChat(i, "%s[%s]%s %T", gS_ChatStrings[sMessageVariable], sTrack, gS_ChatStrings[sMessageText], "WRNotice", i, gS_ChatStrings[sMessageWarning], sUpperCase);
Shavit_PrintToChat(i, "%s[%s]%s %T", gS_ChatStrings.sVariable, sTrack, gS_ChatStrings.sText, "WRNotice", i, gS_ChatStrings.sWarning, sUpperCase);
}
}
}
@ -2477,8 +2476,8 @@ void RestoreState(any data)
return;
}
if(gA_SaveStates[client][bsStyle] != Shavit_GetBhopStyle(client) ||
gA_SaveStates[client][iTimerTrack] != Shavit_GetClientTrack(client))
if(gA_SaveStates[client].bsStyle != Shavit_GetBhopStyle(client) ||
gA_SaveStates[client].iTimerTrack != Shavit_GetClientTrack(client))
{
gB_SaveStates[client] = false;
@ -2811,20 +2810,20 @@ void SaveState(int client)
gB_SaveStates[client] = true;
}
bool GetCheckpoint(int client, int index, CheckpointsCache cpcache[PCPCACHE_SIZE])
bool GetCheckpoint(int client, int index, cp_cache_t cpcache)
{
char sKey[32];
FormatEx(sKey, 32, "%d_%d", GetClientSerial(client), index);
return gSM_Checkpoints.GetArray(sKey, cpcache[0], view_as<int>(PCPCACHE_SIZE));
return gSM_Checkpoints.GetArray(sKey, cpcache, sizeof(cp_cache_t));
}
bool SetCheckpoint(int client, int index, CheckpointsCache cpcache[PCPCACHE_SIZE])
bool SetCheckpoint(int client, int index, cp_cache_t cpcache)
{
char sKey[32];
FormatEx(sKey, 32, "%d_%d", GetClientSerial(client), index);
return gSM_Checkpoints.SetArray(sKey, cpcache[0], view_as<int>(PCPCACHE_SIZE));
return gSM_Checkpoints.SetArray(sKey, cpcache, sizeof(cp_cache_t));
}
void CopyArray(const any[] from, any[] to, int size)
@ -2837,7 +2836,7 @@ void CopyArray(const any[] from, any[] to, int size)
bool CanSegment(int client)
{
return StrContains(gS_StyleStrings[gI_Style[client]][sSpecialString], "segments") != -1;
return StrContains(gS_StyleStrings[gI_Style[client]].sSpecialString, "segments") != -1;
}
int GetMaxCPs(int client)

View File

@ -75,13 +75,12 @@ Menu gH_Top100Menu = null;
Handle gH_Forwards_OnTierAssigned = null;
// Timer settings.
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
chatstrings_t gS_ChatStrings;
int gI_Styles = 0;
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
char gS_StyleNames[STYLE_LIMIT][64];
char gS_TrackNames[TRACKS_SIZE][32];
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
int gI_Styles = 0;
public Plugin myinfo =
{
name = "[shavit] Rankings",
@ -165,10 +164,12 @@ public void OnPluginStart()
public void Shavit_OnChatConfigLoaded()
{
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
{
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
}
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
Shavit_GetChatStrings(sMessageWarning, gS_ChatStrings.sWarning, sizeof(chatstrings_t::sWarning));
Shavit_GetChatStrings(sMessageVariable, gS_ChatStrings.sVariable, sizeof(chatstrings_t::sVariable));
Shavit_GetChatStrings(sMessageVariable2, gS_ChatStrings.sVariable2, sizeof(chatstrings_t::sVariable2));
Shavit_GetChatStrings(sMessageStyle, gS_ChatStrings.sStyle, sizeof(chatstrings_t::sStyle));
}
public void Shavit_OnStyleConfigLoaded(int styles)
@ -548,7 +549,7 @@ public Action Command_Tier(int client, int args)
}
}
Shavit_PrintToChat(client, "%T", "CurrentTier", client, gS_ChatStrings[sMessageVariable], sMap, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable2], tier, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CurrentTier", client, gS_ChatStrings.sVariable, sMap, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, tier, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -572,15 +573,15 @@ public Action Command_Rank(int client, int args)
if(gF_Points[target] == 0.0)
{
Shavit_PrintToChat(client, "%T", "Unranked", client, gS_ChatStrings[sMessageVariable2], target, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "Unranked", client, gS_ChatStrings.sVariable2, target, gS_ChatStrings.sText);
return Plugin_Handled;
}
Shavit_PrintToChat(client, "%T", "Rank", client, gS_ChatStrings[sMessageVariable2], target, gS_ChatStrings[sMessageText],
gS_ChatStrings[sMessageVariable], (gI_Rank[target] > gI_RankedPlayers)? gI_RankedPlayers:gI_Rank[target], gS_ChatStrings[sMessageText],
Shavit_PrintToChat(client, "%T", "Rank", client, gS_ChatStrings.sVariable2, target, gS_ChatStrings.sText,
gS_ChatStrings.sVariable, (gI_Rank[target] > gI_RankedPlayers)? gI_RankedPlayers:gI_Rank[target], gS_ChatStrings.sText,
gI_RankedPlayers,
gS_ChatStrings[sMessageVariable], gF_Points[target], gS_ChatStrings[sMessageText]);
gS_ChatStrings.sVariable, gF_Points[target], gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -631,7 +632,7 @@ public Action Command_SetTier(int client, int args)
Call_PushCell(tier);
Call_Finish();
Shavit_PrintToChat(client, "%T", "SetTier", client, gS_ChatStrings[sMessageVariable2], tier, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "SetTier", client, gS_ChatStrings.sVariable2, tier, gS_ChatStrings.sText);
char sQuery[256];
FormatEx(sQuery, 256, "REPLACE INTO %smaptiers (map, tier) VALUES ('%s', %d);", gS_MySQLPrefix, gS_Map, tier);
@ -673,14 +674,14 @@ public Action Command_RecalcAll(int client, int args)
{
char sQuery[192];
if(gA_StyleSettings[i][bUnranked] || view_as<float>(gA_StyleSettings[i][fRankingMultiplier]) == 0.0)
if(gA_StyleSettings[i].bUnranked || gA_StyleSettings[i].fRankingMultiplier == 0.0)
{
FormatEx(sQuery, 192, "UPDATE %splayertimes SET points = 0 WHERE style = %d;", gS_MySQLPrefix, i);
}
else
{
FormatEx(sQuery, 192, "UPDATE %splayertimes SET points = GetRecordPoints(%d, track, time, map, %.1f, %.3f) WHERE style = %d;", gS_MySQLPrefix, i, gF_PointsPerTier, view_as<float>(gA_StyleSettings[i][fRankingMultiplier]), i);
FormatEx(sQuery, 192, "UPDATE %splayertimes SET points = GetRecordPoints(%d, track, time, map, %.1f, %.3f) WHERE style = %d;", gS_MySQLPrefix, i, gF_PointsPerTier, gA_StyleSettings[i].fRankingMultiplier, i);
}
trans.AddQuery(sQuery);
@ -731,7 +732,7 @@ void RecalculateAll(const char[] map)
{
for(int j = 0; j < gI_Styles; j++)
{
if(gA_StyleSettings[j][bUnranked])
if(gA_StyleSettings[j].bUnranked)
{
continue;
}
@ -753,7 +754,8 @@ void RecalculateMap(const char[] map, const int track, const int style)
#endif
char sQuery[192];
FormatEx(sQuery, 192, "UPDATE %splayertimes SET points = GetRecordPoints(%d, %d, time, '%s', %.1f, %.3f) WHERE style = %d AND track = %d AND map = '%s';", gS_MySQLPrefix, style, track, map, gF_PointsPerTier, gA_StyleSettings[style][fRankingMultiplier], style, track, map);
FormatEx(sQuery, 192, "UPDATE %splayertimes SET points = GetRecordPoints(%d, %d, time, '%s', %.1f, %.3f) WHERE style = %d AND track = %d AND map = '%s';",
gS_MySQLPrefix, style, track, map, gF_PointsPerTier, gA_StyleSettings[style].fRankingMultiplier, style, track, map);
gH_SQL.Query(SQL_Recalculate_Callback, sQuery, 0, DBPrio_High);

View File

@ -42,25 +42,23 @@
#pragma semicolon 1
#pragma dynamic 131072
enum
enum struct centralbot_cache_t
{
iCentralClient,
iCentralStyle,
iCentralReplayStatus,
iCentralTrack,
CENTRALBOTCACHE_SIZE
};
int iClient;
int iStyle;
ReplayStatus iReplayStatus;
int iTrack;
}
enum
enum struct replaystrings_t
{
sReplayClanTag,
sReplayNameStyle,
sReplayCentralName,
sReplayCentralStyle,
sReplayCentralStyleTag,
sReplayUnloaded,
REPLAYSTRINGS_SIZE
};
char sClanTag[MAX_NAME_LENGTH];
char sNameStyle[MAX_NAME_LENGTH];
char sCentralName[MAX_NAME_LENGTH];
char sCentralStyle[MAX_NAME_LENGTH];
char sCentralStyleTag[MAX_NAME_LENGTH];
char sUnloaded[MAX_NAME_LENGTH];
}
enum
{
@ -99,7 +97,7 @@ float gF_Tickrate = 0.0;
char gS_Map[160];
int gI_ExpectedBots = 0;
ConVar bot_quota = null;
any gA_CentralCache[CENTRALBOTCACHE_SIZE];
centralbot_cache_t gA_CentralCache;
// how do i call this
bool gB_HideNameChange = false;
@ -129,14 +127,14 @@ char gS_BotWeapon[32] = "";
// timer settings
int gI_Styles = 0;
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
// chat settings
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
chatstrings_t gS_ChatStrings;
// replay settings
char gS_ReplayStrings[REPLAYSTRINGS_SIZE][MAX_NAME_LENGTH];
replaystrings_t gS_ReplayStrings;
// admin menu
TopMenu gH_AdminMenu = null;
@ -348,7 +346,7 @@ public int Native_GetReplayBotIndex(Handle handler, int numParams)
{
if(gB_CentralBot)
{
return gA_CentralCache[iCentralClient];
return gA_CentralCache.iClient;
}
return gI_ReplayBotClient[GetNativeCell(1)];
@ -361,7 +359,7 @@ public int Native_IsReplayDataLoaded(Handle handler, int numParams)
if(gB_CentralBot)
{
return (gA_CentralCache[iCentralClient] != -1 && gA_CentralCache[iCentralClient] != Replay_Idle && view_as<int>(gA_FrameCache[style][track][0]) > 0);
return (gA_CentralCache.iClient != -1 && gA_CentralCache.iReplayStatus != Replay_Idle && view_as<int>(gA_FrameCache[style][track][0]) > 0);
}
return view_as<int>(ReplayEnabled(style) && gA_FrameCache[style][Track_Main][0] > 0);
@ -402,7 +400,7 @@ public int Native_ReloadReplay(Handle handler, int numParams)
if(gB_CentralBot)
{
if(gA_CentralCache[iCentralStyle] == style && gA_CentralCache[iCentralTrack] == track)
if(gA_CentralCache.iStyle == style && gA_CentralCache.iTrack == track)
{
StopCentralReplay(0);
}
@ -506,7 +504,7 @@ public int Native_GetReplayTime(Handle handler, int numParams)
if(gB_CentralBot)
{
if(gA_CentralCache[iCentralReplayStatus] == Replay_End)
if(gA_CentralCache.iReplayStatus == Replay_End)
{
return view_as<int>(GetReplayLength(style, track));
}
@ -531,7 +529,7 @@ public int Native_HijackAngles(Handle handler, int numParams)
public int Native_GetReplayBotStyle(Handle handler, int numParams)
{
return (gB_CentralBot && gA_CentralCache[iCentralReplayStatus] == Replay_Idle)? -1:GetReplayStyle(GetNativeCell(1));
return (gB_CentralBot && gA_CentralCache.iReplayStatus == Replay_Idle)? -1:GetReplayStyle(GetNativeCell(1));
}
public int Native_GetReplayBotTrack(Handle handler, int numParams)
@ -656,16 +654,16 @@ public Action Cron(Handle Timer)
}
}
if(gB_CentralBot && gA_CentralCache[iCentralClient] != -1)
if(gB_CentralBot && gA_CentralCache.iClient != -1)
{
if(gA_CentralCache[iCentralStyle] != -1)
if(gA_CentralCache.iStyle != -1)
{
UpdateReplayInfo(gA_CentralCache[iCentralClient], gA_CentralCache[iCentralStyle], -1.0, gA_CentralCache[iCentralTrack]);
UpdateReplayInfo(gA_CentralCache.iClient, gA_CentralCache.iStyle, -1.0, gA_CentralCache.iTrack);
}
else
{
UpdateReplayInfo(gA_CentralCache[iCentralClient], 0, 0.0, 0);
UpdateReplayInfo(gA_CentralCache.iClient, 0, 0.0, 0);
}
}
@ -686,12 +684,12 @@ bool LoadStyling()
return false;
}
kv.GetString("clantag", gS_ReplayStrings[sReplayClanTag], MAX_NAME_LENGTH, "<EMPTY CLANTAG>");
kv.GetString("namestyle", gS_ReplayStrings[sReplayNameStyle], MAX_NAME_LENGTH, "<EMPTY NAMESTYLE>");
kv.GetString("centralname", gS_ReplayStrings[sReplayCentralName], MAX_NAME_LENGTH, "<EMPTY CENTRALNAME>");
kv.GetString("centralstyle", gS_ReplayStrings[sReplayCentralStyle], MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLE>");
kv.GetString("centralstyletag", gS_ReplayStrings[sReplayCentralStyleTag], MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLETAG>");
kv.GetString("unloaded", gS_ReplayStrings[sReplayUnloaded], MAX_NAME_LENGTH, "<EMPTY UNLOADED>");
kv.GetString("clantag", gS_ReplayStrings.sClanTag, MAX_NAME_LENGTH, "<EMPTY CLANTAG>");
kv.GetString("namestyle", gS_ReplayStrings.sNameStyle, MAX_NAME_LENGTH, "<EMPTY NAMESTYLE>");
kv.GetString("centralname", gS_ReplayStrings.sCentralName, MAX_NAME_LENGTH, "<EMPTY CENTRALNAME>");
kv.GetString("centralstyle", gS_ReplayStrings.sCentralStyle, MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLE>");
kv.GetString("centralstyletag", gS_ReplayStrings.sCentralStyleTag, MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLETAG>");
kv.GetString("unloaded", gS_ReplayStrings.sUnloaded, MAX_NAME_LENGTH, "<EMPTY UNLOADED>");
char sFolder[PLATFORM_MAX_PATH];
kv.GetString("replayfolder", sFolder, PLATFORM_MAX_PATH, "{SM}/data/replaybot");
@ -722,10 +720,10 @@ public void OnMapStart()
Shavit_OnChatConfigLoaded();
}
gA_CentralCache[iCentralClient] = -1;
gA_CentralCache[iCentralStyle] = -1;
gA_CentralCache[iCentralReplayStatus] = Replay_Idle;
gA_CentralCache[iCentralTrack] = Track_Main;
gA_CentralCache.iClient = -1;
gA_CentralCache.iStyle = -1;
gA_CentralCache.iReplayStatus = Replay_Idle;
gA_CentralCache.iTrack = Track_Main;
gB_ForciblyStopped = false;
@ -896,9 +894,9 @@ public void Shavit_OnStyleConfigLoaded(int styles)
for(int i = 0; i < styles; i++)
{
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i][sClanTag], 128);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i][sShortName], 128);
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i].sClanTag, sizeof(stylestrings_t::sClanTag));
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i].sShortName, sizeof(stylestrings_t::sShortName));
}
gI_Styles = styles;
@ -906,10 +904,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
public void Shavit_OnChatConfigLoaded()
{
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
{
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
}
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
Shavit_GetChatStrings(sMessageWarning, gS_ChatStrings.sWarning, sizeof(chatstrings_t::sWarning));
Shavit_GetChatStrings(sMessageVariable, gS_ChatStrings.sVariable, sizeof(chatstrings_t::sVariable));
Shavit_GetChatStrings(sMessageVariable2, gS_ChatStrings.sVariable2, sizeof(chatstrings_t::sVariable2));
Shavit_GetChatStrings(sMessageStyle, gS_ChatStrings.sStyle, sizeof(chatstrings_t::sStyle));
}
bool DefaultLoadReplay(int style, int track)
@ -1132,7 +1132,7 @@ bool DeleteReplay(int style, int track)
return false;
}
if(gB_CentralBot && gA_CentralCache[iCentralStyle] == style && gA_CentralCache[iCentralTrack] == track)
if(gB_CentralBot && gA_CentralCache.iStyle == style && gA_CentralCache.iTrack == track)
{
StopCentralReplay(0);
}
@ -1202,10 +1202,10 @@ public void OnClientPutInServer(int client)
}
}
else if(gA_CentralCache[iCentralClient] == -1)
else if(gA_CentralCache.iClient == -1)
{
UpdateReplayInfo(client, 0, 0.0, Track_Main);
gA_CentralCache[iCentralClient] = client;
gA_CentralCache.iClient = client;
}
}
}
@ -1248,16 +1248,16 @@ void FormatStyle(const char[] source, int style, bool central, float time, int t
ReplaceString(temp, size, "{map}", gS_Map);
if(central && gA_CentralCache[iCentralReplayStatus] == Replay_Idle)
if(central && gA_CentralCache.iReplayStatus == Replay_Idle)
{
ReplaceString(temp, size, "{style}", gS_ReplayStrings[sReplayCentralStyle]);
ReplaceString(temp, size, "{styletag}", gS_ReplayStrings[sReplayCentralStyleTag]);
ReplaceString(temp, size, "{style}", gS_ReplayStrings.sCentralStyle);
ReplaceString(temp, size, "{styletag}", gS_ReplayStrings.sCentralStyleTag);
}
else
{
ReplaceString(temp, size, "{style}", gS_StyleStrings[style][sStyleName]);
ReplaceString(temp, size, "{styletag}", gS_StyleStrings[style][sClanTag]);
ReplaceString(temp, size, "{style}", gS_StyleStrings[style].sStyleName);
ReplaceString(temp, size, "{styletag}", gS_StyleStrings[style].sClanTag);
}
ReplaceString(temp, size, "{time}", sTime);
@ -1280,13 +1280,13 @@ void UpdateReplayInfo(int client, int style, float time, int track)
SetEntProp(client, Prop_Data, "m_CollisionGroup", 2);
SetEntityMoveType(client, MOVETYPE_NOCLIP);
bool central = (gA_CentralCache[iCentralClient] == client);
bool idle = (central && gA_CentralCache[iCentralReplayStatus] == Replay_Idle);
bool central = (gA_CentralCache.iClient == client);
bool idle = (central && gA_CentralCache.iReplayStatus == Replay_Idle);
if(gEV_Type != Engine_TF2)
{
char sTag[MAX_NAME_LENGTH];
FormatStyle(gS_ReplayStrings[sReplayClanTag], style, central, time, track, sTag, MAX_NAME_LENGTH);
FormatStyle(gS_ReplayStrings.sClanTag, style, central, time, track, sTag, MAX_NAME_LENGTH);
CS_SetClientClanTag(client, sTag);
}
@ -1295,18 +1295,26 @@ void UpdateReplayInfo(int client, int style, float time, int track)
if(central || iFrameCount > 0)
{
FormatStyle(gS_ReplayStrings[(idle)? sReplayCentralName:sReplayNameStyle], style, central, time, track, sName, MAX_NAME_LENGTH);
if(idle)
{
FormatStyle(gS_ReplayStrings.sCentralName, style, central, time, track, sName, MAX_NAME_LENGTH);
}
else
{
FormatStyle(gS_ReplayStrings[sReplayUnloaded], style, central, time, track, sName, MAX_NAME_LENGTH);
FormatStyle(gS_ReplayStrings.sNameStyle, style, central, time, track, sName, MAX_NAME_LENGTH);
}
}
else
{
FormatStyle(gS_ReplayStrings.sUnloaded, style, central, time, track, sName, MAX_NAME_LENGTH);
}
gB_HideNameChange = true;
SetClientName(client, sName);
int iScore = (iFrameCount > 0 || client == gA_CentralCache[iCentralClient])? 2000:-2000;
int iScore = (iFrameCount > 0 || client == gA_CentralCache.iClient)? 2000:-2000;
if(gEV_Type == Engine_CSGO)
{
@ -1422,9 +1430,9 @@ public void OnClientDisconnect(int client)
return;
}
if(gA_CentralCache[iCentralClient] == client)
if(gA_CentralCache.iClient == client)
{
gA_CentralCache[iCentralClient] = -1;
gA_CentralCache.iClient = -1;
return;
}
@ -1507,7 +1515,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
if(ReplayEnabled(style))
{
if(gB_CentralBot && gA_CentralCache[iCentralStyle] == style && gA_CentralCache[iCentralTrack] == track)
if(gB_CentralBot && gA_CentralCache.iStyle == style && gA_CentralCache.iTrack == track)
{
StopCentralReplay(0);
}
@ -1566,7 +1574,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
{
if((buttons & IN_USE) > 0)
{
if(!gB_Button[client] && GetSpectatorTarget(client) == gA_CentralCache[iCentralClient])
if(!gB_Button[client] && GetSpectatorTarget(client) == gA_CentralCache.iClient)
{
OpenReplayMenu(client);
}
@ -1639,7 +1647,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
if(++gI_ReplayTick[style] >= iFrameCount)
{
gI_ReplayTick[style] = 0;
gRS_ReplayStatus[style] = gA_CentralCache[iCentralReplayStatus] = Replay_End;
gRS_ReplayStatus[style] = gA_CentralCache.iReplayStatus = Replay_End;
CreateTimer((gF_ReplayDelay / 2.0), Timer_EndReplay, style, TIMER_FLAG_NO_MAPCHANGE);
@ -1811,7 +1819,7 @@ public Action Timer_EndReplay(Handle Timer, any data)
Call_PushCell(gI_ReplayBotClient[data]);
Call_Finish();
if(gI_ReplayBotClient[data] != gA_CentralCache[iCentralClient])
if(gI_ReplayBotClient[data] != gA_CentralCache.iClient)
{
gRS_ReplayStatus[data] = Replay_Start;
@ -1820,7 +1828,7 @@ public Action Timer_EndReplay(Handle Timer, any data)
else
{
gRS_ReplayStatus[data] = gA_CentralCache[iCentralReplayStatus] = Replay_Idle;
gRS_ReplayStatus[data] = gA_CentralCache.iReplayStatus = Replay_Idle;
gI_ReplayBotClient[data] = 0;
}
@ -1838,14 +1846,14 @@ public Action Timer_StartReplay(Handle Timer, any data)
Call_PushCell(gI_ReplayBotClient[data]);
Call_Finish();
gRS_ReplayStatus[data] = gA_CentralCache[iCentralReplayStatus] = Replay_Running;
gRS_ReplayStatus[data] = gA_CentralCache.iReplayStatus = Replay_Running;
return Plugin_Stop;
}
bool ReplayEnabled(any style)
{
return (!gA_StyleSettings[style][bUnranked] && !gA_StyleSettings[style][bNoReplay]);
return (!gA_StyleSettings[style].bUnranked && !gA_StyleSettings[style].bNoReplay);
}
public void Player_Event(Event event, const char[] name, bool dontBroadcast)
@ -2008,12 +2016,12 @@ public Action Command_DeleteReplay(int client, int args)
char sTime[32];
FormatSeconds(time, sTime, 32, false);
FormatEx(sDisplay, 64, "%s (%s) - %s", gS_StyleStrings[i][sStyleName], sTrack, sTime);
FormatEx(sDisplay, 64, "%s (%s) - %s", gS_StyleStrings[i].sStyleName, sTrack, sTime);
}
else
{
FormatEx(sDisplay, 64, "%s (%s)", gS_StyleStrings[i][sStyleName], sTrack);
FormatEx(sDisplay, 64, "%s (%s)", gS_StyleStrings[i].sStyleName, sTrack);
}
menu.AddItem(sInfo, sDisplay);
@ -2053,7 +2061,7 @@ public int DeleteReplay_Callback(Menu menu, MenuAction action, int param1, int p
gI_Track[param1] = StringToInt(sExploded[1]);
Menu submenu = new Menu(DeleteConfirmation_Callback);
submenu.SetTitle("%T", "ReplayDeletionConfirmation", param1, gS_StyleStrings[style][sStyleName]);
submenu.SetTitle("%T", "ReplayDeletionConfirmation", param1, gS_StyleStrings[style].sStyleName);
char sMenuItem[64];
@ -2097,14 +2105,14 @@ public int DeleteConfirmation_Callback(Menu menu, MenuAction action, int param1,
char sTrack[32];
GetTrackName(param1, gI_Track[param1], sTrack, 32);
LogAction(param1, param1, "Deleted replay for %s on map %s. (Track: %s)", gS_StyleStrings[style][sStyleName], gS_Map, sTrack);
LogAction(param1, param1, "Deleted replay for %s on map %s. (Track: %s)", gS_StyleStrings[style].sStyleName, gS_Map, sTrack);
Shavit_PrintToChat(param1, "%T (%s%s%s)", "ReplayDeleted", param1, gS_ChatStrings[sMessageStyle], gS_StyleStrings[style][sStyleName], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], sTrack, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(param1, "%T (%s%s%s)", "ReplayDeleted", param1, gS_ChatStrings.sStyle, gS_StyleStrings[style].sStyleName, gS_ChatStrings.sText, gS_ChatStrings.sVariable, sTrack, gS_ChatStrings.sText);
}
else
{
Shavit_PrintToChat(param1, "%T", "ReplayDeleteFailure", param1, gS_ChatStrings[sMessageStyle], gS_StyleStrings[style][sStyleName], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(param1, "%T", "ReplayDeleteFailure", param1, gS_ChatStrings.sStyle, gS_StyleStrings[style].sStyleName, gS_ChatStrings.sText);
}
}
@ -2118,14 +2126,14 @@ public int DeleteConfirmation_Callback(Menu menu, MenuAction action, int param1,
public Action Command_Replay(int client, int args)
{
if(!IsValidClient(client) || !gB_CentralBot || gA_CentralCache[iCentralClient] == -1)
if(!IsValidClient(client) || !gB_CentralBot || gA_CentralCache.iClient == -1)
{
return Plugin_Handled;
}
if(GetClientTeam(client) != 1 || GetSpectatorTarget(client) != gA_CentralCache[iCentralClient])
if(GetClientTeam(client) != 1 || GetSpectatorTarget(client) != gA_CentralCache.iClient)
{
Shavit_PrintToChat(client, "%T", "CentralReplaySpectator", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "CentralReplaySpectator", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText, gS_ChatStrings.sVariable, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -2214,7 +2222,7 @@ void OpenReplaySubMenu(int client, int track)
char sDisplay[64];
FormatEx(sDisplay, 64, "%T", "CentralReplayStop", client);
menu.AddItem("stop", sDisplay, (gA_CentralCache[iCentralReplayStatus] != Replay_Idle)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
menu.AddItem("stop", sDisplay, (gA_CentralCache.iReplayStatus != Replay_Idle)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
}
for(int i = 0; i < gI_Styles; i++)
@ -2236,12 +2244,12 @@ void OpenReplaySubMenu(int client, int track)
char sTime[32];
FormatSeconds(time, sTime, 32, false);
FormatEx(sDisplay, 64, "%s - %s", gS_StyleStrings[i][sStyleName], sTime);
FormatEx(sDisplay, 64, "%s - %s", gS_StyleStrings[i].sStyleName, sTime);
}
else
{
strcopy(sDisplay, 64, gS_StyleStrings[i][sStyleName]);
strcopy(sDisplay, 64, gS_StyleStrings[i].sStyleName);
}
menu.AddItem(sInfo, sDisplay, (view_as<int>(gA_FrameCache[i][track][0]) > 0)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
@ -2278,12 +2286,12 @@ public int MenuHandler_ReplaySubmenu(Menu menu, MenuAction action, int param1, i
int style = StringToInt(info);
if(style == -1 || !ReplayEnabled(style) || view_as<int>(gA_FrameCache[style][gI_Track[param1]][0]) == 0 || gA_CentralCache[iCentralClient] <= 0)
if(style == -1 || !ReplayEnabled(style) || view_as<int>(gA_FrameCache[style][gI_Track[param1]][0]) == 0 || gA_CentralCache.iClient <= 0)
{
return 0;
}
if(gA_CentralCache[iCentralReplayStatus] != Replay_Idle)
if(gA_CentralCache.iReplayStatus != Replay_Idle)
{
Shavit_PrintToChat(param1, "%T", "CentralReplayPlaying", param1);
@ -2293,16 +2301,16 @@ public int MenuHandler_ReplaySubmenu(Menu menu, MenuAction action, int param1, i
else
{
gI_ReplayTick[style] = 0;
gA_CentralCache[iCentralStyle] = style;
gA_CentralCache[iCentralTrack] = gI_Track[param1];
gI_ReplayBotClient[style] = gA_CentralCache[iCentralClient];
gRS_ReplayStatus[style] = gA_CentralCache[iCentralReplayStatus] = Replay_Start;
TeleportToStart(gA_CentralCache[iCentralClient], style, gI_Track[param1]);
gA_CentralCache.iStyle = style;
gA_CentralCache.iTrack = gI_Track[param1];
gI_ReplayBotClient[style] = gA_CentralCache.iClient;
gRS_ReplayStatus[style] = gA_CentralCache.iReplayStatus = Replay_Start;
TeleportToStart(gA_CentralCache.iClient, style, gI_Track[param1]);
gB_ForciblyStopped = false;
float time = GetReplayLength(gA_CentralCache[iCentralStyle], gI_Track[param1]);
float time = GetReplayLength(gA_CentralCache.iStyle, gI_Track[param1]);
UpdateReplayInfo(gA_CentralCache[iCentralClient], style, time, gI_Track[param1]);
UpdateReplayInfo(gA_CentralCache.iClient, style, time, gI_Track[param1]);
CreateTimer((gF_ReplayDelay / 2.0), Timer_StartReplay, style, TIMER_FLAG_NO_MAPCHANGE);
}
@ -2347,17 +2355,17 @@ void StopCentralReplay(int client)
Shavit_PrintToChat(client, "%T", "CentralReplayStopped", client);
}
int style = gA_CentralCache[iCentralStyle];
int style = gA_CentralCache.iStyle;
gRS_ReplayStatus[style] = gA_CentralCache[iCentralReplayStatus] = Replay_Idle;
gRS_ReplayStatus[style] = gA_CentralCache.iReplayStatus = Replay_Idle;
gI_ReplayTick[style] = 0;
gI_ReplayBotClient[style] = 0;
gF_StartTick[style] = -65535.0;
TeleportToStart(gA_CentralCache[iCentralClient], style, GetReplayTrack(gA_CentralCache[iCentralClient]));
gA_CentralCache[iCentralStyle] = 0;
TeleportToStart(gA_CentralCache.iClient, style, GetReplayTrack(gA_CentralCache.iClient));
gA_CentralCache.iStyle = 0;
gB_ForciblyStopped = true;
UpdateReplayInfo(client, 0, 0.0, gA_CentralCache[iCentralTrack]);
UpdateReplayInfo(client, 0, 0.0, gA_CentralCache.iTrack);
}
int GetReplayStyle(int client)
@ -2369,12 +2377,12 @@ int GetReplayStyle(int client)
if(gB_CentralBot)
{
if(gA_CentralCache[iCentralStyle] == -1)
if(gA_CentralCache.iStyle == -1)
{
return 0;
}
return gA_CentralCache[iCentralStyle];
return gA_CentralCache.iStyle;
}
for(int i = 0; i < gI_Styles; i++)
@ -2395,7 +2403,7 @@ int GetReplayTrack(int client)
return -1;
}
return (gB_CentralBot)? gA_CentralCache[iCentralTrack]:Track_Main;
return (gB_CentralBot)? gA_CentralCache.iTrack:Track_Main;
}
int GetSpectatorTarget(int client)

View File

@ -65,11 +65,11 @@ bool gB_MVPRankOnes_Main = true;
// timer settings
int gI_Styles = 0;
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
// chat settings
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
chatstrings_t gS_ChatStrings;
public Plugin myinfo =
{
@ -167,8 +167,8 @@ public void Shavit_OnStyleConfigLoaded(int styles)
for(int i = 0; i < styles; i++)
{
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i][sShortName], 128);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i].sShortName, sizeof(stylestrings_t::sShortName));
}
gI_Styles = styles;
@ -176,10 +176,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
public void Shavit_OnChatConfigLoaded()
{
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
{
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
}
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
Shavit_GetChatStrings(sMessageWarning, gS_ChatStrings.sWarning, sizeof(chatstrings_t::sWarning));
Shavit_GetChatStrings(sMessageVariable, gS_ChatStrings.sVariable, sizeof(chatstrings_t::sVariable));
Shavit_GetChatStrings(sMessageVariable2, gS_ChatStrings.sVariable2, sizeof(chatstrings_t::sVariable2));
Shavit_GetChatStrings(sMessageStyle, gS_ChatStrings.sStyle, sizeof(chatstrings_t::sStyle));
}
public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue)
@ -469,11 +471,13 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
FormatEx(sClearString, 128, "%T: %d/%d (%.01f%%)", "MapCompletions", client, iClears, iTotalMaps, ((float(iClears) / iTotalMaps) * 100.0));
Menu menu = new Menu(MenuHandler_ProfileHandler);
menu.SetTitle("%s's %T. %s\n%T: %s\n%s\n%s\n[%s] %T: %d%s\n", gS_TargetName[client], "Profile", client, gS_TargetAuth[client], "Country", client, sCountry, sLastLogin, sClearString, gS_StyleStrings[0][sStyleName], "WorldRecords", client, iWRs, sRankingString);
menu.SetTitle("%s's %T. %s\n%T: %s\n%s\n%s\n[%s] %T: %d%s\n",
gS_TargetName[client], "Profile", client, gS_TargetAuth[client], "Country", client, sCountry, sLastLogin, sClearString,
gS_StyleStrings[0].sStyleName, "WorldRecords", client, iWRs, sRankingString);
for(int i = 0; i < gI_Styles; i++)
{
if(gA_StyleSettings[i][bUnranked])
if(gA_StyleSettings[i].bUnranked)
{
continue;
}
@ -481,7 +485,7 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
char sInfo[4];
IntToString(i, sInfo, 4);
menu.AddItem(sInfo, gS_StyleStrings[i][sStyleName]);
menu.AddItem(sInfo, gS_StyleStrings[i].sStyleName);
}
// should NEVER happen
@ -498,7 +502,7 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
else
{
Shavit_PrintToChat(client, "%T", "StatsMenuFailure", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "StatsMenuFailure", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
}
}
@ -512,7 +516,7 @@ public int MenuHandler_ProfileHandler(Menu menu, MenuAction action, int param1,
gBS_Style[param1] = StringToInt(sInfo);
Menu submenu = new Menu(MenuHandler_TypeHandler);
submenu.SetTitle("%T", "MapsMenu", param1, gS_StyleStrings[gBS_Style[param1]][sShortName]);
submenu.SetTitle("%T", "MapsMenu", param1, gS_StyleStrings[gBS_Style[param1]].sShortName);
for(int j = 0; j < TRACKS_SIZE; j++)
{
@ -636,12 +640,12 @@ public void ShowMapsCallback(Database db, DBResultSet results, const char[] erro
if(gI_MapType[client] == MAPSDONE)
{
menu.SetTitle("%T (%s)", "MapsDoneFor", client, gS_StyleStrings[gBS_Style[client]][sShortName], gS_TargetName[client], rows, sTrack);
menu.SetTitle("%T (%s)", "MapsDoneFor", client, gS_StyleStrings[gBS_Style[client]].sShortName, gS_TargetName[client], rows, sTrack);
}
else
{
menu.SetTitle("%T (%s)", "MapsLeftFor", client, gS_StyleStrings[gBS_Style[client]][sShortName], gS_TargetName[client], rows, sTrack);
menu.SetTitle("%T (%s)", "MapsLeftFor", client, gS_StyleStrings[gBS_Style[client]].sShortName, gS_TargetName[client], rows, sTrack);
}
while(results.FetchRow())
@ -773,7 +777,7 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
// 3 - style
int style = results.FetchInt(3);
FormatEx(sDisplay, 128, "%T: %s", "Style", client, gS_StyleStrings[style][sStyleName]);
FormatEx(sDisplay, 128, "%T: %s", "Style", client, gS_StyleStrings[style].sStyleName);
menu.AddItem("-1", sDisplay);
// 4 - steamid3

View File

@ -79,11 +79,11 @@ int gI_RecentLimit = 50;
// timer settings
int gI_Styles = 0;
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
// chat settings
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
chatstrings_t gS_ChatStrings;
public Plugin myinfo =
{
@ -384,8 +384,8 @@ public void Shavit_OnStyleConfigLoaded(int styles)
for(int i = 0; i < styles; i++)
{
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i][sShortName], 128);
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i].sShortName, sizeof(stylestrings_t::sShortName));
}
// arrays
@ -416,10 +416,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
public void Shavit_OnChatConfigLoaded()
{
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
{
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
}
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
Shavit_GetChatStrings(sMessageWarning, gS_ChatStrings.sWarning, sizeof(chatstrings_t::sWarning));
Shavit_GetChatStrings(sMessageVariable, gS_ChatStrings.sVariable, sizeof(chatstrings_t::sVariable));
Shavit_GetChatStrings(sMessageVariable2, gS_ChatStrings.sVariable2, sizeof(chatstrings_t::sVariable2));
Shavit_GetChatStrings(sMessageStyle, gS_ChatStrings.sStyle, sizeof(chatstrings_t::sStyle));
}
public void OnClientPutInServer(int client)
@ -534,7 +536,7 @@ public void SQL_UpdateWRCache_Callback(Database db, DBResultSet results, const c
{
int style = results.FetchInt(0);
if(style >= gI_Styles || style < 0 || gA_StyleSettings[style][bUnranked])
if(style >= gI_Styles || style < 0 || gA_StyleSettings[style].bUnranked)
{
continue;
}
@ -745,7 +747,7 @@ void DeleteSubmenu(int client)
IntToString(i, sInfo, 8);
char sDisplay[64];
FormatEx(sDisplay, 64, "%s (%T: %d)", gS_StyleStrings[i][sStyleName], "WRRecord", client, gI_RecordAmount[i][gI_LastTrack[client]]);
FormatEx(sDisplay, 64, "%s (%T: %d)", gS_StyleStrings[i].sStyleName, "WRRecord", client, gI_RecordAmount[i][gI_LastTrack[client]]);
menu.AddItem(sInfo, sDisplay, (gI_RecordAmount[i][gI_LastTrack[client]] > 0)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
}
@ -881,7 +883,7 @@ public Action Command_DeleteStyleRecords(int client, int args)
for(int i = 0; i < gI_Styles; i++)
{
if(gA_StyleSettings[i][bUnranked])
if(gA_StyleSettings[i].bUnranked)
{
continue;
}
@ -890,7 +892,7 @@ public Action Command_DeleteStyleRecords(int client, int args)
IntToString(i, sInfo, 8);
char sDisplay[64];
FormatEx(sDisplay, 64, "%s (%d %T)", gS_StyleStrings[i][sStyleName], gI_RecordAmount[i], "WRRecord", client);
FormatEx(sDisplay, 64, "%s (%d %T)", gS_StyleStrings[i].sStyleName, gI_RecordAmount[i], "WRRecord", client);
int iTotalAmount = 0;
@ -938,7 +940,7 @@ public int MenuHandler_DeleteStyleRecords(Menu menu, MenuAction action, int para
char sMenuItem[128];
Menu submenu = new Menu(MenuHandler_DeleteStyleRecords_Confirm);
submenu.SetTitle("%T\n ", "DeleteConfirmStyle", param1, gS_StyleStrings[style][sStyleName]);
submenu.SetTitle("%T\n ", "DeleteConfirmStyle", param1, gS_StyleStrings[style].sStyleName);
for(int i = 1; i <= GetRandomInt(1, 4); i++)
{
@ -946,7 +948,7 @@ public int MenuHandler_DeleteStyleRecords(Menu menu, MenuAction action, int para
submenu.AddItem("-1", sMenuItem);
}
FormatEx(sMenuItem, 128, "%T", "MenuResponseYesStyle", param1, gS_StyleStrings[style][sStyleName]);
FormatEx(sMenuItem, 128, "%T", "MenuResponseYesStyle", param1, gS_StyleStrings[style].sStyleName);
IntToString(style, info, 16);
submenu.AddItem(info, sMenuItem);
@ -985,7 +987,7 @@ public int MenuHandler_DeleteStyleRecords_Confirm(Menu menu, MenuAction action,
return 0;
}
Shavit_LogMessage("%L - deleted all %s style records from map `%s`.", param1, gS_StyleStrings[style][sStyleName], gS_Map);
Shavit_LogMessage("%L - deleted all %s style records from map `%s`.", param1, gS_StyleStrings[style].sStyleName, gS_Map);
char sQuery[256];
FormatEx(sQuery, 256, "DELETE FROM %splayertimes WHERE map = '%s' AND style = %d;", gS_MySQLPrefix, gS_Map, style);
@ -1033,7 +1035,7 @@ public void DeleteStyleRecords_Callback(Database db, DBResultSet results, const
return;
}
Shavit_PrintToChat(client, "%T", "DeletedRecordsStyle", client, gS_ChatStrings[sMessageStyle], gS_StyleStrings[style][sStyleName], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "DeletedRecordsStyle", client, gS_ChatStrings.sStyle, gS_StyleStrings[style].sStyleName, gS_ChatStrings.sText);
}
public int MenuHandler_Delete(Menu menu, MenuAction action, int param1, int param2)
@ -1088,7 +1090,7 @@ public void SQL_OpenDelete_Callback(Database db, DBResultSet results, const char
}
Menu menu = new Menu(OpenDelete_Handler);
menu.SetTitle("%t", "ListClientRecords", gS_Map, gS_StyleStrings[style][sStyleName]);
menu.SetTitle("%t", "ListClientRecords", gS_Map, gS_StyleStrings[style].sStyleName);
int iCount = 0;
@ -1199,7 +1201,7 @@ public int DeleteConfirm_Handler(Menu menu, MenuAction action, int param1, int p
for(int i = 0; i < gI_Styles; i++)
{
if(gA_StyleSettings[i][bUnranked])
if(gA_StyleSettings[i].bUnranked)
{
continue;
}
@ -1287,7 +1289,7 @@ public void DeleteAll_Callback(Database db, DBResultSet results, const char[] er
for(int i = 0; i < gI_Styles; i++)
{
if(gA_StyleSettings[i][bUnranked])
if(gA_StyleSettings[i].bUnranked)
{
continue;
}
@ -1299,7 +1301,7 @@ public void DeleteAll_Callback(Database db, DBResultSet results, const char[] er
Call_Finish();
}
Shavit_PrintToChat(client, "%T", "DeletedRecordsMap", client, gS_ChatStrings[sMessageVariable], gS_Map, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "DeletedRecordsMap", client, gS_ChatStrings.sVariable, gS_Map, gS_ChatStrings.sText);
}
public Action Command_WorldRecord(int client, int args)
@ -1353,7 +1355,7 @@ Action ShowWRStyleMenu(int client, int track)
for(int i = 0; i < gI_Styles; i++)
{
if(gA_StyleSettings[i][bUnranked])
if(gA_StyleSettings[i].bUnranked)
{
continue;
}
@ -1368,12 +1370,12 @@ Action ShowWRStyleMenu(int client, int track)
char sTime[32];
FormatSeconds(gF_WRTime[i][track], sTime, 32, false);
FormatEx(sDisplay, 64, "%s - WR: %s", gS_StyleStrings[i][sStyleName], sTime);
FormatEx(sDisplay, 64, "%s - WR: %s", gS_StyleStrings[i].sStyleName, sTime);
}
else
{
strcopy(sDisplay, 64, gS_StyleStrings[i][sStyleName]);
strcopy(sDisplay, 64, gS_StyleStrings[i].sStyleName);
}
menu.AddItem(sInfo, sDisplay, (gI_RecordAmount[i][track] > 0 || !StrEqual(gS_ClientMap[client], gS_Map))? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
@ -1409,7 +1411,7 @@ public int MenuHandler_StyleChooser(Menu menu, MenuAction action, int param1, in
if(iStyle == -1)
{
Shavit_PrintToChat(param1, "%T", "NoStyles", param1, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(param1, "%T", "NoStyles", param1, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return 0;
}
@ -1654,12 +1656,12 @@ public void SQL_RR_Callback(Database db, DBResultSet results, const char[] error
if(gB_Rankings && fPoints > 0.0)
{
FormatEx(sDisplay, 192, "[%s, %c] %s - %s @ %s (%.03f %T)", gS_StyleStrings[style][sShortName], sTrack[0], sMap, sName, sTime, fPoints, "WRPoints", client);
FormatEx(sDisplay, 192, "[%s, %c] %s - %s @ %s (%.03f %T)", gS_StyleStrings[style].sShortName, sTrack[0], sMap, sName, sTime, fPoints, "WRPoints", client);
}
else
{
FormatEx(sDisplay, 192, "[%s, %c] %s - %s @ %s (%d %T)", gS_StyleStrings[style][sShortName], sTrack[0], sMap, sName, sTime, jumps, "WRJumps", client);
FormatEx(sDisplay, 192, "[%s, %c] %s - %s @ %s (%d %T)", gS_StyleStrings[style].sShortName, sTrack[0], sMap, sName, sTime, jumps, "WRJumps", client);
}
char sInfo[192];
@ -1773,7 +1775,7 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
int jumps = results.FetchInt(2);
float perfs = results.FetchFloat(9);
if(gA_StyleSettings[style][bAutobhop] && perfs > 0.0)
if(gA_StyleSettings[style].bAutobhop && perfs > 0.0)
{
FormatEx(sDisplay, 128, "%T: %d", "WRJumps", client, jumps);
}
@ -1786,7 +1788,7 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
menu.AddItem("-1", sDisplay);
// 3 - style
FormatEx(sDisplay, 128, "%T: %s", "WRStyle", client, gS_StyleStrings[style][sStyleName]);
FormatEx(sDisplay, 128, "%T: %s", "WRStyle", client, gS_StyleStrings[style].sStyleName);
menu.AddItem("-1", sDisplay);
// 6 - map
@ -2155,7 +2157,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
// 2 - update
int overwrite = 0;
if(gA_StyleSettings[style][bUnranked] || Shavit_IsPracticeMode(client))
if(gA_StyleSettings[style].bUnranked || Shavit_IsPracticeMode(client))
{
overwrite = 0; // ugly way of not writing to database
}
@ -2221,7 +2223,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
FormatSeconds(fDifference, sDifference, 16, true);
char sSync[32]; // 32 because colors
FormatEx(sSync, 32, (sync != -1.0)? " @ %s%.02f%%":"", gS_ChatStrings[sMessageVariable], sync);
FormatEx(sSync, 32, (sync != -1.0)? " @ %s%.02f%%":"", gS_ChatStrings.sVariable, sync);
if(overwrite > 0)
{
@ -2232,7 +2234,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
if(overwrite == 1) // insert
{
Shavit_PrintToChatAll("%s[%s]%s %T", gS_ChatStrings[sMessageVariable], sTrack, gS_ChatStrings[sMessageText], "FirstCompletion", LANG_SERVER, gS_ChatStrings[sMessageVariable2], client, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageStyle], gS_StyleStrings[style][sStyleName], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable2], sTime, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], iRank, gS_ChatStrings[sMessageText], jumps, strafes, sSync, gS_ChatStrings[sMessageText]);
Shavit_PrintToChatAll("%s[%s]%s %T", gS_ChatStrings.sVariable, sTrack, gS_ChatStrings.sText, "FirstCompletion", LANG_SERVER, gS_ChatStrings.sVariable2, client, gS_ChatStrings.sText, gS_ChatStrings.sStyle, gS_StyleStrings[style].sStyleName, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, sTime, gS_ChatStrings.sText, gS_ChatStrings.sVariable, iRank, gS_ChatStrings.sText, jumps, strafes, sSync, gS_ChatStrings.sText);
if(gH_SQL == null)
{
@ -2244,7 +2246,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
else // update
{
Shavit_PrintToChatAll("%s[%s]%s %T", gS_ChatStrings[sMessageVariable], sTrack, gS_ChatStrings[sMessageText], "NotFirstCompletion", LANG_SERVER, gS_ChatStrings[sMessageVariable2], client, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageStyle], gS_StyleStrings[style][sStyleName], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable2], sTime, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable], iRank, gS_ChatStrings[sMessageText], jumps, strafes, sSync, gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageWarning], sDifference);
Shavit_PrintToChatAll("%s[%s]%s %T", gS_ChatStrings.sVariable, sTrack, gS_ChatStrings.sText, "NotFirstCompletion", LANG_SERVER, gS_ChatStrings.sVariable2, client, gS_ChatStrings.sText, gS_ChatStrings.sStyle, gS_StyleStrings[style].sStyleName, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, sTime, gS_ChatStrings.sText, gS_ChatStrings.sVariable, iRank, gS_ChatStrings.sText, jumps, strafes, sSync, gS_ChatStrings.sText, gS_ChatStrings.sWarning, sDifference);
FormatEx(sQuery, 512, "UPDATE %splayertimes SET time = %.03f, jumps = %d, date = %d, strafes = %d, sync = %.02f, points = 0.0, perfs = %.2f WHERE map = '%s' AND auth = '%s' AND style = %d AND track = %d;", gS_MySQLPrefix, time, jumps, GetTime(), strafes, sync, perfs, gS_Map, sAuthID, style, track);
}
@ -2268,14 +2270,14 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
gF_PlayerRecord[client][style][track] = time;
}
else if(overwrite == 0 && !gA_StyleSettings[style][bUnranked])
else if(overwrite == 0 && !gA_StyleSettings[style].bUnranked)
{
Shavit_PrintToChat(client, "%s[%s]%s %T", gS_ChatStrings[sMessageVariable], sTrack, gS_ChatStrings[sMessageText], "WorseTime", client, gS_ChatStrings[sMessageStyle], gS_StyleStrings[style][sStyleName], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable2], sTime, gS_ChatStrings[sMessageText], jumps, strafes, sSync, gS_ChatStrings[sMessageText], sDifference);
Shavit_PrintToChat(client, "%s[%s]%s %T", gS_ChatStrings.sVariable, sTrack, gS_ChatStrings.sText, "WorseTime", client, gS_ChatStrings.sStyle, gS_StyleStrings[style].sStyleName, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, sTime, gS_ChatStrings.sText, jumps, strafes, sSync, gS_ChatStrings.sText, sDifference);
}
else
{
Shavit_PrintToChat(client, "%s[%s]%s] %T", gS_ChatStrings[sMessageVariable], sTrack, gS_ChatStrings[sMessageText], "UnrankedTime", client, gS_ChatStrings[sMessageStyle], gS_StyleStrings[style][sStyleName], gS_ChatStrings[sMessageText], gS_ChatStrings[sMessageVariable2], sTime, gS_ChatStrings[sMessageText], jumps, strafes, sSync, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%s[%s]%s] %T", gS_ChatStrings.sVariable, sTrack, gS_ChatStrings.sText, "UnrankedTime", client, gS_ChatStrings.sStyle, gS_StyleStrings[style].sStyleName, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, sTime, gS_ChatStrings.sText, jumps, strafes, sSync, gS_ChatStrings.sText);
}
}
@ -2329,7 +2331,7 @@ public void SQL_UpdateLeaderboards_Callback(Database db, DBResultSet results, co
int style = results.FetchInt(0);
int track = results.FetchInt(2);
if(style >= gI_Styles || gA_StyleSettings[style][bUnranked] || track >= TRACKS_SIZE)
if(style >= gI_Styles || gA_StyleSettings[style].bUnranked || track >= TRACKS_SIZE)
{
continue;
}
@ -2339,7 +2341,7 @@ public void SQL_UpdateLeaderboards_Callback(Database db, DBResultSet results, co
for(int i = 0; i < gI_Styles; i++)
{
if(i >= gI_Styles || gA_StyleSettings[i][bUnranked])
if(i >= gI_Styles || gA_StyleSettings[i].bUnranked)
{
continue;
}

View File

@ -57,16 +57,24 @@ char gS_ZoneNames[][] =
"Slide Zone" // allows players to slide, in order to fix parts like the 5th stage of bhop_arcane
};
enum
enum struct zone_cache_t
{
bVisible,
iRed,
iGreen,
iBlue,
iAlpha,
fWidth,
bFlatZone,
ZONESETTINGS_SIZE
bool bZoneInitialized;
int iZoneType;
int iZoneTrack; // 0 - main, 1 - bonus
int iEntityID;
int iDatabaseID;
}
enum struct zone_settings_t
{
bool bVisible;
int iRed;
int iGreen;
int iBlue;
int iAlpha;
float fWidth;
bool bFlatZone;
}
int gI_ZoneType[MAXPLAYERS+1];
@ -96,8 +104,8 @@ int gI_ZoneTrack[MAXPLAYERS+1];
int gI_ZoneDatabaseID[MAXPLAYERS+1];
// zone cache
any gA_ZoneSettings[ZONETYPES_SIZE][TRACKS_SIZE][ZONESETTINGS_SIZE];
any gA_ZoneCache[MAX_ZONES][ZONECACHE_SIZE]; // Vectors will not be inside this array.
zone_settings_t gA_ZoneSettings[ZONETYPES_SIZE][TRACKS_SIZE];
zone_cache_t gA_ZoneCache[MAX_ZONES]; // Vectors will not be inside this array.
int gI_MapZones = 0;
float gV_MapZones[MAX_ZONES][2][3];
float gV_MapZones_Visual[MAX_ZONES][8][3];
@ -143,7 +151,7 @@ Handle gH_DrawEverything = null;
char gS_MySQLPrefix[32];
// chat settings
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
chatstrings_t gS_ChatStrings;
// forwards
Handle gH_Forwards_EnterZone = null;
@ -261,13 +269,13 @@ public void OnPluginStart()
{
for(int j = 0; j < TRACKS_SIZE; j++)
{
gA_ZoneSettings[i][j][bVisible] = true;
gA_ZoneSettings[i][j][iRed] = 255;
gA_ZoneSettings[i][j][iGreen] = 255;
gA_ZoneSettings[i][j][iBlue] = 255;
gA_ZoneSettings[i][j][iAlpha] = 255;
gA_ZoneSettings[i][j][fWidth] = 2.0;
gA_ZoneSettings[i][j][bFlatZone] = false;
gA_ZoneSettings[i][j].bVisible = true;
gA_ZoneSettings[i][j].iRed = 255;
gA_ZoneSettings[i][j].iGreen = 255;
gA_ZoneSettings[i][j].iBlue = 255;
gA_ZoneSettings[i][j].iAlpha = 255;
gA_ZoneSettings[i][j].fWidth = 2.0;
gA_ZoneSettings[i][j].bFlatZone = false;
}
}
@ -302,7 +310,7 @@ public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] n
{
for(int i = 0; i < gI_MapZones; i++)
{
if(!gA_ZoneCache[i][bZoneInitialized])
if(!gA_ZoneCache[i].bZoneInitialized)
{
continue;
}
@ -545,13 +553,13 @@ bool LoadZonesConfig()
int index = (i % ZONETYPES_SIZE);
gA_ZoneSettings[index][track][bVisible] = view_as<bool>(kv.GetNum("visible", 1));
gA_ZoneSettings[index][track][iRed] = kv.GetNum("red", 255);
gA_ZoneSettings[index][track][iGreen] = kv.GetNum("green", 255);
gA_ZoneSettings[index][track][iBlue] = kv.GetNum("blue", 255);
gA_ZoneSettings[index][track][iAlpha] = kv.GetNum("alpha", 255);
gA_ZoneSettings[index][track][fWidth] = kv.GetFloat("width", 2.0);
gA_ZoneSettings[index][track][bFlatZone] = view_as<bool>(kv.GetNum("flat", false));
gA_ZoneSettings[index][track].bVisible = view_as<bool>(kv.GetNum("visible", 1));
gA_ZoneSettings[index][track].iRed = kv.GetNum("red", 255);
gA_ZoneSettings[index][track].iGreen = kv.GetNum("green", 255);
gA_ZoneSettings[index][track].iBlue = kv.GetNum("blue", 255);
gA_ZoneSettings[index][track].iAlpha = kv.GetNum("alpha", 255);
gA_ZoneSettings[index][track].fWidth = kv.GetFloat("width", 2.0);
gA_ZoneSettings[index][track].bFlatZone = view_as<bool>(kv.GetNum("flat", false));
i++;
}
@ -758,10 +766,12 @@ public void Frame_HookTrigger(any data)
public void Shavit_OnChatConfigLoaded()
{
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
{
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
}
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
Shavit_GetChatStrings(sMessageWarning, gS_ChatStrings.sWarning, sizeof(chatstrings_t::sWarning));
Shavit_GetChatStrings(sMessageVariable, gS_ChatStrings.sVariable, sizeof(chatstrings_t::sVariable));
Shavit_GetChatStrings(sMessageVariable2, gS_ChatStrings.sVariable2, sizeof(chatstrings_t::sVariable2));
Shavit_GetChatStrings(sMessageStyle, gS_ChatStrings.sStyle, sizeof(chatstrings_t::sStyle));
}
void ClearZone(int index)
@ -774,11 +784,11 @@ void ClearZone(int index)
gV_ZoneCenter[index][i] = 0.0;
}
gA_ZoneCache[index][bZoneInitialized] = false;
gA_ZoneCache[index][iZoneType] = -1;
gA_ZoneCache[index][iZoneTrack] = -1;
gA_ZoneCache[index][iEntityID] = -1;
gA_ZoneCache[index][iDatabaseID] = -1;
gA_ZoneCache[index].bZoneInitialized = false;
gA_ZoneCache[index].iZoneType = -1;
gA_ZoneCache[index].iZoneTrack = -1;
gA_ZoneCache[index].iEntityID = -1;
gA_ZoneCache[index].iDatabaseID = -1;
}
void UnhookEntity(int entity)
@ -790,7 +800,7 @@ void UnhookEntity(int entity)
void KillZoneEntity(int index)
{
int entity = gA_ZoneCache[index][iEntityID];
int entity = gA_ZoneCache[index].iEntityID;
if(entity > MaxClients && IsValidEntity(entity))
{
@ -798,7 +808,7 @@ void KillZoneEntity(int index)
{
for(int j = 0; j < TRACKS_SIZE; j++)
{
gB_InsideZone[i][gA_ZoneCache[index][iZoneType]][j] = false;
gB_InsideZone[i][gA_ZoneCache[index].iZoneType][j] = false;
}
gB_InsideZoneID[i][index] = false;
@ -829,7 +839,7 @@ void UnloadZones(int zone)
{
for(int i = 0; i < MAX_ZONES; i++)
{
if((zone == 0 || gA_ZoneCache[i][iZoneType] == zone) && gA_ZoneCache[i][bZoneInitialized])
if((zone == 0 || gA_ZoneCache[i].iZoneType == zone) && gA_ZoneCache[i].bZoneInitialized)
{
KillZoneEntity(i);
ClearZone(i);
@ -914,11 +924,11 @@ public void SQL_RefreshZones_Callback(Database db, DBResultSet results, const ch
gV_Destinations[gI_MapZones][2] = results.FetchFloat(9);
}
gA_ZoneCache[gI_MapZones][bZoneInitialized] = true;
gA_ZoneCache[gI_MapZones][iZoneType] = type;
gA_ZoneCache[gI_MapZones][iZoneTrack] = results.FetchInt(10);
gA_ZoneCache[gI_MapZones][iDatabaseID] = results.FetchInt(11);
gA_ZoneCache[gI_MapZones][iEntityID] = -1;
gA_ZoneCache[gI_MapZones].bZoneInitialized = true;
gA_ZoneCache[gI_MapZones].iZoneType = type;
gA_ZoneCache[gI_MapZones].iZoneTrack = results.FetchInt(10);
gA_ZoneCache[gI_MapZones].iDatabaseID = results.FetchInt(11);
gA_ZoneCache[gI_MapZones].iEntityID = -1;
gI_MapZones++;
}
@ -979,7 +989,7 @@ public Action Command_Modifier(int client, int args)
gF_Modifier[client] = fArg1;
Shavit_PrintToChat(client, "%T %s%.01f%s.", "ModifierSet", client, gS_ChatStrings[sMessageVariable], fArg1, gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T %s%.01f%s.", "ModifierSet", client, gS_ChatStrings.sVariable, fArg1, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -1096,7 +1106,7 @@ public Action Command_Zones(int client, int args)
if(!IsPlayerAlive(client))
{
Shavit_PrintToChat(client, "%T", "ZonesCommand", client, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "ZonesCommand", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}
@ -1136,7 +1146,7 @@ Action OpenEditMenu(int client)
for(int i = 0; i < sizeof(gS_ZoneNames); i++)
{
if(!gA_ZoneCache[i][bZoneInitialized])
if(!gA_ZoneCache[i].bZoneInitialized)
{
continue;
}
@ -1145,9 +1155,9 @@ Action OpenEditMenu(int client)
IntToString(i, sInfo, 8);
char sTrack[32];
GetTrackName(client, gA_ZoneCache[i][iZoneTrack], sTrack, 32);
GetTrackName(client, gA_ZoneCache[i].iZoneTrack, sTrack, 32);
FormatEx(sDisplay, 64, "#%d - %s (%s)", (i + 1), gS_ZoneNames[gA_ZoneCache[i][iZoneType]], sTrack);
FormatEx(sDisplay, 64, "#%d - %s (%s)", (i + 1), gS_ZoneNames[gA_ZoneCache[i].iZoneType], sTrack);
if(gB_InsideZoneID[client][i])
{
@ -1196,13 +1206,13 @@ public int ZoneEdit_MenuHandler(Menu menu, MenuAction action, int param1, int pa
gI_MapStep[param1] = 3;
gV_Point1[param1] = gV_MapZones[id][0];
gV_Point2[param1] = gV_MapZones[id][1];
gI_ZoneType[param1] = gA_ZoneCache[id][iZoneType];
gI_ZoneTrack[param1] = gA_ZoneCache[id][iZoneTrack];
gI_ZoneType[param1] = gA_ZoneCache[id].iZoneType;
gI_ZoneTrack[param1] = gA_ZoneCache[id].iZoneTrack;
gV_Teleport[param1] = gV_Destinations[id];
gI_ZoneDatabaseID[param1] = gA_ZoneCache[id][iDatabaseID];
gI_ZoneDatabaseID[param1] = gA_ZoneCache[id].iDatabaseID;
// to stop the original zone from drawing
gA_ZoneCache[id][bZoneInitialized] = false;
gA_ZoneCache[id].bZoneInitialized = false;
// draw the zone edit
CreateTimer(0.1, Timer_Draw, GetClientSerial(param1), TIMER_REPEAT);
@ -1241,12 +1251,12 @@ Action OpenDeleteMenu(int client)
for(int i = 0; i < gI_MapZones; i++)
{
if(gA_ZoneCache[i][bZoneInitialized])
if(gA_ZoneCache[i].bZoneInitialized)
{
char sTrack[32];
GetTrackName(client, gA_ZoneCache[i][iZoneTrack], sTrack, 32);
GetTrackName(client, gA_ZoneCache[i].iZoneTrack, sTrack, 32);
FormatEx(sDisplay, 64, "#%d - %s (%s)", (i + 1), gS_ZoneNames[gA_ZoneCache[i][iZoneType]], sTrack);
FormatEx(sDisplay, 64, "#%d - %s (%s)", (i + 1), gS_ZoneNames[gA_ZoneCache[i].iZoneType], sTrack);
char sInfo[8];
IntToString(i, sInfo, 8);
@ -1296,14 +1306,14 @@ public int DeleteZone_MenuHandler(Menu menu, MenuAction action, int param1, int
default:
{
Shavit_LogMessage("%L - deleted %s (id %d) from map `%s`.", param1, gS_ZoneNames[gA_ZoneCache[id][iZoneType]], gA_ZoneCache[id][iDatabaseID], gS_Map);
Shavit_LogMessage("%L - deleted %s (id %d) from map `%s`.", param1, gS_ZoneNames[gA_ZoneCache[id].iZoneType], gA_ZoneCache[id].iDatabaseID, gS_Map);
char sQuery[256];
FormatEx(sQuery, 256, "DELETE FROM %smapzones WHERE %s = %d;", gS_MySQLPrefix, (gB_MySQL)? "id":"rowid", gA_ZoneCache[id][iDatabaseID]);
FormatEx(sQuery, 256, "DELETE FROM %smapzones WHERE %s = %d;", gS_MySQLPrefix, (gB_MySQL)? "id":"rowid", gA_ZoneCache[id].iDatabaseID);
DataPack hDatapack = new DataPack();
hDatapack.WriteCell(GetClientSerial(param1));
hDatapack.WriteCell(gA_ZoneCache[id][iZoneType]);
hDatapack.WriteCell(gA_ZoneCache[id].iZoneType);
gH_SQL.Query(SQL_DeleteZone_Callback, sQuery, hDatapack);
}
@ -1341,7 +1351,7 @@ public void SQL_DeleteZone_Callback(Database db, DBResultSet results, const char
return;
}
Shavit_PrintToChat(client, "%T", "ZoneDeleteSuccessful", client, gS_ChatStrings[sMessageVariable], gS_ZoneNames[type], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(client, "%T", "ZoneDeleteSuccessful", client, gS_ChatStrings.sVariable, gS_ZoneNames[type], gS_ChatStrings.sText);
}
public Action Command_DeleteAllZones(int client, int args)
@ -1656,7 +1666,7 @@ public bool TraceFilter_World(int entity, int contentsMask)
return (entity == 0);
}
public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, any stylesettings[STYLESETTINGS_SIZE])
public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float vel[3], float angles[3], TimerStatus status, int track, int style, stylesettings_t stylesettings)
{
if(gI_MapStep[client] > 0 && gI_MapStep[client] != 3)
{
@ -1949,7 +1959,7 @@ public int ZoneAdjuster_Handler(Menu menu, MenuAction action, int param1, int pa
bool bIncrease = view_as<bool>(StringToInt(sExploded[2]) == 1);
((iPoint == 1)? gV_Point1:gV_Point2)[param1][iAxis] += ((bIncrease)? gF_Modifier[param1]:-gF_Modifier[param1]);
Shavit_PrintToChat(param1, "%T", (bIncrease)? "ZoneSizeIncrease":"ZoneSizeDecrease", param1, gS_ChatStrings[sMessageVariable2], sAxis[iAxis], gS_ChatStrings[sMessageText], iPoint, gS_ChatStrings[sMessageVariable], gF_Modifier[param1], gS_ChatStrings[sMessageText]);
Shavit_PrintToChat(param1, "%T", (bIncrease)? "ZoneSizeIncrease":"ZoneSizeDecrease", param1, gS_ChatStrings.sVariable2, sAxis[iAxis], gS_ChatStrings.sText, iPoint, gS_ChatStrings.sVariable, gF_Modifier[param1], gS_ChatStrings.sText);
CreateAdjustMenu(param1, GetMenuSelectionPosition());
}
@ -1994,9 +2004,9 @@ void InsertZone(int client)
{
for(int i = 0; i < gI_MapZones; i++)
{
if(gA_ZoneCache[i][bZoneInitialized] && gA_ZoneCache[i][iZoneType] == type && gA_ZoneCache[i][iZoneTrack] == gI_ZoneTrack[client])
if(gA_ZoneCache[i].bZoneInitialized && gA_ZoneCache[i].iZoneType == type && gA_ZoneCache[i].iZoneTrack == gI_ZoneTrack[client])
{
gI_ZoneDatabaseID[client] = gA_ZoneCache[i][iDatabaseID];
gI_ZoneDatabaseID[client] = gA_ZoneCache[i].iDatabaseID;
}
}
}
@ -2051,18 +2061,18 @@ public Action Timer_DrawEverything(Handle Timer)
for(int i = iCycle; i < gI_MapZones; i++)
{
if(gA_ZoneCache[i][bZoneInitialized])
if(gA_ZoneCache[i].bZoneInitialized)
{
int type = gA_ZoneCache[i][iZoneType];
int track = gA_ZoneCache[i][iZoneTrack];
int type = gA_ZoneCache[i].iZoneType;
int track = gA_ZoneCache[i].iZoneTrack;
if(gA_ZoneSettings[type][track][bVisible])
if(gA_ZoneSettings[type][track].bVisible)
{
DrawZone(gV_MapZones_Visual[i],
GetZoneColors(type, track),
RoundToCeil(float(gI_MapZones) / iMaxZonesPerFrame) * gF_Interval,
gA_ZoneSettings[type][track][fWidth],
gA_ZoneSettings[type][track][bFlatZone],
gA_ZoneSettings[type][track].fWidth,
gA_ZoneSettings[type][track].bFlatZone,
gV_ZoneCenter[i]);
}
}
@ -2081,10 +2091,10 @@ public Action Timer_DrawEverything(Handle Timer)
int[] GetZoneColors(int type, int track, int customalpha = 0)
{
int colors[4];
colors[0] = gA_ZoneSettings[type][track][iRed];
colors[1] = gA_ZoneSettings[type][track][iGreen];
colors[2] = gA_ZoneSettings[type][track][iBlue];
colors[3] = (customalpha > 0)? customalpha:gA_ZoneSettings[type][track][iAlpha];
colors[0] = gA_ZoneSettings[type][track].iRed;
colors[1] = gA_ZoneSettings[type][track].iGreen;
colors[2] = gA_ZoneSettings[type][track].iBlue;
colors[3] = (customalpha > 0)? customalpha:gA_ZoneSettings[type][track].iAlpha;
return colors;
}
@ -2143,7 +2153,7 @@ public Action Timer_Draw(Handle Timer, any data)
int type = gI_ZoneType[client];
int track = gI_ZoneTrack[client];
DrawZone(points, GetZoneColors(type, track, 125), 0.1, gA_ZoneSettings[type][track][fWidth], false, origin);
DrawZone(points, GetZoneColors(type, track, 125), 0.1, gA_ZoneSettings[type][track].fWidth, false, origin);
if(gI_ZoneType[client] == Zone_Teleport && !EmptyVector(gV_Teleport[client]))
{
@ -2503,7 +2513,7 @@ int GetZoneIndex(int type, int track, int start = 0)
for(int i = start; i < gI_MapZones; i++)
{
if(gA_ZoneCache[i][bZoneInitialized] && gA_ZoneCache[i][iZoneType] == type && (gA_ZoneCache[i][iZoneTrack] == track || track == -1))
if(gA_ZoneCache[i].bZoneInitialized && gA_ZoneCache[i].iZoneType == type && (gA_ZoneCache[i].iZoneTrack == track || track == -1))
{
return i;
}
@ -2558,20 +2568,20 @@ public void CreateZoneEntities()
{
for(int k = 0; k < TRACKS_SIZE; k++)
{
gB_InsideZone[j][gA_ZoneCache[i][iZoneType]][k] = false;
gB_InsideZone[j][gA_ZoneCache[i].iZoneType][k] = false;
}
gB_InsideZoneID[j][i] = false;
}
if(gA_ZoneCache[i][iEntityID] != -1)
if(gA_ZoneCache[i].iEntityID != -1)
{
KillZoneEntity(i);
gA_ZoneCache[i][iEntityID] = -1;
gA_ZoneCache[i].iEntityID = -1;
}
if(!gA_ZoneCache[i][bZoneInitialized])
if(!gA_ZoneCache[i].bZoneInitialized)
{
continue;
}
@ -2626,10 +2636,10 @@ public void CreateZoneEntities()
SDKHook(entity, SDKHook_TouchPost, TouchPost);
gI_EntityZone[entity] = i;
gA_ZoneCache[i][iEntityID] = entity;
gA_ZoneCache[i].iEntityID = entity;
char sTargetname[32];
FormatEx(sTargetname, 32, "shavit_zones_%d_%d", gA_ZoneCache[i][iZoneTrack], gA_ZoneCache[i][iZoneType]);
FormatEx(sTargetname, 32, "shavit_zones_%d_%d", gA_ZoneCache[i].iZoneTrack, gA_ZoneCache[i].iZoneType);
DispatchKeyValue(entity, "targetname", sTargetname);
gB_ZonesCreated = true;
@ -2638,15 +2648,15 @@ public void CreateZoneEntities()
public void StartTouchPost(int entity, int other)
{
if(other < 1 || other > MaxClients || gI_EntityZone[entity] == -1 || !gA_ZoneCache[gI_EntityZone[entity]][bZoneInitialized] || IsFakeClient(other) ||
(gB_EnforceTracks && gA_ZoneCache[gI_EntityZone[entity]][iZoneType] > Zone_End && gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack] != Shavit_GetClientTrack(other)))
if(other < 1 || other > MaxClients || gI_EntityZone[entity] == -1 || !gA_ZoneCache[gI_EntityZone[entity]].bZoneInitialized || IsFakeClient(other) ||
(gB_EnforceTracks && gA_ZoneCache[gI_EntityZone[entity]].iZoneType > Zone_End && gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack != Shavit_GetClientTrack(other)))
{
return;
}
TimerStatus status = Shavit_GetTimerStatus(other);
switch(gA_ZoneCache[gI_EntityZone[entity]][iZoneType])
switch(gA_ZoneCache[gI_EntityZone[entity]].iZoneType)
{
case Zone_Respawn:
{
@ -2662,7 +2672,7 @@ public void StartTouchPost(int entity, int other)
{
Shavit_StopTimer(other);
ForcePlayerSuicide(other);
Shavit_PrintToChat(other, "%T", "ZoneSlayEnter", other, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageVariable2], gS_ChatStrings[sMessageWarning]);
Shavit_PrintToChat(other, "%T", "ZoneSlayEnter", other, gS_ChatStrings.sWarning, gS_ChatStrings.sVariable2, gS_ChatStrings.sWarning);
}
case Zone_Stop:
@ -2670,26 +2680,26 @@ public void StartTouchPost(int entity, int other)
if(status != Timer_Stopped)
{
Shavit_StopTimer(other);
Shavit_PrintToChat(other, "%T", "ZoneStopEnter", other, gS_ChatStrings[sMessageWarning], gS_ChatStrings[sMessageVariable2], gS_ChatStrings[sMessageWarning]);
Shavit_PrintToChat(other, "%T", "ZoneStopEnter", other, gS_ChatStrings.sWarning, gS_ChatStrings.sVariable2, gS_ChatStrings.sWarning);
}
}
case Zone_End:
{
if(status != Timer_Stopped && Shavit_GetClientTrack(other) == gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack])
if(status != Timer_Stopped && Shavit_GetClientTrack(other) == gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack)
{
Shavit_FinishMap(other, gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack]);
Shavit_FinishMap(other, gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack);
}
}
}
gB_InsideZone[other][gA_ZoneCache[gI_EntityZone[entity]][iZoneType]][gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack]] = true;
gB_InsideZone[other][gA_ZoneCache[gI_EntityZone[entity]].iZoneType][gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack] = true;
gB_InsideZoneID[other][gI_EntityZone[entity]] = true;
Call_StartForward(gH_Forwards_EnterZone);
Call_PushCell(other);
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]][iZoneType]);
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack]);
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]].iZoneType);
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack);
Call_PushCell(gI_EntityZone[entity]);
Call_PushCell(entity);
Call_Finish();
@ -2703,8 +2713,8 @@ public void EndTouchPost(int entity, int other)
}
int entityzone = gI_EntityZone[entity];
int type = gA_ZoneCache[entityzone][iZoneType];
int track = gA_ZoneCache[entityzone][iZoneTrack];
int type = gA_ZoneCache[entityzone].iZoneType;
int track = gA_ZoneCache[entityzone].iZoneTrack;
gB_InsideZone[other][type][track] = false;
gB_InsideZoneID[other][entityzone] = false;
@ -2721,13 +2731,13 @@ public void EndTouchPost(int entity, int other)
public void TouchPost(int entity, int other)
{
if(other < 1 || other > MaxClients || gI_EntityZone[entity] == -1 || IsFakeClient(other) ||
(gB_EnforceTracks && gA_ZoneCache[gI_EntityZone[entity]][iZoneType] > Zone_End && gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack] != Shavit_GetClientTrack(other)))
(gB_EnforceTracks && gA_ZoneCache[gI_EntityZone[entity]].iZoneType > Zone_End && gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack != Shavit_GetClientTrack(other)))
{
return;
}
// do precise stuff here, this will be called *A LOT*
switch(gA_ZoneCache[gI_EntityZone[entity]][iZoneType])
switch(gA_ZoneCache[gI_EntityZone[entity]].iZoneType)
{
case Zone_Start:
{
@ -2735,10 +2745,10 @@ public void TouchPost(int entity, int other)
// so you don't accidentally step on those while running
if(Shavit_GetTimerStatus(other) == Timer_Stopped || Shavit_GetClientTrack(other) != Track_Main)
{
Shavit_StartTimer(other, gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack]);
Shavit_StartTimer(other, gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack);
}
else if(gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack] == Track_Main)
else if(gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack == Track_Main)
{
Shavit_StartTimer(other, Track_Main);
}