示例#1
0
 public void Handle(XI XI, Base.VW.IWISV WI)
 {
     if (CrossStage)
         XI.ResetAllPlayerRAM();
     XI.ClearLeftPendingTux();
     // TODO: raise new ON event (e.g. Use WQ04 as ZP01 and then jump to R*Z2}), check the risk
     // WI.RecvInfTermin();
     // Reset board information
     XI.Board.UseCardRound = 0;
     GotoFire gotoFire = new GotoFire() { Terminal = Terminal };
     gotoFire.Telegraph((p) => XI.PushIntoLastUV(XI.Board.Garden.Keys, p));
     gotoFire.Telegraph(WI.BCast);
     // count how many players have received the F0JM message
     int count = XI.Board.Garden.Keys.Count;
     while (count > 0)
     {
         Base.VW.Msgs msg = WI.RecvInfRecv();
         if (msg.Msg.StartsWith("F0JM") && XI.MatchedPopFromLastUV(msg.From, "F0JM"))
             --count;
         else
             gotoFire.Telegraph(p => WI.Send(p, 0, msg.From));
     }
     XI.BlockSetJumpTable(Terminal, "H0TM");
     System.Threading.Thread.CurrentThread.Abort();
 }