Client Timestamp update + Cosmetic NPCs & H Beacon patch + Log rework

Fixed Music command not playing soundtracks at all.
Fixed stylish scripts stucking player NPC interactions in certain cases.
Reviewed client mistimed view on items, quest expirations, BBS threads, etc.
Fixed Homing Beacon skill provoking autoflag in mobs with same objectid in different maps.
Solved DB leak cases with removing pets from inventory.
Reviewed logging throughout the source, aiming to normalize the varied-spaced log content within the facilities.
Fixed a bug that would occur when trying to reaccess Horntail expedition.
This commit is contained in:
ronancpl
2019-01-07 12:10:41 -02:00
parent 35ea13420e
commit b47dd03a3e
110 changed files with 511 additions and 585 deletions

View File

@@ -1530,4 +1530,20 @@ Corrigido comandos que transportam jogadores entre mapas não levando em conside
21 Dezembro 2018,
Cosméticos já usados pelo jogador não estão mais disponíveis nos estilistas/cirurgiões.
Corrigido alguns itens estéticos não sendo devidamente disponibilizados se jogadores usam algum cosmético de cor não-default.
Corrigido alguns itens estéticos não sendo devidamente disponibilizados se jogadores usam algum cosmético de cor não-default.
28 Dezembro 2018,
Corrigido um problema com comando Music, que não identificaria informações das músicas do jogo corretamente.
Corrigido scripts de NPC de cosméticos bloqueando dialógo de jogadores em certos casos.
29 - 31 Dezembro 2018,
Resolvido envio de temporarização descompassada pro cliente (quests, expirações de itens, BBS threads, etc).
Corrigido quests não registrando tempo de completude corretamente.
Corrigido mob Jesters utilizando autoaggro.
03 - 06 Janeiro 2019,
Corrigido Homing Beacon skill provocando autoflag em mobs para jogadores que mudam de mapas, onde há mobs com mesmo objectid do mob alvejado anteriormente.
Resolvido casos onde pets equipados poderiam provocar inconsistências na DB ao ser removido da aba de cash no inventário.
Revisado sistema de log por todo o código-fonte. Espera-se uma formatação similar para os vários logs.
Corrigido pet excludes não sendo devidamente removidos ao retirar o pet da DB.
Corrigido bug na expedição de Horntail ao tentar reentrar numa expedição já começada.

View File

