Refactored to static methods.

This commit is contained in:
2023-04-23 11:19:34 -04:00
parent c0e92bddc2
commit 4adfbc0723
3 changed files with 371 additions and 387 deletions
@@ -1,5 +1,6 @@
package engine.net.client.handlers;
import engine.Enum;
import engine.Enum.DispatchChannel;
import engine.Enum.GameObjectType;
import engine.Enum.ProfitType;
@@ -36,6 +37,365 @@ public class OrderNPCMsgHandler extends AbstractClientMsgHandler {
super(OrderNPCMsg.class);
}
public static void processRedeedMob(Mob mob, Building building, ClientConnection origin) {
PlayerCharacter player;
Contract contract;
CharacterItemManager itemMan;
ItemBase itemBase;
Item item;
player = SessionManager.getPlayerCharacter(origin);
itemMan = player.getCharItemManager();
contract = mob.getContract();
if (!player.getCharItemManager().hasRoomInventory((short) 1)) {
ErrorPopupMsg.sendErrorPopup(player, 21);
return;
}
if (!building.getHirelings().containsKey(mob))
return;
if (!NPCManager.removeMobileFromBuilding(mob, building)) {
PlaceAssetMsg.sendPlaceAssetError(player.getClientConnection(), 1, "A Serious error has occurred. Please post details for to ensure transaction integrity");
return;
}
building.getHirelings().remove(mob);
itemBase = ItemBase.getItemBase(contract.getContractID());
if (itemBase == null) {
Logger.error("Could not find Contract for npc: " + mob.getObjectUUID());
return;
}
boolean itemWorked = false;
item = new Item(itemBase, player.getObjectUUID(), Enum.OwnerType.PlayerCharacter, (byte) ((byte) mob.getRank() - 1), (byte) ((byte) mob.getRank() - 1), (short) 1, (short) 1, true, false, Enum.ItemContainerType.INVENTORY, (byte) 0, new ArrayList<>(), "");
item.setNumOfItems(1);
item.containerType = Enum.ItemContainerType.INVENTORY;
try {
item = DbManager.ItemQueries.ADD_ITEM(item);
itemWorked = true;
} catch (Exception e) {
Logger.error(e);
}
if (itemWorked) {
itemMan.addItemToInventory(item);
itemMan.updateInventory();
}
ManageCityAssetsMsg mca = new ManageCityAssetsMsg();
mca.actionType = NPC.SVR_CLOSE_WINDOW;
mca.setTargetType(building.getObjectType().ordinal());
mca.setTargetID(building.getObjectUUID());
origin.sendMsg(mca);
}
private static void modifyBuyProfit(OrderNPCMsg msg, ClientConnection origin) {
NPC npc;
PlayerCharacter player;
Building building;
float percent;
ProfitType profitType = null;
player = origin.getPlayerCharacter();
if (player == null)
return;
npc = NPC.getFromCache(msg.getNpcUUID());
if (npc == null)
return;
building = npc.getBuilding();
if (building == null)
return;
NPCProfits profit = NPC.GetNPCProfits(npc);
if (profit == null)
return;
switch (msg.getActionType()) {
case 10:
profitType = ProfitType.BuyNormal;
break;
case 11:
profitType = ProfitType.BuyGuild;
break;
case 12:
profitType = ProfitType.BuyNation;
}
percent = msg.getBuySellPercent();
percent = FastMath.clamp(percent, 0.0f, 1.0f);
NPCProfits.UpdateProfits(npc, profit, profitType, percent);
}
private static void modifySellProfit(OrderNPCMsg orderNPCMsg, ClientConnection origin) {
NPC npc;
PlayerCharacter player;
Building building;
float percent;
ProfitType profitType = null;
player = origin.getPlayerCharacter();
if (player == null)
return;
npc = NPC.getFromCache(orderNPCMsg.getNpcUUID());
if (npc == null)
return;
building = npc.getBuilding();
if (building == null)
return;
NPCProfits profit = NPC.GetNPCProfits(npc);
if (profit == null)
return;
switch (orderNPCMsg.getActionType()) {
case 7:
profitType = ProfitType.SellNormal;
break;
case 8:
profitType = ProfitType.SellGuild;
break;
case 9:
profitType = ProfitType.SellNation;
}
percent = orderNPCMsg.getBuySellPercent();
percent -= 1f;
percent = FastMath.clamp(percent, 0.0f, 3.0f);
NPCProfits.UpdateProfits(npc, profit, profitType, percent);
}
private static void handleCityCommand(OrderNPCMsg orderNpcMsg, PlayerCharacter player) {
Building building = BuildingManager.getBuildingFromCache(orderNpcMsg.getBuildingUUID());
if (building == null)
return;
if (ManageCityAssetMsgHandler.playerCanManageNotFriends(player, building) == false)
return;
if (orderNpcMsg.getPatrolSize() >= 20)
Logger.info(player.getName() + " is attempting to add patrol points amount " + orderNpcMsg.getPatrolSize());
if (orderNpcMsg.getSentrySize() >= 20)
Logger.info(player.getName() + " is attempting to add patrol points amount " + orderNpcMsg.getSentryPoints());
if (orderNpcMsg.getPatrolPoints() != null) {
if (!AddPatrolPoints(building.getObjectUUID(), orderNpcMsg.getPatrolPoints())) {
ErrorPopupMsg.sendErrorMsg(player, "Patrol Points must be placed on city zone.");
return;
}
for (AbstractCharacter guard : building.getHirelings().keySet()) {
if (guard.getObjectType() == GameObjectType.Mob)
((Mob) guard).setPatrolPointIndex(0);
}
} else if (building.getPatrolPoints() != null)
ClearPatrolPoints(building.getObjectUUID());
if (orderNpcMsg.getSentryPoints() != null) {
AddSentryPoints(building.getObjectUUID(), orderNpcMsg.getSentryPoints());
} else if (building.getSentryPoints() != null)
ClearSentryPoints(building.getObjectUUID());
// Dispatch dispatch = Dispatch.borrow(pc, msg);
// DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
}
private static void processUpgradeNPC(PlayerCharacter player, AbstractCharacter abstractCharacter) {
Building building;
switch (abstractCharacter.getObjectType()) {
case NPC:
NPC npc = (NPC) abstractCharacter;
building = npc.getBuilding();
// Cannot upgrade an npc not within a building
if (building == null)
return;
City buildingCity = building.getCity();
if (buildingCity == null) {
npc.processUpgradeNPC(player);
return;
}
buildingCity.transactionLock.writeLock().lock();
try {
npc.processUpgradeNPC(player);
} catch (Exception e) {
Logger.error(e);
} finally {
buildingCity.transactionLock.writeLock().unlock();
}
break;
case Mob:
Mob mob = (Mob) abstractCharacter;
building = mob.building;
if (mob.building == null)
return;
City mobCity = building.getCity();
if (mobCity == null) {
mob.processUpgradeMob(player);
return;
}
mobCity.transactionLock.writeLock().lock();
try {
mob.processUpgradeMob(player);
} catch (Exception e) {
// TODO Auto-generated catch block
Logger.error(e);
} finally {
mobCity.transactionLock.writeLock().unlock();
}
break;
}
}
private static synchronized void processRedeedNPC(AbstractCharacter abstractCharacter, Building building, ClientConnection origin) {
// Member variable declaration
switch (abstractCharacter.getObjectType()) {
case NPC:
NPC npc = (NPC) abstractCharacter;
Building cityBuilding = npc.getBuilding();
if (cityBuilding == null)
return;
NPC.processRedeedNPC(npc, npc.building, origin);
break;
case Mob:
Mob mob = (Mob) abstractCharacter;
processRedeedMob(mob, mob.building, origin);
break;
}
}
private static boolean AddPatrolPoints(int buildingID, ArrayList<Vector3fImmutable> patrolPoints) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
Zone zone = building.getParentZone();
if (zone == null)
return false;
if (zone.getPlayerCityUUID() == 0)
return false;
City city = building.getCity();
if (city == null)
return false;
//clear first.
for (Vector3fImmutable point : patrolPoints) {
if (city.isLocationOnCityZone(point) == false) {
return false;
}
}
DbManager.BuildingQueries.CLEAR_PATROL(buildingID);
for (Vector3fImmutable point : patrolPoints) {
if (!DbManager.BuildingQueries.ADD_TO_PATROL(buildingID, point))
return false;
}
building.patrolPoints = patrolPoints;
return true;
}
private static boolean AddSentryPoints(int buildingID, ArrayList<Vector3fImmutable> sentryPoints) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
building.sentryPoints = sentryPoints;
return true;
}
private static boolean ClearPatrolPoints(int buildingID) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
if (building.patrolPoints == null)
return true;
if (DbManager.BuildingQueries.CLEAR_PATROL(buildingID) == false)
return false;
building.patrolPoints.clear();
return true;
}
private static boolean ClearSentryPoints(int buildingID) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
if (building.sentryPoints == null)
return true;
building.sentryPoints.clear();
return true;
}
@Override
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
@@ -274,303 +634,4 @@ public class OrderNPCMsgHandler extends AbstractClientMsgHandler {
return true;
}
private static void modifyBuyProfit(OrderNPCMsg msg, ClientConnection origin) {
NPC npc;
PlayerCharacter player;
Building building;
float percent;
ProfitType profitType = null;
player = origin.getPlayerCharacter();
if (player == null)
return;
npc = NPC.getFromCache(msg.getNpcUUID());
if (npc == null)
return;
building = npc.getBuilding();
if (building == null)
return;
NPCProfits profit = NPC.GetNPCProfits(npc);
if (profit == null)
return;
switch (msg.getActionType()) {
case 10:
profitType = ProfitType.BuyNormal;
break;
case 11:
profitType = ProfitType.BuyGuild;
break;
case 12:
profitType = ProfitType.BuyNation;
}
percent = msg.getBuySellPercent();
percent = FastMath.clamp(percent, 0.0f, 1.0f);
NPCProfits.UpdateProfits(npc, profit, profitType, percent);
}
private static void modifySellProfit(OrderNPCMsg orderNPCMsg, ClientConnection origin) {
NPC npc;
PlayerCharacter player;
Building building;
float percent;
ProfitType profitType = null;
player = origin.getPlayerCharacter();
if (player == null)
return;
npc = NPC.getFromCache(orderNPCMsg.getNpcUUID());
if (npc == null)
return;
building = npc.getBuilding();
if (building == null)
return;
NPCProfits profit = NPC.GetNPCProfits(npc);
if (profit == null)
return;
switch (orderNPCMsg.getActionType()) {
case 7:
profitType = ProfitType.SellNormal;
break;
case 8:
profitType = ProfitType.SellGuild;
break;
case 9:
profitType = ProfitType.SellNation;
}
percent = orderNPCMsg.getBuySellPercent();
percent -= 1f;
percent = FastMath.clamp(percent, 0.0f, 3.0f);
NPCProfits.UpdateProfits(npc, profit, profitType, percent);
}
private static void handleCityCommand(OrderNPCMsg orderNpcMsg, PlayerCharacter player) {
Building building = BuildingManager.getBuildingFromCache(orderNpcMsg.getBuildingUUID());
if (building == null)
return;
if (ManageCityAssetMsgHandler.playerCanManageNotFriends(player, building) == false)
return;
if (orderNpcMsg.getPatrolSize() >= 20)
Logger.info(player.getName() + " is attempting to add patrol points amount " + orderNpcMsg.getPatrolSize());
if (orderNpcMsg.getSentrySize() >= 20)
Logger.info(player.getName() + " is attempting to add patrol points amount " + orderNpcMsg.getSentryPoints());
if (orderNpcMsg.getPatrolPoints() != null) {
if ( !AddPatrolPoints(building.getObjectUUID(), orderNpcMsg.getPatrolPoints())){
ErrorPopupMsg.sendErrorMsg(player, "Patrol Points must be placed on city zone.");
return;
}
for (AbstractCharacter guard : building.getHirelings().keySet()) {
if (guard.getObjectType() == GameObjectType.Mob)
((Mob) guard).setPatrolPointIndex(0);
}
} else if (building.getPatrolPoints() != null)
ClearPatrolPoints(building.getObjectUUID());
if (orderNpcMsg.getSentryPoints() != null) {
AddSentryPoints(building.getObjectUUID(), orderNpcMsg.getSentryPoints());
} else if (building.getSentryPoints() != null)
ClearSentryPoints(building.getObjectUUID());
// Dispatch dispatch = Dispatch.borrow(pc, msg);
// DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
}
private static void processUpgradeNPC(PlayerCharacter player, AbstractCharacter abstractCharacter) {
Building building;
switch (abstractCharacter.getObjectType()) {
case NPC:
NPC npc = (NPC) abstractCharacter;
building = npc.getBuilding();
// Cannot upgrade an npc not within a building
if (building == null)
return;
City buildingCity = building.getCity();
if (buildingCity == null) {
npc.processUpgradeNPC(player);
return;
}
buildingCity.transactionLock.writeLock().lock();
try {
npc.processUpgradeNPC(player);
} catch (Exception e) {
Logger.error(e);
} finally {
buildingCity.transactionLock.writeLock().unlock();
}
break;
case Mob:
Mob mob = (Mob) abstractCharacter;
building = mob.building;
if (mob.building == null)
return;
City mobCity = building.getCity();
if (mobCity == null) {
mob.processUpgradeMob(player);
return;
}
mobCity.transactionLock.writeLock().lock();
try {
mob.processUpgradeMob(player);
} catch (Exception e) {
// TODO Auto-generated catch block
Logger.error(e);
} finally {
mobCity.transactionLock.writeLock().unlock();
}
break;
}
}
private synchronized void processRedeedNPC(AbstractCharacter abstractCharacter, Building building, ClientConnection origin) {
// Member variable declaration
switch (abstractCharacter.getObjectType()) {
case NPC:
NPC npc = (NPC) abstractCharacter;
Building cityBuilding = npc.getBuilding();
if (cityBuilding == null)
return;
npc.processRedeedNPC(origin);
break;
case Mob:
Mob mob = (Mob) abstractCharacter;
mob.processRedeedMob(origin);
break;
}
}
private static boolean AddPatrolPoints(int buildingID, ArrayList<Vector3fImmutable> patrolPoints) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
Zone zone = building.getParentZone();
if (zone == null)
return false;
if (zone.getPlayerCityUUID() == 0)
return false;
City city = building.getCity();
if (city == null)
return false;
//clear first.
for (Vector3fImmutable point : patrolPoints) {
if (city.isLocationOnCityZone(point) == false){
return false;
}
}
DbManager.BuildingQueries.CLEAR_PATROL(buildingID);
for (Vector3fImmutable point : patrolPoints) {
if (!DbManager.BuildingQueries.ADD_TO_PATROL(buildingID, point))
return false;
}
building.patrolPoints = patrolPoints;
return true;
}
private static boolean AddSentryPoints(int buildingID, ArrayList<Vector3fImmutable> sentryPoints) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
building.sentryPoints = sentryPoints;
return true;
}
private static boolean ClearPatrolPoints(int buildingID) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
if (building.patrolPoints == null)
return true;
if (DbManager.BuildingQueries.CLEAR_PATROL(buildingID) == false)
return false;
building.patrolPoints.clear();
return true;
}
private static boolean ClearSentryPoints(int buildingID) {
Building building = BuildingManager.getBuildingFromCache(buildingID);
if (building == null)
return false;
if (building.sentryPoints == null)
return true;
building.sentryPoints.clear();
return true;
}
}