Browse Source

Energie Schild Skill und Energie Effizienz Skill hinzugefügt

Kolja Strohm 5 years ago
parent
commit
705a7c32ec

+ 8 - 0
Asteroids/Editor.cpp

@@ -94,6 +94,8 @@ bool Editor::nachricht( SKlient *k )
                 k->sendeEncrypted( (char*)&p.laserTempo, 4 );
                 k->sendeEncrypted( (char*)&p.wendigkeit, 8 );
                 k->sendeEncrypted( (char*)&p.antriebEffizienz, 8 );
+                k->sendeEncrypted( (char*)&p.energieSchild, 8 );
+                k->sendeEncrypted( (char*)&p.energieSchildEffizienz, 8 );
                 k->sendeEncrypted( (char*)&p.netzwerk, 4 );
                 k->sendeEncrypted( (char*)&p.skillPunkte, 4 );
                 k->sendeEncrypted( (char*)&p.m2d, 4 );
@@ -142,6 +144,8 @@ bool Editor::nachricht( SKlient *k )
                 k->sendeEncrypted( (char*)&t.laserTempo, 4 );
                 k->sendeEncrypted( (char*)&t.wendigkeit, 8 );
                 k->sendeEncrypted( (char*)&t.antriebEffizienz, 8 );
+                k->sendeEncrypted( (char*)&t.energieSchild, 8 );
+                k->sendeEncrypted( (char*)&t.energieSchildEffizienz, 8 );
                 k->sendeEncrypted( (char*)&t.punkte, 4 );
             }
         }
@@ -215,6 +219,8 @@ bool Editor::nachricht( SKlient *k )
         k->getNachrichtEncrypted( (char*)&p.laserTempo, 4 );
         k->getNachrichtEncrypted( (char*)&p.wendigkeit, 8 );
         k->getNachrichtEncrypted( (char*)&p.antriebEffizienz, 8 );
+        k->getNachrichtEncrypted( (char*)&p.energieSchild, 8 );
+        k->getNachrichtEncrypted( (char*)&p.energieSchildEffizienz, 8 );
         k->getNachrichtEncrypted( (char*)&p.netzwerk, 4 );
         k->getNachrichtEncrypted( (char*)&p.skillPunkte, 4 );
         k->getNachrichtEncrypted( (char*)&p.m2d, 4 );
@@ -252,6 +258,8 @@ bool Editor::nachricht( SKlient *k )
         k->getNachrichtEncrypted( (char*)&t.laserTempo, 4 );
         k->getNachrichtEncrypted( (char*)&t.wendigkeit, 8 );
         k->getNachrichtEncrypted( (char*)&t.antriebEffizienz, 8 );
+        k->getNachrichtEncrypted( (char*)&t.energieSchild, 8 );
+        k->getNachrichtEncrypted( (char*)&t.energieSchildEffizienz, 8 );
         k->getNachrichtEncrypted( (char*)&t.punkte, 4 );
         Text pf = pfad.getText();
         pf += "/player/";

+ 3 - 2
Asteroids/Spiel.cpp

@@ -372,14 +372,15 @@ void Spiel::tick( double zeit )
 					if( s && s->zTeam() && s->zTeam()->id != team && ( s->istTreffer( tmp->getPos() ) ||
 						s->istTreffer( tmp->getPos() + karte->getSize() ) || s->istTreffer( tmp->getPos() - karte->getSize() ) ) )
 					{ // Treffer
-						bool kill = s->nimmSchaden( tmp->getIntensity() * ( (tmp->getSpeed() - s->getSpeed() ).getLength() / 200 ) );
+                        double intens = tmp->getIntensity() * ( ( tmp->getSpeed() - s->getSpeed() ).getLength() / 200 );
+						bool kill = s->nimmSchaden( intens );
 						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( tmp->getIntensity() * ( (tmp->getSpeed() - s->getSpeed() ).getLength() / 200 ), kill );
+								sp->machSchaden( intens, kill );
 							if( kill && sp )
 								sp->zKlient()->sendeTod( s->getSpielerNummer(), tmp->getSpieler(), spielZeit );
 						}

+ 32 - 1
Asteroids/Spieler.cpp

@@ -45,6 +45,8 @@ Spieler::Spieler( SpielerStr *zStr )
     wendigkeit = zStr->wendigkeit;
     wendigkeitStart = zStr->wendigkeit;
     antriebEffizienz = zStr->antriebEffizienz;
+    energieSchild = zStr->energieSchild;
+    energieSchildEffizienz = zStr->energieSchild;
     skillPunkte = zStr->skillPunkte;
     schadenBekommen = 0;
     schadenGemacht = 0;
