/// <summary> /// Adds objective that has to be cleared to complete the quest. /// </summary> /// <param name="ident"></param> /// <param name="description"></param> /// <param name="regionId"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="objective"></param> protected void AddObjective(string ident, string description, int regionId, int x, int y, QuestObjective objective) { if (this.Objectives.ContainsKey(ident)) { Log.Error("{0}: Objectives must have an unique identifier.", this.GetType().Name); return; } objective.Ident = ident; objective.Description = description; objective.RegionId = regionId; objective.X = x; objective.Y = y; if (objective.Type == ObjectiveType.Kill) { ChannelServer.Instance.Events.CreatureKilledByPlayer -= this.OnCreatureKilledByPlayer; ChannelServer.Instance.Events.CreatureKilledByPlayer += this.OnCreatureKilledByPlayer; } if (objective.Type == ObjectiveType.Collect) { ChannelServer.Instance.Events.PlayerReceivesItem -= this.OnPlayerReceivesOrRemovesItem; ChannelServer.Instance.Events.PlayerReceivesItem += this.OnPlayerReceivesOrRemovesItem; ChannelServer.Instance.Events.PlayerRemovesItem -= this.OnPlayerReceivesOrRemovesItem; ChannelServer.Instance.Events.PlayerRemovesItem += this.OnPlayerReceivesOrRemovesItem; } if (objective.Type == ObjectiveType.ReachRank) { ChannelServer.Instance.Events.SkillRankChanged -= this.OnSkillRankChanged; ChannelServer.Instance.Events.SkillRankChanged += this.OnSkillRankChanged; } if (objective.Type == ObjectiveType.ReachLevel) { ChannelServer.Instance.Events.CreatureLevelUp -= this.OnCreatureLevelUp; ChannelServer.Instance.Events.CreatureLevelUp += this.OnCreatureLevelUp; } if (objective.Type == ObjectiveType.GetKeyword) { ChannelServer.Instance.Events.CreatureGotKeyword -= this.CreatureGotKeyword; ChannelServer.Instance.Events.CreatureGotKeyword += this.CreatureGotKeyword; } if (objective.Type == ObjectiveType.Equip) { ChannelServer.Instance.Events.PlayerEquipsItem -= this.OnPlayerEquipsItem; ChannelServer.Instance.Events.PlayerEquipsItem += this.OnPlayerEquipsItem; } if (objective.Type == ObjectiveType.Gather) { ChannelServer.Instance.Events.CreatureGathered -= this.OnCreatureGathered; ChannelServer.Instance.Events.CreatureGathered += this.OnCreatureGathered; } if (objective.Type == ObjectiveType.UseSkill) { ChannelServer.Instance.Events.PlayerUsedSkill -= this.OnPlayerUsedSkill; ChannelServer.Instance.Events.PlayerUsedSkill += this.OnPlayerUsedSkill; } this.Objectives.Add(ident, objective); }