RegisterTypes.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. /*
  2. * RegisterTypes.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include "../CPlayerState.h"
  12. #include "../CStack.h"
  13. #include "../battle/BattleInfo.h"
  14. #include "../battle/CObstacleInstance.h"
  15. #include "../bonuses/Limiters.h"
  16. #include "../bonuses/Propagators.h"
  17. #include "../bonuses/Updaters.h"
  18. #include "../campaign/CampaignState.h"
  19. #include "../entities/artifact/CArtifact.h"
  20. #include "../gameState/CGameState.h"
  21. #include "../gameState/CGameStateCampaign.h"
  22. #include "../gameState/TavernHeroesPool.h"
  23. #include "../mapObjects/CGCreature.h"
  24. #include "../mapObjects/CGDwelling.h"
  25. #include "../mapObjects/CGResource.h"
  26. #include "../mapObjects/CGMarket.h"
  27. #include "../mapObjects/CGPandoraBox.h"
  28. #include "../mapObjects/CGTownInstance.h"
  29. #include "../mapObjects/CQuest.h"
  30. #include "../mapObjects/FlaggableMapObject.h"
  31. #include "../mapObjects/MiscObjects.h"
  32. #include "../mapObjects/TownBuildingInstance.h"
  33. #include "../mapping/CMap.h"
  34. #include "../networkPacks/PacksForClient.h"
  35. #include "../networkPacks/PacksForClientBattle.h"
  36. #include "../networkPacks/PacksForLobby.h"
  37. #include "../networkPacks/PacksForServer.h"
  38. #include "../networkPacks/SaveLocalState.h"
  39. #include "../networkPacks/SetRewardableConfiguration.h"
  40. #include "../networkPacks/SetStackEffect.h"
  41. VCMI_LIB_NAMESPACE_BEGIN
  42. /// This method defines all types that are part of Serializeable hieararchy and can be serialized as their base type
  43. /// Each class is registered with a unique index that is used to determine correct type on deserialization
  44. /// For example, if CGHeroInstance is serialized as pointer to CGObjectInstance serializer will write type index for CGHeroInstance, followed by CGHeroInstance::serialize() call
  45. /// Similarly, on deserialize, game will look up type index of object that was serialized as this CGObjectInstance and will load it as CGHeroInstance instead
  46. /// Meaning, these type indexes must NEVER change.
  47. /// If type is removed please only remove corresponding type, without adjusting indexes of following types
  48. /// NOTE: when removing type please consider potential save compatibility handling
  49. /// Similarly, when adding new type make sure to add it to the very end of this list with new type index
  50. template<typename Serializer>
  51. void registerTypes(Serializer &s)
  52. {
  53. static_assert(std::is_abstract_v<IObjectInterface>, "If this type is no longer abstract consider registering it for serialization with ID 1");
  54. static_assert(std::is_abstract_v<CGTeleport>, "If this type is no longer abstract consider registering it for serialization with ID 3");
  55. static_assert(std::is_abstract_v<IQuestObject>, "If this type is no longer abstract consider registering it for serialization with ID 11");
  56. static_assert(std::is_abstract_v<CArtifactSet>, "If this type is no longer abstract consider registering it for serialization with ID 29");
  57. static_assert(std::is_abstract_v<CPackForClient>, "If this type is no longer abstract consider registering it for serialization with ID 83");
  58. static_assert(std::is_abstract_v<Query>, "If this type is no longer abstract consider registering it for serialization with ID 153");
  59. static_assert(std::is_abstract_v<CGarrisonOperationPack>, "If this type is no longer abstract consider registering it for serialization with ID 161");
  60. static_assert(std::is_abstract_v<CArtifactOperationPack>, "If this type is no longer abstract consider registering it for serialization with ID 168");
  61. s.template registerType<CGObjectInstance>(2);
  62. s.template registerType<CGMonolith>(4);
  63. s.template registerType<CGSubterraneanGate>(5);
  64. s.template registerType<CGWhirlpool>(6);
  65. s.template registerType<CGSignBottle>(7);
  66. s.template registerType<CGKeys>(8);
  67. s.template registerType<CGKeymasterTent>(9);
  68. s.template registerType<CGBorderGuard>(10);
  69. s.template registerType<CGBorderGate>(12);
  70. s.template registerType<CGBoat>(13);
  71. s.template registerType<CGMagi>(14);
  72. s.template registerType<CGSirens>(15);
  73. s.template registerType<CGShipyard>(16);
  74. s.template registerType<CGDenOfthieves>(17);
  75. s.template registerType<FlaggableMapObject>(18);
  76. s.template registerType<CGTerrainPatch>(19);
  77. s.template registerType<HillFort>(20);
  78. s.template registerType<CGMarket>(21);
  79. s.template registerType<CGBlackMarket>(22);
  80. s.template registerType<CGUniversity>(23);
  81. s.template registerType<CGHeroPlaceholder>(24);
  82. s.template registerType<CArmedInstance>(25);
  83. s.template registerType<CBonusSystemNode>(26);
  84. s.template registerType<CCreatureSet>(27);
  85. s.template registerType<CGHeroInstance>(28);
  86. s.template registerType<CGDwelling>(30);
  87. s.template registerType<CGTownInstance>(31);
  88. s.template registerType<CGPandoraBox>(32);
  89. s.template registerType<CGEvent>(33);
  90. s.template registerType<CGCreature>(34);
  91. s.template registerType<CGGarrison>(35);
  92. s.template registerType<CGArtifact>(36);
  93. s.template registerType<CGResource>(37);
  94. s.template registerType<CGMine>(38);
  95. s.template registerType<CGSeerHut>(40);
  96. s.template registerType<CGQuestGuard>(41);
  97. s.template registerType<IUpdater>(42);
  98. s.template registerType<GrowsWithLevelUpdater>(43);
  99. s.template registerType<TimesHeroLevelUpdater>(44);
  100. s.template registerType<TimesStackLevelUpdater>(45);
  101. s.template registerType<OwnerUpdater>(46);
  102. s.template registerType<ILimiter>(48);
  103. s.template registerType<AnyOfLimiter>(49);
  104. s.template registerType<NoneOfLimiter>(50);
  105. s.template registerType<OppositeSideLimiter>(51);
  106. s.template registerType<TownBuildingInstance>(52);
  107. s.template registerType<TownRewardableBuildingInstance>(53);
  108. s.template registerType<CRewardableObject>(56);
  109. s.template registerType<CTeamVisited>(57);
  110. s.template registerType<CGObelisk>(58);
  111. s.template registerType<IPropagator>(59);
  112. s.template registerType<CPropagatorNodeType>(60);
  113. s.template registerType<AllOfLimiter>(61);
  114. s.template registerType<CCreatureTypeLimiter>(62);
  115. s.template registerType<HasAnotherBonusLimiter>(63);
  116. s.template registerType<CreatureTerrainLimiter>(64);
  117. s.template registerType<FactionLimiter>(65);
  118. s.template registerType<CreatureLevelLimiter>(66);
  119. s.template registerType<CreatureAlignmentLimiter>(67);
  120. s.template registerType<RankRangeLimiter>(68);
  121. s.template registerType<UnitOnHexLimiter>(69);
  122. s.template registerType<CArtifact>(70);
  123. s.template registerType<CCreature>(71);
  124. s.template registerType<CStackInstance>(72);
  125. s.template registerType<CCommanderInstance>(73);
  126. s.template registerType<PlayerState>(74);
  127. s.template registerType<TeamState>(75);
  128. s.template registerType<CStack>(76);
  129. s.template registerType<BattleInfo>(77);
  130. s.template registerType<CArtifactInstance>(78);
  131. s.template registerType<CObstacleInstance>(79);
  132. s.template registerType<SpellCreatedObstacle>(80);
  133. s.template registerType<CPack>(82);
  134. s.template registerType<PackageApplied>(84);
  135. s.template registerType<SystemMessage>(85);
  136. s.template registerType<PlayerBlocked>(86);
  137. s.template registerType<PlayerCheated>(87);
  138. s.template registerType<PlayerStartsTurn>(88);
  139. s.template registerType<DaysWithoutTown>(89);
  140. s.template registerType<TurnTimeUpdate>(90);
  141. s.template registerType<SetResources>(91);
  142. s.template registerType<SetPrimSkill>(92);
  143. s.template registerType<SetSecSkill>(93);
  144. s.template registerType<HeroVisitCastle>(94);
  145. s.template registerType<ChangeSpells>(95);
  146. s.template registerType<SetMana>(96);
  147. s.template registerType<SetMovePoints>(97);
  148. s.template registerType<FoWChange>(98);
  149. s.template registerType<SetAvailableHero>(99);
  150. s.template registerType<GiveBonus>(100);
  151. s.template registerType<ChangeObjPos>(101);
  152. s.template registerType<PlayerEndsTurn>(102);
  153. s.template registerType<PlayerEndsGame>(103);
  154. s.template registerType<PlayerReinitInterface>(104);
  155. s.template registerType<RemoveBonus>(105);
  156. s.template registerType<UpdateArtHandlerLists>(106);
  157. s.template registerType<ChangeFormation>(107);
  158. s.template registerType<RemoveObject>(108);
  159. s.template registerType<TryMoveHero>(109);
  160. s.template registerType<NewStructures>(110);
  161. s.template registerType<RazeStructures>(111);
  162. s.template registerType<SetAvailableCreatures>(112);
  163. s.template registerType<SetHeroesInTown>(113);
  164. s.template registerType<HeroRecruited>(114);
  165. s.template registerType<GiveHero>(115);
  166. s.template registerType<NewTurn>(116);
  167. s.template registerType<InfoWindow>(117);
  168. s.template registerType<SetObjectProperty>(118);
  169. s.template registerType<AdvmapSpellCast>(119);
  170. s.template registerType<OpenWindow>(120);
  171. s.template registerType<NewObject>(121);
  172. s.template registerType<NewArtifact>(122);
  173. s.template registerType<AddQuest>(123);
  174. s.template registerType<SetAvailableArtifacts>(124);
  175. s.template registerType<CenterView>(125);
  176. s.template registerType<HeroVisit>(126);
  177. s.template registerType<SetCommanderProperty>(127);
  178. s.template registerType<ChangeObjectVisitors>(128);
  179. s.template registerType<ChangeArtifactsCostume>(129);
  180. s.template registerType<ShowWorldViewEx>(130);
  181. s.template registerType<EntitiesChanged>(131);
  182. s.template registerType<BattleStart>(132);
  183. s.template registerType<BattleNextRound>(133);
  184. s.template registerType<BattleSetActiveStack>(134);
  185. s.template registerType<BattleResult>(135);
  186. s.template registerType<BattleResultAccepted>(136);
  187. s.template registerType<BattleCancelled>(137);
  188. s.template registerType<BattleLogMessage>(138);
  189. s.template registerType<BattleStackMoved>(139);
  190. s.template registerType<BattleAttack>(140);
  191. s.template registerType<StartAction>(141);
  192. s.template registerType<EndAction>(142);
  193. s.template registerType<BattleSpellCast>(143);
  194. s.template registerType<SetStackEffect>(144);
  195. s.template registerType<BattleTriggerEffect>(145);
  196. s.template registerType<BattleUpdateGateState>(146);
  197. s.template registerType<BattleSetStackProperty>(147);
  198. s.template registerType<StacksInjured>(148);
  199. s.template registerType<BattleResultsApplied>(149);
  200. s.template registerType<BattleUnitsChanged>(150);
  201. s.template registerType<BattleObstaclesChanged>(151);
  202. s.template registerType<CatapultAttack>(152);
  203. s.template registerType<HeroLevelUp>(154);
  204. s.template registerType<CommanderLevelUp>(155);
  205. s.template registerType<BlockingDialog>(156);
  206. s.template registerType<GarrisonDialog>(157);
  207. s.template registerType<ExchangeDialog>(158);
  208. s.template registerType<TeleportDialog>(159);
  209. s.template registerType<MapObjectSelectDialog>(160);
  210. s.template registerType<ChangeStackCount>(162);
  211. s.template registerType<SetStackType>(163);
  212. s.template registerType<EraseStack>(164);
  213. s.template registerType<SwapStacks>(165);
  214. s.template registerType<InsertNewStack>(166);
  215. s.template registerType<RebalanceStacks>(167);
  216. s.template registerType<PutArtifact>(169);
  217. s.template registerType<BulkEraseArtifacts>(170);
  218. s.template registerType<AssembledArtifact>(171);
  219. s.template registerType<DisassembledArtifact>(172);
  220. s.template registerType<BulkMoveArtifacts>(173);
  221. s.template registerType<PlayerMessageClient>(174);
  222. s.template registerType<BulkRebalanceStacks>(175);
  223. s.template registerType<SetRewardableConfiguration>(177);
  224. s.template registerType<CPackForServer>(179);
  225. s.template registerType<EndTurn>(180);
  226. s.template registerType<DismissHero>(181);
  227. s.template registerType<MoveHero>(182);
  228. s.template registerType<ArrangeStacks>(183);
  229. s.template registerType<DisbandCreature>(184);
  230. s.template registerType<BuildStructure>(185);
  231. s.template registerType<VisitTownBuilding>(186);
  232. s.template registerType<RecruitCreatures>(187);
  233. s.template registerType<UpgradeCreature>(188);
  234. s.template registerType<GarrisonHeroSwap>(189);
  235. s.template registerType<ExchangeArtifacts>(190);
  236. s.template registerType<AssembleArtifacts>(191);
  237. s.template registerType<BuyArtifact>(192);
  238. s.template registerType<TradeOnMarketplace>(193);
  239. s.template registerType<SetFormation>(194);
  240. s.template registerType<HireHero>(195);
  241. s.template registerType<BuildBoat>(196);
  242. s.template registerType<QueryReply>(197);
  243. s.template registerType<MakeAction>(198);
  244. s.template registerType<DigWithHero>(199);
  245. s.template registerType<CastAdvSpell>(200);
  246. s.template registerType<CastleTeleportHero>(201);
  247. s.template registerType<SaveGame>(202);
  248. s.template registerType<PlayerMessage>(203);
  249. s.template registerType<BulkSplitStack>(204);
  250. s.template registerType<BulkMergeStacks>(205);
  251. s.template registerType<BulkSplitAndRebalanceStack>(206);
  252. s.template registerType<BulkMoveArmy>(207);
  253. s.template registerType<BulkExchangeArtifacts>(208);
  254. s.template registerType<ManageBackpackArtifacts>(209);
  255. s.template registerType<ManageEquippedArtifacts>(210);
  256. s.template registerType<EraseArtifactByClient>(211);
  257. s.template registerType<GamePause>(212);
  258. s.template registerType<CPackForLobby>(213);
  259. s.template registerType<CLobbyPackToPropagate>(214);
  260. s.template registerType<CLobbyPackToServer>(215);
  261. s.template registerType<LobbyClientConnected>(216);
  262. s.template registerType<LobbyClientDisconnected>(217);
  263. s.template registerType<LobbyChatMessage>(218);
  264. s.template registerType<LobbyPvPAction>(219);
  265. s.template registerType<LobbyGuiAction>(220);
  266. s.template registerType<LobbyLoadProgress>(221);
  267. s.template registerType<LobbyRestartGame>(222);
  268. s.template registerType<LobbyPrepareStartGame>(223);
  269. s.template registerType<LobbyStartGame>(224);
  270. s.template registerType<LobbyChangeHost>(225);
  271. s.template registerType<LobbyUpdateState>(226);
  272. s.template registerType<LobbyShowMessage>(227);
  273. s.template registerType<LobbyChangePlayerOption>(228);
  274. s.template registerType<LobbySetMap>(229);
  275. s.template registerType<LobbySetCampaign>(230);
  276. s.template registerType<LobbySetCampaignMap>(231);
  277. s.template registerType<LobbySetCampaignBonus>(232);
  278. s.template registerType<LobbySetPlayer>(233);
  279. s.template registerType<LobbySetPlayerName>(234);
  280. s.template registerType<LobbySetPlayerHandicap>(235);
  281. s.template registerType<LobbySetTurnTime>(236);
  282. s.template registerType<LobbySetSimturns>(237);
  283. s.template registerType<LobbySetDifficulty>(238);
  284. s.template registerType<LobbyForceSetPlayer>(239);
  285. s.template registerType<LobbySetExtraOptions>(240);
  286. s.template registerType<SpellResearch>(241);
  287. s.template registerType<SetResearchedSpells>(242);
  288. s.template registerType<SaveLocalState>(243);
  289. s.template registerType<LobbyDelete>(244);
  290. s.template registerType<TimesHeroLevelDivideStackLevelUpdater>(245);
  291. s.template registerType<DivideStackLevelUpdater>(246);
  292. }
  293. VCMI_LIB_NAMESPACE_END