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

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

Аватар пользователя
11 лет назад

function visit_crypt(hero)
QuestionBox(GetMapDataPath() .. 'visit_crypt.txt', 'crypt_ok', 'crypt_cancel')
end

Trigger(4, 'crypt', 'visit_crypt')

function crypt_ok() -- функция вызывается в случае нажатия игроком кнопки ОК
-- ...
end

function crypt_cancel() -- функция вызывается в случае нажатия игроком кнопки Отмена
-- ...
end


Добавлено через 15 минут
Можно сделать ещё такую функцию, которая будет сразу возвращать сам ответ игрока, а не вызывать другую функцию. По-моему, это несколько удобнее.

function QuestionBoxRef(msg)
question_box_ref_answer = -1
QuestionBox(msg, "question_box_ref_answer=1 --", "question_box_ref_answer=0 --")
while question_box_ref_answer == -1 do
sleep()
end
return question_box_ref_answer == 1
end

-- пример использования

function visit_crypt(hero)
if QuestionBoxRef(GetMapDataPath() .. 'visit_crypt.txt') then
-- игрок согласен
else
-- игрок отказал
end
end

Trigger(4, 'crypt', 'visit_crypt')

Аватар пользователя
11 лет назад
Привет, напишите пожалуйста все задания которые можно задавать обычным путём на скриптах. Ато я чёт не разбираюсь в тех, там не понятно. Или если у кого есть, то дайте мануальчик по заданиям
Аватар пользователя
11 лет назад
Что значит "задания, которые можно задавать обычным путем?
Аватар пользователя
11 лет назад
Ну типо обыкновенние задания, которые можно задавать в редакторе.
Ну и ладно с этим, может подскажешь где найти мануал по заданиям?
Аватар пользователя
11 лет назад
Есть ли функция, позволяющая вернуть отвагу и настроение монстра на карте?
Аватар пользователя
11 лет назад
Нет такой. Ее можно эмулировать для одной отдельно взятой карты, если обработать map.xdb.

Добавлено через 1 минуту
Какова цель? Может быть, найдется и другое решение.
В ответ пользователю RedHeavenHero
Аватар пользователя
11 лет назад
RedHeavenHero
Нет такой. Ее можно эмулировать для одной отдельно взятой карты, если обработать map.xdb.

Добавлено через 1 минуту
Какова цель? Может быть, найдется и другое решение.

Хотел спецу для героя сделать, которая настроение враждебного моба при нападении на него улучшало в сторону присоединения.
Пока сделал просто процент выпадения дружелюбного настроения (без учёта того, что было) - тоже ничего вышло.
11 лет назад
Граждане товарищи господа и дамы, нужна ваша помощь.

Уже не первый год мучаюсь с одним из скриптов на карте, который никак не даёт покоя. Здесь его полный код:
EnableHeroAI('Bersy',nil)
EnableHeroAI('Ingvar', nil)
EnableHeroAI('Vegeyr', nil)
DoNotGiveTurnToPlayerAIIfNoTownsAndActiveHeroes(PLAYER_3,true)


function Mystery_of_mount()
Trigger(OBJECT_TOUCH_TRIGGER, 'Thanes', nil)
MessageBox(dir..'dialog_1.txt')
sleep(5)
SetObjectEnabled('Thanes', true)
sleep(5)
MakeHeroInteractWithObject('Giovanni', 'Thanes')
sleep(3)
if IsObjectExists('Thanes') == not nil then
RemoveObject('Thanes')
sleep(3)
startThread(Thanes_2)
else startThread(Thanes_2)
end;
end;
Trigger(OBJECT_TOUCH_TRIGGER, 'Thanes', 'Mystery_of_mount')

function Thanes_2()
if IsObjectExists('Thanes') == nil then
MessageBox(dir..'dialog_2.txt')
sleep(5)
SetObjectiveState('Thun', OBJECTIVE_COMPLETED)
if GetTownHero('Shagarakti') == 'OrnellaNecro' then
flag = 1;
else TeachHeroSpell('OrnellaNecro',SPELL_TOWN_PORTAL)
SetObjectPosition('OrnellaNecro',28,34,0)
flag = 1;
flag3 = GetDate(DAY)
flag4 = flag3 + 3;
print('flag3')
print('flag4')
flag5 = flag3 + 7;
print('flag3')
print('flag5')
flag6 = flag3 + 14;
print('flag3')
print('flag6')
end;
end;
end;

