Proper coupon packet. (DB) coupon_items type 0 = mesos. (#491)

This commit is contained in:
Ubaware
2019-07-18 15:21:23 -07:00
committed by Ronan Lana
parent a29c3bcc81
commit 187023c81f
2 changed files with 47 additions and 21 deletions

View File

@@ -31,6 +31,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@@ -63,7 +64,6 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
ResultSet rs = ps.executeQuery(); ResultSet rs = ps.executeQuery();
while (rs.next()) { while (rs.next()) {
int type = rs.getInt("type"), quantity = rs.getInt("quantity"); int type = rs.getInt("type"), quantity = rs.getInt("quantity");
if (type < 5) { if (type < 5) {
Integer i = couponPoints.get(type); Integer i = couponPoints.get(type);
if (i != null) { if (i != null) {
@@ -195,8 +195,13 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
if (type < 0) { if (type < 0) {
c.announce(MaplePacketCreator.showCashShopMessage((byte) parseCouponResult(type))); c.announce(MaplePacketCreator.showCashShopMessage((byte) parseCouponResult(type)));
} else { } else {
List<Item> couponPackage = new LinkedList<>(); List<Item> cashItems = new LinkedList<Item>();
List<Pair<Integer, Integer>> items = new LinkedList<Pair<Integer, Integer>>();
int nxCredit = 0;
int maplePoints = 0;
int nxPrepaid = 0;
int mesos = 0;
for (Pair<Integer, Pair<Integer, Integer>> p : codeRes.getRight()) { for (Pair<Integer, Pair<Integer, Integer>> p : codeRes.getRight()) {
type = p.getLeft(); type = p.getLeft();
int quantity = p.getRight().getRight(); int quantity = p.getRight().getRight();
@@ -204,18 +209,26 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
CashShop cs = c.getPlayer().getCashShop(); CashShop cs = c.getPlayer().getCashShop();
switch (type) { switch (type) {
case 0: case 0:
c.getPlayer().gainMeso(quantity, false); //mesos
mesos += quantity;
break;
case 4: case 4:
cs.gainCash(1, quantity); //nxCredit cs.gainCash(1, quantity); //nxCredit
nxCredit += quantity;
break; break;
case 1: case 1:
cs.gainCash(2, quantity); //maplePoint cs.gainCash(2, quantity); //maplePoint
maplePoints += quantity;
break; break;
case 2: case 2:
cs.gainCash(4, quantity); //nxPrepaid cs.gainCash(4, quantity); //nxPrepaid
nxPrepaid += quantity;
break; break;
case 3: case 3:
cs.gainCash(1, quantity); cs.gainCash(1, quantity);
nxCredit += quantity;
cs.gainCash(4, (quantity / 5000)); cs.gainCash(4, (quantity / 5000));
nxPrepaid += quantity / 5000;
break; break;
default: default:
@@ -234,22 +247,28 @@ public final class CouponCodeHandler extends AbstractMaplePacketHandler {
Item it = CashShop.generateCouponItem(item, qty); Item it = CashShop.generateCouponItem(item, qty);
cs.addToInventory(it); cs.addToInventory(it);
couponPackage.add(it); cashItems.add(it);
} else { } else {
MapleInventoryManipulator.addById(c, item, qty, "", -1); MapleInventoryManipulator.addById(c, item, qty, "", -1);
items.add(new Pair<Integer, Integer>((int)qty, item));
} }
//c.announce(MaplePacketCreator.showCouponRedeemedItem(item));
break; break;
} }
} }
if(cashItems.size() > 255) {
if (!couponPackage.isEmpty()) { List<Item> oldList = cashItems;
c.announce(MaplePacketCreator.showBoughtCashPackage(couponPackage, c.getAccID())); cashItems = Arrays.asList(new Item[255]);
} else { int index = 0;
c.announce(MaplePacketCreator.showBoughtQuestItem(0)); for(Item item : oldList) {
cashItems.set(index, item);
index++;
}
}
if (nxCredit != 0 || nxPrepaid != 0) { //coupon packet can only show maple points (afaik)
c.announce(MaplePacketCreator.showBoughtQuestItem(0));
} else {
c.announce(MaplePacketCreator.showCouponRedeemedItems(c.getAccID(), maplePoints, mesos, cashItems, items));
} }
c.enableCSActions(); c.enableCSActions();
} }
} finally { } finally {

View File

@@ -6112,12 +6112,12 @@ public class MaplePacketCreator {
return mplew.getPacket(); return mplew.getPacket();
} }
public static byte[] sendNameTransferCheck(boolean canUseName) { public static byte[] sendNameTransferCheck(boolean canUseName) {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE.getValue()); mplew.writeShort(SendOpcode.CASHSHOP_CHECK_NAME_CHANGE.getValue());
mplew.writeShort(0); mplew.writeShort(0);
mplew.writeBool(!canUseName); mplew.writeBool(!canUseName);
return mplew.getPacket(); return mplew.getPacket();
} }
@@ -6219,16 +6219,23 @@ public class MaplePacketCreator {
return mplew.getPacket(); return mplew.getPacket();
} }
public static byte[] showCouponRedeemedItem(int itemid) { public static byte[] showCouponRedeemedItems(int accountId, int maplePoints, int mesos, List<Item> cashItems, List<Pair<Integer, Integer>> items) {
final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();
mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue()); mplew.writeShort(SendOpcode.CASHSHOP_OPERATION.getValue());
mplew.writeShort(0x49); //v72 mplew.write(0x59);
mplew.writeInt(0); mplew.write((byte)cashItems.size());
mplew.writeInt(1); for(Item item : cashItems) {
mplew.writeShort(1); addCashItemInformation(mplew, item, accountId);
mplew.writeShort(0x1A); }
mplew.writeInt(itemid); mplew.writeInt(maplePoints);
mplew.writeInt(0); mplew.writeInt(items.size());
for(Pair<Integer, Integer> itemPair : items) {
int quantity = itemPair.getLeft();
mplew.writeShort((short) quantity); //quantity (0 = 1 for cash items)
mplew.writeShort(0x1F); //0 = ?, >=0x20 = ?, <0x20 = ? (does nothing?)
mplew.writeInt(itemPair.getRight());
}
mplew.writeInt(mesos);
return mplew.getPacket(); return mplew.getPacket();
} }