bool __cdecl BuilderCmd2Handler::Handler(CUserSocket *socket, const BYTE *packet)
{
GUARDED;
// Get current user
User *user = socket->user;
if (!user) {
return false;
}
// Get command into wstring and check it's length
std::wstring buffer(reinterpret_cast<const wchar_t*>(packet));
if (buffer.size() > 900) {
return false;
}
// Get target object
CSPointer<CObject> targetObject = user->GetTarget();
// Cast target object (if any) to target creature
CCreature *target = (targetObject && targetObject->IsCreature()) ? targetObject->CastCreature() : 0;
// Log builder command to system log
if (target) {
CLog::Add(CLog::Blue, L"[AUDIT] BuilderCmd %s -> %s: %s", user->GetName(), target->GetName(), buffer.c_str());
} else {
CLog::Add(CLog::Blue, L"[AUDIT] BuilderCmd %s -> null: %s", user->GetName(), buffer.c_str());
}
// Custom builder commands + my favourite aliases/abbreviations
if (buffer == L"gmliston") {
return reinterpret_cast<bool(*)(CUserSocket*, User*, const wchar_t*)>(0x4B7264)(socket, user, L"//gmreg");
} else if (buffer == L"gmlistoff") {
return reinterpret_cast<bool(*)(CUserSocket*, User*, const wchar_t*)>(0x4B74C0)(socket, user, L"//gmunreg");
} else if (buffer == L"res") {
return reinterpret_cast<bool(*)(CUserSocket*, User*, const wchar_t*)>(0x4C4604)(socket, user, L"//resurrect 100");
} else if (buffer == L"res 0") {
return reinterpret_cast<bool(*)(CUserSocket*, User*, const wchar_t*)>(0x4C4604)(socket, user, L"//resurrect 0");
} else if (buffer == L"heal") {
if (target) {
return reinterpret_cast<bool(*)(CUserSocket*, User*, const wchar_t*)>(0x50235C)(socket, user, target->GetName());
} else {
return reinterpret_cast<bool(*)(CUserSocket*, User*, const wchar_t*)>(0x50235C)(socket, user, user->GetName());
}
} else if (buffer.substr(0, 4) == L"say ") {
return Say(socket, user, target, packet, buffer);
} else if (buffer.substr(0, 14) == L"drop_item_each") {
return DropItemEach(socket, user, target, packet, buffer);
} else if (buffer.substr(0, 5) == L"give ") {
return Give(socket, user, target, packet, buffer);
} else if (buffer.substr(0, 5) == L"take ") {
return Take(socket, user, target, packet, buffer);
} else if (buffer.substr(0, 5) == L"diag ") {
return Diag(socket, user, target, packet, buffer);
} else if (buffer.substr(0, 9) == L"add_fame ") {
return AddFame(socket, user, target, packet, buffer);
} else if (buffer == L"debug 0") {
Server::SetDebug(false);
return false;
} else if (buffer == L"debug 1") {
Server::SetDebug(true);
return false;
} else if (buffer == L"test") {
// Various test stuff can be put here like this:
//CDB::Instance()->RequestTest(100);
return false;
} else {
// Call original handler
return reinterpret_cast<bool(*)(CUserSocket*, const BYTE*)>(0x510464)(socket, packet);
}
}