public void CancelPlacement(bool notify = true) { enabled = false; skullItem.DestroyItem(); skullItem.Kill(); if (notify) { player.ChatMessage(msg("Help.Placement.3", player.userID)); } Destroy(this); }
public void OnDroppedOn(DroppedItem di) { if (item == null || di.item == null || Interface.CallHook("CanCombineDroppedItem", this, di) != null || item.info.stackable <= 1 || di.item.info != item.info || (di.item.IsBlueprint() && di.item.blueprintTarget != item.blueprintTarget) || (di.item.hasCondition && di.item.condition != di.item.maxCondition) || (item.hasCondition && item.condition != item.maxCondition)) { return; } if (di.item.info != null && di.item.info.amountType == ItemDefinition.AmountType.Genetics) { int num = ((di.item.instanceData != null) ? di.item.instanceData.dataInt : (-1)); int num2 = ((item.instanceData != null) ? item.instanceData.dataInt : (-1)); if (num != num2) { return; } } int num3 = di.item.amount + item.amount; if (num3 <= item.info.stackable && num3 != 0) { di.DestroyItem(); di.Kill(); item.amount = num3; item.MarkDirty(); if (GetDespawnDuration() < float.PositiveInfinity) { Invoke(IdleDestroy, GetDespawnDuration()); } Effect.server.Run("assets/bundled/prefabs/fx/notice/stack.world.fx.prefab", this, 0u, Vector3.zero, Vector3.zero); } }
public Task <bool> DestroyAsync() { if (DroppedItem.IsDestroyed) { return(Task.FromResult(false)); } DroppedItem.Kill(); return(Task.FromResult(true)); }
public virtual void EatNearbyFood() { if (UnityEngine.Time.time < nextEatTime) { return; } float num = StaminaCoreFraction(); nextEatTime = UnityEngine.Time.time + UnityEngine.Random.Range(2f, 3f) + Mathf.InverseLerp(0.5f, 1f, num) * 4f; if (num >= 1f) { return; } List <BaseEntity> obj = Facepunch.Pool.GetList <BaseEntity>(); Vis.Entities(base.transform.position + base.transform.forward * 1.5f, 2f, obj, 67109377); obj.Sort((BaseEntity a, BaseEntity b) => (b is DroppedItem).CompareTo(a is DroppedItem)); foreach (BaseEntity item in obj) { if (item.isClient) { continue; } DroppedItem droppedItem = item as DroppedItem; if ((bool)droppedItem && droppedItem.item != null && droppedItem.item.info.category == ItemCategory.Food) { ItemModConsumable component = droppedItem.item.info.GetComponent <ItemModConsumable>(); if ((bool)component) { ReplenishFromFood(component); droppedItem.item.UseItem(); if (droppedItem.item.amount <= 0) { droppedItem.Kill(); } break; } } CollectibleEntity collectibleEntity = item as CollectibleEntity; if ((bool)collectibleEntity && collectibleEntity.IsFood()) { collectibleEntity.DoPickup(null); break; } GrowableEntity growableEntity = item as GrowableEntity; if ((bool)growableEntity && growableEntity.CanPick()) { growableEntity.PickFruit(null); break; } } Facepunch.Pool.FreeList(ref obj); }
public void OnDroppedOn(DroppedItem di) { if (this.item == null) { return; } if (di.item == null) { return; } if (Interface.CallHook("CanCombineDroppedItem", this, di) != null) { return; } if (this.item.info.stackable <= 1) { return; } if (di.item.info != this.item.info) { return; } if (di.item.IsBlueprint() && di.item.blueprintTarget != this.item.blueprintTarget) { return; } int num = di.item.amount + this.item.amount; if (num > this.item.info.stackable) { return; } if (num == 0) { return; } di.DestroyItem(); di.Kill(BaseNetworkable.DestroyMode.None); this.item.amount = num; this.item.MarkDirty(); if (this.GetDespawnDuration() < Single.PositiveInfinity) { base.Invoke(new Action(this.IdleDestroy), this.GetDespawnDuration()); } Effect.server.Run("assets/bundled/prefabs/fx/notice/stack.world.fx.prefab", this, 0, Vector3.zero, Vector3.zero, null, false); }
public void OnDroppedOn(DroppedItem di) { if (this.item == null || di.item == null || (Interface.CallHook("CanCombineDroppedItem", (object)this, (object)di) != null || this.item.info.stackable <= 1) || (Object.op_Inequality((Object)di.item.info, (Object)this.item.info) || di.item.IsBlueprint() && di.item.blueprintTarget != this.item.blueprintTarget)) { return; } int num = di.item.amount + this.item.amount; if (num > this.item.info.stackable || num == 0) { return; } di.DestroyItem(); di.Kill(BaseNetworkable.DestroyMode.None); this.item.amount = num; this.item.MarkDirty(); if ((double)this.GetDespawnDuration() < double.PositiveInfinity) { this.Invoke(new Action(this.IdleDestroy), this.GetDespawnDuration()); } Effect.server.Run("assets/bundled/prefabs/fx/notice/stack.world.fx.prefab", (BaseEntity)this, 0U, Vector3.get_zero(), Vector3.get_zero(), (Connection)null, false); }
object CanCombineDroppedItem(DroppedItem groundItem, DroppedItem droppedItem) //Combines multiple dropped items of same type, to increase performance { if (!CombineItems(groundItem.item, droppedItem.item)) { return(null); } /* * if (num > groundItem.item.info.stackable) * { * return false; * } * if (num == 0) * { * return false; * }*/ itemGrid.SetDespawnTime(groundItem); //Update respawn time TODO: change it later so it doesnt reset each time item is added / removed droppedItem.Kill(BaseNetworkable.DestroyMode.None); //groundItem.Invoke(new Action(() => { groundItem.DestroyItem(); groundItem.Kill(); }), groundItem.GetDespawnDuration()); Effect.server.Run("assets/bundled/prefabs/fx/notice/stack.world.fx.prefab", groundItem, 0u, Vector3.zero, Vector3.zero, null, false); return(true); }
private void Unload() { if (!ServerMgr.Instance.Restarting) { SaveData(); } ItemPlacement[] placementComps = UnityEngine.Object.FindObjectsOfType <ItemPlacement>(); if (placementComps != null) { foreach (ItemPlacement placement in placementComps) { placement.CancelPlacement(); } } for (int i = signRegisteredSkulls.Count - 1; i >= 0; i--) { DroppedItem skullItem = signRegisteredSkulls.ElementAt(i).Value; skullItem?.DestroyItem(); if (skullItem != null && !skullItem.IsDestroyed) { skullItem.Kill(); } } for (int i = 0; i < spearRegisteredSkulls.Count; i++) { KeyValuePair <DroppedItem, List <DroppedItem> > kvp = spearRegisteredSkulls.ElementAt(i); DroppedItem spear = kvp.Key; List <DroppedItem> skulls = kvp.Value; if (spear == null) { continue; } for (int y = 0; y < skulls.Count; y++) { DroppedItem skullItem = skulls[y]; if (skullItem != null) { skullItem.DestroyItem(); if (skullItem != null && !skullItem.IsDestroyed) { skullItem.Kill(); } } } Pool.FreeList(ref skulls); spear.DestroyItem(); if (!spear.IsDestroyed) { spear.Kill(); } } configData = null; Instance = null; }
public void EatNearbyFood() { if (Time.time < this.nextEatTime) { return; } float single = this.StaminaCoreFraction(); this.nextEatTime = Time.time + UnityEngine.Random.Range(2f, 3f) + Mathf.InverseLerp(0.5f, 1f, single) * 4f; if (single >= 1f) { return; } List <BaseEntity> list = Pool.GetList <BaseEntity>(); Vis.Entities <BaseEntity>(base.transform.position + (base.transform.forward * 1.5f), 2f, list, 67109377, QueryTriggerInteraction.Collide); list.Sort((BaseEntity a, BaseEntity b) => b is DroppedItem.CompareTo(a is DroppedItem)); foreach (BaseEntity baseEntity in list) { if (baseEntity.isClient) { continue; } DroppedItem droppedItem = baseEntity as DroppedItem; if (droppedItem && droppedItem.item != null && droppedItem.item.info.category == ItemCategory.Food) { ItemModConsumable component = droppedItem.item.info.GetComponent <ItemModConsumable>(); if (component) { base.ClientRPC(null, "Eat"); this.lastEatTime = Time.time; float ifType = component.GetIfType(MetabolismAttribute.Type.Calories); float ifType1 = component.GetIfType(MetabolismAttribute.Type.Hydration); float single1 = component.GetIfType(MetabolismAttribute.Type.Health) + component.GetIfType(MetabolismAttribute.Type.HealthOverTime); this.ReplenishStaminaCore(ifType, ifType1); this.Heal(single1 * 2f); droppedItem.item.UseItem(1); if (droppedItem.item.amount > 0) { break; } droppedItem.Kill(BaseNetworkable.DestroyMode.None); Pool.FreeList <BaseEntity>(ref list); return; } } CollectibleEntity collectibleEntity = baseEntity as CollectibleEntity; if (!collectibleEntity || !collectibleEntity.IsFood()) { PlantEntity plantEntity = baseEntity as PlantEntity; if (!plantEntity || !plantEntity.CanPick()) { continue; } plantEntity.PickFruit(null); Pool.FreeList <BaseEntity>(ref list); return; } else { collectibleEntity.DoPickup(null); Pool.FreeList <BaseEntity>(ref list); return; } } Pool.FreeList <BaseEntity>(ref list); }