Quick fix-up + Happyville

Fixed bug introduced on last update regarding events without
event_schedule defined. Added path to Happyville maps, and raid boss
event.
This commit is contained in:
ronancpl
2017-04-26 16:01:12 -03:00
parent 939b214fb5
commit f5fbb038e9
35 changed files with 1138 additions and 422 deletions

View File

@@ -54,29 +54,29 @@ public final class ItemPickupHandler extends AbstractMaplePacketHandler {
if (ob instanceof MapleMapItem) {
MapleMapItem mapitem = (MapleMapItem) ob;
if(System.currentTimeMillis() - mapitem.getDropTime() < 900) {
c.announce(MaplePacketCreator.enableActions());
if(System.currentTimeMillis() - mapitem.getDropTime() < 900) {
c.announce(MaplePacketCreator.enableActions());
return;
}
}
if (mapitem.getItemId() == 4031865 || mapitem.getItemId() == 4031866 || mapitem.getMeso() > 0 || MapleItemInformationProvider.getInstance().isConsumeOnPickup(mapitem.getItemId()) || MapleInventoryManipulator.checkSpace(c, mapitem.getItemId(), mapitem.getItem().getQuantity(), mapitem.getItem().getOwner())) {
if ((chr.getMapId() > 209000000 && chr.getMapId() < 209000016) || (chr.getMapId() >= 990000500 && chr.getMapId() <= 990000502)) {//happyville trees and guild PQ
if (!mapitem.isPlayerDrop() || mapitem.getDropper().getObjectId() == c.getPlayer().getObjectId()) {
if(mapitem.getMeso() > 0) {
chr.gainMeso(mapitem.getMeso(), true, true, false);
chr.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 2, chr.getId()), mapitem.getPosition());
chr.getMap().removeMapObject(ob);
mapitem.setPickedUp(true);
} else if (MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), false)) {
chr.gainMeso(mapitem.getMeso(), true, true, false);
chr.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 2, chr.getId()), mapitem.getPosition());
chr.getMap().removeMapObject(ob);
mapitem.setPickedUp(true);
mapitem.setPickedUp(true);
} else if (MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), false)) {
chr.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 2, chr.getId()), mapitem.getPosition());
chr.getMap().removeMapObject(ob);
mapitem.setPickedUp(true);
} else {
c.announce(MaplePacketCreator.enableActions());
return;
}
} else {
c.announce(MaplePacketCreator.getInventoryFull());
c.announce(MaplePacketCreator.getShowInventoryFull());
c.announce(MaplePacketCreator.showItemUnavailable());
c.announce(MaplePacketCreator.enableActions());
return;
}
c.announce(MaplePacketCreator.enableActions());
@@ -133,7 +133,7 @@ public final class ItemPickupHandler extends AbstractMaplePacketHandler {
return;
}
}
} else if(mapitem.getItemId() == 4031865 || mapitem.getItemId() == 4031866) {
} else if(mapitem.getItemId() == 4031865 || mapitem.getItemId() == 4031866) {
// Add NX to account, show effect and make item disapear
chr.getCashShop().gainCash(1, mapitem.getItemId() == 4031865 ? 100 : 250);
} else if (useItem(c, mapitem.getItem().getItemId())) {
@@ -143,14 +143,14 @@ public final class ItemPickupHandler extends AbstractMaplePacketHandler {
} else if (MapleInventoryManipulator.addFromDrop(c, mapitem.getItem(), true)) {
} else if (mapitem.getItem().getItemId() == 4031868) {
chr.getMap().broadcastMessage(MaplePacketCreator.updateAriantPQRanking(chr.getName(), chr.getItemQuantity(4031868, false), false));
} else {
} else {
c.announce(MaplePacketCreator.enableActions());
return;
}
mapitem.setPickedUp(true);
chr.getMap().broadcastMessage(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 2, chr.getId()), mapitem.getPosition());
chr.getMap().removeMapObject(ob);
}
}
}
}
c.announce(MaplePacketCreator.enableActions());

View File

@@ -318,7 +318,7 @@ public class EventInstanceManager {
wL.unlock();
}
event_schedule.cancel(true);
if(event_schedule != null) event_schedule.cancel(true);
mobs.clear();
killCount.clear();

View File

@@ -92,7 +92,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
int range = maxMeso - minMeso;
int displayDrop = (int) (Math.random() * range) + minMeso;
int mesoDrop = (displayDrop * client.getWorldServer().getMesoRate());
reactor.getMap().spawnMesoDrop(mesoDrop, dropPos, reactor, client.getPlayer(), false, (byte) 2);
reactor.getMap().spawnMesoDrop(mesoDrop, reactor.getMap().calcDropPos(dropPos, reactor.getPosition()), reactor, client.getPlayer(), false, (byte) 2);
} else {
Item drop;
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
@@ -101,7 +101,7 @@ public class ReactorActionManager extends AbstractPlayerInteraction {
} else {
drop = ii.randomizeStats((Equip) ii.getEquipById(d.itemId));
}
reactor.getMap().spawnItemDrop(reactor, getPlayer(), drop, dropPos, false, false);
reactor.getMap().spawnItemDrop(reactor, getPlayer(), drop, reactor.getMap().calcDropPos(dropPos, reactor.getPosition()), false, false);
}
dropPos.x += 25;
}

View File

@@ -498,7 +498,7 @@ public class MapleInventoryManipulator {
if (ii.isDropRestricted(target.getItemId()) || MapleItemInformationProvider.getInstance().isCash(target.getItemId())) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos);
} else {
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos, true, false);
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos, true, true);
}
} else if (ii.isDropRestricted(target.getItemId()) || MapleItemInformationProvider.getInstance().isCash(target.getItemId())) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos);
@@ -515,7 +515,7 @@ public class MapleInventoryManipulator {
if (ii.isDropRestricted(itemId) || ii.isCash(itemId)) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos);
} else {
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos, true, false);
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos, true, true);
}
} else if (ii.isDropRestricted(itemId) || ii.isCash(itemId)) {
c.getPlayer().getMap().disappearingItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos);

View File

@@ -321,6 +321,28 @@ public class MapleItemInformationProvider {
}
return ret;
}
public List<Integer> getItemIdsInRange(int minId, int maxId, boolean ignoreCashItem) {
List<Integer> list = new ArrayList<>();
if(ignoreCashItem) {
for(int i = minId; i <= maxId; i++) {
if(getItemData(i) != null && !isCash(i)) {
list.add(i);
}
}
}
else {
for(int i = minId; i <= maxId; i++) {
if(getItemData(i) != null) {
list.add(i);
}
}
}
return list;
}
public short getSlotMax(MapleClient c, int itemId) {
if (slotMaxCache.containsKey(itemId)) {

View File

@@ -634,7 +634,6 @@ public class MapleMap {
removeMapObject(monster);
monster.dispatchMonsterKilled();
broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), animation), monster.getPosition());
//System.out.println("Counter: " + spawnedMonstersOnMap.toString() + " Size: " + countAllMonsters());
return;
}
if (monster.getStats().getLevel() >= chr.getLevel() + 30 && !chr.isGM()) {
@@ -702,6 +701,7 @@ public class MapleMap {
}
}
}
MapleCharacter dropOwner = monster.killBy(chr);
if (withDrops && !monster.dropsDisabled()) {
if (dropOwner == null) {
@@ -712,7 +712,6 @@ public class MapleMap {
monster.dispatchMonsterKilled();
broadcastMessage(MaplePacketCreator.killMonster(monster.getObjectId(), animation), monster.getPosition());
//System.out.println("Counter: " + spawnedMonstersOnMap.toString() + " Size: " + countAllMonsters());
}
public void killFriendlies(MapleMonster mob) {
@@ -737,6 +736,8 @@ public class MapleMap {
}
public void softKillAllMonsters() {
for (MapleMapObject monstermo : getMapObjectsInRange(new Point(0, 0), Double.POSITIVE_INFINITY, Arrays.asList(MapleMapObjectType.MONSTER))) {
MapleMonster monster = (MapleMonster) monstermo;
if (monster.getStats().isFriendly()) {
@@ -1331,6 +1332,48 @@ public class MapleMap {
activateItemReactors(drop, owner.getClient());
}
}
public final void spawnItemDropList(List<Integer> list, final MapleMapObject dropper, final MapleCharacter owner, Point pos) {
spawnItemDropList(list, 1, 1, dropper, owner, pos, true, false);
}
public final void spawnItemDropList(List<Integer> list, int minCopies, int maxCopies, final MapleMapObject dropper, final MapleCharacter owner, Point pos) {
spawnItemDropList(list, minCopies, maxCopies, dropper, owner, pos, true, false);
}
// spawns item instances of all defined item ids on a list
public final void spawnItemDropList(List<Integer> list, int minCopies, int maxCopies, final MapleMapObject dropper, final MapleCharacter owner, Point pos, final boolean ffaDrop, final boolean playerDrop) {
int copies = (maxCopies - minCopies) + 1;
if(copies < 1) return;
Collections.shuffle(list);
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
Random rnd = new Random();
final Point dropPos = new Point(pos);
dropPos.x -= (12 * list.size());
for(int i = 0; i < list.size(); i++) {
if(list.get(i) == 0) {
spawnMesoDrop(owner != null ? 10 * owner.getMesoRate() : 10, calcDropPos(dropPos, pos), dropper, owner, playerDrop, (byte) (ffaDrop ? 2 : 0));
}
else {
final Item drop;
int randomedId = list.get(i);
if (ii.getInventoryType(randomedId) != MapleInventoryType.EQUIP) {
drop = new Item(randomedId, (short) 0, (short) (rnd.nextInt(copies) + minCopies));
} else {
drop = ii.randomizeStats((Equip) ii.getEquipById(randomedId));
}
spawnItemDrop(dropper, owner, drop, calcDropPos(dropPos, pos), ffaDrop, playerDrop);
}
dropPos.x += 25;
}
}
private void activateItemReactors(final MapleMapItem drop, final MapleClient c) {
final Item item = drop.getItem();

View File

@@ -194,7 +194,7 @@ public class MapleMapFactory {
}
map.setClock(mapData.getChildByPath("clock") != null);
map.setEverlast(mapData.getChildByPath("everlast") != null);
map.setEverlast(mapData.getChildByPath("info/everlast") != null);
map.setTown(mapData.getChildByPath("info/town") != null);
map.setHPDec(MapleDataTool.getIntConvert("info/decHP", mapData, 0));
map.setHPDecProtect(MapleDataTool.getIntConvert("info/protectItem", mapData, 0));

View File

@@ -34,7 +34,7 @@ public class MapleMapItem extends AbstractMapleMapObject {
protected int character_ownerid, meso, questid = -1;
protected byte type;
protected boolean pickedUp = false, playerDrop;
protected long dropTime;
protected long dropTime;
public ReentrantLock itemLock = new ReentrantLock();
public MapleMapItem(Item item, Point position, MapleMapObject dropper, MapleCharacter owner, byte type, boolean playerDrop) {

View File

@@ -29,7 +29,8 @@ public enum SavedLocationType {
INTRO,
SUNDAY_MARKET,
MIRROR,
DOJO;
DOJO,
HAPPYVILLE;
public static SavedLocationType fromString(String Str) {
return valueOf(Str);