모든 네트워크 오브젝트의 소유권을 서버가 갖도록 함
Distributable -> None 관련 사이드 이펙트로 인한 버그 수정
This commit is contained in:
@@ -235,14 +235,45 @@ namespace Northbound
|
||||
if (Time.time - _lastGatheringTime < gatheringCooldown)
|
||||
return false;
|
||||
|
||||
// 플레이어의 자원 공간 확인
|
||||
int availableSpace = GetPlayerAvailableSpace(playerId);
|
||||
if (availableSpace <= 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 플레이어의 자원 공간 확인 (서버와 클라이언트 모두 지원)
|
||||
/// </summary>
|
||||
private int GetPlayerAvailableSpace(ulong playerId)
|
||||
{
|
||||
// 서버에서는 ServerResourceManager 사용
|
||||
var resourceManager = ServerResourceManager.Instance;
|
||||
if (resourceManager != null)
|
||||
{
|
||||
if (resourceManager.GetAvailableSpace(playerId) <= 0)
|
||||
return false;
|
||||
return resourceManager.GetAvailableSpace(playerId);
|
||||
}
|
||||
|
||||
return true;
|
||||
// 클라이언트에서는 PlayerResourceInventory 사용
|
||||
if (NetworkManager.Singleton != null)
|
||||
{
|
||||
var spawnedObjects = NetworkManager.Singleton.SpawnManager.SpawnedObjects;
|
||||
foreach (var kvp in spawnedObjects)
|
||||
{
|
||||
var controller = kvp.Value.GetComponent<NetworkPlayerController>();
|
||||
if (controller != null && controller.OwnerPlayerId == playerId)
|
||||
{
|
||||
var inventory = kvp.Value.GetComponent<PlayerResourceInventory>();
|
||||
if (inventory != null)
|
||||
{
|
||||
return inventory.MaxResourceCapacity - inventory.CurrentResourceAmount;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void Interact(ulong playerId)
|
||||
@@ -324,15 +355,28 @@ namespace Northbound
|
||||
ShowGatheringEffectClientRpc();
|
||||
}
|
||||
|
||||
[Rpc(SendTo.Owner)]
|
||||
[Rpc(SendTo.ClientsAndHost)]
|
||||
private void UpdatePlayerResourcesClientRpc(ulong playerId)
|
||||
{
|
||||
var playerObject = NetworkManager.Singleton.ConnectedClients[playerId]?.PlayerObject;
|
||||
if (playerObject == null)
|
||||
// 해당 플레이어만 업데이트
|
||||
if (NetworkManager.Singleton.LocalClientId != playerId)
|
||||
return;
|
||||
|
||||
var playerInventory = playerObject.GetComponent<PlayerResourceInventory>();
|
||||
playerInventory?.RequestResourceUpdateServerRpc();
|
||||
// 로컬 플레이어의 PlayerResourceInventory 찾아서 업데이트 요청
|
||||
var spawnedObjects = NetworkManager.Singleton.SpawnManager.SpawnedObjects;
|
||||
foreach (var kvp in spawnedObjects)
|
||||
{
|
||||
var controller = kvp.Value.GetComponent<NetworkPlayerController>();
|
||||
if (controller != null && controller.IsLocalPlayer)
|
||||
{
|
||||
var inventory = kvp.Value.GetComponent<PlayerResourceInventory>();
|
||||
if (inventory != null)
|
||||
{
|
||||
inventory.RequestResourceUpdateServerRpc(playerId);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Rpc(SendTo.NotServer)]
|
||||
|
||||
Reference in New Issue
Block a user