Scheduler free timing for reactor drops
This commit is contained in:
@@ -33,6 +33,7 @@ import server.TimerManager;
|
||||
import server.life.LifeFactory;
|
||||
import server.life.Monster;
|
||||
import server.maps.MapMonitor;
|
||||
import server.maps.MapleMap;
|
||||
import server.maps.Reactor;
|
||||
import server.maps.ReactorDropEntry;
|
||||
import server.partyquest.CarnivalFactory;
|
||||
@@ -43,7 +44,6 @@ import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
/**
|
||||
* @author Lerk
|
||||
@@ -52,7 +52,6 @@ import java.util.concurrent.ScheduledFuture;
|
||||
public class ReactorActionManager extends AbstractPlayerInteraction {
|
||||
private final Reactor reactor;
|
||||
private final Invocable iv;
|
||||
private ScheduledFuture<?> sprayTask = null;
|
||||
|
||||
public ReactorActionManager(Client c, Reactor reactor, Invocable iv) {
|
||||
super(c);
|
||||
@@ -183,33 +182,24 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
||||
drop = ii.randomizeStats((Equip) ii.getEquipById(d.itemId));
|
||||
}
|
||||
|
||||
reactor.getMap().dropFromReactor(getPlayer(), reactor, drop, dropPos, (short) d.questid);
|
||||
reactor.getMap().dropFromReactor(getPlayer(), reactor, drop, dropPos, (short) d.questid, (short) 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
final Reactor r = reactor;
|
||||
final List<ReactorDropEntry> dropItems = items;
|
||||
final int worldMesoRate = c.getWorldServer().getMesoRate();
|
||||
|
||||
dropPos.x -= (12 * items.size());
|
||||
|
||||
// TODO: simply use "delay" drop packet instead of this scheduled task
|
||||
sprayTask = TimerManager.getInstance().register(() -> {
|
||||
if (dropItems.isEmpty()) {
|
||||
sprayTask.cancel(false);
|
||||
return;
|
||||
}
|
||||
|
||||
ReactorDropEntry d = dropItems.remove(0);
|
||||
short delay = 0;
|
||||
for (ReactorDropEntry d : items) {
|
||||
if (d.itemId == 0) {
|
||||
int range = maxMeso - minMeso;
|
||||
int displayDrop = (int) (Math.random() * range) + minMeso;
|
||||
int mesoDrop = (displayDrop * worldMesoRate);
|
||||
r.getMap().spawnMesoDrop(mesoDrop, r.getMap().calcDropPos(dropPos, r.getPosition()), r, chr,
|
||||
false, (byte) 2, (short) 0);
|
||||
int mesoDrop = displayDrop * worldMesoRate;
|
||||
MapleMap map = reactor.getMap();
|
||||
map.spawnMesoDrop(mesoDrop, map.calcDropPos(dropPos, reactor.getPosition()), reactor, chr,
|
||||
false, (byte) 2, delay);
|
||||
} else {
|
||||
Item drop;
|
||||
|
||||
final Item drop;
|
||||
if (ItemConstants.getInventoryType(d.itemId) != InventoryType.EQUIP) {
|
||||
drop = new Item(d.itemId, (short) 0, (short) 1);
|
||||
} else {
|
||||
@@ -217,11 +207,12 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
|
||||
drop = ii.randomizeStats((Equip) ii.getEquipById(d.itemId));
|
||||
}
|
||||
|
||||
r.getMap().dropFromReactor(getPlayer(), r, drop, dropPos, (short) d.questid);
|
||||
reactor.getMap().dropFromReactor(getPlayer(), reactor, drop, dropPos, (short) d.questid, delay);
|
||||
}
|
||||
|
||||
dropPos.x += 25;
|
||||
}, 200);
|
||||
delay += 200;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -795,9 +795,10 @@ public class MapleMap {
|
||||
dropFromMonster(chr, mob, true, (short) 0);
|
||||
}
|
||||
|
||||
public void dropFromReactor(final Character chr, final Reactor reactor, Item drop, Point dropPos, short questid) {
|
||||
public void dropFromReactor(final Character chr, final Reactor reactor, Item drop, Point dropPos, short questid,
|
||||
short delay) {
|
||||
spawnDrop(drop, this.calcDropPos(dropPos, reactor.getPosition()), reactor, chr,
|
||||
(byte) (chr.getParty() != null ? 1 : 0), questid, (short) 0);
|
||||
(byte) (chr.getParty() != null ? 1 : 0), questid, delay);
|
||||
}
|
||||
|
||||
private void stopItemMonitor() {
|
||||
|
||||
Reference in New Issue
Block a user