freeso/TSOClient/tso.simantics/Model/Platform/VMFSOCommunityValidator.cs

97 lines
4 KiB
C#

using FSO.SimAntics.Model.TSOPlatform;
namespace FSO.SimAntics.Model.Platform
{
public class VMFSOCommunityValidator : VMDefaultValidator
{
public VMFSOCommunityValidator(VM vm) : base(vm)
{
}
public override bool CanMoveObject(VMAvatar ava, VMEntity obj)
{
return ava.AvatarState.Permissions >= VMTSOAvatarPermissions.Roommate;
}
public override bool CanSendbackObject(VMAvatar ava, VMGameObject obj)
{
return (obj.TSOState as VMTSOObjectState).OwnerID == ava.PersistID &&
!(obj.TSOState as VMTSOObjectState).ObjectFlags.HasFlag(VMTSOObjectFlags.FSODonated);
}
public override DeleteMode GetDeleteMode(DeleteMode desired, VMAvatar ava, VMEntity obj)
{
if (desired > DeleteMode.Delete) return DeleteMode.Disallowed;
if (obj == null || ava == null) return DeleteMode.Disallowed;
if (desired == DeleteMode.Sendback &&
(obj.PersistID == 0 || obj is VMAvatar || !CanSendbackObject(ava, (VMGameObject)obj))) return DeleteMode.Disallowed;
if (obj is VMAvatar && ava.AvatarState.Permissions < VMTSOAvatarPermissions.Admin) return DeleteMode.Disallowed;
if (ava.AvatarState.Permissions >= VMTSOAvatarPermissions.Owner)
return desired;
if (ava.AvatarState.Permissions < VMTSOAvatarPermissions.BuildBuyRoommate)
return DeleteMode.Disallowed;
//build buy donator can delete build mode objects that are donated
if (!(obj.TSOState as VMTSOObjectState).ObjectFlags.HasFlag(VMTSOObjectFlags.FSODonated)) return DeleteMode.Disallowed;
var catalog = Content.Content.Get().WorldCatalog;
var item = catalog.GetItemByGUID(obj.Object.OBJ.GUID);
if (item != null)
{
if (BuilderWhiteList.Contains(item.Value.Category) && !RoomieWhiteList.Contains(item.Value.Category))
{
return desired;
}
}
return DeleteMode.Disallowed;
}
public override PurchaseMode GetPurchaseMode(PurchaseMode desired, VMAvatar ava, uint guid, bool fromInventory)
{
if (desired > PurchaseMode.Donate) return PurchaseMode.Disallowed;
if (ava == null) return PurchaseMode.Disallowed;
if (ava.AvatarState.Permissions < TSOPlatform.VMTSOAvatarPermissions.Roommate) return PurchaseMode.Disallowed;
if (base.GetPurchaseMode(desired, ava, guid, fromInventory) == PurchaseMode.Disallowed) return PurchaseMode.Disallowed;
if (desired == PurchaseMode.Normal && ava.AvatarState.Permissions < TSOPlatform.VMTSOAvatarPermissions.Owner) return PurchaseMode.Donate;
return desired;
}
public override bool CanBuildTool(VMAvatar ava)
{
return ava.AvatarState.Permissions >= VMTSOAvatarPermissions.BuildBuyRoommate;
}
public override bool CanManageAsyncSale(VMAvatar ava, VMGameObject obj)
{
//currently cannot sell anything on a community lot.
//commented lets people sell non-donated objects
return false; // CanSendbackObject(ava, obj);
}
public override bool CanManageAdmitList(VMAvatar ava)
{
return ava.AvatarState.Permissions >= VMTSOAvatarPermissions.Owner;
}
public override bool CanManageEnvironment(VMAvatar ava)
{
return ava.AvatarState.Permissions >= VMTSOAvatarPermissions.Owner;
}
public override bool CanManageLotSize(VMAvatar ava)
{
return ava.AvatarState.Permissions >= VMTSOAvatarPermissions.Admin;
}
public override bool CanChangePermissions(VMAvatar ava)
{
//permissions changes are handled differently on community lots.
//the normal permissions changes should not function.
return ava.AvatarState.Permissions >= VMTSOAvatarPermissions.Admin;
}
}
}