Перейти к содержанию

Сообщения от Скрипты

Аватар пользователя
8 лет назад
орлан-1, я тоже никогда не встречал решений этой проблемы. Помнится, когда редактор карт ещё только вышел, вполне можно было в нём работать, если и вылетало, то только изредка. А потом в какой-то момент, с переходом на другую операционку, другое железо, начались стабильные вылеты.
Аватар пользователя
8 лет назад
Вы были правы. Скрипт прекрасно запускается сначала в каждом бою. Ума не приложу, с чего я взял, что это не так...

Добавлено через 41 секунду
Единственное, это то, что его нужно заново накладывать, когда герой умирает.
В ответ пользователю AstralLein
8 лет назад
А каким должно быть разрешение картинки что бы герою другую аватарку сделать?

Добавлено через 34 минуты
И ещё вопрос-как сделать нейтрального героя? В кампании Империя единорога было такое в 4 миссии
В ответ пользователю Годрикова впадина
Аватар пользователя
8 лет назад
И ещё вопрос-как сделать нейтрального героя? В кампании Империя единорога было такое в 4 миссии
SetObjectOwner('имя героя', номер игрока, которого нет на карте);
Т.е., если у вас на карте 2 игрока, то вы ставите героя в редакторе а потом пишете строчку выше и вместо "номер игрока, которого нет на карте" пишете PLAYER_3.
Аватар пользователя
8 лет назад
Вот это мой боевой скрипт. Он состоит из двух половин(обозначил). Первая - если герой обороняется и если герой атакует. Я хочу исправить в нем 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)
В ответ пользователю AstralLein
8 лет назад
Помогите, я хочу сделать скрипт что бы запускался бой ты выигрываешь первую армию героя, потом он тебе говорит и появляется другая не призванная армия.
Аватар пользователя
8 лет назад
1)как заставить игрока-человека проигрывать в бою стандартно. То есть, в начале проигрыш\победа отключены и включаются, когда будут вызваны все дополнительные отряды. Как заставить игрока-человека проигрывать без учета переменных dwarf или atdwarf, если все его отряды погибнут?
2)в атакующем скрипте герой сначала кастует общее ускорение. Второе заклинание на следующем ходу он уже не применяет, почему то. При этом ошибки в консоли нет. Защитный скрипт все заклинания применяет как надо.
3)обратил внимание, что скрипт дает ошибку, если герой не может применить заклинание (все существа иммунны к заклинанию). Как это исправить? То есть, чтобы он не колдовал, если наложить не на кого?
1) Вместо EnableAutoFinish(1) поставить Finish(победившая_сторона), если численность отрядов игрока-человека будет 0.
2) Какие заклинания он колдует в защитной и атакующей части? Видно, что разные, но какие именно? М.б. проблема в неприменимости заклинания.
3) Разве при возникновении ошибки он и так не будет колдовать заклинание? Что вы хотите, чтобы происходило в итоге?
Аватар пользователя
8 лет назад
1. А как это будет выглядеть?
2. По порядку заклинания:
Атака
1)общее ускорение
2)общее благословение
3)вызов феникса
4)общее замедление
5)вызов элементалей
6)перерыв, ничего не колдует, в течении нескольких ходов
7)общее проклятие
8)начинает сначала
Защита
1)вызов феникса
2)вызов элементалей
3)общее ускорение
4)общее благословение
5)общее замедление
6)перерыв в несколько ходов
7)общее проклятие
8)сначала
3. Ну, в принципе, ИИ перестает применять заклинания, застревает на этом месте. Но в общем то шансы на то, что у игрока одни элементали в армии будут невелики.

Добавлено через 22 минуты
Сейчас еще потестил заклинания. При обороне все идеально, при атаке опять ничего. А заклинание точно такое же. При обороне запросто кастует общее благословение.

Добавлено через 2 часа 25 минут
По пункту 2. Я выявил и исправил ошибку. Там по неверной переменной шла проверка условий.
В ответ пользователю AstralLein
8 лет назад
А как оставить на карте только 4 игрока просто хочу сделать нейтральных героев, а там надо убрать других игроков
Аватар пользователя
8 лет назад
Их не нужно убирать. Если на карте нет ничего, принадлежащего этим игрокам, их нет.
В ответ пользователю AstralLein
Аватар пользователя
8 лет назад
AstralLein
1. А как это будет выглядеть?
3. Ну, в принципе, ИИ перестает применять заклинания, застревает на этом месте. Но в общем то шансы на то, что у игрока одни элементали в армии будут невелики.
1. Примерно так:
function finish()
local human = IsHuman(ATTACKER) and ATTACKER or DEFENDER
local computer = 1 - human
while 1 do
local hum = GetCreatures(human)
local comp = GetCreatures(computer)
if length(hum) == 0 then
Finish(computer)
break
end
if length(computer) == 0 and (atdwarf == 6 or dwarf == 2) then
Finish(human)
break
end
sleep(20)
end
end

startThread(finish)
3. Можете вызывать функции сотворения заклинаний не напрямую, а через startThread, тогда при возникновении ошибки скрипт не упадет, а продолжит выполняться.
startThread(commandDoSpell, hero, spell, ...)
Аватар пользователя
8 лет назад
Переписал вместо тех двух финишей, которые были изначально. Теперь происходит странное. Когда нападаешь на Хагнара, сражение сразу же заканчивается из-за того, что с обоих сторон исчезают существа...
В ответ пользователю AstralLein
Аватар пользователя
8 лет назад
AstralLein
Переписал вместо тех двух финишей, которые были изначально. Теперь происходит странное. Когда нападаешь на Хагнара, сражение сразу же заканчивается из-за того, что с обоих сторон исчезают существа...
Тогда поместите startThread(finish) в функцию Start.
Аватар пользователя
8 лет назад
То есть? Создать такую функцию и добавить туда это?

Статистика

Приветствуем новейшего участника: recijeb