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

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

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


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

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

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

 

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

 

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

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

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


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

@Карлан, Именно, что не додумался. Но я сделал маленько по другому, не вынося обработку в отдельный файл, все в биндерах прописал. Теперь работает, как задумывал. Но твой скрипт все равно помог допереть до истины.

Сталкер - наше всё!

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

Всем доброго времени суток, вопрос такой: я выдернул тепловизор из ОГСЕ на ОП2, прописал его в экзе, работает, включается, но выключаться не хочет, так и работает, даже если сменить или снять броню, до перезагрузки - подскажите это ему надо отдельный скрипт написать?

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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

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

 

Наверное вопрос даже так стоит: как получить размеры ноды? Она же не всегда 0.7 на 0.7.

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

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

http://rghost.ru/6D4cy5cpN

Это с большинством новых дверей, хотя файлы логики одни и те же.

Особенно запущенно всё на Предбаннике, там вообще непонятно что происходит:

http://rghost.ru/6fhtHB9qY

При этом и закрытые, и открытые двери имеют надписи, хотя в спавне прописана только одна пара. Но закрытую пару никак не открыть, а открытая ведет себя как на первом скрине. Такая же ситуация со всеми дверьми предбанника, которые были до меня. Те, что поставил я - просто ведут себя как на первом скрине. На остальных локаж тоже встречаются подобные двери. Подскажите, что это такое, и как исправить? И дело точно не в моделях - точно такие же двери на других локах могут вести себя и корректно, и нет.

 

Мой музыкальный аддон для ОП-2 + Музыкальные флешки для плеера - для тех, кому не нравится оригинальная музыка. Более 150 новых треков различных направлений и исполнителей, каждый найдёт музыку на свой вкус. Апдейт 1.1 от 30.03.2015 - в плеер добавлены записи реальных радиостанций + наиболее подходящие миксы. Торрент.
Пак измененных локаций из ОГСЕ 0.6.9.3 для ОП-2. Скачать можно здесь.

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

@AndrewMor, дело не в дирекции, двери в сдк расставлял. Логика стандартная:

[logic]


active = ph_door@close

[ph_door@close]
locked = false
closed = true
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = ph_door@open
hit_on_bone = 1|ph_door@free|2|ph_door@free

[ph_door@open]
locked = false
closed = false
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = ph_door@close
hit_on_bone = 1|ph_door@free|2|ph_door@free

[ph_door@free]
locked = false
closed = true
no_force = true
on_use = ph_door@open

 

[logic]
active = ph_door@close

[ph_door@close]
locked = false
closed = true
snd_open_start = wood_large_open
snd_close_start = wood_large_close_start
snd_close_stop = wood_large_close_stop
on_use = ph_door@open
hit_on_bone = 1|ph_door@free|2|ph_door@free

[ph_door@open]
locked = false
closed = false
snd_open_start = wood_large_open
snd_close_start = wood_large_close_start
snd_close_stop = wood_large_close_stop
on_use = ph_door@close
hit_on_bone = 1|ph_door@free|2|ph_door@free

[ph_door@free]
locked = false
closed = true
no_force = true
on_use = ph_door@open

 

 

Мой музыкальный аддон для ОП-2 + Музыкальные флешки для плеера - для тех, кому не нравится оригинальная музыка. Более 150 новых треков различных направлений и исполнителей, каждый найдёт музыку на свой вкус. Апдейт 1.1 от 30.03.2015 - в плеер добавлены записи реальных радиостанций + наиболее подходящие миксы. Торрент.
Пак измененных локаций из ОГСЕ 0.6.9.3 для ОП-2. Скачать можно здесь.

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

V92, а зачем тебе сия строка "hit_on_bone = 1|ph_door@free|2|ph_door@free"?

Вот моя логика, все отлично работает:

 

[logic]
аctive = ph_door@locked

[ph_door@locked]
closed = true
locked = true
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = ph_door@unlocked


[ph_door@unlocked]
closed = false
locked = true
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop
on_use = ph_door@locked

Сталкер - наше всё!

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

 

 

а зачем тебе сия строка

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

 

Мой музыкальный аддон для ОП-2 + Музыкальные флешки для плеера - для тех, кому не нравится оригинальная музыка. Более 150 новых треков различных направлений и исполнителей, каждый найдёт музыку на свой вкус. Апдейт 1.1 от 30.03.2015 - в плеер добавлены записи реальных радиостанций + наиболее подходящие миксы. Торрент.
Пак измененных локаций из ОГСЕ 0.6.9.3 для ОП-2. Скачать можно здесь.

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

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

речь идет о том чтобы из игры построить таблицу вида

local opened_file = {
    section1 = {line_1, line_2, ..., line_n},
    section2 = {...},
    included_file = {
        section = {...},
        included_file = {...}
    }
}

Известных мне методов для такого не хватит, section_exist вообще как для самого открытого файла, так и для всех вложенных в него, работает.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

А будут ли какие непредвиденные последствия, если методы биндера, являющиеся колбеками движковых событий, будет дергать не только движок?

Допустим я получил объект биндера актора, и дернул у него actor_binder:on_item_take (obj), передав ему (методу) некий итем. но не давая этот итем актору на самом деле.

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


Ну неужели никто не пробовал, "прикинуться движком", для биндера?

Я вот попробовал уже. И пока это, полет нормальный.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

 

