| Berserker   
   
   Posts: 16785
 
 |  | 
	| 01.11.2020 02:01 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 01.11.2020 02:40 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 01.11.2020 03:21 |  | 
	
		| SergOz   
   Posts: 1359
 
 | 
			| 
 
				Возможно ли сделать так, чтобы в бою с нейтралами можно было откупиться и сохранить армию?Если да, то подскажите, плиз, как это сделать.
 
 Карта-мод "Война на Холсте"
 |  | 
	| 01.11.2020 19:09 |  | 
	
		| Valery   
   Posts: 2196
 
 | 
			| 
 
				Are ghosts hardcoded of I forgot everything about flags? 
Trying to make ghosts alive, tried removing undead flag then adding alive, nothing works
 
*Remove Ghosts undead flag
 
Code:
 !!MA:X159/?k; save abilities in k!*VRj:Sk &262144*-1; check for undead ability;
 !*VRk:+j; remove
 !*MA:X159/k;
 
 or/and
 
 !!VRk:|16; add alive
 !!MA:X159/k;
				
(This post was last modified: 02.11.2020 19:10 by Valery.)
 |  | 
	| 02.11.2020 19:09 |  | 
	
		| igrik   
   Posts: 2821
 
 |  | 
	| 02.11.2020 19:17 |  | 
	
		| Valery   
   Posts: 2196
 
 | 
			| 
 
				ok, so it means it worked but something strange, after script ghosts aren't still affected by curse, how can I solve that. Curse should work if undead flag is removed, no? 
@Edit: ah ok, they had immunity fire flag also    
Solved,thanks
			
				
(This post was last modified: 02.11.2020 19:44 by Valery.)
 |  | 
	| 02.11.2020 19:20 |  | 
	
		| igrik   
   Posts: 2821
 
 | 
			| 
 
				 (01.11.2020 19:09)SergOz Wrote:  Возможно ли сделать так, чтобы в бою с нейтралами можно было откупиться и сохранить армию?Если да, то подскажите, плиз, как это сделать.
 
На ERM это технически сложно сделать. 
Я делал когда-то (уже не помню кому и зачем. Вроде Армагу(стример такой) и вроде на SoD), да и то плагином.
 
Code:
 _bool_ isRunAwayOfMonstre = false;int __stdcall Y_RunAwayOfMonstreQ(LoHook* h, HookContext* c)
 {
 _BattleMgr_* bm = o_BattleMgr;
 *(int*)0x695080 = c->eax; // сохраняем кол-во денег для уплаты выкупа
 char* name; // будет хранить имя героя или монстра
 isRunAwayOfMonstre = false; // переменная от кого сбегает герой (false == от героя противника, true == от монстра)
 if(!bm->hero[1] && bm->current_side == 0) {
 int cr_id = 149; // если в описании будет указана Стрелковая Башня, то есть ошибка в нижеидущем цикле
 int value = 0;
 for (int i=0; i<20; i++) {
 if (bm->stack[1][i].creature_id != -1 && bm->stack[1][i].creature_id != 149 && bm->stack[1][i].count_current > 0) {
 if (bm->stack[1][i].creature.AI_value > value) { // вычисляем наилучший живой стек у нейтралов (если есть улучшенный стек)
 cr_id = bm->stack[1][i].creature_id;
 value = bm->stack[1][i].creature.AI_value;
 // break;
 }
 }
 }
 name = o_pCreatureInfo[cr_id].name_single;
 isRunAwayOfMonstre = true;
 } else {
 name = bm->hero[1 - bm->current_side]->name;
 }
 sprintf(o_TextBuffer, o_GENRLTXT_TXT->GetString(34), name, c->eax);
 c->return_address = 0x4749EB;
 return NO_EXEC_DEFAULT;
 }
 
 int __stdcall Y_RunAwayOfMonstreBG(LoHook* h, HookContext* c)
 {
 // если герой сбегает за плату от нейтралов
 // то пропускаем код передачи денег другому игроку
 // при этом вычет денег у сбегающего игрока действует
 if (isRunAwayOfMonstre) {
 c->return_address = 0x478FA1;
 return NO_EXEC_DEFAULT;
 }
 return EXEC_DEFAULT;
 }
 
 
 BOOL APIENTRY DllMain( HMODULE hModule,
 DWORD  ul_reason_for_call,
 LPVOID lpReserved
 )
 {
 static _bool_ plugin_On = 0;
 switch (ul_reason_for_call)
 {
 case DLL_PROCESS_ATTACH:
 if (!plugin_On)
 {
 plugin_On = 1;
 
 _P = GetPatcher();
 _PI = _P->CreateInstance("FixForArmaggame");
 
 // делаем откуп в бою с нейтралами
 _PI->WriteCodePatch(0x477EA9, "%n", 12);
 _PI->WriteLoHook(0x4749B4, Y_RunAwayOfMonstreQ);
 _PI->WriteHexPatch(0x478F77, "8918 BA 2B150000"); // меняем местами 2 инструкции кода, чтобы корректно устновить хук и сохранить код вычета денег при сбегании
 _PI->WriteLoHook(0x478F77+2, Y_RunAwayOfMonstreBG);
 
 }
 break;
 
 case DLL_THREAD_ATTACH:
 case DLL_THREAD_DETACH:
 case DLL_PROCESS_DETACH:
 break;
 }
 return TRUE;
 }
 
 game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
 |  | 
	| 02.11.2020 19:42 |  | 
	
		| igrik   
   Posts: 2821
 
 | 
			| 
 
				 (02.11.2020 19:20)Valery Wrote:  ok, so it means it worked but something strange, after script ghosts aren't still affected by curse, how can I solve that. Curse should work if undead flag is removed, no?
 @Edit: ah ok, they had immunity fire flag also
  
 Solved,thanks
 
Yes)) 1024 Иммунитет к заклинаниям разума (вроде Печали, Бешенства, т.п.) 
 
Code:
 {-1,2,"wrth","ZM159G.def",0x00024402}, // 159 Ghost
 
2, 1024, 16384, 131072 
Но они не нежить!!!!!!!! Они не имеют флага 262144
			 
 game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
 |  | 
	| 02.11.2020 19:49 |  | 
	
		| Valery   
   Posts: 2196
 
 | 
			| 
 
				Strange. Curse is not mind spell, so removing their fire immunity solved the thing. Nasty ghosts
			 |  | 
	| 02.11.2020 20:02 |  |