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