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

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

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

Ответ
Страница 244 из 253
 
Опции темы
#3646
Старый 01.06.2022, 21:07
  #3646
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 167
Регистрация: 24.04.2016
Сообщения: 167
По умолчанию
Re: Скрипты

}{0TT@6bI4Только через SetGameVar можно переносить, однако

Есть триггер завершения боя, по которому в функцию передаётся индекс битвы. А по индексу битвы можно получить всю информацию об уничтоженных существах при помощи GetSavedCombat...., есть в туториале и тут тоже на форуме Jack of shadows расписывал (поиск GetSavedCombatArmy site:heroesworld.ru должен дать результат)
Вау, спасибо) Ранее даже не замечал этот функционал в руководстве) Слушай, как раз хотел узнать кое-что узнать. В разрабовских картах видел скелеты квестов на сохранение главных героев через отслеживание существование оных через циклы(IsHeroAlive), или же через их потерю через триггер(PLAYER_REMOVE_HERO_TRIGGER). Вот и стало быть интересно, а что из этого будет менее нагружаемым для карты? На что предпочтительнее делать уклон для оптимизации скрипта?

Добавлено через 1 час 50 минут
Что-то не понимаю как работают эти функции. Прописал скрипт: 
enemieskilledcounter = 0;
SetTrigger( COMBAT_RESULTS_TRIGGER, "WR_Revenge" );

function WR_Revenge( combatIndex )
        print("Запустили функцию")
      if ( GetSavedCombatArmyHero( combatIndex, 1, "WR" ) == true ) and ( GetSavedCombatArmyCreaturesCount( combatIndex, 2, 112 ) == true ) then
        print("Прошли чек проверок")
         local revenge_target, count, died = GetSavedCombatArmyCreatureInfo( combatIndex );
        print("Прошли local")
            if revenge_target == 112 and died >= 1 then
        print("Прошли проверку на смерть хоть одного ангелочка")
               enemieskilledcounter = enemieskilledcounter + died;
               print("Герой убил ", enemieskilledcounter ," ангелов");
            end
      end
end

Однако print("прошли чек проверок") мне не выдаётся, значит проверки не срабатывают. Как тогда их прописывать? Разработчики в документе как-то размыто всё расписали, т.е. совсем никак.

Азгалор вне форума
Ответить с цитированием
#3647
Старый 01.06.2022, 21:38
  #3647
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
По умолчанию
Re: Скрипты

Азгалор Вот и стало быть интересно, а что из этого будет менее нагружаемым для карты? На что предпочтительнее делать уклон для оптимизации скрипта?


В случае, если разрабы не безрукие(они не такие), то через триггер. Потому что висячий триггер не исполняется до вызова соответствующего события. А поток с циклом - постоянно выполняется, что грузит карту больше. 
Вы в своём скрипте в 
GetSavedCombatArmyCreatureInfo( combatIndex );

отдали только 1 аргумент, а нужно ещё написать помимо combatIndex написать 0 вторым параметром(0 для проигравшего, 1 для победившего), и третьим аругментом нужен индекс слота армии, в каком проверять. Соответственно вам лучше написать цикл, который все слоты проверит.
Оттого и ничего не работает. В мануале конечно не очень расписано, но как уже указывал Хоттабыч, писали об этом на форуме.

__________________




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       
Jewily вне форума
Ответить с цитированием
#3648
Старый 01.06.2022, 23:04
  #3648
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 167
Регистрация: 24.04.2016
Сообщения: 167
По умолчанию
Re: Скрипты

JewilyВ случае, если разрабы не безрукие(они не такие), то через триггер. Потому что висячий триггер не исполняется до вызова соответствующего события. А поток с циклом - постоянно выполняется, что грузит карту больше. 
Вы в своём скрипте в 
GetSavedCombatArmyCreatureInfo( combatIndex );

отдали только 1 аргумент, а нужно ещё написать помимо combatIndex написать 0 вторым параметром(0 для проигравшего, 1 для победившего), и третьим аругментом нужен индекс слота армии, в каком проверять. Соответственно вам лучше написать цикл, который все слоты проверит.
Оттого и ничего не работает. В мануале конечно не очень расписано, но как уже указывал Хоттабыч, писали об этом на форуме.

Спасибо за ответ, к сожалению по поиску я нашёл только сообщения которые мы с Хоттабычем сами же и оставили(

По поводу своего скрипта - чуток переписал и заработало! Однако, почему-то скрипт после проверки стеков и нахождении первого занятого из них каким-либо существом жалуется на "Invalid creature index" и число какое-нибудь пишет. Например 2(как понимаю, это занятый существами стек которые были в бою с героем). Это критичная ошибка? Или можно проигнорировать опираясь на "Ладно, итак сойдёт!" ?   

Сам же скрипт теперь такой(всё работает, print выдаёт корректное число павших недругов)

function WR_Revenge( combatIndex )
        print("Запустили функцию") --Удалить
      if GetSavedCombatArmyHero( combatIndex, 1 ) == "WR" then
        print("Чекнули героя") 
         if GetSavedCombatArmyCreaturesCount( combatIndex, 0, 112 ) >= 1 then
        print("Чекнули существ") 
         for i=0,6 do
         local revenge_target, count, died = GetSavedCombatArmyCreatureInfo( combatIndex, 0, i );
        print("Прошли local") 
            if revenge_target == 112 and died >= 1 then
        print("Прошли проверку на смерть хоть одного ангелочка")
               enemieskilledcounter = enemieskilledcounter + died;
               print("ВР убила ", enemieskilledcounter ," ангелочков");
            end
         end
      end
   end
end
Азгалор вне форума
Ответить с цитированием
#3649
Старый 01.06.2022, 23:45
  #3649
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
По умолчанию
Re: Скрипты

В общем-то если в таком индексе не было существ, то вам и выдаёт ошибку. Я не знаю способа отловить эту ошибку кроме хуканий ошибки или pCall, так что пока забейте, не вижу смысла вам париться сейчас с ловлей ошибок. Задолбает - пишите). Досадно, но я не знаю способа определить в каких индексах были существа. 
П.С
Слоты разве не с 1 начинаются?
__________________




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       
Jewily вне форума
Ответить с цитированием
#3650
Старый 01.06.2022, 23:49
  #3650
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 167
Регистрация: 24.04.2016
Сообщения: 167
По умолчанию
Re: Скрипты

JewilyВ общем-то если в таком индексе не было существ, то вам и выдаёт ошибку. Я не знаю способа отловить эту ошибку кроме хуканий ошибки или pCall, так что пока забейте, не вижу смысла вам париться сейчас с ловлей ошибок. Задолбает - пишите). Досадно, но я не знаю способа определить в каких индексах были существа. 
П.С
Слоты разве не с 1 начинаются?
Понял) Сейчас попробую текст подкрутить к этой функции, надеюсь всё будет пахать по задумке и без траблов, а на консольные ошибки которые не ломают игру как-то по барабану  

В руководстве сказано что с 0.

"The stack index number is selected with the "creatureIndex" parameter and counts off from 0."

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

Цикл будет нагружать карту (хоть и слабо) всё время. Триггер одинажды потратит заметное время на старте карты, потом нагружать не будет. Самый оптимизироварнный вариант — создать задачу HERO_MUST_SURVIVE, если, конечно, она с самого начала должна работать. Возможно, можно организовать автоактивацию от условий при помощи dependencies, но не знаю, как.

По поводу ошибки Invalid creature index: возможно, при отсутствии существа в i-том стеке функция GetSavedCombatArmyCreatureInfo выдаёт предупреждение. Для отлова можно добавить внутрь цикла после получения информации print(i, "-тая итерация прошла"), посмотреть, какие принты выводятся. Если выводятся в перемешку с ошибкой, то это просто варнинг, если какой-то из 7 принтов не вылез — нужно фиксить
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3652
Старый 02.06.2022, 08:34
  #3652
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
По умолчанию
Re: Скрипты

Азгалор, загуглить действительно было нельзя, можно было только заяндексить) Пост от Джэка Теней по поводу этих функций:https://forum.heroesworld.ru/showpos...postcount=2267
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3653
Старый 02.06.2022, 15:58
  #3653
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 167
Регистрация: 24.04.2016
Сообщения: 167
По умолчанию
Re: Скрипты

}{0TT@6bI4, понял) Ну-с, пожалуй буду триггером смерть ГГ отслеживать, в принципе так и собирался делать. Насчёт ошибки - спасибо) Прописал в свой скрипт
n_stacks = GetSavedCombatArmyCreaturesCount(id, COMBAT_LOSER);
  for i = 0,(n_stacks-1) do

Из сообщения Jack_of_shadows место того что было, и ошибка перестала выдаваться) Странно, пользовался поиском по форуму по ключевым словам(GetSavedCombatArmy) и не находил его сообщения. Почему так?

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

Не знаю... Поиском форумным не пользовался, искал через яндекс, выдало первой страницей
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3655
Старый 03.06.2022, 01:23
  #3655
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 167
Регистрация: 24.04.2016
Сообщения: 167
По умолчанию
Re: Скрипты

Здравствуйте! Такой вопрос: существует функция:
GenerateMonsters( monsterTypeID , countGroupsMin , countGroupsMax , countInGroupMin, countInGroupMax); 

Суть вопроса в том, можно ли к ней привязать и выдачу имён существам? Например, хочу чтобы при респавне существам выдавались и имена, чтобы была возможность с ними как-то взаимодействовать скриптово. Или же для этого придётся создавать свой спавнер?

Азгалор вне форума
Ответить с цитированием
#3656
Старый 03.06.2022, 01:45
  #3656
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 64
Регистрация: 31.01.2020
Сообщения: 64
По умолчанию
Re: Скрипты

Jewily, Хоттабыч, спасибо, всё работает.

Чё-то я в последнюю неделю увлеклась текстурами, но сейчас возвращаюсь к скриптам.
Скажите, а никто из вас не знает, как вообще создать свой объект, и навесить на него свои текстуры?
Я могу создавать объекты, но они сохраняются только в папке карты, и, если я такой объект убираю с карты, то не знаю потом, как получить к той папке доступ.
Приходится удалять объект из папки, а потом заново создавать на карте.

И я могу лишь заменять родные текстуры, складывая нарисованные мной в папку Data (хорошо хоть запаковывать их в родной архив не надо), но, наверное, так неправильно.
К тому же, это не всегда даёт нужный результат.

Вот, например, в редакторе есть объект T-river
(лежит в Model:_(Model)\TerrainObjects\Grass\Rivers\T-river.(Model))
И этот объект глючный, на нём нет текстуры каменного берега реки, есть только сама вода.
Я бы мигом нарисовала текстуру, но непонятно, как её прописать.
Если, например, через xdb-файл, то, во-первых, такой файл для этой модели есть, но в нём нет ни слова про текстуру.
А во-вторых, непонятно, куда потом девать этот файл. Тоже в Дату кидать?

Сорри, если вопрос не по теме (хотя xdb-файлы имеют непосредственное отношение к скриптам)).
Марта вне форума
Ответить с цитированием
#3657
Старый 03.06.2022, 08:48
  #3657
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1717
Выставка наград
По умолчанию
Re: Скрипты

Азлагор, нет, но можно создать точно такой же генератор монстров при помощи рандомайзера координат и цикла, который N раз будет вызывать CreateMonster

Марта.
Рекомендую зайти в группу у меня в описании, там есть пост Матвея Рачинского с его руководством по созданию новых объектов.

Лучше создавать новые, чем портить старые.

Изменение текстур проще проводить в редакторе:
Настройте расширенный редактор карт и выберите таблицу Texture. Когда откроете редактор, убедитесь, что кнопка Resource => Close MOD горит серым (если нет, нажмите) В таблице Texture будет список всех текстур по папкам; вы можете открывать папки и текстуры двойным щелчком, при открытии текстуры она полностью отобразится в чёрном пространстве справа. В свойствах текстуры (если свойств нет, нажмите View => Selection Properties Window) найдите SrcFile и нажмите три точки. Выберите из папки Complete вашей игры нужный файл. Разумеется, перед началом работы вам нужно создать в папке игры папку Complete и положить в неё новую текстуру в формате tga. После того, как выбрали текстуру в SrcFile, нажмите пкм по файлу текстуры в дереве свойств => Export. Всё, текстура сделана.

Все созданные файлы будут лежать в ПапкаИгры/data/, останется только закинуть в карту
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3658
Старый 03.06.2022, 11:39
  #3658
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
По умолчанию
Re: Скрипты

Азгалор, предупреждаю: когда я тестировал, ни одна функция, динамически генерирующая объекты, не регала их имена в игре, и скрипты на них не вешались.
К сожалению, я эту проблему так и не решил. Но возможно именно мобы будут работать: ресурсы и артефакты не работают.
__________________




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       
Jewily вне форума
Ответить с цитированием
#3659
Старый 03.06.2022, 14:32
  #3659
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 167
Регистрация: 24.04.2016
Сообщения: 167
По умолчанию
Re: Скрипты

JewilyНо возможно именно мобы будут работать: ресурсы и артефакты не работают.
А можно респавнить артефакты и ресурсы? Знаю что не задокументировали функцию CreateStatic, а про спавнер ресов ранее не видел информации. Такое тоже есть?
Азгалор вне форума
Ответить с цитированием
#3660
Старый 03.06.2022, 15:11
  #3660
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 139
Jewily#4267
По умолчанию
Re: Скрипты

АзгалорА можно респавнить артефакты и ресурсы? Знаю что не задокументировали функцию CreateStatic, а про спавнер ресов ранее не видел информации. Такое тоже есть?
Есть, она также незадокументирована. CreateTreasure(ScriptName, type, Qty, x, y, floorID, rot) Несмотря на наличие первого аргумента, игра никак не отреагирует на то, что такой объект появился. То есть функция может быть использована разово(не предполагая например постоянно генерирующиеся ресурсы по условиям). С артефактами там почти тоже самое, т.е аргументы такие же, только вместо type будет его айди, а qty вообще не будет. ну и имя функции- CreateArtifact
__________________




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       
Jewily вне форума
Ответить с цитированием
Ответ
Страница 244 из 253


Опции темы



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


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

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