Да, щиты в коде: 
 (09.07.2021 01:11)Berserker Wrote:  Щиты снайперов и иже с ним прочие wog-способности 
 
Code: 
 static void _SetUpBeforeBattle2(void) 
{ 
  #include "templ.h" 
  int       i,j,tp; 
  Byte     *bm=(Byte *)SUBB_BatMan; 
  Byte     *mon; 
//  _Hero_   *hp1=(_Hero_ *)*(Dword *)&bm[0x53CC]; 
//  _Hero_   *hp2=(_Hero_ *)*(Dword *)&bm[0x53D0]; 
  NMT_First=0; // Сброс для Санта Гремлина и других, кто иниц. после тактики 
///////////  PlaceNPCAtBattleStart(bm); 
//  CrExpBon::PrepareBFExpStructure(bm); 
//  if(bm[0x13D68]==0){  // NO tactic phase 
    *(int *)&((Byte *)bm)[0x13D6C]=0; // clear the turn index 
//  } 
  for(i=0;i<(21*2);i++){ 
    mon=&bm[0x54CC+0x548*i]; 
    *(int *)&mon[0x288]=0; // not being hypnotized 
    *(int *)&mon[0xF4] =i/21; // initial side 
    // 3.58 Tower skip 
    if(i==20) continue; // 3.58 
    if(i==41) continue; // 3.58 
    mon=&bm[0x54CC+0x548*i]; 
//    AdjustStackParams(/*bm,*/mon,0); // 3.58 Creature experience 
    CrExpBon::Apply(mon); 
    tp=*(int *)&mon[0x34]; 
    if((tp>=174)&&(tp<=191)){ 
       AddMagic2NPC(mon,bm); 
    } 
    if(tp==152){ // титан 
      SetMonMagic(mon,28,1000,3,0); // воздушный щит 
    } 
    if(tp==156){ // чудище 
      *(int *)&mon[0x454]=2; 
    } 
    if(tp==158){ // феникс 
      SetMonMagic(mon,0x1D,1000,1,0); // огненный щит 
      SetMonMagic(mon,55,1000,3,0); // палач 
    } 
    if(tp==195){ // Hell Steed (fire horse) 
      SetMonMagic(mon,0x1D,1000,1,0); // огненный щит 
    } 
    if((tp>=GODMONTSTRT)&&(tp<(GODMONTSTRT+GODMONTNUM))){ // бог 
      *(int *)&mon[0x454]=0; // не отвечает на атаку 
    } 
    if(tp==164){ // огненный голем 
      SetMonMagic(mon,31,1000,3,0); // защита от огня 
    } 
    if(tp==165){ // огненный голем 
      SetMonMagic(mon,33,1000,3,0); // защита от земли 
    } 
    if(tp==166){ // огненный голем 
      SetMonMagic(mon,30,1000,3,0); // защита от воздуха 
    } 
    if(tp==167){ // огненный голем 
      SetMonMagic(mon,32,1000,3,0); // защита от воды 
    } 
    if(tp==169){ // белый монах 
      SetMonMagic(mon,36,1000,3,0); // волшебное зеркало 
    } 
    if(tp==170){ // белый шутер 
      SetMonMagic(mon,28,1000,3,0); // воздушный щит 
    } 
    if(tp==171){ // красный шутер 
      SetMonMagic(mon,0x1D,1000,1,0); // огненный щит 
    } 
    if(tp==192){ // Centaur-Elf 
      SetMonMagic(mon,49,1000,3,0); // Mirth 
    } 
    for(j=0;j<100;j++){ 
      if(MonsterOfWeek[j]==-1) break; 
      if(tp==MonsterOfWeek[j]){ // монстр недели 
        SetMonMagic(mon,48,1000,3,0); // воздушный щит 
      } 
    } 
    CrExpBon::ApplySpell(mon,bm); 
//    CrExpBon::ApplyMassSpell(mon); 
    if(tp==0x95){        // башня 
      _CastleSetup_ *cp; 
      cp=(_CastleSetup_ *)*(Dword *)&bm[0x53C8]; 
      if(IsCastleSetup(cp)==1){ // замок 
        SetTowerBunus(cp,mon); 
/* 
        int side=*(int *)&mon[0xF4]; // сторона 
        _Hero_   *htmp; 
        _Hero_   *hpo=(_Hero_ *)*(Dword *)&bm[0x53CC]; 
        _Hero_   *hpe=(_Hero_ *)*(Dword *)&bm[0x53D0]; 
        if(side!=0){ htmp=hpo; hpo=hpe; hpe=htmp; } 
        if((hpo!=0)&&(HeroHasArt(hpo,0x8E))){ // свой 
//          *(int *)&mon[0x4C]=99; 
        } 
*/ 
      } 
    }
  
Code: 
 static void  _SetUpNewRound(void) 
{ 
  #include "templ.h" 
  int j; 
  Byte *sgp,*bmp=(Byte *)SUNR_BatMan; 
  Byte *mon=(Byte *)SUNR_Mon; 
  int   tp=*(int *)&mon[0x34]; 
//  Byte     *bm=(Byte *)SUNR_BatMan; 
//  _Hero_   *hp1=(_Hero_ *)*(Dword *)&bm[0x53CC]; 
//  _Hero_   *hp2=(_Hero_ *)*(Dword *)&bm[0x53D0]; 
  if((tp>=174)&&(tp<=191)){ 
     AddMagic2NPC(mon,bmp); 
  } 
  CrExpBon::Apply2(mon); 
  if(tp==152){ // титан 
    SetMonMagic(mon,28,1000,3,0); // воздушный щит 
  } 
  if(tp==156){ // чудище 
    *(int *)&mon[0x454]=2; // отвечает дважды 
  } 
  if(tp==158){ // феникс 
    SetMonMagic(mon,0x1D,1000,1,0); // огненный щит 
    SetMonMagic(mon,55,1000,3,0); // палач 
  } 
  if(tp==195){ // Hell Steed (fire horse) 
    SetMonMagic(mon,0x1D,1000,1,0); // огненный щит 
  } 
  for(j=0;j<100;j++){ 
    if(MonsterOfWeek[j]==-1) break; 
    if(tp==MonsterOfWeek[j]){ // монстр недели 
      SetMonMagic(mon,48,1000,3,0); // воздушный щит 
    } 
  } 
  if((tp>=GODMONTSTRT)&&(tp<(GODMONTSTRT+GODMONTNUM))){ // бог 
    *(int *)&mon[0x454]=0; // не отвечает на атаку 
  } 
  if(tp==164){ // огненный голем 
    SetMonMagic(mon,31,1000,3,0); // защита от огня 
  } 
  if(tp==165){ // огненный голем 
    SetMonMagic(mon,33,1000,3,0); // защита от земли 
  } 
  if(tp==166){ // огненный голем 
    SetMonMagic(mon,30,1000,3,0); // защита от воздуха 
  } 
  if(tp==167){ // огненный голем 
    SetMonMagic(mon,32,1000,3,0); // защита от воды 
  } 
  if(tp==169){ // белый монах 
    SetMonMagic(mon,36,1000,3,0); // волшебное зеркало 
  } 
  if(tp==170){ // белый шутер 
    SetMonMagic(mon,28,1000,3,0); // воздушный щит 
  } 
  if(tp==171){ // красный шутер 
    SetMonMagic(mon,0x1D,1000,1,0); // огненный щит 
  } 
  if(tp==192){ // Centaur-Elf 
    SetMonMagic(mon,49,1000,3,0); // Mirth 
  } 
  CrExpBon::ApplySpell(mon,bmp); 
  for(j=0;j<SG_GuardsSet;j++){ 
   if(SG_GuardsSetUp[j].own_stack!=-1){ 
     sgp=&bmp[0x54CC+0x548*SG_GuardsSetUp[j].sg_stack]; 
     if((*(int *)&sgp[0x4C])<=0){ 
       sgp=&bmp[0x54CC+0x548*SG_GuardsSetUp[j].own_stack]; 
       *(int *)&sgp[0xC4]=SG_GuardsSetUp[j].own_speed; 
     } 
   } 
 }
  
 
Тут нужно определяться, кого конкретно хотим отключить. И делать это патчем. По-хорошему вынести бы эти способности в скрипт.
			  
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |