Browse Source

Anzeigen der Kauf und Spiel Historie bei Karten im Karten Editor

Kolja Strohm 7 years ago
parent
commit
3dbfdfea97

+ 2 - 0
KSGClient/KSGClient.vcxproj

@@ -211,6 +211,7 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClCompile Include="NachLogin\Editor\Karte\Dateien\KEDModel2DEditor.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\Dateien\WAVDatei.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\KartenEditor.cpp" />
+    <ClCompile Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\Release\KERelease.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\ShopSeite\KEShopSeite.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\ShopSeite\KESSEditor.cpp" />
@@ -293,6 +294,7 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClInclude Include="NachLogin\Editor\Karte\Dateien\KEDModel2DEditor.h" />
     <ClInclude Include="NachLogin\Editor\Karte\Dateien\WAVDatei.h" />
     <ClInclude Include="NachLogin\Editor\Karte\KartenEditor.h" />
+    <ClInclude Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.h" />
     <ClInclude Include="NachLogin\Editor\Karte\Release\KERelease.h" />
     <ClInclude Include="NachLogin\Editor\Karte\ShopSeite\KEShopSeite.h" />
     <ClInclude Include="NachLogin\Editor\Karte\ShopSeite\KESSEditor.h" />

+ 6 - 0
KSGClient/KSGClient.vcxproj.filters

@@ -255,6 +255,9 @@
     <ClCompile Include="Netzwerk\Klients\MinigameK.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
+    <ClCompile Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.cpp">
+      <Filter>Quelldateien</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Global\Variablen.h">
@@ -461,5 +464,8 @@
     <ClInclude Include="Netzwerk\Keys.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
+    <ClInclude Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.h">
+      <Filter>Headerdateien</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>

+ 83 - 9
KSGClient/NachLogin/Editor/Karte/KartenEditor.cpp

@@ -28,6 +28,7 @@ KartenEditor::KartenEditor( Schrift *schrift )
     beschreibungF = 0;
     teamsF = 0;
     dateienF = 0;
+    kaufHF = 0;
     alpha = 0;
     alpha2 = 0;
     sichtbar = 0;
@@ -66,6 +67,8 @@ KartenEditor::~KartenEditor()
         teamsF->release();
     if( dateienF )
         dateienF->release();
+    if( kaufHF )
+        kaufHF->release();
     if( editorF )
         editorF->release();
     if( editorDll )
@@ -102,6 +105,10 @@ void KartenEditor::setKarte( int id )
         beschreibungF->release();
     if( teamsF )
         teamsF->release();
+    if( dateienF )
+        dateienF->release();
+    if( kaufHF )
+        kaufHF->release();
     if( editorF )
         editorF->release();
     if( editorDll )
@@ -120,6 +127,7 @@ void KartenEditor::setKarte( int id )
     beschreibungF = new KEBeschreibung( id, schrift );
     teamsF = new KETeams( id, schrift );
     dateienF = new KEDateien( id, schrift );
+    kaufHF = new KEKaufHistorie( id, schrift );
     // Editor laden
     int spielArt = infoKlient->getSpielId( id );
     KSGTDatei *dgt = new KSGTDatei( "data/dg.ksgt" );
@@ -208,7 +216,6 @@ void KartenEditor::setKarte( int id )
             }
         }
     }
-    //-------------------------
     hauptScreen->unlock();
 }
 
@@ -285,7 +292,12 @@ void KartenEditor::doMausEreignis( MausEreignis &me )
                     releaseF->setSichtbar( 1, 0 );
                     dateienF->setSichtbar( 0, 0 );
                 }
-                //-------------
+                if( kaufHF && kaufHF->istSichtbar() )
+                {
+                    kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
+                    releaseF->setSichtbar( 1, 0 );
+                    kaufHF->setSichtbar( 0, 0 );
+                }
                 karteRelease->setAlphaFeldFarbe( 0x0000FF00 );
                 jetzt = 1;
             }
@@ -317,7 +329,12 @@ void KartenEditor::doMausEreignis( MausEreignis &me )
                     shopSeiteF->setSichtbar( 1, 0 );
                     dateienF->setSichtbar( 0, 0 );
                 }