function Attack_1()
if GetDate(DAY) == flag3 + 3 then
SetObjectPosition('Bersy',28,36,0,4)
SetAIHeroAttractor('Shagarakti','Bersy',2)
AddObjectCreatures('Garrison',40,18 +(flag2*5),7)
AddObjectCreatures('Garrison',42,5 +(flag2*5),6)
EnableHeroAI('Bersy',true)
end;
end;
Trigger(NEW_DAY_TRIGGER,'Attack_1')

function Attack_2()
if GetDate(DAY) == flag3 + 7 then
SetObjectPosition('Vegeyr',28,34,0,4)
SetAIHeroAttractor('Shagarakti','Vegeyr',2)
AddObjectCreatures('Shagarakti',40, 16 + (3*flag2))
AddObjectCreatures('Shagarakti',36, 50 +(10*flag2))
EnableHeroAI('Vegeyr',true)
end;
end;
Trigger(NEW_DAY_TRIGGER,'Attack_2')

function Attack_3()
if GetDate(DAY) == flag3 + 14 then
SetObjectPoistion('Ingvar',28,34,0,4)
SetAIHeroAttractor('Shagarakti','Ingvar',2)
TeachHeroSpell('OrnellaNecro',SPELL_SUMMON_HIVE)
AddObjectCreatures('Shagarakti',36, 30 + (flag2*10))
EnableHeroAI('Ingvar',true)
end;
sleep(1)
end;
Trigger(NEW_DAY_TRIGGER,'Attack_3')

function Attack_finished()
while 1 do
if IsHeroAlive('Ingvar') == nil then
MessageBox(dir..'fu.txt')
end;
sleep(1)
end;
end;
startThread(Attack_finished)

Суть его в чём. Даётся квест на уничтожение группы танов. После его выполнения через определённое количество времени герои, ранее дезактивированные, должны появиться в определённой точке и атаковать город игрока. Этого, однако, не происходит - карта либо зависает, либо продолжает работу в штатном режиме, но герои как не появились, так и не появляются. Версия игры 3.1, что на чистой ничего не работает, что с модами. Вопрос, уважаемые знатоки: где косяк?
Аватар пользователя
11 лет назад
Сразу вижу 2 ошибки:
1. Несколько установлений триггеров и, как следствие, он будет работать только на последнюю функцию. Attack_1(2,3) нужно объединить в одну функцию.
2. Пропущен break в функции Attack_finished, поэтому сообщения о смерти Ингвара будут показываться бесконечно, что может привести к зависанию.
11 лет назад
Благодарю. Исправил, карта ушла обратно в тест, а я - глядеть, смог ли что исправить
Аватар пользователя
11 лет назад
Есть функция StartCombat, которая запускает функцию в конце боя. Эта функция передаёт героя и результат сражения этого героя. Как в передаваемые параметры добавить ещё несколько значений?
В ответ пользователю Dyrman
Аватар пользователя
11 лет назад
Dyrman
Есть функция StartCombat, которая запускает функцию в конце боя. Эта функция передаёт героя и результат сражения этого героя. Как в передаваемые параметры добавить ещё несколько значений?
Можно переопределить саму функцию так, чтобы она сама возвращала результат сражения:
local wrapStartCombat = StartCombat
function StartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
%wrapStartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
local combat_index = GetLastSavedCombatIndex()
while GetLastSavedCombatIndex() == combat_index do
sleep()
end
local result = IsHeroAlive(hero)
return result
end
Тогда можно не передавать управление в другую функцию, а продолжить выполнение текущей.
В ответ пользователю RedHeavenHero
Аватар пользователя
11 лет назад
RedHeavenHero
Можно переопределить саму функцию так, чтобы она сама возвращала результат сражения:
local wrapStartCombat = StartCombat
function StartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
%wrapStartCombat(hero, enemy, stacks, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18)
local combat_index = GetLastSavedCombatIndex()
while GetLastSavedCombatIndex() == combat_index do
sleep()
end
local result = IsHeroAlive(hero)
return result
end
Тогда можно не передавать управление в другую функцию, а продолжить выполнение текущей.
Хитро )) Спасибо. Напомни, плиз, какое преимущество даёт использование % перед переменной?
Аватар пользователя
11 лет назад
% всегда нужно ставить перед внешними локальными переменными.
Аватар пользователя
11 лет назад
Жалко, что пользовательский редактор скриптов ругается на %.

Статистика

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

Сейчас на сайте 4 пользователей 1402 гостей