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.Create)
{
ChannelServer.Instance.Events.CreatureCreatedItem -= this.OnCreatureCreatedOrProducedItem;
ChannelServer.Instance.Events.CreatureCreatedItem += this.OnCreatureCreatedOrProducedItem;
ChannelServer.Instance.Events.CreatureProducedItem -= this.OnCreatureCreatedOrProducedItem;
ChannelServer.Instance.Events.CreatureProducedItem += this.OnCreatureCreatedOrProducedItem;
}
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;
}
if (objective.Type == ObjectiveType.ClearDungeon)
{
ChannelServer.Instance.Events.PlayerClearedDungeon -= this.OnPlayerClearedDungeon;
ChannelServer.Instance.Events.PlayerClearedDungeon += this.OnPlayerClearedDungeon;
}
this.Objectives.Add(ident, objective);
}