Top5 ausgabe oder eingabe problem

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Top5 ausgabe oder eingabe problem

      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
      [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]

      //Auslesen der Datei
      Spoiler anzeigen
      [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]


      //Header dazu
      Spoiler anzeigen
      [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]


      //Und das abrufen in gamecontext:
      Spoiler anzeigen
      [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]


      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

    • Hey,

      hast du die gespeicherte Datei da?

      Ich würde einmal versuchen, es binär zu speichern:


      [cpp]
      fopen(aBuf, "wb");
      fopen(aBuf, "rb");[/cpp]



      [cpp]
      str_format(aBuf, sizeof(aBuf), "%s,", aBuf);[/cpp]
      Könnte auch zu Problemen führen.


      Zudem würde ich beim Speichern des gesamten Structs bleiben:

      [cpp]
      bool CTop::GetInfo(TopFiveVars *pOutVars)
      {
      char aBuf[128] = {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, "rb");
      if(!pF)
      return false;

      if(pOutVars)
      {
      fread(pOutVars, sizeof(TopFiveVars), 1, pF);
      fclose(pF);
      return true;
      }
      fclose(pF);
      return false;
      }

      bool CTop::Write()
      {
      char aBuf[128] = {0};
      str_format(aBuf, sizeof(aBuf), "top5/%s-%d.txt", g_Config.m_SvMap, g_Config.m_SvLives);

      FILE *pF;
      //...
      fwrite(&m_TopFiveVars, sizeof(TopFiveVars), 1, pF);
      fclose(pF);
      return true;
      }
      [/cpp]

      Gruß Pata