mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-06 11:57:13 +00:00
Deleting an item now follows the item's DeletionRestrictions row (ItemComponent.delResIndex), as the client's LWOInventoryComponent_Common::CanRemoveFromInventory (0x00ce0d20) and CheckDeletionRestrictionIndex (0x00c94c20) do: an item the player is driving or riding can't be deleted, an operator can delete anything, and otherwise the row decides: - LOTS_INCLUDED: only while the player has another item of any of the LOTs (the last rocket can't be deleted) - LOTS_EXCLUDED: only while the player has other items of all of the LOTs - ANY_RESTRICTION / ALL_RESTRICTIONS: any / all of the listed rows allow it (a row that names itself again allows it) - ZONE: only in the listed zones - ALWAYS_RESTRICTED: never A missing, unrestricted or bad row (no valid ids, unknown check type) allows it. The client checks first and shows the row's failure reason; the server checks again and ignores a client's forceDeletion. Refs issue 960 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
599 B
C++
22 lines
599 B
C++
#pragma once
|
|
|
|
#include "CDTable.h"
|
|
|
|
#include <optional>
|
|
|
|
enum class eDeletionRestrictionsCheckType : uint32_t;
|
|
|
|
struct CDDeletionRestriction {
|
|
uint32_t id{};
|
|
bool restricted{};
|
|
// LOTs, zone ids or other rows of this table, depending on checkType; ids that aren't numbers are left out
|
|
std::vector<uint32_t> ids;
|
|
eDeletionRestrictionsCheckType checkType{};
|
|
};
|
|
|
|
class CDDeletionRestrictionsTable : public CDTable<CDDeletionRestrictionsTable, std::map<uint32_t, CDDeletionRestriction>> {
|
|
public:
|
|
void LoadValuesFromDatabase();
|
|
std::optional<CDDeletionRestriction> GetByID(uint32_t id) const;
|
|
};
|