📄 mapleinventorymanipulator.java
字号:
} else {
if (!consume) {
StringBuilder logMsg = new StringBuilder(c.getPlayer().getName());
logMsg.append(" removed ");
logMsg.append(quantity);
logMsg.append(". ");
logMsg.append(item.getQuantity());
logMsg.append(" left.");
item.log(logMsg.toString(), false);
}
c.getSession().write(MaplePacketCreator.updateInventorySlot(type, (Item) item, fromDrop));
}
}
public static void removeById(MapleClient c, MapleInventoryType type, int itemId, int quantity, boolean fromDrop, boolean consume) {
List<IItem> items = c.getPlayer().getInventory(type).listById(itemId);
int remremove = quantity;
for (IItem item : items) {
if (remremove <= item.getQuantity()) {
removeFromSlot(c, type, item.getPosition(), (short) remremove, fromDrop, consume);
remremove = 0;
break;
} else {
remremove -= item.getQuantity();
removeFromSlot(c, type, item.getPosition(), item.getQuantity(), fromDrop, consume);
}
}
if (remremove > 0) {
throw new InventoryException("[h4x] Not enough cheese available (" + itemId + ", " + (quantity - remremove) +
"/" + quantity + ")");
}
}
public static void move(MapleClient c, MapleInventoryType type, byte src, byte dst) {
if (src < 0 || dst < 0)
return;
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
IItem source = c.getPlayer().getInventory(type).getItem(src);
IItem initialTarget = c.getPlayer().getInventory(type).getItem(dst);
if (source == null)
return;
short olddstQ = -1;
if (initialTarget != null)
olddstQ = initialTarget.getQuantity();
short oldsrcQ = source.getQuantity();
short slotMax = ii.getSlotMax(source.getItemId());
c.getPlayer().getInventory(type).move(src, dst, slotMax);
if (!type.equals(MapleInventoryType.EQUIP) && initialTarget != null &&
initialTarget.getItemId() == source.getItemId() && !ii.isThrowingStar(source.getItemId())) {
if ((olddstQ + oldsrcQ) > slotMax) {
c.getSession().write(
MaplePacketCreator.moveAndMergeWithRestInventoryItem(type, src, dst,
(short) ((olddstQ + oldsrcQ) - slotMax), slotMax));
} else {
c.getSession().write(
MaplePacketCreator.moveAndMergeInventoryItem(type, src, dst, ((Item) c.getPlayer().getInventory(type)
.getItem(dst)).getQuantity()));
}
} else {
c.getSession().write(MaplePacketCreator.moveInventoryItem(type, src, dst));
}
}
public static void equip(MapleClient c, byte src, byte dst) {
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
Equip source = (Equip)c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem(src);
Equip target = (Equip)c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(dst);
if (source == null)
return;
if (dst == -6) {
// unequip the overall
IItem top = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -5);
if (top != null && ii.isOverall(top.getItemId())) {
if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).isFull()) {
c.getSession().write(MaplePacketCreator.getInventoryFull());
c.getSession().write(MaplePacketCreator.getShowInventoryFull());
return;
}
unequip(c, (byte) -5, c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNextFreeSlot());
}
} else if (dst == -5) {
// unequip the bottom and top
IItem top = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -5);
IItem bottom = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -6);
if (top != null && ii.isOverall(source.getItemId())) {
if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).isFull(bottom != null && ii.isOverall(source.getItemId()) ? 1 : 0)) {
c.getSession().write(MaplePacketCreator.getInventoryFull());
c.getSession().write(MaplePacketCreator.getShowInventoryFull());
return;
}
unequip(c, (byte) -5, c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNextFreeSlot());
}
if (bottom != null && ii.isOverall(source.getItemId())) {
if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).isFull()) {
c.getSession().write(MaplePacketCreator.getInventoryFull());
c.getSession().write(MaplePacketCreator.getShowInventoryFull());
return;
}
unequip(c, (byte) -6, c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNextFreeSlot());
}
} else if (dst == -10) {
// check if weapon is two-handed
IItem weapon = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -11);
if (weapon != null && ii.isTwoHanded(weapon.getItemId())) {
if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).isFull()) {
c.getSession().write(MaplePacketCreator.getInventoryFull());
c.getSession().write(MaplePacketCreator.getShowInventoryFull());
return;
}
unequip(c, (byte) -11, c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNextFreeSlot());
}
} else if (dst == -11) {
IItem shield = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((byte) -10);
if (shield != null && ii.isTwoHanded(source.getItemId())) {
if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).isFull()) {
c.getSession().write(MaplePacketCreator.getInventoryFull());
c.getSession().write(MaplePacketCreator.getShowInventoryFull());
return;
}
unequip(c, (byte) -10, c.getPlayer().getInventory(MapleInventoryType.EQUIP).getNextFreeSlot());
}
}
source = (Equip)c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem(src);
target = (Equip)c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(dst);
c.getPlayer().getInventory(MapleInventoryType.EQUIP).removeSlot(src);
if (target != null)
c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).removeSlot(dst);
source.setPosition(dst);
c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).addFromDB(source);
if (target != null) {
target.setPosition(src);
c.getPlayer().getInventory(MapleInventoryType.EQUIP).addFromDB(target);
}
c.getSession().write(MaplePacketCreator.moveInventoryItem(MapleInventoryType.EQUIP, src, dst, (byte)2));
c.getPlayer().equipChanged();
}
public static void unequip(MapleClient c, byte src, byte dst) {
Equip source = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem(src);
Equip target = (Equip) c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem(dst);
if (dst < 0) {
log.warn("Unequipping to negative slot. ({}: {}->{})", new Object[] { c.getPlayer().getName(), src, dst });
}
if (source == null)
return;
if (target != null && src <= 0) {
// do not allow switching with equip
c.getSession().write(MaplePacketCreator.getInventoryFull());
return;
}
c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).removeSlot(src);
if (target != null)
c.getPlayer().getInventory(MapleInventoryType.EQUIP).removeSlot(dst);
source.setPosition(dst);
c.getPlayer().getInventory(MapleInventoryType.EQUIP).addFromDB(source);
if (target != null) {
target.setPosition(src);
c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).addFromDB(target);
}
c.getSession().write(MaplePacketCreator.moveInventoryItem(MapleInventoryType.EQUIP, src, dst, (byte) 1));
c.getPlayer().equipChanged();
}
public static void drop(MapleClient c, MapleInventoryType type, byte src, short quantity) {
MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
if (src < 0)
type = MapleInventoryType.EQUIPPED;
IItem source = c.getPlayer().getInventory(type).getItem(src);
if (quantity < 0 || source == null || quantity == 0 && !ii.isThrowingStar(source.getItemId())) {
String message = "Dropping " + quantity + " " + (source == null ? "?" : source.getItemId()) + " (" +
type.name() + "/" + src + ")";
//AutobanManager.getInstance().addPoints(c, 1000, 0, message);
log.info(MapleClient.getLogMessage(c, message));
c.getSession().close(); // disconnect the client as is inventory is inconsistent with the serverside inventory -> fuck
return;
}
Point dropPos = new Point(c.getPlayer().getPosition());
//dropPos.y -= 99;
if (quantity < source.getQuantity() && !ii.isThrowingStar(source.getItemId())) {
IItem target = source.copy();
StringBuilder logMsg = new StringBuilder(c.getPlayer().getName());
logMsg.append(" dropped part of a stack at ");
logMsg.append(dropPos.toString());
logMsg.append(" on map ");
logMsg.append(c.getPlayer().getMapId());
logMsg.append(". Quantity of this (new) instance is now ");
logMsg.append(quantity);
target.setQuantity(quantity);
target.log(logMsg.toString(),false);
source.setQuantity((short)(source.getQuantity() - quantity));
logMsg = new StringBuilder(c.getPlayer().getName());
logMsg.append(" dropped part of a stack at ");
logMsg.append(dropPos.toString());
logMsg.append(" on map ");
logMsg.append(c.getPlayer().getMapId());
logMsg.append(". Quantity of this (leftover) instance is now ");
logMsg.append(source.getQuantity());
source.log(logMsg.toString(),false);
c.getSession().write(MaplePacketCreator.dropInventoryItemUpdate(type, source));
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), target, dropPos, true,true);
} else {
StringBuilder logMsg = new StringBuilder(c.getPlayer().getName());
logMsg.append(" dropped this (with full quantity) at ");
logMsg.append(dropPos.toString());
logMsg.append(" on map ");
logMsg.append(c.getPlayer().getMapId());
source.log(logMsg.toString(),false);
c.getPlayer().getInventory(type).removeSlot(src);
c.getSession().write(MaplePacketCreator.dropInventoryItem(
(src<0?MapleInventoryType.EQUIP:type), src));
if (src < 0) {
c.getPlayer().equipChanged();
}
c.getPlayer().getMap().spawnItemDrop(c.getPlayer(), c.getPlayer(), source, dropPos, true,true);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -