Hey,
zurzeit arbeite ich an einer ZombieMod und bin auch sehr weit gekommen.
Ich wollte noch eine kleine Top5 liste (abhängig von map und leben) in einer datei speichern lassen, was mir auch gelungen ist.
Wenn ich jetzt /top5 mache werden die gespeicherten werte entweder falsch dargestellt, falsch ausgelesen oder sind schon falsch eingelesen worden:
//Ingame Ausgabe:
//Einlesen der Datei:
Spoiler anzeigen
//Auslesen der Datei
Spoiler anzeigen
//Header dazu
Spoiler anzeigen
//Und das abrufen in gamecontext:
Spoiler anzeigen
Ich weiß, es gibt viele Fehlerquellen, aber ich weiß wirklich nicht mehr weiter...
Übersichtlich ist es auch nicht, aber soweit wie es jetzt ist funktionierts xD
Ich wäre dankbar für eure Hilfe,
Assa
zurzeit arbeite ich an einer ZombieMod und bin auch sehr weit gekommen.
Ich wollte noch eine kleine Top5 liste (abhängig von map und leben) in einer datei speichern lassen, was mir auch gelungen ist.
Wenn ich jetzt /top5 mache werden die gespeicherten werte entweder falsch dargestellt, falsch ausgelesen oder sind schon falsch eingelesen worden:
//Ingame Ausgabe:
//Einlesen der Datei:
[cpp]bool CTop::Write()
{
char aBuf[64] = {0};
str_format(aBuf, sizeof(aBuf), "top5/%s-%d.txt", g_Config.m_SvMap, g_Config.m_SvLives);
FILE *pF;
//...
fwrite(m_TopFiveVars.m_aaiKills, sizeof(int), sizeof(m_TopFiveVars.m_aaiKills)/sizeof(int), pF);
fwrite(m_TopFiveVars.m_aiWaves, sizeof(int), sizeof(m_TopFiveVars.m_aiWaves)/sizeof(int), pF);
fwrite(m_TopFiveVars.m_aaaName, sizeof(char), sizeof(m_TopFiveVars.m_aaaName)/sizeof(char), pF);
fclose(pF);
return true;
}[/cpp]
{
char aBuf[64] = {0};
str_format(aBuf, sizeof(aBuf), "top5/%s-%d.txt", g_Config.m_SvMap, g_Config.m_SvLives);
FILE *pF;
//...
fwrite(m_TopFiveVars.m_aaiKills, sizeof(int), sizeof(m_TopFiveVars.m_aaiKills)/sizeof(int), pF);
fwrite(m_TopFiveVars.m_aiWaves, sizeof(int), sizeof(m_TopFiveVars.m_aiWaves)/sizeof(int), pF);
fwrite(m_TopFiveVars.m_aaaName, sizeof(char), sizeof(m_TopFiveVars.m_aaaName)/sizeof(char), pF);
fclose(pF);
return true;
}[/cpp]
//Auslesen der Datei
[cpp]bool CTop::GetInfo(int kills[5][5], int waves[5], char names[5][4][16])
{
char aBuf[64] = {0};
str_format(aBuf, sizeof(aBuf), "top5/%s-%d.txt", g_Config.m_SvMap, g_Config.m_SvLives);//Mapname, Life config.
FILE *pF = fopen(aBuf, "r");
//...
fread(kills, sizeof(int), sizeof(kills)/sizeof(int), pF);
fread(waves, sizeof(int), sizeof(waves)/sizeof(int), pF);
fread(names, sizeof(char), sizeof(names)/sizeof(char), pF);
fclose(pF);
return true;
}[/cpp]
{
char aBuf[64] = {0};
str_format(aBuf, sizeof(aBuf), "top5/%s-%d.txt", g_Config.m_SvMap, g_Config.m_SvLives);//Mapname, Life config.
FILE *pF = fopen(aBuf, "r");
//...
fread(kills, sizeof(int), sizeof(kills)/sizeof(int), pF);
fread(waves, sizeof(int), sizeof(waves)/sizeof(int), pF);
fread(names, sizeof(char), sizeof(names)/sizeof(char), pF);
fclose(pF);
return true;
}[/cpp]
//Header dazu
[cpp]#ifndef GAME_SERVER_TOPFIVE_H
#define GAME_SERVER_TOPFIVE_H
#include <base/math.h>
#include <engine/shared/config.h>
#include <base/system.h>
class CTop
{
private:
class CGameContext *m_pGameServer;
public:
CTop( CGameContext *pGameServer);
~CTop();
struct TopFiveVars
{
char m_aaaName[5][4][16];
int m_aaiKills[5][5];
int m_aiWaves[5];
} m_TopFiveVars;//fwrite(m_Struct, sizeof(m_Struct), 1, pFile);
//...
bool GetInfo(int K[5][5], int W[5], char N[5][4][16]);
bool Write();
//...
};
#endif[/cpp]
#define GAME_SERVER_TOPFIVE_H
#include <base/math.h>
#include <engine/shared/config.h>
#include <base/system.h>
class CTop
{
private:
class CGameContext *m_pGameServer;
public:
CTop( CGameContext *pGameServer);
~CTop();
struct TopFiveVars
{
char m_aaaName[5][4][16];
int m_aaiKills[5][5];
int m_aiWaves[5];
} m_TopFiveVars;//fwrite(m_Struct, sizeof(m_Struct), 1, pFile);
//...
bool GetInfo(int K[5][5], int W[5], char N[5][4][16]);
bool Write();
//...
};
#endif[/cpp]
//Und das abrufen in gamecontext:
[cpp] if(!str_comp(pMsg->m_pMessage, "/top5"))
{
int m_aaiKills[5][5];
char m_aaaName[5][4][16];
int m_aiWaves[5];
char aBuf[256];
CNetMsg_Sv_Motd Msg;
if(!m_pTop->GetInfo(m_aaiKills, m_aiWaves, m_aaaName))
str_format(aBuf, sizeof(aBuf), "~~~No Top5 in this map with %d lives~~~", g_Config.m_SvLives);
else
{
str_format(aBuf, sizeof(aBuf), "~~~Top 5~~~");
for(int i = 0; i < 5; i++)//top 5
{
//if(m_pTop->m_TopFiveVars.m_aiWaves)//wave = 0? Nothing will follow
//break;
str_format(aBuf, sizeof(aBuf), "%s \n#%d", aBuf, i+1);
for(int p = 0; p < 4; p++)
{
//if(m_pTop->m_TopFiveVars.m_aaaName[i][p][16] == "0")
//continue;
if(p)
str_format(aBuf, sizeof(aBuf), "%s,", aBuf);
//str_format(aBuf, sizeof(aBuf), "%s %s(%d)", aBuf, m_aaaName[i][p][16], m_aaiKills[i][p+1]);//Ausgelassen->unbehandelte ausnahme
}
str_format(aBuf, sizeof(aBuf), "%s: K: %d W: %d", aBuf, m_aaiKills[i][0], m_aiWaves[i]);
}
str_format(aBuf, sizeof(aBuf), "%s \n~~~~~~~~~~~", aBuf);
}
//Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "DEBUGGING", aBuf);
Msg.m_pMessage = aBuf;
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, ClientID);
m_MessageReturn = 250;
return;
}[/cpp]
{
int m_aaiKills[5][5];
char m_aaaName[5][4][16];
int m_aiWaves[5];
char aBuf[256];
CNetMsg_Sv_Motd Msg;
if(!m_pTop->GetInfo(m_aaiKills, m_aiWaves, m_aaaName))
str_format(aBuf, sizeof(aBuf), "~~~No Top5 in this map with %d lives~~~", g_Config.m_SvLives);
else
{
str_format(aBuf, sizeof(aBuf), "~~~Top 5~~~");
for(int i = 0; i < 5; i++)//top 5
{
//if(m_pTop->m_TopFiveVars.m_aiWaves)//wave = 0? Nothing will follow
//break;
str_format(aBuf, sizeof(aBuf), "%s \n#%d", aBuf, i+1);
for(int p = 0; p < 4; p++)
{
//if(m_pTop->m_TopFiveVars.m_aaaName[i][p][16] == "0")
//continue;
if(p)
str_format(aBuf, sizeof(aBuf), "%s,", aBuf);
//str_format(aBuf, sizeof(aBuf), "%s %s(%d)", aBuf, m_aaaName[i][p][16], m_aaiKills[i][p+1]);//Ausgelassen->unbehandelte ausnahme
}
str_format(aBuf, sizeof(aBuf), "%s: K: %d W: %d", aBuf, m_aaiKills[i][0], m_aiWaves[i]);
}
str_format(aBuf, sizeof(aBuf), "%s \n~~~~~~~~~~~", aBuf);
}
//Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "DEBUGGING", aBuf);
Msg.m_pMessage = aBuf;
Server()->SendPackMsg(&Msg, MSGFLAG_VITAL, ClientID);
m_MessageReturn = 250;
return;
}[/cpp]
Ich weiß, es gibt viele Fehlerquellen, aber ich weiß wirklich nicht mehr weiter...
Übersichtlich ist es auch nicht, aber soweit wie es jetzt ist funktionierts xD
Ich wäre dankbar für eure Hilfe,
Assa