public override void Execute() { LoopMonster = gMDB[Globals.LoopMonsterUid]; Debug.Assert(LoopMonster != null); LoopMonsterRoom = LoopMonster.GetInRoom(); Debug.Assert(LoopMonsterRoom != null); // Try to open running device, all flee if (LoopMonster.CanMoveToRoom(true) && Globals.DeviceOpened) { ActionCommand = Globals.CreateInstance <IMonsterFleeCommand>(x => { x.ActorMonster = LoopMonster; x.ActorRoom = LoopMonsterRoom; }); ActionCommand.Execute(); NextState = Globals.CreateInstance <IMonsterLoopIncrementState>(); Globals.NextState = NextState; } else { base.Execute(); } }
public virtual void MonsterFleesCheck() { if (LoopMonster.CheckNBTLHostility() && LoopMonster.CanMoveToRoom(true) && !LoopMonster.CheckCourage()) { Debug.Assert(LoopMonster.Reaction != Friendliness.Neutral); ActionCommand = Globals.CreateInstance <IMonsterFleeCommand>(x => { x.ActorMonster = LoopMonster; x.ActorRoom = LoopMonsterRoom; }); ActionCommand.Execute(); if (LoopMonster.CurrGroupCount >= Globals.LoopGroupCount) { GotoCleanup = true; } } }