Browse Source

Building Management compiled to a single method check

postwipe-hostile
FatBoy-DOTC 5 months ago
parent
commit
80ccfff635
  1. 84
      src/engine/gameManager/BuildingManager.java
  2. 4
      src/engine/net/client/handlers/ClaimGuildTreeMsgHandler.java
  3. 24
      src/engine/net/client/handlers/ManageCityAssetMsgHandler.java
  4. 4
      src/engine/net/client/handlers/OrderNPCMsgHandler.java
  5. 2
      src/engine/net/client/handlers/TransferGoldToFromBuildingMsgHandler.java
  6. 2
      src/engine/objects/Building.java

84
src/engine/gameManager/BuildingManager.java

@ -104,67 +104,67 @@ 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 (IsOwner(building, player))
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; return true;
if (building.getFriends().get(player.getGuild().getObjectUUID()) != null && building.getFriends().get(player.getGuild().getObjectUUID()).friendType == 9 && GuildStatusController.isInnerCouncil(player.getGuildStatus())) //check for default IC access if building belongs to same guild
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; return true;
if (GuildStatusController.isGuildLeader(player.getGuildStatus()))
if (Guild.sameGuild(building.getGuild(), player.getGuild()) && GuildStatusController.isInnerCouncil(player.getGuildStatus()))
return true; return true;
break;
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) { //check against friends list entries if any present
if (building.getFriends() != null) {
//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) //check individuals
return false; if (building.getFriends().get(player.getObjectUUID()) != null)
return true;
if (building.getRank() == -1) if (building.getFriends().get(player.guild.objectUUID) != null) {
return false;
if (IsOwner(building, player)) //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; return true;
break;
//Somehow guild leader check fails? lets check if Player is true Guild GL. case 9: //Inner Council
if (building.getGuild() != null && building.getGuild().isGuildLeader(player.getObjectUUID())) if (GuildStatusController.isInnerCouncil(player.getGuildStatus()))
return true; return true;
if (GuildStatusController.isGuildLeader(player.getGuildStatus()))
return true;
break;
if (!GuildStatusController.isGuildLeader(player.getGuildStatus()) && !GuildStatusController.isInnerCouncil(player.getGuildStatus())) }
return false; }
}
//did not meet access grant criteria, deny access
return false; return false;
} }
public static synchronized boolean lootBuilding(PlayerCharacter player, Building building) { public static synchronized boolean lootBuilding(PlayerCharacter player, Building building) {

4
src/engine/net/client/handlers/ClaimGuildTreeMsgHandler.java

@ -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);

24
src/engine/net/client/handlers/ManageCityAssetMsgHandler.java

@ -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) {

4
src/engine/net/client/handlers/OrderNPCMsgHandler.java

@ -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)

2
src/engine/net/client/handlers/TransferGoldToFromBuildingMsgHandler.java

@ -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);

2
src/engine/objects/Building.java

@ -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)

Loading…
Cancel
Save