Kolja Strohm 6 years ago
parent
commit
a78fa581bf
5 changed files with 47 additions and 11 deletions
  1. 8 4
      Asteroids/Klient.cpp
  2. 2 2
      Asteroids/SSKlient.h
  3. 25 5
      Asteroids/Spiel.cpp
  4. 10 0
      Asteroids/Spieler.cpp
  5. 2 0
      Asteroids/Spieler.h

+ 8 - 4
Asteroids/Klient.cpp

@@ -167,25 +167,27 @@ void Klient::sendeEp( int pixelId, int spielerId, int spielZeit )
     delete[] bytes;
 }
 
-void Klient::sendeTreffer( int id, int sNum, int spielZeit )
+void Klient::sendeTreffer( int id, int sNum, int spielZeit, float ep, int skillP )
 {
 	if( !klient )
 		return;
-	short len = 13;
+	short len = 21;
 	char *bytes = new char[ len ];
 	*(int*)bytes = spielZeit;
 	*(char*)( bytes + 4 ) = 0xE;
 	*(int*)( bytes + 5 ) = id;
 	*(int*)( bytes + 9 ) = sNum;
+    *(float*)( bytes + 13 ) = ep;
+    *(int*)( bytes + 17 ) = skillP;
 	klient->spielNachricht( len, bytes );
 	delete[] bytes;
 }
 
-void Klient::sendeAsteroidTreffer( int asteroidId, int newAsteroidId, int schussId, Vertex pos, __int64 seed, int spielZeit )
+void Klient::sendeAsteroidTreffer( int asteroidId, int newAsteroidId, int schussId, Vertex pos, __int64 seed, int spielZeit, float ep, int skillP )
 {
     if( !klient )
         return;
-    short len = 33;
+    short len = 41;
     char *bytes = new char[ len ];
     *(int*)bytes = spielZeit;
     *(char*)( bytes + 4 ) = 0x12;
@@ -195,6 +197,8 @@ void Klient::sendeAsteroidTreffer( int asteroidId, int newAsteroidId, int schuss
     *(float*)( bytes + 17 ) = pos.y;
     *(__int64*)( bytes + 21 ) = seed;
     *(int*)( bytes + 29 ) = newAsteroidId;
+    *(float*)( bytes + 33 ) = ep;
+    *(int*)( bytes + 37 ) = skillP;
     klient->spielNachricht( len, bytes );
     delete[] bytes;
 }

+ 2 - 2
Asteroids/SSKlient.h

@@ -35,8 +35,8 @@ public:
 	void sendeSchuss( int id, int sNum, Vertex pos, Vertex speed, double intensity, int spielZeit );
     void sendePixel( int asteroid, int pixelId, int spielZeit );
     void sendeEp( int pixelId, int spielerId, int spielZeit );
-	void sendeTreffer( int id, int sNum, int spielZeit );
-    void sendeAsteroidTreffer( int asteroidId, int newAsteroidId, int schussId, Vertex pos, __int64 seed, int spielZeit );
+	void sendeTreffer( int id, int sNum, int spielZeit, float ep, int skillP );
+    void sendeAsteroidTreffer( int asteroidId, int newAsteroidId, int schussId, Vertex pos, __int64 seed, int spielZeit, float ep, int skillP );
 	void sendeWiederbelebung( int sNum, int spielZeit );
 	void sendeTod( int sNum, int killSNum, int spielZeit );
 	void sendeSpielEnde( char gewonnen, int spielZeit );

+ 25 - 5
Asteroids/Spiel.cpp

@@ -372,7 +372,7 @@ void Spiel::tick( double zeit )
                 {
                     Spieler *s = spieler->z( j );
                     if( s )
-                        s->zKlient()->sendeTreffer( tmp->getId(), -1, spielZeit );
+                        s->zKlient()->sendeTreffer( tmp->getId(), -1, spielZeit, 0, 0 );
                 }
                 welt->removeObject( tmp );
                 shots->remove( i );
@@ -391,13 +391,23 @@ void Spiel::tick( double zeit )
                         bool kill = s->nimmSchaden( intens );
                         if( tmp->getSpeed().getLengthSq() > 0 )
                             s->impuls( tmp->getPosition() - tmp->getSpeed(), tmp->getSpeed() * 0.3f );
+                        float erf;
+                        int skillP;
                         for( int k = 0; k < spielerAnzahl; k++ )
                         {
                             Spieler *sp = spieler->z( k );
-                            if( sp )
-                                sp->zKlient()->sendeTreffer( tmp->getId(), s->getSpielerNummer(), spielZeit );
                             if( sp && sp->getSpielerNummer() == tmp->getSpieler() )
+                            {
                                 sp->machSchaden( intens, kill );
+                                erf = sp->getEp();
+                                skillP = sp->getSkillP();
+                            }
+                        }
+                        for( int k = 0; k < spielerAnzahl; k++ )
+                        {
+                            Spieler *sp = spieler->z( k );
+                            if( sp )
+                                sp->zKlient()->sendeTreffer( tmp->getId(), s->getSpielerNummer(), spielZeit, erf, skillP );
                             if( kill && sp )
                                 sp->zKlient()->sendeTod( s->getSpielerNummer(), tmp->getSpieler(), spielZeit );
                         }
@@ -425,13 +435,23 @@ void Spiel::tick( double zeit )
                     Asteroid *b = a->istTreffer( tmp, &randG, asteroidId, pos );
                     if( b )
                     {
+                        float erf;
+                        int skillP;
                         for( int k = 0; k < spielerAnzahl; k++ )
                         {
                             Spieler *s = spieler->z( k );
-                            if( s )
-                                s->zKlient()->sendeAsteroidTreffer( a->getId(), b->getId(), tmp->getId(), pos, seed, spielZeit );
                             if( s && s->getSpielerNummer() == tmp->getSpieler() )
+                            {
                                 s->addTreffer( (float)intens );
+                                erf = s->getEp();
+                                skillP = s->getSkillP();
+                            }
+                        }
+                        for( int k = 0; k < spielerAnzahl; k++ )
+                        {
+                            Spieler *s = spieler->z( k );
+                            if( s )
+                                s->zKlient()->sendeAsteroidTreffer( a->getId(), b->getId(), tmp->getId(), pos, seed, spielZeit, erf, skillP );
                         }
                         welt->removeObject( tmp );
                         shots->remove( i );

+ 10 - 0
Asteroids/Spieler.cpp

@@ -585,6 +585,16 @@ bool Spieler::doNeedWiederbelebung() const
     return needWiederbelebung;
 }
 
+float Spieler::getEp() const
+{
+    return ep;
+}
+
+int Spieler::getSkillP() const
+{
+    return skillPunkte;
+}
+
 // Reference Counting
 Spieler *Spieler::getThis()
 {

+ 2 - 0
Asteroids/Spieler.h

@@ -135,6 +135,8 @@ public:
 	int getZeitAmLeben() const;
 	int getZeitTod() const;
     bool doNeedWiederbelebung() const;
+    float getEp() const;
+    int getSkillP() const;
 	// Reference Counting
 	Spieler *getThis();
 	Spieler *release();