@ -62,7 +62,6 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler {
@@ -62,7 +62,6 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler {
Building building ;
msg = ( ManageCityAssetsMsg ) baseMsg ;
player = SessionManager . getPlayerCharacter ( origin ) ;
if ( player = = null )
@ -72,34 +71,21 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler {
@@ -72,34 +71,21 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler {
if ( building = = null ) {
if ( msg . actionType = = 14 ) {
Zone zone = ZoneManager . findSmallestZone ( player . getLoc ( ) ) ;
if ( ! zone . isPlayerCity ( ) ) {
ErrorPopupMsg . sendErrorMsg ( player , "Unable to find city to command." ) ;
return true ;
}
City city = City . GetCityFromCache ( zone . getPlayerCityUUID ( ) ) ;
if ( city = = null ) {
ErrorPopupMsg . sendErrorMsg ( player , "Unable to find city to command." ) ;
return true ;
}
if ( ! city . getGuild ( ) . equals ( player . getGuild ( ) ) ) {
if ( city = = null | | ! city . getGuild ( ) . equals ( player . getGuild ( ) ) | |
( ! GuildStatusController . isInnerCouncil ( player . getGuildStatus ( ) ) & &
! GuildStatusController . isGuildLeader ( player . getGuildStatus ( ) ) ) ) {
ErrorPopupMsg . sendErrorMsg ( player , "You are not in the correct guild to command this city." ) ;
return true ;
}
if ( ! GuildStatusController . isInnerCouncil ( player . getGuildStatus ( ) ) & & ! GuildStatusController . isGuildLeader ( player . getGuildStatus ( ) ) ) {
ErrorPopupMsg . sendErrorMsg ( player , "You must be an Inner Council or Guild leader to access city commands." ) ;
return true ;
}
ManageCityAssetsMsg mca = new ManageCityAssetsMsg ( player , building ) ;
mca . actionType = 15 ;
Dispatch dispatch = Dispatch . borrow ( player , mca ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , mca ) , DispatchChannel . SECONDARY ) ;
}
return true ;
}
@ -111,181 +97,118 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler {
@@ -111,181 +97,118 @@ public class ManageCityAssetMsgHandler extends AbstractClientMsgHandler {
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
outMsg . setAssetName ( building . getName ( ) ) ;
Dispatch dispatch = Dispatch . borrow ( player , outMsg ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , outMsg ) , DispatchChannel . SECONDARY ) ;
return true ;
}
if ( msg . actionType = = 2 | | msg . actionType = = 22 ) {
if ( building . getBlueprint ( ) ! = null & & building . getBlueprint ( ) . getBuildingGroup ( ) = = engine . Enum . BuildingGroup . BANESTONE ) {
outMsg . actionType = 18 ;
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
} else if ( BuildingManager . playerCanManage ( player , building ) ) { //TODO allow Friends list.
configWindowState ( player , building , outMsg ) ;
outMsg . actionType = 3 ;
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
outMsg . setTargetType3 ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID3 ( building . getObjectUUID ( ) ) ;
outMsg . setUnknown54 ( 1 ) ;
} else {
if ( building . getBlueprintUUID ( ) ! = 0 )
switch ( building . getBlueprint ( ) . getBuildingGroup ( ) ) {
case SHRINE :
if ( building . getRank ( ) = = - 1 ) {
if ( ! Bounds . collide ( player . getLoc ( ) , building ) ) {
ErrorPopupMsg . sendErrorPopup ( player , 64 ) ;
return true ;
}
switch ( msg . actionType ) {
case 2 :
case 22 :
if ( building . getBlueprint ( ) ! = null & & building . getBlueprint ( ) . getBuildingGroup ( ) = = engine . Enum . BuildingGroup . BANESTONE ) {
outMsg . actionType = 18 ;
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
} else if ( BuildingManager . playerCanManage ( player , building ) ) {
configWindowState ( player , building , outMsg ) ;
outMsg . actionType = 3 ;
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
outMsg . setTargetType3 ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID3 ( building . getObjectUUID ( ) ) ;
outMsg . setUnknown54 ( 1 ) ;
} else {
// Handle other cases
if ( building . getRank ( ) = = - 1 ) {
if ( ! Bounds . collide ( player . getLoc ( ) , building ) ) {
ErrorPopupMsg . sendErrorPopup ( player , 64 ) ;
return true ;
}
switch ( building . getBlueprint ( ) . getBuildingGroup ( ) ) {
case SHRINE :
Shrine shrine = Shrine . shrinesByBuildingUUID . get ( building . getObjectUUID ( ) ) ;
if ( shrine = = null )
return true ;
if ( shrine . getFavors ( ) = = 0 ) {
if ( shrine = = null | | shrine . getFavors ( ) = = 0 ) {
ErrorPopupMsg . sendErrorPopup ( player , 166 ) ; // There is no more favor in this shrine to loot
return true ;
}
BuildingManager . lootBuilding ( player , building ) ;
return true ;
}
break ;
case WAREHOUSE :
//TODO check
if ( building . getRank ( ) = = - 1 ) {
if ( ! Bounds . collide ( player . getLoc ( ) , building ) ) {
ErrorPopupMsg . sendErrorPopup ( player , 64 ) ;
return true ;
}
break ;
case WAREHOUSE :
Warehouse warehouse = Warehouse . warehouseByBuildingUUID . get ( building . getObjectUUID ( ) ) ;
if ( warehouse = = null )
return true ;
if ( warehouse . isEmpty ( ) ) {
if ( warehouse = = null | | warehouse . isEmpty ( ) ) {
ErrorPopupMsg . sendErrorPopup ( player , 167 ) ; // no more resources.
return true ;
}
BuildingManager . lootBuilding ( player , building ) ;
return true ;
}
break ;
}
}
AbstractCharacter owner = building . getOwner ( ) ;
if ( owner = = null ) {
msg . actionType = 4 ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , msg ) , DispatchChannel . SECONDARY ) ;
} else {
outMsg . actionType = 4 ;
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
outMsg . setAssetName ( building . getName ( ) ) ;
}
if ( building . getRank ( ) = = - 1 )
return true ;
AbstractCharacter owner = building . getOwner ( ) ;
//no owner, send building info
if ( owner = = null ) {
msg . actionType = 4 ;
Dispatch dispatch = Dispatch . borrow ( player , msg ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
return true ;
}
outMsg . actionType = 4 ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , outMsg ) , DispatchChannel . SECONDARY ) ;
return true ;
case 13 :
outMsg . actionType = 13 ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , outMsg ) , DispatchChannel . SECONDARY ) ;
return true ;
case 5 :
building . setName ( msg . getAssetName ( ) ) ;
configWindowState ( player , building , outMsg ) ;
outMsg . actionType = 3 ;
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
outMsg . setAssetName ( building . getName ( ) ) ;
}
Dispatch dispatch = Dispatch . borrow ( player , outMsg ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
return true ;
outMsg . setTargetType3 ( GameObjectType . Building . ordinal ( ) ) ;
outMsg . setTargetID3 ( building . getObjectUUID ( ) ) ;
outMsg . setAssetName1 ( building . getName ( ) ) ;
outMsg . setUnknown54 ( 1 ) ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , outMsg ) , DispatchChannel . SECONDARY ) ;
return true ;
case 14 :
ManageCityAssetsMsg mca = new ManageCityAssetsMsg ( player , building ) ;
mca . actionType = 15 ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , mca ) , DispatchChannel . SECONDARY ) ;
return true ;
case 20 :
// Handle case 20
return handleCase20 ( player , outMsg , building , msg , origin ) ;
default :
return true ;
}
}
if ( msg . actionType = = 13 ) {
outMsg . actionType = 13 ;
Dispatch dispatch = Dispatch . borrow ( player , outMsg ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
private boolean handleCase20 ( PlayerCharacter player , ManageCityAssetsMsg outMsg , Building building , ManageCityAssetsMsg msg , ClientConnection origin ) throws MsgSendException {
Zone baneZone = building . getParentZone ( ) ;
if ( baneZone = = null )
return true ;
}
//Rename Building.
if ( msg . actionType = = 5 ) {
//TODO we need to check names before allowing
building . setName ( msg . getAssetName ( ) ) ;
configWindowState ( player , building , outMsg ) ;
outMsg . actionType = 3 ;
outMsg . setTargetType ( building . getObjectType ( ) . ordinal ( ) ) ;
outMsg . setTargetID ( building . getObjectUUID ( ) ) ;
outMsg . setTargetType3 ( GameObjectType . Building . ordinal ( ) ) ;
outMsg . setTargetID3 ( building . getObjectUUID ( ) ) ;
outMsg . setAssetName1 ( building . getName ( ) ) ;
outMsg . setUnknown54 ( 1 ) ;
Dispatch dispatch = Dispatch . borrow ( player , outMsg ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
City banedCity = City . getCity ( baneZone . getPlayerCityUUID ( ) ) ;
if ( banedCity = = null )
return true ;
//TOL, update city name also
//TODO update city and zone in database
//TODO update city map data in game server
}
if ( msg . actionType = = 14 ) {
ManageCityAssetsMsg mca = new ManageCityAssetsMsg ( player , building ) ;
mca . actionType = 15 ;
Dispatch dispatch = Dispatch . borrow ( player , mca ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
Bane bane = banedCity . getBane ( ) ;
if ( bane = = null | | bane . getLiveDate ( ) ! = null | | player . getGuild ( ) ! = banedCity . getGuild ( ) | | ! GuildStatusController . isInnerCouncil ( player . getGuildStatus ( ) ) )
return true ;
}
if ( msg . actionType = = 20 ) {
Zone baneZone = building . getParentZone ( ) ;
if ( baneZone = = null )
return true ;
City banedCity = City . getCity ( baneZone . getPlayerCityUUID ( ) ) ;
if ( banedCity = = null )
return true ;
Bane bane = banedCity . getBane ( ) ;
if ( bane = = null | | bane . getLiveDate ( ) ! = null | | player . getGuild ( ) ! = banedCity . getGuild ( ) | | GuildStatusController . isInnerCouncil ( player . getGuildStatus ( ) ) = = false )
return true ;
int baneHour = msg . getBaneHour ( ) ;
if ( baneHour < 16 | | baneHour > 24 ) {
PlaceAssetMsg . sendPlaceAssetError ( origin , 1 , "A Serious error has occurred. Please post details for to ensure transaction integrity" ) ;
return true ;
}
DateTime baneLive = new DateTime ( bane . getPlacementDate ( ) ) ;
baneLive = baneHour = = 24 ? baneLive . plusDays ( 3 ) : baneLive . plusDays ( 2 ) ;
baneLive = baneHour = = 24 ? baneLive . hourOfDay ( ) . setCopy ( 0 ) : baneLive . hourOfDay ( ) . setCopy ( baneHour ) ;
baneLive = baneLive . minuteOfHour ( ) . setCopy ( 0 ) ;
baneLive = baneLive . secondOfMinute ( ) . setCopy ( 1 ) ;
bane . setLiveDate ( baneLive ) ;
outMsg . actionType = 18 ;
Dispatch dispatch = Dispatch . borrow ( player , outMsg ) ;
DispatchMessage . dispatchMsgDispatch ( dispatch , DispatchChannel . SECONDARY ) ;
int baneHour = msg . getBaneHour ( ) ;
if ( baneHour < 16 | | baneHour > 24 ) {
PlaceAssetMsg . sendPlaceAssetError ( origin , 1 , "A Serious error has occurred. Please post details for to ensure transaction integrity" ) ;
return true ;
}
DateTime baneLive = new DateTime ( bane . getPlacementDate ( ) ) ;
baneLive = baneHour = = 24 ? baneLive . plusDays ( 3 ) : baneLive . plusDays ( 2 ) ;
baneLive = baneHour = = 24 ? baneLive . hourOfDay ( ) . setCopy ( 0 ) : baneLive . hourOfDay ( ) . setCopy ( baneHour ) ;
baneLive = baneLive . minuteOfHour ( ) . setCopy ( 0 ) ;
baneLive = baneLive . secondOfMinute ( ) . setCopy ( 1 ) ;
bane . setLiveDate ( baneLive ) ;
outMsg . actionType = 18 ;
DispatchMessage . dispatchMsgDispatch ( Dispatch . borrow ( player , outMsg ) , DispatchChannel . SECONDARY ) ;
return true ;
}
public void configWindowState ( PlayerCharacter player , Building building , ManageCityAssetsMsg manageCityAssetsMsg ) {
// Tests to turn on upgrade button if a building is not