Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

herurg,

это вольный и не совсем точный пересказ se_respawn.script и xr_gulag.script

Если коротко, то респавнеры в ТЧ при спавне пытаются пристроить НПЦ в какой-нибудь гулаг. Если не получается, то заспавненный НПЦ сразу же уничтожается. По-видимому ты для своих изломов не сделал гулага, вот респавнер якобы и не работал.

Для принятия в гулаг нужно выполнить кучу условий: там должны быть свободные работы, НПЦ должен подходить гулагу по группировке и прочее...

 

Одна из не точностей кстати, что на локации с респавнером должен быть гулаг. Гулаг может быть где угодно, главное чтобы НПЦ туда могли взять. В том же ТЧ все ровно наоборот - гулаги заполняются респавнерами, находящимися на других локациях. Из-за этого на свалке у ангара может возникать непрерывный поток бандитов, так как свалка фактически представляет собой перекресток для НПЦ, расходящихся по своим гулагам.

 

Хочешь точно знать, что происходит - изучай скрипты, а так довольствуйся тем, что для респавнящихся НПЦ должно быть свободное место в гулаге

Поделиться этим сообщением


Ссылка на сообщение
По делу:

У тебя несколько раз вызывается self:Register(...), но метода ms:Register(...) в файле нет - наводит на подозрения

Register - функция из lua_help. Ставит в соответствие контрол и строчку. По этой строчке потом коллбеки привязываются к уи-событиям - первый параметр в функции AddCallback

 

Ошибка скорей всего в том, что сначала контрол назвали btn_1, а потом сделали коллбек btn_1

Можно попробовать обозвать коллбек например OnBtn1Pressed

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение

panzyuza,

Может так:

[smart_terrains]

esc_lager = {=time_ust(6:8)}

esc_fabrika_bandit = {!time_ust(6:8)}

 

Поделиться этим сообщением


Ссылка на сообщение

*Shoker*,

функция add_restrictions(in_restrictions, out_restrictions)

добавляет соответственно in и out рестрикторы

Но способ то этот всеми используется, в том числе и в АМК для обхода аномалий. И это из-за него куча вылетов: в соседней теме очередной вылет, что недоступна точка пути.

При удалении аномалии, которая у кого-нибудь в рестрикторах прописана, будет безлоговый вылет.

Поделиться этим сообщением


Ссылка на сообщение
А я думал, все используют старый метод, когда просто НПС поворачивается от аномалии.

Спасибо за ответ. Надо будет глянуть, правда не совсем понятно как из аномалии in\out рестрикторы выдрать.

ничего выдирать не надо. Все аномалии унаследованы от рестриктора. Просто передаешь таблицу из нужных аномалий в функцию и все. Посмотри как используется в АМК или в описании функций Маландринуса.

Понятие in, out применяется уже к НПЦ. В in-рестрикторы НПЦ нельзя заходить, Из out-рестрикторов выходить. (Вроде так - лучше уточнить - все время путаю). То есть аномалии добавляются только в тот тип рестрикторов, куда нельзя входить.

 

Обход без рестрикторов был в первых версиях у Red75, и то он потом на рестрикторах сделал, все остальные обходы делались на рестрикторах

 

Суть в том, что хочу перед вызовом функции пустить счётчик, а после вызова функции остановить и глянуть, сколько времени прошло после вызова функции.

Специально для этого есть класс в lua_help profile_timer.

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение
А вот про watchdog интересно, как он должен работать?

Вотчдог следит за тем не завис ли биндер ГГ. Работа основана на том, что вызовы апдейта для биндеров ГГ и НПЦ идут поочередно.

Поэтому в начале actor_binder:update инициализируем какую-либо переменную (amk.oau_watchdog) значением 100 и после вызова функции или группы функций присваиваем меньшее значение. В конце actor_binder:update присваиваем этой переменной 0.

В апдейте биндера НПЦ motivator_binder:update проверяем эту переменную на 0. Если биндер ГГ завис, то апдейт до конца не дойдет и переменная будет не нулевая. По значению переменной можно определить место зависания.

 

