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

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

В ответ пользователю Лоли Никита
Аватар пользователя
6 лет назад
Подскажите пожалуйста, как сделать скрипт, чтобы при смене дня каждый день менялось освещение, к примеру: понедельник - рассвет, вторник утро, среда день, четверг - закат, пятница полночь.
В ответ пользователю Лоли Никита
Аватар пользователя
6 лет назад
Лоли Никита
Подскажите пожалуйста, как сделать скрипт, чтобы при смене дня каждый день менялось освещение, к примеру: понедельник - рассвет, вторник утро, среда день, четверг - закат, пятница полночь.
Здравствуйте. В MapProperties=>GroundAmbientLights=>ПКМ=>Add. Затем в появившейся строчке нажмите 3 точки и выберите светлую подсветку или нажмите New и создайте свою подсветку, хоть закат, хоть полуночь. Но главное: для каждого нового AmbientLight в параметр InternalName впишите адекватное имя на английском — например, SunRaise. Далее в скрипте
function NewDayCheck()
if GetDate(DAY_OF_WEEK)==1 *(понедельник) then
SetAmbientLight("SunRaise", GROUND, 5);
end;
if GetDate(DAY_OF_WEEK)==2 *(вторник) then
SetAmbientLight("SunMiddle", GROUND, 5);
end;
...
end;

Trigger(NEW_DAY_TRIGGER, "NewDayCheck");
Подробнее об AmbientLight прочитайте в мануале многоуважаемого Jack_of_shadows. Здесь и далее буду ссылаться на его руководство и своё.
ЧаВо от Jack of Shadows, смотрите пункт "Как динамически менять освещение карты?".
Ознакомится с этим пунктом обязательно; всё, что я не упомянул тут ради экономии места и времени (в связи с кое-какой работой я таперича немного занятой), есть в его руководстве.
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
6 лет назад
Как сделать скрипт, чтобы при взаимодействии с объектом начинался бой с определенными противниками( в моем случае 3 пачки по 5 латников), но чтобы количество существ зависило от уровня сложности( например на воине 5 латников, а на герое 7), заранее спасибо тому, кто ответит.
И еще кое-что. Я хотел сделать скрипт StartCombat, для боя с орками, но не нашел идентифекаторы орков и 3 грейда всех существ кроме людей. Где найти и посмотреть эти идентифекаторы?
В ответ пользователю Лоли Никита
Аватар пользователя
6 лет назад
Лоли Никита
Как сделать скрипт, чтобы при взаимодействии с объектом начинался бой с определенными противниками( в моем случае 3 пачки по 5 латников), но чтобы количество существ зависило от уровня сложности( например на воине 5 латников, а на герое 7), заранее спасибо тому, кто ответит.
Для начала присвой скрипиовое имя объекту, щёлкнув по нему на карте и вписав это имя в строчку свойств объекта Name. Допустим, nObject. А MyHeroScriptName — скриптовое имя главного героя, посмотреть его можно, выделив героя и нажав пробел, во вкладке Settings.
Далек в скрипте

diff=GetDifficulty();
--diff == 1 на Рекруте, 2 на воине, 3 на Ветеране, 4 на герое

function MyCombat(heroname, objectname)
if heroname == "MyHeroScriptName" then--Проверка, нужный ли герой тронул объект
StartCombat(heroname, nil, 3, 6, 5+2*diff, 6, 5+2*diff, 6, 5+2*diff, nil, "resultsf"--Функция, запускающаяся после боя, нужна, если после битвы должно быть что-то);
Trigger(OBJECT_TOUCH_TRIGGER, "nObject", nil); --Обнуление функции
end;
end;

Trigger(OBJECT_TOUCH_TRIGGER, "nObject", "MyCombat");

function results(hero, result)
if result == not nil then
--Скрипт, работающий после победы...
else --Скрипт, работающий в случае поражения...
end;
end;
6 — это идентификатор латника, будет 3 стека по 5 плюс по 2 за уровень сложности.
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
6 лет назад
diff=GetDifficulty();
function bitva_1(heroname, objectname)
if heroname == "Raelag" then
StartCombat(heroname, nil, 3, 6, 5+2*diff, 6, 5+2*diff, 6, 5+2*diff, nil);
sleep(5);
RemoveObject('q7');
RemoveObject('q8');
RemoveObject('q9');
end;
end;
Trigger(OBJECT_TOUCH_TRIGGER,'q7','bitva_1');
Trigger(OBJECT_TOUCH_TRIGGER,'q8','bitva_1');
Trigger(OBJECT_TOUCH_TRIGGER,'q9','bitva_1');
Сделал вроде правильно, но латников на герое становится 9, а мне надо 7, как я понял, 5+2*diff - означает 5 латников + количество умноженное на сложность. Если сложность рекрут, то diff=1, и получается на рекруте будет 7 латников, если сложность воин, то diff=2, а там уже 5+2*2=9. Можете пожалуйста объяснить в чем тут ошибка. Заранее спасибо.

Добавлено через 25 минут
Я хотел бы еще кое-что спросить, существует функция OpenCircleFog , она открывает туман войны, и с помощью нее можно открыть часть карты, можно ли с помощью какой-нибудь функции сделать так, чтобы она не открывала, а закрывала туман войны, таким образом не позволяя просматривать герою некоторые места, в которых он уже побывал, и чтоб на миникарте в левом нижнем углу игры тоже не было видно этой части карты?
В ответ пользователю Лоли Никита
Аватар пользователя
6 лет назад
Лоли Никита
diff=GetDifficulty();
function bitva_1(heroname, objectname)
if heroname == "Raelag" then
StartCombat(heroname, nil, 3, 6, 5+2*diff, 6, 5+2*diff, 6, 5+2*diff, nil);
sleep(5);
RemoveObject('q7');
RemoveObject('q8');
RemoveObject('q9');
end;
end;
Trigger(OBJECT_TOUCH_TRIGGER,'q7','bitva_1');
Trigger(OBJECT_TOUCH_TRIGGER,'q8','bitva_1');
Trigger(OBJECT_TOUCH_TRIGGER,'q9','bitva_1');
Сделал вроде правильно, но латников на герое становится 9, а мне надо 7, как я понял, 5+2*diff - означает 5 латников + количество умноженное на сложность. Если сложность рекрут, то diff=1, и получается на рекруте будет 7 латников, если сложность воин, то diff=2, а там уже 5+2*2=9. Можете пожалуйста объяснить в чем тут ошибка. Заранее спасибо.

Добавлено через 25 минут
Я хотел бы еще кое-что спросить, существует функция OpenCircleFog , она открывает туман войны, и с помощью нее можно открыть часть карты, можно ли с помощью какой-нибудь функции сделать так, чтобы она не открывала, а закрывала туман войны, таким образом не позволяя просматривать герою некоторые места, в которых он уже побывал, и чтоб на миникарте в левом нижнем углу игры тоже не было видно этой части карты?
Простите, это я на автомате ошибся. На рекруте diff будет 0, на воине 1, на ветеране 2, на герое 3, поэтому на рекруте будет в каждом стеке 5 латников, на воине — 7, на ветеране 9 и на герое 11. Но использовать простой GetDifficulty при расчётах зачастую неудобно в связи с её нулевым значением на рекруте, поэтому рекомендую поменять
diff = GetDifficulty();
на
diff = GetDifficulty()+1
. Если вам так надо на герое 7, то напишите внутрь функции перед Start Combat
diff= GetDifficulty()+1;
...

...
local amount=0;
local i=1;
for i,4 do
if diff == i then
amount=i;
end;
end;
...
Вроде, вот так правильно, но это не точно...
А в формуле расчёта числа латников поставь 3+amount. Если не сработает (а я написанному гарантии 100% пока дать не могу — работаю с телефона и потому по памяти), тупо в лоб пропиши условия

diff=GetDifficulty()+1;
...

...
local amount=0;
if diff == 1 then
amount=5;
end;
if diff == 2 then
amount=5;
end;
if diff == 3 then
amount=6;
end;
if diff == 4 then
amount=7
end;
А в формулу расчёта числа латников напиши просто amount.
Выбирай любой способ.

Насчёт закрытия тумана, сколько ни работал, ни разу не видел такой, а потому заявляю — такой функции нет. Но я не застразован от ошибок, может, она и есть. Тогда попробуй либо
CloseCircleFog(x, y, floor, radius, PLAYER_ID); 
или спроси в ЛС Jack_of_shadows
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
6 лет назад
Спасибо, вроде все работает. А где найти идентифекаторы орды и 3 грейда всех остальных фракций кроме людей?
В ответ пользователю Лоли Никита
Аватар пользователя
6 лет назад
Лоли Никита
Спасибо, вроде все работает. А где найти идентифекаторы орды и 3 грейда всех остальных фракций кроме людей?
.../Папка с игрой/data/data.pak => в этом архиве ищи файл types.xml, он вне других папок, прямо в data.pak лежит. Открой блокнотом, когда загпузится, нажми Ctrl + F и ищи DRUID, пока не дойдёшь до строчек с именем существа и его ID, а потом колёсиком мотай вниз.
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
6 лет назад
Можно как-то через скрипты манипулировать неделями? Начать выставлять определённые недели в определённый момент и чтоб пошёл обычный рандом недель после выполнения определённых условий
Аватар пользователя
6 лет назад
Подскажите пожалуйста, что не так в скрипте. Если входишь в определенный регион, то он обнуляется, выходит сообщение.После нажатия кнопки 'ОК', начинаетя битва против гномов, 6 объектов исчезают с карты, выходит 1 сообщение, мне дают лазутчиков в количестве 15, диалог появляется, я нажимаю на 1 из ответов, и ни один из них не работает, квест также не появляется в активных. С функцией сообщения с несколькими ответами работаю впервые.

