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

Сообщения от Скрипты для начинающих

Аватар пользователя
8 лет назад
Так же он работает и на тестовой мультиплеерной карте сделанной мной, правда для этого его нужно прописать в саму карту.
Ну да, в оригинальные мультиплеерные карты тоже надо прописать просто.
В моде NHF сделано со скриптами в мультиплеере так. А чтобы прописать эти скрипты в фанатские мультиплеерные карты есть специальная программа у них.
Кроме того, есть другой маленький баг, когда герой захватывает двеллинг, сразу выскакивает окно найма, а вопрос о перестройке появляется только после того, как герой из этого окна выйдет. Таким образом, в случае с перестройкой, герой получает возможность нанять прирост и из оригинального строения и из альтернативного, ии собственно так и делает. Может у кого есть идеи как решить эту проблему? "Выключать" строения до касания игрока тоже не вариант, т.к. в таком случае ии игнорирует эти строения.
А функция на изменение Value объекта для ИИ не работает в таких случаях?
И ещё такой вопрос, (наверное ещё более нубский чем остальные, прошу понять простить) вообще все эти скрипты, сильно ли грузят
игру? И зависит ли это как то от длинны названий задаваемых значений, т.е. стоит ли задаваемые мной названия делать максимально короткими или это вообще не имеет смысла?
Названия едва ли могут что-то загрузить. А так скрипты игру грузят, да. Зависит от конкретного случая, конечно, нотв целом можно провести эксперимент, задав какой-нибудь большой цикл и посмотрев время выполнения.
Без объёмных циклов, однако, вряд ли вы заметите, что скрипт выполняется продолжительное время.
В ответ пользователю Ment
Аватар пользователя
8 лет назад
Ment

А функция на изменение Value объекта для ИИ не работает в таких случаях?

Не совсем понял вот это. В каком смысле Value объекта?
И есть ли такая функция приминительно к двеллингам на глобальной карте?
Аватар пользователя
8 лет назад
Такое есть:
void SetAIPlayerAttractor( sObjectName, nPlayerID, nPriority )

Устанавливает для игрока nPlayerID «точку притяжения» на объекте с именем sObjectName. Герои игрока будут бегать вокруг объекта, периодически к нему возвращаясь. Возвращаться будут тем чаще, чем больше nPriority. Последний может принимать значения от -1 до 2.

void SetAIHeroAttractor( sObjectName, sHeroName, nPriority )

Функция аналогичная SetAIPlayerAttractor, но работает только для одного героя с именем sHeroName.
Аватар пользователя
8 лет назад
Вся проблема была в том, что команда QuestionBox ссылается на новую функцию, в которой значение "dwell" из функции "capt_alt_dw" теряется, поэтому игре невозможно было задать, какой именно двеллинг перестраивать в этот момент. У меня это пока решено через сравнивание местоположения объектов, но, может это можно сделать как-то адекватнее и проще?
Что-то вы на пустом месте трудности создаёте. Сохраняете координаты в глобальные переменные, потом обращаетесь к ним в функции add_alt_dw (). Ведь точно также можно сразу сохранить название объекта в глобальную переменную, и потом сразу его использовать:
function capt_alt_dw (prevowner, newowner, hero, dwell )
alt_dw_dwell = dwell;
QuestionBox("текст c вопросом бла бла бла", "add_alt_dw", nil);
end;

function add_alt_dw ()
ReplaceDwelling(alt_dw_dwell, TOWN_ACADEMY, 991 );
end;
А ещё я бы советовал использовать более сложные имена для функций и глобальных переменных, если хотите встраивать их в любую карту. Чем сложнее, тем больше шансов что ни с чем не совпадёт.
вообще все эти скрипты, сильно ли грузят игру?
Не заморачивайтесь по этому поводу. У меня на карте в триггере нового дня каждый ход отрабатывало наверное под тысячу строк кода, и это было совсем не заметно. Долго выполняется только работа с объектами на карте - удалить объект, поставить новый, изменить количество существ - по субъективным оценкам на каждую такую операцию идёт подтупливание игры на пол секунды может быть.
В ответ пользователю zahar0z
Аватар пользователя
8 лет назад
Благодарю, Jack_of_shadows, вариант со сменой имени работает, и как только я сам до этого не догадался, сразу подозревал что чересчур сложно с вычислением координат сделал.

