mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 22:01:30 +00:00
* Initial commit checkpoint * More functions converted * Commify * More functions * Fin * Sort declarations * Split functions between files * Bots * Update strings.h * Split * Revert find replaces * Repository template * Money * Misc function * Update CMakeLists.txt * Saylink * Update strings.cpp * Swap Strings::Saylink for Saylink::Create since saylink is coupled to zone database * API casings
126 lines
2.5 KiB
C++
Executable File
126 lines
2.5 KiB
C++
Executable File
#include "../client.h"
|
|
|
|
void command_itemsearch(Client *c, const Seperator *sep)
|
|
{
|
|
if (sep->arg[1][0] == 0) {
|
|
c->Message(Chat::White, "Usage: #itemsearch [search string]");
|
|
}
|
|
else {
|
|
const char *search_criteria = sep->argplus[1];
|
|
|
|
const EQ::ItemData *item = nullptr;
|
|
EQ::SayLinkEngine linker;
|
|
linker.SetLinkType(EQ::saylink::SayLinkItemData);
|
|
|
|
if (Seperator::IsNumber(search_criteria)) {
|
|
item = database.GetItem(atoi(search_criteria));
|
|
if (item) {
|
|
linker.SetItemData(item);
|
|
std::string item_id = std::to_string(item->ID);
|
|
std::string saylink_commands =
|
|
"[" +
|
|
Saylink::Create(
|
|
"#si " + item_id,
|
|
false,
|
|
"X"
|
|
) +
|
|
"] ";
|
|
|
|
if (item->Stackable && item->StackSize > 1) {
|
|
std::string stack_size = std::to_string(item->StackSize);
|
|
saylink_commands +=
|
|
"[" +
|
|
Saylink::Create(
|
|
"#si " + item_id + " " + stack_size,
|
|
false,
|
|
stack_size
|
|
) +
|
|
"]";
|
|
}
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
" Summon {} [{}] [{}]",
|
|
saylink_commands,
|
|
linker.GenerateLink(),
|
|
item->ID
|
|
).c_str()
|
|
);
|
|
}
|
|
else {
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Item {} not found",
|
|
search_criteria
|
|
).c_str()
|
|
);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
int count = 0;
|
|
char sName[64];
|
|
char sCriteria[255];
|
|
strn0cpy(sCriteria, search_criteria, sizeof(sCriteria));
|
|
strupr(sCriteria);
|
|
char *pdest;
|
|
uint32 it = 0;
|
|
while ((item = database.IterateItems(&it))) {
|
|
strn0cpy(sName, item->Name, sizeof(sName));
|
|
strupr(sName);
|
|
pdest = strstr(sName, sCriteria);
|
|
if (pdest != nullptr) {
|
|
linker.SetItemData(item);
|
|
std::string item_id = std::to_string(item->ID);
|
|
std::string saylink_commands =
|
|
"[" +
|
|
Saylink::Create(
|
|
"#si " + item_id,
|
|
false,
|
|
"X"
|
|
) +
|
|
"] ";
|
|
if (item->Stackable && item->StackSize > 1) {
|
|
std::string stack_size = std::to_string(item->StackSize);
|
|
saylink_commands +=
|
|
"[" +
|
|
Saylink::Create(
|
|
"#si " + item_id + " " + stack_size,
|
|
false,
|
|
stack_size
|
|
) +
|
|
"]";
|
|
}
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
" Summon {} [{}] [{}]",
|
|
saylink_commands,
|
|
linker.GenerateLink(),
|
|
item->ID
|
|
).c_str()
|
|
);
|
|
|
|
++count;
|
|
}
|
|
|
|
if (count == 50) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (count == 50) {
|
|
c->Message(Chat::White, "50 items shown...too many results.");
|
|
}
|
|
else {
|
|
c->Message(Chat::White, "%i items found", count);
|
|
}
|
|
|
|
}
|
|
}
|
|
|