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

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

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

Ответ
Страница 255 из 255
 
Опции темы
#3811
Старый 19.12.2022, 14:56
  #3811
^
AstralLein
 
Аватар для AstralLein
📖
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 1758
Регистрация: 02.06.2017
Адрес: В Империи Незанхельм.
Сообщения: 1758
По умолчанию
Re: Скрипты

Я не помню, но на худой конец ее всегда можно сделать через переменную. 
__________________
Готовые проекты:

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

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

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

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

Карты для героев 5:
"Рок Гримхейма" - ориентировочная дата выхода - ???

Карты для героев 6:
"Темницы разума" - почти готово, но когда будет время доделать без понятия
Готовые проекты:

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

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

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

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

Карты для героев 5:
"Рок Гримхейма" - ориентировочная дата выхода - ???

Карты для героев 6:
"Темницы разума" - почти готово, но когда будет время доделать без понятия
AstralLein вне форума
Ответить с цитированием
#3812
Старый 04.01.2023, 00:28
  #3812
^
TTPOCTO-DEMOH
📖
Регистрация: 16.11.2016
Сообщения: 21
Регистрация: 16.11.2016
Сообщения: 21
По умолчанию
Re: Скрипты

Здравствуйте. Подскажите, пожалуйста, как включить скрипты на мультиплеерных картах?
TTPOCTO-DEMOH вне форума
Ответить с цитированием
#3813
Старый 04.01.2023, 12:13
  #3813
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1753
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1753
Выставка наград
По умолчанию
Re: Скрипты

Скрипты карты приключений на мультиплеерных картах работают! Для включения боевых скриптов и скриптов города нужно пропатчить exe игры специальным патчем (не уверен на 100%, что нужно), могу скинуть в частном порядке.
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3814
Старый 04.01.2023, 19:54
  #3814
^
IchGViji
 
Аватар для IchGViji
📖
Регистрация: 23.08.2022
Сообщения: 13
Регистрация: 23.08.2022
Сообщения: 13
Сообщение
Re: Скрипты

Всем доброго дня!

С помощью руководства решил я попробовать сделать боевой скрипт.
Возникло пару проблем по нему
1) функция GetDefenderCreatures() выдает ошибку: "Wrong type of argument 1 when calling function GetUnits" в независимости, где я в файле скрипта ее вызову. Пробовал аналогичную функцию, но для атакующего - GetAttackerCreatures(). Первый раз сработала, второй раз та же проблема, что и с Defender.
2) хуки DefenderHeroMove(heroName) и AttackerHeroMove(heroName) при ходе героев не запускаются - в консоли даже нет сообщения, что скрипт вошел в тело функции, и даже ошибки никакой не выдает. Один раз даже было, что хук AttackerHeroMove(heroName) просто зациклился. Стабильно работают только хуки Prepare() и Start().
Можете, пожалуйста, подсказать, как эти проблемы разрешить? 

Содержимое скрипта (пока просто логи, чтобы понять, что работает, что нет):

print("inside combat file");

DEFENDER = GetDefenderHero();
print(DEFENDER);
ATTACKER = GetAttackerHero();
print(ATTACKER);
defenderCreatures = {0};
attackerCreatures = {0};



function Prepare()
  print("inside Prepare function");
  print("Prepare function has ended");
end;

function Start()
  print("inside Start function");
  ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);
  defenderCreatures = GetDefenderCreatures();
  attackerCreatures = GetAttackerCreatures();
  print(1);
  for key, creature in defenderCreatures do
    print("key=", key, ", creature=", creature);
  end;
  print(attackerCreatures);
  print("Start function has ended");
end;

function DefenderHeroMove(heroName)
  print("inside DefenderHeroMove function");
  ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);
  print("DefenderHeroMove function has ended");
end;

function AttackerHeroMove(heroName)
  print("inside AttackerHeroMove function");
  ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);
  print("AttackerHeroMove function has ended");
end;

IchGViji вне форума
Ответить с цитированием
#3815
Старый 04.01.2023, 21:25
  #3815
^
TTPOCTO-DEMOH
📖
Регистрация: 16.11.2016
Сообщения: 21
Регистрация: 16.11.2016
Сообщения: 21
По умолчанию
Re: Скрипты

}{0TT@6bI4Скрипты карты приключений на мультиплеерных картах работают! Для включения боевых скриптов и скриптов города нужно пропатчить exe игры специальным патчем (не уверен на 100%, что нужно), могу скинуть в частном порядке.
Спасибо, видимо я где-то раньше накосячил. Был бы благодарен за патч, патчер у меня имеется если что)
TTPOCTO-DEMOH вне форума
Ответить с цитированием
#3816
Старый 05.01.2023, 00:44
  #3816
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 813
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 813
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

IchGViji

Всем доброго дня!

С помощью руководства решил я попробовать сделать боевой скрипт.
Возникло пару проблем по нему
1) функция GetDefenderCreatures() выдает ошибку: "Wrong type of argument 1 when calling function GetUnits" в независимости, где я в файле скрипта ее вызову. Пробовал аналогичную функцию, но для атакующего - GetAttackerCreatures(). Первый раз сработала, второй раз та же проблема, что и с Defender.
2) хуки DefenderHeroMove(heroName) и AttackerHeroMove(heroName) при ходе героев не запускаются - в консоли даже нет сообщения, что скрипт вошел в тело функции, и даже ошибки никакой не выдает. Один раз даже было, что хук AttackerHeroMove(heroName) просто зациклился. Стабильно работают только хуки Prepare() и Start().
Можете, пожалуйста, подсказать, как эти проблемы разрешить? 

