Closed LordPhrozen closed 8 months ago
ItemDropEntity.cs
->
public static ItemDropEntity Drop(BaseGameEntity dropper, RewardGivenType givenType, CharacterItem dropData, IEnumerable<string> looters)
{
return Drop(GameInstance.Singleton.itemDropEntityPrefab, dropper, givenType, dropData, looters, GameInstance.Singleton.itemAppearDuration);
}
public static ItemDropEntity Drop(ItemDropEntity prefab, BaseGameEntity dropper, RewardGivenType givenType, CharacterItem dropData, IEnumerable<string> looters, float appearDuration)
{
Vector3 dropPosition = dropper.EntityTransform.position;
Quaternion dropRotation = Quaternion.identity;
switch (GameInstance.Singleton.DimensionType)
{
case DimensionType.Dimension3D:
// Random position around dropper with its height
dropPosition += new Vector3(Random.Range(-1f, 1f) * GameInstance.Singleton.dropDistance, 0f, Random.Range(-1f, 1f) * GameInstance.Singleton.dropDistance);
// Random rotation
dropRotation = Quaternion.Euler(Vector3.up * Random.Range(0, 360));
break;
case DimensionType.Dimension2D:
// Random position around dropper
dropPosition += new Vector3(Random.Range(-1f, 1f) * GameInstance.Singleton.dropDistance, Random.Range(-1f, 1f) * GameInstance.Singleton.dropDistance);
break;
}
return Drop(prefab, dropPosition, dropRotation, givenType, dropData, looters, appearDuration);
}
public static ItemDropEntity Drop(ItemDropEntity prefab, Vector3 dropPosition, Quaternion dropRotation, RewardGivenType givenType, CharacterItem dropItem, IEnumerable<string> looters, float appearDuration)
{
if (prefab == null)
return null;
if (GameInstance.Singleton.DimensionType == DimensionType.Dimension3D)
{
// Find drop position on ground
dropPosition = PhysicUtils.FindGroundedPosition(dropPosition, s_findGroundRaycastHits, GROUND_DETECTION_DISTANCE, GameInstance.Singleton.GetItemDropGroundDetectionLayerMask());
}
LiteNetLibIdentity spawnObj = BaseGameNetworkManager.Singleton.Assets.GetObjectInstance(
prefab.Identity.HashAssetId,
dropPosition, dropRotation);
ItemDropEntity itemDropEntity = spawnObj.GetComponent<ItemDropEntity>();
itemDropEntity.GivenType = givenType;
itemDropEntity.InitPutOnPlaceholder(dropItem, looters, appearDuration);
BaseGameNetworkManager.Singleton.Assets.NetworkSpawn(spawnObj);
return itemDropEntity;
}
That seems FAR more reasonable! I did some tests and for the most part things look great! Should stop our item drops from ending up on floors above :)
Thanks!
The height detection on dropping items seems like it goes pretty high. I frequently run into zone design issues due to this, and players keep throwing items onto the roof :) Even with the distance set to 0.1, the height seems unrelated.
I believe this also effects item spawners. This may not be a "bug" but I'd like to ask that this value be made configurable tied to the gameinstance script