You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							120 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
	
	
							120 lines
						
					
					
						
							3.5 KiB
						
					
					
				| package engine.net.client.handlers; | |
|  | |
| import engine.exception.MsgSendException; | |
| import engine.gameManager.DbManager; | |
| import engine.gameManager.SessionManager; | |
| import engine.mbEnums.GameObjectType; | |
| import engine.net.client.ClientConnection; | |
| import engine.net.client.msg.ArcSiegeSpireMsg; | |
| import engine.net.client.msg.ClientNetMsg; | |
| import engine.net.client.msg.ErrorPopupMsg; | |
| import engine.objects.Building; | |
| import engine.objects.GuildStatusController; | |
| import engine.objects.PlayerCharacter; | |
| import org.pmw.tinylog.Logger; | |
|  | |
| /* | |
|  * @Author: | |
|  * @Summary: Processes application protocol message which requests that | |
|  * siege spires be toggled on or off. | |
|  */ | |
|  | |
| public class ArcSiegeSpireMsgHandler extends AbstractClientMsgHandler { | |
|  | |
|     public ArcSiegeSpireMsgHandler() { | |
|         super(); | |
|     } | |
|  | |
|     @Override | |
|     protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { | |
|  | |
|         PlayerCharacter player; | |
|         Building spire; | |
|         ArcSiegeSpireMsg msg; | |
|  | |
|         msg = (ArcSiegeSpireMsg) baseMsg; | |
|  | |
|         player = SessionManager.getPlayerCharacter(origin); | |
|  | |
|         if (player == null) | |
|             return true; | |
|  | |
|         spire = (Building) DbManager.getObject(GameObjectType.Building, msg.getBuildingUUID()); | |
|  | |
|         if (spire == null) | |
|             return true; | |
|  | |
|         if (spire.getCity() == null) | |
|             return true; | |
|  | |
|         spire.getCity().transactionLock.writeLock().lock(); | |
|  | |
|         try { | |
|  | |
|  | |
|             //can't activate a spire that's not rank 1. | |
|  | |
|             if (spire.getRank() < 1) | |
|                 return true; | |
|  | |
|             // can't activate a spire without a city | |
|  | |
|             if (spire.getCity() == null) | |
|                 return true; | |
|  | |
|             // Must have management authority for the spire | |
|  | |
|             if ((player.getGuild().equals(spire.getGuild()) == false) | |
|                     || (GuildStatusController.isInnerCouncil(player.getGuildStatus()) == false)) | |
|                 return true; | |
|  | |
|             // Handle case where spire is sabotaged | |
|  | |
|             if (spire.getTimeStamp("DISABLED") > System.currentTimeMillis()) { | |
|                 ErrorPopupMsg.sendErrorPopup(player, 174); //This siege spire cannot be toggled yet. | |
|                 return true; | |
|             } | |
|  | |
|             // Handle case where spire's toggle delay hasn't yet passed | |
|  | |
|             if (spire.getTimeStamp("TOGGLEDELAY") > System.currentTimeMillis()) { | |
|                 ErrorPopupMsg.sendErrorPopup(player, 174); //This siege spire cannot be toggled yet. | |
|                 return true; | |
|             } | |
|  | |
|             // This protocol message is a toggle.  If it's currently active then disable | |
|             // the spire. | |
|  | |
|             if (spire.isSpireIsActive()) { | |
|                 spire.disableSpire(false); | |
|                 return true; | |
|             } | |
|  | |
|             // Must be enough gold on the spire to turn it on | |
|  | |
|             if (!spire.hasFunds(5000)) { | |
|                 ErrorPopupMsg.sendErrorPopup(player, 127); // Not enough gold in strongbox | |
|                 return true; | |
|             } | |
|  | |
|             if (spire.getStrongboxValue() < 5000) { | |
|                 ErrorPopupMsg.sendErrorPopup(player, 127); // Not enough gold in strongbox | |
|                 return true; | |
|             } | |
|  | |
|             spire.transferGold(-5000, false); | |
|             spire.enableSpire(); | |
|  | |
|             // Spire is now enabled.  Reset the toggle delay | |
|  | |
|             spire.setTimeStamp("TOGGLEDELAY", System.currentTimeMillis() + (long) 10 * 60 * 1000); | |
|         } catch (Exception e) { | |
|             Logger.error(e); | |
|         } finally { | |
|             spire.getCity().transactionLock.writeLock().unlock(); | |
|         } | |
|         return true; | |
|  | |
|     } | |
|  | |
| }
 | |
| 
 |