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

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

В ответ пользователю }{0TT@6bI4
Аватар пользователя
}{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("прошли чек проверок") мне не выдаётся, значит проверки не срабатывают. Как тогда их прописывать? Разработчики в документе как-то размыто всё расписали, т.е. совсем никак.

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

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

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



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

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


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

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

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

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

Сам же скрипт теперь такой(всё работает, 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
В ответ пользователю Азгалор
Аватар пользователя
В общем-то если в таком индексе не было существ, то вам и выдаёт ошибку. Я не знаю способа отловить эту ошибку кроме хуканий ошибки или pCall, так что пока забейте, не вижу смысла вам париться сейчас с ловлей ошибок. Задолбает - пишите). Досадно, но я не знаю способа определить в каких индексах были существа. 
П.С
Слоты разве не с 1 начинаются?


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

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


                                                                                       
В ответ пользователю Jewily
Аватар пользователя

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

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

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

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

По поводу ошибки Invalid creature index: возможно, при отсутствии существа в i-том стеке функция GetSavedCombatArmyCreatureInfo выдаёт предупреждение. Для отлова можно добавить внутрь цикла после получения информации print(i, "-тая итерация прошла"), посмотреть, какие принты выводятся. Если выводятся в перемешку с ошибкой, то это просто варнинг, если какой-то из 7 принтов не вылез — нужно фиксить
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
Азгалор, загуглить действительно было нельзя, можно было только заяндексить) Пост от Джэка Теней по поводу этих функций:
/topic/at/966879/
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
}{0TT@6bI4, понял) Ну-с, пожалуй буду триггером смерть ГГ отслеживать, в принципе так и собирался делать. Насчёт ошибки - спасибо) Прописал в свой скрипт
n_stacks = GetSavedCombatArmyCreaturesCount(id, COMBAT_LOSER);
for i = 0,(n_stacks-1) do

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

Аватар пользователя
Не знаю... Поиском форумным не пользовался, искал через яндекс, выдало первой страницей
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
Здравствуйте! Такой вопрос: существует функция:
GenerateMonsters( monsterTypeID , countGroupsMin , countGroupsMax , countInGroupMin, countInGroupMax); 

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

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

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

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

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

Сорри, если вопрос не по теме (хотя xdb-файлы имеют непосредственное отношение к скриптам)).
Аватар пользователя
Азлагор, нет, но можно создать точно такой же генератор монстров при помощи рандомайзера координат и цикла, который N раз будет вызывать CreateMonster

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

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

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

Все созданные файлы будут лежать в ПапкаИгры/data/, останется только закинуть в карту
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
Азгалор, предупреждаю: когда я тестировал, ни одна функция, динамически генерирующая объекты, не регала их имена в игре, и скрипты на них не вешались.
К сожалению, я эту проблему так и не решил. Но возможно именно мобы будут работать: ресурсы и артефакты не работают.


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

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


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


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

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


                                                                                       

Статистика

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