2009-04-15 14:03:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/*
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  CGameHandler . 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 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												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/FunctionList.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "../lib/IGameCallback.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/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/ScriptHandler.h" 
  
						 
					
						
							
								
									
										
										
										
											2017-07-13 11:26:03 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "CQuery.h" 
  
						 
					
						
							
								
									
										
										
										
											2009-04-15 14:03:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-11 23:11:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGameHandler ;  
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CVCMIServer ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CGameState ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  StartInfo ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  BattleResult ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  BattleAttack ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  BattleStackAttacked ;  
						 
					
						
							
								
									
										
										
										
											2009-03-06 22:11:17 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  CPack ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  Query ;  
						 
					
						
							
								
									
										
										
										
											2010-01-30 12:46:15 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  SetResources ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct  NewStructures ;  
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGHeroInstance ;  
						 
					
						
							
								
									
										
										
										
											2010-05-18 07:01:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  IMarket ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-06 07:53:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  SpellCastEnvironment ;  
						 
					
						
							
								
									
										
										
										
											2014-11-25 22:00:04 +03: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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								template < typename  T >  class  CApplier ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CBaseForGHApply ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  PlayerStatus  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  makingTurn ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									PlayerStatus ( ) : makingTurn ( false ) { } ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									template  < typename  Handler >  void  serialize ( Handler  & h ,  const  int  version ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										h  &  makingTurn ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  PlayerStatuses  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : map < PlayerColor , PlayerStatus >  players ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									boost : : mutex  mx ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									boost : : condition_variable  cv ;  //notifies when any changes are made
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  addPlayer ( PlayerColor  player ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									PlayerStatus  operator [ ] ( PlayerColor  player ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  checkFlag ( PlayerColor  player ,  bool  PlayerStatus : : * flag ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  setFlag ( PlayerColor  player ,  bool  PlayerStatus : : * flag ,  bool  val ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									template  < typename  Handler >  void  serialize ( Handler  & h ,  const  int  version ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										h  &  players ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-11 23:11:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								struct  CasualtiesAfterBattle  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									typedef  std : : pair < StackLocation ,  int >  TStackAndItsNewCount ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 11:42:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									typedef  std : : map < CreatureID ,  TQuantity >  TSummoned ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-11 23:11:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									enum  { ERASE  =  - 1 } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 11:42:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									const  CArmedInstance  *  army ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-11 23:11:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : vector < TStackAndItsNewCount >  newStackCounts ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-12-19 14:35:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : vector < ArtifactLocation >  removedWarMachines ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 11:42:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									TSummoned  summoned ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									ObjectInstanceID  heroWithDeadCommander ;  //TODO: unify stack locations
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-11 23:11:26 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-07 11:42:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									CasualtiesAfterBattle ( const  CArmedInstance  *  _army ,  BattleInfo  * bat ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  updateArmy ( CGameHandler  * gh ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-11 23:11:26 +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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CGameHandler  :  public  IGameCallback ,  public  CBattleInfoCallback ,  public  Environment  
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									CVCMIServer  *  lobby ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									std : : shared_ptr < CApplier < CBaseForGHApply > >  applier ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-09 10:37:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								public :  
						 
					
						
							
								
									
										
										
										
											2017-07-20 07:08:49 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									using  FireShieldInfo  =  std : : vector < std : : pair < const  CStack  * ,  int64_t > > ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 16:01:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//use enums as parameters, because doMove(sth, true, false, true) is not readable
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									enum  EGuardLook  { CHECK_FOR_GUARDS ,  IGNORE_GUARDS } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									enum  EVisitDest  { VISIT_DEST ,  DONT_VISIT_DEST } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									enum  ELEaveTile  { LEAVING_TILE ,  REMAINING_ON_TILE } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : map < PlayerColor ,  std : : set < std : : shared_ptr < CConnection > > >  connections ;  //player color -> connection to client with interface of that player
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									PlayerStatuses  states ;  //player color -> player state
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-04-12 00:58:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//queries stuff
 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-12 01:48:50 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									boost : : recursive_mutex  gsm ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-12 00:58:41 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									ui32  QID ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									Queries  queries ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-07-15 15:34:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-06 07:53:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									SpellCastEnvironment  *  spellEnv ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									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 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  isValidObject ( const  CGObjectInstance  * obj )  const ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-01 20:06:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  isBlockedByQueries ( const  CPack  * pack ,  PlayerColor  player ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 23:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  isAllowedExchange ( ObjectInstanceID  id1 ,  ObjectInstanceID  id2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  giveSpells ( const  CGTownInstance  * t ,  const  CGHeroInstance  * h ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2011-12-22 13:05:19 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									int  moveStack ( int  stack ,  BattleHex  dest ) ;  //returned value - travelled distance
 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  runBattle ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-01-29 20:52:45 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-09-28 14:21:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									////used only in endBattle - don't touch elsewhere
 
							 
						 
					
						
							
								
									
										
										
										
											2010-05-26 21:59:58 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  visitObjectAfterVictory ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-28 14:21:48 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  endBattle ( int3  tile ,  const  CGHeroInstance  * hero1 ,  const  CGHeroInstance  * hero2 ) ;  //ends battle
 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-20 07:08:49 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  makeAttack ( const  CStack  *  attacker ,  const  CStack  *  defender ,  int  distance ,  BattleHex  targetHex ,  bool  first ,  bool  ranged ,  bool  counter ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-19 17:45:48 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									// damage, drain life & fire shield; returns amount of drained life
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									int64_t  applyBattleEffects ( BattleAttack  &  bat ,  std : : shared_ptr < battle : : CUnitState >  attackerState ,  FireShieldInfo  &  fireShield ,  const  CStack  *  def ,  int  distance ,  bool  secondary ) ; 
							 
						 
					
						
							
								
									
										
										
											
												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  sendGenericKilledLog ( const  CStack  *  defender ,  int32_t  killed ,  bool  multiple ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  addGenericKilledLog ( BattleLogMessage  &  blm ,  const  CStack  *  defender ,  int32_t  killed ,  bool  multiple ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-09 10:59:33 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  checkBattleStateChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-22 20:14:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  setupBattle ( int3  tile ,  const  CArmedInstance  * armies [ 2 ] ,  const  CGHeroInstance  * heroes [ 2 ] ,  bool  creatureBank ,  const  CGTownInstance  * town ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-04 19:43:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  setBattleResult ( BattleResult : : EResult  resultType ,  int  victoriusSide ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									CGameHandler ( CVCMIServer  *  lobby ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-13 11:43:26 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									~ CGameHandler ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//from IGameCallback
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									//do sth
 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  changeSpells ( const  CGHeroInstance  *  hero ,  bool  give ,  const  std : : set < SpellID >  & spells )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  removeObject ( const  CGObjectInstance  *  obj )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  setOwner ( const  CGObjectInstance  *  obj ,  PlayerColor  owner )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  changePrimSkill ( const  CGHeroInstance  *  hero ,  PrimarySkill : : PrimarySkill  which ,  si64  val ,  bool  abs = false )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-01 20:06:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  changeSecSkill ( const  CGHeroInstance  *  hero ,  SecondarySkill  which ,  int  val ,  bool  abs = false )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-01 20:06:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  showBlockingDialog ( BlockingDialog  * iw )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-03-08 16:52:50 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  showTeleportDialog ( TeleportDialog  * iw )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  showGarrisonDialog ( ObjectInstanceID  upobj ,  ObjectInstanceID  hid ,  bool  removableUnits )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  showThievesGuildWindow ( PlayerColor  player ,  ObjectInstanceID  requestingObjId )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  giveResource ( PlayerColor  player ,  Res : : ERes  which ,  int  val )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  giveResources ( PlayerColor  player ,  TResources  resources )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  giveCreatures ( const  CArmedInstance  * objid ,  const  CGHeroInstance  *  h ,  const  CCreatureSet  & creatures ,  bool  remove )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  takeCreatures ( ObjectInstanceID  objid ,  const  std : : vector < CStackBasicDescriptor >  & creatures )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-09-04 18:08:25 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  changeStackType ( const  StackLocation  & sl ,  const  CCreature  * c )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  changeStackCount ( const  StackLocation  & sl ,  TQuantity  count ,  bool  absoluteValue  =  false )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  insertNewStack ( const  StackLocation  & sl ,  const  CCreature  * c ,  TQuantity  count )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  eraseStack ( const  StackLocation  & sl ,  bool  forceRemoval  =  false )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  swapStacks ( const  StackLocation  & sl1 ,  const  StackLocation  & sl2 )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  addToSlot ( const  StackLocation  & sl ,  const  CCreature  * c ,  TQuantity  count )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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 ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-01 20:06:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  removeAfterVisit ( const  CGObjectInstance  * object )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-06 19:45:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  giveHeroNewArtifact ( const  CGHeroInstance  *  h ,  const  CArtifact  *  art ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  giveHeroNewArtifact ( const  CGHeroInstance  * h ,  const  CArtifact  * artType ,  ArtifactPosition  pos )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  giveHeroArtifact ( const  CGHeroInstance  * h ,  const  CArtifactInstance  * a ,  ArtifactPosition  pos )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-01 20:06:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  putArtifact ( const  ArtifactLocation  & al ,  const  CArtifactInstance  * a )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  removeArtifact ( const  ArtifactLocation  & al )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  moveArtifact ( const  ArtifactLocation  & al1 ,  const  ArtifactLocation  & al2 )  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  synchronizeArtifactHandlerLists ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  showCompInfo ( ShowInInfobox  *  comp )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  heroVisitCastle ( const  CGTownInstance  *  obj ,  const  CGHeroInstance  *  hero )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  stopHeroVisitCastle ( const  CGTownInstance  *  obj ,  const  CGHeroInstance  *  hero )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									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
 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-01 20:06:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									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 ; 
							 
						 
					
						
							
								
									
										
										
										
											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 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  changeObjPos ( ObjectInstanceID  objid ,  int3  newPos ,  ui8  flags )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  heroExchange ( ObjectInstanceID  hero1 ,  ObjectInstanceID  hero2 )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2014-06-24 14:50:27 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  changeFogOfWar ( int3  center ,  ui32  radius ,  PlayerColor  player ,  bool  hide )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  changeFogOfWar ( std : : unordered_set < int3 ,  ShashInt3 >  & tiles ,  PlayerColor  player ,  bool  hide )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-26 11:18:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  isVisitCoveredByAnotherQuery ( const  CGObjectInstance  * obj ,  const  CGHeroInstance  * hero )  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 ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-27 21:46:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-12-26 14:34:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 23:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  useScholarSkill ( ObjectInstanceID  hero1 ,  ObjectInstanceID  hero2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-08-24 14:26:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  setPortalDwelling ( const  CGTownInstance  *  town ,  bool  forced ,  bool  clear ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-26 14:34:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  visitObjectOnTile ( const  TerrainTile  & t ,  const  CGHeroInstance  *  h ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  teleportHero ( ObjectInstanceID  hid ,  ObjectInstanceID  dstid ,  ui8  source ,  PlayerColor  asker  =  PlayerColor : : NEUTRAL ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-28 16:39:55 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  visitCastleObjects ( const  CGTownInstance  *  obj ,  const  CGHeroInstance  *  hero )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-12 19:49:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  levelUpHero ( const  CGHeroInstance  *  hero ,  SecondarySkill  skill ) ; //handle client respond and send one more request if needed
 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-08 22:42:46 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  levelUpHero ( const  CGHeroInstance  *  hero ) ; //initial call - check if hero have remaining levelups & handle them
 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-18 14:02:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  levelUpCommander  ( const  CCommanderInstance  *  c ,  int  skill ) ;  //secondary skill 1 to 6, special skill : skill - 100
 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-07 12:54:22 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  levelUpCommander  ( const  CCommanderInstance  *  c ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  expGiven ( const  CGHeroInstance  * hero ) ;  //triggers needed level-ups, handles also commander of this hero
 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//////////////////////////////////////////////////////////////////////////
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-03-27 20:08:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  init ( StartInfo  * si ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  handleClientDisconnection ( std : : shared_ptr < CConnection >  c ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  handleReceivedPack ( CPackForServer  *  pack ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									PlayerColor  getPlayerAt ( std : : shared_ptr < CConnection >  c )  const ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-09 10:37:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-02 16:21:46 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  playerMessage ( PlayerColor  player ,  const  std : : string  & message ,  ObjectInstanceID  currObj ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-13 17:40:31 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  updateGateState ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 00:28:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  makeBattleAction ( BattleAction  & ba ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2012-08-27 12:34:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  makeAutomaticAction ( const  CStack  * stack ,  BattleAction  & ba ) ;  //used when action is taken by stack without volition of player (eg. unguided catapult attack)
 
							 
						 
					
						
							
								
									
										
										
										
											2009-04-16 00:28:54 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  makeCustomAction ( BattleAction  & ba ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-02 20:11:01 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  stackEnchantedTrigger ( const  CStack  *  stack ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-28 23:37:45 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  stackTurnTrigger ( const  CStack  * stack ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-09 10:18:46 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  handleDamageFromObstacle ( const  CStack  *  curStack ,  bool  stackIsMoving  =  false ) ;  //checks if obstacle is land mine and handles possible consequences
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2012-05-18 20:50:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  removeObstacle ( const  CObstacleInstance  & obstacle ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-06 07:53:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  queryReply (  QueryID  qid ,  const  JsonNode  &  answer ,  PlayerColor  player  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  hireHero (  const  CGObjectInstance  * obj ,  ui8  hid ,  PlayerColor  player  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 23:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  buildBoat (  ObjectInstanceID  objid  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  setFormation (  ObjectInstanceID  hid ,  ui8  formation  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  tradeResources ( const  IMarket  * market ,  ui32  val ,  PlayerColor  player ,  ui32  id1 ,  ui32  id2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-28 11:04:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  sacrificeCreatures ( const  IMarket  *  market ,  const  CGHeroInstance  *  hero ,  const  std : : vector < SlotID >  &  slot ,  const  std : : vector < ui32 >  &  count ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  sendResources ( ui32  val ,  PlayerColor  player ,  Res : : ERes  r1 ,  PlayerColor  r2 ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-16 14:03:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  sellCreatures ( ui32  count ,  const  IMarket  * market ,  const  CGHeroInstance  *  hero ,  SlotID  slot ,  Res : : ERes  resourceID ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  transformInUndead ( const  IMarket  * market ,  const  CGHeroInstance  *  hero ,  SlotID  slot ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  assembleArtifacts  ( ObjectInstanceID  heroID ,  ArtifactPosition  artifactSlot ,  bool  assemble ,  ArtifactID  assembleTo ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 23:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  buyArtifact (  ObjectInstanceID  hid ,  ArtifactID  aid  ) ;  //for blacksmith and mage guild only -> buying for gold in common buildings
 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-10 23:24:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  buyArtifact (  const  IMarket  * m ,  const  CGHeroInstance  * h ,  Res : : ERes  rid ,  ArtifactID  aid ) ;  //for artifact merchant and black market -> buying for any resource in special building / advobject
 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 23:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  sellArtifact (  const  IMarket  * m ,  const  CGHeroInstance  * h ,  ArtifactInstanceID  aid ,  Res : : ERes  rid ) ;  //for artifact merchant selling
 
							 
						 
					
						
							
								
									
										
										
										
											2012-05-02 08:37:11 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									//void lootArtifacts (TArtHolder source, TArtHolder dest, std::vector<ui32> &arts); //after battle - move al arts to winer
 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-12 19:49:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  buySecSkill (  const  IMarket  * m ,  const  CGHeroInstance  * h ,  SecondarySkill  skill ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 23:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  garrisonSwap ( ObjectInstanceID  tid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-19 15:14:50 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  swapGarrisonOnSiege ( ObjectInstanceID  tid )  override ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-16 14:03:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  upgradeCreature (  ObjectInstanceID  objid ,  SlotID  pos ,  CreatureID  upgID  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-09-19 00:18:49 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  recruitCreatures ( ObjectInstanceID  objid ,  ObjectInstanceID  dst ,  CreatureID  crid ,  ui32  cram ,  si32  level ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-13 23:55:42 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  buildStructure ( ObjectInstanceID  tid ,  BuildingID  bid ,  bool  force = false ) ; //force - for events: no cost, no checkings
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  razeStructure ( ObjectInstanceID  tid ,  BuildingID  bid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-16 14:03:47 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  disbandCreature (  ObjectInstanceID  id ,  SlotID  pos  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  arrangeStacks (  ObjectInstanceID  id1 ,  ObjectInstanceID  id2 ,  ui8  what ,  SlotID  p1 ,  SlotID  p2 ,  si32  val ,  PlayerColor  player ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-28 15:57:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  bulkMoveArmy ( ObjectInstanceID  srcArmy ,  ObjectInstanceID  destArmy ,  SlotID  srcSlot ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  bulkSplitStack ( SlotID  src ,  ObjectInstanceID  srcOwner ,  si32  howMany ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  bulkMergeStacks ( SlotID  slotSrc ,  ObjectInstanceID  srcOwner ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									bool  bulkSmartSplitStack ( SlotID  slotSrc ,  ObjectInstanceID  srcOwner ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-09 10:37:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  save ( const  std : : string  & fname ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  load ( const  std : : string  & fname ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-09 19:40:43 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  handleTimeEvents ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-14 20:44:00 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  handleTownEvents ( CGTownInstance  * town ,  NewTurn  & n ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-26 23:05:40 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  complain ( const  std : : string  & problem ) ;  //sends message to all clients, prints on the logs and return true
 
							 
						 
					
						
							
								
									
										
										
										
											2009-07-06 19:41:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  objectVisited (  const  CGObjectInstance  *  obj ,  const  CGHeroInstance  *  h  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  objectVisitEnded ( const  CObjectVisitQuery  & query ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-03-03 17:06:03 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  engageIntoBattle (  PlayerColor  player  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-02-21 15:03:30 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  dig ( const  CGHeroInstance  * h ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2010-12-12 23:44:16 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  moveArmy ( const  CArmedInstance  * src ,  const  CArmedInstance  * dst ,  bool  allowMerging ) ; 
							 
						 
					
						
							
								
									
										
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									const  ObjectInstanceID  putNewObject ( Obj  ID ,  int  subID ,  int3  pos ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2009-03-09 10:37:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									template  < typename  Handler >  void  serialize ( Handler  & h ,  const  int  version ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-31 16:35:42 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										h  &  QID ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										h  &  states ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										h  &  finishingBattle ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-20 17:39:50 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										h  &  getRandomGenerator ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-09-21 19:31:14 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if SCRIPTING_ENABLED 
  
						 
					
						
							
								
									
										
										
										
											2022-06-20 17:39:50 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										JsonNode  scriptsState ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if ( h . saving ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											serverScripts - > serializeState ( h . saving ,  scriptsState ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										h  &  scriptsState ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if ( ! h . saving ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											serverScripts - > serializeState ( h . saving ,  scriptsState ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-09-21 19:31:14 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-09 10:37:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sendMessageToAll ( const  std : : string  & message ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 20:21:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  sendMessageTo ( std : : shared_ptr < CConnection >  c ,  const  std : : string  & message ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-02-26 00:16:15 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  sendToAllClients ( CPackForClient  *  pack ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sendAndApply ( CPackForClient  *  pack )  override ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  applyAndSend ( CPackForClient  *  pack ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sendAndApply ( CGarrisonOperationPack  *  pack ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sendAndApply ( SetResources  *  pack ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  sendAndApply ( NewStructures  *  pack ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-09 10:37:49 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									struct  FinishingBattleHelper 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										FinishingBattleHelper ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-01 16:30:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										FinishingBattleHelper ( std : : shared_ptr < const  CBattleQuery >  Query ,  int  RemainingBattleQueriesCount ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										const  CGHeroInstance  * winnerHero ,  * loserHero ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										PlayerColor  victor ,  loser ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										int  remainingBattleQueriesCount ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										template  < typename  Handler >  void  serialize ( Handler  & h ,  const  int  version ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-31 16:35:42 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											h  &  winnerHero ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											h  &  loserHero ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											h  &  victor ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											h  &  loser ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-01 16:30:13 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											h  &  remainingBattleQueriesCount ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-29 05:43:33 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : unique_ptr < FinishingBattleHelper >  finishingBattle ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-04-20 11:34:01 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  battleAfterLevelUp ( const  BattleResult  & result ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-24 11:35:14 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  run ( bool  resume ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  newTurn ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-20 07:08:49 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  handleAttackBeforeCasting ( bool  ranged ,  const  CStack  *  attacker ,  const  CStack  *  defender ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  handleAfterAttackCasting ( bool  ranged ,  const  CStack  *  attacker ,  const  CStack  *  defender ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-02 13:22:51 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  attackCasting ( bool  ranged ,  Bonus : : BonusType  attackMode ,  const  battle : : Unit  *  attacker ,  const  battle : : Unit  *  defender ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-28 11:04:55 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									bool  sacrificeArtifact ( const  IMarket  *  m ,  const  CGHeroInstance  *  hero ,  const  std : : vector < ArtifactPosition >  &  slot ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-02-10 23:24:57 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  spawnWanderingMonsters ( CreatureID  creatureID ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-02 16:21:46 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  handleCheatCode ( std : : string  &  cheat ,  PlayerColor  player ,  const  CGHeroInstance  *  hero ,  const  CGTownInstance  *  town ,  bool  &  cheated ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-17 17:57:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 20:30:36 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									CRandomGenerator  &  getRandomGenerator ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									friend  class  CVCMIServer ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-17 17:57:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								private :  
						 
					
						
							
								
									
										
										
											
												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 >  serverEventBus ; 
							 
						 
					
						
							
								
									
										
										
										
											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 >  serverScripts ; 
							 
						 
					
						
							
								
									
										
										
										
											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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  reinitScripting ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-12-17 17:14:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									std : : list < PlayerColor >  generatePlayerTurnOrder ( )  const ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-17 17:57:04 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  makeStackDoNothing ( const  CStack  *  next ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2014-06-25 17:11:07 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									void  getVictoryLossMessage ( PlayerColor  player ,  const  EVictoryLossCheckResult  &  victoryLossCheckResult ,  InfoWindow  &  out )  const ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-30 09:43:31 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									// Check for victory and loss conditions
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  checkVictoryLossConditionsForPlayer ( PlayerColor  player ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  checkVictoryLossConditions ( const  std : : set < PlayerColor >  &  playerColors ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									void  checkVictoryLossConditionsForAll ( ) ; 
							 
						 
					
						
							
								
									
										
										
											
												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 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-11-28 15:57:38 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									const  std : : string  complainNoCreatures ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									const  std : : string  complainNotEnoughCreatures ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									const  std : : string  complainInvalidSlot ; 
							 
						 
					
						
							
								
									
										
										
										
											2008-12-27 01:01:59 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-25 20:21:34 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  ExceptionNotAllowedAction  :  public  std : : exception  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;