Advertisement
Guest User

Untitled

a guest
Jul 26th, 2019
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.25 KB | None | 0 0
  1. /**
  2. * This file is part of aion-unique <aion-unique.com>.
  3. *
  4. * aion-emu is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * aion-emu is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with aion-emu. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. package com.aionemu.gameserver.network.aion.serverpackets;
  18.  
  19. import java.util.List;
  20.  
  21. import com.aionemu.gameserver.configs.administration.AdminConfig;
  22. import com.aionemu.gameserver.model.actions.PlayerMode;
  23. import com.aionemu.gameserver.model.gameobjects.Item;
  24. import com.aionemu.gameserver.model.gameobjects.player.Player;
  25. import com.aionemu.gameserver.model.gameobjects.player.PlayerAppearance;
  26. import com.aionemu.gameserver.model.gameobjects.player.PlayerCommonData;
  27. import com.aionemu.gameserver.model.items.GodStone;
  28. import com.aionemu.gameserver.model.stats.calc.Stat2;
  29. import com.aionemu.gameserver.model.team.legion.LegionEmblemType;
  30. import com.aionemu.gameserver.network.aion.AionConnection;
  31. import com.aionemu.gameserver.network.aion.AionServerPacket;
  32.  
  33. /**
  34. * This packet is displaying visible players.
  35. *
  36. * @author -Nemesiss-, Avol, srx47 modified cura
  37. */
  38. public class SM_PLAYER_INFO extends AionServerPacket {
  39.  
  40. /**
  41. * Visible player
  42. */
  43. private final Player player;
  44. private boolean enemy;
  45.  
  46. /**
  47. * Constructs new <tt>SM_PLAYER_INFO </tt> packet
  48. *
  49. * @param player
  50. * actual player.
  51. * @param enemy
  52. */
  53. public SM_PLAYER_INFO(Player player, boolean enemy) {
  54. this.player = player;
  55. this.enemy = enemy;
  56. }
  57.  
  58. /**
  59. * {@inheritDoc}
  60. */
  61. @Override
  62. protected void writeImpl(AionConnection con) {
  63. Player activePlayer = con.getActivePlayer();
  64. if (activePlayer == null || player == null) {
  65. return;
  66. }
  67. PlayerCommonData pcd = player.getCommonData();
  68. final int raceId;
  69. if (player.getAdminNeutral() > 1 || activePlayer.getAdminNeutral() > 1) {
  70. raceId = activePlayer.getRace().getRaceId();
  71. }
  72. else if (activePlayer.isEnemy(player)) {
  73. raceId = (activePlayer.getRace().getRaceId() == 0 ? 1 : 0);
  74. }
  75. else
  76. raceId = player.getRace().getRaceId();
  77.  
  78. final int genderId = pcd.getGender().getGenderId();
  79. final PlayerAppearance playerAppearance = player.getPlayerAppearance();
  80.  
  81. writeF(player.getX());// x
  82. writeF(player.getY());// y
  83. writeF(player.getZ());// z
  84. writeD(player.getObjectId());
  85. /**
  86. * A3 female asmodian A2 male asmodian A1 female elyos A0 male elyos
  87. */
  88. writeD(pcd.getTemplateId());
  89. /**
  90. * Transformed state - send transformed model id Regular state - send player model id (from common data)
  91. */
  92. int model = player.getTransformModel().getModelId();
  93. writeD(model != 0 ? model : pcd.getTemplateId());
  94. writeC(0x00); // new 2.0 Packet --- probably pet info?
  95. writeD(player.getTransformModel().getType().getId());
  96. writeC(enemy ? 0x00 : 0x26);
  97.  
  98. writeC(raceId); // race
  99. writeC(pcd.getPlayerClass().getClassId());
  100. writeC(genderId); // sex
  101. writeH(player.getState());
  102.  
  103. writeB(new byte[8]);
  104.  
  105. writeC(player.getHeading());
  106.  
  107. String accessTagFormat = "%s";
  108. String weddingTagFormat = "";
  109. String advancedTagFormat = "";
  110.  
  111. // orphaned players - later find/remove them
  112. if (player.getClientConnection() != null)
  113. {
  114. if (AdminConfig.CUSTOMTAG_ENABLE)
  115. {
  116. switch (player.getClientConnection().getAccount().getAccessLevel())
  117. {
  118. case 1:
  119. accessTagFormat = AdminConfig.CUSTOMTAG_ACCESS1;
  120. break;
  121. case 2:
  122. accessTagFormat = AdminConfig.CUSTOMTAG_ACCESS2;
  123. break;
  124. case 3:
  125. accessTagFormat = AdminConfig.CUSTOMTAG_ACCESS3;
  126. break;
  127. case 4:
  128. accessTagFormat = AdminConfig.CUSTOMTAG_ACCESS4;
  129. break;
  130. case 5:
  131. accessTagFormat = AdminConfig.CUSTOMTAG_ACCESS5;
  132. break;
  133. }
  134. }
  135.  
  136. if (player.isMarried())
  137. {
  138. weddingTagFormat = "\uE020 ";
  139. }
  140.  
  141. if (player.getClientConnection().getAccount().getMembership() > 0)
  142. {
  143. if (player.getClientConnection().getAccount().getMembership() == 1)
  144. {
  145. advancedTagFormat = " \uE02D";
  146. }
  147. else if (player.getClientConnection().getAccount().getMembership() == 2)
  148. {
  149. advancedTagFormat = " \uE02E";
  150. }
  151. }
  152. }
  153.  
  154. writeS(String.format(accessTagFormat, weddingTagFormat + player.getName() + advancedTagFormat));
  155.  
  156. writeH(pcd.getTitleId());
  157. writeH(player.getCommonData().isHaveMentorFlag()? 1:0);
  158.  
  159. writeH(player.getCastingSkillId());
  160.  
  161. if (player.isLegionMember()) {
  162. writeD(player.getLegion().getLegionId());
  163. writeC(player.getLegion().getLegionEmblem().getEmblemId());
  164. writeC(player.getLegion().getLegionEmblem().getEmblemType().getValue());
  165. writeC(player.getLegion().getLegionEmblem().getEmblemType() == LegionEmblemType.DEFAULT ? 0x00 : 0xFF);
  166. writeC(player.getLegion().getLegionEmblem().getColor_r());
  167. writeC(player.getLegion().getLegionEmblem().getColor_g());
  168. writeC(player.getLegion().getLegionEmblem().getColor_b());
  169. writeS(player.getLegion().getLegionName());
  170. }
  171. else {
  172. writeB(new byte[12]);
  173. }
  174. int maxHp = player.getLifeStats().getMaxHp();
  175. int currHp = player.getLifeStats().getCurrentHp();
  176. writeC(100 * currHp / maxHp);// %hp
  177. writeH(pcd.getDp());// current dp
  178. writeC(0x00);// unk (0x00)
  179.  
  180. List<Item> items = player.getEquipment().getEquippedForApparence();
  181. short mask = 0;
  182. for (Item item : items) {
  183. mask |= item.getEquipmentSlot();
  184. }
  185.  
  186. writeH(mask);
  187.  
  188. for (Item item : items) {
  189. if (item.getEquipmentSlot() < Short.MAX_VALUE * 2) {
  190. writeD(item.getItemSkinTemplate().getTemplateId());
  191. GodStone godStone = item.getGodStone();
  192. writeD(godStone != null ? godStone.getItemId() : 0);
  193. writeD(item.getItemColor());
  194. writeH(0x00);// unk (0x00)
  195. }
  196. }
  197.  
  198. writeD(playerAppearance.getSkinRGB());
  199. writeD(playerAppearance.getHairRGB());
  200. writeD(playerAppearance.getEyeRGB());
  201. writeD(playerAppearance.getLipRGB());
  202. writeC(playerAppearance.getFace());
  203. writeC(playerAppearance.getHair());
  204. writeC(playerAppearance.getDeco());
  205. writeC(playerAppearance.getTattoo());
  206. writeC(playerAppearance.getFaceContour());
  207. writeC(playerAppearance.getExpression());
  208.  
  209. writeC(5); // unk 0x05 0x06
  210.  
  211. writeC(playerAppearance.getJawLine());
  212. writeC(playerAppearance.getForehead());
  213.  
  214. writeC(playerAppearance.getEyeHeight());
  215. writeC(playerAppearance.getEyeSpace());
  216. writeC(playerAppearance.getEyeWidth());
  217. writeC(playerAppearance.getEyeSize());
  218. writeC(playerAppearance.getEyeShape());
  219. writeC(playerAppearance.getEyeAngle());
  220.  
  221. writeC(playerAppearance.getBrowHeight());
  222. writeC(playerAppearance.getBrowAngle());
  223. writeC(playerAppearance.getBrowShape());
  224.  
  225. writeC(playerAppearance.getNose());
  226. writeC(playerAppearance.getNoseBridge());
  227. writeC(playerAppearance.getNoseWidth());
  228. writeC(playerAppearance.getNoseTip());
  229.  
  230. writeC(playerAppearance.getCheek());
  231. writeC(playerAppearance.getLipHeight());
  232. writeC(playerAppearance.getMouthSize());
  233. writeC(playerAppearance.getLipSize());
  234. writeC(playerAppearance.getSmile());
  235. writeC(playerAppearance.getLipShape());
  236. writeC(playerAppearance.getJawHeigh());
  237. writeC(playerAppearance.getChinJut());
  238. writeC(playerAppearance.getEarShape());
  239. writeC(playerAppearance.getHeadSize());
  240. // 1.5.x 0x00, shoulderSize, armLength, legLength (BYTE) after HeadSize
  241.  
  242. writeC(playerAppearance.getNeck());
  243. writeC(playerAppearance.getNeckLength());
  244. writeC(playerAppearance.getShoulderSize());
  245.  
  246. writeC(playerAppearance.getTorso());
  247. writeC(playerAppearance.getChest()); // only woman
  248. writeC(playerAppearance.getWaist());
  249.  
  250. writeC(playerAppearance.getHips());
  251. writeC(playerAppearance.getArmThickness());
  252. writeC(playerAppearance.getHandSize());
  253. writeC(playerAppearance.getLegThicnkess());
  254.  
  255. writeC(playerAppearance.getFootSize());
  256. writeC(playerAppearance.getFacialRate());
  257.  
  258. writeC(0x00); // always 0
  259. writeC(playerAppearance.getArmLength());
  260. writeC(playerAppearance.getLegLength());
  261. writeC(playerAppearance.getShoulders());
  262. writeC(playerAppearance.getFaceShape());
  263. writeC(0x00); // always 0
  264.  
  265. writeC(playerAppearance.getVoice());
  266.  
  267. writeF(playerAppearance.getHeight());
  268. writeF(0.25f); // scale
  269. writeF(2.0f); // gravity or slide surface o_O
  270. writeF(player.getGameStats().getMovementSpeedFloat()); // move speed
  271.  
  272. Stat2 attackSpeed = player.getGameStats().getAttackSpeed();
  273. writeH(attackSpeed.getBase());
  274. writeH(attackSpeed.getCurrent());
  275. writeC(player.getPortAnimation());
  276.  
  277. writeS(player.hasStore() ? player.getStore().getStoreMessage() : "");// private store message
  278.  
  279. /**
  280. * Movement
  281. */
  282. writeF(0);
  283. writeF(0);
  284. writeF(0);
  285.  
  286. writeF(player.getX());// x
  287. writeF(player.getY());// y
  288. writeF(player.getZ());// z
  289. writeC(0x00); // move type
  290.  
  291. if (player.isUsingFlyTeleport()) {
  292. writeD(player.getFlightTeleportId());
  293. writeD(player.getFlightDistance());
  294. }
  295. else if (player.isInPlayerMode(PlayerMode.WINDSTREAM)) {
  296. writeD(player.windstreamPath.teleportId);
  297. writeD(player.windstreamPath.distance);
  298. }
  299. writeC(player.getVisualState()); // visualState
  300. writeS(player.getCommonData().getNote()); // note show in right down windows if your target on player
  301.  
  302. writeH(player.getLevel()); // [level]
  303. writeH(player.getPlayerSettings().getDisplay()); // unk - 0x04
  304. writeH(player.getPlayerSettings().getDeny()); // unk - 0x00
  305. writeH(player.getAbyssRank().getRank().getId()); // abyss rank
  306. writeH(0x00); // unk - 0x01
  307. writeD(player.getTarget() == null ? 0 : player.getTarget().getObjectId());
  308. writeC(0); // suspect id
  309. writeD(0);
  310. writeC(player.isMentor() ? 1 : 0);
  311. writeD(player.getHouseOwnerId()); // 3.0
  312. writeD(0x01); // unk 3.5
  313. }
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement