CPQ tidyup patch + Guild Creation matcher + Solution to Login Accid=0

Adjusted AP gains, to get it to work following the AP Reset check method.
Fixed usage of inexistent itemids on CPQ and fishing.
Fixed one-of-a-kind items being lost in player trades due to missing inventory checks.
Implemented matching system for the guild creation phase. All players intending to join the new guild must be on the Guild Headquartes and accept the creation of the guild.
Fixed changing jobs not properly updating info on the party tab.
Fixed double tooltip information on CPQ actions UI.
Fixed CPQ not disbanding after a player leaves the party/instance.
Fixed checks for "in-progress" CPQ instances.
Fixed changing maps on CPQ not leading players back to the starting battlefield.
Reviewed login system, now preventing non-local IP connecting on local server and local IP on non-local server.
Reviewed login system, now cherrypicking sessions in transition state when trying to disconnect them due to a failed login (avoiding possible mishaps due to duplicate sessions of a same account).
Adjusted PiratePQ stage 2, now mobs respawn rather than making party leader request for new waves.
Adjusted Prime Minister, its spawn is no longer related to starting the quest. It should also allow party fights.
Fixed "forcevac" command not properly applying, rather sending to inventory, "consume-on-pickup" items.
Fixed (probably) accId = 0 issue on login, that was occurring due to client accountid's being set to 0 a while before being checked once again on finishLogin().
Fixed an issue with extended time on CPQ not properly showing the end-match's visual effect.
This commit is contained in:
ronancpl
2019-03-26 16:28:41 -03:00
parent 3bdf8cb2be
commit 83266508af
95 changed files with 2980 additions and 1420 deletions

View File

