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

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

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

  Информация (Показать)

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

  Читать рекомендуется. (Показать)

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

Какая игра? По идее трупы монстров должны попадать в общий чистильщик (правда я не видел, где это происходит, так что не уверен, кто в курсе как именно игра их удаляет?) и пропадать по превышению определённого кол-ва тел.

 

Функцию можешь такую:

function clear_monster_corpses()
    for id = 1, 65534 do
        local obj = level.object_by_id(id)
           if obj~=nil and isMonster(obj) and not obj:alive() then
             local sobj = alife():object(id)
             alife():release(sobj, true)
           end
      end
end

 

Это грубый вариант, при его вызове будут удалены все трупы монстров, которые в данный момент в онлаине и есть на текущей локации. То же касается квестовых трупов монстров (хотя таковых в оригинале я не припомню :D) Так что учти если что.

 

 

Кстати, а существует ли способ удалить объект из игры, не получая его серверного объекта?

 

SibireaStalker

ЗП? Тогда квест вроде правильно вызываешь, а вообще стоит сперва попробовать самому вызвать в игре, а если не работает, то тогда уже писать тут. :)

 

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

*Shoker*, учитывая, что все монстры 'биндятся', а это значит, что заносятся в таблицу db.storage, итерировать по всему списку игровых ID расточительно. Достаточно:

for id,v in pairs(db.storage) do
  if level.object_by_id(id) then
    local sobj = alife():object(id)
    if sobj and IsMonster(sobj) and not sobj:alive() then 
      alife():release(sobj, true)
    end
  end
end

 

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

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Можно ли как-то отключить удаление лута из инвентаря трупов, путём редактирования death_manager.script?

Лучше спросить глупость, чем её совершить.

Ссылка на комментарий

лнкс

Разберись о чем говоришь и что отключать хочешь - тогда переформулируй вопрос.

Loot - ограбление/грабить/мародерствовать

В игре под 'лутом' подразумевается: удаление части предметов находящихся в трупе и доспавн в труп некоторого набора предметов, которых в трупе не было.

Т.о. "удалить лут из инвентаря" невозможно, т.к. это действие (удаление+спавн).

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

 

Можно - а) не удалять предметы из трупа, можно - б) не спавнить предметы в труп, можно - с) и то и другое (т.е. отменить лут).

Соответственно и пути решения различны.

 

 

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Удаляются ножи, пда, фонарики,детекторы и прочее. Меня интересует отмена этого удаления. Теперь понятно?

Лучше спросить глупость, чем её совершить.

Ссылка на комментарий

Как выдать квест через логику при вхождении в определенный смарт

 

1. Прочти п.6 в шапке темы.

2. Если ты ждешь готовой статьи или готового кода для твоего решения - думаю что врядли дождешься.

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

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

--/ Artos

Изменено пользователем Artos
Ссылка на комментарий

лнкс

Для однозначного понимания вопроса нехватает еще малости - читаем в шапке:

  Цитата
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;

Поэтому привожу только один вариант применительно к версии игры ТЧ:

В скрипте 'death_manager.script' в строке 177 (в самом конце функции 'keep_item') закомментируй (поставь впереда строки '--') так:

 

--alife():release(alife():object(item:id()), true)

 

Если иная версия игры иль правленый файл (из мода) - делай по аналогии. Понятно?

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Здравствуйте у меня происходит вылет когда заканчивается монолог сидора вот с таким логом

  ТЫК (Показать)
Ссылка на комментарий

dark_stalker

Это один из трудно выявляемых типов ошибки. Поиск причины возможен только на конкретных кодах мода.

Где-то в кодах у тебя образовалась зацикленность, что приводит к переполнению стека.

Искать и разрывать цикл. Подспорьем может быть определение объекта (имени) в том эвалуаторе из 'state_mgr.script' на который указывает запись в логе и искать циклы связанные с этим объектом.

