White scroll & PiratePQ fix + Party for starters + concurrency protection on event scripts
Fixed successful scrolled items not using up an upgrade slot when using white scroll. Fixed some issues with the PiratePQ and added a "clear all boxes to complete a stage"-mode. Added "Party for Starters" feature. Added concurrency protection on event script modules.
This commit is contained in:
@@ -30,11 +30,38 @@ import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
import client.MapleCharacter;
|
||||
import client.MapleClient;
|
||||
import constants.ServerConstants;
|
||||
import scripting.event.EventInstanceManager;
|
||||
import server.maps.MapleMap;
|
||||
|
||||
public final class PartyOperationHandler extends AbstractMaplePacketHandler {
|
||||
|
||||
public static void leaveParty(MapleParty party, MaplePartyCharacter partyplayer, MapleClient c) {
|
||||
World world = c.getWorldServer();
|
||||
MapleCharacter player = c.getPlayer();
|
||||
|
||||
if (party != null && partyplayer != null) {
|
||||
if (partyplayer.getId() == party.getLeaderId()) {
|
||||
c.getWorldServer().removeMapPartyMembers(party.getId());
|
||||
|
||||
world.updateParty(party.getId(), PartyOperation.DISBAND, partyplayer);
|
||||
if (player.getEventInstance() != null) {
|
||||
player.getEventInstance().disbandParty();
|
||||
}
|
||||
} else {
|
||||
player.getMap().removePartyMember(player);
|
||||
|
||||
world.updateParty(party.getId(), PartyOperation.LEAVE, partyplayer);
|
||||
if (player.getEventInstance() != null) {
|
||||
player.getEventInstance().leftParty(player);
|
||||
}
|
||||
}
|
||||
|
||||
player.setParty(null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
|
||||
int operation = slea.readByte();
|
||||
MapleCharacter player = c.getPlayer();
|
||||
@@ -43,46 +70,28 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler {
|
||||
MaplePartyCharacter partyplayer = player.getMPC();
|
||||
switch (operation) {
|
||||
case 1: { // create
|
||||
if(player.getLevel() < 10) {
|
||||
c.announce(MaplePacketCreator.partyStatusMessage(10));
|
||||
return;
|
||||
if(player.getLevel() < 10 && !ServerConstants.USE_PARTY_FOR_STARTERS) {
|
||||
c.announce(MaplePacketCreator.partyStatusMessage(10));
|
||||
return;
|
||||
}
|
||||
if (player.getParty() == null) {
|
||||
partyplayer = new MaplePartyCharacter(player);
|
||||
party = world.createParty(partyplayer);
|
||||
player.setParty(party);
|
||||
player.setMPC(partyplayer);
|
||||
player.getMap().addPartyMember(player);
|
||||
player.silentPartyUpdate();
|
||||
c.announce(MaplePacketCreator.partyCreated(partyplayer));
|
||||
partyplayer = new MaplePartyCharacter(player);
|
||||
party = world.createParty(partyplayer);
|
||||
player.setParty(party);
|
||||
player.setMPC(partyplayer);
|
||||
player.getMap().addPartyMember(player);
|
||||
player.silentPartyUpdate();
|
||||
c.announce(MaplePacketCreator.partyCreated(partyplayer));
|
||||
} else {
|
||||
c.announce(MaplePacketCreator.serverNotice(5, "You can't create a party as you are already in one."));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
if (party != null && partyplayer != null) {
|
||||
if (partyplayer.getId() == party.getLeaderId()) {
|
||||
c.getWorldServer().removeMapPartyMembers(party.getId());
|
||||
|
||||
world.updateParty(party.getId(), PartyOperation.DISBAND, partyplayer);
|
||||
if (player.getEventInstance() != null) {
|
||||
player.getEventInstance().disbandParty();
|
||||
}
|
||||
} else {
|
||||
player.getMap().removePartyMember(player);
|
||||
|
||||
world.updateParty(party.getId(), PartyOperation.LEAVE, partyplayer);
|
||||
if (player.getEventInstance() != null) {
|
||||
player.getEventInstance().leftParty(player);
|
||||
}
|
||||
}
|
||||
|
||||
player.setParty(null);
|
||||
}
|
||||
case 2: { // leave/disband
|
||||
leaveParty(party, partyplayer, c);
|
||||
break;
|
||||
}
|
||||
case 3: {//join
|
||||
case 3: { // join
|
||||
int partyid = slea.readInt();
|
||||
if (c.getPlayer().getParty() == null) {
|
||||
party = world.getParty(partyid);
|
||||
@@ -105,16 +114,26 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 4: {//invite
|
||||
case 4: { // invite
|
||||
String name = slea.readMapleAsciiString();
|
||||
MapleCharacter invited = world.getPlayerStorage().getCharacterByName(name);
|
||||
if (invited != null) {
|
||||
if(invited.getLevel() < 10) { //min requirement is level 10
|
||||
c.announce(MaplePacketCreator.serverNotice(5, "The player you have invited does not meet the requirements."));
|
||||
return;
|
||||
if(invited.getLevel() < 10 && (!ServerConstants.USE_PARTY_FOR_STARTERS || player.getLevel() >= 10)) { //min requirement is level 10
|
||||
c.announce(MaplePacketCreator.serverNotice(5, "The player you have invited does not meet the requirements."));
|
||||
return;
|
||||
}
|
||||
if(ServerConstants.USE_PARTY_FOR_STARTERS && invited.getLevel() >= 10 && player.getLevel() < 10) { //trying to invite high level
|
||||
c.announce(MaplePacketCreator.serverNotice(5, "The player you have invited does not meet the requirements."));
|
||||
return;
|
||||
}
|
||||
|
||||
if (invited.getParty() == null) {
|
||||
if (player.getParty() == null) {
|
||||
if(player.getLevel() < 10 && !ServerConstants.USE_PARTY_FOR_STARTERS) {
|
||||
c.announce(MaplePacketCreator.partyStatusMessage(10));
|
||||
return;
|
||||
}
|
||||
|
||||
partyplayer = new MaplePartyCharacter(player);
|
||||
party = world.createParty(partyplayer);
|
||||
player.setParty(party);
|
||||
@@ -158,7 +177,7 @@ public final class PartyOperationHandler extends AbstractMaplePacketHandler {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 6: {
|
||||
case 6: { // change leader
|
||||
int newLeader = slea.readInt();
|
||||
MaplePartyCharacter newLeadr = party.getMemberById(newLeader);
|
||||
world.updateParty(party.getId(), PartyOperation.CHANGE_LEADER, newLeadr);
|
||||
|
||||
Reference in New Issue
Block a user