Случайная подборка модов
Sins of the past. Пролог
3.3
Doomed to Eternal Torment
3.9
Путь во мгле
4.5
День одиночки
1.6
Упавшая звезда. Честь наемника
4.2
Winter Mod
3.9
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  Wolfstalker
Среда, 24.02.2016, 00:25 | Сообщение # 1
Статус:
Легенда:
Сообщений: 2258
Награды: 15
Регистрация: 05.04.2010

В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга


• Не флудить
• Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там
• В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти




F.A.Q

  Злобная реклама
Среда, 24.02.2016, 00:25
Статус:
Сообщений: 666
Регистрация: 05.04.2010
Российская Федерация  Overfirst
Четверг, 14.12.2017, 23:17 | Сообщение # 9241
Статус:
Бывалый:
Сообщений: 1081
Награды: 19
Регистрация: 11.06.2015

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

Для нужной ветки вместо семи привычных has_info пишем:
Код
<precondition>file.check_info_nimble</precondition>

В file.script кидаем:
Код
function check_info_nimble()

local all_count = 7 -- сколько всего инфопоршней
local has_count = 0

   for i = 1, all_count do
      if has_alife_info("complete_nimble_dialog_" .. i) then
         has_count = has_count + 1
      end
   end

   return has_count < all_count -- полученных поршней должно быть меньше предельного количества.

end

complete_nimble_dialog_ меняешь на своё значение.
Если поршни имеют совершенно разное название, заполняем таблицу:
Код
function check_info_nimble()

local has_count = 0
local info_table = {"info_pm_nimble", "info_ak74_nimble", "info_fort_nimble"} -- и т. д. заполняем

   for i = 1, #info_table do
      if has_alife_info(info_table[i]) then
         has_count = has_count + 1
      end
   end

   return has_count < #info_table -- число полученных поршней должно быть меньше длины массива info_table.

end

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

Когда поршней много, я юзаю такие конструкции, ибо удобнее получается, чем в xml, имхо.
  Злобная реклама
Четверг, 14.12.2017, 23:17
Статус:
Сообщений: 666
Регистрация: 11.06.2015
Украина  BozKurt
Пятница, 15.12.2017, 00:18 | Сообщение # 9242
Статус:
Опытный:
Сообщений: 1753
Награды: 3
Регистрация: 25.05.2012

BoBaH_671, а зачем их вообще все проверять, если можно найти первый не выданный и забить на остальные?
Код
function check_info_nimble()
    local info_table = {"info_pm_nimble", "info_ak74_nimble", "info_fort_nimble"}
    for i = 1, #info_table do
        if not has_alife_info(info_table[i]) then
            return false
        end
    end
    return true
end


Можно, да, только вот это ничего не поменяет, в частности время выполнения. smile
BoBaH_671
Сообщение отредактировал BozKurt - Пятница, 15.12.2017, 00:18
  Злобная реклама
Пятница, 15.12.2017, 00:18
Статус:
Сообщений: 666
Регистрация: 25.05.2012
Российская Федерация  Graff46
Пятница, 15.12.2017, 02:53 | Сообщение # 9243
Новое Время
Статус:
Бывалый:
Сообщений: 867
Награды: 7
Регистрация: 02.05.2013

У меня вопрос: В ТЧ левел вертексы идут по порядку по номеру также как и в пространстве? Т. е. за 5 лВ на террейне идёт 6-й, не может быть такого, что 5 и 6 вертексы в разных углах локации?
  Злобная реклама
Пятница, 15.12.2017, 02:53
Статус:
Сообщений: 666
Регистрация: 02.05.2013
Российская Федерация  denis2000
Пятница, 15.12.2017, 10:59 | Сообщение # 9244
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Graff46, Нет близость индексов не означает близость геометрическую.
  Злобная реклама
