Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 01.11.2020 02:01 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 01.11.2020 02:40 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 01.11.2020 03:21 | 
	
		
	 | 
	
		
		SergOz 
 
 
		
		
		
			
			
			
 
 
			
Posts: 1361 
	
		
	 | 
	
		
			
			 
			
				Возможно ли сделать так, чтобы в бою с нейтралами можно было откупиться и сохранить армию? 
Если да, то подскажите, плиз, как это сделать.
			 
			
			
  
Карта-мод "Война на Холсте"
			
		 |  
	 
 | 
	| 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 | 
	
		
	 |