🐛 checking authority on destroy object
This commit is contained in:
@@ -77,9 +77,9 @@ namespace Ragon.Client
|
||||
Attached?.Invoke(this);
|
||||
}
|
||||
|
||||
internal void PrepareDetach()
|
||||
internal void SetReplication(bool enabled)
|
||||
{
|
||||
IsAttached = false;
|
||||
Replication = enabled;
|
||||
}
|
||||
|
||||
internal void Detach(RagonPayload payload)
|
||||
|
||||
@@ -83,13 +83,13 @@ public sealed class RagonEntityCache
|
||||
|
||||
public void Destroy(RagonEntity entity, RagonPayload destroyPayload)
|
||||
{
|
||||
if (!entity.IsAttached)
|
||||
if (!entity.IsAttached && !entity.HasAuthority)
|
||||
{
|
||||
RagonLog.Warn("Can't destroy object, he is not created");
|
||||
RagonLog.Warn("Can't destroy object");
|
||||
return;
|
||||
}
|
||||
|
||||
entity.PrepareDetach();
|
||||
entity.SetReplication(false);
|
||||
|
||||
var buffer = _client.Buffer;
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public sealed class EntityDestroyOperation: BaseOperation
|
||||
var room = context.Room;
|
||||
var entityId = Reader.ReadUShort();
|
||||
|
||||
if (room.Entities.TryGetValue(entityId, out var entity))
|
||||
if (room.Entities.TryGetValue(entityId, out var entity) && entity.Owner.Connection.Id == player.Connection.Id)
|
||||
{
|
||||
var payload = new RagonPayload();
|
||||
payload.Read(Reader);
|
||||
@@ -47,5 +47,9 @@ public sealed class EntityDestroyOperation: BaseOperation
|
||||
|
||||
_logger.Trace($"Player {context.Connection.Id}|{context.LobbyPlayer.Name} destoyed entity {entity.Id}");
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Trace($"Entity ${entity.Id} not found or Player {context.Connection.Id}|{context.LobbyPlayer.Name} have not authority");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user