示例#1
0
        /// <inheritdoc />
        public void InitializeState(GameMap createdMap)
        {
            Logger.Debug($"Start creating monster instances for map {createdMap}");
            foreach (var spawn in createdMap.Definition.MonsterSpawns.Where(s => s.SpawnTrigger == SpawnTrigger.Automatic))
            {
                for (int i = 0; i < spawn.Quantity; i++)
                {
                    var monsterDef = spawn.MonsterDefinition;
                    NonPlayerCharacter npc;

                    // TODO: Check if the condition is correct... NPCs are not attackable, but some might need to be (castle gates etc.). Also some NPCs are attacking, but should not be attackable (Traps).
                    if (monsterDef.AttackDelay > TimeSpan.Zero)
                    {
                        Logger.Debug($"Creating monster {spawn}");
                        npc = new Monster(spawn, monsterDef, createdMap, this.defaultDropGenerator, new BasicMonsterIntelligence(createdMap));
                    }
                    else
                    {
                        Logger.Debug($"Creating npc {spawn}");
                        npc = new NonPlayerCharacter(spawn, monsterDef, createdMap);
                    }

                    npc.Initialize();
                    createdMap.Add(npc);
                }
            }

            Logger.Debug($"Finished creating monster instances for map {createdMap}");
        }
示例#2
0
        /// <inheritdoc />
        public void InitializeState(GameMap createdMap)
        {
            this.logger.LogDebug("Start creating monster instances for map {createdMap}", createdMap);
            foreach (var spawn in createdMap.Definition.MonsterSpawns.Where(s => s.SpawnTrigger == SpawnTrigger.Automatic))
            {
                for (int i = 0; i < spawn.Quantity; i++)
                {
                    var monsterDef = spawn.MonsterDefinition;
                    NonPlayerCharacter npc;

                    var intelligence = this.TryCreateConfiguredNpcIntelligence(monsterDef, createdMap);

                    if (monsterDef.ObjectKind == NpcObjectKind.Monster)
                    {
                        this.logger.LogDebug("Creating monster {spawn}", spawn);
                        npc = new Monster(spawn, monsterDef, createdMap, this.defaultDropGenerator, intelligence ?? new BasicMonsterIntelligence(createdMap), this.PlugInManager);
                    }
                    else if (monsterDef.ObjectKind == NpcObjectKind.Trap)
                    {
                        this.logger.LogDebug("Creating trap {spawn}", spawn);
                        npc = new Trap(spawn, monsterDef, createdMap, intelligence ?? new RandomAttackInRangeTrapIntelligence(createdMap));
                    }
                    else
                    {
                        this.logger.LogDebug("Creating npc {spawn}", spawn);
                        npc = new NonPlayerCharacter(spawn, monsterDef, createdMap);
                    }

                    npc.Initialize();
                    createdMap.Add(npc);
                }
            }

            this.logger.LogDebug("Finished creating monster instances for map {createdMap}", createdMap);
        }
示例#3
0
        /// <inheritdoc />
        public void InitializeState(GameMap createdMap)
        {
            if (this.PlugInManager is null)
            {
                throw new InvalidOperationException("PlugInManager must be set first");
            }

            this.logger.LogDebug("Start creating monster instances for map {createdMap}", createdMap);
            foreach (var spawn in createdMap.Definition.MonsterSpawns.Where(s => s.SpawnTrigger == SpawnTrigger.Automatic && s.MonsterDefinition is not null))
            {
                for (int i = 0; i < spawn.Quantity; i++)
                {
                    var monsterDef = spawn.MonsterDefinition !;
                    NonPlayerCharacter npc;

                    var intelligence = this.TryCreateConfiguredNpcIntelligence(monsterDef, createdMap);

                    if (monsterDef.ObjectKind == NpcObjectKind.Monster)
                    {
                        this.logger.LogDebug("Creating monster {spawn}", spawn);
                        npc = new Monster(spawn, monsterDef, createdMap, this.defaultDropGenerator, intelligence ?? new BasicMonsterIntelligence(), this.PlugInManager);
                    }
                    else if (monsterDef.ObjectKind == NpcObjectKind.Trap)
                    {
                        this.logger.LogDebug("Creating trap {spawn}", spawn);
                        npc = new Trap(spawn, monsterDef, createdMap, intelligence ?? new RandomAttackInRangeTrapIntelligence(createdMap));
                    }
                    else if (monsterDef.ObjectKind == NpcObjectKind.SoccerBall)
                    {
                        this.logger.LogDebug("Creating soccer ball {spawn}", spawn);
                        npc = new SoccerBall(spawn, monsterDef, createdMap);
                    }
                    else
                    {
                        this.logger.LogDebug("Creating npc {spawn}", spawn);
                        npc = new NonPlayerCharacter(spawn, monsterDef, createdMap);
                    }

                    try
                    {
                        npc.Initialize();
                        createdMap.Add(npc);
                    }
                    catch (Exception ex)
                    {
                        this.logger.LogError(ex, $"Object {spawn} couldn't be initialized.", spawn);
                        npc.Dispose();
                    }
                }
            }

            this.logger.LogDebug("Finished creating monster instances for map {createdMap}", createdMap);
        }