public static void CustomArmorService(IUserInterfaceWindow window) { Debug.Log("Custom Armor service."); PlayerEntity playerEntity = GameManager.Instance.PlayerEntity; ItemHelper itemHelper = DaggerfallUnity.Instance.ItemHelper; if (playerEntity.Level < 9) { DaggerfallUI.MessageBox("Sorry I have not yet sourced enough rare materials to make you armor."); return; } ItemCollection armorItems = new ItemCollection(); Array armorTypes = itemHelper.GetEnumArray(ItemGroups.Armor); foreach (ArmorMaterialTypes material in customArmorMaterials) { if (playerEntity.Level < 9 || (playerEntity.Level < 12 && material >= ArmorMaterialTypes.Adamantium) || (playerEntity.Level < 15 && material >= ArmorMaterialTypes.Orcish) || (playerEntity.Level < 18 && material >= ArmorMaterialTypes.Daedric)) { break; } for (int i = 0; i < armorTypes.Length; i++) { Armor armorType = (Armor)armorTypes.GetValue(i); ItemTemplate itemTemplate = itemHelper.GetItemTemplate(ItemGroups.Armor, i); int vs = 0; int vf = 0; switch (armorType) { case Armor.Cuirass: case Armor.Left_Pauldron: case Armor.Right_Pauldron: vs = 1; vf = 3; break; case Armor.Greaves: vs = 2; vf = 5; break; case Armor.Gauntlets: vs = 1; vf = 1; break; case Armor.Boots: case Armor.Helm: vs = 1; vf = itemTemplate.variants - 1; break; default: continue; } for (int v = vs; v <= vf; v++) { armorItems.AddItem(ItemBuilder.CreateArmor(playerEntity.Gender, playerEntity.Race, armorType, material, v)); } } int[] customItemTemplates = itemHelper.GetCustomItemsForGroup(ItemGroups.Armor); for (int i = 0; i < customItemTemplates.Length; i++) { DaggerfallUnityItem item = ItemBuilder.CreateItem(ItemGroups.Armor, customItemTemplates[i]); ItemBuilder.ApplyArmorSettings(item, playerEntity.Gender, playerEntity.Race, material); armorItems.AddItem(item); } } DaggerfallTradeWindow tradeWindow = (DaggerfallTradeWindow) UIWindowFactory.GetInstanceWithArgs(UIWindowType.Trade, new object[] { DaggerfallUI.UIManager, null, DaggerfallTradeWindow.WindowModes.Buy, null }); tradeWindow.MerchantItems = armorItems; DaggerfallUI.UIManager.PushWindow(tradeWindow); }
public static void InitMod(bool bedSleeping, bool archery, bool riding, bool encumbrance, bool bandaging, bool shipPorts, bool expulsion, bool climbing, bool weaponSpeed, bool weaponMaterials, bool equipDamage, bool enemyAppearance, bool purifyPot, bool autoExtinguishLight, bool classicStrDmgBonus, bool variantNpcs, bool training) { Debug.Log("Begin mod init: RoleplayRealism"); Mod rrItemsMod = ModManager.Instance.GetMod("RoleplayRealismItems"); ModSettings rrItemsSettings = rrItemsMod != null?rrItemsMod.GetSettings() : null; if (bedSleeping) { PlayerActivate.RegisterCustomActivation(mod, 41000, BedActivation); PlayerActivate.RegisterCustomActivation(mod, 41001, BedActivation); PlayerActivate.RegisterCustomActivation(mod, 41002, BedActivation); } if (archery) { // Override adjust to hit and damage formulas FormulaHelper.RegisterOverride(mod, "AdjustWeaponHitChanceMod", (Func <DaggerfallEntity, DaggerfallEntity, int, int, DaggerfallUnityItem, int>)AdjustWeaponHitChanceMod); FormulaHelper.RegisterOverride(mod, "AdjustWeaponAttackDamage", (Func <DaggerfallEntity, DaggerfallEntity, int, int, DaggerfallUnityItem, int>)AdjustWeaponAttackDamage); } if (riding) { GameObject playerAdvGO = GameObject.Find("PlayerAdvanced"); if (playerAdvGO) { EnhancedRiding enhancedRiding = playerAdvGO.AddComponent <EnhancedRiding>(); if (enhancedRiding != null) { enhancedRiding.RealisticMovement = mod.GetSettings().GetBool("EnhancedRiding", "RealisticMovement"); enhancedRiding.TerrainFollowing = mod.GetSettings().GetBool("EnhancedRiding", "followTerrainEnabled"); enhancedRiding.SetFollowTerrainSoftenFactor(mod.GetSettings().GetInt("EnhancedRiding", "followTerrainSoftenFactor")); } } } if (encumbrance) { EntityEffectBroker.OnNewMagicRound += EncumbranceEffects_OnNewMagicRound; } if (rrItemsMod == null && bandaging) { DaggerfallUnity.Instance.ItemHelper.RegisterItemUseHandler((int)UselessItems2.Bandage, UseBandage); } if (shipPorts) { GameManager.Instance.TransportManager.ShipAvailiable = IsShipAvailiable; } if (expulsion) { // Register the TG/DB Guild classes if (!GuildManager.RegisterCustomGuild(FactionFile.GuildGroups.GeneralPopulace, typeof(ThievesGuildRR))) { throw new Exception("GuildGroup GeneralPopulace is already overridden, unable to register ThievesGuildRR guild class."); } if (!GuildManager.RegisterCustomGuild(FactionFile.GuildGroups.DarkBrotherHood, typeof(DarkBrotherhoodRR))) { throw new Exception("GuildGroup DarkBrotherHood is already overridden, unable to register DarkBrotherhoodRR guild class."); } } if (climbing) { FormulaHelper.RegisterOverride(mod, "CalculateClimbingChance", (Func <PlayerEntity, int, int>)CalculateClimbingChance); } if (weaponSpeed && (rrItemsSettings == null || !rrItemsSettings.GetBool("Modules", "weaponBalance"))) { FormulaHelper.RegisterOverride(mod, "GetMeleeWeaponAnimTime", (Func <PlayerEntity, WeaponTypes, ItemHands, float>)GetMeleeWeaponAnimTime); } if (weaponMaterials) { FormulaHelper.RegisterOverride(mod, "CalculateWeaponToHit", (Func <DaggerfallUnityItem, int>)CalculateWeaponToHit); } if (equipDamage) { FormulaHelper.RegisterOverride(mod, "ApplyConditionDamageThroughPhysicalHit", (Func <DaggerfallUnityItem, DaggerfallEntity, int, bool>)ApplyConditionDamageThroughPhysicalHit); } if (enemyAppearance) { UpdateEnemyClassAppearances(); } if (purifyPot) { GameManager.Instance.EntityEffectBroker.RegisterEffectTemplate(new CureDiseasePotionRR(), true); } if (autoExtinguishLight) { PlayerEnterExit.OnPreTransition += OnTransitionToDungeonExterior_ExtinguishLight; } if (classicStrDmgBonus) { FormulaHelper.RegisterOverride(mod, "DamageModifier", (Func <int, int>)DamageModifier_classicDisplay); } if (variantNpcs) { PlayerEnterExit.OnTransitionInterior += OnTransitionToInterior_VariantNPCsprites; } if (training) { UIWindowFactory.RegisterCustomUIWindow(UIWindowType.GuildServiceTraining, typeof(GuildServiceTrainingRR)); } // Initialise the FG master quest. if (!QuestListsManager.RegisterQuestList("RoleplayRealism")) { throw new Exception("Quest list name is already in use, unable to register RoleplayRealism quest list."); } RegisterFactionIds(); // Add additional data into the quest machine for the quests QuestMachine questMachine = GameManager.Instance.QuestMachine; questMachine.PlacesTable.AddIntoTable(placesTable); questMachine.FactionsTable.AddIntoTable(factionsTable); // Register the custom armor service and location detection Services.RegisterMerchantService(1022, CustomArmorService, "Custom Armor"); PlayerGPS.OnEnterLocationRect += PlayerGPS_OnEnterLocationRect; Debug.Log("Finished mod init: RoleplayRealism"); }
public void Start() { UIWindowFactory.RegisterCustomUIWindow(UIWindowType.Inventory, typeof(AsesinoInventoryWindow)); UIWindowFactory.RegisterCustomUIWindow(UIWindowType.Trade, typeof(AsesinoTradeWindow)); Debug.Log("Inventory registered windows"); }