ControlMaster and SummonMaster, when both set, are always the same mobile: BaseCreature.Summon assigns both to the caster, and every pet management flow (transfer, stable, claim, ball of summoning, GM obey, login overflow) followed SetControlMaster with an identical SummonMaster assignment. They differ only in presence - uncontrolled summons carry only a summon master, pets only a control master. So one _master reference serializes (refreshed at save, fanned back out through the Controlled/Summoned flags in AfterDeserialization; legacy loads feed the same path), and SetControlMaster now keeps SummonMaster in lockstep itself, deleting the six hand-rolled copies of that boilerplate. Also: a creature constructed without speeds (missing npc-speeds.json) now logs debug and defaults to Medium (0.25/0.5) instead of throwing - this is the place a sane default belongs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
471 lines
No EOL
9.9 KiB
JSON
Generated
471 lines
No EOL
9.9 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": "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": "Master",
|
|
"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": [
|
|
""
|
|
]
|
|
}
|
|
]
|
|
} |