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); }
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); }); }