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

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


Svoboда

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

21.10.2023 в 18:54, Капрал Хикс сказал:

в оригинале ТЧ можно влиять на голод ГГ скриптами? Скажем, повесить на апдейт увеличение сытости при наличии в инвентаре определённой брони?

в чистом ТЧ нельзя, надо ставить правки/другой движок X-ray Ext/OGSR где игровому объекту актор добавлен метод движка db.actor.satiety = нужное значение, в оригинале же можно например скриптом заспавнить еду и заставить игрока её съесть, чтоб убрать голод, в оригинале ТЧ только 2 фактора влияют на голод, это время - уменьшает сытость и еда -увеличивает, больше ничего не влияет(

  • Нравится 1
  • Согласен 1
  • Полезно 2

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


Ссылка на сообщение
28 минут назад, Zander_driver сказал:

А вот +x или +z считается направлением "вперед" в X-Ray... блин, уже не помню

наверное это ещё зависит от того как ориентирована сама локация/плоскость на которую ставиться объект, потому что если сама плоскость или лока ориентирована не строго по осям в глобальной системе коорд-т, то чтобы объект подвинуть вперёд возможно надо уменьшать x, а на какой-то плоскости z, а на третьей и x и z или наоборот, вообще чтоб представить положение объекта в 3D-пространстве на 2D-мониторе довольно трудно, тут надо иметь или хорошее воображение в голове или 3 Д шлем/очки или сделать модель в реальном мире и подвигать её физически:)

  • Смешно 1

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


Ссылка на сообщение
12 минут назад, Zander_driver сказал:

"Вперед" - это ведь ВСЕГДА, понятие в локальной системе координат объекта. Не зависит и не может оно зависеть от локации, где объект находится.

так ты сам себе противоречишь если говоришь, что ВПЕРЁД это локальное понятие, а потом что оно не может зависеть от локации:) когда мы говорим вперёд то по логике имеем ввиду вперёд относительно чего-то, в глобальном понимании это не имеет смысла, как представь объект, который летает в космосе, в глобальной системе коорд-т, да он может подвинуться типа вперёд (двинуть по оси z например), но это не имеет никакого смысла, потому что там нет ни лева/права, верха/низа, вперёд/назад, это всё приобретает смысл только относительно ещё какого-то объекта или плоскости, так же как ты можешь идти вперёд по улице в своём городе строго прямо и на север по компасу) но это вперёд относительно поверхности Земли, в глобальной системе коорд-т ты можешь в этом момент двигаться по вектору между осями z, y, x одновременно, который ещё и меняет направление в течении дня, т.к. Земля ещё движется вокруг Солнца и своей оси, так что когда говоришь вперёд это локально и зависит от локации, глобальное вперёд может и существует, но не имеет смысла на практике.

  • Жуть! 1

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


Ссылка на сообщение
16 минут назад, Zander_driver сказал:

3D-движок, действующий по вашим правилам пространственной геометрии?

я же не говорю что движок работает не так, понятно что движок работает по глобальной системе, он же не может подстраиваться под каждую локацию, я говорю о том что это малоудобно практически, человек хочет подвинуть объект вперёд на локации относительно самой локации, относительно других объектов, и по твоему совету двигает по оси Z типа вперёд, уменьшая эти коорд-ты, а у него по факту, этот объект по твоему совету, двигается не вперёд, а вправо и назад например, потому что так ориентирована локация, и что ему дело до твоего движка и теоретических рассуждений:biggrin:

Изменено пользователем CiberZold
  • Не нравится 1

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


Ссылка на сообщение
4 часа назад, Stalkersof сказал:

Я вообще отказался от этой затей записывать в сейф условия

да а условие, которое висит на постоянном апдейте не намного лучшее решение:)

 

24 минуты назад, I am Dead сказал:

не советую пользоваться пстором, у движка есть некое хранилище где можешь что то сохранять.

так это же только в ОГСР, а где он написал что работает на этом движке?

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


Ссылка на сообщение
1 час назад, Stalkersof сказал:

В скрипте я только отключаю солнечные лучи во ночное время

