RequestJoinParty.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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.clientpackets;
  20. import com.l2jserver.Config;
  21. import com.l2jserver.gameserver.enums.PartyDistributionType;
  22. import com.l2jserver.gameserver.model.BlockList;
  23. import com.l2jserver.gameserver.model.L2Party;
  24. import com.l2jserver.gameserver.model.L2World;
  25. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  26. import com.l2jserver.gameserver.network.SystemMessageId;
  27. import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
  28. import com.l2jserver.gameserver.network.serverpackets.AskJoinParty;
  29. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  30. /**
  31. * sample 29 42 00 00 10 01 00 00 00 format cdd
  32. * @version $Revision: 1.7.4.4 $ $Date: 2005/03/27 15:29:30 $
  33. */
  34. public final class RequestJoinParty extends L2GameClientPacket
  35. {
  36. private static final String _C__42_REQUESTJOINPARTY = "[C] 42 RequestJoinParty";
  37. private String _name;
  38. private int _partyDistributionTypeId;
  39. @Override
  40. protected void readImpl()
  41. {
  42. _name = readS();
  43. _partyDistributionTypeId = readD();
  44. }
  45. @Override
  46. protected void runImpl()
  47. {
  48. L2PcInstance requestor = getClient().getActiveChar();
  49. L2PcInstance target = L2World.getInstance().getPlayer(_name);
  50. if (requestor == null)
  51. {
  52. return;
  53. }
  54. if (target == null)
  55. {
  56. requestor.sendPacket(SystemMessageId.FIRST_SELECT_USER_TO_INVITE_TO_PARTY);
  57. return;
  58. }
  59. if ((target.getClient() == null) || target.getClient().isDetached())
  60. {
  61. requestor.sendMessage("Player is in offline mode.");
  62. return;
  63. }
  64. if (requestor.isPartyBanned())
  65. {
  66. requestor.sendPacket(SystemMessageId.YOU_HAVE_BEEN_REPORTED_SO_PARTY_NOT_ALLOWED);
  67. requestor.sendPacket(ActionFailed.STATIC_PACKET);
  68. return;
  69. }
  70. if (target.isPartyBanned())
  71. {
  72. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_REPORTED_AND_CANNOT_PARTY);
  73. sm.addCharName(target);
  74. requestor.sendPacket(sm);
  75. return;
  76. }
  77. if (!target.isVisibleFor(requestor))
  78. {
  79. requestor.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
  80. return;
  81. }
  82. SystemMessage sm;
  83. if (target.isInParty())
  84. {
  85. sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_ALREADY_IN_PARTY);
  86. sm.addString(target.getName());
  87. requestor.sendPacket(sm);
  88. return;
  89. }
  90. if (BlockList.isBlocked(target, requestor))
  91. {
  92. sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_ADDED_YOU_TO_IGNORE_LIST);
  93. sm.addCharName(target);
  94. requestor.sendPacket(sm);
  95. return;
  96. }
  97. if (target == requestor)
  98. {
  99. requestor.sendPacket(SystemMessageId.YOU_HAVE_INVITED_THE_WRONG_TARGET);
  100. return;
  101. }
  102. if (target.isCursedWeaponEquipped() || requestor.isCursedWeaponEquipped())
  103. {
  104. requestor.sendPacket(SystemMessageId.INCORRECT_TARGET);
  105. return;
  106. }
  107. if (target.isJailed() || requestor.isJailed())
  108. {
  109. requestor.sendMessage("You cannot invite a player while is in Jail.");
  110. return;
  111. }
  112. if (target.isInOlympiadMode() || requestor.isInOlympiadMode())
  113. {
  114. if ((target.isInOlympiadMode() != requestor.isInOlympiadMode()) || (target.getOlympiadGameId() != requestor.getOlympiadGameId()) || (target.getOlympiadSide() != requestor.getOlympiadSide()))
  115. {
  116. requestor.sendPacket(SystemMessageId.A_USER_CURRENTLY_PARTICIPATING_IN_THE_OLYMPIAD_CANNOT_SEND_PARTY_AND_FRIEND_INVITATIONS);
  117. return;
  118. }
  119. }
  120. sm = SystemMessage.getSystemMessage(SystemMessageId.C1_INVITED_TO_PARTY);
  121. sm.addCharName(target);
  122. requestor.sendPacket(sm);
  123. if (!requestor.isInParty())
  124. {
  125. createNewParty(target, requestor);
  126. }
  127. else
  128. {
  129. if (requestor.getParty().isInDimensionalRift())
  130. {
  131. requestor.sendMessage("You cannot invite a player when you are in the Dimensional Rift.");
  132. }
  133. else
  134. {
  135. addTargetToParty(target, requestor);
  136. }
  137. }
  138. }
  139. /**
  140. * @param target
  141. * @param requestor
  142. */
  143. private void addTargetToParty(L2PcInstance target, L2PcInstance requestor)
  144. {
  145. final L2Party party = requestor.getParty();
  146. // summary of ppl already in party and ppl that get invitation
  147. if (!party.isLeader(requestor))
  148. {
  149. requestor.sendPacket(SystemMessageId.ONLY_LEADER_CAN_INVITE);
  150. return;
  151. }
  152. if (party.getMemberCount() >= 9)
  153. {
  154. requestor.sendPacket(SystemMessageId.PARTY_FULL);
  155. return;
  156. }
  157. if (party.getPendingInvitation() && !party.isInvitationRequestExpired())
  158. {
  159. requestor.sendPacket(SystemMessageId.WAITING_FOR_ANOTHER_REPLY);
  160. return;
  161. }
  162. if (!target.isProcessingRequest())
  163. {
  164. requestor.onTransactionRequest(target);
  165. // in case a leader change has happened, use party's mode
  166. target.sendPacket(new AskJoinParty(requestor.getName(), party.getDistributionType()));
  167. party.setPendingInvitation(true);
  168. if (Config.DEBUG)
  169. {
  170. _log.fine("sent out a party invitation to:" + target.getName());
  171. }
  172. }
  173. else
  174. {
  175. SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_BUSY_TRY_LATER);
  176. sm.addString(target.getName());
  177. requestor.sendPacket(sm);
  178. if (Config.DEBUG)
  179. {
  180. _log.warning(requestor.getName() + " already received a party invitation");
  181. }
  182. }
  183. }
  184. /**
  185. * @param target
  186. * @param requestor
  187. */
  188. private void createNewParty(L2PcInstance target, L2PcInstance requestor)
  189. {
  190. PartyDistributionType partyDistributionType = PartyDistributionType.findById(_partyDistributionTypeId);
  191. if (partyDistributionType == null)
  192. {
  193. return;
  194. }
  195. if (!target.isProcessingRequest())
  196. {
  197. target.sendPacket(new AskJoinParty(requestor.getName(), partyDistributionType));
  198. target.setActiveRequester(requestor);
  199. requestor.onTransactionRequest(target);
  200. requestor.setPartyDistributionType(partyDistributionType);
  201. if (Config.DEBUG)
  202. {
  203. _log.fine("sent out a party invitation to:" + target.getName());
  204. }
  205. }
  206. else
  207. {
  208. requestor.sendPacket(SystemMessageId.WAITING_FOR_ANOTHER_REPLY);
  209. if (Config.DEBUG)
  210. {
  211. _log.warning(requestor.getName() + " already received a party invitation");
  212. }
  213. }
  214. }
  215. @Override
  216. public String getType()
  217. {
  218. return _C__42_REQUESTJOINPARTY;
  219. }
  220. }