ソースを参照

Aktion Spieler mit Nummer hinzugefügt

Kolja Strohm 5 年 前
コミット
a5c5224239

+ 26 - 2
StickmanWorldOnline/Aktionen.cpp

@@ -2903,7 +2903,11 @@ SchalterMitNummer::SchalterMitNummer( RCArray<Aktion> *subActions )
 
 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 ) );
 }
 
 
@@ -2915,7 +2919,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 ) );
 }
 
 
@@ -2944,4 +2952,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

@@ -568,6 +568,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();