浏览代码

Updates from Gnacik:
Fort balista fix (now message is displayed even if players clan didnt get repo)
Information about not giving item(s) via telnet, usable for debug if we use telnet to automatic giving items from webpage for example
Disallow pickup combat flag using pet, right now defenders can pickup flag and stop siege :-P
HP/MP Regen multiplier for pets
Login Server improvements. One log per day, but more descriptive.
Fix for non-linear baby pet exp
Wild Hog Cannon fix
CORE: We should remove points from clan who lose fort, not from new owner
Disable transactions in jail
Losing ownership of a fortress does not result in any loss of Clan Reputation Points.
After siege owners staying in fort, all other ppls are ported, sometimes attacker is new owner
We should despawn Mechant if GM start siege from panel
Fix for CW time display
Sometimes summon is spawned in wall if player is in Olympiad room

JIV 15 年之前
父节点
当前提交
596f38dd0b
共有 20 个文件被更改,包括 86 次插入27 次删除
  1. 9 3
      L2_GameServer/java/com/l2jserver/Config.java
  2. 3 5
      L2_GameServer/java/com/l2jserver/gameserver/lib/Log.java
  3. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/model/CursedWeapon.java
  4. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Summon.java
  5. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortBallistaInstance.java
  6. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/Fort.java
  7. 4 1
      L2_GameServer/java/com/l2jserver/gameserver/model/entity/FortSiege.java
  8. 4 0
      L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2JailZone.java
  9. 6 2
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java
  10. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestDropItem.java
  11. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPetGetItem.java
  12. 6 0
      L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/TradeRequest.java
  13. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/AllyInfo.java
  14. 1 1
      L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/PetInfo.java
  15. 2 2
      L2_GameServer/java/com/l2jserver/gameserver/skills/Formulas.java
  16. 5 0
      L2_GameServer/java/com/l2jserver/gameserver/util/Evolve.java
  17. 15 6
      L2_GameServer/java/com/l2jserver/loginserver/LoginController.java
  18. 4 0
      L2_GameServer/java/com/l2jserver/status/GameStatusThread.java
  19. 4 0
      L2_GameServer/java/config/General.properties
  20. 4 0
      L2_GameServer/java/config/NPC.properties

+ 9 - 3
L2_GameServer/java/com/l2jserver/Config.java

@@ -523,6 +523,7 @@ public final class Config
 	public static boolean ONLY_GM_ITEMS_FREE;
 	public static boolean ONLY_GM_ITEMS_FREE;
 	public static boolean JAIL_IS_PVP;
 	public static boolean JAIL_IS_PVP;
 	public static boolean JAIL_DISABLE_CHAT;
 	public static boolean JAIL_DISABLE_CHAT;
+	public static boolean JAIL_DISABLE_TRANSACTION;
 	public static boolean CUSTOM_SPAWNLIST_TABLE;
 	public static boolean CUSTOM_SPAWNLIST_TABLE;
 	public static boolean SAVE_GMSPAWN_ON_CUSTOM;
 	public static boolean SAVE_GMSPAWN_ON_CUSTOM;
 	public static boolean DELETE_GMSPAWN_ON_CUSTOM;
 	public static boolean DELETE_GMSPAWN_ON_CUSTOM;
@@ -674,8 +675,10 @@ public final class Config
 	public static int GRAND_CHAOS_TIME;
 	public static int GRAND_CHAOS_TIME;
 	public static int MINION_CHAOS_TIME;
 	public static int MINION_CHAOS_TIME;
 	public static int INVENTORY_MAXIMUM_PET;
 	public static int INVENTORY_MAXIMUM_PET;
-
-
+	public static double PET_HP_REGEN_MULTIPLIER;
+	public static double PET_MP_REGEN_MULTIPLIER;
+	
+	
 	//--------------------------------------------------
 	//--------------------------------------------------
 	// PvP Settings
 	// PvP Settings
 	//--------------------------------------------------
 	//--------------------------------------------------
@@ -1163,7 +1166,7 @@ public final class Config
 					ALT_STRICT_SEVENSIGNS = Boolean.parseBoolean(Feature.getProperty("StrictSevenSigns", "True"));
 					ALT_STRICT_SEVENSIGNS = Boolean.parseBoolean(Feature.getProperty("StrictSevenSigns", "True"));
 
 
 					TAKE_FORT_POINTS = Integer.parseInt(Feature.getProperty("TakeFortPoints", "200"));
 					TAKE_FORT_POINTS = Integer.parseInt(Feature.getProperty("TakeFortPoints", "200"));
