Beispiel #1
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)
            {
                Id           = id;
                _quest       = quest;
                _description = description;
                Type         = type;
                _index       = index;
                _current     = 0;
                _target      = 0;
                Target       = target;
                _questItem   = questItem;
            }
Beispiel #2
0
 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;
 }
Beispiel #3
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);
		}
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
		public override void SendQuestRewardWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest)
		{
			SendQuestWindow(questNPC, player, quest, false);
		}
Beispiel #6
0
		public override void SendQuestOfferWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest)
		{
			SendQuestWindow(questNPC, player, quest, true);
		}
Beispiel #7
0
 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;
 }
Beispiel #8
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;
            }
Beispiel #9
0
		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) { }
Beispiel #13
0
		public void SendQuestRewardWindow(GameNPC questNPC, GamePlayer player, RewardQuest quest)
		{
			if (SendQuestRewardWindowMethod != null) SendQuestRewardWindowMethod(this, questNPC, player, quest);
		}