-                //---------------
+                if( kaufHF && kaufHF->istSichtbar() )
+                {
+                    kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
+                    shopSeiteF->setSichtbar( 1, 0 );
+                    kaufHF->setSichtbar( 0, 0 );
+                }
                 shopSeite->setAlphaFeldFarbe( 0x0000FF00 );
                 jetzt = 2;
             }
@@ -349,7 +366,12 @@ void KartenEditor::doMausEreignis( MausEreignis &me )
                     beschreibungF->setSichtbar( 1, 0 );
                     dateienF->setSichtbar( 0, 0 );
                 }
-                //---------------
+                if( kaufHF && kaufHF->istSichtbar() )
+                {
+                    kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
+                    beschreibungF->setSichtbar( 1, 0 );
+                    kaufHF->setSichtbar( 0, 0 );
+                }
                 beschreibung->setAlphaFeldFarbe( 0x0000FF00 );
                 jetzt = 3;
             }
@@ -381,7 +403,12 @@ void KartenEditor::doMausEreignis( MausEreignis &me )
                     teamsF->setSichtbar( 1, 0 );
                     dateienF->setSichtbar( 0, 0 );
                 }
-                //---------------
+                if( kaufHF && kaufHF->istSichtbar() )
+                {
+                    kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
+                    teamsF->setSichtbar( 1, 0 );
+                    kaufHF->setSichtbar( 0, 0 );
+                }
                 teams->setAlphaFeldFarbe( 0x0000FF00 );
                 jetzt = 4;
             }
@@ -413,7 +440,12 @@ void KartenEditor::doMausEreignis( MausEreignis &me )
                     dateienF->setSichtbar( 1, 1 );
                     teamsF->setSichtbar( 0, 1 );
                 }
-                //---------------
+                if( kaufHF && kaufHF->istSichtbar() )
+                {
+                    kaufHistorie->setAlphaFeldFarbe( 0x5500FF00 );
+                    dateienF->setSichtbar( 1, 0 );
+                    kaufHF->setSichtbar( 0, 0 );
+                }
                 dateien->setAlphaFeldFarbe( 0x0000FF00 );
                 jetzt = 5;
             }
@@ -423,7 +455,41 @@ void KartenEditor::doMausEreignis( MausEreignis &me )
                 start();
             break;
         case 7:
-            //---------------
+            if( kaufHF && !kaufHF->istSichtbar() )
+            {
+                if( releaseF && releaseF->istSichtbar() )
+                {
+                    karteRelease->setAlphaFeldFarbe( 0x5500FF00 );
+                    kaufHF->setSichtbar( 1, 1 );
+                    releaseF->setSichtbar( 0, 1 );
+                }
+                if( shopSeiteF && shopSeiteF->istSichtbar() )
+                {
+                    shopSeite->setAlphaFeldFarbe( 0x5500FF00 );
+                    kaufHF->setSichtbar( 1, 1 );
+                    shopSeiteF->setSichtbar( 0, 1 );
+                }
+                if( beschreibungF && beschreibungF->istSichtbar() )
+                {
+                    beschreibung->setAlphaFeldFarbe( 0x5500FF00 );
+                    kaufHF->setSichtbar( 1, 1 );
+                    beschreibungF->setSichtbar( 0, 1 );
+                }
+                if( teamsF && teamsF->istSichtbar() )
+                {
+                    teams->setAlphaFeldFarbe( 0x5500FF00 );
+                    kaufHF->setSichtbar( 1, 1 );
+                    teamsF->setSichtbar( 0, 1 );
+                }
+                if( dateienF && dateienF->istSichtbar() )
+                {
+                    dateien->setAlphaFeldFarbe( 0x5500FF00 );
+                    kaufHF->setSichtbar( 1, 1 );
+                    dateienF->setSichtbar( 0, 1 );
+                }
+                kaufHistorie->setAlphaFeldFarbe( 0x0000FF00 );
+                jetzt = 7;
+            }
             break;
         case 8:
             setSichtbar( 0 );