@@ -384,6 +386,8 @@ bool Spieler::setSkill( int art )
         team->wendigkeit = team->getWendigkeitBonus();
         team->akkuLeistung = team->getAkkuLeistungBonus();
         team->antriebEffizienz = team->getAntriebEffizienzBonus();
+        team->energieSchild = team->getEnergieSchildBonus();
+        team->energieSchildEffizienz = team->getEnergieSchildEffizienzBonus();
         break;
     case 9: // Akkuleistung
         akkuLeistung += 0.12;
@@ -393,6 +397,14 @@ bool Spieler::setSkill( int art )
         antriebEffizienz += 10;
         team->antriebEffizienz = team->getAntriebEffizienzBonus();
         break;
+    case 11: // Energie Schild
+        energieSchild += 1;
+        team->energieSchild = team->getEnergieSchildBonus();
+        break;
+    case 12: // Energie Schild Effizienz
+        energieSchildEffizienz += 2;
+        team->energieSchildEffizienz = team->getEnergieSchildEffizienzBonus();
+        break;
     }
     return 1;
 }
@@ -415,9 +427,18 @@ Laser *Spieler::getLaser( int sId )
     return new Laser( sId, pos, sSpeed, sNum, laserIntensity + team->laserIntensity );
 }
 
-bool Spieler::nimmSchaden( double intensity )
+bool Spieler::nimmSchaden( double &intensity )
 {
+    double schieldVal = intensity / 100 * energieSchild;
+    double schieldEVal = schieldVal - schieldVal / 100 * energieSchildEffizienz;
+    if( schieldEVal > energie )
+    {
+        schieldEVal = energie;
+        schieldVal = schieldEVal / ( 1 - ( energieSchildEffizienz / 100 ) );
+    }
+    intensity -= schieldVal;
     std::cout << "Schaden: " << intensity << " ";
+    energie -= schieldEVal;
     stability -= intensity;
     std::cout << "Stabilität: " << stability << "\n";
     schadenBekommen += intensity;
@@ -538,6 +559,16 @@ double Spieler::getTeamAntriebEffizienzBonus() const
     return antriebEffizienz / 100 * netzwerk;
 }
 
+double Spieler::getTeamEnergieSchildBonus() const
+{
+    return energieSchild / 100 * netzwerk;
+}
+
+double Spieler::getTeamEnergieSchildEffizienzBonus() const
+{
+    return energieSchildEffizienz / 100 * netzwerk;
+}
+
 bool Spieler::istAmLeben() const
 {
     return amLeben;

+ 5 - 1
Asteroids/Spieler.h

@@ -69,6 +69,8 @@ private:
 	double wendigkeit;
     double wendigkeitStart;
     double antriebEffizienz;
+    double energieSchild;
+    double energieSchildEffizienz;
 	int skillPunkte;
 	// Statistik Werte
 	double schadenBekommen;
@@ -101,7 +103,7 @@ public:
 	int tick( double zeit, Karte *zMap );
 	bool setSkill( int art );
 	Laser *getLaser( int sId );
-	bool nimmSchaden( double intensity );
+	bool nimmSchaden( double &intensity );
 	void machSchaden( double intensity, bool kill );
 	// constant
 	int getAccountId() const;
@@ -122,6 +124,8 @@ public:
 	double getTeamBeschleunigungBonus() const;
 	double getTeamWendigkeitBonus() const;
     double getTeamAntriebEffizienzBonus() const;
+    double getTeamEnergieSchildBonus() const;
+    double getTeamEnergieSchildEffizienzBonus() const;
 	bool istAmLeben() const;
 	// Statistik Werte
 	int getSpielerNummer() const;

+ 8 - 0
Asteroids/Strukturen.cpp

@@ -159,6 +159,8 @@ SpielerStr::SpielerStr( Datei *zDatei )
         zDatei->lese( (char*)&laserTempo, 4 );
         zDatei->lese( (char*)&wendigkeit, 8 );
         zDatei->lese( (char*)&antriebEffizienz, 8 );
+        zDatei->lese( (char*)&energieSchild, 8 );
+        zDatei->lese( (char*)&energieSchildEffizienz, 8 );
         zDatei->lese( (char*)&netzwerk, 4 );
         zDatei->lese( (char*)&skillPunkte, 4 );
         zDatei->lese( (char*)&m2d, 4 );
@@ -183,6 +185,8 @@ void SpielerStr::save( Datei *zDatei ) const
     zDatei->schreibe( (char*)&laserTempo, 4 );
     zDatei->schreibe( (char*)&wendigkeit, 8 );
     zDatei->schreibe( (char*)&antriebEffizienz, 8 );
+    zDatei->schreibe( (char*)&energieSchild, 8 );
+    zDatei->schreibe( (char*)&energieSchildEffizienz, 8 );
     zDatei->schreibe( (char*)&netzwerk, 4 );
     zDatei->schreibe( (char*)&skillPunkte, 4 );
     zDatei->schreibe( (char*)&m2d, 4 );
@@ -222,6 +226,8 @@ TeamStr::TeamStr( Datei *zDatei )
         zDatei->lese( (char*)&laserTempo, 4 );
         zDatei->lese( (char*)&wendigkeit, 8 );
         zDatei->lese( (char*)&antriebEffizienz, 8 );
+        zDatei->lese( (char*)&energieSchild, 8 );
+        zDatei->lese( (char*)&energieSchildEffizienz, 8 );
         zDatei->lese( (char*)&punkte, 4 );
     }
 	ref = 1;