-					LOOSE_FORT_POINTS = Integer.parseInt(Feature.getProperty("LooseFortPoints", "400"));
+					LOOSE_FORT_POINTS = Integer.parseInt(Feature.getProperty("LooseFortPoints", "0"));
 					TAKE_CASTLE_POINTS = Integer.parseInt(Feature.getProperty("TakeCastlePoints", "1500"));
 					TAKE_CASTLE_POINTS = Integer.parseInt(Feature.getProperty("TakeCastlePoints", "1500"));
 					LOOSE_CASTLE_POINTS = Integer.parseInt(Feature.getProperty("LooseCastlePoints", "3000"));
 					LOOSE_CASTLE_POINTS = Integer.parseInt(Feature.getProperty("LooseCastlePoints", "3000"));
 					CASTLE_DEFENDED_POINTS = Integer.parseInt(Feature.getProperty("CastleDefendedPoints", "750"));
 					CASTLE_DEFENDED_POINTS = Integer.parseInt(Feature.getProperty("CastleDefendedPoints", "750"));
@@ -1682,6 +1685,7 @@ public final class Config
 					ONLY_GM_ITEMS_FREE = Boolean.parseBoolean(General.getProperty("OnlyGMItemsFree", "True"));
 					ONLY_GM_ITEMS_FREE = Boolean.parseBoolean(General.getProperty("OnlyGMItemsFree", "True"));
 					JAIL_IS_PVP = Boolean.parseBoolean(General.getProperty("JailIsPvp", "True"));
 					JAIL_IS_PVP = Boolean.parseBoolean(General.getProperty("JailIsPvp", "True"));
 					JAIL_DISABLE_CHAT = Boolean.parseBoolean(General.getProperty("JailDisableChat", "True"));
 					JAIL_DISABLE_CHAT = Boolean.parseBoolean(General.getProperty("JailDisableChat", "True"));
+					JAIL_DISABLE_TRANSACTION = Boolean.parseBoolean(General.getProperty("JailDisableTransaction", "False"));
 					CUSTOM_SPAWNLIST_TABLE = Boolean.valueOf(General.getProperty("CustomSpawnlistTable", "false"));
 					CUSTOM_SPAWNLIST_TABLE = Boolean.valueOf(General.getProperty("CustomSpawnlistTable", "false"));
 					SAVE_GMSPAWN_ON_CUSTOM = Boolean.valueOf(General.getProperty("SaveGmSpawnOnCustom", "false"));
 					SAVE_GMSPAWN_ON_CUSTOM = Boolean.valueOf(General.getProperty("SaveGmSpawnOnCustom", "false"));
 					DELETE_GMSPAWN_ON_CUSTOM = Boolean.valueOf(General.getProperty("DeleteGmSpawnOnCustom", "false"));
 					DELETE_GMSPAWN_ON_CUSTOM = Boolean.valueOf(General.getProperty("DeleteGmSpawnOnCustom", "false"));
@@ -1753,6 +1757,8 @@ public final class Config
 					GRAND_CHAOS_TIME = Integer.parseInt(NPC.getProperty("GrandChaosTime", "10"));
 					GRAND_CHAOS_TIME = Integer.parseInt(NPC.getProperty("GrandChaosTime", "10"));
 					MINION_CHAOS_TIME = Integer.parseInt(NPC.getProperty("MinionChaosTime", "10"));
 					MINION_CHAOS_TIME = Integer.parseInt(NPC.getProperty("MinionChaosTime", "10"));
 					INVENTORY_MAXIMUM_PET = Integer.parseInt(NPC.getProperty("MaximumSlotsForPet", "12"));
 					INVENTORY_MAXIMUM_PET = Integer.parseInt(NPC.getProperty("MaximumSlotsForPet", "12"));
