package handling.channel.handler; import client.MapleCharacter; import client.MapleClient; import constants.GameConstants; import handling.channel.ChannelServer; import handling.world.MapleParty; import handling.world.MaplePartyCharacter; import handling.world.PartyOperation; import handling.world.World; import handling.world.exped.ExpeditionType; import handling.world.exped.MapleExpedition; import handling.world.exped.PartySearch; import handling.world.exped.PartySearchType; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import server.maps.Event_DojoAgent; import server.maps.FieldLimitType; import server.quest.MapleQuest; import tools.StringUtil; import tools.data.LittleEndianAccessor; import tools.packet.CWvsContext; public class PartyHandler { public static final void DenyPartyRequest(LittleEndianAccessor slea, MapleClient c) { if (c.getPlayer().getParty() == null && c.getPlayer().getQuestNoAdd(MapleQuest.getInstance(GameConstants.組隊邀請)) == null) { int action = slea.readByte(); int partyId = slea.readInt(); MapleParty party = World.Party.getParty(partyId); if (party != null) { if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態下無法進行此操作。"); return; } switch (action) { case 0x20: // Version.176 [推測] case 0x21: // 組隊邀請 / Version.176 [完成] break; case 0x25: // 拒絕組隊邀請 / Version.176 [完成] case 0x3B: // Version.176 [推測] MapleCharacter cfrom = c.getChannelServer().getPlayerStorage().getCharacterById(party.getLeader().getId()); if (cfrom == null) { break; } cfrom.dropMessage(5, new StringBuilder().append("'").append(c.getPlayer().getName()).append("'玩家拒絕了組隊邀請。").toString()); break; case 0x26: // 接受組隊邀請 / Version.176 [完成] case 0x3C: // Version.176 [推測] if (party.getMembers().size() < 6) { c.getPlayer().setParty(party); World.Party.updateParty(partyId, PartyOperation.JOIN, new MaplePartyCharacter(c.getPlayer())); c.getPlayer().receivePartyMemberHP(); c.getPlayer().updatePartyMemberHP(); } else { c.getPlayer().dropMessage(5, "組隊成員已滿"); } break; default: System.out.println(new StringBuilder().append("第二方收到組隊邀請處理( 0x").append(StringUtil.getLeftPaddedStr(Integer.toHexString(action).toUpperCase(), '0', 2)).append(" ) 未知.").toString()); } } else { c.getPlayer().dropMessage(5, "要參加的隊伍不存在。"); } } else { int action = slea.readByte(); int charId = slea.readInt(); MapleCharacter cfrom; MapleParty party = World.Party.getParty(c.getPlayer().getParty().getId()); switch (action) { case 0x26: // Version.176 [推測] c.getPlayer().dropMessage(5, "您已經有一個組隊,無法加入其它組隊!"); break; case 0x43: // Version.176 [推測] break; case 0x49: // Version.176 [推測] cfrom = c.getChannelServer().getPlayerStorage().getCharacterById(charId); if (cfrom == null) { break; } cfrom.dropMessage(5, new StringBuilder().append(c.getPlayer().getName()).append("拒絕了組隊加入申請。").toString()); break; case 0x4A: // Version.176 [推測] cfrom = c.getChannelServer().getPlayerStorage().getCharacterById(charId); if (cfrom == null) { break; } if (party.getMembers().size() < 6) { cfrom.setParty(party); World.Party.updateParty(party.getId(), PartyOperation.JOIN, new MaplePartyCharacter(cfrom)); cfrom.receivePartyMemberHP(); cfrom.updatePartyMemberHP(); } else { c.getPlayer().dropMessage(5, "隊伍成員已滿。"); cfrom.dropMessage(5, "隊伍成員已滿。"); } break; default: System.out.println(new StringBuilder().append("第二方收到申請加入組隊處理( 0x").append(StringUtil.getLeftPaddedStr(Integer.toHexString(action).toUpperCase(), '0', 2)).append(" ) 未知.").toString()); } } } public static final void PartyOperation(LittleEndianAccessor slea, MapleClient c) { int operation = slea.readByte(); MapleParty party = c.getPlayer().getParty(); MaplePartyCharacter partyPlayer = new MaplePartyCharacter(c.getPlayer()); switch (operation) { case 1: // 建立隊伍 if (party == null) { boolean privateParty = slea.readByte() == 0; String partyName = slea.readMapleAsciiString(); party = World.Party.createParty(partyPlayer, privateParty, partyName); c.getPlayer().setParty(party); c.getSession().write(CWvsContext.PartyPacket.partyCreated(party)); } else { if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } if ((partyPlayer.equals(party.getLeader())) && (party.getMembers().size() == 1)) { c.getSession().write(CWvsContext.PartyPacket.partyCreated(party)); } else { c.getPlayer().dropMessage(5, "你已經存在一個隊伍中,無法創建!"); } } break; case 2: // 解散隊伍 / 離開隊伍 if (party == null) { break; } if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } if (partyPlayer.equals(party.getLeader())) { if (GameConstants.isDojo(c.getPlayer().getMapId())) { Event_DojoAgent.failed(c.getPlayer()); } if (c.getPlayer().getPyramidSubway() != null) { c.getPlayer().getPyramidSubway().fail(c.getPlayer()); } World.Party.updateParty(party.getId(), PartyOperation.DISBAND, partyPlayer); if (c.getPlayer().getEventInstance() != null) { c.getPlayer().getEventInstance().disbandParty(); } } else { if (GameConstants.isDojo(c.getPlayer().getMapId())) { Event_DojoAgent.failed(c.getPlayer()); } if (c.getPlayer().getPyramidSubway() != null) { c.getPlayer().getPyramidSubway().fail(c.getPlayer()); } World.Party.updateParty(party.getId(), PartyOperation.LEAVE, partyPlayer); if (c.getPlayer().getEventInstance() != null) { c.getPlayer().getEventInstance().leftParty(c.getPlayer()); } } c.getPlayer().setParty(null); break; case 3: // 加入隊伍 int partyid = slea.readInt(); if (party == null) { party = World.Party.getParty(partyid); if (party != null) { if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } if ((party.getMembers().size() < 6) && (c.getPlayer().getQuestNoAdd(MapleQuest.getInstance(GameConstants.組隊邀請)) == null)) { c.getPlayer().setParty(party); World.Party.updateParty(party.getId(), PartyOperation.JOIN, partyPlayer); c.getPlayer().receivePartyMemberHP(); c.getPlayer().updatePartyMemberHP(); } else { // 組隊成員已滿 c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x1B)); // Version.176 [完成] } } else { c.getPlayer().dropMessage(5, "要加入的隊伍不存在。"); } } else { c.getPlayer().dropMessage(5, "你已經有一個隊伍,無法加入其它隊伍!"); } break; case 4: // 隊伍邀請 if (party == null) { party = World.Party.createParty(partyPlayer, false, c.getPlayer().getName() + "的隊伍"); c.getPlayer().setParty(party); c.getSession().write(CWvsContext.PartyPacket.partyCreated(party)); } String theName = slea.readMapleAsciiString(); int theCh = World.Find.findChannel(theName); if (theCh > 0) { MapleCharacter invited = ChannelServer.getInstance(theCh).getPlayerStorage().getCharacterByName(theName); if ((invited != null) && (invited.getParty() == null) && (invited.getQuestNoAdd(MapleQuest.getInstance(GameConstants.組隊邀請)) == null)) { if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } if (party.getMembers().size() < 6) { // 邀請'(null)'加入組隊。 c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x21, invited.getName()));// Version.176 [完成] invited.getClient().getSession().write(CWvsContext.PartyPacket.partyInvite(c.getPlayer())); } else { // 組隊成員已滿 c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x1B)); // Version.176 [完成] } } else { // 已有隊伍 c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x1A)); // Version.176 [完成] } } else { // 找不到玩家 c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x38)); // Version.176 [完成] } break; case 6: // 強制退出 if (party == null || !partyPlayer.equals(party.getLeader())) { break; } if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } MaplePartyCharacter expelled = party.getMemberById(slea.readInt()); if (expelled != null) { if ((GameConstants.isDojo(c.getPlayer().getMapId())) && (expelled.isOnline())) { Event_DojoAgent.failed(c.getPlayer()); } if ((c.getPlayer().getPyramidSubway() != null) && (expelled.isOnline())) { c.getPlayer().getPyramidSubway().fail(c.getPlayer()); } World.Party.updateParty(party.getId(), PartyOperation.EXPEL, expelled); if (c.getPlayer().getEventInstance() != null) { if (expelled.isOnline()) { c.getPlayer().getEventInstance().disbandParty(); } } } break; case 7: // 變更隊長 if (party == null) { break; } if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } MaplePartyCharacter newleader = party.getMemberById(slea.readInt()); if ((newleader != null) && (partyPlayer.equals(party.getLeader()))) { World.Party.updateParty(party.getId(), PartyOperation.CHANGE_LEADER, newleader); } break; case 8: // 申請隊伍 if (party != null) { if ((c.getPlayer().getEventInstance() != null) || (c.getPlayer().getPyramidSubway() != null) || (party.getExpeditionId() > 0) || (GameConstants.isDojo(c.getPlayer().getMapId()))) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } if (partyPlayer.equals(party.getLeader())) { World.Party.updateParty(party.getId(), PartyOperation.DISBAND, partyPlayer); } else { World.Party.updateParty(party.getId(), PartyOperation.LEAVE, partyPlayer); } c.getPlayer().setParty(null); } int partyid_ = slea.readInt(); party = World.Party.getParty(partyid_); if ((party == null) || (party.getMembers().size() >= 6)) { break; } if (party.getExpeditionId() > 0) { c.getPlayer().dropMessage(5, "加入遠征隊伍的狀態無法進行此操作。"); return; } MapleCharacter cfrom = c.getPlayer().getMap().getCharacterById(party.getLeader().getId()); if ((cfrom != null) && (cfrom.getQuestNoAdd(MapleQuest.getInstance(GameConstants.組隊請求)) == null)) { c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x43, c.getPlayer().getName())); // Version.176 [完成] cfrom.getClient().getSession().write(CWvsContext.PartyPacket.partyRequestInvite(c.getPlayer())); } else { c.getPlayer().dropMessage(5, "沒有在該地圖找到此隊伍的隊長。"); } break; case 9: if (slea.readByte() > 0) { c.getPlayer().getQuestRemove(MapleQuest.getInstance(GameConstants.組隊請求)); } else { c.getPlayer().getQuestNAdd(MapleQuest.getInstance(GameConstants.組隊請求)); } break; case 13: // 變更隊伍設定 if (party == null) { break; } boolean privateParty = slea.readByte() == 0; String partyName = slea.readMapleAsciiString(); c.getPlayer().getParty().setName(partyName); c.getPlayer().getParty().setPrivate(privateParty); World.Party.updateParty(c.getPlayer().getParty().getId(), PartyOperation.INFO_UPDATE, partyPlayer); break; default: System.out.println("隊伍操作處理, 操作碼(" + operation + ")未處理。"); } } public static void AllowPartyInvite(LittleEndianAccessor slea, MapleClient c) { if (slea.readByte() > 0) { c.getPlayer().getQuestRemove(MapleQuest.getInstance(GameConstants.組隊邀請)); } else { c.getPlayer().getQuestNAdd(MapleQuest.getInstance(GameConstants.組隊邀請)); } } public static void MemberSearch(LittleEndianAccessor slea, MapleClient c) { if ((c.getPlayer().isInBlockedMap()) || (FieldLimitType.VipRock.check(c.getPlayer().getMap().getFieldLimit()))) { c.getPlayer().dropMessage(5, "無法在這個地方進行搜尋。"); return; } List members = new ArrayList(); for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) { if (chr.getId() != c.getPlayer().getId() && chr.getParty() == null && chr.getGMLevel() <= c.getPlayer().getGMLevel()) { members.add(chr); } } c.getSession().write(CWvsContext.PartyPacket.showMemberSearch(members)); } public static final void PartySearch(LittleEndianAccessor slea, MapleClient c) { if ((c.getPlayer().isInBlockedMap()) || (FieldLimitType.VipRock.check(c.getPlayer().getMap().getFieldLimit()))) { c.getPlayer().dropMessage(5, "無法在這個地方進行搜尋。"); return; } List parties = new ArrayList(); for (MapleCharacter chr : c.getPlayer().getMap().getCharactersThreadsafe()) { if (chr.getParty() != null && chr.getParty().getId() != c.getPlayer().getParty().getId() && !parties.contains(chr.getParty()) && !chr.getParty().isPrivate()) { parties.add(chr.getParty()); } } c.getSession().write(CWvsContext.PartyPacket.showPartySearch(parties)); } public static final void PartyListing(LittleEndianAccessor slea, MapleClient c) { int mode = slea.readByte(); PartySearchType pst; switch (mode) { case -105: case -97: case 81: case 159: pst = PartySearchType.getById(slea.readInt()); if ((pst == null) || (c.getPlayer().getLevel() > pst.maxLevel) || (c.getPlayer().getLevel() < pst.minLevel)) { return; } if ((c.getPlayer().getParty() == null) && (World.Party.searchParty(pst).size() < 10)) { MapleParty party = World.Party.createParty(new MaplePartyCharacter(c.getPlayer()), pst.id); c.getPlayer().setParty(party); c.getSession().write(CWvsContext.PartyPacket.partyCreated(party)); PartySearch ps = new PartySearch(slea.readMapleAsciiString(), pst.exped ? party.getExpeditionId() : party.getId(), pst); World.Party.addSearch(ps); if (pst.exped) { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(World.Party.getExped(party.getExpeditionId()), true, false)); } c.getSession().write(CWvsContext.PartyPacket.partyListingAdded(ps)); } else { c.getPlayer().dropMessage(1, "Unable to create. Please leave the party."); } break; case -103: case -95: case 83: case 161: pst = PartySearchType.getById(slea.readInt()); if ((pst == null) || (c.getPlayer().getLevel() > pst.maxLevel) || (c.getPlayer().getLevel() < pst.minLevel)) { return; } c.getSession().write(CWvsContext.PartyPacket.getPartyListing(pst)); break; case -102: case -94: case 84: case 162: break; case -101: case -93: case 85: case 163: MapleParty party = c.getPlayer().getParty(); MaplePartyCharacter partyplayer = new MaplePartyCharacter(c.getPlayer()); if (party != null) { break; } int theId = slea.readInt(); party = World.Party.getParty(theId); if (party != null) { PartySearch ps = World.Party.getSearchByParty(party.getId()); if ((ps != null) && (c.getPlayer().getLevel() <= ps.getType().maxLevel) && (c.getPlayer().getLevel() >= ps.getType().minLevel) && (party.getMembers().size() < 6)) { c.getPlayer().setParty(party); World.Party.updateParty(party.getId(), PartyOperation.JOIN, partyplayer); c.getPlayer().receivePartyMemberHP(); c.getPlayer().updatePartyMemberHP(); } else { c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x17));//0x15+2 175 } } else { MapleExpedition exped = World.Party.getExped(theId); if (exped != null) { PartySearch ps = World.Party.getSearchByExped(exped.getId()); if ((ps != null) && (c.getPlayer().getLevel() <= ps.getType().maxLevel) && (c.getPlayer().getLevel() >= ps.getType().minLevel) && (exped.getAllMembers() < exped.getType().maxMembers)) { int partyId = exped.getFreeParty(); if (partyId < 0) { c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x15));//0x15+2 175 } else if (partyId == 0) { party = World.Party.createPartyAndAdd(partyplayer, exped.getId()); c.getPlayer().setParty(party); c.getSession().write(CWvsContext.PartyPacket.partyCreated(party)); c.getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(exped, true, false)); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionJoined(c.getPlayer().getName()), null); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionUpdate(exped.getIndex(party.getId()), party), null); } else { c.getPlayer().setParty(World.Party.getParty(partyId)); World.Party.updateParty(partyId, PartyOperation.JOIN, partyplayer); c.getPlayer().receivePartyMemberHP(); c.getPlayer().updatePartyMemberHP(); c.getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(exped, true, false)); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionJoined(c.getPlayer().getName()), null); } } else { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionError(0, c.getPlayer().getName())); } } } break; default: if (!c.getPlayer().isGM()) { break; } System.out.println("Unknown PartyListing : " + mode + "\n" + slea); } } public static final void Expedition(LittleEndianAccessor slea, MapleClient c) { if ((c.getPlayer() == null) || (c.getPlayer().getMap() == null)) { return; } int mode = slea.readByte(); String name; MapleParty part; MapleExpedition exped; int cid; Iterator i$; switch (mode) { case 76://64 case 134: ExpeditionType et = ExpeditionType.getById(slea.readInt()); if ((et != null) && (c.getPlayer().getParty() == null) && (c.getPlayer().getLevel() <= et.maxLevel) && (c.getPlayer().getLevel() >= et.minLevel)) { MapleParty party = World.Party.createParty(new MaplePartyCharacter(c.getPlayer()), et.exped); c.getPlayer().setParty(party); c.getSession().write(CWvsContext.PartyPacket.partyCreated(party)); c.getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(World.Party.getExped(party.getExpeditionId()), true, false)); } else { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionError(0, "")); } break; case 77://65 case 135: name = slea.readMapleAsciiString(); int theCh = World.Find.findChannel(name); if (theCh > 0) { MapleCharacter invited = ChannelServer.getInstance(theCh).getPlayerStorage().getCharacterByName(name); MapleParty party = c.getPlayer().getParty(); if ((invited != null) && (invited.getParty() == null) && (party != null) && (party.getExpeditionId() > 0)) { MapleExpedition me = World.Party.getExped(party.getExpeditionId()); if ((me != null) && (me.getAllMembers() < me.getType().maxMembers) && (invited.getLevel() <= me.getType().maxLevel) && (invited.getLevel() >= me.getType().minLevel)) { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionError(7, invited.getName())); invited.getClient().getSession().write(CWvsContext.ExpeditionPacket.expeditionInvite(c.getPlayer(), me.getType().exped)); } else { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionError(3, invited.getName())); } } else { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionError(2, name)); } } else { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionError(0, name)); } break; case 78://66 case 136: name = slea.readMapleAsciiString(); int action = slea.readInt(); int theChh = World.Find.findChannel(name); if (theChh <= 0) { break; } MapleCharacter cfrom = ChannelServer.getInstance(theChh).getPlayerStorage().getCharacterByName(name); if ((cfrom != null) && (cfrom.getParty() != null) && (cfrom.getParty().getExpeditionId() > 0)) { MapleParty party = cfrom.getParty(); exped = World.Party.getExped(party.getExpeditionId()); if ((exped != null) && (action == 8)) { if ((c.getPlayer().getLevel() <= exped.getType().maxLevel) && (c.getPlayer().getLevel() >= exped.getType().minLevel) && (exped.getAllMembers() < exped.getType().maxMembers)) { int partyId = exped.getFreeParty(); if (partyId < 0) { c.getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x17));//0x15+2 175 } else if (partyId == 0) { party = World.Party.createPartyAndAdd(new MaplePartyCharacter(c.getPlayer()), exped.getId()); c.getPlayer().setParty(party); c.getSession().write(CWvsContext.PartyPacket.partyCreated(party)); c.getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(exped, true, false)); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionJoined(c.getPlayer().getName()), null); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionUpdate(exped.getIndex(party.getId()), party), null); } else { c.getPlayer().setParty(World.Party.getParty(partyId)); World.Party.updateParty(partyId, PartyOperation.JOIN, new MaplePartyCharacter(c.getPlayer())); c.getPlayer().receivePartyMemberHP(); c.getPlayer().updatePartyMemberHP(); c.getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(exped, false, false)); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionJoined(c.getPlayer().getName()), null); } } else { c.getSession().write(CWvsContext.ExpeditionPacket.expeditionError(3, cfrom.getName())); } } else if (action == 9) { cfrom.getClient().getSession().write(CWvsContext.PartyPacket.partyStatusMessage(0x19, c.getPlayer().getName()));//0x17+2 175 } } break; case 79://67 case 137: part = c.getPlayer().getParty(); if ((part == null) || (part.getExpeditionId() <= 0)) { break; } exped = World.Party.getExped(part.getExpeditionId()); if (exped != null) { if (GameConstants.isDojo(c.getPlayer().getMapId())) { Event_DojoAgent.failed(c.getPlayer()); } if (exped.getLeader() == c.getPlayer().getId()) { World.Party.disbandExped(exped.getId()); if (c.getPlayer().getEventInstance() != null) { c.getPlayer().getEventInstance().disbandParty(); } } else if (part.getLeader().getId() == c.getPlayer().getId()) { World.Party.updateParty(part.getId(), PartyOperation.DISBAND, new MaplePartyCharacter(c.getPlayer())); if (c.getPlayer().getEventInstance() != null) { c.getPlayer().getEventInstance().disbandParty(); } World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionLeft(c.getPlayer().getName()), null); } else { World.Party.updateParty(part.getId(), PartyOperation.LEAVE, new MaplePartyCharacter(c.getPlayer())); if (c.getPlayer().getEventInstance() != null) { c.getPlayer().getEventInstance().leftParty(c.getPlayer()); } World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionLeft(c.getPlayer().getName()), null); } if (c.getPlayer().getPyramidSubway() != null) { c.getPlayer().getPyramidSubway().fail(c.getPlayer()); } c.getPlayer().setParty(null); } break; case 80://68 case 138: part = c.getPlayer().getParty(); if ((part == null) || (part.getExpeditionId() <= 0)) { break; } exped = World.Party.getExped(part.getExpeditionId()); if ((exped != null) && (exped.getLeader() == c.getPlayer().getId())) { cid = slea.readInt(); for (i$ = exped.getParties().iterator(); i$.hasNext();) { int i = ((Integer) i$.next()); MapleParty par = World.Party.getParty(i); if (par != null) { MaplePartyCharacter expelled = par.getMemberById(cid); if (expelled != null) { if ((expelled.isOnline()) && (GameConstants.isDojo(c.getPlayer().getMapId()))) { Event_DojoAgent.failed(c.getPlayer()); } World.Party.updateParty(i, PartyOperation.EXPEL, expelled); if ((c.getPlayer().getEventInstance() != null) && (expelled.isOnline())) { c.getPlayer().getEventInstance().disbandParty(); } if ((c.getPlayer().getPyramidSubway() != null) && (expelled.isOnline())) { c.getPlayer().getPyramidSubway().fail(c.getPlayer()); } World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionLeft(expelled.getName()), null); break; } } } } break; case 81://69 case 139: part = c.getPlayer().getParty(); if ((part == null) || (part.getExpeditionId() <= 0)) { break; } exped = World.Party.getExped(part.getExpeditionId()); if ((exped != null) && (exped.getLeader() == c.getPlayer().getId())) { MaplePartyCharacter newleader = part.getMemberById(slea.readInt()); if (newleader != null) { World.Party.updateParty(part.getId(), PartyOperation.CHANGE_LEADER, newleader); exped.setLeader(newleader.getId()); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionLeaderChanged(0), null); } } break; case 82://70 case 140: part = c.getPlayer().getParty(); if ((part == null) || (part.getExpeditionId() <= 0)) { break; } exped = World.Party.getExped(part.getExpeditionId()); if ((exped != null) && (exped.getLeader() == c.getPlayer().getId())) { cid = slea.readInt(); for (i$ = exped.getParties().iterator(); i$.hasNext();) { int i = ((Integer) i$.next()); MapleParty par = World.Party.getParty(i); if (par != null) { MaplePartyCharacter newleader = par.getMemberById(cid); if ((newleader != null) && (par.getId() != part.getId())) { World.Party.updateParty(par.getId(), PartyOperation.CHANGE_LEADER, newleader); } } } } break; case 83://71 case 141: part = c.getPlayer().getParty(); if ((part == null) || (part.getExpeditionId() <= 0)) { break; } exped = World.Party.getExped(part.getExpeditionId()); if ((exped != null) && (exped.getLeader() == c.getPlayer().getId())) { int partyIndexTo = slea.readInt(); if ((partyIndexTo < exped.getType().maxParty) && (partyIndexTo <= exped.getParties().size())) { cid = slea.readInt(); for (i$ = exped.getParties().iterator(); i$.hasNext();) { int i = ((Integer) i$.next()); MapleParty par = World.Party.getParty(i); if (par != null) { MaplePartyCharacter expelled = par.getMemberById(cid); if ((expelled != null) && (expelled.isOnline())) { MapleCharacter chr = World.getStorage(expelled.getChannel()).getCharacterById(expelled.getId()); if (chr == null) { break; } if (partyIndexTo < exped.getParties().size()) { MapleParty party = World.Party.getParty((exped.getParties().get(partyIndexTo)).intValue()); if ((party == null) || (party.getMembers().size() >= 6)) { c.getPlayer().dropMessage(5, "Invalid party."); break; } } if (GameConstants.isDojo(c.getPlayer().getMapId())) { Event_DojoAgent.failed(c.getPlayer()); } World.Party.updateParty(i, PartyOperation.EXPEL, expelled); if (partyIndexTo < exped.getParties().size()) { MapleParty party = World.Party.getParty((exped.getParties().get(partyIndexTo)).intValue()); if ((party != null) && (party.getMembers().size() < 6)) { World.Party.updateParty(party.getId(), PartyOperation.JOIN, expelled); chr.receivePartyMemberHP(); chr.updatePartyMemberHP(); chr.getClient().getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(exped, true, false)); } } else { MapleParty party = World.Party.createPartyAndAdd(expelled, exped.getId()); chr.setParty(party); chr.getClient().getSession().write(CWvsContext.PartyPacket.partyCreated(party)); chr.getClient().getSession().write(CWvsContext.ExpeditionPacket.expeditionStatus(exped, true, false)); World.Party.expedPacket(exped.getId(), CWvsContext.ExpeditionPacket.expeditionUpdate(exped.getIndex(party.getId()), party), null); } if ((c.getPlayer().getEventInstance() != null) && (expelled.isOnline())) { c.getPlayer().getEventInstance().disbandParty(); } if (c.getPlayer().getPyramidSubway() == null) { break; } c.getPlayer().getPyramidSubway().fail(c.getPlayer()); break; } } } } } break; default: if (!c.getPlayer().isGM()) { break; } System.out.println("Unknown Expedition : " + mode + "\n" + slea); } } }