Скриптование - Страница 53 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Sapsan, походу это единственный вариант - удалить/создать чрез пакет, разве что ловить момент и не давать неписю умереть пока не выбросит нужный объект, а потом пусть загибается

sapsan, если не ошибаюсь malandrinus скидывал в ковырялке правленную дллку с возможностью применить drop_item для тайников.

 

Мысли вслух: можно ли изменить parent_id у объекта? Через нет-пакеты вроде бы есть возможность, но есть ли другой способ?

Изменено пользователем Министр

Министр,

Мысли вслух: можно ли изменить parent_id у объекта? Через нет-пакеты вроде бы есть возможность, но есть ли другой способ?

Так transfer_item и меняет. Но только он его меняет каким-то извращенным способом через посылку сообщения серверу. И работает это только в онлайне и для инвентарных объектов. Что только для инвентарных объектов - это правильно, а вот что только в онлайне - по всей видимости тяжелое наследие сетевого движка.

Ну а в оффлайне - либо нетпакетами, либо ковырять движок.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Столкнулся с проблемой.

Имею 5 предметов с префиксом в имени test_имя_итема. В игре мне их нужно удалить, юзал такую функцию, ибо у этих предметов нет стори_айди:

function delete_npc() --делет нпс'а\объекта по строке
    for a=10,65635,1 do
    local obj=alife():object(a)
        if obj and string.find(obj:name(),"test_af") then
        alife():release(obj,true)
        end
    end
end

Но дублировать её для моих пяти предметов я не хочу. Вопрос: как удалить их по префиксу test?

P.S. Если можно ответьте с примером пожалуйста.

Как можно определить НПС по его секции из spawn_sections?Или так нельзя определять?

Столкнулся с проблемой.

Имею 5 предметов с префиксом в имени test_имя_итема. В игре мне их нужно удалить, юзал такую функцию, ибо у этих предметов нет стори_айди:

function delete_npc() --делет нпс'а\объекта по строке
    for a=10,65635,1 do
    local obj=alife():object(a)
        if obj and string.find(obj:name(),"test_af") then
        alife():release(obj,true)
        end
    end
end

Но дублировать её для моих пяти предметов я не хочу. Вопрос: как удалить их по префиксу test?

P.S. Если можно ответьте с примером пожалуйста.

Вот так:

function delete_npc() --делет нпс'а\объекта по строке
    local sim = alife()
    local string_find = string.find
    local obj
    for a = 1, 65534 do
        obj = sim:object(a)
        if obj and string_find(obj:name(), "^test_") then
            sim:release(obj, true)
        end
    end
end

 

Диапазон должен быть от 1 до 65534 (0 это ГГ, а 65535 - земля в случае определение хозяина объекта)

По работе со строками поищи информацию о регулярных вырежениях в Lua.

Stalk15, что значит "определить"? Узнать название секции НПС можно через obj:section().

 

sapsan, а в чем смысл создания таких переменных, например, как string_find и sim? Со 2-ым случаем можно еще понять, что символов в итоге писать меньше, но какой смысл объявления 1-ой переменой? Вопрос снят, спасибо malandrinusу. :)

Изменено пользователем Министр

Министр,

это оптимизация для быстродействия. Избегаем лишнего индексирования и лишнего вызова функции на каждом цикле.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Напишите, пожалуйста, рабочий пример смены визуала непися, если он передо мной стоит!

Что тут надо изменить, чтобы смена визуала происходила на расстоянии меньше 50 метров (принудительный переход в онлайн), т.к. амк скрипт меняет визуал на расстоянии больше 50 метров:

local t = amk.read_stalker_params(obj)
t.visual = "actors\\dolg\\stalker_do_balon_8"
amk.write_stalker_params(t,obj)