А мы можем в открытом через ini_file файле, скриптово обнаружить инклюд? речь идет о том чтобы из игры построить таблицу
И по этой же теме цитата из ковырялки

 

Можно ли при таком описании узнать что item* наследуются от std_item?
Стандартных способов конечно нет, но если бы мне это нужно было, то я бы распарсил все конфиги с помощью io и "пар(с)ился" бы.
Это заняло бы это несколько секунд при загрузке (текста ведь не мало) и 3-4 Мб памяти. Но если очень нужно, то можно пережить.
Изменено пользователем Nazgool
Ссылка на комментарий

Здравствуйте ВАМ. Есть скрипт рабочий. Написан  по урокам скриптования. Кто может сделать Замечания и Советы? Прошу отписатся о том как можно улучшить.

function ceck_medkits()
if db.actor:object("medkit") ~= nil then
local news_text = "%c[155,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,160,160,160] Принимаю медицинскую аптечку. %c[default]"
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)
db.actor:eat(db.actor:object("medkit"))
elseif db.actor:object("medkit_army") ~= nil then
local news_text = "%c[155,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,160,160,160] Принимаю армейскую аптечку. %c[default]"
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)
db.actor:eat(db.actor:object("medkit_army"))
elseif db.actor:object("medkit_scientic") ~= nil then
local news_text = "%c[155,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,160,160,160] Принимаю научную аптечку. %c[default]"
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)
db.actor:eat(db.actor:object("medkit_scientic"))
elseif db.actor:object("medkit") == nil and
db.actor:object("medkit_army") == nil and
db.actor:object("medkit_scientic") == nil then
med.mcomplex_open()
end
end



Очевидно - понять, как он работает, и что делает, и выбросить лишнее.
А при постах сюда - использовать кнопку "код". dc

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

Одна голова хорошо, а две лучше. А вот три, это уже змей Горыныч.

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

@nego

Можно так

 

local medkits = {
    {'medkit'         , 'медицинскую'},
    {'medkit_army'    , 'армейскую'  },
    {'medkit_scientic', 'научную'    },
}
function ceck_medkits()
    local actor = db.actor
    for i = 1, #medkits do
        local medkit = actor:object(medkits[i][1])
        if medkit then
            local news_text = "%c[155,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,160,160,160] Принимаю "..medkits[i][2].." аптечку. %c[default]"
            actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)
            actor:eat(medkit)
            return
        end
    end
    med.mcomplex_open()
end

 

Или так

 

function ceck_medkits()
    local actor = db.actor
    local medkit = actor:object('medkit') or actor:object('medkit_army') or actor:object('medkit_scientic')
    if medkit then
        local section = medkit:section()
        local what = (section == 'medkit')          and 'медицинскую' or
                     (section == 'medkit_army')     and 'армейскую'   or
                     (section == 'medkit_scientic') and 'научную'
        local news_text = "%c[155,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Выполняю:%c[255,160,160,160] Принимаю "..what.." аптечку. %c[default]"
        actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 5000)
        actor:eat(medkit)
        return
    end
    med.mcomplex_open()
end

 

В принципе вариантов не мало.

 

Замечания :

 

1. Взять любое из условий. Например если у ГГ есть медицинская аптечка, то 4 раза
   производится обращение к глобальным данным "db".
   Правильнее кешировать эту глобальную "db" в локальной переменной.
   local actor = db.actor
 
2. Если снова взять это же условие, то происходит два раза получение одного и того же объекта
    db.actor:object("medkit")
    ...
    db.actor:eat(db.actor:object("medkit"))
    Напрасная трата процессорного времени. Достаточно получить один раз и потом использовать
    local medkit = actor:object(medkits[1])
    ...
    actor:eat(medkit)
 
3. В каждом из условий объявлена переменная
   local news_text = ...
   Компилируется каждая из трех строк. Они отличаются одним словом. Напрасная трата памяти.
   Есть возможность съэкономить.
   local news_text = ...  ..medkits[2]..  ...
 
4. Последние проверки лишние
    elseif db.actor:object("medkit") == nil and
        db.actor:object("medkit_army") == nil and
        db.actor:object("medkit_scientic") == nil then
    Если ни одно из условий выше не сработает, то очевидно что аптечек нет.
Изменено пользователем Nazgool
  • Нравится 2
  • Согласен 1
  • Полезно 1
Ссылка на комментарий

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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, смотри свойство нет-пакета weapon_state. Если оружие заклинило, будет иметь значение 7.

Свойство есть и в стандартной, и в update-части.

Изменено пользователем Kirgudu
  • Спасибо 2
Ссылка на комментарий
@Nazgool,соглашусь с тобой насчёт local *** = bla, bla, bla. А вот насчёт текстов и иконок, мне кажется было бы лучше сделать через xml'ку.

svarog2741.gif

 

НС - шлак, солянки - шлак.

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

Всем здравия! Возник вопрос, спавню скриптом итем и хочу поставить на него метку, но не отлавливается его id, где я ошибся?

local taynik_tbl = {"rykzak", "konteiner", "yashik"}


local taynik = taynik_tbl[math.random(#taynik_tbl)]
local taynik_id = taynik.id
alife():create(taynik, vector():set(-660.22509765625,19.935060501099,72.809051513672), 125131, 314)
level.map_add_object_spot_ser(taynik_id, "ui_pda2_actor_box_location" , "DEBAG")

 

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

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

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

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

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

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

Войти

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

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

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