Но, вполне возможно, что спавнится некий объект (НПС/моб) по некорректной позиции (типа "в стене") и не может выбраться ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

А какой имено обьект опредилить возможно?

Это может быть из за того что я аи сетку изминил?

Изменено пользователем dark_stalker
Ссылка на комментарий

Не 'какой', а 'как'. Тебе нужен именно тот, для которого зациклились вызовы стейт-менеджера. Какой именно - только самому смотреть и анализировать.

Выведи в лог имя объекта 'self.object:name()' в том эвалуаторе, к которому принадлежит строка указанного в логе ошибки - получишь всех, которые движутся. По часто и/или последнему упоминающемуся имени и ищи ...

 

Ну и естественно, сменив сетку AI следует перепроверить/скорректировать все координаты ...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Как узнать код клавиши из user.ltx? Поясню:

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

Freedom

Ссылка на комментарий

_Призрак_

Прочитать файл 'user.ltx' и из него взять значение интересующего тебя параметра (bind wpn_2 k2).

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

 

  Пример чтения параметра vid_mode из user.ltx (Показать)
Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Здраствуйте.

Вот создал нового торговца в ЗП, и прописал ему такую логику:

  логика (Показать)
Изменено пользователем Artos
Ссылка на комментарий

Всем доброго времени суток! У меня вот такая проблема, я уже писал про неё, но ответов так и не получил. Дело вот в чём, у меня стоит Медицинская резинка и спецназовские часы от Вергаса и я заметил такую "пакость" очень часто, когда я лечу раненных товарищей, то они благодарят, становятся друзьями, пытаются встать на ноги и сразу же падают, то есть их аптечка не вылечила. Вот как это исправить, очень нужно, заранее спасибо!

 

P.S. Пытался обращаться к автору мода, но к сожалению его очень давно нет на форуме, с июня этого года.

 

 

Ссылка на комментарий

Ulman, так ты будешь о-о-очень долго спрашивать.

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

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

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

Однако, если величина увеличения здоровья ('eat_health'), которую дает съеденная аптечка недостаточна для достижения порогового значения, по которому определяется ранен ли НПС - то вновь включится схема ранения и НПС примет соответствующую позу.

"Резиновая аптечка", как помнится, именно и предназначена для затягивания процесса выздоравливания (хотя вроде только для актора). Если она (аптечка) в своем конфиге имеет малое значение 'eat_health' - то и не будет вылечивать 'за раз'.

 

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

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

Строка лога ошибки: 'xr_logic.script:939: bad argument #1 to 'gfind' (string expected, got nil)' - говорит о том, что в функцию xr_logic.parse_condlist(npc, section, field, src) не был передан аргумент 'src' (т.е. некое значение параметра для некоей схемы).

Попробуй в начало функции 'parse_condlist' поставить вывод в лог значений npc:name(), section, field - тогда сможешь понять, для какого НПС из какой схемы и в каком параметре у тебя ошибка.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Ulman

Из того что приходит в голову

1) В случае лечения нпс через диалог, вызывать функцию которая принудительно восстановит здоровье непися до нормы

2) При передаче "резиновой аптечки" нпсу, заменять ее на "обычную", которая восстанавливает здоровье как в чистой игре.

У меня в своей реализации постепенно действующих аптечек сделано по второму методу

  dialogs.script (Показать)

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Zander_driver

Думаю нет и не будет потребного для тебя 'справочника' (по многим причинам).

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

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

 

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий

Заспавнил торговца через смарт терраин. Получил вылет.

Что не так вот здесь:

  Раскрывающийся текст (Показать)
Изменено пользователем Artos
Ссылка на комментарий

zoidberg123456789, у тебя почему то нет смарта darkscape_stalker_smart. Проверь запаковал ли ты спавн, без ошибок запаковался ли спавн, не забыл ли ты его потом переименовать из all.spawn.new в all.spawn

 

Указывай, плз, адресата в своем ответе. --/ Artos

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

Freedom

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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