public static ItemDrop GetNearbyItem(Vector3 center, List <ItemDrop.ItemData> acceptedNames, int range = 10)
            {
                ItemDrop ClosestObject = null;

                foreach (Collider collider in Physics.OverlapSphere(center, range, LayerMask.GetMask(new string[] { "item" })))
                {
                    ItemDrop item = collider.transform.parent?.parent?.gameObject?.GetComponent <ItemDrop>();
                    if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                    {
                        item = collider.transform.parent?.gameObject?.GetComponent <ItemDrop>();
                        if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                        {
                            item = collider.transform?.gameObject?.GetComponent <ItemDrop>();
                            if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                            {
                                continue;
                            }
                        }
                    }
                    if (item?.transform?.position != null && acceptedNames.Select(n => n.m_shared.m_name).Contains(item.m_itemData.m_shared.m_name) && (ClosestObject == null || Vector3.Distance(center, item.transform.position) < Vector3.Distance(center, ClosestObject.transform.position)))
                    {
                        ClosestObject = item;
                    }
                }
                return(ClosestObject);
            }
Exemple #2
0
    public void ThrowItem()
    {
        if (HandEquipment != null)
        {
            if (HandEquipment.InvSlotContent.Resource)
            {
                GameObject resourceDrop = Instantiate(ResourceDropPrefab, Player.transform.position, Quaternion.identity);
                resourceDrop.GetComponent <ResourceDrop>().Type   = HandEquipment.InvSlotContent.ResourceDrop.Type;
                resourceDrop.GetComponent <ResourceDrop>().Amount = HandEquipment.InvSlotContent.Amount;
                print(HandEquipment.InvSlotContent.SpriteName);
                resourceDrop.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Sprites/" + HandEquipment.InvSlotContent.SpriteName);
                UpdatePlayerResources(-1, HandEquipment.InvSlotContent.ResourceDrop.Type);

                //Throwing
                FlyingObject flyingObject = resourceDrop.GetComponent <FlyingObject>();
                if (Player.FacingRight)
                {
                    flyingObject.Throw(resourceDrop, resourceDrop.transform.right, Player);
                }
                else
                {
                    flyingObject.Throw(resourceDrop, -resourceDrop.transform.right, Player);
                }
            }
            else if (HandEquipment.InvSlotContent.IsItem)
            {
                ItemDrop itemDrop = Instantiate(ItemDropPrefab, Player.transform.position, Quaternion.identity).GetComponent <ItemDrop>();
                itemDrop.Type        = HandEquipment.InvSlotContent.Item.Type;
                itemDrop.Item        = HandEquipment.InvSlotContent.Item;
                itemDrop.Name        = HandEquipment.InvSlotContent.Name;
                itemDrop.IconName    = HandEquipment.InvSlotContent.IconName;
                itemDrop.DamageValue = HandEquipment.InvSlotContent.Item.DamageValue;
                itemDrop.GetComponent <SpriteRenderer>().sprite = Resources.Load <Sprite>("Sprites/" + HandEquipment.InvSlotContent.SpriteName);

                // Throwing
                FlyingObject flyingObject = itemDrop.GetComponent <FlyingObject>();
                if (Player.FacingRight)
                {
                    flyingObject.Throw(itemDrop.gameObject, itemDrop.transform.right, Player);
                }
                else
                {
                    flyingObject.Throw(itemDrop.gameObject, -itemDrop.transform.right, Player);
                }
                Player.AllItems.Remove(HandEquipment.InvSlotContent.Item);
                HandEquipment.ResetInvSlot();
                Player.DamageValue = Player.BasicDamageValue;
                ToggleThrowIcon(false);
                CancelItemOnMapPreshow();
            }
        }
    }
Exemple #3
0
    public void PlaceBridge(GameObject prefab, Sprite sprite, Item _item, string _name, string _iconName, Player player)
    {
        GameObject bridgeOnTheRiver = Instantiate(prefab, player.RiverPieceToSnapTo.transform.position, Quaternion.identity);

        bridgeOnTheRiver.GetComponent <SpriteRenderer>().sprite = sprite;
        player.RiverPieceToSnapTo.transform.GetChild(0).gameObject.SetActive(false);
        ItemDrop _itemDrop = bridgeOnTheRiver.AddComponent <ItemDrop>();

        _itemDrop.Type = _item.Type;
        _itemDrop.GetComponent <ItemDrop>().Item     = _item;
        _itemDrop.GetComponent <ItemDrop>().Name     = _name;
        _itemDrop.GetComponent <ItemDrop>().IconName = _iconName;
    }
            static void Postfix(Container __instance, ZNetView ___m_nview)
            {
                if (!isOn.Value || !__instance.IsOwner())
                {
                    return;
                }

                Vector3 position = __instance.transform.position + Vector3.up;

                foreach (Collider collider in Physics.OverlapSphere(position, ContainerRange(__instance), LayerMask.GetMask(new string[] { "item" })))
                {
                    if (collider?.attachedRigidbody)
                    {
                        ItemDrop item = collider.attachedRigidbody.GetComponent <ItemDrop>();
                        //Dbgl($"nearby item name: {item.m_itemData.m_dropPrefab.name}");

                        if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                        {
                            continue;
                        }

                        if (DisallowItem(__instance, item.m_itemData))
                        {
                            continue;
                        }

                        Dbgl($"auto storing {item.m_itemData.m_dropPrefab.name} from ground");


                        while (item.m_itemData.m_stack > 1 && __instance.GetInventory().CanAddItem(item.m_itemData, 1))
                        {
                            item.m_itemData.m_stack--;
                            Traverse.Create(item).Method("Save").GetValue();
                            ItemDrop.ItemData newItem = item.m_itemData.Clone();
                            newItem.m_stack = 1;
                            __instance.GetInventory().AddItem(newItem);
                            typeof(Container).GetMethod("Save", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { });
                            typeof(Inventory).GetMethod("Changed", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance.GetInventory(), new object[] { });
                        }

                        if (item.m_itemData.m_stack == 1 && __instance.GetInventory().CanAddItem(item.m_itemData, 1))
                        {
                            ItemDrop.ItemData newItem = item.m_itemData.Clone();
                            item.m_itemData.m_stack = 0;
                            Traverse.Create(item).Method("Save").GetValue();
                            if (___m_nview.GetZDO() == null)
                            {
                                DestroyImmediate(item.gameObject);
                            }
                            else
                            {
                                ZNetScene.instance.Destroy(item.gameObject);
                            }
                            __instance.GetInventory().AddItem(newItem);
                            typeof(Container).GetMethod("Save", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { });
                            typeof(Inventory).GetMethod("Changed", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance.GetInventory(), new object[] { });
                        }
                    }
                }
            }
Exemple #5
0
    // Token: 0x0600036F RID: 879 RVA: 0x0001E0B8 File Offset: 0x0001C2B8
    private ItemDrop FindClosestConsumableItem(float maxRange)
    {
        if (MonsterAI.m_itemMask == 0)
        {
            MonsterAI.m_itemMask = LayerMask.GetMask(new string[]
            {
                "item"
            });
        }
        Collider[] array    = Physics.OverlapSphere(base.transform.position, maxRange, MonsterAI.m_itemMask);
        ItemDrop   itemDrop = null;
        float      num      = 999999f;

        foreach (Collider collider in array)
        {
            if (collider.attachedRigidbody)
            {
                ItemDrop component = collider.attachedRigidbody.GetComponent <ItemDrop>();
                if (!(component == null) && component.GetComponent <ZNetView>().IsValid() && this.CanConsume(component.m_itemData))
                {
                    float num2 = Vector3.Distance(component.transform.position, base.transform.position);
                    if (itemDrop == null || num2 < num)
                    {
                        itemDrop = component;
                        num      = num2;
                    }
                }
            }
        }
        if (itemDrop && base.HavePath(itemDrop.transform.position))
        {
            return(itemDrop);
        }
        return(null);
    }
    public void PlaceBridge(GameObject prefab, Sprite sprite, Item _item, string _name, string _iconName)
    {
        GameObject bridgeOnTheRiver = Instantiate(prefab, RiverPieceToSnapTo.transform.position, Quaternion.identity);

        //bridgeOnTheRiver.transform.parent = RiverPieceToSnapTo.transform;
        bridgeOnTheRiver.GetComponent <SpriteRenderer>().sprite = sprite;
        RiverPieceToSnapTo.transform.GetChild(0).gameObject.SetActive(false);
        ItemDrop _itemDrop = bridgeOnTheRiver.AddComponent <ItemDrop>();

        //ItemDrop _itemDrop = Instantiate(itemDrop, RiverPieceToSnapTo.transform.position, Quaternion.identity).GetComponent<ItemDrop>();
        _itemDrop.Type = _item.Type;
        _itemDrop.GetComponent <ItemDrop>().Item     = _item;
        _itemDrop.GetComponent <ItemDrop>().Name     = _name;
        _itemDrop.GetComponent <ItemDrop>().IconName = _iconName;
        //_itemDrop.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("Sprites/" + content.IconName);
    }
