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:
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user