Ejemplo n.º 1
0
  public static final void PartyOperatopn(
      final SeekableLittleEndianAccessor slea, final MapleClient c) {
    final int operation = slea.readByte();
    final WorldChannelInterface wci = ChannelServer.getInstance(c.getChannel()).getWorldInterface();
    MapleParty party = c.getPlayer().getParty();
    MaplePartyCharacter partyplayer = new MaplePartyCharacter(c.getPlayer());

    switch (operation) {
      case 1: // create
        if (c.getPlayer().getParty() == null) {
          try {
            party = wci.createParty(partyplayer);
            c.getPlayer().setParty(party);
          } catch (RemoteException e) {
            c.getChannelServer().reconnectWorld();
          }
          c.getSession().write(MaplePacketCreator.partyCreated());
        } else {
          c.getPlayer().dropMessage(5, "You can't create a party as you are already in one");
        }
        break;
      case 2: // leave
        if (party != null) { // are we in a party? o.O"
          try {
            if (partyplayer.equals(party.getLeader())) { // disband
              wci.updateParty(party.getId(), PartyOperation.DISBAND, partyplayer);
              if (c.getPlayer().getEventInstance() != null) {
                c.getPlayer().getEventInstance().disbandParty();
              }
            } else {
              wci.updateParty(party.getId(), PartyOperation.LEAVE, partyplayer);
              if (c.getPlayer().getEventInstance() != null) {
                c.getPlayer().getEventInstance().leftParty(c.getPlayer());
              }
            }
          } catch (RemoteException e) {
            c.getChannelServer().reconnectWorld();
          }
          c.getPlayer().setParty(null);
        }
        break;
      case 3: // accept invitation
        final int partyid = slea.readInt();
        if (c.getPlayer().getParty() == null) {
          try {
            party = wci.getParty(partyid);
            if (party != null) {
              if (party.getMembers().size() < 6) {
                wci.updateParty(party.getId(), PartyOperation.JOIN, partyplayer);
                c.getPlayer().receivePartyMemberHP();
                c.getPlayer().updatePartyMemberHP();
              } else {
                c.getSession().write(MaplePacketCreator.partyStatusMessage(17));
              }
            } else {
              c.getPlayer().dropMessage(5, "The party you are trying to join does not exist");
            }
          } catch (RemoteException e) {
            c.getChannelServer().reconnectWorld();
          }
        } else {
          c.getPlayer().dropMessage(5, "You can't join the party as you are already in one");
        }
        break;
      case 4: // invite
        // TODO store pending invitations and check against them
        final MapleCharacter invited =
            c.getChannelServer().getPlayerStorage().getCharacterByName(slea.readMapleAsciiString());
        if (invited != null && c.getPlayer().canFuck(invited)) {
          if (invited.getParty() == null) {
            if (party.getMembers().size() < 6) {
              invited.getClient().getSession().write(MaplePacketCreator.partyInvite(c.getPlayer()));
            } else {
              c.getSession().write(MaplePacketCreator.partyStatusMessage(16));
            }
          } else {
            c.getSession().write(MaplePacketCreator.partyStatusMessage(17));
          }
        } else {
          c.getSession().write(MaplePacketCreator.partyStatusMessage(19));
        }
        break;
      case 5: // expel
        if (partyplayer.equals(party.getLeader())) {
          final MaplePartyCharacter expelled = party.getMemberById(slea.readInt());
          if (expelled != null) {
            try {
              wci.updateParty(party.getId(), PartyOperation.EXPEL, expelled);
              if (c.getPlayer().getEventInstance() != null) {
                /*if leader wants to boot someone, then the whole party gets expelled
                TODO: Find an easier way to get the character behind a MaplePartyCharacter
                possibly remove just the expellee.*/
                if (expelled.isOnline()) {
                  c.getPlayer().getEventInstance().disbandParty();
                }
              }

            } catch (RemoteException e) {
              c.getChannelServer().reconnectWorld();
            }
          }
        }
        break;
      case 6: // change leader
        final MaplePartyCharacter newleader = party.getMemberById(slea.readInt());
        try {
          wci.updateParty(party.getId(), PartyOperation.CHANGE_LEADER, newleader);
        } catch (RemoteException e) {
          c.getChannelServer().reconnectWorld();
        }
        break;
      default:
        System.out.println("Unhandled Party function." + operation + "");
        break;
    }
  }