@ -16,6 +16,8 @@ import engine.objects.PlayerCharacter;
				@@ -16,6 +16,8 @@ import engine.objects.PlayerCharacter;
					 
			
		
	
		
			
				
					import  engine.server.MBServerStatics ;  
			
		
	
		
			
				
					import  org.pmw.tinylog.Logger ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					import  java.sql.Connection ;  
			
		
	
		
			
				
					import  java.sql.PreparedStatement ;  
			
		
	
		
			
				
					import  java.sql.ResultSet ;  
			
		
	
		
			
				
					import  java.sql.SQLException ;  
			
		
	
		
			
				
					import  java.util.concurrent.ConcurrentHashMap ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -28,86 +30,143 @@ public class dbCharacterPowerHandler extends dbHandlerBase {
				@@ -28,86 +30,143 @@ public class dbCharacterPowerHandler extends dbHandlerBase {
					 
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  CharacterPower  ADD_CHARACTER_POWER ( CharacterPower  toAdd )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							CharacterPower  characterPower  =  null ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( CharacterPower . getOwner ( toAdd )  = =  null  | |  toAdd . getPower ( )  = =  null )  {   
			
		
	
		
			
				
								Logger . error ( "dbCharacterSkillHandler.ADD_Power" ,  toAdd . getObjectUUID ( )  +  " missing owner or powersBase" ) ;   
			
		
	
		
			
				
								return  null ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							prepareCallable ( "INSERT INTO `dyn_character_power` (`CharacterID`, `powersBaseToken`, `trains`) VALUES (?, ?, ?);" ) ;   
			
		
	
		
			
				
							setLong ( 1 ,  ( long ) CharacterPower . getOwner ( toAdd ) . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
							setInt ( 2 ,  toAdd . getPower ( ) . getToken ( ) ) ;   
			
		
	
		
			
				
							setInt ( 3 ,  toAdd . getTrains ( ) ) ;   
			
		
	
		
			
				
							int  powerID  =  insertGetUUID ( ) ;   
			
		
	
		
			
				
							return  GET_CHARACTER_POWER ( powerID ) ;   
			
		
	
		
			
				
							try  ( Connection  connection  =  DbManager . getConnection ( ) ;   
			
		
	
		
			
				
								 PreparedStatement  preparedStatement  =  connection . prepareStatement ( "INSERT INTO `dyn_character_power` (`CharacterID`, `powersBaseToken`, `trains`) VALUES (?, ?, ?);" ) )  {    
			
		
	
		
			
				
					
  
			
		
	
		
			
				
								preparedStatement . setLong ( 1 ,  CharacterPower . getOwner ( toAdd ) . getObjectUUID  ( ) ) ;   
			
		
	
		
			
				
								preparedStatement . setInt ( 2 ,  toAdd . getPower ( ) . getToken ( )  ) ;   
			
		
	
		
			
				
								preparedStatement . setInt ( 3 ,  toAdd . getTrains ( )  ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								preparedStatement . executeUpdate ( ) ;   
			
		
	
		
			
				
								ResultSet  rs  =  preparedStatement . getGeneratedKeys ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								if  ( rs . next ( ) )   
			
		
	
		
			
				
									characterPower  =  GET_CHARACTER_POWER ( rs . getInt ( 1 ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							}  catch  ( SQLException  e )  {   
			
		
	
		
			
				
								Logger . error ( e ) ;   
			
		
	
		
			
				
								return  null ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
							return  characterPower ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  int  DELETE_CHARACTER_POWER ( final  int  objectUUID )  {   
			
		
	
		
			
				
							prepareCallable ( "DELETE FROM `dyn_character_power` WHERE `UID` = ?" ) ;   
			
		
	
		
			
				
							setLong ( 1 ,  ( long ) objectUUID ) ;   
			
		
	
		
			
				
							return  executeUpdate ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							int  rowCount  =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							try  ( Connection  connection  =  DbManager . getConnection ( ) ;   
			
		
	
		
			
				
								 PreparedStatement  preparedStatement  =  connection . prepareStatement ( "DELETE FROM `dyn_character_power` WHERE `UID` = ?" ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								preparedStatement . setLong ( 1 ,  objectUUID ) ;   
			
		
	
		
			
				
								rowCount  =  preparedStatement . executeUpdate ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							}  catch  ( SQLException  e )  {   
			
		
	
		
			
				
								Logger . error ( e ) ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							return  rowCount ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  CharacterPower  GET_CHARACTER_POWER ( int  objectUUID )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							CharacterPower  cp  =  ( CharacterPower )  DbManager . getFromCache ( Enum . GameObjectType . CharacterPower ,  objectUUID ) ;   
			
		
	
		
			
				
							if  ( cp  ! =  null )   
			
		
	
		
			
				
								return  cp ;   
			
		
	
		
			
				
							prepareCallable ( "SELECT * FROM `dyn_character_power` WHERE `UID` = ?" ) ;   
			
		
	
		
			
				
							setLong ( 1 ,  ( long ) objectUUID ) ;   
			
		
	
		
			
				
							return  ( CharacterPower )  getObjectSingle ( objectUUID ) ;   
			
		
	
		
			
				
							CharacterPower  characterPower  =  ( CharacterPower )  DbManager . getFromCache ( Enum . GameObjectType . CharacterPower ,  objectUUID ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( characterPower  ! =  null )   
			
		
	
		
			
				
								return  characterPower ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							try  ( Connection  connection  =  DbManager . getConnection ( ) ;   
			
		
	
		
			
				
								 PreparedStatement  preparedStatement  =  connection . prepareStatement ( "SELECT * FROM `dyn_character_power` WHERE `UID` = ?" ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								preparedStatement . setLong ( 1 ,  objectUUID ) ;   
			
		
	
		
			
				
								ResultSet  rs  =  preparedStatement . executeQuery ( ) ;   
			
		
	
		
			
				
								characterPower  =  ( CharacterPower )  getObjectFromRs ( rs ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							}  catch  ( SQLException  e )  {   
			
		
	
		
			
				
								Logger . error ( e ) ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							return  characterPower ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  ConcurrentHashMap < Integer ,  CharacterPower >  GET_POWERS_FOR_CHARACTER ( PlayerCharacter  pc )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							ConcurrentHashMap < Integer ,  CharacterPower >  powers  =  new  ConcurrentHashMap < > ( MBServerStatics . CHM_INIT_CAP ,  MBServerStatics . CHM_LOAD ,  MBServerStatics . CHM_THREAD_LOW ) ;   
			
		
	
		
			
				
							int  objectUUID  =  pc . getObjectUUID ( ) ;   
			
		
	
		
			
				
							prepareCallable ( "SELECT * FROM `dyn_character_power` WHERE CharacterID = ?" ) ;   
			
		
	
		
			
				
							setLong ( 1 ,  ( long ) objectUUID ) ;   
			
		
	
		
			
				
							ResultSet  rs  =  executeQuery ( ) ;   
			
		
	
		
			
				
							try  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							try  ( Connection  connection  =  DbManager . getConnection ( ) ;   
			
		
	
		
			
				
								 PreparedStatement  preparedStatement  =  connection . prepareStatement ( "SELECT * FROM `dyn_character_power` WHERE CharacterID = ?" ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								preparedStatement . setLong ( 1 ,  ( long )  objectUUID ) ;   
			
		
	
		
			
				
								ResultSet  rs  =  preparedStatement . executeQuery ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								while  ( rs . next ( ) )  {   
			
		
	
		
			
				
									CharacterPower  cp  =  new  CharacterPower ( rs ,  pc ) ;   
			
		
	
		
			
				
									if  ( cp . getPower ( )  ! =  null )   
			
		
	
		
			
				
										powers . put ( cp . getPower ( ) . getToken ( ) ,  cp ) ;   
			
		
	
		
			
				
								}   
			
		
	
		
			
				
								rs . close ( ) ;   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
							}  catch  ( SQLException  e )  {   
			
		
	
		
			
				
								Logger . error ( "CharacterPower.getCharacterPowerForCharacter" ,  "Exception:"  +  e . getMessage ( ) ) ;   
			
		
	
		
			
				
							}  finally  {   
			
		
	
		
			
				
								closeCallable ( ) ;   
			
		
	
		
			
				
								Logger . error ( e ) ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							return  powers ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  void  UPDATE_TRAINS ( final  CharacterPower  pow )  {   
			
		
	
		
			
				
						public  void  UPDATE_TRAINS ( final  CharacterPower  characterPower )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							//skip update if nothing changed
   
			
		
	
		
			
				
							if  ( ! pow . isTrained ( ) )   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( ! characterPower . isTrained ( ) )   
			
		
	
		
			
				
								return ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							prepareCallable ( "UPDATE `dyn_character_power` SET `trains`=? WHERE `UID`=?" ) ;   
			
		
	
		
			
				
							setShort ( 1 ,  ( short ) pow . getTrains ( ) ) ;   
			
		
	
		
			
				
							setInt ( 2 ,  pow . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
							executeUpdate ( ) ;   
			
		
	
		
			
				
							pow . setTrained ( false ) ;   
			
		
	
		
			
				
							try  ( Connection  connection  =  DbManager . getConnection ( ) ;   
			
		
	
		
			
				
								 PreparedStatement  preparedStatement  =  connection . prepareStatement ( "UPDATE `dyn_character_power` SET `trains`=? WHERE `UID`=?" ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								preparedStatement . setShort ( 1 ,  ( short )  characterPower . getTrains ( ) ) ;   
			
		
	
		
			
				
								preparedStatement . setInt ( 2 ,  characterPower . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								preparedStatement . execute ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							}  catch  ( SQLException  e )  {   
			
		
	
		
			
				
								Logger . error ( e ) ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							characterPower . setTrained ( false ) ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						public  void  updateDatabase ( final  CharacterPower  pow )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( pow . getPower ( )  = =  null )  {   
			
		
	
		
			
				
								Logger . error (  "Failed to find powersBase for Power "  +  pow . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
								Logger . error ( "Failed to find powersBase for Power "  +  pow . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
								return ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( CharacterPower . getOwner ( pow )  = =  null )  {   
			
		
	
		
			
				
								Logger . error (   "Failed to find owner for Power "  +  pow . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
								Logger . error ( "Failed to find owner for Power "  +  pow . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
								return ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							try  ( Connection  connection  =  DbManager . getConnection ( ) ;   
			
		
	
		
			
				
								 PreparedStatement  preparedStatement  =  connection . prepareStatement ( "UPDATE `dyn_character_power` SET `PowersBaseToken`=?, `CharacterID`=?, `trains`=? WHERE `UID`=?" ) )  {   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
								preparedStatement . setInt ( 1 ,  pow . getPower ( ) . getToken ( ) ) ;   
			
		
	
		
			
				
								preparedStatement . setInt ( 2 ,  CharacterPower . getOwner ( pow ) . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
								preparedStatement . setShort ( 3 ,  ( short )  pow . getTrains ( ) ) ;   
			
		
	
		
			
				
								preparedStatement . setInt ( 4 ,  pow . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
								preparedStatement . execute ( ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							}  catch  ( SQLException  e )  {   
			
		
	
		
			
				
								Logger . error ( e ) ;   
			
		
	
		
			
				
							}   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							prepareCallable ( "UPDATE `dyn_character_power` SET `PowersBaseToken`=?, `CharacterID`=?, `trains`=? WHERE `UID`=?" ) ;   
			
		
	
		
			
				
							setInt ( 1 ,  pow . getPower ( ) . getToken ( ) ) ;   
			
		
	
		
			
				
							setInt ( 2 ,  CharacterPower . getOwner ( pow ) . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
							setShort ( 3 ,  ( short ) pow . getTrains ( ) ) ;   
			
		
	
		
			
				
							setInt ( 4 ,  pow . getObjectUUID ( ) ) ;   
			
		
	
		
			
				
							executeUpdate ( ) ;   
			
		
	
		
			
				
							pow . setTrained ( false ) ;   
			
		
	
		
			
				
						}   
			
		
	
		
			
				
					}