mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 10:53:44 +00:00
feat: contraband list with flagging and optional removal
Staff list contraband items on a new dashboard page (item search, reason, flag or flag and remove; contraband_manage to edit, reports_view to see). World servers check every inventory when a character loads and every item a player receives: each find is an economy flag of the new kind Contraband, shown with the other flags and in the character's related data. Items marked for removal are taken away, with a character snapshot kept first so they can be given back, an audit entry and a mail or chat message telling the player why. Staff are skipped unless contraband_ignore_staff is off. Worlds reload the list when it changes (RELOAD_CONTRABAND, added at the end of ePlayerAction). Fixes #1563 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
22
dDatabase/GameDatabase/MySQL/Tables/Contraband.cpp
Normal file
22
dDatabase/GameDatabase/MySQL/Tables/Contraband.cpp
Normal file
@@ -0,0 +1,22 @@
|
||||
#include "MySQLDatabase.h"
|
||||
|
||||
std::vector<IContraband::ContrabandItem> MySQLDatabase::GetContrabandItems() {
|
||||
std::vector<ContrabandItem> items;
|
||||
auto result = ExecuteSelect("SELECT * FROM contraband_items ORDER BY lot;");
|
||||
while (result->next()) {
|
||||
items.push_back({ result->getInt("lot"), result->getString("reason").c_str(), static_cast<eContrabandAction>(result->getUInt("action")),
|
||||
result->getString("added_by").c_str(), result->getInt64("added_at") });
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
void MySQLDatabase::SetContrabandItem(const ContrabandItem& item) {
|
||||
ExecuteInsert(
|
||||
"INSERT INTO contraband_items (lot, reason, action, added_by, added_at) VALUES (?, ?, ?, ?, ?) "
|
||||
"ON DUPLICATE KEY UPDATE reason = VALUES(reason), action = VALUES(action), added_by = VALUES(added_by), added_at = VALUES(added_at);",
|
||||
item.lot, item.reason, static_cast<uint32_t>(item.action), item.addedBy, item.addedAt);
|
||||
}
|
||||
|
||||
bool MySQLDatabase::DeleteContrabandItem(LOT lot) {
|
||||
return ExecuteUpdate("DELETE FROM contraband_items WHERE lot = ?;", lot) > 0;
|
||||
}
|
||||
Reference in New Issue
Block a user