static public void LoadQuestsRelation() { LoadQuestCreatureStarter(); LoadQuestCreatureFinisher(); foreach (KeyValuePair<uint, Creature_proto> Kp in CreatureProtos) { Kp.Value.StartingQuests = GetStartQuests(Kp.Key); Kp.Value.FinishingQuests = GetFinishersQuests(Kp.Key); } Quest quest; int MaxGuid = 0; foreach (KeyValuePair<int, Quest_Objectives> Kp in _Objectives) { if (Kp.Value.Guid >= MaxGuid) MaxGuid = Kp.Value.Guid; } foreach (KeyValuePair<int, Quest_Objectives> Kp in _Objectives) { quest = Kp.Value.Quest = GetQuest(Kp.Value.Entry); if (quest == null) continue; quest.Objectives.Add(Kp.Value); } foreach (KeyValuePair<ushort, Quest> Kp in _Quests) { quest = Kp.Value; if (quest.Objectives.Count == 0) { UInt32 Finisher = GetQuestCreatureFinisher(quest.Entry); if (Finisher != 0) { Quest_Objectives NewObj = new Quest_Objectives(); NewObj.Guid = ++MaxGuid; NewObj.Entry = quest.Entry; NewObj.ObjType = (uint)Objective_Type.QUEST_SPEACK_TO; NewObj.ObjID = Finisher.ToString(); NewObj.ObjCount = 1; NewObj.Quest = quest; quest.Objectives.Add(NewObj); _Objectives.Add(NewObj.Guid, NewObj); Log.Debug("WorldMgr", "Creating Objective for quest with no objectives: " + Kp.Value.Entry + " " + Kp.Value.Name); } } } foreach (KeyValuePair<int, Quest_Objectives> Kp in _Objectives) { if (Kp.Value.Quest == null) continue; GenerateObjectif(Kp.Value, Kp.Value.Quest); } string sItemID, sCount; uint ItemID, Count; Item_Info Info; foreach (KeyValuePair<ushort, Quest> Kp in _Quests) { if (Kp.Value.Choice.Length <= 0) continue; // [5154,12],[128,1] string[] Rewards = Kp.Value.Choice.Split('['); foreach (string Reward in Rewards) { if (Reward.Length <= 0) continue; sItemID = Reward.Substring(0, Reward.IndexOf(',')); sCount = Reward.Substring(sItemID.Length + 1, Reward.IndexOf(']') - sItemID.Length - 1); ItemID = uint.Parse(sItemID); Count = uint.Parse(sCount); Info = GetItem_Info(ItemID); if (Info == null) continue; if (!Kp.Value.Rewards.ContainsKey(Info)) Kp.Value.Rewards.Add(Info, Count); else Kp.Value.Rewards[Info] += Count; } } }
public static void GenerateObjectif(Quest_Objectives Obj, Quest Q) { switch ((Objective_Type)Obj.ObjType) { case Objective_Type.QUEST_KILL_PLAYERS: { if(Obj.Description.Length < 1) Obj.Description = "Enemy Players"; }break; case Objective_Type.QUEST_SPEACK_TO: goto case Objective_Type.QUEST_KILL_MOB; case Objective_Type.QUEST_KILL_MOB: { uint ObjID = 0; uint.TryParse(Obj.ObjID, out ObjID); if(ObjID != 0) Obj.Creature = GetCreatureProto(ObjID); if (Obj.Description.Length < 1 && Obj.Creature != null) Obj.Description = Obj.Creature.Name; } break; case Objective_Type.QUEST_GET_ITEM: { uint ObjID = 0; uint.TryParse(Obj.ObjID, out ObjID); if (ObjID != 0) Obj.Item = GetItem_Info(ObjID); } break; }; }
static public void GenerateObjectif(Quest_Objectives Obj, Quest Q) { switch ((Objective_Type)Obj.ObjType) { case Objective_Type.QUEST_KILL_PLAYERS: { if(Obj.Description.Length < 1) Obj.Description = "Enemy Players"; }break; case Objective_Type.QUEST_SPEACK_TO: { uint ObjID = 0; uint.TryParse(Obj.ObjID, out ObjID); if(ObjID != 0) Obj.Creature = GetCreatureProto(ObjID); if (Obj.Creature == null) { Obj.Description = "Invalid Npc,plz report to GM. QuestID " + Obj.Entry + ",ObjId=" + Obj.ObjID; } else { if (Obj.Description == null || Obj.Description.Length <= Obj.Creature.Name.Length) Obj.Description = "Speak to " + Obj.Creature.Name; } } break; case Objective_Type.QUEST_USE_GO: { uint ObjID = 0; uint.TryParse(Obj.ObjID, out ObjID); if (ObjID != 0) Obj.GameObject = GetGameObjectProto(ObjID); if (Obj.GameObject == null) { Obj.Description = "Invalid Go,plz report to GM. QuestID " + Obj.Entry + ",ObjId=" + Obj.ObjID; } else { if (Obj.Description == null || Obj.Description.Length <= Obj.GameObject.Name.Length) Obj.Description = "Find " + Obj.GameObject.Name; } } break; case Objective_Type.QUEST_KILL_MOB: { uint ObjID = 0; uint.TryParse(Obj.ObjID, out ObjID); if(ObjID != 0) Obj.Creature = GetCreatureProto(ObjID); if (Obj.Creature == null) { Obj.Description = "Invalid Creature,plz report to GM. QuestID " + Obj.Entry + ",ObjId=" + Obj.ObjID; } else { if (Obj.Description == null || Obj.Description.Length <= Obj.Creature.Name.Length) Obj.Description = "Kill " + Obj.Creature.Name; } } break; case Objective_Type.QUEST_GET_ITEM: { uint ObjID = 0; uint.TryParse(Obj.ObjID, out ObjID); if (ObjID != 0) { Obj.Item = GetItem_Info(ObjID); if (Obj.Item == null) { int a =Obj.Quest.Particular.ToLower().IndexOf("kill the "); if (a >= 0) { string[] RestWords = Obj.Quest.Particular.Substring(a + 9).Split(' '); string Name = RestWords[0] + " " + RestWords[1]; Creature_proto Proto = GetCreatureProtoByName(Name); if (Proto == null) Proto = GetCreatureProtoByName(RestWords[0]); if (Proto != null) { Obj.Item = new Item_Info(); Obj.Item.Entry = ObjID; Obj.Item.Name = Obj.Description; Obj.Item.MaxStack = 20; Obj.Item.ModelId = 531; _Item_Info.Add(Obj.Item.Entry, Obj.Item); Log.Info("WorldMgr", "Creating Quest(" + Obj.Entry + ") Item : " + Obj.Item.Entry + ", " + Obj.Item.Name + "| Adding Loot to : " + Proto.Name); Creature_loot loot = new Creature_loot(); loot.Entry = Proto.Entry; loot.ItemId = Obj.Item.Entry; loot.Info = Obj.Item; loot.Pct = 0; GetLoots(Proto.Entry).Add(loot); } } } } } break; }; }