forked from MagicBane/Server
Building Management compiled to a single method check
This commit is contained in:
@@ -104,68 +104,68 @@ public enum BuildingManager {
|
|||||||
if (building == null)
|
if (building == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
//cannot access destroyed buildings
|
||||||
if (building.getRank() == -1)
|
if (building.getRank() == -1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (IsOwner(building, player))
|
//admin characters can always access buildings
|
||||||
return true;
|
|
||||||
|
|
||||||
//individual friend.
|
|
||||||
|
|
||||||
if (building.getFriends() != null && building.getFriends().get(player.getObjectUUID()) != null)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
//Admins can access stuff
|
|
||||||
|
|
||||||
if (player.isCSR())
|
if (player.isCSR())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
//Guild stuff
|
//owner can always access their own building
|
||||||
|
|
||||||
if (building.getGuild().isGuildLeader(player.getObjectUUID()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (building.getFriends().get(player.getGuild().getObjectUUID()) != null && building.getFriends().get(player.getGuild().getObjectUUID()).friendType == 8)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (building.getFriends().get(player.getGuild().getObjectUUID()) != null && building.getFriends().get(player.getGuild().getObjectUUID()).friendType == 9 && GuildStatusController.isInnerCouncil(player.getGuildStatus()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (Guild.sameGuild(building.getGuild(), player.getGuild()) && GuildStatusController.isInnerCouncil(player.getGuildStatus()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return Guild.sameGuild(building.getGuild(), player.getGuild()) && GuildStatusController.isGuildLeader(player.getGuildStatus());
|
|
||||||
|
|
||||||
//TODO test friends list once added
|
|
||||||
//does not meet above criteria. Cannot access.
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean playerCanManageNotFriends(PlayerCharacter player, Building building) {
|
|
||||||
|
|
||||||
//Player Can only Control Building if player is in Same Guild as Building and is higher rank than IC.
|
|
||||||
|
|
||||||
if (player == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (building == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (building.getRank() == -1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (IsOwner(building, player))
|
if (IsOwner(building, player))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
//Somehow guild leader check fails? lets check if Player is true Guild GL.
|
//check for default IC access if building belongs to same guild
|
||||||
if (building.getGuild() != null && building.getGuild().isGuildLeader(player.getObjectUUID()))
|
if(player.guild.equals(building.getGuild())) {
|
||||||
|
if (building.getBlueprint() != null && building.getBlueprint().getBuildingGroup() != null) {
|
||||||
|
switch (building.getBlueprint().getBuildingGroup()) {
|
||||||
|
case TOL:
|
||||||
|
case BARRACK:
|
||||||
|
case SPIRE:
|
||||||
|
case SHRINE:
|
||||||
|
case BANESTONE:
|
||||||
|
case MINE:
|
||||||
|
case WAREHOUSE:
|
||||||
|
case BULWARK:
|
||||||
|
case SIEGETENT:
|
||||||
|
if (GuildStatusController.isInnerCouncil(player.getGuildStatus()))
|
||||||
|
return true;
|
||||||
|
if (GuildStatusController.isGuildLeader(player.getGuildStatus()))
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//check against friends list entries if any present
|
||||||
|
if (building.getFriends() != null) {
|
||||||
|
|
||||||
|
//check individuals
|
||||||
|
if (building.getFriends().get(player.getObjectUUID()) != null)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!GuildStatusController.isGuildLeader(player.getGuildStatus()) && !GuildStatusController.isInnerCouncil(player.getGuildStatus()))
|
if (building.getFriends().get(player.guild.objectUUID) != null) {
|
||||||
return false;
|
|
||||||
|
|
||||||
return false;
|
//check friend type for guild related access
|
||||||
|
switch (building.getFriends().get(player.guild.objectUUID).friendType) {
|
||||||
|
case 8: //full member
|
||||||
|
if (GuildStatusController.isFullMember(player.getGuildStatus()))
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case 9: //Inner Council
|
||||||
|
if (GuildStatusController.isInnerCouncil(player.getGuildStatus()))
|
||||||
|
return true;
|
||||||
|
if (GuildStatusController.isGuildLeader(player.getGuildStatus()))
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//did not meet access grant criteria, deny access
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static synchronized boolean lootBuilding(PlayerCharacter player, Building building) {
|
public static synchronized boolean lootBuilding(PlayerCharacter player, Building building) {
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public class ClaimGuildTreeMsgHandler extends AbstractClientMsgHandler {
|
|||||||
if (building.getGuild().isEmptyGuild())
|
if (building.getGuild().isEmptyGuild())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!ManageCityAssetMsgHandler.playerCanManageNotFriends(sourcePlayer, building))
|
if (!BuildingManager.playerCanManage(sourcePlayer, building))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ public class ClaimGuildTreeMsgHandler extends AbstractClientMsgHandler {
|
|||||||
(building == null) || playerZone == null || playerCity == null)
|
(building == null) || playerZone == null || playerCity == null)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (!ManageCityAssetMsgHandler.playerCanManageNotFriends(sourcePlayer, building))
|
if (!BuildingManager.playerCanManage(sourcePlayer, building))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
boolean open = (msg.getMessageType() == OPEN_CITY);
|
boolean open = (msg.getMessageType() == OPEN_CITY);
|
||||||
|
|||||||
@@ -28,30 +28,6 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler {
|
|||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean playerCanManageNotFriends(PlayerCharacter player, Building building) {
|
|
||||||
|
|
||||||
//Player Can only Control Building if player is in Same Guild as Building and is higher rank than IC.
|
|
||||||
|
|
||||||
if (player == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (building.getRank() == -1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (BuildingManager.IsOwner(building, player))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (GuildStatusController.isGuildLeader(player.getGuildStatus()) == false && GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
//Somehow guild leader check fails above? lets check if Player is true Guild GL.
|
|
||||||
if (building.getGuild() != null && building.getGuild().isGuildLeader(player.getObjectUUID()))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return Guild.sameGuild(building.getGuild(), player.getGuild());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) {
|
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) {
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ public class OrderNPCMsgHandler extends AbstractClientMsgHandler {
|
|||||||
if (building == null)
|
if (building == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ManageCityAssetMsgHandler.playerCanManageNotFriends(player, building) == false)
|
if (BuildingManager.playerCanManage(player, building) == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (orderNpcMsg.getPatrolSize() >= 20)
|
if (orderNpcMsg.getPatrolSize() >= 20)
|
||||||
@@ -411,7 +411,7 @@ public class OrderNPCMsgHandler extends AbstractClientMsgHandler {
|
|||||||
case 2:
|
case 2:
|
||||||
player = SessionManager.getPlayerCharacter(origin);
|
player = SessionManager.getPlayerCharacter(origin);
|
||||||
|
|
||||||
if (ManageCityAssetMsgHandler.playerCanManageNotFriends(player, building) == false)
|
if (BuildingManager.playerCanManage(player, building) == false)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (building.getHirelings().containsKey(npc) == false)
|
if (building.getHirelings().containsKey(npc) == false)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class TransferGoldToFromBuildingMsgHandler extends AbstractClientMsgHandl
|
|||||||
|
|
||||||
if (msg.getDirection() == 2) {
|
if (msg.getDirection() == 2) {
|
||||||
|
|
||||||
if (!ManageCityAssetMsgHandler.playerCanManageNotFriends(player, building))
|
if (!BuildingManager.playerCanManage(player, building))
|
||||||
return true;
|
return true;
|
||||||
if (building.setReserve(msg.getUnknown01(), player)) {
|
if (building.setReserve(msg.getUnknown01(), player)) {
|
||||||
dispatch = Dispatch.borrow(player, msg);
|
dispatch = Dispatch.borrow(player, msg);
|
||||||
|
|||||||
@@ -1447,7 +1447,7 @@ public class Building extends AbstractWorldObject {
|
|||||||
|
|
||||||
public synchronized boolean setReserve(int amount, PlayerCharacter player) {
|
public synchronized boolean setReserve(int amount, PlayerCharacter player) {
|
||||||
|
|
||||||
if (!BuildingManager.playerCanManageNotFriends(player, this))
|
if (!BuildingManager.playerCanManage(player, this))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (amount < 0)
|
if (amount < 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user