public SetPublicDataResult SetPublicData(SetPublicDataRequest request) { switch (request.ContainerName) { case DataContainerTypes.WeaponLoadouts: var weaponLoadouts = WeaponLoadout.Deserialize(request.Data); break; case DataContainerTypes.ArmorLoadouts: var armorLoadouts = ArmorLoadout.Deserialize(request.Data); break; case DataContainerTypes.Customizations: var customizations = Customization.Deserialize(request.Data); break; default: throw new ArgumentException("ContainerName"); } return(new SetPublicDataResult { Result = new ServiceResult <bool> { Data = true } }); }
public static bool Prefix(WeaponLoadout __instance, ref bool __result) { var item = __instance.Item; if (IsManaBow(item)) { __result = CanBeLoaded(item); return(false); } return(true); }
public static bool Prefix(WeaponLoadout __instance, bool _destroyOnEmpty = false) { var self = __instance; if (self.Item.ItemID == ManaBowID) { float manaCost = self.Item.OwnerCharacter.Stats.GetFinalManaConsumption(null, ManaBowCost); self.Item.OwnerCharacter.Stats.UseMana(null, manaCost); return(false); } return(true); }
public static bool Prefix(WeaponLoadout __instance) { var item = __instance.Item; if (IsManaBow(item)) { // custom mana cost float manaCost = item.OwnerCharacter.Stats.GetFinalManaConsumption(null, ManaBowCost); item.OwnerCharacter.Stats.UseMana(null, manaCost); // (vanilla) update weapon loadout remaining shots int remaining = (int)At.GetField(__instance, "m_remainingShots"); remaining--; At.SetField(__instance, "m_remainingShots", remaining); if (remaining < 0) { remaining = 0; } if (remaining == 0) { __instance.Unload(); } // unequip the arrow var ammo = __instance.Item.OwnerCharacter.Inventory.Equipment.GetEquippedItem(EquipmentSlot.EquipmentSlotIDs.Quiver) as Ammunition; __instance.Item.OwnerCharacter.Inventory.Equipment.UnequipItem(ammo, false, null); ammo.transform.SetParent(null); ammo.transform.ResetLocal(); // vanilla method At.Invoke(__instance, "SetHasChanged"); return(false); } return(true); }
public static bool Prefix(WeaponLoadout __instance, ref bool __result) { var self = __instance; var item = self.Item; if (item.ItemID == ManaBowID) { float currentMana = item.OwnerCharacter.Stats.CurrentMana; float manaCost = item.OwnerCharacter.Stats.GetFinalManaConsumption(null, ManaBowCost); if (currentMana - manaCost >= 0) { __result = true; } else { item.OwnerCharacter.CharacterUI.ShowInfoNotificationLoc("Notification_Skill_NotEnoughtMana"); __result = false; } return(false); } return(true); }
public GetPublicDataResult GetPublicData(GetPublicDataRequest request) { AbstractData data; switch (request.ContainerName) { case DataContainerTypes.WeaponLoadouts: var weaponLoadout = new WeaponLoadout { ActiveLoadoutSlotIndex = 0, LoadoutSlots = Enumerable.Repeat(new WeaponLoadoutSlot { PrimaryWeapon = "assault_rifle", SecondaryWeapon = "magnum", Grenades = "frag_grenade", Booster = "", ConsumableFirst = "", ConsumableSecond = "", ConsumableThird = "", ConsumableFourth = "" } , 5).ToList() }; data = weaponLoadout.Serialize(); break; case DataContainerTypes.ArmorLoadouts: var armorLoadout = new ArmorLoadout { ActiveLoadoutSlotIndex = 0, PrimaryColor = "color_pri_13", SecondaryColor = "color_sec_13", VisorColor = "color_visor_5", LightsColor = "color_lights_3", HologramsColor = "color_holo_3", Slots = Enumerable.Repeat(new ArmorLoadoutSlot { Head = "helmet_air_assault", Shoulders = "shoulder_air_assault", Torso = "chest_air_assault", Hands = "arms_air_assault", Legs = "legs_air_assault", Accessory = "" }, 5).ToList() }; data = armorLoadout.Serialize(); break; case DataContainerTypes.Customizations: var customization = new Customization { AccountLabel = "account_label" }; data = customization.Serialize(); break; default: throw new ArgumentException("ContainerName"); } return(new GetPublicDataResult { Result = new ServiceResult <List <PerUser> > { Data = new List <PerUser> { new PerUser { User = new UserId { Id = 1 }, PerUserData = data } } } }); }
public static bool Prefix(WeaponLoadout __instance, bool _destroyOnEmpty) { var item = __instance.Item; if (IsManaBow(item)) { // custom mana cost float manaCost = item.OwnerCharacter.Stats.GetFinalManaConsumption(null, ManaBowCost); item.OwnerCharacter.Stats.UseMana(null, manaCost); // (vanilla) update weapon loadout remaining shots __instance.m_remainingShots--; if (__instance.m_remainingShots < 0) { __instance.m_remainingShots = 0; } if (__instance.m_remainingShots == 0) { __instance.Unload(); } // unequip the arrow var ammo = __instance.Item.OwnerCharacter.Inventory.Equipment.GetEquippedItem(EquipmentSlot.EquipmentSlotIDs.Quiver) as Ammunition; __instance.Item.OwnerCharacter.Inventory.Equipment.UnequipItem(ammo, false, null); ammo.transform.SetParent(null); ammo.transform.ResetLocal(); // vanilla method __instance.SetHasChanged(); return(false); } // Copied from Raid Mode for compatibility else if (__instance is WeaponLoadoutItem loadoutItem) { if (!loadoutItem.ReduceAmmunitionOnLoad) { if (loadoutItem.m_loadedAmmunition != null && __instance.Item.OwnerCharacter.IsLocalPlayer) { Global.RPCManager.SendSkillUseItem(loadoutItem.m_loadedAmmunition.UID, 1); if (PhotonNetwork.isNonMasterClientInRoom && loadoutItem.m_loadedAmmunition.RemainingAmount < 1) { loadoutItem.m_loadedAmmunition.RemainingAmount--; } } if (_destroyOnEmpty) { loadoutItem.m_loadedAmmunition = null; } else if (loadoutItem.m_loadedAmmunition == null || loadoutItem.m_loadedAmmunition.RemainingAmount == 0) { if (loadoutItem.m_loadedAmmunition) { loadoutItem.m_loadedAmmunition.SaveType = Item.SaveTypes.NonSavable; } if (loadoutItem.m_lastLoadedItems.Count > 0) { loadoutItem.m_lastLoadedItems.RemoveAt(0); } if (loadoutItem.m_lastLoadedItems.Count > 0) { loadoutItem.m_loadedAmmunition = (loadoutItem.m_lastLoadedItems[0] as Ammunition); } } } WeaponLoadout_ReduceShotAmount.ReversePatch(__instance, _destroyOnEmpty); if (loadoutItem.ReduceAmmunitionOnLoad) { __instance.DataSynced(); } } return(true); }