package handling.cashshop.handler;
import client.MapleCharacter;
import client.MapleCharacterUtil;
import client.MapleClient;
import client.MapleQuestStatus;
import client.inventory.Item;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryIdentifier;
import client.inventory.MapleInventoryType;
import client.inventory.MapleRing;
import constants.ItemConstants;
import database.DatabaseConnection;
import handling.cashshop.CashShopServer;
import handling.channel.ChannelServer;
import handling.world.WorldFindService;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import org.apache.log4j.Logger;
import server.AutobanManager;
import server.MapleInventoryManipulator;
import server.MapleItemInformationProvider;
import server.Randomizer;
import server.cashshop.CashItemFactory;
import server.cashshop.CashItemInfo;
import server.cashshop.CashShop;
import server.quest.MapleQuest;
import tools.FileoutputUtil;
import tools.StringUtil;
import tools.Triple;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.packet.MTSCSPacket;
public class BuyCashItemHandler {
private static final Logger log = Logger.getLogger(BuyCashItemHandler.class);
public static void BuyCashItem(SeekableLittleEndianAccessor slea, MapleClient c, MapleCharacter chr) {
// 73 05 00 01
// 73 02 00 DB 96 98 00
int action = slea.readByte() & 0xFF;
CashShop cs = chr.getCashInventory();
int sn;
CashItemFactory cashinfo = CashItemFactory.getInstance();
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
switch (action) {
case 0x02: // 购买道具
int toCharge = slea.readByte() + 1;
int snCS = slea.readInt();
CashItemInfo cItem = cashinfo.getItem(snCS);
if (chr.isShowPacket()) {
FileoutputUtil.log(new StringBuilder().append("商城 => 购买 - 物品 ").append(snCS).append(" 是否为空 ").append(cItem == null).toString());
}
if (cItem != null) {
if (snCS == 92000046) {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买道具.");
return;
}
if ((cItem.getId() / 1000 == 5533) && (!cashinfo.hasRandomItem(cItem.getId()))) {
chr.dropMessage(1, "该道具暂时无法购买,因为找不到对应的箱子信息.");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (cItem.getId() == 5451001 || cItem.getId() == 5065000 || cItem.getId() == 5065100) {
chr.dropMessage(1, "该道具禁止购买。");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (chr.getCSPoints(toCharge) < cItem.getPrice()) {
chr.dropMessage(1, "点券余额不足");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (!cItem.genderEquals(chr.getGender())) {
chr.dropMessage(1, "请确认角色性别是否错误");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (cs.getItemsSize() >= 100) {
chr.dropMessage(1, "保管箱已满");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if ((cashinfo.isBlockedCashItemId(cItem.getId())) || (cashinfo.isBlockCashSnId(snCS))) {
chr.dropMessage(1, "该道具禁止购买。");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (cItem.getPrice() <= 0) {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买道具.");
return;
}
if (chr.isShowPacket()) {
FileoutputUtil.log(new StringBuilder().append("商城 => 购买 - 点券类型 ").append(toCharge).append(" 减少 ").append(cItem.getPrice()).toString());
}
Item item = cs.toItem(cItem);
if ((item != null) && (item.getUniqueId() > 0) && (item.getItemId() == cItem.getId()) && (item.getQuantity() == cItem.getCount())) {
chr.modifyCSPoints(toCharge, -cItem.getPrice(), false);
if (ii.isCash(item.getItemId())) {
// 先直接放到背包了
//chr.getInventory(ItemConstants.getInventoryType(item.getItemId())).addItem(item);
cs.addToInventory(item);
c.getSession().write(MTSCSPacket.购买商城道具(item, cItem.getSN(), c.getAccID()));
} else {
FileoutputUtil.log(new StringBuilder().append("[作弊] ").append(chr.getName()).append(" 商城非法购买道具.道具: ").append(item.getItemId()).append(" - ").append(ii.getName(item.getItemId())).toString());
// AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买道具.");
}
} else {
chr.dropMessage(1, "购买道具出错 代码(2)");
}
} else {
chr.dropMessage(1, "购买道具出错:不存在的SN号码!");
}
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x03: // 赠送给别人
// 73 03
// DB 96 98 00
// 07 00 31 32 33 34 35 36 37 收礼物的人
// 08 00 71 71 71 71 71 71 71 0A 留言
chr.dropMessage(1, "暂不支持,直接选了点送礼吧!");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x04:
chr.dropMessage(1, "暂不支持,直接选了点送礼吧!");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
// case 0x05: //购物栏
// chr.clearWishlist();
// if (slea.available() < 40L) {
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// return;
// }
// int[] wishlist = new int[12];
// for (int i = 0; i < 12; i++) {
// wishlist[i] = slea.readInt();
// }
// chr.setWishlist(wishlist);
// c.getSession().write(MTSCSPacket.商城购物车(chr, true));
// break;
case 0x05:
// 73 05 00 01
// 73 05 01 02
toCharge = slea.readByte() + 1;
// boolean coupon = slea.readByte() > 0;
// if (coupon) {
// snCS = slea.readInt();
// cItem = CashItemFactory.getInstance().getItem(snCS);
// if (cItem == null) {
// chr.dropMessage(1, "未知错误");
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// break;
// }
// int types = (cItem.getId() - 9110000) / 1000;
// MapleInventoryType type = MapleInventoryType.getByType((byte) types);
// if (chr.isShowPacket()) {
// FileoutputUtil.log(new StringBuilder().append("增加道具栏 snCS ").append(snCS).append(" 扩充: ").append(types).toString());
// }
// if ((chr.getCSPoints(toCharge) >= 1100) && (chr.getInventory(type).getSlotLimit() < 96)) {
// chr.modifyCSPoints(toCharge, -1100, false);
// chr.getInventory(type).addSlot((byte) 8);
//
// c.getSession().write(MTSCSPacket.扩充道具栏(type.getType(), chr.getInventory(type).getSlotLimit()));
// } else {
// chr.dropMessage(1, "扩充失败,点券余额不足或者栏位已超过上限。");
// }
// } else {
MapleInventoryType type = MapleInventoryType.getByType(slea.readByte());
if ((chr.getCSPoints(toCharge) >= 600) && (chr.getInventory(type).getSlotLimit() < 96)) {
chr.modifyCSPoints(toCharge, -600, false);
chr.getInventory(type).addSlot((byte) 4);
c.getSession().write(MTSCSPacket.扩充道具栏(type.getType(), chr.getInventory(type).getSlotLimit()));
chr.dropMessage(1, "扩充成功!");
} else {
chr.dropMessage(1, "扩充失败,点券余额不足或者栏位已超过上限。");
}
// }
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x06: // 扩充仓库
toCharge = slea.readByte() + 1;
if (chr.getCSPoints(toCharge) >= 600) {
if (chr.getStorage().getSlots() < 96 - 4 ) {
chr.modifyCSPoints(toCharge, -600, false);
chr.getStorage().increaseSlots((byte) (4));
chr.getStorage().saveToDB();
chr.dropMessage(1, new StringBuilder().append("仓库扩充成功,当前栏位: ").append(chr.getStorage().getSlots()).append(" 个。").toString());
} else {
chr.dropMessage(1, "仓库扩充失败,栏位已超过上限。.");
}
} else {
chr.dropMessage(1, "仓库扩充失败,点券余额不足.");
}
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x09:
// toCharge = slea.readByte() + 1;
// sn = slea.readInt();
// cItem = CashItemFactory.getInstance().getItem(sn);
chr.dropMessage(1, "暂时不支持。");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x0E:
int uniqueId = (int) slea.readLong();
Item item1 = cs.findByCashId(uniqueId);
if (item1 == null) {
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
if (chr.isShowPacket()) {
FileoutputUtil.log("删除商城道具 - 道具为空 删除失败");
}
return;
}
cs.removeFromInventory(item1);
c.getSession().write(MTSCSPacket.商城删除道具(uniqueId));
break;
case 0x0A: // 商城到背包 06 00 00 00 00 00 00 00 02 02 00
item1 = cs.findByCashId((int) slea.readLong());
byte itemType = slea.readByte();
if (item1 == null) {
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (chr.getInventory(MapleInventoryType.getByType(itemType)).addItem(item1) == -1) {
break;
}
cs.removeFromInventory(item1);
c.getSession().write(MTSCSPacket.商城到背包(item1));
if (chr.isShowPacket()) {
FileoutputUtil.log("商城 => 背包 - 移动成功");
}
break;
case 0xB: // 背包到商城
int cashId = (int) slea.readLong();
itemType = slea.readByte();
MapleInventory mi = chr.getInventory(MapleInventoryType.getByType(itemType));
item1 = mi.findByUniqueId(cashId);
if (chr.isShowPacket()) {
FileoutputUtil.log(new StringBuilder().append("背包 => 商城 - 道具是否为空 ").append(item1 == null).toString());
}
if (item1 == null) {
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (cs.getItemsSize() < 100) {
snCS = cashinfo.getSnFromId(item1.getItemId());
cs.addToInventory(item1);
mi.removeSlot(item1.getPosition());
c.getSession().write(MTSCSPacket.背包到商城(item1, c.getAccID(), snCS));
if (chr.isShowPacket()) {
FileoutputUtil.log("背包 => 商城 - 移动成功");
}
} else {
chr.dropMessage(1, "移动失败。");
}
break;
case 0x20:
slea.readMapleAsciiString();
toCharge = 2;
uniqueId = (int) slea.readLong();
item1 = cs.findByCashId(uniqueId);
if (item1 == null) {
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
snCS = cashinfo.getSnFromId(item1.getItemId());
cItem = cashinfo.getItem(snCS);
if ((cItem == null) || (cashinfo.isBlockRefundableItemId(item1.getItemId()))) {
if (chr.isShowPacket()) {
if (cItem == null) {
chr.dropMessage(1, new StringBuilder().append("换购失败:\r\n道具是否为空: ").append(cItem == null).toString());
} else {
chr.dropMessage(1, new StringBuilder().append("换购失败:\r\n道具禁止回购: ").append(cashinfo.isBlockRefundableItemId(item1.getItemId())).toString());
}
} else {
chr.dropMessage(1, "换购失败,当前道具不支持换购。");
}
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (!ii.isCash(cItem.getId())) {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法换购道具.");
return;
}
int Money = cItem.getPrice() / 10 * 3;
cs.removeFromInventory(item1);
chr.modifyCSPoints(toCharge, Money, false);
c.getSession().write(MTSCSPacket.商城换购道具(uniqueId, Money));
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x23:
case 0x2A:
slea.readMapleAsciiString();
slea.skip(1);
toCharge = 1;
snCS = slea.readInt();
CashItemInfo item = cashinfo.getItem(snCS);
slea.skip(4);
String partnerName = slea.readMapleAsciiString();
String msg = slea.readMapleAsciiString();
if ((item == null) || (!ItemConstants.isEffectRing(item.getId())) || (chr.getCSPoints(toCharge) < item.getPrice()) || (msg.length() > 73) || (msg.length() < 1)) {
c.getSession().write(MTSCSPacket.商城错误提示(0));
return;
}
if (!item.genderEquals(chr.getGender())) {
c.getSession().write(MTSCSPacket.商城错误提示(7));
return;
}
if (chr.getCashInventory().getItemsSize() >= 100) {
c.getSession().write(MTSCSPacket.商城错误提示(24));
return;
}
if (!ii.isCash(item.getId())) {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买戒指道具.");
return;
}
if ((cashinfo.isBlockedCashItemId(item.getId())) || (cashinfo.isBlockCashSnId(snCS))) {
chr.dropMessage(1, "该道具禁止购买。");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
Triple info = MapleCharacterUtil.getInfoByName(partnerName, chr.getWorld());
if ((info == null) || (((Integer) info.getLeft()) <= 0)) {
c.getSession().write(MTSCSPacket.商城错误提示(7));
} else if ((((Integer) info.getMid()) == c.getAccID()) || (((Integer) info.getLeft()) == chr.getId())) {
c.getSession().write(MTSCSPacket.商城错误提示(6));
} else {
if ((((Integer) info.getRight()) == chr.getGender()) && (action == 35)) {
c.getSession().write(MTSCSPacket.商城错误提示(26));
return;
}
int err = MapleRing.createRing(item.getId(), chr, partnerName, msg, ((Integer) info.getLeft()).intValue(), item.getSN());
if (err != 1) {
c.getSession().write(MTSCSPacket.商城错误提示(1));
return;
}
chr.modifyCSPoints(toCharge, -item.getPrice(), false);
c.getSession().write(MTSCSPacket.商城送礼(item.getId(), item.getCount(), partnerName));
chr.sendNote(partnerName, new StringBuilder().append(partnerName).append(" 您已收到").append(chr.getName()).append("送给您的礼物,请进入现金商城查看!").toString());
int chz = WorldFindService.getInstance().findChannel(partnerName);
if (chz > 0) {
MapleCharacter receiver = ChannelServer.getInstance(chz).getPlayerStorage().getCharacterByName(partnerName);
if (receiver != null) {
receiver.showNote();
}
}
}
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x25: // 礼包购买
toCharge = slea.readByte() + 1;
int snCsId = slea.readInt();
int count = slea.readInt();
chr.dropMessage(1, "礼包购买未开放.");
// if ((snCsId == 10200551) || (snCsId == 10200552) || (snCsId == 10200553)) {
// chr.dropMessage(1, "当前服务器未开放购买商城活动栏里面的道具.");
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// return;
// }
// if (cashinfo.isBlockCashSnId(snCsId)) {
// chr.dropMessage(1, "该礼包禁止购买.");
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// return;
// }
// item = cashinfo.getItem(snCsId);
// List packageIds = null;
// if (item != null) {
// packageIds = cashinfo.getPackageItems(item.getId());
// }
// if ((item == null) || (packageIds == null)) {
// msg = "未知错误";
// if (chr.isAdmin()) {
// if (item == null) {
// msg = new StringBuilder().append(msg).append("\r\n\r\n 礼包道具信息为空").toString();
// }
// if (packageIds == null) {
// msg = new StringBuilder().append(msg).append("\r\n\r\n 礼包道具里面的物品道具为空").toString();
// }
// }
// chr.dropMessage(1, msg);
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// return;
// }
// if (chr.getCSPoints(toCharge) < item.getPrice()) {
// c.getSession().write(MTSCSPacket.商城错误提示(3));
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// return;
// }
// if (!item.genderEquals(c.getPlayer().getGender())) {
// chr.dropMessage(1, "性别不符合");
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// return;
// }
// if (c.getPlayer().getCashInventory().getItemsSize() >= 100 - packageIds.size()) {
// c.getSession().write(MTSCSPacket.商城错误提示(24));
// c.getSession().write(MTSCSPacket.刷新点券信息(chr));
// return;
// }
// if (item.getPrice() <= 0) {
// AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买礼包道具.");
// return;
// }
// chr.modifyCSPoints(toCharge, -item.getPrice(), false);
// Map packageItems = new HashMap();
// for (Iterator i$ = packageIds.iterator(); i$.hasNext();) {
// int i = ((Integer) i$.next()).intValue();
// CashItemInfo cii = cashinfo.getSimpleItem(i);
// if (cii == null) {
// continue;
// }
// Item itemz = chr.getCashInventory().toItem(cii);
// if ((itemz == null) || (itemz.getUniqueId() <= 0)
// || (cashinfo.isBlockedCashItemId(item.getId()))) {
// continue;
// }
// if (!ii.isCash(itemz.getItemId())) {
// FileoutputUtil.log(new StringBuilder().append("[作弊] ").append(chr.getName()).append(" 商城非法购买礼包道具.道具: ").append(itemz.getItemId()).append(" - ").append(ii.getName(itemz.getItemId())).toString());
// AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买礼包道具.");
// continue;
// }
// packageItems.put(Integer.valueOf(i), itemz);
// chr.getCashInventory().addToInventory(itemz);
// addCashshopLog(chr, snCsId, itemz.getItemId(), toCharge, item.getPrice(), itemz.getQuantity(), new StringBuilder().append(chr.getName()).append(" 购买礼包: ").append(ii.getName(itemz.getItemId())).append(" - ").append(i).toString());
// }
// c.getSession().write(MTSCSPacket.商城购买礼包(packageItems, c.getAccID()));
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x26:
slea.readMapleAsciiString();
snCsId = slea.readInt();
item = cashinfo.getItem(snCsId);
partnerName = slea.readMapleAsciiString();
msg = slea.readMapleAsciiString();
if ((item == null) || (chr.getCSPoints(1) < item.getPrice()) || (msg.length() > 73) || (msg.length() < 1)) {
c.getSession().write(MTSCSPacket.商城错误提示(3));
return;
}
if (cashinfo.isBlockCashSnId(snCsId)) {
chr.dropMessage(1, "该礼包禁止购买.");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
info = MapleCharacterUtil.getInfoByName(partnerName, chr.getWorld());
if ((info == null) || (((Integer) info.getLeft()) <= 0)) {
c.getSession().write(MTSCSPacket.商城错误提示(7));
} else if ((((Integer) info.getLeft()) == chr.getId()) || (((Integer) info.getMid()) == c.getAccID())) {
c.getSession().write(MTSCSPacket.商城错误提示(6));
} else if (!item.genderEquals(((Integer) info.getRight()))) {
c.getSession().write(MTSCSPacket.商城错误提示(8));
} else {
if (item.getPrice() <= 0) {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买礼包道具.");
return;
}
chr.getCashInventory().gift(((Integer) info.getLeft()), chr.getName(), msg, item.getSN(), MapleInventoryIdentifier.getInstance());
chr.modifyCSPoints(1, -item.getPrice(), false);
c.getSession().write(MTSCSPacket.商城送礼包(item.getId(), item.getCount(), partnerName));
chr.sendNote(partnerName, new StringBuilder().append(partnerName).append(" 您已收到").append(chr.getName()).append("送给您的礼物,请进入现金商城查看!").toString());
int chz = WorldFindService.getInstance().findChannel(partnerName);
if (chz > 0) {
MapleCharacter receiver = ChannelServer.getInstance(chz).getPlayerStorage().getCharacterByName(partnerName);
if (receiver != null) {
receiver.showNote();
}
}
}
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x27:
item = cashinfo.getItem(slea.readInt());
if ((item == null) || (!MapleItemInformationProvider.getInstance().isQuestItem(item.getId()))) {
chr.dropMessage(1, "该道具不是任务物品");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if ((chr.getMeso() < item.getPrice()) || (item.getPrice() <= 0)) {
chr.dropMessage(1, "金币不足");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (chr.getItemQuantity(item.getId()) > 0) {
chr.dropMessage(1, "你已经有这个道具\r\n不能购买.");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (chr.getInventory(ItemConstants.getInventoryType(item.getId())).getNextFreeSlot() < 0) {
chr.dropMessage(1, "背包空间不足");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (cashinfo.isBlockedCashItemId(item.getId())) {
chr.dropMessage(1, CashShopServer.getCashBlockedMsg(item.getId()));
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if ((item.getId() == 4031063) || (item.getId() == 4031191) || (item.getId() == 4031192)) {
byte pos = MapleInventoryManipulator.addId(c, item.getId(), (short) item.getCount(), null, new StringBuilder().append("商城: 任务物品 在 ").append(FileoutputUtil.CurrentReadable_Date()).toString());
if (pos < 0) {
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
chr.gainMeso(-item.getPrice(), false);
c.getSession().write(MTSCSPacket.updataMeso(chr));
c.getSession().write(MTSCSPacket.商城购买任务道具(item.getPrice(), (short) item.getCount(), pos, item.getId()));
} else {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买任务道具.");
}
break;
case 0x32:
slea.readByte();
snCS = slea.readInt();
slea.readInt();
if ((snCS == 50200031) && (chr.getCSPoints(1) >= 500)) {
chr.modifyCSPoints(1, -500, false);
chr.modifyCSPoints(2, 500, false);
chr.dropMessage(1, "兑换抵用卷成功");
} else if ((snCS == 50200032) && (chr.getCSPoints(1) >= 1000)) {
chr.modifyCSPoints(1, -1000, false);
chr.modifyCSPoints(2, 1000, false);
chr.dropMessage(1, "兑换抵用卷成功");
} else if ((snCS == 50200033) && (chr.getCSPoints(1) >= 5000)) {
chr.modifyCSPoints(1, -5000, false);
chr.modifyCSPoints(2, 5000, false);
chr.dropMessage(1, "兑换抵用卷成功");
} else {
chr.dropMessage(1, "没有找到这个道具的信息。");
}
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
case 0x34:
c.getSession().write(MTSCSPacket.redeemResponse());
break;
case 0x41:
uniqueId = (int) slea.readLong();
Item boxItem = cs.findByCashId((int) uniqueId);
if ((boxItem == null) || (!cashinfo.hasRandomItem(boxItem.getItemId()))) {
chr.dropMessage(1, "打开箱子失败,服务器找不到对应的道具信息。");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
List boxItemSNs = cashinfo.getRandomItem(boxItem.getItemId());
if (boxItemSNs.isEmpty()) {
chr.dropMessage(1, "打开箱子失败,服务器找不到对应的道具信息。");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
snCS = ((Integer) boxItemSNs.get(Randomizer.nextInt(boxItemSNs.size())));
cItem = cashinfo.getItem(snCS);
if (cItem != null) {
item1 = cs.toItem(cItem);
if ((item1 != null) && (item1.getUniqueId() > 0) && (item1.getItemId() == cItem.getId()) && (item1.getQuantity() == cItem.getCount())) {
if (chr.getInventory(ItemConstants.getInventoryType(item1.getItemId())).addItem(item1) != -1) {
cs.removeFromInventory(boxItem);
c.getSession().write(MTSCSPacket.商城打开箱子(item1, Long.valueOf(uniqueId)));
} else {
chr.dropMessage(1, "打开箱子失败,请确认背包是否有足够的空间。");
}
}
}
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
break;
default:
label1652:
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
FileoutputUtil.log(new StringBuilder().append("商城操作未知的操作类型: 0x").append(StringUtil.getLeftPaddedStr(Integer.toHexString(action).toUpperCase(), '0', 2)).append(" ").append(slea.toString()).toString());
}
}
public static void 商城送礼(SeekableLittleEndianAccessor slea, MapleClient c, MapleCharacter chr) {
slea.readMapleAsciiString();
int snCS = slea.readInt();
CashItemFactory cashinfo = CashItemFactory.getInstance();
CashItemInfo item = cashinfo.getItem(snCS);
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
String partnerName = slea.readMapleAsciiString();
String msg = slea.readMapleAsciiString();
if (snCS == 92000046) {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法购买道具.");
return;
}
if ((cashinfo.isBlockedCashItemId(item.getId())) || (cashinfo.isBlockCashSnId(snCS))) {
chr.dropMessage(1, "该道具禁止购买。");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if ((item == null) || (chr.getCSPoints(1) < item.getPrice()) || (msg.length() > 73) || (msg.length() < 1)) {
c.getSession().write(MTSCSPacket.商城错误提示(3));
return;
}
Triple info = MapleCharacterUtil.getInfoByName(partnerName, chr.getWorld());
if ((info == null) || (((Integer) info.getLeft()) <= 0)) {
c.getSession().write(MTSCSPacket.商城错误提示(7));
} else if ((((Integer) info.getLeft()) == chr.getId()) || (((Integer) info.getMid()) == c.getAccID())) {
c.getSession().write(MTSCSPacket.商城错误提示(6));
} else if (!item.genderEquals(((Integer) info.getRight()))) {
c.getSession().write(MTSCSPacket.商城错误提示(8));
} else {
if (!ii.isCash(item.getId())) {
FileoutputUtil.log(new StringBuilder().append("[作弊] ").append(chr.getName()).append(" 商城非法购买礼物道具.道具: ").append(item.getId()).append(" - ").append(ii.getName(item.getId())).toString());
chr.dropMessage(1, "购买商城礼物道具出现错误.");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
if (item.getPrice() <= 0) {
AutobanManager.getInstance().autoban(chr.getClient(), "商城非法赠送礼包道具.");
return;
}
chr.getCashInventory().gift(((Integer) info.getLeft()), chr.getName(), msg, item.getSN(), MapleInventoryIdentifier.getInstance());
chr.modifyCSPoints(1, -item.getPrice(), false);
c.getSession().write(MTSCSPacket.商城送礼(item.getId(), item.getCount(), partnerName));
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
chr.sendNote(partnerName, new StringBuilder().append(partnerName).append(" 您已收到").append(chr.getName()).append("送给您的礼物,请进入现金商城查看!").toString());
int chz = WorldFindService.getInstance().findChannel(partnerName);
if (chz > 0) {
MapleCharacter receiver = ChannelServer.getInstance(chz).getPlayerStorage().getCharacterByName(partnerName);
if (receiver != null) {
receiver.showNote();
}
}
}
}
private static MapleInventoryType getInventoryType(int id) {
switch (id) {
case 50200075:
return MapleInventoryType.EQUIP;
case 50200074:
return MapleInventoryType.USE;
case 50200073:
return MapleInventoryType.ETC;
}
return MapleInventoryType.UNDEFINED;
}
public static void openAvatarRandomBox(SeekableLittleEndianAccessor slea, MapleClient c, MapleCharacter chr) {
if (chr == null) {
return;
}
CashShop cs = chr.getCashInventory();
Item item = cs.findByCashId((int) slea.readLong());
if ((item == null) || (item.getItemId() != 5222036)) {
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
return;
}
chr.dropMessage(1, "当前游戏不支持此功能");
c.getSession().write(MTSCSPacket.刷新点券信息(chr));
}
}