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