|  |  | @ -28,6 +28,7 @@ import engine.net.client.msg.*; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.net.client.msg.chat.AbstractChatMsg; |  |  |  | import engine.net.client.msg.chat.AbstractChatMsg; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.net.client.msg.commands.ClientAdminCommandMsg; |  |  |  | import engine.net.client.msg.commands.ClientAdminCommandMsg; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.objects.*; |  |  |  | import engine.objects.*; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import engine.powers.effectmodifiers.AbstractEffectModifier; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.server.MBServerStatics; |  |  |  | import engine.server.MBServerStatics; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.server.world.WorldServer; |  |  |  | import engine.server.world.WorldServer; | 
			
		
	
		
		
			
				
					
					|  |  |  | import engine.session.Session; |  |  |  | import engine.session.Session; | 
			
		
	
	
		
		
			
				
					|  |  | @ -36,6 +37,7 @@ import org.pmw.tinylog.Logger; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.sql.SQLException; |  |  |  | import java.sql.SQLException; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.ArrayList; |  |  |  | import java.util.ArrayList; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | import java.util.Map; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.concurrent.ConcurrentHashMap; |  |  |  | import java.util.concurrent.ConcurrentHashMap; | 
			
		
	
		
		
			
				
					
					|  |  |  | import java.util.concurrent.ThreadLocalRandom; |  |  |  | import java.util.concurrent.ThreadLocalRandom; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -2022,10 +2024,17 @@ boolean updateCity = false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			//make sure item is damaged and not destroyed
 |  |  |  | 			//make sure item is damaged and not destroyed
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			short dur = toRepair.getDurabilityCurrent(); |  |  |  | 			short dur = toRepair.getDurabilityCurrent(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			short max = toRepair.getDurabilityMax(); |  |  |  | 			short max = toRepair.getDurabilityMax(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 			//account for durability modifications
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			if (dur >= max || dur < 1) |  |  |  | 			float durMod = toRepair.getBonusPercent(ModType.Durability,SourceType.None); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			max *= (1 + (durMod * 0.01f)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if (dur >= max || dur < 1) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				//redundancy message to clear item from window in client
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				toRepair.setDurabilityCurrent(max); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				msg.setupRepairAck(max - dur); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				dispatch = Dispatch.borrow(player, msg); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return; |  |  |  | 				return; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 			} | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			//TODO get cost to repair
 |  |  |  | 			//TODO get cost to repair
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			int cost = (int) ((max - dur) * 80.1); |  |  |  | 			int cost = (int) ((max - dur) * 80.1); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			Building b = (!npc.isStatic()) ? npc.getBuilding() : null; |  |  |  | 			Building b = (!npc.isStatic()) ? npc.getBuilding() : null; | 
			
		
	
	
		
		
			
				
					|  |  | @ -2056,14 +2065,11 @@ boolean updateCity = false; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			ugm.configure(); |  |  |  | 			ugm.configure(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			dispatch = Dispatch.borrow(player, ugm); |  |  |  | 			dispatch = Dispatch.borrow(player, ugm); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); |  |  |  | 			DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			//update durability to database
 |  |  |  | 			//update durability to database
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if (!DbManager.ItemQueries.SET_DURABILITY(toRepair, max)) |  |  |  | 			if (!DbManager.ItemQueries.SET_DURABILITY(toRepair, max)) | 
			
		
	
		
		
			
				
					
					|  |  |  | 				return; |  |  |  | 				return; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			//repair the item
 |  |  |  | 			//repair the item
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			toRepair.setDurabilityCurrent(max); |  |  |  | 			toRepair.setDurabilityCurrent(max); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			//send repair msg
 |  |  |  | 			//send repair msg
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			msg.setupRepairAck(max - dur); |  |  |  | 			msg.setupRepairAck(max - dur); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			dispatch = Dispatch.borrow(player, msg); |  |  |  | 			dispatch = Dispatch.borrow(player, msg); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |