fix: Overhauls champion titles & codegen champion system (#1430)
## MAJOR CHANGE Added a champion title system to facilitate the existing champion titles. This should make it easier to extend or create other related game content. Champion titles will be saved in a folder called _ChampionTitles_. ### Motivation The motivation to refactor was two-folder, but mostly related to performance in two ways. First, every player had a ChampionTitleInfo object with an array of ChamptionTitleInfo. We want to eliminate the need for this information unless a player actually uses it. This should save a considerable amount of memory. Second, to facilitate the atrophy mechanic, the champion titles would run atrophy post-world save, adding to the time that the server is frozen. Eliminating this post-world save side effect unlocks our ability to further optimize the world save process since there are no direct side effects. ### Bugs fixed - [X] Fixed titles getting cut off on the paperdoll - [X] Fixed champion title not displaying overhead (OPL) ### Screenshots <img width="216" alt="image" src="https://github.com/modernuo/ModernUO/assets/3953314/8916f895-8d68-4fb0-892e-108a0c43be90">
This commit is contained in:
parent
4dddc8d3f1
commit
51ecee6caa
44 changed files with 3028 additions and 2785 deletions
11
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionAltar.v0.json
generated
Normal file
11
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionAltar.v0.json
generated
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.CannedEvil.ChampionAltar",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Spawn",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSpawn",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
}
|
||||
]
|
||||
}
|
||||
11
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionPlatform.v0.json
generated
Normal file
11
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionPlatform.v0.json
generated
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.CannedEvil.ChampionPlatform",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Spawn",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSpawn",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
}
|
||||
]
|
||||
}
|
||||
21
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionSkullBrazier.v1.json
generated
Normal file
21
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionSkullBrazier.v1.json
generated
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"version": 1,
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullBrazier",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Type",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullType",
|
||||
"rule": "EnumMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Platform",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullPlatform",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Skull",
|
||||
"type": "Server.Item",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
}
|
||||
]
|
||||
}
|
||||
36
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionSkullPlatform.v0.json
generated
Normal file
36
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionSkullPlatform.v0.json
generated
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullPlatform",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Power",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullBrazier",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Enlightenment",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullBrazier",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Venom",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullBrazier",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Pain",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullBrazier",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Greed",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullBrazier",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Death",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullBrazier",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
}
|
||||
]
|
||||
}
|
||||
186
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionSpawn.v10.json
generated
Normal file
186
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionSpawn.v10.json
generated
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
{
|
||||
"version": 10,
|
||||
"type": "Server.Engines.CannedEvil.ChampionSpawn",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Level",
|
||||
"type": "int",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ActivatedByProximity",
|
||||
"type": "bool",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "NextProximityTime",
|
||||
"type": "System.DateTime",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
"DeltaTime"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "MaxLevel",
|
||||
"type": "int",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ActivatedByValor",
|
||||
"type": "bool",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DamageEntries",
|
||||
"type": "System.Collections.Generic.Dictionary\u003CServer.Mobile, int\u003E",
|
||||
"rule": "DictionaryMigrationRule",
|
||||
"ruleArguments": [
|
||||
"Server.Mobile",
|
||||
"SerializableInterfaceMigrationRule",
|
||||
"0",
|
||||
"int",
|
||||
"PrimitiveTypeMigrationRule",
|
||||
"1",
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ConfinedRoaming",
|
||||
"type": "bool",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Idol",
|
||||
"type": "Server.Engines.CannedEvil.IdolOfTheChampion",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "HasBeenAdvanced",
|
||||
"type": "bool",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SpawnArea",
|
||||
"type": "Server.Rectangle2D",
|
||||
"rule": "PrimitiveUOTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
"Rect2D"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RandomizeType",
|
||||
"type": "bool",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Kills",
|
||||
"type": "int",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Active",
|
||||
"type": "bool",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Type",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSpawnType",
|
||||
"rule": "EnumMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Creatures",
|
||||
"type": "System.Collections.Generic.List\u003CServer.Mobile\u003E",
|
||||
"rule": "ListMigrationRule",
|
||||
"ruleArguments": [
|
||||
"Server.Mobile",
|
||||
"SerializableInterfaceMigrationRule"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "RedSkulls",
|
||||
"type": "System.Collections.Generic.List\u003CServer.Item\u003E",
|
||||
"rule": "ListMigrationRule",
|
||||
"ruleArguments": [
|
||||
"Server.Item",
|
||||
"SerializableInterfaceMigrationRule"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "WhiteSkulls",
|
||||
"type": "System.Collections.Generic.List\u003CServer.Item\u003E",
|
||||
"rule": "ListMigrationRule",
|
||||
"ruleArguments": [
|
||||
"Server.Item",
|
||||
"SerializableInterfaceMigrationRule"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Platform",
|
||||
"type": "Server.Engines.CannedEvil.ChampionPlatform",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "Altar",
|
||||
"type": "Server.Engines.CannedEvil.ChampionAltar",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "ExpireDelay",
|
||||
"type": "System.TimeSpan",
|
||||
"rule": "PrimitiveTypeMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "ExpireTime",
|
||||
"type": "System.DateTime",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
"DeltaTime"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Champion",
|
||||
"type": "Server.Mobile",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "RestartDelay",
|
||||
"type": "System.TimeSpan",
|
||||
"rule": "PrimitiveTypeMigrationRule"
|
||||
},
|
||||
{
|
||||
"name": "RestartTime",
|
||||
"type": "System.DateTime",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
"DeltaTime"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
22
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionTitle.v0.json
generated
Normal file
22
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionTitle.v0.json
generated
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Value",
|
||||
"type": "int",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
"EncodedInt"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "LastDecay",
|
||||
"type": "System.DateTime",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
95
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionTitleContext.v1.json
generated
Normal file
95
Projects/UOContent/Migrations/Server.Engines.CannedEvil.ChampionTitleContext.v1.json
generated
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
{
|
||||
"version": 1,
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitleContext",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Harrower",
|
||||
"type": "int",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Abyss",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Arachnid",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ColdBlood",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ForestLord",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "VerminHorde",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "UnholyTerror",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "SleepingDragon",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Corrupt",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Glade",
|
||||
"type": "Server.Engines.CannedEvil.ChampionTitle",
|
||||
"usesSaveFlag": true,
|
||||
"rule": "RawSerializableMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.CannedEvil.DungeonChampionSpawn.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.CannedEvil.DungeonChampionSpawn.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.CannedEvil.DungeonChampionSpawn"
|
||||
}
|
||||
11
Projects/UOContent/Migrations/Server.Engines.CannedEvil.IdolOfTheChampion.v0.json
generated
Normal file
11
Projects/UOContent/Migrations/Server.Engines.CannedEvil.IdolOfTheChampion.v0.json
generated
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.CannedEvil.IdolOfTheChampion",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Spawn",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSpawn",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
}
|
||||
]
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.CannedEvil.LLChampionSpawn.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.CannedEvil.LLChampionSpawn.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.CannedEvil.LLChampionSpawn"
|
||||
}
|
||||
11
Projects/UOContent/Migrations/Server.Items.ChampionSkull.v2.json
generated
Normal file
11
Projects/UOContent/Migrations/Server.Items.ChampionSkull.v2.json
generated
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": 2,
|
||||
"type": "Server.Items.ChampionSkull",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Type",
|
||||
"type": "Server.Engines.CannedEvil.ChampionSkullType",
|
||||
"rule": "EnumMigrationRule"
|
||||
}
|
||||
]
|
||||
}
|
||||
11
Projects/UOContent/Migrations/Server.Items.HarrowerGate.v0.json
generated
Normal file
11
Projects/UOContent/Migrations/Server.Items.HarrowerGate.v0.json
generated
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Items.HarrowerGate",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Harrower",
|
||||
"type": "Server.Mobile",
|
||||
"rule": "SerializableInterfaceMigrationRule"
|
||||
}
|
||||
]
|
||||
}
|
||||
22
Projects/UOContent/Migrations/Server.Items.StarRoomGate.v1.json
generated
Normal file
22
Projects/UOContent/Migrations/Server.Items.StarRoomGate.v1.json
generated
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"version": 1,
|
||||
"type": "Server.Items.StarRoomGate",
|
||||
"properties": [
|
||||
{
|
||||
"name": "Decays",
|
||||
"type": "bool",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
""
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DecayTime",
|
||||
"type": "System.DateTime",
|
||||
"rule": "PrimitiveTypeMigrationRule",
|
||||
"ruleArguments": [
|
||||
"DeltaTime"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue