Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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);
                }
            }
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
        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);
                }
            }
        }
Esempio n. 9
0
        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("?");
                }
            }
        }
Esempio n. 10
0
        // 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);
            }
        }
Esempio n. 11
0
        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("?");
                }
            }
        }