Browse Source

Initialisierungsfehler behoben

Kolja Strohm 6 years ago
parent
commit
79bc2744b4
4 changed files with 22 additions and 15 deletions
  1. 8 2
      Asteroids/Klient.cpp
  2. 1 1
      Asteroids/SSKlient.h
  3. 1 1
      Asteroids/Spiel.cpp
  4. 12 11
      Asteroids/Spieler.cpp

+ 8 - 2
Asteroids/Klient.cpp

@@ -73,15 +73,21 @@ void Klient::sendeStart( int spielZeit )
 	delete[] bytes;
 }
 
-void Klient::sendeTastaturStatus( int spielerId, TastaturStatus ts, bool aktiv, int spielZeit )
+void Klient::sendeTastaturStatus( int spielerId, TastaturStatus ts, bool aktiv, int spielZeit, Vertex pos, Vertex speed, float rot, float rotS )
 {
 	if( !klient )
 		return;
-	short len = 9;
+	short len = 33;
 	char *bytes = new char[ len ];
 	*(int*)bytes = spielZeit;
 	*(char*)( bytes + 4 ) = (char)( (char)ts * 2 + (char)!aktiv );
 	*(int*)( bytes + 5 ) = spielerId;
+    *(float*)( bytes + 9 ) = pos.x;
+    *(float*)( bytes + 13 ) = pos.y;
+    *(float*)( bytes + 17 ) = speed.x;
+    *(float*)( bytes + 21 ) = speed.y;
+    *(float*)( bytes + 25 ) = rot;
+    *(float*)( bytes + 29 ) = rotS;
 	klient->spielNachricht( len, bytes );
 	delete[] bytes;
 }

+ 1 - 1
Asteroids/SSKlient.h

@@ -29,7 +29,7 @@ public:
 	void sendeInit( RCArray< Spieler > *zSpieler, int spielZeit );
 	void sendeSpielerNummer( int sNum, int spielZeit );
 	void sendeStart( int spielZeit );
-	void sendeTastaturStatus( int spielerId, TastaturStatus ts, bool aktiv, int spielZeit );
+	void sendeTastaturStatus( int spielerId, TastaturStatus ts, bool aktiv, int spielZeit, Vertex pos, Vertex speed, float rot, float rotS );
 	void sendeSkillNachricht( int sNum, char art, int spielZeit );
 	void sendeSchuss( int id, int sNum, Vertex pos, Vertex speed, double intensity, int spielZeit );
 	void sendeTreffer( int id, int sNum, int spielZeit );

+ 1 - 1
Asteroids/Spiel.cpp

@@ -243,7 +243,7 @@ void Spiel::nachricht( int accountId, int len, char *bytes )
 					{
 						Spieler *s = spieler->z( j );
 						if( s && s->zKlient() )
-							s->zKlient()->sendeTastaturStatus( tmp->getSpielerNummer(), (TastaturStatus)( (int)( *bytes ) / 2 ), ( (int)( *bytes ) % 2 ) == 0, spielZeit );
+							s->zKlient()->sendeTastaturStatus( tmp->getSpielerNummer(), (TastaturStatus)( (int)( *bytes ) / 2 ), ( (int)( *bytes ) % 2 ) == 0, spielZeit, tmp->getPosition(), tmp->getSpeed(), tmp->getDrehung(), tmp->getDrehungSpeed() );
 					}
 				}
 				break;

+ 12 - 11
Asteroids/Spieler.cpp

@@ -44,7 +44,7 @@ Spieler::Spieler( SpielerStr *zStr )
     wendigkeitStart = zStr->wendigkeit;
     antriebEffizienz = zStr->antriebEffizienz;
     energieSchild = zStr->energieSchild;
-    energieSchildEffizienz = zStr->energieSchild;
+    energieSchildEffizienz = zStr->energieSchildEffizienz;
     skillPunkte = zStr->skillPunkte;
     schadenBekommen = 0;
     schadenGemacht = 0;
@@ -278,11 +278,11 @@ bool Spieler::setSkill( int art )
         team->laserEffizienz = team->getLaserEffizienzBonus();
         break;
     case 5: // Laser Tempo
-        laserTempo += 20;
+        laserTempo += 15;
         team->laserTempo = team->getLaserTempoBonus();
         break;
     case 6: // Beschleunigung
-        beschleunigung += 1.75;
+        beschleunigung += 10;
         team->beschleunigung = team->getBeschleunigungBonus();
         break;
     case 7: // Wendigkeit
@@ -313,11 +313,11 @@ bool Spieler::setSkill( int art )
         team->antriebEffizienz = team->getAntriebEffizienzBonus();
         break;
     case 11: // Energie Schild
-        energieSchild += 1;
+        energieSchild += 0.075;
         team->energieSchild = team->getEnergieSchildBonus();
         break;
     case 12: // Energie Schild Effizienz
-        energieSchildEffizienz += 2;
+        energieSchildEffizienz += 10;
         team->energieSchildEffizienz = team->getEnergieSchildEffizienzBonus();
         break;
     }
@@ -328,7 +328,9 @@ Laser *Spieler::getLaser( int sId )
 {
     if( !amLeben || !tastatur[ T_FEUER ] || schussAbk || !team )
         return 0;
-    double kosten = ( ( laserIntensity + team->laserIntensity ) / 2 + ( laserTempo + team->laserTempo ) / 13 ) * ( 1 / ( ( laserEffizienz + team->laserEffizienz ) / 25 ) );
+    double kosten = ( ( laserIntensity + team->laserIntensity ) / 2 +
+        ( laserTempo + team->laserTempo ) / 9 ) *
+                      ( 1 / ( ( laserEffizienz + team->laserEffizienz ) / 25 ) );
     if( kosten < 1 )
         kosten = 1;
     if( kosten > energie )
@@ -344,19 +346,18 @@ Laser *Spieler::getLaser( int sId )
 
 bool Spieler::nimmSchaden( double &intensity )
 {
-    double schieldVal = intensity / 100 * energieSchild;
-    double schieldEVal = schieldVal - schieldVal / 100 * energieSchildEffizienz;
+    double schieldVal = intensity - intensity / ( energieSchild + team->energieSchild );
+    double schieldEVal = schieldVal / ( ( energieSchildEffizienz + team->energieSchildEffizienz ) / 100 );
     if( schieldEVal > energie )
     {
         schieldEVal = energie;
-        schieldVal = schieldEVal / ( 1 - ( energieSchildEffizienz / 100 ) );
+        schieldVal = schieldEVal * ( ( energieSchildEffizienz + team->energieSchildEffizienz ) / 100 );
     }
     intensity -= schieldVal;
-    std::cout << "Schaden: " << intensity << " ";
     energie -= schieldEVal;
     stability -= intensity;
-    std::cout << "Stabilität: " << stability << "\n";
     schadenBekommen += intensity;
+    energieAbk = 1.5;
     repAbk = 2;
     if( stability <= 0 )
     {