делая это на каждом апдейте, ты заставляешь процессор обрабатывать это условие каждый такт процессора, хотя само условие тебе нужно два раза в сутки ,чтоб сработало, включилось вечером и отключилось утром, оптимизация скрипта таким образом плохая) может условие повесить наоборот при запуске игры, загрузке уровня или сейва, а лучше для оптимизации и мне как юзеру, да и большинству юзеров думаю тоже хотелось бы самим выбрать, что им больше нравиться - играть с объёмными лучами или с ОГСЕ-саншафтами, кому то может наоборот эти объёмные нравятся, зачем юзера так ограничивать:)

  • Нравится 1
  • Согласен 1

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


Ссылка на сообщение
12 минут назад, Zander_driver сказал:

Ну сгущать краски-то не надо.

ну да с тактом я переборщил, сначала хотел просто написать 1 милисекунду, но потом для большего нагнетания написал про такт:)

  • Смешно 1

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


Ссылка на сообщение
12 часов назад, Stalkersof сказал:

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

если у тебя ТЧ-погода, то можно поиграться с секциями flares в конфигах погоды для ночных часов, также в конфигах динамической погоды есть такие параметры как sun_shafts_length и sun_shafts можно тоже их уменьшить значение или скрутить в ноль.

 

как по мне объёмные лучи ночью неплохо выглядят, вот мод с ТЧ-погодой, который я перевёл на ОГСР (динамическая погода в основе Atmosfear) ясная погода при полной луне, объёмные лучи, в конфигах стоит:

sun_shafts        =    2.03
sun_shafts_length         =    1.0                
flares        =     moon

Скрытый текст

putsun.jpg

 

Изменено пользователем CiberZold
  • Нравится 1

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


Ссылка на сообщение
4 часа назад, Stalkersof сказал:

Мне этот эффект ночью не нравится. У вас картинка синюшная именно от лучей.

ну вот тебе не нравится, а кому-то нравится, лунный свет - синий, и зачем скриптом принудительно отключать? те кому не нравиться сами отключат объёмные лучи в консоли, а кому нравится продолжать так играть, если ты конечно хочешь делат ьмод для людей, если для себя - то крути как хочешь и скрипты тоже:)

37 минут назад, Stalkersof сказал:

Да и я использую 181 ревизию движка еще со всеми рендерами

да тот движок который со всеми рендерами, только ТЧ-погоду поддерживает ,вот как у меня на скрине типа такой)

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


Ссылка на сообщение
31 минуту назад, Colder сказал:

Как в труп заспавнить предмет?

как вариант, в файлах characrer desc в описании непися которому ты хочешь дать предмет, ты же я так понимаю хочешь дать предмет конкретному неписю-трупу ,а не просто рандомному созданной на этой секции, так вот в файлах описании в секции [spawn] прописываешь нужные предметы, а потому убиваешь непися через спавн ставя ему health = -1 , и вещи из этого файла должны быть при нём + те которые заспавнит death_manager.script

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


Ссылка на сообщение
09.02.2024 в 20:11, Colder сказал:

obj:on_death()

а где ты откопал метод on_death() для а-лайфного объекта, и что он должен делать? так спавнили трупы в старых солянках, но там ещё был и файл логики, где прописывали скрипт по которому убивали непися, так что я не уверен что этот метод рабочий остался для ОГСР.

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


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

@kenguru а почему виноваты в переполнении памяти именно инфопоршни ,вылетать по памяти может и из-за скриптов (скорее всего) перегружающих проц и память, и и из-за настроек графики и информации относящейся к алайфу (неписи, монстры их память), в памяти также хранятся данные динамических физ объектов и пр. мусора, если у тебя всего этого много, вылеты последует на чистом движке ТЧ точно, ОГСР в этом плане получше, но беды со скриптами от мододелов он не исправит.

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


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

@kenguru если у тебя старый сюжет остался то ты там особо не разгуляешься, там большая часть поршней нужна чтоб этот сюжет двигать, я бы тогда вообще оригинальный сюжет вырезал вместо с поршнями и прочими хвостами, ну если в моде и так много заданий то зачем ещё и оригинальный всем надоевший сюжет тянуть, но понимаю объём работы  - вырезать все хвосты оригинала за это время можно небольшой новый мод сделать )

  • Нравится 1

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


Ссылка на сообщение
2 часа назад, kenguru сказал:

и мне жуть как ручонки чешутся потереть все заюзанные и окаменевшие из них

