|
@@ -814,31 +814,29 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
if( sNum >= 0 )
|
|
|
{
|
|
|
double intens = 0;
|
|
|
+ Spieler *attacker = 0;
|
|
|
+ Spieler *attacked = 0;
|
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
+ if( s->getSpielerNummer() == tmp->getSpieler() )
|
|
|
+ attacker = s;
|
|
|
if( s->getSpielerNummer() == sNum )
|
|
|
- {
|
|
|
- intens = tmp->getIntensität( s->getSpeed() );
|
|
|
- s->nimmSchaden( intens );
|
|
|
- if( tmp->getSpeed().getLengthSq() > 0 )
|
|
|
- s->impuls( tmp->getPosition() - tmp->getSpeed(), tmp->getSpeed() * 0.3f );
|
|
|
- s->calcDeadPlayerObject( schüsse->z( i ) );
|
|
|
- bestenliste->updateSpieler( s );
|
|
|
- break;
|
|
|
- }
|
|
|
+ attacked = s;
|
|
|
}
|
|
|
- for( auto s = spieler->getIterator(); s; s++ )
|
|
|
+ if( attacked && attacker )
|
|
|
{
|
|
|
- if( s->getSpielerNummer() == tmp->getSpieler() )
|
|
|
- {
|
|
|
- s->machSchaden( intens );
|
|
|
- if( s->getEp() != erf )
|
|
|
- chat->addNachricht( Text( "asynchrony detected ep difference: " ) += ( erf - s->getEp() ), 0xFFFF0000 );
|
|
|
- if( s->getSkillP() != skillP )
|
|
|
- chat->addNachricht( Text( "asynchrony detected skillPunkte difference: " ) += ( skillP - s->getSkillP() ), 0xFFFF0000 );
|
|
|
- bestenliste->updateSpieler( s );
|
|
|
- break;
|
|
|
- }
|
|
|
+ intens = tmp->getIntensität( attacked->getSpeed() );
|
|
|
+ attacked->nimmSchaden( intens, attacker ? attacker->getLevel() : 1 );
|
|
|
+ if( tmp->getSpeed().getLengthSq() > 0 )
|
|
|
+ attacked->impuls( tmp->getPosition() - tmp->getSpeed(), tmp->getSpeed() * 0.3f );
|
|
|
+ attacked->calcDeadPlayerObject( schüsse->z( i ) );
|
|
|
+ bestenliste->updateSpieler( attacked );
|
|
|
+ attacker->machSchaden( intens, attacked->getLevel() );
|
|
|
+ if( attacker->getEp() != erf )
|
|
|
+ chat->addNachricht( Text( "asynchrony detected ep difference: " ) += ( erf - attacker->getEp() ), 0xFFFF0000 );
|
|
|
+ if( attacker->getSkillP() != skillP )
|
|
|
+ chat->addNachricht( Text( "asynchrony detected skillPunkte difference: " ) += ( skillP - attacker->getSkillP() ), 0xFFFF0000 );
|
|
|
+ bestenliste->updateSpieler( attacker );
|
|
|
}
|
|
|
}
|
|
|
welt->removeObject( tmp );
|
|
@@ -899,25 +897,31 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
int killer = *(int *)bytes;
|
|
|
län -= 4;
|
|
|
goBackInTime( zeit );
|
|
|
+ Spieler *dead = 0;
|
|
|
+ Spieler *kill = 0;
|
|
|
for( auto s = spieler->getIterator(); s; s++ )
|
|
|
{
|
|
|
if( s->getSpielerNummer() == sNum )
|
|
|
- {
|
|
|
- DeadPlayer *dp = s->sterben();
|
|
|
- if( dp )
|
|
|
- {
|
|
|
- welt->addObject( dp->getThis() );
|
|
|
- deads->add( dp );
|
|
|
- }
|
|
|
- bestenliste->updateSpieler( s );
|
|
|
- }
|
|
|
+ dead = s;
|
|
|
if( s->getSpielerNummer() == killer )
|
|
|
+ kill = s;
|
|
|
+ }
|
|
|
+ if( dead )
|
|
|
+ {
|
|
|
+ DeadPlayer *dp = dead->sterben();
|
|
|
+ if( dp )
|
|
|
{
|
|
|
- s->addKill();
|
|
|
- s->zTeam()->punkte++;
|
|
|
- bestenliste->updateTeam( s->zTeam() );
|
|
|
- bestenliste->updateSpieler( s );
|
|
|
+ welt->addObject( dp->getThis() );
|
|
|
+ deads->add( dp );
|
|
|
}
|
|
|
+ bestenliste->updateSpieler( dead );
|
|
|
+ }
|
|
|
+ if( kill )
|
|
|
+ {
|
|
|
+ kill->addKill( dead->getLevel() );
|
|
|
+ kill->zTeam()->punkte++;
|
|
|
+ bestenliste->updateTeam( kill->zTeam() );
|
|
|
+ bestenliste->updateSpieler( kill );
|
|
|
}
|
|
|
goToPresence( presence );
|
|
|
if( sNum == spielerNummer )
|
|
@@ -1012,7 +1016,7 @@ void SpielKlasse::stknVerarbeitung()
|
|
|
{
|
|
|
if( s->getSpielerNummer() == tmp->getSpieler() )
|
|
|
{
|
|
|
- s->addTreffer( (float)tmp->getIntensität( a->getSpeed() ) );
|
|
|
+ s->addTreffer( (float)tmp->getIntensität( a->getSpeed() ), 0 );
|
|
|
if( s->getEp() != erf )
|
|
|
chat->addNachricht( Text( "asynchrony detected ep difference: " ) += ( erf - s->getEp() ), 0xFFFF0000 );
|
|
|
if( s->getSkillP() != skillP )
|