Wake of Gods Forum | Форум Во Имя Богов

Full Version: Обсуждение ФЕНИКС-МОДа
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Sav, там чистый ЕРМ, который и в 3.58 работать будет без ошибок. Подскажи адрес процедуры, но я не уверен, что первый удар будет безопасен, если нападающий умрёт сразу.
Сделайте пожалуйста неограниченные ресурсы компу, может как опцию дополнительную
ILYA1980, а у вас какая сейчас версия?
Самая последняя
В начало script99.erm:
Насчёт ответного удара.

Вот (в декомпилированном и чуток разобранном виде) функция, о которой я говорю. Это функция ближней атаки. Несложно заметить, что, если, конечно, не требуется чудес интеллектуальности ИИ, кроме неё править ничего не надо.

Code:
void __thiscall A0_Battle_Stack_Hit_sub_4419D0(struct_BattleStack *this, signed int Enemy_Gex_Around_Stack)
{
  signed int TargetGex_v2; // eax@1
  struct_BattleStack *this_v3; // edi@1
  int Stack_Pos_v4; // ecx@1
  struct_BattleStack *TargetStack_v5; // eax@3
  struct_BattleStack *TargetStack_v6; // esi@3
  signed int CurrStackGex_AroundEnemyStack_v7; // eax@4
  int CurrStackGex_AroundEnemyStack_v8; // ebx@4
  int v9; // ebx@6
  int v10; // edx@6
  int v11; // ST1C_4@6
  char Target_Become_UnabkeToAttack_v12; // al@11
  DWORD WaitingTime_v13; // eax@16
  DWORD WaitingTime_v14; // eax@24
  int v15; // ebx@27
  int TargetStack_Default_Orient_v16; // [sp+8h] [bp-Ch]@4
  int CurrStackGex_AroundEnemyStack_v17; // [sp+Ch] [bp-8h]@4
  int v18; // [sp+1Ch] [bp+8h]@27

  this_v3 = this;
  Stack_Pos_v4 = this->GexNum_dword38;
  this_v3->MappingOrderNum_dword8 = 6;
  TargetGex_v2 = A0_Battle_Stack_Get_AroungGexNum_sub_5242E0(this_v3, Stack_Pos_v4, Enemy_Gex_Around_Stack);
  if ( TargetGex_v2 >= 0 )
  {
    if ( TargetGex_v2 < 187 )
    {
      TargetStack_v5 = A0_Battle_get_StackByGex_sub_4E7230(112 * TargetGex_v2 + A0_BattleMgr_dword_699420 + 452);
      TargetStack_v6 = TargetStack_v5;
      if ( TargetStack_v5 )
      {
        TargetStack_Default_Orient_v16 = TargetStack_v5->Orientation_dword44;
        CurrStackGex_AroundEnemyStack_v7 = sub_4455D0(TargetStack_v5, TargetStack_v5->GexNum_dword38, this_v3);
        CurrStackGex_AroundEnemyStack_v8 = CurrStackGex_AroundEnemyStack_v7;
        CurrStackGex_AroundEnemyStack_v17 = CurrStackGex_AroundEnemyStack_v7;
        if ( CurrStackGex_AroundEnemyStack_v7 < 6 )
        {
          if ( (TargetStack_v6->Orientation_dword44 == 0) != CurrStackGex_AroundEnemyStack_v7 >= 3 )// Поворачиваем изображение целевого стека, если надо
          {
            v9 = *(A0_BattleMgr_dword_699420 + 78520);
            v10 = *(A0_BattleMgr_dword_699420 + 78524);
            *(A0_BattleMgr_dword_699420 + 78520) = TargetStack_v6->Owner_dwordF4;
            v11 = v10;
            *(A0_BattleMgr_dword_699420 + 78524) = TargetStack_v6->StackNum_dwordF8;
            sub_446550(TargetStack_v6, this_v3);
            sub_446440(TargetStack_v6, 1);
            *(A0_BattleMgr_dword_699420 + 78520) = v9;
            CurrStackGex_AroundEnemyStack_v8 = CurrStackGex_AroundEnemyStack_v17;
            *(A0_BattleMgr_dword_699420 + 78524) = v11;
          }
        }
        // *** Атака ***
        if ( TargetStack_v6->Spells_Lengths_adword198[62] )// Слепота
          TargetStack_v6->CurrHit_IsBlinded_byte4C0 = 1;
        if ( TargetStack_v6->Spells_Lengths_adword198[74] )// Паралич
          TargetStack_v6->CurrHit_IsParalysed_byte4C1 = 1;
        Target_Become_UnabkeToAttack_v12 = A0_Battle_Stack_MakeHit_sub_441330(
                                             this_v3,
                                             TargetStack_v6,
                                             Enemy_Gex_Around_Stack);
        this_v3->GexesWay_Length_dword490 = 0;
        // *** Атака - закончили ***
        // *** Ответный удар ***
        if ( TargetStack_v6->Count_dword4C > 0 )
        {
          if ( !((this_v3->Creature_29dword74.Flags_dword10 >> 16) & 1) )// Враг может отвечать на атаку
          {
            if ( !TargetStack_v6->Spells_Lengths_adword198[70] )// Враг не окаменён
            {
              if ( TargetStack_v6->CounterStrikes_Count_dword454 > 0 )// У целевого стека остались ответные удары
              {
                if ( !Target_Become_UnabkeToAttack_v12 )// Целевой стек может атаковать
                {
                  WaitingTime_v13 = A0_to_signed_int_sub_617F94(A0_BattleAnimsFastSetPeriodsMults_flt_63CF7C[*&A0_Setting_BattleFast_dword_69883C] * 150.0);
                  A0_Wait_For_Time_sub_4F8A50(WaitingTime_v13);
                  *(A0_BattleMgr_dword_699420 + 78528) = 1 - *(A0_BattleMgr_dword_699420 + 78528);
                  A0_Battle_Stack_MakeHit_sub_441330(TargetStack_v6, this_v3, CurrStackGex_AroundEnemyStack_v8);
                  *(A0_BattleMgr_dword_699420 + 78528) = 1 - *(A0_BattleMgr_dword_699420 + 78528);
                  --TargetStack_v6->CounterStrikes_Count_dword454;
                }
              }
            }
          }
        }
        TargetStack_v6->CurrHit_IsBlinded_byte4C0 = 0;
        TargetStack_v6->CurrHit_IsParalysed_byte4C1 = 0;
        // *** Ответный удар - закночили ***
        // *** Второй удар ***
        if ( (this_v3->Creature_29dword74.Flags_dword10 >> 15) & 1 )// Текущий стек атакует дважды
        {
          if ( TargetStack_v6->Count_dword4C > 0 )// В целевом стеке есть существа
          {
            if ( !((this_v3->Creature_29dword74.Flags_dword10 >> 2) & 1) )// Текущий стек - не стрелок
            {
              if ( !this_v3->Spells_Lengths_adword198[62] )// Не ослеплён
              {
                if ( !this_v3->Spells_Lengths_adword198[70] )// Не окаменён
                {
                  if ( !this_v3->Spells_Lengths_adword198[74] )// Не парализован
                  {
                    if ( this_v3->Count_dword4C > 0 )// В тееущем стеке остались существа
                    {
                      WaitingTime_v14 = A0_to_signed_int_sub_617F94(A0_BattleAnimsFastSetPeriodsMults_flt_63CF7C[*&A0_Setting_BattleFast_dword_69883C] * 150.0);
                      A0_Wait_For_Time_sub_4F8A50(WaitingTime_v14);
                      A0_Battle_Stack_MakeHit_sub_441330(this_v3, TargetStack_v6, Enemy_Gex_Around_Stack);
                    }
                  }
                }
              }
            }
          }
        }
        // *** Второй удар - закончили ***
        if ( !((TargetStack_v6->Creature_29dword74.Flags_dword10 >> 21) & 1) )// Целевой стек жив
        {
          if ( TargetStack_Default_Orient_v16 != TargetStack_v6->Orientation_dword44 )// Если стек направлен в другую сторону, чем раньше, поворачиваем его изображение обратно
          {
            v15 = *(A0_BattleMgr_dword_699420 + 78520);
            v18 = *(A0_BattleMgr_dword_699420 + 78524);
            *(A0_BattleMgr_dword_699420 + 78520) = TargetStack_v6->Owner_dwordF4;
            *(A0_BattleMgr_dword_699420 + 78524) = TargetStack_v6->StackNum_dwordF8;
            sub_446550(TargetStack_v6, this_v3);
            sub_446440(TargetStack_v6, 1);
            *(A0_BattleMgr_dword_699420 + 78520) = v15;
            *(A0_BattleMgr_dword_699420 + 78524) = v18;
          }
        }
        A0_Battle_Stack_RemoveSpell_sub_444230(this_v3, 59);// Берсерк
        this_v3->Attacked_Enemy_Owner_dword10 = -1;
      }
    }
  }
}
Спасибо.
Quote: В начало script99.erm:

    1. !?TM1;
    2. !!OW:C?y1 Iy1/?y2/?y3;
    3. !!FU|y2=0/y3=1:E;
    4. !!OW:Ry1/0/9999999 Ry1/1/9999999 Ry1/2/9999999 Ry1/3/9999999 Ry1/4/9999999 Ry1/5/9999999 Ry1/6/9999999;

