浏览代码

Gracia Final support 4/6

GodKratos 16 年之前
父节点
当前提交
a7fea464a1
共有 90 个文件被更改,包括 1811 次插入673 次删除
  1. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AddTradeItem.java
  2. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerTradeRequest.java
  3. 6 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java
  4. 4 4
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/BypassUserCmd.java
  5. 67 16
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  6. 22 11
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/L2GameClientPacket.java
  7. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java
  8. 6 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/MoveBackwardToLocation.java
  9. 89 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/MoveToLocationInAirShip.java
  10. 41 11
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java
  11. 85 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestActionUse.java
  12. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAllFortressInfo.java
  13. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAnswerFriendInvite.java
  14. 9 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAnswerJoinParty.java
  15. 8 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAnswerJoinPledge.java
  16. 57 4
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAquireSkill.java
  17. 25 4
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAquireSkillInfo.java
  18. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAutoSoulShot.java
  19. 2 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBlock.java
  20. 48 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBookMarkSlotInfo.java
  21. 26 13
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBuyItem.java
  22. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBuyProcure.java
  23. 5 5
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBuySeed.java
  24. 24 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
  25. 44 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestChangeBookMarkSlot.java
  26. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestConfirmGemStone.java
  27. 4 4
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestConfirmRefinerItem.java
  28. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestConfirmTargetItem.java
  29. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestCrystallizeItem.java
  30. 53 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDeleteBookMarkSlot.java
  31. 7 5
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDestroyItem.java
  32. 7 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDropItem.java
  33. 129 130
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java
  34. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java
  35. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExEnchantSkillInfoDetail.java
  36. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java
  37. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExTryToPutEnchantTargetItem.java
  38. 3 2
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendDel.java
  39. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendInvite.java
  40. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendList.java
  41. 4 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestGetItemFromPet.java
  42. 4 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestGiveItemToPet.java
  43. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestHennaEquip.java
  44. 6 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java
  45. 3 4
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestManorList.java
  46. 57 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestModifyBookMarkSlot.java
  47. 3 11
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java
  48. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPCCafeCouponUse.java
  49. 6 6
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPackageSend.java
  50. 3 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java
  51. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java
  52. 3 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreManageSell.java
  53. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java
  54. 12 12
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestProcureCropList.java
  55. 5 5
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopListSet.java
  56. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeItem.java
  57. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRefine.java
  58. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestReplySurrenderPledgeWar.java
  59. 55 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSaveBookMarkSlot.java
  60. 18 7
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSellItem.java
  61. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetAllyCrest.java
  62. 8 8
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetCrop.java
  63. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetPledgeCrest.java
  64. 7 7
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetSeed.java
  65. 12 4
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestShortCutReg.java
  66. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSurrenderPersonally.java
  67. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSurrenderPledgeWar.java
  68. 51 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestTeleportBookMark.java
  69. 9 2
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/Say2.java
  70. 2 2
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SendWareHouseDepositList.java
  71. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SendWareHouseWithDrawList.java
  72. 3 3
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SetPrivateStoreListBuy.java
  73. 5 4
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SetPrivateStoreListSell.java
  74. 2 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java
  75. 9 0
      L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/ValidatePosition.java
  76. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/pathfinding/PathFinding.java
  77. 129 106
      L2_GameServer/java/net/sf/l2j/gameserver/script/faenor/FaenorEventParser.java
  78. 98 12
      L2_GameServer/java/net/sf/l2j/gameserver/skills/DocumentBase.java
  79. 17 0
      L2_GameServer/java/net/sf/l2j/gameserver/skills/Env.java
  80. 388 174
      L2_GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java
  81. 20 8
      L2_GameServer/java/net/sf/l2j/gameserver/skills/Stats.java
  82. 20 5
      L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2Item.java
  83. 8 2
      L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2WarehouseItem.java
  84. 1 1
      L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2Weapon.java
  85. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2WeaponType.java
  86. 2 1
      L2_GameServer/java/net/sf/l2j/gameserver/templates/skills/L2EffectType.java
  87. 3 4
      L2_GameServer/java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java
  88. 2 2
      L2_GameServer/java/net/sf/l2j/gsregistering/GameServerRegister.java
  89. 3 11
      L2_GameServer/java/net/sf/l2j/loginserver/GameServerTable.java
  90. 7 7
      L2_GameServer/java/net/sf/l2j/loginserver/LoginController.java

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AddTradeItem.java

@@ -36,7 +36,7 @@ public final class AddTradeItem extends L2GameClientPacket
 	
 	private int _tradeId;
 	private int _objectId;
-	private int _count;
+	private long _count;
 	
 	public AddTradeItem()
 	{
@@ -47,7 +47,7 @@ public final class AddTradeItem extends L2GameClientPacket
 	{
 		_tradeId = readD();
 		_objectId = readD();
-		_count = readD();
+		_count = readQ();
 	}
 	
 	@Override

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerTradeRequest.java

@@ -47,7 +47,7 @@ public final class AnswerTradeRequest extends L2GameClientPacket
 
         if (!player.getAccessLevel().allowTransaction())
         {
-        	player.sendMessage("Transactions are disable for your Access Level");
+        	player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
             sendPacket(ActionFailed.STATIC_PACKET);
             return;
         }

+ 6 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java

@@ -90,4 +90,10 @@ public final class AttackRequest extends L2GameClientPacket
 	{
 		return _C__0A_ATTACKREQUEST;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return true;
+	}
 }

+ 4 - 4
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestUserCommand.java → L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/BypassUserCmd.java

@@ -25,10 +25,10 @@ import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  *
  * @version $Revision: 1.1.2.1.2.2 $ $Date: 2005/03/27 15:29:30 $
  */
-public class RequestUserCommand extends L2GameClientPacket
+public class BypassUserCmd extends L2GameClientPacket
 {
-	private static final String _C__AA_REQUESTUSERCOMMAND = "[C] aa RequestUserCommand";
-	static Logger _log = Logger.getLogger(RequestUserCommand.class.getName());
+	private static final String _C__B3_BYPASSUSERCMD = "[C] b3 BypassUserCmd";
+	static Logger _log = Logger.getLogger(BypassUserCmd.class.getName());
 
 	private int _command;
 
@@ -65,6 +65,6 @@ public class RequestUserCommand extends L2GameClientPacket
 	@Override
 	public String getType()
 	{
-		return _C__AA_REQUESTUSERCOMMAND;
+		return _C__B3_BYPASSUSERCMD;
 	}
 }

+ 67 - 16
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java

@@ -15,6 +15,7 @@
 package net.sf.l2j.gameserver.network.clientpackets;
 
 import java.io.UnsupportedEncodingException;
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.logging.Level;
@@ -32,6 +33,7 @@ import net.sf.l2j.gameserver.communitybbs.Manager.RegionBBSManager;
 import net.sf.l2j.gameserver.datatables.AdminCommandAccessRights;
 import net.sf.l2j.gameserver.datatables.MapRegionTable;
 import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.instancemanager.CastleManager;
 import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
 import net.sf.l2j.gameserver.instancemanager.CoupleManager;
 import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
@@ -42,7 +44,7 @@ import net.sf.l2j.gameserver.instancemanager.InstanceManager;
 import net.sf.l2j.gameserver.instancemanager.PetitionManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeManager;
 import net.sf.l2j.gameserver.model.L2Clan;
-import net.sf.l2j.gameserver.model.L2Effect;
+import net.sf.l2j.gameserver.model.L2ItemInstance;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
@@ -63,6 +65,7 @@ import net.sf.l2j.gameserver.network.serverpackets.Die;
 import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
 import net.sf.l2j.gameserver.network.serverpackets.ExBasicActionList;
 import net.sf.l2j.gameserver.network.serverpackets.ExBrExtraUserInfo;
+import net.sf.l2j.gameserver.network.serverpackets.ExGetBookMarkInfoPacket;
 import net.sf.l2j.gameserver.network.serverpackets.ExStorageMaxCount;
 import net.sf.l2j.gameserver.network.serverpackets.FriendList;
 import net.sf.l2j.gameserver.network.serverpackets.HennaInfo;
@@ -77,6 +80,7 @@ import net.sf.l2j.gameserver.network.serverpackets.ShortCutInit;
 import net.sf.l2j.gameserver.network.serverpackets.SkillCoolTime;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 import net.sf.l2j.gameserver.network.serverpackets.UserInfo;
+import net.sf.l2j.gameserver.util.StringUtil;
 
 /**
  * Enter World Packet Handler<p>
@@ -100,6 +104,34 @@ public class EnterWorld extends L2GameClientPacket
 	protected void readImpl()
 	{
 		// This is just a trigger packet. It has no content.
+		/*
+		readD();
+		readD();
+		readD();
+		readD();
+		readB();
+		readD();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		readC();
+		*/
 	}
 
 	@Override
@@ -158,11 +190,13 @@ public class EnterWorld extends L2GameClientPacket
 		if (activeChar.getCurrentHp() < 0.5)
 			activeChar.setIsDead(true);
 
+		setPledgeClass(activeChar);
+
+		boolean showClanNotice = false;
+
 		// Clan related checks are here
 		if (activeChar.getClan() != null)
 		{
-			setPledgeClass(activeChar);
-
 			activeChar.sendPacket(new PledgeSkillList(activeChar.getClan()));
 
 			notifyClanMembers(activeChar);
@@ -203,6 +237,15 @@ public class EnterWorld extends L2GameClientPacket
 			
 			sendPacket(new PledgeShowMemberListAll(activeChar.getClan(), activeChar));
 			sendPacket(new PledgeStatusChanged(activeChar.getClan()));
+			
+			// Residential skills support
+			if (activeChar.getClan().getHasCastle() > 0)
+				CastleManager.getInstance().getCastleByOwner(activeChar.getClan()).giveResidentialSkills(activeChar);
+			
+			if (activeChar.getClan().getHasFort() > 0)
+				FortManager.getInstance().getFortByOwner(activeChar.getClan()).giveResidentialSkills(activeChar);
+
+			showClanNotice = activeChar.getClan().isNoticeEnabled();
 		}
 
 		// Set Hero status if it applies
@@ -239,6 +282,9 @@ public class EnterWorld extends L2GameClientPacket
 		// Send GG check
 		activeChar.queryGameGuard();
 
+		// Send Teleport Bookmark List
+		sendPacket(new ExGetBookMarkInfoPacket(activeChar));
+		
 		// Send Shortcuts
 		sendPacket(new ShortCutInit(activeChar));
 
@@ -277,17 +323,6 @@ public class EnterWorld extends L2GameClientPacket
 			CursedWeaponsManager.getInstance().getCursedWeapon(activeChar.getCursedWeaponEquippedId()).cursedOnLogin();
 		}
 
-		for (L2Effect e : activeChar.getAllEffects())
-		{
-			switch (e.getEffectType())
-			{
-				case HEAL_OVER_TIME:
-				case COMBAT_POINT_HEAL_OVER_TIME:
-				case CHARGE:
-					e.exit();
-			}
-		}
-
 		activeChar.updateEffectIcons();
 
 		activeChar.sendPacket(new EtcStatusUpdate(activeChar));
@@ -318,7 +353,16 @@ public class EnterWorld extends L2GameClientPacket
 		SevenSigns.getInstance().sendCurrentPeriodMsg(activeChar);
 		Announcements.getInstance().showAnnouncements(activeChar);
 
