|
@@ -0,0 +1,612 @@
|
|
|
+#include "Spieler.h"
|
|
|
+#include "Spiel.h"
|
|
|
+#include "BosheitRune.h"
|
|
|
+#include "Enterhaken.h"
|
|
|
+#include "Geist.h"
|
|
|
+#include "Leben.h"
|
|
|
+#include "LebenRune.h"
|
|
|
+#include "Rolle.h"
|
|
|
+#include "Schild.h"
|
|
|
+#include "Schuh.h"
|
|
|
+#include "StrengthRune.h"
|
|
|
+#include "Sturm.h"
|
|
|
+#include "TempoRune.h"
|
|
|
+#include "WeisheitRune.h"
|
|
|
+
|
|
|
+
|
|
|
+Inventar::Inventar()
|
|
|
+{
|
|
|
+ for( int i = 0; i < INVENTORY_SLOTS; i++ )
|
|
|
+ {
|
|
|
+ slots[ i ] = KEIN_GEGENSTAND;
|
|
|
+ anzahl[ i ] = 0;
|
|
|
+ abklingzeit[ i ] = 0;
|
|
|
+ }
|
|
|
+ selected = 0;
|
|
|
+}
|
|
|
+
|
|
|
+void Inventar::addItem( GegenstandTyp typ, int anzahl )
|
|
|
+{
|
|
|
+ for( int i = 0; i < INVENTORY_SLOTS; i++ )
|
|
|
+ {
|
|
|
+ if( slots[ i ] == typ )
|
|
|
+ {
|
|
|
+ this->anzahl[ i ] += anzahl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for( int i = 0; i < INVENTORY_SLOTS; i++ )
|
|
|
+ {
|
|
|
+ if( slots[ i ] == KEIN_GEGENSTAND )
|
|
|
+ {
|
|
|
+ slots[ i ] = typ;
|
|
|
+ this->anzahl[ i ] = consumable( typ ) ? anzahl : 1;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void Inventar::setSelected( int slot )
|
|
|
+{
|
|
|
+ selected = slot;
|
|
|
+ if( selected >= INVENTORY_SLOTS )
|
|
|
+ selected = INVENTORY_SLOTS - 1;
|
|
|
+}
|
|
|
+
|
|
|
+GegenstandTyp Inventar::useItem()
|
|
|
+{
|
|
|
+ if( slots[ selected ] != KEIN_GEGENSTAND && abklingzeit[ selected ] <= 0 )
|
|
|
+ {
|
|
|
+ if( consumable( slots[ selected ] ) )
|
|
|
+ {
|
|
|
+ if( !--anzahl[ selected ] )
|
|
|
+ {
|
|
|
+ GegenstandTyp typ = slots[ selected ];
|
|
|
+ slots[ selected ] = KEIN_GEGENSTAND;
|
|
|
+ return typ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ abklingzeit[ selected ] = ::abklingzeit( slots[ selected ] );
|
|
|
+ return slots[ selected ];
|
|
|
+ }
|
|
|
+ return KEIN_GEGENSTAND;
|
|
|
+}
|
|
|
+
|
|
|
+void Inventar::tick( double zeit )
|
|
|
+{
|
|
|
+ for( int i = 0; i < INVENTORY_SLOTS; i++ )
|
|
|
+ {
|
|
|
+ if( slots[ i ] != KEIN_GEGENSTAND && abklingzeit[ i ] > 0 )
|
|
|
+ {
|
|
|
+ abklingzeit[ i ] -= (float)zeit;
|
|
|
+ if( abklingzeit[ i ] < 0 )
|
|
|
+ abklingzeit[ i ] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+bool Inventar::canAddItem( GegenstandTyp typ ) const
|
|
|
+{
|
|
|
+ if( !consumable( typ ) )
|
|
|
+ {
|
|
|
+ for( int i = 0; i < INVENTORY_SLOTS; i++ )
|
|
|
+ {
|
|
|
+ if( slots[ i ] == typ )
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for( int i = 0; i < INVENTORY_SLOTS; i++ )
|
|
|
+ {
|
|
|
+ if( slots[ i ] == KEIN_GEGENSTAND || ( slots[ i ] == typ && consumable( typ ) ) )
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+GegenstandTyp Inventar::selectedItem() const
|
|
|
+{
|
|
|
+ return slots[ selected ];
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+Spieler::Spieler( int id, Team *team, int spawnX, int spawnY, int farbe )
|
|
|
+ : GameObject( SPIELER, spawnX, spawnY, 40, 50 )
|
|
|
+{
|
|
|
+ klient = 0;
|
|
|
+ accountId = 0;
|
|
|
+ spielerNummer = id;
|
|
|
+ this->team = team;
|
|
|
+ amLeben = 1;
|
|
|
+ maxWiederbelebungsZeit = 2;
|
|
|
+ wiederbelebungsZeit = 0;
|
|
|
+ zuletztAufgehoben = KEIN_GEGENSTAND;
|
|
|
+ zuletztAktiviert = KEIN_GEGENSTAND;
|
|
|
+ this->leben = 300;
|
|
|
+ this->maxLeben = 300;
|
|
|
+ level = 1;
|
|
|
+ erfahrung = 0;
|
|
|
+ maxErfahrung = 5;
|
|
|
+ this->spawnX = spawnX;
|
|
|
+ this->spawnY = spawnY;
|
|
|
+ laufTempo = 30;
|
|
|
+ geschossTempo = 100;
|
|
|
+ armor = 0;
|
|
|
+ schadensBonus = 0;
|
|
|
+ lebensraub = 0;
|
|
|
+ lebensRegeneration = 1;
|
|
|
+ abklingZeitVerringerung = 0;
|
|
|
+ color = farbe;
|
|
|
+ kills = 0;
|
|
|
+ tode = 0;
|
|
|
+ treffer = 0;
|
|
|
+ getroffen = 0;
|
|
|
+ schadenGenommen = 0;
|
|
|
+ schadenGemacht = 0;
|
|
|
+ lebenGeheilt = 0;
|
|
|
+ erhalteneErfahrung = 0;
|
|
|
+ itemsAufgehoben = 0;
|
|
|
+ itemsVerwendet = 0;
|
|
|
+ tunnelBenutzt = 0;
|
|
|
+ schalterAktiviert = 0;
|
|
|
+ geschosseGeschossen = 0;
|
|
|
+ for( int i = 0; i < 256; i++ )
|
|
|
+ tastenStand[ i ] = 0;
|
|
|
+ ausrichtung = MITTE;
|
|
|
+}
|
|
|
+
|
|
|
+Spieler::~Spieler()
|
|
|
+{
|
|
|
+ if( klient )
|
|
|
+ klient->release();
|
|
|
+ if( team )
|
|
|
+ team->release();
|
|
|
+}
|
|
|
+
|
|
|
+bool Spieler::setTastenStand( unsigned char taste, bool pressed )
|
|
|
+{
|
|
|
+ bool ret = tastenStand[ (int)taste ] != pressed;
|
|
|
+ tastenStand[ (int)taste ] = pressed;
|
|
|
+ if( pressed )
|
|
|
+ {
|
|
|
+ if( taste == 'w' )
|
|
|
+ ausrichtung = OBEN;
|
|
|
+ if( taste == 'a' )
|
|
|
+ ausrichtung = LINKS;
|
|
|
+ if( taste == 's' )
|
|
|
+ ausrichtung = UNTEN;
|
|
|
+ if( taste == 'd' )
|
|
|
+ ausrichtung = RECHTS;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if( !tastenStand[ 'w' ] && !tastenStand[ 'a' ] && !tastenStand[ 's' ] && !tastenStand[ 'd' ] )
|
|
|
+ ausrichtung = MITTE;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if( ( ausrichtung == OBEN && taste == 'w' ) ||
|
|
|
+ ( ausrichtung == LINKS && taste == 'a' ) ||
|
|
|
+ ( ausrichtung == UNTEN && taste == 's' ) ||
|
|
|
+ ( ausrichtung == RECHTS && taste == 'd' ) )
|
|
|
+ {
|
|
|
+ if( tastenStand[ 'w' ] )
|
|
|
+ ausrichtung = OBEN;
|
|
|
+ if( tastenStand[ 'a' ] )
|
|
|
+ ausrichtung = LINKS;
|
|
|
+ if( tastenStand[ 's' ] )
|
|
|
+ ausrichtung = UNTEN;
|
|
|
+ if( tastenStand[ 'd' ] )
|
|
|
+ ausrichtung = RECHTS;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::setTeam( Team *team )
|
|
|
+{
|
|
|
+ if( this->team )
|
|
|
+ this->team->removeSpieler();
|
|
|
+ this->team->release();
|
|
|
+ this->team = team;
|
|
|
+ this->team->addSpieler();
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::setAccount( int id )
|
|
|
+{
|
|
|
+ this->accountId = id;
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::setKlient( Klient *klient )
|
|
|
+{
|
|
|
+ if( this->klient )
|
|
|
+ this->klient->release();
|
|
|
+ this->klient = klient;
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::addEffekt( Effect *e )
|
|
|
+{
|
|
|
+ effekte.add( e );
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::setLaufTempo( float pps )
|
|
|
+{
|
|
|
+ laufTempo = pps;
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::addErfahrung( float anz, Spiel *zSpiel )
|
|
|
+{
|
|
|
+ erfahrung += anz;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_BEKOMMT_ERFAHRUNG );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Wert", new Float( anz ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ if( erfahrung > maxErfahrung )
|
|
|
+ {
|
|
|
+ level++;
|
|
|
+ erfahrung -= (float)maxErfahrung;
|
|
|
+ maxErfahrung += ( maxErfahrung / level ) + 2;
|
|
|
+ maxLeben += 20;
|
|
|
+ heilung( 20, zSpiel );
|
|
|
+ if( level <= 10 )
|
|
|
+ {
|
|
|
+ laufTempo += 2;
|
|
|
+ geschossTempo += 2;
|
|
|
+ }
|
|
|
+ if( level <= 50 )
|
|
|
+ {
|
|
|
+ armor += 1;
|
|
|
+ abklingZeitVerringerung += 1;
|
|
|
+ }
|
|
|
+ if( level <= 75 )
|
|
|
+ {
|
|
|
+ schadensBonus += 1;
|
|
|
+ lebensraub += 1;
|
|
|
+ }
|
|
|
+ if( level <= 100 )
|
|
|
+ lebensRegeneration += 1;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_LEVEL_UP );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// aktualisiert auch die team statistik
|
|
|
+void Spieler::addKill()
|
|
|
+{
|
|
|
+ team->addKill();
|
|
|
+ kills++;
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::addTreffer( Spiel *zSpiel )
|
|
|
+{
|
|
|
+ addErfahrung( 2, zSpiel );
|
|
|
+ treffer++;
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::addGetroffen()
|
|
|
+{
|
|
|
+ getroffen++;
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::move( double zeit )
|
|
|
+{
|
|
|
+ if( istAmLeben() )
|
|
|
+ {
|
|
|
+ if( tastenStand[ 'w' ] && istBeweglich( OBEN ) )
|
|
|
+ y -= laufTempo * (float)zeit;
|
|
|
+ if( tastenStand[ 'a' ] && istBeweglich( LINKS ) )
|
|
|
+ x -= laufTempo * (float)zeit;
|
|
|
+ if( tastenStand[ 's' ] && istBeweglich( UNTEN ) )
|
|
|
+ y += laufTempo * (float)zeit;
|
|
|
+ if( tastenStand[ 'd' ] && istBeweglich( RECHTS ) )
|
|
|
+ x += laufTempo * (float)zeit;
|
|
|
+ for( auto e = effekte.getIterator(); e; e++ )
|
|
|
+ e->move( zeit );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::wiederbelebung( Spiel *zSpiel )
|
|
|
+{
|
|
|
+ amLeben = 1;
|
|
|
+ leben = (float)maxLeben;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_WIEDERBELEBT );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::tick( double zeit, Spiel *zSpiel )
|
|
|
+{
|
|
|
+ if( istAmLeben() )
|
|
|
+ {
|
|
|
+ for( int i = 0; i < effekte.getEintragAnzahl(); i++ )
|
|
|
+ {
|
|
|
+ if( effekte.z( i )->tick( zeit, zSpiel ) && istAmLeben() )
|
|
|
+ {
|
|
|
+ effekte.remove( i );
|
|
|
+ i--;
|
|
|
+ }
|
|
|
+ if( !istAmLeben() )
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if( tastenStand[ ' ' ] )
|
|
|
+ useItem( zSpiel );
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ effekte.leeren();
|
|
|
+ wiederbelebungsZeit -= (float)zeit;
|
|
|
+ if( wiederbelebungsZeit <= 0 )
|
|
|
+ {
|
|
|
+ wiederbelebung( zSpiel );
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::useItem( Spiel *zSpiel )
|
|
|
+{
|
|
|
+ if( istAmLeben() && inv.selectedItem() != KEIN_GEGENSTAND && istGegenstandErlaubt( inv.selectedItem() ) )
|
|
|
+ {
|
|
|
+ itemsVerwendet++;
|
|
|
+ GegenstandTyp typ = inv.useItem();
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_BENUTZT_GEGENSTAND );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Betroffener Gegenstand", new GegenstandTypVar( typ ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ switch( typ )
|
|
|
+ {
|
|
|
+ case PFEIL:
|
|
|
+ geschosseGeschossen++;
|
|
|
+ zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_PFEIL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
|
+ break;
|
|
|
+ case LEBEN:
|
|
|
+ addEffekt( new LebenEffect( this ) );
|
|
|
+ break;
|
|
|
+ case SCHILD:
|
|
|
+ addEffekt( new SchildEffect( this ) );
|
|
|
+ break;
|
|
|
+ case SCHUH:
|
|
|
+ addEffekt( new SchuhEffect( this ) );
|
|
|
+ break;
|
|
|
+ case GEIST:
|
|
|
+ addEffekt( new GeistEffect( this ) );
|
|
|
+ break;
|
|
|
+ case KUGEL:
|
|
|
+ geschosseGeschossen++;
|
|
|
+ zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_KUGEL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
|
+ break;
|
|
|
+ case ROLLE:
|
|
|
+ addEffekt( new RolleEffect( this, getAusrichtung() ) );
|
|
|
+ break;
|
|
|
+ case STURM:
|
|
|
+ addEffekt( new SturmEffect( this, getAusrichtung() ) );
|
|
|
+ break;
|
|
|
+ case DRACHENAUGE:
|
|
|
+ geschosseGeschossen++;
|
|
|
+ zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_DRACHENAUGE, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
|
+ break;
|
|
|
+ case FEUERBALL:
|
|
|
+ geschosseGeschossen++;
|
|
|
+ zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), geschossTempo, GESCHOSS_FEUERBALL, getAusrichtung(), (int)x, (int)y, (Spieler *)getThis() ) );
|
|
|
+ break;
|
|
|
+ case ENTERHAKEN:
|
|
|
+ addEffekt( new EnterhakenEffect( this, getAusrichtung() ) );
|
|
|
+ break;
|
|
|
+ case MINE:
|
|
|
+ geschosseGeschossen++;
|
|
|
+ zSpiel->addGeschoss( new Geschoss( zSpiel->getNextId(), 0, GESCHOSS_MINE, MITTE, (int)x, (int)y, (Spieler *)getThis() ) );
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+bool Spieler::addItem( GegenstandTyp typ, int anz, Spiel *zSpiel )
|
|
|
+{
|
|
|
+ if( storable( typ ) )
|
|
|
+ {
|
|
|
+ if( inv.canAddItem( typ ) )
|
|
|
+ {
|
|
|
+ itemsAufgehoben += anz;
|
|
|
+ inv.addItem( typ, anz );
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_BEKOMMT_GEGENSTAND );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Betroffener Gegenstand", new GegenstandTypVar( typ ) );
|
|
|
+ e->addParameter( "Anzahl", new Integer( anz ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ itemsAufgehoben += anz;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_BEKOMMT_GEGENSTAND );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Betroffener Gegenstand", new GegenstandTypVar( typ ) );
|
|
|
+ e->addParameter( "Anzahl", new Integer( anz ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ for( int i = 0; i < anz; i++ )
|
|
|
+ {
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_BENUTZT_GEGENSTAND );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Betroffener Gegenstand", new GegenstandTypVar( typ ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ itemsVerwendet++;
|
|
|
+ switch( typ )
|
|
|
+ {
|
|
|
+ case RWEISHEIT:
|
|
|
+ addEffekt( new WeisheitRuneEffect( this ) );
|
|
|
+ break;
|
|
|
+ case RSTRENGTH:
|
|
|
+ addEffekt( new StrengthRuneEffect( this ) );
|
|
|
+ break;
|
|
|
+ case RBOSHEIT:
|
|
|
+ addEffekt( new BosheitRuneEffect( this ) );
|
|
|
+ break;
|
|
|
+ case RLEBEN:
|
|
|
+ addEffekt( new LebenRuneEffect( this ) );
|
|
|
+ break;
|
|
|
+ case RTEMPO:
|
|
|
+ addEffekt( new TempoRuneEffect( this ) );
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+// heilt auch um den lebensraub prozentsatz
|
|
|
+void Spieler::addGemachterSchaden( float schaden, Spiel *zSpiel )
|
|
|
+{
|
|
|
+ schadenGemacht += schaden;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_MACHT_SCHADEN );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Wert", new Float( schaden ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ heilung( schaden / 100 * lebensraub, zSpiel );
|
|
|
+}
|
|
|
+
|
|
|
+// zieht die rüstung ab
|
|
|
+void Spieler::nimmSchaden( float schaden, Spieler *zVerursacher, Richtung r, Spiel *zSpiel )
|
|
|
+{
|
|
|
+ if( !isVerwundbar( r ) || !amLeben )
|
|
|
+ return;
|
|
|
+ if( zVerursacher )
|
|
|
+ schaden += schaden / 100 * zVerursacher->getSchadenBonus();
|
|
|
+ schaden -= schaden / 100 * armor;
|
|
|
+ schaden = leben < schaden ? leben : schaden;
|
|
|
+ schadenGenommen += schaden;
|
|
|
+ leben -= schaden;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_NIMMT_SCHADEN );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Wert", new Float( schaden ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ if( zVerursacher )
|
|
|
+ zVerursacher->addGemachterSchaden( schaden, zSpiel );
|
|
|
+ if( leben == 0 )
|
|
|
+ {
|
|
|
+ wiederbelebungsZeit = (float)( maxWiederbelebungsZeit + team->getMaxWiederbelebungsZeit() );
|
|
|
+ wiederbelebungsZeit -= wiederbelebungsZeit / 100 * abklingZeitVerringerung;
|
|
|
+ team->addTod();
|
|
|
+ amLeben = 0;
|
|
|
+ tode++;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_STIRBT );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ if( zVerursacher )
|
|
|
+ zVerursacher->addKill();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void Spieler::heilung( float heal, Spiel *zSpiel )
|
|
|
+{
|
|
|
+ if( amLeben )
|
|
|
+ {
|
|
|
+ lebenGeheilt += heal;
|
|
|
+ leben += heal;
|
|
|
+ Ereignis *e = new Ereignis( SPIELER_WIRD_GEHEILT );
|
|
|
+ e->addParameter( "Betroffener Spieler", getThis() );
|
|
|
+ e->addParameter( "Wert", new Float( heal ) );
|
|
|
+ zSpiel->throwEvent( e );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+float Spieler::getSchadenBonus() const
|
|
|
+{
|
|
|
+ return schadensBonus;
|
|
|
+}
|
|
|
+
|
|
|
+Klient *Spieler::zKlient() const
|
|
|
+{
|
|
|
+ return klient;
|
|
|
+}
|
|
|
+
|
|
|
+int Spieler::getSpielerNummer() const
|
|
|
+{
|
|
|
+ return spielerNummer;
|
|
|
+}
|
|
|
+
|
|
|
+Team *Spieler::zTeam() const
|
|
|
+{
|
|
|
+ return team;
|
|
|
+}
|
|
|
+
|
|
|
+int Spieler::getFarbe() const
|
|
|
+{
|
|
|
+ return color;
|
|
|
+}
|
|
|
+
|
|
|
+int Spieler::getAccountId() const
|
|
|
+{
|
|
|
+ return accountId;
|
|
|
+}
|
|
|
+
|
|
|
+int Spieler::getPunkte() const
|
|
|
+{
|
|
|
+ return kills - tode + ( treffer - getroffen ) / 2;
|
|
|
+}
|
|
|
+
|
|
|
+bool Spieler::istAmLeben() const
|
|
|
+{
|
|
|
+ return amLeben;
|
|
|
+}
|
|
|
+
|
|
|
+float Spieler::getLaufTempo() const
|
|
|
+{
|
|
|
+ return laufTempo;
|
|
|
+}
|
|
|
+
|
|
|
+bool Spieler::isVerwundbar( Richtung r ) const
|
|
|
+{
|
|
|
+ bool verwundbar = 1;
|
|
|
+ for( auto e = effekte.getIterator(); e; e++ )
|
|
|
+ {
|
|
|
+ verwundbar &= e->istSpielerVerwundbar( r );
|
|
|
+ if( !verwundbar )
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+bool Spieler::istBeweglich( Richtung r ) const
|
|
|
+{
|
|
|
+ bool beweglich = 1;
|
|
|
+ for( auto e = effekte.getIterator(); e; e++ )
|
|
|
+ {
|
|
|
+ beweglich &= e->istSpielerBeweglich( r );
|
|
|
+ if( !beweglich )
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+bool Spieler::istSichtbar( Team *zTeam ) const
|
|
|
+{
|
|
|
+ bool sichtbar = 1;
|
|
|
+ for( auto e = effekte.getIterator(); e; e++ )
|
|
|
+ {
|
|
|
+ sichtbar &= e->istSpielerSichtbar( zTeam );
|
|
|
+ if( !sichtbar )
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+bool Spieler::istGegenstandErlaubt( GegenstandTyp typ ) const
|
|
|
+{
|
|
|
+ bool erlaubt = !brauchtRichtung( typ ) || ausrichtung != MITTE;
|
|
|
+ for( auto e = effekte.getIterator(); e; e++ )
|
|
|
+ {
|
|
|
+ erlaubt &= e->istGegenstandErlaubt( typ );
|
|
|
+ if( !erlaubt )
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+Richtung Spieler::getAusrichtung() const
|
|
|
+{
|
|
|
+ return ausrichtung;
|
|
|
+}
|