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

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

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

Ответ
Страница 174 из 260
 
Опции темы
#2596
Старый 11.03.2018, 00:04
  #2596
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Можете объяснить работу функции, вызывающей сражение? Почему при попытке начать бой с героем "Nemor", который резервный и выставлен на карту скриптом ранее (нейтральный герой, первоначально желтый), выдается ошибка, что данный герой не является резервным...

Добавлено через 5 минут
Все в скрипте, что связано с этим героем:

DeployReserveHero("Nemor", 111, 121, 1)
sleep(2)
SetObjectOwner("Nemor", 8)
AddHeroCreatures("Nemor", CREATURE_SHADOW_DRAGON, 5 * diff)
AddHeroCreatures("Nemor", CREATURE_BANSHEE, 10 * diff)
AddHeroCreatures("Nemor", CREATURE_LICH_MASTER, 15 * diff)
AddHeroCreatures("Nemor", CREATURE_NOSFERATU, 25 * diff)
AddHeroCreatures("Nemor", CREATURE_GHOST, 30 * diff)
AddHeroCreatures("Nemor", CREATURE_DISEASE_ZOMBIE, 70 * diff)
AddHeroCreatures("Nemor", CREATURE_SKELETON_WARRIOR, 100 * diff)

Trigger(REGION_ENTER_AND_STOP_TRIGGER, "SkullBatttle", "SkullBatttleScript")

function SkullBatttleScript(hero)
StartCombat(hero, "Nemor",7,
CREATURE_SKELETON_WARRIOR, GetHeroCreatures("Nemor", CREATURE_SKELETON_WARRIOR),
CREATURE_DISEASE_ZOMBIE, GetHeroCreatures("Nemor", CREATURE_DISEASE_ZOMBIE),
CREATURE_GHOST, GetHeroCreatures("Nemor", CREATURE_GHOST),
CREATURE_NOSFERATU, GetHeroCreatures("Nemor", CREATURE_NOSFERATU),
CREATURE_LICH_MASTER, GetHeroCreatures("Nemor", CREATURE_LICH_MASTER),
CREATURE_BANSHEE, GetHeroCreatures("Nemor", CREATURE_BANSHEE),
CREATURE_SHADOW_DRAGON, GetHeroCreatures("Nemor", CREATURE_SHADOW_DRAGON),
nil, "SkullCombatEnd", nil, nil)
end

function SkullCombatEnd(hero, result)
if result then
if IsObjectExists("Nemor") == 0 then
Trigger(REGION_ENTER_AND_STOP_TRIGGER, "SkullBatttle", nil)
MessageBox(path.."necroend.txt")
else
AddHeroCreatures("Nemor", CREATURE_SHADOW_DRAGON, 5 * diff)
AddHeroCreatures("Nemor", CREATURE_BANSHEE, 10 * diff)
AddHeroCreatures("Nemor", CREATURE_LICH_MASTER, 15 * diff)
AddHeroCreatures("Nemor", CREATURE_NOSFERATU, 25 * diff)
AddHeroCreatures("Nemor", CREATURE_GHOST, 30 * diff)
AddHeroCreatures("Nemor", CREATURE_DISEASE_ZOMBIE, 70 * diff)
AddHeroCreatures("Nemor", CREATURE_SKELETON_WARRIOR, 100 * diff)
end
end
end
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2597
Старый 11.03.2018, 00:26
  #2597
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

Не стоит зарезервированных героев передавать другим игрокам. Там есть некоторые непонятные баги, связанные с этим, например, после смерти герой в резерв обратно не попадет, и его нельзя будет выставить.
	IsObjectExists("Nemor") == 0
Так тоже не нужно делать, функция IsObjectExists никогда 0 не возвращает, только 1 и nil.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием
#2598
Старый 11.03.2018, 12:01
  #2598
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Как сделать такие диалоговые сообщения, как на карте "Путь героя", к примеру. Тоесть, в которых несколько вариантов ответа и каждый по-своему подписан и т.д.
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2599
Старый 11.03.2018, 12:03
  #2599
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

