mirror of
https://github.com/riperiperi/FreeSO
synced 2026-08-13 20:26:13 -04:00
68 lines
2.3 KiB
C#
68 lines
2.3 KiB
C#
using System.IO;
|
|
using FSO.LotView.Model;
|
|
using FSO.SimAntics.Model;
|
|
using FSO.SimAntics.Model.TSOPlatform;
|
|
|
|
namespace FSO.SimAntics.NetPlay.Model.Commands
|
|
{
|
|
public class VMNetMoveObjectCmd : VMNetCommandBodyAbstract
|
|
{
|
|
public short ObjectID;
|
|
public short x;
|
|
public short y;
|
|
public sbyte level;
|
|
public Direction dir;
|
|
|
|
public override bool Execute(VM vm, VMAvatar caller)
|
|
{
|
|
VMEntity obj = vm.GetObjectById(ObjectID);
|
|
if (!vm.TS1) {
|
|
if (obj == null || caller == null || (obj is VMAvatar) ||
|
|
(caller.AvatarState.Permissions < VMTSOAvatarPermissions.Admin
|
|
&& obj.IsUserMovable(vm.Context, false) != VMPlacementError.Success))
|
|
return false;
|
|
if (!vm.PlatformState.Validator.CanMoveObject(caller, obj)) return false;
|
|
} else if (obj == null) return false;
|
|
var result = obj.SetPosition(new LotTilePos(x, y, level), dir, vm.Context, VMPlaceRequestFlags.UserPlacement);
|
|
if (result.Status == VMPlacementError.Success)
|
|
{
|
|
obj.MultitileGroup.ExecuteEntryPoint(11, vm.Context); //User Placement
|
|
|
|
vm.SignalChatEvent(new VMChatEvent(caller, VMChatEventType.Arch,
|
|
caller?.Name ?? "Unknown",
|
|
vm.GetUserIP(caller?.PersistID ?? 0),
|
|
"moved " + obj.ToString() +" to (" + x / 16f + ", " + y / 16f + ", " + level + ")"
|
|
));
|
|
|
|
return true;
|
|
} else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
#region VMSerializable Members
|
|
|
|
public override void SerializeInto(BinaryWriter writer)
|
|
{
|
|
base.SerializeInto(writer);
|
|
writer.Write(ObjectID);
|
|
writer.Write(x);
|
|
writer.Write(y);
|
|
writer.Write(level);
|
|
writer.Write((byte)dir);
|
|
}
|
|
|
|
public override void Deserialize(BinaryReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
ObjectID = reader.ReadInt16();
|
|
x = reader.ReadInt16();
|
|
y = reader.ReadInt16();
|
|
level = reader.ReadSByte();
|
|
dir = (Direction)reader.ReadByte();
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|