@@ -237,7 +237,7 @@ function changedMap(eim, player, mapid) {
function afterChangedMap(eim, player, mapid) {
if (mapid == 990000100) {
var texttt = "So, here is the brief. You guys should be warned that, once out on the fortress outskirts, anyone that would not be equipping the #b#t1032033##k will die instantly due to the deteriorated state of the air around there. That being said, once your team moves out, make sure to #bhit the glowing rocks#k in that region and #bequip the dropped item#k before advancing stages. That will protect you thoroughly from the air sickness. Good luck!";
player.getClient().announce(Packages.tools.MaplePacketCreator.getNPCTalk(9040000, /*(byte)*/ 0, texttt, "00 00", /*(byte)*/ 0));
player.getClient().getAbstractPlayerInteraction().npcTalk(9040000, texttt);
}
}

View File

@@ -88,7 +88,7 @@ function setEventRewards(eim) {
function afterSetup(eim) {}
function setup(channel) {
var eim = em.newInstance("Scarga" + channel);
var eim = em.newInstance("Horntail" + channel); // thanks Thora for reporting an issue with misleading event name here
eim.setProperty("canJoin", 1);
eim.setProperty("defeatedBoss", 0);
eim.setProperty("defeatedHead", 0);

View File

@@ -180,7 +180,7 @@ function playerEntry(eim, player) {
player.changeMap(map, map.getPortal(0));
var texttt = "Hi, my name is Eak, the Chamberlain of the Goddess. Don't be alarmed; you won't be able to see me right now. Back when the Goddess turned into a block of stone, I simultaneously lost my own power. If you gather up the power of the Magic Cloud of Orbis, however, then I'll be able to recover my body and re-transform back to my original self. Please collect #b20#k Magic Clouds and bring them back to me. Right now, you'll only see me as a tiny, flickering light.";
player.getClient().announce(Packages.tools.MaplePacketCreator.getNPCTalk(2013001, /*(byte)*/ 0, texttt, "00 00", /*(byte)*/ 0));
player.getClient().getAbstractPlayerInteraction().npcTalk(2013001, texttt);
}
function scheduledTimeout(eim) {

View File

@@ -45,13 +45,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -32,14 +32,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && type > 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -48,14 +48,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && type > 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -42,13 +42,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -42,13 +42,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -45,13 +45,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -8,8 +8,10 @@ importPackage(Packages.constants);
function start() {
if (cm.getPlayer().isCygnus() && GameConstants.getJobBranch(cm.getJob()) > 2) {
cm.useItem(2022458);
cm.sendOk("Let me cast you my blessings, my Knight. Please protect the world of Maple....");
} else {
cm.sendOk("Don't stop training. Every ounce of your energy is required to protect the world of Maple....");
}
cm.sendOk("Don't stop training. Every ounce of your energy is required to protect the world of Maple....");
cm.dispose();
}

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -31,13 +31,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -46,13 +46,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -29,13 +29,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -32,13 +32,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -51,13 +51,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -51,13 +51,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -24,14 +24,13 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
if (type == 7) {
cm.sendNext("I guess you aren't ready to make the change yet. Let me know when you are!");
}
cm.dispose();
} else {
if (mode == 0 && status >= 0) {
cm.sendNext("I guess you aren't ready to make the change yet. Let me know when you are!");
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -24,13 +24,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status >= 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -13,13 +13,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status >= 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -34,13 +34,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -34,14 +34,13 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
if (type == 7) {
cm.sendNext("I see...take your time, see if you really want it. Let me know when you make up your mind.");
}
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.sendNext("I see...take your time, see if you really want it. Let me know when you make up your mind.");
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -56,13 +56,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -50,15 +50,14 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status == 0)
cm.dispose();
if (mode == 1)
status++;
else
status--;
if (status == 0)
cm.sendSimple("Hi, there~! I'm Dr. Lenu, in charge of the cosmetic lenses here at the Henesys Plastic Surgery Shop! With #b#t5152010##k or #b#t5152013##k, you can let us take care of the rest and have the kind of beautiful look you've always craved~! Remember, the first thing everyone notices about you is the eyes, and we can help you find the cosmetic lens that most fits you! Now, what would you like to use?\r\n#L1#Cosmetic Lenses: #i5152010##t5152010##l\r\n#L2#Cosmetic Lenses: #i5152013##t5152013##l\r\n#L3#One-time Cosmetic Lenses: #i5152103# (any color)#l");
else if (status == 1) {

View File

@@ -50,13 +50,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -50,13 +50,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -50,13 +50,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -46,12 +46,12 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
if (type == 7) {
cm.sendNext("Ok, I'll give you a minute.");
}
cm.dispose();
} else if (mode == 0) {
cm.sendNext("Ok, I'll give you a minute.");
cm.dispose();
return;
}
status++;
if (status == 1) {

View File

@@ -42,13 +42,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -49,13 +49,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,13 +44,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,13 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -20,7 +20,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* Miranda
NLC Skin Change.
NLC Skin Change.
*/
var status = 0;
var price = 1000000;
@@ -31,13 +31,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -42,13 +42,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -42,13 +42,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1) {
if (mode < 1) { // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
} else {
if (mode == 0 && status == 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,14 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status >= 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -43,14 +43,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode == -1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status >= 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -32,13 +32,9 @@ function start() {
}
function action(mode, type, selection) {
if (mode < 1)
if (mode < 1) // disposing issue with stylishs found thanks to Vcoc
cm.dispose();
else {
if (mode == 0 && status >= 0) {
cm.dispose();
return;
}
if (mode == 1)
status++;
else

View File

@@ -44,7 +44,7 @@ function end(mode, type, selection) {
return;
}
qm.sendNextPrev("#e#bHey, you did it!#n#k \r\n#rWow!#k Now I could complete my studies on your pet!");
qm.sendNext("#e#bHey, you did it!#n#k \r\n#rWow!#k Now I could complete my studies on your pet!");
} else if (status == 1) {
if (mode == 0) {
qm.sendOk("I see... Come back when you wish to do it. I'm really excited to do this.");

View File

@@ -187,7 +187,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
private MapleFamily family;
private int familyId;
private int bookCover;
private int markedMonster = 0;
private int battleshipHp = 0;
private int mesosTraded = 0;
private int possibleReports = 10;
@@ -2785,11 +2784,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
deletedCoupon = true;
}
} else {
if (item.getPetId() > -1) {
int petIdx = getPetIndex(item.getPetId());
if(petIdx > -1) unequipPet(getPet(petIdx), true);
}
if (ItemConstants.isExpirablePet(item.getItemId())) {
client.announce(MaplePacketCreator.itemExpired(item.getItemId()));
toberemove.add(item);
@@ -4638,10 +4632,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
return mapid;
}
public int getMarkedMonster() {
return markedMonster;
}
public MapleRing getMarriageRing() {
return partnerId > 0 ? marriageRing : null;
}
@@ -8003,10 +7993,10 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
String message = getName() + " received this - " + text;
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");
FilePrinter.print(FilePrinter.AUTOBAN_WARNING, message);
} else { //Auto DC and log if no GM is online
client.disconnect(false, false);
FilePrinter.printError("autobandced.txt", message + "\r\n");
FilePrinter.print(FilePrinter.AUTOBAN_DC, message);
}
//Server.getInstance().broadcastGMMessage(0, MaplePacketCreator.serverNotice(1, getName() + " received this - " + text));
//announce(MaplePacketCreator.sendPolice(text));
@@ -8357,10 +8347,6 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
public void setMap(MapleMap newmap) {
this.map = newmap;
}
public void setMarkedMonster(int markedMonster) {
this.markedMonster = markedMonster;
}
public void setMessenger(MapleMessenger messenger) {
this.messenger = messenger;

View File

@@ -91,7 +91,7 @@ public enum AutobanFactory {
Server.getInstance().broadcastGMMessage((chr != null ? chr.getWorld() : 0), MaplePacketCreator.sendYellowTip((chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason));
}
if (ServerConstants.USE_AUTOBAN_LOG) {
FilePrinter.printError("autobanwarning.txt", (chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason + "\r\n");
FilePrinter.print(FilePrinter.AUTOBAN_WARNING, (chr != null ? MapleCharacter.makeMapleReadable(chr.getName()) : "") + " caused " + this.name() + " " + reason);
}
}

View File

@@ -58,7 +58,7 @@ public class AutobanManager {
}
if (ServerConstants.USE_AUTOBAN_LOG) {
// Lets log every single point too.
FilePrinter.printError("autobanwarning.txt", MapleCharacter.makeMapleReadable(chr.getName()) + " caused " + fac.name() + " " + reason + "\r\n");
FilePrinter.print(FilePrinter.AUTOBAN_WARNING, MapleCharacter.makeMapleReadable(chr.getName()) + " caused " + fac.name() + " " + reason);
}
}

View File

@@ -113,7 +113,7 @@ public class CommandsExecutor {
private void writeLog(MapleClient client, String command){
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
FilePrinter.print(FilePrinter.USED_COMMANDS, client.getPlayer().getName() + " used: " + command + " on "
+ sdf.format(Calendar.getInstance().getTime()) + "\r\n");
+ sdf.format(Calendar.getInstance().getTime()));
}
private void addCommandInfo(String name, Class<? extends Command> commandClass) {
@@ -262,7 +262,7 @@ public class CommandsExecutor {
addCommand("ignored", 3, IgnoredCommand.class);
addCommand("pos", 3, PosCommand.class);
addCommand("togglecoupon", 3, ToggleCouponCommand.class);
addCommand("chat", 3, ChatCommand.class);
addCommand("togglewhitechat", 3, ChatCommand.class);
addCommand("fame", 3, FameCommand.class);
addCommand("givenx", 3, GiveNxCommand.class);
addCommand("givevp", 3, GiveVpCommand.class);

View File

@@ -61,6 +61,7 @@ public class GachaCommand extends Command {
}
}
talkStr += "\r\nPlease keep in mind that there are items that are in all gachapons and are not listed here.";
c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, talkStr, "00 00", (byte) 0));
c.getAbstractPlayerInteraction().npcTalk(9010000, talkStr);
}
}

View File

@@ -53,7 +53,7 @@ public class GmCommand extends Command {
String message = joinStringFrom(params, 0);
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");
FilePrinter.printError(FilePrinter.COMMAND_GM, MapleCharacter.makeMapleReadable(player.getName()) + ": " + message);
player.dropMessage(5, "Your message '" + message + "' was sent to GMs.");
player.dropMessage(5, tips[Randomizer.nextInt(tips.length)]);
}

View File

@@ -46,7 +46,7 @@ public class ReportBugCommand extends Command {
String message = joinStringFrom(params, 0);
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");
FilePrinter.printError(FilePrinter.COMMAND_BUG, MapleCharacter.makeMapleReadable(player.getName()) + ": " + message);
player.dropMessage(5, "Your bug '" + message + "' was submitted successfully to our developers. Thank you!");
}

View File

@@ -50,7 +50,7 @@ public class GotoCommand extends Command {
}
if (player.getEventInstance() != null || MapleMiniDungeonInfo.isDungeonMap(player.getMapId()) || FieldLimit.CANNOTMIGRATE.check(player.getMap().getFieldLimit()) || !player.isAlive()) {
player.yellowMessage("This command can not be used in this map.");
player.dropMessage(1, "This command can not be used in this map.");
return;
}

View File

@@ -72,6 +72,7 @@ public class WhatDropsFromCommand extends Command {
output += "\r\n";
}
}
c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, output, "00 00", (byte) 0));
c.getAbstractPlayerInteraction().npcTalk(9010000, output);
}
}

View File

@@ -86,7 +86,8 @@ public class WhoDropsCommand extends Command {
player.dropMessage(5, "The item you searched for doesn't exist.");
return;
}
c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, output, "00 00", (byte) 0));
c.getAbstractPlayerInteraction().npcTalk(9010000, output);
} finally {
c.releaseClient();
}

View File

@@ -136,6 +136,6 @@ public class SearchCommand extends Command {
}
sb.append("\r\n#kLoaded within ").append((double) (System.currentTimeMillis() - start) / 1000).append(" seconds.");//because I can, and it's free
c.announce(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, sb.toString(), "00 00", (byte) 0));
c.getAbstractPlayerInteraction().npcTalk(9010000, sb.toString());
}
}

View File

@@ -26,7 +26,9 @@ package client.command.commands.gm2;
import client.command.Command;
import client.MapleClient;
import client.MapleCharacter;
import server.maps.FieldLimit;
import server.maps.MapleMap;
import server.maps.MapleMiniDungeonInfo;
public class WarpCommand extends Command {
{
@@ -48,6 +50,11 @@ public class WarpCommand extends Command {
return;
}
if (player.getEventInstance() != null || MapleMiniDungeonInfo.isDungeonMap(player.getMapId()) || FieldLimit.CANNOTMIGRATE.check(player.getMap().getFieldLimit()) || !player.isAlive()) {
player.dropMessage(1, "This command cannot be used in this map.");
return;
}
// expedition issue with this command detected thanks to Masterrulax
player.saveLocationOnWarp();
player.changeMap(target, target.getRandomPlayerSpawnpoint());

View File

@@ -26,6 +26,7 @@ package client.command.commands.gm3;
import client.command.Command;
import client.MapleClient;
import client.MapleCharacter;
import constants.GameConstants;
import tools.MaplePacketCreator;
public class MusicCommand extends Command {
@@ -33,181 +34,42 @@ public class MusicCommand extends Command {
setDescription("");
}
private static String getSongList() {
String songList = "Song:\r\n";
for (String s : GameConstants.GAME_SONGS) {
songList += (" " + s + "\r\n");
}
return songList;
}
@Override
public void execute(MapleClient c, String[] params) {
final String[] songs = {
"Jukebox/Congratulation",
"Bgm00/SleepyWood",
"Bgm00/FloralLife",
"Bgm00/GoPicnic",
"Bgm00/Nightmare",
"Bgm00/RestNPeace",
"Bgm01/AncientMove",
"Bgm01/MoonlightShadow",
"Bgm01/WhereTheBarlogFrom",
"Bgm01/CavaBien",
"Bgm01/HighlandStar",
"Bgm01/BadGuys",
"Bgm02/MissingYou",
"Bgm02/WhenTheMorningComes",
"Bgm02/EvilEyes",
"Bgm02/JungleBook",
"Bgm02/AboveTheTreetops",
"Bgm03/Subway",
"Bgm03/Elfwood",
"Bgm03/BlueSky",
"Bgm03/Beachway",
"Bgm03/SnowyVillage",
"Bgm04/PlayWithMe",
"Bgm04/WhiteChristmas",
"Bgm04/UponTheSky",
"Bgm04/ArabPirate",
"Bgm04/Shinin'Harbor",
"Bgm04/WarmRegard",
"Bgm05/WolfWood",
"Bgm05/DownToTheCave",
"Bgm05/AbandonedMine",
"Bgm05/MineQuest",
"Bgm05/HellGate",
"Bgm06/FinalFight",
"Bgm06/WelcomeToTheHell",
"Bgm06/ComeWithMe",
"Bgm06/FlyingInABlueDream",
"Bgm06/FantasticThinking",
"Bgm07/WaltzForWork",
"Bgm07/WhereverYouAre",
"Bgm07/FunnyTimeMaker",
"Bgm07/HighEnough",
"Bgm07/Fantasia",
"Bgm08/LetsMarch",
"Bgm08/ForTheGlory",
"Bgm08/FindingForest",
"Bgm08/LetsHuntAliens",
"Bgm08/PlotOfPixie",
"Bgm09/DarkShadow",
"Bgm09/TheyMenacingYou",
"Bgm09/FairyTale",
"Bgm09/FairyTalediffvers",
"Bgm09/TimeAttack",
"Bgm10/Timeless",
"Bgm10/TimelessB",
"Bgm10/BizarreTales",
"Bgm10/TheWayGrotesque",
"Bgm10/Eregos",
"Bgm11/BlueWorld",
"Bgm11/Aquarium",
"Bgm11/ShiningSea",
"Bgm11/DownTown",
"Bgm11/DarkMountain",
"Bgm12/AquaCave",
"Bgm12/DeepSee",
"Bgm12/WaterWay",
"Bgm12/AcientRemain",
"Bgm12/RuinCastle",
"Bgm12/Dispute",
"Bgm13/CokeTown",
"Bgm13/Leafre",
"Bgm13/Minar'sDream",
"Bgm13/AcientForest",
"Bgm13/TowerOfGoddess",
"Bgm14/DragonLoad",
"Bgm14/HonTale",
"Bgm14/CaveOfHontale",
"Bgm14/DragonNest",
"Bgm14/Ariant",
"Bgm14/HotDesert",
"Bgm15/MureungHill",
"Bgm15/MureungForest",
"Bgm15/WhiteHerb",
"Bgm15/Pirate",
"Bgm15/SunsetDesert",
"Bgm16/Duskofgod",
"Bgm16/FightingPinkBeen",
"Bgm16/Forgetfulness",
"Bgm16/Remembrance",
"Bgm16/Repentance",
"Bgm16/TimeTemple",
"Bgm17/MureungSchool1",
"Bgm17/MureungSchool2",
"Bgm17/MureungSchool3",
"Bgm17/MureungSchool4",
"Bgm18/BlackWing",
"Bgm18/DrillHall",
"Bgm18/QueensGarden",
"Bgm18/RaindropFlower",
"Bgm18/WolfAndSheep",
"Bgm19/BambooGym",
"Bgm19/CrystalCave",
"Bgm19/MushCatle",
"Bgm19/RienVillage",
"Bgm19/SnowDrop",
"Bgm20/GhostShip",
"Bgm20/NetsPiramid",
"Bgm20/UnderSubway",
"Bgm21/2021year",
"Bgm21/2099year",
"Bgm21/2215year",
"Bgm21/2230year",
"Bgm21/2503year",
"Bgm21/KerningSquare",
"Bgm21/KerningSquareField",
"Bgm21/KerningSquareSubway",
"Bgm21/TeraForest",
"BgmEvent/FunnyRabbit",
"BgmEvent/FunnyRabbitFaster",
"BgmEvent/wedding",
"BgmEvent/weddingDance",
"BgmEvent/wichTower",
"BgmGL/amoria",
"BgmGL/Amorianchallenge",
"BgmGL/chapel",
"BgmGL/cathedral",
"BgmGL/Courtyard",
"BgmGL/CrimsonwoodKeep",
"BgmGL/CrimsonwoodKeepInterior",
"BgmGL/GrandmastersGauntlet",
"BgmGL/HauntedHouse",
"BgmGL/NLChunt",
"BgmGL/NLCtown",
"BgmGL/NLCupbeat",
"BgmGL/PartyQuestGL",
"BgmGL/PhantomForest",
"BgmJp/Feeling",
"BgmJp/BizarreForest",
"BgmJp/Hana",
"BgmJp/Yume",
"BgmJp/Bathroom",
"BgmJp/BattleField",
"BgmJp/FirstStepMaster",
"BgmMY/Highland",
"BgmMY/KualaLumpur",
"BgmSG/BoatQuay_field",
"BgmSG/BoatQuay_town",
"BgmSG/CBD_field",
"BgmSG/CBD_town",
"BgmSG/Ghostship",
"BgmUI/ShopBgm",
"BgmUI/Title"
};
MapleCharacter player = c.getPlayer();
if (params.length < 1) {
player.yellowMessage("Syntax: !music <song>");
for (String s : songs) {
player.yellowMessage(s);
}
String sendMsg = "";
sendMsg += "Syntax: #r!music <song>#k\r\n\r\n";
sendMsg += getSongList();
c.announce(MaplePacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0));
return;
}
String song = joinStringFrom(params, 0);
for (String s : songs) {
if (s.equals(song)) {
for (String s : GameConstants.GAME_SONGS) {
if (s.equalsIgnoreCase(song)) { // thanks Masterrulax for finding an issue here
player.getMap().broadcastMessage(MaplePacketCreator.musicChange(s));
player.yellowMessage("Now playing song " + song + ".");
break;
player.yellowMessage("Now playing song " + s + ".");
return;
}
}
player.yellowMessage("Song not found, please enter a song below.");
for (String s : songs) {
player.yellowMessage(s);
}
String sendMsg = "";
sendMsg += "Song not found, please enter a song below.\r\n\r\n";
sendMsg += getSongList();
c.announce(MaplePacketCreator.getNPCTalk(1052015, (byte) 0, sendMsg, "00 00", (byte) 0));
}
}

View File

@@ -45,11 +45,18 @@ public class ProItemCommand extends Command {
player.yellowMessage("Syntax: !proitem <itemid> <stat value> [<spdjmp value>]");
return;
}
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
int itemid = Integer.parseInt(params[0]);
if(ii.getName(itemid) == null) {
player.yellowMessage("Item id '" + params[0] + "' does not exist.");
return;
}
short stat = (short) Math.max(0, Short.parseShort(params[1]));
short spdjmp = params.length >= 3 ? (short) Math.max(0, Short.parseShort(params[2])) : 0;
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
MapleInventoryType type = ItemConstants.getInventoryType(itemid);
if (type.equals(MapleInventoryType.EQUIP)) {
Item it = ii.getEquipById(itemid);

View File

@@ -64,7 +64,7 @@ public class DebugCommand extends Command {
msgTypes += ("#L" + i + "#" + debugTypes[i] + "#l\r\n");
}
player.announce(MaplePacketCreator.getNPCTalk(9201143, (byte) 0, msgTypes, "00 00", (byte) 0));
c.getAbstractPlayerInteraction().npcTalk(9201143, msgTypes);
break;
case "monster":

View File

@@ -28,6 +28,7 @@ import client.inventory.MapleInventoryType;
import constants.ServerConstants;
import net.server.Server;
import server.MapleItemInformationProvider;
import tools.FilePrinter;
import tools.MaplePacketCreator;
/**
@@ -93,6 +94,7 @@ public abstract class CharacterFactory {
Server.getInstance().createCharacterEntry(newchar);
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[NEW CHAR]: " + c.getAccountName() + " has created a new character with IGN " + name));
FilePrinter.print(FilePrinter.CREATED_CHAR + c.getAccountName() + ".txt", c.getAccountName() + " created character with IGN " + name);
return 0;
}

View File

@@ -81,17 +81,24 @@ public class MaplePet extends Item {
return null;
}
}
public void deleteFromDb() {
public static void deleteFromDb(int petid) {
try {
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM pets WHERE `petid` = ?");
ps.setInt(1, this.getUniqueId());
ps.setInt(1, petid);
ps.executeUpdate();
ps.close();
ps = con.prepareStatement("DELETE FROM petignores WHERE `petid` = ?"); // thanks Vcoc for detecting petignores remaining after deletion
ps.setInt(1, petid);
ps.executeUpdate();
ps.close();
con.close();
MapleCashidGenerator.freeCashId(this.getUniqueId());
MapleCashidGenerator.freeCashId(petid);
} catch (SQLException ex) {
ex.printStackTrace();
}

View File

@@ -28,6 +28,7 @@ import client.inventory.Equip;
import client.inventory.Item;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.MaplePet;
import client.inventory.ModifyInventory;
import client.newyear.NewYearCardRecord;
import constants.ItemConstants;
@@ -361,14 +362,15 @@ public class MapleInventoryManipulator {
}
public static void removeFromSlot(MapleClient c, MapleInventoryType type, short slot, short quantity, boolean fromDrop, boolean consume) {
MapleInventory inv = c.getPlayer().getInventory(type);
MapleCharacter chr = c.getPlayer();
MapleInventory inv = chr.getInventory(type);
Item item = inv.getItem(slot);
boolean allowZero = consume && ItemConstants.isRechargeable(item.getItemId());
if(type == MapleInventoryType.EQUIPPED) {
inv.lockInventory();
try {
c.getPlayer().unequippedItem((Equip) item);
chr.unequippedItem((Equip) item);
inv.removeItem(slot, quantity, allowZero);
} finally {
inv.unlockInventory();
@@ -376,10 +378,25 @@ public class MapleInventoryManipulator {
announceModifyInventory(c, item, fromDrop, allowZero);
} else {
inv.removeItem(slot, quantity, allowZero);
int petid = item.getPetId();
if (petid > -1) { // thanks Vcoc for finding a d/c issue with equipped pets & pets remaining on DB here
int petIdx = chr.getPetIndex(petid);
if(petIdx > -1) {
MaplePet pet = chr.getPet(petIdx);
chr.unequipPet(pet, true);
}
if(type != MapleInventoryType.CANHOLD) {
announceModifyInventory(c, item, fromDrop, allowZero);
inv.removeItem(slot, quantity, allowZero);
if(type != MapleInventoryType.CANHOLD) {
announceModifyInventory(c, item, fromDrop, allowZero);
}
MaplePet.deleteFromDb(petid);
} else {
inv.removeItem(slot, quantity, allowZero);
if(type != MapleInventoryType.CANHOLD) {
announceModifyInventory(c, item, fromDrop, allowZero);
}
}
}
}

View File

@@ -53,7 +53,7 @@ public class AssignSPProcessor {
boolean isBeginnerSkill = false;
if ((!GameConstants.isPqSkillMap(player.getMapId()) && GameConstants.isPqSkill(skillid)) || (!player.isGM() && GameConstants.isGMSkills(skillid)) || (!GameConstants.isInJobTree(skillid, player.getJob().getId()) && !player.isGM())) {
AutobanFactory.PACKET_EDIT.alert(player, "tried to packet edit in distributing sp.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use skill " + skillid + " without it being in their job.\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use skill " + skillid + " without it being in their job.");
final MapleClient client = c;
ThreadManager.getInstance().newTask(new Runnable() {

View File

@@ -351,7 +351,7 @@ public class DueyProcessor {
final long sendMesos = (long) mesos + fee;
if (mesos < 0 || sendMesos > Integer.MAX_VALUE || (amount < 1 && mesos == 0)) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with duey.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use duey with mesos " + mesos + " and amount " + amount + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use duey with mesos " + mesos + " and amount " + amount);
c.disconnect(true, false);
return;
}
@@ -464,7 +464,7 @@ public class DueyProcessor {
dp = dueypack;
if(dp == null) {
c.announce(MaplePacketCreator.sendDueyMSG(Actions.TOCLIENT_RECV_UNKNOWN_ERROR.getCode()));
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to receive package from duey with id " + packageid + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to receive package from duey with id " + packageid);
return;
}

View File

@@ -94,7 +94,7 @@ public class FredrickProcessor {
Item item = it.getLeft();
MapleInventoryManipulator.addFromDrop(chr.getClient(), item, false);
String itemName = MapleItemInformationProvider.getInstance().getName(item.getItemId());
FilePrinter.print(FilePrinter.FREDRICK + chr.getName() + ".txt", chr.getName() + " gained " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")\r\n");
FilePrinter.print(FilePrinter.FREDRICK + chr.getName() + ".txt", chr.getName() + " gained " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")");
}
chr.announce(MaplePacketCreator.fredrickMessage((byte) 0x1E));

View File

@@ -62,7 +62,7 @@ public class SpawnPetProcessor {
long expiration = chr.getInventory(MapleInventoryType.CASH).getItem(slot).getExpiration();
MapleInventoryManipulator.removeById(c, MapleInventoryType.CASH, petid, (short) 1, false, false);
MapleInventoryManipulator.addById(c, evolveid, (short) 1, null, petId, expiration);
pet.deleteFromDb();
MaplePet.deleteFromDb(petId);
c.announce(MaplePacketCreator.enableActions());
return;

View File

@@ -61,7 +61,7 @@ public class StorageProcessor {
byte slot = slea.readByte();
if (slot < 0 || slot > storage.getSlots()) { // removal starts at zero
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with storage.");
FilePrinter.print(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to work with storage slot " + slot + "\r\n");
FilePrinter.print(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to work with storage slot " + slot);
c.disconnect(true, false);
return;
}
@@ -84,7 +84,7 @@ public class StorageProcessor {
if (MapleInventoryManipulator.checkSpace(c, item.getItemId(), item.getQuantity(), item.getOwner())) {
item = storage.takeOut(slot);//actually the same but idc
String itemName = MapleItemInformationProvider.getInstance().getName(item.getItemId());
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " took out " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")\r\n");
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " took out " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")");
chr.setUsedStorage();
MapleKarmaManipulator.toggleKarmaFlagToUntradeable(item);
MapleInventoryManipulator.addFromDrop(c, item, false);
@@ -101,7 +101,7 @@ public class StorageProcessor {
MapleInventory Inv = chr.getInventory(slotType);
if (slot < 1 || slot > Inv.getSlotLimit()) { //player inv starts at one
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with storage.");
FilePrinter.print(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to store item at slot " + slot + "\r\n");
FilePrinter.print(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to store item at slot " + slot);
c.disconnect(true, false);
return;
}
@@ -137,7 +137,7 @@ public class StorageProcessor {
storage.store(item);
storage.sendStored(c, ItemConstants.getInventoryType(itemId));
String itemName = MapleItemInformationProvider.getInstance().getName(item.getItemId());
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " stored " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")\r\n");
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " stored " + item.getQuantity() + " " + itemName + " (" + item.getItemId() + ")");
chr.setUsedStorage();
}
}
@@ -164,7 +164,7 @@ public class StorageProcessor {
}
storage.setMeso(storageMesos - meso);
chr.gainMeso(meso, false, true, false);
FilePrinter.print(FilePrinter.STORAGE + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + (meso > 0 ? " took out " : " stored ") + Math.abs(meso) + " mesos\r\n");
FilePrinter.print(FilePrinter.STORAGE + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + (meso > 0 ? " took out " : " stored ") + Math.abs(meso) + " mesos");
chr.setUsedStorage();
} else {
c.announce(MaplePacketCreator.enableActions());

View File

@@ -1,5 +1,7 @@
package constants;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import client.MapleJob;
@@ -102,6 +104,161 @@ public class GameConstants {
put("fm", 910000000);
}};
public static final List<String> GAME_SONGS = new ArrayList<String>(170) {{
add("Jukebox/Congratulation");
add("Bgm00/SleepyWood");
add("Bgm00/FloralLife");
add("Bgm00/GoPicnic");
add("Bgm00/Nightmare");
add("Bgm00/RestNPeace");
add("Bgm01/AncientMove");
add("Bgm01/MoonlightShadow");
add("Bgm01/WhereTheBarlogFrom");
add("Bgm01/CavaBien");
add("Bgm01/HighlandStar");
add("Bgm01/BadGuys");
add("Bgm02/MissingYou");
add("Bgm02/WhenTheMorningComes");
add("Bgm02/EvilEyes");
add("Bgm02/JungleBook");
add("Bgm02/AboveTheTreetops");
add("Bgm03/Subway");
add("Bgm03/Elfwood");
add("Bgm03/BlueSky");
add("Bgm03/Beachway");
add("Bgm03/SnowyVillage");
add("Bgm04/PlayWithMe");
add("Bgm04/WhiteChristmas");
add("Bgm04/UponTheSky");
add("Bgm04/ArabPirate");
add("Bgm04/Shinin'Harbor");
add("Bgm04/WarmRegard");
add("Bgm05/WolfWood");
add("Bgm05/DownToTheCave");
add("Bgm05/AbandonedMine");
add("Bgm05/MineQuest");
add("Bgm05/HellGate");
add("Bgm06/FinalFight");
add("Bgm06/WelcomeToTheHell");
add("Bgm06/ComeWithMe");
add("Bgm06/FlyingInABlueDream");
add("Bgm06/FantasticThinking");
add("Bgm07/WaltzForWork");
add("Bgm07/WhereverYouAre");
add("Bgm07/FunnyTimeMaker");
add("Bgm07/HighEnough");
add("Bgm07/Fantasia");
add("Bgm08/LetsMarch");
add("Bgm08/ForTheGlory");
add("Bgm08/FindingForest");
add("Bgm08/LetsHuntAliens");
add("Bgm08/PlotOfPixie");
add("Bgm09/DarkShadow");
add("Bgm09/TheyMenacingYou");
add("Bgm09/FairyTale");
add("Bgm09/FairyTalediffvers");
add("Bgm09/TimeAttack");
add("Bgm10/Timeless");
add("Bgm10/TimelessB");
add("Bgm10/BizarreTales");
add("Bgm10/TheWayGrotesque");
add("Bgm10/Eregos");
add("Bgm11/BlueWorld");
add("Bgm11/Aquarium");
add("Bgm11/ShiningSea");
add("Bgm11/DownTown");
add("Bgm11/DarkMountain");
add("Bgm12/AquaCave");
add("Bgm12/DeepSee");
add("Bgm12/WaterWay");
add("Bgm12/AcientRemain");
add("Bgm12/RuinCastle");
add("Bgm12/Dispute");
add("Bgm13/CokeTown");
add("Bgm13/Leafre");
add("Bgm13/Minar'sDream");
add("Bgm13/AcientForest");
add("Bgm13/TowerOfGoddess");
add("Bgm14/DragonLoad");
add("Bgm14/HonTale");
add("Bgm14/CaveOfHontale");
add("Bgm14/DragonNest");
add("Bgm14/Ariant");
add("Bgm14/HotDesert");
add("Bgm15/MureungHill");
add("Bgm15/MureungForest");
add("Bgm15/WhiteHerb");
add("Bgm15/Pirate");
add("Bgm15/SunsetDesert");
add("Bgm16/Duskofgod");
add("Bgm16/FightingPinkBeen");
add("Bgm16/Forgetfulness");
add("Bgm16/Remembrance");
add("Bgm16/Repentance");
add("Bgm16/TimeTemple");
add("Bgm17/MureungSchool1");
add("Bgm17/MureungSchool2");
add("Bgm17/MureungSchool3");
add("Bgm17/MureungSchool4");
add("Bgm18/BlackWing");
add("Bgm18/DrillHall");
add("Bgm18/QueensGarden");
add("Bgm18/RaindropFlower");
add("Bgm18/WolfAndSheep");
add("Bgm19/BambooGym");
add("Bgm19/CrystalCave");
add("Bgm19/MushCatle");
add("Bgm19/RienVillage");
add("Bgm19/SnowDrop");
add("Bgm20/GhostShip");
add("Bgm20/NetsPiramid");
add("Bgm20/UnderSubway");
add("Bgm21/2021year");
add("Bgm21/2099year");
add("Bgm21/2215year");
add("Bgm21/2230year");
add("Bgm21/2503year");
add("Bgm21/KerningSquare");
add("Bgm21/KerningSquareField");
add("Bgm21/KerningSquareSubway");
add("Bgm21/TeraForest");
add("BgmEvent/FunnyRabbit");
add("BgmEvent/FunnyRabbitFaster");
add("BgmEvent/wedding");
add("BgmEvent/weddingDance");
add("BgmEvent/wichTower");
add("BgmGL/amoria");
add("BgmGL/Amorianchallenge");
add("BgmGL/chapel");
add("BgmGL/cathedral");
add("BgmGL/Courtyard");
add("BgmGL/CrimsonwoodKeep");
add("BgmGL/CrimsonwoodKeepInterior");
add("BgmGL/GrandmastersGauntlet");
add("BgmGL/HauntedHouse");
add("BgmGL/NLChunt");
add("BgmGL/NLCtown");
add("BgmGL/NLCupbeat");
add("BgmGL/PartyQuestGL");
add("BgmGL/PhantomForest");
add("BgmJp/Feeling");
add("BgmJp/BizarreForest");
add("BgmJp/Hana");
add("BgmJp/Yume");
add("BgmJp/Bathroom");
add("BgmJp/BattleField");
add("BgmJp/FirstStepMaster");
add("BgmMY/Highland");
add("BgmMY/KualaLumpur");
add("BgmSG/BoatQuay_field");
add("BgmSG/BoatQuay_town");
add("BgmSG/CBD_field");
add("BgmSG/CBD_town");
add("BgmSG/Ghostship");
add("BgmUI/ShopBgm");
add("BgmUI/Title");
}};
// MapleStory default keyset
private static final int[] DEFAULT_KEY = {18, 65, 2, 23, 3, 4, 5, 6, 16, 17, 19, 25, 26, 27, 31, 34, 35, 37, 38, 40, 43, 44, 45, 46, 50, 56, 59, 60, 61, 62, 63, 64, 57, 48, 29, 7, 24, 33, 41, 39};
private static final int[] DEFAULT_TYPE = {4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 6, 6, 6, 6, 6, 6, 5, 4, 5, 4, 4, 4, 4, 4};

View File

@@ -198,7 +198,7 @@ public class ThreadTracker {
dateFormat.setTimeZone(TimeZone.getDefault());
FilePrinter.printError(FilePrinter.DEADLOCK_STATE, printThreadTrackerState(dateFormat.format(new Date())));
//FilePrinter.printError(FilePrinter.DEADLOCK_STATE, "[" + dateFormat.format(new Date()) + "] Presenting current lock path for lockid " + lockId.name() + ".\r\n" + printLockStatus(lockId) + "\r\n-------------------------------\r\n");
//FilePrinter.printError(FilePrinter.DEADLOCK_STATE, "[" + dateFormat.format(new Date()) + "] Presenting current lock path for lockid " + lockId.name() + ".\r\n" + printLockStatus(lockId) + "\r\n-------------------------------");
}
} else {
long tid = Thread.currentThread().getId();

View File

@@ -64,7 +64,7 @@ public class TrackerReadLock extends ReentrantReadWriteLock.ReadLock implements
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getDefault());
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "[CRITICAL] " + dateFormat.format(new Date()) + " Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState) + "\r\n\r\n");
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "[CRITICAL] " + dateFormat.format(new Date()) + " Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState));
ThreadTracker.getInstance().accessThreadTracker(true, true, id, hashcode);
deadlockedState = null;
}
@@ -89,7 +89,7 @@ public class TrackerReadLock extends ReentrantReadWriteLock.ReadLock implements
if(super.tryLock()) {
if(ServerConstants.USE_THREAD_TRACKER) {
if(deadlockedState != null) {
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState) + "\r\n\r\n");
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState));
ThreadTracker.getInstance().accessThreadTracker(true, true, id, hashcode);
deadlockedState = null;
}

View File

@@ -66,7 +66,7 @@ public class TrackerReentrantLock extends ReentrantLock implements MonitoredReen
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getDefault());
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "[CRITICAL] " + dateFormat.format(new Date()) + " Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState) + "\r\n\r\n");
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "[CRITICAL] " + dateFormat.format(new Date()) + " Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState));
ThreadTracker.getInstance().accessThreadTracker(true, true, id, hashcode);
deadlockedState = null;
}
@@ -91,7 +91,7 @@ public class TrackerReentrantLock extends ReentrantLock implements MonitoredReen
if(super.tryLock()) {
if(ServerConstants.USE_THREAD_TRACKER) {
if(deadlockedState != null) {
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState) + "\r\n\r\n");
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState));
ThreadTracker.getInstance().accessThreadTracker(true, true, id, hashcode);
deadlockedState = null;
}

View File

@@ -62,7 +62,7 @@ public class TrackerWriteLock extends ReentrantReadWriteLock.WriteLock implement
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getDefault());
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "[CRITICAL] " + dateFormat.format(new Date()) + " Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState) + "\r\n\r\n");
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "[CRITICAL] " + dateFormat.format(new Date()) + " Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState));
ThreadTracker.getInstance().accessThreadTracker(true, true, id, hashcode);
deadlockedState = null;
}
@@ -87,7 +87,7 @@ public class TrackerWriteLock extends ReentrantReadWriteLock.WriteLock implement
if(super.tryLock()) {
if(ServerConstants.USE_THREAD_TRACKER) {
if(deadlockedState != null) {
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState) + "\r\n\r\n");
//FilePrinter.printError(FilePrinter.DEADLOCK_ERROR, "Deadlock occurred when trying to use the '" + id.name() + "' lock resources:\r\n" + printStackTrace(deadlockedState));
ThreadTracker.getInstance().accessThreadTracker(true, true, id, hashcode);
deadlockedState = null;
}

View File

@@ -326,8 +326,8 @@ public abstract class AbstractDealDamageHandler extends AbstractMaplePacketHandl
} else if (attack.skill == ILArchMage.ICE_DEMON) {
monster.setTempEffectiveness(Element.FIRE, ElementalEffectiveness.WEAK, SkillFactory.getSkill(ILArchMage.ICE_DEMON).getEffect(player.getSkillLevel(SkillFactory.getSkill(ILArchMage.ICE_DEMON))).getDuration() * 1000);
} else if (attack.skill == Outlaw.HOMING_BEACON || attack.skill == Corsair.BULLSEYE) {
player.setMarkedMonster(monster.getObjectId());
player.announce(MaplePacketCreator.giveBuff(1, attack.skill, Collections.singletonList(new Pair<>(MapleBuffStat.HOMING_BEACON, monster.getObjectId()))));
MapleStatEffect beacon = SkillFactory.getSkill(attack.skill).getEffect(player.getSkillLevel(attack.skill));
beacon.applyBeaconBuff(player, monster.getObjectId());
} else if (attack.skill == Outlaw.FLAME_THROWER) {
if (!monster.isBoss()) {
Skill type = SkillFactory.getSkill(Outlaw.FLAME_THROWER);

View File

@@ -172,7 +172,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
return;
}
if (chr.getStorage().gainSlots(4)) {
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought 4 slots to their account storage.\r\n");
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought 4 slots to their account storage.");
chr.setUsedStorage();
c.announce(MaplePacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots()));
@@ -187,7 +187,7 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
return;
}
if (chr.getStorage().gainSlots(8)) { // thanks ABaldParrot & Thora for detecting storage issues here
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought 8 slots to their account storage.\r\n");
FilePrinter.print(FilePrinter.STORAGE + c.getAccountName() + ".txt", c.getPlayer().getName() + " bought 8 slots to their account storage.");
chr.setUsedStorage();
c.announce(MaplePacketCreator.showBoughtStorageSlots(chr.getStorage().getSlots()));

View File

@@ -43,7 +43,7 @@ public final class GeneralChatHandler extends AbstractMaplePacketHandler {
}
if (s.length() > Byte.MAX_VALUE && !chr.isGM()) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit in General Chat.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + s.length() + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + s.length());
c.disconnect(true, false);
return;
}

View File

@@ -43,7 +43,7 @@ public final class GiveFameHandler extends AbstractMaplePacketHandler {
return;
} else if (famechange != 1 && famechange != -1) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit fame.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to fame hack with famechange " + famechange + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to fame hack with famechange " + famechange);
c.disconnect(true, false);
return;
}

View File

@@ -49,7 +49,7 @@ public final class ItemPickupHandler extends AbstractMaplePacketHandler {
Point charPos = chr.getPosition();
Point obPos = ob.getPosition();
if (Math.abs(charPos.getX() - obPos.getX()) > 800 || Math.abs(charPos.getY() - obPos.getY()) > 600) {
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to pick up an item too far away. Mapid: " + chr.getMapId() + " Player pos: " + charPos + " Object pos: " + obPos + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to pick up an item too far away. Mapid: " + chr.getMapId() + " Player pos: " + charPos + " Object pos: " + obPos);
return;
}

View File

@@ -51,7 +51,7 @@ public final class KeymapChangeHandler extends AbstractMaplePacketHandler {
isBanndedSkill = GameConstants.bannedBindSkills(skill.getId());
if (isBanndedSkill || (!c.getPlayer().isGM() && GameConstants.isGMSkills(skill.getId())) || (!GameConstants.isInJobTree(skill.getId(), c.getPlayer().getJob().getId()) && !c.getPlayer().isGM())) { //for those skills are are "technically" in the beginner tab, like bamboo rain in Dojo or skills you find in PYPQ
//AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit keymapping.");
//FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use skill " + skill.getId() + "\r\n");
//FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to use skill " + skill.getId());
//c.disconnect(true, false);
//return;

View File

@@ -50,7 +50,7 @@ public final class MultiChatHandler extends AbstractMaplePacketHandler {
String chattext = slea.readMapleAsciiString();
if (chattext.length() > Byte.MAX_VALUE && !player.isGM()) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit chats.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + chattext.length() + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + chattext.length());
c.disconnect(true, false);
return;
}

View File

@@ -41,7 +41,7 @@ public final class NPCShopHandler extends AbstractMaplePacketHandler {
short quantity = slea.readShort();
if (quantity < 1) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit a npc shop.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to buy quantity " + quantity + " of item id " + itemId + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to buy quantity " + quantity + " of item id " + itemId);
c.disconnect(true, false);
return;
}

View File

@@ -67,7 +67,7 @@ public final class NPCTalkHandler extends AbstractMaplePacketHandler {
boolean hasNpcScript = NPCScriptManager.getInstance().start(c, npc.getId(), oid, null);
if (!hasNpcScript) {
if (!npc.hasShop()) {
FilePrinter.printError(FilePrinter.NPC_UNCODED, "NPC " + npc.getName() + "(" + npc.getId() + ") is not coded.\r\n");
FilePrinter.printError(FilePrinter.NPC_UNCODED, "NPC " + npc.getName() + "(" + npc.getId() + ") is not coded.");
return;
} else if(c.getPlayer().getShop() != null) {
c.announce(MaplePacketCreator.enableActions());

View File

@@ -45,7 +45,7 @@ public final class PetChatHandler extends AbstractMaplePacketHandler {
String text = slea.readMapleAsciiString();
if (text.length() > Byte.MAX_VALUE) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with pets.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + text.length() + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + text.length());
c.disconnect(true, false);
return;
}

View File

@@ -577,7 +577,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler {
int slot = slea.readShort();
if (slot >= shop.getItems().size() || slot < 0) {
AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit with a player shop.");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to remove item at slot " + slot + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to remove item at slot " + slot);
c.disconnect(true, false);
return;
}
@@ -609,7 +609,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler {
short quantity = slea.readShort();
if (quantity < 1) {
AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit with a hired merchant and or player shop.");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to buy item " + itemid + " with quantity " + quantity + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to buy item " + itemid + " with quantity " + quantity);
c.disconnect(true, false);
return;
}
@@ -635,7 +635,7 @@ public final class PlayerInteractionHandler extends AbstractMaplePacketHandler {
int slot = slea.readShort();
if (slot >= merchant.getItems().size() || slot < 0) {
AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit with a hired merchant.");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to remove item at slot " + slot + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to remove item at slot " + slot);
c.disconnect(true, false);
return;
}

View File

@@ -20,8 +20,14 @@
package net.server.channel.handlers;
import client.MapleBuffStat;
import client.MapleCharacter;
import client.MapleClient;
import java.util.Collections;
import java.util.List;
import net.AbstractMaplePacketHandler;
import tools.MaplePacketCreator;
import tools.Pair;
import tools.data.input.SeekableLittleEndianAccessor;
/**
@@ -32,6 +38,15 @@ public final class PlayerMapTransitionHandler extends AbstractMaplePacketHandler
@Override
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
c.getPlayer().setMapTransitionComplete();
MapleCharacter chr = c.getPlayer();
chr.setMapTransitionComplete();
int beaconid = chr.getBuffSource(MapleBuffStat.HOMING_BEACON);
if (beaconid != -1) {
chr.cancelBuffStats(MapleBuffStat.HOMING_BEACON);
final List<Pair<MapleBuffStat, Integer>> stat = Collections.singletonList(new Pair<>(MapleBuffStat.HOMING_BEACON, 0));
chr.announce(MaplePacketCreator.giveBuff(1, beaconid, stat));
}
}
}

View File

@@ -54,7 +54,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler {
/*
if ((!GameConstants.isPqSkillMap(chr.getMapId()) && GameConstants.isPqSkill(skillid)) || (!chr.isGM() && GameConstants.isGMSkills(skillid)) || (!GameConstants.isInJobTree(skillid, chr.getJob().getId()) && !chr.isGM())) {
AutobanFactory.PACKET_EDIT.alert(chr, chr.getName() + " tried to packet edit skills.");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to use skill " + skillid + " without it being in their job.\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to use skill " + skillid + " without it being in their job.");
c.disconnect(true, false);
return;
}

View File

@@ -56,7 +56,7 @@ public final class WhisperHandler extends AbstractMaplePacketHandler {
}
if (text.length() > Byte.MAX_VALUE && !player.isGM()) {
AutobanFactory.PACKET_EDIT.alert(c.getPlayer(), c.getPlayer().getName() + " tried to packet edit with whispers.");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + text.length() + "\r\n");
FilePrinter.printError(FilePrinter.EXPLOITS + c.getPlayer().getName() + ".txt", c.getPlayer().getName() + " tried to send text with length of " + text.length());
c.disconnect(true, false);
return;
}

View File

@@ -35,7 +35,7 @@ public final class DeleteCharHandler extends AbstractMaplePacketHandler {
int cid = slea.readInt();
if (c.checkPic(pic)) {
if(c.deleteCharacter(cid, c.getAccID())) {
FilePrinter.print(FilePrinter.DELETED_CHARACTERS + c.getAccountName() + ".txt", c.getAccountName() + " deleted CID: " + cid + "\r\n");
FilePrinter.print(FilePrinter.DELETED_CHAR + c.getAccountName() + ".txt", c.getAccountName() + " deleted CID: " + cid);
c.announce(MaplePacketCreator.deleteCharResponse(cid, 0));
} else {
c.announce(MaplePacketCreator.deleteCharResponse(cid, 0x14));

View File

@@ -34,7 +34,7 @@ public class CouponWorker implements Runnable {
Server.getInstance().updateActiveCoupons();
Server.getInstance().commitActiveCoupons();
} catch(SQLException sqle) {
FilePrinter.printError(FilePrinter.EXCEPTION_CAUGHT, "Unexpected SQL error: " + sqle.getMessage() + "\n\n");
FilePrinter.printError(FilePrinter.EXCEPTION_CAUGHT, "Unexpected SQL error: " + sqle.getMessage());
}
}
}

View File

@@ -450,7 +450,6 @@ public class AbstractPlayerInteraction {
}
Item tmp = gainItem(afterId, (short) 1, false, true, period, target);
getPlayer().unequipPet(target, true, false);
/*
evolved = MaplePet.loadFromDb(tmp.getItemId(), tmp.getPosition(), tmp.getPetId());

View File

@@ -67,7 +67,7 @@ public class QuestScriptManager extends AbstractScriptManager {
if(GameConstants.isMedalQuest(questid)) { // start generic medal quest
iv = getInvocable("quest/medalQuest.js", c);
} else {
FilePrinter.printError(FilePrinter.QUEST_UNCODED, "START Quest " + questid + " is uncoded.\r\n");
FilePrinter.printError(FilePrinter.QUEST_UNCODED, "START Quest " + questid + " is uncoded.");
}
}
if (iv == null || QuestScriptManager.getInstance() == null) {
@@ -122,7 +122,7 @@ public class QuestScriptManager extends AbstractScriptManager {
if(GameConstants.isMedalQuest(questid)) { // start generic medal quest
iv = getInvocable("quest/medalQuest.js", c);
} else {
FilePrinter.printError(FilePrinter.QUEST_UNCODED, "END Quest " + questid + " is uncoded.\r\n");
FilePrinter.printError(FilePrinter.QUEST_UNCODED, "END Quest " + questid + " is uncoded.");
qm.dispose();
return;
}

View File

@@ -1659,7 +1659,7 @@ public class MapleItemInformationProvider {
String itemName = MapleItemInformationProvider.getInstance().getName(equip.getItemId());
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");
FilePrinter.printError(FilePrinter.EXPLOITS + chr.getName() + ".txt", chr.getName() + " tried to equip " + itemName + " into " + dst + " slot.");
return false;
}

Some files were not shown because too many files have changed in this diff Show More