Такую же шнягу можно провернуть и для биндеров НПЦ.

Поделиться этим сообщением


Ссылка на сообщение

Виталкер,

level.spawn в игре не работает. Используется в СДК.

А дерется машина из-за того, что погружена немного в землю или в другое препятствие. Когда ты ее касаешься для машины активируется просчет физики и она выпрыгивает из земли, попутно убивая ГГ. При стрельбе просчет физики активируется издалека :) Надо просто чуток скорректировать координаты спавна машины

Поделиться этим сообщением


Ссылка на сообщение

Stalkersof,

Кстати, а ты проверил - в твоих неисследованных областях аи-сетка то есть? :) А то НПЦ там не задержатся и убегут туда где аи-сетка есть

Поделиться этим сообщением


Ссылка на сообщение

Ulman,

Эта таблица не используется :) Так население не уменьшишь

Если по скрипту ниже пройдешь, увидишь, что все обращения к simMaxCount закомментированы

Поделиться этим сообщением


Ссылка на сообщение
abramcumner, да это вот только что тоже заметил, но ещё увидел, что одно обращение всё таки есть:

        local gl = simMaxCount[k]

Это не оно? Если всё таки это не сработает, то каким способом можно уменьшить?

Нет, даже по названию это функция для сбора статистики, на население никакого влияния не оказывает.

Уменьшить можно только поставив скрипт для редкого респавна. В той же солянке он есть. В нем se_respawn.script как раз и правится.

 

Ну или уменьшив население и количество гулагов :)

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_,

у машины небось стоит маленькая масса, а у гранаты большой импульс - обычная физика :) Скажи спасибо, что машина вообще не взрывается.

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение

Mass,

:))

А зачем ты сделал, то что сделал? А если аборт переставить в начало функции, то вылезет очень много проблем и в оригинальной игре.

Скажи в чем по-твоему заключаются проблемы?

Поделиться этим сообщением


Ссылка на сообщение
3. По координатам респавнера, по которым разработчики его прописали, можно видеть, что место спавна бандитов - довольно закрытый уголок Кордона у заваленного прохода на ТД, т.е. возле АТП. Учитывая, что при выборе работы в гулагах учитывается и расстояние (выбирается работа ближайшего гулага), ясно, что разработчиками задумано, что бандиты заспавненые этим рестриктором должны в первую очередь попадать в АТП-шный гулаг 'esc_fabrika_bandit' (если там конечно были бы свободные работы).

Неверно. В теории может и должны, но на практике такого никогда не будет.

Не забывай, что мы не в топике по оригинальной игре и то, что давным давно уже сделано и работает в некоторых модах твое категоричное "неверно" и "никогда" опроверкает именно практикой! Не глаголь "истины" и не окажешся неправым. --/ Artos

Когда этот респавнер заработает, гулаг с бандитами уже будет заполнен из других респавнеров. На практике бандиты из респавнера esc2_respawn_bandits_fabrika идут куда угодно, но не на esc_fabrika_bandit. Почему - смотри ниже.

 

Если эти доводы не являются достаточно логичными и очевидными для слов о 'связи респавнера и гулага' - то ... справку от разработчиков я конечно не предоставлю, а дальше убеждать/доказывать - не намерен.

Сама игра это доказывает: После выноса бандитов с АТП и пробежки за квестовой курткой для Шустрого, порой можно встретить в том районе заспавнившуюся именно этим респавнером. кучку бандитов, бредущих на АТП. Если их не трогать - они и оседают на АТП, зачистив его от разведчиков Толика (если те еще живы).

Игра доказывает обратное - просто посмотри то, о чем говорил =VENOM= и все поймешь.

В онлайне респавнеры не работают из-за неуказанного respawn_radius. Поэтому гулаги заполняются респавнерами, находящимися на другой локации. А бандиты идут вовсе и не на АТП - просто гейм-граф такой.

 

Меньше пустопорожних измышлений, больше практики :)

Поаккуратнее в выражениях, даже улыбаясь следует выбирать слова. А попрактиковаться тебе бы не помешало, а не зашориваться только на кодах оригинала. --/ Artos

 

