RequestJoinParty.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package com.l2jserver.gameserver.network.clientpackets;
  16. import java.util.logging.Logger;
  17. import com.l2jserver.Config;
  18. import com.l2jserver.gameserver.model.BlockList;
  19. import com.l2jserver.gameserver.model.L2Party;
  20. import com.l2jserver.gameserver.model.L2World;
  21. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  22. import com.l2jserver.gameserver.network.SystemMessageId;
  23. import com.l2jserver.gameserver.network.serverpackets.AskJoinParty;
  24. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  25. /**
  26. * sample
  27. * 29
  28. * 42 00 00 10
  29. * 01 00 00 00
  30. *
  31. * format cdd
  32. *
  33. *
  34. * @version $Revision: 1.7.4.4 $ $Date: 2005/03/27 15:29:30 $
  35. */
  36. public final class RequestJoinParty extends L2GameClientPacket
  37. {
  38. private static final String _C__29_REQUESTJOINPARTY = "[C] 29 RequestJoinParty";
  39. private static Logger _log = Logger.getLogger(RequestJoinParty.class.getName());
  40. private String _name;
  41. private int _itemDistribution;
  42. @Override
  43. protected void readImpl()
  44. {
  45. _name = readS();
  46. _itemDistribution = readD();
  47. }
  48. @Override
  49. protected void runImpl()
  50. {
  51. L2PcInstance requestor = getClient().getActiveChar();
  52. L2PcInstance target = L2World.getInstance().getPlayer(_name);
  53. if (requestor == null)
  54. return;
  55. if (target == null)
  56. {
  57. requestor.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  58. return;
  59. }
  60. if (target.getAppearance().getInvisible())
  61. {
  62. requestor.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  63. return;
  64. }
  65. if (target.isInParty())
  66. {
  67. SystemMessage msg = new SystemMessage(SystemMessageId.C1_IS_ALREADY_IN_PARTY);
  68. msg.addString(target.getName());
  69. requestor.sendPacket(msg);
  70. return;
  71. }
  72. if (BlockList.isBlocked(target, requestor))
  73. {
  74. SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_ADDED_YOU_TO_IGNORE_LIST);
  75. sm.addCharName(target);
  76. requestor.sendPacket(sm);
  77. return;
  78. }
  79. if (target == requestor)
  80. {
  81. requestor.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
  82. return;
  83. }
  84. if (target.isCursedWeaponEquipped() || requestor.isCursedWeaponEquipped())
  85. {
  86. requestor.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
  87. return;
  88. }
  89. if (target.isInJail() || requestor.isInJail())
  90. {
  91. requestor.sendMessage("Player is in Jail");
  92. return;
  93. }
  94. if (target.getClient().isDetached())
  95. {
  96. requestor.sendMessage("Player is in offline mode.");
  97. return;
  98. }
  99. if (target.isInOlympiadMode() || requestor.isInOlympiadMode())
  100. return;
  101. SystemMessage info = new SystemMessage(SystemMessageId.C1_INVITED_TO_PARTY);
  102. info.addCharName(target);
  103. requestor.sendPacket(info);
  104. if (!requestor.isInParty()) //Asker has no party
  105. {
  106. createNewParty(target, requestor);
  107. }
  108. else //Asker is in party
  109. {
  110. if(requestor.getParty().isInDimensionalRift())
  111. {
  112. requestor.sendMessage("You can't invite a player when in Dimensional Rift.");
  113. }
  114. else
  115. {
  116. addTargetToParty(target, requestor);
  117. }
  118. }
  119. }
  120. /**
  121. * @param client
  122. * @param itemDistribution
  123. * @param target
  124. * @param requestor
  125. */
  126. private void addTargetToParty(L2PcInstance target, L2PcInstance requestor)
  127. {
  128. SystemMessage msg;
  129. L2Party party = requestor.getParty();
  130. // summary of ppl already in party and ppl that get invitation
  131. if (!party.isLeader(requestor))
  132. {
  133. requestor.sendPacket(new SystemMessage(SystemMessageId.ONLY_LEADER_CAN_INVITE));
  134. return;
  135. }
  136. if (party.getMemberCount() >= 9 )
  137. {
  138. requestor.sendPacket(new SystemMessage(SystemMessageId.PARTY_FULL));
  139. return;
  140. }
  141. if (party.getPendingInvitation() && !party.isInvitationRequestExpired())
  142. {
  143. requestor.sendPacket(new SystemMessage(SystemMessageId.WAITING_FOR_ANOTHER_REPLY));
  144. return;
  145. }
  146. if (!target.isProcessingRequest())
  147. {
  148. requestor.onTransactionRequest(target);
  149. // in case a leader change has happened, use party's mode
  150. target.sendPacket(new AskJoinParty(requestor.getName(), party.getLootDistribution()));
  151. party.setPendingInvitation(true);
  152. if (Config.DEBUG)
  153. _log.fine("sent out a party invitation to:"+target.getName());
  154. }
  155. else
  156. {
  157. msg = new SystemMessage(SystemMessageId.C1_IS_BUSY_TRY_LATER);
  158. msg.addString(target.getName());
  159. requestor.sendPacket(msg);
  160. if (Config.DEBUG)
  161. _log.warning(requestor.getName() + " already received a party invitation");
  162. }
  163. msg = null;
  164. }
  165. /**
  166. * @param client
  167. * @param itemDistribution
  168. * @param target
  169. * @param requestor
  170. */
  171. private void createNewParty(L2PcInstance target, L2PcInstance requestor)
  172. {
  173. if (!target.isProcessingRequest())
  174. {
  175. requestor.setParty(new L2Party(requestor, _itemDistribution));
  176. requestor.onTransactionRequest(target);
  177. target.sendPacket(new AskJoinParty(requestor.getName(), _itemDistribution));
  178. requestor.getParty().setPendingInvitation(true);
  179. if (Config.DEBUG)
  180. _log.fine("sent out a party invitation to:"+target.getName());
  181. }
  182. else
  183. {
  184. requestor.sendPacket(new SystemMessage(SystemMessageId.WAITING_FOR_ANOTHER_REPLY));
  185. if (Config.DEBUG)
  186. _log.warning(requestor.getName() + " already received a party invitation");
  187. }
  188. }
  189. /* (non-Javadoc)
  190. * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType()
  191. */
  192. @Override
  193. public String getType()
  194. {
  195. return _C__29_REQUESTJOINPARTY;
  196. }
  197. }