Server broadcastMessage to worlds & MapleQuestItemFetcher update
Fixed a bug with the map drop mechanics sometimes permitting over the max drop count in certain circumstances. Fixed server broadcastMessage always broadcasting packets at world 0, even if the caller is from another world id. Improved the MapleQuestItemFetcher, now displaying expired quests alongside the reported info.
This commit is contained in:
@@ -720,5 +720,7 @@ Corrigido 3o job de Cygnus.
|
|||||||
Removido UI que aponta erroneamente "Stat Upgrade" nos níveis 15, 20, 25 e 30.
|
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.
|
Adicionado comando "droplimit", cuja funcionalidade é informar ao jogador a quantidade de drops no mapa em contraste com o limite permitido.
|
||||||
|
|
||||||
11 Dezembro 2017,
|
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".
|
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.
|
||||||
@@ -6606,8 +6606,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
|||||||
|
|
||||||
public void sendPolice(String text) {
|
public void sendPolice(String text) {
|
||||||
String message = getName() + " received this - " + text;
|
String message = getName() + " received this - " + text;
|
||||||
if (Server.getInstance().isGmOnline()) { //Alert and log if a GM is online
|
if (Server.getInstance().isGmOnline(this.getWorld())) { //Alert and log if a GM is online
|
||||||
Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip(message));
|
Server.getInstance().broadcastGMMessage(this.getWorld(), MaplePacketCreator.sendYellowTip(message));
|
||||||
FilePrinter.printError("autobanwarning.txt", message + "\r\n");
|
FilePrinter.printError("autobanwarning.txt", message + "\r\n");
|
||||||
} else { //Auto DC and log if no GM is online
|
} else { //Auto DC and log if no GM is online
|
||||||
client.disconnect(false, false);
|
client.disconnect(false, false);
|
||||||
@@ -7656,7 +7656,8 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
|||||||
client.disconnect(false, false);
|
client.disconnect(false, false);
|
||||||
}
|
}
|
||||||
}, 5000);
|
}, 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) {
|
public void block(int reason, int days, String desc) {
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public enum AutobanFactory {
|
|||||||
if (chr != null && MapleLogger.ignored.contains(chr.getName())){
|
if (chr != null && MapleLogger.ignored.contains(chr.getName())){
|
||||||
return;
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -551,8 +551,8 @@ public class Commands {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
String message = joinStringFrom(sub, 1);
|
String message = joinStringFrom(sub, 1);
|
||||||
Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip("[GM MESSAGE]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
|
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[GM MESSAGE]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
|
||||||
Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(1, message));
|
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
|
||||||
FilePrinter.printError("gm.txt", MapleCharacter.makeMapleReadable(player.getName()) + ": " + message + "\r\n");
|
FilePrinter.printError("gm.txt", MapleCharacter.makeMapleReadable(player.getName()) + ": " + message + "\r\n");
|
||||||
player.dropMessage(5, "Your message '" + message + "' was sent to GMs.");
|
player.dropMessage(5, "Your message '" + message + "' was sent to GMs.");
|
||||||
player.dropMessage(5, tips[Randomizer.nextInt(tips.length)]);
|
player.dropMessage(5, tips[Randomizer.nextInt(tips.length)]);
|
||||||
@@ -565,8 +565,8 @@ public class Commands {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
message = joinStringFrom(sub, 1);
|
message = joinStringFrom(sub, 1);
|
||||||
Server.getInstance().broadcastGMMessage(MaplePacketCreator.sendYellowTip("[BUG]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
|
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[BUG]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
|
||||||
Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(1, message));
|
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
|
||||||
FilePrinter.printError("bug.txt", MapleCharacter.makeMapleReadable(player.getName()) + ": " + message + "\r\n");
|
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!");
|
player.dropMessage(5, "Your bug '" + message + "' was submitted successfully to our developers. Thank you!");
|
||||||
break;
|
break;
|
||||||
@@ -881,7 +881,7 @@ public class Commands {
|
|||||||
|
|
||||||
if(victim != null) {
|
if(victim != null) {
|
||||||
victim.getMap().spawnMonsterOnGroundBelow(MapleLifeFactory.getMonster(9300166), victim.getPosition());
|
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 {
|
} else {
|
||||||
player.message("Player '" + sub[1] + "' could not be found on this world.");
|
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."));
|
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() + ".";
|
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;
|
break;
|
||||||
|
|
||||||
case "monitors":
|
case "monitors":
|
||||||
@@ -1625,7 +1625,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
player.yellowMessage(victim.getName() + " is " + (!monitored_ ? "now being ignored." : "no longer being ignored."));
|
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() + ".";
|
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;
|
break;
|
||||||
|
|
||||||
case "ignored":
|
case "ignored":
|
||||||
@@ -1754,7 +1754,7 @@ public class Commands {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "expeds":
|
case "expeds":
|
||||||
for (Channel ch : Server.getInstance().getChannelsFromWorld(0)) {
|
for (Channel ch : Server.getInstance().getChannelsFromWorld(c.getWorld())) {
|
||||||
if (ch.getExpeditions().size() == 0) {
|
if (ch.getExpeditions().size() == 0) {
|
||||||
player.yellowMessage("No Expeditions in Channel " + ch.getId());
|
player.yellowMessage("No Expeditions in Channel " + ch.getId());
|
||||||
continue;
|
continue;
|
||||||
@@ -1789,7 +1789,7 @@ public class Commands {
|
|||||||
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
|
victim = cserv.getPlayerStorage().getCharacterByName(sub[1]);
|
||||||
if(victim != null) {
|
if(victim != null) {
|
||||||
victim.setHpMp(0);
|
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 {
|
} else {
|
||||||
player.message("Player '" + sub[1] + "' could not be found on this channel.");
|
player.message("Player '" + sub[1] + "' could not be found on this channel.");
|
||||||
}
|
}
|
||||||
@@ -1831,11 +1831,11 @@ public class Commands {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case "notice":
|
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;
|
break;
|
||||||
|
|
||||||
case "rip":
|
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;
|
break;
|
||||||
|
|
||||||
case "openportal":
|
case "openportal":
|
||||||
@@ -1964,10 +1964,10 @@ public class Commands {
|
|||||||
rip.getClient().disconnect(false, false);
|
rip.getClient().disconnect(false, false);
|
||||||
}
|
}
|
||||||
}, 5000); //5 Seconds
|
}, 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)) {
|
} else if (MapleCharacter.ban(ign, reason, false)) {
|
||||||
c.announce(MaplePacketCreator.getGMEffect(4, (byte) 0));
|
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 {
|
} else {
|
||||||
c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1));
|
c.announce(MaplePacketCreator.getGMEffect(6, (byte) 1));
|
||||||
}
|
}
|
||||||
@@ -2513,7 +2513,7 @@ public class Commands {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
String message = player.getName() + " used !saveall.";
|
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.");
|
player.message("All players saved successfully.");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -688,20 +688,20 @@ public class Server implements Runnable {
|
|||||||
worlda.reloadGuildSummary();
|
worlda.reloadGuildSummary();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastMessage(final byte[] packet) {
|
public void broadcastMessage(int world, final byte[] packet) {
|
||||||
for (Channel ch : getChannelsFromWorld(0)) {
|
for (Channel ch : getChannelsFromWorld(world)) {
|
||||||
ch.broadcastPacket(packet);
|
ch.broadcastPacket(packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void broadcastGMMessage(final byte[] packet) {
|
public void broadcastGMMessage(int world, final byte[] packet) {
|
||||||
for (Channel ch : getChannelsFromWorld(0)) {
|
for (Channel ch : getChannelsFromWorld(world)) {
|
||||||
ch.broadcastGMPacket(packet);
|
ch.broadcastGMPacket(packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isGmOnline() {
|
public boolean isGmOnline(int world) {
|
||||||
for (Channel ch : getChannelsFromWorld(0)) {
|
for (Channel ch : getChannelsFromWorld(world)) {
|
||||||
for (MapleCharacter player : ch.getPlayerStorage().getAllCharacters()) {
|
for (MapleCharacter player : ch.getPlayerStorage().getAllCharacters()) {
|
||||||
if (player.isGM()){
|
if (player.isGM()){
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public final class ItemRewardHandler extends AbstractMaplePacketHandler {
|
|||||||
String msg = reward.worldmsg;
|
String msg = reward.worldmsg;
|
||||||
msg.replaceAll("/name", c.getPlayer().getName());
|
msg.replaceAll("/name", c.getPlayer().getName());
|
||||||
msg.replaceAll("/item", ii.getName(reward.itemid));
|
msg.replaceAll("/item", ii.getName(reward.itemid));
|
||||||
Server.getInstance().broadcastMessage(MaplePacketCreator.serverNotice(6, msg));
|
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.serverNotice(6, msg));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if (player.isGM()){
|
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"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public final class ReportHandler extends AbstractMaplePacketHandler {
|
|||||||
c.announce(MaplePacketCreator.reportResponse((byte) 2));
|
c.announce(MaplePacketCreator.reportResponse((byte) 2));
|
||||||
return;
|
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);
|
addReport(c.getPlayer().getId(), MapleCharacter.getIdByName(victim), 0, description, null);
|
||||||
} else if (type == 1) {
|
} else if (type == 1) {
|
||||||
String chatlog = slea.readMapleAsciiString();
|
String chatlog = slea.readMapleAsciiString();
|
||||||
@@ -74,10 +74,10 @@ public final class ReportHandler extends AbstractMaplePacketHandler {
|
|||||||
return;
|
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), reason, description, chatlog);
|
addReport(c.getPlayer().getId(), MapleCharacter.getIdByName(victim), reason, description, chatlog);
|
||||||
} else {
|
} 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."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -277,7 +277,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: // Super megaphone
|
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;
|
break;
|
||||||
case 5: // Maple TV
|
case 5: // Maple TV
|
||||||
int tvType = itemId % 10;
|
int tvType = itemId % 10;
|
||||||
@@ -309,7 +309,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
|||||||
}
|
}
|
||||||
slea.readInt();
|
slea.readInt();
|
||||||
if (megassenger) {
|
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()) {
|
if (!MapleTVEffect.isActive()) {
|
||||||
new MapleTVEffect(player, victim, messages, tvType);
|
new MapleTVEffect(player, victim, messages, tvType);
|
||||||
@@ -334,7 +334,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Server.getInstance().broadcastMessage(MaplePacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item));
|
Server.getInstance().broadcastMessage(c.getWorld(), MaplePacketCreator.itemMegaphone(msg, whisper, c.getChannel(), item));
|
||||||
break;
|
break;
|
||||||
case 7: //triple megaphone
|
case 7: //triple megaphone
|
||||||
int lines = slea.readByte();
|
int lines = slea.readByte();
|
||||||
@@ -347,7 +347,7 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
|||||||
msg2[i] = medal + c.getPlayer().getName() + " : " + slea.readMapleAsciiString();
|
msg2[i] = medal + c.getPlayer().getName() + " : " + slea.readMapleAsciiString();
|
||||||
}
|
}
|
||||||
whisper = slea.readByte() == 1;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
remove(c, itemId);
|
remove(c, itemId);
|
||||||
@@ -475,11 +475,13 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
|||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
lines.add(slea.readMapleAsciiString());
|
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() {
|
TimerManager.getInstance().schedule(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Server.getInstance().broadcastMessage(MaplePacketCreator.byeAvatarMega());
|
Server.getInstance().broadcastMessage(world, MaplePacketCreator.byeAvatarMega());
|
||||||
}
|
}
|
||||||
}, 1000 * 10);
|
}, 1000 * 10);
|
||||||
remove(c, itemId);
|
remove(c, itemId);
|
||||||
|
|||||||
@@ -131,6 +131,6 @@ public final class CreateCharHandler extends AbstractMaplePacketHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
c.announce(MaplePacketCreator.addNewCharEntry(newchar));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -385,7 +385,7 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
|||||||
LogHelper.logGacha(getPlayer(), item.getId(), map);
|
LogHelper.logGacha(getPlayer(), item.getId(), map);
|
||||||
|
|
||||||
if (item.getTier() > 0){ //Uncommon and Rare
|
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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1488,7 +1488,7 @@ public class MapleItemInformationProvider {
|
|||||||
if (!EquipSlot.getFromTextSlot(islot).isAllowed(dst, isCash(id))) {
|
if (!EquipSlot.getFromTextSlot(islot).isAllowed(dst, isCash(id))) {
|
||||||
equip.wear(false);
|
equip.wear(false);
|
||||||
String itemName = MapleItemInformationProvider.getInstance().getName(equip.getItemId());
|
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.");
|
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");
|
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to equip " + itemName + " into " + dst + " slot.\r\n");
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ public class MapleExpedition {
|
|||||||
broadcastExped(MaplePacketCreator.removeClock());
|
broadcastExped(MaplePacketCreator.removeClock());
|
||||||
broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] The expedition has started! Good luck, brave heroes!"));
|
broadcastExped(MaplePacketCreator.serverNotice(6, "[Expedition] The expedition has started! Good luck, brave heroes!"));
|
||||||
startTime = System.currentTimeMillis();
|
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) {
|
public String addMember(MapleCharacter player) {
|
||||||
|
|||||||
@@ -708,21 +708,22 @@ public class MapleMap {
|
|||||||
return droppedItemCount.get();
|
return droppedItemCount.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void instantiateItemDrop(MapleMapItem mdrop) {
|
private synchronized void instantiateItemDrop(MapleMapItem mdrop) {
|
||||||
if(droppedItemCount.get() >= ServerConstants.ITEM_LIMIT_ON_MAP) {
|
if(droppedItemCount.get() >= ServerConstants.ITEM_LIMIT_ON_MAP) {
|
||||||
MapleMapObject mapobj;
|
MapleMapObject mapobj;
|
||||||
|
|
||||||
objectWLock.lock();
|
do {
|
||||||
try {
|
objectWLock.lock();
|
||||||
mapobj = registeredDrops.remove(0).get();
|
try {
|
||||||
while(mapobj == null) {
|
|
||||||
mapobj = registeredDrops.remove(0).get();
|
mapobj = registeredDrops.remove(0).get();
|
||||||
|
while(mapobj == null) {
|
||||||
|
if(registeredDrops.isEmpty()) break;
|
||||||
|
mapobj = registeredDrops.remove(0).get();
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
objectWLock.unlock();
|
||||||
}
|
}
|
||||||
} finally {
|
} while (!makeDisappearItemFromMap(mapobj));
|
||||||
objectWLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
makeDisappearItemFromMap(mapobj);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
objectWLock.lock();
|
objectWLock.lock();
|
||||||
@@ -2806,24 +2807,30 @@ public class MapleMap {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void makeDisappearItemFromMap(MapleMapObject mapobj) {
|
public boolean makeDisappearItemFromMap(MapleMapObject mapobj) {
|
||||||
if(mapobj instanceof MapleMapItem) {
|
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())) {
|
if (mapitem != null && mapitem == getMapObject(mapitem.getObjectId())) {
|
||||||
mapitem.lockItem();
|
mapitem.lockItem();
|
||||||
try {
|
try {
|
||||||
if (mapitem.isPickedUp()) {
|
if (mapitem.isPickedUp()) {
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
MapleMap.this.pickItemDrop(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem);
|
MapleMap.this.pickItemDrop(MaplePacketCreator.removeItemFromMap(mapitem.getObjectId(), 0, 0), mapitem);
|
||||||
|
return true;
|
||||||
} finally {
|
} finally {
|
||||||
mapitem.unlockItem();
|
mapitem.unlockItem();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ActivateItemReactor implements Runnable {
|
private class ActivateItemReactor implements Runnable {
|
||||||
|
|||||||
@@ -57,8 +57,8 @@ public class MapleTVEffect {
|
|||||||
Server server = Server.getInstance();
|
Server server = Server.getInstance();
|
||||||
ACTIVE = activity;
|
ACTIVE = activity;
|
||||||
if (ACTIVE) {
|
if (ACTIVE) {
|
||||||
server.broadcastMessage(MaplePacketCreator.enableTV());
|
server.broadcastMessage(user.getWorld(), MaplePacketCreator.enableTV());
|
||||||
server.broadcastMessage(MaplePacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner));
|
server.broadcastMessage(user.getWorld(), MaplePacketCreator.sendTV(user, message, type <= 2 ? type : type - 3, partner));
|
||||||
int delay = 15000;
|
int delay = 15000;
|
||||||
if (type == 4) {
|
if (type == 4) {
|
||||||
delay = 30000;
|
delay = 30000;
|
||||||
@@ -72,7 +72,7 @@ public class MapleTVEffect {
|
|||||||
}
|
}
|
||||||
}, delay);
|
}, delay);
|
||||||
} else {
|
} else {
|
||||||
server.broadcastMessage(MaplePacketCreator.removeTV());
|
server.broadcastMessage(user.getWorld(), MaplePacketCreator.removeTV());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class LogHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void logExpedition(MapleExpedition expedition) {
|
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";
|
String log = expedition.getType().toString() + " EXPEDITION\r\n";
|
||||||
log += getTimeString(expedition.getStartTime()) + "\r\n";
|
log += getTimeString(expedition.getStartTime()) + "\r\n";
|
||||||
|
|||||||
Binary file not shown.
@@ -29,6 +29,7 @@ INCORRECT QUESTIDS ON DB
|
|||||||
4031860 : 6944 -> 6945
|
4031860 : 6944 -> 6945
|
||||||
4031861 : 6944 -> 6945
|
4031861 : 6944 -> 6945
|
||||||
4031871 : 6350 -> 28344
|
4031871 : 6350 -> 28344
|
||||||
|
4032324 : 21736 -> 21737
|
||||||
4032339 : 0 -> 21303
|
4032339 : 0 -> 21303
|
||||||
|
|
||||||
|
|
||||||
@@ -110,7 +111,7 @@ ITEMS WITH NO QUEST DROP DATA ON DB
|
|||||||
4031220 - 9210
|
4031220 - 9210
|
||||||
4031225 - 3606
|
4031225 - 3606
|
||||||
4031226 - 9321
|
4031226 - 9321
|
||||||
4031227 - 4103
|
4031227 - 4103 EXPIRED
|
||||||
4031230 - 3619
|
4031230 - 3619
|
||||||
4031231 - 3620
|
4031231 - 3620
|
||||||
4031235 - 3607
|
4031235 - 3607
|
||||||
@@ -233,6 +234,7 @@ ITEMS WITH NO QUEST DROP DATA ON DB
|
|||||||
4031812 - 4950
|
4031812 - 4950
|
||||||
4031833 - 9946
|
4031833 - 9946
|
||||||
4031837 - 9945
|
4031837 - 9945
|
||||||
|
4031839 - 2162
|
||||||
4031881 - 4484
|
4031881 - 4484
|
||||||
4031894 - 2214
|
4031894 - 2214
|
||||||
4031921 - 4646
|
4031921 - 4646
|
||||||
@@ -288,8 +290,6 @@ ITEMS WITH NO QUEST DROP DATA ON DB
|
|||||||
4032318 - 21718
|
4032318 - 21718
|
||||||
4032319 - 21723
|
4032319 - 21723
|
||||||
4032321 - 21727
|
4032321 - 21727
|
||||||
4032322 - 21731
|
|
||||||
4032324 - 21737
|
|
||||||
4032325 - 21752
|
4032325 - 21752
|
||||||
4032326 - 21752
|
4032326 - 21752
|
||||||
4032331 - 21601
|
4032331 - 21601
|
||||||
@@ -313,13 +313,7 @@ ITEMS WITH NO QUEST DROP DATA ON DB
|
|||||||
4032437 - 28321
|
4032437 - 28321
|
||||||
4032443 - 28317
|
4032443 - 28317
|
||||||
4032496 - 28238
|
4032496 - 28238
|
||||||
4032511 - 3718
|
|
||||||
4032512 - 3720
|
4032512 - 3720
|
||||||
4032513 - 3722
|
|
||||||
4032514 - 3727
|
|
||||||
4032516 - 3735
|
|
||||||
4032517 - 3740
|
|
||||||
4032518 - 3743
|
|
||||||
4161000 - 9322
|
4161000 - 9322
|
||||||
|
|
||||||
|
|
||||||
@@ -340,12 +334,6 @@ COMPLETE QUEST ITEMS WITH ZERO QUANTITY
|
|||||||
2054:
|
2054:
|
||||||
4031028
|
4031028
|
||||||
|
|
||||||
2162:
|
|
||||||
4031839
|
|
||||||
|
|
||||||
2164:
|
|
||||||
4031840
|
|
||||||
|
|
||||||
2167:
|
2167:
|
||||||
4031841
|
4031841
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
|
||||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||||
<group/>
|
<group>
|
||||||
|
<file>file:/C:/Nexon/MapleSolaxia/HeavenMS/tools/MapleQuestItemFetcher/src/maplequestitemfetcher/MapleQuestItemFetcher.java</file>
|
||||||
|
</group>
|
||||||
</open-files>
|
</open-files>
|
||||||
</project-private>
|
</project-private>
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ import tools.Pair;
|
|||||||
*
|
*
|
||||||
* Running it should generate a report file under "lib" folder with the search results.
|
* 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 {
|
public class MapleQuestItemFetcher {
|
||||||
static MapleItemInformationProvider ii;
|
static MapleItemInformationProvider ii;
|
||||||
@@ -91,6 +91,7 @@ public class MapleQuestItemFetcher {
|
|||||||
static Map<Integer, Set<Integer>> zeroedStartQuestItems = new HashMap<>();
|
static Map<Integer, Set<Integer>> zeroedStartQuestItems = new HashMap<>();
|
||||||
static Map<Integer, Set<Integer>> zeroedCompleteQuestItems = new HashMap<>();
|
static Map<Integer, Set<Integer>> zeroedCompleteQuestItems = new HashMap<>();
|
||||||
static Map<Integer, int[]> mixedQuestidItems = new HashMap<>();
|
static Map<Integer, int[]> mixedQuestidItems = new HashMap<>();
|
||||||
|
static Set<Integer> limitedQuestids = new HashSet<>();
|
||||||
|
|
||||||
static byte status = 0;
|
static byte status = 0;
|
||||||
static int questId = -1;
|
static int questId = -1;
|
||||||
@@ -108,6 +109,8 @@ public class MapleQuestItemFetcher {
|
|||||||
i = token.indexOf("\"", i) + 1; //lower bound of the string
|
i = token.indexOf("\"", i) + 1; //lower bound of the string
|
||||||
j = token.indexOf("\"", i); //upper bound
|
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];
|
dest = new char[initialStringLength];
|
||||||
token.getChars(i, j, dest, 0);
|
token.getChars(i, j, dest, 0);
|
||||||
|
|
||||||
@@ -245,8 +248,15 @@ public class MapleQuestItemFetcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
status += 1;
|
status += 1;
|
||||||
}
|
} else {
|
||||||
|
if(status == 3) {
|
||||||
|
d = getName(token);
|
||||||
|
|
||||||
|
if(d.equals("end")) {
|
||||||
|
limitedQuestids.add(questId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void calculateQuestItemDiff() {
|
private static void calculateQuestItemDiff() {
|
||||||
@@ -414,6 +424,10 @@ public class MapleQuestItemFetcher {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getExpiredStringLabel(int questid) {
|
||||||
|
return (!limitedQuestids.contains(questid) ? "" : " EXPIRED");
|
||||||
|
}
|
||||||
|
|
||||||
private static void ReportQuestItemData() {
|
private static void ReportQuestItemData() {
|
||||||
// This will reference one line at a time
|
// This will reference one line at a time
|
||||||
String line = null;
|
String line = null;
|
||||||
@@ -460,7 +474,7 @@ public class MapleQuestItemFetcher {
|
|||||||
printWriter.println("INCORRECT QUESTIDS ON DB");
|
printWriter.println("INCORRECT QUESTIDS ON DB");
|
||||||
for(Entry<Integer, int[]> emqi : getSortedMapEntries1(mixedQuestidItems)) {
|
for(Entry<Integer, int[]> emqi : getSortedMapEntries1(mixedQuestidItems)) {
|
||||||
int[] mqi = emqi.getValue();
|
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");
|
printWriter.println("\n\n\n\n\n");
|
||||||
}
|
}
|
||||||
@@ -473,7 +487,7 @@ public class MapleQuestItemFetcher {
|
|||||||
|
|
||||||
printWriter.println("ITEMS WITH NO QUEST DROP DATA ON DB");
|
printWriter.println("ITEMS WITH NO QUEST DROP DATA ON DB");
|
||||||
for(Entry<Integer, Integer> iwq : getSortedMapEntries0(mapIwq)) {
|
for(Entry<Integer, Integer> 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");
|
printWriter.println("\n\n\n\n\n");
|
||||||
}
|
}
|
||||||
@@ -482,7 +496,7 @@ public class MapleQuestItemFetcher {
|
|||||||
if(!zeroedStartQuestItems.isEmpty()) {
|
if(!zeroedStartQuestItems.isEmpty()) {
|
||||||
printWriter.println("START QUEST ITEMS WITH ZERO QUANTITY");
|
printWriter.println("START QUEST ITEMS WITH ZERO QUANTITY");
|
||||||
for(Pair<Integer, List<Integer>> iwq : getSortedMapEntries2(zeroedStartQuestItems)) {
|
for(Pair<Integer, List<Integer>> iwq : getSortedMapEntries2(zeroedStartQuestItems)) {
|
||||||
printWriter.println(iwq.getLeft() + ":");
|
printWriter.println(iwq.getLeft() + getExpiredStringLabel(iwq.getLeft()) + ":");
|
||||||
for(Integer i : iwq.getRight()) {
|
for(Integer i : iwq.getRight()) {
|
||||||
printWriter.println(" " + i);
|
printWriter.println(" " + i);
|
||||||
}
|
}
|
||||||
@@ -494,7 +508,7 @@ public class MapleQuestItemFetcher {
|
|||||||
if(!zeroedCompleteQuestItems.isEmpty()) {
|
if(!zeroedCompleteQuestItems.isEmpty()) {
|
||||||
printWriter.println("COMPLETE QUEST ITEMS WITH ZERO QUANTITY");
|
printWriter.println("COMPLETE QUEST ITEMS WITH ZERO QUANTITY");
|
||||||
for(Pair<Integer, List<Integer>> iwq : getSortedMapEntries2(zeroedCompleteQuestItems)) {
|
for(Pair<Integer, List<Integer>> iwq : getSortedMapEntries2(zeroedCompleteQuestItems)) {
|
||||||
printWriter.println(iwq.getLeft() + ":");
|
printWriter.println(iwq.getLeft() + getExpiredStringLabel(iwq.getLeft()) + ":");
|
||||||
for(Integer i : iwq.getRight()) {
|
for(Integer i : iwq.getRight()) {
|
||||||
printWriter.println(" " + i);
|
printWriter.println(" " + i);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user