Как сделать такие диалоговые сообщения, как на карте "Путь героя", к примеру.
Вот цитата с одного из форумов, где один из сотрудников Нивала рассказывал об изменениях в патче 3.1:
TalkBoxForPlayers( playersFilter, iconRef, iconTooltipRef, textRef, addTextRef, callback, mode, titleTextRef, selectTextRef, defaultOption, optionTextRef [, optionTextRef, ...] )
- открывает для выбранных игроков (playersFilter) диалог с несколькими вариантами ответа (от 1 до 5)
- функция не выдаёт сообщений об ошибке т.к. если параметры не верны, то используются значения по-умолчанию
- iconRef - ссылка на текстуру иконки
- iconTooltipRef - путь к тексту тултипа иконки
- textRef - путь к тексту диалога
- addTextRef - путь к тексту диалога (дополнительному)
- сallback - строка с именем lua-функции, через первый параметр которой сообщается ответ игрока (число: 0 - отмена, -1 - закрыт игрой, 1.. - номер выбранного игроком ответа)
- mode - режим: 0 - с кнопкой ОК, 1 - ОК/Закрыть
- titleTextRef - путь к тексту заголовка окна
- selectTextRef - путь к тексту заголовка перед опциями выбора
- defaultOption - номер ответа, подсвеченного по-умолчанию (число: 0 - нет, 1.. - номер ответа)
- optionTextRef - путь к тексту ответа № 1
- ... - путь к тексту ответа № ...

Пример:
s = 'Text/Chest/Choose.txt'
TalkBoxForPlayers( PLAYERFLT_1, nil,s, s,s, 'test1', 0, s,s, 0, s,s,s )

Внимание! В локализованных версиях патча отсутствует один необходимый текстовый файл, требуемый для корректной работы TalkBoxForPlayers. Его можно просто создать:

Файл: UI/CommonBoxes/TalkBox/Text.txt
Содержание: (h5)(color_bright)(value=text) (вместо обычных скобок угловые)
Формат файла: plain Unicode text (в NOTEPAD сохранить как Unicode)

Данный файл рекомендуется распространять в составе архивов карт, которые используют TalkBoxForPlayers.

Второй вариант — сделать специальный мод, который содержал бы данный файл и требовать присутствие мода для работы карты (распространять вместе).
Jack_of_shadows вне форума
Ответить с цитированием
#2600
Старый 11.03.2018, 12:12
  #2600
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

А как потом определить, какой ответ был выбран?

Добавлено через 31 секунду
И что такое дополнительный текст?

Добавлено через 3 минуты
У меня варианты ответов - это выбор награды за квест.
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2601
Старый 11.03.2018, 12:15
  #2601
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

AstralLein, я сейчас делаю небольшой гайд по скриптам, буквально на днях выложу. Там будет подробнее это описано.
Вкратце - TalkBox передаёт в функцию-каллбэк 2 параметра: номер ответившего игрока и номер выбранного ответа. Все дополнительные тексты можно и не писать, в "Пути героя" я заполнял только заголовок (имя персонажа), иконку, основной текст и текст для ответов.
Jack_of_shadows вне форума
Ответить с цитированием
#2602
Старый 11.03.2018, 14:26
  #2602
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

TalkBoxForPlayers(1, nil, nil, path.."skullfinaltext.txt", nil, "SkullEndFinal", 0, path.."ooo.txt", nil, 0, path.."m.txt", path.."mm.txt", path.."mmm.txt")

Так сойдет?

Добавлено через 44 минуты
Хм... А какой должен быть путь к стандартной иконке в углу?

И как в итоговой функции определить героя, который активировал все это дело и получит награду?

Добавлено через 2 минуты
У меня сейчас так:

function SkullEndFinal(player, answer)
if answer == 1 then
Trigger(OBJECT_TOUCH_TRIGGER, "HutSkullQuest", "SkullPusty")
MessageBox (path.."endend.txt")
sleep(2)
RemoveArtefact(???, 83)
ChangeResource(6, 60000, ???)
ChangeResource(2, 50, ???)
sleep(2)
SetObjectiveState("SkullQuest", OBJECTIVE_COMPLETED)
elseif answer == 2 then
Trigger(OBJECT_TOUCH_TRIGGER, "HutSkullQuest", "SkullPusty")
MessageBox (path.."endend.txt")
sleep(2)
RemoveArtefact(???, 83)
ChangeHeroState(???, 4, 5)
sleep(2)
SetObjectiveState("SkullQuest", OBJECTIVE_COMPLETED)
elseif answer == 3 then
Trigger(OBJECT_TOUCH_TRIGGER, "HutSkullQuest", "SkullPusty")
MessageBox (path.."endend.txt")
sleep(2)
RemoveArtefact(???, 83)
AddHeroCreatures(???, CREATURE_DEMILICH, 45)
sleep(2)
SetObjectiveState("SkullQuest", OBJECTIVE_COMPLETED)
end