Пятница, 15.12.2017, 10:59
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Украина  aleksstalker
Пятница, 15.12.2017, 18:50 | Сообщение # 9245
Статус:
Новичок:
Сообщений: 245
Награды: 2
Регистрация: 19.01.2017

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

Логика в секции спавна:


Вей поинты
  Злобная реклама
Пятница, 15.12.2017, 18:50
Статус:
Сообщений: 666
Регистрация: 19.01.2017
Российская Федерация  YTroll
Пятница, 15.12.2017, 19:27 | Сообщение # 9246
Статус:
Бывалый:
Сообщений: 824
Награды: 13
Регистрация: 09.11.2012

подскажите пожалуйста, как корректно удалить вертолет из игры через скрипт, именно вертолет, а не НПС или предмет, желательно привести пример
  Злобная реклама
Пятница, 15.12.2017, 19:27
Статус:
Сообщений: 666
Регистрация: 09.11.2012
Коста Рика  Jargon
Пятница, 15.12.2017, 19:59 | Сообщение # 9247
X-Ray Multiplayer Extension
Статус:
Бывалый:
Сообщений: 1078
Награды: 3
Регистрация: 24.06.2012

YTroll,
Можно в логике прописать...
"...\S.T.A.L.K.E.R. - Clear Sky\gamedata\configs\scripts\marsh\mar_intro_lebedev_2.ltx"


Цитата aleksstalker ()
сталкер тч: создал нпс

Как же всё это по 100500 раз замусолено... Почитав комментарии только в этой теме можно довольно-таки много раз наткнуться на подобные вопросы и их решения.
Да и вообще, почему бы не использовать СДК? все же есть, даже оригинальные уровни в формате сдк чего раньше не было, там это проще сделать в 100 раз, зачем себе жизнь усложнять переворачивая тонны текста all спавна...
Сообщение отредактировал Jargon - Пятница, 15.12.2017, 20:07
  Злобная реклама
Пятница, 15.12.2017, 19:59
Статус:
Сообщений: 666
Регистрация: 24.06.2012
Российская Федерация  makdm
Пятница, 15.12.2017, 20:01 | Сообщение # 9248
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

Цитата YTroll ()
как корректно удалить вертолет из игры через скрипт,

Функция удаления объектов через скрипт - одна для всех объектов

alife():release( server_object, true )

Вопрос лишь в том: "Каким способом получить server_object ( серверный класс объекта )"
Тут способов несколько. Можно по метке story_id, можно по имени объекта, можно по классу или по секции с некоторыми ограничениями.
Выбирайте, что вам доступно.
  Злобная реклама
Пятница, 15.12.2017, 20:01
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  yobakun
Пятница, 15.12.2017, 20:02 | Сообщение # 9249
Статус:
Новичок:
Сообщений: 270
Награды: 5
Регистрация: 30.07.2016

Как проверить наличие алаф объекта в рестрикторе? Нужен аналог on_actor_inside через скрипты.
  Злобная реклама
Пятница, 15.12.2017, 20:02
Статус:
Сообщений: 666
Регистрация: 30.07.2016
Украина  aleksstalker
Пятница, 15.12.2017, 20:08 | Сообщение # 9250
Статус:
Новичок:
Сообщений: 245
Награды: 2
Регистрация: 19.01.2017

Jargon, СДК то проще, но с батниками к СДК 0.4 беда и беда, сылку дайте. И да почему так сразу "о боже ". Я просто спросил за логику патруля ? Может, что не так, а вы так сразу.)))
  Злобная реклама
Пятница, 15.12.2017, 20:08
Статус:
Сообщений: 666
Регистрация: 19.01.2017
Российская Федерация  makdm
Пятница, 15.12.2017, 20:12 | Сообщение # 9251
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

yobakun, для ЗП куча функций в файле xr_conditions.script:

function obj_in_zone(actor, zone, p)

function one_obj_in_zone(actor, zone, p)

function story_obj_in_zone_by_name (actor, npc, p)

function npc_in_zone(actor, npc, p)

