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:
ronancpl
2017-10-13 03:31:51 -03:00
parent 6e1442af30
commit 1ec7487bd3
96 changed files with 470 additions and 109 deletions

View File

@@ -879,7 +879,7 @@ public class MapleItemInformationProvider {
break;
}
if (!ItemConstants.isCleanSlate(scrollId)) {
if (!assertGM && !usingWhiteScroll) {
if (!assertGM) {
nEquip.setUpgradeSlots((byte) (nEquip.getUpgradeSlots() - 1));
}
nEquip.setLevel((byte) (nEquip.getLevel() + 1));

View File

@@ -23,13 +23,11 @@ package server;
import java.awt.Point;
import java.awt.Rectangle;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import net.server.world.MaplePartyCharacter;
import provider.MapleData;
@@ -896,7 +894,7 @@ public class MapleStatEffect {
door.getTarget().spawnDoor(door.getAreaDoor());
door.getTown().spawnDoor(door.getTownDoor());
applyto.disableDoor();
applyto.disableDoorSpawn();
} else {
MapleInventoryManipulator.addFromDrop(applyto.getClient(), new Item(4006000, (short) 0, (short) 1), false);

View File

@@ -22,6 +22,7 @@
package server.maps;
import java.awt.Point;
import java.util.List;
import tools.Pair;
import server.MaplePortal;
@@ -49,7 +50,7 @@ public class MapleDoor {
if(target.canDeployDoor(targetPosition)) {
if(ServerConstants.USE_ENFORCE_MDOOR_POSITION) {
posStatus = target.getDoorPositionStatus(targetPosition);
posStatus = target.getDoorPositionStatus(targetPosition);
}
if(posStatus == null) {
@@ -74,11 +75,13 @@ public class MapleDoor {
}
private MaplePortal getDoorPortal(int slot) {
List<MaplePortal> avail = town.getAvailableDoorPortals();
try {
return town.getAvailableDoorPortals().get(slot);
return avail.get(slot);
} catch (IndexOutOfBoundsException e) {
try {
return town.getAvailableDoorPortals().get(0);
return avail.get(0);
} catch (IndexOutOfBoundsException ex) {
return null;
}

View File

@@ -1338,6 +1338,27 @@ public class MapleMap {
objectRLock.unlock();
}
}
public List<MapleReactor> getReactorsByIdRange(final int first, final int last) {
List<MapleReactor> list = new LinkedList<>();
objectRLock.lock();
try {
for (MapleMapObject obj : mapobjects.values()) {
if (obj.getType() == MapleMapObjectType.REACTOR) {
MapleReactor mr = (MapleReactor) obj;
if (mr.getId() >= first && mr.getId() <= last) {
list.add(mr);
}
}
}
return list;
} finally {
objectRLock.unlock();
}
}
public MapleReactor getReactorByName(String name) {
objectRLock.lock();
@@ -1607,7 +1628,7 @@ public class MapleMap {
try {
List<MaplePortal> availablePortals = new ArrayList<>();
for (MaplePortal port : getPortals()) {
for (MaplePortal port : portals.values()) {
if (port.getType() == MaplePortal.DOOR_PORTAL) {
availablePortals.add(port);
}
@@ -2117,9 +2138,11 @@ public class MapleMap {
return null;
}
/*
public Collection<MaplePortal> getPortals() {
return Collections.unmodifiableCollection(portals.values());
}
*/
public void removePlayer(MapleCharacter chr) {
chrWLock.lock();