RequestJoinParty.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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 net.sf.l2j.gameserver.clientpackets;
  16. import java.util.logging.Logger;
  17. import net.sf.l2j.Config;
  18. import net.sf.l2j.gameserver.model.L2Party;
  19. import net.sf.l2j.gameserver.model.L2World;
  20. import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  21. import net.sf.l2j.gameserver.network.SystemMessageId;
  22. import net.sf.l2j.gameserver.serverpackets.AskJoinParty;
  23. import net.sf.l2j.gameserver.serverpackets.SystemMessage;
  24. /**
  25. * sample
  26. * 29
  27. * 42 00 00 10
  28. * 01 00 00 00
  29. *
  30. * format cdd
  31. *
  32. *
  33. * @version $Revision: 1.7.4.4 $ $Date: 2005/03/27 15:29:30 $
  34. */
  35. public final class RequestJoinParty extends L2GameClientPacket
  36. {
  37. private static final String _C__29_REQUESTJOINPARTY = "[C] 29 RequestJoinParty";
  38. private static Logger _log = Logger.getLogger(RequestJoinParty.class.getName());
  39. private String _name;
  40. private int _itemDistribution;
  41. @Override
  42. protected void readImpl()
  43. {
  44. _name = readS();
  45. _itemDistribution = readD();
  46. }
  47. @Override
  48. protected void runImpl()
  49. {
  50. L2PcInstance requestor = getClient().getActiveChar();
  51. L2PcInstance target = L2World.getInstance().getPlayer(_name);
  52. if (requestor == null)
  53. return;
  54. if (target == null)
  55. {
  56. requestor.sendPacket(new SystemMessage(SystemMessageId.TARGET_IS_INCORRECT));
  57. return;
  58. }
  59. if (target.isInParty())
  60. {
  61. SystemMessage msg = new SystemMessage(SystemMessageId.S1_IS_ALREADY_IN_PARTY);
  62. msg.addString(target.getName());
  63. requestor.sendPacket(msg);
  64. return;
  65. }
  66. if (target == requestor)
  67. {
  68. requestor.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
  69. return;
  70. }
  71. if (target.isCursedWeaponEquipped() || requestor.isCursedWeaponEquipped())
  72. {
  73. requestor.sendPacket(new SystemMessage(SystemMessageId.INCORRECT_TARGET));
  74. return;
  75. }
  76. if (target.isInJail() || requestor.isInJail())
  77. {
  78. requestor.sendMessage("Player is in Jail");
  79. return;
  80. }
  81. if (target.isInOlympiadMode() || requestor.isInOlympiadMode())
  82. return;
  83. if (target.isInDuel() || requestor.isInDuel())
  84. return;
  85. if (!requestor.isInParty()) //Asker has no party
  86. {
  87. createNewParty(target, requestor);
  88. }
  89. else //Asker is in party
  90. {
  91. if(requestor.getParty().isInDimensionalRift())
  92. {
  93. requestor.sendMessage("You can't invite a player when in Dimensional Rift.");
  94. }
  95. else
  96. {
  97. addTargetToParty(target, requestor);
  98. }
  99. }
  100. }
  101. /**
  102. * @param client
  103. * @param itemDistribution
  104. * @param target
  105. * @param requestor
  106. */
  107. private void addTargetToParty(L2PcInstance target, L2PcInstance requestor)
  108. {
  109. SystemMessage msg;
  110. // summary of ppl already in party and ppl that get invitation
  111. if (requestor.getParty().getMemberCount() + requestor.getParty().getPendingInvitationNumber() >= 9 )
  112. {
  113. requestor.sendPacket(new SystemMessage(SystemMessageId.PARTY_FULL));
  114. return;
  115. }
  116. if (!requestor.getParty().isLeader(requestor))
  117. {
  118. requestor.sendPacket(new SystemMessage(SystemMessageId.ONLY_LEADER_CAN_INVITE));
  119. return;
  120. }
  121. if (!target.isProcessingRequest())
  122. {
  123. requestor.onTransactionRequest(target);
  124. // in case a leader change has happened, use party's mode
  125. target.sendPacket(new AskJoinParty(requestor.getName(), requestor.getParty().getLootDistribution()));
  126. requestor.getParty().increasePendingInvitationNumber();
  127. if (Config.DEBUG)
  128. _log.fine("sent out a party invitation to:"+target.getName());
  129. msg = new SystemMessage(SystemMessageId.YOU_INVITED_S1_TO_PARTY);
  130. msg.addString(target.getName());
  131. requestor.sendPacket(msg);
  132. }
  133. else
  134. {
  135. msg = new SystemMessage(SystemMessageId.S1_IS_BUSY_TRY_LATER);
  136. requestor.sendPacket(msg);
  137. if (Config.DEBUG)
  138. _log.warning(requestor.getName() + " already received a party invitation");
  139. }
  140. msg = null;
  141. }
  142. /**
  143. * @param client
  144. * @param itemDistribution
  145. * @param target
  146. * @param requestor
  147. */
  148. private void createNewParty(L2PcInstance target, L2PcInstance requestor)
  149. {
  150. SystemMessage msg;
  151. if (!target.isProcessingRequest())
  152. {
  153. requestor.setParty(new L2Party(requestor, _itemDistribution));
  154. requestor.onTransactionRequest(target);
  155. target.sendPacket(new AskJoinParty(requestor.getName(), _itemDistribution));
  156. requestor.getParty().increasePendingInvitationNumber();
  157. if (Config.DEBUG)
  158. _log.fine("sent out a party invitation to:"+target.getName());
  159. msg = new SystemMessage(SystemMessageId.YOU_INVITED_S1_TO_PARTY);
  160. msg.addString(target.getName());
  161. requestor.sendPacket(msg);
  162. }
  163. else
  164. {
  165. msg = new SystemMessage(SystemMessageId.S1_IS_BUSY_TRY_LATER);
  166. msg.addString(target.getName());
  167. requestor.sendPacket(msg);
  168. if (Config.DEBUG)
  169. _log.warning(requestor.getName() + " already received a party invitation");
  170. }
  171. }
  172. /* (non-Javadoc)
  173. * @see net.sf.l2j.gameserver.clientpackets.ClientBasePacket#getType()
  174. */
  175. @Override
  176. public String getType()
  177. {
  178. return _C__29_REQUESTJOINPARTY;
  179. }
  180. }