Ment спасибо за совет, попробовал поиграть с SetAIPlayerAttractor, судя по всему команда не даёт никакого эффекта если целевой объект "выключен".

Добавлено через 5 часов 39 минут
Кто нибудь может подсказать, есть ли команда позволяющая узнать угол поворота (rotation) объекта на карте, или может быть какой то хитрый способ это узнать? GetObjectPosition насколько я понял узнаёт только (икс, игрик,"этаж"), или я это неправильно понял?
Аватар пользователя
8 лет назад
Как изменить двеллинг, так чтобы с помощью него нанимались другие существа?
В ответ пользователю Андраил
Аватар пользователя
8 лет назад
Вот так.
Jack_of_shadows
заменить двеллинг на другой с помощью:
ReplaceDwelling(СКРИПТОВОЕ_ИМЯ, ИДЕНТИФИКАТОР_ГОРОДА, СУЩЕСТВО_1, СУЩЕСТВО_2, СУЩЕСТВО_3, СУЩЕСТВО_4)
Сколько существ было доступно в изначальном двеллинге, столько максимум может быть в новом. Существ можно выставлять каких угодно, без привязки к типу двеллинга.
Аватар пользователя
8 лет назад
А как идентификатор города выглядит? И существо по ID выставлять, да?
В ответ пользователю Андраил
Аватар пользователя
8 лет назад
Город выглядит как TOWN_HEAVEN и тому подобное, существа да по id, примерно CREATURE_PAESANT или вроде того. Есть целая экселевская таблица с перечислением этих значений.
В ответ пользователю zahar0z
Аватар пользователя
8 лет назад
И снова доброго времени суток всем.

Кто нибудь может подсказать есть вариант при помощи скрипта сделать доступным для постройки только четыре двеллинга в городе? Т.е. до постройки четырёх строений, доступны для постройки все двеллинги, как только построено четвёртое, те что не были выбраны становятся недоступны. При этом, не должно быть привязки к конкретному уровню нанимаемых существ, т.е. нужно сделать так чтобы можно было построить любые четыре двеллинга (например, комбинацию ур1,2,4,7 или ур3,4,6,7 и т.п.). Есть у кого нибудь идеи как такое можно провернуть?

Заранее благодарю если кто поделится полезной информацией.
Аватар пользователя
8 лет назад
zahar0z делаете проверку скажем в триггере нового дня. Проверять надо все возможные двеллинги, подсчитывать сколько построено, и когда условие выполнено запрещать те которые не построены. Вот описание подходящих функций из руководства Новика (я их лично не проверял):
nLevel GetTownBuildingLevel( sTownName, nBuildingID )
nLevel GetTownBuildingLimitLevel( sTownName, nBuildingID )
nLevel GetTownBuildingMaxLevel( sTownName, nBuildingID )

Функции позволяют узнать уровень/лимит на развитие/максимальный уровень здания nBuildingID в городе с именем sTownName. Соотв. константы TOWN_BUILDING_* для nBuildingID см. в /scripts/advmap-startup.lua. Сюда писать не буду ввиду большого объема.
Уровень 0 означает, что соответствующее здание отсутствует.

void SetTownBuildingLimitLevel( sTownName, nBuildingID, nLevel )

Функция позволяет выставить лимит на уровень развития здания nBuildingID в городе с именем sTownName. При попытке выставить уровень больше максимально возможного вызов функции приводит к ошибке. Уровень 0 означает запрет на строительство здания.
В ответ пользователю RedHeavenHero
7 лет назад
RedHeavenHero
Спрашивай, что нужно конкретно — отвечу. А так - мануальчики типа "от чайника к чайнику" уже имеются, есть даже огромная эксцелевская таблица с описанием всех функций, что имеются в игре.

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

Не подскажет кто-нибудь, есть ли скриптовая команда по которой можно проиграть видеофайл? Чего-то листал список задокументированных команд и не нашёл такую. Но по идее она должна быть т.к. как-то же реализована видео-вставка со "злой" изабель, в конце оригинальной игры.
Аватар пользователя
7 лет назад
Не, нет такой. Видеовставка скорее всего реализована не на карте, а после её окончания (или я чего не помню).

Статистика

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

Сейчас на сайте 9 пользователей 1359 гостей