2009-04-15 17:03:31 +03:00
/*
* Client . 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
*
*/
2017-07-13 10:26:03 +02:00
# pragma once
2023-04-04 21:54:30 +02:00
# include <memory>
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
# include <vcmi/Environment.h>
2017-07-13 10:26:03 +02:00
# include "../lib/IGameCallback.h"
# include "../lib/battle/BattleAction.h"
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
# include "../lib/battle/CBattleInfoCallback.h"
2017-07-13 10:26:03 +02:00
# include "../lib/CStopWatch.h"
# include "../lib/int3.h"
2018-01-05 19:21:07 +02:00
# include "../lib/CondSh.h"
# include "../lib/CPathfinder.h"
2009-04-15 17:03:31 +03:00
2022-07-26 15:07:42 +02:00
VCMI_LIB_NAMESPACE_BEGIN
2016-08-30 04:13:45 +02:00
struct CPack ;
2018-01-05 19:21:07 +02:00
struct CPackForServer ;
2014-07-15 10:14:49 +03:00
class CCampaignState ;
2011-05-10 01:20:47 +03:00
class IGameEventsReceiver ;
class IBattleEventsReceiver ;
2010-12-22 22:14:40 +02:00
class CBattleGameInterface ;
2008-12-27 03:01:59 +02:00
class CGameState ;
class CGameInterface ;
2020-10-01 10:38:06 +02:00
class BattleAction ;
2009-08-30 15:47:40 +03:00
struct CPathsInfo ;
2016-09-10 02:32:40 +02:00
class BinaryDeserializer ;
class BinarySerializer ;
2009-08-30 15:47:40 +03:00
2018-01-05 19:21:07 +02:00
template < typename T > class CApplier ;
2010-09-03 21:42:54 +03:00
2022-09-21 18:31:14 +02:00
# if SCRIPTING_ENABLED
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
namespace scripting
{
class PoolImpl ;
}
2022-09-21 18:31:14 +02:00
# endif
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
namespace events
{
class EventBus ;
}
2022-07-26 15:07:42 +02:00
VCMI_LIB_NAMESPACE_END
class CBattleCallback ;
class CCallback ;
class CClient ;
class CBaseForCLApply ;
namespace boost { class thread ; }
2012-03-26 01:46:14 +03:00
template < typename T >
class ThreadSafeVector
{
2023-04-17 23:11:16 +02:00
using TVector = std : : vector < T > ;
using TLock = boost : : unique_lock < boost : : mutex > ;
2012-03-26 01:46:14 +03:00
TVector items ;
boost : : mutex mx ;
boost : : condition_variable cond ;
public :
2017-07-12 16:02:25 +02:00
void clear ( )
{
TLock lock ( mx ) ;
items . clear ( ) ;
cond . notify_all ( ) ;
}
2018-01-05 19:21:07 +02:00
void pushBack ( const T & item )
2012-03-26 01:46:14 +03:00
{
TLock lock ( mx ) ;
items . push_back ( item ) ;
cond . notify_all ( ) ;
}
// //to access list, caller must present a lock used to lock mx
// TVector &getList(TLock &lockedLock)
// {
// assert(lockedLock.owns_lock() && lockedLock.mutex() == &mx);
// return items;
// }
TLock getLock ( )
{
return TLock ( mx ) ;
}
2018-01-05 19:21:07 +02:00
void waitWhileContains ( const T & item )
2012-03-26 01:46:14 +03:00
{
auto lock = getLock ( ) ;
while ( vstd : : contains ( items , item ) )
cond . wait ( lock ) ;
}
2018-01-05 19:21:07 +02:00
bool tryRemovingElement ( const T & item ) //returns false if element was not present
2012-03-26 01:46:14 +03:00
{
auto lock = getLock ( ) ;
auto itr = vstd : : find ( items , item ) ;
if ( itr = = items . end ( ) ) //not in container
{
return false ;
}
items . erase ( itr ) ;
cond . notify_all ( ) ;
return true ;
}
} ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
class CPlayerEnvironment : public Environment
2008-12-27 03:01:59 +02:00
{
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
public :
PlayerColor player ;
CClient * cl ;
std : : shared_ptr < CCallback > mainCallback ;
CPlayerEnvironment ( PlayerColor player_ , CClient * cl_ , std : : shared_ptr < CCallback > mainCallback_ ) ;
const Services * services ( ) const override ;
vstd : : CLoggerBase * logger ( ) const override ;
events : : EventBus * eventBus ( ) const override ;
const BattleCb * battle ( ) const override ;
const GameCb * game ( ) const override ;
} ;
2018-01-05 19:21:07 +02:00
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
/// Class which handles client - server logic
class CClient : public IGameCallback , public CBattleInfoCallback , public Environment
{
2009-03-07 00:11:17 +02:00
public :
2015-12-29 04:43:33 +02:00
std : : map < PlayerColor , std : : shared_ptr < CGameInterface > > playerint ;
std : : map < PlayerColor , std : : shared_ptr < CBattleGameInterface > > battleints ;
2013-06-22 21:22:44 +03:00
2018-01-05 19:21:07 +02:00
std : : map < PlayerColor , std : : vector < std : : shared_ptr < IBattleEventsReceiver > > > additionalBattleInts ;
2011-06-25 17:22:19 +03:00
2023-04-16 19:42:56 +02:00
std : : optional < BattleAction > curbaction ;
2013-05-09 14:09:23 +03:00
2018-01-13 10:43:26 +02:00
CClient ( ) ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
~ CClient ( ) ;
const Services * services ( ) const override ;
const BattleCb * battle ( ) const override ;
const GameCb * game ( ) const override ;
vstd : : CLoggerBase * logger ( ) const override ;
events : : EventBus * eventBus ( ) const override ;
2008-12-27 03:01:59 +02:00
2022-09-28 21:15:05 +02:00
void newGame ( CGameState * gameState ) ;
2022-09-29 19:33:44 +02:00
void loadGame ( CGameState * gameState ) ;
2018-01-05 19:21:07 +02:00
void serialize ( BinarySerializer & h , const int version ) ;
void serialize ( BinaryDeserializer & h , const int version ) ;
void save ( const std : : string & fname ) ;
void endGame ( ) ;
2011-02-27 21:58:14 +02:00
2018-01-05 19:21:07 +02:00
void initMapHandler ( ) ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
void initPlayerEnvironments ( ) ;
2018-01-05 19:21:07 +02:00
void initPlayerInterfaces ( ) ;
std : : string aiNameForPlayer ( const PlayerSettings & ps , bool battleAI ) ; //empty means no AI -> human
std : : string aiNameForPlayer ( bool battleAI ) ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
void installNewPlayerInterface ( std : : shared_ptr < CGameInterface > gameInterface , PlayerColor color , bool battlecb = false ) ;
void installNewBattleInterface ( std : : shared_ptr < CBattleGameInterface > battleInterface , PlayerColor color , bool needCallback = true ) ;
2014-09-21 16:42:08 +03:00
2018-01-05 19:21:07 +02:00
static ThreadSafeVector < int > waitingRequest ; //FIXME: make this normal field (need to join all threads before client destruction)
void handlePack ( CPack * pack ) ; //applies the given pack and deletes it
int sendRequest ( const CPackForServer * request , PlayerColor player ) ; //returns ID given to that request
2009-11-01 03:15:16 +02:00
2018-01-05 19:21:07 +02:00
void battleStarted ( const BattleInfo * info ) ;
void commenceTacticPhaseForInt ( std : : shared_ptr < CBattleGameInterface > battleInt ) ; //will be called as separate thread
void battleFinished ( ) ;
void startPlayerBattleAction ( PlayerColor color ) ;
void stopPlayerBattleAction ( PlayerColor color ) ;
void stopAllBattleActions ( ) ;
2009-11-01 03:15:16 +02:00
2018-01-05 19:21:07 +02:00
void invalidatePaths ( ) ;
2019-01-15 05:00:00 +02:00
std : : shared_ptr < const CPathsInfo > getPathsInfo ( const CGHeroInstance * h ) ;
2013-06-26 14:18:27 +03:00
virtual PlayerColor getLocalPlayer ( ) const override ;
2011-06-11 02:50:32 +03:00
2018-01-05 19:21:07 +02:00
friend class CCallback ; //handling players actions
friend class CBattleCallback ; //handling players actions
void changeSpells ( const CGHeroInstance * hero , bool give , const std : : set < SpellID > & spells ) override { } ;
2013-06-26 14:18:27 +03:00
bool removeObject ( const CGObjectInstance * obj ) override { return false ; } ;
void setOwner ( const CGObjectInstance * obj , PlayerColor owner ) override { } ;
2018-01-05 19:21:07 +02:00
void changePrimSkill ( const CGHeroInstance * hero , PrimarySkill : : PrimarySkill which , si64 val , bool abs = false ) override { } ;
void changeSecSkill ( const CGHeroInstance * hero , SecondarySkill which , int val , bool abs = false ) override { } ;
2013-06-26 14:18:27 +03:00
2018-01-05 19:21:07 +02:00
void showBlockingDialog ( BlockingDialog * iw ) override { } ;
2013-06-26 14:18:27 +03:00
void showGarrisonDialog ( ObjectInstanceID upobj , ObjectInstanceID hid , bool removableUnits ) override { } ;
2018-01-05 19:21:07 +02:00
void showTeleportDialog ( TeleportDialog * iw ) override { } ;
2013-06-26 14:18:27 +03:00
void showThievesGuildWindow ( PlayerColor player , ObjectInstanceID requestingObjId ) override { } ;
2023-04-05 02:26:29 +02:00
void giveResource ( PlayerColor player , GameResID which , int val ) override { } ;
2013-06-26 14:18:27 +03:00
virtual void giveResources ( PlayerColor player , TResources resources ) override { } ;
2018-01-05 19:21:07 +02:00
void giveCreatures ( const CArmedInstance * objid , const CGHeroInstance * h , const CCreatureSet & creatures , bool remove ) override { } ;
void takeCreatures ( ObjectInstanceID objid , const std : : vector < CStackBasicDescriptor > & creatures ) override { } ;
bool changeStackType ( const StackLocation & sl , const CCreature * c ) override { return false ; } ;
bool changeStackCount ( const StackLocation & sl , TQuantity count , bool absoluteValue = false ) override { return false ; } ;
bool insertNewStack ( const StackLocation & sl , const CCreature * c , TQuantity count ) override { return false ; } ;
bool eraseStack ( const StackLocation & sl , bool forceRemoval = false ) override { return false ; } ;
bool swapStacks ( const StackLocation & sl1 , const StackLocation & sl2 ) override { return false ; }
bool addToSlot ( const StackLocation & sl , const CCreature * c , TQuantity count ) override { return false ; }
void tryJoiningArmy ( const CArmedInstance * src , const CArmedInstance * dst , bool removeObjWhenFinished , bool allowMerging ) override { }
bool moveStack ( const StackLocation & src , const StackLocation & dst , TQuantity count = - 1 ) override { return false ; }
void removeAfterVisit ( const CGObjectInstance * object ) override { } ;
2021-09-12 13:30:54 +02:00
bool swapGarrisonOnSiege ( ObjectInstanceID tid ) override { return false ; } ;
2023-03-20 01:18:32 +02:00
bool giveHeroNewArtifact ( const CGHeroInstance * h , const CArtifact * artType , ArtifactPosition pos ) override { return false ; }
bool giveHeroArtifact ( const CGHeroInstance * h , const CArtifactInstance * a , ArtifactPosition pos ) override { return false ; }
2018-01-05 19:21:07 +02:00
void putArtifact ( const ArtifactLocation & al , const CArtifactInstance * a ) override { } ;
void removeArtifact ( const ArtifactLocation & al ) override { } ;
bool moveArtifact ( const ArtifactLocation & al1 , const ArtifactLocation & al2 ) override { return false ; } ;
2013-06-26 14:18:27 +03:00
void heroVisitCastle ( const CGTownInstance * obj , const CGHeroInstance * hero ) override { } ;
2020-09-28 00:32:33 +02:00
void visitCastleObjects ( const CGTownInstance * obj , const CGHeroInstance * hero ) override { } ;
2013-06-26 14:18:27 +03:00
void stopHeroVisitCastle ( const CGTownInstance * obj , const CGHeroInstance * hero ) override { } ;
2018-01-05 19:21:07 +02:00
void startBattlePrimary ( const CArmedInstance * army1 , const CArmedInstance * army2 , int3 tile , const CGHeroInstance * hero1 , const CGHeroInstance * hero2 , bool creatureBank = false , const CGTownInstance * town = nullptr ) override { } ; //use hero=nullptr for no hero
void startBattleI ( const CArmedInstance * army1 , const CArmedInstance * army2 , int3 tile , bool creatureBank = false ) override { } ; //if any of armies is hero, hero will be used
void startBattleI ( const CArmedInstance * army1 , const CArmedInstance * army2 , bool creatureBank = false ) override { } ; //if any of armies is hero, hero will be used, visitable tile of second obj is place of battle
2015-03-08 16:04:09 +02:00
bool moveHero ( ObjectInstanceID hid , int3 dst , ui8 teleporting , bool transit = false , PlayerColor asker = PlayerColor : : NEUTRAL ) override { return false ; } ;
2013-06-26 14:18:27 +03:00
void giveHeroBonus ( GiveBonus * bonus ) override { } ;
void setMovePoints ( SetMovePoints * smp ) override { } ;
void setManaPoints ( ObjectInstanceID hid , int val ) override { } ;
void giveHero ( ObjectInstanceID id , PlayerColor player ) override { } ;
2023-02-16 21:35:15 +02:00
void changeObjPos ( ObjectInstanceID objid , int3 newPos ) override { } ;
2018-02-25 18:16:15 +02:00
void sendAndApply ( CPackForClient * pack ) override { } ;
2013-06-26 14:18:27 +03:00
void heroExchange ( ObjectInstanceID hero1 , ObjectInstanceID hero2 ) override { } ;
2023-04-10 03:40:03 +02:00
void castSpell ( const spells : : Caster * caster , SpellID spellID , const int3 & pos ) override { } ;
2009-03-14 13:25:25 +02:00
2014-06-24 14:50:27 +03:00
void changeFogOfWar ( int3 center , ui32 radius , PlayerColor player , bool hide ) override { }
2023-04-16 00:48:49 +02:00
void changeFogOfWar ( std : : unordered_set < int3 > & tiles , PlayerColor player , bool hide ) override { }
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
void setObjProperty ( ObjectInstanceID objid , int prop , si64 val ) override { }
void showInfoDialog ( InfoWindow * iw ) override { } ;
void showInfoDialog ( const std : : string & msg , PlayerColor player ) override { } ;
2023-01-11 18:11:44 +02:00
void removeGUI ( ) ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
2023-04-04 21:54:30 +02:00
void cleanThreads ( ) ;
2022-09-21 18:31:14 +02:00
# if SCRIPTING_ENABLED
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
scripting : : Pool * getGlobalContextPool ( ) const override ;
scripting : : Pool * getContextPool ( ) const override ;
2022-09-21 18:31:14 +02:00
# endif
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
private :
std : : map < PlayerColor , std : : shared_ptr < CBattleCallback > > battleCallbacks ; //callbacks given to player interfaces
std : : map < PlayerColor , std : : shared_ptr < CPlayerEnvironment > > playerEnvironments ;
2022-09-21 18:31:14 +02:00
# if SCRIPTING_ENABLED
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
std : : shared_ptr < scripting : : PoolImpl > clientScripts ;
2022-09-21 18:31:14 +02:00
# endif
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
std : : unique_ptr < events : : EventBus > clientEventBus ;
std : : shared_ptr < CApplier < CBaseForCLApply > > applier ;
mutable boost : : mutex pathCacheMutex ;
std : : map < const CGHeroInstance * , std : : shared_ptr < CPathsInfo > > pathCache ;
std : : map < PlayerColor , std : : shared_ptr < boost : : thread > > playerActionThreads ;
2023-04-04 21:54:30 +02:00
std : : map < PlayerColor , std : : unique_ptr < boost : : thread > > playerTacticThreads ;
Entities redesign and a few ERM features
* Made most Handlers derived from CHandlerBase and moved service API there.
* Declared existing Entity APIs.
* Added basic script context caching
* Started Lua script module
* Started Lua spell effect API
* Started script state persistence
* Started battle info callback binding
* CommitPackage removed
* Extracted spells::Caster to own header; Expanded Spell API.
* implemented !!MC:S, !!FU:E, !!FU:P, !!MA, !!VR:H, !!VR:C
* !!BU:C, !!BU:E, !!BU:G, !!BU:M implemented
* Allow use of "MC:S@varName@" to declare normal variable (technically v-variable with string key)
* Re-enabled VERM macros.
* !?GM0 added
* !?TM implemented
* Added !!MF:N
* Started !?OB, !!BM, !!HE, !!OW, !!UN
* Added basic support of w-variables
* Added support for ERM indirect variables
* Made !?FU regular trigger
* !!re (ERA loop receiver) implemented
* Fixed ERM receivers with zero args.
2018-03-17 16:58:30 +02:00
void waitForMoveAndSend ( PlayerColor color ) ;
void reinitScripting ( ) ;
2008-12-27 03:01:59 +02:00
} ;