| 
 
				Да, щиты в коде:  (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 для старых модов
 Поддержать проект
 
 |