示例#1
0
        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();
            }
        }
示例#2
0
        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;
                }
            }
        }