@@ -447,7 +513,9 @@ void KartenEditor::doMausEreignis( MausEreignis &me )
     case 5:
         dateienF->doMausEreignis( me );
         break;
-        //---------------
+    case 7:
+        kaufHF->doMausEreignis( me );
+        break;
     }
 }
 
@@ -472,7 +540,9 @@ void KartenEditor::doTastaturEreignis( TastaturEreignis &te )
     case 5:
         dateienF->doTastaturEreignis( te );
         break;
-        //---------------
+    case 7:
+        kaufHF->doTastaturEreignis( te );
+        break;
     }
 }
 
@@ -497,6 +567,8 @@ bool KartenEditor::tick( double zeit )
         ret |= teamsF->tick( zeit );
     if( dateienF && dateienF->istSichtbar() )
         ret |= dateienF->tick( zeit );
+    if( kaufHF && kaufHF->istSichtbar() )
+        ret |= kaufHF->tick( zeit );
     tickVal += zeit * 150;
     int val = (int)tickVal;
     if( val < 1 )
@@ -581,6 +653,8 @@ void KartenEditor::render( Bild &zRObj )
         teamsF->render( zRObj );
     if( dateienF )
         dateienF->render( zRObj );
+    if( kaufHF )
+        kaufHF->render( zRObj );
     zRObj.releaseAlpha();
 }
 

+ 2 - 0
KSGClient/NachLogin/Editor/Karte/KartenEditor.h

@@ -10,6 +10,7 @@
 #include <Schrift.h>
 #include <MausEreignis.h>
 #include <Knopf.h>
+#include "KaufHistorie/KaufHistorie.h"
 
 using namespace Framework;
 
@@ -30,6 +31,7 @@ private:
     KEBeschreibung *beschreibungF;
     KETeams *teamsF;
     KEDateien *dateienF;
+    KEKaufHistorie *kaufHF;
     EditorV *editorF;
     HINSTANCE editorDll;
     Text dllName;

+ 301 - 0
KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.cpp

