Beispiel #1
0
        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);
            }
Beispiel #3
0
            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);
            }
Beispiel #5
0
            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);
            }
Beispiel #6
0
        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);
            }