@@ -161,7 +161,6 @@ import constants.skills.Shadower;
import constants.skills.Sniper;
import constants.skills.Swordsman;
import constants.skills.ThunderBreaker;
import net.server.channel.handlers.PartyOperationHandler;
import scripting.item.ItemScriptManager;
import server.life.MobSkillFactory;
import server.maps.MapleMapItem;
@@ -1063,12 +1062,14 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
gainSp(spGain, GameConstants.getSkillBook(newJob.getId()), true);
}
// thanks xinyifly for finding out job advancements awarding APs
/*
if (newJob.getId() % 10 >= 1) {
gainAp(5, true);
// thanks xinyifly for finding out missing AP awards (AP Reset can be used as a compass)
if (newJob.getId() % 100 >= 1) {
if (this.isCygnus()) {
gainAp(7, true);
} else {
gainAp(5, true);
}
}
*/
if (!isGM()) {
for (byte i = 1; i < 5; i++) {
@@ -1128,6 +1129,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
effLock.unlock();
}
setMPC(new MaplePartyCharacter(this));
silentPartyUpdate();
if (dragon != null) {
@@ -1152,7 +1154,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
if (ServerConstants.USE_ANNOUNCE_CHANGEJOB) {
if (!this.isGM()) {
broadcastAcquaintances(6, "[" + GameConstants.ordinal(GameConstants.getJobBranch(newJob)) + " Job] " + name + " has just become a " + newJob.name() + ".");
broadcastAcquaintances(6, "[" + GameConstants.ordinal(GameConstants.getJobBranch(newJob)) + " Job] " + name + " has just become a " + GameConstants.getJobName(this.job.getId()) + "."); // thanks Vcoc for noticing job name appearing in uppercase here
}
}
}
@@ -1199,14 +1201,16 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
}
public MapleMap getWarpMap(int map) {
MapleMap target;
MapleMap warpMap;
EventInstanceManager eim = getEventInstance();
if (eim == null) {
target = client.getChannelServer().getMapFactory().getMap(map);
if (eim != null) {
warpMap = eim.getMapInstance(map);
} else if (this.getMonsterCarnival() != null && this.getMonsterCarnival().getEventMap().getId() == map) {
warpMap = this.getMonsterCarnival().getEventMap();
} else {
target = eim.getMapInstance(map);
warpMap = client.getChannelServer().getMapFactory().getMap(map);
}
return target;
return warpMap;
}
// for use ONLY inside OnUserEnter map scripts that requires a player to change map while still moving between maps.
@@ -1812,14 +1816,14 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
}
}
private boolean useItem(final int id) {
if (id / 1000000 == 2) {
if (ii.isConsumeOnPickup(id)) {
if (ItemConstants.isPartyItem(id)) {
public boolean applyConsumeOnPickup(final int itemid) {
if (itemid / 1000000 == 2) {
if (ii.isConsumeOnPickup(itemid)) {
if (ItemConstants.isPartyItem(itemid)) {
List<MapleCharacter> pchr = this.getPartyMembersOnSameMap();
if(!ItemConstants.isPartyAllcure(id)) {
MapleStatEffect mse = ii.getItemEffect(id);
if(!ItemConstants.isPartyAllcure(itemid)) {
MapleStatEffect mse = ii.getItemEffect(itemid);
if(!pchr.isEmpty()) {
for (MapleCharacter mc : pchr) {
@@ -1838,7 +1842,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
}
}
} else {
ii.getItemEffect(id).applyTo(this);
ii.getItemEffect(itemid).applyTo(this);
}
if (itemid / 10000 == 238) {
this.getMonsterBook().addCard(client, itemid);
}
return true;
}
@@ -1955,10 +1963,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
this.getCashShop().gainCash(1, nxGain);
showHint("You have earned #e#b" + nxGain + " NX#k#n. (" + this.getCashShop().getCash(1) + " NX)", 300);
} else if (useItem(mItem.getItemId())) {
if (mItem.getItemId() / 10000 == 238) {
this.getMonsterBook().addCard(client, mItem.getItemId());
}
} else if (applyConsumeOnPickup(mItem.getItemId())) {
} else if (MapleInventoryManipulator.addFromDrop(client, mItem, true)) {
} else if (mItem.getItemId() == 4031868) {
this.getMap().broadcastMessage(MaplePacketCreator.updateAriantPQRanking(this.getName(), this.getItemQuantity(4031868, false), false));
@@ -5647,11 +5652,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
}
public boolean haveItem(int itemid) {
return getItemQuantity(itemid, false) > 0;
return getItemQuantity(itemid, ItemConstants.isEquipment(itemid)) > 0;
}
public boolean haveCleanItem(int itemid) {
return getCleanItemQuantity(itemid, false) > 0;
return getCleanItemQuantity(itemid, ItemConstants.isEquipment(itemid)) > 0;
}
public boolean hasEmptySlot(int itemId) {
@@ -5847,7 +5852,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
}
public boolean attemptCatchFish(int baitLevel) {
return GameConstants.isFishingArea(mapid) && this.getPosition().getY() > 0 && ItemConstants.isFishingChair(chair.get()) && this.getWorldServer().registerFisherPlayer(this, baitLevel);
return ServerConstants.USE_FISHING_SYSTEM && GameConstants.isFishingArea(mapid) && this.getPosition().getY() > 0 && ItemConstants.isFishingChair(chair.get()) && this.getWorldServer().registerFisherPlayer(this, baitLevel);
}
public void leaveMap() {
@@ -5969,8 +5974,15 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
}
} else {
int remainingAp = 5;
if (isCygnus() && level > 10 && level < 70) {
remainingAp++;
if (isCygnus()) {
if (level > 10) {
if (level <= 17) {
remainingAp += 2;
} else if (level < 77) {
remainingAp++;
}
}
}
gainAp(remainingAp, true);
@@ -6119,23 +6131,7 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
Runnable r = new Runnable() {
@Override
public void run() {
MapleParty party;
boolean partyLeader;
prtLock.lock();
try {
party = getParty();
partyLeader = party != null && isPartyLeader();
} finally {
prtLock.unlock();
}
if (party != null) {
if(partyLeader) {
party.assignNewLeader(client);
}
PartyOperationHandler.leaveParty(party, mpc, client);
if (leaveParty()) {
showHint("You have reached #blevel 10#k, therefore you must leave your #rstarter party#k.");
}
}
@@ -6147,6 +6143,28 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
levelUpMessages();
guildUpdate();
}
public boolean leaveParty() {
MapleParty party;
boolean partyLeader;
prtLock.lock();
try {
party = getParty();
partyLeader = party != null && isPartyLeader();
} finally {
prtLock.unlock();
}
if (party != null) {
if(partyLeader) party.assignNewLeader(client);
MapleParty.leaveParty(party, client);
return true;
} else {
return false;
}
}
private void levelUpMessages() {
if (level % 5 != 0) { //Performance FTW?
@@ -10288,11 +10306,11 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
this.challenged = challenged;
}
public void setLingua(int num) {
getClient().setLingua(num);
public void setLanguage(int num) {
getClient().setLanguage(num);
try {
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("UPDATE accounts SET lingua = ? WHERE id = ?")) {
try (PreparedStatement ps = con.prepareStatement("UPDATE accounts SET language = ? WHERE id = ?")) {
ps.setInt(1, num);
ps.setInt(2, getClient().getAccID());
ps.executeUpdate();
@@ -10304,8 +10322,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
}
}
public int getLingua() {
return getClient().getLingua();
public int getLanguage() {
return getClient().getLanguage();
}
}

View File

@@ -90,12 +90,13 @@ public class MapleClient {
public static final String CLIENT_KEY = "CLIENT";
public static final String CLIENT_HWID = "HWID";
public static final String CLIENT_NIBBLEHWID = "HWID2";
public static final String CLIENT_REMOTE_ADDRESS = "REMOTE_IP";
private MapleAESOFB send;
private MapleAESOFB receive;
private final IoSession session;
private MapleCharacter player;
private int channel = 1;
private int accId = 0;
private int accId = -4;
private boolean loggedIn = false;
private boolean serverTransition = false;
private Calendar birthday = null;
@@ -124,7 +125,7 @@ public class MapleClient {
private int visibleWorlds;
private long lastNpcClick;
private long sessionId;
private int lingua = 0;
private int lang = 0;
static {
for (int i = 0; i < 200; i++) {
@@ -534,7 +535,7 @@ public class MapleClient {
if (loginattempt > 4) {
loggedIn = false;
MapleSessionCoordinator.getInstance().closeSession(session, false);
return loginok;
return 6; // thanks Survival_Project for finding out an issue with AUTOMATIC_REGISTER here
}
Connection con = null;
@@ -542,16 +543,15 @@ public class MapleClient {
ResultSet rs = null;
try {
con = DatabaseConnection.getConnection();
ps = con.prepareStatement("SELECT id, password, gender, banned, pin, pic, characterslots, tos, lingua FROM accounts WHERE name = ?");
ps = con.prepareStatement("SELECT id, password, gender, banned, pin, pic, characterslots, tos, language FROM accounts WHERE name = ?");
ps.setString(1, login);
rs = ps.executeQuery();
accId = -2;
if (rs.next()) {
accId = rs.getInt("id");
if (accId == 0) {
// odd case where accId is actually attributed as 0 (further on this leads to getLoginState ACCID = 0, an absurd), thanks Thora for finding this issue
return 15;
} else if (accId < 0) {
if (accId <= 0) {
FilePrinter.printError(FilePrinter.LOGIN_EXCEPTION, "Tried to login with accid " + accId);
return 15;
}
boolean banned = (rs.getByte("banned") == 1);
@@ -560,7 +560,7 @@ public class MapleClient {
pic = rs.getString("pic");
gender = rs.getByte("gender");
characterSlots = rs.getByte("characterslots");
lingua = rs.getInt("lingua");
lang = rs.getInt("language");
String passhash = rs.getString("password");
byte tos = rs.getByte("tos");
@@ -583,7 +583,9 @@ public class MapleClient {
loggedIn = false;
loginok = 4;
}
}
} else {
accId = -3;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
@@ -822,9 +824,10 @@ public class MapleClient {
int state = rs.getInt("loggedin");
if (state == LOGIN_SERVER_TRANSITION) {
if (rs.getTimestamp("lastlogin").getTime() + 30000 < Server.getInstance().getCurrentTime()) {
int accountId = accId;
state = LOGIN_NOTLOGGEDIN;
MapleSessionCoordinator.getInstance().closeSession(session, null);
updateLoginState(LOGIN_NOTLOGGEDIN);
updateLoginState(LOGIN_NOTLOGGEDIN); // ACCID = 0, issue found thanks to Tochi & K u ssss o & Thora & Omo Oppa
this.setAccID(accountId);
}
}
rs.close();
@@ -1026,6 +1029,9 @@ public class MapleClient {
MapleSessionCoordinator.getInstance().closeSession(session, false);
session.removeAttribute(MapleClient.CLIENT_KEY);
}
if (!Server.getInstance().hasCharacteridInTransition(session)) {
updateLoginState(MapleClient.LOGIN_NOTLOGGEDIN);
}
engines = null; // thanks Tochi for pointing out a NPE here
}
@@ -1068,7 +1074,21 @@ public class MapleClient {
public boolean deleteCharacter(int cid, int senderAccId) {
try {
return MapleCharacter.deleteCharFromDB(MapleCharacter.loadCharFromDB(cid, this, false), senderAccId);
MapleCharacter chr = MapleCharacter.loadCharFromDB(cid, this, false);
Integer partyid = chr.getWorldServer().getCharacterPartyid(cid);
if (partyid != null) {
this.setPlayer(chr);
MapleParty party = chr.getWorldServer().getParty(partyid);
chr.setParty(party);
chr.getMPC();
chr.leaveParty(); // thanks Vcoc for pointing out deleted characters would still stay in a party
this.setPlayer(null);
}
return MapleCharacter.deleteCharFromDB(chr, senderAccId);
} catch(SQLException ex) {
ex.printStackTrace();
return false;
@@ -1545,11 +1565,11 @@ public class MapleClient {
return MapleLoginBypassCoordinator.getInstance().canLoginBypass(getNibbleHWID(), accId, true);
}
public int getLingua() {
return lingua;
public int getLanguage() {
return lang;
}
public void setLingua(int lingua) {
this.lingua = lingua;
public void setLanguage(int lingua) {
this.lang = lingua;
}
}

View File

@@ -186,7 +186,7 @@ public class CommandsExecutor {
addCommand("uptime", UptimeCommand.class);
addCommand("gacha", GachaCommand.class);
addCommand("dispose", DisposeCommand.class);
addCommand("changel", ChangeLinguaCommand.class);
addCommand("changel", ChangeLanguageCommand.class);
addCommand("equiplv", EquipLvCommand.class);
addCommand("showrates", ShowRatesCommand.class);
addCommand("rates", RatesCommand.class);

View File

@@ -26,7 +26,7 @@ package client.command.commands.gm0;
import client.command.Command;
import client.MapleClient;
public class ChangeLinguaCommand extends Command {
public class ChangeLanguageCommand extends Command {
{
setDescription("");
}
@@ -37,6 +37,6 @@ public class ChangeLinguaCommand extends Command {
c.getPlayer().yellowMessage("Syntax: !changel <0=ptb, 1=esp, 2=eng>");
return;
}
c.setLingua(Integer.parseInt(params[0]));
c.setLanguage(Integer.parseInt(params[0]));
}
}

View File

@@ -51,7 +51,7 @@ public class GmCommand extends Command {
return;
}
String message = player.getLastCommandMessage();
Server.getInstance().broadcastGMMessage(c.getWorld(), 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(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
FilePrinter.printError(FilePrinter.COMMAND_GM, MapleCharacter.makeMapleReadable(player.getName()) + ": " + message);
player.dropMessage(5, "Your message '" + message + "' was sent to GMs.");

View File

@@ -44,7 +44,7 @@ public class ReportBugCommand extends Command {
return;
}
String message = player.getLastCommandMessage();
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[BUG]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.sendYellowTip("[Bug]:" + MapleCharacter.makeMapleReadable(player.getName()) + ": " + message));
Server.getInstance().broadcastGMMessage(c.getWorld(), MaplePacketCreator.serverNotice(1, message));
FilePrinter.printError(FilePrinter.COMMAND_BUG, MapleCharacter.makeMapleReadable(player.getName()) + ": " + message);
player.dropMessage(5, "Your bug '" + message + "' was submitted successfully to our developers. Thank you!");

View File

@@ -42,7 +42,6 @@ public class CakeCommand extends Command {
double mobHp = Double.parseDouble(params[0]);
int newHp = (mobHp <= 0) ? Integer.MAX_VALUE : ((mobHp > Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) mobHp);
monster.getStats().setHp(newHp);
monster.setStartingHp(newHp);
}

View File

@@ -54,6 +54,7 @@ public class ForceVacCommand extends Command {
if (mapItem.getMeso() > 0) {
player.gainMeso(mapItem.getMeso(), true);
} else if (player.applyConsumeOnPickup(mapItem.getItemId())) { // thanks Vcoc for pointing out consumables on pickup not being processed here
} else if (mapItem.getItemId() == 4031865 || mapItem.getItemId() == 4031866) {
// Add NX to account, show effect and make item disappear
player.getCashShop().gainCash(1, mapItem.getItemId() == 4031865 ? 100 : 250);

View File

@@ -84,7 +84,7 @@ public class DebugCommand extends Command {
case "portal":
MaplePortal portal = player.getMap().findClosestPortal(player.getPosition());
if (portal != null)
player.dropMessage(6, "Closest portal: " + portal.getId() + " '" + portal.getName() + "' Type: " + portal.getType() + " --> toMap: " + portal.getTargetMapId() + " scriptname: '" + portal.getScriptName() + "' state: " + portal.getPortalState() + ".");
player.dropMessage(6, "Closest portal: " + portal.getId() + " '" + portal.getName() + "' Type: " + portal.getType() + " --> toMap: " + portal.getTargetMapId() + " scriptname: '" + portal.getScriptName() + "' state: " + (portal.getPortalState() ? 1 : 0) + ".");
else player.dropMessage(6, "There is no portal on this map.");
break;

View File

@@ -93,7 +93,7 @@ public abstract class CharacterFactory {
c.announce(MaplePacketCreator.addNewCharEntry(newchar));
Server.getInstance().createCharacterEntry(newchar);
Server.getInstance().broadcastGMMessage(c.getWorld(), 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));
FilePrinter.print(FilePrinter.CREATED_CHAR + c.getAccountName() + ".txt", c.getAccountName() + " created character with IGN " + name);
return 0;

View File

@@ -265,8 +265,12 @@ public class MapleInventoryManipulator {
MapleCharacter chr = c.getPlayer();
MapleInventory inv = chr.getInventory(type);
if(ii.isPickupRestricted(itemid) && haveItemWithId(inv, itemid)) {
return false;
if (ii.isPickupRestricted(itemid)) {
if (haveItemWithId(inv, itemid)) {
return false;
} else if (ItemConstants.isEquipment(itemid) && haveItemWithId(chr.getInventory(MapleInventoryType.EQUIPPED), itemid)) {
return false;
}
}
if (!type.equals(MapleInventoryType.EQUIP)) {
@@ -313,8 +317,12 @@ public class MapleInventoryManipulator {
MapleCharacter chr = c.getPlayer();
MapleInventory inv = chr.getInventory(type);
if(ii.isPickupRestricted(itemid) && haveItemWithId(inv, itemid)) {
return 0;
if (ii.isPickupRestricted(itemid)) {
if (haveItemWithId(inv, itemid)) {
return 0;
} else if (ItemConstants.isEquipment(itemid) && haveItemWithId(chr.getInventory(MapleInventoryType.EQUIPPED), itemid)) {
return 0; // thanks Captain & Aika & Vcoc for pointing out inventory checkup on player trades missing out one-of-a-kind items.
}
}
if (!type.equals(MapleInventoryType.EQUIP)) {
@@ -430,7 +438,7 @@ public class MapleInventoryManipulator {
}
}
if (removeQuantity > 0 && type != MapleInventoryType.CANHOLD) {
throw new RuntimeException("[HACK] Not enough items available of Item:" + itemId + ", Quantity (After Quantity/Over Current Quantity): " + (quantity - removeQuantity) + "/" + quantity);
throw new RuntimeException("[Hack] Not enough items available of Item:" + itemId + ", Quantity (After Quantity/Over Current Quantity): " + (quantity - removeQuantity) + "/" + quantity);
}
}

View File

@@ -318,7 +318,7 @@ public class NewYearCardRecord {
other.removeNewYearRecord(nyc);
other.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(other, nyc, 0xE, 0));
other.dropMessage(6, "[NEW YEAR] " + chr.getName() + " threw away the New Year card.");
other.dropMessage(6, "[New Year] " + chr.getName() + " threw away the New Year card.");
}
}
} else {
@@ -336,7 +336,7 @@ public class NewYearCardRecord {
other.removeNewYearRecord(nyc);
other.getMap().broadcastMessage(MaplePacketCreator.onNewYearCardRes(other, nyc, 0xE, 0));
other.dropMessage(6, "[NEW YEAR] " + chr.getName() + " threw away the New Year card.");
other.dropMessage(6, "[New Year] " + chr.getName() + " threw away the New Year card.");
}
}
}

View File

@@ -42,6 +42,7 @@ import java.util.List;
import net.server.channel.Channel;
import server.DueyPackages;
import server.MapleItemInformationProvider;
import server.MapleTrade;
import tools.DatabaseConnection;
import tools.FilePrinter;
import tools.MaplePacketCreator;
@@ -230,24 +231,6 @@ public class DueyProcessor {
}
}
private static int getFee(long meso) {
long fee = 0;
if (meso >= 100000000) {
fee = (meso * 6) / 100;
} else if (meso >= 25000000) {
fee = (meso * 5) / 100;
} else if (meso >= 10000000) {
fee = (meso * 4) / 100;
} else if (meso >= 5000000) {
fee = (meso * 3) / 100;
} else if (meso >= 1000000) {
fee = (meso * 18) / 1000;
} else if (meso >= 100000) {
fee = (meso * 8) / 1000;
}
return (int) fee;
}
private static void addMesoToDB(int mesos, String sName, int recipientID) {
addItemToDB(null, 1, mesos, sName, recipientID);
}
@@ -404,7 +387,7 @@ public class DueyProcessor {
}
MapleKarmaManipulator.toggleKarmaFlagToUntradeable(item);
addItemToDB(item, amount, mesos - getFee(mesos), c.getPlayer().getName(), getAccIdFromCNAME(recipient, false));
addItemToDB(item, amount, mesos - MapleTrade.getFee(mesos), c.getPlayer().getName(), getAccIdFromCNAME(recipient, false));
} else {
if (item != null) {
c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_INCORRECT_REQUEST.getCode()));
@@ -415,7 +398,7 @@ public class DueyProcessor {
c.getPlayer().gainMeso(-finalcost, false);
c.announce(MaplePacketCreator.sendDueyMSG(DueyProcessor.Actions.TOCLIENT_SEND_SUCCESSFULLY_SENT.getCode()));
addMesoToDB(mesos - getFee(mesos), c.getPlayer().getName(), getAccIdFromCNAME(recipient, false));
addMesoToDB(mesos - MapleTrade.getFee(mesos), c.getPlayer().getName(), getAccIdFromCNAME(recipient, false));
}
if (rClient != null && rClient.isLoggedIn() && !rClient.getPlayer().isAwayFromWorld()) {