2018-07-06 14:11:38 +00:00
|
|
|
#ifndef GAME_SERVER_SCORE_H
|
|
|
|
#define GAME_SERVER_SCORE_H
|
2010-07-29 05:21:18 +00:00
|
|
|
|
2019-05-19 22:12:59 +00:00
|
|
|
#include <memory>
|
2020-05-26 21:22:16 +00:00
|
|
|
#include <atomic>
|
2019-05-19 22:12:59 +00:00
|
|
|
|
2020-06-24 21:14:09 +00:00
|
|
|
#include <game/voting.h>
|
|
|
|
#include <engine/map.h>
|
2020-05-26 21:22:16 +00:00
|
|
|
#include "save.h"
|
2010-08-20 17:45:09 +00:00
|
|
|
|
2019-04-02 17:53:37 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
NUM_CHECKPOINTS = 25,
|
|
|
|
TIMESTAMP_STR_LENGTH = 20, // 2019-04-02 19:38:36
|
|
|
|
};
|
2010-07-29 05:21:18 +00:00
|
|
|
|
2020-06-24 21:14:09 +00:00
|
|
|
struct CScorePlayerResult
|
|
|
|
{
|
|
|
|
std::atomic_bool m_Done;
|
|
|
|
CScorePlayerResult();
|
|
|
|
|
|
|
|
enum {
|
|
|
|
MAX_MESSAGES = 7,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum Variant
|
|
|
|
{
|
|
|
|
DIRECT,
|
|
|
|
ALL,
|
|
|
|
BROADCAST,
|
|
|
|
MAP_VOTE,
|
|
|
|
PLAYER_INFO,
|
|
|
|
} m_MessageKind;
|
|
|
|
union {
|
|
|
|
char m_aaMessages[MAX_MESSAGES][512];
|
|
|
|
char m_Broadcast[1024];
|
|
|
|
struct {
|
|
|
|
float m_Time;
|
|
|
|
float m_CpTime[NUM_CHECKPOINTS];
|
|
|
|
int m_Score;
|
|
|
|
int m_HasFinishScore;
|
|
|
|
int m_Birthday; // 0 indicates no birthday
|
|
|
|
} m_Info;
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
char m_Reason[VOTE_REASON_LENGTH];
|
|
|
|
char m_Server[32+1];
|
|
|
|
char m_Map[MAX_MAP_LENGTH+1];
|
|
|
|
} m_MapVote;
|
|
|
|
} m_Data; // PLAYER_INFO
|
|
|
|
|
|
|
|
void SetVariant(Variant v);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct CScoreRandomMapResult
|
|
|
|
{
|
|
|
|
std::atomic_bool m_Done;
|
|
|
|
CScoreRandomMapResult(int ClientID) :
|
|
|
|
m_Done(false),
|
|
|
|
m_ClientID(ClientID)
|
|
|
|
{
|
|
|
|
m_Map[0] = '\0';
|
|
|
|
m_aMessage[0] = '\0';
|
|
|
|
}
|
|
|
|
int m_ClientID;
|
|
|
|
char m_Map[MAX_MAP_LENGTH];
|
|
|
|
char m_aMessage[512];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct CScoreSaveResult
|
|
|
|
{
|
|
|
|
CScoreSaveResult(int PlayerID, IGameController* Controller) :
|
|
|
|
m_Status(SAVE_FAILED),
|
|
|
|
m_SavedTeam(CSaveTeam(Controller)),
|
|
|
|
m_RequestingPlayer(PlayerID)
|
|
|
|
{
|
|
|
|
m_aMessage[0] = '\0';
|
|
|
|
m_aBroadcast[0] = '\0';
|
|
|
|
}
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
SAVE_SUCCESS,
|
|
|
|
// load team in the following two cases
|
|
|
|
SAVE_FAILED,
|
|
|
|
LOAD_SUCCESS,
|
|
|
|
LOAD_FAILED,
|
|
|
|
} m_Status;
|
|
|
|
char m_aMessage[512];
|
|
|
|
char m_aBroadcast[512];
|
|
|
|
CSaveTeam m_SavedTeam;
|
|
|
|
int m_RequestingPlayer;
|
|
|
|
CUuid m_SaveID;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct CScoreInitResult
|
|
|
|
{
|
|
|
|
CScoreInitResult() :
|
|
|
|
m_Done(false),
|
|
|
|
m_CurrentRecord(0)
|
|
|
|
{ }
|
|
|
|
std::atomic_bool m_Done;
|
|
|
|
float m_CurrentRecord;
|
|
|
|
};
|
|
|
|
|
2010-08-23 19:37:27 +00:00
|
|
|
class CPlayerData
|
2010-07-29 05:21:18 +00:00
|
|
|
{
|
|
|
|
public:
|
2010-08-23 19:37:27 +00:00
|
|
|
CPlayerData()
|
|
|
|
{
|
|
|
|
Reset();
|
|
|
|
}
|
2020-06-04 15:33:10 +00:00
|
|
|
~CPlayerData() {}
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2010-08-23 19:37:27 +00:00
|
|
|
void Reset()
|
|
|
|
{
|
|
|
|
m_BestTime = 0;
|
|
|
|
m_CurrentTime = 0;
|
2010-11-04 18:10:51 +00:00
|
|
|
for(int i = 0; i < NUM_CHECKPOINTS; i++)
|
2010-08-23 19:37:27 +00:00
|
|
|
m_aBestCpTime[i] = 0;
|
|
|
|
}
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2010-11-04 18:10:51 +00:00
|
|
|
void Set(float Time, float CpTime[NUM_CHECKPOINTS])
|
2010-08-23 19:37:27 +00:00
|
|
|
{
|
|
|
|
m_BestTime = Time;
|
2020-06-04 15:33:10 +00:00
|
|
|
m_CurrentTime = Time;
|
2010-11-04 18:10:51 +00:00
|
|
|
for(int i = 0; i < NUM_CHECKPOINTS; i++)
|
2010-08-23 19:37:27 +00:00
|
|
|
m_aBestCpTime[i] = CpTime[i];
|
|
|
|
}
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2010-08-23 19:37:27 +00:00
|
|
|
float m_BestTime;
|
|
|
|
float m_CurrentTime;
|
2010-11-04 18:10:51 +00:00
|
|
|
float m_aBestCpTime[NUM_CHECKPOINTS];
|
2010-07-29 05:21:18 +00:00
|
|
|
};
|
|
|
|
|
2010-08-23 19:37:27 +00:00
|
|
|
class IScore
|
2010-07-29 05:21:18 +00:00
|
|
|
{
|
2010-08-23 19:37:27 +00:00
|
|
|
CPlayerData m_aPlayerData[MAX_CLIENTS];
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2010-07-29 05:21:18 +00:00
|
|
|
public:
|
2010-08-23 19:37:27 +00:00
|
|
|
virtual ~IScore() {}
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2010-08-23 19:37:27 +00:00
|
|
|
CPlayerData *PlayerData(int ID) { return &m_aPlayerData[ID]; }
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2017-11-23 14:47:38 +00:00
|
|
|
virtual void MapInfo(int ClientID, const char *pMapName) = 0;
|
2020-05-28 13:29:14 +00:00
|
|
|
virtual void MapVote(int ClientID, const char *pMapName) = 0;
|
2020-06-04 15:33:10 +00:00
|
|
|
virtual void LoadPlayerData(int ClientID) = 0;
|
2019-04-02 17:53:37 +00:00
|
|
|
virtual void SaveScore(int ClientID, float Time, const char *pTimestamp, float aCpTime[NUM_CHECKPOINTS], bool NotEligible) = 0;
|
2013-07-21 06:46:52 +00:00
|
|
|
|
2019-04-02 17:53:37 +00:00
|
|
|
virtual void SaveTeamScore(int *pClientIDs, unsigned int Size, float Time, const char *pTimestamp) = 0;
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2020-05-29 14:50:01 +00:00
|
|
|
virtual void ShowTop5(int ClientID, int Offset=1) = 0;
|
2020-05-28 15:48:34 +00:00
|
|
|
virtual void ShowRank(int ClientID, const char *pName) = 0;
|
2013-07-21 02:52:23 +00:00
|
|
|
|
2020-05-29 14:50:01 +00:00
|
|
|
virtual void ShowTeamTop5(int ClientID, int Offset=1) = 0;
|
2020-05-28 15:48:34 +00:00
|
|
|
virtual void ShowTeamRank(int ClientID, const char *pName) = 0;
|
2013-07-21 06:46:52 +00:00
|
|
|
|
2020-05-29 14:50:01 +00:00
|
|
|
virtual void ShowTopPoints(int ClientID, int Offset=1) = 0;
|
2020-05-28 15:48:34 +00:00
|
|
|
virtual void ShowPoints(int ClientID, const char *pName) = 0;
|
2014-06-20 20:40:23 +00:00
|
|
|
|
2020-06-24 21:14:09 +00:00
|
|
|
virtual void ShowTimes(int ClientID, const char *pName, int Offset = 1) = 0;
|
|
|
|
virtual void ShowTimes(int ClientID, int Offset = 1) = 0;
|
|
|
|
|
2020-05-26 21:22:16 +00:00
|
|
|
virtual void RandomMap(int ClientID, int Stars) = 0;
|
2020-05-28 13:29:14 +00:00
|
|
|
virtual void RandomUnfinishedMap(int ClientID, int Stars) = 0;
|
2014-10-10 23:01:32 +00:00
|
|
|
|
2020-06-02 14:27:31 +00:00
|
|
|
virtual void SaveTeam(int ClientID, const char *pCode, const char *pServer) = 0;
|
2017-03-21 10:24:44 +00:00
|
|
|
virtual void LoadTeam(const char *pCode, int ClientID) = 0;
|
2020-05-23 17:01:19 +00:00
|
|
|
virtual void GetSaves(int ClientID) = 0;
|
2016-05-04 13:32:24 +00:00
|
|
|
|
|
|
|
// called when the server is shut down but not on mapchange/reload
|
|
|
|
virtual void OnShutdown() = 0;
|
2010-07-29 05:21:18 +00:00
|
|
|
};
|
|
|
|
|
2018-07-06 14:11:38 +00:00
|
|
|
#endif // GAME_SERVER_SCORE_H
|