Задавал этот вопрос, но не получал корректного ответа, т.к. все направляли на тутор Сингапура, а код написать никто не смог :(

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

SkyLoader,

переходи на движок ЗП. Там визуал можно в любой момент менять простой функцией.

 

А с этой методой у тебя всегда будут проблемы с переводом в оффлайн, затем в онлайн. Кроме того, что это для разных сталкеров по разному работает, так тебе ещё придётся ловить момент ухода в оффлайн (и только после этого менять), что неудобно и как правило тормозит игру.

 

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

malandrinus, да, я, конечно, понимаю, что движок ЗП лучше, но все-таки мне бы на ТЧ узнать. xStream сделал, чтобы любой непись в любое время мог поменять визуал.

SkyLoader,

попробуй разобраться, как сделано у xStream`а. Самому тебе придется написать тоже самое.

Ну и malandrinus тебе правильно все проблемы расписал. В теории алгоритм для ТЧ простой:

- говоришь НПЦ уйти в онлайн

- дожидаешься его ухода

- перепаковываешь на новый визуал

- возвращаешь обратно.

 

На практике все сложнее.

Kolmogor, спасибо, но мне это уже говорили, а код написать никто не смог. Я открывал скрипт xStream'a, но он там так все запутал, что не распутать :wacko2:

Вопрос:

Как включить панику у непися не надолго?

Пробовал этими методами - ничего не происходит: set_custom_panic_threshold(float), set_default_panic_threshold()

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

Братцы, помогите! Тут вот какое дело. В сталкер вики я когда-то нашёл статью, как сделать, чтобы в машину нельзя было сесть без наличия у игрока ключей. Я себе в моде это сделал, он благополучно работал, но потом перестал по неизвестной мне причине. То есть в машину теперь можно садиться и без ключей((((. Теперь я хочу подойти к этой проблеме с другой стороны. Теперь вопрос: можно ли как-нибудь к посадке в автомобиль привязать функцию проверки предмета в инвентаре (ключей)? И если можно, то как? Заранее благодарен.

Хантер, напиши машине такую логику:

[logic]
active = ph_car
[ph_car]
usable ={=actor_has_item(niva_keys)}

Здесь niva_keys - секция ключей от машины. Без ключей в машину с такой логикой не сядешь. А можно ещё сделать так, чтобы в машину можно было сесть, но без ключей нельзя завести двигатель.

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

Дурак знает как затеять драку, умный знает как победить в драке, мудрец знает как избежать драки.

Какую нужно прописать логику НПС чтобы он сидел у костра? (Желательно на ЗП)

Сообщение от администратора n6260
А почитать тему? А поиск по разделу?

Камрады, помогите разобраться...

сделал для СГМ 1.7 мод с наличкой, там всё работает, а с оригинальной игрой не хочет.

так сделано в СГМ :

-------- B14
function zat_b14_bar_transfer_money(first_speaker, second_speaker)
    dialogs.relocate_item_section_to_actor(first_speaker, second_speaker,"kapusta_1000")
end

function zat_b14_transfer_artefact(first_speaker, second_speaker)
    local npc = dialogs.who_is_npc(first_speaker, second_speaker)
    local actor = dialogs.who_is_actor(first_speaker, second_speaker)
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_quest_b14_twisted")
end

а вот так в оригинале:

function zat_b14_bar_transfer_money(first_speaker, second_speaker)
    dialogs.relocate_money_to_actor(first_speaker, second_speaker, 1000)
end

function zat_b14_transfer_artefact(first_speaker, second_speaker)
    local npc = dialogs.who_is_npc(first_speaker, second_speaker)
    local actor = dialogs.who_is_actor(first_speaker, second_speaker)
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "af_quest_b14_twisted")
end

заменеа всего одна строка:

dialogs.relocate_item_section_to_actor(first_speaker, second_speaker,"kapusta_1000")

один в один прописываю для оригинала, не воспринимает он. Не хочет Борода давать предмет, деньги электронные суёт.

В чём может быть причина?

Изменено пользователем Серый Волк
Серый Волк, ф-ия relocate_money_to_actor дает указанное кол-во (3-ий аргумент) денег игроку. Все работает правильно и никакой ошибки нет. Изменено пользователем Министр

Вопрос по биндерам.

Прикрутил биндер к тайникам, прописав им в секцию [inventory_box]

script_binding      = bind_inventory_box.init

function init(obj)
    local new_binder = inventory_box_binder(obj)
    obj:bind_object(new_binder)
end

class "inventory_box_binder" (object_binder)
function inventory_box_binder:__init(obj) super(obj)
end 

function inventory_box_binder:hit_callback(obj, amount, local_direction, who, bone_index)
    get_console():execute("load ~~~ inventory_box_binder:hit_callback clsid:"--[[..obj:clsid()..", name: "..obj:name()..", section: "..obj:section()]])
end

 

Стреляю, бросаю гранаты - в консоль ничего не попадает. В чем косяк ? :russian_ru:

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

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

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

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

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

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

Войти

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

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

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