#include "../client.h" void command_interrogateinv(Client *c, const Seperator *sep) { // 'command_interrogateinv' is an in-memory inventory interrogation tool only. // // it does not verify against actual database entries..but, the output can be // used to verify that something has been corrupted in a player's inventory. // any error condition should be assumed that the item in question will be // lost when the player logs out or zones (or incurrs any action that will // consume the Client-Inventory object instance in question.) // // any item instances located at a greater depth than a reported error should // be treated as an error themselves regardless of whether they report as the // same or not. if (strcasecmp(sep->arg[1], "help") == 0) { if (c->Admin() < commandInterrogateInv) { c->Message(Chat::White, "Usage: #interrogateinv"); c->Message(Chat::White, " Displays your inventory's current in-memory nested storage references"); } else { c->Message(Chat::White, "Usage: #interrogateinv [log] [silent]"); c->Message( Chat::White, " Displays your or your Player target inventory's current in-memory nested storage references" ); c->Message(Chat::White, " [log] - Logs interrogation to file"); c->Message(Chat::White, " [silent] - Omits the in-game message portion of the interrogation"); } return; } Client *target = nullptr; std::map instmap; bool log = false; bool silent = false; bool error = false; bool allowtrip = false; if (c->Admin() < commandInterrogateInv) { if (c->GetInterrogateInvState()) { c->Message(Chat::Red, "The last use of #interrogateinv on this inventory instance discovered an error..."); c->Message(Chat::Red, "Logging out, zoning or re-arranging items at this point will result in item loss!"); return; } target = c; allowtrip = true; } else { if (c->GetTarget() == nullptr) { target = c; } else if (c->GetTarget()->IsClient()) { target = c->GetTarget()->CastToClient(); } else { c->Message(Chat::Default, "Use of this command is limited to Client entities"); return; } if (strcasecmp(sep->arg[1], "log") == 0) { log = true; } if (strcasecmp(sep->arg[2], "silent") == 0) { silent = true; } } bool success = target->InterrogateInventory(c, log, silent, allowtrip, error); if (!success) { c->Message(Chat::Red, "An unknown error occurred while processing Client::InterrogateInventory()"); } }