Hello, currently I have exhausted the equip hotkey, now I am trying to move the exhaust for each slot since the idea is to exhaust the rings and amulets but not the equip hotkey in general but I can not do it, someone who can help me?
Thanks in advance!
Code used to check the exhaust
C++:
if (player->isMoveExhausted())
{
player->sendCancelMessage("You can't equip very fast.");
return;
}
Code to add the exhaust
C++:
player->setMoveExhaust(600);
Equip hotkey function in game.cpp
C++:
void Game::onPressHotkeyEquip(Player* player, uint16_t spriteid)
{
Item* item;
const ItemType& itemType = Item::items.getItemIdByClientId(spriteid);
if (itemType.id == 0) {
return;
}
bool removed = false;
ReturnValue ret = RETURNVALUE_NOERROR;
if (player->isMoveExhausted())
{
player->sendCancelMessage("You can't equip very fast.");
return;
}
if (itemType.weaponType == WEAPON_AMMO) {
Thing* quiverThing = player->getThing(CONST_SLOT_RIGHT);
Thing* backpackThing = player->getThing(CONST_SLOT_BACKPACK);
if (quiverThing && backpackThing) {
Item* quiver = quiverThing->getItem();
Item* backpack = backpackThing->getItem();
if (quiver && quiver->getWeaponType() == WEAPON_QUIVER && backpack) {
item = findItemOfType(backpack->getContainer(), itemType.id);
if (item) {
ret = internalMoveItem(item->getParent(), quiver->getContainer(), 0, item, item->getItemCount(), nullptr);
}
else {
ret = RETURNVALUE_NOTPOSSIBLE;
}
}
else {
ret = RETURNVALUE_NOTPOSSIBLE;
}
}
} else {
item = findItemOfType(player, itemType.id);
if (!item) {
item = findItemOfType(player, itemType.transformEquipTo);
if (!item) {
item = findItemOfType(player, itemType.transformDeEquipTo);
}
if (!item) {
player->sendCancelMessage(RETURNVALUE_NOTPOSSIBLE);
return;
}
}
const ItemType& newitemType = Item::items[item->getID()];
if (newitemType.id == 0) {
return;
}
int32_t slotP = newitemType.slotPosition;
if (itemType.weaponType == WEAPON_SHIELD || itemType.weaponType == WEAPON_QUIVER) {
slotP = CONST_SLOT_RIGHT;
}
else if (hasBitSet(SLOTP_HEAD, slotP)) {
slotP = CONST_SLOT_HEAD;
}
else if (hasBitSet(SLOTP_RING, slotP)) {
slotP = CONST_SLOT_RING;
}
else if (hasBitSet(SLOTP_NECKLACE, slotP)) {
slotP = CONST_SLOT_NECKLACE;
}
else if (hasBitSet(SLOTP_ARMOR, slotP)) {
slotP = CONST_SLOT_ARMOR;
}
else if (hasBitSet(SLOTP_LEGS, slotP)) {
slotP = CONST_SLOT_LEGS;
}
else if (hasBitSet(SLOTP_FEET, slotP)) {
slotP = CONST_SLOT_FEET;
}
else if (hasBitSet(SLOTP_AMMO, slotP)) {
slotP = CONST_SLOT_AMMO;
}
else if (hasBitSet(SLOTP_LEFT, slotP) && !hasBitSet(SLOTP_TWO_HAND, slotP)) {
slotP = CONST_SLOT_LEFT;
}
if (hasBitSet(SLOTP_TWO_HAND, slotP)) {
Thing* leftthing = player->getThing(CONST_SLOT_LEFT);
if (leftthing) {
Item* slotLeft_item = leftthing->getItem();
if (slotLeft_item) {
if (slotLeft_item->getID() == item->getID()) {
removed = true;
}
ret = internalMoveItem(slotLeft_item->getParent(), player, 0, slotLeft_item, slotLeft_item->getItemCount(), nullptr);
}
}
Thing* rightthing = player->getThing(CONST_SLOT_RIGHT);
if (rightthing) {
Item* slotRight_Item = rightthing->getItem();
if (slotRight_Item) {
if (newitemType.weaponType != WEAPON_DISTANCE || slotRight_Item->getWeaponType() != WEAPON_QUIVER)
ret = internalMoveItem(slotRight_Item->getParent(), player, 0, slotRight_Item, slotRight_Item->getItemCount(), nullptr);
}
else {
return;
}
}
if (!removed) {
ret = internalMoveItem(item->getParent(), player, CONST_SLOT_LEFT, item, item->getItemCount(), nullptr);
}
}
else if (hasBitSet(SLOTP_RING, slotP)) {
Thing* ringthing = player->getThing(CONST_SLOT_RING);
if (ringthing) {
Item* slotRing_Item = ringthing->getItem();
if (slotRing_Item) {
ret = internalMoveItem(slotRing_Item->getParent(), player, 0, slotRing_Item, slotRing_Item->getItemCount(), nullptr);
if (slotRing_Item->getID() == item->getID()) {
removed = true;
}
}
else {
return;
}
}
if (!removed) {
ret = internalMoveItem(item->getParent(), player, CONST_SLOT_RING, item, item->getItemCount(), nullptr);
}
}
else if (slotP == CONST_SLOT_RIGHT) {
Thing* rightthing = player->getThing(CONST_SLOT_RIGHT);
if (rightthing) {
Item* slotRight_Item = rightthing->getItem();
if (slotRight_Item) {
if (slotRight_Item->getID() == item->getID()) {
removed = true;
}
ret = internalMoveItem(slotRight_Item->getParent(), player, 0, slotRight_Item, slotRight_Item->getItemCount(), nullptr);
}
else {
return;
}
}
Thing* leftthing = player->getThing(CONST_SLOT_LEFT);
if (leftthing) {
Item* slotLeft_item = leftthing->getItem();
if (slotLeft_item) {
ItemType& it = Item::items.getItemType(slotLeft_item->getID());
if (hasBitSet(SLOTP_TWO_HAND, it.slotPosition)) {
if (newitemType.weaponType != WEAPON_QUIVER || slotLeft_item->getWeaponType() != WEAPON_DISTANCE)
ret = internalMoveItem(slotLeft_item->getParent(), player, 0, slotLeft_item, slotLeft_item->getItemCount(), nullptr);
}
}
else {
return;
}
}
if (!removed) {
ret = internalMoveItem(item->getParent(), player, slotP, item, item->getItemCount(), nullptr);
}
}
else if (slotP) {
if (newitemType.stackable) {
Thing* ammothing = player->getThing(slotP);
if (ammothing) {
Item* ammoItem = ammothing->getItem();
if (ammoItem) {
if (ammoItem->getID() == item->getID()) {
if (item->getDuration() > 0 ||
ammoItem->getItemCount() == 100 ||
ammoItem->getItemCount() == player->getItemTypeCount(ammoItem->getID())) {
return;
}
}
else {
if (ret != RETURNVALUE_NOERROR) {
ret = internalMoveItem(ammoItem->getParent(), player, 0, ammoItem, ammoItem->getItemCount(), nullptr);
}
}
}
else {
return;
}
}
ReturnValue ret2 = player->queryAdd(slotP, *item, item->getItemCount(), 0);
if (ret2 != RETURNVALUE_NOERROR) {
player->sendCancelMessage(ret2);
return;
}
if (item->getItemCount() < 100 &&
item->getItemCount() < player->getItemTypeCount(item->getID(), -1) &&
item->getDuration() <= 0) {
uint16_t itemId = item->getID();
uint16_t count = 0;
while (player->getItemTypeCount(item->getID())) {
if (count == 100) {
break;
}
Container* mainBP = player->getInventoryItem(CONST_SLOT_BACKPACK)->getContainer();
Item* _item = findItemOfType(mainBP, itemId);
if (!_item) {
break;
}
if (_item->getItemCount() > 100 - count) {
internalRemoveItem(_item, 100 - count);
count = 100;
}
else {
count = count + _item->getItemCount();
internalRemoveItem(_item, _item->getItemCount());
}
}
Item* newSlotitem = Item::CreateItem(itemId, count);
internalAddItem(player, newSlotitem, slotP, FLAG_NOLIMIT);
return;
}
else {
ret = internalMoveItem(item->getParent(), player, slotP, item, item->getItemCount(), nullptr);
}
}
else {
Thing* slotthing = player->getThing(slotP);
if (slotthing) {
Item* slotItem = slotthing->getItem();
if (slotItem) {
ret = internalMoveItem(slotItem->getParent(), player, 0, slotItem, slotItem->getItemCount(), nullptr);
if (slotItem->getID() == item->getID()) {
removed = true;
}
}
else {
return;
}
}
if (!removed) {
ret = internalMoveItem(item->getParent(), player, slotP, item, item->getItemCount(), nullptr);
}
}
}
}
player->setMoveExhaust(600);
if (ret != RETURNVALUE_NOERROR) {
player->sendCancelMessage(ret);
}
return;
}
Thanks in advance!