2
0

RequestJoinParty.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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(SystemMessage.getSystemMessage(SystemMessageId.FIRST_SELECT_USER_TO_INVITE_TO_PARTY));
  58. return;
  59. }
  60. if (target.getAppearance().getInvisible())
  61. {
  62. requestor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  63. return;
  64. }
  65. if (target.isInParty())
  66. {
  67. SystemMessage msg = SystemMessage.getSystemMessage(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 = SystemMessage.getSystemMessage(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(SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_INVITED_THE_WRONG_TARGET));
  82. return;
  83. }
  84. if (target.isCursedWeaponEquipped() || requestor.isCursedWeaponEquipped())
  85. {
  86. requestor.sendPacket(SystemMessage.getSystemMessage(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. {
  101. if (target.isInOlympiadMode() != requestor.isInOlympiadMode()
  102. || target.getOlympiadGameId() != requestor.getOlympiadGameId()
  103. || target.getOlympiadSide() != requestor.getOlympiadSide())
  104. return;
  105. }
  106. SystemMessage info = SystemMessage.getSystemMessage(SystemMessageId.C1_INVITED_TO_PARTY);
  107. info.addCharName(target);
  108. requestor.sendPacket(info);
  109. if (!requestor.isInParty()) //Asker has no party
  110. {
  111. createNewParty(target, requestor);
  112. }
  113. else //Asker is in party
  114. {
  115. if(requestor.getParty().isInDimensionalRift())
  116. {
  117. requestor.sendMessage("You can't invite a player when in Dimensional Rift.");
  118. }
  119. else
  120. {
  121. addTargetToParty(target, requestor);
  122. }
  123. }
  124. }
  125. /**
  126. * @param client
  127. * @param itemDistribution
  128. * @param target
  129. * @param requestor
  130. */
  131. private void addTargetToParty(L2PcInstance target, L2PcInstance requestor)
  132. {
  133. SystemMessage msg;
  134. L2Party party = requestor.getParty();
  135. // summary of ppl already in party and ppl that get invitation
  136. if (!party.isLeader(requestor))
  137. {
  138. requestor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ONLY_LEADER_CAN_INVITE));
  139. return;
  140. }
  141. if (party.getMemberCount() >= 9 )
  142. {
  143. requestor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.PARTY_FULL));
  144. return;
  145. }
  146. if (party.getPendingInvitation() && !party.isInvitationRequestExpired())
  147. {
  148. requestor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WAITING_FOR_ANOTHER_REPLY));
  149. return;
  150. }
  151. if (!target.isProcessingRequest())
  152. {
  153. requestor.onTransactionRequest(target);
  154. // in case a leader change has happened, use party's mode
  155. target.sendPacket(new AskJoinParty(requestor.getName(), party.getLootDistribution()));
  156. party.setPendingInvitation(true);
  157. if (Config.DEBUG)
  158. _log.fine("sent out a party invitation to:"+target.getName());
  159. }
  160. else
  161. {
  162. msg = SystemMessage.getSystemMessage(SystemMessageId.C1_IS_BUSY_TRY_LATER);
  163. msg.addString(target.getName());
  164. requestor.sendPacket(msg);
  165. if (Config.DEBUG)
  166. _log.warning(requestor.getName() + " already received a party invitation");
  167. }
  168. msg = null;
  169. }
  170. /**
  171. * @param client
  172. * @param itemDistribution
  173. * @param target
  174. * @param requestor
  175. */
  176. private void createNewParty(L2PcInstance target, L2PcInstance requestor)
  177. {
  178. if (!target.isProcessingRequest())
  179. {
  180. requestor.setParty(new L2Party(requestor, _itemDistribution));
  181. requestor.onTransactionRequest(target);
  182. target.sendPacket(new AskJoinParty(requestor.getName(), _itemDistribution));
  183. requestor.getParty().setPendingInvitation(true);
  184. if (Config.DEBUG)
  185. _log.fine("sent out a party invitation to:"+target.getName());
  186. }
  187. else
  188. {
  189. requestor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.WAITING_FOR_ANOTHER_REPLY));
  190. if (Config.DEBUG)
  191. _log.warning(requestor.getName() + " already received a party invitation");
  192. }
  193. }
  194. /* (non-Javadoc)
  195. * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType()
  196. */
  197. @Override
  198. public String getType()
  199. {
  200. return _C__29_REQUESTJOINPARTY;
  201. }
  202. }