public QuestScript(string sScriptName, int nAct, string sScriptContents, QuestEntry quest, WvsGameClient client) : base(sScriptName, sScriptContents, client) { Context = new QuestScriptContext(this); Quest = quest; this.nAct = nAct; }
public static COutPacket UserQuestResult(QuestResultType op, QuestEntry pQuest, int nNpcTemplateId = 0, short usNextQuestID = 0) { var p = new COutPacket(SendOps.LP_UserQuestResult); p.Encode1(op); switch (op) { case QuestResultType.Failed_Equipped: case QuestResultType.Failed_Meso: case QuestResultType.Failed_OnlyItem: case QuestResultType.Failed_Unknown: return(p); case QuestResultType.Failed_Inventory: case QuestResultType.Reset_QuestTimer: case QuestResultType.Failed_TimeOver: p.Encode2(pQuest.nQuestID); return(p); case QuestResultType.Success: p.Encode2(pQuest.nQuestID); p.Encode4(nNpcTemplateId); p.Encode2(usNextQuestID); // 0 if no next break; } return(p); }
public static COutPacket QuestRecordMessage(QuestEntry pQuest) { var p = new COutPacket(SendOps.LP_Message); p.Encode1(MessageType.QuestRecordMessage); p.Encode2(pQuest.nQuestID); p.Encode1((byte)pQuest.nState); switch (pQuest.nState) { case QuestActType.NotStarted: p.Encode1(0); // nothing break; case QuestActType.QuestAccept: p.EncodeString(pQuest.sQRValue); // accept time, idc -> used for a few quests to determine when it can be completed //p.EncodeDateTime(DateTime.Now.AddMinutes(-3)); break; case QuestActType.QuestComplete: p.EncodeDateTime(pQuest.tCompleted); break; } return(p); }
private void PopulatePopup() { foreach (Quest q in _currentQuests) { QuestEntry newEntry = Instantiate(questPlaceHolder).GetComponentInChildren <QuestEntry>(); newEntry.quest = q; newEntry.gameObject.SetActive(true); newEntry.transform.SetParent(questContainer.transform); } }
public static QuestResult ActivateQuest(User user, QuestEntry quest, bool npcActivation = false, QuestResult res = null) { if (CanComplete(user, quest)) { return(CompleteQuest(user, quest, npcActivation, res)); } else { return(FailQuest(user, quest, npcActivation, res)); } }
public QuestScript GetQuestScript(int nQuestID, int nAct, QuestEntry pQuest, WvsGameClient c) { var sScriptName = $"{nQuestID}"; var script = GetScript(ScriptType.Quest, sScriptName, c); if (script.Length <= 0) { return(null); } return(new QuestScript(sScriptName, nAct, script, pQuest, c)); }
public static QuestResult FailQuest(User user, QuestEntry quest, bool npcActivation = false, QuestResult res = null) { if (res == null) { res = new QuestResult(); } res.QuestCompleted = false; if (npcActivation) { if (quest.GotoNpcChatpoint != -1) { res.GotoChatpoint = quest.GotoNpcChatpoint; } if (quest.HideReplyOnFail != false) { res.HideRepliesOnFail = quest.HideReplyOnFail; } if (res.SetChatpoint != -1) { res.SetChatpoint = quest.SetNpcChatpoint; } } if (quest.FailNpcChat != null) { if (!npcActivation) { byte[] ChatPacket = PacketBuilder.CreateChat(quest.FailNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); user.LoggedinClient.SendPacket(ChatPacket); } else { if (quest.FailNpcChat != null) { if (npcActivation) { if (quest.FailNpcChat != "") { res.NpcChat = quest.FailNpcChat; } } } } } return(res); }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch (version) { case 0: m_Points = reader.ReadInt(); m_Credits = reader.ReadInt(); m_Completed = reader.ReadInt(); m_Rank = reader.ReadInt(); m_DeltaRank = reader.ReadInt(); m_WhenRanked = reader.ReadDateTime(); int nquests = reader.ReadInt(); if (nquests > 0) { QuestList = new ArrayList(nquests); for (int i = 0; i < nquests; i++) { QuestEntry e = new QuestEntry(); e.Deserialize(reader); QuestList.Add(e); } } // get the owner of this in order to rebuild the rankings Mobile quester = reader.ReadMobile(); // rebuild the ranking list // if they have never made a kill, then dont rank if (quester != null && QuestsCompleted > 0) { XmlQuestLeaders.UpdateQuestRanking(quester, this); } break; } }
public static void GiveQuestPoints(Mobile from, IXmlQuest quest) { if (from == null || quest == null) { return; } // find the XmlQuestPoints attachment XmlQuestPoints p = (XmlQuestPoints)XmlAttach.FindAttachment(from, typeof(XmlQuestPoints)); // if doesnt have one yet, then add it if (p == null) { p = new XmlQuestPoints(); XmlAttach.AttachTo(from, p); } // if you wanted to scale the points given based on party size, karma, fame, etc. // this would be the place to do it int points = quest.Difficulty; // update the questpoints attachment information p.Points += points; p.Credits += points; p.QuestsCompleted++; if (from != null) { from.SendMessage("You have received {0} quest points!", points); } // add the completed quest to the quest list QuestEntry.AddQuestEntry(from, quest); // update the overall ranking list XmlQuestLeaders.UpdateQuestRanking(from, p); }
public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); switch(version) { case 0: m_Points = reader.ReadInt(); m_Credits = reader.ReadInt(); m_Completed = reader.ReadInt(); m_Rank = reader.ReadInt(); m_DeltaRank = reader.ReadInt(); m_WhenRanked = reader.ReadDateTime(); int nquests = reader.ReadInt(); if(nquests > 0) { QuestList = new ArrayList(nquests); for(int i = 0; i< nquests;i++) { QuestEntry e = new QuestEntry(); e.Deserialize(reader); QuestList.Add(e); } } // get the owner of this in order to rebuild the rankings Mobile quester = reader.ReadMobile(); // rebuild the ranking list // if they have never made a kill, then dont rank if(quester != null && QuestsCompleted > 0) { XmlQuestLeaders.UpdateQuestRanking(quester, this); } break; } }
public void Load() { List <int> completedQuestIDs; using (Stream stream = File.Open("savedQuestData.dat", FileMode.Open)) { var bformatter = new BinaryFormatter(); completedQuestIDs = (List <int>)bformatter.Deserialize(stream); } QuestEntry tempQuestEntry = new QuestEntry(); // used to apply quest upgrades tempQuestEntry.player = FindObjectOfType <Player>(); tempQuestEntry.BM = FindObjectOfType <GameManager>().BM; // fill quest GUI addQuest(); addQuest(); addQuest(); // complete each saved quest foreach (int ID in completedQuestIDs) { Quest quest = new Quest(); // find quest by ID foreach (Quest uncompletedQuest in quests) { if (uncompletedQuest.ID == ID) { quest = uncompletedQuest; } } //quests.Remove(quest); // remove quest from list // apply quest upgrade if not gas or health if (quest.upgradeReward.Length > 0 && quest.upgradeReward != "gas" && quest.upgradeReward != "health") { tempQuestEntry.upgradeReward = quest.upgradeReward; tempQuestEntry.UpgradeReward(); } // remove quest from UI if it is present if (questEntry1.quest == quest) { questEntry1.clearRewards(); // remove rewards (should be saved by other means) if (questEntry1.questType == "boss") { Destroy(questEntry1.boss); } questEntry1.questCompleted(); // mark as complete addQuest(); // add new quest to GUI } else if (questEntry2.quest == quest) { questEntry2.clearRewards(); if (questEntry2.questType == "boss") { Destroy(questEntry2.boss); } questEntry2.questCompleted(); addQuest(); // add new quest to GUI } else if (questEntry3.quest == quest) { questEntry3.clearRewards(); if (questEntry3.questType == "boss") { Destroy(questEntry3.boss); } questEntry3.questCompleted(); addQuest(); // add new quest to GUI } } }
public static void Start() { ConsoleUtils.Write(ConsoleMsgType.Status, "Loading Quest Database...\n"); DB = new Dictionary <int, QuestEntry>(); Database db = new Database(Server.GameDbConString); StringBuilder query = new StringBuilder( "SELECT `id`,`min_level`,`max_level`," + "`min_job_level`,`max_job_level`," + "`limit_races`,`limit_classes`,`limit_depth`," + "`repeatable`," + "`exp`,`jp`,`holic_point`,`gold`," + "`drop_group`,`type`,"); for (int i = 0; i < Quest.MaxObjectives; i++) { query.Append("`objective" + i + "`,"); } query.Append("`default_reward_id`,`default_reward_level`,`default_reward_quantity`,"); for (int i = 1; i < Quest.MaxRewards; i++) { query.Append("`optional_reward_id" + i + "`,`optional_reward_level" + i + "`,`optional_reward_quantity" + i + "`,"); } query.Remove(query.Length - 1, 1); // removes last comma query.Append(" FROM `quest_db`"); MySqlDataReader reader = db.ReaderQuery(query.ToString(), null, null); while (reader.Read()) { QuestEntry quest = new QuestEntry(); quest.Objectives = new int[Quest.MaxObjectives]; quest.Rewards = new int[Quest.MaxRewards]; quest.RewardsCount = new int[Quest.MaxRewards]; quest.RewardsLevel = new sbyte[Quest.MaxRewards]; int id = (int)reader["id"]; quest.MinLevel = (int)reader["min_level"]; quest.MaxLevel = (int)reader["max_level"]; quest.MinJobLevel = (int)reader["min_job_level"]; quest.MaxJobLevel = (int)reader["max_job_level"]; quest.LimitRaces = (Db.Races)(sbyte) reader["limit_races"]; quest.LimitClasses = (Db.Classes)(sbyte) reader["limit_classes"]; quest.LimitDepth = (Db.JobDepth)(sbyte) reader["limit_depth"]; quest.Repeatable = (bool)reader["repeatable"]; quest.Exp = (int)reader["exp"]; quest.JP = (int)reader["jp"]; quest.HolicPoint = (int)reader["holic_point"]; quest.Gold = (int)reader["gold"]; quest.DropGroup = (int)reader["drop_group"]; quest.Type = (Quest.Type)(int) reader["type"]; for (int i = 0; i < Quest.MaxObjectives; i++) { quest.Objectives[i] = (int)reader["objective" + i]; } quest.Rewards[0] = (int)reader["default_reward_id"]; quest.RewardsLevel[0] = (sbyte)reader["default_reward_level"]; quest.RewardsCount[0] = (int)reader["default_reward_quantity"]; for (int i = 1; i < Quest.MaxRewards; i++) { quest.Rewards[i] = (int)reader["optional_reward_id" + i]; quest.RewardsLevel[i] = (sbyte)reader["optional_reward_level" + i]; quest.RewardsCount[i] = (int)reader["optional_reward_quantity" + i]; } DB.Add(id, quest); } ConsoleUtils.Write(ConsoleMsgType.Status, "Quest Database Loaded.\n"); }
public static void AddQuestEntry(QuestEntry quest) { questList.Add(quest); }
public static QuestResult CompleteQuest(User user, QuestEntry quest, bool npcActivation = false, QuestResult res = null) { if (res == null) { res = new QuestResult(); } // Take Items foreach (QuestItemInfo itemInfo in quest.ItemsRequired) { InventoryItem itm = user.Inventory.GetItemByItemId(itemInfo.ItemId); for (int i = 0; i < itemInfo.Quantity; i++) { user.Inventory.Remove(itm.ItemInstances[0]); } } // Take Money user.TakeMoney(quest.MoneyCost); // Give money user.AddMoney(quest.MoneyEarned); // Give items foreach (QuestItemInfo itemInfo in quest.ItemsEarned) { for (int i = 0; i < itemInfo.Quantity; i++) { ItemInstance itm = new ItemInstance(itemInfo.ItemId); Item.ItemInformation itemInformation = itm.GetItemInfo(); if (itemInformation.Type == "CONCEPTUAL") { Item.ConsumeItem(user, itemInformation); } else { user.Inventory.AddIgnoringFull(itm); } } } if (quest.WarpX != 0 && quest.WarpY != 0) { user.Teleport(quest.WarpX, quest.WarpY); } // Give quest points user.QuestPoints += quest.QuestPointsEarned; res.QuestCompleted = true; if (npcActivation) { if (quest.SuccessNpcChat != null && quest.SuccessNpcChat != "") { res.NpcChat = quest.SuccessNpcChat; } if (quest.SetNpcChatpoint != -1) { res.SetChatpoint = quest.SetNpcChatpoint; } if (quest.GotoNpcChatpoint != -1) { res.GotoChatpoint = quest.GotoNpcChatpoint; } } if (quest.Tracked) { user.Quests.TrackQuest(quest.Id); } if (quest.ChainedQuestId != 0) { res = ActivateQuest(user, Quest.GetQuestById(quest.ChainedQuestId), npcActivation, res); } if (quest.SuccessMessage != null) { byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); user.LoggedinClient.SendPacket(ChatPacket); } if (quest.SuccessNpcChat != null) { if (!npcActivation) { byte[] ChatPacket = PacketBuilder.CreateChat(quest.SuccessNpcChat, PacketBuilder.CHAT_BOTTOM_RIGHT); user.LoggedinClient.SendPacket(ChatPacket); } } // Check if award unlocked int questPointsPercent = Convert.ToInt32(Math.Floor(((decimal)user.QuestPoints / (decimal)GetTotalQuestPoints()) * (decimal)100.0)); if (questPointsPercent >= 25) { user.Awards.AddAward(Award.GetAwardById(1)); // 25% Quest Completion Award. } if (questPointsPercent >= 50) { user.Awards.AddAward(Award.GetAwardById(2)); // 50% Quest Completion Award. } if (questPointsPercent >= 75) { user.Awards.AddAward(Award.GetAwardById(3)); // 75% Quest Completion Award. } if (questPointsPercent >= 100) { user.Awards.AddAward(Award.GetAwardById(4)); // 100% Quest Completion Award. } // Is cloud isles quest? if (quest.Id == 1373) { byte[] swfLoadPacket = PacketBuilder.CreateSwfModulePacket("ballooncutscene", PacketBuilder.PACKET_SWF_CUTSCENE); user.LoggedinClient.SendPacket(swfLoadPacket); } return(res); }
public static bool CanComplete(User user, QuestEntry quest) { // Has completed other required quests? foreach (int questId in quest.RequiresQuestIdCompleted) { if (user.Quests.GetTrackedQuestAmount(questId) < 1) { return(false); } } // Has NOT competed other MUST NOT BE required quests foreach (int questId in quest.RequiresQuestIdNotCompleted) { if (user.Quests.GetTrackedQuestAmount(questId) > 1) { return(false); } } if (quest.Tracked) { // Has allready tracked this quest? if (user.Quests.GetTrackedQuestAmount(quest.Id) >= quest.MaxRepeats) { return(false); } } // Check if user has award unlocked if (quest.AwardRequired != 0) { if (!user.Awards.HasAward(Award.GetAwardById(quest.AwardRequired))) { return(false); } } // Check if i have required items foreach (QuestItemInfo itemInfo in quest.ItemsRequired) { bool hasThisItem = false; InventoryItem[] items = user.Inventory.GetItemList(); foreach (InventoryItem item in items) { if (item.ItemId == itemInfo.ItemId && item.ItemInstances.Length >= itemInfo.Quantity) { hasThisItem = true; break; } } if (!hasThisItem) { return(false); } } // Have enough money? if (user.Money < quest.MoneyCost) { return(false); } return(true); }
/* * =========================================================================================================== * QUEST'S STUFF * =========================================================================================================== */ /// <summary> /// Creates a new quest and adds it to quests list /// </summary> /// <param name="stQuestName"> A string with this quest's name</param> public void CreateNewQuest(string stQuestName) { QuestEntry entry = new QuestEntry(); entry.stName = stQuestName; entry.lstTasks = new List<TaskEntry>(); // Adds this quest to the quests list lstQuests.Add(entry); }