mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-06 18:08:26 +00:00
Refactored whole plugin to use enum structs
SourceMod 1.10 is now a requirement.
This commit is contained in:
parent
98d9b29c1d
commit
2ab6c57e1f
2
.gitignore
vendored
2
.gitignore
vendored
@ -6,3 +6,5 @@
|
||||
# editors
|
||||
*.atom-build.json
|
||||
.vscode/tasks.json
|
||||
|
||||
\.vscode/settings\.json
|
||||
|
||||
@ -5,7 +5,7 @@ addons:
|
||||
- lib32stdc++6 # needed for spcomp
|
||||
|
||||
env:
|
||||
- SMVERSION=1.9
|
||||
- SMVERSION=1.10
|
||||
|
||||
before_script:
|
||||
# install smbuilder
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
@ -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));
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user