示例#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 override void Execute()
        {
            LoopMonster = gMDB[Globals.LoopMonsterUid];

            Debug.Assert(LoopMonster != null);

            LoopMonsterRoom = LoopMonster.GetInRoom();

            Debug.Assert(LoopMonsterRoom != null);

            Globals.LoopGroupCount = LoopMonster.CurrGroupCount;

            MonsterFleesCheck();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

            NextState = Globals.CreateInstance <IMonsterMemberLoopInitializeState>();

Cleanup:

            if (NextState == null)
            {
                NextState = Globals.CreateInstance <IMonsterLoopIncrementState>();
            }

            Globals.NextState = NextState;
        }
示例#3
0
        public override void Execute()
        {
            LoopMonster = gMDB[Globals.LoopMonsterUid];

            Debug.Assert(LoopMonster != null);

            LoopMonsterRoom = LoopMonster.GetInRoom();

            Debug.Assert(LoopMonsterRoom != null);

            // Fido eats dead bodies

            if (LoopMonster.Uid == 11 && gGameState.FidoSleepCounter <= 0)
            {
                var artifactList = gEngine.GetArtifactList(a => a.DeadBody != null && a.IsInRoom(LoopMonsterRoom));

                if (artifactList.Count > 0)
                {
                    var mealArtifact = artifactList[0];

                    Debug.Assert(mealArtifact != null);

                    // Munch, munch....

                    if (LoopMonsterRoom.Uid == gGameState.Ro)
                    {
                        gOut.Print("{0} eats{1}, then goes to sleep for a while.", LoopMonsterRoom.IsLit() ? "Fido" : "Something", LoopMonsterRoom.IsLit() ? " " + mealArtifact.GetTheName() : "");
                    }

                    gGameState.FidoSleepCounter += mealArtifact.Weight;

                    mealArtifact.SetInLimbo();

                    LoopMonster.StateDesc = "(sound asleep)";

                    LoopMonster.Reaction = Friendliness.Neutral;

                    NextState = Globals.CreateInstance <IMonsterMemberLoopIncrementState>();

                    Globals.NextState = NextState;
                }
                else
                {
                    base.Execute();
                }
            }
            else
            {
                base.Execute();
            }
        }
示例#4
0
        public override void Execute()
        {
            LoopMonster = gMDB[Globals.LoopMonsterUid];

            Debug.Assert(LoopMonster != null);

            LoopMonsterRoom = LoopMonster.GetInRoom();

            Debug.Assert(LoopMonsterRoom != null);

            MonsterAttackGetHostileMonsterList();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

            MonsterAttackDefenderMissingCheck();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

            MonsterAttackDefenderSelected();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

            MonsterAttackExecuted();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

Cleanup:

            if (NextState == null)
            {
                NextState = Globals.CreateInstance <IMonsterAttackLoopIncrementState>();
            }

            Globals.NextState = NextState;
        }
示例#5
0
        public override void Execute()
        {
            LoopMonster = gMDB[Globals.LoopMonsterUid];

            Debug.Assert(LoopMonster != null);

            LoopMonsterRoom = LoopMonster.GetInRoom();

            Debug.Assert(LoopMonsterRoom != null);

            MonsterMemberReadiesWeaponCheck();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

            MonsterMemberReadiesNaturalWeaponCheck();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

            MonsterMemberCastsSpellCheck();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

            MonsterMemberAttacksEnemyCheck();

            if (GotoCleanup)
            {
                goto Cleanup;
            }

Cleanup:

            if (NextState == null)
            {
                NextState = Globals.CreateInstance <IMonsterMemberLoopIncrementState>();
            }

            Globals.NextState = NextState;
        }