+					PET_HP_REGEN_MULTIPLIER = Double.parseDouble(NPC.getProperty("PetHpRegenMultiplier", "100")) /100;
+					PET_MP_REGEN_MULTIPLIER = Double.parseDouble(NPC.getProperty("PetMpRegenMultiplier", "100")) /100;
 				}
 				}
 				catch (Exception e)
 				catch (Exception e)
 				{
 				{

+ 3 - 5
L2_GameServer/java/com/l2jserver/gameserver/lib/Log.java

@@ -46,17 +46,15 @@ public class Log
 		 */
 		 */
 
 
 		String date = (new SimpleDateFormat("yy.MM.dd H:mm:ss")).format(new Date());
 		String date = (new SimpleDateFormat("yy.MM.dd H:mm:ss")).format(new Date());
-		
+		String curr = (new SimpleDateFormat("yyyy-MM-dd-")).format(new Date());
 		new File("log/game").mkdirs();
 		new File("log/game").mkdirs();
 		FileWriter save = null;
 		FileWriter save = null;
 		
 		
 		try
 		try
 		{
 		{
-			File file = new File("log/game/" + (cat != null ? cat : "_all")
-			        + ".txt");
-			// file.getAbsolutePath().mkdirs();
+			File file = new File("log/game/" + (curr != null ? curr : "" )+( cat != null ? cat : "unk" )+ ".txt");
 			save = new FileWriter(file, true);
 			save = new FileWriter(file, true);
-			String out = "[" + date + "] '---': " + text + "\n"; // "+char_name()+"
+			String out = "[" + date + "] " + text + "\n";
 			save.write(out);
 			save.write(out);
 		}
 		}
 		catch (IOException e)
 		catch (IOException e)

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/model/CursedWeapon.java

@@ -297,9 +297,9 @@ public class CursedWeapon
         
         
         CursedWeapon cw = CursedWeaponsManager.getInstance().getCursedWeapon(_player.getCursedWeaponEquippedId());
         CursedWeapon cw = CursedWeaponsManager.getInstance().getCursedWeapon(_player.getCursedWeaponEquippedId());
         SystemMessage msg2 = new SystemMessage(SystemMessageId.S2_MINUTE_OF_USAGE_TIME_ARE_LEFT_FOR_S1);
         SystemMessage msg2 = new SystemMessage(SystemMessageId.S2_MINUTE_OF_USAGE_TIME_ARE_LEFT_FOR_S1);
-        int timeLeftInHours = (int)(((cw.getTimeLeft()/60000)/60));
+        int timeLeft = (int)(cw.getTimeLeft()/60000);
         msg2.addItemName(_player.getCursedWeaponEquippedId());
         msg2.addItemName(_player.getCursedWeaponEquippedId());
-        msg2.addNumber(timeLeftInHours*60);
+        msg2.addNumber(timeLeft);
         _player.sendPacket(msg2);
         _player.sendPacket(msg2);
 	}
 	}
 	
 	

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/L2Summon.java

@@ -100,7 +100,7 @@ public abstract class L2Summon extends L2Playable
 		_owner = owner;
 		_owner = owner;
 		_ai = new L2SummonAI(new L2Summon.AIAccessor());
 		_ai = new L2SummonAI(new L2Summon.AIAccessor());
 
 
-		setXYZInvisible(owner.getX()+50, owner.getY()+100, owner.getZ()+100);
+		setXYZInvisible(owner.getX()+20, owner.getY()+20, owner.getZ()+100);
 	}
 	}
 
 
     @Override
     @Override

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/actor/instance/L2FortBallistaInstance.java

@@ -54,8 +54,8 @@ public class L2FortBallistaInstance extends L2Npc
             	if (player.getClan() != null && player.getClan().getLevel() >= 5)
             	if (player.getClan() != null && player.getClan().getLevel() >= 5)
             	{
             	{
             		player.getClan().addReputationScore(Config.BALLISTA_POINTS, true);
             		player.getClan().addReputationScore(Config.BALLISTA_POINTS, true);
+                	player.sendPacket(new SystemMessage(SystemMessageId.BALLISTA_DESTROYED_CLAN_REPU_INCREASED));
             	}
             	}
-            	player.sendPacket(new SystemMessage(SystemMessageId.BALLISTA_DESTROYED_CLAN_REPU_INCREASED));
             }
             }
         }
         }
 		
 		

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/entity/Fort.java

@@ -428,7 +428,7 @@ public class Fort
 		// Remove old owner
 		// Remove old owner
 		if (getOwnerClan() != null && (clan != null && clan != getOwnerClan()))
 		if (getOwnerClan() != null && (clan != null && clan != getOwnerClan()))
 		{
 		{
-			updateClansReputation(clan, true);
+			updateClansReputation(getOwnerClan(), true);
 			try
 			try
 			{
 			{
 				L2PcInstance oldleader = getOwnerClan().getLeader().getPlayerInstance();
 				L2PcInstance oldleader = getOwnerClan().getLeader().getPlayerInstance();

+ 4 - 1
L2_GameServer/java/com/l2jserver/gameserver/model/entity/FortSiege.java

@@ -268,7 +268,7 @@ public class FortSiege
 			removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
 			removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
 			unSpawnFlags();
 			unSpawnFlags();
 
 
-			teleportPlayer(FortSiege.TeleportWhoType.Attacker, MapRegionTable.TeleportWhereType.Town);
+			getFort().getZone().banishForeigners(getFort().getOwnerClan());
 			_isInProgress = false; // Flag so that siege instance can be started
 			_isInProgress = false; // Flag so that siege instance can be started
 			getFort().getZone().setIsActive(false);
 			getFort().getZone().setIsActive(false);
 			getFort().getZone().updateZoneStatusForCharactersInside();
 			getFort().getZone().updateZoneStatusForCharactersInside();
@@ -302,7 +302,10 @@ public class FortSiege
 		if (!getIsInProgress())
 		if (!getIsInProgress())
 		{
 		{
 			if (_siegeStartTask != null) // used admin command "admin_startfortsiege"
 			if (_siegeStartTask != null) // used admin command "admin_startfortsiege"
+			{
 				_siegeStartTask.cancel(true);
 				_siegeStartTask.cancel(true);
+				getFort().despawnNpcs(getFort()._siegeNpcs);
+			}
 			_siegeStartTask = null;
 			_siegeStartTask = null;
 
 
 			if (getAttackerClans().isEmpty())
 			if (getAttackerClans().isEmpty())

+ 4 - 0
L2_GameServer/java/com/l2jserver/gameserver/model/zone/type/L2JailZone.java

@@ -46,6 +46,8 @@ public class L2JailZone extends L2ZoneType
 				character.setInsideZone(L2Character.ZONE_PVP, true);
 				character.setInsideZone(L2Character.ZONE_PVP, true);
 				((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.ENTERED_COMBAT_ZONE));
 				((L2PcInstance) character).sendPacket(new SystemMessage(SystemMessageId.ENTERED_COMBAT_ZONE));
 			}
 			}
+			if (Config.JAIL_DISABLE_TRANSACTION)
+				character.setInsideZone(L2Character.ZONE_NOSTORE, true);
 		}
 		}
 	}
 	}
 	
 	
@@ -67,6 +69,8 @@ public class L2JailZone extends L2ZoneType
 				ThreadPoolManager.getInstance().scheduleGeneral(new BackToJail(character), 2000);
 				ThreadPoolManager.getInstance().scheduleGeneral(new BackToJail(character), 2000);
 				character.sendMessage("You cannot cheat your way out of here. You must wait until your jail time is over.");
 				character.sendMessage("You cannot cheat your way out of here. You must wait until your jail time is over.");
 			}
 			}
+			if (Config.JAIL_DISABLE_TRANSACTION)
+				character.setInsideZone(L2Character.ZONE_NOSTORE, false);
 		}
 		}
 	}
 	}
 	
 	

+ 6 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestActionUse.java

@@ -31,6 +31,7 @@ import com.l2jserver.gameserver.model.actor.L2Summon;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2SiegeFlagInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2SiegeSummonInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2SummonInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2SummonInstance;
@@ -241,7 +242,7 @@ public final class RequestActionUse extends L2GameClientPacket
 				activeChar.mountPlayer(pet);
 				activeChar.mountPlayer(pet);
 				break;
 				break;
 			case 32: // Wild Hog Cannon - Mode Change
 			case 32: // Wild Hog Cannon - Mode Change
-				useSkill(4230);
+				// useSkill(4230);
 				break;
 				break;
 			case 36: // Soulless - Toxic Smoke
 			case 36: // Soulless - Toxic Smoke
 				useSkill(4259);
 				useSkill(4259);
@@ -271,7 +272,10 @@ public final class RequestActionUse extends L2GameClientPacket
 				useSkill(4138);
 				useSkill(4138);
 				break;
 				break;
 			case 41: // Wild Hog Cannon - Attack
 			case 41: // Wild Hog Cannon - Attack
