@ -9,16 +9,14 @@
				@@ -9,16 +9,14 @@
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					package  engine.net.client.handlers ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.Enum ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.Enum.DispatchChannel ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.exception.MsgSendException ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.gameManager.SessionManager ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.net.Dispatch ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.net.DispatchMessage ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.net.client.ClientConnection ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.net.client.msg.BuyFromNPCMsg ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.net.client.msg.ClientNetMsg ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.net.client.msg.ErrorPopupMsg ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  engine.objects.* ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  org.pmw.tinylog.Logger ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					import  java.util.ArrayList ;  
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -39,6 +37,7 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler {
				@@ -39,6 +37,7 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        buyFromNPCMsg  =  ( BuyFromNPCMsg )  baseMsg ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        PlayerCharacter  sourcePlayer  =  SessionManager . getPlayerCharacter ( origin ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        Item  vendorItem ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        if  ( sourcePlayer  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            return  true ;   
				
			 
			
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
				 
				 
				
					@ -61,21 +60,15 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler {
				@@ -61,21 +60,15 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( gold  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                Item  buy  =  Item . getFromCache ( buyFromNPCMsg . getItemID ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                ArrayList < Item >  sellInventory  =  npc . getContract ( ) . getSellInventory ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( bu y  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( sellInventor y  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( buyFromNPCMsg . getItemType ( )  = =  Enum . GameObjectType . Item . ordinal ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    ArrayList < Item >  sellInventory  =  npc . getContract ( ) . getSellInventory ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( sellInventory  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( buyFromNPCMsg . getItemID ( )  <  0 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    for  ( Item  me  :  sellInventory )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        if  ( me . templateID  = =  buy . templateID )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        if  ( me . objectUUID  = =  buyFromNPCMsg . getItemID ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            //test room available for item
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            if  ( ! itemMan . hasRoomInventory ( me . template . item_wt ) )   
				
			 
			
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
				 
				 
				
					@ -115,150 +108,82 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler {
				@@ -115,150 +108,82 @@ public class BuyFromNPCMsgHandler extends AbstractClientMsgHandler {
					 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                                return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            buy   =  Item . createItemForPlayer ( sourcePlayer ,  me . templateID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            vendorItem   =  Item . createItemForPlayer ( sourcePlayer ,  me . templateID ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            if  ( buy   ! =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                             //   me.transferEnchants(buy);
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                                itemMan . addItemToInventory ( buy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            if  ( vendorItem   ! =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                                 //   me.transferEnchants(buy);
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                                itemMan . addItemToInventory ( vendorItem ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                                //itemMan.updateInventory();
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }  else  if  ( buyFromNPCMsg . getItemType ( )  = =  Enum . GameObjectType . Item . ordinal ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    CharacterItemManager  npcCim  =  npc . charItemManager ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( npcCim  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    buy  =  Item . getFromCache ( buyFromNPCMsg . getItemID ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( buy  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( ! npcCim . inventoryContains ( buy ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //test room available for item
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( ! itemMan . hasRoomInventory ( buy . template . item_wt ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //TODO test cost and subtract goldItem
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //TODO CHnage this if we ever put NPc city npcs in buildings.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    int  cost  =  buy . template . item_value ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( buy . flags . contains ( Enum . ItemFlags . Identified )  | |  buy . isCustomValue ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        cost  =  buy . getMagicValue ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    float  bargain  =  sourcePlayer . getBargain ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    float  profit  =  npc . getSellPercent ( sourcePlayer )  -  bargain ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( profit  <  1 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        profit  =  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( ! buy . isCustomValue ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        cost  * =  profit ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        cost  =  buy . getValue ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( gold . getNumOfItems ( )  -  cost  <  0 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  128 ) ;   // Insufficient Gold
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    Building  building  =  ( ! npc . isStatic ( ) )  ?  npc . getBuilding ( )  :  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( building  ! =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        if  ( building . getProtectionState ( ) . equals ( Enum . ProtectionState . NPC ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                            building  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    int  buildingDeposit  =  cost ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( building  ! =  null  & &  ( building . getStrongboxValue ( )  +  buildingDeposit )  >  building . getMaxGold ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  206 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( ! itemMan . buyFromNPC ( building ,  cost ,  buildingDeposit ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  110 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                CharacterItemManager  npcCim  =  npc . charItemManager ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                     if  ( buy  ! =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        itemMan . buyFromNPC ( buy ,  npc )  ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( npcCim  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }  else  if  ( buyFromNPCMsg . getItemType ( )  = =  Enum . GameObjectType . MobLoot . ordinal ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                vendorItem  =  Item . getFromCache ( buyFromNPCMsg . getItemID ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    CharacterItemManager  npcCim  =  npc . charItemManager ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( vendorItem  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( npcCim  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                //test room available for item
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    buy  =  MobLoot . getFromCache ( buyFromNPCMsg . getItemID ( ) ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( ! itemMan . hasRoomInventory ( vendorItem . template . item_wt ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( buy  = =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                int  cost  =  vendorItem . template . item_value ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                     if  ( ! npcCim . inventoryContains ( buy ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true  ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( vendorItem . flags . contains ( Enum . ItemFlags . Identified )  | |  vendorItem . isCustomValue ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    cost  =  vendorItem . getMagicValue ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //test room available for item
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( ! itemMan . hasRoomInventory ( buy . template . item_wt ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  bargain  =  sourcePlayer . getBargain ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //TODO test cost and subtract goldItem
    
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                float  profit  =  npc . getSellPercent ( sourcePlayer )  -  bargain ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //TODO CHnage this if we ever put NPc city npcs in buildings.
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( profit  <  1 )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    profit  =  1 ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    int  cost  =  buy . getMagicValue ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    cost  * =  npc . getSellPercent ( sourcePlayer ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( ! vendorItem . isCustomValue ( ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    cost  * =  profit ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    cost  =  vendorItem . getValue ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( gold . getNumOfItems ( )  -  cost  <  0 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                         ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  128 ) ;   // Insufficient Gold
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                         return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                     }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( gold . getNumOfItems ( )  -  cost  <  0 )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  128 ) ;   // Insufficient Gold
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                     Building  building  =  ( ! npc . isStatic ( ) )  ?  npc . getBuilding ( )  :  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                Building  building  =  ( ! npc . isStatic ( ) )  ?  npc . getBuilding ( )  :  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( building  ! =  null  & &  building . getProtectionState ( ) . equals ( Enum . ProtectionState . NPC ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( building  ! =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( building . getProtectionState ( ) . equals ( Enum . ProtectionState . NPC ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        building  =  null ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    int  buildingDeposit  =  cost ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( building  ! =  null  & &  ( building . getStrongboxValue ( )  +  buildingDeposit )  >  building . getMaxGold ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  206 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( ! itemMan . buyFromNPC ( building ,  cost ,  buildingDeposit ) )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                int  buildingDeposit  =  cost ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    if  ( buy  ! =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                        itemMan . buyFromNPC ( buy ,  npc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }  else   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( building  ! =  null  & &  ( building . getStrongboxValue ( )  +  buildingDeposit )  >  building . getMaxGold ( ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  206 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( buy  ! =  null )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    buyFromNPCMsg . setItem ( buy ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //send the buy message back to update player
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //					msg.setItemType(buy.getObjectType().ordinal());
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    //					msg.setItemID(buy.getObjectUUID());
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    Dispatch  dispatch  =  Dispatch . borrow ( sourcePlayer ,  buyFromNPCMsg ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    DispatchMessage . dispatchMsgDispatch ( dispatch ,  DispatchChannel . SECONDARY ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    itemMan . updateInventory ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( ! itemMan . buyFromNPC ( building ,  cost ,  buildingDeposit ) )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    ErrorPopupMsg . sendErrorPopup ( sourcePlayer ,  110 ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                if  ( vendorItem  ! =  null )   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                    itemMan . buyFromNPC ( vendorItem ,  npc ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }  catch  ( Exception  e )  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                Logger . error ( e ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }  finally  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					                origin . buyLock . unlock ( ) ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }  else  {   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					            ErrorPopupMsg . sendErrorPopup ( origin . getPlayerCharacter ( ) ,  12 ) ;  // All production slots taken
   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					        return  true ;   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					    }   
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					
 
				
			 
			
		
	
		
			
				
					 
					 
				
				 
				 
				
					}