@@ -0,0 +1,301 @@
+#include "KaufHistorie.h"
+#include <Schrift.h>
+#include "../../../../Global/Variablen.h"
+#include "../../../../Global/Initialisierung.h"
+#include <Zeit.h>
+
+// Inhalt der KEKaufHistorie Klasse
+// Konstruktor
+KEKaufHistorie::KEKaufHistorie( int karte, Schrift *zSchrift )
+{
+    schrift = zSchrift->getThis();
+    Text *kName = infoKlient->getKarteName( karte );
+    Text titel = kName ? kName->getText() : "<Karte>";
+    titel += " - Release";
+    if( kName )
+        kName->release();
+    fenster = initFenster( 10, 40, 880, 550, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    aktualisieren = initKnopf( 10, 10, 100, 20, zSchrift, Knopf::Style::Normal, "Aktualisieren" );
+    aktualisieren->setMausEreignis( [ this ]( void *p, void *obj, MausEreignis me ) -> bool
+    {
+        if( me.id == ME_RLinks && me.verarbeitet == 0 )
+            start();
+        return 1;
+    } );
+    gesammtVerkauf = initTextFeld( 120, 10, 750, 20, zSchrift, TextFeld::Style::Text, "Gesammt verkauft: " );
+    statistik = initLinienDiagramm( 10, 40, 860, 480, zSchrift, LDiag::Style::DatenRahmen, 0 );
+    statistik->setHIntervallBreite( 36.8 );
+    statistik->setDatenStyle( DiagDaten::Style::autoRaster | DiagDaten::Style::intervallTexte | DiagDaten::Style::intervalle | DiagDaten::Style::Sichtbar | DiagDaten::Style::autoIntervall );
+    statistik->setRasterDicke( 1 );
+    statistik->setRasterFarbe( 0xFF505050 );
+    statistik->setHIntervallFarbe( 0xFFFFFFFF );
+    statistik->setHIntervallName( "Tage" );
+    statistik->setVIntervallFarbe( 0xFFFFFFFF );
+    statistik->setVIntervallName( "Anzahl" );
+    laden = (Animation2D*)ladeAnimation->dublizieren();
+    laden->setPosition( 425, 275 );
+    laden->setSichtbar( 0 );
+    fenster->addMember( aktualisieren );
+    fenster->addMember( gesammtVerkauf );
+    fenster->addMember( statistik );
+    animation = 0;
+    tickVal = 0;
+    sichtbar = 0;
+    rechts = 0;
+    xStart = 0;
+    breite = 0;
+    aktion = 0;
+    this->karte = karte;
+    alpha = 255;
+    ref = 1;
+}
+
+// Destruktor
+KEKaufHistorie::~KEKaufHistorie()
+{
+    if( run )
+    {
+        warteAufThread( 5000 );
+        if( run )
+            ende();
+    }
+    statistik->release();
+    aktualisieren->release();
+    gesammtVerkauf->release();
+    fenster->release();
+    laden->release();
+    schrift->release();
+}
+
+// nicht constant
+void KEKaufHistorie::setSichtbar( bool s, bool vr )
+{
+    animation = 1;
+    sichtbar = s;
+    rechts = vr;
+    if( sichtbar )
+    {
+        if( vr )
+        {
+            xStart = 900;
+            breite = 0;
+        }
+        else
+        {
+            xStart = 0;
+            breite = 0;
+        }
+        if( !run )
+        {
+            aktion = 0;
+            start();
+        }
+    }
+}
+
+void KEKaufHistorie::thread()
+{
+    laden->setSichtbar( 1 );
+    Array< int > einnahmen;
+    Array< int > verkauf;
+    Array< int > spiele;
+    int gesammt = editorKlient->getVerkaufStatistik( &verkauf, &einnahmen, &spiele );
+    if( gesammt == 0 && einnahmen.getEintragAnzahl() == 0 )
+    {
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+    }
+    else
+    {
+        fenster->lockZeichnung();
+        gesammtVerkauf->setText( Text( "Gesammt Verkauft: " ) += gesammt );
+        int wAnz = statistik->zDiagDaten()->werte->getEintragAnzahl();
+        for( int i = 0; i < wAnz; i++ )
+            statistik->removeWert( 0 );
+        wAnz = statistik->zDiagDaten()->hIntervallWerte->getEintragAnzahl();
+        for( int i = 0; i < wAnz; i++ )
+            statistik->removeHIntervallText( statistik->zDiagDaten()->hIntervallWerte->get( 0 ) );
+        wAnz = statistik->zDiagDaten()->vIntervallWerte->getEintragAnzahl();
+        for( int i = 0; i < wAnz; i++ )
+            statistik->removeVIntervallText( statistik->zDiagDaten()->vIntervallWerte->get( 0 ) );
+        int anz = einnahmen.getEintragAnzahl();
+        int maxS = 0;
+        for( int i = 0; i < anz; i++ )
+        {
+            if( einnahmen.hat( i ) && einnahmen.get( i ) > maxS )
+                maxS = einnahmen.get( i );
+            if( verkauf.hat( i ) && verkauf.get( i ) > maxS )
+                maxS = verkauf.get( i );
+            if( spiele.hat( i ) && spiele.get( i ) > maxS )
+                maxS = spiele.get( i );
+        }
+        maxS++;
+        statistik->addVIntervallText( 0, Text() += 0 );
+        statistik->addVIntervallText( maxS + 1, Text() += ( maxS + 1 ) );
+        Datum *d = Framework::getDatum();
+        d->minusTag( 30 );
+        statistik->addHIntervallText( 0, d->getDatum( "y-m-d" ) );
+        d->plusTag( 30 );
+        statistik->addHIntervallText( anz - 1, d->getDatum( "y-m-d" ) );
+        d->release();
+        DiagWert *w = new DiagWert();
+        w->farbe = 0xFF00FFFF;
+        w->hintergrund = 0xFF205050;
+        w->name->setText( "Einnahmen" );
+        w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
+        statistik->addWert( w );
+        w = new DiagWert();
+        w->farbe = 0xFF00FF00;
+        w->hintergrund = 0xFF205020;
+        w->name->setText( "Verkauft" );
+        w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
+        statistik->addWert( w );
+        w = new DiagWert();
+        w->farbe = 0xFFFF0000;
+        w->hintergrund = 0xFF502020;
+        w->name->setText( "Spiele" );
+        w->style = DiagWert::Style::Sichtbar | DiagWert::Style::Name | DiagWert::Style::Hintergrund;
+        statistik->addWert( w );
+        for( int i = 0; i < anz; i++ )
+        {
+            statistik->addPunkt( 0, i, einnahmen.get( i ) );
+            statistik->addPunkt( 1, i, verkauf.get( i ) );
+            statistik->addPunkt( 2, i, spiele.get( i ) );
+        }
+        fenster->unlockZeichnung();
+    }
+    laden->setSichtbar( 0 );
+}
+
+void KEKaufHistorie::doMausEreignis( MausEreignis &me )
+{
+    if( !run )
+        fenster->doMausEreignis( me );
+}
+
+void KEKaufHistorie::doTastaturEreignis( TastaturEreignis &te )
+{
+    if( !run )
+        fenster->doTastaturEreignis( te );
+}
+
+bool KEKaufHistorie::tick( double z )
+{
+    bool ret = laden->tick( z );
+    tickVal += z * 150;
+    int val = (int)tickVal;
+    tickVal -= val;
+    if( val )
+    {
+        if( run && alpha != 100 )
+        {
+            if( alpha - val < 100 )
+                alpha = 100;
+            else
+                alpha -= val;
+            ret = 1;
+        }
+        if( !run && alpha != 255 )
+        {
+            if( alpha + val > 255 )
+                alpha = 255;
+            else
+                alpha += val;
+            ret = 1;
+        }
+        val *= 3;
+        if( sichtbar )
+        {
+            if( xStart != 0 || breite != 900 )
+            {
+                if( rechts )
+                {
+                    if( xStart - val <= 0 )
+                    {
+                        xStart = 0;
+                        breite = 900;
+                        animation = 0;
+                    }
+                    else
+                    {
+                        xStart -= val;
+                        breite += val;
+                    }
+                }
+                else
+                {
+                    if( breite + val >= 900 )
+                    {
+                        breite = 900;
+                        animation = 0;
+                    }
+                    else
+                        breite += val;
+                }
+                ret = 1;
+            }
+        }
+        else
+        {
+            if( breite != 0 )
+            {
+                if( rechts )
+                {
+                    if( breite - val <= 0 )
+                    {
+                        breite = 0;
+                        animation = 0;
+                    }
+                    else
+                        breite -= val;
+                }
+                else
+                {
+                    if( breite - val <= 0 )
+                    {
+                        breite = 0;
+                        xStart = 900;
+                        animation = 0;
+                    }
+                    else
+                    {
+                        breite -= val;
+                        xStart += val;
+                    }
+                }
+                ret = 1;
+            }
+        }
+    }
+    return ret || fenster->tick( z );
+}
+
+void KEKaufHistorie::render( Bild &zRObj )
+{
+    if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) )
+        return;
+    zRObj.setAlpha( alpha );
+    fenster->render( zRObj );
+    zRObj.releaseAlpha();
+    laden->render( zRObj );
+    zRObj.releaseDrawOptions();
+}
+
+// constant
+bool KEKaufHistorie::istSichtbar() const
+{
+    return sichtbar || animation;
+}
+
+// Reference Counting
+KEKaufHistorie *KEKaufHistorie::getThis()
+{
+    ref++;
+    return this;
+}
+
+KEKaufHistorie *KEKaufHistorie::release()
+{
+    if( !--ref )
+        delete this;
+    return 0;
+}

