mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-22 04:32:49 +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:
40
dDatabase/GameDatabase/ITables/IContraband.h
Normal file
40
dDatabase/GameDatabase/ITables/IContraband.h
Normal file
@@ -0,0 +1,40 @@
|
||||
#ifndef __ICONTRABAND__H__
|
||||
#define __ICONTRABAND__H__
|
||||
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "dCommonVars.h"
|
||||
|
||||
/**
|
||||
* Contraband: items staff don't want players to have (issue #1563), edited on the dashboard. World servers check a
|
||||
* character's items against the list when it loads and when items are added, and flag (an economy flag of kind
|
||||
* CONTRABAND) or also remove them.
|
||||
*/
|
||||
class IContraband {
|
||||
public:
|
||||
enum class eContrabandAction : uint8_t {
|
||||
FLAG = 0, // only flag the character
|
||||
REMOVE = 1 // flag the character and remove the item
|
||||
};
|
||||
|
||||
struct ContrabandItem {
|
||||
LOT lot{};
|
||||
std::string reason;
|
||||
eContrabandAction action{};
|
||||
std::string addedBy;
|
||||
int64_t addedAt{};
|
||||
};
|
||||
|
||||
// Every listed item, by LOT
|
||||
virtual std::vector<ContrabandItem> GetContrabandItems() = 0;
|
||||
|
||||
// Insert or replace the row of item.lot
|
||||
virtual void SetContrabandItem(const ContrabandItem& item) = 0;
|
||||
|
||||
// Whether there was a row to delete
|
||||
virtual bool DeleteContrabandItem(LOT lot) = 0;
|
||||
};
|
||||
|
||||
#endif //!__ICONTRABAND__H__
|
||||
@@ -58,7 +58,10 @@ public:
|
||||
DUPLICATE = 3, // an object id exists in more than one place (day 0, so each item is flagged once)
|
||||
// different items share an object id and the login migration will not separate them: the characters holding
|
||||
// them already migrated, or a copy is in mail (day 0)
|
||||
ID_COLLISION = 4
|
||||
ID_COLLISION = 4,
|
||||
// a character has an item on the contraband list (value: how many, baseline: 1 when it was removed). Found when
|
||||
// the character loaded (day 0, one flag per item) or when the item was added (that day, item id 0)
|
||||
CONTRABAND = 5
|
||||
};
|
||||
|
||||
enum class eFlagStatus : uint8_t { OPEN = 0, DISMISSED = 1, ACTIONED = 2 };
|
||||
|
||||
Reference in New Issue
Block a user