mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 17:44:18 +00:00
some little cleanup
If /times is entered with no params it now shows last 5 times of server in general
This commit is contained in:
parent
7455ebfee9
commit
84196b1ef3
|
@ -57,7 +57,7 @@ CONSOLE_COMMAND("rules", "", CFGFLAG_SERVER, ConRules, this, "Shows the server r
|
|||
CONSOLE_COMMAND("team", "?i", CFGFLAG_SERVER, ConJoinTeam, this, "Lets you join team i (shows your team if left blank)", -1)
|
||||
CONSOLE_COMMAND("top5", "?i", CFGFLAG_SERVER, ConTop5, this, "Shows five ranks of the ladder beginning with rank i (1 by default)", -1)
|
||||
#if defined(CONF_SQL)
|
||||
CONSOLE_COMMAND("times", "?si", CFGFLAG_SERVER, ConTimes, this, "Shows last 5 times beginning with time i of player with name s (i = 1 by default)", -1)
|
||||
CONSOLE_COMMAND("times", "?s?i", CFGFLAG_SERVER, ConTimes, this, "/times ?s?i shows last 5 times of the server or of a player beginning with name s starting with time i (i = 1 by default)", -1)
|
||||
#endif
|
||||
CONSOLE_COMMAND("showothers", "", CFGFLAG_SERVER, ConShowOthers, this, "Whether to showplayers from other teams or not (off by default)", -1)
|
||||
|
||||
|
|
|
@ -767,10 +767,19 @@ void CGameContext::ConTimes(IConsole::IResult *pResult, void *pUserData, int Cli
|
|||
if(!pPlayer)
|
||||
return;
|
||||
|
||||
if(pResult->NumArguments() > 0 && pResult->NumArguments() < 3)
|
||||
if(pResult->NumArguments() == 0)
|
||||
{
|
||||
pScore->ShowTimes(pPlayer->GetCID(),1);
|
||||
return;
|
||||
}
|
||||
|
||||
else if(pResult->NumArguments() < 3)
|
||||
{
|
||||
if (pResult->NumArguments() == 1)
|
||||
{
|
||||
if(pResult->GetInteger(0) != 0)
|
||||
pScore->ShowTimes(pPlayer->GetCID(),pResult->GetInteger(0));
|
||||
else
|
||||
pScore->ShowTimes(pPlayer->GetCID(), (str_comp(pResult->GetString(0), "me") == 0) ? pSelf->Server()->ClientName(ClientID) : pResult->GetString(0),1);
|
||||
return;
|
||||
}
|
||||
|
@ -781,8 +790,8 @@ void CGameContext::ConTimes(IConsole::IResult *pResult, void *pUserData, int Cli
|
|||
}
|
||||
}
|
||||
|
||||
pSelf->Console()->PrintResponse(IConsole::OUTPUT_LEVEL_STANDARD, "info", "/times needs 1 or 2 parameter. 1. = name, 2. = start with number");
|
||||
pSelf->Console()->PrintResponse(IConsole::OUTPUT_LEVEL_STANDARD, "info", "Example: /times me, /times Hans, /times \"Papa Smurf\" 5");
|
||||
pSelf->Console()->PrintResponse(IConsole::OUTPUT_LEVEL_STANDARD, "info", "/times needs 0, 1 or 2 parameter. 1. = name, 2. = start number");
|
||||
pSelf->Console()->PrintResponse(IConsole::OUTPUT_LEVEL_STANDARD, "info", "Example: /times, /times me, /times Hans, /times \"Papa Smurf\" 5");
|
||||
pSelf->Console()->PrintResponse(IConsole::OUTPUT_LEVEL_STANDARD, "info", "Bad: /times Papa Smurf 5 # Good: /times \"Papa Smurf\" 5 ");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -388,70 +388,6 @@ void CSqlScore::ShowRankThread(void *pUser)
|
|||
lock_release(gs_SqlLock);
|
||||
}
|
||||
|
||||
void CSqlScore::agoTimeToString(int agoTime, char agoString[]){
|
||||
char aBuf[20];
|
||||
int times[7] = {
|
||||
60 * 60 * 24 * 365 ,
|
||||
60 * 60 * 24 * 30 ,
|
||||
60 * 60 * 24 * 7,
|
||||
60 * 60 * 24 ,
|
||||
60 * 60 ,
|
||||
60 ,
|
||||
1
|
||||
};
|
||||
char names[7][6] = {
|
||||
"year",
|
||||
"month",
|
||||
"week",
|
||||
"day",
|
||||
"hour",
|
||||
"min",
|
||||
"sec"
|
||||
};
|
||||
|
||||
int seconds = 0;
|
||||
char name[6];
|
||||
int count = 0;
|
||||
int i = 0;
|
||||
|
||||
// finding biggest match
|
||||
for(i = 0; i<7; i++){
|
||||
seconds = times[i];
|
||||
strcpy(name,names[i]);
|
||||
|
||||
count = floor(double(agoTime/seconds));
|
||||
if(count != 0){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(count == 1){
|
||||
str_format(aBuf, sizeof(aBuf), "%d %s", 1 , name);
|
||||
}else{
|
||||
str_format(aBuf, sizeof(aBuf), "%d %ss", count , name);
|
||||
}
|
||||
strcat(agoString,aBuf);
|
||||
|
||||
if (i + 1 < 7) {
|
||||
// getting second piece now
|
||||
int seconds2 = times[i+1];
|
||||
char name2[6];
|
||||
strcpy(name2,names[i+1]);
|
||||
|
||||
// add second piece if it's greater than 0
|
||||
int count2 = floor(double((agoTime - (seconds * count)) / seconds2));
|
||||
|
||||
if (count2 != 0) {
|
||||
if(count2 == 1){
|
||||
str_format(aBuf, sizeof(aBuf), " and %d %s", 1 , name2);
|
||||
}else{
|
||||
str_format(aBuf, sizeof(aBuf), " and %d %ss", count2 , name2);
|
||||
}
|
||||
strcat(agoString,aBuf);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSqlScore::ShowRank(int ClientID, const char* pName, bool Search)
|
||||
{
|
||||
CSqlScoreData *Tmp = new CSqlScoreData();
|
||||
|
@ -534,32 +470,54 @@ void CSqlScore::ShowTimesThread(void *pUser)
|
|||
strcpy(originalName,pData->m_aName);
|
||||
pData->m_pSqlData->ClearString(pData->m_aName);
|
||||
|
||||
// check sort methode
|
||||
char aBuf[512];
|
||||
|
||||
if(pData->m_Search) // last 5 times of a player
|
||||
str_format(aBuf, sizeof(aBuf), "SELECT Time, UNIX_TIMESTAMP(CURRENT_TIMESTAMP)-UNIX_TIMESTAMP(Timestamp) as Ago, UNIX_TIMESTAMP(Timestamp) as Stamp FROM %s_%s_race WHERE Name = '%s' ORDER BY Ago ASC LIMIT %d, 5;", pData->m_pSqlData->m_pPrefix, pData->m_pSqlData->m_aMap, pData->m_aName, pData->m_Num-1);
|
||||
else // last 5 times of server
|
||||
str_format(aBuf, sizeof(aBuf), "SELECT Name, Time, UNIX_TIMESTAMP(CURRENT_TIMESTAMP)-UNIX_TIMESTAMP(Timestamp) as Ago, UNIX_TIMESTAMP(Timestamp) as Stamp FROM %s_%s_race ORDER BY Ago ASC LIMIT %d, 5;", pData->m_pSqlData->m_pPrefix, pData->m_pSqlData->m_aMap, pData->m_Num-1);
|
||||
|
||||
pData->m_pSqlData->m_pResults = pData->m_pSqlData->m_pStatement->executeQuery(aBuf);
|
||||
|
||||
// show top5
|
||||
pData->m_pSqlData->GameServer()->SendChatTarget(pData->m_ClientID, "--------- Last 5 Times ---------");
|
||||
if(pData->m_pSqlData->m_pResults->rowsCount() == 0){
|
||||
pData->m_pSqlData->GameServer()->SendChatTarget(pData->m_ClientID, "There are no times in the specified range");
|
||||
goto end;
|
||||
}
|
||||
|
||||
str_format(aBuf, sizeof(aBuf), "------------ Last Times No %d - %d ------------",pData->m_Num,pData->m_Num + pData->m_pSqlData->m_pResults->rowsCount() - 1);
|
||||
pData->m_pSqlData->GameServer()->SendChatTarget(pData->m_ClientID, aBuf);
|
||||
|
||||
float pTime = 0;
|
||||
int pSince = 0;
|
||||
int pStamp = 0;
|
||||
|
||||
float Time = 0;
|
||||
int since = 0;
|
||||
int stamp = 0;
|
||||
while(pData->m_pSqlData->m_pResults->next())
|
||||
{
|
||||
char agoString[40] = "\0";
|
||||
since = (int)pData->m_pSqlData->m_pResults->getInt("Ago");
|
||||
stamp = (int)pData->m_pSqlData->m_pResults->getInt("Stamp");
|
||||
Time = (float)pData->m_pSqlData->m_pResults->getDouble("Time");
|
||||
agoTimeToString(since,agoString);
|
||||
char pAgoString[40] = "\0";
|
||||
pSince = (int)pData->m_pSqlData->m_pResults->getInt("Ago");
|
||||
pStamp = (int)pData->m_pSqlData->m_pResults->getInt("Stamp");
|
||||
pTime = (float)pData->m_pSqlData->m_pResults->getDouble("Time");
|
||||
|
||||
if(stamp == 0) // stamp is 00:00:00 cause it's an old entry from old times where there where no stamps yet
|
||||
str_format(aBuf, sizeof(aBuf), "Time: %d min %.2f sec, don't know how long ago", (int)(Time/60), Time-((int)Time/60*60));
|
||||
agoTimeToString(pSince,pAgoString);
|
||||
|
||||
if(pData->m_Search) // last 5 times of a player
|
||||
{
|
||||
if(pStamp == 0) // stamp is 00:00:00 cause it's an old entry from old times where there where no stamps yet
|
||||
str_format(aBuf, sizeof(aBuf), "%d min %.2f sec, don't know how long ago", (int)(pTime/60), pTime-((int)pTime/60*60));
|
||||
else
|
||||
str_format(aBuf, sizeof(aBuf), "Time: %d min %.2f sec, %s ago", (int)(Time/60), Time-((int)Time/60*60),agoString);
|
||||
str_format(aBuf, sizeof(aBuf), "%s ago, %d min %.2f sec", pAgoString,(int)(pTime/60), pTime-((int)pTime/60*60));
|
||||
}
|
||||
else // last 5 times of the server
|
||||
{
|
||||
if(pStamp == 0) // stamp is 00:00:00 cause it's an old entry from old times where there where no stamps yet
|
||||
str_format(aBuf, sizeof(aBuf), "%s, %d m %.2f s, don't know when", pData->m_pSqlData->m_pResults->getString("Name").c_str(), (int)(pTime/60), pTime-((int)pTime/60*60));
|
||||
else
|
||||
str_format(aBuf, sizeof(aBuf), "%s, %s ago, %d m %.2f s", pData->m_pSqlData->m_pResults->getString("Name").c_str(), pAgoString, (int)(pTime/60), pTime-((int)pTime/60*60));
|
||||
}
|
||||
pData->m_pSqlData->GameServer()->SendChatTarget(pData->m_ClientID, aBuf);
|
||||
}
|
||||
pData->m_pSqlData->GameServer()->SendChatTarget(pData->m_ClientID, "------------------------------------");
|
||||
pData->m_pSqlData->GameServer()->SendChatTarget(pData->m_ClientID, "----------------------------------------------------");
|
||||
|
||||
dbg_msg("SQL", "Showing times done");
|
||||
|
||||
|
@ -574,11 +532,10 @@ void CSqlScore::ShowTimesThread(void *pUser)
|
|||
dbg_msg("SQL", aBuf);
|
||||
dbg_msg("SQL", "ERROR: Could not show times");
|
||||
}
|
||||
|
||||
end:
|
||||
// disconnect from database
|
||||
pData->m_pSqlData->Disconnect();
|
||||
}
|
||||
|
||||
delete pData;
|
||||
|
||||
lock_release(gs_SqlLock);
|
||||
|
@ -597,6 +554,21 @@ void CSqlScore::ShowTop5(int ClientID, int Debut)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
void CSqlScore::ShowTimes(int ClientID, int Debut)
|
||||
{
|
||||
CSqlScoreData *Tmp = new CSqlScoreData();
|
||||
Tmp->m_Num = Debut;
|
||||
Tmp->m_ClientID = ClientID;
|
||||
Tmp->m_pSqlData = this;
|
||||
Tmp->m_Search = false;
|
||||
|
||||
void *TimesThread = thread_create(ShowTimesThread, Tmp);
|
||||
#if defined(CONF_FAMILY_UNIX)
|
||||
pthread_detach((pthread_t)TimesThread);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CSqlScore::ShowTimes(int ClientID, const char* pName, int Debut)
|
||||
{
|
||||
CSqlScoreData *Tmp = new CSqlScoreData();
|
||||
|
@ -604,6 +576,7 @@ void CSqlScore::ShowTimes(int ClientID, const char* pName, int Debut)
|
|||
Tmp->m_ClientID = ClientID;
|
||||
str_copy(Tmp->m_aName, pName, sizeof(Tmp->m_aName));
|
||||
Tmp->m_pSqlData = this;
|
||||
Tmp->m_Search = true;
|
||||
|
||||
void *TimesThread = thread_create(ShowTimesThread, Tmp);
|
||||
#if defined(CONF_FAMILY_UNIX)
|
||||
|
@ -647,4 +620,68 @@ void CSqlScore::NormalizeMapname(char *pString) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSqlScore::agoTimeToString(int agoTime, char agoString[]){
|
||||
char aBuf[20];
|
||||
int times[7] = {
|
||||
60 * 60 * 24 * 365 ,
|
||||
60 * 60 * 24 * 30 ,
|
||||
60 * 60 * 24 * 7,
|
||||
60 * 60 * 24 ,
|
||||
60 * 60 ,
|
||||
60 ,
|
||||
1
|
||||
};
|
||||
char names[7][6] = {
|
||||
"year",
|
||||
"month",
|
||||
"week",
|
||||
"day",
|
||||
"hour",
|
||||
"min",
|
||||
"sec"
|
||||
};
|
||||
|
||||
int seconds = 0;
|
||||
char name[6];
|
||||
int count = 0;
|
||||
int i = 0;
|
||||
|
||||
// finding biggest match
|
||||
for(i = 0; i<7; i++){
|
||||
seconds = times[i];
|
||||
strcpy(name,names[i]);
|
||||
|
||||
count = floor(agoTime/seconds);
|
||||
if(count != 0){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(count == 1){
|
||||
str_format(aBuf, sizeof(aBuf), "%d %s", 1 , name);
|
||||
}else{
|
||||
str_format(aBuf, sizeof(aBuf), "%d %ss", count , name);
|
||||
}
|
||||
strcat(agoString,aBuf);
|
||||
|
||||
if (i + 1 < 7) {
|
||||
// getting second piece now
|
||||
int seconds2 = times[i+1];
|
||||
char name2[6];
|
||||
strcpy(name2,names[i+1]);
|
||||
|
||||
// add second piece if it's greater than 0
|
||||
int count2 = floor((agoTime - (seconds * count)) / seconds2);
|
||||
|
||||
if (count2 != 0) {
|
||||
if(count2 == 1){
|
||||
str_format(aBuf, sizeof(aBuf), " and %d %s", 1 , name2);
|
||||
}else{
|
||||
str_format(aBuf, sizeof(aBuf), " and %d %ss", count2 , name2);
|
||||
}
|
||||
strcat(agoString,aBuf);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -58,6 +58,7 @@ public:
|
|||
virtual void SaveScore(int ClientID, float Time, CCharacter *pChar);
|
||||
virtual void ShowRank(int ClientID, const char* pName, bool Search=false);
|
||||
virtual void ShowTimes(int ClientID, const char* pName, int Debut=1);
|
||||
virtual void ShowTimes(int ClientID, int Debut=1);
|
||||
virtual void ShowTop5(int ClientID, int Debut=1);
|
||||
static void agoTimeToString(int agoTime, char agoStrign[]);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue