2009-04-15 14:03:31 +00: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 11:26:03 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <vcmi/Environment.h> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-13 11:26:03 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "../lib/battle/CBattleInfoCallback.h" 
  
						 
					
						
							
								
									
										
										
										
											2017-07-13 11:26:03 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "../lib/CStopWatch.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "../lib/int3.h" 
  
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "../lib/CondSh.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "../lib/CPathfinder.h" 
  
						 
					
						
							
								
									
										
										
										
											2009-04-15 14:03:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-26 16:07:42 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								VCMI_LIB_NAMESPACE_BEGIN  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-30 05:13:45 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  CPack ;  
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  CPackForServer ;  
						 
					
						
							
								
									
										
										
										
											2014-07-15 10:14:49 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CCampaignState ;  
						 
					
						
							
								
									
										
										
										
											2011-05-09 22:20:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  IGameEventsReceiver ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  IBattleEventsReceiver ;  
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CBattleGameInterface ;  
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGameState ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CGameInterface ;  
						 
					
						
							
								
									
										
										
										
											2020-10-01 01:38:06 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  BattleAction ;  
						 
					
						
							
								
									
										
										
										
											2009-08-30 12:47:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  CPathsInfo ;  
						 
					
						
							
								
									
										
										
										
											2016-09-10 03:32:40 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  BinaryDeserializer ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  BinarySerializer ;  
						 
					
						
							
								
									
										
										
										
											2009-08-30 12:47:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								template < typename  T >  class  CApplier ;  
						 
					
						
							
								
									
										
										
										
											2010-09-03 18:42:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-21 19:31:14 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								namespace  scripting  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									class  PoolImpl ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2022-09-21 19:31:14 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  events  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									class  EventBus ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-07-26 16:07:42 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								VCMI_LIB_NAMESPACE_END  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CBattleCallback ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CCallback ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CClient ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CBaseForCLApply ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								namespace  boost  {  class  thread ;  }  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-25 22:46:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								template < typename  T >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ThreadSafeVector  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									typedef  std : : vector < T >  TVector ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									typedef  boost : : unique_lock < boost : : mutex >  TLock ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									TVector  items ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									boost : : mutex  mx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									boost : : condition_variable  cond ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
									
										
										
										
											2017-07-12 17:02:25 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  clear ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										TLock  lock ( mx ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										items . clear ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										cond . notify_all ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  pushBack ( const  T  &  item ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-25 22:46:14 +00: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 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  waitWhileContains ( const  T  &  item ) 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-25 22:46:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										auto  lock  =  getLock ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										while ( vstd : : contains ( items ,  item ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											cond . wait ( lock ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  tryRemovingElement ( const  T  &  item )  //returns false if element was not present
 
							 
						 
					
						
							
								
									
										
										
										
											2012-03-25 22:46:14 +00: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CPlayerEnvironment  :  public  Environment  
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00: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 17:58:30 +03: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 20:21:07 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/// Class which handles client - server logic
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CClient  :  public  IGameCallback ,  public  CBattleInfoCallback ,  public  Environment  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2009-03-06 22:11:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
									
										
										
										
											2015-12-29 05:43:33 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : map < PlayerColor ,  std : : shared_ptr < CGameInterface > >  playerint ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									std : : map < PlayerColor ,  std : : shared_ptr < CBattleGameInterface > >  battleints ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-22 18:22:44 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : map < PlayerColor ,  std : : vector < std : : shared_ptr < IBattleEventsReceiver > > >  additionalBattleInts ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-25 14:22:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-09 11:09:23 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									boost : : optional < BattleAction >  curbaction ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-13 11:43:26 +03: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 17:58:30 +03: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 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-28 23:15:05 +04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  newGame ( CGameState  *  gameState ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-29 21:33:44 +04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  loadGame ( CGameState  *  gameState ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 19:58:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  initPlayerEnvironments ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 17:58:30 +03: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 20:21:07 +03: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 01:15:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 01:15:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  invalidatePaths ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-15 06:00:00 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : shared_ptr < const  CPathsInfo >  getPathsInfo ( const  CGHeroInstance  *  h ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									virtual  PlayerColor  getLocalPlayer ( )  const  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-06-10 23:50:32 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  removeObject ( const  CGObjectInstance  *  obj )  override  { return  false ; } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  setOwner ( const  CGObjectInstance  *  obj ,  PlayerColor  owner )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  showBlockingDialog ( BlockingDialog  *  iw )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  showGarrisonDialog ( ObjectInstanceID  upobj ,  ObjectInstanceID  hid ,  bool  removableUnits )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  showTeleportDialog ( TeleportDialog  *  iw )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  showThievesGuildWindow ( PlayerColor  player ,  ObjectInstanceID  requestingObjId )  override  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  giveResource ( PlayerColor  player ,  Res : : ERes  which ,  int  val )  override  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									virtual  void  giveResources ( PlayerColor  player ,  TResources  resources )  override  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 14:30:54 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  swapGarrisonOnSiege ( ObjectInstanceID  tid )  override  { return  false ; } ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  giveHeroNewArtifact ( const  CGHeroInstance  *  h ,  const  CArtifact  *  artType ,  ArtifactPosition  pos )  override  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  giveHeroArtifact ( const  CGHeroInstance  *  h ,  const  CArtifactInstance  *  a ,  ArtifactPosition  pos )  override  { } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  heroVisitCastle ( const  CGTownInstance  *  obj ,  const  CGHeroInstance  *  hero )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-28 01:32:33 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  visitCastleObjects ( const  CGTownInstance  *  obj ,  const  CGHeroInstance  *  hero )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  stopHeroVisitCastle ( const  CGTownInstance  *  obj ,  const  CGHeroInstance  *  hero )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03: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 17:04:09 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  moveHero ( ObjectInstanceID  hid ,  int3  dst ,  ui8  teleporting ,  bool  transit  =  false ,  PlayerColor  asker  =  PlayerColor : : NEUTRAL )  override  { return  false ; } ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00: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-26 00:16:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  sendAndApply ( CPackForClient  *  pack )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  heroExchange ( ObjectInstanceID  hero1 ,  ObjectInstanceID  hero2 )  override  { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-14 11:25:25 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-24 14:50:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  changeFogOfWar ( int3  center ,  ui32  radius ,  PlayerColor  player ,  bool  hide )  override  { } 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  changeFogOfWar ( std : : unordered_set < int3 ,  ShashInt3 >  &  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 17:58:30 +03: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 17:11:44 +01: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-04-04 21:54:30 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  cleanThreads ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-21 19:31:14 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									scripting : : Pool  *  getGlobalContextPool ( )  const  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									scripting : : Pool  *  getContextPool ( )  const  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-21 19:31:14 +03: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 17:58:30 +03: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 19:31:14 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : shared_ptr < scripting : : PoolImpl >  clientScripts ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-21 19:31:14 +03: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 17:58:30 +03: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 17:58:30 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  waitForMoveAndSend ( PlayerColor  color ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  reinitScripting ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;