Minor Cash Shop + cash items fixes
Fixed minor issues regarding the Cash Shop not selling items and usable cash items.
This commit is contained in:
@@ -1330,6 +1330,19 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
||||
public int countItem(int itemid) {
|
||||
return inventory[MapleItemInformationProvider.getInstance().getInventoryType(itemid).ordinal()].countById(itemid);
|
||||
}
|
||||
|
||||
public boolean canHold(int itemid) {
|
||||
return canHold(itemid, 1);
|
||||
}
|
||||
|
||||
public boolean canHold(int itemid, int quantity) {
|
||||
if(haveItem(itemid)) {
|
||||
if(getItemQuantity(itemid, false) + quantity <= MapleItemInformationProvider.getInstance().getSlotMax(client, itemid))
|
||||
return true;
|
||||
}
|
||||
|
||||
return getInventory(MapleItemInformationProvider.getInstance().getInventoryType(itemid)).getNextFreeSlot() > -1;
|
||||
}
|
||||
|
||||
public void decreaseBattleshipHp(int decrease) {
|
||||
this.battleshipHp -= decrease;
|
||||
|
||||
@@ -38,6 +38,7 @@ import server.CashShop.CashItem;
|
||||
import server.CashShop.CashItemFactory;
|
||||
import server.MapleInventoryManipulator;
|
||||
import server.MapleItemInformationProvider;
|
||||
import tools.FilePrinter;
|
||||
import tools.MaplePacketCreator;
|
||||
import tools.data.input.SeekableLittleEndianAccessor;
|
||||
|
||||
@@ -53,12 +54,14 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
|
||||
return;
|
||||
}
|
||||
final int action = slea.readByte();
|
||||
|
||||
if (action == 0x03 || action == 0x1E) {
|
||||
slea.readByte();
|
||||
final int useNX = slea.readInt();
|
||||
final int snCS = slea.readInt();
|
||||
CashItem cItem = CashItemFactory.getItem(snCS);
|
||||
if (cItem == null || !cItem.isOnSale() || cs.getCash(useNX) < cItem.getPrice()) {
|
||||
FilePrinter.printError(FilePrinter.ITEM, "Denied to sell cash item with SN " + cItem.getSN());
|
||||
return;
|
||||
}
|
||||
if (action == 0x03) { // Item
|
||||
@@ -185,17 +188,18 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
|
||||
if (chr.getInventory(MapleItemInformationProvider.getInstance().getInventoryType(item.getItemId())).addItem(item) != -1) {
|
||||
cs.removeFromInventory(item);
|
||||
c.announce(MaplePacketCreator.takeFromCashInventory(item));
|
||||
if(item instanceof Equip) {
|
||||
Equip equip = (Equip) item;
|
||||
if(equip.getRingId() >= 0) {
|
||||
MapleRing ring = MapleRing.loadFromDb(equip.getRingId());
|
||||
if (ring.getItemId() > 1112012) {
|
||||
chr.addFriendshipRing(ring);
|
||||
} else {
|
||||
chr.addCrushRing(ring);
|
||||
|
||||
if(item instanceof Equip) {
|
||||
Equip equip = (Equip) item;
|
||||
if(equip.getRingId() >= 0) {
|
||||
MapleRing ring = MapleRing.loadFromDb(equip.getRingId());
|
||||
if (ring.getItemId() > 1112012) {
|
||||
chr.addFriendshipRing(ring);
|
||||
} else {
|
||||
chr.addCrushRing(ring);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (action == 0x0E) { // Put into Cash Inventory
|
||||
int cashId = slea.readInt();
|
||||
@@ -250,8 +254,9 @@ public final class CashOperationHandler extends AbstractMaplePacketHandler {
|
||||
c.announce(MaplePacketCreator.showCash(c.getPlayer()));
|
||||
} else if (action == 0x20) { // everything is 1 meso...
|
||||
int itemId = CashItemFactory.getItem(slea.readInt()).getItemId();
|
||||
|
||||
if (chr.getMeso() > 0) {
|
||||
if (itemId == 4031180 || itemId == 4031192 || itemId == 4031191) {
|
||||
if (chr.canHold(itemId)) {
|
||||
chr.gainMeso(-1, false);
|
||||
MapleInventoryManipulator.addById(c, itemId, (short) 1);
|
||||
c.announce(MaplePacketCreator.showBoughtQuestItem(itemId));
|
||||
|
||||
@@ -124,7 +124,7 @@ public final class SpecialMoveHandler extends AbstractMaplePacketHandler {
|
||||
if (skill.getId() != Priest.MYSTIC_DOOR || chr.canDoor()) {
|
||||
skill.getEffect(skillLevel).applyTo(c.getPlayer(), pos);
|
||||
} else {
|
||||
chr.message("Please wait 5 seconds before casting Mystic Door again");
|
||||
chr.message("Please wait 5 seconds before casting Mystic Door again.");
|
||||
c.announce(MaplePacketCreator.enableActions());
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -58,6 +58,8 @@ public final class UseCashItemHandler extends AbstractMaplePacketHandler {
|
||||
public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
|
||||
MapleCharacter player = c.getPlayer();
|
||||
if (System.currentTimeMillis() - player.getLastUsedCashItem() < 3000) {
|
||||
player.dropMessage(1, "You have used a cash item recently. Wait a moment and try again.");
|
||||
c.announce(MaplePacketCreator.enableActions());
|
||||
return;
|
||||
}
|
||||
player.setLastUsedCashItem(System.currentTimeMillis());
|
||||
|
||||
@@ -188,17 +188,12 @@ public class AbstractPlayerInteraction {
|
||||
}
|
||||
|
||||
public boolean canHold(int itemid) {
|
||||
return canHold(itemid, 1);
|
||||
}
|
||||
return canHold(itemid, 1);
|
||||
}
|
||||
|
||||
public boolean canHold(int itemid, int quantity) {
|
||||
if(haveItem(itemid)) {
|
||||
if(getPlayer().getItemQuantity(itemid, false) + quantity <= MapleItemInformationProvider.getInstance().getSlotMax(c, itemid))
|
||||
return true;
|
||||
}
|
||||
|
||||
return getPlayer().getInventory(MapleItemInformationProvider.getInstance().getInventoryType(itemid)).getNextFreeSlot() > -1;
|
||||
}
|
||||
return getPlayer().canHold(itemid, quantity);
|
||||
}
|
||||
|
||||
//---- \/ \/ \/ \/ \/ \/ \/ NOT TESTED \/ \/ \/ \/ \/ \/ \/ \/ \/ ----
|
||||
|
||||
|
||||
@@ -6200,7 +6200,7 @@
|
||||
<int name="Period" value="90"/>
|
||||
<int name="Priority" value="9"/>
|
||||
<int name="Gender" value="2"/>
|
||||
<int name="OnSale" value="0"/>
|
||||
<int name="OnSale" value="1"/>
|
||||
<int name="Class" value="2"/>
|
||||
</imgdir>
|
||||
<imgdir name="616">
|
||||
|
||||
Reference in New Issue
Block a user