Вот это мой боевой скрипт. Он состоит из двух половин(обозначил). Первая - если герой обороняется и если герой атакует. Я хочу исправить в нем 3 ошибки:
1)как заставить игрока-человека проигрывать в бою стандартно. То есть, в начале проигрыш\победа отключены и включаются, когда будут вызваны все дополнительные отряды. Как заставить игрока-человека проигрывать без учета переменных dwarf или atdwarf, если все его отряды погибнут?
2)в атакующем скрипте герой сначала кастует общее ускорение. Второе заклинание на следующем ходу он уже не применяет, почему то. При этом ошибки в консоли нет. Защитный скрипт все заклинания применяет как надо.
3)обратил внимание, что скрипт дает ошибку, если герой не может применить заклинание (все существа иммунны к заклинанию). Как это исправить? То есть, чтобы он не колдовал, если наложить не на кого?
diff = GetDifficulty() + 1
dwarf = 0
dwarfspell = 0
atdwarf = 0
atdwarfspell = 0
SetUnitManaPoints(GetDefenderHero(), GetUnitMaxManaPoints(GetDefenderHero()))
SetUnitManaPoints(GetAttackerHero(), GetUnitMaxManaPoints(GetAttackerHero()))
EnableDynamicBattleMode(nil)
EnableAutoFinish(nil)
--начало защитного скрипта
function DefenderHeroMove(hero)
if IsHuman(DEFENDER) == nil then
if dwarfspell == 0 then
dwarfspell = 1
commandDoSpell(GetDefenderHero(),235,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
dwarfspell = 2
elseif dwarfspell == 2 then
dwarfspell = 3
commandDoSpell(GetDefenderHero(),43,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
dwarfspell = 4
elseif dwarfspell == 4 then
dwarfspell = 5
commandDoSpell(GetDefenderHero(), 221,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
dwarfspell = 6
elseif dwarfspell == 6 then
dwarfspell = 7
commandDoSpell(GetDefenderHero(),216,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
dwarfspell = 8
elseif dwarfspell == 8 then
dwarfspell = 9
commandDoSpell(GetDefenderHero(),212,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
dwarfspell = 10
elseif dwarfspell > 9 and dwarfspell < 16 then
dwarfspell = dwarfspell + 1
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
dwarfspell = dwarfspell + 1
elseif dwarfspell == 16 then
dwarfspell = 17
commandDoSpell(GetDefenderHero(),210,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
dwarfspell = 0
end
end
end
sleep(4)
function DefenderCreatureDeath(hero)
if IsHuman(DEFENDER) == nil then
if dwarf == 0 then
dwarf = 1
playAnimation(GetDefenderHero(), "cast", ONESHOT)
combatSetPause(1)
sleep(60)
SummonCreature(DEFENDER, CREATURE_DEFENDER, 900 * diff, 15, -1)
sleep(70)
dwarf = 2
combatSetPause(nil)
elseif dwarf == 2 then
dwarf = 3
playAnimation(GetDefenderHero(), "cast", ONESHOT)
combatSetPause(1)
sleep(60)
SummonCreature(DEFENDER, CREATURE_WARLORD, 45 * diff, 15, -1)
sleep(70)
dwarf = 4
combatSetPause(nil)
elseif dwarf == 4 then
dwarf = 5
playAnimation(GetDefenderHero(), "cast", ONESHOT)
combatSetPause(1)
sleep(60)
SummonCreature(DEFENDER, CREATURE_MAGMA_DRAGON, 20 * diff, 15, -1)
sleep(70)
dwarf = 6
combatSetPause(nil)
end
end
end
function finish()
while 1 do
local att, def = GetAttackerCreatures(), GetDefenderCreatures()
if length(att) == 0 or length(def) == 0 then
if dwarf == 6 then
EnableAutoFinish(1)
break
end
end
sleep(20)
end
end
--начало атакующего скрипта
function AttackerHeroMove(hero)
if IsHuman(ATTACKER) == nil then
if atdwarfspell == 0 then
atdwarfspell = 1
commandDoSpell(GetAttackerHero(),221,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
atdwarfspell = 2
elseif dwarfspell == 2 then
atdwarfspell = 3
commandDoSpell(GetAttackerHero(),216,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
atdwarfspell = 4
elseif dwarfspell == 4 then
atdwarfspell = 5
commandDoSpell(GetAttackerHero(),235,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
atdwarfspell = 6
elseif dwarfspell == 6 then
atdwarfspell = 7
commandDoSpell(GetAttackerHero(),212,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
atdwarfspell = 8
elseif dwarfspell == 8 then
atdwarfspell = 9
commandDoSpell(GetAttackerHero(),43,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
atdwarfspell = 10
elseif dwarfspell > 9 and dwarfspell < 16 then
atdwarfspell = dwarfspell + 1
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
atdwarfspell = dwarfspell + 1
elseif dwarfspell == 16 then
atdwarfspell = 17
commandDoSpell(GetAttackerHero(),210,-1)
SetUnitManaPoints(hero, GetUnitManaPoints(hero) + 4 * diff )
atdwarfspell = 0
end
end
end
sleep(4)
function AttackerCreatureDeath()
if IsHuman(ATTACKER) == nil then
if atdwarf == 0 then
atdwarf = 1
playAnimation(GetAttackerHero(), "cast", ONESHOT)
combatSetPause(1)
sleep(60)
SummonCreature(ATTACKER, CREATURE_FLAME_KEEPER, 65 * diff, 15, -1)
sleep(60)
SummonCreature(ATTACKER, CREATURE_STOUT_DEFENDER, 600 * diff, 15, -1)
sleep(70)
atdwarf = 2
combatSetPause(nil)
end
end
end
function atfinish()
while 1 do
local att, def = GetAttackerCreatures(), GetDefenderCreatures()
if length(att) == 0 or length(def) == 0 then
if atdwarf == 2 then
EnableAutoFinish(1)
atdwarf = 0
break
end
end
sleep(20)
end
end
startThread(finish)
startThread(atfinish)