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); }
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(); } } }
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[] { }); } } } }
// 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); }
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); }
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; }
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); }
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[] { }); } } } }
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[] { }); } } } } }
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; } } }
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[] { }); } } } }
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"); } } } } } }