----Битва с гномами(Начальная локация)-----
function MessageBox3()
Trigger(REGION_ENTER_AND_STOP_TRIGGER, 'reg8',nil)
MessageBox("/Maps/SingleMissions/richman2/message_3.txt","OK_1");
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER, 'reg8','MessageBox3')

function OK_1()
sleep (1);
StartCombat("Raelag", nil, 4, 100, 3, 167, 15, 167, 15, 167, 15, nil);
sleep(5);
RemoveObject('q1');
RemoveObject('q2');
RemoveObject('q3');
RemoveObject('q4');
RemoveObject('q5');
RemoveObject('q6');
AddHeroCreatures("Raelag", 71, 15);
MessageBox("/Maps/SingleMissions/richman2/message_4.txt");
TalkBoxForPlayers(PLAYER_1,nil, nil,'/Maps/SingleMissions/richman2/dialog_1.txt',nil, 0,1,'/Maps/SingleMissions/richman2/zag1.txt', nil,0,'/Maps/SingleMissions/richman2/otvet1.txt','/Maps/SingleMissions/richman2/otvet2.txt','/Maps/SingleMissions/richman2/otvet3.txt','/Maps/SingleMissions/richman2/otvet4.txt')
end;

function MyTalkBoxCallback(player, answer)
if (answer < 1) then
return
end
if (answer == 1) then
MessageBox("/Maps/SingleMissions/richman2/message_5.txt");
elseif (answer == 2) then
MessageBox("/Maps/SingleMissions/richman2/message_5.txt");
elseif (answer == 3) then
MessageBox("/Maps/SingleMissions/richman2/message_6.txt");
elseif (answer == 4) then
MessageBox("/Maps/SingleMissions/richman2/message_7.txt");
StartCombat("Raelag", nil, 2, 121, 5, 121, 5, nil);
end
end;
GetObjectiveState('kv_1',OBJECTIVE_ACTIVE);
Аватар пользователя
6 лет назад
Можно как-то через скрипты манипулировать неделями?
Нет такой возможности.
диалог появляется, я нажимаю на 1 из ответов, и ни один из них не работает
В вашем вызове TalkBoxForPlayers не указано, какая функция должна вызываться при выборе ответа. Проверьте список параметров. В своём мануале я предлагал хак, как сократить количество настраиваемых параметров для неё до минимально возможного.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо
Аватар пользователя
6 лет назад
Я понял, что чего-то не понимаю в работе IsObjectExists.
function P0_check()
while 1 do
if IsObjectExists('T1')==false then
if IsObjectExists('T2')==false then
if IsObjectExists('T3')==false then
if IsObjectExists('T4')==false then
sleep(5)
if (not GetObjectiveState('P0')==OBJECTIVE_COMPLETED) then
startThread( P0_change_state );
break;
end;
end;
end;
end;
end;
sleep(1);
end;
end;
Все четыре города (T1, T2, T3, T4) на карте присутствуют.
Тред радостно проходится по всем if'ам и запускает новую функцию, хотя и не должен. Как так?
 

К А
Стикеры GBF в Telegram
Аватар пользователя
6 лет назад
консоль не ругается, что значение false не определено? попробуй использовать обычный nil вместо него
Нет войне.
Аватар пользователя
6 лет назад
Не ругалась, да и с конструкцией not IsObjectExists('T1') та же ерунда.
Но попробую, спасибо.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
6 лет назад
вообще, запись, которая по дефолту есть в advmap-startup(false = nil), как раз вызывает предупреждение, что значение false неопределено. Логично предположить, что у тебя где-то есть переопределение false. Хотя если с not IsObjectExists('T1') тот же результат, то дело явно не в этом(при попытке воспроизвести подобную ситуацию у себя я получаю адекватный результат, т.е. существование корректно определяется)
Нет войне.

Статистика

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

Сейчас на сайте 9 пользователей 1261 гостей