-				useSkill(4230);
+				if( target != null && (target instanceof L2DoorInstance || target instanceof L2SiegeFlagInstance))
+					useSkill(4230);
+				else
+					activeChar.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
 				break;
 				break;
 			case 42: // Kai the Cat - Self Damage Shield
 			case 42: // Kai the Cat - Self Damage Shield
 				useSkill(4378, activeChar);
 				useSkill(4378, activeChar);

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestDropItem.java

@@ -106,6 +106,12 @@ public final class RequestDropItem extends L2GameClientPacket
 			return;
 			return;
 		}
 		}
 		
 		
+		if (Config.JAIL_DISABLE_TRANSACTION && activeChar.isInJail())
+		{
+			activeChar.sendMessage("You cannot drop items in Jail.");
+			return;			
+		}
+		
 		if (!activeChar.getAccessLevel().allowTransaction())
 		if (!activeChar.getAccessLevel().allowTransaction())
 		{
 		{
 			activeChar.sendMessage("Transactions are disable for your Access Level");
 			activeChar.sendMessage("Transactions are disable for your Access Level");

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestPetGetItem.java

@@ -15,6 +15,7 @@
 package com.l2jserver.gameserver.network.clientpackets;
 package com.l2jserver.gameserver.network.clientpackets;
 
 
 import com.l2jserver.gameserver.ai.CtrlIntention;
 import com.l2jserver.gameserver.ai.CtrlIntention;
+import com.l2jserver.gameserver.instancemanager.FortSiegeManager;
 import com.l2jserver.gameserver.instancemanager.MercTicketManager;
 import com.l2jserver.gameserver.instancemanager.MercTicketManager;
 import com.l2jserver.gameserver.model.L2ItemInstance;
 import com.l2jserver.gameserver.model.L2ItemInstance;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.L2World;
@@ -65,6 +66,11 @@ public final class RequestPetGetItem extends L2GameClientPacket
 			sendPacket(ActionFailed.STATIC_PACKET);
 			sendPacket(ActionFailed.STATIC_PACKET);
 			return;
 			return;
 		}
 		}
+		if(FortSiegeManager.getInstance().isCombat(item.getItemId()) )
+		{
+			sendPacket(ActionFailed.STATIC_PACKET);
+			return;
+		}
 		pet.getAI().setIntention(CtrlIntention.AI_INTENTION_PICK_UP, item);
 		pet.getAI().setIntention(CtrlIntention.AI_INTENTION_PICK_UP, item);
 	}
 	}
 
 

+ 6 - 0
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/TradeRequest.java

@@ -89,6 +89,12 @@ public final class TradeRequest extends L2GameClientPacket
             return;
             return;
         }
         }
 
 
+        if (Config.JAIL_DISABLE_TRANSACTION && (player.isInJail() || partner.isInJail()))
+        {
+        	player.sendMessage("You cannot trade in Jail.");
+        	return;
+        }
+
         if (player.getPrivateStoreType() != 0 || partner.getPrivateStoreType() != 0)
         if (player.getPrivateStoreType() != 0 || partner.getPrivateStoreType() != 0)
         {
         {
             player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_TRADE_DISCARD_DROP_ITEM_WHILE_IN_SHOPMODE));
             player.sendPacket(new SystemMessage(SystemMessageId.CANNOT_TRADE_DISCARD_DROP_ITEM_WHILE_IN_SHOPMODE));

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/AllyInfo.java

@@ -26,7 +26,7 @@ import com.l2jserver.gameserver.network.SystemMessageId;
 public class AllyInfo extends L2GameServerPacket
 public class AllyInfo extends L2GameServerPacket
 {
 {
 	//private static Logger _log = Logger.getLogger(AllyInfo.class.getName());
 	//private static Logger _log = Logger.getLogger(AllyInfo.class.getName());
-	private static final String _S__7A_FRIENDLIST = "[S] b5 AllyInfo";
+	private static final String _S__B5_ALLYINFO = "[S] b5 AllyInfo";
 	private static L2PcInstance _cha ;
 	private static L2PcInstance _cha ;
 
 
 	public AllyInfo(L2PcInstance cha)
 	public AllyInfo(L2PcInstance cha)
@@ -110,6 +110,6 @@ public class AllyInfo extends L2GameServerPacket
 	@Override
 	@Override
 	public String getType()
 	public String getType()
 	{
 	{
-		return _S__7A_FRIENDLIST;
+		return _S__B5_ALLYINFO;
 	}
 	}
 }
 }