Exemple #7
0
        public void Update(MobAIBase aiBase, float dt)
        {
            if ((m_currentSearchTime += dt) > MaxSearchTime)
            {
                m_currentSearchTime = 0f;
                aiBase.Brain.Fire(Trigger.Timeout);
            }

            if (aiBase.Brain.IsInState(State.MoveToContainer))
            {
                //Common.Dbgl($"State MoveToContainer: {KnownContainers.Peek().name}");
                if (KnownContainers.Peek() == null)
                {
                    aiBase.StopMoving();
                    KnownContainers.Pop();
                    aiBase.Brain.Fire(Trigger.Failed);
                    //Common.Dbgl("Container = null");
                    return;
                }
                aiBase.MoveAndAvoidFire(KnownContainers.Peek().transform.position, dt, 0.5f);
                if (Vector3.Distance(aiBase.Instance.transform.position, KnownContainers.Peek().transform.position) < 2)
                {
                    aiBase.StopMoving();
                    aiBase.Brain.Fire(Trigger.ContainerIsClose);
                    //Debug.Log($"{KnownContainers.Peek().name} is close");
                }
                return;
            }

            if (aiBase.Brain.IsInState(State.MoveToGroundItem))
            {
                if (m_groundItem == null || m_groundItem?.GetComponent <ZNetView>()?.IsValid() != true)
                {
                    m_groundItem = null;
                    aiBase.StopMoving();
                    aiBase.Brain.Fire(Trigger.Failed);
                    //Debug.Log("GroundItem = null");
                    return;
                }
                aiBase.MoveAndAvoidFire(m_groundItem.transform.position, dt, 0.5f);
                if (Vector3.Distance(aiBase.Instance.transform.position, m_groundItem.transform.position) < 1.5)
                {
                    aiBase.StopMoving();
                    aiBase.Brain.Fire(Trigger.GroundItemIsClose);
                    //Debug.Log("GroundItem is close");
                }
                return;
            }

            if (aiBase.Brain.IsInState(State.OpenContainer))
            {
                if ((m_openChestTimer += dt) > OpenChestDelay)
                {
                    //Debug.Log("Open Container");
                    aiBase.Brain.Fire(Trigger.ContainerOpened);
                }
            }
        }
        // This is an exact copy of the ingame method "DropItem" to provide a reliable way of controlling it later
        static bool Prefix(Humanoid __instance, ref bool __result, Inventory inventory, ItemDrop.ItemData item,
                           int amount, ItemDrop.ItemData ___m_hiddenLeftItem, ItemDrop.ItemData ___m_hiddenRightItem,
                           ZSyncAnimation ___m_zanim, EffectList ___m_dropEffects, VisEquipment ___m_visEquipment)
        {
            if (item.m_shared.m_questItem)
            {
                __instance.Message(MessageHud.MessageType.Center, "$msg_cantdrop");
                __result = false;
                return(false);
            }
            __instance.RemoveFromEquipQueue(item);
            __instance.UnequipItem(item, triggerEquipEffects: false);
            if (___m_hiddenLeftItem == item)
            {
                ___m_hiddenLeftItem = null;
                _setupVisEquipment.Invoke(__instance, new [] { ___m_visEquipment, (object)false });
            }
            if (___m_hiddenRightItem == item)
            {
                ___m_hiddenRightItem = null;
                _setupVisEquipment.Invoke(__instance, new [] { ___m_visEquipment, (object)false });
            }
            if (amount == item.m_stack)
            {
//                ZLog.Log("drop all " + amount + "  " + item.m_stack);
                if (!inventory.RemoveItem(item))
                {
//                    ZLog.Log("Was not removed");
                    __result = false;
                    return(false);
                }
            }
            else
            {
//                ZLog.Log("drop some " + amount + "  " + item.m_stack);
                inventory.RemoveItem(item, amount);
            }
            ItemDrop itemDrop = ItemDrop.DropItem(item, amount, __instance.transform.position +
                                                  __instance.transform.forward + __instance.transform.up,
                                                  __instance.transform.rotation);

            Longship.Instance.EventManager.DispatchEvent(new HumanoidDropItemEvent(__instance, item, amount));
            if (__instance.IsPlayer())
            {
                itemDrop.OnPlayerDrop();
            }
            itemDrop.GetComponent <Rigidbody>().velocity = (__instance.transform.forward + Vector3.up) * 5f;
            ___m_zanim.SetTrigger("interact");
            ___m_dropEffects.Create(__instance.transform.position, Quaternion.identity);
            __instance.Message(MessageHud.MessageType.TopLeft, "$msg_dropped " +
                               itemDrop.m_itemData.m_shared.m_name,
                               itemDrop.m_itemData.m_stack, itemDrop.m_itemData.GetIcon());
            __result = true;
            return(false);
        }
Exemple #9
0
 void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)
 {
     if (myParent != null)
     {
         if (myParent.GetComponent <ItemDrop>().hotBar)
         {
             transform.SetParent(transform.parent.parent.parent);
         }
         else
         {
             transform.SetParent(transform.parent.parent);
         }
         transform.SetSiblingIndex(0);
     }
     //GetComponent<CanvasGroup>().blocksRaycasts = false;
 }
Exemple #10
0
        public static ItemDrop GetNearbyItem(BaseAI instance, IEnumerable <ItemDrop.ItemData> acceptedNames, int range = 10)
        {
            Vector3  position      = instance.transform.position;
            ItemDrop ClosestObject = null;

            foreach (Collider collider in Physics.OverlapSphere(position, range, LayerMask.GetMask(new string[] { "item" })))
            {
                ItemDrop item = collider.transform?.GetComponentInParent <ItemDrop>();
                if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                {
                    continue;
                }
                if (item?.transform?.position != null && acceptedNames.Select(n => n.m_shared.m_name).Contains(item.m_itemData.m_shared.m_name) && CanSeeTarget(instance, item.gameObject) && (ClosestObject == null || Vector3.Distance(position, item.transform.position) < Vector3.Distance(position, ClosestObject.transform.position)))
                {
                    ClosestObject = item;
                }
            }
            return(ClosestObject);
        }
Exemple #11
0
            static void Postfix(InventoryGui __instance, ItemDrop.ItemData ___m_dragItem, Inventory ___m_dragInventory, int ___m_dragAmount, ref GameObject ___m_dragGo)
            {
                if (Input.GetKeyDown(m_hotkey.Value) && ___m_dragItem != null && ___m_dragInventory.ContainsItem(___m_dragItem))
                {
                    Dbgl($"Discarding {___m_dragAmount}/{___m_dragItem.m_stack} {___m_dragItem.m_shared.m_name}");

                    if (returnResources.Value)
                    {
                        Recipe recipe = ObjectDB.instance.GetRecipe(___m_dragItem);

                        if (recipe != null)
                        {
                            for (int i = 0; i < ___m_dragAmount; i++)
                            {
                                foreach (Piece.Requirement req in recipe.m_resources)
                                {
                                    ItemDrop.ItemData newItem = req.m_resItem.m_itemData.Clone();
                                    newItem.m_stack = recipe.m_amount;
                                    if (!Player.m_localPlayer.GetInventory().AddItem(newItem))
                                    {
                                        ItemDrop itemDrop = ItemDrop.DropItem(newItem, newItem.m_stack, Player.m_localPlayer.transform.position + Player.m_localPlayer.transform.forward + Player.m_localPlayer.transform.up, Player.m_localPlayer.transform.rotation);
                                        itemDrop.GetComponent <Rigidbody>().velocity = (Player.m_localPlayer.transform.forward + Vector3.up) * 5f;
                                    }
                                }
                            }
                        }
                    }

                    if (___m_dragAmount == ___m_dragItem.m_stack)
                    {
                        ___m_dragInventory.RemoveItem(___m_dragItem);
                    }
                    else
                    {
                        ___m_dragInventory.RemoveItem(___m_dragItem, ___m_dragAmount);
                    }
                    Destroy(___m_dragGo);
                    ___m_dragGo = null;
                    __instance.GetType().GetMethod("UpdateCraftingPanel", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(__instance, new object[] { false });
                }
            }
        public static async void RefuelSmelter(Smelter __instance, ZNetView ___m_nview, int delay)
        {
            await Task.Delay(delay);

            int maxOre  = __instance.m_maxOre - Traverse.Create(__instance).Method("GetQueueSize").GetValue <int>();
            int maxFuel = __instance.m_maxFuel - Mathf.CeilToInt(___m_nview.GetZDO().GetFloat("fuel", 0f));


            List <Container> nearbyOreContainers  = GetNearbyContainers(__instance.transform.position, smelterOreRange.Value);
            List <Container> nearbyFuelContainers = GetNearbyContainers(__instance.transform.position, smelterFuelRange.Value);

            Vector3 position = __instance.transform.position + Vector3.up;

            foreach (Collider collider in Physics.OverlapSphere(position, dropRange.Value, LayerMask.GetMask(new string[] { "item" })))
            {
                if (collider?.attachedRigidbody)
                {
                    ItemDrop item = collider.attachedRigidbody.GetComponent <ItemDrop>();
                    //Dbgl($"nearby item name: {item.m_itemData.m_dropPrefab.name}");

                    if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                    {
                        continue;
                    }

                    string name = GetPrefabName(item.gameObject.name);

                    foreach (Smelter.ItemConversion itemConversion in __instance.m_conversion)
                    {
                        if (item.m_itemData.m_shared.m_name == itemConversion.m_from.m_itemData.m_shared.m_name && maxOre > 0)
                        {
                            if (oreDisallowTypes.Value.Split(',').Contains(name))
                            {
                                //Dbgl($"container at {c.transform.position} has {item.m_itemData.m_stack} {item.m_dropPrefab.name} but it's forbidden by config");
                                continue;
                            }

                            Dbgl($"auto adding ore {name} from ground");

                            int amount = Mathf.Min(item.m_itemData.m_stack, maxOre);
                            maxOre -= amount;

                            for (int i = 0; i < amount; i++)
                            {
                                if (item.m_itemData.m_stack <= 1)
                                {
                                    if (___m_nview.GetZDO() == null)
                                    {
                                        Destroy(item.gameObject);
                                    }
                                    else
                                    {
                                        ZNetScene.instance.Destroy(item.gameObject);
                                    }
                                    ___m_nview.InvokeRPC("AddOre", new object[] { name });
                                    break;
                                }

                                item.m_itemData.m_stack--;
                                ___m_nview.InvokeRPC("AddOre", new object[] { name });
                                Traverse.Create(item).Method("Save").GetValue();
                            }
                        }
                    }

                    if (__instance.m_fuelItem && item.m_itemData.m_shared.m_name == __instance.m_fuelItem.m_itemData.m_shared.m_name && maxFuel > 0)
                    {
                        if (fuelDisallowTypes.Value.Split(',').Contains(name))
                        {
                            //Dbgl($"ground has {item.m_itemData.m_dropPrefab.name} but it's forbidden by config");
                            continue;
                        }

                        Dbgl($"auto adding fuel {name} from ground");

                        int amount = Mathf.Min(item.m_itemData.m_stack, maxFuel);
                        maxFuel -= amount;

                        for (int i = 0; i < amount; i++)
                        {
                            if (item.m_itemData.m_stack <= 1)
                            {
                                if (___m_nview.GetZDO() == null)
                                {
                                    Destroy(item.gameObject);
                                }
                                else
                                {
                                    ZNetScene.instance.Destroy(item.gameObject);
                                }
                                ___m_nview.InvokeRPC("AddFuel", new object[] { });
                                break;
                            }

                            item.m_itemData.m_stack--;
                            ___m_nview.InvokeRPC("AddFuel", new object[] { });
                            Traverse.Create(item).Method("Save").GetValue();
                        }
                    }
                }
            }

            foreach (Container c in nearbyOreContainers)
            {
                foreach (Smelter.ItemConversion itemConversion in __instance.m_conversion)
                {
                    ItemDrop.ItemData oreItem = c.GetInventory().GetItem(itemConversion.m_from.m_itemData.m_shared.m_name);

                    if (oreItem != null && maxOre > 0)
                    {
                        maxOre--;
                        if (oreDisallowTypes.Value.Split(',').Contains(oreItem.m_dropPrefab.name))
                        {
                            continue;
                        }

                        Dbgl($"container at {c.transform.position} has {oreItem.m_stack} {oreItem.m_dropPrefab.name}, taking one");

                        ___m_nview.InvokeRPC("AddOre", new object[] { oreItem.m_dropPrefab?.name });
                        c.GetInventory().RemoveItem(itemConversion.m_from.m_itemData.m_shared.m_name, 1);
                        typeof(Container).GetMethod("Save", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c, new object[] { });
                        typeof(Inventory).GetMethod("Changed", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c.GetInventory(), new object[] { });
                    }
                }
            }
            foreach (Container c in nearbyFuelContainers)
            {
                if (__instance.m_fuelItem && maxFuel > 0)
                {
                    ItemDrop.ItemData fuelItem = c.GetInventory().GetItem(__instance.m_fuelItem.m_itemData.m_shared.m_name);
                    if (fuelItem != null)
                    {
                        maxFuel--;
                        if (fuelDisallowTypes.Value.Split(',').Contains(fuelItem.m_dropPrefab.name))
                        {
                            //Dbgl($"container at {c.transform.position} has {item.m_stack} {item.m_dropPrefab.name} but it's forbidden by config");
                            continue;
                        }

                        Dbgl($"container at {c.transform.position} has {fuelItem.m_stack} {fuelItem.m_dropPrefab.name}, taking one");

                        ___m_nview.InvokeRPC("AddFuel", new object[] { });

                        c.GetInventory().RemoveItem(__instance.m_fuelItem.m_itemData.m_shared.m_name, 1);
                        typeof(Container).GetMethod("Save", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c, new object[] { });
                        typeof(Inventory).GetMethod("Changed", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c.GetInventory(), new object[] { });
                    }
                }
            }
        }
Exemple #13
0
        public static async void RefuelTorch(Fireplace fireplace, ZNetView znview, int delay)
        {
            await Task.Delay(delay);

            int maxFuel = (int)(fireplace.m_maxFuel - Mathf.Ceil(znview.GetZDO().GetFloat("fuel", 0f)));

            List <Container> nearbyContainers = GetNearbyContainers(fireplace.transform.position, fireplaceRange.Value);

            Vector3 position = fireplace.transform.position + Vector3.up;

            foreach (Collider collider in Physics.OverlapSphere(position, dropRange.Value, LayerMask.GetMask(new string[] { "item" })))
            {
                if (collider?.attachedRigidbody)
                {
                    ItemDrop item = collider.attachedRigidbody.GetComponent <ItemDrop>();
                    //Dbgl($"nearby item name: {item.m_itemData.m_dropPrefab.name}");

                    if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                    {
                        continue;
                    }

                    string name = GetPrefabName(item.gameObject.name);

                    if (item.m_itemData.m_shared.m_name == fireplace.m_fuelItem.m_itemData.m_shared.m_name && maxFuel > 0)
                    {
                        if (fuelDisallowTypes.Value.Split(',').Contains(name))
                        {
                            //Dbgl($"ground has {item.m_itemData.m_dropPrefab.name} but it's forbidden by config");
                            continue;
                        }

                        Dbgl($"auto adding fuel {name} from ground");

                        int amount = Mathf.Min(item.m_itemData.m_stack, maxFuel);
                        maxFuel -= amount;

                        for (int i = 0; i < amount; i++)
                        {
                            if (item.m_itemData.m_stack <= 1)
                            {
                                if (znview.GetZDO() == null)
                                {
                                    Destroy(item.gameObject);
                                }
                                else
                                {
                                    ZNetScene.instance.Destroy(item.gameObject);
                                }
                                znview.InvokeRPC("AddFuel", new object[] { });
                                break;
                            }

                            item.m_itemData.m_stack--;
                            znview.InvokeRPC("AddFuel", new object[] { });
                            Traverse.Create(item).Method("Save").GetValue();
                        }
                    }
                }
            }

            foreach (Container c in nearbyContainers)
            {
                if (fireplace.m_fuelItem && maxFuel > 0)
                {
                    List <ItemDrop.ItemData> itemList = new List <ItemDrop.ItemData>();
                    c.GetInventory().GetAllItems(fireplace.m_fuelItem.m_itemData.m_shared.m_name, itemList);

                    foreach (var fuelItem in itemList)
                    {
                        if (fuelItem != null && (!leaveLastItem.Value || fuelItem.m_stack > 1))
                        {
                            if (fuelDisallowTypes.Value.Split(',').Contains(fuelItem.m_dropPrefab.name))
                            {
                                //Dbgl($"container at {c.transform.position} has {item.m_stack} {item.m_dropPrefab.name} but it's forbidden by config");
                                continue;
                            }
                            maxFuel--;

                            Dbgl($"container at {c.transform.position} has {fuelItem.m_stack} {fuelItem.m_dropPrefab.name}, taking one");

                            znview.InvokeRPC("AddFuel", new object[] { });

                            c.GetInventory().RemoveItem(fireplace.m_fuelItem.m_itemData.m_shared.m_name, 1);
                            typeof(Container).GetMethod("Save", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c, new object[] { });
                            typeof(Inventory).GetMethod("Changed", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c.GetInventory(), new object[] { });
                        }
                    }
                }
            }
        }
Exemple #14
0
            static void Postfix(float dt, Player __instance, Inventory ___m_inventory, float ___m_autoPickupRange, int ___m_autoPickupMask)
            {
                if (!_autoPickupPastWeightlimit.Value)
                {
                    return;
                }

                if (__instance.IsTeleporting())
                {
                    return;
                }
                Vector3 vector = __instance.transform.position + Vector3.up;

                Collider[] array = Physics.OverlapSphere(vector, ___m_autoPickupRange, ___m_autoPickupMask);
                foreach (Collider val in array)
                {
                    var rb = val.attachedRigidbody;
                    if (rb == null)
                    {
                        continue;
                    }

                    ItemDrop component = rb.GetComponent <ItemDrop>();
                    if (component == null || !component.m_autoPickup || __instance.HaveUniqueKey(component.m_itemData.m_shared.m_name) || !component.GetComponent <ZNetView>().IsValid())
                    {
                        continue;
                    }

                    // If the original AutoPickup picked this item up, ignore it in the postfix
                    // shouldn't happen as the overlapsphere shouldn't find it anymore but i'm not sure if the timing is tight enough for that to be consistent and reliable)
                    if (___m_inventory.ContainsItem(component.m_itemData))
                    {
                        Debug.LogWarning("Component was already in inventory");
                        continue;
                    }

                    if (!component.CanPickup())
                    {
                        component.RequestOwn();
                        continue;
                    }

                    // Leave out the overencumbered check
                    if (!___m_inventory.CanAddItem(component.m_itemData)) // || component.m_itemData.GetWeight() + ___m_inventory.GetTotalWeight() > GetMaxCarryWeight())
                    {
                        continue;
                    }

                    float num = Vector3.Distance(component.transform.position, vector);
                    if (!(num > ___m_autoPickupRange))
                    {
                        if (num < 0.3f)
                        {
                            __instance.Pickup(component.gameObject);
                            continue;
                        }
                        Vector3 vector2 = Vector3.Normalize(vector - component.transform.position);
                        float   num2    = 15f;
                        component.transform.position = component.transform.position + vector2 * num2 * dt;
                    }
                }
            }
Exemple #15
0
            static void Postfix(Fireplace __instance, ZNetView ___m_nview)
            {
                if (!Player.m_localPlayer || !isOn.Value || !___m_nview.IsOwner() || (__instance.name.Contains("groundtorch") && !refuelStandingTorches.Value) || (__instance.name.Contains("walltorch") && !refuelWallTorches.Value) || (__instance.name.Contains("fire_pit") && !refuelFirePits.Value))
                {
                    return;
                }

                int maxFuel = (int)(__instance.m_maxFuel - Mathf.Ceil(___m_nview.GetZDO().GetFloat("fuel", 0f)));

                List <Container> nearbyContainers = GetNearbyContainers(__instance.transform.position);

                Vector3 position = __instance.transform.position + Vector3.up;

                foreach (Collider collider in Physics.OverlapSphere(position, dropRange.Value, LayerMask.GetMask(new string[] { "item" })))
                {
                    if (collider?.attachedRigidbody)
                    {
                        ItemDrop item = collider.attachedRigidbody.GetComponent <ItemDrop>();
                        //Dbgl($"nearby item name: {item.m_itemData.m_dropPrefab.name}");

                        if (item?.GetComponent <ZNetView>()?.IsValid() != true)
                        {
                            continue;
                        }

                        string name = GetPrefabName(item.gameObject.name);

                        if (item.m_itemData.m_shared.m_name == __instance.m_fuelItem.m_itemData.m_shared.m_name && maxFuel > 0)
                        {
                            if (fuelDisallowTypes.Value.Split(',').Contains(name))
                            {
                                //Dbgl($"ground has {item.m_itemData.m_dropPrefab.name} but it's forbidden by config");
                                continue;
                            }

                            Dbgl($"auto adding fuel {name} from ground");

                            int amount = Mathf.Min(item.m_itemData.m_stack, maxFuel);
                            maxFuel -= amount;

                            for (int i = 0; i < amount; i++)
                            {
                                if (item.m_itemData.m_stack <= 1)
                                {
                                    if (___m_nview.GetZDO() == null)
                                    {
                                        Destroy(item.gameObject);
                                    }
                                    else
                                    {
                                        ZNetScene.instance.Destroy(item.gameObject);
                                    }
                                    ___m_nview.InvokeRPC("AddFuel", new object[] { });
                                    break;
                                }

                                item.m_itemData.m_stack--;
                                ___m_nview.InvokeRPC("AddFuel", new object[] { });
                                Traverse.Create(item).Method("Save").GetValue();
                            }
                        }
                    }
                }

                foreach (Container c in nearbyContainers)
                {
                    if (__instance.m_fuelItem && maxFuel > 0)
                    {
                        ItemDrop.ItemData fuelItem = c.GetInventory().GetItem(__instance.m_fuelItem.m_itemData.m_shared.m_name);
                        if (fuelItem != null)
                        {
                            maxFuel--;
                            if (fuelDisallowTypes.Value.Split(',').Contains(fuelItem.m_dropPrefab.name))
                            {
                                //Dbgl($"container at {c.transform.position} has {item.m_stack} {item.m_dropPrefab.name} but it's forbidden by config");
                                continue;
                            }

                            Dbgl($"container at {c.transform.position} has {fuelItem.m_stack} {fuelItem.m_dropPrefab.name}, taking one");

                            ___m_nview.InvokeRPC("AddFuel", new object[] { });

                            c.GetInventory().RemoveItem(__instance.m_fuelItem.m_itemData.m_shared.m_name, 1);
                            typeof(Container).GetMethod("Save", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c, new object[] { });
                            typeof(Inventory).GetMethod("Changed", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(c.GetInventory(), new object[] { });
                        }
                    }
                }
            }
Exemple #16
0
        private void OnGUI()
        {
            {
                GUI.color = Color.white;
                GUI.Label(new Rect(10f, 15f, 350f, 20f), "ShieldSupporter Final");
                GUI.Label(new Rect(10f, 30f, 350f, 20f), "Max Skills - F11");
            }
            if (!showitemesp)
            {
                GUI.color = Color.red;
                GUI.Label(new Rect(10f, 90f, 350f, 20f), "Item ESP - F4");
            }
            else
            {
                GUI.color = Color.green;
                GUI.Label(new Rect(10f, 90f, 350f, 20f), "Item ESP - F4");
            }
            if (!showplayeresp)
            {
                GUI.color = Color.red;
                GUI.Label(new Rect(10f, 75f, 350f, 20f), "ESP - F3");
            }
            else
            {
                GUI.color = Color.green;
                GUI.Label(new Rect(10f, 75f, 350f, 20f), "ESP - F3");
            }
            if (!fly)
            {
                GUI.color = Color.red;
                GUI.Label(new Rect(10f, 105f, 350f, 20f), "Fly - Insert");
            }
            else
            {
                GUI.color = Color.green;
                GUI.Label(new Rect(10f, 105f, 350f, 20f), "Fly - Insert");
            }
            if (!godmode)
            {
                GUI.color = Color.red;
                GUI.Label(new Rect(10f, 135f, 350f, 20f), "GodMode - F1");
            }
            else
            {
                GUI.color = Color.green;
                GUI.Label(new Rect(10f, 135f, 350f, 20f), "GodMode - F1");
            }
            var cam = Utils.GetMainCamera();

            if (!cam)
            {
                return;
            }

            Player.m_localPlayer.m_maxCarryWeight    = 13337;
            Player.m_localPlayer.m_blockStaminaDrain = 0;
            Player.m_localPlayer.m_runStaminaDrain   = 0;
            Player.m_localPlayer.m_jumpStaminaUsage  = 0;
            Player.m_localPlayer.m_sneakStaminaDrain = 0;
            Player.m_localPlayer.m_equipStaminaDrain = 0;
            Player.m_localPlayer.m_blockStaminaDrain = 0;
            Player.m_localPlayer.m_staminaRegen      = 100;
            if (godmode)
            {
                Player.m_localPlayer.SetMaxHealth(100, false);
                Player.m_localPlayer.SetHealth(100);
            }
            if (Player.m_localPlayer.m_autoPickupRange == 2)
            {
                GUI.color = Color.red;
                GUI.Label(new Rect(10f, 45f, 350f, 20f), "ItemVAC - Home");
            }
            else if (Player.m_localPlayer.m_autoPickupRange == 500)
            {
                GUI.color = Color.green;
                GUI.Label(new Rect(10f, 45f, 350f, 20f), "ItemVAC - Home");
            }
            if (Player.m_localPlayer.m_runSpeed == 7)
            {
                GUI.color = Color.red;
                GUI.Label(new Rect(10f, 60f, 350f, 20f), "Speed - PageUp");
            }
            else if (Player.m_localPlayer.m_runSpeed == 20)
            {
                GUI.color = Color.green;
                GUI.Label(new Rect(10f, 60f, 350f, 20f), "Speed - PageUp");
            }
            if (Player.m_debugMode == false)
            {
                GUI.color = Color.red;
                GUI.Label(new Rect(10f, 120f, 350f, 20f), "Debug - F8");
            }
            else if (Player.m_debugMode == true)
            {
                GUI.color = Color.green;
                GUI.Label(new Rect(10f, 120f, 350f, 20f), "Debug - F8");
            }
            //GUI.Label(new Rect(Screen.width / 2, 10f, 350f, 50f), Player.m_debugMode.ToString());
            if (showGui)
            {
                itemName = GUI.TextField(new Rect(700f, 80f, 500f, 30f), itemName);
            }
            if (showcoords)
            {
                GUI.color = Color.white;
                GUI.Label(new Rect(Screen.width / 2, 10f, 350f, 50f), "X: " + Player.m_localPlayer.gameObject.transform.position.x.ToString());
                GUI.Label(new Rect(Screen.width / 2, 25f, 350f, 50f), "Y: " + Player.m_localPlayer.gameObject.transform.position.y.ToString());
                GUI.Label(new Rect(Screen.width / 2, 40f, 350f, 50f), "Z: " + Player.m_localPlayer.gameObject.transform.position.z.ToString());
            }
            var characters = Character.GetAllCharacters();

            foreach (Character character in characters)
            {
                var position = character.transform.position;
                var screen   = cam.WorldToScreenPoint(position);
                var faction  = character.m_faction;

                var color = Color.yellow;
                if (faction == Character.Faction.Players)
                {
                    if (Player.m_localPlayer == character)
                    {
                        continue;
                    }

                    color = Color.green;
                }
                else if (character.GetBaseAI().IsAlerted())
                {
                    color = Color.red;
                }
                if (showplayeresp)
                {
                    if (screen.x < 0f || screen.x > (float)Screen.width || screen.y < 0f || screen.y > (float)Screen.height || screen.z > 0f)
                    {
                        var distance = (int)(Vector2.Distance(Player.m_localPlayer.transform.position, character.transform.position));

                        screen.y = Screen.height - screen.y;

                        Render.Color = color;
                        Render.DrawString(new Vector2(screen.x, screen.y), character.m_name.Replace("$enemy_", ""));

                        Render.Color = Color.white;
                        Render.DrawString(new Vector2(screen.x, (screen.y) + 13), "" + distance.ToString() + "m");


                        var width     = 25;
                        var health    = character.GetHealth();
                        var maxHealth = character.GetMaxHealth();

                        screen.y += 23;

                        Render.Color = new Color(0, 0, 0);
                        Render.DrawBoxFill(new Vector2(screen.x - width / 2, screen.y + 1), new Vector2(width, 3), Render.Color);

                        Render.Color = new Color(0, 1, 0);
                        var health_width = new Vector2(health * width / maxHealth, 3);
                        Render.DrawBoxFill(new Vector2(screen.x - width / 2, screen.y + 1), health_width, Render.Color);

                        Render.Color = new Color(0, 0, 0);
                        Render.DrawBox(new Vector2(screen.x - width / 2, screen.y + 1), new Vector2(width, 3), 1, false);
                    }
                }
            }
            if (showitemesp)
            {
                Vector3 vector = Player.m_localPlayer.transform.position + Vector3.up;
                foreach (Collider collider in Physics.OverlapSphere(vector, 100f, LayerMask.GetMask("item")))
                {
                    if (collider.attachedRigidbody)
                    {
                        ItemDrop component = collider.attachedRigidbody.GetComponent <ItemDrop>();
                        if (!(component == null) && component.GetComponent <ZNetView>().IsValid())
                        {
                            var position = component.gameObject.transform.position;
                            var screen   = cam.WorldToScreenPoint(position);

                            if (screen.x < 0f || screen.x > (float)Screen.width || screen.y < 0f || screen.y > (float)Screen.height || screen.z > 0f)
                            {
                                var distance = (int)(Vector2.Distance(Player.m_localPlayer.transform.position, position));

                                Render.Color = Color.gray;
                                Render.DrawString(new Vector2(screen.x, Screen.height - screen.y), component.name.Replace("(Clone)", ""));

                                Render.Color = Color.white;
                                Render.DrawString(new Vector2(screen.x, (Screen.height - screen.y) + 13), "" + distance.ToString() + "m");
                            }
                        }
                    }
                }
            }
        }