valanths1990

L2j server packets rework

Dec 5th, 2015
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 69.96 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P L2J_DataPack
  3. Index: dist/game/data/scripts/handlers/effecthandlers/VitalityPointUp.java
  4. ===================================================================
  5. --- dist/game/data/scripts/handlers/effecthandlers/VitalityPointUp.java (revision 39189)
  6. +++ dist/game/data/scripts/handlers/effecthandlers/VitalityPointUp.java (working copy)
  7. @@ -22,7 +22,6 @@
  8. import com.l2jserver.gameserver.model.conditions.Condition;
  9. import com.l2jserver.gameserver.model.effects.AbstractEffect;
  10. import com.l2jserver.gameserver.model.skills.BuffInfo;
  11. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  12.  
  13. /**
  14. * Vitality Point Up effect implementation.
  15. @@ -51,7 +50,7 @@
  16. if ((info.getEffected() != null) && info.getEffected().isPlayer())
  17. {
  18. info.getEffected().getActingPlayer().updateVitalityPoints(_value, false, false);
  19. - info.getEffected().getActingPlayer().sendPacket(new UserInfo(info.getEffected().getActingPlayer()));
  20. + info.getEffected().getActingPlayer().sendUserInfo(true);
  21. }
  22. }
  23. }
  24. Index: dist/game/data/scripts/handlers/telnethandlers/PlayerHandler.java
  25. ===================================================================
  26. --- dist/game/data/scripts/handlers/telnethandlers/PlayerHandler.java (revision 39189)
  27. +++ dist/game/data/scripts/handlers/telnethandlers/PlayerHandler.java (working copy)
  28. @@ -37,11 +37,8 @@
  29. import com.l2jserver.gameserver.model.punishment.PunishmentTask;
  30. import com.l2jserver.gameserver.model.punishment.PunishmentType;
  31. import com.l2jserver.gameserver.network.SystemMessageId;
  32. -import com.l2jserver.gameserver.network.serverpackets.CharInfo;
  33. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  34. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  35. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  36. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  37. import com.l2jserver.gameserver.util.GMAudit;
  38. import com.l2jserver.gameserver.util.Util;
  39.  
  40. @@ -317,9 +314,7 @@
  41. InventoryUpdate iu = new InventoryUpdate();
  42. iu.addModifiedItem(itemInstance);
  43. activeChar.sendPacket(iu);
  44. - activeChar.broadcastPacket(new CharInfo(activeChar));
  45. - activeChar.sendPacket(new UserInfo(activeChar));
  46. - activeChar.broadcastPacket(new ExBrExtraUserInfo(activeChar));
  47. + activeChar.broadcastUserInfo();
  48.  
  49. // informations
  50. activeChar.sendMessage("Changed enchantment of " + activeChar.getName() + "'s " + itemInstance.getItem().getName() + " from " + curEnchant + " to " + ench + ".");
  51. Index: dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java
  52. ===================================================================
  53. --- dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java (revision 39189)
  54. +++ dist/game/data/scripts/handlers/admincommandhandlers/AdminEventEngine.java (working copy)
  55. @@ -34,11 +34,8 @@
  56. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  57. import com.l2jserver.gameserver.model.entity.L2Event;
  58. import com.l2jserver.gameserver.model.entity.L2Event.EventState;
  59. -import com.l2jserver.gameserver.network.serverpackets.CharInfo;
  60. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  61. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  62. import com.l2jserver.gameserver.network.serverpackets.PlaySound;
  63. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  64. import com.l2jserver.gameserver.util.Broadcast;
  65. import com.l2jserver.util.Rnd;
  66. import com.l2jserver.util.StringUtil;
  67. @@ -327,11 +324,7 @@
  68. {
  69. player.getPoly().setPolyInfo("npc", polyIds[Rnd.get(polyIds.length)]);
  70. player.teleToLocation(player.getLocation(), true);
  71. - CharInfo info1 = new CharInfo(player);
  72. - player.broadcastPacket(info1);
  73. - UserInfo info2 = new UserInfo(player);
  74. - player.sendPacket(info2);
  75. - player.broadcastPacket(new ExBrExtraUserInfo(player));
  76. + activeChar.broadcastUserInfo();
  77. }
  78. showEventControl(activeChar);
  79. }
  80. @@ -344,11 +337,7 @@
  81. player.getPoly().setPolyInfo(null, "1");
  82. player.decayMe();
  83. player.spawnMe(player.getX(), player.getY(), player.getZ());
  84. - CharInfo info1 = new CharInfo(player);
  85. - player.broadcastPacket(info1);
  86. - UserInfo info2 = new UserInfo(player);
  87. - player.sendPacket(info2);
  88. - player.broadcastPacket(new ExBrExtraUserInfo(player));
  89. + activeChar.broadcastUserInfo();
  90. }
  91. }
  92. showEventControl(activeChar);
  93. Index: dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java
  94. ===================================================================
  95. --- dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java (revision 39189)
  96. +++ dist/game/data/scripts/handlers/admincommandhandlers/AdminEffects.java (working copy)
  97. @@ -34,9 +34,7 @@
  98. import com.l2jserver.gameserver.model.skills.AbnormalVisualEffect;
  99. import com.l2jserver.gameserver.model.skills.Skill;
  100. import com.l2jserver.gameserver.network.SystemMessageId;
  101. -import com.l2jserver.gameserver.network.serverpackets.CharInfo;
  102. import com.l2jserver.gameserver.network.serverpackets.Earthquake;
  103. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  104. import com.l2jserver.gameserver.network.serverpackets.ExRedSky;
  105. import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
  106. import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
  107. @@ -45,15 +43,25 @@
  108. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  109. import com.l2jserver.gameserver.network.serverpackets.SunRise;
  110. import com.l2jserver.gameserver.network.serverpackets.SunSet;
  111. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  112. import com.l2jserver.gameserver.util.Broadcast;
  113. import com.l2jserver.gameserver.util.Util;
  114.  
  115. /**
  116. - * This class handles following admin commands: <li>invis/invisible/vis/visible = makes yourself invisible or visible <li>earthquake = causes an earthquake of a given intensity and duration around you <li>bighead/shrinkhead = changes head size <li>gmspeed = temporary Super Haste effect. <li>
  117. - * para/unpara = paralyze/remove paralysis from target <li>para_all/unpara_all = same as para/unpara, affects the whole world. <li>polyself/unpolyself = makes you look as a specified mob. <li>changename = temporary change name <li>clearteams/setteam_close/setteam = team related commands <li>social =
  118. - * forces an L2Character instance to broadcast social action packets. <li>effect = forces an L2Character instance to broadcast MSU packets. <li>abnormal = force changes over an L2Character instance's abnormal state. <li>play_sound/play_sounds = Music broadcasting related commands <li>atmosphere =
  119. - * sky change related commands.
  120. + * This class handles following admin commands:
  121. + * <li>invis/invisible/vis/visible = makes yourself invisible or visible
  122. + * <li>earthquake = causes an earthquake of a given intensity and duration around you
  123. + * <li>bighead/shrinkhead = changes head size
  124. + * <li>gmspeed = temporary Super Haste effect.
  125. + * <li>para/unpara = paralyze/remove paralysis from target
  126. + * <li>para_all/unpara_all = same as para/unpara, affects the whole world.
  127. + * <li>polyself/unpolyself = makes you look as a specified mob.
  128. + * <li>changename = temporary change name
  129. + * <li>clearteams/setteam_close/setteam = team related commands
  130. + * <li>social = forces an L2Character instance to broadcast social action packets.
  131. + * <li>effect = forces an L2Character instance to broadcast MSU packets.
  132. + * <li>abnormal = force changes over an L2Character instance's abnormal state.
  133. + * <li>play_sound/play_sounds = Music broadcasting related commands
  134. + * <li>atmosphere = sky change related commands.
  135. */
  136. public class AdminEffects implements IAdminCommandHandler
  137. {
  138. @@ -112,18 +120,14 @@
  139. if (!activeChar.isInvisible())
  140. {
  141. activeChar.setInvisible(true);
  142. - activeChar.broadcastUserInfo();
  143. activeChar.decayMe();
  144. activeChar.spawnMe();
  145. - activeChar.sendMessage("You are now invisible.");
  146. }
  147. else
  148. {
  149. activeChar.setInvisible(false);
  150. - activeChar.broadcastUserInfo();
  151. - activeChar.sendMessage("You are now visible.");
  152. }
  153. -
  154. + activeChar.broadcastUserInfo();
  155. command = "";
  156. AdminHtml.showAdminHtml(activeChar, "gm_menu.htm");
  157. }
  158. @@ -374,11 +378,7 @@
  159. String id = st.nextToken();
  160. activeChar.getPoly().setPolyInfo("npc", id);
  161. activeChar.teleToLocation(activeChar.getLocation());
  162. - CharInfo info1 = new CharInfo(activeChar);
  163. - activeChar.broadcastPacket(info1);
  164. - UserInfo info2 = new UserInfo(activeChar);
  165. - activeChar.sendPacket(info2);
  166. - activeChar.broadcastPacket(new ExBrExtraUserInfo(activeChar));
  167. + activeChar.broadcastUserInfo();
  168. }
  169. catch (Exception e)
  170. {
  171. @@ -390,11 +390,7 @@
  172. activeChar.getPoly().setPolyInfo(null, "1");
  173. activeChar.decayMe();
  174. activeChar.spawnMe(activeChar.getX(), activeChar.getY(), activeChar.getZ());
  175. - CharInfo info1 = new CharInfo(activeChar);
  176. - activeChar.broadcastPacket(info1);
  177. - UserInfo info2 = new UserInfo(activeChar);
  178. - activeChar.sendPacket(info2);
  179. - activeChar.broadcastPacket(new ExBrExtraUserInfo(activeChar));
  180. + activeChar.broadcastUserInfo();
  181. }
  182. else if (command.equals("admin_clearteams"))
  183. {
  184. Index: dist/game/data/scripts/handlers/admincommandhandlers/AdminEnchant.java
  185. ===================================================================
  186. --- dist/game/data/scripts/handlers/admincommandhandlers/AdminEnchant.java (revision 39189)
  187. +++ dist/game/data/scripts/handlers/admincommandhandlers/AdminEnchant.java (working copy)
  188. @@ -27,10 +27,7 @@
  189. import com.l2jserver.gameserver.model.itemcontainer.Inventory;
  190. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  191. import com.l2jserver.gameserver.network.SystemMessageId;
  192. -import com.l2jserver.gameserver.network.serverpackets.CharInfo;
  193. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  194. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  195. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  196.  
  197. /**
  198. * This class handles following admin commands: - enchant_armor
  199. @@ -216,9 +213,7 @@
  200. InventoryUpdate iu = new InventoryUpdate();
  201. iu.addModifiedItem(itemInstance);
  202. player.sendPacket(iu);
  203. - player.broadcastPacket(new CharInfo(player));
  204. - player.sendPacket(new UserInfo(player));
  205. - player.broadcastPacket(new ExBrExtraUserInfo(player));
  206. + activeChar.broadcastUserInfo();
  207.  
  208. // informations
  209. activeChar.sendMessage("Changed enchantment of " + player.getName() + "'s " + itemInstance.getItem().getName() + " from " + curEnchant + " to " + ench + ".");
  210. Index: dist/game/data/scripts/ai/npc/TerritoryManagers/TerritoryManagers.java
  211. ===================================================================
  212. --- dist/game/data/scripts/ai/npc/TerritoryManagers/TerritoryManagers.java (revision 39189)
  213. +++ dist/game/data/scripts/ai/npc/TerritoryManagers/TerritoryManagers.java (working copy)
  214. @@ -18,8 +18,6 @@
  215. */
  216. package ai.npc.TerritoryManagers;
  217.  
  218. -import ai.npc.AbstractNpcAI;
  219. -
  220. import com.l2jserver.gameserver.data.xml.impl.MultisellData;
  221. import com.l2jserver.gameserver.enums.Race;
  222. import com.l2jserver.gameserver.instancemanager.CastleManager;
  223. @@ -32,10 +30,10 @@
  224. import com.l2jserver.gameserver.model.quest.QuestState;
  225. import com.l2jserver.gameserver.model.quest.State;
  226. import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
  227. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  228. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  229. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  230.  
  231. +import ai.npc.AbstractNpcAI;
  232. +
  233. /**
  234. * Retail AI for Territory Managers.
  235. * @author Zoey76
  236. @@ -155,8 +153,7 @@
  237. player.addItem(event, 7694, 1, npc, true);
  238. // Set Noblesse status to the player.
  239. player.setNoble(true);
  240. - player.sendPacket(new UserInfo(player));
  241. - player.sendPacket(new ExBrExtraUserInfo(player));
  242. + player.sendUserInfo(true);
  243. // Complete the sub-class related quest.
  244. // Complete quest Seeds of Chaos (236) for Kamael characters.
  245. // Complete quest Mimir's Elixir (235) for other races characters.
  246. Index: dist/game/data/scripts/handlers/effecthandlers/GiveRecommendation.java
  247. ===================================================================
  248. --- dist/game/data/scripts/handlers/effecthandlers/GiveRecommendation.java (revision 39189)
  249. +++ dist/game/data/scripts/handlers/effecthandlers/GiveRecommendation.java (working copy)
  250. @@ -26,7 +26,6 @@
  251. import com.l2jserver.gameserver.network.SystemMessageId;
  252. import com.l2jserver.gameserver.network.serverpackets.ExVoteSystemInfo;
  253. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  254. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  255.  
  256. /**
  257. * Give Recommendation effect implementation.
  258. @@ -73,7 +72,7 @@
  259. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_OBTAINED_S1_RECOMMENDATIONS);
  260. sm.addInt(recommendationsGiven);
  261. target.sendPacket(sm);
  262. - target.sendPacket(new UserInfo(target));
  263. + target.sendUserInfo(true);
  264. target.sendPacket(new ExVoteSystemInfo(target));
  265. }
  266. else
  267. Index: dist/game/data/scripts/handlers/admincommandhandlers/AdminEditChar.java
  268. ===================================================================
  269. --- dist/game/data/scripts/handlers/admincommandhandlers/AdminEditChar.java (revision 39189)
  270. +++ dist/game/data/scripts/handlers/admincommandhandlers/AdminEditChar.java (working copy)
  271. @@ -45,14 +45,12 @@
  272. import com.l2jserver.gameserver.model.base.ClassId;
  273. import com.l2jserver.gameserver.network.L2GameClient;
  274. import com.l2jserver.gameserver.network.SystemMessageId;
  275. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  276. import com.l2jserver.gameserver.network.serverpackets.ExVoteSystemInfo;
  277. import com.l2jserver.gameserver.network.serverpackets.GMViewItemList;
  278. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  279. import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowAll;
  280. import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowDeleteAll;
  281. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  282. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  283. import com.l2jserver.gameserver.util.HtmlUtil;
  284. import com.l2jserver.gameserver.util.Util;
  285. import com.l2jserver.util.StringUtil;
  286. @@ -233,8 +231,6 @@
  287. L2PcInstance player = (L2PcInstance) target;
  288. player.setPkKills(pk);
  289. player.broadcastUserInfo();
  290. - player.sendPacket(new UserInfo(player));
  291. - player.sendPacket(new ExBrExtraUserInfo(player));
  292. player.sendMessage("A GM changed your PK count to " + pk);
  293. activeChar.sendMessage(player.getName() + "'s PK count changed to " + pk);
  294. }
  295. @@ -264,8 +260,6 @@
  296. L2PcInstance player = (L2PcInstance) target;
  297. player.setPvpKills(pvp);
  298. player.broadcastUserInfo();
  299. - player.sendPacket(new UserInfo(player));
  300. - player.sendPacket(new ExBrExtraUserInfo(player));
  301. player.sendMessage("A GM changed your PVP count to " + pvp);
  302. activeChar.sendMessage(player.getName() + "'s PVP count changed to " + pvp);
  303. }
  304. @@ -295,8 +289,6 @@
  305. L2PcInstance player = (L2PcInstance) target;
  306. player.setFame(fame);
  307. player.broadcastUserInfo();
  308. - player.sendPacket(new UserInfo(player));
  309. - player.sendPacket(new ExBrExtraUserInfo(player));
  310. player.sendMessage("A GM changed your Reputation points to " + fame);
  311. activeChar.sendMessage(player.getName() + "'s Fame changed to " + fame);
  312. }
  313. @@ -326,8 +318,6 @@
  314. L2PcInstance player = (L2PcInstance) target;
  315. player.setRecomHave(recVal);
  316. player.broadcastUserInfo();
  317. - player.sendPacket(new UserInfo(player));
  318. - player.sendPacket(new ExBrExtraUserInfo(player));
  319. player.sendPacket(new ExVoteSystemInfo(player));
  320. player.sendMessage("A GM changed your Recommend points to " + recVal);
  321. activeChar.sendMessage(player.getName() + "'s Recommend changed to " + recVal);
  322. Index: dist/game/data/scripts/ai/npc/FameManager/FameManager.java
  323. ===================================================================
  324. --- dist/game/data/scripts/ai/npc/FameManager/FameManager.java (revision 39189)
  325. +++ dist/game/data/scripts/ai/npc/FameManager/FameManager.java (working copy)
  326. @@ -18,13 +18,12 @@
  327. */
  328. package ai.npc.FameManager;
  329.  
  330. -import ai.npc.AbstractNpcAI;
  331. -
  332. import com.l2jserver.gameserver.model.actor.L2Npc;
  333. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  334. import com.l2jserver.gameserver.network.SystemMessageId;
  335. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  336.  
  337. +import ai.npc.AbstractNpcAI;
  338. +
  339. /**
  340. * Fame Manager AI.
  341. * @author St3eT
  342. @@ -76,7 +75,7 @@
  343. {
  344. player.setFame(player.getFame() - DECREASE_COST);
  345. player.setPkKills(player.getPkKills() - 1);
  346. - player.sendPacket(new UserInfo(player));
  347. + player.sendUserInfo(true);
  348. htmltext = npc.getId() + "-06.html";
  349. }
  350. else
  351. @@ -98,7 +97,7 @@
  352. {
  353. player.setFame(player.getFame() - REPUTATION_COST);
  354. player.getClan().addReputationScore(50, true);
  355. - player.sendPacket(new UserInfo(player));
  356. + player.sendUserInfo(true);
  357. player.sendPacket(SystemMessageId.ACQUIRED_50_CLAN_FAME_POINTS);
  358. htmltext = npc.getId() + "-04.html";
  359. }
  360. #P L2J_Server
  361. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExRemoveItemAttribute.java
  362. ===================================================================
  363. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExRemoveItemAttribute.java (revision 20882)
  364. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExRemoveItemAttribute.java (working copy)
  365. @@ -26,7 +26,6 @@
  366. import com.l2jserver.gameserver.network.serverpackets.ExBaseAttributeCancelResult;
  367. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  368. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  369. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  370.  
  371. public class RequestExRemoveItemAttribute extends L2GameClientPacket
  372. {
  373. @@ -75,7 +74,7 @@
  374. targetItem.getElemental(_element).removeBonus(activeChar);
  375. }
  376. targetItem.clearElementAttr(_element);
  377. - activeChar.sendPacket(new UserInfo(activeChar));
  378. + activeChar.sendUserInfo(true);
  379.  
  380. InventoryUpdate iu = new InventoryUpdate();
  381. iu.addModifiedItem(targetItem);
  382. Index: src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/RecoGiveTask.java
  383. ===================================================================
  384. --- src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/RecoGiveTask.java (revision 20882)
  385. +++ src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/RecoGiveTask.java (working copy)
  386. @@ -21,7 +21,6 @@
  387. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  388. import com.l2jserver.gameserver.network.SystemMessageId;
  389. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  390. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  391.  
  392. /**
  393. * Task dedicated to increase player's recommendation bonus.
  394. @@ -55,7 +54,7 @@
  395. final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_OBTAINED_S1_RECOMMENDATIONS);
  396. sm.addInt(recoToGive);
  397. _player.sendPacket(sm);
  398. - _player.sendPacket(new UserInfo(_player));
  399. + _player.sendUserInfo(true);
  400. }
  401. }
  402. }
  403. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestRecordInfo.java
  404. ===================================================================
  405. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestRecordInfo.java (revision 20882)
  406. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestRecordInfo.java (working copy)
  407. @@ -23,9 +23,7 @@
  408. import com.l2jserver.gameserver.model.L2Object;
  409. import com.l2jserver.gameserver.model.actor.L2Character;
  410. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  411. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  412. import com.l2jserver.gameserver.network.serverpackets.SpawnItem;
  413. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  414.  
  415. public class RequestRecordInfo extends L2GameClientPacket
  416. {
  417. @@ -46,8 +44,7 @@
  418. return;
  419. }
  420.  
  421. - activeChar.sendPacket(new UserInfo(activeChar));
  422. - activeChar.sendPacket(new ExBrExtraUserInfo(activeChar));
  423. + activeChar.sendUserInfo(true);
  424.  
  425. Collection<L2Object> objs = activeChar.getKnownList().getKnownObjects().values();
  426. for (L2Object object : objs)
  427. Index: src/main/java/com/l2jserver/gameserver/model/CharEffectList.java
  428. ===================================================================
  429. --- src/main/java/com/l2jserver/gameserver/model/CharEffectList.java (revision 20882)
  430. +++ src/main/java/com/l2jserver/gameserver/model/CharEffectList.java (working copy)
  431. @@ -27,12 +27,14 @@
  432. import java.util.Set;
  433. import java.util.concurrent.ConcurrentHashMap;
  434. import java.util.concurrent.ConcurrentLinkedQueue;
  435. +import java.util.concurrent.ScheduledFuture;
  436. import java.util.concurrent.atomic.AtomicInteger;
  437. import java.util.function.Consumer;
  438. import java.util.function.Function;
  439. import java.util.logging.Logger;
  440.  
  441. import com.l2jserver.Config;
  442. +import com.l2jserver.gameserver.ThreadPoolManager;
  443. import com.l2jserver.gameserver.model.actor.L2Character;
  444. import com.l2jserver.gameserver.model.actor.L2Summon;
  445. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  446. @@ -1369,11 +1371,30 @@
  447. updateEffectList(true);
  448. }
  449.  
  450. + private ScheduledFuture<?> _effectIconsUpdate;
  451. +
  452. + protected void updateEffectIcons()
  453. + {
  454. + if (_owner == null)
  455. + {
  456. + return;
  457. + }
  458. +
  459. + // Check if the previous call hasn't finished, if so, don't send packets uselessly again.
  460. + if ((_effectIconsUpdate != null) && !_effectIconsUpdate.isDone())
  461. + {
  462. + return;
  463. + }
  464. +
  465. + // Schedule the icon update packets 333 miliseconds ahead, so it can gather-up most of the changes.
  466. + _effectIconsUpdate = ThreadPoolManager.getInstance().scheduleGeneral(() -> updateEffectIconsTask(), 333);
  467. + }
  468. +
  469. /**
  470. * Update effect icons.<br>
  471. * Prevents initialization.
  472. */
  473. - private void updateEffectIcons()
  474. + private void updateEffectIconsTask()
  475. {
  476. if (_owner == null)
  477. {
  478. Index: src/main/java/com/l2jserver/gameserver/network/serverpackets/PledgeShowMemberListAll.java
  479. ===================================================================
  480. --- src/main/java/com/l2jserver/gameserver/network/serverpackets/PledgeShowMemberListAll.java (revision 20882)
  481. +++ src/main/java/com/l2jserver/gameserver/network/serverpackets/PledgeShowMemberListAll.java (working copy)
  482. @@ -59,9 +59,7 @@
  483. }
  484.  
  485. // unless this is sent sometimes, the client doesn't recognise the player as the leader
  486. - _activeChar.sendPacket(new UserInfo(_activeChar));
  487. - _activeChar.sendPacket(new ExBrExtraUserInfo(_activeChar));
  488. -
  489. + _activeChar.sendUserInfo(true);
  490. }
  491.  
  492. private void writePledge(int mainOrSubpledge)
  493. Index: src/main/java/com/l2jserver/gameserver/model/actor/L2Character.java
  494. ===================================================================
  495. --- src/main/java/com/l2jserver/gameserver/model/actor/L2Character.java (revision 20882)
  496. +++ src/main/java/com/l2jserver/gameserver/model/actor/L2Character.java (working copy)
  497. @@ -3745,11 +3745,11 @@
  498. {
  499. if (broadcastFull)
  500. {
  501. - getActingPlayer().updateAndBroadcastStatus(2);
  502. + getActingPlayer().updateAndBroadcastStatus();
  503. }
  504. else
  505. {
  506. - getActingPlayer().updateAndBroadcastStatus(1);
  507. + getActingPlayer().updateAndBroadcastStatus();
  508. if (su.hasAttributes())
  509. {
  510. broadcastPacket(su);
  511. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
  512. ===================================================================
  513. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java (revision 20882)
  514. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java (working copy)
  515. @@ -185,7 +185,6 @@
  516. if (Config.GM_STARTUP_DIET_MODE && AdminData.getInstance().hasAccess("admin_diet", activeChar.getAccessLevel()))
  517. {
  518. activeChar.setDietMode(true);
  519. - activeChar.refreshOverloaded();
  520. }
  521.  
  522. if (Config.GM_STARTUP_AUTO_LIST && AdminData.getInstance().hasAccess("admin_gmliston", activeChar.getAccessLevel()))
  523. @@ -349,7 +348,9 @@
  524.  
  525. activeChar.checkRecoBonusTask();
  526.  
  527. - activeChar.broadcastUserInfo();
  528. + activeChar.entering = false;
  529. + activeChar.sendUserInfo(true);
  530. + activeChar.sendPacket(new EtcStatusUpdate(activeChar));
  531.  
  532. // Send Macro List
  533. activeChar.getMacros().sendUpdate();
  534. @@ -412,6 +413,10 @@
  535.  
  536. activeChar.updateEffectIcons();
  537.  
  538. + // We will force server to send one more update with low priority
  539. + // Just in case to avoid invisible cartoons
  540. + activeChar.broadcastUserInfo(false);
  541. +
  542. activeChar.sendPacket(new EtcStatusUpdate(activeChar));
  543.  
  544. // Expand Skill
  545. Index: src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/PacketSenderTask.java
  546. ===================================================================
  547. --- src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/PacketSenderTask.java (revision 0)
  548. +++ src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/PacketSenderTask.java (working copy)
  549. @@ -0,0 +1,79 @@
  550. +/*
  551. + * Copyright (C) 2004-2015 L2J Server
  552. + *
  553. + * This file is part of L2J Server.
  554. + *
  555. + * L2J Server is free software: you can redistribute it and/or modify
  556. + * it under the terms of the GNU General Public License as published by
  557. + * the Free Software Foundation, either version 3 of the License, or
  558. + * (at your option) any later version.
  559. + *
  560. + * L2J Server is distributed in the hope that it will be useful,
  561. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  562. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  563. + * General Public License for more details.
  564. + *
  565. + * You should have received a copy of the GNU General Public License
  566. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  567. + */
  568. +package com.l2jserver.gameserver.model.actor.tasks.player;
  569. +
  570. +import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
  571. +import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  572. +import com.l2jserver.gameserver.network.serverpackets.CharInfo;
  573. +import com.l2jserver.gameserver.network.serverpackets.EtcStatusUpdate;
  574. +import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  575. +import com.l2jserver.gameserver.network.serverpackets.ExDominionWarStart;
  576. +import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  577. +
  578. +/**
  579. + * This class is dedicated to manage some packets priority.
  580. + * @author valanths1990
  581. + */
  582. +public class PacketSenderTask
  583. +{
  584. + public static void sendUserInfoImpl(L2PcInstance player)
  585. + {
  586. + if (player.entering)
  587. + {
  588. + return;
  589. + }
  590. +
  591. + player.sendPacket(new UserInfo(player));
  592. + player.sendPacket(new ExBrExtraUserInfo(player));
  593. +
  594. + if (TerritoryWarManager.getInstance().isTWInProgress() && (TerritoryWarManager.getInstance().checkIsRegistered(-1, player.getObjectId()) || TerritoryWarManager.getInstance().checkIsRegistered(-1, player.getClan())))
  595. + {
  596. + player.broadcastPacket(new ExDominionWarStart(player));
  597. + }
  598. + }
  599. +
  600. + public static void updateAndBroadcastStatus(L2PcInstance player)
  601. + {
  602. + player.refreshOverloaded(false);
  603. + player.refreshExpertisePenalty(false);
  604. +
  605. + if (player.entering)
  606. + {
  607. + return;
  608. + }
  609. +
  610. + // Send a Server->Client packet UserInfo to this L2PcInstance and CharInfo to all L2PcInstance in its _KnownPlayers (broadcast)
  611. + broadcastUserInfo(player, false);
  612. + player.sendPacket(new EtcStatusUpdate(player));
  613. + }
  614. +
  615. + public static void broadcastUserInfo(L2PcInstance player, boolean force)
  616. + {
  617. + // Send a Server->Client packet UserInfo to this L2PcInstance
  618. + player.sendUserInfo(force);
  619. + player.sendCharInfo(force);
  620. + }
  621. +
  622. + public static void sendCharInfoImpl(L2PcInstance player)
  623. + {
  624. + // Send a Server->Client packet CharInfo to all L2PcInstance in _KnownPlayers of the L2PcInstance
  625. + player.broadcastPacket(new CharInfo(player));
  626. + player.broadcastPacket(new ExBrExtraUserInfo(player));
  627. + }
  628. +}
  629. Index: src/main/java/com/l2jserver/gameserver/model/entity/Siege.java
  630. ===================================================================
  631. --- src/main/java/com/l2jserver/gameserver/model/entity/Siege.java (revision 20882)
  632. +++ src/main/java/com/l2jserver/gameserver/model/entity/Siege.java (working copy)
  633. @@ -60,11 +60,9 @@
  634. import com.l2jserver.gameserver.model.events.impl.sieges.castle.OnCastleSiegeOwnerChange;
  635. import com.l2jserver.gameserver.model.events.impl.sieges.castle.OnCastleSiegeStart;
  636. import com.l2jserver.gameserver.network.SystemMessageId;
  637. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  638. import com.l2jserver.gameserver.network.serverpackets.RelationChanged;
  639. import com.l2jserver.gameserver.network.serverpackets.SiegeInfo;
  640. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  641. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  642. import com.l2jserver.gameserver.util.Broadcast;
  643.  
  644. public class Siege implements Siegable
  645. @@ -590,8 +588,7 @@
  646. member.startFameTask(Config.CASTLE_ZONE_FAME_TASK_FREQUENCY * 1000, Config.CASTLE_ZONE_FAME_AQUIRE_POINTS);
  647. }
  648. }
  649. - member.sendPacket(new UserInfo(member));
  650. - member.sendPacket(new ExBrExtraUserInfo(member));
  651. + member.sendUserInfo(true);
  652. for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
  653. {
  654. if (player == null)
  655. @@ -639,8 +636,7 @@
  656. member.startFameTask(Config.CASTLE_ZONE_FAME_TASK_FREQUENCY * 1000, Config.CASTLE_ZONE_FAME_AQUIRE_POINTS);
  657. }
  658. }
  659. - member.sendPacket(new UserInfo(member));
  660. - member.sendPacket(new ExBrExtraUserInfo(member));
  661. + member.sendUserInfo(true);
  662.  
  663. for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
  664. {
  665. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillUntrain.java
  666. ===================================================================
  667. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillUntrain.java (revision 20882)
  668. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillUntrain.java (working copy)
  669. @@ -32,12 +32,10 @@
  670. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  671. import com.l2jserver.gameserver.model.skills.Skill;
  672. import com.l2jserver.gameserver.network.SystemMessageId;
  673. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  674. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfo;
  675. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfoDetail;
  676. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillResult;
  677. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  678. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  679.  
  680. /**
  681. * Format (ch) dd c: (id) 0xD0 h: (subid) 0x33 d: skill id d: skill lvl
  682. @@ -173,9 +171,6 @@
  683. _log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requireditems + " Adena.");
  684. }
  685.  
  686. - player.sendPacket(new UserInfo(player));
  687. - player.sendPacket(new ExBrExtraUserInfo(player));
  688. -
  689. if (_skillLvl > 100)
  690. {
  691. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.UNTRAIN_SUCCESSFUL_SKILL_S1_ENCHANT_LEVEL_DECREASED_BY_ONE);
  692. @@ -193,6 +188,8 @@
  693. player.sendPacket(new ExEnchantSkillInfo(_skillId, afterUntrainSkillLevel));
  694. player.sendPacket(new ExEnchantSkillInfoDetail(2, _skillId, afterUntrainSkillLevel - 1, player));
  695. player.updateShortCuts(_skillId, afterUntrainSkillLevel);
  696. +
  697. + player.sendUserInfo(true);
  698. }
  699.  
  700. @Override
  701. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java
  702. ===================================================================
  703. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java (revision 20882)
  704. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java (working copy)
  705. @@ -25,10 +25,8 @@
  706. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  707. import com.l2jserver.gameserver.network.SystemMessageId;
  708. import com.l2jserver.gameserver.network.serverpackets.ExAttributeEnchantResult;
  709. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  710. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  711. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  712. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  713. import com.l2jserver.gameserver.util.Util;
  714. import com.l2jserver.util.Rnd;
  715.  
  716. @@ -251,9 +249,8 @@
  717. }
  718.  
  719. player.sendPacket(new ExAttributeEnchantResult(powerToAdd));
  720. - player.sendPacket(new UserInfo(player));
  721. - player.sendPacket(new ExBrExtraUserInfo(player));
  722. player.setActiveEnchantAttrItemId(L2PcInstance.ID_NONE);
  723. + player.sendUserInfo(true);
  724. }
  725.  
  726. public int getLimit(L2ItemInstance item, int sotneId)
  727. Index: src/main/java/com/l2jserver/gameserver/data/sql/impl/ClanTable.java
  728. ===================================================================
  729. --- src/main/java/com/l2jserver/gameserver/data/sql/impl/ClanTable.java (revision 20882)
  730. +++ src/main/java/com/l2jserver/gameserver/data/sql/impl/ClanTable.java (working copy)
  731. @@ -55,12 +55,10 @@
  732. import com.l2jserver.gameserver.model.events.impl.clan.OnClanWarFinish;
  733. import com.l2jserver.gameserver.model.events.impl.clan.OnClanWarStart;
  734. import com.l2jserver.gameserver.network.SystemMessageId;
  735. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  736. import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
  737. import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListAll;
  738. import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
  739. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  740. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  741. import com.l2jserver.gameserver.util.Util;
  742. import com.l2jserver.util.EnumIntBitmask;
  743.  
  744. @@ -208,10 +206,9 @@
  745. // should be update packet only
  746. player.sendPacket(new PledgeShowInfoUpdate(clan));
  747. player.sendPacket(new PledgeShowMemberListAll(clan, player));
  748. - player.sendPacket(new UserInfo(player));
  749. - player.sendPacket(new ExBrExtraUserInfo(player));
  750. player.sendPacket(new PledgeShowMemberListUpdate(player));
  751. player.sendPacket(SystemMessageId.CLAN_CREATED);
  752. + player.sendUserInfo(true);
  753.  
  754. // Notify to scripts
  755. EventDispatcher.getInstance().notifyEventAsync(new OnPlayerClanCreate(player, clan));
  756. Index: src/main/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java
  757. ===================================================================
  758. --- src/main/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java (revision 20882)
  759. +++ src/main/java/com/l2jserver/gameserver/model/actor/stat/PcStat.java (working copy)
  760. @@ -38,14 +38,12 @@
  761. import com.l2jserver.gameserver.model.stats.Stats;
  762. import com.l2jserver.gameserver.model.zone.ZoneId;
  763. import com.l2jserver.gameserver.network.SystemMessageId;
  764. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  765. import com.l2jserver.gameserver.network.serverpackets.ExVitalityPointInfo;
  766. import com.l2jserver.gameserver.network.serverpackets.ExVoteSystemInfo;
  767. import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
  768. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  769. import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
  770. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  771. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  772. import com.l2jserver.gameserver.util.Util;
  773.  
  774. public class PcStat extends PlayableStat
  775. @@ -109,8 +107,7 @@
  776. }
  777.  
  778. // EXP status update currently not used in retail
  779. - activeChar.sendPacket(new UserInfo(activeChar));
  780. - activeChar.sendPacket(new ExBrExtraUserInfo(activeChar));
  781. + activeChar.sendUserInfo(true);
  782. return true;
  783. }
  784.  
  785. @@ -313,12 +310,11 @@
  786. getActiveChar().sendPacket(su);
  787.  
  788. // Update the overloaded status of the L2PcInstance
  789. - getActiveChar().refreshOverloaded();
  790. + getActiveChar().refreshOverloaded(false);
  791. // Update the expertise status of the L2PcInstance
  792. getActiveChar().refreshExpertisePenalty();
  793. // Send a Server->Client packet UserInfo to the L2PcInstance
  794. - getActiveChar().sendPacket(new UserInfo(getActiveChar()));
  795. - getActiveChar().sendPacket(new ExBrExtraUserInfo(getActiveChar()));
  796. + getActiveChar().broadcastUserInfo();
  797. getActiveChar().sendPacket(new ExVoteSystemInfo(getActiveChar()));
  798.  
  799. return levelIncreased;
  800. Index: src/main/java/com/l2jserver/gameserver/model/entity/L2Event.java
  801. ===================================================================
  802. --- src/main/java/com/l2jserver/gameserver/model/entity/L2Event.java (revision 20882)
  803. +++ src/main/java/com/l2jserver/gameserver/model/entity/L2Event.java (working copy)
  804. @@ -43,11 +43,8 @@
  805. import com.l2jserver.gameserver.model.actor.L2Npc;
  806. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  807. import com.l2jserver.gameserver.model.holders.PlayerEventHolder;
  808. -import com.l2jserver.gameserver.network.serverpackets.CharInfo;
  809. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  810. import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
  811. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  812. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  813.  
  814. /**
  815. * @author Nik
  816. @@ -290,12 +287,7 @@
  817. player.getPoly().setPolyInfo(null, "1");
  818. player.decayMe();
  819. player.spawnMe(player.getX(), player.getY(), player.getZ());
  820. - CharInfo info1 = new CharInfo(player);
  821. - player.broadcastPacket(info1);
  822. - UserInfo info2 = new UserInfo(player);
  823. - player.sendPacket(info2);
  824. - player.broadcastPacket(new ExBrExtraUserInfo(player));
  825. -
  826. + player.broadcastUserInfo();
  827. player.stopTransformation(true);
  828. }
  829.  
  830. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestVoteNew.java
  831. ===================================================================
  832. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestVoteNew.java (revision 20882)
  833. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestVoteNew.java (working copy)
  834. @@ -21,10 +21,8 @@
  835. import com.l2jserver.gameserver.model.L2Object;
  836. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  837. import com.l2jserver.gameserver.network.SystemMessageId;
  838. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  839. import com.l2jserver.gameserver.network.serverpackets.ExVoteSystemInfo;
  840. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  841. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  842.  
  843. public final class RequestVoteNew extends L2GameClientPacket
  844. {
  845. @@ -98,9 +96,8 @@
  846. sm.addPcName(activeChar);
  847. target.sendPacket(sm);
  848.  
  849. - activeChar.sendPacket(new UserInfo(activeChar));
  850. - sendPacket(new ExBrExtraUserInfo(activeChar));
  851. - target.broadcastUserInfo();
  852. + activeChar.sendUserInfo(true);
  853. + target.sendUserInfo(true);
  854.  
  855. activeChar.sendPacket(new ExVoteSystemInfo(activeChar));
  856. target.sendPacket(new ExVoteSystemInfo(target));
  857. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestPreviewItem.java
  858. ===================================================================
  859. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestPreviewItem.java (revision 20882)
  860. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestPreviewItem.java (working copy)
  861. @@ -40,7 +40,6 @@
  862. import com.l2jserver.gameserver.network.SystemMessageId;
  863. import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
  864. import com.l2jserver.gameserver.network.serverpackets.ShopPreviewInfo;
  865. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  866. import com.l2jserver.gameserver.util.Util;
  867.  
  868. /**
  869. @@ -71,7 +70,7 @@
  870. try
  871. {
  872. activeChar.sendPacket(SystemMessageId.NO_LONGER_TRYING_ON);
  873. - activeChar.sendPacket(new UserInfo(activeChar));
  874. + activeChar.sendUserInfo(true);
  875. }
  876. catch (Exception e)
  877. {
  878. Index: src/main/java/com/l2jserver/gameserver/data/xml/impl/MultisellData.java
  879. ===================================================================
  880. --- src/main/java/com/l2jserver/gameserver/data/xml/impl/MultisellData.java (revision 20882)
  881. +++ src/main/java/com/l2jserver/gameserver/data/xml/impl/MultisellData.java (working copy)
  882. @@ -38,10 +38,8 @@
  883. import com.l2jserver.gameserver.model.multisell.ListContainer;
  884. import com.l2jserver.gameserver.model.multisell.PreparedListContainer;
  885. import com.l2jserver.gameserver.network.SystemMessageId;
  886. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  887. import com.l2jserver.gameserver.network.serverpackets.MultiSellList;
  888. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  889. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  890. import com.l2jserver.gameserver.util.Util;
  891. import com.l2jserver.util.data.xml.IXmlReader;
  892. import com.l2jserver.util.file.filter.NumericNameFilter;
  893. @@ -322,8 +320,7 @@
  894. return true;
  895. case FAME:
  896. player.setFame(player.getFame() - (int) amount);
  897. - player.sendPacket(new UserInfo(player));
  898. - player.sendPacket(new ExBrExtraUserInfo(player));
  899. + player.sendUserInfo(true);
  900. return true;
  901. }
  902. return false;
  903. @@ -338,8 +335,7 @@
  904. break;
  905. case FAME:
  906. player.setFame((int) (player.getFame() + amount));
  907. - player.sendPacket(new UserInfo(player));
  908. - player.sendPacket(new ExBrExtraUserInfo(player));
  909. + player.sendUserInfo(true);
  910. break;
  911. }
  912. }
  913. Index: src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/FameTask.java
  914. ===================================================================
  915. --- src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/FameTask.java (revision 20882)
  916. +++ src/main/java/com/l2jserver/gameserver/model/actor/tasks/player/FameTask.java (working copy)
  917. @@ -22,7 +22,6 @@
  918. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  919. import com.l2jserver.gameserver.network.SystemMessageId;
  920. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  921. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  922.  
  923. /**
  924. * Task dedicated to reward player with fame while standing on siege zone.
  925. @@ -54,6 +53,6 @@
  926. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_REPUTATION_SCORE);
  927. sm.addInt(_value);
  928. _player.sendPacket(sm);
  929. - _player.sendPacket(new UserInfo(_player));
  930. + _player.sendUserInfo(true);
  931. }
  932. }
  933. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java
  934. ===================================================================
  935. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java (revision 20882)
  936. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java (working copy)
  937. @@ -32,12 +32,10 @@
  938. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  939. import com.l2jserver.gameserver.model.skills.Skill;
  940. import com.l2jserver.gameserver.network.SystemMessageId;
  941. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  942. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfo;
  943. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfoDetail;
  944. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillResult;
  945. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  946. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  947. import com.l2jserver.util.Rnd;
  948.  
  949. /**
  950. @@ -195,13 +193,13 @@
  951. }
  952. }
  953.  
  954. - player.sendPacket(new UserInfo(player));
  955. - player.sendPacket(new ExBrExtraUserInfo(player));
  956. player.sendSkillList();
  957. final int afterEnchantSkillLevel = player.getSkillLevel(_skillId);
  958. player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel));
  959. player.sendPacket(new ExEnchantSkillInfoDetail(0, _skillId, afterEnchantSkillLevel + 1, player));
  960. player.updateShortCuts(_skillId, afterEnchantSkillLevel);
  961. +
  962. + player.sendUserInfo(true);
  963. }
  964. else
  965. {
  966. Index: src/main/java/com/l2jserver/gameserver/model/L2Clan.java
  967. ===================================================================
  968. --- src/main/java/com/l2jserver/gameserver/model/L2Clan.java (revision 20882)
  969. +++ src/main/java/com/l2jserver/gameserver/model/L2Clan.java (working copy)
  970. @@ -62,7 +62,6 @@
  971. import com.l2jserver.gameserver.model.zone.ZoneId;
  972. import com.l2jserver.gameserver.network.SystemMessageId;
  973. import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
  974. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  975. import com.l2jserver.gameserver.network.serverpackets.ExSubPledgeSkillAdd;
  976. import com.l2jserver.gameserver.network.serverpackets.ItemList;
  977. import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
  978. @@ -76,7 +75,6 @@
  979. import com.l2jserver.gameserver.network.serverpackets.PledgeSkillListAdd;
  980. import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
  981. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  982. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  983. import com.l2jserver.gameserver.util.Util;
  984. import com.l2jserver.util.EnumIntBitmask;
  985.  
  986. @@ -2051,8 +2049,7 @@
  987. if (cm.getPlayerInstance() != null)
  988. {
  989. cm.getPlayerInstance().getClanPrivileges().setBitmask(privs);
  990. - cm.getPlayerInstance().sendPacket(new UserInfo(cm.getPlayerInstance()));
  991. - cm.getPlayerInstance().sendPacket(new ExBrExtraUserInfo(cm.getPlayerInstance()));
  992. + cm.getPlayerInstance().sendUserInfo(true);
  993. }
  994. }
  995. }
  996. @@ -2461,8 +2458,7 @@
  997. setAllyPenaltyExpiryTime(0, 0);
  998. updateClanInDB();
  999.  
  1000. - player.sendPacket(new UserInfo(player));
  1001. - player.sendPacket(new ExBrExtraUserInfo(player));
  1002. + player.sendUserInfo(true);
  1003.  
  1004. // TODO: Need correct message id
  1005. player.sendMessage("Alliance " + allyName + " has been created.");
  1006. Index: src/main/java/com/l2jserver/gameserver/model/actor/L2Decoy.java
  1007. ===================================================================
  1008. --- src/main/java/com/l2jserver/gameserver/model/actor/L2Decoy.java (revision 20882)
  1009. +++ src/main/java/com/l2jserver/gameserver/model/actor/L2Decoy.java (working copy)
  1010. @@ -65,7 +65,7 @@
  1011. {
  1012. if (player != null)
  1013. {
  1014. - player.sendPacket(new CharInfo(this));
  1015. + sendInfo(player);
  1016. }
  1017. }
  1018. }
  1019. @@ -132,7 +132,6 @@
  1020.  
  1021. public synchronized void unSummon(L2PcInstance owner)
  1022. {
  1023. -
  1024. if (isVisible() && !isDead())
  1025. {
  1026. if (getWorldRegion() != null)
  1027. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/Appearing.java
  1028. ===================================================================
  1029. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/Appearing.java (revision 20882)
  1030. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/Appearing.java (working copy)
  1031. @@ -19,8 +19,6 @@
  1032. package com.l2jserver.gameserver.network.clientpackets;
  1033.  
  1034. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  1035. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  1036. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1037.  
  1038. /**
  1039. * Appearing Packet Handler
  1040. @@ -54,8 +52,7 @@
  1041. activeChar.onTeleported();
  1042. }
  1043.  
  1044. - sendPacket(new UserInfo(activeChar));
  1045. - sendPacket(new ExBrExtraUserInfo(activeChar));
  1046. + activeChar.sendUserInfo(true);
  1047. }
  1048.  
  1049. @Override
  1050. Index: src/main/java/com/l2jserver/gameserver/model/entity/Hero.java
  1051. ===================================================================
  1052. --- src/main/java/com/l2jserver/gameserver/model/entity/Hero.java (revision 20882)
  1053. +++ src/main/java/com/l2jserver/gameserver/model/entity/Hero.java (working copy)
  1054. @@ -51,12 +51,10 @@
  1055. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  1056. import com.l2jserver.gameserver.model.olympiad.Olympiad;
  1057. import com.l2jserver.gameserver.network.SystemMessageId;
  1058. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  1059. import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
  1060. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  1061. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  1062. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  1063. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1064. import com.l2jserver.util.StringUtil;
  1065.  
  1066. /**
  1067. @@ -944,8 +942,6 @@
  1068.  
  1069. player.setHero(true);
  1070. player.broadcastPacket(new SocialAction(player.getObjectId(), 20016)); // Hero Animation
  1071. - player.sendPacket(new UserInfo(player));
  1072. - player.sendPacket(new ExBrExtraUserInfo(player));
  1073. player.broadcastUserInfo();
  1074. // Set Gained hero and reload data
  1075. setHeroGained(player.getObjectId());
  1076. Index: src/main/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java
  1077. ===================================================================
  1078. --- src/main/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java (revision 20882)
  1079. +++ src/main/java/com/l2jserver/gameserver/model/actor/instance/L2VillageMasterInstance.java (working copy)
  1080. @@ -51,12 +51,10 @@
  1081. import com.l2jserver.gameserver.network.SystemMessageId;
  1082. import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
  1083. import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
  1084. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  1085. import com.l2jserver.gameserver.network.serverpackets.MagicSkillLaunched;
  1086. import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
  1087. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  1088. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  1089. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1090. import com.l2jserver.gameserver.util.Util;
  1091. import com.l2jserver.util.StringUtil;
  1092.  
  1093. @@ -1066,8 +1064,7 @@
  1094. if (leaderPlayer != null)
  1095. {
  1096. leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
  1097. - leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
  1098. - leaderPlayer.sendPacket(new ExBrExtraUserInfo(leaderPlayer));
  1099. + leaderPlayer.sendUserInfo(true);
  1100. }
  1101. }
  1102. }
  1103. @@ -1153,8 +1150,7 @@
  1104. if (leaderPlayer != null)
  1105. {
  1106. leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
  1107. - leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
  1108. - leaderPlayer.sendPacket(new ExBrExtraUserInfo(leaderPlayer));
  1109. + leaderPlayer.sendUserInfo(true);
  1110. }
  1111.  
  1112. clan.broadcastClanStatus();
  1113. Index: src/main/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java
  1114. ===================================================================
  1115. --- src/main/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java (revision 20882)
  1116. +++ src/main/java/com/l2jserver/gameserver/ai/L2ControllableMobAI.java (working copy)
  1117. @@ -23,8 +23,10 @@
  1118.  
  1119. import java.util.Collection;
  1120. import java.util.List;
  1121. +import java.util.concurrent.Future;
  1122. import java.util.stream.Collectors;
  1123.  
  1124. +import com.l2jserver.gameserver.ThreadPoolManager;
  1125. import com.l2jserver.gameserver.model.L2Object;
  1126. import com.l2jserver.gameserver.model.MobGroup;
  1127. import com.l2jserver.gameserver.model.MobGroupTable;
  1128. @@ -53,6 +55,8 @@
  1129. public static final int AI_CAST = 5;
  1130. public static final int AI_ATTACK_GROUP = 6;
  1131.  
  1132. + private Future<?> followTask;
  1133. +
  1134. private int _alternateAI;
  1135.  
  1136. private boolean _isThinking; // to prevent thinking recursively
  1137. @@ -69,17 +73,23 @@
  1138.  
  1139. protected void thinkFollow()
  1140. {
  1141. - L2Attackable me = (L2Attackable) _actor;
  1142. + if ((followTask != null) && !followTask.isDone())
  1143. + {
  1144. + return;
  1145. + }
  1146.  
  1147. - if (!Util.checkIfInRange(MobGroupTable.FOLLOW_RANGE, me, getForcedTarget(), true))
  1148. + followTask = ThreadPoolManager.getInstance().scheduleGeneral(() ->
  1149. {
  1150. - int signX = (Rnd.nextInt(2) == 0) ? -1 : 1;
  1151. - int signY = (Rnd.nextInt(2) == 0) ? -1 : 1;
  1152. - int randX = Rnd.nextInt(MobGroupTable.FOLLOW_RANGE);
  1153. - int randY = Rnd.nextInt(MobGroupTable.FOLLOW_RANGE);
  1154. -
  1155. - moveTo(getForcedTarget().getX() + (signX * randX), getForcedTarget().getY() + (signY * randY), getForcedTarget().getZ());
  1156. - }
  1157. + if (!Util.checkIfInRange(MobGroupTable.FOLLOW_RANGE, _actor, getForcedTarget(), true))
  1158. + {
  1159. + int signX = (Rnd.nextInt(2) == 0) ? -1 : 1;
  1160. + int signY = (Rnd.nextInt(2) == 0) ? -1 : 1;
  1161. + int randX = Rnd.nextInt(MobGroupTable.FOLLOW_RANGE);
  1162. + int randY = Rnd.nextInt(MobGroupTable.FOLLOW_RANGE);
  1163. +
  1164. + moveTo(getForcedTarget().getX() + (signX * randX), getForcedTarget().getY() + (signY * randY), getForcedTarget().getZ());
  1165. + }
  1166. + } , 200);
  1167. }
  1168.  
  1169. @Override
  1170. Index: src/main/java/com/l2jserver/gameserver/model/actor/instance/L2ClassMasterInstance.java
  1171. ===================================================================
  1172. --- src/main/java/com/l2jserver/gameserver/model/actor/instance/L2ClassMasterInstance.java (revision 20882)
  1173. +++ src/main/java/com/l2jserver/gameserver/model/actor/instance/L2ClassMasterInstance.java (working copy)
  1174. @@ -27,12 +27,10 @@
  1175. import com.l2jserver.gameserver.model.base.ClassId;
  1176. import com.l2jserver.gameserver.model.holders.ItemHolder;
  1177. import com.l2jserver.gameserver.network.SystemMessageId;
  1178. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  1179. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  1180. import com.l2jserver.gameserver.network.serverpackets.TutorialCloseHtml;
  1181. import com.l2jserver.gameserver.network.serverpackets.TutorialShowHtml;
  1182. import com.l2jserver.gameserver.network.serverpackets.TutorialShowQuestionMark;
  1183. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1184. import com.l2jserver.util.StringUtil;
  1185.  
  1186. /**
  1187. @@ -100,8 +98,7 @@
  1188. if (!player.isNoble())
  1189. {
  1190. player.setNoble(true);
  1191. - player.sendPacket(new UserInfo(player));
  1192. - player.sendPacket(new ExBrExtraUserInfo(player));
  1193. + player.sendUserInfo(true);
  1194. final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  1195. html.setFile(player.getHtmlPrefix(), "data/html/classmaster/nobleok.htm");
  1196. player.sendPacket(html);
  1197. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillRouteChange.java
  1198. ===================================================================
  1199. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillRouteChange.java (revision 20882)
  1200. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillRouteChange.java (working copy)
  1201. @@ -32,12 +32,10 @@
  1202. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  1203. import com.l2jserver.gameserver.model.skills.Skill;
  1204. import com.l2jserver.gameserver.network.SystemMessageId;
  1205. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  1206. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfo;
  1207. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfoDetail;
  1208. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillResult;
  1209. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  1210. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1211. import com.l2jserver.util.Rnd;
  1212.  
  1213. /**
  1214. @@ -190,9 +188,6 @@
  1215. _log.fine("Learned skill ID: " + _skillId + " Level: " + _skillLvl + " for " + requiredSp + " SP, " + requireditems + " Adena.");
  1216. }
  1217.  
  1218. - player.sendPacket(new UserInfo(player));
  1219. - player.sendPacket(new ExBrExtraUserInfo(player));
  1220. -
  1221. if (levelPenalty == 0)
  1222. {
  1223. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.SKILL_ENCHANT_CHANGE_SUCCESSFUL_S1_LEVEL_WILL_REMAIN);
  1224. @@ -211,6 +206,8 @@
  1225. player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel));
  1226. player.sendPacket(new ExEnchantSkillInfoDetail(3, _skillId, afterEnchantSkillLevel, player));
  1227. player.updateShortCuts(_skillId, afterEnchantSkillLevel);
  1228. +
  1229. + player.sendUserInfo(true);
  1230. }
  1231. else
  1232. {
  1233. Index: src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillSafe.java
  1234. ===================================================================
  1235. --- src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillSafe.java (revision 20882)
  1236. +++ src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkillSafe.java (working copy)
  1237. @@ -32,12 +32,10 @@
  1238. import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
  1239. import com.l2jserver.gameserver.model.skills.Skill;
  1240. import com.l2jserver.gameserver.network.SystemMessageId;
  1241. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  1242. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfo;
  1243. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillInfoDetail;
  1244. import com.l2jserver.gameserver.network.serverpackets.ExEnchantSkillResult;
  1245. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  1246. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1247. import com.l2jserver.util.Rnd;
  1248.  
  1249. /**
  1250. @@ -195,13 +193,13 @@
  1251. player.sendPacket(ExEnchantSkillResult.valueOf(false));
  1252. }
  1253.  
  1254. - player.sendPacket(new UserInfo(player));
  1255. - player.sendPacket(new ExBrExtraUserInfo(player));
  1256. player.sendSkillList();
  1257. final int afterEnchantSkillLevel = player.getSkillLevel(_skillId);
  1258. player.sendPacket(new ExEnchantSkillInfo(_skillId, afterEnchantSkillLevel));
  1259. player.sendPacket(new ExEnchantSkillInfoDetail(1, _skillId, afterEnchantSkillLevel + 1, player));
  1260. player.updateShortCuts(_skillId, afterEnchantSkillLevel);
  1261. +
  1262. + player.sendUserInfo(true);
  1263. }
  1264. else
  1265. {
  1266. Index: src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
  1267. ===================================================================
  1268. --- src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 20882)
  1269. +++ src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
  1270. @@ -168,6 +168,7 @@
  1271. import com.l2jserver.gameserver.model.actor.tasks.player.GameGuardCheckTask;
  1272. import com.l2jserver.gameserver.model.actor.tasks.player.InventoryEnableTask;
  1273. import com.l2jserver.gameserver.model.actor.tasks.player.LookingForFishTask;
  1274. +import com.l2jserver.gameserver.model.actor.tasks.player.PacketSenderTask;
  1275. import com.l2jserver.gameserver.model.actor.tasks.player.PetFeedTask;
  1276. import com.l2jserver.gameserver.model.actor.tasks.player.PvPFlagTask;
  1277. import com.l2jserver.gameserver.model.actor.tasks.player.RecoBonusTaskEnd;
  1278. @@ -264,8 +265,6 @@
  1279. import com.l2jserver.gameserver.network.serverpackets.ConfirmDlg;
  1280. import com.l2jserver.gameserver.network.serverpackets.EtcStatusUpdate;
  1281. import com.l2jserver.gameserver.network.serverpackets.ExAutoSoulShot;
  1282. -import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
  1283. -import com.l2jserver.gameserver.network.serverpackets.ExDominionWarStart;
  1284. import com.l2jserver.gameserver.network.serverpackets.ExDuelUpdateUserInfo;
  1285. import com.l2jserver.gameserver.network.serverpackets.ExFishingEnd;
  1286. import com.l2jserver.gameserver.network.serverpackets.ExFishingStart;
  1287. @@ -321,7 +320,6 @@
  1288. import com.l2jserver.gameserver.network.serverpackets.TradeDone;
  1289. import com.l2jserver.gameserver.network.serverpackets.TradeOtherDone;
  1290. import com.l2jserver.gameserver.network.serverpackets.TradeStart;
  1291. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1292. import com.l2jserver.gameserver.network.serverpackets.ValidateLocation;
  1293. import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
  1294. import com.l2jserver.gameserver.util.Broadcast;
  1295. @@ -1670,8 +1668,7 @@
  1296. }
  1297. setPvpFlag(value);
  1298.  
  1299. - sendPacket(new UserInfo(this));
  1300. - sendPacket(new ExBrExtraUserInfo(this));
  1301. + sendUserInfo(true);
  1302.  
  1303. // If this player has a pet update the pets pvp flag as well
  1304. if (hasSummon())
  1305. @@ -2011,6 +2008,15 @@
  1306. */
  1307. public void refreshOverloaded()
  1308. {
  1309. + refreshOverloaded(true);
  1310. + }
  1311. +
  1312. + /**
  1313. + * Update the overloaded status of the L2PcInstance.
  1314. + * @param broadcast
  1315. + */
  1316. + public void refreshOverloaded(boolean broadcast)
  1317. + {
  1318. int maxLoad = getMaxLoad();
  1319. if (maxLoad > 0)
  1320. {
  1321. @@ -2050,16 +2056,21 @@
  1322. removeSkill(getKnownSkill(4270), false, true);
  1323. setIsOverloaded(false);
  1324. }
  1325. - sendPacket(new UserInfo(this));
  1326. - sendPacket(new EtcStatusUpdate(this));
  1327. - broadcastPacket(new CharInfo(this));
  1328. - broadcastPacket(new ExBrExtraUserInfo(this));
  1329. + if (broadcast)
  1330. + {
  1331. + sendUserInfo(true);
  1332. + }
  1333. }
  1334. }
  1335. }
  1336.  
  1337. public void refreshExpertisePenalty()
  1338. {
  1339. + refreshExpertisePenalty(true);
  1340. + }
  1341. +
  1342. + public void refreshExpertisePenalty(boolean broadcast)
  1343. + {
  1344. if (!Config.EXPERTISE_PENALTY)
  1345. {
  1346. return;
  1347. @@ -2129,7 +2140,7 @@
  1348. changed = true;
  1349. }
  1350.  
  1351. - if (changed)
  1352. + if (changed && broadcast)
  1353. {
  1354. sendPacket(new EtcStatusUpdate(this));
  1355. }
  1356. @@ -4172,32 +4183,20 @@
  1357. }
  1358. }
  1359.  
  1360. - /**
  1361. - * Send a Server->Client packet UserInfo to this L2PcInstance and CharInfo to all L2PcInstance in its _KnownPlayers. <B><U> Concept</U> :</B> Others L2PcInstance in the detection area of the L2PcInstance are identified in <B>_knownPlayers</B>. In order to inform other players of this
  1362. - * L2PcInstance state modifications, server just need to go through _knownPlayers to send Server->Client Packet <B><U> Actions</U> :</B>
  1363. - * <li>Send a Server->Client packet UserInfo to this L2PcInstance (Public and Private Data)</li>
  1364. - * <li>Send a Server->Client packet CharInfo to all L2PcInstance in _KnownPlayers of the L2PcInstance (Public data only)</li> <FONT COLOR=#FF0000><B> <U>Caution</U> : DON'T SEND UserInfo packet to other players instead of CharInfo packet. Indeed, UserInfo packet contains PRIVATE DATA as MaxHP,
  1365. - * STR, DEX...</B></FONT>
  1366. - */
  1367. public final void broadcastUserInfo()
  1368. {
  1369. - // Send a Server->Client packet UserInfo to this L2PcInstance
  1370. - sendPacket(new UserInfo(this));
  1371. -
  1372. - // Send a Server->Client packet CharInfo to all L2PcInstance in _KnownPlayers of the L2PcInstance
  1373. - broadcastPacket(new CharInfo(this));
  1374. - broadcastPacket(new ExBrExtraUserInfo(this));
  1375. - if (TerritoryWarManager.getInstance().isTWInProgress() && (TerritoryWarManager.getInstance().checkIsRegistered(-1, getObjectId()) || TerritoryWarManager.getInstance().checkIsRegistered(-1, getClan())))
  1376. - {
  1377. - broadcastPacket(new ExDominionWarStart(this));
  1378. - }
  1379. + broadcastUserInfo(true);
  1380. }
  1381.  
  1382. + public final void broadcastUserInfo(boolean force)
  1383. + {
  1384. + PacketSenderTask.broadcastUserInfo(this, force);
  1385. + }
  1386. +
  1387. public final void broadcastTitleInfo()
  1388. {
  1389. // Send a Server->Client packet UserInfo to this L2PcInstance
  1390. - sendPacket(new UserInfo(this));
  1391. - sendPacket(new ExBrExtraUserInfo(this));
  1392. + sendUserInfo(true);
  1393.  
  1394. // Send a Server->Client packet TitleUpdate to all L2PcInstance in _KnownPlayers of the L2PcInstance
  1395.  
  1396. @@ -5447,8 +5446,7 @@
  1397. setPvpKills(getPvpKills() + 1);
  1398.  
  1399. // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
  1400. - sendPacket(new UserInfo(this));
  1401. - sendPacket(new ExBrExtraUserInfo(this));
  1402. + sendUserInfo(true);
  1403. }
  1404. }
  1405.  
  1406. @@ -5474,8 +5472,7 @@
  1407. }
  1408.  
  1409. // Update player's UI.
  1410. - sendPacket(new UserInfo(this));
  1411. - sendPacket(new ExBrExtraUserInfo(this));
  1412. + sendUserInfo(true);
  1413. }
  1414.  
  1415. public void updatePvPStatus()
  1416. @@ -6578,34 +6575,115 @@
  1417. return _accessLevel;
  1418. }
  1419.  
  1420. + // packet system configuration
  1421. + private final int updateDelay = 333; // Delay after 50 packets sent in milliseconds
  1422. + public boolean entering = true;
  1423. +
  1424. + private Future<?> _updateAndBroadcastStatus;
  1425. + protected Future<?> _userInfoTask;
  1426. + protected Future<?> _charInfoTask;
  1427. +
  1428. /**
  1429. * Update Stats of the L2PcInstance client side by sending Server->Client packet UserInfo/StatusUpdate to this L2PcInstance and CharInfo/StatusUpdate to all L2PcInstance in its _KnownPlayers (broadcast).
  1430. - * @param broadcastType
  1431. */
  1432. - public void updateAndBroadcastStatus(int broadcastType)
  1433. + public void updateAndBroadcastStatus()
  1434. {
  1435. - refreshOverloaded();
  1436. - refreshExpertisePenalty();
  1437. - // Send a Server->Client packet UserInfo to this L2PcInstance and CharInfo to all L2PcInstance in its _KnownPlayers (broadcast)
  1438. - if (broadcastType == 1)
  1439. + if ((_updateAndBroadcastStatus != null) && !_updateAndBroadcastStatus.isDone())
  1440. {
  1441. - sendPacket(new UserInfo(this));
  1442. - sendPacket(new ExBrExtraUserInfo(this));
  1443. + return;
  1444. }
  1445. - if (broadcastType == 2)
  1446. +
  1447. + _updateAndBroadcastStatus = ThreadPoolManager.getInstance().scheduleGeneral(() -> PacketSenderTask.updateAndBroadcastStatus(this), updateDelay);
  1448. + }
  1449. +
  1450. + protected class UserInfoTask implements Runnable
  1451. + {
  1452. + L2PcInstance _player;
  1453. +
  1454. + protected UserInfoTask(L2PcInstance player)
  1455. {
  1456. - broadcastUserInfo();
  1457. + _player = player;
  1458. }
  1459. +
  1460. + @Override
  1461. + public void run()
  1462. + {
  1463. + PacketSenderTask.sendUserInfoImpl(_player);
  1464. + _userInfoTask = null;
  1465. + }
  1466. }
  1467.  
  1468. + public void sendUserInfo(boolean force)
  1469. + {
  1470. + if ((updateDelay == 0) || force)
  1471. + {
  1472. + if (_userInfoTask != null)
  1473. + {
  1474. + _userInfoTask.cancel(false);
  1475. + _userInfoTask = null;
  1476. + }
  1477. + PacketSenderTask.sendUserInfoImpl(this);
  1478. + return;
  1479. + }
  1480. +
  1481. + if (_userInfoTask != null)
  1482. + {
  1483. + return;
  1484. + }
  1485. +
  1486. + _userInfoTask = ThreadPoolManager.getInstance().scheduleGeneral(new UserInfoTask(this), updateDelay);
  1487. + }
  1488. +
  1489. + protected class CharInfoTask implements Runnable
  1490. + {
  1491. + L2PcInstance _player;
  1492. +
  1493. + protected CharInfoTask(L2PcInstance player)
  1494. + {
  1495. + _player = player;
  1496. + }
  1497. +
  1498. + @Override
  1499. + public void run()
  1500. + {
  1501. + PacketSenderTask.sendCharInfoImpl(_player);
  1502. + _charInfoTask = null;
  1503. + }
  1504. + }
  1505. +
  1506. + public void sendCharInfo()
  1507. + {
  1508. + sendCharInfo(false);
  1509. + }
  1510. +
  1511. + public void sendCharInfo(boolean force)
  1512. + {
  1513. + if ((updateDelay == 0) || force)
  1514. + {
  1515. + if (_charInfoTask != null)
  1516. + {
  1517. + _charInfoTask.cancel(false);
  1518. + _charInfoTask = null;
  1519. + }
  1520. + PacketSenderTask.sendCharInfoImpl(this);
  1521. + return;
  1522. + }
  1523. +
  1524. + if (_charInfoTask != null)
  1525. + {
  1526. + return;
  1527. + }
  1528. +
  1529. + _charInfoTask = ThreadPoolManager.getInstance().scheduleGeneral(new CharInfoTask(this), updateDelay);
  1530. + }
  1531. +
  1532. /**
  1533. * Send a Server->Client StatusUpdate packet with Karma and PvP Flag to the L2PcInstance and all L2PcInstance to inform (broadcast).
  1534. * @param flag
  1535. */
  1536. public void setKarmaFlag(int flag)
  1537. {
  1538. - sendPacket(new UserInfo(this));
  1539. - sendPacket(new ExBrExtraUserInfo(this));
  1540. + sendUserInfo(true);
  1541. Collection<L2PcInstance> plrs = getKnownList().getKnownPlayers().values();
  1542. for (L2PcInstance player : plrs)
  1543. {
  1544. @@ -8029,8 +8107,7 @@
  1545. sendPacket(new HennaInfo(this));
  1546.  
  1547. // Send Server->Client UserInfo packet to this L2PcInstance
  1548. - sendPacket(new UserInfo(this));
  1549. - sendPacket(new ExBrExtraUserInfo(this));
  1550. + sendUserInfo(true);
  1551. // Add the recovered dyes to the player's inventory and notify them.
  1552. getInventory().addItem("Henna", henna.getDyeItemId(), henna.getCancelCount(), this, null);
  1553. reduceAdena("Henna", henna.getCancelFee(), this, false);
  1554. @@ -8080,8 +8157,7 @@
  1555. sendPacket(new HennaInfo(this));
  1556.  
  1557. // Send Server->Client UserInfo packet to this L2PcInstance
  1558. - sendPacket(new UserInfo(this));
  1559. - sendPacket(new ExBrExtraUserInfo(this));
  1560. + sendUserInfo(true);
  1561.  
  1562. // Notify to scripts
  1563. EventDispatcher.getInstance().notifyEventAsync(new OnPlayerHennaRemove(this, henna), this);
  1564. @@ -9043,20 +9119,20 @@
  1565. public final void stopAllEffects()
  1566. {
  1567. super.stopAllEffects();
  1568. - updateAndBroadcastStatus(2);
  1569. + updateAndBroadcastStatus();
  1570. }
  1571.  
  1572. @Override
  1573. public final void stopAllEffectsExceptThoseThatLastThroughDeath()
  1574. {
  1575. super.stopAllEffectsExceptThoseThatLastThroughDeath();
  1576. - updateAndBroadcastStatus(2);
  1577. + updateAndBroadcastStatus();
  1578. }
  1579.  
  1580. public final void stopAllEffectsNotStayOnSubclassChange()
  1581. {
  1582. getEffectList().stopAllEffectsNotStayOnSubclassChange();
  1583. - updateAndBroadcastStatus(2);
  1584. + updateAndBroadcastStatus();
  1585. }
  1586.  
  1587. public final void stopCubics()
  1588. @@ -9110,7 +9186,12 @@
  1589. @Override
  1590. public void updateAbnormalEffect()
  1591. {
  1592. - broadcastUserInfo();
  1593. + if ((_updateAndBroadcastStatus != null) && !_updateAndBroadcastStatus.isDone())
  1594. + {
  1595. + return;
  1596. + }
  1597. +
  1598. + _updateAndBroadcastStatus = ThreadPoolManager.getInstance().scheduleGeneral(() -> broadcastUserInfo(true), updateDelay);
  1599. }
  1600.  
  1601. /**
  1602. @@ -10237,7 +10318,7 @@
  1603. setCurrentCp(getMaxCp());
  1604. }
  1605.  
  1606. - refreshOverloaded();
  1607. + refreshOverloaded(false);
  1608. refreshExpertisePenalty();
  1609. broadcastUserInfo();
  1610.  
  1611. @@ -13094,7 +13172,7 @@
  1612. if (isTransformed())
  1613. {
  1614. // Required double send for fix Mounted H5+
  1615. - sendPacket(new CharInfo(activeChar));
  1616. + broadcastUserInfo();
  1617. }
  1618. }
  1619.  
  1620. Index: src/main/java/com/l2jserver/gameserver/model/CursedWeapon.java
  1621. ===================================================================
  1622. --- src/main/java/com/l2jserver/gameserver/model/CursedWeapon.java (revision 20882)
  1623. +++ src/main/java/com/l2jserver/gameserver/model/CursedWeapon.java (working copy)
  1624. @@ -47,7 +47,6 @@
  1625. import com.l2jserver.gameserver.network.serverpackets.ItemList;
  1626. import com.l2jserver.gameserver.network.serverpackets.SocialAction;
  1627. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  1628. -import com.l2jserver.gameserver.network.serverpackets.UserInfo;
  1629. import com.l2jserver.gameserver.util.Broadcast;
  1630. import com.l2jserver.util.Rnd;
  1631.  
  1632. @@ -541,7 +540,7 @@
  1633. if ((_player != null) && _player.isOnline())
  1634. {
  1635. _player.setPkKills(_nbKills);
  1636. - _player.sendPacket(new UserInfo(_player));
  1637. + _player.sendUserInfo(true);
  1638.  
  1639. if (((_nbKills % _stageKills) == 0) && (_nbKills <= (_stageKills * (_skillMaxLevel - 1))))
  1640. {
Advertisement
Add Comment
Please, Sign In to add comment