+ 1 - 1
L2_GameServer/java/com/l2jserver/gameserver/network/serverpackets/PetInfo.java

@@ -170,7 +170,7 @@ public class PetInfo extends L2GameServerPacket
         		form = 1;
         		form = 1;
         }
         }
         writeD(form);//CT1.5 Pet form and skills
         writeD(form);//CT1.5 Pet form and skills
-        writeD(0x00);
+        writeD(_summon.getSpecialEffect());
 	}
 	}
 
 
 	/* (non-Javadoc)
 	/* (non-Javadoc)

+ 2 - 2
L2_GameServer/java/com/l2jserver/gameserver/skills/Formulas.java

@@ -1088,7 +1088,7 @@ public final class Formulas
 			init *= cha.getLevelMod() * CONbonus[cha.getCON()];
 			init *= cha.getLevelMod() * CONbonus[cha.getCON()];
 		}
 		}
 		else if (cha instanceof L2PetInstance)
 		else if (cha instanceof L2PetInstance)
-			init = ((L2PetInstance) cha).getPetData().getPetRegenHP();
+			init = ((L2PetInstance) cha).getPetData().getPetRegenHP() * Config.PET_HP_REGEN_MULTIPLIER;
 
 
 		if (init < 1)
 		if (init < 1)
 			init = 1;
 			init = 1;
@@ -1180,7 +1180,7 @@ public final class Formulas
 			init *= cha.getLevelMod() * MENbonus[cha.getMEN()];
 			init *= cha.getLevelMod() * MENbonus[cha.getMEN()];
 		}
 		}
 		else if (cha instanceof L2PetInstance)
 		else if (cha instanceof L2PetInstance)
-			init = ((L2PetInstance) cha).getPetData().getPetRegenMP();
+			init = ((L2PetInstance) cha).getPetData().getPetRegenMP() * Config.PET_MP_REGEN_MULTIPLIER;
 
 
 		if (init < 1)
 		if (init < 1)
 			init = 1;
 			init = 1;

+ 5 - 0
L2_GameServer/java/com/l2jserver/gameserver/util/Evolve.java

@@ -93,6 +93,11 @@ public final class Evolve
 		if (petSummon == null)
 		if (petSummon == null)
 			return false;
 			return false;
 
 
+		// Fix for non-linear baby pet exp
+		long _minimumexp = petSummon.getStat().getExpForLevel(petminlvl);
+		if (petexp < _minimumexp)
+			petexp = _minimumexp;
+		
 		petSummon.getStat().addExp(petexp);
 		petSummon.getStat().addExp(petexp);
 		petSummon.setCurrentHp(petSummon.getMaxHp());
 		petSummon.setCurrentHp(petSummon.getMaxHp());
 		petSummon.setCurrentMp(petSummon.getMaxMp());
 		petSummon.setCurrentMp(petSummon.getMaxMp());

+ 15 - 6
L2_GameServer/java/com/l2jserver/loginserver/LoginController.java

@@ -535,9 +535,6 @@ public class LoginController
 	{
 	{
 		boolean ok = false;
 		boolean ok = false;
 		InetAddress address = client.getConnection().getInetAddress();
 		InetAddress address = client.getConnection().getInetAddress();
-		// log it anyway
-		if (Config.LOG_LOGIN_CONTROLLER)
-			Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()), "logins_ip");
 		
 		
 		// player disconnected meanwhile
 		// player disconnected meanwhile
 		if (address == null)
 		if (address == null)
@@ -589,15 +586,24 @@ public class LoginController
 						statement.execute();
 						statement.execute();
 						statement.close();
 						statement.close();
 						
 						
+						if (Config.LOG_LOGIN_CONTROLLER)
+							Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()) + " - OK : AccountCreate", "loginlog");
+						
 						_log.info("Created new account for " + user);
 						_log.info("Created new account for " + user);
 						return true;
 						return true;
 						
 						
 					}
 					}
+					if (Config.LOG_LOGIN_CONTROLLER)
+						Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()) + " - ERR : ErrCreatingACC", "loginlog");
+
 					_log.warning("Invalid username creation/use attempt: " + user);
 					_log.warning("Invalid username creation/use attempt: " + user);
 					return false;
 					return false;
 				}
 				}
 				else 
 				else 
 				{
 				{
+					if (Config.LOG_LOGIN_CONTROLLER)
+						Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()) + " - ERR : AccountMissing", "loginlog");
+
 					_log.warning("Account missing for user " + user);
 					_log.warning("Account missing for user " + user);
 					FailedLoginAttempt failedAttempt = _hackProtection.get(address);
 					FailedLoginAttempt failedAttempt = _hackProtection.get(address);
 					int failedCount;
 					int failedCount;
@@ -626,10 +632,13 @@ public class LoginController
 				// is this account banned?
 				// is this account banned?
 				if (access < 0)
 				if (access < 0)
 				{
 				{
+					if (Config.LOG_LOGIN_CONTROLLER)
+						Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()) + " - ERR : AccountBanned", "loginlog");
+				
 					client.setAccessLevel(access);
 					client.setAccessLevel(access);
 					return false;
 					return false;
 				}
 				}
-				
+
 				// check password hash
 				// check password hash
 				ok = true;
 				ok = true;
 				for (int i = 0; i < expected.length; i++)
 				for (int i = 0; i < expected.length; i++)
@@ -673,7 +682,7 @@ public class LoginController
 		if (!ok)
 		if (!ok)
 		{
 		{
 			if (Config.LOG_LOGIN_CONTROLLER)
 			if (Config.LOG_LOGIN_CONTROLLER)
-				Log.add("'" + user + "' " + address.getHostAddress(), "logins_ip_fails");
+				Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()) + " - ERR : LoginFailed", "loginlog");
 			
 			
 			FailedLoginAttempt failedAttempt = _hackProtection.get(address);
 			FailedLoginAttempt failedAttempt = _hackProtection.get(address);
 			int failedCount;
 			int failedCount;
@@ -699,7 +708,7 @@ public class LoginController
 		{
 		{
 			_hackProtection.remove(address);
 			_hackProtection.remove(address);
 			if (Config.LOG_LOGIN_CONTROLLER)
 			if (Config.LOG_LOGIN_CONTROLLER)
-				Log.add("'" + user + "' " + address.getHostAddress(), "logins_ip");
+				Log.add("'" + (user == null ? "null" : user) + "' " + (address == null ? "null" : address.getHostAddress()) + " - OK : LoginOk", "loginlog");
 		}
 		}
 		
 		
 		return ok;
 		return ok;

+ 4 - 0
L2_GameServer/java/com/l2jserver/status/GameStatusThread.java

@@ -498,6 +498,10 @@ public class GameStatusThread extends Thread
                             _print.println("ok");
                             _print.println("ok");
                             GMAudit.auditGMAction("Telnet Admin", "Give Item", player.getName(), "item: "+itemId+" amount: "+amount);
                             GMAudit.auditGMAction("Telnet Admin", "Give Item", player.getName(), "item: "+itemId+" amount: "+amount);
                         }
                         }
+                        else
+                        {
+                        	_print.println("Player not found");
+                        }
                     }
                     }
                     catch(Exception e)
                     catch(Exception e)
                     {
                     {

+ 4 - 0
L2_GameServer/java/config/General.properties

@@ -610,6 +610,10 @@ JailIsPvp = True
 # Default: True
 # Default: True
 JailDisableChat = True
 JailDisableChat = True
 
 
+# Disable all transaction in jail
+# Trade/Store/Drop
+# Default: False
+JailDisableTransaction = False
 
 
 # ---------------------------------------------------------------------------
 # ---------------------------------------------------------------------------
 # Database Custom Tables
 # Database Custom Tables

+ 4 - 0
L2_GameServer/java/config/NPC.properties

@@ -102,6 +102,10 @@ ListPetRentNpc = 30827
 # Default: 12
 # Default: 12
 MaximumSlotsForPet = 12
 MaximumSlotsForPet = 12
 
 
+# HP/MP Regen Multiplier for Pets
+# Default: 100, 100
+PetHpRegenMultiplier = 100
+PetMpRegenMultiplier = 100
 
 
 # ---------------------------------------------------------------------------
 # ---------------------------------------------------------------------------
 # Raid Bosses
 # Raid Bosses