понятно, но это будет непросто, тут или удалять по ходу игры, отслеживать постоянно какой инфопоршень выдался по info_id, а потом его отключать, но чревато что в будущем можешь сломать какой-то диалог или сценку ,или уже в конце поняв какие сюжетные какие нет, перед фриплеем их все сразу задисейблить.

  • Согласен 1

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


Ссылка на сообщение
1 час назад, Balavnik сказал:

но create похоже ничего не возвращает

create создаёт причём серверный объект, alife() как бы намекает, id игра сама рандомно присваивает игровому объекту цепляя цифру к названию секции на которой создан объект, поэтому этим id никто обычно не заморачивается, а обращается к объекту или через стори ид, или по имени, по поиску нужной строки в имени секции.

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


Ссылка на сообщение
9 часов назад, Balavnik сказал:

Я видимо ещё не до конца понял многих тонкостей концепции алайфа.

чтоб не париться с id (там проблема что id можно получить от объекта к которому обращаешься в конкретной функции), а если тебе надо удалить в влюбой время ,в любом месте на любой локации серверный объект обычно юзают цикл перебора всех алайф объекту и по имени удаляем.

for a=1,65635 do
    local obj=alife():object(a)
        if obj and string.find(obj:name(),"bar_dolg_respawn_3") then
         alife():release(obj, true)
       end
 end

  • Сомнительно 1

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


Ссылка на сообщение
2 часа назад, Kirgudu сказал:

"Обычно" наоборот, стараются так не делать

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

 

2 часа назад, Kirgudu сказал:

Первая: после нахождения объекта с именем "bar_dolg_respawn_3" цикл не остановлен и продолжится до достижения максимального числа 65535.

в чём ошибка ,если как раз и нужно удалить всех неписей, пример с bar_dolg_respawn_3 был не для повторения вслепую, а для общего шаблона так сказать.

 

особенно мой пример как раз хорош ,когда надо удалять заспавненных по скрипту нпс) потому что те нпс которые спавнятся через аллспавн им можно задать имя в самом алл-спавне и к ним можно обращаться по этому уникальному имени, а те что созданы через alife():create им игра сама назначает имя, прибавляя числа случайные к названию секции на которой они созданы, поэтому неписей с именем частью которого будет секция bar_dolg_respawn_3 вполне может наспавниться много, и вот чтоб их всех удалить их разом мой метод как раз самое то ,ну если я правильно понял задачу автора вопроса)

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

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


Ссылка на сообщение
2 часа назад, Kirgudu сказал:

Где было написано про удаление всех?

даже если надо удалить одного, секция bar_dolg_respawn_3 подразумевает, что это какой-то респавн, за то время пока дойдёт до ручного спавна и удаления, игра сама может наспавнить несколько неписей на этой секции и они будут с этой строчкой в имени, также как и нужный нам непись, потому можно и удалить их всех скопом вместе с нужным нам нпс, здесь делать выход из цикла после первого удалённого как раз приведёт к тому, что мы можем удалить левого нпс, а нужного нет, потому цикл надо довести до конца, чтоб он удалили всех с похожими именами (бесполезных сим неписей) и заодно и нужного на удаление:)

  • Жуть! 1

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


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

@Labadal в _g.script например делаешь такую функцию

sys_ini = system_ini()

function get_string( section, param, def_val, ini_file )
  local ini = ini_file or sys_ini
  if ini:line_exist( section, param ) then
    return ini:r_string( section, param )
  else
    return def_val
  end
end

 

потом в нужном тебе скрипте в любой функции вызываешь

get_string( "секция", "значение", "дефолт значение" ) --- это будет строчка из системного конфиг файла, для игры он делится на секции, а не на файлы, на файлы разделяют люди для удобства, потому тебе надо найти секцию с иммунитетами актора это [actor_immunities_gd_novice] если тебе новичок нужен и в ней значение burn_immunity

то есть чтоб играла прочитала это значение надо задать get_string( "actor_immunities_gd_noviceve", "burn_immunity", "0,3" )

  • Спасибо 1

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


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

@Labadal ну так посмотри в _g.script какие функции вызываются этой функцией start_game_callback(), и уже их в свою очередь просмотри, что гадать то.

по умолчанию там точно должны быть task_manager.clear_task_manager() и  dialog_manager.fill_phrase_table() вот тут и могут крыться проблемы с нпс.

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


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

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