Добавлено через 19 мин.:

=VENOM=,

если хочешь, чтобы респавнеры работали в соответствии со своими названиями, то прописывай им respawn_radius. Но не уверен что это хорошая идея - может получаться как на свалке у ангара - непрерывный поток НПЦ. Сейчас от момента спавна до прибытия на точку проходит достаточно много времени именно из-за того, что НПЦ далеко идти от респавнера. А если бы все было как говорит Artos, то не успел бы обшмонать бандитов на АТП, как туда уже новые входят :)

 

Оффтоп.

Вообще надо сделать один респавнер на всех на Кордоне - типа в зону приходят. Он штампует сталкеров новичков. На кордоне посадить вербовщиков в долг/свободу/бандиты. Сталкеры подходят к ним, болтают и решают куда вступать. Собираются группами и дуют на базы группировок. А уже оттуда пусть расползаются по всей зоне :) В зомби пусть попадают зомбированные сталкеры, в монолит полу зомбированные.

Типа симуляция.

Ну или выставить им по одному респавнеру на базах.

Изменено пользователем Artos

Поделиться этим сообщением


Ссылка на сообщение

*Shoker*,

возможно передается урон еще до ослабления защитой.

Посравнивай hit_power и всякие коэффициенты защиты у НПЦ

Ну и 35 это как-то много - ты на 100 что ли умножил?

Поделиться этим сообщением


Ссылка на сообщение
До ЗП, у игры небыло колбека на использование вещи (self.object:set_callback(callback.use_object, nil))

Твоя функция просто не вызывается. Все модеры в ТЧ/ЧН используют колбек на потерю предмета из инвентаря и проверяют, что он был удалён (какбэ использован) Думаю в солянке его стоит искать в amk.script

Нее - нее, коллбек на использование вещи был всегда, начиная с ТЧ. И работал тоже. Просто его не использовали.

 

ХЕМУЛЬ36RUS,

Странный вызов функции

zvuki.script.use_snd(obj)

Надо

zvuki.use_snd(obj)

Поделиться этим сообщением


Ссылка на сообщение
*Shoker*, из того, что я написал про q8 выше, оно переводится в нормальный float так: float = (q8/255)*2 -1. Подставь свое значение, получишь как раз примерно 1. Кстати, а почему 256? Разве не должен выдавать 255, он же 8 бит читает?

Неверно. Для updcondition диапазон от 0.0f до 1.0f. Ну и формула соответственно q8 / 255

 

Поделиться этим сообщением


Ссылка на сообщение

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

personal_goodwill_limits = -1000, 1000

 

То есть запросто что-то может не так работать, если менялся game_relations.ltx

 

Добавлено через 24 мин.:

Ну и кстати функции relation и set_relation не симметричны.

set_relation устанавливает личную благосклонность или лучше писать "личное отношение"(personal_goodwill) из game_relations.ltx

 

а relation возвращает attitude из game_relations.ltx приведенный к перечислению ERelationType. Только приводится в соответствии с константами

;пороговые значения для отношения персонажей

attitude_neutal_threshold = -400 ;когда attitude меньше значения, то выставляется ALife::eRelationEnemy

attitude_friend_threshold = 500 ;когда attitude меньше значения, то выставляется ALife::eRelationNeutral, иначе ALife::eRelationFriend

 

ну и general_goodwill тоже возвращает attitude :) только в численном виде.

 

Так что проблемы скорей всего в этом. То есть на отношение влияет еще куча слагаемых.

Изменено пользователем abramcumner

Поделиться этим сообщением


Ссылка на сообщение

Лёха_тц,

тебе же 5 страниц назад отвечали: спавнишь как physic_object, в custom_data надо прописать fixed_bones, чтобы модель не двигали. Ну и в огф должна быть сделана кость.

У тебя огф то есть?

 

Ну и после спавна надо еще рестриктором будет накрыть, чтобы нпц сквозь твое укрепление не ходили. Ну и если что, прятаться за ним они тоже не будут.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...