static ItemCollection merchantItems; // Temporary #endregion #region Constructors public DaggerfallGuildServicePopupWindow(IUserInterfaceManager uiManager, StaticNPC npc, FactionFile.GuildGroups guildGroup, int buildingFactionId) : base(uiManager) { playerEntity = GameManager.Instance.PlayerEntity; guildManager = GameManager.Instance.GuildManager; serviceNPC = npc; npcService = (GuildNpcServices)npc.Data.factionID; service = Services.GetService(npcService); Debug.Log("NPC offers guild service: " + service.ToString()); this.guildGroup = guildGroup; this.buildingFactionId = buildingFactionId; guild = guildManager.GetGuild(guildGroup, buildingFactionId); // Clear background ParentPanel.BackgroundColor = Color.clear; }
public override bool CanAccessService(GuildServices service) { switch (service) { case GuildServices.Training: return(IsMember()); case GuildServices.Quests: return(true); case GuildServices.SellMagicItems: return(rank >= 2); case GuildServices.Spymaster: return(rank >= 4); default: return(false); } }
protected override void Setup() { base.Setup(); // We only want to add Cure Poison to merchants with Cure Disease service if (currentService.ToString() != "CureDisease") { return; } Debug.Log("GuildsCurePoison: Attempting to add buttons"); // Get the panel just added - this is our service selection popup Panel mainPanel = (Panel)NativePanel.Components[NativePanel.Components.Count() - 1]; // Now grab the 'Cure Disease' button Button cureButton = (Button)mainPanel.Components[mainPanel.Components.Count() - 2]; // Halve the width of the Cure Disease button so we can slot our Cure Poison one in to the right cureButton.Size = new Vector2(cureButton.Size.x / 2, cureButton.Size.y); Rect serviceButtonRect = new Rect( cureButton.Position.x + cureButton.Size.x, cureButton.Position.y, cureButton.Size.x, cureButton.Size.y ); Button serviceButton = new Button(); TextLabel serviceLabel = new TextLabel(); GuildServices service = Services.GetService((GuildNpcServices)FactionFile.FactionIDs.Temple_Healers); // Service button serviceLabel.Position = new Vector2(0, 1); serviceLabel.ShadowPosition = Vector2.zero; serviceLabel.HorizontalAlignment = HorizontalAlignment.Center; serviceLabel.Text = "Cure Poison"; Debug.Log(string.Format("GuildsCurePoison: New button text is {0}", serviceLabel.Text)); serviceButton = DaggerfallUI.AddButton(serviceButtonRect, mainPanel); serviceButton.Components.Add(serviceLabel); serviceButton.OnMouseClick += CureDiseaseServiceButton_OnMouseClick; serviceButton.OnKeyboardEvent += ServiceButton_OnKeyboardEvent; }
public static void ShadowAppraiserClicked(RaycastHit hit) { FactionFile.FactionData factionData; FactionFile.GuildGroups guildGroup; npc = QuestMachine.Instance.LastNPCClicked; GuildServices service = Services.GetService((GuildNpcServices)npc.Data.factionID); if (QuestMachine.Instance.HasFactionListener(npc.Data.factionID)) { return; } if (GameManager.Instance.PlayerEntity.FactionData.GetFactionData(npc.Data.factionID, out factionData)) { if (Services.HasGuildService(npc.Data.factionID) && npc.Data.factionID == 805) { (DaggerfallUI.Instance.UserInterfaceManager.TopWindow as DaggerfallGuildServicePopupWindow).CloseWindow(); guildGroup = GameManager.Instance.GuildManager.GetGuildGroup(805); FenceWindow fenceWindow = new FenceWindow(DaggerfallUI.UIManager, npc, guildGroup); DaggerfallUI.UIManager.PushWindow(fenceWindow); } } }
public override bool CanAccessService(GuildServices service) { switch (service) { case GuildServices.Training: return(IsMember()); case GuildServices.Quests: return(true); case GuildServices.Identify: return(true); case GuildServices.BuySpellsMages: return(true); case GuildServices.MakeSpells: return(IsMember()); case GuildServices.BuyMagicItems: return(rank >= 3); case GuildServices.MakeMagicItems: return(rank >= 5); case GuildServices.Teleport: return(rank >= 8); case GuildServices.DaedraSummoning: return(rank >= 6); case GuildServices.BuySoulgems: return(rank >= 4); default: return(false); } }
public override bool CanAccessService(GuildServices service) { switch (service) { case GuildServices.Training: return(IsMember()); case GuildServices.Quests: return(true); case GuildServices.Identify: return(true); case GuildServices.BuyPotions: return(rank >= 1); case GuildServices.MakePotions: return(rank >= 3); case GuildServices.DaedraSummoning: return(rank >= 7); case GuildServices.MakeMagicItems: return(rank >= 6); } if ((int)service == LocatorServiceId) { return(true); } if ((int)service == RepairServiceId) { return(rank >= 2); } return(false); }
static ItemCollection merchantItems; // Temporary #endregion #region Constructors public DaggerfallGuildServicePopupWindow(IUserInterfaceManager uiManager, StaticNPC npc, FactionFile.GuildGroups guild, GuildServices service) : base(uiManager) { serviceNPC = npc; this.guild = guild; this.service = service; playerEntity = GameManager.Instance.PlayerEntity; // Clear background ParentPanel.BackgroundColor = Color.clear; }
public static DaggerfallShortcut.Buttons GetServiceShortcutButton(GuildServices service) { switch (service) { case GuildServices.Training: return(DaggerfallShortcut.Buttons.GuildsTraining); case GuildServices.Quests: return(DaggerfallShortcut.Buttons.GuildsGetQuest); case GuildServices.Repair: return(DaggerfallShortcut.Buttons.GuildsRepair); case GuildServices.Identify: return(DaggerfallShortcut.Buttons.GuildsIdentify); case GuildServices.Donate: return(DaggerfallShortcut.Buttons.GuildsDonate); case GuildServices.CureDisease: return(DaggerfallShortcut.Buttons.GuildsCure); case GuildServices.BuyPotions: return(DaggerfallShortcut.Buttons.GuildsBuyPotions); case GuildServices.MakePotions: return(DaggerfallShortcut.Buttons.GuildsMakePotions); case GuildServices.BuySpells: case GuildServices.BuySpellsMages: return(DaggerfallShortcut.Buttons.GuildsBuySpells); case GuildServices.MakeSpells: return(DaggerfallShortcut.Buttons.GuildsMakeSpells); case GuildServices.BuyMagicItems: return(DaggerfallShortcut.Buttons.GuildsBuyMagicItems); case GuildServices.MakeMagicItems: return(DaggerfallShortcut.Buttons.GuildsMakeMagicItems); case GuildServices.SellMagicItems: return(DaggerfallShortcut.Buttons.GuildsSellMagicItems); case GuildServices.Teleport: return(DaggerfallShortcut.Buttons.GuildsTeleport); case GuildServices.DaedraSummoning: return(DaggerfallShortcut.Buttons.GuildsDaedraSummon); case GuildServices.Spymaster: return(DaggerfallShortcut.Buttons.GuildsSpymaster); case GuildServices.BuySoulgems: return(DaggerfallShortcut.Buttons.GuildsBuySoulgems); case GuildServices.ReceiveArmor: return(DaggerfallShortcut.Buttons.GuildsReceiveArmor); case GuildServices.ReceiveHouse: return(DaggerfallShortcut.Buttons.GuildsReceiveHouse); default: DaggerfallShortcut.Buttons serviceButton; if (customNpcServiceButtons.TryGetValue((int)service, out serviceButton)) { return(serviceButton); } else { return(DaggerfallShortcut.Buttons.None); } } }
public static string GetServiceLabelText(GuildServices service) { switch (service) { case GuildServices.Training: return(HardStrings.serviceTraining); case GuildServices.Quests: return(HardStrings.serviceQuests); case GuildServices.Repair: return(HardStrings.serviceRepairs); case GuildServices.Identify: return(HardStrings.serviceIdentify); case GuildServices.Donate: return(HardStrings.serviceDonate); case GuildServices.CureDisease: return(HardStrings.serviceCure); case GuildServices.BuyPotions: return(HardStrings.serviceBuyPotions); case GuildServices.MakePotions: return(HardStrings.serviceMakePotions); case GuildServices.BuySpells: case GuildServices.BuySpellsMages: return(HardStrings.serviceBuySpells); case GuildServices.MakeSpells: return(HardStrings.serviceMakeSpells); case GuildServices.BuyMagicItems: return(HardStrings.serviceBuyMagicItems); case GuildServices.MakeMagicItems: return(HardStrings.serviceMakeMagicItems); case GuildServices.SellMagicItems: return(HardStrings.serviceSellMagicItems); case GuildServices.Teleport: return(HardStrings.serviceTeleport); case GuildServices.DaedraSummoning: return(HardStrings.serviceDaedraSummon); case GuildServices.Spymaster: return(HardStrings.serviceSpymaster); case GuildServices.BuySoulgems: return(HardStrings.serviceBuySoulgems); case GuildServices.ReceiveArmor: return(HardStrings.serviceReceiveArmor); case GuildServices.ReceiveHouse: return(HardStrings.serviceReceiveHouse); default: string serviceName; if (customNpcServiceNames.TryGetValue((int)service, out serviceName)) { return(serviceName); } else { return("?"); } } }
// Player has clicked on a static NPC void StaticNPCClick(StaticNPC npc) { // Do nothing if no NPC passed or fade in progress // Quest machine does not tick while fading (to prevent things happening while screen is black) // But this can result in player clicking a quest NPC before quest state ticks after load and breaking quest if (!npc || DaggerfallUI.Instance.FadeInProgress) { return; } // Store the NPC just clicked in quest engine QuestMachine.Instance.LastNPCClicked = npc; // Check if this NPC is a quest giver and show temp guild quest popup // This will be changed later when temp guild system replaced with real thing if (QuestorCheck(npc)) { return; } // Handle quest NPC click and exit if linked to a Person resource QuestResourceBehaviour questResourceBehaviour = npc.gameObject.GetComponent <QuestResourceBehaviour>(); if (questResourceBehaviour) { if (TriggerQuestResourceBehaviourClick(questResourceBehaviour)) { return; } } // Do nothing further if a quest is actively listening on this individual NPC // This NPC not reserved as a Person resource but has a WhenNpcIsAvailable action listening on it // This effectively shuts down several named NPCs during main quest, but not trivial to otherwise determine appropriate access // TODO: Try to find a good solution for releasing listeners when the owning action is disabled if (QuestMachine.Instance.HasFactionListener(npc.Data.factionID)) { return; } // Get faction data. FactionFile.FactionData factionData; if (playerEnterExit.IsPlayerInsideBuilding && GameManager.Instance.PlayerEntity.FactionData.GetFactionData(npc.Data.factionID, out factionData)) { UserInterfaceManager uiManager = DaggerfallUI.Instance.UserInterfaceManager; Debug.LogFormat("faction id: {0}, social group: {1}, guild: {2}", npc.Data.factionID, (FactionFile.SocialGroups)factionData.sgroup, (FactionFile.GuildGroups)factionData.ggroup); // Check if the NPC offers a guild service. if (Enum.IsDefined(typeof(GuildServices), npc.Data.factionID)) { FactionFile.GuildGroups guild = (FactionFile.GuildGroups)factionData.ggroup; GuildServices service = (GuildServices)npc.Data.factionID; Debug.Log("NPC offers guild service: " + service.ToString()); uiManager.PushWindow(new DaggerfallGuildServicePopupWindow(uiManager, npc, guild, service)); } // Check if this NPC is a merchant. else if ((FactionFile.SocialGroups)factionData.sgroup == FactionFile.SocialGroups.Merchants) { // Shop? if (RMBLayout.IsShop(playerEnterExit.BuildingDiscoveryData.buildingType)) { if (RMBLayout.IsRepairShop(playerEnterExit.BuildingDiscoveryData.buildingType)) { uiManager.PushWindow(new DaggerfallMerchantRepairPopupWindow(uiManager, npc)); } else { uiManager.PushWindow(new DaggerfallMerchantServicePopupWindow(uiManager, npc, DaggerfallMerchantServicePopupWindow.Services.Sell)); } } // Bank? else if (playerEnterExit.BuildingDiscoveryData.buildingType == DFLocation.BuildingTypes.Bank) { uiManager.PushWindow(new DaggerfallMerchantServicePopupWindow(uiManager, npc, DaggerfallMerchantServicePopupWindow.Services.Banking)); } // Tavern? else if (playerEnterExit.BuildingDiscoveryData.buildingType == DFLocation.BuildingTypes.Tavern) { // for now only talk to all npc in taverns - TODO: add tavern option in here GameManager.Instance.TalkManager.TalkToStaticNPC(npc); } } // TODO - more checks for npc social types? else // if no special handling had to be done for npc with social group of type merchant: talk to the static npc { GameManager.Instance.TalkManager.TalkToStaticNPC(npc); } } else // if no special handling had to be done (all remaining npcs of the remaining social groups not handled explicitely above): default is talk to the static npc { // with one exception: guards if (npc.Data.billboardArchiveIndex == 183 && npc.Data.billboardRecordIndex == 3) // detect if clicked guard (comment Nystul: didn't find a better mechanism than billboard texture check) { return; // if guard was clicked don't open talk window } // otherwise open talk window GameManager.Instance.TalkManager.TalkToStaticNPC(npc); } }
public static string GetServiceLabelText(GuildServices service) { switch (service) { case GuildServices.Training: return(TextManager.Instance.GetLocalizedText("serviceTraining")); case GuildServices.Quests: return(TextManager.Instance.GetLocalizedText("serviceQuests")); case GuildServices.Repair: return(TextManager.Instance.GetLocalizedText("serviceRepairs")); case GuildServices.Identify: return(TextManager.Instance.GetLocalizedText("serviceIdentify")); case GuildServices.Donate: return(TextManager.Instance.GetLocalizedText("serviceDonate")); case GuildServices.CureDisease: return(TextManager.Instance.GetLocalizedText("serviceCure")); case GuildServices.BuyPotions: return(TextManager.Instance.GetLocalizedText("serviceBuyPotions")); case GuildServices.MakePotions: return(TextManager.Instance.GetLocalizedText("serviceMakePotions")); case GuildServices.BuySpells: case GuildServices.BuySpellsMages: return(TextManager.Instance.GetLocalizedText("serviceBuySpells")); case GuildServices.MakeSpells: return(TextManager.Instance.GetLocalizedText("serviceMakeSpells")); case GuildServices.BuyMagicItems: return(TextManager.Instance.GetLocalizedText("serviceBuyMagicItems")); case GuildServices.MakeMagicItems: return(TextManager.Instance.GetLocalizedText("serviceMakeMagicItems")); case GuildServices.SellMagicItems: return(TextManager.Instance.GetLocalizedText("serviceSellMagicItems")); case GuildServices.Teleport: return(TextManager.Instance.GetLocalizedText("serviceTeleport")); case GuildServices.DaedraSummoning: return(TextManager.Instance.GetLocalizedText("serviceDaedraSummon")); case GuildServices.Spymaster: return(TextManager.Instance.GetLocalizedText("serviceSpymaster")); case GuildServices.BuySoulgems: return(TextManager.Instance.GetLocalizedText("serviceBuySoulgems")); case GuildServices.ReceiveArmor: return(TextManager.Instance.GetLocalizedText("serviceReceiveArmor")); case GuildServices.ReceiveHouse: return(TextManager.Instance.GetLocalizedText("serviceReceiveHouse")); default: string serviceName; if (customNpcServiceNames.TryGetValue((int)service, out serviceName)) { return(serviceName); } else { return("?"); } } }