Răsfoiți Sursa

Aktion Spieler mit Nummer hinzugefügt

Kolja Strohm 5 ani în urmă
părinte
comite
a079376ea8

+ 27 - 3
StickmanWorldOnline/Aktionen.cpp

@@ -2902,9 +2902,13 @@ SchalterMitNummer::SchalterMitNummer( RCArray<Aktion> *subActions )
     erlaubteTypen.add( INTEGER );
 }
 
-void SchalterMitNummer::run( Spiel * zSpiel, Ereignis * zEreignis, LocalMemory * zMemory, ProgramCounter * zPC, double &waitCount )
+void SchalterMitNummer::run( Spiel *zSpiel, Ereignis *zEreignis, LocalMemory *zMemory, ProgramCounter *zPC, double &waitCount )
 {
-    setReturn( zSpiel->getSchalter( ( (Integer *)zParam( 0 ) )->getValue() ) );
+    Schalter *s = zSpiel->getSchalter( ( (Integer *)zParam( 0 ) )->getValue() );
+    if( s )
+        setReturn( s );
+    else
+        setReturn( new Variable( VariableTyp::NICHTS ) );
 }
 
 
@@ -2916,7 +2920,11 @@ BaseMitNummer::BaseMitNummer( RCArray<Aktion> *subActions )
 
 void BaseMitNummer::run( Spiel *zSpiel, Ereignis *zEreignis, LocalMemory *zMemory, ProgramCounter *zPC, double &waitCount )
 {
-    setReturn( zSpiel->getBase( ( (Integer *)zParam( 0 ) )->getValue() ) );
+    Base *b = zSpiel->getBase( ( (Integer *)zParam( 0 ) )->getValue() );
+    if( b )
+        setReturn( b );
+    else
+        setReturn( new Variable( VariableTyp::NICHTS ) );
 }
 
 
@@ -2945,4 +2953,20 @@ void TeamVonBase::run( Spiel *zSpiel, Ereignis *zEreignis, LocalMemory *zMemory,
         setReturn( t );
     else
         setReturn( new Variable( VariableTyp::NICHTS ) );
+}
+
+
+SpielerMitNummer::SpielerMitNummer( RCArray<Aktion> *subActions )
+    : Aktion( SPIELER_MIT_NUMMER, subActions )
+{
+    erlaubteTypen.add( INTEGER );
+}
+
+void SpielerMitNummer::run( Spiel *zSpiel, Ereignis *zEreignis, LocalMemory *zMemory, ProgramCounter *zPC, double &waitCount )
+{
+    Spieler *s = zSpiel->getSpieler( ( (Integer *)zParam( 0 ) )->getValue() );
+    if( s )
+        setReturn( s );
+    else
+        setReturn( new Variable( VariableTyp::NICHTS ) );
 }

+ 10 - 1
StickmanWorldOnline/Aktionen.h

@@ -217,7 +217,8 @@ enum AktionTyp
     SCHALTER_MIT_NUMMER,
     BASE_MIT_NUMMER,
     TEAM_MIT_NUMMER,
-    TEAM_VON_BASE
+    TEAM_VON_BASE,
+    SPIELER_MIT_NUMMER
 };
 
 enum Operator
@@ -1916,4 +1917,12 @@ public:
     // f
     TeamVonBase( RCArray< Aktion > *subActions );
     void run( Spiel *zSpiel, Ereignis *zEreignis, LocalMemory *zMemory, ProgramCounter *zPC, double &waitCount ) override;
+};
+
+class SpielerMitNummer : public Aktion
+{
+public:
+    // f
+    SpielerMitNummer( RCArray< Aktion > *subActions );
+    void run( Spiel *zSpiel, Ereignis *zEreignis, LocalMemory *zMemory, ProgramCounter *zPC, double &waitCount ) override;
 };

+ 2 - 0
StickmanWorldOnline/Reader.cpp

@@ -629,6 +629,8 @@ Aktion *MapReader::readAktion( Datei &dat )
         return new TeamMitNummer( params );
     case TEAM_VON_BASE:
         return new TeamVonBase( params );
+    case SPIELER_MIT_NUMMER:
+        return new SpielerMitNummer( params );
     }
     params->release();
     return new KonstantNichts();