Выбирайте ту, которая вам нужна.
  Злобная реклама
Пятница, 15.12.2017, 20:12
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  alanbrose
Пятница, 15.12.2017, 20:14 | Сообщение # 9252
Статус:
Отмычка:
Сообщений: 113
Награды: 4
Регистрация: 28.08.2015

BoBaH_671, огромное спасибо. Второй метод не сработал (возможно из-за моей криворукости). Сделал пронумерованные поршни с первым методом - диалог исчез. Я аж удивился, что получилось. smile
  Злобная реклама
Пятница, 15.12.2017, 20:14
Статус:
Сообщений: 666
Регистрация: 28.08.2015
Российская Федерация  YTroll
Пятница, 15.12.2017, 20:31 | Сообщение # 9253
Статус:
Бывалый:
Сообщений: 824
Награды: 13
Регистрация: 09.11.2012

Jargon , благодарю, но через логику для меня сложновато,

Цитата makdm ()
Функция удаления объектов через скрипт - одна для всех объектов

alife():release( server_object, true )

Вопрос лишь в том: "Каким способом получить server_object ( серверный класс объекта )"
Тут способов несколько. Можно по метке story_id, можно по имени объекта, можно по классу или по секции с некоторыми ограничениями.
Выбирайте, что вам доступно.

метки story_id, у вертолетов на ЧАЭС1 нет, что странно у БТР и солдат - есть, а у вертолетов нет,
а приведите пример удаления по имени объекта, вот имя одного вертолета в секциях спавна - aes_helicopter_0000
  Злобная реклама
Пятница, 15.12.2017, 20:31
Статус:
Сообщений: 666
Регистрация: 09.11.2012
Российская Федерация  makdm
Пятница, 15.12.2017, 20:51 | Сообщение # 9254
Время Альянса
Статус:
Опытный:
Сообщений: 1787
Награды: 19
Регистрация: 22.11.2012

Цитата YTroll ()
а приведите пример удаления по имени объекта,

Вызов функции;

remove_heli_by_name( "aes_helicopter_0000" )

Сама функция:

Код
function remove_heli_by_name( name )
    for k,v in pairs( db.heli ) do
        if string.find( v:name(), name ) ~= nil then
            alife():release(alife():object( k ), true)
           break
        end
    end
end    
Сообщение отредактировал makdm - Пятница, 15.12.2017, 20:55
  Злобная реклама
Пятница, 15.12.2017, 20:51
Статус:
Сообщений: 666
Регистрация: 22.11.2012
Российская Федерация  YTroll
Пятница, 15.12.2017, 21:08 | Сообщение # 9255
Статус:
Бывалый:
Сообщений: 824
Награды: 13
Регистрация: 09.11.2012

makdm , а во множественном числе т.е. удаление разом нескольких вертолетов, это будет выглядеть вот так?
Вызов функции;

remove_heli_by_name( "aes_helicopter_0000" )
remove_heli_by_name( "aes_helicopter_0001" )
remove_heli_by_name( "aes_helicopter_0002" )
remove_heli_by_name( "aes_helicopter_0003" )
remove_heli_by_name( "aes_helicopter_0004" )
remove_heli_by_name( "aes_helicopter_0007" )
remove_heli_by_name( "aes_helicopter_0008" )
remove_heli_by_name( "aes_helicopter_0009" )
remove_heli_by_name( "aes_helicopter_0010" )

Сама функция:

function remove_heli_by_name( name )
for k,v in pairs( db.heli ) do
if string.find( v:name(), name ) ~= nil then
alife():release(alife():object( k ), true)
break
end
end
end

или как-то можно оптимизировать вызов функции?
Сообщение отредактировал YTroll - Пятница, 15.12.2017, 21:14
  Злобная реклама
Пятница, 15.12.2017, 21:08
Статус:
Сообщений: 666
Регистрация: 09.11.2012
Поиск: