/// <summary> /// Drops item by item ID from player's inventory /// </summary> /// <param name="session"></param> /// <param name="itemId"></param> public void DropItem(PlayerSession session, int itemId) { #if ITEMV2 EntityReferenceCache entityReferenceCache = GameManagerUtilities.PlayerRefCache(); #else Vector3 position = session.WorldPlayerEntity.transform.position; #endif PlayerInventory inventory = Inventory(session); for (int slot = 0; slot < inventory.Capacity; slot++) { #if ITEMV2 ItemObject item = inventory.GetSlot(slot); if (item.ItemId == itemId) { inventory.DropSlot(slot, entityReferenceCache.PlayerCamera.SimData.FireDirectionWorldSpace); } #else ItemInstance item = inventory.GetSlot(slot); if (item.Item.ItemId == itemId) { inventory.DropSlot(slot, position + new Vector3(0f, 1f, 0f) + position / 2f, (position + new Vector3(0f, 0.2f, 0f)) * 8f); } #endif } }
/// <summary> /// Drops item by item ID from player's inventory /// </summary> /// <param name="session"></param> /// <param name="itemId"></param> public void DropItem(PlayerSession session, int itemId) { EntityReferenceCache entityReferenceCache = GameManagerUtilities.PlayerRefCache(); PlayerInventory inventory = Inventory(session); for (int slot = 0; slot < inventory.Capacity; slot++) { ItemObject item = inventory.GetSlot(slot); if (item.ItemId == itemId) { inventory.DropSlot(slot, entityReferenceCache.PlayerCamera.SimData.FireDirectionWorldSpace); } } }
private void PortCommand(IPlayer player, string command, string[] args) { if (player.IsServer) { player.Reply(Lang("PlayersOnly", player.Id, command)); return; } if (!player.HasPermission(permUse)) { player.Reply(Lang("NotAllowed", player.Id, command)); return; } #if HURTWORLD || REIGNOFKINGS || RUST || THEFOREST RaycastHit hit = new RaycastHit(); #endif #if HURTWORLD EntityReferenceCache entity = (player.Object as PlayerSession).WorldPlayerEntity; CamData simData = entity.GetComponent <PlayerStatManager>().RefCache.PlayerCamera.SimData; CharacterController controller = entity.GetComponent <CharacterController>(); Vector3 point1 = simData.FirePositionWorldSpace + controller.center + Vector3.up * -controller.height * 0.5f; Vector3 point2 = point1 + Vector3.up * controller.height; Vector3 direction = simData.FireRotationWorldSpace * Vector3.forward; if (!Physics.CapsuleCast(point1, point2, controller.radius, direction, out hit, float.MaxValue, layers)) #elif REIGNOFKINGS CodeHatch.Engine.Core.Cache.Entity entity = (player.Object as Player).Entity; if (!Physics.Raycast(entity.Position, entity.GetOrCreate <LookBridge>().Forward, out hit, float.MaxValue, layers)) #elif RUST BasePlayer basePlayer = player.Object as BasePlayer; if (basePlayer != null && !Physics.Raycast(basePlayer.eyes.HeadRay(), out hit, float.MaxValue, layers)) #elif THEFOREST BoltEntity entity = player.Object as BoltEntity; Physics.Raycast(entity.transform.position, entity.transform.rotation * Vector3.forward, out hit, float.MaxValue, layers); if (hit.collider != null && !hit.collider.CompareTag("TerrainMain") && !hit.collider.CompareTag("structure")) #endif { player.Reply(Lang("NoDestination", player.Id)); return; } #if HURTWORLD Vector3 safePos = simData.FirePositionWorldSpace + direction * hit.distance; GenericPosition destination = new GenericPosition(safePos.x, safePos.y, safePos.z); #elif REIGNOFKINGS || RUST || THEFOREST GenericPosition destination = new GenericPosition(hit.point.x, hit.point.y, hit.point.z); #else GenericPosition destination = new GenericPosition(); #endif if (!IsValidMapCoordinates(destination.X, destination.Y, destination.Z)) { player.Reply(Lang("OutOfBounds", player.Id)); return; } #if DEBUG player.Reply($"Current position: {player.Position()}"); player.Reply($"Destination: {destination}"); #endif protection.Add(player.Id); // TODO: Remove to reset before adding if using timer? player.Teleport(destination.X, destination.Y, destination.Z); }