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:
ronancpl
2017-05-17 22:56:07 -03:00
parent d736d00964
commit 39a53e88fd
6 changed files with 37 additions and 22 deletions

View File

@@ -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;

View File

@@ -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));

View File

@@ -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 {

View File

@@ -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());

View File

@@ -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 \/ \/ \/ \/ \/ \/ \/ \/ \/ ----

View File

@@ -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">