mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 18:51:29 +00:00
[Commands] Remove #equipitem Command (#3040)
* [Commands] Remove #equipitem Command # Notes - This command causes issues with cursor and inventory slot desynchronizations and seems to largely be unused/unnecessary. * Remove from command files.
This commit is contained in:
parent
2e55da2b2d
commit
8f5e7978ab
@ -136,7 +136,6 @@ int command_init(void)
|
|||||||
command_add("emptyinventory", "Clears your or your target's entire inventory (Equipment, General, Bank, and Shared Bank)", AccountStatus::GMImpossible, command_emptyinventory) ||
|
command_add("emptyinventory", "Clears your or your target's entire inventory (Equipment, General, Bank, and Shared Bank)", AccountStatus::GMImpossible, command_emptyinventory) ||
|
||||||
command_add("enablerecipe", "[Recipe ID] - Enables a Recipe", AccountStatus::QuestTroupe, command_enablerecipe) ||
|
command_add("enablerecipe", "[Recipe ID] - Enables a Recipe", AccountStatus::QuestTroupe, command_enablerecipe) ||
|
||||||
command_add("endurance", "Restores your or your target's endurance.", AccountStatus::Guide, command_endurance) ||
|
command_add("endurance", "Restores your or your target's endurance.", AccountStatus::Guide, command_endurance) ||
|
||||||
command_add("equipitem", "[slotid(0-21)] - Equip the item on your cursor into the specified slot", AccountStatus::Guide, command_equipitem) ||
|
|
||||||
command_add("exptoggle", "[Toggle] - Toggle your or your target's experience gain.", AccountStatus::QuestTroupe, command_exptoggle) ||
|
command_add("exptoggle", "[Toggle] - Toggle your or your target's experience gain.", AccountStatus::QuestTroupe, command_exptoggle) ||
|
||||||
command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", AccountStatus::QuestTroupe, command_faction) ||
|
command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", AccountStatus::QuestTroupe, command_faction) ||
|
||||||
command_add("factionassociation", "[factionid] [amount] - triggers a faction hits via association", AccountStatus::GMLeadAdmin, command_faction_association) ||
|
command_add("factionassociation", "[factionid] [amount] - triggers a faction hits via association", AccountStatus::GMLeadAdmin, command_faction_association) ||
|
||||||
@ -983,7 +982,6 @@ void command_bot(Client *c, const Seperator *sep)
|
|||||||
#include "gm_commands/emptyinventory.cpp"
|
#include "gm_commands/emptyinventory.cpp"
|
||||||
#include "gm_commands/enablerecipe.cpp"
|
#include "gm_commands/enablerecipe.cpp"
|
||||||
#include "gm_commands/endurance.cpp"
|
#include "gm_commands/endurance.cpp"
|
||||||
#include "gm_commands/equipitem.cpp"
|
|
||||||
#include "gm_commands/exptoggle.cpp"
|
#include "gm_commands/exptoggle.cpp"
|
||||||
#include "gm_commands/faction.cpp"
|
#include "gm_commands/faction.cpp"
|
||||||
#include "gm_commands/feature.cpp"
|
#include "gm_commands/feature.cpp"
|
||||||
|
|||||||
@ -82,7 +82,6 @@ void command_emoteview(Client *c, const Seperator *sep);
|
|||||||
void command_emptyinventory(Client *c, const Seperator *sep);
|
void command_emptyinventory(Client *c, const Seperator *sep);
|
||||||
void command_enablerecipe(Client *c, const Seperator *sep);
|
void command_enablerecipe(Client *c, const Seperator *sep);
|
||||||
void command_endurance(Client *c, const Seperator *sep);
|
void command_endurance(Client *c, const Seperator *sep);
|
||||||
void command_equipitem(Client *c, const Seperator *sep);
|
|
||||||
void command_exptoggle(Client *c, const Seperator *sep);
|
void command_exptoggle(Client *c, const Seperator *sep);
|
||||||
void command_faction(Client *c, const Seperator *sep);
|
void command_faction(Client *c, const Seperator *sep);
|
||||||
void command_faction_association(Client *c, const Seperator *sep);
|
void command_faction_association(Client *c, const Seperator *sep);
|
||||||
|
|||||||
@ -1,82 +0,0 @@
|
|||||||
#include "../client.h"
|
|
||||||
|
|
||||||
void command_equipitem(Client *c, const Seperator *sep)
|
|
||||||
{
|
|
||||||
uint32 slot_id = Strings::ToInt(sep->arg[1]);
|
|
||||||
if (sep->IsNumber(1) && (slot_id >= EQ::invslot::EQUIPMENT_BEGIN && slot_id <= EQ::invslot::EQUIPMENT_END)) {
|
|
||||||
const EQ::ItemInstance *from_inst = c->GetInv().GetItem(EQ::invslot::slotCursor);
|
|
||||||
const EQ::ItemInstance *to_inst = c->GetInv().GetItem(slot_id); // added (desync issue when forcing stack to stack)
|
|
||||||
bool partialmove = false;
|
|
||||||
int16 movecount;
|
|
||||||
|
|
||||||
if (from_inst && from_inst->IsClassCommon()) {
|
|
||||||
auto outapp = new EQApplicationPacket(OP_MoveItem, sizeof(MoveItem_Struct));
|
|
||||||
MoveItem_Struct *mi = (MoveItem_Struct *) outapp->pBuffer;
|
|
||||||
mi->from_slot = EQ::invslot::slotCursor;
|
|
||||||
mi->to_slot = slot_id;
|
|
||||||
// mi->number_in_stack = from_inst->GetCharges(); // replaced with con check for stacking
|
|
||||||
|
|
||||||
// crude stackable check to only 'move' the difference count on client instead of entire stack when applicable
|
|
||||||
if (to_inst && to_inst->IsStackable() &&
|
|
||||||
(to_inst->GetItem()->ID == from_inst->GetItem()->ID) &&
|
|
||||||
(to_inst->GetCharges() < to_inst->GetItem()->StackSize) &&
|
|
||||||
(from_inst->GetCharges() > to_inst->GetItem()->StackSize - to_inst->GetCharges())) {
|
|
||||||
movecount = to_inst->GetItem()->StackSize - to_inst->GetCharges();
|
|
||||||
mi->number_in_stack = (uint32) movecount;
|
|
||||||
partialmove = true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mi->number_in_stack = from_inst->GetCharges();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save move changes
|
|
||||||
// Added conditional check to packet send..would have sent change even on a swap failure..whoops!
|
|
||||||
|
|
||||||
if (partialmove) { // remove this con check if someone can figure out removing charges from cursor stack issue below
|
|
||||||
// mi->number_in_stack is always from_inst->GetCharges() when partialmove is false
|
|
||||||
c->Message(Chat::Red, "Error: Partial stack added to existing stack exceeds allowable stacksize");
|
|
||||||
safe_delete(outapp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (c->SwapItem(mi)) {
|
|
||||||
c->FastQueuePacket(&outapp);
|
|
||||||
|
|
||||||
// if the below code is still needed..just send an an item trade packet to each slot..it should overwrite the client instance
|
|
||||||
|
|
||||||
// below code has proper logic, but client does not like to have cursor charges changed
|
|
||||||
// (we could delete the cursor item and resend, but issues would arise if there are queued items)
|
|
||||||
//if (partialmove) {
|
|
||||||
// EQApplicationPacket* outapp2 = new EQApplicationPacket(OP_DeleteItem, sizeof(DeleteItem_Struct));
|
|
||||||
// DeleteItem_Struct* di = (DeleteItem_Struct*)outapp2->pBuffer;
|
|
||||||
// di->from_slot = SLOT_CURSOR;
|
|
||||||
// di->to_slot = 0xFFFFFFFF;
|
|
||||||
// di->number_in_stack = 0xFFFFFFFF;
|
|
||||||
|
|
||||||
// c->Message(Chat::White, "Deleting %i charges from stack", movecount); // debug line..delete
|
|
||||||
|
|
||||||
// for (int16 deletecount=0; deletecount < movecount; deletecount++)
|
|
||||||
// have to use 'movecount' because mi->number_in_stack is 'ENCODED' at this point (i.e., 99 charges returns 22...)
|
|
||||||
// c->QueuePacket(outapp2);
|
|
||||||
|
|
||||||
// safe_delete(outapp2);
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
c->Message(Chat::Red, "Error: Unable to equip current item");
|
|
||||||
}
|
|
||||||
safe_delete(outapp);
|
|
||||||
|
|
||||||
// also send out a wear change packet?
|
|
||||||
}
|
|
||||||
else if (from_inst == nullptr) {
|
|
||||||
c->Message(Chat::Red, "Error: There is no item on your cursor");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
c->Message(Chat::Red, "Error: Item on your cursor cannot be equipped");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
c->Message(Chat::White, "Usage: #equipitem slotid[0-21] - equips the item on your cursor to the position");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user