+ 47 - 0
KSGClient/NachLogin/Editor/Karte/KaufHistorie/KaufHistorie.h

@@ -0,0 +1,47 @@
+#pragma once
+
+#include <Thread.h>
+#include <Fenster.h>
+#include <Diagramm.h>
+#include <Knopf.h>
+#include <Animation.h>
+
+using namespace Framework;
+
+class KEKaufHistorie : private Thread
+{
+private:
+    Fenster *fenster;
+    LDiag *statistik;
+    Knopf *aktualisieren;
+    TextFeld *gesammtVerkauf;
+    Animation2D *laden;
+    Schrift *schrift;
+    bool animation;
+    double tickVal;
+    bool sichtbar;
+    bool rechts;
+    int xStart;
+    int breite;
+    int karte;
+    unsigned char alpha;
+    int ref;
+
+public:
+    // Konstruktor
+    KEKaufHistorie( int karte, Schrift *zSchrift );
+    // Destruktor
+    ~KEKaufHistorie();
+    // nicht constant
+    void setSichtbar( bool s, bool vr );
+    void thread() override;
+    void doMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+    bool tick( double z );
+    void render( Bild &zRObj );
+    // constant
+    bool istSichtbar() const;
+    // Reference Counting
+    KEKaufHistorie *getThis();
+    KEKaufHistorie *release();
+};

