nextStaticID now takes the object type and a natural manifest key, so no
static ID is handed out without a manifest entry. After the world load the
server diffs maps/<map>.manifest against the previous boot (moved, vanished,
re-targeted IDs), writes the new one (old copy kept as .manifest.prev), and
logs every negative reference in the Task 2.1 columns that no loaded static
object of the right type holds.
Value changes: none in play. Guilds are the only static IDs so far
(-2..-25, keys guild:<first seed key>).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DbManager.refuseStaticWrite logs the handler method and its caller and
stops the write (W3). It guards every write whose row belongs to a
Building, Zone, City, Guild, Mob or NPC: 69 handler methods, including
friends/condemned/patrol lists, guard minions, NPC profits and guild
banish/alliance lists. ID-only methods look the object up in the cache.
Writes that only reference a static object (character guild history,
another guild's alliance row) are not guarded.
Value changes: none; nothing is flagged static yet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Static world objects take IDs from DbManager.nextStaticID(), counting down
from -2 in a fixed load order (W2). Runtime negative IDs (loot, forged and
contract items, pets and minions) now share ItemManager.lastNegativeID,
which starts at -1,000,000; Mob.staticID is gone. Boot fails if the static
counter reaches the runtime range. AbstractWorldObject gets a
staticWorldObject flag for the factories to set. Nothing uses either yet.
Value changes: runtime negative IDs start at -1,000,001 (-1,000,000 for
forged items) instead of -1; pets and minions draw from the item counter.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Effects, modifiers, source types, effect fail conditions and item
enchant values all come from Effects.cfg (4.6b). Removes
dbEffectsBaseHandler, dbPowerHandler, the EffectsBase and effect
modifier ResultSet constructors, EffectsBase.getFailConditions and
LOAD_ENCHANT_VALUES.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deletes dbEffectsResourceCostHandler, EffectsResourceCosts and
DbManager.EffectsResourceCostsQueries. GameObjectType.EffectsResourceCosts
stays because the enum ordinals are sent to the client and stored in the DB.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kits come from StartingKitTable.cfg since c1e1ed91 (tested); drop
dbKitHandler, DbManager.KitQueries, the Kit ResultSet ctor and
RaceClassIDMap.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AbstractCharacter.getResists fell back to Resists.getResists(0), but the
table has no ID 0, so the fallback always returned null. It now returns
the field directly. Removes dbResistHandler, the cache, the ResultSet
constructor and the empty setMobResists stub. No value change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RuneBaseEffect, its handler, every effectsGranted field and getter (including
the PromotionClass promoID*10+2500..2503 lookups) and the empty
PlayerBonuses.grantEffect had no reader (2.10a). The GameObjectType constant
stays so later ordinals are unchanged. No value changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 315 static_rune_runebase rows are exactly the non-RACE runes, so the loader
selects by rune_type. Removes the server type/subtype columns (no live reader),
the runereq/overwrite path, the GET_RUNEBASE cache-miss query, the runebase
attribute handler, the racerune/baseclassrune loaders and the 111111 checks.
No value changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>