@@ -241,6 +247,8 @@ void TeamStr::save( Datei *zDatei ) const
     zDatei->schreibe( (char*)&laserTempo, 4 );
     zDatei->schreibe( (char*)&wendigkeit, 8 );
     zDatei->schreibe( (char*)&antriebEffizienz, 8 );
+    zDatei->schreibe( (char*)&energieSchild, 8 );
+    zDatei->schreibe( (char*)&energieSchildEffizienz, 8 );
     zDatei->schreibe( (char*)&punkte, 4 );
 }
 

+ 4 - 0
Asteroids/Strukturen.h

@@ -76,6 +76,8 @@ public:
 	int laserTempo;
 	double wendigkeit;
     double antriebEffizienz;
+    double energieSchild;
+    double energieSchildEffizienz;
 	int netzwerk;
 	int skillPunkte;
 	int m2d;
@@ -107,6 +109,8 @@ public:
 	int laserTempo;
 	double wendigkeit;
     double antriebEffizienz;
+    double energieSchild;
+    double energieSchildEffizienz;
 	int punkte;
 
 	// Konstruktor

+ 20 - 0
Asteroids/Team.cpp

@@ -20,6 +20,8 @@ Team::Team( int f, char *n, TeamStr *zStr )
 	beschleunigungS = zStr->beschleunigung;
 	wendigkeitS = zStr->wendigkeit;
     antriebEffizienzS = zStr->antriebEffizienz;
+    energieSchildS = zStr->energieSchild;
+    energieSchildEffizienzS = zStr->energieSchildEffizienz;
 	reset();
 	ref = 1;
 }
@@ -44,6 +46,8 @@ void Team::reset()
 	beschleunigung = beschleunigungS;
 	wendigkeit = wendigkeitS;
     antriebEffizienz = antriebEffizienzS;
+    energieSchild = energieSchildS;
+    energieSchildEffizienz = energieSchildEffizienzS;
 }
 
 // constant
@@ -127,6 +131,22 @@ double Team::getAntriebEffizienzBonus() const
     return ret;
 }
 
+double Team::getEnergieSchildBonus() const
+{
+    double ret = energieSchildS;
+    for( auto *i = &spieler->getArray(); i && i->set; i = i->next )
+        ret += i->var->getTeamEnergieSchildBonus();
+    return ret;
+}
+
+double Team::getEnergieSchildEffizienzBonus() const
+{
+    double ret = energieSchildEffizienzS;
+    for( auto *i = &spieler->getArray(); i && i->set; i = i->next )
+        ret += i->var->getTeamEnergieSchildEffizienzBonus();
+    return ret;
+}
+
 // Reference Counting
 Team *Team::getThis()
 {

+ 6 - 0
Asteroids/Team.h

@@ -18,6 +18,8 @@ private:
 	double beschleunigungS;
 	double wendigkeitS;
     double antriebEffizienzS;
+    double energieSchildS;
+    double energieSchildEffizienzS;
 	int ref;
 
 public:
@@ -38,6 +40,8 @@ public:
 	double beschleunigung;
 	double wendigkeit;
     double antriebEffizienz;
+    double energieSchild;
+    double energieSchildEffizienz;
 	// Konstruktor
 	Team( int f, char *n, TeamStr *zStr );
 	// Destruktor
@@ -55,6 +59,8 @@ public:
 	double getBeschleunigungBonus() const;
 	double getWendigkeitBonus() const;
     double getAntriebEffizienzBonus() const;
+    double getEnergieSchildBonus() const;
+    double getEnergieSchildEffizienzBonus() const;
 	// Reference Counting
 	Team *getThis();
 	Team *release();