Beispiel #1
0
        public MonsterDungeonSpawn Map(MonsterDungeonSpawn spawn, MonsterDungeonSpawnEntity dummy)
        {
            MonsterDungeonSpawn result;

            if (spawn == null)
            {
                result = this.m_current;
            }
            else
            {
                if (this.m_current != null && this.m_current.Id == spawn.Id)
                {
                    this.m_current.GroupMonsters.Add(dummy);
                    result = null;
                }
                else
                {
                    MonsterDungeonSpawn current = this.m_current;
                    this.m_current = spawn;
                    this.m_current.GroupMonsters.Add(dummy);
                    result = current;
                }
            }
            return(result);
        }
Beispiel #2
0
        public override void ExecuteAdd(TriggerBase trigger)
        {
            Map map;

            if (!trigger.IsArgumentDefined("map"))
            {
                if (trigger is GameTrigger)
                {
                    map = (trigger as GameTrigger).Character.Map;
                }
                else
                {
                    trigger.ReplyError("No map defined");
                    return;
                }
            }
            else
            {
                map = trigger.Get <Map>("map");
            }

            var monsterTemplate = trigger.Get <MonsterTemplate>("monster");
            var grade           = MonsterManager.Instance.GetMonsterGrade(monsterTemplate.Id, trigger.Get <int>("grade"));

            if (grade == null)
            {
                trigger.ReplyError("Monster grade {0}({1}) not found", monsterTemplate.Name, trigger.Get <int>("grade"));
                return;
            }

            var pool = map.SpawningPools.OfType <DungeonSpawningPool>().FirstOrDefault();

            if (pool == null)
            {
                pool = new DungeonSpawningPool(map);
                map.AddSpawningPool(pool);
            }

            var minPartyMembers = trigger.Get <int>("minmembers");


            WorldServer.Instance.IOTaskPool.AddMessage(() =>
            {
                var group = pool.Spawns.FirstOrDefault();

                if (group == null)
                {
                    group = new MonsterDungeonSpawn()
                    {
                        Map = map
                    };
                    WorldServer.Instance.DBAccessor.Database.Insert(group);
                }

                var record = new MonsterDungeonSpawnEntity(group, grade, minPartyMembers);

                WorldServer.Instance.DBAccessor.Database.Insert(record);

                group.GroupMonsters.Add(record);
                if (group.GroupMonsters.Count == 1)
                {
                    pool.AddSpawn(group);
                }
                map.Area.ExecuteInContext(pool.StartAutoSpawn);
            });
        }