Скрипты - Страница 234 - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Картостроительство (Редактор карт) В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.

Ответ
Страница 234 из 237
 
Опции темы
#3496
Старый 26.08.2021, 16:22
  #3496
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1313
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1313
Выставка наград
По умолчанию
Re: Скрипты

while 1 do
  pfonix = GetHeroCreatures( "Main_Hero", CREATURE_PHOENIX);
  if pfonix >= 5 then
    SetObjectiveState("dzad3", OBJECTIVE_COMPLETED);
    SetObjectiveState("dzad2", OBJECTIVE_FAILED);
    break;
  end;
  sleep(1)
end

Не хватает sleep-а в последнем цикле, поэтому при невыполнении условия pfonix >= 5 (по-английски правильно пишется phoenix, а не пфоникс) после первой итерации игра вылетает. Как-то так.

__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3497
Старый 26.08.2021, 16:27
  #3497
^
Andrei_21
 
Аватар для Andrei_21
📖
Регистрация: 14.03.2021
Сообщения: 103
Регистрация: 14.03.2021
Сообщения: 103
По умолчанию
Re: Скрипты

}{0TT@6bI4
while 1 do
  pfonix = GetHeroCreatures( "Main_Hero", CREATURE_PHOENIX);
  if pfonix >= 5 then
    SetObjectiveState("dzad3", OBJECTIVE_COMPLETED);
    SetObjectiveState("dzad2", OBJECTIVE_FAILED);
    break;
  end;
  sleep(1)
end

Не хватает sleep-а в последнем цикле, поэтому при невыполнении условия pfonix >= 5 (по-английски правильно пишется phoenix, а не пфоникс) после первой итерации игра вылетает. Как-то так.


Теперь всё понятно. Большое вам спасибо! 
Andrei_21 вне форума
Ответить с цитированием
#3498
Старый 28.08.2021, 20:57
  #3498
^
Alinksolo
 
Аватар для Alinksolo
📖
Регистрация: 02.08.2021
Сообщения: 40
Регистрация: 02.08.2021
Сообщения: 40
По умолчанию
Re: Скрипты

Какой нужен скрипт чтобы в зданиях где нанимают существ, можно было нанять существ один раз за всю игру?
Alinksolo вне форума
Ответить с цитированием
#3499
Старый 28.08.2021, 22:28
  #3499
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1313
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1313
Выставка наград
По умолчанию
Re: Скрипты

В функции нового дня:
if GetDate(DAY_OF_WEEK)==0 then
SetObjectDwellingCreatures("Имя города", id-существа, 0)
end

Если таких существ несколько, то составьте массив айди:
if GetDate(DAY_OF_WEEK)==0 then
local id_table = {id1, id2, id3, ....}
for key, id in id_table do
SetObjectDwellingCreatures("Имя города", id, 0)
end
end
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3500
Старый 29.08.2021, 10:41
  #3500
^
Alinksolo
 
Аватар для Alinksolo
📖
Регистрация: 02.08.2021
Сообщения: 40
Регистрация: 02.08.2021
Сообщения: 40
По умолчанию
Re: Скрипты

Какой скрипт нужен чтобы после диалога выдавалось несколько заданий?
Alinksolo вне форума
Ответить с цитированием
#3501
Старый 29.08.2021, 11:21
  #3501
^
Григорий Ковалев
 
Аватар для Григорий Ковалев
📖
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
По умолчанию
Re: Скрипты

Кстати, а как все-таки работает скрипт sleep?Вообще понять не могу
Григорий Ковалев сейчас на форуме
Ответить с цитированием
#3502
Старый 29.08.2021, 11:37
  #3502
^
Andrei_21
 
Аватар для Andrei_21
📖
Регистрация: 14.03.2021
Сообщения: 103
Регистрация: 14.03.2021
Сообщения: 103
По умолчанию
Re: Скрипты

Григорий КовалевКстати, а как все-таки работает скрипт sleep?Вообще понять не могу

Григорий, это задержка между скриптами работает примерно так:
 Ваш код
 sleep(1) - в скобках указываем время задержки. При этом нужно помнить, что sleep(1) равен 200мс.
Ваш код 

Очень удобна функция, если сначала нужно, допустим, проиграть красивый эффект, а по его завершении разрушить какой-либо объект.
Andrei_21 вне форума
Ответить с цитированием
#3503
Старый 29.08.2021, 12:05
  #3503
^
Григорий Ковалев
 
Аватар для Григорий Ковалев
📖
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
По умолчанию
Re: Скрипты

То есть если я правильно понял, sleep дает задержку между скриптами? Если это так, бегу пробовать.
Григорий Ковалев сейчас на форуме
Ответить с цитированием
#3504
Старый 29.08.2021, 13:38
  #3504
^
Andrei_21
 
Аватар для Andrei_21
📖
Регистрация: 14.03.2021
Сообщения: 103
Регистрация: 14.03.2021
Сообщения: 103
По умолчанию
Re: Скрипты

Пробуйте, Григорий. Знание, где поставить sleep одно из важнейших понятий в lua.
Andrei_21 вне форума
Ответить с цитированием
#3505
Старый 29.08.2021, 16:08
  #3505
^
User01322342
 
Аватар для User01322342
📖
Регистрация: 03.01.2017
Сообщения: 104
Регистрация: 03.01.2017
Сообщения: 104
По умолчанию
Re: Скрипты

AlinksoloКакой скрипт нужен чтобы после диалога выдавалось несколько заданий?
Задание выдаётся этой командой SetObjectiveState('имя_задания', state, playerID = PLAYER_1); Можете несколько раз прописать эту команду для выдачи разных заданий
User01322342 вне форума
Ответить с цитированием
#3506
Старый 29.08.2021, 16:30
  #3506
^
Григорий Ковалев
 
Аватар для Григорий Ковалев
📖
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
По умолчанию
Re: Скрипты

User01322342Задание выдаётся этой командой SetObjectiveState('имя_задания', state, playerID = PLAYER_1); Можете несколько раз прописать эту команду для выдачи разных заданий
Если оно выставлено как управляемое в ручную.
Григорий Ковалев сейчас на форуме
Ответить с цитированием
#3507
Старый 30.08.2021, 08:25
  #3507
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 29
Регистрация: 31.01.2020
Сообщения: 29
По умолчанию
Re: Скрипты

Хелп, люди добрые.
Никто случайно не знает, как написать отдельный скрипт на ворота гарнизона?
Что-то мне ни разу такое не попадалось, а между тем, в этой модели есть вкладка Script.
Ведь это, наверное, не function, а надо писать просто, без всяких предисловий?
Я хочу, чтобы в ворота мог проехать только владелец такого-то замка, и сякого-то замка, то есть, два условия.
Как это пишется?
Марта вне форума
Ответить с цитированием
#3508
Старый 30.08.2021, 09:34
  #3508
^
Григорий Ковалев
 
Аватар для Григорий Ковалев
📖
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
Регистрация: 16.08.2021
Адрес: Крестьянские хижины
Сообщения: 33
По умолчанию
Re: Скрипты

МартаХелп, люди добрые.
Никто случайно не знает, как написать отдельный скрипт на ворота гарнизона?
Что-то мне ни разу такое не попадалось, а между тем, в этой модели есть вкладка Script.
Ведь это, наверное, не function, а надо писать просто, без всяких предисловий?
Я хочу, чтобы в ворота мог проехать только владелец такого-то замка, и сякого-то замка, то есть, два условия.
Как это пишется?

Можно создать регион где стоит гарнизон.Потом скриптом SetRegionBlocked блокируем регион.SetRegionBlocked("имя региона", true или false,  1)
true блокировка, false разблокировка.
1 номер игрока, то есть красный.Второй - синий и т.д.
Григорий Ковалев сейчас на форуме
Ответить с цитированием
#3509
Старый 30.08.2021, 09:48
  #3509
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1313
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1313
Выставка наград
По умолчанию
Re: Скрипты

Есть вариант проще.
function GarrisonBlock()
while 1 do
if GetObjectOwner("Замок2")==GetObjectOwner("Замок1")  then --Ваше условие истинно, только если оба замка принадлежат одному игроку
SetObjectEnabled("Гарнизон", 1, GetObjectOwner("Замок1")) --Разблокируем гарнизон владельцу обоих замков
while not IsObjectEnabled("Гарнизон") do sleep(1) end
end
for i=1,8 do
if GetPlayerState(i)==PLAYER_ACTIVE and  i~=GetObjectOwner("Замок1") and i~=GetObjectOwner("Замок2") and IsObjectEnabled("Гарнизон") then --Если игрок активен и не владелец обоих замков, но гарнизон ему разблокирован, то
SetObjectEnabled("Гарнизон", nil, i) --Заблокировать гарнизон ему
end
end
sleep(1)
end

startThread(GarrisonBlock)

Да, скрипт не очень красивый, можно было бы и имена в переменные загнать, чтобы не писать 5 раз, а еще лучше в аргументы функции, можно еще использовать триггер смены владельца замка и проверку на старте карты, чтоб лишний цикл не крутился.
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3510
Старый 30.08.2021, 10:58
  #3510
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 29
Регистрация: 31.01.2020
Сообщения: 29
По умолчанию
Re: Скрипты

Спасибо, сейчас буду пробовать.

Добавлено через 36 минут
Хоттабыч, что-то не фурычит скрипт.
Скрипт эдитор сразу начал ругаться, но я там ещё один end добавила перед sleep, и он перестал.
Однако, теперь при попытке загрузить карту, на надписи "нажмите любую клавишу" игра наглухо зависает, и приходится выходить через Ctrl + Alt + Del, по-другому никак.
Я правильно поняла, надо было скрипт в Меп скрипт прописывать, а не на сами ворота?
И вот эта вот строчка меня смущает:
while not IsObjectEnabled("Garnizon_1") do sleep(1)end
Я в луа, и вообще в скриптах, ничего не понимаю, - но впервые сталкиваюсь, что end пишут просто так в конце, - это так и надо, do sleep(1)end, или это надо было с новой строчки или двух строчек писать?
Марта вне форума
Ответить с цитированием
Ответ
Страница 234 из 237


Опции темы



Часовой пояс GMT +4, время: 21:42.


vBulletin v3.5.0, Copyright ©2000-2021, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru