L2CommandChannel.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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.model;
  16. import java.util.List;
  17. import javolution.util.FastList;
  18. import com.l2jserver.Config;
  19. import com.l2jserver.gameserver.model.actor.L2Character;
  20. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  21. import com.l2jserver.gameserver.network.SystemMessageId;
  22. import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
  23. import com.l2jserver.gameserver.network.serverpackets.ExCloseMPCC;
  24. import com.l2jserver.gameserver.network.serverpackets.ExMPCCPartyInfoUpdate;
  25. import com.l2jserver.gameserver.network.serverpackets.ExOpenMPCC;
  26. import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
  27. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  28. /**
  29. * @author chris_00
  30. */
  31. public class L2CommandChannel
  32. {
  33. private final List<L2Party> _partys;
  34. private L2PcInstance _commandLeader = null;
  35. private int _channelLvl;
  36. /**
  37. * Creates a New Command Channel and Add the Leaders party to the CC
  38. *
  39. * @param leader
  40. */
  41. public L2CommandChannel(L2PcInstance leader)
  42. {
  43. _commandLeader = leader;
  44. _partys = new FastList<L2Party>();
  45. _partys.add(leader.getParty());
  46. _channelLvl = leader.getParty().getLevel();
  47. leader.getParty().setCommandChannel(this);
  48. leader.getParty().broadcastToPartyMembers(SystemMessage.getSystemMessage(SystemMessageId.COMMAND_CHANNEL_FORMED));
  49. leader.getParty().broadcastToPartyMembers(new ExOpenMPCC());
  50. }
  51. /**
  52. * Adds a Party to the Command Channel
  53. * @param party
  54. */
  55. public void addParty(L2Party party)
  56. {
  57. if (party == null)
  58. return;
  59. // Update the CCinfo for existing players
  60. this.broadcastToChannelMembers(new ExMPCCPartyInfoUpdate(party, 1));
  61. _partys.add(party);
  62. if (party.getLevel() > _channelLvl)
  63. _channelLvl = party.getLevel();
  64. party.setCommandChannel(this);
  65. party.broadcastToPartyMembers(SystemMessage.getSystemMessage(SystemMessageId.JOINED_COMMAND_CHANNEL));
  66. party.broadcastToPartyMembers(new ExOpenMPCC());
  67. }
  68. /**
  69. * Removes a Party from the Command Channel
  70. * @param party
  71. */
  72. public void removeParty(L2Party party)
  73. {
  74. if (party == null)
  75. return;
  76. _partys.remove(party);
  77. _channelLvl = 0;
  78. for (L2Party pty : _partys)
  79. {
  80. if (pty.getLevel() > _channelLvl)
  81. _channelLvl = pty.getLevel();
  82. }
  83. party.setCommandChannel(null);
  84. party.broadcastToPartyMembers(new ExCloseMPCC());
  85. if(_partys.size() < 2)
  86. {
  87. broadcastToChannelMembers(SystemMessage.getSystemMessage(SystemMessageId.COMMAND_CHANNEL_DISBANDED));
  88. disbandChannel();
  89. }
  90. else
  91. {
  92. // Update the CCinfo for existing players
  93. this.broadcastToChannelMembers(new ExMPCCPartyInfoUpdate(party, 0));
  94. }
  95. }
  96. /**
  97. * disbands the whole Command Channel
  98. */
  99. public void disbandChannel()
  100. {
  101. if (_partys != null)
  102. {
  103. for (L2Party party : _partys)
  104. {
  105. if(party != null)
  106. removeParty(party);
  107. }
  108. _partys.clear();
  109. }
  110. }
  111. /**
  112. * @return overall member count of the Command Channel
  113. */
  114. public int getMemberCount()
  115. {
  116. int count = 0;
  117. for (L2Party party : _partys)
  118. {
  119. if(party != null)
  120. count += party.getMemberCount();
  121. }
  122. return count;
  123. }
  124. /**
  125. * Broadcast packet to every channel member
  126. * @param gsp
  127. */
  128. public void broadcastToChannelMembers(L2GameServerPacket gsp)
  129. {
  130. if (_partys != null && !_partys.isEmpty())
  131. {
  132. for (L2Party party : _partys)
  133. {
  134. if(party != null)
  135. party.broadcastToPartyMembers(gsp);
  136. }
  137. }
  138. }
  139. public void broadcastCSToChannelMembers(CreatureSay gsp, L2PcInstance broadcaster)
  140. {
  141. if (_partys != null && !_partys.isEmpty())
  142. {
  143. for (L2Party party : _partys)
  144. {
  145. if(party != null)
  146. party.broadcastCSToPartyMembers(gsp, broadcaster);
  147. }
  148. }
  149. }
  150. /**
  151. * @return list of Parties in Command Channel
  152. */
  153. public List<L2Party> getPartys()
  154. {
  155. return _partys;
  156. }
  157. /**
  158. * @return list of all Members in Command Channel
  159. */
  160. public List<L2PcInstance> getMembers()
  161. {
  162. List<L2PcInstance> members = new FastList<L2PcInstance>();
  163. for (L2Party party : getPartys())
  164. {
  165. members.addAll(party.getPartyMembers());
  166. }
  167. return members;
  168. }
  169. /**
  170. *
  171. * @return Level of CC
  172. */
  173. public int getLevel() { return _channelLvl; }
  174. /**
  175. * @param leader the leader of the Command Channel
  176. */
  177. public void setChannelLeader(L2PcInstance leader)
  178. {
  179. _commandLeader = leader;
  180. }
  181. /**
  182. * @return the leader of the Command Channel
  183. */
  184. public L2PcInstance getChannelLeader()
  185. {
  186. return _commandLeader;
  187. }
  188. /**
  189. *
  190. *
  191. * @param obj
  192. * @return true if proper condition for RaidWar
  193. */
  194. public boolean meetRaidWarCondition(L2Object obj)
  195. {
  196. if (!(obj instanceof L2Character && ((L2Character)obj).isRaid()))
  197. return false;
  198. return (getMemberCount() >= Config.LOOT_RAIDS_PRIVILEGE_CC_SIZE);
  199. }
  200. }