+ 1 - 0
KSGClient/Netzwerk/KSGKlient.h

@@ -452,6 +452,7 @@ public:
     GSL::GSLSoundV *deSoundLaden( Text *zDatei, Text *zSound, FBalken *zF ) override; // DateienEditor: läd Sound herunter
     bool deModelSpeichern( Text *zDatei, Text *zModel, Model2DData *zData, FBalken *zF ) override; // DateienEditor: Speichert Modell
     bool deSoundSpeichern( Text *zDatei, Text *zSound, GSL::GSLSoundV *zData, FBalken *zF ) override; // DateienEditor: Speichert Sound
+    int getVerkaufStatistik( Array< int > *verkauft, Array< int > *einkommen, Array< int > *gespielt ) override; // Gibt eine Verkaufsstatistik der letzten 30 Tage zurück
     bool initEditor() override; // Initialisiert den Editor auf Serverseite
 	bool keepAlive() override; // Erhält die Verbindung aufrecht
 	bool trenne() override; // trennt sich von dem Editor Server

+ 53 - 0
KSGClient/Netzwerk/Klients/EditorK.cpp

@@ -2701,6 +2701,59 @@ bool EditorKlient::deSoundSpeichern( Text *zDatei, Text *zSound, GSL::GSLSoundV
     return ret == 1;
 }
 
+int EditorKlient::getVerkaufStatistik( Array< int > *verkauft, Array< int > *einkommen, Array< int > *gespielt ) // Gibt eine Verkaufsstatistik der letzten 30 Tage zurück
+{
+    cs.lock();
+    if( !verbunden )
+    {
+        cs.unlock();
+        return 0;
+    }
+    klient->sendeEncrypted( "\x7", 1 );
+    char ret = 0;
+    klient->getNachrichtEncrypted( &ret, 1 );
+    if( ret == 1 )
+    {
+        klient->sendeEncrypted( "\x10", 1 );
+        klient->getNachrichtEncrypted( &ret, 1 );
+        if( ret == 1 )
+        {
+            int kaufAnz = 0;
+            klient->getNachrichtEncrypted( (char*)&kaufAnz, 4 );
+            char anz = 0;
+            klient->getNachrichtEncrypted( &anz, 1 );
+            for( int i = 0; i < anz; i++ )
+            {
+                int kupfer = 0;
+                int kauf = 0;
+                int games = 0;
+                klient->getNachrichtEncrypted( (char*)&kupfer, 4 );
+                klient->getNachrichtEncrypted( (char*)&kauf, 4 );
+                klient->getNachrichtEncrypted( (char*)&games, 4 );
+                einkommen->add( kupfer );
+                verkauft->add( kauf );
+                gespielt->add( games );
+            }
+            cs.unlock();
+            return kaufAnz;
+        }
+    }
+    if( ret == 3 )
+    {
+        char byte = 0;
+        klient->getNachrichtEncrypted( &byte, 1 );
+        char *f = new char[ byte + 1 ];
+        f[ byte ] = 0;
+        klient->getNachrichtEncrypted( f, byte );
+        fehler->setText( f );
+        delete[] f;
+        cs.unlock();
+        return 0;
+    }
+    cs.unlock();
+    return 0;
+}
+
 bool EditorKlient::initEditor() // Initialisiert den Editor auf Serverseite
 {
     cs.lock();