private void SetQuestStateByQuestID(int questID) { Quest quest = QuestEngine.Instance.GetQuest(_activeQuestID); if (quest != null) { if (quest.IsDone) { QuestState = winDialogStory.QuestStateType.Done; } else { QuestState = quest.IsActive ? QuestStateType.Active : QuestStateType.Normal; } return; } QuestState = winDialogStory.QuestStateType.None; }
/// <summary> /// Generate button based on the dialog option /// </summary> /// <param name="rect"></param> /// <param name="opt"></param> /// <returns></returns> private bool MakeButton(Rect rect, DialogOption opt) { bool result = false; List<string> urls = new List<string>(); switch (opt.Tipe) { case DialogEngine.DIALOG_OPTION_CHOICE: // Plain Choice { string content; urls = DecodeEmbeddedUrl(opt.Content, out content); float hintWidth = rect.height; result = GUI.Button(new Rect(rect.x + hintWidth, rect.y, rect.width - hintWidth * 2, rect.height), content); if (result) { foreach (string url in urls) { if (Application.isWebPlayer) { Application.ExternalEval("window.open('" + url + "', '_blank')"); } else { Application.OpenURL(url); } } } } break; case DialogEngine.DIALOG_OPTION_QUEST: // Quest button { // Get the quest Quest quest = QuestEngine.Instance.GetQuest(opt.Next); // Check if Quest required for this quest is valid bool isQuestValid = QuestEngine.Instance.IsQuestRequirementValid(opt.Next); // Check for date range bool isQuestDateTimeRangeValid = QuestEngine.Instance.IsQuestDateTimeRangeValid(opt.Next, PBGameMaster.GameTime); // Proceed only when requirements and date range valid if (quest != null && isQuestValid && isQuestDateTimeRangeValid) { float hintWidth = rect.height; GUI.Box(new Rect(rect.x, rect.y, hintWidth-2, rect.height), "", _questHintStyle); string desc; urls = DecodeEmbeddedUrl(quest.Description, out desc); // Render the button result = GUI.Button(new Rect(rect.x + hintWidth, rect.y, rect.width - hintWidth * 2, rect.height), desc, _questButtonStyle); if (result) { dlgIsQuest = true; _activeQuestID = quest.ID; QuestState = GetState(_activeQuestID); // Open the URLs if (result) { foreach (string url in urls) { Application.OpenURL(url); } } } } } break; } return result; }
private void DisplayQuestPassiveState(float gap, float buttonHeight) { int energy = InventoryEngine.Instance.GetEquipmentCount(Equipments.EquipmentType.Energy); int energyReq = QuestEngine.Instance.GetEnergyRequirement(_activeQuestID); float startOffset = WindowRect.height - gap - buttonHeight - Margin.height; if (energy < energyReq) { DisplayDescription(Lang.Localized("Untuk menjalankan quest ini kamu butuh Energi ") + energyReq.ToString(), gap, buttonHeight); if (GUI.Button(new Rect(Margin.x * 2, startOffset, WindowRect.width - Margin.width * 4, buttonHeight), Lang.Localized("OK"))) { dlgIsQuest = false; Close(); } } else { DisplayDescription(Lang.Localized("Mau terima Quest ini?"), gap, buttonHeight); if (GUI.Button(new Rect(Margin.x * 2, startOffset, WindowRect.width - Margin.width * 4, buttonHeight), Lang.Localized("No"))) { dlgIsQuest = false; } startOffset -= buttonHeight + gap; if (GUI.Button(new Rect(Margin.x * 2, startOffset, WindowRect.width - Margin.width * 4, buttonHeight), Lang.Localized("Yes"))) { QuestState = winDialogStory.QuestStateType.Normal; if (energyReq > 0) { InventoryEngine.Instance.SyncEquipment("energy", energy - energyReq); } } } }
private void DisplayQuestDoneState(float gap, float buttonHeight) { Quest quest = QuestEngine.Instance.GetQuest(_activeQuestID); if (quest == null) { return; } bool isUsingRedeems = false; //Dictionary<string, int> rewardEquipments, rewardInventories; QuestReward reward; if (rewardRedeems == null) { QuestEngine.Instance.GetRewards(_activeQuestID, out reward);//out rewardEquipments, out rewardInventories, out rewardRedeems); rewardRedeems = reward.AvatarRedeems; } if (rewardRedeems != null) { isUsingRedeems = rewardRedeems.Count > 0; } if (isUsingRedeems) { DisplayDescriptionWithRedeem(quest.DescriptionDone, rewardRedeems, gap, buttonHeight); } else { DisplayDescription(quest.DescriptionDone, gap, buttonHeight); } float startOfffest = WindowRect.height - gap - buttonHeight - Margin.height; if (GUI.Button(new Rect(Margin.x * 2, startOfffest, WindowRect.width - Margin.width * 4, buttonHeight), Lang.Localized("OK"))) { /*********************** * VERSION 1 (OBSOLETE) *********************** // Steal the item from the inventory string code; int count; QuestEngine.GetQuestItemRequirementsv1(_activeQuestID, out code, out count); for (int i = 0; i < count; i++) { InventoryEngine.StealItem(code); } */ //Dictionary<string, int> equipments, inventories; QuestEngine.Instance.GetQuestItemRequirements(_activeQuestID, out reward);//out equipments, out inventories); if (reward.InventoryCount() > 0) //inventories.Keys.Count > 0) { InventoryEngine.Instance.StealItems(reward.Inventories); } if (reward.EquipmentCount() > 0)//equipments.Keys.Count > 0) { InventoryEngine.Instance.StealEquipments(reward.Equipments); } // Disable the dialog dlgIsQuest = false; QuestEngine.Instance.SetQuestDone(_activeQuestID, true); // Reset the state QuestState = winDialogStory.QuestStateType.None; RewardPlayer(_activeQuestID); // Clos the dialog Close(); } }
private void DisplayQuestActiveState(float gap, float buttonHeight) { Quest quest = QuestEngine.Instance.GetQuest(_activeQuestID); if (quest == null) return; /// Deskripsi perintah untuk player untuk mencarikan sesuatu DisplayDescription(quest.DescriptionActive, gap, buttonHeight); float startOfffest = WindowRect.height - gap - buttonHeight - Margin.height; if (GUI.Button(new Rect(Margin.x * 2, startOfffest, WindowRect.width - Margin.width * 4, buttonHeight), Lang.Localized("Tidak"))) { Close(); } startOfffest -= buttonHeight + gap; if (GUI.Button(new Rect(Margin.x * 2, startOfffest, WindowRect.width - Margin.width * 4, buttonHeight), Lang.Localized("Ya"))) { QuestState = winDialogStory.QuestStateType.Done; } }
private void DisplayQuestNormalState(float gap, float buttonHeight) { Quest quest = QuestEngine.Instance.GetQuest(_activeQuestID); if (quest == null) return; string desc = quest.DescriptionNormal; DisplayDescription(desc, gap, buttonHeight); float startOffset = WindowRect.height - gap - buttonHeight - Margin.height; if (GUI.Button(new Rect(Margin.x * 2, startOffset, WindowRect.width - Margin.width * 4, buttonHeight), Lang.Localized("OK"))) { dlgIsQuest = false; QuestEngine.Instance.SetQuestActive(_activeQuestID, true); SetQuestStateByQuestID(_activeQuestID); if (quest.IsReturn == false) { Debug.Log("quest done"); RewardPlayer(_activeQuestID); QuestEngine.Instance.SetQuestDone(_activeQuestID, true); QuestState = QuestStateType.None; } Close(); } }