-		if (Config.SERVER_NEWS)
+		if (showClanNotice)
+		{
+			final StringBuilder html = StringUtil.startAppend(2000,
+					"<html><title>Clan Announcements</title><body><br><center><font color=\"CCAA00\">",
+					activeChar.getClan().getName(),
+					"</font> <font color=\"6655FF\">Clan Alert Message</font></center><br><img src=\"L2UI.SquareWhite\" width=270 height=1><br>",
+					activeChar.getClan().getNotice().replaceAll("\r\n", "<br>"), "</body></html>");
+			sendPacket(new NpcHtmlMessage(1, html.toString())); 
+		}
+		else if (Config.SERVER_NEWS)
 		{
 			String serverNews = HtmCache.getInstance().getHtm("data/html/servnews.htm");
 			if (serverNews != null)
@@ -340,6 +384,13 @@ public class EnterWorld extends L2GameClientPacket
 
 		sendPacket(new SkillCoolTime(activeChar));
 
+		for (L2ItemInstance i : activeChar.getInventory().getItems())
+		{
+			if (i.isTimeLimitedItem())
+			{
+				i.scheduleLifeTimeTask();
+			}
+		}
 		if (Olympiad.getInstance().playerInStadia(activeChar))
 		{
 			activeChar.doRevive();
@@ -432,7 +483,7 @@ public class EnterWorld extends L2GameClientPacket
 	*/
 	private void notifyFriends(L2PcInstance cha)
 	{
-		java.sql.Connection con = null;
+		Connection con = null;
 
 		try
 		{

+ 22 - 11
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/L2GameClientPacket.java

@@ -74,17 +74,20 @@ public abstract class L2GameClientPacket extends ReceivablePacket<L2GameClient>
 			}
 			
 			runImpl();
-            if (this instanceof MoveBackwardToLocation 
-            	|| this instanceof AttackRequest 
-            	|| this instanceof RequestActionUse
-            	|| this instanceof RequestMagicSkillUse)
-            	// could include pickup and talk too, but less is better
-            {
-            	// Removes onspawn protection - player has faster computer than
-            	// average
-            	if (getClient().getActiveChar() != null)
-            		getClient().getActiveChar().onActionRequest();
-            }
+			
+			/* Removes onspawn protection - player has faster computer than average
+			 * 
+			 * True for these packets:
+			 * AttackRequest
+			 * MoveBackwardToLocation
+			 * RequestActionUse
+			 * RequestMagicSkillUse
+			 * 
+			 * it could include pickup and talk too, but less is better
+			 */
+            if (triggersOnActionRequest() && getClient().getActiveChar() != null)
+            	getClient().getActiveChar().onActionRequest();
+            
 		}
 		catch (Throwable t)
 		{
@@ -104,4 +107,12 @@ public abstract class L2GameClientPacket extends ReceivablePacket<L2GameClient>
 	 * @return A String with this packet name for debuging purposes
 	 */
 	public abstract String getType();
+	
+	/**
+	 * Overriden with true value on some packets that should disable spawn protection
+	 */
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.logging.Logger;
@@ -111,7 +112,7 @@ public final class Logout extends L2GameClientPacket
 
 	private void notifyFriends(L2PcInstance cha)
 	{
-		java.sql.Connection con = null;
+		Connection con = null;
 
 		try {
 			con = L2DatabaseFactory.getInstance().getConnection();

+ 6 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/MoveBackwardToLocation.java

@@ -136,4 +136,10 @@ public class MoveBackwardToLocation extends L2GameClientPacket
 	{
 		return _C__01_MOVEBACKWARDTOLOC;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return true;
+	}
 }

+ 89 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/MoveToLocationInAirShip.java

@@ -0,0 +1,89 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+import net.sf.l2j.gameserver.TaskPriority;
+import net.sf.l2j.gameserver.ai.CtrlIntention;
+import net.sf.l2j.gameserver.instancemanager.AirShipManager;
+import net.sf.l2j.gameserver.model.L2CharPosition;
+import net.sf.l2j.gameserver.model.actor.instance.L2AirShipInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
+import net.sf.l2j.gameserver.templates.item.L2WeaponType;
+import net.sf.l2j.util.Point3D;
+
+
+/**
+ * format: ddddddd
+ * X:%d Y:%d Z:%d OriginX:%d OriginY:%d OriginZ:%d
+ * @author  GodKratos
+ */
+public class MoveToLocationInAirShip extends L2GameClientPacket
+{
+	private static final String _C__D0_20_MOVETOLOCATIONINAIRSHIP = "[C] D0:20 MoveToLocationInAirShip";
+
+	private int _shipId;
+	private final Point3D _pos = new Point3D(0,0,0);
+	private final Point3D _origin_pos = new Point3D(0,0,0);
+	
+	public TaskPriority getPriority() { return TaskPriority.PR_HIGH; }
+
+	@Override
+	protected void readImpl()
+	{
+		_shipId = readD();
+		int _x, _y, _z;
+		_x = readD();
+		_y = readD();
+		_z = readD();
+		_pos.setXYZ(_x, _y, _z);
+		_x = readD();
+		_y = readD();
+		_z = readD();
+		_origin_pos.setXYZ(_x, _y, _z);
+	}
+
+
+	@Override
+	protected void runImpl()
+	{
+		L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+			return;
+		else if (activeChar.isAttackingNow() && activeChar.getActiveWeaponItem() != null && (activeChar.getActiveWeaponItem().getItemType() == L2WeaponType.BOW))
+		{
+			activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+		}
+		else
+		{
+			L2AirShipInstance airShip = AirShipManager.getInstance().getAirShip();
+			if (airShip == null || airShip.getObjectId() != _shipId)
+				return;
+			activeChar.setAirShip(airShip);
+			activeChar.setInAirShip(true);
+			activeChar.setInAirShipPosition(_pos);
+			activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO_IN_AIR_SHIP, new L2CharPosition(_pos.getX(),_pos.getY(), _pos.getZ(), 0), new L2CharPosition(_origin_pos.getX(),_origin_pos.getY(),_origin_pos.getZ(), 0));
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType()
+	 */
+	@Override
+	public String getType()
+	{
+		return _C__D0_20_MOVETOLOCATIONINAIRSHIP;
+	}
+}

+ 41 - 11
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/MultiSellChoose.java

@@ -31,7 +31,6 @@ import net.sf.l2j.gameserver.model.itemcontainer.PcInventory;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.serverpackets.ExBrExtraUserInfo;
 import net.sf.l2j.gameserver.network.serverpackets.ItemList;
-import net.sf.l2j.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 import net.sf.l2j.gameserver.network.serverpackets.UserInfo;
@@ -45,17 +44,49 @@ public class MultiSellChoose extends L2GameClientPacket
 	private static Logger _log = Logger.getLogger(MultiSellChoose.class.getName());
 	private int _listId;
 	private int _entryId;
-	private int _amount;
+	private long _amount;
 	private int _enchantment;
 	private int _transactionTax; // local handling of taxation
+	@SuppressWarnings("unused")
+    private int _unk1;
+	@SuppressWarnings("unused")
+	private int _unk2;
+	@SuppressWarnings("unused")
+	private int _unk3;
+	@SuppressWarnings("unused")
+	private int _unk7;
+	@SuppressWarnings("unused")
+	private int _unk4;
+	@SuppressWarnings("unused")
+	private int _unk5;
+	@SuppressWarnings("unused")
+	private int _unk6;
+	@SuppressWarnings("unused")
+	private int _unk8;
+	@SuppressWarnings("unused")
+	private int _unk9;
+	@SuppressWarnings("unused")
+	private int _unk10;
+	@SuppressWarnings("unused")
+	private int _unk11;
 	
 	@Override
 	protected void readImpl()
 	{
 		_listId = readD();
 		_entryId = readD();
-		_amount = readD();
-		// _enchantment = readH();  // <---commented this line because it did NOT work!
+		_amount = readQ();
+		_unk1 = readH();
+		_unk2 = readD();
+		_unk3 = readD();
+		_unk4 = readH(); // elemental attributes
+		_unk5 = readH();// elemental attributes
+		_unk6 = readH();// elemental attributes
+		_unk7 = readH();// elemental attributes
+		_unk8 = readH();// elemental attributes
+		_unk9 = readH();// elemental attributes
+		_unk10 = readH();// elemental attributes
+		_unk11 = readH();// elemental attributes
 		_enchantment = _entryId % 100000;
 		_entryId = _entryId / 100000;
 		_transactionTax = 0; // initialize tax amount to 0...
@@ -177,7 +208,7 @@ public class MultiSellChoose extends L2GameClientPacket
 					// otherwise, check only the count of items with exactly the needed enchantment level
 					if (inv.getInventoryItemCount(e.getItemId(), maintainEnchantment ? e.getEnchantmentLevel() : -1) < ((Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMantainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount()))
 					{
-						player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
+						player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_REQUIRED_ITEMS));//Update by rocknow
 						_ingredientsList.clear();
 						_ingredientsList = null;
 						return;
@@ -198,17 +229,16 @@ public class MultiSellChoose extends L2GameClientPacket
 			{
 				case -200: // Clan Reputation Score
 				{
-					int repCost = player.getClan().getReputationScore() - (e.getItemCount() * _amount);
+					int repCost = (int) (player.getClan().getReputationScore() - (e.getItemCount() * _amount));
 					player.getClan().setReputationScore(repCost, true);
 					SystemMessage smsg = new SystemMessage(SystemMessageId.S1_DEDUCTED_FROM_CLAN_REP);
-					smsg.addNumber(e.getItemCount() * _amount);
+					smsg.addItemNumber(e.getItemCount() * _amount);
 					player.sendPacket(smsg);
-					player.getClan().broadcastToOnlineMembers(new PledgeShowInfoUpdate(player.getClan()));
 					break;
 				}
 				case -300: // Player Fame
 				{
-					int fameCost = player.getFame() - (e.getItemCount() * _amount);
+					int fameCost = (int) (player.getFame() - (e.getItemCount() * _amount));
 					player.setFame(fameCost);
 					player.sendPacket(new UserInfo(player));
 					player.sendPacket(new ExBrExtraUserInfo(player));
@@ -356,7 +386,7 @@ public class MultiSellChoose extends L2GameClientPacket
 			{
 				sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
 				sm.addItemName(e.getItemId());
-				sm.addNumber(e.getItemCount() * _amount);
+				sm.addItemNumber(e.getItemCount() * _amount);
 				player.sendPacket(sm);
 				sm = null;
 			}
@@ -365,7 +395,7 @@ public class MultiSellChoose extends L2GameClientPacket
 				if (maintainEnchantment && e.getEnchantmentLevel() > 0)
 				{
 					sm = new SystemMessage(SystemMessageId.ACQUIRED_S1_S2);
-					sm.addNumber(e.getEnchantmentLevel());
+					sm.addItemNumber(e.getEnchantmentLevel());
 					sm.addItemName(e.getItemId());
 				}
 				else

+ 85 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestActionUse.java

@@ -38,6 +38,7 @@ import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
 import net.sf.l2j.gameserver.network.serverpackets.ChairSit;
 import net.sf.l2j.gameserver.network.serverpackets.RecipeShopManageList;
+import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 
 /**
@@ -450,6 +451,10 @@ public final class RequestActionUse extends L2GameClientPacket
 			case 1045: // Great Wolf - Howl
 				useSkill(5584);
 				break;
+			//Add by rocknow
+			case 1046: // Strider - Roar
+				useSkill(5585);
+				break;
 			case 1047: // Divine Beast - Bite
 				useSkill(5580);
 				break;
@@ -492,6 +497,80 @@ public final class RequestActionUse extends L2GameClientPacket
 			case 1060: //Nightshade - Guidance
 				useSkill(5654);
 				break;
+			//Add by rocknow
+			case 1061:
+				useSkill(5745);
+				break;
+			case 1062:
+				useSkill(5746);
+				break;
+			case 1063:
+				useSkill(5747);
+				break;
+			case 1064:
+				useSkill(5748);
+				break;
+			case 1065:
+				useSkill(5753);
+				break;
+			case 1066:
+				useSkill(5749);
+				break;
+			case 1067:
+				useSkill(5750);
+				break;
+			case 1068:
+				useSkill(5751);
+				break;
+			case 1069:
+				useSkill(5752);
+				break;
+			case 1070:
+				useSkill(5771);
+				break;
+			case 1071:
+				useSkill(5761);
+				break;
+				//T3 Social Packets
+			case 12:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 2));
+				break;
+			case 13:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 3));
+				break;
+			case 14:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 4));
+				break;
+			case 24:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 5));
+				break;
+			case 25:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 6));
+				break;
+			case 26:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 7));
+				break;
+			case 29:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 8));
+				break;
+			case 30:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 9));
+				break;
+			case 31:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 10));
+				break;
+			case 33:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 11));
+				break;
+			case 34:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 12));
+				break;
+			case 35:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 13));
+				break;
+			case 62:
+				activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 14));
+				break;
 			default:
 				_log.warning(activeChar.getName() + ": unhandled action type " + _actionId);
 		}
@@ -555,4 +634,10 @@ public final class RequestActionUse extends L2GameClientPacket
 	{
 		return _C__45_REQUESTACTIONUSE;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return true;
+	}
 }

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAllFortressInfo.java

@@ -30,7 +30,7 @@ public class RequestAllFortressInfo extends L2GameClientPacket
     @Override
     public String getType()
     {
-        return "[C] D0:40 RequestAllFortressInfo";
+        return "[C] D0:3D RequestAllFortressInfo";
     }
 
     /**

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAnswerFriendInvite.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.util.logging.Logger;
 
@@ -58,7 +59,7 @@ public final class RequestAnswerFriendInvite extends L2GameClientPacket
 
     		if (_response == 1)
             {
-        		java.sql.Connection con = null;
+        		Connection con = null;
         		try
         		{
         		    con = L2DatabaseFactory.getInstance().getConnection();

+ 9 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAnswerJoinParty.java

@@ -57,6 +57,15 @@ public final class RequestAnswerJoinParty extends L2GameClientPacket
 
     		if (_response == 1)
             {
+				if (requestor.getParty() != null)//Update by rocknow-Start
+				{
+					if (requestor.getParty().getMemberCount() >= 9)
+					{
+						player.sendPacket(new SystemMessage(SystemMessageId.PARTY_FULL));
+						requestor.sendPacket(new SystemMessage(SystemMessageId.PARTY_FULL));
+						return;
+					}
+				}//Update by rocknow-End
     			player.joinParty(requestor.getParty());
     		} else
             {

+ 8 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAnswerJoinPledge.java

@@ -14,6 +14,8 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import net.sf.l2j.gameserver.instancemanager.CastleManager;
+import net.sf.l2j.gameserver.instancemanager.FortManager;
 import net.sf.l2j.gameserver.model.L2Clan;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.network.SystemMessageId;
@@ -31,7 +33,6 @@ import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 public final class RequestAnswerJoinPledge extends L2GameClientPacket
 {
 	private static final String _C__25_REQUESTANSWERJOINPLEDGE = "[C] 25 RequestAnswerJoinPledge";
-	//private static Logger _log = Logger.getLogger(RequestAnswerJoinPledge.class.getName());
 
 	private int _answer;
 
@@ -102,6 +103,12 @@ public final class RequestAnswerJoinPledge extends L2GameClientPacket
 				clan.broadcastToOnlineMembers(sm);
 				sm = null;
 
+				if (activeChar.getClan().getHasCastle() > 0)
+					CastleManager.getInstance().getCastleByOwner(activeChar.getClan()).giveResidentialSkills(activeChar);
+				if (activeChar.getClan().getHasFort() > 0)
+					FortManager.getInstance().getFortByOwner(activeChar.getClan()).giveResidentialSkills(activeChar);
+				activeChar.sendSkillList();
+
 				clan.broadcastToOtherOnlineMembers(new PledgeShowMemberListAdd(activeChar), activeChar);
 				clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
 

+ 57 - 4
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAquireSkill.java

@@ -137,7 +137,7 @@ public class RequestAquireSkill extends L2GameClientPacket
 
 						SystemMessage sm = new SystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
 						sm.addItemName(costid);
-						sm.addNumber(1);
+						sm.addItemNumber(1);
 						sendPacket(sm);
 						sm = null;
 					}
@@ -245,7 +245,7 @@ public class RequestAquireSkill extends L2GameClientPacket
 
 					SystemMessage sm = new SystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
 					sm.addItemName(costid);
-					sm.addNumber(costcount);
+					sm.addItemNumber(costcount);
 					sendPacket(sm);
 					sm = null;
 				}
@@ -268,6 +268,7 @@ public class RequestAquireSkill extends L2GameClientPacket
 				}
 
 				int itemId = 0;
+				int itemCount = 0;
 				int repCost = 100000000;
 				// Skill Learn bug Fix
 				L2PledgeSkillLearn[] skills = SkillTreeTable.getInstance().getAvailablePledgeSkills(player);
@@ -281,6 +282,7 @@ public class RequestAquireSkill extends L2GameClientPacket
 
 					counts++;
 					itemId = s.getItemId();
+					itemCount = s.getItemCount();
 					repCost = s.getRepCost();
 				}
 
@@ -295,7 +297,7 @@ public class RequestAquireSkill extends L2GameClientPacket
 				{
 					if (Config.LIFE_CRYSTAL_NEEDED)
 					{
-						if (!player.destroyItemByItemId("Consume", itemId, 1, trainer, false))
+						if (!player.destroyItemByItemId("Consume", itemId, itemCount, trainer, false))
 						{
 							// Haven't spellbook
 							player.sendPacket(new SystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL));
@@ -304,7 +306,7 @@ public class RequestAquireSkill extends L2GameClientPacket
 
 						SystemMessage sm = new SystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
 						sm.addItemName(itemId);
-						sm.addNumber(1);
+						sm.addNumber(itemCount);
 						sendPacket(sm);
 						sm = null;
 					}
@@ -338,6 +340,57 @@ public class RequestAquireSkill extends L2GameClientPacket
 				((L2VillageMasterInstance)trainer).showPledgeSkillList(player); //Maybe we shoud add a check here...
 	            return;
 			}
+			case 6:
+			{
+				int costid = 0;
+				int costcount = 0;
+				// Skill Learn bug Fix
+				L2SkillLearn[] skillsc = SkillTreeTable.getInstance().getAvailableSpecialSkills(player);
+
+				for (L2SkillLearn s : skillsc)
+				{
+					L2Skill sk = SkillTable.getInstance().getInfo(s.getId(),s.getLevel());
+
+					if (sk == null || sk != skill)
+						continue;
+
+					counts++;
+					costid = s.getIdCost();
+					costcount = s.getCostCount();
+					_requiredSp = s.getSpCost();
+				}
+
+				if (counts == 0)
+				{
+					player.sendMessage("You are trying to learn skill that u can't..");
+					Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " tried to learn skill that he can't!!!", IllegalPlayerAction.PUNISH_KICK);
+					return;
+				}
+
+				if (player.getSp() >= _requiredSp)
+				{
+					if (!player.destroyItemByItemId("Consume", costid, costcount, trainer, false))
+					{
+						// Haven't spellbook
+						player.sendPacket(new SystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL));
+						return;
+					}
+
+					SystemMessage sm = new SystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
+					sm.addItemName(costid);
+					sm.addItemNumber(costcount);
+					sendPacket(sm);
+					sm = null;
+				}
+				else
+				{
+					SystemMessage sm = new SystemMessage(SystemMessageId.NOT_ENOUGH_SP_TO_LEARN_SKILL);
+					player.sendPacket(sm);
+					sm = null;
+					return;
+				}
+				break;
+			}
 			default:
 			{
 				_log.warning("Recived Wrong Packet Data in Aquired Skill - unk1:" + _skillType);

+ 25 - 4
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAquireSkillInfo.java

@@ -147,6 +147,7 @@ public class RequestAquireSkillInfo extends L2GameClientPacket
         {
             int requiredRep = 0;
             int itemId = 0;
+            int itemCount = 0;
             L2PledgeSkillLearn[] skills = SkillTreeTable.getInstance().getAvailablePledgeSkills(activeChar);
 
             for (L2PledgeSkillLearn s : skills)
@@ -156,6 +157,7 @@ public class RequestAquireSkillInfo extends L2GameClientPacket
                     canteach = true;
                     requiredRep = s.getRepCost();
                     itemId = s.getItemId();
+                    itemCount = s.getItemCount();
                     break;
                 }
             }
@@ -164,14 +166,33 @@ public class RequestAquireSkillInfo extends L2GameClientPacket
                 return; // cheater
 
 
-            AcquireSkillInfo asi = new AcquireSkillInfo(skill.getId(), skill.getLevel(), requiredRep,2);
+            AcquireSkillInfo asi = new AcquireSkillInfo(skill.getId(), skill.getLevel(), requiredRep, 2);
 
             if (Config.LIFE_CRYSTAL_NEEDED)
-            {
-                asi.addRequirement(1, itemId, 1, 0);
-            }
+                asi.addRequirement(1, itemId, itemCount, 0);
 
             sendPacket(asi);
+        }
+		else if (_skillType == 6)
+        {
+			int costid = 0;
+			int costcount = 0;
+			L2SkillLearn[] skillsc = SkillTreeTable.getInstance().getAvailableSpecialSkills(activeChar);
+			for (L2SkillLearn s : skillsc)
+			{
+				L2Skill sk = SkillTable.getInstance().getInfo(s.getId(), s.getLevel());
+
+				if (sk == null || sk != skill)
+                    continue;
+
+				canteach = true;
+				costid = s.getIdCost();
+				costcount = s.getCostCount();
+			}
+
+			AcquireSkillInfo asi = new AcquireSkillInfo(skill.getId(), skill.getLevel(), 0, 6);
+			asi.addRequirement(5, costid, costcount, 0);
+			sendPacket(asi);
         }
 		else // Common Skills
 		{

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAutoSoulShot.java

@@ -77,7 +77,7 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
 
 	                        //start the auto soulshot use
 	                        SystemMessage sm = new SystemMessage(SystemMessageId.USE_OF_S1_WILL_BE_AUTO);
-	                        sm.addString(item.getItemName());
+	                        sm.addItemName(item);//Update Message by rocknow
 	                        activeChar.sendPacket(sm);
 	                        sm = null;
 
@@ -101,7 +101,7 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
 
 	                    	            // start the auto soulshot use
 	                    	            SystemMessage sm = new SystemMessage(SystemMessageId.USE_OF_S1_WILL_BE_AUTO);
-	                    	            sm.addString(item.getItemName());
+	                    	            sm.addItemName(item);//Update Message by rocknow
 	                    	            activeChar.sendPacket(sm);
 	                    	            sm = null;
 
@@ -125,7 +125,7 @@ public final class RequestAutoSoulShot extends L2GameClientPacket
 
                     //cancel the auto soulshot use
                     SystemMessage sm = new SystemMessage(SystemMessageId.AUTO_USE_OF_S1_CANCELLED);
-                    sm.addString(item.getItemName());
+                    sm.addItemName(item);//Update Message by rocknow
                     activeChar.sendPacket(sm);
                     sm = null;
                 }

+ 2 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBlock.java

@@ -84,9 +84,11 @@ protected void runImpl()
                BlockList.sendListToOwner(activeChar);
                break;
            case ALLBLOCK:
+               activeChar.sendPacket(new SystemMessage(SystemMessageId.MESSAGE_REFUSAL_MODE));//Update by rocknow
                BlockList.setBlockAll(activeChar, true);
                break;
            case ALLUNBLOCK:
+               activeChar.sendPacket(new SystemMessage(SystemMessageId.MESSAGE_ACCEPTANCE_MODE));//Update by rocknow
                BlockList.setBlockAll(activeChar, false);
                break;
            default:

+ 48 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBookMarkSlotInfo.java

@@ -0,0 +1,48 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.network.serverpackets.ExGetBookMarkInfoPacket;
+
+
+/**
+ *  @author ShanSoft
+ *  Packets Structure: chddd
+ */
+public final class RequestBookMarkSlotInfo extends L2GameClientPacket
+{
+	private static final String _C__51_REQUESTBOOKMARKSLOTINFO = "[C] 51 RequestBookMarkSlotInfo";
+
+	@Override
+	protected void readImpl()
+	{
+		//There is nothing to read.
+	}
+
+	@Override
+	protected void runImpl()
+	{
+		L2PcInstance player = getClient().getActiveChar();
+		player.sendPacket(new ExGetBookMarkInfoPacket(player));
+	}
+
+
+	@Override
+	public String getType()
+	{
+		return _C__51_REQUESTBOOKMARKSLOTINFO;
+	}
+}

+ 26 - 13
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBuyItem.java

@@ -24,12 +24,14 @@ import net.sf.l2j.gameserver.datatables.ItemTable;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.L2TradeList;
 import net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem;
+import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.actor.L2Npc;
 import net.sf.l2j.gameserver.model.actor.instance.L2CastleChamberlainInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2ClanHallManagerInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2FishermanInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2MercManagerInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2MerchantInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2MerchantSummonInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PetManagerInstance;
 import net.sf.l2j.gameserver.network.SystemMessageId;
@@ -68,7 +70,7 @@ public final class RequestBuyItem extends L2GameClientPacket
 		for (int i = 0; i < _count; i++)
 		{
 			int itemId   = readD(); _items[i * 2 + 0] = itemId;
-			long cnt      = readD();
+			long cnt      = readQ();
 			if (cnt > Integer.MAX_VALUE || cnt < 0)
 			{
 			    _count=0; _items = null;
@@ -109,7 +111,7 @@ public final class RequestBuyItem extends L2GameClientPacket
             {
         		htmlFolder = "fisherman";
             }
-            else if (target instanceof L2MerchantInstance)
+            else if (target instanceof L2MerchantInstance || target instanceof L2MerchantSummonInstance)
             {
                 htmlFolder = "merchant";
             }
@@ -127,10 +129,12 @@ public final class RequestBuyItem extends L2GameClientPacket
         	ok = false;
         }
 
-        L2MerchantInstance merchant = null;
+        L2Character merchant = null;
 
         if (ok)
-        	merchant = (L2MerchantInstance) target;
+        {
+        	merchant = (L2Character) target;
+        }
         else if (!ok && !player.isGM())
         {
         	player.sendMessage("Invalid Target: Seller must be targetted");
@@ -141,7 +145,11 @@ public final class RequestBuyItem extends L2GameClientPacket
 
         if (merchant != null)
         {
-        	List<L2TradeList> lists = TradeController.getInstance().getBuyListByNpcId(merchant.getNpcId());
+        	List<L2TradeList> lists;
+        	if (merchant instanceof L2MerchantSummonInstance)
+        		lists = TradeController.getInstance().getBuyListByNpcId(((L2MerchantSummonInstance)merchant).getNpcId());
+        	else
+        		lists = TradeController.getInstance().getBuyListByNpcId(((L2MerchantInstance)merchant).getNpcId());
 
         	if(!player.isGM() )
         	{
@@ -180,10 +188,10 @@ public final class RequestBuyItem extends L2GameClientPacket
 		}
 		double castleTaxRate = 0;
         double baseTaxRate = 0;
-		if (merchant != null) 
+		if (merchant != null && merchant instanceof L2MerchantInstance) 
         {
-            castleTaxRate = merchant.getMpc().getCastleTaxRate();
-            baseTaxRate = merchant.getMpc().getBaseTaxRate();
+            castleTaxRate = ((L2MerchantInstance)merchant).getMpc().getCastleTaxRate();
+            baseTaxRate = ((L2MerchantInstance)merchant).getMpc().getBaseTaxRate();
         }
 		long subTotal = 0;
 		int castleTax = 0;
@@ -196,7 +204,7 @@ public final class RequestBuyItem extends L2GameClientPacket
 		{
 			int itemId = _items[i * 2 + 0];
 			int count  = _items[i * 2 + 1];
-			int price = -1;
+			long price = -1;
 
             L2TradeItem tradeItem = list.getItemById(itemId);
 			if (tradeItem == null)
@@ -251,7 +259,7 @@ public final class RequestBuyItem extends L2GameClientPacket
                 }
             }
             
-			subTotal += (long)count * price;	// Before tax
+			subTotal += count * price;	// Before tax
 			castleTax = (int) (subTotal * castleTaxRate);
             baseTax = (int) (subTotal * baseTaxRate);
             if (subTotal + castleTax + baseTax > Integer.MAX_VALUE)
@@ -318,10 +326,15 @@ public final class RequestBuyItem extends L2GameClientPacket
 
 		if (merchant != null)
 		{
+			String html;
             // add to castle treasury
-            merchant.getCastle().addToTreasury(castleTax);
-            
-			String html = HtmCache.getInstance().getHtm("data/html/"+ htmlFolder +"/" + merchant.getNpcId() + "-bought.htm");
+			if (merchant instanceof L2MerchantInstance)
+			{
+				((L2MerchantInstance)merchant).getCastle().addToTreasury(castleTax);
+				html = HtmCache.getInstance().getHtm("data/html/"+ htmlFolder +"/" + ((L2MerchantInstance)merchant).getNpcId() + "-bought.htm");
+			}
+			else
+				html = HtmCache.getInstance().getHtm("data/html/"+ htmlFolder +"/" + ((L2MerchantSummonInstance)merchant).getNpcId() + "-bought.htm");
 
 			if (html != null)
 			{

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBuyProcure.java

@@ -58,7 +58,7 @@ public class RequestBuyProcure extends L2GameClientPacket {
 		{
 			long servise = readD();
 			int itemId   = readD(); _items[i * 2 + 0] = itemId;
-			long cnt      = readD();
+			long cnt      = readQ();
 			if (cnt > Integer.MAX_VALUE || cnt < 1)
 			{
 				_count=0; _items = null;
@@ -160,7 +160,7 @@ public class RequestBuyProcure extends L2GameClientPacket {
 			// Send Char Buy Messages
 			SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
 			sm.addItemName(item);
-			sm.addNumber(rewardItemCount);
+			sm.addItemNumber(rewardItemCount);
 			player.sendPacket(sm);
 			sm = null;
 

+ 5 - 5
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBuySeed.java

@@ -74,7 +74,7 @@ public class RequestBuySeed extends L2GameClientPacket
 		{
 			int itemId = readD();
 			_items[i * 2 + 0] = itemId;
-			long cnt = readD();
+			long cnt = readQ();
 			if (cnt > Integer.MAX_VALUE || cnt < 1)
 			{
 				_count = 0;
@@ -114,9 +114,9 @@ public class RequestBuySeed extends L2GameClientPacket
 		for (int i = 0; i < _count; i++)
 		{
 			int seedId = _items[i * 2 + 0];
-			int count = _items[i * 2 + 1];
-			int price = 0;
-			int residual = 0;
+			long count = _items[i * 2 + 1];
+			long price = 0;
+			long residual = 0;
 
 			SeedProduction seed = castle.getSeed(seedId,CastleManorManager.PERIOD_CURRENT);
 			price = seed.getPrice();
@@ -201,7 +201,7 @@ public class RequestBuySeed extends L2GameClientPacket
 			SystemMessage sm = null;
 			sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
 			sm.addItemName(item);
-			sm.addNumber(count);
+			sm.addItemNumber(count);
 			player.sendPacket(sm);
 		}
 		// Send update packets

+ 24 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java

@@ -28,6 +28,7 @@ import net.sf.l2j.gameserver.model.L2CharPosition;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.L2Npc;
+import net.sf.l2j.gameserver.model.actor.instance.L2MerchantSummonInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.entity.L2Event;
 import net.sf.l2j.gameserver.model.olympiad.Olympiad;
@@ -127,6 +128,29 @@ public final class RequestBypassToServer extends L2GameClientPacket
 				}
 				catch (NumberFormatException nfe) {}
 			}
+			else if (_command.startsWith("summon_"))
+			{
+				if(!activeChar.validateBypass(_command))
+					return;
+
+				int endOfId = _command.indexOf('_', 8);
+				String id;
+				if (endOfId > 0)
+					id = _command.substring(7, endOfId);
+				else
+					id = _command.substring(7);
+				try
+				{
+					L2Object object = L2World.getInstance().findObject(Integer.parseInt(id));
+
+					if (object instanceof L2MerchantSummonInstance && endOfId > 0 && activeChar.isInsideRadius(object, L2Npc.INTERACTION_DISTANCE, false, false))
+					{
+						((L2MerchantSummonInstance)object).onBypassFeedback(activeChar, _command.substring(endOfId+1));
+					}
+					activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+				}
+				catch (NumberFormatException nfe) {}
+			}
 			//	Draw a Symbol
 			else if (_command.equals("menu_select?ask=-16&reply=1"))
 			{

+ 44 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestChangeBookMarkSlot.java

@@ -0,0 +1,44 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+
+/**
+ *  @author ShanSoft
+ *  Packets Structure: chddd
+ */
+public final class RequestChangeBookMarkSlot extends L2GameClientPacket
+{
+	private static final String _C__51_REQUESTCHANGEBOOKMARKSLOT = "[C] 51 RequestChangeBookMarkSlot";
+
+	@Override
+	protected void readImpl()
+	{
+		//There is nothing to read.
+	}
+
+	@Override
+	protected void runImpl()
+	{
+		
+	}
+
+
+	@Override
+	public String getType()
+	{
+		return _C__51_REQUESTCHANGEBOOKMARKSLOT;
+	}
+}

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestConfirmGemStone.java

@@ -34,7 +34,7 @@ public final class RequestConfirmGemStone extends L2GameClientPacket
 	private int _targetItemObjId;
 	private int _refinerItemObjId;
 	private int _gemstoneItemObjId;
-	private int _gemstoneCount;
+	private long _gemstoneCount;
 
 
 	/**
@@ -47,7 +47,7 @@ public final class RequestConfirmGemStone extends L2GameClientPacket
 		_targetItemObjId = readD();
 		_refinerItemObjId = readD();
 		_gemstoneItemObjId = readD();
-		_gemstoneCount= readD();
+		_gemstoneCount= readQ();
 	}
 
 	/**
@@ -113,7 +113,7 @@ public final class RequestConfirmGemStone extends L2GameClientPacket
 				break;
 		}
 
-		activeChar.sendPacket(new ExPutCommissionResultForVariationMake(_gemstoneItemObjId, _gemstoneCount));
+		activeChar.sendPacket(new ExPutCommissionResultForVariationMake(_gemstoneItemObjId, _gemstoneCount, gemstoneItemId));
 		activeChar.sendPacket(new SystemMessage(SystemMessageId.PRESS_THE_AUGMENT_BUTTON_TO_BEGIN));
 	}
 

+ 4 - 4
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestConfirmRefinerItem.java

@@ -91,26 +91,26 @@ public class RequestConfirmRefinerItem extends L2GameClientPacket
 			case L2Item.CRYSTAL_C:
 				gemstoneCount = 20;
 				gemstoneItemId = GEMSTONE_D;
-				sm.addNumber(gemstoneCount);
+				sm.addItemNumber(gemstoneCount);
 				sm.addString("Gemstone D");
 				break;
 			case L2Item.CRYSTAL_B:
 				gemstoneCount = 30;
 				gemstoneItemId = GEMSTONE_D;
-				sm.addNumber(gemstoneCount);
+				sm.addItemNumber(gemstoneCount);
 				sm.addString("Gemstone D");
 				break;
 			case L2Item.CRYSTAL_A:
 				gemstoneCount = 20;
 				gemstoneItemId = GEMSTONE_C;
-				sm.addNumber(gemstoneCount);
+				sm.addItemNumber(gemstoneCount);
 				sm.addString("Gemstone C");
 				break;
 			case L2Item.CRYSTAL_S:
 			case L2Item.CRYSTAL_S80:
 				gemstoneCount = 25;
 				gemstoneItemId = GEMSTONE_C;
-				sm.addNumber(gemstoneCount);
+				sm.addItemNumber(gemstoneCount);
 				sm.addString("Gemstone C");
 				break;
 		}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestConfirmTargetItem.java

@@ -75,7 +75,7 @@ public final class RequestConfirmTargetItem extends L2GameClientPacket
 		}
 		//TODO: can do better? : currently: using isdestroyable() as a check for hero / cursed weapons
 		else if (itemGrade < L2Item.CRYSTAL_C || itemType != L2Item.TYPE2_WEAPON || !item.isDestroyable() ||
-				item.isShadowItem())
+				item.isShadowItem() || item.isTimeLimitedItem())
 		{
 			activeChar.sendPacket(new SystemMessage(SystemMessageId.THIS_IS_NOT_A_SUITABLE_ITEM));
 			return;

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestCrystallizeItem.java

@@ -44,13 +44,13 @@ public final class RequestCrystallizeItem extends L2GameClientPacket
 	private static Logger _log = Logger.getLogger(RequestCrystallizeItem.class.getName());
 
 	private int _objectId;
-	private int _count;
+	private long _count;
 
 	@Override
 	protected void readImpl()
 	{
 		_objectId = readD();
-		_count = readD();
+		_count = readQ();
 	}
 
 	@Override
@@ -213,7 +213,7 @@ public final class RequestCrystallizeItem extends L2GameClientPacket
 
 		SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
 		sm.addItemName(createditem);
-		sm.addNumber(crystalAmount);
+		sm.addItemNumber(crystalAmount);
 		activeChar.sendPacket(sm);
 		sm = null;
 

+ 53 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDeleteBookMarkSlot.java

@@ -0,0 +1,53 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+
+/**
+ *  @author ShanSoft
+ *  @structure: chdd
+ */
+public final class RequestDeleteBookMarkSlot extends L2GameClientPacket
+{
+	private static final String _C__51_REQUESTDELETEBOOKMARKSLOT = "[C] 51 RequestDeleteBookMarkSlot";
+	
+	private int id;
+
+	@Override
+	protected void readImpl()
+	{
+		readH();
+		id = readD();
+	}
+
+	@Override
+	protected void runImpl()
+	{
+		L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+			return;
+		
+		activeChar.TeleportBookmarkDelete(id);
+	}
+
+
+	@Override
+	public String getType()
+	{
+		return _C__51_REQUESTDELETEBOOKMARKSLOT;
+	}
+}

+ 7 - 5
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDestroyItem.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -43,13 +44,13 @@ public final class RequestDestroyItem extends L2GameClientPacket
 	private static Logger _log = Logger.getLogger(RequestDestroyItem.class.getName());
 
 	private int _objectId;
-	private int _count;
+	private long _count;
 
 	@Override
 	protected void readImpl()
 	{
 		_objectId = readD();
-		_count = readD();
+		_count = readQ();
 	}
 
 	@Override
@@ -65,7 +66,7 @@ public final class RequestDestroyItem extends L2GameClientPacket
 			return;
 		}
 
-		int count = _count;
+		long count = _count;
 
         if (activeChar.getPrivateStoreType() != 0)
         {
@@ -139,7 +140,7 @@ public final class RequestDestroyItem extends L2GameClientPacket
 
 		if (L2PetDataTable.isPetItem(itemId))
 		{
-			java.sql.Connection con = null;
+			Connection con = null;
 			try
 			{
 				if (activeChar.getPet() != null && activeChar.getPet().getControlItemId() == _objectId)
@@ -163,7 +164,8 @@ public final class RequestDestroyItem extends L2GameClientPacket
 				try { con.close(); } catch (Exception e) {}
 			}
 		}
-
+		if (itemToRemove.isTimeLimitedItem())
+			itemToRemove.endOfLife();
 		L2ItemInstance removedItem = activeChar.getInventory().destroyItem("Destroy", _objectId, count, activeChar, null);
 
 		if(removedItem == null)

+ 7 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDropItem.java

@@ -42,7 +42,7 @@ public final class RequestDropItem extends L2GameClientPacket
 	private static Logger _log = Logger.getLogger(RequestDropItem.class.getName());
 
 	private int _objectId;
-	private int _count;
+	private long _count;
 	private int _x;
 	private int _y;
 	private int _z;
@@ -51,7 +51,7 @@ public final class RequestDropItem extends L2GameClientPacket
 	protected void readImpl()
 	{
 		_objectId = readD();
-		_count    = readD();
+		_count    = readQ();
 		_x        = readD();
 		_y        = readD();
 		_z        = readD();
@@ -130,6 +130,10 @@ public final class RequestDropItem extends L2GameClientPacket
             activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_DO_WHILE_FISHING_2));
             return;
         }
+		if (activeChar.isFlying())
+		{
+			return;
+		}
 
 		// Cannot discard item that the skill is consuming
 		if (activeChar.isCastingNow())
@@ -184,7 +188,7 @@ public final class RequestDropItem extends L2GameClientPacket
 			activeChar.sendPacket(il);
 		}
 
-		L2ItemInstance dropedItem = activeChar.dropItem("Drop", _objectId, _count, _x, _y, _z, null, false);
+		L2ItemInstance dropedItem = activeChar.dropItem("Drop", _objectId, (int) _count, _x, _y, _z, null, false);
 
 		if (Config.DEBUG) _log.fine("dropping " + _objectId + " item("+_count+") at: " + _x + " " + _y + " " + _z);
 

+ 129 - 130
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java

@@ -86,7 +86,7 @@ public final class RequestEnchantItem extends L2GameClientPacket
 		}
 		
 		// can't enchant rods, hero weapons, adventurers' items,shadow and common items
-		if (item.getItem().getItemType() == L2WeaponType.ROD || item.isHeroItem() || item.getItemId() >= 7816 && item.getItemId() <= 7831 || item.isShadowItem() || item.isCommonItem())
+		if (item.getItem().getItemType() == L2WeaponType.ROD || item.isHeroItem() || item.getItemId() >= 7816 && item.getItemId() <= 7831 || item.isShadowItem() || item.isCommonItem() || item.isTimeLimitedItem())
 		{
 			activeChar.sendPacket(new SystemMessage(SystemMessageId.INAPPROPRIATE_ENCHANT_CONDITION));
 			activeChar.setActiveEnchantItem(null);
@@ -247,76 +247,75 @@ public final class RequestEnchantItem extends L2GameClientPacket
 		
 		int chance = 0;
 		int maxEnchantLevel = 0;
-		
-		if (item.getItem().getType2() == L2Item.TYPE2_WEAPON)
+		synchronized (item)
 		{
-			for (int scrollId : ENCHANT_SCROLLS)
+			if (item.getItem().getType2() == L2Item.TYPE2_WEAPON)
 			{
-				if (scroll.getItemId() == scrollId)
+				for (int scrollId : ENCHANT_SCROLLS)
 				{
-					chance = Config.ENCHANT_CHANCE_WEAPON;
-					break;
+					if (scroll.getItemId() == scrollId)
+					{
+						chance = Config.ENCHANT_CHANCE_WEAPON;
+						break;
+					}
 				}
-			}
-			for (int scrollId : BLESSED_SCROLLS)
-			{
-				if (scroll.getItemId() == scrollId)
+				for (int scrollId : BLESSED_SCROLLS)
 				{
-					chance = Config.BLESSED_ENCHANT_CHANCE_WEAPON;
-					break;
+					if (scroll.getItemId() == scrollId)
+					{
+						chance = Config.BLESSED_ENCHANT_CHANCE_WEAPON;
+						break;
+					}
 				}
+				maxEnchantLevel = Config.ENCHANT_MAX_WEAPON;
 			}
-			maxEnchantLevel = Config.ENCHANT_MAX_WEAPON;
-		}
-		else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR)
-		{
-			for (int scrollId : ENCHANT_SCROLLS)
+			else if (item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR)
 			{
-				if (scroll.getItemId() == scrollId)
+				for (int scrollId : ENCHANT_SCROLLS)
 				{
-					chance = Config.ENCHANT_CHANCE_ARMOR;
-					break;
+					if (scroll.getItemId() == scrollId)
+					{
+						chance = Config.ENCHANT_CHANCE_ARMOR;
+						break;
+					}
 				}
-			}
-			for (int scrollId : BLESSED_SCROLLS)
-			{
-				if (scroll.getItemId() == scrollId)
+				for (int scrollId : BLESSED_SCROLLS)
 				{
-					chance = Config.BLESSED_ENCHANT_CHANCE_ARMOR;
-					break;
+					if (scroll.getItemId() == scrollId)
+					{
+						chance = Config.BLESSED_ENCHANT_CHANCE_ARMOR;
+						break;
+					}
 				}
+				maxEnchantLevel = Config.ENCHANT_MAX_ARMOR;
 			}
-			maxEnchantLevel = Config.ENCHANT_MAX_ARMOR;
-		}
-		else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY)
-		{
-			for (int scrollId : ENCHANT_SCROLLS)
+			else if (item.getItem().getType2() == L2Item.TYPE2_ACCESSORY)
 			{
-				if (scroll.getItemId() == scrollId)
+				for (int scrollId : ENCHANT_SCROLLS)
 				{
-					chance = Config.ENCHANT_CHANCE_JEWELRY;
-					break;
+					if (scroll.getItemId() == scrollId)
+					{
+						chance = Config.ENCHANT_CHANCE_JEWELRY;
+						break;
+					}
 				}
-			}
-			for (int scrollId : BLESSED_SCROLLS)
-			{
-				if (scroll.getItemId() == scrollId)
+				for (int scrollId : BLESSED_SCROLLS)
 				{
-					chance = Config.BLESSED_ENCHANT_CHANCE_JEWELRY;
-					break;
+					if (scroll.getItemId() == scrollId)
+					{
+						chance = Config.BLESSED_ENCHANT_CHANCE_JEWELRY;
+						break;
+					}
 				}
+				maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY;
 			}
-			maxEnchantLevel = Config.ENCHANT_MAX_JEWELRY;
-		}
-		
-		if (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX || item.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR && item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX_FULL)
-			chance = 100;
+			
+			if (item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX || item.getItem().getBodyPart() == L2Item.SLOT_FULL_ARMOR && item.getEnchantLevel() < Config.ENCHANT_SAFE_MAX_FULL)
+				chance = 100;
 		
-		boolean failed = false;
+			boolean failed = false;
 		
-		if (Rnd.get(100) < chance)
-		{
-			synchronized (item)
+			if (Rnd.get(100) < chance)
 			{
 				if (item.getOwnerId() != activeChar.getObjectId() || item.getEnchantLevel() >= maxEnchantLevel && maxEnchantLevel != 0)
 				{
@@ -336,105 +335,105 @@ public final class RequestEnchantItem extends L2GameClientPacket
 				item.setEnchantLevel(item.getEnchantLevel() + 1);
 				item.updateDatabase();
 			}
-		}
-		else
-		{
-			failed = true;
-			
-			if (!blessedScroll)
+			else
 			{
-				if (item.isEquipped())
+				failed = true;
+			
+				if (!blessedScroll)
 				{
-					if (item.getEnchantLevel() > 0)
+					if (item.isEquipped())
 					{
-						sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
-						sm.addNumber(item.getEnchantLevel());
-						sm.addItemName(item);
-						activeChar.sendPacket(sm);
-					}
-					else
-					{
-						sm = new SystemMessage(SystemMessageId.S1_DISARMED);
-						sm.addItemName(item);
-						activeChar.sendPacket(sm);
-					}
+						if (item.getEnchantLevel() > 0)
+						{
+							sm = new SystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED);
+							sm.addNumber(item.getEnchantLevel());
+							sm.addItemName(item);
+							activeChar.sendPacket(sm);
+						}
+						else
+						{
+							sm = new SystemMessage(SystemMessageId.S1_DISARMED);
+							sm.addItemName(item);
+							activeChar.sendPacket(sm);
+						}
 					
-					L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getLocationSlot());
-					InventoryUpdate iu = new InventoryUpdate();
-					for (L2ItemInstance itm : unequiped)
-					{
-						iu.addModifiedItem(itm);
-					}
-					activeChar.sendPacket(iu);
+						L2ItemInstance[] unequiped = activeChar.getInventory().unEquipItemInSlotAndRecord(item.getLocationSlot());
+						InventoryUpdate iu = new InventoryUpdate();
+						for (L2ItemInstance itm : unequiped)
+						{
+							iu.addModifiedItem(itm);
+						}
+						activeChar.sendPacket(iu);
 					
-					activeChar.broadcastUserInfo();
-				}
+						activeChar.broadcastUserInfo();
+					}
 				
-				int count = item.getCrystalCount() - (item.getItem().getCrystalCount() + 1) / 2;
-				if (count < 1)
-					count = 1;
+					int count = item.getCrystalCount() - (item.getItem().getCrystalCount() + 1) / 2;
+					if (count < 1)
+						count = 1;
 				
-				L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null);
-				if (destroyItem == null)
-				{
-					activeChar.setActiveEnchantItem(null);
-					return;
-				}
+					L2ItemInstance destroyItem = activeChar.getInventory().destroyItem("Enchant", item, activeChar, null);
+					if (destroyItem == null)
+					{
+						activeChar.setActiveEnchantItem(null);
+						return;
+					}
 				
-				L2ItemInstance crystals = activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, destroyItem);
+					L2ItemInstance crystals = activeChar.getInventory().addItem("Enchant", crystalId, count, activeChar, destroyItem);
 				
-				sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
-				sm.addItemName(crystals);
-				sm.addNumber(count);
-				activeChar.sendPacket(sm);
+					sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
+					sm.addItemName(crystals);
+					sm.addItemNumber(count);
+					activeChar.sendPacket(sm);
 				
-				if (!Config.FORCE_INVENTORY_UPDATE)
-				{
-					InventoryUpdate iu = new InventoryUpdate();
-					if (destroyItem.getCount() == 0)
-						iu.addRemovedItem(destroyItem);
-					else
-						iu.addModifiedItem(destroyItem);
-					iu.addItem(crystals);
+					if (!Config.FORCE_INVENTORY_UPDATE)
+					{
+						InventoryUpdate iu = new InventoryUpdate();
+						if (destroyItem.getCount() == 0)
+							iu.addRemovedItem(destroyItem);
+						else
+							iu.addModifiedItem(destroyItem);
+						iu.addItem(crystals);
 					
-					activeChar.sendPacket(iu);
-				}
-				else
-					activeChar.sendPacket(new ItemList(activeChar, true));
+						activeChar.sendPacket(iu);
+					}
+					else
+						activeChar.sendPacket(new ItemList(activeChar, true));
 				
-				StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
-				su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
-				activeChar.sendPacket(su);
+					StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
+					su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
+					activeChar.sendPacket(su);
 				
-				activeChar.broadcastUserInfo();
+					activeChar.broadcastUserInfo();
 				
-				L2World world = L2World.getInstance();
-				world.removeObject(destroyItem);
-				activeChar.sendPacket(new ExPutEnchantTargetItemResult(1, crystalId, count));
-			}
-			else
-			{
-				sm = new SystemMessage(SystemMessageId.BLESSED_ENCHANT_FAILED);
-				activeChar.sendPacket(sm);
+					L2World world = L2World.getInstance();
+					world.removeObject(destroyItem);
+					activeChar.sendPacket(new ExPutEnchantTargetItemResult(1, crystalId, count));
+				}
+				else
+				{
+					sm = new SystemMessage(SystemMessageId.BLESSED_ENCHANT_FAILED);
+					activeChar.sendPacket(sm);
 				
-				item.setEnchantLevel(0);
-				item.updateDatabase();
-				activeChar.sendPacket(new ExPutEnchantTargetItemResult(2, 0, 0));
+					item.setEnchantLevel(0);
+					item.updateDatabase();
+					activeChar.sendPacket(new ExPutEnchantTargetItemResult(2, 0, 0));
+				}
 			}
-		}
-		sm = null;
+			sm = null;
 		
-		StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
-		su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
-		activeChar.sendPacket(su);
-		su = null;
+			StatusUpdate su = new StatusUpdate(activeChar.getObjectId());
+			su.addAttribute(StatusUpdate.CUR_LOAD, activeChar.getCurrentLoad());
+			activeChar.sendPacket(su);
+			su = null;
 		
-		if (!failed)
-			activeChar.sendPacket(new ExPutEnchantTargetItemResult(0, 0, 0));
+			if (!failed)
+				activeChar.sendPacket(new ExPutEnchantTargetItemResult(0, 0, 0));
 		
-		activeChar.sendPacket(new ItemList(activeChar, false));
-		activeChar.broadcastUserInfo();
-		activeChar.setActiveEnchantItem(null);
+			activeChar.sendPacket(new ItemList(activeChar, false));
+			activeChar.broadcastUserInfo();
+			activeChar.setActiveEnchantItem(null);
+		}
 	}
 	
 	/*

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java

@@ -95,7 +95,7 @@ public class RequestExEnchantItemAttribute extends L2GameClientPacket
 		}
 
 		//can't enchant rods, shadow items, adventurers', hero items
-		if (item.getItem().getItemType() == L2WeaponType.ROD || item.isShadowItem() || item.isHeroItem()
+		if (item.getItem().getItemType() == L2WeaponType.ROD || item.isShadowItem() || item.isHeroItem() || item.isTimeLimitedItem()
 		|| (item.getItemId() >= 7816 && item.getItemId() <= 7831) || (item.getItem().getItemType() == L2WeaponType.NONE) ||
 			!(item.getItem().getCrystalType() == L2Item.CRYSTAL_S || item.getItem().getCrystalType() == L2Item.CRYSTAL_S80))
 		{
@@ -178,6 +178,7 @@ public class RequestExEnchantItemAttribute extends L2GameClientPacket
 			}
 			player.sendPacket(sm);
 			item.setElementAttr(elementToAdd, newPower);
+			item.updateElementAttrBonus(player); 
 
 			// send packets
 			InventoryUpdate iu = new InventoryUpdate();

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExEnchantSkillInfoDetail.java

@@ -64,7 +64,7 @@ public final class RequestExEnchantSkillInfoDetail extends L2GameClientPacket
             return;
         
         int bookId = 0;
-        int reqCount = 0;
+        long reqCount = 0;
         // require book for first level
         int enchantLevel = _skillLvl%100;
         // if going to first level OR going to Original level(untraining) 

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.logging.Level;
@@ -111,7 +112,7 @@ public final class RequestExSetPledgeCrestLarge extends L2GameClientPacket
                 crestCache.removePledgeCrestLarge(clan.getCrestLargeId());
             }
 
-            java.sql.Connection con = null;
+            Connection con = null;
 
             try
             {

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExTryToPutEnchantTargetItem.java

@@ -73,7 +73,7 @@ public class RequestExTryToPutEnchantTargetItem extends L2GameClientPacket
 			activeChar.setIsEnchanting(true);
 
 			if (targetItem.isEtcItem() || targetItem.isWear() || targetItem.getItem().getItemType() == L2WeaponType.ROD || targetItem.isHeroItem() || targetItem.getItemId() >= 7816 && targetItem.getItemId() <= 7831
-					|| targetItem.isShadowItem() || targetItem.isCommonItem())
+					|| targetItem.isShadowItem() || targetItem.isCommonItem() || targetItem.isTimeLimitedItem())
 			{
 				activeChar.sendPacket(new SystemMessage(SystemMessageId.DOES_NOT_FIT_SCROLL_CONDITIONS));
 				activeChar.setActiveEnchantItem(null);

+ 3 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendDel.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.logging.Level;
@@ -47,7 +48,7 @@ public final class RequestFriendDel extends L2GameClientPacket{
 	protected void runImpl()
 	{
 		SystemMessage sm;
-		java.sql.Connection con = null;
+		Connection con = null;
 		L2PcInstance activeChar = getClient().getActiveChar();
         if (activeChar == null)
             return;
@@ -93,8 +94,8 @@ public final class RequestFriendDel extends L2GameClientPacket{
 		    }
 
 			int objectId = rset.getInt("friendId");
+			rset.close();
 			statement.close();
-            rset.close();
 
 			statement = con.prepareStatement("DELETE FROM character_friends WHERE (charId=? AND friendId=?) OR (charId=? AND friendId=?)");
 			statement.setInt(1, activeChar.getObjectId());

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendInvite.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.logging.Level;
@@ -49,7 +50,7 @@ public final class RequestFriendInvite extends L2GameClientPacket
 	protected void runImpl()
 	{
 		SystemMessage sm;
-		java.sql.Connection con = null;
+		Connection con = null;
 		L2PcInstance activeChar = getClient().getActiveChar();
 
         if (activeChar == null)

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendList.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.logging.Logger;
@@ -49,7 +50,7 @@ public final class RequestFriendList extends L2GameClientPacket
 			return;
 
 		SystemMessage sm;
-		java.sql.Connection con = null;
+		Connection con = null;
 
 		try
 		{

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestGetItemFromPet.java

@@ -32,7 +32,7 @@ public final class RequestGetItemFromPet extends L2GameClientPacket
 	private static Logger _log = Logger.getLogger(RequestGetItemFromPet.class.getName());
 
 	private int _objectId;
-	private int _amount;
+	private long _amount;
 	@SuppressWarnings("unused")
     private int _unknown;
 
@@ -40,7 +40,7 @@ public final class RequestGetItemFromPet extends L2GameClientPacket
 	protected void readImpl()
 	{
 		_objectId = readD();
-		_amount   = readD();
+		_amount   = readQ();
 		_unknown  = readD();// = 0 for most trades
 	}
 
@@ -50,7 +50,8 @@ public final class RequestGetItemFromPet extends L2GameClientPacket
 		L2PcInstance player = getClient().getActiveChar();
         if (player == null || !(player.getPet() instanceof L2PetInstance)) return;
         L2PetInstance pet = (L2PetInstance)player.getPet();
-
+        if (player.getActiveEnchantItem() != null)
+        	return;
         if(_amount < 0)
         {
         	Util.handleIllegalPlayerAction(player,"[RequestGetItemFromPet] count < 0! ban! oid: "+_objectId+" owner: "+player.getName(),Config.DEFAULT_PUNISH);

+ 4 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestGiveItemToPet.java

@@ -36,13 +36,13 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
 	
 	private int _objectId;
 	
-	private int _amount;
+	private long _amount;
 	
 	@Override
 	protected void readImpl()
 	{
 		_objectId = readD();
-		_amount = readD();
+		_amount = readQ();
 	}
 	
 	@Override
@@ -51,7 +51,8 @@ public final class RequestGiveItemToPet extends L2GameClientPacket
 		L2PcInstance player = getClient().getActiveChar();
 		if (player == null || !(player.getPet() instanceof L2PetInstance))
 			return;
-		
+        if (player.getActiveEnchantItem() != null)
+        	return;
 		// Alt game - Karma punishment
 		if (!Config.ALT_GAME_KARMA_PLAYER_CAN_TRADE && player.getKarma() > 0)
 			return;

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestHennaEquip.java

@@ -63,7 +63,7 @@ public final class RequestHennaEquip extends L2GameClientPacket
             return;
 
     	L2HennaInstance temp = new L2HennaInstance(template);
-    	int _count = 0;
+    	long _count = 0;
     	
     	/* Prevents henna drawing exploit: 
     	   1) talk to L2SymbolMakerInstance 

+ 6 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java

@@ -103,4 +103,10 @@ public final class RequestMagicSkillUse extends L2GameClientPacket
 	{
 		return _C__2F_REQUESTMAGICSKILLUSE;
 	}
+	
+	@Override
+	protected boolean triggersOnActionRequest()
+	{
+		return false;
+	}
 }

+ 3 - 4
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestManorList.java

@@ -21,13 +21,12 @@ import net.sf.l2j.gameserver.network.serverpackets.ExSendManorList;
 /**
  * Format: ch
  * c (id) 0xD0
- * h (subid) 0x08
+ * h (subid) 0x01
  * @author l3x
- *
  */
 public class RequestManorList extends L2GameClientPacket
 {
-	private static final String _C__FE_08_REQUESTMANORLIST = "[C] D0:01 RequestManorList";
+	private static final String _C__D0_01_REQUESTMANORLIST = "[C] D0:01 RequestManorList";
 
 	@Override
 	protected void readImpl()
@@ -58,6 +57,6 @@ public class RequestManorList extends L2GameClientPacket
 	@Override
 	public String getType()
 	{
-		return _C__FE_08_REQUESTMANORLIST;
+		return _C__D0_01_REQUESTMANORLIST;
 	}
 }

+ 57 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestModifyBookMarkSlot.java

@@ -0,0 +1,57 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+
+/**
+ *  @author ShanSoft
+ *  @structure chddSdS
+ */
+public final class RequestModifyBookMarkSlot extends L2GameClientPacket
+{
+	private static final String _C__51_REQUESTMODIFYBOOKMARKSLOT = "[C] 51 RequestModifyBookMarkSlot";
+
+	private int id,icon;
+	private String name,tag;
+	
+	@Override
+	protected void readImpl()
+	{
+
+		readH();
+		id = readD();
+		name = readS();
+		icon = readD();
+		tag = readS();
+		
+	}
+	@Override
+	protected void runImpl()
+	{
+		L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+			return;
+		activeChar.TeleportBookmarkModify(id, icon, tag, name);
+	}
+
+
+	@Override
+	public String getType()
+	{
+		return _C__51_REQUESTMODIFYBOOKMARKSLOT;
+	}
+}

+ 3 - 11
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestMoveToLocationInVehicle.java

@@ -27,16 +27,14 @@ import net.sf.l2j.util.Point3D;
 
 public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 {
+	private static final String _C__75_MOVETOLOCATIONINVEHICLE = "[C] 75 RequestMoveToLocationInVehicle";
+
 	private final Point3D _pos = new Point3D(0,0,0);
 	private final Point3D _origin_pos = new Point3D(0,0,0);
 	private int _boatId;
 
 	public TaskPriority getPriority() { return TaskPriority.PR_HIGH; }
 
-	/**
-	 * @param buf
-	 * @param client
-	 */
 	@Override
 	protected void readImpl()
 	{
@@ -78,19 +76,13 @@ public final class RequestMoveToLocationInVehicle extends L2GameClientPacket
 
 	}
 
-	/**
-	 * @return
-	 */
-
-
 	/* (non-Javadoc)
 	 * @see net.sf.l2j.gameserver.BasePacket#getType()
 	 */
 	@Override
 	public String getType()
 	{
-		// TODO Auto-generated method stub
-		return null;
+		return _C__75_MOVETOLOCATIONINVEHICLE;
 	}
 
 }

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPCCafeCouponUse.java

@@ -19,12 +19,12 @@ import java.util.logging.Logger;
 /**
  * Format: (ch) S
  * @author  -Wooden-
- *
+ * TODO: GodKratos: This packet is wrong in Gracia Final!!
  */
 public final class RequestPCCafeCouponUse extends L2GameClientPacket
 {
     protected static final Logger _log = Logger.getLogger(RequestPCCafeCouponUse.class.getName());
-    private static final String _C__D0_20_REQUESTPCCAFECOUPONUSE = "[C] D0:20 RequestPCCafeCouponUse";
+    private static final String _C__D0_20_REQUESTPCCAFECOUPONUSE = "[C] D0:?? RequestPCCafeCouponUse";
     private String _str;
 
 

+ 6 - 6
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPackageSend.java

@@ -57,7 +57,7 @@ public final class RequestPackageSend extends L2GameClientPacket
 		for(int i = 0; i<_count; i++)
 		{
 			int id = readD(); //this is some id sent in PackageSendableList
-			int count = readD();
+			long count = readQ();
 			_items.add(new Item(id, count));
 		}
 	}
@@ -96,13 +96,13 @@ public final class RequestPackageSend extends L2GameClientPacket
 
         	// Freight price from config or normal price per item slot (30)
         	int fee = _count * Config.ALT_GAME_FREIGHT_PRICE;
-        	int currentAdena = player.getAdena();
+        	long currentAdena = player.getAdena();
         	int slots = 0;
 
         	for (Item i : _items)
         	{
         		int objectId = i.id;
-        		int count = i.count;
+        		long count = i.count;
 
         		// Check validity of requested item
         		L2ItemInstance item = player.checkItemManipulation(objectId, count, "deposit");
@@ -141,7 +141,7 @@ public final class RequestPackageSend extends L2GameClientPacket
         	for (Item i : _items)
         	{
         		int objectId = i.id;
-        		int count = i.count;
+        		long count = i.count;
 
         		// check for an invalid item
         		if (objectId == 0 && count == 0) continue;
@@ -197,9 +197,9 @@ public final class RequestPackageSend extends L2GameClientPacket
 	private class Item
 	{
 		public int id;
-		public int count;
+		public long count;
 
-		public Item(int i, int c)
+		public Item(int i, long c)
 		{
 			id = i;
 			count = c;

+ 3 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPetUseItem.java

@@ -41,6 +41,9 @@ public final class RequestPetUseItem extends L2GameClientPacket
 	protected void readImpl()
 	{
 		_objectId = readD();
+		// todo implement me properly
+		//readQ();
+		//readD();
 	}
 
 	@Override

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java

@@ -59,11 +59,11 @@ public final class RequestPrivateStoreBuy extends L2GameClientPacket
 		for (int i = 0; i < _count ; i++)
 		{
 			int objectId = readD();
-			long count   = readD();
+			long count   = readQ();
 			if (count > Integer.MAX_VALUE) count = Integer.MAX_VALUE;
-			int price    = readD();
+			long price    = readQ();
 
-			_items[i] = new ItemRequest(objectId, (int)count, price);
+			_items[i] = new ItemRequest(objectId, (int)count, (int)price);
 		}
 	}
 

+ 3 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreManageSell.java

@@ -31,6 +31,9 @@ public final class RequestPrivateStoreManageSell extends L2GameClientPacket
 	@Override
 	protected void readImpl()
 	{
+		// TODO: implement me properly
+		//readD();
+		//readQ();
 	}
 
 	@Override

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java

@@ -58,8 +58,8 @@ public final class RequestPrivateStoreSell extends L2GameClientPacket
 			int itemId = readD();
             readH(); //TODO analyse this
             readH(); //TODO analyse this
-			long count   = readD();
-			int price    = readD();
+			long count   = readQ();
+			long price    = readQ();
 
 			if (count > Integer.MAX_VALUE || count < 0)
 			{
@@ -118,7 +118,7 @@ public final class RequestPrivateStoreSell extends L2GameClientPacket
 			return;
 		}
 
-        if (!storeList.privateStoreSell(player, _items, _price))
+        if (!storeList.privateStoreSell(player, _items))
         {
             sendPacket(ActionFailed.STATIC_PACKET);
             _log.warning("PrivateStore sell has failed due to invalid list or request. Player: " + player.getName() + ", Private store of: " + storePlayer.getName());

+ 12 - 12
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestProcureCropList.java

@@ -71,7 +71,7 @@ public class RequestProcureCropList extends L2GameClientPacket
 			_items[i * 4 + 1] = itemId;
 			int manorId = readD();
 			_items[i * 4 + 2] = manorId;
-			long count = readD();
+			long count = readQ();
 			if (count > Integer.MAX_VALUE) count = Integer.MAX_VALUE;
 			_items[i * 4 + 3] = (int)count;
 		}
@@ -192,7 +192,7 @@ public class RequestProcureCropList extends L2GameClientPacket
 			if (crop == null || crop.getId() == 0 || crop.getPrice() == 0)
 				continue;
 
-			int fee = 0; // fee for selling to other manors
+			long fee = 0; // fee for selling to other manors
 
 			int rewardItem = L2Manor.getInstance().getRewardItem(cropId,
 					crop.getReward());
@@ -200,19 +200,19 @@ public class RequestProcureCropList extends L2GameClientPacket
 			if (count > crop.getAmount())
 				continue;
 
-			int sellPrice = (count * crop.getPrice());
-			int rewardPrice = ItemTable.getInstance().getTemplate(rewardItem)
+			long sellPrice = (count * crop.getPrice());
+			long rewardPrice = ItemTable.getInstance().getTemplate(rewardItem)
 					.getReferencePrice();
 
 			if (rewardPrice == 0)
 				continue;
 
-			int rewardItemCount = sellPrice / rewardPrice;
+			long rewardItemCount = sellPrice / rewardPrice;
 			if (rewardItemCount < 1)
 			{
 				SystemMessage sm = new SystemMessage(SystemMessageId.FAILED_IN_TRADING_S2_OF_CROP_S1);
 				sm.addItemName(cropId);
-				sm.addNumber(count);
+				sm.addItemNumber(count);
 				player.sendPacket(sm);
 				continue;
 			}
@@ -225,7 +225,7 @@ public class RequestProcureCropList extends L2GameClientPacket
 			{
 				SystemMessage sm = new SystemMessage(SystemMessageId.FAILED_IN_TRADING_S2_OF_CROP_S1);
 				sm.addItemName(cropId);
-				sm.addNumber(count);
+				sm.addItemNumber(count);
 				player.sendPacket(sm);
 				sm = new SystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
 				player.sendPacket(sm);
@@ -271,31 +271,31 @@ public class RequestProcureCropList extends L2GameClientPacket
 			SystemMessage sm = new SystemMessage(
 					SystemMessageId.TRADED_S2_OF_CROP_S1);
 			sm.addItemName(cropId);
-			sm.addNumber(count);
+			sm.addItemNumber(count);
 			player.sendPacket(sm);
 
 			if (fee > 0)
 			{
 				sm = new SystemMessage(SystemMessageId.S1_ADENA_HAS_BEEN_WITHDRAWN_TO_PAY_FOR_PURCHASING_FEES);
-				sm.addNumber(fee);
+				sm.addItemNumber(fee);
 				player.sendPacket(sm);
 			}
 
 			sm = new SystemMessage(SystemMessageId.S2_S1_DISAPPEARED);
 			sm.addItemName(cropId);
-			sm.addNumber(count);
+			sm.addItemNumber(count);
 			player.sendPacket(sm);
 
 			if (fee > 0)
 			{
 				sm = new SystemMessage(SystemMessageId.DISAPPEARED_ADENA);
-				sm.addNumber(fee);
+				sm.addItemNumber(fee);
 				player.sendPacket(sm);
 			}
 
 			sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
 			sm.addItemName(itemAdd);
-			sm.addNumber(rewardItemCount);
+			sm.addItemNumber(rewardItemCount);
 			player.sendPacket(sm);
 		}
 

+ 5 - 5
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopListSet.java

@@ -33,7 +33,7 @@ public final class RequestRecipeShopListSet extends L2GameClientPacket
 	//private static Logger _log = Logger.getLogger(RequestRecipeShopListSet.class.getName());
 
 	private int _count;
-	private int[] _items; // count*2
+	private long[] _items; // count*2
 
 
 	@Override
@@ -42,11 +42,11 @@ public final class RequestRecipeShopListSet extends L2GameClientPacket
 		_count = readD();
 		if (_count < 0  || _count * 8 > _buf.remaining() || _count > Config.MAX_ITEM_IN_PACKET)
             _count = 0;
-		_items = new int[_count * 2];
+		_items = new long[_count * 2];
         for (int x = 0; x < _count ; x++)
         {
             int recipeID = readD(); _items[x*2 + 0] = recipeID;
-            int cost     = readD(); _items[x*2 + 1] = cost;
+            long cost     = readQ(); _items[x*2 + 1] = cost;
         }
 	}
 
@@ -75,8 +75,8 @@ public final class RequestRecipeShopListSet extends L2GameClientPacket
 
             for (int x = 0; x < _count ; x++)
             {
-                int recipeID = _items[x*2 + 0];
-                int cost     = _items[x*2 + 1];
+                int recipeID = (int) _items[x*2 + 0];
+                long cost     = _items[x*2 + 1];
                 createList.add(new L2ManufactureItem(recipeID, cost));
             }
             createList.setStoreName(player.getCreateList() != null ? player.getCreateList().getStoreName() : "");

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeItem.java

@@ -35,14 +35,14 @@ public final class RequestRecipeShopMakeItem extends L2GameClientPacket
 	private int _id;
 	private int _recipeId;
 	@SuppressWarnings("unused")
-    private int _unknow;
+    private long _unknow;
 
 	@Override
 	protected void readImpl()
 	{
 		_id = readD();
 		_recipeId = readD();
-		_unknow = readD();
+		_unknow = readQ();
 	}
 
 	@Override

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRefine.java

@@ -37,7 +37,7 @@ public final class RequestRefine extends L2GameClientPacket
 	private int _targetItemObjId;
 	private int _refinerItemObjId;
 	private int _gemstoneItemObjId;
-	private int _gemstoneCount;
+	private long _gemstoneCount;
 
 	@Override
 	protected void readImpl()
@@ -45,7 +45,7 @@ public final class RequestRefine extends L2GameClientPacket
 		_targetItemObjId = readD();
 		_refinerItemObjId = readD();
 		_gemstoneItemObjId = readD();
-		_gemstoneCount = readD();
+		_gemstoneCount = readQ();
 	}
 
 	/**
@@ -167,7 +167,7 @@ public final class RequestRefine extends L2GameClientPacket
 		if (player.getPrivateStoreType() != L2PcInstance.STORE_PRIVATE_NONE || player.isDead()
 				|| player.isParalyzed() || player.isFishing() || player.isSitting()) return false;
 
-		int modifyGemstoneCount = _gemstoneCount;
+		long modifyGemstoneCount = _gemstoneCount;
 		int lifeStoneLevel = getLifeStoneLevel(lifeStoneId);
 		int lifeStoneGrade = getLifeStoneGrade(lifeStoneId);
 		switch (itemGrade)

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestReplySurrenderPledgeWar.java

@@ -43,7 +43,7 @@ public final class RequestReplySurrenderPledgeWar extends L2GameClientPacket
 
         if (_answer == 1)
         {
-            requestor.deathPenalty(false, false);
+            requestor.deathPenalty(false, false, false);
             ClanTable.getInstance().deleteclanswars(requestor.getClanId(), activeChar.getClanId());
         }
         else

+ 55 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSaveBookMarkSlot.java

@@ -0,0 +1,55 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+
+/**
+ *  @author ShanSoft
+ *  @structure chdSdS
+ */
+public final class RequestSaveBookMarkSlot extends L2GameClientPacket
+{
+	private static final String _C__51_REQUESTSAVEBOOKMARKSLOT = "[C] 51 RequestSaveBookMarkSlot";
+	
+	private int icon;
+	private String name,tag;
+
+	@Override
+	protected void readImpl()
+	{
+		readH();
+		name = readS();
+		icon = readD();
+		tag = readS();
+	}
+
+	@Override
+	protected void runImpl()
+	{
+		L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+			return;
+		activeChar.TeleportBookmarkAdd(activeChar.getX(), activeChar.getY(), activeChar.getZ(), icon, tag, name);
+	}
+
+
+	@Override
+	public String getType()
+	{
+		return _C__51_REQUESTSAVEBOOKMARKSLOT;
+	}
+}

+ 18 - 7
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSellItem.java

@@ -18,9 +18,11 @@ import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.cache.HtmCache;
 import net.sf.l2j.gameserver.model.L2ItemInstance;
 import net.sf.l2j.gameserver.model.L2Object;
+import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.actor.L2Npc;
 import net.sf.l2j.gameserver.model.actor.instance.L2FishermanInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2MerchantInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2MerchantSummonInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PetManagerInstance;
 import net.sf.l2j.gameserver.network.SystemMessageId;
@@ -85,7 +87,7 @@ public final class RequestSellItem extends L2GameClientPacket
 		{
 			int objectId = readD(); _items[i * 3 + 0] = objectId;
 			int itemId   = readD(); _items[i * 3 + 1] = itemId;
-			long cnt      = readD();
+			long cnt      = readQ();
 			if (cnt > Integer.MAX_VALUE || cnt <= 0)
 			{
 			    _count = 0; _items = null;
@@ -115,6 +117,7 @@ public final class RequestSellItem extends L2GameClientPacket
         L2Object target = player.getTarget();
         if (!player.isGM() && (target == null								// No target (ie GM Shop)
         		|| !(target instanceof L2MerchantInstance)	// Target not a merchant and not mercmanager
+        		|| !(target instanceof L2MerchantSummonInstance)
 			    || !player.isInsideRadius(target, L2Npc.INTERACTION_DISTANCE, false, false) 	// Distance is too far
 			        )) return;
 
@@ -123,7 +126,7 @@ public final class RequestSellItem extends L2GameClientPacket
 
         if (target != null)
         {
-        	if (target instanceof L2MerchantInstance)
+        	if (target instanceof L2MerchantInstance || target instanceof L2MerchantSummonInstance)
         		htmlFolder = "merchant";
         	else if (target instanceof L2FishermanInstance)
         		htmlFolder = "fisherman";
@@ -135,14 +138,19 @@ public final class RequestSellItem extends L2GameClientPacket
         else
         	ok = false;
 
-        L2Npc merchant = null;
+        L2Character merchant = null;
 
         if (ok)
-        	merchant = (L2Npc)target;
+        	merchant = (L2Character)target;
 
 		if (merchant != null && _listId > 1000000) // lease
 		{
-			if (merchant.getTemplate().npcId != _listId-1000000)
+			int npcId = 0;
+			if (merchant instanceof L2MerchantInstance)
+				npcId = ((L2MerchantInstance)merchant).getTemplate().npcId;
+			else if (merchant instanceof L2MerchantSummonInstance)
+				npcId = ((L2MerchantSummonInstance)merchant).getTemplate().npcId;
+			if (npcId != _listId-1000000)
 			{
 				sendPacket(ActionFailed.STATIC_PACKET);
 				return;
@@ -201,8 +209,11 @@ public final class RequestSellItem extends L2GameClientPacket
 */
 		}
 		player.addAdena("Sell", (int)totalPrice, merchant, false);
-
-		String html = HtmCache.getInstance().getHtm("data/html/"+ htmlFolder +"/" + merchant.getNpcId() + "-sold.htm");
+		String html;
+		if (merchant instanceof L2MerchantInstance)
+			html = HtmCache.getInstance().getHtm("data/html/"+ htmlFolder +"/" + ((L2MerchantInstance)merchant).getNpcId() + "-sold.htm");
+		else
+			html = HtmCache.getInstance().getHtm("data/html/"+ htmlFolder +"/" + ((L2MerchantSummonInstance)merchant).getNpcId() + "-sold.htm");
 
 		if (html != null)
 		{

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetAllyCrest.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.logging.Level;
@@ -93,7 +94,7 @@ public final class RequestSetAllyCrest extends L2GameClientPacket
                 crestCache.removeAllyCrest(leaderclan.getAllyCrestId());
             }
 
-            java.sql.Connection con = null;
+            Connection con = null;
 
             try
             {

+ 8 - 8
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetCrop.java

@@ -40,7 +40,7 @@ public class RequestSetCrop extends L2GameClientPacket {
 
 	private int _manorId;
 
-	private int[] _items; // _size*4
+	private long[] _items; // _size*4
 
 	@Override
 	protected void readImpl()
@@ -52,14 +52,14 @@ public class RequestSetCrop extends L2GameClientPacket {
 			_size = 0;
 			return;
 		}
-		_items = new int[_size * 4];
+		_items = new long[_size * 4];
 		for (int i = 0; i < _size; i++)
 		{
 			int itemId = readD();
 			_items[i * 4 + 0] = itemId;
-			int sales = readD();
+			long sales = readQ();
 			_items[i * 4 + 1] = sales;
-			int price = readD();
+			long price = readQ();
 			_items[i * 4 + 2] = price;
 			int type = readC();
 			_items[i * 4 + 3] = type;
@@ -75,10 +75,10 @@ public class RequestSetCrop extends L2GameClientPacket {
 		FastList<CropProcure> crops = new FastList<CropProcure>();
 		for (int i = 0; i < _size; i++)
 		{
-			int id = _items[i * 4 + 0];
-			int sales = _items[i * 4 + 1];
-			int price = _items[i * 4 + 2];
-			int type = _items[i * 4 + 3];
+			int id = (int) _items[i * 4 + 0];
+			long sales = _items[i * 4 + 1];
+			long price = _items[i * 4 + 2];
+			int type = (int) _items[i * 4 + 3];
 			if (id > 0)
 			{
 				CropProcure s = CastleManorManager.getInstance().getNewCropProcure(id, sales, type, price, sales);

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetPledgeCrest.java

@@ -14,6 +14,7 @@
  */
 package net.sf.l2j.gameserver.network.clientpackets;
 
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.logging.Level;
@@ -116,7 +117,7 @@ public final class RequestSetPledgeCrest extends L2GameClientPacket
                 return;
             }
 
-            java.sql.Connection con = null;
+            Connection con = null;
 
             try
             {

+ 7 - 7
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSetSeed.java

@@ -40,7 +40,7 @@ public class RequestSetSeed extends L2GameClientPacket {
 
 	private int _manorId;
 
-	private int[] _items; // _size*3
+	private long[] _items; // _size*3
 
 	/**
 	 * @param buf
@@ -56,14 +56,14 @@ public class RequestSetSeed extends L2GameClientPacket {
 			_size = 0;
 			return;
 		}
-		_items = new int[_size * 3];
+		_items = new long[_size * 3];
 		for (int i = 0; i < _size; i++)
 		{
 			int itemId = readD();
 			_items[i * 3 + 0] = itemId;
-			int sales = readD();
+			long sales = readQ();
 			_items[i * 3 + 1] = sales;
-			int price = readD();
+			long price = readQ();
 			_items[i * 3 + 2] = price;
 		}
 	}
@@ -77,9 +77,9 @@ public class RequestSetSeed extends L2GameClientPacket {
 		FastList<SeedProduction> seeds = new FastList<SeedProduction>();
 		for (int i = 0; i < _size; i++)
 		{
-			int id = _items[i * 3 + 0];
-			int sales = _items[i * 3 + 1];
-			int price = _items[i * 3 + 2];
+			int id = (int) _items[i * 3 + 0];
+			long sales = _items[i * 3 + 1];
+			long price = _items[i * 3 + 2];
 			if (id > 0)
 			{
 				SeedProduction s = CastleManorManager.getInstance()

+ 12 - 4
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestShortCutReg.java

@@ -59,6 +59,13 @@ public final class RequestShortCutReg extends L2GameClientPacket
 		switch (_type)
 		{
 			case 0x01:	// item
+			case 0x02:	// skill
+			{
+				L2ShortCut sc = new L2ShortCut(_slot, _page, _type, _id, _lvl, _characterType);
+				sendPacket(new ShortCutRegister(sc));
+				activeChar.registerShortCut(sc);
+				break;
+			}
 			case 0x03:	// action
 			case 0x04:	// macro
             case 0x05:  // recipe
@@ -68,13 +75,14 @@ public final class RequestShortCutReg extends L2GameClientPacket
 				activeChar.registerShortCut(sc);
 				break;
 			}
-			case 0x02:	// skill
-			{
-				L2ShortCut sc = new L2ShortCut(_slot, _page, _type, _id,  _lvl, _characterType);
+            case 0x06: // Teleport Bookmark
+            {
+				L2ShortCut sc = new L2ShortCut(_slot, _page, _type, _id, _lvl, _characterType);
 				sendPacket(new ShortCutRegister(sc));
 				activeChar.registerShortCut(sc);
 				break;
-			}
+            }
+
 		}
 
 	}

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSurrenderPersonally.java

@@ -66,7 +66,7 @@ public final class RequestSurrenderPersonally extends L2GameClientPacket
         }
 
         _activeChar.setWantsPeace(1);
-        _activeChar.deathPenalty(false, false);
+        _activeChar.deathPenalty(false, false, false);
         SystemMessage msg = new SystemMessage(SystemMessageId.YOU_HAVE_PERSONALLY_SURRENDERED_TO_THE_S1_CLAN);
         msg.addString(_pledgeName);
         _activeChar.sendPacket(msg);

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSurrenderPledgeWar.java

@@ -70,7 +70,7 @@ public final class RequestSurrenderPledgeWar extends L2GameClientPacket
         msg.addString(_pledgeName);
         _activeChar.sendPacket(msg);
         msg = null;
-        _activeChar.deathPenalty(false, false);
+        _activeChar.deathPenalty(false, false, false);
         ClanTable.getInstance().deleteclanswars(_clan.getClanId(), clan.getClanId());
         /*L2PcInstance leader = L2World.getInstance().getPlayer(clan.getLeaderName());
         if(leader != null && leader.isOnline() == 0)

+ 51 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestTeleportBookMark.java

@@ -0,0 +1,51 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ * 
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ * 
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.network.clientpackets;
+
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+
+/**
+ *  @author ShanSoft
+ *  Packets Structure: chdd
+ */
+public final class RequestTeleportBookMark extends L2GameClientPacket
+{
+	private static final String _C__51_REQUESTTELEPORTBOOKMARK = "[C] 51 RequestTeleportBookMark";
+
+	private int id;
+	@Override
+	protected void readImpl()
+	{
+		readH();
+		id = readD();
+	}
+
+	@Override
+	protected void runImpl()
+	{
+		L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+			return;
+		activeChar.TeleportBookmarkGo(id);
+	}
+
+
+	@Override
+	public String getType()
+	{
+		return _C__51_REQUESTTELEPORTBOOKMARK;
+	}
+}

+ 9 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/Say2.java

@@ -110,10 +110,17 @@ public final class Say2 extends L2GameClientPacket
 			return;
 		}
 
+		// Even though the client can handle more characters than it's current limit allows, an overflow (critical error) happens if you pass a huge (1000+) message.
+		// April 27, 2009 - Verified on Gracia P2 & Final official client as 105
+		if (_text.length() > 105)
+		{
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.DONT_SPAM));
+			return;
+		}
+
 		if (activeChar.isCursedWeaponEquipped() && (_type == TRADE || _type == SHOUT))
 		{
-			SystemMessage sm = new SystemMessage(SystemMessageId.SHOUT_AND_TRADE_CHAT_CANNOT_BE_USED_WHILE_POSSESSING_CURSED_WEAPON);
-			activeChar.sendPacket(sm);
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.SHOUT_AND_TRADE_CHAT_CANNOT_BE_USED_WHILE_POSSESSING_CURSED_WEAPON));
 			return;
 		}
 

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SendWareHouseDepositList.java

@@ -63,7 +63,7 @@ public final class SendWareHouseDepositList extends L2GameClientPacket
 		{
 			int objectId = readD();
 			_items[i * 2 + 0] = objectId;
-			long cnt = readD();
+			long cnt = readQ();
 			if (cnt > Integer.MAX_VALUE || cnt < 0)
 			{
 			    _count = 0;
@@ -101,7 +101,7 @@ public final class SendWareHouseDepositList extends L2GameClientPacket
 
         // Freight price from config or normal price per item slot (30)
 		int fee = _count * 30;
-		int currentAdena = player.getAdena();
+		long currentAdena = player.getAdena();
         int slots = 0;
 
 		for (int i = 0; i < _count; i++)

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SendWareHouseWithDrawList.java

@@ -60,7 +60,7 @@ public final class SendWareHouseWithDrawList extends L2GameClientPacket
 		{
 			int objectId = readD();
 			_items[i * 2 + 0] = objectId;
-			long cnt    = readD();
+			long cnt    = readQ();
 			if (cnt > Integer.MAX_VALUE || cnt < 0)
 			{
 			    _count = 0; _items = null;

+ 3 - 3
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SetPrivateStoreListBuy.java

@@ -52,14 +52,14 @@ public final class SetPrivateStoreListBuy extends L2GameClientPacket
             int itemId = readD(); _items[x * 3 + 0] = itemId;
             readH();//TODO analyse this
             readH();//TODO analyse this
-            long cnt    = readD();
+            long cnt    = readQ();
 	    if (cnt > Integer.MAX_VALUE || cnt < 0)
 	    {
 		_count = 0; _items = null;
 		return;
 	    }
 	    _items[x * 3 + 1] = (int)cnt;
-            int price  = readD(); _items[x * 3 + 2] = price;
+            int price  = (int) readQ(); _items[x * 3 + 2] = price;
         }
 	}
 
@@ -71,7 +71,7 @@ public final class SetPrivateStoreListBuy extends L2GameClientPacket
 
         if (!player.getAccessLevel().allowTransaction())
         {
-            player.sendMessage("Transactions are disable for your Access Level");
+            player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
             return;
         }
 

+ 5 - 4
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SetPrivateStoreListSell.java

@@ -54,15 +54,16 @@ public class SetPrivateStoreListSell extends L2GameClientPacket
 		{
 			int objectId = readD();
 			_items[x * 3 + 0] = objectId;
-			long cnt      = readD();
+			long cnt      =  readQ();
+			
 			if (cnt > Integer.MAX_VALUE || cnt < 0)
 			{
 			    _count = 0;
 			    _items = null;
 			    return;
 			}
-			_items[x * 3 + 1] = (int)cnt;
-			int price    = readD();
+			_items[x * 3 + 1] = (int) cnt;
+			int price    = (int) readQ();
 			_items[x * 3 + 2] = price;
 		}
 	}
@@ -75,7 +76,7 @@ public class SetPrivateStoreListSell extends L2GameClientPacket
 		
 		if (!player.getAccessLevel().allowTransaction())
         {
-            player.sendMessage("Transactions are disable for your Access Level");
+            player.sendPacket(new SystemMessage(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT));
             return;
         }
 

+ 2 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/UseItem.java

@@ -72,6 +72,8 @@ public final class UseItem extends L2GameClientPacket
 	protected void readImpl()
 	{
 		_objectId = readD();
+		// TODO:
+		//readD();
 	}
 
 	@Override

+ 9 - 0
L2_GameServer/java/net/sf/l2j/gameserver/network/clientpackets/ValidatePosition.java

@@ -22,6 +22,7 @@ import net.sf.l2j.gameserver.Universe;
 import net.sf.l2j.gameserver.geoeditorcon.GeoEditorListener;
 import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.network.serverpackets.ExValidateLocationInAirShip;
 import net.sf.l2j.gameserver.network.serverpackets.PartyMemberPosition;
 import net.sf.l2j.gameserver.network.serverpackets.ValidateLocation;
 import net.sf.l2j.gameserver.network.serverpackets.ValidateLocationInVehicle;
@@ -108,6 +109,10 @@ public class ValidatePosition extends L2GameClientPacket
         		{
         			sendPacket(new ValidateLocationInVehicle(activeChar));
         		}
+        		else if (activeChar.isInAirShip())
+        		{
+        			sendPacket(new ExValidateLocationInAirShip(activeChar));
+        		}
         		else
         		{
         			activeChar.sendPacket(new ValidateLocation(activeChar));
@@ -163,6 +168,10 @@ public class ValidatePosition extends L2GameClientPacket
             		{
             			sendPacket(new ValidateLocationInVehicle(activeChar));
             		}
+            		else if (activeChar.isInAirShip())
+            		{
+            			sendPacket(new ExValidateLocationInAirShip(activeChar));
+            		}
             		else
             		{
             			activeChar.sendPacket(new ValidateLocation(activeChar));

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/pathfinding/PathFinding.java

@@ -410,7 +410,7 @@ public abstract class PathFinding
 
 	public byte getRegionX(int node_pos)
 	{
-		return (byte)((node_pos >> 8) + 15);
+		return (byte)((node_pos >> 8) + 10);
 	}
 
 	public byte getRegionY(int node_pos)

+ 129 - 106
L2_GameServer/java/net/sf/l2j/gameserver/script/faenor/FaenorEventParser.java

@@ -1,16 +1,14 @@
 /*
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version.
+ * This program is free software: you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
  * 
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- * details.
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+ * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with
- * this program. If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License along with this program. If
+ * not, see <http://www.gnu.org/licenses/>.
  */
 package net.sf.l2j.gameserver.script.faenor;
 
@@ -19,6 +17,7 @@ import java.util.logging.Logger;
 
 import javax.script.ScriptContext;
 
+import net.sf.l2j.gameserver.ThreadPoolManager;
 import net.sf.l2j.gameserver.script.DateRange;
 import net.sf.l2j.gameserver.script.IntList;
 import net.sf.l2j.gameserver.script.Parser;
@@ -29,104 +28,128 @@ import org.w3c.dom.Node;
 
 /**
  * @author Luis Arias
- *
+ * 
  */
 public class FaenorEventParser extends FaenorParser
 {
-    static Logger _log = Logger.getLogger(FaenorEventParser.class.getName());
-    private DateRange _eventDates = null;
-
-    @Override
-	public void parseScript(Node eventNode, ScriptContext context)
-    {
-        String ID = attribute(eventNode, "ID");
-
-        if (DEBUG) _log.fine("Parsing Event \""+ID+"\"");
-
-        _eventDates = DateRange.parse(attribute(eventNode, "Active"), DATE_FORMAT);
-
-        Date currentDate = new Date();
-        if (_eventDates.getEndDate().before(currentDate))
-        {
-            _log.warning("Event ID: (" + ID + ") has passed... Ignored.");
-            return;
-        }
-
-        for (Node node = eventNode.getFirstChild(); node != null; node = node.getNextSibling()) {
-
-            if (isNodeName(node, "DropList"))
-            {
-                parseEventDropList(node);
-            }
-            else if (isNodeName(node, "Message"))
-            {
-                parseEventMessage(node);
-            }
-        }
-    }
-
-    private void parseEventMessage(Node sysMsg)
-    {
-        if (DEBUG) _log.fine("Parsing Event Message.");
-
-        try
-        {
-            String type         = attribute(sysMsg, "Type");
-            String[] message    = attribute(sysMsg, "Msg").split("\n");
-
-            if (type.equalsIgnoreCase("OnJoin"))
-            {
-                _bridge.onPlayerLogin(message, _eventDates);
-            }
-        }
-        catch (Exception e)
-        {
-            _log.warning("Error in event parser.");
-            e.printStackTrace();
-        }
-    }
-
-    private void parseEventDropList(Node dropList)
-    {
-        if (DEBUG) _log.fine("Parsing Droplist.");
-
-        for (Node node = dropList.getFirstChild(); node != null; node = node.getNextSibling()) {
-            if (isNodeName(node, "AllDrop"))
-            {
-                parseEventDrop(node);
-            }
-        }
-    }
-
-    private void parseEventDrop(Node drop)
-    {
-        if (DEBUG) _log.fine("Parsing Drop.");
-
-        try
-        {
-            int[] items         = IntList.parse(attribute(drop, "Items"));
-            int[] count         = IntList.parse(attribute(drop, "Count"));
-            double chance       = getPercent(attribute(drop, "Chance"));
-
-            _bridge.addEventDrop(items, count, chance, _eventDates);
-        }
-        catch (Exception e)
-        {
-            _log.warning("ERROR(parseEventDrop):" + e.getMessage());
-        }
-    }
-
-    static class FaenorEventParserFactory extends ParserFactory
-    {
-        @Override
+	static Logger _log = Logger.getLogger(FaenorEventParser.class.getName());
+	private DateRange _eventDates = null;
+	
+	@Override
+	public void parseScript(final Node eventNode, ScriptContext context)
+	{
+		String ID = attribute(eventNode, "ID");
+		
+		if (DEBUG)
+			_log.fine("Parsing Event \"" + ID + "\"");
+		
+		_eventDates = DateRange.parse(attribute(eventNode, "Active"), DATE_FORMAT);
+		
+		Date currentDate = new Date();
+		if (_eventDates.getEndDate().before(currentDate))
+		{
+			_log.warning("Event ID: (" + ID + ") has passed... Ignored.");
+			return;
+		}
+		
+		if (_eventDates.getStartDate().after(currentDate))
+		{
+			_log.warning("Event ID: (" + ID + ") is not active yet... Ignored.");
+			ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
+				public void run()
+				{
+					parseEventDropAndMessage(eventNode);
+				}
+			}, _eventDates.getStartDate().getTime() - currentDate.getTime());
+			return;
+		}
+		
+		parseEventDropAndMessage(eventNode);
+	}
+	
+	protected void parseEventDropAndMessage(Node eventNode)
+	{
+		
+		for (Node node = eventNode.getFirstChild(); node != null; node = node.getNextSibling())
+		{
+			
+			if (isNodeName(node, "DropList"))
+			{
+				parseEventDropList(node);
+			}
+			else if (isNodeName(node, "Message"))
+			{
+				parseEventMessage(node);
+			}
+		}
+	}
+	
+	private void parseEventMessage(Node sysMsg)
+	{
+		if (DEBUG)
+			_log.fine("Parsing Event Message.");
+		
+		try
+		{
+			String type = attribute(sysMsg, "Type");
+			String[] message = attribute(sysMsg, "Msg").split("\n");
+			
+			if (type.equalsIgnoreCase("OnJoin"))
+			{
+				_bridge.onPlayerLogin(message, _eventDates);
+			}
+		}
+		catch (Exception e)
+		{
+			_log.warning("Error in event parser.");
+			e.printStackTrace();
+		}
+	}
+	
+	private void parseEventDropList(Node dropList)
+	{
+		if (DEBUG)
+			_log.fine("Parsing Droplist.");
+		
+		for (Node node = dropList.getFirstChild(); node != null; node = node.getNextSibling())
+		{
+			if (isNodeName(node, "AllDrop"))
+			{
+				parseEventDrop(node);
+			}
+		}
+	}
+	
+	private void parseEventDrop(Node drop)
+	{
+		if (DEBUG)
+			_log.fine("Parsing Drop.");
+		
+		try
+		{
+			int[] items = IntList.parse(attribute(drop, "Items"));
+			int[] count = IntList.parse(attribute(drop, "Count"));
+			double chance = getPercent(attribute(drop, "Chance"));
+			
+			_bridge.addEventDrop(items, count, chance, _eventDates);
+		}
+		catch (Exception e)
+		{
+			_log.warning("ERROR(parseEventDrop):" + e.getMessage());
+		}
+	}
+	
+	static class FaenorEventParserFactory extends ParserFactory
+	{
+		@Override
 		public Parser create()
-        {
-            return(new FaenorEventParser());
-        }
-    }
-
-    static
-    {
-        ScriptEngine.parserFactories.put(getParserName("Event"), new FaenorEventParserFactory());
-    }
+		{
+			return (new FaenorEventParser());
+		}
+	}
+	
+	static
+	{
+		ScriptEngine.parserFactories.put(getParserName("Event"), new FaenorEventParserFactory());
+	}
 }

+ 98 - 12
L2_GameServer/java/net/sf/l2j/gameserver/skills/DocumentBase.java

@@ -18,6 +18,7 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -28,23 +29,26 @@ import javolution.util.FastList;
 import javolution.util.FastMap;
 import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.datatables.SkillTable;
+import net.sf.l2j.gameserver.model.ChanceCondition;
 import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.actor.L2Character;
 import net.sf.l2j.gameserver.model.base.PlayerState;
 import net.sf.l2j.gameserver.model.base.Race;
 import net.sf.l2j.gameserver.skills.conditions.*;
 import net.sf.l2j.gameserver.skills.conditions.ConditionGameTime.CheckGameTime;
-import net.sf.l2j.gameserver.skills.effects.EffectTemplate;
+import net.sf.l2j.gameserver.skills.effects.EffectChanceSkillTrigger;
 import net.sf.l2j.gameserver.skills.funcs.FuncTemplate;
 import net.sf.l2j.gameserver.skills.funcs.Lambda;
 import net.sf.l2j.gameserver.skills.funcs.LambdaCalc;
 import net.sf.l2j.gameserver.skills.funcs.LambdaConst;
 import net.sf.l2j.gameserver.skills.funcs.LambdaStats;
 import net.sf.l2j.gameserver.templates.StatsSet;
+import net.sf.l2j.gameserver.templates.effects.EffectTemplate;
 import net.sf.l2j.gameserver.templates.item.L2ArmorType;
 import net.sf.l2j.gameserver.templates.item.L2Item;
 import net.sf.l2j.gameserver.templates.item.L2Weapon;
 import net.sf.l2j.gameserver.templates.item.L2WeaponType;
+import net.sf.l2j.gameserver.templates.skills.L2SkillType;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
@@ -176,8 +180,14 @@ abstract class DocumentBase
     protected void attachEffect(Node n, Object template, Condition attachCond)
     {
         NamedNodeMap attrs = n.getAttributes();
-        String name = attrs.getNamedItem("name").getNodeValue();
-        int time, count = 1;
+        String name = attrs.getNamedItem("name").getNodeValue().intern();
+        
+        /**
+         * Keep this values as default ones, DP needs it
+         */
+        int time = 1;
+        int count = 1;
+        
         if (attrs.getNamedItem("count") != null)
         {
             count = Integer.decode(getValue(attrs.getNamedItem("count").getNodeValue(), template));
@@ -200,8 +210,10 @@ abstract class DocumentBase
                 }
             }
         }
-        else time = ((L2Skill) template).getBuffDuration() / 1000 / count;
-        boolean self = false;
+        else if (((L2Skill) template).getBuffDuration() > 0)
+        	time = ((L2Skill) template).getBuffDuration() / 1000 / count;
+        
+        	boolean self = false;
         if (attrs.getNamedItem("self") != null)
         {
             if (Integer.decode(getValue(attrs.getNamedItem("self").getNodeValue(),template)) == 1)
@@ -220,10 +232,17 @@ abstract class DocumentBase
         {
             String abn = attrs.getNamedItem("abnormal").getNodeValue();
             if (abn.equals("poison")) abnormal = L2Character.ABNORMAL_EFFECT_POISON;
-            else if (abn.equals("bleeding")) abnormal = L2Character.ABNORMAL_EFFECT_BLEEDING;
+            else if (abn.equals("bleed")) abnormal = L2Character.ABNORMAL_EFFECT_BLEEDING;
+            else if (abn.equals("stun")) abnormal = L2Character.ABNORMAL_EFFECT_STUN;
+            else if (abn.equals("dancestun")) abnormal = L2Character.ABNORMAL_EFFECT_DANCE_STUNNED;
+            else if (abn.equals("sleep")) abnormal = L2Character.ABNORMAL_EFFECT_SLEEP;
             else if (abn.equals("flame")) abnormal = L2Character.ABNORMAL_EFFECT_FLAME;
             else if (abn.equals("bighead")) abnormal = L2Character.ABNORMAL_EFFECT_BIG_HEAD;
             else if (abn.equals("stealth")) abnormal = L2Character.ABNORMAL_EFFECT_STEALTH;
+            else if (abn.equals("root")) abnormal = L2Character.ABNORMAL_EFFECT_ROOT;
+            else if (abn.equals("mute")) abnormal = L2Character.ABNORMAL_EFFECT_MUTED;
+            else if (abn.equals("earthquake")) abnormal = L2Character.ABNORMAL_EFFECT_EARTHQUAKE;
+            else if (abn.equals("vitality")) abnormal = L2Character.ABNORMAL_EFFECT_VITALITY;
         }
         float stackOrder = 0;
         String stackType = "none";
@@ -235,12 +254,68 @@ abstract class DocumentBase
         {
             stackOrder = Float.parseFloat(getValue(attrs.getNamedItem("stackOrder").getNodeValue(), template));
         }
-        EffectTemplate lt = new EffectTemplate(attachCond, applayCond, name, lambda, count, time,
-                                               abnormal, stackType, stackOrder, icon);
-        parseTemplate(n, lt);
-        if (template instanceof L2Item) ((L2Item) template).attach(lt);
-        else if (template instanceof L2Skill && !self) ((L2Skill) template).attach(lt);
-        else if (template instanceof L2Skill && self) ((L2Skill) template).attachSelf(lt);
+        
+        double effectPower = -1;
+        if (attrs.getNamedItem("effectPower") != null)
+	        effectPower = Double.parseDouble( getValue(attrs.getNamedItem("effectPower").getNodeValue(), template));
+        
+        L2SkillType type = null;
+        if (attrs.getNamedItem("effectType") != null)
+        {
+        	String typeName = getValue(attrs.getNamedItem("effectType").getNodeValue(), template);
+        	
+        	try
+        	{
+    			type = Enum.valueOf(L2SkillType.class, typeName);
+    		} 
+        	catch (Exception e)
+        	{
+    			throw new IllegalArgumentException("Not skilltype found for: "+typeName);
+    		}
+        }
+        
+        EffectTemplate lt;
+        
+        final boolean isChanceSkillTrigger = (name == EffectChanceSkillTrigger.class.getName());
+        int trigId = 0;
+		if (attrs.getNamedItem("triggeredId") != null)
+			trigId = Integer.parseInt(getValue(attrs.getNamedItem("triggeredId").getNodeValue(), template));
+		else if (isChanceSkillTrigger)
+			throw new NoSuchElementException(name + " requires triggerId");
+		
+		int trigLvl = 1;
+		if (attrs.getNamedItem("triggeredLevel") != null)
+			trigLvl = Integer.parseInt(getValue(attrs.getNamedItem("triggeredLevel").getNodeValue(), template));
+		
+		String chanceCond = null;
+		if (attrs.getNamedItem("chanceType") != null)
+			chanceCond = getValue(attrs.getNamedItem("chanceType").getNodeValue(), template);
+		else if (isChanceSkillTrigger)
+			throw new NoSuchElementException(name + " requires chanceType");
+		
+		int activationChance = 0;
+		if (attrs.getNamedItem("activationChance") != null)
+			activationChance = Integer.parseInt(getValue(attrs.getNamedItem("activationChance").getNodeValue(), template));
+		else if (isChanceSkillTrigger)
+			throw new NoSuchElementException(name + " requires activationChance");
+		
+		ChanceCondition chance = ChanceCondition.parse(chanceCond, activationChance);
+		
+		if (chance == null && isChanceSkillTrigger)
+			throw new NoSuchElementException("Invalid chance condition: " + chanceCond + " "
+			        + activationChance);        	
+        	
+        lt = new EffectTemplate(attachCond, applayCond, name, lambda, count, time, abnormal, stackType, stackOrder, icon, effectPower, type, trigId, trigLvl, chance);
+		parseTemplate(n, lt);
+		if (template instanceof L2Item)
+			((L2Item) template).attach(lt);
+		else if (template instanceof L2Skill)
+		{
+			if (self)
+				((L2Skill) template).attachSelf(lt);
+			else
+				((L2Skill) template).attach(lt);
+		}
     }
 
     protected void attachSkill(Node n, Object template, Condition attachCond)
@@ -471,6 +546,17 @@ abstract class DocumentBase
                 int sex = Integer.decode(getValue(a.getNodeValue(), null));
                 cond = joinAnd(cond, new ConditionPlayerSex(sex));
             }
+            
+            else if ("flyMounted".equalsIgnoreCase(a.getNodeName()))
+            {
+            	boolean val = Boolean.valueOf(a.getNodeValue());
+                cond = joinAnd(cond, new ConditionPlayerFlyMounted(val));
+            }
+            else if ("landingZone".equalsIgnoreCase(a.getNodeName()))
+            {
+            	boolean val = Boolean.valueOf(a.getNodeValue());
+                cond = joinAnd(cond, new ConditionPlayerLandingZone(val));
+            }
         }
 
         if(forces[0] + forces[1] > 0)

+ 17 - 0
L2_GameServer/java/net/sf/l2j/gameserver/skills/Env.java

@@ -37,4 +37,21 @@ public final class Env {
 	public double value;
 	public double baseValue;
 	public boolean skillMastery = false;
+	public byte shld = 0;
+	public boolean ss = false;
+	public boolean sps = false;
+	public boolean bss = false;
+	
+	public Env()
+	{
+		
+	}
+	
+	public Env(byte shd, boolean s, boolean ps, boolean bs)
+	{
+		shld = shd;
+		ss = s;
+		sps = ps;
+		bss = bs;
+	}
 }

+ 388 - 174
L2_GameServer/java/net/sf/l2j/gameserver/skills/Formulas.java

@@ -20,9 +20,11 @@ import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.SevenSigns;
 import net.sf.l2j.gameserver.SevenSignsFestival;
 import net.sf.l2j.gameserver.instancemanager.CastleManager;
-import net.sf.l2j.gameserver.instancemanager.FortManager;
 import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
+import net.sf.l2j.gameserver.instancemanager.FortManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeManager;
+import net.sf.l2j.gameserver.model.Elementals;
+import net.sf.l2j.gameserver.model.L2ItemInstance;
 import net.sf.l2j.gameserver.model.L2SiegeClan;
 import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.model.actor.L2Character;
@@ -31,6 +33,7 @@ import net.sf.l2j.gameserver.model.actor.L2Playable;
 import net.sf.l2j.gameserver.model.actor.L2Summon;
 import net.sf.l2j.gameserver.model.actor.instance.L2CubicInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
+import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
 import net.sf.l2j.gameserver.model.base.PlayerState;
@@ -45,7 +48,7 @@ import net.sf.l2j.gameserver.skills.conditions.ConditionPlayerState;
 import net.sf.l2j.gameserver.skills.conditions.ConditionUsingItemType;
 import net.sf.l2j.gameserver.skills.funcs.Func;
 import net.sf.l2j.gameserver.templates.chars.L2PcTemplate;
-import net.sf.l2j.gameserver.templates.item.L2Armor;
+import net.sf.l2j.gameserver.templates.effects.EffectTemplate;
 import net.sf.l2j.gameserver.templates.item.L2Weapon;
 import net.sf.l2j.gameserver.templates.item.L2WeaponType;
 import net.sf.l2j.gameserver.templates.skills.L2SkillType;
@@ -1195,6 +1198,8 @@ public final class Formulas
 	{
 		double power = skill.getPower();
 		double damage = attacker.getPAtk(target);
+		damage *= calcElemental(attacker, target, skill);
+		damage+=calcValakasAttribute(attacker, target, skill);
 		double defence = target.getPDef(attacker);
 		if(ss)
 			damage *= 2.;
@@ -1223,20 +1228,6 @@ public final class Formulas
 		damage = target.calcStat(Stats.DAGGER_WPN_VULN, damage, target, null);
 		damage *= 70. / defence;
 		damage += Rnd.get() * attacker.getRandomDamage(target);
-		// Sami: Must be removed, after armor resistances are checked.
-		// These values are a quick fix to balance dagger gameplay and give
-		// armor resistances vs dagger. daggerWpnRes could also be used if a skill
-		// was given to all classes. The values here try to be a compromise.
-		// They were originally added in a late C4 rev (2289).
-		if (target instanceof L2PcInstance)
-		{
-			L2Armor armor = ((L2PcInstance)target).getActiveChestArmorItem();
-			if (armor != null)
-			{
-				if(((L2PcInstance)target).isWearingHeavyArmor())
-					damage /= 1.2; // 2
-			}
-		}
 		
 		// Dmg bonusses in PvP fight
 		if((attacker instanceof L2Playable)
@@ -1268,7 +1259,8 @@ public final class Formulas
 	{
 		double damage = attacker.getPAtk(target);
 		double defence = target.getPDef(attacker);
-		
+		damage *= calcElemental(attacker, target, skill);
+		damage+=calcValakasAttribute(attacker, target, skill);
 		switch (shld)
 		{
 			case 1:
@@ -1314,7 +1306,6 @@ public final class Formulas
 					stat = Stats.CROSSBOW_WPN_VULN;
 					break;
 				case BLUNT:
-				case BIGBLUNT:
 					stat = Stats.BLUNT_WPN_VULN;
 					break;
 				case DAGGER:
@@ -1341,6 +1332,9 @@ public final class Formulas
 				case BIGSWORD:
 					stat = Stats.BIGSWORD_WPN_VULN;
 					break;
+				case BIGBLUNT:
+					stat = Stats.BIGBLUNT_WPN_VULN;
+					break;
 			}
 		}
 
@@ -1403,9 +1397,6 @@ public final class Formulas
 		{
 			switch (((L2Npc) target).getTemplate().getRace())
 			{
-				case UNDEAD:
-					damage *= attacker.getPAtkUndead(target);
-					break;
 				case BEAST:
 					damage *= attacker.getPAtkMonsters(target);
 					break;
@@ -1470,7 +1461,8 @@ public final class Formulas
 		if (bss) mAtk *= 4;
 		else if (ss) mAtk *= 2;
 
-		double damage = 91 * Math.sqrt(mAtk) / mDef * skill.getPower(attacker) * calcSkillVulnerability(target, skill);
+		double damage = 91 * Math.sqrt(mAtk) / mDef * skill.getPower(attacker); 
+		damage *= calcElemental(attacker, target, skill); 
 		
 		// In C5 summons make 10 % less dmg in PvP.
 		if(attacker instanceof L2Summon && target instanceof L2PcInstance) damage *= 0.9;
@@ -1530,6 +1522,12 @@ public final class Formulas
 			else
 				damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1, null, null);
 		}
+		//random magic damage
+		float rnd = Rnd.get(-20,20)/100+1;
+		damage *= rnd;
+		// CT2.3 general magic vuln
+		damage *= target.calcStat(Stats.MAGIC_DAMAGE_VULN, 1, null, null);
+		
 		return damage;
 	}
 	
@@ -1547,9 +1545,9 @@ public final class Formulas
 				return 1;
 		}
 		
-		double damage = 91 * Math.sqrt(mAtk) / mDef * skill.getPower() * calcSkillVulnerability(target, skill);
+		double damage = 91 * Math.sqrt(mAtk) / mDef * skill.getPower();
 		L2PcInstance owner = attacker.getOwner();
-		
+		damage *= calcElemental(owner, target, skill);
 		// Failure calculation
 		if (Config.ALT_GAME_MAGICFAILURES && !calcMagicSuccess(owner, target, skill))
 		{			
@@ -1589,13 +1587,26 @@ public final class Formulas
 		}
 		else if (mcrit) damage *= 3;
 		
+		// CT2.3 general magic vuln
+		damage *= target.calcStat(Stats.MAGIC_DAMAGE_VULN, 1, null, null);
+		
 		return damage;
 	}
 
 	/** Returns true in case of critical hit */
-	public static final boolean calcCrit(double rate)
+	public static final boolean calcCrit(double rate, L2Character target)
 	{
-		return rate > Rnd.get(1000);
+		final boolean success = rate > Rnd.get(1000);
+		
+		// support for critical damage evasion
+		if (success)
+		{
+			if (target == null)
+				return true; // no effect
+			
+			return target.getStat().calcStat(Stats.CRIT_DAMAGE_EVASION, 100, null, null) > Rnd.get(100);
+		}
+		return success;
 	}
 	/** Calculate value of blow success */
 	public static final boolean calcBlow(L2Character activeChar, L2Character target, int chance)
@@ -1882,7 +1893,7 @@ public final class Formulas
 		if (skill.isActive() && skill.isOffensive() && !skill.isNeutral()) 
 			defence = target.getMDef(actor, skill);
 		
-		double attack = 2 * actor.getMAtk(target, skill) * calcSkillVulnerability(target, skill);
+		double attack = 2 * actor.getMAtk(target, skill) * calcSkillVulnerability(actor, target, skill);
 		double d = (attack - defence)/(attack + defence);
 		if (target.isRaid()
 				&& (type == L2SkillType.CONFUSION || type == L2SkillType.MUTE || type == L2SkillType.PARALYZE
@@ -1899,7 +1910,7 @@ public final class Formulas
 		return d > 0;
 	}
 
-	public static double calcSkillVulnerability(L2Character target, L2Skill skill)
+	public static double calcSkillVulnerability(L2Character attacker, L2Character target, L2Skill skill)
 	{
 		double multiplier = 1;	// initialize...
 
@@ -1938,48 +1949,15 @@ public final class Formulas
 					multiplier *= target.getTemplate().baseSleepVuln;
 					break;
 				case FIRE:
-					multiplier *= target.getTemplate().baseFireVuln;
-					break;
 				case WIND:
-					multiplier *= target.getTemplate().baseWindVuln;
-					break;
 				case WATER:
-					multiplier *= target.getTemplate().baseWaterVuln;
-					break;
 				case EARTH:
-					multiplier *= target.getTemplate().baseEarthVuln;
-					break;
 				case HOLY:
-					multiplier *= target.getTemplate().baseHolyVuln;
-					break;
 				case DARK:
-					multiplier *= target.getTemplate().baseDarkVuln;
+					multiplier *= calcElemental(attacker, target, skill);
 					break;
 				}
 			}
-
-			// Next, calculate the elemental vulnerabilities
-			switch (skill.getElement())
-			{
-			case L2Skill.ELEMENT_EARTH:
-				multiplier = target.calcStat(Stats.EARTH_VULN, multiplier, target, skill);
-				break;
-			case L2Skill.ELEMENT_FIRE:
-				multiplier = target.calcStat(Stats.FIRE_VULN, multiplier, target, skill);
-				break;
-			case L2Skill.ELEMENT_WATER:
-				multiplier = target.calcStat(Stats.WATER_VULN, multiplier, target, skill);
-				break;
-			case L2Skill.ELEMENT_WIND:
-				multiplier = target.calcStat(Stats.WIND_VULN, multiplier, target, skill);
-				break;
-			case L2Skill.ELEMENT_HOLY:
-				multiplier = target.calcStat(Stats.HOLY_VULN, multiplier, target, skill);
-				break;
-			case L2Skill.ELEMENT_DARK:
-				multiplier = target.calcStat(Stats.DARK_VULN, multiplier, target, skill);
-				break;
-			}
 			
 			// Finally, calculate skilltype vulnerabilities
 			L2SkillType type = skill.getSkillType();
@@ -1987,49 +1965,58 @@ public final class Formulas
 			// For additional effects on PDAM and MDAM skills (like STUN, SHOCK, PARALYZE...)
 			if (type != null && (type == L2SkillType.PDAM || type == L2SkillType.MDAM))
 				type = skill.getEffectType();
-
-			if (type != null)
+			
+			multiplier = calcSkillTypeVulnerability(multiplier, target, type);
+			
+		}
+		return multiplier;
+	}
+	
+	public static double calcSkillTypeVulnerability(double multiplier, L2Character target, L2SkillType type)
+	{
+		if (type != null)
+		{
+			switch (type)
 			{
-				switch (type)
-				{
-					case BLEED:
-						multiplier = target.calcStat(Stats.BLEED_VULN, multiplier, target, null);
-						break;
-					case POISON:
-						multiplier = target.calcStat(Stats.POISON_VULN, multiplier, target, null);
-						break;
-					case STUN:
-						multiplier = target.calcStat(Stats.STUN_VULN, multiplier, target, null);
-						break;
-					case PARALYZE:
-						multiplier = target.calcStat(Stats.PARALYZE_VULN, multiplier, target, null);
-						break;
-					case ROOT:
-						multiplier = target.calcStat(Stats.ROOT_VULN, multiplier, target, null);
-						break;
-					case SLEEP:
-						multiplier = target.calcStat(Stats.SLEEP_VULN, multiplier, target, null);
-						break;
-					case MUTE:
-					case FEAR:
-					case BETRAY:
-					case AGGREDUCE_CHAR:
-						multiplier = target.calcStat(Stats.DERANGEMENT_VULN, multiplier, target, null);
-						break;
-					case CONFUSION:
-					case CONFUSE_MOB_ONLY:
-						multiplier = target.calcStat(Stats.CONFUSION_VULN, multiplier, target, null);
-						break;
-					case DEBUFF:
-					case WEAKNESS:
-						multiplier = target.calcStat(Stats.DEBUFF_VULN, multiplier, target, null);
-						break;
-					default:
-						
-				}
+				case BLEED:
+					multiplier = target.calcStat(Stats.BLEED_VULN, multiplier, target, null);
+					break;
+				case POISON:
+					multiplier = target.calcStat(Stats.POISON_VULN, multiplier, target, null);
+					break;
+				case STUN:
+					multiplier = target.calcStat(Stats.STUN_VULN, multiplier, target, null);
+					break;
+				case PARALYZE:
+					multiplier = target.calcStat(Stats.PARALYZE_VULN, multiplier, target, null);
+					break;
+				case ROOT:
+					multiplier = target.calcStat(Stats.ROOT_VULN, multiplier, target, null);
+					break;
+				case SLEEP:
+					multiplier = target.calcStat(Stats.SLEEP_VULN, multiplier, target, null);
+					break;
+				case MUTE:
+				case FEAR:
+				case BETRAY:
+				case AGGREDUCE_CHAR:
+					multiplier = target.calcStat(Stats.DERANGEMENT_VULN, multiplier, target, null);
+					break;
+				case CONFUSION:
+				case CONFUSE_MOB_ONLY:
+					multiplier = target.calcStat(Stats.CONFUSION_VULN, multiplier, target, null);
+					break;
+				case DEBUFF:
+				case WEAKNESS:
+					multiplier = target.calcStat(Stats.DEBUFF_VULN, multiplier, target, null);
+					break;
+				case BUFF:
+					multiplier = target.calcStat(Stats.BUFF_VULN, multiplier, target, null);
+					break;
+				default:	
 			}
-			
 		}
+		
 		return multiplier;
 	}
 
@@ -2047,51 +2034,58 @@ public final class Formulas
 			if (type != null && (type == L2SkillType.PDAM || type == L2SkillType.MDAM))
 				type = skill.getEffectType();
 			
-			if (type != null)
+			multiplier = calcSkillTypeProficiency(multiplier, attacker, target, type);
+		}
+		
+		return multiplier;
+	}
+    
+    public static double calcSkillTypeProficiency(double multiplier, L2Character attacker, L2Character target, L2SkillType type)
+    {
+    	if (type != null)
+		{
+			switch (type)
 			{
-				switch (type)
-				{
-					case BLEED:
-						multiplier = attacker.calcStat(Stats.BLEED_PROF, multiplier, target, null);
-						break;
-					case POISON:
-						multiplier = attacker.calcStat(Stats.POISON_PROF, multiplier, target, null);
-						break;
-					case STUN:
-						multiplier = attacker.calcStat(Stats.STUN_PROF, multiplier, target, null);
-						break;
-					case PARALYZE:
-						multiplier = attacker.calcStat(Stats.PARALYZE_PROF, multiplier, target, null);
-						break;
-					case ROOT:
-						multiplier = attacker.calcStat(Stats.ROOT_PROF, multiplier, target, null);
-						break;
-					case SLEEP:
-						multiplier = attacker.calcStat(Stats.SLEEP_PROF, multiplier, target, null);
-						break;
-					case MUTE:
-					case FEAR:
-					case BETRAY:
-					case AGGREDUCE_CHAR:
-						multiplier = attacker.calcStat(Stats.DERANGEMENT_PROF, multiplier, target, null);
-						break;
-					case CONFUSION:
-					case CONFUSE_MOB_ONLY:
-						multiplier = attacker.calcStat(Stats.CONFUSION_PROF, multiplier, target, null);
-						break;
-					case DEBUFF:
-					case WEAKNESS:
-						multiplier = attacker.calcStat(Stats.DEBUFF_PROF, multiplier, target, null);
-						break;
-					default:
+				case BLEED:
+					multiplier = attacker.calcStat(Stats.BLEED_PROF, multiplier, target, null);
+					break;
+				case POISON:
+					multiplier = attacker.calcStat(Stats.POISON_PROF, multiplier, target, null);
+					break;
+				case STUN:
+					multiplier = attacker.calcStat(Stats.STUN_PROF, multiplier, target, null);
+					break;
+				case PARALYZE:
+					multiplier = attacker.calcStat(Stats.PARALYZE_PROF, multiplier, target, null);
+					break;
+				case ROOT:
+					multiplier = attacker.calcStat(Stats.ROOT_PROF, multiplier, target, null);
+					break;
+				case SLEEP:
+					multiplier = attacker.calcStat(Stats.SLEEP_PROF, multiplier, target, null);
+					break;
+				case MUTE:
+				case FEAR:
+				case BETRAY:
+				case AGGREDUCE_CHAR:
+					multiplier = attacker.calcStat(Stats.DERANGEMENT_PROF, multiplier, target, null);
+					break;
+				case CONFUSION:
+				case CONFUSE_MOB_ONLY:
+					multiplier = attacker.calcStat(Stats.CONFUSION_PROF, multiplier, target, null);
+					break;
+				case DEBUFF:
+				case WEAKNESS:
+					multiplier = attacker.calcStat(Stats.DEBUFF_PROF, multiplier, target, null);
+					break;
+				default:
 
-				}
 			}
 		}
-		return multiplier;
+    	
+    	return multiplier;
 	}
 	
-	
 	public static double calcSkillStatModifier(L2SkillType type, L2Character target)
 	{
 		double multiplier = 1;
@@ -2130,38 +2124,120 @@ public final class Formulas
 			multiplier = 0;
 		return multiplier;
 	}
-
-	public static boolean calcSkillSuccess(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean ss, boolean sps, boolean bss)
+	
+	public static boolean calcEffectSuccess(L2Character attacker, L2Character target, EffectTemplate effect, L2Skill skill, byte shld, boolean ss, boolean sps, boolean bss)
 	{
 		if (shld == 2) // perfect block
-		{
 			return false;
-		}
 		
 		L2SkillType type = skill.getSkillType();
 
-		int value = (int) skill.getPower();
+		int value = (int)effect.effectPower;
 		int lvlDepend = skill.getLevelDepend();
 
-		if (type == L2SkillType.PDAM || type == L2SkillType.MDAM || type == L2SkillType.WEAPON_SA) // For additional effects on PDAM skills (like STUN, SHOCK,...)
+		// TODO: Temporary fix for skills with Power = 0 or LevelDepend not set
+		if (lvlDepend == 0) lvlDepend = (type == L2SkillType.PARALYZE || type == L2SkillType.FEAR) ? 1 : 2;
+
+		// TODO: Temporary fix for NPC skills with MagicLevel not set
+		// int lvlmodifier = (skill.getMagicLevel() - target.getLevel()) * lvlDepend;
+		// int lvlmodifier = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()) - target.getLevel()) * lvlDepend;
+		
+		double statmodifier = calcSkillStatModifier(type, target);
+		double resmodifier = calcSkillTypeVulnerability(1, target, type);
+
+		int ssmodifier = 100;
+		if (bss) ssmodifier = 200;
+		else if (sps) ssmodifier = 150;
+		else if (ss) ssmodifier = 150;
+
+		// Calculate BaseRate.
+		int rate = (int) ((value * statmodifier));// + lvlmodifier));
+
+		// Add Matk/Mdef Bonus
+		if (skill.isMagic())
+			rate = (int) (rate * Math.pow((double) attacker.getMAtk(target, skill) / (target.getMDef(attacker, skill)+(shld==1 ? target.getShldDef() : 0)), 0.2));
+
+		// Add Bonus for Sps/SS
+		if (ssmodifier != 100)
 		{
-			value = skill.getEffectPower();
-			type = skill.getEffectType();
+			if (rate > 10000 / (100 + ssmodifier)) rate = 100 - (100 - rate) * 100 / ssmodifier;
+			else rate = rate * ssmodifier / 100;
 		}
-		// TODO: Temporary fix for skills with EffectPower = 0 or EffectType not set
-		if (value == 0 || type == null)
+
+		//lvl modifier.
+		if (lvlDepend > 0)
 		{
-			if (skill.getSkillType() == L2SkillType.PDAM)
-			{
-				value = 50;
-				type = L2SkillType.STUN;
-			}
-			if (skill.getSkillType() == L2SkillType.MDAM)
+			double delta = 0;
+			int attackerLvlmod = attacker.getLevel();
+			int targetLvlmod = target.getLevel();
+					
+			if (attackerLvlmod >= 70)
+				attackerLvlmod = ((attackerLvlmod - 69) * 2) + 70;
+			if (targetLvlmod >= 70)
+				targetLvlmod = ((targetLvlmod - 69) * 2) + 70;
+					
+			if (skill.getMagicLevel() == 0)
+				delta = attackerLvlmod - targetLvlmod;
+			else
+				delta = ((skill.getMagicLevel() + attackerLvlmod) / 2) - targetLvlmod;
+			
+			//double delta = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : 0)+attacker.getLevel() )/2 - target.getLevel();
+			double deltamod = 1;
+		
+			if (delta + 3 < 0)
 			{
-				value = 30;
-				type = L2SkillType.PARALYZE;
+				if (delta <= -20)
+					deltamod = 0.05;
+				else
+				{
+					deltamod = 1 - ((-1) * (delta / 20));
+					if (deltamod >= 1)
+						deltamod = 0.05;
+				}
 			}
+			else
+				deltamod = 1 + ((delta + 3) / 75); //(double) attacker.getLevel()/target.getLevel();
+			
+			if (deltamod < 0)
+				deltamod *= -1;
+
+			rate *= deltamod;
+		}
+		
+		if (rate > 99) rate = 99;
+		else if (rate < 1) rate = 1;
+
+		//Finaly apply resists.
+		rate *= resmodifier  * calcSkillTypeProficiency(1, attacker, target, type);
+
+		if (Config.DEVELOPER)
+			_log.info(type
+				+": "	
+				+ skill.getName()
+				+ ": "
+				+ value
+				+ ", "
+				+ statmodifier
+				+ ", "
+				+ resmodifier
+				+ ", "
+				+ ((int) (Math.pow((double) attacker.getMAtk(target, skill)
+					/ target.getMDef(attacker, skill), 0.2) * 100) - 100) + ", " + ssmodifier + " ==> "
+				+ rate);
+		return (Rnd.get(100) < rate);
+	}
+
+	public static boolean calcSkillSuccess(L2Character attacker, L2Character target, L2Skill skill, byte shld, boolean ss, boolean sps, boolean bss)
+	{
+		if (shld == 2) // perfect block
+		{
+			return false;
 		}
+		
+		L2SkillType type = skill.getSkillType();
+
+		int value = (int) skill.getPower();
+		int lvlDepend = skill.getLevelDepend();
 
 		// TODO: Temporary fix for skills with Power = 0 or LevelDepend not set
 		if (value == 0) value = (type == L2SkillType.PARALYZE) ? 50 : (type == L2SkillType.FEAR)? 40 : 80;
@@ -2172,7 +2248,7 @@ public final class Formulas
 		// int lvlmodifier = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getLevel()) - target.getLevel()) * lvlDepend;
 		
 		double statmodifier = calcSkillStatModifier(type, target);
-		double resmodifier = calcSkillVulnerability(target, skill);
+		double resmodifier = calcSkillVulnerability(attacker, target, skill);
 
 		int ssmodifier = 100;
 		if (bss) ssmodifier = 200;
@@ -2262,24 +2338,30 @@ public final class Formulas
 		}
 		L2SkillType type = skill.getSkillType();
 		
-		if (target.isRaid()
-				&& (type == L2SkillType.CONFUSION || type == L2SkillType.MUTE || type == L2SkillType.PARALYZE
-					|| type == L2SkillType.ROOT || type == L2SkillType.FEAR || type == L2SkillType.SLEEP
-					|| type == L2SkillType.STUN || type == L2SkillType.DEBUFF || type == L2SkillType.AGGDEBUFF))
-				return false; // these skills should not work on RaidBoss
-		
+		// these skills should not work on RaidBoss
+		if (target.isRaid())
+		{
+			switch (type)
+			{
+				case CONFUSION:
+				case ROOT:
+				case STUN:
+				case MUTE:
+				case FEAR:
+				case DEBUFF:
+				case PARALYZE:
+				case SLEEP:
+				case AGGDEBUFF:
+					return false;
+			}
+		}
+				
 		// if target reflect this skill then the effect will fail
 		if (target.reflectSkill(skill)) return false;
 		
 		int value = (int) skill.getPower();
 		int lvlDepend = skill.getLevelDepend();
 		
-		if (type == L2SkillType.PDAM || type == L2SkillType.MDAM) // For additional effects on PDAM skills (like STUN, SHOCK,...)
-		{
-			value = skill.getEffectPower();
-			type = skill.getEffectType();
-		}
-
 		// TODO: Temporary fix for skills with Power = 0 or LevelDepend not set
 		if (value == 0) value = (type == L2SkillType.PARALYZE) ? 50 : (type == L2SkillType.FEAR) ? 40 : 80;
 		if (lvlDepend == 0) lvlDepend = (type == L2SkillType.PARALYZE || type == L2SkillType.FEAR) ? 1 : 2;
@@ -2289,7 +2371,7 @@ public final class Formulas
 		//int lvlmodifier = ((skill.getMagicLevel() > 0 ? skill.getMagicLevel() : attacker.getOwner().getLevel()) - target.getLevel())
 		//* lvlDepend;
 		double statmodifier = calcSkillStatModifier(type, target);
-		double resmodifier = calcSkillVulnerability(target, skill);
+		double resmodifier = calcSkillVulnerability(attacker.getOwner(), target, skill);
 		
 		int rate = (int) ((value * statmodifier) * resmodifier);
 		if (skill.isMagic())
@@ -2414,7 +2496,7 @@ public final class Formulas
 		else if (ss) mAtk *= 2;
 
 		double damage = (Math.sqrt(mAtk) * skill.getPower(attacker) * (mp/97)) / mDef;
-		damage *= calcSkillVulnerability(target, skill);		
+		damage *= calcSkillVulnerability(attacker, target, skill);		
     	return damage;
     }
     
@@ -2465,4 +2547,136 @@ public final class Formulas
     		
     	return Rnd.get(100) < val;
     }
+    
+    public static double calcValakasAttribute(L2Character attacker, L2Character target, L2Skill skill)
+    {
+    	double calcPower = 0;  
+    	double calcDefen = 0;  
+
+    	if (skill != null && skill.getAttributeName().contains("valakas"))
+    	{
+    		calcPower = attacker.calcStat(Stats.VALAKAS, calcPower, target, skill);
+    		calcDefen = target.calcStat(Stats.VALAKAS_RES, calcDefen, target, skill);
+    	}
+    	else
+    	{
+    		calcPower = attacker.calcStat(Stats.VALAKAS, calcPower, target, skill);
+    		if (calcPower > 0)
+    		{
+    			calcPower = attacker.calcStat(Stats.VALAKAS, calcPower, target, skill);
+        		calcDefen = target.calcStat(Stats.VALAKAS_RES, calcDefen, target, skill);
+    		}
+    	}
+    	return calcPower - calcDefen;
+    }
+    public static double calcElemental(L2Character attacker, L2Character target, L2Skill skill)  
+    {  
+    	double calcPower = 0;  
+    	double calcDefen = 0;  
+    	double calcTotal = 0;  
+    	double result = 1;  
+    	
+    	if (target instanceof L2NpcInstance)  
+    		calcDefen = 20;
+    	L2ItemInstance weaponInstance = attacker.getActiveWeaponInstance();  
+		int elementType = -1;  
+		// first check skill element
+		if (skill != null && skill.getElement() > 0)  
+    	{
+    		calcPower = 20;  
+    		// Calculate the elemental power  
+    		switch (skill.getElement())  
+    		{  
+    			case L2Skill.ELEMENT_FIRE:
+    				if (attacker.getAttackElement() == Elementals.FIRE)
+    					calcPower = attacker.calcStat(Stats.FIRE_POWER, calcPower, target, skill);  
+    				calcDefen = target.calcStat(Stats.FIRE_RES, calcDefen, target, skill);  
+    				break;  
+    			case L2Skill.ELEMENT_WATER:
+    				if (attacker.getAttackElement() == Elementals.WATER)
+    					calcPower = attacker.calcStat(Stats.WATER_POWER, calcPower, target, skill);  
+    				calcDefen = target.calcStat(Stats.WATER_RES, calcDefen, target, skill);  
+    				break;  
+    			case L2Skill.ELEMENT_EARTH:
+    				if (attacker.getAttackElement() == Elementals.EARTH)
+    					calcPower = attacker.calcStat(Stats.EARTH_POWER, calcPower, target, skill);  
+    				calcDefen = target.calcStat(Stats.EARTH_RES, calcDefen, target, skill);  
+    				break;  
+    			case L2Skill.ELEMENT_WIND:
+    				if (attacker.getAttackElement() == Elementals.WIND)
+    					calcPower = attacker.calcStat(Stats.WIND_POWER, calcPower, target, skill);  
+    				calcDefen = target.calcStat(Stats.WIND_RES, calcDefen, target, skill);  
+    				break;  
+    			case L2Skill.ELEMENT_HOLY:
+    				if (attacker.getAttackElement() == Elementals.HOLY)
+    					calcPower = attacker.calcStat(Stats.HOLY_POWER, calcPower, target, skill);  
+    				calcDefen = target.calcStat(Stats.HOLY_RES, calcDefen, target, skill);  
+    				break;  
+    			case L2Skill.ELEMENT_DARK:
+    				if (attacker.getAttackElement() == Elementals.DARK)
+    					calcPower = attacker.calcStat(Stats.DARK_POWER, calcPower, target, skill);  
+    				calcDefen = target.calcStat(Stats.DARK_RES, calcDefen, target, skill);  
+    				break;  
+    		}  
+    		calcTotal = calcPower - calcDefen;  
+    		if (calcTotal <= -80)  
+    			result = 0.20;  
+    		else if (calcTotal > -80 && calcTotal <= -1)  
+    			result = 1 - (Math.abs(calcTotal) / 100);  
+    		else if (calcTotal >= 1 && calcTotal <= 74)  
+    			result = 1 + (calcTotal * 0.0052);  
+    		else if (calcTotal >= 75 && calcTotal <= 149)  
+    			result = 1.4;  
+    		else if (calcTotal >= 150)  
+    			result = 1.7;  
+    	}
+		// if skill not used or non-elemental skill, check for item/character elemental power
+		else
+		{
+			if (weaponInstance != null && weaponInstance.getAttackElementType() >= 0 && weaponInstance.getAttackElementType() == attacker.getAttackElement())
+				elementType = weaponInstance.getAttackElementType();
+			else if (attacker.getAttackElement() > 0)
+				elementType = attacker.getAttackElement();
+			if (elementType >= 0)
+			{
+				switch (elementType)  
+	    		{  
+	    			case Elementals.FIRE:  
+	    				calcPower = attacker.calcStat(Stats.FIRE_POWER, calcPower, target, skill);  
+	    				calcDefen = target.calcStat(Stats.FIRE_RES, calcDefen, target, skill);  
+	    				break;  
+	    			case Elementals.WATER:  
+	    				calcPower = attacker.calcStat(Stats.WATER_POWER, calcPower, target, skill);  
+	    				calcDefen = target.calcStat(Stats.WATER_RES, calcDefen, target, skill);  
+	    				break;  
+	    			case Elementals.EARTH:  
+	    				calcPower = attacker.calcStat(Stats.EARTH_POWER, calcPower, target, skill);  
+	    				calcDefen = target.calcStat(Stats.EARTH_RES, calcDefen, target, skill);  
+	    				break;  
+	    			case Elementals.WIND:  
+	    				calcPower = attacker.calcStat(Stats.WIND_POWER, calcPower, target, skill);  
+	    				calcDefen = target.calcStat(Stats.WIND_RES, calcDefen, target, skill);  
+	    				break;  
+	    			case Elementals.HOLY:  
+	    				calcPower = attacker.calcStat(Stats.HOLY_POWER, calcPower, target, skill);  
+	    				calcDefen = target.calcStat(Stats.HOLY_RES, calcDefen, target, skill);  
+	    				break;  
+	    			case Elementals.DARK:  
+	    				calcPower = attacker.calcStat(Stats.DARK_POWER, calcPower, target, skill);  
+	    				calcDefen = target.calcStat(Stats.DARK_RES, calcDefen, target, skill);  
+	    				break;
+	    		}
+				calcTotal = calcPower - calcDefen;  
+	    		if (calcTotal <= -80)  
+	    			result = 0.20;  
+	    		else if (calcTotal > -80 && calcTotal <= -1)  
+	    			result = 1 - (Math.abs(calcTotal) * 0.007);  
+	    		else if (calcTotal >= 1 && calcTotal < 100)  
+	    			result = 1 + (calcTotal * 0.007);  
+	    		else if (calcTotal > 100)  
+	    			result = 1.7; 
+			}
+		}
+    	return result;
+    }
 }

+ 20 - 8
L2_GameServer/java/net/sf/l2j/gameserver/skills/Stats.java

@@ -58,6 +58,7 @@ public enum Stats
 	// Atk & Def rates
 	EVASION_RATE("rEvas"),
 	P_SKILL_EVASION("pSkillEvas"),
+	CRIT_DAMAGE_EVASION("critDamEvas"),
 	SHIELD_RATE("rShld"),
 	CRITICAL_RATE("rCrit"),
 	BLOW_RATE("blowRate"),
@@ -109,6 +110,8 @@ public enum Stats
 	EARTH("earth"),
 	HOLY("holy"),
 	DARK("dark"),
+	VALAKAS("valakas"),
+	VALAKAS_RES("valakasRes"),
 	//
 	AGGRESSION_VULN("aggressionVuln"),
 	BLEED_VULN("bleedVuln"),
@@ -119,16 +122,25 @@ public enum Stats
 	SLEEP_VULN("sleepVuln"),
 	CONFUSION_VULN("confusionVuln"),
 	MOVEMENT_VULN("movementVuln"),
-	FIRE_VULN("fireVuln"),
-	WIND_VULN("windVuln"),
-	WATER_VULN("waterVuln"),
-	EARTH_VULN("earthVuln"),
-	HOLY_VULN("holyVuln"),
-	DARK_VULN("darkVuln"),
+	FIRE_RES("fireRes"),
+	WIND_RES("windRes"),
+	WATER_RES("waterRes"),
+	EARTH_RES("earthRes"),
+	HOLY_RES("holyRes"),
+	DARK_RES("darkRes"),
+	//Skills Power
+	FIRE_POWER("firePower"),
+	WATER_POWER("waterPower"),
+	WIND_POWER("windPower"),
+	EARTH_POWER("earthPower"),
+	HOLY_POWER("holyPower"),
+	DARK_POWER("darkPower"),
 	CANCEL_VULN("cancelVuln"), // Resistance for cancel type skills
 	DERANGEMENT_VULN("derangementVuln"),
 	DEBUFF_VULN("debuffVuln"),
+	BUFF_VULN("buffVuln"),
 	CRIT_VULN("critVuln"), // Resistence to Crit DMG.
+	MAGIC_DAMAGE_VULN("magicDamVul"),
 	
 	AGGRESSION_PROF("aggressionProf"),
 	BLEED_PROF("bleedProf"),
@@ -162,6 +174,7 @@ public enum Stats
 	DUAL_WPN_VULN("dualWpnVuln"),
 	DUALFIST_WPN_VULN("dualFistWpnVuln"),
 	BIGSWORD_WPN_VULN("bigSwordWpnVuln"),
+	BIGBLUNT_WPN_VULN("bigBluntWpnVuln"),
 	
 	REFLECT_DAMAGE_PERCENT("reflectDam"),
 	REFLECT_SKILL_MAGIC("reflectSkillMagic"),
@@ -177,7 +190,6 @@ public enum Stats
 	PATK_ANIMALS("pAtk-animals"),
 	PATK_MONSTERS("pAtk-monsters"),
 	PATK_DRAGONS("pAtk-dragons"),
-	PATK_UNDEAD("pAtk-undead"),
 	PATK_GIANTS("pAtk-giants"),
 	
 	PDEF_PLANTS("pDef-plants"),
@@ -185,7 +197,6 @@ public enum Stats
 	PDEF_ANIMALS("pDef-animals"),
 	PDEF_MONSTERS("pDef-monsters"),
 	PDEF_DRAGONS("pDef-dragons"),
-	PDEF_UNDEAD("pDef-undead"),
 	PDEF_GIANTS("pDef-giants"),
 	
 	ATK_REUSE("atkReuse"),
@@ -204,6 +215,7 @@ public enum Stats
 	PHYSICAL_MP_CONSUME_RATE("PhysicalMpConsumeRate"),
 	MAGICAL_MP_CONSUME_RATE("MagicalMpConsumeRate"),
 	DANCE_MP_CONSUME_RATE("DanceMpConsumeRate"),
+	BOW_MP_CONSUME_RATE("BowMpConsumeRate"),
 	HP_CONSUME_RATE("HpConsumeRate"),
 	MP_CONSUME("MpConsume"),
 	SOULSHOT_COUNT("soulShotCount"),

+ 20 - 5
L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2Item.java

@@ -28,10 +28,10 @@ import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
 import net.sf.l2j.gameserver.network.SystemMessageId;
 import net.sf.l2j.gameserver.skills.Env;
 import net.sf.l2j.gameserver.skills.conditions.Condition;
-import net.sf.l2j.gameserver.skills.effects.EffectTemplate;
 import net.sf.l2j.gameserver.skills.funcs.Func;
 import net.sf.l2j.gameserver.skills.funcs.FuncTemplate;
 import net.sf.l2j.gameserver.templates.StatsSet;
+import net.sf.l2j.gameserver.templates.effects.EffectTemplate;
 
 /**
  * This class contains all informations concerning the item (weapon, armor, etc).<BR>
@@ -85,6 +85,7 @@ public abstract class L2Item
 	public static final int SLOT_R_BRACELET = 0x100000;
 	public static final int SLOT_L_BRACELET = 0x200000;
 	public static final int SLOT_DECO = 0x400000;
+	public static final int SLOT_BELT = 0x800000;
 	public static final int SLOT_WOLF = -100;
 	public static final int SLOT_HATCHLING = -101;
 	public static final int SLOT_STRIDER = -102;
@@ -122,18 +123,19 @@ public abstract class L2Item
 	public static final int CRYSTAL_A = 0x04; // ??
 	public static final int CRYSTAL_S = 0x05; // ??
 	public static final int CRYSTAL_S80 = 0x06; // ??
+	public static final int CRYSTAL_S84 = 0x07; // ??
 	
 	private static final int[] crystalItemId =
 	{
-		0, 1458, 1459, 1460, 1461, 1462, 1462
+		0, 1458, 1459, 1460, 1461, 1462, 1462, 1462
 	};
 	private static final int[] crystalEnchantBonusArmor =
 	{
-		0, 11, 6, 11, 19, 25, 25
+		0, 11, 6, 11, 19, 25, 25, 25
 	};
 	private static final int[] crystalEnchantBonusWeapon =
 	{
-		0, 90, 45, 67, 144, 250, 250
+		0, 90, 45, 67, 144, 250, 250, 250
 	};
 	
 	private final int _itemId;
@@ -146,6 +148,7 @@ public abstract class L2Item
 	private final int _materialType;
 	private final int _crystalType; // default to none-grade
 	private final int _duration;
+	private final int _time;
 	private final int _bodyPart;
 	private final int _referencePrice;
 	private final int _crystalCount;
@@ -196,6 +199,7 @@ public abstract class L2Item
 		_materialType = set.getInteger("material");
 		_crystalType = set.getInteger("crystal_type", CRYSTAL_NONE); // default to none-grade
 		_duration = set.getInteger("duration");
+		_time = set.getInteger("time");
 		_bodyPart = set.getInteger("bodypart");
 		_referencePrice = set.getInteger("price");
 		_crystalCount = set.getInteger("crystal_count", 0);
@@ -224,6 +228,14 @@ public abstract class L2Item
 		return _duration;
 	}
 	
+	/**
+	 * Returns the time of the item
+	 * @return int
+	 */
+	public final int getTime()
+	{
+		return _time;
+	}
 	/**
 	 * Returns the ID of the iden
 	 * @return int
@@ -397,7 +409,7 @@ public abstract class L2Item
 	 */
 	public final int getReferencePrice()
 	{
-		return (isConsumable() ? (int) (_referencePrice * Config.RATE_CONSUMABLE_COST) : _referencePrice);
+		return (isConsumable() ? (int)(_referencePrice * Config.RATE_CONSUMABLE_COST) : _referencePrice);
 	}
 	
 	/**
@@ -526,7 +538,10 @@ public abstract class L2Item
 			env.item = instance;
 			L2Effect e = et.getEffect(env);
 			if (e != null)
+			{
+				e.scheduleEffect();
 				effects.add(e);
+			}
 		}
 		if (effects.isEmpty())
 			return _emptyEffectSet;

+ 8 - 2
L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2WarehouseItem.java

@@ -32,7 +32,7 @@ public class L2WarehouseItem
 {
 	private L2Item _item;
 	private int _object;
-	private int _count;
+	private long _count;
 	private int _owner;
 	private int _enchant;
 	private int _grade;
@@ -48,6 +48,7 @@ public class L2WarehouseItem
 	{
 		0, 0, 0, 0, 0, 0
 	};
+	private int _time;
 	
 	public L2WarehouseItem(L2ItemInstance item)
 	{
@@ -67,6 +68,7 @@ public class L2WarehouseItem
 		else
 			_isAugmented = false;
 		_mana = item.getMana();
+		_time = item.isTimeLimitedItem() ? (int) (item.getRemainingTime()/1000) : -1;
 		
 		_elemAtkType = item.getAttackElementType();
 		_elemAtkPower = item.getAttackElementPower();
@@ -105,7 +107,7 @@ public class L2WarehouseItem
 	 * Returns the count
 	 * @return int
 	 */
-	public final int getCount()
+	public final long getCount()
 	{
 		return _count;
 	}
@@ -260,6 +262,10 @@ public class L2WarehouseItem
 		return _elemDefAttr[i];
 	}
 	
+	public int getTime()
+	{
+		return _time;
+	}
 	/**
 	 * Returns the name of the item
 	 * @return String

+ 1 - 1
L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2Weapon.java

@@ -343,7 +343,7 @@ public final class L2Weapon extends L2Item
 			return _emptyEffectSet; // These skills should not work on RaidBoss
 		if (target.getFirstEffect(_skillsOnCrit.getId()) != null)
 			target.getFirstEffect(_skillsOnCrit.getId()).exit();
-		for (L2Effect e : _skillsOnCrit.getEffects(caster, target))
+		for (L2Effect e : _skillsOnCrit.getEffects(caster, target, new Env(shld, false, false, false)))
 			effects.add(e);
 		if (effects.isEmpty())
 			return _emptyEffectSet;

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/templates/item/L2WeaponType.java

@@ -36,7 +36,8 @@ public enum L2WeaponType
 	BIGBLUNT(14, "Big Blunt"), // Two handed blunt
 	ANCIENT_SWORD(15, "Ancient"),
 	CROSSBOW(16, "Crossbow"),
-	RAPIER(17, "Rapier");
+	RAPIER(17, "Rapier"),
+	DUAL_DAGGER(18, "Dual Dagger");
 	
 	private final int _id;
 	private final String _name;

+ 2 - 1
L2_GameServer/java/net/sf/l2j/gameserver/templates/skills/L2EffectType.java

@@ -65,5 +65,6 @@ public enum L2EffectType
 	SPOIL,
 	PROTECTION_BLESSING,
 	AFROHAIR,
-	FUSION
+	FUSION,
+	CHANCE_SKILL_TRIGGER
 }

+ 3 - 4
L2_GameServer/java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java

@@ -19,9 +19,7 @@ import java.lang.reflect.Constructor;
 import net.sf.l2j.gameserver.model.L2Skill;
 import net.sf.l2j.gameserver.skills.l2skills.L2SkillAgathion;
 import net.sf.l2j.gameserver.skills.l2skills.L2SkillChangeWeapon;
-import net.sf.l2j.gameserver.skills.l2skills.L2SkillCharge;
 import net.sf.l2j.gameserver.skills.l2skills.L2SkillChargeDmg;
-import net.sf.l2j.gameserver.skills.l2skills.L2SkillChargeEffect;
 import net.sf.l2j.gameserver.skills.l2skills.L2SkillCreateItem;
 import net.sf.l2j.gameserver.skills.l2skills.L2SkillDecoy;
 import net.sf.l2j.gameserver.skills.l2skills.L2SkillDefault;
@@ -76,6 +74,7 @@ public enum L2SkillType
 	HEAL_PERCENT,
 	HEAL_STATIC,
 	COMBATPOINTHEAL,
+	CPHEAL_PERCENT,
 	CPHOT,
 	MANAHEAL,
 	MANA_BY_LEVEL,
@@ -124,6 +123,7 @@ public enum L2SkillType
 	CREATE_ITEM(L2SkillCreateItem.class),
 	SUMMON_TREASURE_KEY,
 	EXTRACTABLE,
+	LEARN_SKILL,
 	
 	// Summons
 	SUMMON(L2SkillSummon.class),
@@ -136,6 +136,7 @@ public enum L2SkillType
 	
 	// Cancel
 	CANCEL,
+	CANCEL_STATS,
 	CANCEL_DEBUFF,
 	MAGE_BANE,
 	WARRIOR_BANE,
@@ -148,8 +149,6 @@ public enum L2SkillType
 	FUSION,
 	
 	RESURRECT,
-	CHARGE(L2SkillCharge.class),
-	CHARGE_EFFECT(L2SkillChargeEffect.class),
 	CHARGEDAM(L2SkillChargeDmg.class),
 	MHOT,
 	DETECT_WEAKNESS,

+ 2 - 2
L2_GameServer/java/net/sf/l2j/gsregistering/GameServerRegister.java

@@ -18,6 +18,7 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.math.BigInteger;
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.Map;
@@ -127,7 +128,7 @@ public class GameServerRegister
 
 	public static void cleanRegisteredGameServersFromDB()
 	{
-		java.sql.Connection con = null;
+		Connection con = null;
 		PreparedStatement statement = null;
 		try
 		{
@@ -142,7 +143,6 @@ public class GameServerRegister
 		}
 		finally
 		{
-			try {statement.close();} catch (Exception e) {}
 			try { con.close();} catch (Exception e) {}
 		}
 	}

+ 3 - 11
L2_GameServer/java/net/sf/l2j/loginserver/GameServerTable.java

@@ -24,6 +24,7 @@ import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 import java.security.NoSuchAlgorithmException;
 import java.security.spec.RSAKeyGenParameterSpec;
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -144,7 +145,7 @@ public class GameServerTable
 
 	private void loadRegisteredGameServers() throws SQLException
 	{
-		java.sql.Connection con = null;
+		Connection con = null;
 		PreparedStatement statement = null;
 
 		int id;
@@ -218,7 +219,7 @@ public class GameServerTable
 
 	public void registerServerOnDB(byte[] hexId, int id, String externalHost)
 	{
-		java.sql.Connection con = null;
+		Connection con = null;
 		PreparedStatement statement = null;
 		try
 		{
@@ -236,21 +237,12 @@ public class GameServerTable
 		}
 		finally
 		{
-			try
-			{
-				statement.close();
-			}
-			catch (Exception e)
-			{
-				
-			}
 			try
 			{
 				con.close();
 			}
 			catch (Exception e)
 			{
-				
 			}
 		}
 	}

+ 7 - 7
L2_GameServer/java/net/sf/l2j/loginserver/LoginController.java

@@ -21,6 +21,7 @@ import java.security.KeyPairGenerator;
 import java.security.MessageDigest;
 import java.security.interfaces.RSAPrivateKey;
 import java.security.spec.RSAKeyGenParameterSpec;
+import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.Collection;
@@ -90,7 +91,7 @@ public class LoginController
 
 	private LoginController() throws GeneralSecurityException
 	{
-		_log.info("Loading LoginContoller...");
+		_log.info("Loading LoginController...");
 
 		_hackProtection = new FastMap<InetAddress, FailedLoginAttempt>();
 
@@ -399,7 +400,7 @@ public class LoginController
 
 			if (loginOk && client.getLastServer() != serverId)
 			{
-				java.sql.Connection con = null;
+				Connection con = null;
 				PreparedStatement statement = null;
 				try
 				{
@@ -428,7 +429,7 @@ public class LoginController
 
 	public void setAccountAccessLevel(String account, int banLevel)
 	{
-		java.sql.Connection con = null;
+		Connection con = null;
 		PreparedStatement statement = null;
 		try
 		{
@@ -449,7 +450,6 @@ public class LoginController
 		{
 			try
 			{
-				statement.close();
 				con.close();
 			}
 			catch (Exception e)
@@ -461,7 +461,7 @@ public class LoginController
 	public boolean isGM(String user)
 	{
 		boolean ok = false;
-		java.sql.Connection con = null;
+		Connection con = null;
 		PreparedStatement statement = null;
 		try
 		{
@@ -528,7 +528,7 @@ public class LoginController
 			return false;
 		}
 
-		java.sql.Connection con = null;
+		Connection con = null;
 		try
 		{
 			MessageDigest md = MessageDigest.getInstance("SHA");
@@ -667,7 +667,7 @@ public class LoginController
 	{
 		boolean ok = false;
 
-		java.sql.Connection con = null;
+		Connection con = null;
 		try
 		{
 			con = L2DatabaseFactory.getInstance().getConnection();