public enum GoalType { KillTask = 3, ScoutMission = 5 }; // These are just a hunch for now. /// <summary> /// Constructs a new QuestGoal. /// </summary> /// <param name="id">An id used to fidn this quest goal.</param> /// <param name="quest">The quest this goal is a part of.</param> /// <param name="description">The description of the goal.</param> /// <param name="type"></param> /// <param name="index"></param> /// <param name="target"></param> public QuestGoal(string id, RewardQuest quest, string description, GoalType type, int index, int target, ItemTemplate questItem) { Id = id; _quest = quest; _description = description; Type = type; _index = index; _current = 0; _target = 0; Target = target; _questItem = questItem; }
public QuestRewards(RewardQuest quest) { m_quest = quest; m_moneyPercent = 0; m_experience = 0; m_basicItems = new List <ItemTemplate>(); m_optionalItems = new List <ItemTemplate>(); m_choiceOf = 0; m_chosenItems = new List <ItemTemplate>(); m_bountypoints = 0; m_realmpoints = 0; m_gold = 0; }
protected override void SendQuestWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest, bool offer) { GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.Dialog)); ushort QuestID = QuestMgr.GetIDForQuestType(quest.GetType()); pak.WriteShort((offer) ? (byte)0x22 : (byte)0x21); // Dialog pak.WriteShort(QuestID); pak.WriteShort((ushort)questNPC.ObjectID); pak.WriteByte(0x00); // unknown pak.WriteByte(0x00); // unknown pak.WriteByte(0x00); // unknown pak.WriteByte(0x00); // unknown pak.WriteByte((offer) ? (byte)0x02 : (byte)0x01); // Accept/Decline or Finish/Not Yet pak.WriteByte(0x01); // Wrap pak.WritePascalString(quest.Name); if (quest.Summary.Length > 255) pak.WritePascalString(quest.Summary.Substring(0,255)); else pak.WritePascalString(quest.Summary); if (offer) { pak.WriteShort((ushort)quest.Story.Length); pak.WriteStringBytes(quest.Story); } else { pak.WriteShort((ushort)quest.Conclusion.Length); pak.WriteStringBytes(quest.Conclusion); } pak.WriteShort(QuestID); pak.WriteByte((byte)quest.Goals.Count); // #goals count foreach (RewardQuest.QuestGoal goal in quest.Goals) { pak.WritePascalString(String.Format("{0}\r", goal.Description)); } pak.WriteByte((byte)quest.Level); pak.WriteByte((byte)quest.Rewards.MoneyPercent); pak.WriteByte((byte)quest.Rewards.ExperiencePercent(player)); pak.WriteByte((byte)quest.Rewards.BasicItems.Count); foreach (ItemTemplate reward in quest.Rewards.BasicItems) WriteTemplateData(pak, reward, 1); pak.WriteByte((byte)quest.Rewards.ChoiceOf); pak.WriteByte((byte)quest.Rewards.OptionalItems.Count); foreach (ItemTemplate reward in quest.Rewards.OptionalItems) WriteTemplateData(pak, reward, 1); SendTCP(pak); }
/// <summary> /// Send the quest dialogue for a classic quest to the player /// </summary> /// <param name="questType"></param> /// <param name="sentence"></param> /// <param name="player"></param> /// <param name="source"></param> /// <returns></returns> public static bool ProposeQuestToPlayer(Type questType, string sentence, GamePlayer player, GameNPC source) { if (CanGiveQuest(questType, player, source) > 0) { if (questType.IsSubclassOf(typeof(RewardQuest))) { RewardQuest rquest = null; foreach (Assembly asm in ScriptMgr.Scripts) { try { rquest = (RewardQuest)asm.CreateInstance(questType.FullName, false, BindingFlags.CreateInstance, null, new object[] { }, null, null); } catch (Exception e) { if (Log.IsErrorEnabled) { Log.Error("ProposeQuestToPlayer.RewardQuest", e); } } if (rquest != null) { break; } } player.Out.SendQuestOfferWindow(source, player, rquest); } else { player.Out.SendQuestSubscribeCommand(source, GetIDForQuestType(questType), sentence); } return(true); } return(false); }
public override void SendQuestRewardWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest) { SendQuestWindow(questNPC, player, quest, false); }
public override void SendQuestOfferWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest) { SendQuestWindow(questNPC, player, quest, true); }
public QuestRewards(RewardQuest quest) { m_quest = quest; m_moneyPercent = 0; m_experience = 0; m_basicItems = new List<ItemTemplate>(); m_optionalItems = new List<ItemTemplate>(); m_choiceOf = 0; m_chosenItems = new List<ItemTemplate>(); m_bountypoints = 0; m_realmpoints = 0; m_gold = 0; }
public enum GoalType { KillTask = 3, ScoutMission = 5 }; // These are just a hunch for now. /// <summary> /// Constructs a new QuestGoal. /// </summary> /// <param name="id">An id used to fidn this quest goal.</param> /// <param name="quest">The quest this goal is a part of.</param> /// <param name="description">The description of the goal.</param> /// <param name="type"></param> /// <param name="index"></param> /// <param name="target"></param> public QuestGoal(string id, RewardQuest quest, string description, GoalType type, int index, int target, ItemTemplate questItem) { m_id = id; m_quest = quest; m_description = description; m_goalType = type; m_index = index; m_current = 0; m_target = 0; Target = target; m_questItem = questItem; }
protected override void SendQuestWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest, bool offer) { using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.Dialog))) { ushort QuestID = QuestMgr.GetIDForQuestType(quest.GetType()); pak.WriteShort((offer) ? (byte)0x22 : (byte)0x21); // Dialog pak.WriteShort(QuestID); pak.WriteShort((ushort)questNPC.ObjectID); pak.WriteByte(0x00); // unknown pak.WriteByte(0x00); // unknown pak.WriteByte(0x00); // unknown pak.WriteByte(0x00); // unknown pak.WriteByte((offer) ? (byte)0x02 : (byte)0x01); // Accept/Decline or Finish/Not Yet pak.WriteByte(0x01); // Wrap pak.WritePascalString(quest.Name); String personalizedSummary = BehaviourUtils.GetPersonalizedMessage(quest.Summary, player); if (personalizedSummary.Length > 255) pak.WritePascalString(personalizedSummary.Substring(0, 255)); // Summary is max 255 bytes ! else pak.WritePascalString(personalizedSummary); if (offer) { String personalizedStory = BehaviourUtils.GetPersonalizedMessage(quest.Story, player); if (personalizedStory.Length > ServerProperties.Properties.MAX_REWARDQUEST_DESCRIPTION_LENGTH) { pak.WriteShort((ushort)ServerProperties.Properties.MAX_REWARDQUEST_DESCRIPTION_LENGTH); pak.WriteStringBytes(personalizedStory.Substring(0, ServerProperties.Properties.MAX_REWARDQUEST_DESCRIPTION_LENGTH)); } else { pak.WriteShort((ushort)personalizedStory.Length); pak.WriteStringBytes(personalizedStory); } } else { if (quest.Conclusion.Length > (ushort)ServerProperties.Properties.MAX_REWARDQUEST_DESCRIPTION_LENGTH) { pak.WriteShort((ushort)ServerProperties.Properties.MAX_REWARDQUEST_DESCRIPTION_LENGTH); pak.WriteStringBytes(quest.Conclusion.Substring(0, (ushort)ServerProperties.Properties.MAX_REWARDQUEST_DESCRIPTION_LENGTH)); } else { pak.WriteShort((ushort)quest.Conclusion.Length); pak.WriteStringBytes(quest.Conclusion); } } pak.WriteShort(QuestID); pak.WriteByte((byte)quest.Goals.Count); // #goals count foreach (RewardQuest.QuestGoal goal in quest.Goals) { pak.WritePascalString(String.Format("{0}\r", goal.Description)); } pak.WriteInt((uint)(quest.Rewards.Money)); // unknown, new in 1.94 pak.WriteByte((byte)quest.Rewards.ExperiencePercent(player)); pak.WriteByte((byte)quest.Rewards.BasicItems.Count); foreach (ItemTemplate reward in quest.Rewards.BasicItems) { WriteItemData(pak, GameInventoryItem.Create<ItemTemplate>(reward)); } pak.WriteByte((byte)quest.Rewards.ChoiceOf); pak.WriteByte((byte)quest.Rewards.OptionalItems.Count); foreach (ItemTemplate reward in quest.Rewards.OptionalItems) { WriteItemData(pak, GameInventoryItem.Create<ItemTemplate>(reward)); } SendTCP(pak); } }
protected virtual void SendQuestWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest, bool offer) { }
public virtual void SendQuestRewardWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest) { }
public void SendQuestOfferWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest) { }
public void SendQuestRewardWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest) { if (SendQuestRewardWindowMethod != null) SendQuestRewardWindowMethod(this, questNPC, player, quest); }