123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770 |
- /*
- * PacksForServer.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 "ArtifactLocation.h"
- #include "NetPacksBase.h"
- #include "TradeItem.h"
- #include "../int3.h"
- #include "../battle/BattleAction.h"
- VCMI_LIB_NAMESPACE_BEGIN
- struct DLL_LINKAGE GamePause : public CPackForServer
- {
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- }
- };
- struct DLL_LINKAGE EndTurn : public CPackForServer
- {
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- }
- };
- struct DLL_LINKAGE DismissHero : public CPackForServer
- {
- DismissHero() = default;
- DismissHero(const ObjectInstanceID & HID)
- : hid(HID)
- {
- }
- ObjectInstanceID hid;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & hid;
- }
- };
- struct DLL_LINKAGE MoveHero : public CPackForServer
- {
- MoveHero() = default;
- MoveHero(const std::vector<int3> & path, const ObjectInstanceID & HID, bool Transit)
- : path(path)
- , hid(HID)
- , transit(Transit)
- {
- }
- std::vector<int3> path;
- ObjectInstanceID hid;
- bool transit = false;
- void visitTyped(ICPackVisitor & visitor) override;
- template<typename Handler>
- void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & path;
- h & hid;
- h & transit;
- }
- };
- struct DLL_LINKAGE CastleTeleportHero : public CPackForServer
- {
- CastleTeleportHero() = default;
- CastleTeleportHero(const ObjectInstanceID & HID, const ObjectInstanceID & Dest, ui8 Source)
- : dest(Dest)
- , hid(HID)
- , source(Source)
- {
- }
- ObjectInstanceID dest;
- ObjectInstanceID hid;
- si8 source = 0; //who give teleporting, 1=castle gate
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & dest;
- h & hid;
- }
- };
- struct DLL_LINKAGE ArrangeStacks : public CPackForServer
- {
- ArrangeStacks() = default;
- ArrangeStacks(ui8 W, const SlotID & P1, const SlotID & P2, const ObjectInstanceID & ID1, const ObjectInstanceID & ID2, si32 VAL)
- : what(W)
- , p1(P1)
- , p2(P2)
- , id1(ID1)
- , id2(ID2)
- , val(VAL)
- {
- }
- ui8 what = 0; //1 - swap; 2 - merge; 3 - split
- SlotID p1, p2; //positions of first and second stack
- ObjectInstanceID id1, id2; //ids of objects with garrison
- si32 val = 0;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & what;
- h & p1;
- h & p2;
- h & id1;
- h & id2;
- h & val;
- }
- };
- struct DLL_LINKAGE BulkMoveArmy : public CPackForServer
- {
- SlotID srcSlot;
- ObjectInstanceID srcArmy;
- ObjectInstanceID destArmy;
- BulkMoveArmy() = default;
- BulkMoveArmy(const ObjectInstanceID & srcArmy, const ObjectInstanceID & destArmy, const SlotID & srcSlot)
- : srcArmy(srcArmy)
- , destArmy(destArmy)
- , srcSlot(srcSlot)
- {
- }
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler>
- void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & srcSlot;
- h & srcArmy;
- h & destArmy;
- }
- };
- struct DLL_LINKAGE BulkSplitStack : public CPackForServer
- {
- SlotID src;
- ObjectInstanceID srcOwner;
- si32 amount = 0;
- BulkSplitStack() = default;
- BulkSplitStack(const ObjectInstanceID & srcOwner, const SlotID & src, si32 howMany)
- : src(src)
- , srcOwner(srcOwner)
- , amount(howMany)
- {
- }
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler>
- void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & src;
- h & srcOwner;
- h & amount;
- }
- };
- struct DLL_LINKAGE BulkMergeStacks : public CPackForServer
- {
- SlotID src;
- ObjectInstanceID srcOwner;
- BulkMergeStacks() = default;
- BulkMergeStacks(const ObjectInstanceID & srcOwner, const SlotID & src)
- : src(src)
- , srcOwner(srcOwner)
- {
- }
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler>
- void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & src;
- h & srcOwner;
- }
- };
- struct DLL_LINKAGE BulkSplitAndRebalanceStack : public CPackForServer
- {
- SlotID src;
- ObjectInstanceID srcOwner;
- BulkSplitAndRebalanceStack() = default;
- BulkSplitAndRebalanceStack(const ObjectInstanceID & srcOwner, const SlotID & src)
- : src(src)
- , srcOwner(srcOwner)
- {
- }
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler>
- void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & src;
- h & srcOwner;
- }
- };
- struct DLL_LINKAGE DisbandCreature : public CPackForServer
- {
- DisbandCreature() = default;
- DisbandCreature(const SlotID & Pos, const ObjectInstanceID & ID)
- : pos(Pos)
- , id(ID)
- {
- }
- SlotID pos; //stack pos
- ObjectInstanceID id; //object id
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & pos;
- h & id;
- }
- };
- struct DLL_LINKAGE BuildStructure : public CPackForServer
- {
- BuildStructure() = default;
- BuildStructure(const ObjectInstanceID & TID, const BuildingID & BID)
- : tid(TID)
- , bid(BID)
- {
- }
- ObjectInstanceID tid; //town id
- BuildingID bid; //structure id
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & tid;
- h & bid;
- }
- };
- struct DLL_LINKAGE VisitTownBuilding : public CPackForServer
- {
- VisitTownBuilding() = default;
- VisitTownBuilding(const ObjectInstanceID & TID, const BuildingID BID)
- : tid(TID)
- , bid(BID)
- {
- }
- ObjectInstanceID tid;
- BuildingID bid;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & tid;
- h & bid;
- }
- };
- struct DLL_LINKAGE RazeStructure : public BuildStructure
- {
- void visitTyped(ICPackVisitor & visitor) override;
- };
- struct DLL_LINKAGE SpellResearch : public CPackForServer
- {
- SpellResearch() = default;
- SpellResearch(const ObjectInstanceID & TID, SpellID spellAtSlot, bool accepted)
- : tid(TID), spellAtSlot(spellAtSlot), accepted(accepted)
- {
- }
- ObjectInstanceID tid;
- SpellID spellAtSlot;
- bool accepted;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & tid;
- h & spellAtSlot;
- h & accepted;
- }
- };
- struct DLL_LINKAGE RecruitCreatures : public CPackForServer
- {
- RecruitCreatures() = default;
- RecruitCreatures(const ObjectInstanceID & TID, const ObjectInstanceID & DST, const CreatureID & CRID, si32 Amount, si32 Level)
- : tid(TID)
- , dst(DST)
- , crid(CRID)
- , amount(Amount)
- , level(Level)
- {
- }
- ObjectInstanceID tid; //dwelling id, or town
- ObjectInstanceID dst; //destination ID, e.g. hero
- CreatureID crid;
- ui32 amount = 0; //creature amount
- si32 level = 0; //dwelling level to buy from, -1 if any
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & tid;
- h & dst;
- h & crid;
- h & amount;
- h & level;
- }
- };
- struct DLL_LINKAGE UpgradeCreature : public CPackForServer
- {
- UpgradeCreature() = default;
- UpgradeCreature(const SlotID & Pos, const ObjectInstanceID & ID, const CreatureID & CRID)
- : pos(Pos)
- , id(ID)
- , cid(CRID)
- {
- }
- SlotID pos; //stack pos
- ObjectInstanceID id; //object id
- CreatureID cid; //id of type to which we want make upgrade
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & pos;
- h & id;
- h & cid;
- }
- };
- struct DLL_LINKAGE GarrisonHeroSwap : public CPackForServer
- {
- GarrisonHeroSwap() = default;
- GarrisonHeroSwap(const ObjectInstanceID & TID)
- : tid(TID)
- {
- }
- ObjectInstanceID tid;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & tid;
- }
- };
- struct DLL_LINKAGE ExchangeArtifacts : public CPackForServer
- {
- ArtifactLocation src, dst;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & src;
- h & dst;
- }
- };
- struct DLL_LINKAGE BulkExchangeArtifacts : public CPackForServer
- {
- ObjectInstanceID srcHero;
- ObjectInstanceID dstHero;
- bool swap = false;
- bool equipped = true;
- bool backpack = true;
- BulkExchangeArtifacts() = default;
- BulkExchangeArtifacts(const ObjectInstanceID & srcHero, const ObjectInstanceID & dstHero, bool swap, bool equipped, bool backpack)
- : srcHero(srcHero)
- , dstHero(dstHero)
- , swap(swap)
- , equipped(equipped)
- , backpack(backpack)
- {
- }
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & srcHero;
- h & dstHero;
- h & swap;
- h & equipped;
- h & backpack;
- }
- };
- struct DLL_LINKAGE ManageBackpackArtifacts : public CPackForServer
- {
- enum class ManageCmd
- {
- SCROLL_LEFT, SCROLL_RIGHT, SORT_BY_SLOT, SORT_BY_CLASS, SORT_BY_COST
- };
-
- ManageBackpackArtifacts() = default;
- ManageBackpackArtifacts(const ObjectInstanceID & artHolder, const ManageCmd & cmd)
- : artHolder(artHolder)
- , cmd(cmd)
- {
- }
- ObjectInstanceID artHolder;
- ManageCmd cmd;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer&>(*this);
- h & artHolder;
- h & cmd;
- }
- };
- struct DLL_LINKAGE ManageEquippedArtifacts : public CPackForServer
- {
- ManageEquippedArtifacts() = default;
- ManageEquippedArtifacts(const ObjectInstanceID & artHolder, const uint32_t costumeIdx, bool saveCostume = false)
- : artHolder(artHolder)
- , costumeIdx(costumeIdx)
- , saveCostume(saveCostume)
- {
- }
- ObjectInstanceID artHolder;
- uint32_t costumeIdx;
- bool saveCostume;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer&>(*this);
- h & artHolder;
- h & costumeIdx;
- h & saveCostume;
- }
- };
- struct DLL_LINKAGE AssembleArtifacts : public CPackForServer
- {
- AssembleArtifacts() = default;
- AssembleArtifacts(const ObjectInstanceID & _heroID, const ArtifactPosition & _artifactSlot, bool _assemble, const ArtifactID & _assembleTo)
- : heroID(_heroID)
- , artifactSlot(_artifactSlot)
- , assemble(_assemble)
- , assembleTo(_assembleTo)
- {
- }
- ObjectInstanceID heroID;
- ArtifactPosition artifactSlot;
- bool assemble = false; // True to assemble artifact, false to disassemble.
- ArtifactID assembleTo; // Artifact to assemble into.
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & heroID;
- h & artifactSlot;
- h & assemble;
- h & assembleTo;
- }
- };
- struct DLL_LINKAGE EraseArtifactByClient : public CPackForServer
- {
- EraseArtifactByClient() = default;
- EraseArtifactByClient(const ArtifactLocation & al)
- : al(al)
- {
- }
- ArtifactLocation al;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer&>(*this);
- h & al;
- }
- };
- struct DLL_LINKAGE BuyArtifact : public CPackForServer
- {
- BuyArtifact() = default;
- BuyArtifact(const ObjectInstanceID & HID, const ArtifactID & AID)
- : hid(HID)
- , aid(AID)
- {
- }
- ObjectInstanceID hid;
- ArtifactID aid;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & hid;
- h & aid;
- }
- };
- struct DLL_LINKAGE TradeOnMarketplace : public CPackForServer
- {
- ObjectInstanceID marketId;
- ObjectInstanceID heroId;
- EMarketMode mode = EMarketMode::RESOURCE_RESOURCE;
- std::vector<TradeItemSell> r1;
- std::vector<TradeItemBuy> r2; //mode 0: r1 - sold resource, r2 - bought res (exception: when sacrificing art r1 is art id [todo: make r2 preferred slot?]
- std::vector<ui32> val; //units of sold resource
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & marketId;
- h & heroId;
- h & mode;
- h & r1;
- h & r2;
- h & val;
- }
- };
- struct DLL_LINKAGE SetFormation : public CPackForServer
- {
- SetFormation() = default;
- ;
- SetFormation(const ObjectInstanceID & HID, EArmyFormation Formation)
- : hid(HID)
- , formation(Formation)
- {
- }
- ObjectInstanceID hid;
- EArmyFormation formation{};
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & hid;
- h & formation;
- }
- };
- struct DLL_LINKAGE HireHero : public CPackForServer
- {
- HireHero() = default;
- HireHero(HeroTypeID HID, const ObjectInstanceID & TID, const HeroTypeID & NHID)
- : hid(HID)
- , tid(TID)
- , nhid(NHID)
- {
- }
- HeroTypeID hid; //available hero serial
- HeroTypeID nhid; //next hero
- ObjectInstanceID tid; //town (tavern) id
- PlayerColor player;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & hid;
- h & nhid;
- h & tid;
- h & player;
- }
- };
- struct DLL_LINKAGE BuildBoat : public CPackForServer
- {
- ObjectInstanceID objid; //where player wants to buy a boat
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & objid;
- }
- };
- struct DLL_LINKAGE QueryReply : public CPackForServer
- {
- QueryReply() = default;
- QueryReply(const QueryID & QID, std::optional<int32_t> Reply)
- : qid(QID)
- , reply(Reply)
- {
- }
- QueryID qid;
- PlayerColor player;
- std::optional<int32_t> reply;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & qid;
- h & player;
- h & reply;
- }
- };
- struct DLL_LINKAGE MakeAction : public CPackForServer
- {
- MakeAction() = default;
- MakeAction(BattleAction BA)
- : ba(std::move(BA))
- {
- }
- BattleAction ba;
- BattleID battleID;
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & ba;
- h & battleID;
- }
- };
- struct DLL_LINKAGE DigWithHero : public CPackForServer
- {
- ObjectInstanceID id; //digging hero id
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & id;
- }
- };
- struct DLL_LINKAGE CastAdvSpell : public CPackForServer
- {
- ObjectInstanceID hid; //hero id
- SpellID sid; //spell id
- int3 pos; //selected tile (not always used)
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & hid;
- h & sid;
- h & pos;
- }
- };
- /***********************************************************************************************************/
- struct DLL_LINKAGE SaveGame : public CPackForServer
- {
- SaveGame() = default;
- SaveGame(std::string Fname)
- : fname(std::move(Fname))
- {
- }
- std::string fname;
- void applyGs(CGameState * gs) {};
- void visitTyped(ICPackVisitor & visitor) override;
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & fname;
- }
- };
- struct DLL_LINKAGE PlayerMessage : public CPackForServer
- {
- PlayerMessage() = default;
- PlayerMessage(std::string Text, const ObjectInstanceID & obj)
- : text(std::move(Text))
- , currObj(obj)
- {
- }
- void applyGs(CGameState * gs) {};
- void visitTyped(ICPackVisitor & visitor) override;
- std::string text;
- ObjectInstanceID currObj; // optional parameter that specifies current object. For cheats :)
- template <typename Handler> void serialize(Handler & h)
- {
- h & static_cast<CPackForServer &>(*this);
- h & text;
- h & currObj;
- }
- };
- VCMI_LIB_NAMESPACE_END
|