Berserker, спасибо большое, золота у компа стало достаточно. Если не сложно, подскажите еще как увеличить другие ресурсы (кристаллы, серу ит т.д), допустим, до 5000. Просто иногда, на картах, созданных по различным шаблонам, бывает много шахт, например, лазурных драконов и других, а т.к они очень дорогие, комп не всегда их может всех выкупить. (если стоит опция накопления существ).
ILYA1980, так в в этом коде Berserker уже сразу по всем ресурсам сделал бонус Ab
Quote:!!OW:Ry1/0/9999999 Ry1/1/9999999 Ry1/2/9999999 Ry1/3/9999999 Ry1/4/9999999 Ry1/5/9999999 Ry1/6/9999999;

тут и золото =9999999 и остальные ресурсы тоже =9999999 Rolleyes
Когда я загружал игру в режиме ход-сид, у компов только золото
хм, странно
а попробуйте снизить сумму ресурсов для компа на 9999
Code:
!!OW:Ry1/0/9999 Ry1/1/9999 Ry1/2/9999 Ry1/3/9999999 Ry1/4/9999 Ry1/5/9999 Ry1/6/9999999;
Попробовал, тоже самое, видимо гдето прописано количество ресурсов (конечно, я ничего в этом не пониманию, я только играю)
ILYA1980, да, вы правы, есть в одном месте жёсткая установка ресурсов ИИ в скрипте 99

Предлагаю вам код, который вам указал Berserker, добавить в script99.erm не в начало, а в самом конце файла...
Попробовал, при запуске выдается ошибка в скрипте, но игра запускается, ну а ресурсы как были, только золото
а какая ошибка выскочила?
(из WOGERMLOG.TXT скопируйте)
Reference URL's