Содержимое скрипта (пока просто логи, чтобы понять, что работает, что нет):

print("inside combat file");

DEFENDER = GetDefenderHero();
print(DEFENDER);
ATTACKER = GetAttackerHero();
print(ATTACKER);
defenderCreatures = {0};
attackerCreatures = {0};



function Prepare()
  print("inside Prepare function");
  print("Prepare function has ended");
end;

function Start()
  print("inside Start function");
  ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);
  defenderCreatures = GetDefenderCreatures();
  attackerCreatures = GetAttackerCreatures();
  print(1);
  for key, creature in defenderCreatures do
    print("key=", key, ", creature=", creature);
  end;
  print(attackerCreatures);
  print("Start function has ended");
end;

function DefenderHeroMove(heroName)
  print("inside DefenderHeroMove function");
  ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);
  print("DefenderHeroMove function has ended");
end;

function AttackerHeroMove(heroName)
  print("inside AttackerHeroMove function");
  ShowFlyingSign(GetMapDataPath().."CombatMessage.txt", DEFENDER, 200);
  print("AttackerHeroMove function has ended");
end;


вероятно, проблема в этих двух строчках:
DEFENDER = GetDefenderHero();
print(DEFENDER);
ATTACKER = GetAttackerHero();
print(ATTACKER);

суть в чем - в игре определены 2 константы ATTACKER и DEFENDER, которые соответственно определяют атакующую и защищающуюся стороны боя. Этими строчками ты по сути перезаписываешь эти константы, назначая в них имена юнитов героев вместо стандартных сторон. Дальнейшие ошибки очевидны - GetAttackerCreatures() и GetDefenderCreatures() это просто обертки над функцией более низкого уровня - внутри них происходит вызов GetCreatures(ATTACKER) и GetCreatures(DEFENDER) соответственно. Из-за переопределенных констант, эти функции не могут отработать корректно, что и провоцирует ошибку. Остальной скрипт просто не отрабатывает из-за этих ошибок. Соответственно, решение простое - использовать другие названия для твоих констант имен героев.
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3817
Старый 06.01.2023, 19:13
  #3817
^
IchGViji
 
Аватар для IchGViji
📖
Регистрация: 23.08.2022
Сообщения: 13
Регистрация: 23.08.2022
Сообщения: 13
Хорошо
Re: Скрипты

Gerterвероятно, проблема в этих двух строчках:
DEFENDER = GetDefenderHero();
print(DEFENDER);
ATTACKER = GetAttackerHero();
print(ATTACKER);

суть в чем - в игре определены 2 константы ATTACKER и DEFENDER, которые соответственно определяют атакующую и защищающуюся стороны боя. Этими строчками ты по сути перезаписываешь эти константы, назначая в них имена юнитов героев вместо стандартных сторон. Дальнейшие ошибки очевидны - GetAttackerCreatures() и GetDefenderCreatures() это просто обертки над функцией более низкого уровня - внутри них происходит вызов GetCreatures(ATTACKER) и GetCreatures(DEFENDER) соответственно. Из-за переопределенных констант, эти функции не могут отработать корректно, что и провоцирует ошибку. Остальной скрипт просто не отрабатывает из-за этих ошибок. Соответственно, решение простое - использовать другие названия для твоих констант имен героев.

Gerter, благодарю за помощь!

Действительно, стоило эти константам дать другие имена, как скрипт пошел как по маслу! По крайней мере, пока я его еще чем-то не сломаю
Получается, ATTACKER и DEFENDER это зарезервированные слова, как к примеру, CREATURE_VAMPIRE.
IchGViji вне форума
Ответить с цитированием
#3818
Старый 06.01.2023, 19:34
  #3818
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 177
Регистрация: 24.04.2016
Сообщения: 177
По умолчанию
Re: Скрипты

IchGVijiПолучается, ATTACKER и DEFENDER это зарезервированные слова, как к примеру, CREATURE_VAMPIRE.
Выдержка из файла combat-startup.lua:
ATTACKER = 0
DEFENDER = 1

function IsAttacker(unit) return GetUnitSide(unit) == ATTACKER end
function IsDefender(unit) return GetUnitSide(unit) == DEFENDER end

function GetAttackerHero() local temp = GetHero(ATTACKER) return temp end
function GetDefenderHero() local temp = GetHero(DEFENDER) return temp end
function GetAttackerCreatures() local temp = GetCreatures(ATTACKER) return temp end
function GetDefenderCreatures() local temp = GetCreatures(DEFENDER) return temp end
function GetAttackerWarMachines() local temp = GetWarMachines(ATTACKER) return temp end
function GetDefenderWarMachines() local temp = GetWarMachines(DEFENDER) return temp end
function GetAttackerBuildings() local temp = GetBuildings(ATTACKER) return temp end
function GetDefenderBuildings() local temp = GetBuildings(DEFENDER) return temp end
function GetAttackerSpellSpawns() local temp = GetSpellSpawns(ATTACKER) return temp end
function GetDefenderSpellSpawns() local temp = GetSpellSpawns(DEFENDER) return temp end

и т.д.

Так что да, эти две константы трогать нельзя, иначе поломается весь боевой скрипт

Азгалор вне форума
Ответить с цитированием
Ответ
Страница 255 из 255


Опции темы



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


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

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