Beispiel #1
0
        public override void OnPlayerEnter(GamePlayer player)
        {
            bool showText = false;

            if (m_dataQuest != null)
            {
                ChatUtil.SendDebugMessage(player, "Entered QuestSearchArea for DataQuest ID:" + m_dataQuest.ID + ", Step " + Step);

                // first check active data quests
                foreach (AbstractQuest quest in player.QuestList)
                {
                    if (quest is DataQuest)
                    {
                        if ((quest as DataQuest).ID == m_dataQuest.ID && quest.Step == Step && m_popupText != string.Empty)
                        {
                            showText = true;
                        }
                    }
                }

                // next check for searches that start a dataquest
                if (Step == 0 && DataQuest.CheckQuestQualification(player))
                {
                    showText = true;
                }
            }
            else
            {
                ChatUtil.SendDebugMessage(player, "Entered QuestSearchArea for " + m_questType.Name + ", Step " + Step);

                // popup a dialog telling the player they should search here
                if (player.IsDoingQuest(m_questType) != null && player.IsDoingQuest(m_questType).Step == m_validStep && PopupText != string.Empty)
                {
                    showText = true;
                }
            }

            if (showText)
            {
                player.Out.SendDialogBox(eDialogCode.SimpleWarning, 0, 0, 0, 0, eDialogType.Ok, true, m_popupText);
            }
        }
Beispiel #2
0
        protected void CreateArea(DataQuest dataQuest, int validStep, int searchSeconds, string text, ushort regionId)
        {
            m_regionId      = regionId;
            m_questType     = typeof(DataQuest);
            m_dataQuest     = dataQuest;
            m_validStep     = validStep;
            m_searchSeconds = searchSeconds;
            m_popupText     = text;
            DisplayMessage  = false;

            if (WorldMgr.GetRegion(regionId) != null)
            {
                WorldMgr.GetRegion(regionId).AddArea(this);
            }
            else
            {
                string errorText = "Could not find region " + regionId + " when trying to create QuestSearchArea! ";
                dataQuest.LastErrorText += errorText;
                log.Error(errorText);
            }
        }
Beispiel #3
0
        const ushort MAX_STORY_LENGTH = 1000;   // Via trial and error, 1.108 client.
                                                // Often will cut off text around 990 but longer strings do not result in any errors. -Tolakram

        protected override void SendQuestWindow(GameNPC questNPC, GamePlayer player, DataQuest quest, bool offer)
        {
            using (GSTCPPacketOut pak = new GSTCPPacketOut(GetPacketCode(eServerPackets.Dialog)))
            {
                ushort QuestID = quest.ClientQuestID;
                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.Description, player);
                if (personalizedSummary.Length > 255)
                {
                    pak.WritePascalString(personalizedSummary.Substring(0, 255));                     // Summary is max 255 bytes or client will crash !
                }
                else
                {
                    pak.WritePascalString(personalizedSummary);
                }

                if (offer)
                {
                    String personalizedStory = BehaviourUtils.GetPersonalizedMessage(quest.Story, player);

                    if (personalizedStory.Length > MAX_STORY_LENGTH)
                    {
                        pak.WriteShort(MAX_STORY_LENGTH);
                        pak.WriteStringBytes(personalizedStory.Substring(0, MAX_STORY_LENGTH));
                    }
                    else
                    {
                        pak.WriteShort((ushort)personalizedStory.Length);
                        pak.WriteStringBytes(personalizedStory);
                    }
                }
                else
                {
                    if (quest.FinishText.Length > MAX_STORY_LENGTH)
                    {
                        pak.WriteShort(MAX_STORY_LENGTH);
                        pak.WriteStringBytes(quest.FinishText.Substring(0, MAX_STORY_LENGTH));
                    }
                    else
                    {
                        pak.WriteShort((ushort)quest.FinishText.Length);
                        pak.WriteStringBytes(quest.FinishText);
                    }
                }

                pak.WriteShort(QuestID);
                pak.WriteByte((byte)quest.StepTexts.Count);                 // #goals count
                foreach (string text in quest.StepTexts)
                {
                    string t = text;

                    // Need to protect for any text length > 255.  It does not crash client but corrupts RewardQuest display -Tolakram
                    if (text.Length > 253)
                    {
                        t = text.Substring(0, 253);
                    }

                    pak.WritePascalString(String.Format("{0}\r", t));
                }
                pak.WriteInt((uint)(0));
                pak.WriteByte((byte)0);
                pak.WriteByte((byte)quest.FinalRewards.Count);
                foreach (ItemTemplate reward in quest.FinalRewards)
                {
                    WriteItemData(pak, GameInventoryItem.Create <ItemTemplate>(reward));
                }
                pak.WriteByte((byte)quest.NumOptionalRewardsChoice);
                pak.WriteByte((byte)quest.OptionalRewards.Count);
                foreach (ItemTemplate reward in quest.OptionalRewards)
                {
                    WriteItemData(pak, GameInventoryItem.Create <ItemTemplate>(reward));
                }
                SendTCP(pak);
            }
        }
Beispiel #4
0
 public override void SendQuestRewardWindow(GameNPC questNPC, GamePlayer player, DataQuest quest)
 {
     SendQuestWindow(questNPC, player, quest, false);
 }
Beispiel #5
0
 public override void SendQuestOfferWindow(GameNPC questNPC, GamePlayer player, DataQuest quest)
 {
     SendQuestWindow(questNPC, player, quest, true);
 }
Beispiel #6
0
 public void SendQuestRewardWindow(GameNPC questNPC, GamePlayer player, DataQuest quest)
 {
 }
Beispiel #7
0
 public void SendQuestOfferWindow(GameNPC questNPC, GamePlayer player, DataQuest quest)
 {
 }
Beispiel #8
0
        public override void Initialize()
        {
            base.Initialize();
            master_quest = new MasterQuest();
            master_quest.Load(m_taMasterQuest);
            master_item = new MasterItem();
            master_item.Load(m_taMasterItem);
            master_chara = new MasterChara();
            master_chara.Load(m_taMasterChara);

            data_quest = new DataQuest();
            data_quest.SetSaveFilename("data/data_quest");
            if (data_quest.Load() == false)
            {
                Debug.Log("loaderror.data_quest");
            }

            data_item_consume = new DataItem();
            data_item_consume.SetSaveFilename("data/data_item_consume");
            if (data_item_consume.Load() == false)
            {
                DataItemParam item = new DataItemParam
                {
                    item_id = 1
                };
                data_item_consume.AddItem(item);
                DataItemParam item2 = new DataItemParam
                {
                    item_id = 1
                };
                data_item_consume.AddItem(item2);
                Debug.Log("loaderror.data_item_consume");
            }
            data_item_equip = new DataItem();
            data_item_equip.SetSaveFilename("data/data_item_equip");
            if (data_item_equip.Load() == false)
            {
                Debug.Log("loaderror.data_item_equip");
            }

            data_chara = new DataChara();
            data_chara.SetSaveFilename("data/data_chara");
            if (data_chara.Load() == false)
            {
                DataCharaParam slime = new DataCharaParam
                {
                    chara_id = 1,
                    position = 1
                };
                slime.Build(1, master_chara.list.Find(p => p.chara_id == 1));
                data_chara.list.Add(slime);
                DataCharaParam fairy = new DataCharaParam
                {
                    chara_id = 3,
                    position = 2
                };
                fairy.Build(1, master_chara.list.Find(p => p.chara_id == 3));
                data_chara.list.Add(fairy);
            }

            gold = 100;

            Initialized = true;
        }
Beispiel #9
0
 /// <summary>
 /// Search area for data quests.  Z is not checked, user must specify radius and time in data quest
 /// </summary>
 /// <param name="dataQuest"></param>
 /// <param name="validStep"></param>
 /// <param name="text"></param>
 /// <param name="regionId"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="radius"></param>
 /// <param name="searchSeconds"></param>
 public QuestSearchArea(DataQuest dataQuest, int validStep, string text, ushort regionId, int x, int y, int radius = DEFAULT_SEARCH_RADIUS, int searchSeconds = DEFAULT_SEARCH_SECONDS)
     : base(text, x, y, 0, radius)
 {
     CreateArea(dataQuest, validStep, searchSeconds, text, regionId);
 }
Beispiel #10
0
 /// <summary>
 /// Search area for data quests.  Z is not checked, user must specify radius and time in data quest
 /// </summary>
 /// <param name="dataQuest"></param>
 /// <param name="validStep"></param>
 /// <param name="text"></param>
 /// <param name="regionId"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="radius"></param>
 /// <param name="searchSeconds"></param>
 public QuestSearchArea(DataQuest dataQuest, int validStep, string text, ushort regionId, int x, int y, int radius = DefaultSearchRadius, int searchSeconds = DefaultSearchSeconds)
     : base(text, x, y, 0, radius)
 {
     CreateArea(dataQuest, validStep, searchSeconds, text, regionId);
 }