Добавлено через 1 час 18 минут
GetAttackerCreatures возвращает существ атакующей стороны.. но как именно это использовать для обращения к конкретному стеку?
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2603
Старый 11.03.2018, 16:04
  #2603
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

А какой должен быть путь к стандартной иконке в углу?
Стандартной то нету, но вот например свитоток, такой же как в MessageBox:
	'/UI/MessageBox/Message.xdb#xpointer(/Texture)'
Хотя красивее туда лица какие-нибудь вставлять, например один из героев Академии:
	'/Textures/Icons/Heroes/Academy/Academy_Zehir_128x128.(Texture).xdb#xpointer(/Texture)'
И как в итоговой функции определить героя, который активировал все это дело и получит награду?
TalkBox идёт для игрока, поэтому имя героя в нём не участвует. Но если он вызывается при заходе в домик или к существу, то все триггеры касания передают имя героя, можно его запомнить и потом использовать.
GetAttackerCreatures возвращает существ атакующей стороны.. но как именно это использовать для обращения к конкретному стеку?
	local units = GetAttackerCreatures();
for i, unit in units do
  local unit_id = GetCreatureType(unit);
  -- по имени unit можно ещё получить количество существ, координаты и т.д.
end
Jack_of_shadows вне форума
Ответить с цитированием
#2604
Старый 11.03.2018, 16:08
  #2604
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Типа в функции касания добавить hero = name и потом использовать этот name?
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2605
Старый 11.03.2018, 16:18
  #2605
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

AstralLein, да.
Jack_of_shadows вне форума
Ответить с цитированием
#2606
Старый 11.03.2018, 16:26
  #2606
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Хм. Туплю что-то глядя на код (который про GetAttackerCreatures). Допустим, на стороне атакующих лич, теперь я смогу к нему обратиться при помощи CREATURE_LICH?
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2607
Старый 11.03.2018, 16:33
  #2607
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

AstralLein, не, если надо найти у атакующих всех личей и заставить их что-то сделать, это будет так:
	local units = GetAttackerCreatures();
for i, unit in units do
  local unit_id = GetCreatureType(unit);
  if (unit_id == CREATURE_LICH) then
    -- что-нибудь сделать
  end
end
Jack_of_shadows вне форума
Ответить с цитированием
#2608
Старый 11.03.2018, 16:43
  #2608
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Начинаю понимать... а если такое... любой юнит атакующих умер и что-то случилось? Это через нужный Get ( забыл имя функции) и в качестве имени юнита units?
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
#2609
Старый 11.03.2018, 17:11
  #2609
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
Регистрация: 08.09.2013
Сообщения: 507
Выставка наград
По умолчанию
Re: Скрипты

Во первых, если юнит умер, то GetAttackerCreatures() его уже не выдаст. Насколько я помню, он выдаёт все текущие отряды на поле боя. Сам момент смерти любого существа сопровождается вызовом функции UnitDeath, в которую передается имя умершего существа, но что с этим именем можно делать, если существа уже нет, я не проверял.
Во вторых,
и в качестве имени юнита units?
units - массив имен, который вернула GetAttackerCreatures(). Если попытаться его скажем вывести:
print(units)
Будет что-то подобное:
{"creature_0", "creature_1", "creature_2", "creature_3"}
Когда мы перебираем эту таблицу циклом
for i, unit in units do
то переменная unit уже содержит имя одного существа, например "creature_0". Это внутреннее имя, которое игра присвоила отряду. В реальности оно немного другое. Лучше всего это увидеть, если просто в бою вызвать консоль и попробовать соответствующие команды.
Jack_of_shadows вне форума
Ответить с цитированием
#2610
Старый 11.03.2018, 17:44
  #2610
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 3900
По умолчанию
Re: Скрипты

Я имею ввиду можно ли создать событие с условием гибели любого стека из армии атакующих?

Добавлено через 10 минут
Вообще предполагается сделать две вещи:

- когда ходит единственный стек защищающегося, он кое-что делает.

- когда умирает любой стек атакующего, появляются призраки на стороне защищающегося.
__________________
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
Ох это сладостное, поглощающее разум безумие! 

Готовые проекты:


Карты для героев 5:
"Плата за любовь"
"Путь некроманта"
"Темные грани"

Карты для Disciples 3:
"Противостояние"

Проекты в разработке:

Моды для Disciples 3:
"Астельнаир" - разработка возобновлена в мае 2019 год

Карты для героев 5:
"Рок Гримхейма" - в активной разработке
AstralLein сейчас на форуме
Ответить с цитированием
Ответ
Страница 174 из 260


Опции темы



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


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

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