UserInfo.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. /*
  2. * Copyright (C) 2004-2015 L2J Server
  3. *
  4. * This file is part of L2J Server.
  5. *
  6. * L2J Server is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J Server is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package com.l2jserver.gameserver.network.serverpackets;
  20. import com.l2jserver.Config;
  21. import com.l2jserver.gameserver.data.xml.impl.ExperienceData;
  22. import com.l2jserver.gameserver.data.xml.impl.NpcData;
  23. import com.l2jserver.gameserver.instancemanager.CursedWeaponsManager;
  24. import com.l2jserver.gameserver.instancemanager.TerritoryWarManager;
  25. import com.l2jserver.gameserver.model.Elementals;
  26. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  27. import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
  28. import com.l2jserver.gameserver.model.skills.AbnormalVisualEffect;
  29. import com.l2jserver.gameserver.model.zone.ZoneId;
  30. public final class UserInfo extends L2GameServerPacket
  31. {
  32. private final L2PcInstance _activeChar;
  33. private int _relation;
  34. private int _airShipHelm;
  35. private final int _runSpd, _walkSpd;
  36. private final int _swimRunSpd, _swimWalkSpd;
  37. private final int _flyRunSpd, _flyWalkSpd;
  38. private final double _moveMultiplier;
  39. public UserInfo(L2PcInstance cha)
  40. {
  41. _activeChar = cha;
  42. int _territoryId = TerritoryWarManager.getInstance().getRegisteredTerritoryId(cha);
  43. _relation = _activeChar.isClanLeader() ? 0x40 : 0;
  44. if (_activeChar.getSiegeState() == 1)
  45. {
  46. if (_territoryId == 0)
  47. {
  48. _relation |= 0x180;
  49. }
  50. else
  51. {
  52. _relation |= 0x1000;
  53. }
  54. }
  55. if (_activeChar.getSiegeState() == 2)
  56. {
  57. _relation |= 0x80;
  58. }
  59. // _isDisguised = TerritoryWarManager.getInstance().isDisguised(character.getObjectId());
  60. if (_activeChar.isInAirShip() && _activeChar.getAirShip().isCaptain(_activeChar))
  61. {
  62. _airShipHelm = _activeChar.getAirShip().getHelmItemId();
  63. }
  64. else
  65. {
  66. _airShipHelm = 0;
  67. }
  68. _moveMultiplier = cha.getMovementSpeedMultiplier();
  69. _runSpd = (int) Math.round(cha.getRunSpeed() / _moveMultiplier);
  70. _walkSpd = (int) Math.round(cha.getWalkSpeed() / _moveMultiplier);
  71. _swimRunSpd = (int) Math.round(cha.getSwimRunSpeed() / _moveMultiplier);
  72. _swimWalkSpd = (int) Math.round(cha.getSwimWalkSpeed() / _moveMultiplier);
  73. _flyRunSpd = cha.isFlying() ? _runSpd : 0;
  74. _flyWalkSpd = cha.isFlying() ? _walkSpd : 0;
  75. }
  76. @Override
  77. protected final void writeImpl()
  78. {
  79. writeC(0x32);
  80. writeD(_activeChar.getX());
  81. writeD(_activeChar.getY());
  82. writeD(_activeChar.getZ());
  83. writeD(_activeChar.getVehicle() != null ? _activeChar.getVehicle().getObjectId() : 0);
  84. writeD(_activeChar.getObjectId());
  85. writeS(_activeChar.getAppearance().getVisibleName());
  86. writeD(_activeChar.getRace().ordinal());
  87. writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
  88. writeD(_activeChar.getBaseClass());
  89. writeD(_activeChar.getLevel());
  90. writeQ(_activeChar.getExp());
  91. writeF((float) (_activeChar.getExp() - ExperienceData.getInstance().getExpForLevel(_activeChar.getLevel())) / (ExperienceData.getInstance().getExpForLevel(_activeChar.getLevel() + 1) - ExperienceData.getInstance().getExpForLevel(_activeChar.getLevel()))); // High Five exp %
  92. writeD(_activeChar.getSTR());
  93. writeD(_activeChar.getDEX());
  94. writeD(_activeChar.getCON());
  95. writeD(_activeChar.getINT());
  96. writeD(_activeChar.getWIT());
  97. writeD(_activeChar.getMEN());
  98. writeD(_activeChar.getMaxHp());
  99. writeD((int) Math.round(_activeChar.getCurrentHp()));
  100. writeD(_activeChar.getMaxMp());
  101. writeD((int) Math.round(_activeChar.getCurrentMp()));
  102. writeD(_activeChar.getSp());
  103. writeD(_activeChar.getCurrentLoad());
  104. writeD(_activeChar.getMaxLoad());
  105. writeD(_activeChar.getActiveWeaponItem() != null ? 40 : 20); // 20 no weapon, 40 weapon equipped
  106. for (int slot : getPaperdollOrder())
  107. {
  108. writeD(_activeChar.getInventory().getPaperdollObjectId(slot));
  109. }
  110. for (int slot : getPaperdollOrder())
  111. {
  112. writeD(_activeChar.getInventory().getPaperdollItemDisplayId(slot));
  113. }
  114. for (int slot : getPaperdollOrder())
  115. {
  116. writeD(_activeChar.getInventory().getPaperdollAugmentationId(slot));
  117. }
  118. writeD(_activeChar.getInventory().getTalismanSlots());
  119. writeD(_activeChar.getInventory().canEquipCloak() ? 1 : 0);
  120. writeD(_activeChar.getPAtk(null));
  121. writeD(_activeChar.getPAtkSpd());
  122. writeD(_activeChar.getPDef(null));
  123. writeD(_activeChar.getEvasionRate(null));
  124. writeD(_activeChar.getAccuracy());
  125. writeD(_activeChar.getCriticalHit(null, null));
  126. writeD(_activeChar.getMAtk(null, null));
  127. writeD(_activeChar.getMAtkSpd());
  128. writeD(_activeChar.getPAtkSpd());
  129. writeD(_activeChar.getMDef(null, null));
  130. writeD(_activeChar.getPvpFlag());
  131. writeD(_activeChar.getKarma());
  132. writeD(_runSpd);
  133. writeD(_walkSpd);
  134. writeD(_swimRunSpd);
  135. writeD(_swimWalkSpd);
  136. writeD(_flyRunSpd);
  137. writeD(_flyWalkSpd);
  138. writeD(_flyRunSpd);
  139. writeD(_flyWalkSpd);
  140. writeF(_moveMultiplier);
  141. writeF(_activeChar.getAttackSpeedMultiplier());
  142. writeF(_activeChar.getCollisionRadius());
  143. writeF(_activeChar.getCollisionHeight());
  144. writeD(_activeChar.getAppearance().getHairStyle());
  145. writeD(_activeChar.getAppearance().getHairColor());
  146. writeD(_activeChar.getAppearance().getFace());
  147. writeD(_activeChar.isGM() ? 1 : 0); // builder level
  148. String title = _activeChar.getTitle();
  149. if (_activeChar.isInvisible())
  150. {
  151. title = "Invisible";
  152. }
  153. if (_activeChar.getPoly().isMorphed())
  154. {
  155. final L2NpcTemplate polyObj = NpcData.getInstance().getTemplate(_activeChar.getPoly().getPolyId());
  156. if (polyObj != null)
  157. {
  158. title += " - " + polyObj.getName();
  159. }
  160. }
  161. writeS(title);
  162. writeD(_activeChar.getClanId());
  163. writeD(_activeChar.getClanCrestId());
  164. writeD(_activeChar.getAllyId());
  165. writeD(_activeChar.getAllyCrestId()); // ally crest id
  166. // 0x40 leader rights
  167. // siege flags: attacker - 0x180 sword over name, defender - 0x80 shield, 0xC0 crown (|leader), 0x1C0 flag (|leader)
  168. writeD(_relation);
  169. writeC(_activeChar.getMountType().ordinal()); // mount type
  170. writeC(_activeChar.getPrivateStoreType().getId());
  171. writeC(_activeChar.hasDwarvenCraft() ? 1 : 0);
  172. writeD(_activeChar.getPkKills());
  173. writeD(_activeChar.getPvpKills());
  174. writeH(_activeChar.getCubics().size());
  175. for (int cubicId : _activeChar.getCubics().keySet())
  176. {
  177. writeH(cubicId);
  178. }
  179. writeC(_activeChar.isInPartyMatchRoom() ? 1 : 0);
  180. writeD(_activeChar.isInvisible() ? _activeChar.getAbnormalVisualEffects() | AbnormalVisualEffect.STEALTH.getMask() : _activeChar.getAbnormalVisualEffects());
  181. writeC(_activeChar.isInsideZone(ZoneId.WATER) ? 1 : _activeChar.isFlyingMounted() ? 2 : 0);
  182. writeD(_activeChar.getClanPrivileges().getBitmask());
  183. writeH(_activeChar.getRecomLeft()); // c2 recommendations remaining
  184. writeH(_activeChar.getRecomHave()); // c2 recommendations received
  185. writeD(_activeChar.getMountNpcId() > 0 ? _activeChar.getMountNpcId() + 1000000 : 0);
  186. writeH(_activeChar.getInventoryLimit());
  187. writeD(_activeChar.getClassId().getId());
  188. writeD(0x00); // special effects? circles around player...
  189. writeD(_activeChar.getMaxCp());
  190. writeD((int) _activeChar.getCurrentCp());
  191. writeC(_activeChar.isMounted() || (_airShipHelm != 0) ? 0 : _activeChar.getEnchantEffect());
  192. writeC(_activeChar.getTeam().getId());
  193. writeD(_activeChar.getClanCrestLargeId());
  194. writeC(_activeChar.isNoble() ? 1 : 0); // 0x01: symbol on char menu ctrl+I
  195. writeC(_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) ? 1 : 0); // 0x01: Hero Aura
  196. writeC(_activeChar.isFishing() ? 1 : 0); // Fishing Mode
  197. writeD(_activeChar.getFishx()); // fishing x
  198. writeD(_activeChar.getFishy()); // fishing y
  199. writeD(_activeChar.getFishz()); // fishing z
  200. writeD(_activeChar.getAppearance().getNameColor());
  201. // new c5
  202. writeC(_activeChar.isRunning() ? 0x01 : 0x00); // changes the Speed display on Status Window
  203. writeD(_activeChar.getPledgeClass()); // changes the text above CP on Status Window
  204. writeD(_activeChar.getPledgeType());
  205. writeD(_activeChar.getAppearance().getTitleColor());
  206. writeD(_activeChar.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_activeChar.getCursedWeaponEquippedId()) : 0);
  207. // T1 Starts
  208. writeD(_activeChar.getTransformationDisplayId());
  209. byte attackAttribute = _activeChar.getAttackElement();
  210. writeH(attackAttribute);
  211. writeH(_activeChar.getAttackElementValue(attackAttribute));
  212. writeH(_activeChar.getDefenseElementValue(Elementals.FIRE));
  213. writeH(_activeChar.getDefenseElementValue(Elementals.WATER));
  214. writeH(_activeChar.getDefenseElementValue(Elementals.WIND));
  215. writeH(_activeChar.getDefenseElementValue(Elementals.EARTH));
  216. writeH(_activeChar.getDefenseElementValue(Elementals.HOLY));
  217. writeH(_activeChar.getDefenseElementValue(Elementals.DARK));
  218. writeD(_activeChar.getAgathionId());
  219. // T2 Starts
  220. writeD(_activeChar.getFame()); // Fame
  221. writeD(_activeChar.isMinimapAllowed() ? 1 : 0); // Minimap on Hellbound
  222. writeD(_activeChar.getVitalityPoints()); // Vitality Points
  223. writeD(_activeChar.getAbnormalVisualEffectSpecial());
  224. // writeD(_territoryId); // CT2.3
  225. // writeD((_isDisguised ? 0x01: 0x00)); // CT2.3
  226. // writeD(_territoryId); // CT2.3
  227. }
  228. }