A virtual SpeedClass could be overridden dynamically (boss state change) and silently diverge from the cached speed entry. SpeedClass is now non-virtual instance state: assigning it invalidates the cached entry, applies the new bucket's think and move speeds (preserving the active/passive mode), and serializes only when it differs from the type's DefaultSpeedClass - so a runtime bucket change survives a save while its (bucket-matching) speeds still elide. Works from [props too. Overrides become: DefaultSpeedClass for a type's constant bucket, SpeedClass assignment for state changes, GetSpeeds/GetMoveSpeeds to bypass the table entirely - none of which can leave the cache stale. SpeedClass deserializes before the speed fields (index 7; later indexes shift by one - v23 was never released, schema regenerated). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
477 lines
No EOL
10 KiB
JSON
Generated
477 lines
No EOL
10 KiB
JSON
Generated
{
|
|
"version": 23,
|
|
"type": "Server.Mobiles.BaseCreature",
|
|
"properties": [
|
|
{
|
|
"name": "DefaultAI",
|
|
"type": "Server.Mobiles.AIType",
|
|
"rule": "EnumMigrationRule"
|
|
},
|
|
{
|
|
"name": "CurrentAI",
|
|
"type": "Server.Mobiles.AIType",
|
|
"usesSaveFlag": true,
|
|
"rule": "EnumMigrationRule"
|
|
},
|
|
{
|
|
"name": "RangePerception",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "RangeFight",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "RangeHome",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "Team",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "FightMode",
|
|
"type": "Server.Mobiles.FightMode",
|
|
"usesSaveFlag": true,
|
|
"rule": "EnumMigrationRule"
|
|
},
|
|
{
|
|
"name": "SpeedClass",
|
|
"type": "Server.Mobiles.SpeedLevel",
|
|
"usesSaveFlag": true,
|
|
"rule": "EnumMigrationRule"
|
|
},
|
|
{
|
|
"name": "ActiveSpeed",
|
|
"type": "double",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "PassiveSpeed",
|
|
"type": "double",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "CurrentSpeed",
|
|
"type": "double",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "ActiveMoveSpeed",
|
|
"type": "double",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "PassiveMoveSpeed",
|
|
"type": "double",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "Home",
|
|
"type": "Server.Point3D",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveUOTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"Point3D"
|
|
]
|
|
},
|
|
{
|
|
"name": "HomeMap",
|
|
"type": "Server.Map",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveUOTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"Map"
|
|
]
|
|
},
|
|
{
|
|
"name": "Controlled",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "ControlMaster",
|
|
"type": "Server.Mobile",
|
|
"usesSaveFlag": true,
|
|
"rule": "SerializableInterfaceMigrationRule"
|
|
},
|
|
{
|
|
"name": "ControlTarget",
|
|
"type": "Server.Mobile",
|
|
"usesSaveFlag": true,
|
|
"rule": "SerializableInterfaceMigrationRule"
|
|
},
|
|
{
|
|
"name": "ControlDest",
|
|
"type": "Server.Point3D",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveUOTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"Point3D"
|
|
]
|
|
},
|
|
{
|
|
"name": "ControlOrder",
|
|
"type": "Server.Mobiles.OrderType",
|
|
"usesSaveFlag": true,
|
|
"rule": "EnumMigrationRule"
|
|
},
|
|
{
|
|
"name": "MinTameSkill",
|
|
"type": "double",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "Tamable",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "Summoned",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "SummonEnd",
|
|
"type": "System.DateTime",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"AnchoredTime"
|
|
]
|
|
},
|
|
{
|
|
"name": "SummonMaster",
|
|
"type": "Server.Mobile",
|
|
"usesSaveFlag": true,
|
|
"rule": "SerializableInterfaceMigrationRule"
|
|
},
|
|
{
|
|
"name": "ControlSlots",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "Loyalty",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "CurrentWayPoint",
|
|
"type": "Server.Items.WayPoint",
|
|
"usesSaveFlag": true,
|
|
"rule": "SerializableInterfaceMigrationRule"
|
|
},
|
|
{
|
|
"name": "HitsMaxSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "StamMaxSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "ManaMaxSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "DamageMin",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "DamageMax",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "PhysicalResistanceSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "FireResistSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "ColdResistSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "PoisonResistSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "EnergyResistSeed",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "PhysicalDamage",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "FireDamage",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "ColdDamage",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "PoisonDamage",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "EnergyDamage",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "Owners",
|
|
"type": "System.Collections.Generic.List\u003CServer.Mobile\u003E",
|
|
"usesSaveFlag": true,
|
|
"rule": "ListMigrationRule",
|
|
"ruleArguments": [
|
|
"@Tidy",
|
|
"Server.Mobile",
|
|
"SerializableInterfaceMigrationRule"
|
|
]
|
|
},
|
|
{
|
|
"name": "IsDeadPet",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "IsBonded",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "BondingBegin",
|
|
"type": "System.DateTime",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "OwnerAbandonTime",
|
|
"type": "System.DateTime",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "HasGeneratedLoot",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "IsParagon",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "Friends",
|
|
"type": "System.Collections.Generic.List\u003CServer.Mobile\u003E",
|
|
"usesSaveFlag": true,
|
|
"rule": "ListMigrationRule",
|
|
"ruleArguments": [
|
|
"@Tidy",
|
|
"Server.Mobile",
|
|
"SerializableInterfaceMigrationRule"
|
|
]
|
|
},
|
|
{
|
|
"name": "RemoveIfUntamed",
|
|
"type": "bool",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"name": "RemoveStep",
|
|
"type": "int",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
"EncodedInt"
|
|
]
|
|
},
|
|
{
|
|
"name": "PendingDeleteTimer",
|
|
"type": "Server.Timer",
|
|
"usesSaveFlag": true,
|
|
"rule": "TimerMigrationRule",
|
|
"ruleArguments": [
|
|
"@AnchoredTimer"
|
|
]
|
|
},
|
|
{
|
|
"name": "CorpseNameOverride",
|
|
"type": "string",
|
|
"usesSaveFlag": true,
|
|
"rule": "PrimitiveTypeMigrationRule",
|
|
"ruleArguments": [
|
|
""
|
|
]
|
|
}
|
|
]
|
|
} |