Berserker
Posts: 16657
|
|
17.03.2012 15:08 |
|
ILYA1980
Posts: 114
|
Сделайте пожалуйста неограниченные ресурсы компу, может как опцию дополнительную
|
|
17.03.2012 15:22 |
|
Berserker
Posts: 16657
|
|
17.03.2012 15:31 |
|
ILYA1980
Posts: 114
|
|
17.03.2012 15:33 |
|
Berserker
Posts: 16657
|
|
17.03.2012 16:33 |
|
Sav
Posts: 2180
|
Насчёт ответного удара.
Вот (в декомпилированном и чуток разобранном виде) функция, о которой я говорю. Это функция ближней атаки. Несложно заметить, что, если, конечно, не требуется чудес интеллектуальности ИИ, кроме неё править ничего не надо.
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;
}
}
}
}
(This post was last modified: 17.03.2012 21:35 by Sav.)
|
|
17.03.2012 21:34 |
|
ILYA1980
Posts: 114
|
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. Просто иногда, на картах, созданных по различным шаблонам, бывает много шахт, например, лазурных драконов и других, а т.к они очень дорогие, комп не всегда их может всех выкупить. (если стоит опция накопления существ).
|
|
18.03.2012 11:36 |
|
ILYA1980
Posts: 114
|
Когда я загружал игру в режиме ход-сид, у компов только золото
|
|
18.03.2012 11:57 |
|
Bes
Posts: 5422
|
хм, странно
а попробуйте снизить сумму ресурсов для компа на 9999
Code:
!!OW:Ry1/0/9999 Ry1/1/9999 Ry1/2/9999 Ry1/3/9999999 Ry1/4/9999 Ry1/5/9999 Ry1/6/9999999;
|
|
18.03.2012 12:24 |
|
ILYA1980
Posts: 114
|
Попробовал, тоже самое, видимо гдето прописано количество ресурсов (конечно, я ничего в этом не пониманию, я только играю)
|
|
18.03.2012 12:38 |
|
Bes
Posts: 5422
|
ILYA1980, да, вы правы, есть в одном месте жёсткая установка ресурсов ИИ в скрипте 99
Предлагаю вам код, который вам указал Berserker, добавить в script99.erm не в начало, а в самом конце файла...
|
|
18.03.2012 14:31 |
|
ILYA1980
Posts: 114
|
Попробовал, при запуске выдается ошибка в скрипте, но игра запускается, ну а ресурсы как были, только золото
|
|
18.03.2012 15:02 |
|
Bes
Posts: 5422
|
а какая ошибка выскочила?
(из WOGERMLOG.TXT скопируйте)
|
|
18.03.2012 15:19 |
|