Browse Source

random seed wird an die clients gesendet und absturz beim löschen der statistik behoben

Kolja Strohm 4 years ago
parent
commit
5178cb7cec

+ 3 - 2
StickmanWorldOnline/Klient.cpp

@@ -30,11 +30,11 @@ void Klient::online( SSKlientV *zKlient )
     klient = (SSKlientV *)zKlient->getThis();
 }
 
-void Klient::sendeInit( RCArray< Spieler > *zSpieler )
+void Klient::sendeInit( RCArray< Spieler > *zSpieler, __int64 seed )
 {
     if( !klient )
         return;
-    short len = (short)( 2 + zSpieler->getEintragAnzahl() * 8 );
+    short len = (short)( 2 + zSpieler->getEintragAnzahl() * 8 ) + 8;
     char *bytes = new char[ len ];
     *(char *)( bytes ) = 0x1;
     *(char *)( bytes + 1 ) = (char)zSpieler->getEintragAnzahl();
@@ -43,6 +43,7 @@ void Klient::sendeInit( RCArray< Spieler > *zSpieler )
         *(int *)( bytes + 2 + i * 8 ) = zSpieler->z( i )->getId();
         *(int *)( bytes + 6 + i * 8 ) = zSpieler->z( i )->getAccountId();
     }
+    *(__int64 *)( bytes + 2 + zSpieler->getEintragAnzahl() * 8 ) = seed;
     klient->spielNachricht( len, bytes );
     delete[] bytes;
 }

+ 1 - 1
StickmanWorldOnline/SSKlient.h

@@ -21,7 +21,7 @@ public:
     // nicht constant
     void offline();
     void online( SSKlientV *zKlient );
-    void sendeInit( RCArray< Spieler > *zSpieler );
+    void sendeInit( RCArray< Spieler > *zSpieler, __int64 seed );
     void sendeSpielerNummer( int sNum );
     void sendeStart();
     void sendeTastaturStatus( int spielerId, char taste, bool aktiv );

+ 1 - 1
StickmanWorldOnline/Spiel.cpp

@@ -204,7 +204,7 @@ void Spiel::run()
         Spieler *tmp = spieler.z( i );
         if( tmp && tmp->zKlient() )
         {
-            tmp->zKlient()->sendeInit( &spieler );
+            tmp->zKlient()->sendeInit( &spieler, randG.getSeed() );
             log->schreibe( (char *)& i, 4 );
             int sNum = tmp->getId();
             log->schreibe( (char *)& sNum, 4 );

+ 2 - 1
StickmanWorldOnline/Spieler.cpp

@@ -258,7 +258,8 @@ void Spieler::setTeam( Team *team )
         this->team->removeSpieler();
     this->team->release();
     this->team = team;
-    this->team->addSpieler();
+    if( this->team )
+        this->team->addSpieler();
 }
 
 void Spieler::setAccount( int id )

+ 0 - 2
StickmanWorldOnline/Statistik.cpp

@@ -30,8 +30,6 @@ Statistik::~Statistik()
 {
     if( db )
         db->release();
-    for( auto s = spieler->getIterator(); s; s++ )
-        s->setTeam( 0 );
     spieler->release();
     teams->release();
     sOnline->release();