diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt
index e3fa0db244..1324c99121 100644
--- a/docs/mychanges_ptbr.txt
+++ b/docs/mychanges_ptbr.txt
@@ -720,5 +720,7 @@ Corrigido 3o job de Cygnus.
Removido UI que aponta erroneamente "Stat Upgrade" nos níveis 15, 20, 25 e 30.
Adicionado comando "droplimit", cuja funcionalidade é informar ao jogador a quantidade de drops no mapa em contraste com o limite permitido.
-11 Dezembro 2017,
-Resolvido bug onde contador do drops do mapa não atualizaria seu valor em casos onde reatores consomem itens ou ao se aplicar comandos como "cleardrops".
\ No newline at end of file
+11 - 12 Dezembro 2017,
+Resolvido bug onde contador do drops do mapa não atualizaria seu valor em casos onde reatores consomem itens ou ao se aplicar comandos como "cleardrops".
+Corrigido server enviando packets com BroadcastMessage somente para o world 0, ao invés de ser para o world alvo.
+MapleQuestItemFetcher agora mostra quests já expiradas no relatório.
\ No newline at end of file
diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java
index 286896d6df..4309648509 100644
--- a/src/client/MapleCharacter.java
+++ b/src/client/MapleCharacter.java
@@ -6606,8 +6606,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
public void sendPolice(String text) {
String message = getName() + " received this - " + text;
- if (Server.getInstance().isGmOnline()) { //Alert and log if a GM is online
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip(message));
+ if (Server.getInstance().isGmOnline(this.getWorld())) { //Alert and log if a GM is online
+ Server.getInstance().broadcastGMMessage(this.getWorld(), MaplePacketCreator.sendYellowTip(message));
FilePrinter.printError("autobanwarning.txt", message + "\r\n");
} else { //Auto DC and log if no GM is online
client.disconnect(false, false);
@@ -7656,7 +7656,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
client.disconnect(false, false);
}
}, 5000);
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(6, MapleCharacter.makeMapleReadable(this.name) + " was autobanned for " + reason));
+
+ Server.getInstance().broadcastGMMessage(this.getWorld(), MaplePacketCreator.serverNotice(6, MapleCharacter.makeMapleReadable(this.name) + " was autobanned for " + reason));
}
public void block(int reason, int days, String desc) {
diff --git a/src/client/autoban/AutobanFactory.java b/src/client/autoban/AutobanFactory.java
index 66e166a8ff..1d385a587a 100644
--- a/src/client/autoban/AutobanFactory.java
+++ b/src/client/autoban/AutobanFactory.java
@@ -91,7 +91,7 @@ public enum AutobanFactory {
if (chr != null && MapleLogger.ignored.contains(chr.getName())){
return;
}
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip((chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason));
+ Server.getInstance().broadcastGMMessage((chr != null ? chr.getWorld() : 0), MaplePacketCreator.sendYellowTip((chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason));
}
}
diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java
index d219193b83..a13cb42af9 100644
--- a/src/client/command/Commands.java
+++ b/src/client/command/Commands.java
@@ -551,8 +551,8 @@ public class Commands {
break;
}
String message = joinStringFrom(sub, 1);
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip("[GM MESSAGE]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(1, message));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[GM MESSAGE]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
FilePrinter.printError("gm.txt", MapleCharacter.makeMapleReadable(player.getName()) + ": " + message + "\r\n");
player.dropMessage(5, "Your message '" + message + "' was sent to GMs.");
player.dropMessage(5, tips[Randomizer.nextInt(tips.length)]);
@@ -565,8 +565,8 @@ public class Commands {
break;
}
message = joinStringFrom(sub, 1);
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip("[BUG]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(1, message));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[BUG]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
FilePrinter.printError("bug.txt", MapleCharacter.makeMapleReadable(player.getName()) + ": " + message + "\r\n");
player.dropMessage(5, "Your bug '" + message + "' was submitted successfully to our developers. Thank you!");
break;
@@ -881,7 +881,7 @@ public class Commands {
if(victim != null) {
victim.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300166), victim.getPosition());
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(5, player.getName() + " used !bomb on " + victim.getName()));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, player.getName() + " used !bomb on " + victim.getName()));
} else {
player.message("Player '" + sub[1] + "' could not be found on this world.");
}
@@ -1598,7 +1598,7 @@ public class Commands {
}
player.yellowMessage(victim.getName() + " is " + (!monitored ? "now being monitored." : "no longer being monitored."));
String message = player.getName() + (!monitored ? " has started monitoring " : " has stopped monitoring ") + victim.getName() + ".";
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(5, message));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message));
break;
case "monitors":
@@ -1625,7 +1625,7 @@ public class Commands {
}
player.yellowMessage(victim.getName() + " is " + (!monitored_ ? "now being ignored." : "no longer being ignored."));
String message_ = player.getName() + (!monitored_ ? " has started ignoring " : " has stopped ignoring ") + victim.getName() + ".";
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(5, message_));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message_));
break;
case "ignored":
@@ -1754,7 +1754,7 @@ public class Commands {
break;
case "expeds":
- for (Channel ch : Server.getInstance().getChannelsFromWorld(0)) {
+ for (Channel ch : Server.getInstance().getChannelsFromWorld(c.getWorld())) {
if (ch.getExpeditions().size() == 0) {
player.yellowMessage("No Expeditions in Channel " + ch.getId());
continue;
@@ -1789,7 +1789,7 @@ public class Commands {
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
if(victim != null) {
victim.setHpMp(0);
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(5, player.getName() + " used !kill on " + victim.getName()));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, player.getName() + " used !kill on " + victim.getName()));
} else {
player.message("Player '" + sub[1] + "' could not be found on this channel.");
}
@@ -1831,11 +1831,11 @@ public class Commands {
break;
case "notice":
- Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(6, "[Notice] " + joinStringFrom(sub, 1)));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[Notice] " + joinStringFrom(sub, 1)));
break;
case "rip":
- Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(6, "[RIP]: " + joinStringFrom(sub, 1)));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + joinStringFrom(sub, 1)));
break;
case "openportal":
@@ -1964,10 +1964,10 @@ public class Commands {
rip.getClient().disconnect(false, false);
}
}, 5000); //5 Seconds
- Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
} else if (MapleCharacter.ban(ign, reason, false)) {
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
- Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, "[RIP]: " + ign + " has been banned."));
} else {
c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1));
}
@@ -2513,7 +2513,7 @@ public class Commands {
}
}
String message = player.getName() + " used !saveall.";
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(5, message));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(5, message));
player.message("All players saved successfully.");
break;
diff --git a/src/net/server/Server.java b/src/net/server/Server.java
index 70d4d57e3d..0282c68fbe 100644
--- a/src/net/server/Server.java
+++ b/src/net/server/Server.java
@@ -688,20 +688,20 @@ public class Server implements Runnable {
worlda.reloadGuildSummary();
}
- public void broadcastMessage(final byte[] packet) {
- for (Channel ch : getChannelsFromWorld(0)) {
+ public void broadcastMessage(int world, final byte[] packet) {
+ for (Channel ch : getChannelsFromWorld(world)) {
ch.broadcastPacket(packet);
}
}
- public void broadcastGMMessage(final byte[] packet) {
- for (Channel ch : getChannelsFromWorld(0)) {
+ public void broadcastGMMessage(int world, final byte[] packet) {
+ for (Channel ch : getChannelsFromWorld(world)) {
ch.broadcastGMPacket(packet);
}
}
- public boolean isGmOnline() {
- for (Channel ch : getChannelsFromWorld(0)) {
+ public boolean isGmOnline(int world) {
+ for (Channel ch : getChannelsFromWorld(world)) {
for (MapleCharacter player : ch.getPlayerStorage().getAllCharacters()) {
if (player.isGM()){
return true;
diff --git a/src/net/server/channel/handlers/ItemRewardHandler.java b/src/net/server/channel/handlers/ItemRewardHandler.java
index eecdd3bbdc..1d40cf261a 100644
--- a/src/net/server/channel/handlers/ItemRewardHandler.java
+++ b/src/net/server/channel/handlers/ItemRewardHandler.java
@@ -67,7 +67,7 @@ public final class ItemRewardHandler extends AbstractMaplePacketHandler {
String msg = reward.worldmsg;
msg.replaceAll("/name", c.getPlayer().getName());
msg.replaceAll("/item", ii.getName(reward.itemid));
- Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(6, msg));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, msg));
}
break;
}
diff --git a/src/net/server/channel/handlers/PlayerLoggedinHandler.java b/src/net/server/channel/handlers/PlayerLoggedinHandler.java
index 79a4ad6f93..1446ea5e9b 100644
--- a/src/net/server/channel/handlers/PlayerLoggedinHandler.java
+++ b/src/net/server/channel/handlers/PlayerLoggedinHandler.java
@@ -281,7 +281,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
}
*/
if (player.isGM()){
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.earnTitleMessage((player.gmLevel() < 6 ? "GM " : "Admin ") + player.getName() + " has logged in"));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.earnTitleMessage((player.gmLevel() < 6 ? "GM " : "Admin ") + player.getName() + " has logged in"));
}
}
diff --git a/src/net/server/channel/handlers/ReportHandler.java b/src/net/server/channel/handlers/ReportHandler.java
index 4493b06821..17a28596d4 100644
--- a/src/net/server/channel/handlers/ReportHandler.java
+++ b/src/net/server/channel/handlers/ReportHandler.java
@@ -58,7 +58,7 @@ public final class ReportHandler extends AbstractMaplePacketHandler {
c.announce(MaplePacketCreator.reportResponse((byte) 2));
return;
}
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(6, victim + " was reported for: " + description));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, victim + " was reported for: " + description));
addReport(c.getPlayer().getId(), MapleCharacter.getIdByName(victim), 0, description, null);
} else if (type == 1) {
String chatlog = slea.readMapleAsciiString();
@@ -74,10 +74,10 @@ public final class ReportHandler extends AbstractMaplePacketHandler {
return;
}
}
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(6, victim + " was reported for: " + description));
- addReport(c.getPlayer().getId() ,MapleCharacter.getIdByName(victim), reason, description, chatlog);
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, victim + " was reported for: " + description));
+ addReport(c.getPlayer().getId(), MapleCharacter.getIdByName(victim), reason, description, chatlog);
} else {
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(6, c.getPlayer().getName() + " is probably packet editing. Got unknown report type, which is impossible."));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, c.getPlayer().getName() + " is probably packet editing. Got unknown report type, which is impossible."));
}
}
diff --git a/src/net/server/channel/handlers/UseCashItemHandler.java b/src/net/server/channel/handlers/UseCashItemHandler.java
index 8e1159c586..7270271784 100644
--- a/src/net/server/channel/handlers/UseCashItemHandler.java
+++ b/src/net/server/channel/handlers/UseCashItemHandler.java
@@ -277,7 +277,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
}
break;
case 2: // Super megaphone
- Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + slea.readMapleAsciiString(), (slea.readByte() != 0)));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + slea.readMapleAsciiString(), (slea.readByte() != 0)));
break;
case 5: // Maple TV
int tvType = itemId % 10;
@@ -309,7 +309,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
}
slea.readInt();
if (megassenger) {
- Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + builder.toString(), ear));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(3, c.getChannel(), medal + player.getName() + " : " + builder.toString(), ear));
}
if (!MapleTVEffect.isActive()) {
new MapleTVEffect(player, victim, messages, tvType);
@@ -334,7 +334,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
return;
}
}
- Server.getInstance().broadcastMessage(MaplePacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item));
break;
case 7: //triple megaphone
int lines = slea.readByte();
@@ -347,7 +347,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
msg2[i] = medal + c.getPlayer().getName() + " : " + slea.readMapleAsciiString();
}
whisper = slea.readByte() == 1;
- Server.getInstance().broadcastMessage(MaplePacketCreator.getMultiMegaphone(msg2, c.getChannel(), whisper));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.getMultiMegaphone(msg2, c.getChannel(), whisper));
break;
}
remove(c, itemId);
@@ -475,11 +475,13 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
for (int i = 0; i < 4; i++) {
lines.add(slea.readMapleAsciiString());
}
- Server.getInstance().broadcastMessage(MaplePacketCreator.getAvatarMega(c.getPlayer(), medal, c.getChannel(), itemId, lines, (slea.readByte() != 0)));
+
+ final int world = c.getWorld();
+ Server.getInstance().broadcastMessage(world, MaplePacketCreator.getAvatarMega(c.getPlayer(), medal, c.getChannel(), itemId, lines, (slea.readByte() != 0)));
TimerManager.getInstance().schedule(new Runnable() {
@Override
public void run() {
- Server.getInstance().broadcastMessage(MaplePacketCreator.byeAvatarMega());
+ Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega());
}
}, 1000 * 10);
remove(c, itemId);
diff --git a/src/net/server/handlers/login/CreateCharHandler.java b/src/net/server/handlers/login/CreateCharHandler.java
index 53dd4b6c14..010126b249 100644
--- a/src/net/server/handlers/login/CreateCharHandler.java
+++ b/src/net/server/handlers/login/CreateCharHandler.java
@@ -131,6 +131,6 @@ public final class CreateCharHandler extends AbstractMaplePacketHandler {
return;
}
c.announce(MaplePacketCreator.addNewCharEntry(newchar));
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip("[NEW CHAR]: " + c.getAccountName() + " has created a new character with IGN " + name));
+ Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[NEW CHAR]: " + c.getAccountName() + " has created a new character with IGN " + name));
}
}
\ No newline at end of file
diff --git a/src/scripting/npc/NPCConversationManager.java b/src/scripting/npc/NPCConversationManager.java
index 0303ce66ba..090d063194 100644
--- a/src/scripting/npc/NPCConversationManager.java
+++ b/src/scripting/npc/NPCConversationManager.java
@@ -385,7 +385,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
LogHelper.logGacha(getPlayer(), item.getId(), map);
if (item.getTier() > 0){ //Uncommon and Rare
- Server.getInstance().broadcastMessage(MaplePacketCreator.gachaponMessage(itemGained, map, getPlayer()));
+ Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.gachaponMessage(itemGained, map, getPlayer()));
}
}
diff --git a/src/server/MapleItemInformationProvider.java b/src/server/MapleItemInformationProvider.java
index 6c8c6935a3..20cc979404 100644
--- a/src/server/MapleItemInformationProvider.java
+++ b/src/server/MapleItemInformationProvider.java
@@ -1488,7 +1488,7 @@ public class MapleItemInformationProvider {
if (!EquipSlot.getFromTextSlot(islot).isAllowed(dst, isCash(id))) {
equip.wear(false);
String itemName = MapleItemInformationProvider.getInstance().getName(equip.getItemId());
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip("[WARNING]: " + chr.getName() + " tried to equip " + itemName + " into slot " + dst + "."));
+ Server.getInstance().broadcastGMMessage(chr.getWorld(), MaplePacketCreator.sendYellowTip("[WARNING]: " + chr.getName() + " tried to equip " + itemName + " into slot " + dst + "."));
AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to forcibly equip an item.");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to equip " + itemName + " into " + dst + " slot.\r\n");
return false;
diff --git a/src/server/expeditions/MapleExpedition.java b/src/server/expeditions/MapleExpedition.java
index 317cac29df..2b86343323 100644
--- a/src/server/expeditions/MapleExpedition.java
+++ b/src/server/expeditions/MapleExpedition.java
@@ -133,7 +133,7 @@ public class MapleExpedition {
broadcastExped(MaplePacketCreator.removeClock());
broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] The expedition has started! Good luck, brave heroes!"));
startTime = System.currentTimeMillis();
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[Expedition] " + type.toString() + " Expedition started with leader: " + leader.getName()));
+ Server.getInstance().broadcastGMMessage(leader.getWorld(), MaplePacketCreator.serverNotice(6, "[Expedition] " + type.toString() + " Expedition started with leader: " + leader.getName()));
}
public String addMember(MapleCharacter player) {
diff --git a/src/server/maps/MapleMap.java b/src/server/maps/MapleMap.java
index 58897f6401..0ef92dc950 100644
--- a/src/server/maps/MapleMap.java
+++ b/src/server/maps/MapleMap.java
@@ -708,21 +708,22 @@ public class MapleMap {
return droppedItemCount.get();
}
- private void instantiateItemDrop(MapleMapItem mdrop) {
+ private synchronized void instantiateItemDrop(MapleMapItem mdrop) {
if(droppedItemCount.get() >= ServerConstants.ITEM_LIMIT_ON_MAP) {
MapleMapObject mapobj;
- objectWLock.lock();
- try {
- mapobj = registeredDrops.remove(0).get();
- while(mapobj == null) {
+ do {
+ objectWLock.lock();
+ try {
mapobj = registeredDrops.remove(0).get();
+ while(mapobj == null) {
+ if(registeredDrops.isEmpty()) break;
+ mapobj = registeredDrops.remove(0).get();
+ }
+ } finally {
+ objectWLock.unlock();
}
- } finally {
- objectWLock.unlock();
- }
-
- makeDisappearItemFromMap(mapobj);
+ } while (!makeDisappearItemFromMap(mapobj));
}
objectWLock.lock();
@@ -2806,24 +2807,30 @@ public class MapleMap {
return null;
}
- public void makeDisappearItemFromMap(MapleMapObject mapobj) {
+ public boolean makeDisappearItemFromMap(MapleMapObject mapobj) {
if(mapobj instanceof MapleMapItem) {
- makeDisappearItemFromMap((MapleMapItem) mapobj);
+ return makeDisappearItemFromMap((MapleMapItem) mapobj);
+ } else {
+ return mapobj == null; // no drop to make disappear...
}
}
- public void makeDisappearItemFromMap(MapleMapItem mapitem) {
+ public boolean makeDisappearItemFromMap(MapleMapItem mapitem) {
if (mapitem != null && mapitem == getMapObject(mapitem.getObjectId())) {
mapitem.lockItem();
try {
if (mapitem.isPickedUp()) {
- return;
+ return true;
}
+
MapleMap.this.pickItemDrop(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem);
+ return true;
} finally {
mapitem.unlockItem();
}
}
+
+ return false;
}
private class ActivateItemReactor implements Runnable {
diff --git a/src/server/maps/MapleTVEffect.java b/src/server/maps/MapleTVEffect.java
index 6a01fd4277..f11d3090df 100644
--- a/src/server/maps/MapleTVEffect.java
+++ b/src/server/maps/MapleTVEffect.java
@@ -57,8 +57,8 @@ public class MapleTVEffect {
Server server = Server.getInstance();
ACTIVE = activity;
if (ACTIVE) {
- server.broadcastMessage(MaplePacketCreator.enableTV());
- server.broadcastMessage(MaplePacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner));
+ server.broadcastMessage(user.getWorld(), MaplePacketCreator.enableTV());
+ server.broadcastMessage(user.getWorld(), MaplePacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner));
int delay = 15000;
if (type == 4) {
delay = 30000;
@@ -72,7 +72,7 @@ public class MapleTVEffect {
}
}, delay);
} else {
- server.broadcastMessage(MaplePacketCreator.removeTV());
+ server.broadcastMessage(user.getWorld(), MaplePacketCreator.removeTV());
}
}
}
diff --git a/src/tools/LogHelper.java b/src/tools/LogHelper.java
index e7e80c1bba..39903c3698 100644
--- a/src/tools/LogHelper.java
+++ b/src/tools/LogHelper.java
@@ -36,7 +36,7 @@ public class LogHelper {
}
public static void logExpedition(MapleExpedition expedition) {
- Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(6, expedition.getType().toString() + " Expedition with leader " + expedition.getLeader().getName() + " finished after " + getTimeString(expedition.getStartTime())));
+ Server.getInstance().broadcastGMMessage(expedition.getLeader().getWorld(), MaplePacketCreator.serverNotice(6, expedition.getType().toString() + " Expedition with leader " + expedition.getLeader().getName() + " finished after " + getTimeString(expedition.getStartTime())));
String log = expedition.getType().toString() + " EXPEDITION\r\n";
log += getTimeString(expedition.getStartTime()) + "\r\n";
diff --git a/tools/MapleQuestItemFetcher/dist/MapleQuestItemFetcher.jar b/tools/MapleQuestItemFetcher/dist/MapleQuestItemFetcher.jar
index 59e6ab4f35..eecb39f117 100644
Binary files a/tools/MapleQuestItemFetcher/dist/MapleQuestItemFetcher.jar and b/tools/MapleQuestItemFetcher/dist/MapleQuestItemFetcher.jar differ
diff --git a/tools/MapleQuestItemFetcher/lib/QuestReport.txt b/tools/MapleQuestItemFetcher/lib/QuestReport.txt
index b25e0da53c..23c39d930f 100644
--- a/tools/MapleQuestItemFetcher/lib/QuestReport.txt
+++ b/tools/MapleQuestItemFetcher/lib/QuestReport.txt
@@ -29,6 +29,7 @@ INCORRECT QUESTIDS ON DB
4031860 : 6944 -> 6945
4031861 : 6944 -> 6945
4031871 : 6350 -> 28344
+4032324 : 21736 -> 21737
4032339 : 0 -> 21303
@@ -110,7 +111,7 @@ ITEMS WITH NO QUEST DROP DATA ON DB
4031220 - 9210
4031225 - 3606
4031226 - 9321
-4031227 - 4103
+4031227 - 4103 EXPIRED
4031230 - 3619
4031231 - 3620
4031235 - 3607
@@ -233,6 +234,7 @@ ITEMS WITH NO QUEST DROP DATA ON DB
4031812 - 4950
4031833 - 9946
4031837 - 9945
+4031839 - 2162
4031881 - 4484
4031894 - 2214
4031921 - 4646
@@ -288,8 +290,6 @@ ITEMS WITH NO QUEST DROP DATA ON DB
4032318 - 21718
4032319 - 21723
4032321 - 21727
-4032322 - 21731
-4032324 - 21737
4032325 - 21752
4032326 - 21752
4032331 - 21601
@@ -313,13 +313,7 @@ ITEMS WITH NO QUEST DROP DATA ON DB
4032437 - 28321
4032443 - 28317
4032496 - 28238
-4032511 - 3718
4032512 - 3720
-4032513 - 3722
-4032514 - 3727
-4032516 - 3735
-4032517 - 3740
-4032518 - 3743
4161000 - 9322
@@ -340,12 +334,6 @@ COMPLETE QUEST ITEMS WITH ZERO QUANTITY
2054:
4031028
-2162:
- 4031839
-
-2164:
- 4031840
-
2167:
4031841
diff --git a/tools/MapleQuestItemFetcher/nbproject/private/private.xml b/tools/MapleQuestItemFetcher/nbproject/private/private.xml
index 6807a2ba19..531edc4876 100644
--- a/tools/MapleQuestItemFetcher/nbproject/private/private.xml
+++ b/tools/MapleQuestItemFetcher/nbproject/private/private.xml
@@ -2,6 +2,8 @@
-
+
+ file:/C:/Nexon/MapleSolaxia/HeavenMS/tools/MapleQuestItemFetcher/src/maplequestitemfetcher/MapleQuestItemFetcher.java
+
diff --git a/tools/MapleQuestItemFetcher/src/maplequestitemfetcher/MapleQuestItemFetcher.java b/tools/MapleQuestItemFetcher/src/maplequestitemfetcher/MapleQuestItemFetcher.java
index 5986f3e5ba..8231c38585 100644
--- a/tools/MapleQuestItemFetcher/src/maplequestitemfetcher/MapleQuestItemFetcher.java
+++ b/tools/MapleQuestItemFetcher/src/maplequestitemfetcher/MapleQuestItemFetcher.java
@@ -61,7 +61,7 @@ import tools.Pair;
*
* Running it should generate a report file under "lib" folder with the search results.
*
- * Estimated parse time: 1.5 minute
+ * Estimated parse time: 1 minute
*/
public class MapleQuestItemFetcher {
static MapleItemInformationProvider ii;
@@ -91,6 +91,7 @@ public class MapleQuestItemFetcher {
static Map> zeroedStartQuestItems = new HashMap<>();
static Map> zeroedCompleteQuestItems = new HashMap<>();
static Map mixedQuestidItems = new HashMap<>();
+ static Set limitedQuestids = new HashSet<>();
static byte status = 0;
static int questId = -1;
@@ -103,11 +104,13 @@ public class MapleQuestItemFetcher {
int i, j;
char[] dest;
String d;
-
+
i = token.lastIndexOf("name");
i = token.indexOf("\"", i) + 1; //lower bound of the string
j = token.indexOf("\"", i); //upper bound
+ if(j < i) return "0"; //node value containing 'name' in it's scope, cheap fix since we don't deal with strings anyway
+
dest = new char[initialStringLength];
token.getChars(i, j, dest, 0);
@@ -245,8 +248,15 @@ public class MapleQuestItemFetcher {
}
status += 1;
- }
+ } else {
+ if(status == 3) {
+ d = getName(token);
+ if(d.equals("end")) {
+ limitedQuestids.add(questId);
+ }
+ }
+ }
}
private static void calculateQuestItemDiff() {
@@ -414,6 +424,10 @@ public class MapleQuestItemFetcher {
return list;
}
+ private static String getExpiredStringLabel(int questid) {
+ return (!limitedQuestids.contains(questid) ? "" : " EXPIRED");
+ }
+
private static void ReportQuestItemData() {
// This will reference one line at a time
String line = null;
@@ -460,7 +474,7 @@ public class MapleQuestItemFetcher {
printWriter.println("INCORRECT QUESTIDS ON DB");
for(Entry emqi : getSortedMapEntries1(mixedQuestidItems)) {
int[] mqi = emqi.getValue();
- printWriter.println(mqi[0] + " : " + mqi[1] + " -> " + mqi[2]);
+ printWriter.println(mqi[0] + " : " + mqi[1] + " -> " + mqi[2] + getExpiredStringLabel(mqi[2]));
}
printWriter.println("\n\n\n\n\n");
}
@@ -473,7 +487,7 @@ public class MapleQuestItemFetcher {
printWriter.println("ITEMS WITH NO QUEST DROP DATA ON DB");
for(Entry iwq : getSortedMapEntries0(mapIwq)) {
- printWriter.println(iwq.getKey() + " - " + iwq.getValue());
+ printWriter.println(iwq.getKey() + " - " + iwq.getValue() + getExpiredStringLabel(iwq.getValue()));
}
printWriter.println("\n\n\n\n\n");
}
@@ -482,7 +496,7 @@ public class MapleQuestItemFetcher {
if(!zeroedStartQuestItems.isEmpty()) {
printWriter.println("START QUEST ITEMS WITH ZERO QUANTITY");
for(Pair> iwq : getSortedMapEntries2(zeroedStartQuestItems)) {
- printWriter.println(iwq.getLeft() + ":");
+ printWriter.println(iwq.getLeft() + getExpiredStringLabel(iwq.getLeft()) + ":");
for(Integer i : iwq.getRight()) {
printWriter.println(" " + i);
}
@@ -494,7 +508,7 @@ public class MapleQuestItemFetcher {
if(!zeroedCompleteQuestItems.isEmpty()) {
printWriter.println("COMPLETE QUEST ITEMS WITH ZERO QUANTITY");
for(Pair> iwq : getSortedMapEntries2(zeroedCompleteQuestItems)) {
- printWriter.println(iwq.getLeft() + ":");
+ printWriter.println(iwq.getLeft() + getExpiredStringLabel(iwq.getLeft()) + ":");
for(Integer i : iwq.getRight()) {
printWriter.println(" " + i);
}