mirror of
https://github.com/shavitush/bhoptimer.git
synced 2025-12-07 02:18: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
|
# editors
|
||||||
*.atom-build.json
|
*.atom-build.json
|
||||||
.vscode/tasks.json
|
.vscode/tasks.json
|
||||||
|
|
||||||
|
\.vscode/settings\.json
|
||||||
|
|||||||
@ -5,7 +5,7 @@ addons:
|
|||||||
- lib32stdc++6 # needed for spcomp
|
- lib32stdc++6 # needed for spcomp
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- SMVERSION=1.9
|
- SMVERSION=1.10
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
# install smbuilder
|
# install smbuilder
|
||||||
|
|||||||
@ -17,7 +17,7 @@ Includes a records system, map zones (start/end marks etc), bonuses, HUD with us
|
|||||||
|
|
||||||
# Requirements:
|
# Requirements:
|
||||||
* Steam version of Counter-Strike: Source or Counter-Strike: Global Offensive.
|
* 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.
|
* 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:
|
# Optional requirements, for the best experience:
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#define _shavit_included
|
#define _shavit_included
|
||||||
|
|
||||||
#define SHAVIT_VERSION "2.3.6"
|
#define SHAVIT_VERSION "2.4.0"
|
||||||
#define STYLE_LIMIT 256
|
#define STYLE_LIMIT 256
|
||||||
#define MAX_ZONES 64
|
#define MAX_ZONES 64
|
||||||
#define MAX_NAME_LENGTH_SQL 32
|
#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_NOSOUNDS (1 << 11) // disables sounds on personal best, world record etc
|
||||||
#define HUD_NOPRACALERT (1 << 12) // hides practice mode chat alert
|
#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
|
// status
|
||||||
enum TimerStatus
|
enum TimerStatus
|
||||||
{
|
{
|
||||||
Timer_Stopped = 0,
|
Timer_Stopped,
|
||||||
Timer_Running,
|
Timer_Running,
|
||||||
Timer_Paused
|
Timer_Paused
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ReplayStatus
|
enum ReplayStatus
|
||||||
{
|
{
|
||||||
Replay_Start = 0,
|
Replay_Start,
|
||||||
Replay_Running,
|
Replay_Running,
|
||||||
Replay_End,
|
Replay_End,
|
||||||
Replay_Idle
|
Replay_Idle
|
||||||
@ -71,10 +62,34 @@ enum ReplayStatus
|
|||||||
|
|
||||||
enum ReplayBotType
|
enum ReplayBotType
|
||||||
{
|
{
|
||||||
Replay_Central = 0,
|
Replay_Central,
|
||||||
Replay_Legacy
|
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
|
enum
|
||||||
{
|
{
|
||||||
sStyleName,
|
sStyleName,
|
||||||
@ -83,46 +98,10 @@ enum
|
|||||||
sChangeCommand,
|
sChangeCommand,
|
||||||
sClanTag,
|
sClanTag,
|
||||||
sSpecialString,
|
sSpecialString,
|
||||||
sStylePermission,
|
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
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// for Shavit_GetChatStrings
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
sMessagePrefix,
|
sMessagePrefix,
|
||||||
@ -130,26 +109,80 @@ enum
|
|||||||
sMessageWarning,
|
sMessageWarning,
|
||||||
sMessageVariable,
|
sMessageVariable,
|
||||||
sMessageVariable2,
|
sMessageVariable2,
|
||||||
sMessageStyle,
|
sMessageStyle
|
||||||
CHATSETTINGS_SIZE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum struct stylestrings_t
|
||||||
{
|
{
|
||||||
bTimerEnabled,
|
char sStyleName[64];
|
||||||
fCurrentTime,
|
char sShortName[32];
|
||||||
bClientPaused,
|
char sHTMLColor[32];
|
||||||
iJumps,
|
char sChangeCommand[128];
|
||||||
bsStyle,
|
char sClanTag[32];
|
||||||
iStrafes,
|
char sSpecialString[128];
|
||||||
iTotalMeasures,
|
char sStylePermission[64];
|
||||||
iGoodGains,
|
};
|
||||||
fServerTime,
|
|
||||||
iSHSWCombination,
|
enum struct stylesettings_t
|
||||||
iTimerTrack,
|
{
|
||||||
iMeasuredJumps,
|
bool bAutobhop;
|
||||||
iPerfectJumps,
|
bool bEasybhop;
|
||||||
TIMERSNAPSHOT_SIZE
|
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
|
#if defined USES_CHAT_COLORS
|
||||||
@ -203,39 +236,6 @@ char gS_CSGOColors[][] =
|
|||||||
};
|
};
|
||||||
#endif
|
#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)
|
stock bool IsValidClient(int client, bool bAlive = false)
|
||||||
{
|
{
|
||||||
return (client >= 1 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && !IsClientSourceTV(client) && (!bAlive || IsPlayerAlive(client)));
|
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 status The player's timer status.
|
||||||
* @param track The player's timer track.
|
* @param track The player's timer track.
|
||||||
* @param style The player's bhop style.
|
* @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).
|
* @param mouse Mouse direction (x, y).
|
||||||
* @return Plugin_Continue to let shavit-core keep doing what it does, Plugin_Changed to pass different values.
|
* @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.
|
* 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 client Client index.
|
||||||
* @param snapshot A snapshot with the player's current timer. You cannot manipulate it here.
|
* @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 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
|
* @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.
|
* 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 client Client index.
|
||||||
* @param snapshot A snapshot with the player's current timer. Read above in shavit.inc for more information.
|
* @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 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
|
* @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.
|
* 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.
|
* @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.
|
* @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)
|
* 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")
|
* @return Game type. (See "enum ServerGame")
|
||||||
*/
|
*/
|
||||||
#pragma deprecated Use GetEngineVersion() instead.
|
#pragma deprecated Use GetEngineVersion() instead.
|
||||||
native ServerGame Shavit_GetGameType();
|
native EngineVersion Shavit_GetGameType();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the database handle the timer is using.
|
* 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.
|
* @param StyleSettings Reference to the settings array.
|
||||||
* @return SP_ERROR_NONE on success, anything else on failure.
|
* @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.
|
* 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.
|
* 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 client Client index.
|
||||||
* @param snapshot Full snapshot of the client's timer.
|
* @param snapshot Full snapshot of the client's timer.
|
||||||
* @noreturn
|
* @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.
|
* 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.
|
* @param snapshot Full snapshot of the client's timer.
|
||||||
* @noreturn
|
* @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.
|
* Sets a player's replay recording frames from a provided ArrayList.
|
||||||
|
|||||||
@ -39,18 +39,17 @@
|
|||||||
#define MAXLENGTH_CMESSAGE 16
|
#define MAXLENGTH_CMESSAGE 16
|
||||||
#define MAXLENGTH_BUFFER 255
|
#define MAXLENGTH_BUFFER 255
|
||||||
|
|
||||||
enum ChatRanksCache
|
enum struct chatranks_cache_t
|
||||||
{
|
{
|
||||||
iCRRangeType, // 0 - flat, 1 - percent, 2 - point range
|
int iRangeType; // 0 - flat, 1 - percent, 2 - point range
|
||||||
Float:fCRFrom,
|
float fFrom;
|
||||||
Float:fCRTo,
|
float fTo;
|
||||||
bool:bCRFree,
|
bool bFree;
|
||||||
bool:bCREasterEgg,
|
bool bEasterEgg;
|
||||||
String:sCRAdminFlag[32],
|
char sAdminFlag[32];
|
||||||
String:sCRName[MAXLENGTH_NAME],
|
char sName[MAXLENGTH_NAME];
|
||||||
String:sCRMessage[MAXLENGTH_MESSAGE],
|
char sMessage[MAXLENGTH_MESSAGE];
|
||||||
String:sCRDisplay[MAXLENGTH_DISPLAY],
|
char sDisplay[MAXLENGTH_DISPLAY];
|
||||||
CRCACHE_SIZE
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -159,7 +158,7 @@ public void OnPluginStart()
|
|||||||
HookUserMessage(GetUserMessageId("SayText2"), Hook_SayText2, true);
|
HookUserMessage(GetUserMessageId("SayText2"), Hook_SayText2, true);
|
||||||
|
|
||||||
gH_ChatCookie = RegClientCookie("shavit_chat_selection", "Chat settings", CookieAccess_Protected);
|
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++)
|
for(int i = 1; i <= MaxClients; i++)
|
||||||
{
|
{
|
||||||
@ -206,18 +205,18 @@ bool LoadChatConfig()
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
any[] aChatTitle = new any[CRCACHE_SIZE];
|
chatranks_cache_t chat_title;
|
||||||
char sRanks[32];
|
char sRanks[32];
|
||||||
kv.GetString("ranks", sRanks, MAXLENGTH_NAME, "0");
|
kv.GetString("ranks", sRanks, MAXLENGTH_NAME, "0");
|
||||||
|
|
||||||
if(sRanks[0] == 'p')
|
if(sRanks[0] == 'p')
|
||||||
{
|
{
|
||||||
aChatTitle[iCRRangeType] = Rank_Points;
|
chat_title.iRangeType = Rank_Points;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
aChatTitle[iCRRangeType] = (StrContains(sRanks, "%") == -1)? Rank_Flat:Rank_Percentage;
|
chat_title.iRangeType = (StrContains(sRanks, "%") == -1)? Rank_Flat:Rank_Percentage;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReplaceString(sRanks, 32, "p", "");
|
ReplaceString(sRanks, 32, "p", "");
|
||||||
@ -227,29 +226,29 @@ bool LoadChatConfig()
|
|||||||
{
|
{
|
||||||
char sExplodedString[2][16];
|
char sExplodedString[2][16];
|
||||||
ExplodeString(sRanks, "-", sExplodedString, 2, 64);
|
ExplodeString(sRanks, "-", sExplodedString, 2, 64);
|
||||||
aChatTitle[fCRFrom] = StringToFloat(sExplodedString[0]);
|
chat_title.fFrom = StringToFloat(sExplodedString[0]);
|
||||||
aChatTitle[fCRTo] = StringToFloat(sExplodedString[1]);
|
chat_title.fTo = StringToFloat(sExplodedString[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float fRank = StringToFloat(sRanks);
|
float fRank = StringToFloat(sRanks);
|
||||||
|
|
||||||
aChatTitle[fCRFrom] = fRank;
|
chat_title.fFrom = fRank;
|
||||||
aChatTitle[fCRTo] = (aChatTitle[iCRRangeType] == Rank_Flat)? fRank:MAGIC_NUMBER;
|
chat_title.fTo = (chat_title.iRangeType == Rank_Flat)? fRank:MAGIC_NUMBER;
|
||||||
}
|
}
|
||||||
|
|
||||||
aChatTitle[bCRFree] = view_as<bool>(kv.GetNum("free", false));
|
chat_title.bFree = view_as<bool>(kv.GetNum("free", false));
|
||||||
aChatTitle[bCREasterEgg] = view_as<bool>(kv.GetNum("easteregg", false));
|
chat_title.bEasterEgg = view_as<bool>(kv.GetNum("easteregg", false));
|
||||||
|
|
||||||
kv.GetString("name", aChatTitle[sCRName], MAXLENGTH_NAME, "{name}");
|
kv.GetString("name", chat_title.sName, MAXLENGTH_NAME, "{name}");
|
||||||
kv.GetString("message", aChatTitle[sCRMessage], MAXLENGTH_MESSAGE, "");
|
kv.GetString("message", chat_title.sMessage, MAXLENGTH_MESSAGE, "");
|
||||||
kv.GetString("display", aChatTitle[sCRDisplay], MAXLENGTH_DISPLAY, "");
|
kv.GetString("display", chat_title.sDisplay, MAXLENGTH_DISPLAY, "");
|
||||||
kv.GetString("flag", aChatTitle[sCRAdminFlag], 32, "");
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
any[] aCache = new any[CRCACHE_SIZE];
|
chatranks_cache_t cache;
|
||||||
gA_ChatRanks.GetArray(i, aCache, view_as<int>(CRCACHE_SIZE));
|
gA_ChatRanks.GetArray(i, cache, sizeof(chatranks_cache_t));
|
||||||
|
|
||||||
char sMenuDisplay[MAXLENGTH_DISPLAY];
|
char sMenuDisplay[MAXLENGTH_DISPLAY];
|
||||||
strcopy(sMenuDisplay, MAXLENGTH_DISPLAY, aCache[sCRDisplay]);
|
strcopy(sMenuDisplay, MAXLENGTH_DISPLAY, cache.sDisplay);
|
||||||
ReplaceString(sMenuDisplay, MAXLENGTH_DISPLAY, "<n>", "\n");
|
ReplaceString(sMenuDisplay, MAXLENGTH_DISPLAY, "<n>", "\n");
|
||||||
StrCat(sMenuDisplay, MAXLENGTH_DISPLAY, "\n "); // to add spacing between each entry
|
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++)
|
for(int i = 0; i < iLength; i++)
|
||||||
{
|
{
|
||||||
any[] aCache = new any[CRCACHE_SIZE];
|
chatranks_cache_t cache;
|
||||||
gA_ChatRanks.GetArray(i, aCache, view_as<int>(CRCACHE_SIZE));
|
gA_ChatRanks.GetArray(i, cache, sizeof(chatranks_cache_t));
|
||||||
|
|
||||||
char sFlag[32];
|
char sFlag[32];
|
||||||
strcopy(sFlag, 32, aCache[sCRAdminFlag]);
|
strcopy(sFlag, 32, cache.sAdminFlag);
|
||||||
|
|
||||||
bool bFlagAccess = false;
|
bool bFlagAccess = false;
|
||||||
int iSize = strlen(sFlag);
|
int iSize = strlen(sFlag);
|
||||||
@ -903,13 +902,13 @@ Action ShowRanksMenu(int client, int item)
|
|||||||
bFlagAccess = CheckCommandAccess(client, sFlag, 0, true);
|
bFlagAccess = CheckCommandAccess(client, sFlag, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(aCache[bCREasterEgg] || !bFlagAccess)
|
if(cache.bEasterEgg || !bFlagAccess)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
char sDisplay[MAXLENGTH_DISPLAY];
|
char sDisplay[MAXLENGTH_DISPLAY];
|
||||||
strcopy(sDisplay, MAXLENGTH_DISPLAY, aCache[sCRDisplay]);
|
strcopy(sDisplay, MAXLENGTH_DISPLAY, cache.sDisplay);
|
||||||
ReplaceString(sDisplay, MAXLENGTH_DISPLAY, "<n>", "\n");
|
ReplaceString(sDisplay, MAXLENGTH_DISPLAY, "<n>", "\n");
|
||||||
|
|
||||||
char sExplodedString[2][32];
|
char sExplodedString[2][32];
|
||||||
@ -919,9 +918,9 @@ Action ShowRanksMenu(int client, int item)
|
|||||||
|
|
||||||
char sRequirements[64];
|
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);
|
FormatEx(sRequirements, 64, "%T", "ChatRanksMenu_Unranked", client);
|
||||||
}
|
}
|
||||||
@ -929,44 +928,44 @@ Action ShowRanksMenu(int client, int item)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// this is really ugly
|
// 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)
|
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
|
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)
|
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
|
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)
|
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
|
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], "");
|
ReplaceString(sOriginalName, MAXLENGTH_NAME, gS_ControlCharacters[i], "");
|
||||||
}
|
}
|
||||||
|
|
||||||
any[] aCache = new any[CRCACHE_SIZE];
|
chatranks_cache_t cache;
|
||||||
gA_ChatRanks.GetArray(rank, aCache, view_as<int>(CRCACHE_SIZE));
|
gA_ChatRanks.GetArray(rank, cache, sizeof(chatranks_cache_t));
|
||||||
|
|
||||||
char sName[MAXLENGTH_NAME];
|
char sName[MAXLENGTH_NAME];
|
||||||
strcopy(sName, MAXLENGTH_NAME, aCache[sCRName]);
|
strcopy(sName, MAXLENGTH_NAME, cache.sName);
|
||||||
|
|
||||||
char sCMessage[MAXLENGTH_CMESSAGE];
|
char sCMessage[MAXLENGTH_CMESSAGE];
|
||||||
strcopy(sCMessage, MAXLENGTH_CMESSAGE, aCache[sCRMessage]);
|
strcopy(sCMessage, MAXLENGTH_CMESSAGE, cache.sMessage);
|
||||||
|
|
||||||
FormatChat(client, sName, MAXLENGTH_NAME);
|
FormatChat(client, sName, MAXLENGTH_NAME);
|
||||||
|
|
||||||
@ -1100,11 +1099,11 @@ bool HasRankAccess(int client, int rank)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
any[] aCache = new any[CRCACHE_SIZE];
|
chatranks_cache_t cache;
|
||||||
gA_ChatRanks.GetArray(rank, aCache, view_as<int>(CRCACHE_SIZE));
|
gA_ChatRanks.GetArray(rank, cache, sizeof(chatranks_cache_t));
|
||||||
|
|
||||||
char sFlag[32];
|
char sFlag[32];
|
||||||
strcopy(sFlag, 32, aCache[sCRAdminFlag]);
|
strcopy(sFlag, 32, cache.sAdminFlag);
|
||||||
|
|
||||||
bool bFlagAccess = false;
|
bool bFlagAccess = false;
|
||||||
int iSize = strlen(sFlag);
|
int iSize = strlen(sFlag);
|
||||||
@ -1134,7 +1133,7 @@ bool HasRankAccess(int client, int rank)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(aCache[bCRFree])
|
if(cache.bFree)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1144,11 +1143,11 @@ bool HasRankAccess(int client, int rank)
|
|||||||
return false;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1166,7 +1165,7 @@ bool HasRankAccess(int client, int rank)
|
|||||||
|
|
||||||
float fPercentile = (fRank / iRanked) * 100.0;
|
float fPercentile = (fRank / iRanked) * 100.0;
|
||||||
|
|
||||||
if(aCache[fCRFrom] <= fPercentile <= aCache[fCRTo])
|
if(cache.fFrom <= fPercentile <= cache.fTo)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1202,11 +1201,11 @@ void GetPlayerChatSettings(int client, char[] name, char[] message)
|
|||||||
|
|
||||||
if(0 <= iRank <= (iLength - 1))
|
if(0 <= iRank <= (iLength - 1))
|
||||||
{
|
{
|
||||||
any[] aCache = new any[CRCACHE_SIZE];
|
chatranks_cache_t cache;
|
||||||
gA_ChatRanks.GetArray(iRank, aCache, view_as<int>(CRCACHE_SIZE));
|
gA_ChatRanks.GetArray(iRank, cache, sizeof(chatranks_cache_t));
|
||||||
|
|
||||||
strcopy(name, MAXLENGTH_NAME, aCache[sCRName]);
|
strcopy(name, MAXLENGTH_NAME, cache.sName);
|
||||||
strcopy(message, MAXLENGTH_NAME, aCache[sCRMessage]);
|
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;
|
int gI_SpectatorList = 1;
|
||||||
|
|
||||||
// timer settings
|
// timer settings
|
||||||
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
|
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
|
||||||
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
|
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
|
||||||
|
|
||||||
public Plugin myinfo =
|
public Plugin myinfo =
|
||||||
{
|
{
|
||||||
@ -250,12 +250,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
for(int i = 0; i < styles; i++)
|
for(int i = 0; i < styles; i++)
|
||||||
{
|
{
|
||||||
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
||||||
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
|
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
|
||||||
Shavit_GetStyleStrings(i, sHTMLColor, gS_StyleStrings[i][sHTMLColor], 128);
|
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;
|
gI_Buttons[client] = buttons;
|
||||||
|
|
||||||
@ -765,19 +765,19 @@ void UpdateHUD(int client)
|
|||||||
|
|
||||||
if(status >= Timer_Running)
|
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
|
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);
|
Format(sHintText, 512, "%s\n%T: %d", sHintText, "HudSpeedText", client, iSpeed);
|
||||||
|
|
||||||
if(status >= Timer_Running)
|
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));
|
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)
|
if(status != Timer_Stopped)
|
||||||
{
|
{
|
||||||
char sFirstLine[64];
|
char sFirstLine[64];
|
||||||
strcopy(sFirstLine, 64, gS_StyleStrings[style][sStyleName]);
|
strcopy(sFirstLine, 64, gS_StyleStrings[style].sStyleName);
|
||||||
|
|
||||||
if(Shavit_IsPracticeMode(target))
|
if(Shavit_IsPracticeMode(target))
|
||||||
{
|
{
|
||||||
Format(sFirstLine, 64, "%s %T", sFirstLine, "HudPracticeMode", client);
|
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)
|
if(Shavit_GetTimerStatus(target) == Timer_Paused)
|
||||||
{
|
{
|
||||||
@ -836,10 +839,10 @@ void UpdateHUD(int client)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
iSpeed = RoundToNearest(float(iSpeed) / view_as<float>(gA_StyleSettings[style][fSpeedMultiplier]));
|
iSpeed = RoundToNearest(float(iSpeed) / gA_StyleSettings[style].fSpeedMultiplier);
|
||||||
track = Shavit_GetReplayBotTrack(target);
|
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);
|
float fReplayLength = Shavit_GetReplayLength(style, track);
|
||||||
|
|
||||||
if(fReplayTime < 0.0 || fReplayTime > fReplayLength || !Shavit_IsReplayDataLoaded(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)
|
if(gEV_Type == Engine_CSGO)
|
||||||
{
|
{
|
||||||
FormatEx(sHintText, 512, "<font face=''>");
|
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: <font color='#00FF00'>%s</font> / %s", sHintText, "HudTimeText", client, sReplayTime, sReplayLength);
|
||||||
Format(sHintText, 512, "%s\n\t%T: %d", sHintText, "HudSpeedText", client, iSpeed);
|
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];
|
char sPlayerName[MAX_NAME_LENGTH];
|
||||||
Shavit_GetReplayName(style, track, 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%s", sHintText, sPlayerName);
|
||||||
Format(sHintText, 512, "%s\n%T: %s/%s", sHintText, "HudTimeText", client, sReplayTime, sReplayLength);
|
Format(sHintText, 512, "%s\n%T: %s/%s", sHintText, "HudTimeText", client, sReplayTime, sReplayLength);
|
||||||
Format(sHintText, 512, "%s\n%T: %d", sHintText, "HudSpeedText", client, iSpeed);
|
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;
|
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]);
|
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;
|
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]);
|
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);
|
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));
|
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));
|
Format(sMessage, 256, "%s\n%T: %.1f", sMessage, "HudPerfs", client, Shavit_GetPerfectJumps(target));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,32 +33,6 @@
|
|||||||
#undef REQUIRE_PLUGIN
|
#undef REQUIRE_PLUGIN
|
||||||
#include <shavit>
|
#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 newdecls required
|
||||||
#pragma semicolon 1
|
#pragma semicolon 1
|
||||||
#pragma dynamic 524288
|
#pragma dynamic 524288
|
||||||
@ -68,6 +42,36 @@ enum CheckpointsCache
|
|||||||
|
|
||||||
#define CP_DEFAULT (CP_ANGLES|CP_VELOCITY)
|
#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
|
// game specific
|
||||||
EngineVersion gEV_Type = Engine_Unknown;
|
EngineVersion gEV_Type = Engine_Unknown;
|
||||||
int gI_Ammo = -1;
|
int gI_Ammo = -1;
|
||||||
@ -91,14 +95,7 @@ int gI_AdvertisementsCycle = 0;
|
|||||||
char gS_CurrentMap[192];
|
char gS_CurrentMap[192];
|
||||||
int gI_Style[MAXPLAYERS+1];
|
int gI_Style[MAXPLAYERS+1];
|
||||||
|
|
||||||
enum
|
player_cpcache_t gA_CheckpointsCache[MAXPLAYERS+1];
|
||||||
{
|
|
||||||
iCheckpoints,
|
|
||||||
iCurrentCheckpoint,
|
|
||||||
CPCACHE_SIZE
|
|
||||||
};
|
|
||||||
|
|
||||||
int gI_CheckpointsCache[MAXPLAYERS+1][CPCACHE_SIZE];
|
|
||||||
int gI_CheckpointsSettings[MAXPLAYERS+1];
|
int gI_CheckpointsSettings[MAXPLAYERS+1];
|
||||||
StringMap gSM_Checkpoints = null;
|
StringMap gSM_Checkpoints = null;
|
||||||
ArrayList gA_Targetnames = null;
|
ArrayList gA_Targetnames = null;
|
||||||
@ -106,7 +103,7 @@ ArrayList gA_Classnames = null;
|
|||||||
|
|
||||||
// save states
|
// save states
|
||||||
float gF_SaveStateData[MAXPLAYERS+1][3][3];
|
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];
|
bool gB_SaveStates[MAXPLAYERS+1];
|
||||||
char gS_SaveStateTargetname[MAXPLAYERS+1][32];
|
char gS_SaveStateTargetname[MAXPLAYERS+1][32];
|
||||||
ArrayList gA_SaveFrames[MAXPLAYERS+1];
|
ArrayList gA_SaveFrames[MAXPLAYERS+1];
|
||||||
@ -191,11 +188,11 @@ bool gB_Replay = false;
|
|||||||
bool gB_Zones = false;
|
bool gB_Zones = false;
|
||||||
|
|
||||||
// timer settings
|
// timer settings
|
||||||
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
|
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
|
||||||
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
|
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
|
||||||
|
|
||||||
// chat settings
|
// chat settings
|
||||||
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
|
chatstrings_t gS_ChatStrings;
|
||||||
|
|
||||||
public Plugin myinfo =
|
public Plugin myinfo =
|
||||||
{
|
{
|
||||||
@ -468,18 +465,20 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
for(int i = 0; i < styles; i++)
|
for(int i = 0; i < styles; i++)
|
||||||
{
|
{
|
||||||
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
||||||
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
|
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
|
||||||
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i][sClanTag], 128);
|
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i].sClanTag, sizeof(stylestrings_t::sClanTag));
|
||||||
Shavit_GetStyleStrings(i, sSpecialString, gS_StyleStrings[i][sSpecialString], 128);
|
Shavit_GetStyleStrings(i, sSpecialString, gS_StyleStrings[i].sSpecialString, sizeof(stylestrings_t::sSpecialString));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Shavit_OnChatConfigLoaded()
|
public void Shavit_OnChatConfigLoaded()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
|
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
|
||||||
{
|
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
|
||||||
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
|
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())
|
if(!LoadAdvertisementsConfig())
|
||||||
{
|
{
|
||||||
@ -491,10 +490,10 @@ public void Shavit_OnStyleChanged(int client, int oldstyle, int newstyle, int tr
|
|||||||
{
|
{
|
||||||
gI_Style[client] = newstyle;
|
gI_Style[client] = newstyle;
|
||||||
|
|
||||||
if(StrContains(gS_StyleStrings[newstyle][sSpecialString], "segments") != -1)
|
if(StrContains(gS_StyleStrings[newstyle].sSpecialString, "segments") != -1)
|
||||||
{
|
{
|
||||||
OpenCheckpointsMenu(client, 0);
|
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];
|
char sTempMessage[300];
|
||||||
kv.GetString(NULL_STRING, sTempMessage, 300, "<EMPTY ADVERTISEMENT>");
|
kv.GetString(NULL_STRING, sTempMessage, 300, "<EMPTY ADVERTISEMENT>");
|
||||||
|
|
||||||
ReplaceString(sTempMessage, 300, "{text}", gS_ChatStrings[sMessageText]);
|
ReplaceString(sTempMessage, 300, "{text}", gS_ChatStrings.sText);
|
||||||
ReplaceString(sTempMessage, 300, "{warning}", gS_ChatStrings[sMessageWarning]);
|
ReplaceString(sTempMessage, 300, "{warning}", gS_ChatStrings.sWarning);
|
||||||
ReplaceString(sTempMessage, 300, "{variable}", gS_ChatStrings[sMessageVariable]);
|
ReplaceString(sTempMessage, 300, "{variable}", gS_ChatStrings.sVariable);
|
||||||
ReplaceString(sTempMessage, 300, "{variable2}", gS_ChatStrings[sMessageVariable2]);
|
ReplaceString(sTempMessage, 300, "{variable2}", gS_ChatStrings.sVariable2);
|
||||||
ReplaceString(sTempMessage, 300, "{style}", gS_ChatStrings[sMessageStyle]);
|
ReplaceString(sTempMessage, 300, "{style}", gS_ChatStrings.sStyle);
|
||||||
|
|
||||||
gA_Advertisements.PushString(sTempMessage);
|
gA_Advertisements.PushString(sTempMessage);
|
||||||
}
|
}
|
||||||
@ -805,7 +804,7 @@ public MRESReturn CCSPlayer__GetPlayerMaxSpeed(int pThis, Handle hReturn)
|
|||||||
return MRES_Ignored;
|
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;
|
return MRES_Override;
|
||||||
}
|
}
|
||||||
@ -966,8 +965,8 @@ void UpdateClanTag(int client)
|
|||||||
|
|
||||||
char sCustomTag[32];
|
char sCustomTag[32];
|
||||||
strcopy(sCustomTag, 32, gS_ClanTag);
|
strcopy(sCustomTag, 32, gS_ClanTag);
|
||||||
ReplaceString(sCustomTag, 32, "{style}", gS_StyleStrings[gI_Style[client]][sStyleName]);
|
ReplaceString(sCustomTag, 32, "{style}", gS_StyleStrings[gI_Style[client]].sStyleName);
|
||||||
ReplaceString(sCustomTag, 32, "{styletag}", gS_StyleStrings[gI_Style[client]][sClanTag]);
|
ReplaceString(sCustomTag, 32, "{styletag}", gS_StyleStrings[gI_Style[client]].sClanTag);
|
||||||
ReplaceString(sCustomTag, 32, "{time}", sTime);
|
ReplaceString(sCustomTag, 32, "{time}", sTime);
|
||||||
ReplaceString(sCustomTag, 32, "{tr}", sTrack);
|
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);
|
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");
|
int iGroundEntity = GetEntPropEnt(client, Prop_Send, "m_hGroundEntity");
|
||||||
|
|
||||||
// prespeed
|
// 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)
|
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}));
|
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;
|
gI_GroundEntity[client] = iGroundEntity;
|
||||||
|
|
||||||
@ -1014,7 +1013,7 @@ public Action Shavit_OnUserCmdPre(int client, int &buttons, int &impulse, float
|
|||||||
float fSpeed[3];
|
float fSpeed[3];
|
||||||
GetEntPropVector(client, Prop_Data, "m_vecAbsVelocity", fSpeed);
|
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)
|
if(gI_PreSpeed < 4)
|
||||||
{
|
{
|
||||||
@ -1109,22 +1108,22 @@ void ResetCheckpoints(int client)
|
|||||||
int serial = GetClientSerial(client);
|
int serial = GetClientSerial(client);
|
||||||
char key[32];
|
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);
|
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);
|
gSM_Checkpoints.Remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
gI_CheckpointsCache[client][iCheckpoints] = 0;
|
gA_CheckpointsCache[client].iCheckpoints = 0;
|
||||||
gI_CheckpointsCache[client][iCurrentCheckpoint] = 1;
|
gA_CheckpointsCache[client].iCurrentCheckpoint = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Action OnTakeDamage(int victim, int attacker)
|
public Action OnTakeDamage(int victim, int attacker)
|
||||||
@ -1204,7 +1203,7 @@ public void OnPreThink(int client)
|
|||||||
if(IsPlayerAlive(client))
|
if(IsPlayerAlive(client))
|
||||||
{
|
{
|
||||||
// not the best method, but only one i found for tf2
|
// 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])
|
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
|
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;
|
return Plugin_Handled;
|
||||||
@ -1316,7 +1315,7 @@ public Action Command_Teleport(int client, int args)
|
|||||||
|
|
||||||
if(!gB_TeleportCommands)
|
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;
|
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))
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1429,14 +1428,14 @@ public Action Command_Weapon(int client, int args)
|
|||||||
|
|
||||||
if(gI_WeaponCommands == 0)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!IsPlayerAlive(client))
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -1519,13 +1518,13 @@ public Action Command_Save(int client, int args)
|
|||||||
|
|
||||||
if(!gB_Checkpoints && !bSegmenting)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bOverflow = gI_CheckpointsCache[client][iCheckpoints] >= iMaxCPs;
|
bool bOverflow = gA_CheckpointsCache[client].iCheckpoints >= iMaxCPs;
|
||||||
int index = gI_CheckpointsCache[client][iCheckpoints] + 1;
|
int index = gA_CheckpointsCache[client].iCheckpoints + 1;
|
||||||
|
|
||||||
if(!bSegmenting)
|
if(!bSegmenting)
|
||||||
{
|
{
|
||||||
@ -1536,15 +1535,15 @@ public Action Command_Save(int client, int args)
|
|||||||
|
|
||||||
if(bOverflow)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SaveCheckpoint(client, index))
|
if(SaveCheckpoint(client, index))
|
||||||
{
|
{
|
||||||
gI_CheckpointsCache[client][iCurrentCheckpoint] = ++gI_CheckpointsCache[client][iCheckpoints];
|
gA_CheckpointsCache[client].iCurrentCheckpoint = ++gA_CheckpointsCache[client].iCheckpoints;
|
||||||
Shavit_PrintToChat(client, "%T", "MiscCheckpointsSaved", client, gI_CheckpointsCache[client][iCurrentCheckpoint], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
|
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))
|
if(SaveCheckpoint(client, index, bOverflow))
|
||||||
{
|
{
|
||||||
gI_CheckpointsCache[client][iCurrentCheckpoint] = (bOverflow)? iMaxCPs:++gI_CheckpointsCache[client][iCheckpoints];
|
gA_CheckpointsCache[client].iCurrentCheckpoint = (bOverflow)? iMaxCPs:++gA_CheckpointsCache[client].iCheckpoints;
|
||||||
Shavit_PrintToChat(client, "%T", "MiscCheckpointsSaved", client, gI_CheckpointsCache[client][iCurrentCheckpoint], gS_ChatStrings[sMessageVariable], gS_ChatStrings[sMessageText]);
|
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)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = gI_CheckpointsCache[client][iCurrentCheckpoint];
|
int index = gA_CheckpointsCache[client].iCurrentCheckpoint;
|
||||||
|
|
||||||
if(args > 0)
|
if(args > 0)
|
||||||
{
|
{
|
||||||
@ -1602,7 +1601,7 @@ public Action OpenCheckpointsMenu(int client, int item)
|
|||||||
|
|
||||||
if(!gB_Checkpoints && !bSegmented)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -1620,12 +1619,12 @@ public Action OpenCheckpointsMenu(int client, int item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char sDisplay[64];
|
char sDisplay[64];
|
||||||
FormatEx(sDisplay, 64, "%T", "MiscCheckpointSave", client, (gI_CheckpointsCache[client][iCheckpoints] + 1));
|
FormatEx(sDisplay, 64, "%T", "MiscCheckpointSave", client, (gA_CheckpointsCache[client].iCheckpoints + 1));
|
||||||
menu.AddItem("save", sDisplay, (gI_CheckpointsCache[client][iCheckpoints] < gI_MaxCP)? ITEMDRAW_DEFAULT:ITEMDRAW_DISABLED);
|
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);
|
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)
|
if(action == MenuAction_Select)
|
||||||
{
|
{
|
||||||
int iMaxCPs = GetMaxCPs(param1);
|
int iMaxCPs = GetMaxCPs(param1);
|
||||||
int iCurrent = gI_CheckpointsCache[param1][iCurrentCheckpoint];
|
int iCurrent = gA_CheckpointsCache[param1].iCurrentCheckpoint;
|
||||||
|
|
||||||
switch(param2)
|
switch(param2)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
bool bSegmenting = CanSegment(param1);
|
bool bSegmenting = CanSegment(param1);
|
||||||
bool bOverflow = gI_CheckpointsCache[param1][iCheckpoints] >= iMaxCPs;
|
bool bOverflow = gA_CheckpointsCache[param1].iCheckpoints >= iMaxCPs;
|
||||||
|
|
||||||
if(!bSegmenting)
|
if(!bSegmenting)
|
||||||
{
|
{
|
||||||
@ -1685,14 +1684,14 @@ public int MenuHandler_Checkpoints(Menu menu, MenuAction action, int param1, int
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveCheckpoint(param1, ++gI_CheckpointsCache[param1][iCheckpoints]);
|
SaveCheckpoint(param1, ++gA_CheckpointsCache[param1].iCheckpoints);
|
||||||
gI_CheckpointsCache[param1][iCurrentCheckpoint] = gI_CheckpointsCache[param1][iCheckpoints];
|
gA_CheckpointsCache[param1].iCurrentCheckpoint = gA_CheckpointsCache[param1].iCheckpoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SaveCheckpoint(param1, gI_CheckpointsCache[param1][iCheckpoints] + 1, bOverflow);
|
SaveCheckpoint(param1, gA_CheckpointsCache[param1].iCheckpoints + 1, bOverflow);
|
||||||
gI_CheckpointsCache[param1][iCurrentCheckpoint] = (bOverflow)? iMaxCPs:++gI_CheckpointsCache[param1][iCheckpoints];
|
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)
|
if(iCurrent > 1)
|
||||||
{
|
{
|
||||||
gI_CheckpointsCache[param1][iCurrentCheckpoint]--;
|
gA_CheckpointsCache[param1].iCurrentCheckpoint--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
CheckpointsCache cpcache[PCPCACHE_SIZE];
|
cp_cache_t cpcache;
|
||||||
|
|
||||||
if(iCurrent++ < iMaxCPs && GetCheckpoint(param1, iCurrent, 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))
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1790,25 +1789,25 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
|
|||||||
int iSerial = GetClientSerial(client);
|
int iSerial = GetClientSerial(client);
|
||||||
FormatEx(sKey, 32, "%d_%d", iSerial, index);
|
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);
|
gSM_Checkpoints.Remove(sKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckpointsCache cpcache[PCPCACHE_SIZE];
|
cp_cache_t cpcache;
|
||||||
float temp[3];
|
float temp[3];
|
||||||
|
|
||||||
GetClientAbsOrigin(target, temp);
|
GetClientAbsOrigin(target, temp);
|
||||||
CopyArray(temp, cpcache[fCPPosition], 3);
|
CopyArray(temp, cpcache.fPosition, 3);
|
||||||
|
|
||||||
GetClientEyeAngles(target, temp);
|
GetClientEyeAngles(target, temp);
|
||||||
CopyArray(temp, cpcache[fCPAngles], 3);
|
CopyArray(temp, cpcache.fAngles, 3);
|
||||||
|
|
||||||
GetEntPropVector(target, Prop_Data, "m_vecAbsVelocity", temp);
|
GetEntPropVector(target, Prop_Data, "m_vecAbsVelocity", temp);
|
||||||
CopyArray(temp, cpcache[fCPVelocity], 3);
|
CopyArray(temp, cpcache.fVelocity, 3);
|
||||||
|
|
||||||
char sTargetname[64];
|
char sTargetname[64];
|
||||||
GetEntPropString(target, Prop_Data, "m_iName", 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);
|
iClassname = gA_Classnames.PushString(sClassname);
|
||||||
}
|
}
|
||||||
|
|
||||||
cpcache[iCPTargetname] = iTargetname;
|
cpcache.iTargetname = iTargetname;
|
||||||
cpcache[iCPClassname] = iClassname;
|
cpcache.iClassname = iClassname;
|
||||||
cpcache[mtCPMoveType] = GetEntityMoveType(target);
|
cpcache.iMoveType = GetEntityMoveType(target);
|
||||||
cpcache[fCPGravity] = GetEntityGravity(target);
|
cpcache.fGravity = GetEntityGravity(target);
|
||||||
cpcache[fCPSpeed] = GetEntPropFloat(target, Prop_Send, "m_flLaggedMovementValue");
|
cpcache.fSpeed = GetEntPropFloat(target, Prop_Send, "m_flLaggedMovementValue");
|
||||||
cpcache[fCPStamina] = (gEV_Type != Engine_TF2)? GetEntPropFloat(target, Prop_Send, "m_flStamina"):0.0;
|
cpcache.fStamina = (gEV_Type != Engine_TF2)? GetEntPropFloat(target, Prop_Send, "m_flStamina"):0.0;
|
||||||
cpcache[iCPGroundEntity] = GetEntPropEnt(target, Prop_Data, "m_hGroundEntity");
|
cpcache.iGroundEntity = GetEntPropEnt(target, Prop_Data, "m_hGroundEntity");
|
||||||
|
|
||||||
int iFlags = GetEntityFlags(target);
|
int iFlags = GetEntityFlags(target);
|
||||||
|
|
||||||
@ -1846,26 +1845,26 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
|
|||||||
iFlags |= FL_AIMTARGET;
|
iFlags |= FL_AIMTARGET;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpcache[iCPFlags] = iFlags;
|
cpcache.iFlags = iFlags;
|
||||||
|
|
||||||
if(gEV_Type != Engine_TF2)
|
if(gEV_Type != Engine_TF2)
|
||||||
{
|
{
|
||||||
cpcache[bCPDucked] = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucked"));
|
cpcache.bDucked = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucked"));
|
||||||
cpcache[bCPDucking] = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucking"));
|
cpcache.bDucking = view_as<bool>(GetEntProp(target, Prop_Send, "m_bDucking"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gEV_Type == Engine_CSS)
|
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)
|
else if(gEV_Type == Engine_CSGO)
|
||||||
{
|
{
|
||||||
cpcache[fCPDucktime] = GetEntPropFloat(target, Prop_Send, "m_flDuckAmount");
|
cpcache.fDucktime = GetEntPropFloat(target, Prop_Send, "m_flDuckAmount");
|
||||||
cpcache[fCPDuckSpeed] = GetEntPropFloat(target, Prop_Send, "m_flDuckSpeed");
|
cpcache.fDuckSpeed = GetEntPropFloat(target, Prop_Send, "m_flDuckSpeed");
|
||||||
}
|
}
|
||||||
|
|
||||||
any snapshot[TIMERSNAPSHOT_SIZE];
|
timer_snapshot_t snapshot;
|
||||||
|
|
||||||
if(IsFakeClient(target))
|
if(IsFakeClient(target))
|
||||||
{
|
{
|
||||||
@ -1875,22 +1874,22 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
|
|||||||
|
|
||||||
if(style < 0 || track < 0)
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
snapshot[bTimerEnabled] = true;
|
snapshot.bTimerEnabled = true;
|
||||||
snapshot[fCurrentTime] = Shavit_GetReplayTime(style, track);
|
snapshot.fCurrentTime = Shavit_GetReplayTime(style, track);
|
||||||
snapshot[bClientPaused] = false;
|
snapshot.bClientPaused = false;
|
||||||
snapshot[bsStyle] = style;
|
snapshot.bsStyle = style;
|
||||||
snapshot[iJumps] = 0;
|
snapshot.iJumps = 0;
|
||||||
snapshot[iStrafes] = 0;
|
snapshot.iStrafes = 0;
|
||||||
snapshot[iTotalMeasures] = 0;
|
snapshot.iTotalMeasures = 0;
|
||||||
snapshot[iGoodGains] = 0;
|
snapshot.iGoodGains = 0;
|
||||||
snapshot[fServerTime] = GetEngineTime();
|
snapshot.fServerTime = GetEngineTime();
|
||||||
snapshot[iSHSWCombination] = -1;
|
snapshot.iSHSWCombination = -1;
|
||||||
snapshot[iTimerTrack] = track;
|
snapshot.iTimerTrack = track;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -1898,26 +1897,26 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
|
|||||||
Shavit_SaveSnapshot(target, snapshot);
|
Shavit_SaveSnapshot(target, snapshot);
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyArray(snapshot, cpcache[aCPSnapshot], TIMERSNAPSHOT_SIZE);
|
CopyArray(snapshot, cpcache.aSnapshot, sizeof(timer_snapshot_t));
|
||||||
|
|
||||||
if(CanSegment(target))
|
if(CanSegment(target))
|
||||||
{
|
{
|
||||||
if(gB_Replay)
|
if(gB_Replay)
|
||||||
{
|
{
|
||||||
cpcache[aCPFrames] = Shavit_GetReplayData(target);
|
cpcache.aFrames = Shavit_GetReplayData(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
cpcache[bCPSegmented] = true;
|
cpcache.bSegmented = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
cpcache[aCPFrames] = null;
|
cpcache.aFrames = null;
|
||||||
cpcache[bCPSegmented] = false;
|
cpcache.bSegmented = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpcache[iCPSerial] = GetClientSerial(target);
|
cpcache.iSerial = GetClientSerial(target);
|
||||||
cpcache[bCPPractice] = Shavit_IsPracticeMode(target);
|
cpcache.bPractice = Shavit_IsPracticeMode(target);
|
||||||
|
|
||||||
if(overflow)
|
if(overflow)
|
||||||
{
|
{
|
||||||
@ -1925,17 +1924,17 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
|
|||||||
|
|
||||||
for(int i = 1; i <= iMaxCPs; i++)
|
for(int i = 1; i <= iMaxCPs; i++)
|
||||||
{
|
{
|
||||||
CheckpointsCache cpcacheold[PCPCACHE_SIZE];
|
cp_cache_t cpcacheold;
|
||||||
FormatEx(sKey, 32, "%d_%d", iSerial, i);
|
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; // ???
|
continue; // ???
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i == 1)
|
if(i == 1)
|
||||||
{
|
{
|
||||||
delete cpcacheold[aCPFrames];
|
delete cpcacheold.aFrames;
|
||||||
gSM_Checkpoints.Remove(sKey);
|
gSM_Checkpoints.Remove(sKey);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
@ -1943,7 +1942,7 @@ bool SaveCheckpoint(int client, int index, bool overflow = false)
|
|||||||
|
|
||||||
gSM_Checkpoints.Remove(sKey);
|
gSM_Checkpoints.Remove(sKey);
|
||||||
FormatEx(sKey, 32, "%d_%d", iSerial, (i - 1)); // set cp index to one less
|
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);
|
SetCheckpoint(client, iMaxCPs, cpcache);
|
||||||
@ -1964,17 +1963,17 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckpointsCache cpcache[PCPCACHE_SIZE];
|
cp_cache_t cpcache;
|
||||||
|
|
||||||
if(!GetCheckpoint(client, index, 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
float pos[3];
|
float pos[3];
|
||||||
CopyArray(cpcache[fCPPosition], pos, 3);
|
CopyArray(cpcache.fPosition, pos, 3);
|
||||||
|
|
||||||
if(IsNullVector(pos))
|
if(IsNullVector(pos))
|
||||||
{
|
{
|
||||||
@ -1983,7 +1982,7 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
|||||||
|
|
||||||
if(!IsPlayerAlive(client))
|
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;
|
return;
|
||||||
}
|
}
|
||||||
@ -1993,18 +1992,18 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
|||||||
Shavit_StopTimer(client);
|
Shavit_StopTimer(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
any snapshot[TIMERSNAPSHOT_SIZE];
|
timer_snapshot_t snapshot;
|
||||||
CopyArray(cpcache[aCPSnapshot], snapshot, TIMERSNAPSHOT_SIZE);
|
CopyArray(cpcache.aSnapshot, snapshot, sizeof(timer_snapshot_t));
|
||||||
Shavit_LoadSnapshot(client, snapshot);
|
Shavit_LoadSnapshot(client, snapshot);
|
||||||
|
|
||||||
float ang[3];
|
float ang[3];
|
||||||
CopyArray(cpcache[fCPAngles], ang, 3);
|
CopyArray(cpcache.fAngles, ang, 3);
|
||||||
|
|
||||||
float vel[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
|
else
|
||||||
@ -2013,28 +2012,28 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TeleportEntity(client, pos,
|
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);
|
vel);
|
||||||
|
|
||||||
if(cpcache[bCPPractice] || !cpcache[bCPSegmented] || GetClientSerial(client) != cpcache[iCPSerial])
|
if(cpcache.bPractice || !cpcache.bSegmented || GetClientSerial(client) != cpcache.iSerial)
|
||||||
{
|
{
|
||||||
Shavit_SetPracticeMode(client, true, true);
|
Shavit_SetPracticeMode(client, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
MoveType mt = cpcache[mtCPMoveType];
|
MoveType mt = cpcache.iMoveType;
|
||||||
|
|
||||||
if(mt == MOVETYPE_LADDER || mt == MOVETYPE_WALK)
|
if(mt == MOVETYPE_LADDER || mt == MOVETYPE_WALK)
|
||||||
{
|
{
|
||||||
SetEntityMoveType(client, mt);
|
SetEntityMoveType(client, mt);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetEntityGravity(client, cpcache[fCPGravity]);
|
SetEntityGravity(client, cpcache.fGravity);
|
||||||
SetEntityFlags(client, cpcache[iCPFlags]);
|
SetEntityFlags(client, cpcache.iFlags);
|
||||||
|
|
||||||
SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", cpcache[fCPSpeed]);
|
SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", cpcache.fSpeed);
|
||||||
SetEntPropEnt(client, Prop_Data, "m_hGroundEntity", cpcache[iCPGroundEntity]);
|
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)
|
if(iTargetname != -1)
|
||||||
{
|
{
|
||||||
@ -2044,7 +2043,7 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
|||||||
SetEntPropString(client, Prop_Data, "m_iName", sTargetname);
|
SetEntPropString(client, Prop_Data, "m_iName", sTargetname);
|
||||||
}
|
}
|
||||||
|
|
||||||
int iClassname = gA_Classnames.FindValue(cpcache[iCPClassname]);
|
int iClassname = gA_Classnames.FindValue(cpcache.iClassname);
|
||||||
|
|
||||||
if(iClassname != -1)
|
if(iClassname != -1)
|
||||||
{
|
{
|
||||||
@ -2056,38 +2055,38 @@ void TeleportToCheckpoint(int client, int index, bool suppressMessage)
|
|||||||
|
|
||||||
if(gEV_Type != Engine_TF2)
|
if(gEV_Type != Engine_TF2)
|
||||||
{
|
{
|
||||||
SetEntPropFloat(client, Prop_Send, "m_flStamina", cpcache[fCPStamina]);
|
SetEntPropFloat(client, Prop_Send, "m_flStamina", cpcache.fStamina);
|
||||||
SetEntProp(client, Prop_Send, "m_bDucked", cpcache[bCPDucked]);
|
SetEntProp(client, Prop_Send, "m_bDucked", cpcache.bDucked);
|
||||||
SetEntProp(client, Prop_Send, "m_bDucking", cpcache[bCPDucking]);
|
SetEntProp(client, Prop_Send, "m_bDucking", cpcache.bDucking);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gEV_Type == Engine_CSS)
|
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)
|
else if(gEV_Type == Engine_CSGO)
|
||||||
{
|
{
|
||||||
SetEntPropFloat(client, Prop_Send, "m_flDuckAmount", cpcache[fCPDucktime]);
|
SetEntPropFloat(client, Prop_Send, "m_flDuckAmount", cpcache.fDucktime);
|
||||||
SetEntPropFloat(client, Prop_Send, "m_flDuckSpeed", cpcache[fCPDuckSpeed]);
|
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);
|
LogError("SetReplayData for %L failed, recorded frames are null.", client);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Shavit_SetReplayData(client, cpcache[aCPFrames]);
|
Shavit_SetReplayData(client, cpcache.aFrames);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!suppressMessage)
|
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)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(gI_NoclipMe == 2 && !CheckCommandAccess(client, "admin_noclipme", ADMFLAG_CHEATS))
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!IsPlayerAlive(client))
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -2197,7 +2196,7 @@ public Action Command_Specs(int client, int args)
|
|||||||
|
|
||||||
if(!IsPlayerAlive(iNewTarget))
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -2228,24 +2227,24 @@ public Action Command_Specs(int client, int args)
|
|||||||
|
|
||||||
if(iCount == 1)
|
if(iCount == 1)
|
||||||
{
|
{
|
||||||
FormatEx(sSpecs, 192, "%s%N", gS_ChatStrings[sMessageVariable2], i);
|
FormatEx(sSpecs, 192, "%s%N", gS_ChatStrings.sVariable2, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
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)
|
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
|
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;
|
return Plugin_Handled;
|
||||||
@ -2253,7 +2252,7 @@ public Action Command_Specs(int client, int args)
|
|||||||
|
|
||||||
public Action Shavit_OnStart(int client)
|
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;
|
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)
|
public void Shavit_OnWorldRecord(int client, int style, float time, int jumps, int strafes, float sync, int track)
|
||||||
{
|
{
|
||||||
char sUpperCase[64];
|
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++)
|
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)
|
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
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gA_SaveStates[client][bsStyle] != Shavit_GetBhopStyle(client) ||
|
if(gA_SaveStates[client].bsStyle != Shavit_GetBhopStyle(client) ||
|
||||||
gA_SaveStates[client][iTimerTrack] != Shavit_GetClientTrack(client))
|
gA_SaveStates[client].iTimerTrack != Shavit_GetClientTrack(client))
|
||||||
{
|
{
|
||||||
gB_SaveStates[client] = false;
|
gB_SaveStates[client] = false;
|
||||||
|
|
||||||
@ -2811,20 +2810,20 @@ void SaveState(int client)
|
|||||||
gB_SaveStates[client] = true;
|
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];
|
char sKey[32];
|
||||||
FormatEx(sKey, 32, "%d_%d", GetClientSerial(client), index);
|
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];
|
char sKey[32];
|
||||||
FormatEx(sKey, 32, "%d_%d", GetClientSerial(client), index);
|
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)
|
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)
|
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)
|
int GetMaxCPs(int client)
|
||||||
|
|||||||
@ -75,13 +75,12 @@ Menu gH_Top100Menu = null;
|
|||||||
Handle gH_Forwards_OnTierAssigned = null;
|
Handle gH_Forwards_OnTierAssigned = null;
|
||||||
|
|
||||||
// Timer settings.
|
// 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_StyleNames[STYLE_LIMIT][64];
|
||||||
char gS_TrackNames[TRACKS_SIZE][32];
|
char gS_TrackNames[TRACKS_SIZE][32];
|
||||||
|
|
||||||
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
|
|
||||||
int gI_Styles = 0;
|
|
||||||
|
|
||||||
public Plugin myinfo =
|
public Plugin myinfo =
|
||||||
{
|
{
|
||||||
name = "[shavit] Rankings",
|
name = "[shavit] Rankings",
|
||||||
@ -165,10 +164,12 @@ public void OnPluginStart()
|
|||||||
|
|
||||||
public void Shavit_OnChatConfigLoaded()
|
public void Shavit_OnChatConfigLoaded()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
|
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
|
||||||
{
|
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
|
||||||
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
|
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)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -572,15 +573,15 @@ public Action Command_Rank(int client, int args)
|
|||||||
|
|
||||||
if(gF_Points[target] == 0.0)
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
Shavit_PrintToChat(client, "%T", "Rank", client, gS_ChatStrings[sMessageVariable2], target, gS_ChatStrings[sMessageText],
|
Shavit_PrintToChat(client, "%T", "Rank", client, gS_ChatStrings.sVariable2, target, gS_ChatStrings.sText,
|
||||||
gS_ChatStrings[sMessageVariable], (gI_Rank[target] > gI_RankedPlayers)? gI_RankedPlayers:gI_Rank[target], gS_ChatStrings[sMessageText],
|
gS_ChatStrings.sVariable, (gI_Rank[target] > gI_RankedPlayers)? gI_RankedPlayers:gI_Rank[target], gS_ChatStrings.sText,
|
||||||
gI_RankedPlayers,
|
gI_RankedPlayers,
|
||||||
gS_ChatStrings[sMessageVariable], gF_Points[target], gS_ChatStrings[sMessageText]);
|
gS_ChatStrings.sVariable, gF_Points[target], gS_ChatStrings.sText);
|
||||||
|
|
||||||
return Plugin_Handled;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -631,7 +632,7 @@ public Action Command_SetTier(int client, int args)
|
|||||||
Call_PushCell(tier);
|
Call_PushCell(tier);
|
||||||
Call_Finish();
|
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];
|
char sQuery[256];
|
||||||
FormatEx(sQuery, 256, "REPLACE INTO %smaptiers (map, tier) VALUES ('%s', %d);", gS_MySQLPrefix, gS_Map, tier);
|
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];
|
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);
|
FormatEx(sQuery, 192, "UPDATE %splayertimes SET points = 0 WHERE style = %d;", gS_MySQLPrefix, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
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);
|
trans.AddQuery(sQuery);
|
||||||
@ -731,7 +732,7 @@ void RecalculateAll(const char[] map)
|
|||||||
{
|
{
|
||||||
for(int j = 0; j < gI_Styles; j++)
|
for(int j = 0; j < gI_Styles; j++)
|
||||||
{
|
{
|
||||||
if(gA_StyleSettings[j][bUnranked])
|
if(gA_StyleSettings[j].bUnranked)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -753,7 +754,8 @@ void RecalculateMap(const char[] map, const int track, const int style)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
char sQuery[192];
|
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);
|
gH_SQL.Query(SQL_Recalculate_Callback, sQuery, 0, DBPrio_High);
|
||||||
|
|
||||||
|
|||||||
@ -42,25 +42,23 @@
|
|||||||
#pragma semicolon 1
|
#pragma semicolon 1
|
||||||
#pragma dynamic 131072
|
#pragma dynamic 131072
|
||||||
|
|
||||||
enum
|
enum struct centralbot_cache_t
|
||||||
{
|
{
|
||||||
iCentralClient,
|
int iClient;
|
||||||
iCentralStyle,
|
int iStyle;
|
||||||
iCentralReplayStatus,
|
ReplayStatus iReplayStatus;
|
||||||
iCentralTrack,
|
int iTrack;
|
||||||
CENTRALBOTCACHE_SIZE
|
}
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
enum struct replaystrings_t
|
||||||
{
|
{
|
||||||
sReplayClanTag,
|
char sClanTag[MAX_NAME_LENGTH];
|
||||||
sReplayNameStyle,
|
char sNameStyle[MAX_NAME_LENGTH];
|
||||||
sReplayCentralName,
|
char sCentralName[MAX_NAME_LENGTH];
|
||||||
sReplayCentralStyle,
|
char sCentralStyle[MAX_NAME_LENGTH];
|
||||||
sReplayCentralStyleTag,
|
char sCentralStyleTag[MAX_NAME_LENGTH];
|
||||||
sReplayUnloaded,
|
char sUnloaded[MAX_NAME_LENGTH];
|
||||||
REPLAYSTRINGS_SIZE
|
}
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -99,7 +97,7 @@ float gF_Tickrate = 0.0;
|
|||||||
char gS_Map[160];
|
char gS_Map[160];
|
||||||
int gI_ExpectedBots = 0;
|
int gI_ExpectedBots = 0;
|
||||||
ConVar bot_quota = null;
|
ConVar bot_quota = null;
|
||||||
any gA_CentralCache[CENTRALBOTCACHE_SIZE];
|
centralbot_cache_t gA_CentralCache;
|
||||||
|
|
||||||
// how do i call this
|
// how do i call this
|
||||||
bool gB_HideNameChange = false;
|
bool gB_HideNameChange = false;
|
||||||
@ -129,14 +127,14 @@ char gS_BotWeapon[32] = "";
|
|||||||
|
|
||||||
// timer settings
|
// timer settings
|
||||||
int gI_Styles = 0;
|
int gI_Styles = 0;
|
||||||
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
|
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
|
||||||
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
|
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
|
||||||
|
|
||||||
// chat settings
|
// chat settings
|
||||||
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
|
chatstrings_t gS_ChatStrings;
|
||||||
|
|
||||||
// replay settings
|
// replay settings
|
||||||
char gS_ReplayStrings[REPLAYSTRINGS_SIZE][MAX_NAME_LENGTH];
|
replaystrings_t gS_ReplayStrings;
|
||||||
|
|
||||||
// admin menu
|
// admin menu
|
||||||
TopMenu gH_AdminMenu = null;
|
TopMenu gH_AdminMenu = null;
|
||||||
@ -348,7 +346,7 @@ public int Native_GetReplayBotIndex(Handle handler, int numParams)
|
|||||||
{
|
{
|
||||||
if(gB_CentralBot)
|
if(gB_CentralBot)
|
||||||
{
|
{
|
||||||
return gA_CentralCache[iCentralClient];
|
return gA_CentralCache.iClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gI_ReplayBotClient[GetNativeCell(1)];
|
return gI_ReplayBotClient[GetNativeCell(1)];
|
||||||
@ -361,7 +359,7 @@ public int Native_IsReplayDataLoaded(Handle handler, int numParams)
|
|||||||
|
|
||||||
if(gB_CentralBot)
|
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);
|
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(gB_CentralBot)
|
||||||
{
|
{
|
||||||
if(gA_CentralCache[iCentralStyle] == style && gA_CentralCache[iCentralTrack] == track)
|
if(gA_CentralCache.iStyle == style && gA_CentralCache.iTrack == track)
|
||||||
{
|
{
|
||||||
StopCentralReplay(0);
|
StopCentralReplay(0);
|
||||||
}
|
}
|
||||||
@ -506,7 +504,7 @@ public int Native_GetReplayTime(Handle handler, int numParams)
|
|||||||
|
|
||||||
if(gB_CentralBot)
|
if(gB_CentralBot)
|
||||||
{
|
{
|
||||||
if(gA_CentralCache[iCentralReplayStatus] == Replay_End)
|
if(gA_CentralCache.iReplayStatus == Replay_End)
|
||||||
{
|
{
|
||||||
return view_as<int>(GetReplayLength(style, track));
|
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)
|
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)
|
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
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
kv.GetString("clantag", gS_ReplayStrings[sReplayClanTag], MAX_NAME_LENGTH, "<EMPTY CLANTAG>");
|
kv.GetString("clantag", gS_ReplayStrings.sClanTag, MAX_NAME_LENGTH, "<EMPTY CLANTAG>");
|
||||||
kv.GetString("namestyle", gS_ReplayStrings[sReplayNameStyle], MAX_NAME_LENGTH, "<EMPTY NAMESTYLE>");
|
kv.GetString("namestyle", gS_ReplayStrings.sNameStyle, MAX_NAME_LENGTH, "<EMPTY NAMESTYLE>");
|
||||||
kv.GetString("centralname", gS_ReplayStrings[sReplayCentralName], MAX_NAME_LENGTH, "<EMPTY CENTRALNAME>");
|
kv.GetString("centralname", gS_ReplayStrings.sCentralName, MAX_NAME_LENGTH, "<EMPTY CENTRALNAME>");
|
||||||
kv.GetString("centralstyle", gS_ReplayStrings[sReplayCentralStyle], MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLE>");
|
kv.GetString("centralstyle", gS_ReplayStrings.sCentralStyle, MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLE>");
|
||||||
kv.GetString("centralstyletag", gS_ReplayStrings[sReplayCentralStyleTag], MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLETAG>");
|
kv.GetString("centralstyletag", gS_ReplayStrings.sCentralStyleTag, MAX_NAME_LENGTH, "<EMPTY CENTRALSTYLETAG>");
|
||||||
kv.GetString("unloaded", gS_ReplayStrings[sReplayUnloaded], MAX_NAME_LENGTH, "<EMPTY UNLOADED>");
|
kv.GetString("unloaded", gS_ReplayStrings.sUnloaded, MAX_NAME_LENGTH, "<EMPTY UNLOADED>");
|
||||||
|
|
||||||
char sFolder[PLATFORM_MAX_PATH];
|
char sFolder[PLATFORM_MAX_PATH];
|
||||||
kv.GetString("replayfolder", sFolder, PLATFORM_MAX_PATH, "{SM}/data/replaybot");
|
kv.GetString("replayfolder", sFolder, PLATFORM_MAX_PATH, "{SM}/data/replaybot");
|
||||||
@ -722,10 +720,10 @@ public void OnMapStart()
|
|||||||
Shavit_OnChatConfigLoaded();
|
Shavit_OnChatConfigLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
gA_CentralCache[iCentralClient] = -1;
|
gA_CentralCache.iClient = -1;
|
||||||
gA_CentralCache[iCentralStyle] = -1;
|
gA_CentralCache.iStyle = -1;
|
||||||
gA_CentralCache[iCentralReplayStatus] = Replay_Idle;
|
gA_CentralCache.iReplayStatus = Replay_Idle;
|
||||||
gA_CentralCache[iCentralTrack] = Track_Main;
|
gA_CentralCache.iTrack = Track_Main;
|
||||||
|
|
||||||
gB_ForciblyStopped = false;
|
gB_ForciblyStopped = false;
|
||||||
|
|
||||||
@ -896,9 +894,9 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
for(int i = 0; i < styles; i++)
|
for(int i = 0; i < styles; i++)
|
||||||
{
|
{
|
||||||
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
||||||
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i][sClanTag], 128);
|
Shavit_GetStyleStrings(i, sClanTag, gS_StyleStrings[i].sClanTag, sizeof(stylestrings_t::sClanTag));
|
||||||
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
|
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
|
||||||
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i][sShortName], 128);
|
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i].sShortName, sizeof(stylestrings_t::sShortName));
|
||||||
}
|
}
|
||||||
|
|
||||||
gI_Styles = styles;
|
gI_Styles = styles;
|
||||||
@ -906,10 +904,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
|
|
||||||
public void Shavit_OnChatConfigLoaded()
|
public void Shavit_OnChatConfigLoaded()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
|
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
|
||||||
{
|
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
|
||||||
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
|
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)
|
bool DefaultLoadReplay(int style, int track)
|
||||||
@ -1132,7 +1132,7 @@ bool DeleteReplay(int style, int track)
|
|||||||
return false;
|
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);
|
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);
|
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);
|
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, "{style}", gS_ReplayStrings.sCentralStyle);
|
||||||
ReplaceString(temp, size, "{styletag}", gS_ReplayStrings[sReplayCentralStyleTag]);
|
ReplaceString(temp, size, "{styletag}", gS_ReplayStrings.sCentralStyleTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ReplaceString(temp, size, "{style}", gS_StyleStrings[style][sStyleName]);
|
ReplaceString(temp, size, "{style}", gS_StyleStrings[style].sStyleName);
|
||||||
ReplaceString(temp, size, "{styletag}", gS_StyleStrings[style][sClanTag]);
|
ReplaceString(temp, size, "{styletag}", gS_StyleStrings[style].sClanTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReplaceString(temp, size, "{time}", sTime);
|
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);
|
SetEntProp(client, Prop_Data, "m_CollisionGroup", 2);
|
||||||
SetEntityMoveType(client, MOVETYPE_NOCLIP);
|
SetEntityMoveType(client, MOVETYPE_NOCLIP);
|
||||||
|
|
||||||
bool central = (gA_CentralCache[iCentralClient] == client);
|
bool central = (gA_CentralCache.iClient == client);
|
||||||
bool idle = (central && gA_CentralCache[iCentralReplayStatus] == Replay_Idle);
|
bool idle = (central && gA_CentralCache.iReplayStatus == Replay_Idle);
|
||||||
|
|
||||||
if(gEV_Type != Engine_TF2)
|
if(gEV_Type != Engine_TF2)
|
||||||
{
|
{
|
||||||
char sTag[MAX_NAME_LENGTH];
|
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);
|
CS_SetClientClanTag(client, sTag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1295,18 +1295,26 @@ void UpdateReplayInfo(int client, int style, float time, int track)
|
|||||||
|
|
||||||
if(central || iFrameCount > 0)
|
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
|
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;
|
gB_HideNameChange = true;
|
||||||
SetClientName(client, sName);
|
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)
|
if(gEV_Type == Engine_CSGO)
|
||||||
{
|
{
|
||||||
@ -1422,9 +1430,9 @@ public void OnClientDisconnect(int client)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gA_CentralCache[iCentralClient] == client)
|
if(gA_CentralCache.iClient == client)
|
||||||
{
|
{
|
||||||
gA_CentralCache[iCentralClient] = -1;
|
gA_CentralCache.iClient = -1;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1507,7 +1515,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
|
|||||||
|
|
||||||
if(ReplayEnabled(style))
|
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);
|
StopCentralReplay(0);
|
||||||
}
|
}
|
||||||
@ -1566,7 +1574,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
|
|||||||
{
|
{
|
||||||
if((buttons & IN_USE) > 0)
|
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);
|
OpenReplayMenu(client);
|
||||||
}
|
}
|
||||||
@ -1639,7 +1647,7 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3
|
|||||||
if(++gI_ReplayTick[style] >= iFrameCount)
|
if(++gI_ReplayTick[style] >= iFrameCount)
|
||||||
{
|
{
|
||||||
gI_ReplayTick[style] = 0;
|
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);
|
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_PushCell(gI_ReplayBotClient[data]);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
|
|
||||||
if(gI_ReplayBotClient[data] != gA_CentralCache[iCentralClient])
|
if(gI_ReplayBotClient[data] != gA_CentralCache.iClient)
|
||||||
{
|
{
|
||||||
gRS_ReplayStatus[data] = Replay_Start;
|
gRS_ReplayStatus[data] = Replay_Start;
|
||||||
|
|
||||||
@ -1820,7 +1828,7 @@ public Action Timer_EndReplay(Handle Timer, any data)
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gRS_ReplayStatus[data] = gA_CentralCache[iCentralReplayStatus] = Replay_Idle;
|
gRS_ReplayStatus[data] = gA_CentralCache.iReplayStatus = Replay_Idle;
|
||||||
gI_ReplayBotClient[data] = 0;
|
gI_ReplayBotClient[data] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1838,14 +1846,14 @@ public Action Timer_StartReplay(Handle Timer, any data)
|
|||||||
Call_PushCell(gI_ReplayBotClient[data]);
|
Call_PushCell(gI_ReplayBotClient[data]);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
|
|
||||||
gRS_ReplayStatus[data] = gA_CentralCache[iCentralReplayStatus] = Replay_Running;
|
gRS_ReplayStatus[data] = gA_CentralCache.iReplayStatus = Replay_Running;
|
||||||
|
|
||||||
return Plugin_Stop;
|
return Plugin_Stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ReplayEnabled(any style)
|
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)
|
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];
|
char sTime[32];
|
||||||
FormatSeconds(time, sTime, 32, false);
|
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
|
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);
|
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]);
|
gI_Track[param1] = StringToInt(sExploded[1]);
|
||||||
|
|
||||||
Menu submenu = new Menu(DeleteConfirmation_Callback);
|
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];
|
char sMenuItem[64];
|
||||||
|
|
||||||
@ -2097,14 +2105,14 @@ public int DeleteConfirmation_Callback(Menu menu, MenuAction action, int param1,
|
|||||||
char sTrack[32];
|
char sTrack[32];
|
||||||
GetTrackName(param1, gI_Track[param1], 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
|
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)
|
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;
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -2214,7 +2222,7 @@ void OpenReplaySubMenu(int client, int track)
|
|||||||
char sDisplay[64];
|
char sDisplay[64];
|
||||||
FormatEx(sDisplay, 64, "%T", "CentralReplayStop", client);
|
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++)
|
for(int i = 0; i < gI_Styles; i++)
|
||||||
@ -2236,12 +2244,12 @@ void OpenReplaySubMenu(int client, int track)
|
|||||||
char sTime[32];
|
char sTime[32];
|
||||||
FormatSeconds(time, sTime, 32, false);
|
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
|
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);
|
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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gA_CentralCache[iCentralReplayStatus] != Replay_Idle)
|
if(gA_CentralCache.iReplayStatus != Replay_Idle)
|
||||||
{
|
{
|
||||||
Shavit_PrintToChat(param1, "%T", "CentralReplayPlaying", param1);
|
Shavit_PrintToChat(param1, "%T", "CentralReplayPlaying", param1);
|
||||||
|
|
||||||
@ -2293,16 +2301,16 @@ public int MenuHandler_ReplaySubmenu(Menu menu, MenuAction action, int param1, i
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
gI_ReplayTick[style] = 0;
|
gI_ReplayTick[style] = 0;
|
||||||
gA_CentralCache[iCentralStyle] = style;
|
gA_CentralCache.iStyle = style;
|
||||||
gA_CentralCache[iCentralTrack] = gI_Track[param1];
|
gA_CentralCache.iTrack = gI_Track[param1];
|
||||||
gI_ReplayBotClient[style] = gA_CentralCache[iCentralClient];
|
gI_ReplayBotClient[style] = gA_CentralCache.iClient;
|
||||||
gRS_ReplayStatus[style] = gA_CentralCache[iCentralReplayStatus] = Replay_Start;
|
gRS_ReplayStatus[style] = gA_CentralCache.iReplayStatus = Replay_Start;
|
||||||
TeleportToStart(gA_CentralCache[iCentralClient], style, gI_Track[param1]);
|
TeleportToStart(gA_CentralCache.iClient, style, gI_Track[param1]);
|
||||||
gB_ForciblyStopped = false;
|
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);
|
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);
|
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_ReplayTick[style] = 0;
|
||||||
gI_ReplayBotClient[style] = 0;
|
gI_ReplayBotClient[style] = 0;
|
||||||
gF_StartTick[style] = -65535.0;
|
gF_StartTick[style] = -65535.0;
|
||||||
TeleportToStart(gA_CentralCache[iCentralClient], style, GetReplayTrack(gA_CentralCache[iCentralClient]));
|
TeleportToStart(gA_CentralCache.iClient, style, GetReplayTrack(gA_CentralCache.iClient));
|
||||||
gA_CentralCache[iCentralStyle] = 0;
|
gA_CentralCache.iStyle = 0;
|
||||||
gB_ForciblyStopped = true;
|
gB_ForciblyStopped = true;
|
||||||
|
|
||||||
UpdateReplayInfo(client, 0, 0.0, gA_CentralCache[iCentralTrack]);
|
UpdateReplayInfo(client, 0, 0.0, gA_CentralCache.iTrack);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetReplayStyle(int client)
|
int GetReplayStyle(int client)
|
||||||
@ -2369,12 +2377,12 @@ int GetReplayStyle(int client)
|
|||||||
|
|
||||||
if(gB_CentralBot)
|
if(gB_CentralBot)
|
||||||
{
|
{
|
||||||
if(gA_CentralCache[iCentralStyle] == -1)
|
if(gA_CentralCache.iStyle == -1)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gA_CentralCache[iCentralStyle];
|
return gA_CentralCache.iStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < gI_Styles; i++)
|
for(int i = 0; i < gI_Styles; i++)
|
||||||
@ -2395,7 +2403,7 @@ int GetReplayTrack(int client)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (gB_CentralBot)? gA_CentralCache[iCentralTrack]:Track_Main;
|
return (gB_CentralBot)? gA_CentralCache.iTrack:Track_Main;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetSpectatorTarget(int client)
|
int GetSpectatorTarget(int client)
|
||||||
|
|||||||
@ -65,11 +65,11 @@ bool gB_MVPRankOnes_Main = true;
|
|||||||
|
|
||||||
// timer settings
|
// timer settings
|
||||||
int gI_Styles = 0;
|
int gI_Styles = 0;
|
||||||
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
|
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
|
||||||
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
|
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
|
||||||
|
|
||||||
// chat settings
|
// chat settings
|
||||||
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
|
chatstrings_t gS_ChatStrings;
|
||||||
|
|
||||||
public Plugin myinfo =
|
public Plugin myinfo =
|
||||||
{
|
{
|
||||||
@ -167,8 +167,8 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
for(int i = 0; i < styles; i++)
|
for(int i = 0; i < styles; i++)
|
||||||
{
|
{
|
||||||
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
||||||
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
|
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
|
||||||
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i][sShortName], 128);
|
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i].sShortName, sizeof(stylestrings_t::sShortName));
|
||||||
}
|
}
|
||||||
|
|
||||||
gI_Styles = styles;
|
gI_Styles = styles;
|
||||||
@ -176,10 +176,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
|
|
||||||
public void Shavit_OnChatConfigLoaded()
|
public void Shavit_OnChatConfigLoaded()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
|
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
|
||||||
{
|
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
|
||||||
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
|
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)
|
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));
|
FormatEx(sClearString, 128, "%T: %d/%d (%.01f%%)", "MapCompletions", client, iClears, iTotalMaps, ((float(iClears) / iTotalMaps) * 100.0));
|
||||||
|
|
||||||
Menu menu = new Menu(MenuHandler_ProfileHandler);
|
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++)
|
for(int i = 0; i < gI_Styles; i++)
|
||||||
{
|
{
|
||||||
if(gA_StyleSettings[i][bUnranked])
|
if(gA_StyleSettings[i].bUnranked)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -481,7 +485,7 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
|
|||||||
char sInfo[4];
|
char sInfo[4];
|
||||||
IntToString(i, sInfo, 4);
|
IntToString(i, sInfo, 4);
|
||||||
|
|
||||||
menu.AddItem(sInfo, gS_StyleStrings[i][sStyleName]);
|
menu.AddItem(sInfo, gS_StyleStrings[i].sStyleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// should NEVER happen
|
// should NEVER happen
|
||||||
@ -498,7 +502,7 @@ public void OpenStatsMenuCallback(Database db, DBResultSet results, const char[]
|
|||||||
|
|
||||||
else
|
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);
|
gBS_Style[param1] = StringToInt(sInfo);
|
||||||
|
|
||||||
Menu submenu = new Menu(MenuHandler_TypeHandler);
|
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++)
|
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)
|
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
|
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())
|
while(results.FetchRow())
|
||||||
@ -773,7 +777,7 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
|
|||||||
|
|
||||||
// 3 - style
|
// 3 - style
|
||||||
int style = results.FetchInt(3);
|
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);
|
menu.AddItem("-1", sDisplay);
|
||||||
|
|
||||||
// 4 - steamid3
|
// 4 - steamid3
|
||||||
|
|||||||
@ -79,11 +79,11 @@ int gI_RecentLimit = 50;
|
|||||||
|
|
||||||
// timer settings
|
// timer settings
|
||||||
int gI_Styles = 0;
|
int gI_Styles = 0;
|
||||||
char gS_StyleStrings[STYLE_LIMIT][STYLESTRINGS_SIZE][128];
|
stylestrings_t gS_StyleStrings[STYLE_LIMIT];
|
||||||
any gA_StyleSettings[STYLE_LIMIT][STYLESETTINGS_SIZE];
|
stylesettings_t gA_StyleSettings[STYLE_LIMIT];
|
||||||
|
|
||||||
// chat settings
|
// chat settings
|
||||||
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
|
chatstrings_t gS_ChatStrings;
|
||||||
|
|
||||||
public Plugin myinfo =
|
public Plugin myinfo =
|
||||||
{
|
{
|
||||||
@ -384,8 +384,8 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
for(int i = 0; i < styles; i++)
|
for(int i = 0; i < styles; i++)
|
||||||
{
|
{
|
||||||
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
Shavit_GetStyleSettings(i, gA_StyleSettings[i]);
|
||||||
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i][sStyleName], 128);
|
Shavit_GetStyleStrings(i, sStyleName, gS_StyleStrings[i].sStyleName, sizeof(stylestrings_t::sStyleName));
|
||||||
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i][sShortName], 128);
|
Shavit_GetStyleStrings(i, sShortName, gS_StyleStrings[i].sShortName, sizeof(stylestrings_t::sShortName));
|
||||||
}
|
}
|
||||||
|
|
||||||
// arrays
|
// arrays
|
||||||
@ -416,10 +416,12 @@ public void Shavit_OnStyleConfigLoaded(int styles)
|
|||||||
|
|
||||||
public void Shavit_OnChatConfigLoaded()
|
public void Shavit_OnChatConfigLoaded()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
|
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
|
||||||
{
|
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
|
||||||
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
|
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)
|
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);
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
@ -745,7 +747,7 @@ void DeleteSubmenu(int client)
|
|||||||
IntToString(i, sInfo, 8);
|
IntToString(i, sInfo, 8);
|
||||||
|
|
||||||
char sDisplay[64];
|
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);
|
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++)
|
for(int i = 0; i < gI_Styles; i++)
|
||||||
{
|
{
|
||||||
if(gA_StyleSettings[i][bUnranked])
|
if(gA_StyleSettings[i].bUnranked)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -890,7 +892,7 @@ public Action Command_DeleteStyleRecords(int client, int args)
|
|||||||
IntToString(i, sInfo, 8);
|
IntToString(i, sInfo, 8);
|
||||||
|
|
||||||
char sDisplay[64];
|
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;
|
int iTotalAmount = 0;
|
||||||
|
|
||||||
@ -938,7 +940,7 @@ public int MenuHandler_DeleteStyleRecords(Menu menu, MenuAction action, int para
|
|||||||
char sMenuItem[128];
|
char sMenuItem[128];
|
||||||
|
|
||||||
Menu submenu = new Menu(MenuHandler_DeleteStyleRecords_Confirm);
|
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++)
|
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);
|
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);
|
IntToString(style, info, 16);
|
||||||
submenu.AddItem(info, sMenuItem);
|
submenu.AddItem(info, sMenuItem);
|
||||||
@ -985,7 +987,7 @@ public int MenuHandler_DeleteStyleRecords_Confirm(Menu menu, MenuAction action,
|
|||||||
return 0;
|
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];
|
char sQuery[256];
|
||||||
FormatEx(sQuery, 256, "DELETE FROM %splayertimes WHERE map = '%s' AND style = %d;", gS_MySQLPrefix, gS_Map, style);
|
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;
|
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)
|
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 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;
|
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++)
|
for(int i = 0; i < gI_Styles; i++)
|
||||||
{
|
{
|
||||||
if(gA_StyleSettings[i][bUnranked])
|
if(gA_StyleSettings[i].bUnranked)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1287,7 +1289,7 @@ public void DeleteAll_Callback(Database db, DBResultSet results, const char[] er
|
|||||||
|
|
||||||
for(int i = 0; i < gI_Styles; i++)
|
for(int i = 0; i < gI_Styles; i++)
|
||||||
{
|
{
|
||||||
if(gA_StyleSettings[i][bUnranked])
|
if(gA_StyleSettings[i].bUnranked)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1299,7 +1301,7 @@ public void DeleteAll_Callback(Database db, DBResultSet results, const char[] er
|
|||||||
Call_Finish();
|
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)
|
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++)
|
for(int i = 0; i < gI_Styles; i++)
|
||||||
{
|
{
|
||||||
if(gA_StyleSettings[i][bUnranked])
|
if(gA_StyleSettings[i].bUnranked)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1368,12 +1370,12 @@ Action ShowWRStyleMenu(int client, int track)
|
|||||||
char sTime[32];
|
char sTime[32];
|
||||||
FormatSeconds(gF_WRTime[i][track], sTime, 32, false);
|
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
|
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);
|
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)
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1654,12 +1656,12 @@ public void SQL_RR_Callback(Database db, DBResultSet results, const char[] error
|
|||||||
|
|
||||||
if(gB_Rankings && fPoints > 0.0)
|
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
|
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];
|
char sInfo[192];
|
||||||
@ -1773,7 +1775,7 @@ public void SQL_SubMenu_Callback(Database db, DBResultSet results, const char[]
|
|||||||
int jumps = results.FetchInt(2);
|
int jumps = results.FetchInt(2);
|
||||||
float perfs = results.FetchFloat(9);
|
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);
|
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);
|
menu.AddItem("-1", sDisplay);
|
||||||
|
|
||||||
// 3 - style
|
// 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);
|
menu.AddItem("-1", sDisplay);
|
||||||
|
|
||||||
// 6 - map
|
// 6 - map
|
||||||
@ -2155,7 +2157,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
|
|||||||
// 2 - update
|
// 2 - update
|
||||||
int overwrite = 0;
|
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
|
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);
|
FormatSeconds(fDifference, sDifference, 16, true);
|
||||||
|
|
||||||
char sSync[32]; // 32 because colors
|
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)
|
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
|
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)
|
if(gH_SQL == null)
|
||||||
{
|
{
|
||||||
@ -2244,7 +2246,7 @@ public void Shavit_OnFinish(int client, int style, float time, int jumps, int st
|
|||||||
|
|
||||||
else // update
|
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);
|
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;
|
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
|
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 style = results.FetchInt(0);
|
||||||
int track = results.FetchInt(2);
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
@ -2339,7 +2341,7 @@ public void SQL_UpdateLeaderboards_Callback(Database db, DBResultSet results, co
|
|||||||
|
|
||||||
for(int i = 0; i < gI_Styles; i++)
|
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;
|
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
|
"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,
|
bool bZoneInitialized;
|
||||||
iRed,
|
int iZoneType;
|
||||||
iGreen,
|
int iZoneTrack; // 0 - main, 1 - bonus
|
||||||
iBlue,
|
int iEntityID;
|
||||||
iAlpha,
|
int iDatabaseID;
|
||||||
fWidth,
|
}
|
||||||
bFlatZone,
|
|
||||||
ZONESETTINGS_SIZE
|
enum struct zone_settings_t
|
||||||
|
{
|
||||||
|
bool bVisible;
|
||||||
|
int iRed;
|
||||||
|
int iGreen;
|
||||||
|
int iBlue;
|
||||||
|
int iAlpha;
|
||||||
|
float fWidth;
|
||||||
|
bool bFlatZone;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gI_ZoneType[MAXPLAYERS+1];
|
int gI_ZoneType[MAXPLAYERS+1];
|
||||||
@ -96,8 +104,8 @@ int gI_ZoneTrack[MAXPLAYERS+1];
|
|||||||
int gI_ZoneDatabaseID[MAXPLAYERS+1];
|
int gI_ZoneDatabaseID[MAXPLAYERS+1];
|
||||||
|
|
||||||
// zone cache
|
// zone cache
|
||||||
any gA_ZoneSettings[ZONETYPES_SIZE][TRACKS_SIZE][ZONESETTINGS_SIZE];
|
zone_settings_t gA_ZoneSettings[ZONETYPES_SIZE][TRACKS_SIZE];
|
||||||
any gA_ZoneCache[MAX_ZONES][ZONECACHE_SIZE]; // Vectors will not be inside this array.
|
zone_cache_t gA_ZoneCache[MAX_ZONES]; // Vectors will not be inside this array.
|
||||||
int gI_MapZones = 0;
|
int gI_MapZones = 0;
|
||||||
float gV_MapZones[MAX_ZONES][2][3];
|
float gV_MapZones[MAX_ZONES][2][3];
|
||||||
float gV_MapZones_Visual[MAX_ZONES][8][3];
|
float gV_MapZones_Visual[MAX_ZONES][8][3];
|
||||||
@ -143,7 +151,7 @@ Handle gH_DrawEverything = null;
|
|||||||
char gS_MySQLPrefix[32];
|
char gS_MySQLPrefix[32];
|
||||||
|
|
||||||
// chat settings
|
// chat settings
|
||||||
char gS_ChatStrings[CHATSETTINGS_SIZE][128];
|
chatstrings_t gS_ChatStrings;
|
||||||
|
|
||||||
// forwards
|
// forwards
|
||||||
Handle gH_Forwards_EnterZone = null;
|
Handle gH_Forwards_EnterZone = null;
|
||||||
@ -261,13 +269,13 @@ public void OnPluginStart()
|
|||||||
{
|
{
|
||||||
for(int j = 0; j < TRACKS_SIZE; j++)
|
for(int j = 0; j < TRACKS_SIZE; j++)
|
||||||
{
|
{
|
||||||
gA_ZoneSettings[i][j][bVisible] = true;
|
gA_ZoneSettings[i][j].bVisible = true;
|
||||||
gA_ZoneSettings[i][j][iRed] = 255;
|
gA_ZoneSettings[i][j].iRed = 255;
|
||||||
gA_ZoneSettings[i][j][iGreen] = 255;
|
gA_ZoneSettings[i][j].iGreen = 255;
|
||||||
gA_ZoneSettings[i][j][iBlue] = 255;
|
gA_ZoneSettings[i][j].iBlue = 255;
|
||||||
gA_ZoneSettings[i][j][iAlpha] = 255;
|
gA_ZoneSettings[i][j].iAlpha = 255;
|
||||||
gA_ZoneSettings[i][j][fWidth] = 2.0;
|
gA_ZoneSettings[i][j].fWidth = 2.0;
|
||||||
gA_ZoneSettings[i][j][bFlatZone] = false;
|
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++)
|
for(int i = 0; i < gI_MapZones; i++)
|
||||||
{
|
{
|
||||||
if(!gA_ZoneCache[i][bZoneInitialized])
|
if(!gA_ZoneCache[i].bZoneInitialized)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -545,13 +553,13 @@ bool LoadZonesConfig()
|
|||||||
|
|
||||||
int index = (i % ZONETYPES_SIZE);
|
int index = (i % ZONETYPES_SIZE);
|
||||||
|
|
||||||
gA_ZoneSettings[index][track][bVisible] = view_as<bool>(kv.GetNum("visible", 1));
|
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].iRed = kv.GetNum("red", 255);
|
||||||
gA_ZoneSettings[index][track][iGreen] = kv.GetNum("green", 255);
|
gA_ZoneSettings[index][track].iGreen = kv.GetNum("green", 255);
|
||||||
gA_ZoneSettings[index][track][iBlue] = kv.GetNum("blue", 255);
|
gA_ZoneSettings[index][track].iBlue = kv.GetNum("blue", 255);
|
||||||
gA_ZoneSettings[index][track][iAlpha] = kv.GetNum("alpha", 255);
|
gA_ZoneSettings[index][track].iAlpha = kv.GetNum("alpha", 255);
|
||||||
gA_ZoneSettings[index][track][fWidth] = kv.GetFloat("width", 2.0);
|
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].bFlatZone = view_as<bool>(kv.GetNum("flat", false));
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -758,10 +766,12 @@ public void Frame_HookTrigger(any data)
|
|||||||
|
|
||||||
public void Shavit_OnChatConfigLoaded()
|
public void Shavit_OnChatConfigLoaded()
|
||||||
{
|
{
|
||||||
for(int i = 0; i < CHATSETTINGS_SIZE; i++)
|
Shavit_GetChatStrings(sMessagePrefix, gS_ChatStrings.sPrefix, sizeof(chatstrings_t::sPrefix));
|
||||||
{
|
Shavit_GetChatStrings(sMessageText, gS_ChatStrings.sText, sizeof(chatstrings_t::sText));
|
||||||
Shavit_GetChatStrings(i, gS_ChatStrings[i], 128);
|
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)
|
void ClearZone(int index)
|
||||||
@ -774,11 +784,11 @@ void ClearZone(int index)
|
|||||||
gV_ZoneCenter[index][i] = 0.0;
|
gV_ZoneCenter[index][i] = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
gA_ZoneCache[index][bZoneInitialized] = false;
|
gA_ZoneCache[index].bZoneInitialized = false;
|
||||||
gA_ZoneCache[index][iZoneType] = -1;
|
gA_ZoneCache[index].iZoneType = -1;
|
||||||
gA_ZoneCache[index][iZoneTrack] = -1;
|
gA_ZoneCache[index].iZoneTrack = -1;
|
||||||
gA_ZoneCache[index][iEntityID] = -1;
|
gA_ZoneCache[index].iEntityID = -1;
|
||||||
gA_ZoneCache[index][iDatabaseID] = -1;
|
gA_ZoneCache[index].iDatabaseID = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnhookEntity(int entity)
|
void UnhookEntity(int entity)
|
||||||
@ -790,7 +800,7 @@ void UnhookEntity(int entity)
|
|||||||
|
|
||||||
void KillZoneEntity(int index)
|
void KillZoneEntity(int index)
|
||||||
{
|
{
|
||||||
int entity = gA_ZoneCache[index][iEntityID];
|
int entity = gA_ZoneCache[index].iEntityID;
|
||||||
|
|
||||||
if(entity > MaxClients && IsValidEntity(entity))
|
if(entity > MaxClients && IsValidEntity(entity))
|
||||||
{
|
{
|
||||||
@ -798,7 +808,7 @@ void KillZoneEntity(int index)
|
|||||||
{
|
{
|
||||||
for(int j = 0; j < TRACKS_SIZE; j++)
|
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;
|
gB_InsideZoneID[i][index] = false;
|
||||||
@ -829,7 +839,7 @@ void UnloadZones(int zone)
|
|||||||
{
|
{
|
||||||
for(int i = 0; i < MAX_ZONES; i++)
|
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);
|
KillZoneEntity(i);
|
||||||
ClearZone(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);
|
gV_Destinations[gI_MapZones][2] = results.FetchFloat(9);
|
||||||
}
|
}
|
||||||
|
|
||||||
gA_ZoneCache[gI_MapZones][bZoneInitialized] = true;
|
gA_ZoneCache[gI_MapZones].bZoneInitialized = true;
|
||||||
gA_ZoneCache[gI_MapZones][iZoneType] = type;
|
gA_ZoneCache[gI_MapZones].iZoneType = type;
|
||||||
gA_ZoneCache[gI_MapZones][iZoneTrack] = results.FetchInt(10);
|
gA_ZoneCache[gI_MapZones].iZoneTrack = results.FetchInt(10);
|
||||||
gA_ZoneCache[gI_MapZones][iDatabaseID] = results.FetchInt(11);
|
gA_ZoneCache[gI_MapZones].iDatabaseID = results.FetchInt(11);
|
||||||
gA_ZoneCache[gI_MapZones][iEntityID] = -1;
|
gA_ZoneCache[gI_MapZones].iEntityID = -1;
|
||||||
|
|
||||||
gI_MapZones++;
|
gI_MapZones++;
|
||||||
}
|
}
|
||||||
@ -979,7 +989,7 @@ public Action Command_Modifier(int client, int args)
|
|||||||
|
|
||||||
gF_Modifier[client] = fArg1;
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -1096,7 +1106,7 @@ public Action Command_Zones(int client, int args)
|
|||||||
|
|
||||||
if(!IsPlayerAlive(client))
|
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;
|
return Plugin_Handled;
|
||||||
}
|
}
|
||||||
@ -1136,7 +1146,7 @@ Action OpenEditMenu(int client)
|
|||||||
|
|
||||||
for(int i = 0; i < sizeof(gS_ZoneNames); i++)
|
for(int i = 0; i < sizeof(gS_ZoneNames); i++)
|
||||||
{
|
{
|
||||||
if(!gA_ZoneCache[i][bZoneInitialized])
|
if(!gA_ZoneCache[i].bZoneInitialized)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1145,9 +1155,9 @@ Action OpenEditMenu(int client)
|
|||||||
IntToString(i, sInfo, 8);
|
IntToString(i, sInfo, 8);
|
||||||
|
|
||||||
char sTrack[32];
|
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])
|
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;
|
gI_MapStep[param1] = 3;
|
||||||
gV_Point1[param1] = gV_MapZones[id][0];
|
gV_Point1[param1] = gV_MapZones[id][0];
|
||||||
gV_Point2[param1] = gV_MapZones[id][1];
|
gV_Point2[param1] = gV_MapZones[id][1];
|
||||||
gI_ZoneType[param1] = gA_ZoneCache[id][iZoneType];
|
gI_ZoneType[param1] = gA_ZoneCache[id].iZoneType;
|
||||||
gI_ZoneTrack[param1] = gA_ZoneCache[id][iZoneTrack];
|
gI_ZoneTrack[param1] = gA_ZoneCache[id].iZoneTrack;
|
||||||
gV_Teleport[param1] = gV_Destinations[id];
|
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
|
// to stop the original zone from drawing
|
||||||
gA_ZoneCache[id][bZoneInitialized] = false;
|
gA_ZoneCache[id].bZoneInitialized = false;
|
||||||
|
|
||||||
// draw the zone edit
|
// draw the zone edit
|
||||||
CreateTimer(0.1, Timer_Draw, GetClientSerial(param1), TIMER_REPEAT);
|
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++)
|
for(int i = 0; i < gI_MapZones; i++)
|
||||||
{
|
{
|
||||||
if(gA_ZoneCache[i][bZoneInitialized])
|
if(gA_ZoneCache[i].bZoneInitialized)
|
||||||
{
|
{
|
||||||
char sTrack[32];
|
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];
|
char sInfo[8];
|
||||||
IntToString(i, sInfo, 8);
|
IntToString(i, sInfo, 8);
|
||||||
@ -1296,14 +1306,14 @@ public int DeleteZone_MenuHandler(Menu menu, MenuAction action, int param1, int
|
|||||||
|
|
||||||
default:
|
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];
|
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();
|
DataPack hDatapack = new DataPack();
|
||||||
hDatapack.WriteCell(GetClientSerial(param1));
|
hDatapack.WriteCell(GetClientSerial(param1));
|
||||||
hDatapack.WriteCell(gA_ZoneCache[id][iZoneType]);
|
hDatapack.WriteCell(gA_ZoneCache[id].iZoneType);
|
||||||
|
|
||||||
gH_SQL.Query(SQL_DeleteZone_Callback, sQuery, hDatapack);
|
gH_SQL.Query(SQL_DeleteZone_Callback, sQuery, hDatapack);
|
||||||
}
|
}
|
||||||
@ -1341,7 +1351,7 @@ public void SQL_DeleteZone_Callback(Database db, DBResultSet results, const char
|
|||||||
return;
|
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)
|
public Action Command_DeleteAllZones(int client, int args)
|
||||||
@ -1656,7 +1666,7 @@ public bool TraceFilter_World(int entity, int contentsMask)
|
|||||||
return (entity == 0);
|
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)
|
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);
|
bool bIncrease = view_as<bool>(StringToInt(sExploded[2]) == 1);
|
||||||
|
|
||||||
((iPoint == 1)? gV_Point1:gV_Point2)[param1][iAxis] += ((bIncrease)? gF_Modifier[param1]:-gF_Modifier[param1]);
|
((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());
|
CreateAdjustMenu(param1, GetMenuSelectionPosition());
|
||||||
}
|
}
|
||||||
@ -1994,9 +2004,9 @@ void InsertZone(int client)
|
|||||||
{
|
{
|
||||||
for(int i = 0; i < gI_MapZones; i++)
|
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++)
|
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 type = gA_ZoneCache[i].iZoneType;
|
||||||
int track = gA_ZoneCache[i][iZoneTrack];
|
int track = gA_ZoneCache[i].iZoneTrack;
|
||||||
|
|
||||||
if(gA_ZoneSettings[type][track][bVisible])
|
if(gA_ZoneSettings[type][track].bVisible)
|
||||||
{
|
{
|
||||||
DrawZone(gV_MapZones_Visual[i],
|
DrawZone(gV_MapZones_Visual[i],
|
||||||
GetZoneColors(type, track),
|
GetZoneColors(type, track),
|
||||||
RoundToCeil(float(gI_MapZones) / iMaxZonesPerFrame) * gF_Interval,
|
RoundToCeil(float(gI_MapZones) / iMaxZonesPerFrame) * gF_Interval,
|
||||||
gA_ZoneSettings[type][track][fWidth],
|
gA_ZoneSettings[type][track].fWidth,
|
||||||
gA_ZoneSettings[type][track][bFlatZone],
|
gA_ZoneSettings[type][track].bFlatZone,
|
||||||
gV_ZoneCenter[i]);
|
gV_ZoneCenter[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2081,10 +2091,10 @@ public Action Timer_DrawEverything(Handle Timer)
|
|||||||
int[] GetZoneColors(int type, int track, int customalpha = 0)
|
int[] GetZoneColors(int type, int track, int customalpha = 0)
|
||||||
{
|
{
|
||||||
int colors[4];
|
int colors[4];
|
||||||
colors[0] = gA_ZoneSettings[type][track][iRed];
|
colors[0] = gA_ZoneSettings[type][track].iRed;
|
||||||
colors[1] = gA_ZoneSettings[type][track][iGreen];
|
colors[1] = gA_ZoneSettings[type][track].iGreen;
|
||||||
colors[2] = gA_ZoneSettings[type][track][iBlue];
|
colors[2] = gA_ZoneSettings[type][track].iBlue;
|
||||||
colors[3] = (customalpha > 0)? customalpha:gA_ZoneSettings[type][track][iAlpha];
|
colors[3] = (customalpha > 0)? customalpha:gA_ZoneSettings[type][track].iAlpha;
|
||||||
|
|
||||||
return colors;
|
return colors;
|
||||||
}
|
}
|
||||||
@ -2143,7 +2153,7 @@ public Action Timer_Draw(Handle Timer, any data)
|
|||||||
int type = gI_ZoneType[client];
|
int type = gI_ZoneType[client];
|
||||||
int track = gI_ZoneTrack[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]))
|
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++)
|
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;
|
return i;
|
||||||
}
|
}
|
||||||
@ -2558,20 +2568,20 @@ public void CreateZoneEntities()
|
|||||||
{
|
{
|
||||||
for(int k = 0; k < TRACKS_SIZE; k++)
|
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;
|
gB_InsideZoneID[j][i] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gA_ZoneCache[i][iEntityID] != -1)
|
if(gA_ZoneCache[i].iEntityID != -1)
|
||||||
{
|
{
|
||||||
KillZoneEntity(i);
|
KillZoneEntity(i);
|
||||||
|
|
||||||
gA_ZoneCache[i][iEntityID] = -1;
|
gA_ZoneCache[i].iEntityID = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!gA_ZoneCache[i][bZoneInitialized])
|
if(!gA_ZoneCache[i].bZoneInitialized)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -2626,10 +2636,10 @@ public void CreateZoneEntities()
|
|||||||
SDKHook(entity, SDKHook_TouchPost, TouchPost);
|
SDKHook(entity, SDKHook_TouchPost, TouchPost);
|
||||||
|
|
||||||
gI_EntityZone[entity] = i;
|
gI_EntityZone[entity] = i;
|
||||||
gA_ZoneCache[i][iEntityID] = entity;
|
gA_ZoneCache[i].iEntityID = entity;
|
||||||
|
|
||||||
char sTargetname[32];
|
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);
|
DispatchKeyValue(entity, "targetname", sTargetname);
|
||||||
|
|
||||||
gB_ZonesCreated = true;
|
gB_ZonesCreated = true;
|
||||||
@ -2638,15 +2648,15 @@ public void CreateZoneEntities()
|
|||||||
|
|
||||||
public void StartTouchPost(int entity, int other)
|
public void StartTouchPost(int entity, int other)
|
||||||
{
|
{
|
||||||
if(other < 1 || other > MaxClients || gI_EntityZone[entity] == -1 || !gA_ZoneCache[gI_EntityZone[entity]][bZoneInitialized] || IsFakeClient(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)))
|
(gB_EnforceTracks && gA_ZoneCache[gI_EntityZone[entity]].iZoneType > Zone_End && gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack != Shavit_GetClientTrack(other)))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TimerStatus status = Shavit_GetTimerStatus(other);
|
TimerStatus status = Shavit_GetTimerStatus(other);
|
||||||
|
|
||||||
switch(gA_ZoneCache[gI_EntityZone[entity]][iZoneType])
|
switch(gA_ZoneCache[gI_EntityZone[entity]].iZoneType)
|
||||||
{
|
{
|
||||||
case Zone_Respawn:
|
case Zone_Respawn:
|
||||||
{
|
{
|
||||||
@ -2662,7 +2672,7 @@ public void StartTouchPost(int entity, int other)
|
|||||||
{
|
{
|
||||||
Shavit_StopTimer(other);
|
Shavit_StopTimer(other);
|
||||||
ForcePlayerSuicide(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:
|
case Zone_Stop:
|
||||||
@ -2670,26 +2680,26 @@ public void StartTouchPost(int entity, int other)
|
|||||||
if(status != Timer_Stopped)
|
if(status != Timer_Stopped)
|
||||||
{
|
{
|
||||||
Shavit_StopTimer(other);
|
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:
|
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;
|
gB_InsideZoneID[other][gI_EntityZone[entity]] = true;
|
||||||
|
|
||||||
Call_StartForward(gH_Forwards_EnterZone);
|
Call_StartForward(gH_Forwards_EnterZone);
|
||||||
Call_PushCell(other);
|
Call_PushCell(other);
|
||||||
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]][iZoneType]);
|
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]].iZoneType);
|
||||||
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]][iZoneTrack]);
|
Call_PushCell(gA_ZoneCache[gI_EntityZone[entity]].iZoneTrack);
|
||||||
Call_PushCell(gI_EntityZone[entity]);
|
Call_PushCell(gI_EntityZone[entity]);
|
||||||
Call_PushCell(entity);
|
Call_PushCell(entity);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
@ -2703,8 +2713,8 @@ public void EndTouchPost(int entity, int other)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int entityzone = gI_EntityZone[entity];
|
int entityzone = gI_EntityZone[entity];
|
||||||
int type = gA_ZoneCache[entityzone][iZoneType];
|
int type = gA_ZoneCache[entityzone].iZoneType;
|
||||||
int track = gA_ZoneCache[entityzone][iZoneTrack];
|
int track = gA_ZoneCache[entityzone].iZoneTrack;
|
||||||
|
|
||||||
gB_InsideZone[other][type][track] = false;
|
gB_InsideZone[other][type][track] = false;
|
||||||
gB_InsideZoneID[other][entityzone] = false;
|
gB_InsideZoneID[other][entityzone] = false;
|
||||||
@ -2721,13 +2731,13 @@ public void EndTouchPost(int entity, int other)
|
|||||||
public void TouchPost(int entity, int other)
|
public void TouchPost(int entity, int other)
|
||||||
{
|
{
|
||||||
if(other < 1 || other > MaxClients || gI_EntityZone[entity] == -1 || IsFakeClient(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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// do precise stuff here, this will be called *A LOT*
|
// 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:
|
case Zone_Start:
|
||||||
{
|
{
|
||||||
@ -2735,10 +2745,10 @@ public void TouchPost(int entity, int other)
|
|||||||
// so you don't accidentally step on those while running
|
// so you don't accidentally step on those while running
|
||||||
if(Shavit_GetTimerStatus(other) == Timer_Stopped || Shavit_GetClientTrack(other) != Track_Main)
|
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);
|
Shavit_StartTimer(other, Track_Main);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user