Скриптование - Страница 590 - Скрипты / конфиги / движок - 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/
06.06.2022 в 10:52, Ghilli сказал:

На стоковом движке Зова Припяти dik_to_bind используется только для скриптов связанных с UI?

Да

Обнаружил такую недоработку в оригинале ЗП. Если скриптом воспроизводить звуки, то второй (и последующие) не воспроизведутся, пока не пройдёт предыдущий, и какая-то задержка в пару секунд... Это можно как-то пофиксить?

Вопрос к знатокам скриптов, сделал систему апгрейда, только вот нижняя ветка не апгрейдится, хоть как нажимай на второй ветке иконки, будет поставлен апгрейд первой ветки, скрипт на 3 скрине

[3 фотографии

DEL

 

 

Изменено пользователем Domestoz
ссылки ВК

https://disk.yandex.ru/i/buSDOiP3EU-O9g Как правильно прочитать параметр fire_modes из секции оружия что бы он показывал -1 или 1 а не как на скриншоте.

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

    local slot = {1,2,4}
        for n = 1,table.getn(slot) do
        local item = db.actor:item_in_slot(slot[n])
        local wpn = db.actor:active_item()
            if item ~= nil and wpn then

            local fm = sys_ini:r_string(wpn:section(), "fire_modes")
            local StatCS = hud:GetCustomStatic("fire_modes_static")
            if (StatCS == nil) and (fm ~= nil) then
                hud:AddCustomStatic("fire_modes_static", true)
                StatCS = hud:GetCustomStatic("fire_modes_static")
                StatCS:wnd():SetText(fm)
            end
        else
            if item then
                hud:RemoveCustomStatic("fire_modes_static")
            end
        end
    end
end

 

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

@Colder, прочитанную из конфигов строку можно разбить на отдельные части функцией parse_nums, например так:

local fm = sys_ini:r_string(wpn:section(), "fire_modes")
local fm_t = parse_nums(fm)

После этого в fm_t будет находиться таблица с отдельными режимами стрельбы.

 

P.S. Только это будут просто считанные из конфигов доступные режимы, а не текущий режим стрельбы.

  • Спасибо 1

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

Вопрос по ОГСР движку. Пытаюсь прибавить вес ГГ. Вставляю предмет в слот "вес ГГ прибавляеться" убираю из слота "вес ГГ не возвращаеться а остаеться прежнем" как вернуть вес ГГ обратно?

Пробывал так:

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

function on_item_to_slot(obj)
    local st_item = db.actor:item_in_slot(9)
        if st_item and (string.find(st_item:section(), "test_use")) then

        local at = sys_ini:r_float_ex("test_use", "tool_max_weight")
        local curr_max = db.actor:get_actor_max_weight()
        local cur_max_walk = db.actor:get_actor_max_walk_weight()

        db.actor:set_actor_max_weight(curr_max + at)
        db.actor:set_actor_max_walk_weight(cur_max_walk + at)
    else --/ -
        db.actor:set_actor_max_weight(curr_max)
        db.actor:set_actor_max_walk_weight(cur_max_walk)
    end
end

 

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

@WinCap Тоже не работает.

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

function on_item_to_slot(obj)
    local actor_item = db.actor:item_in_slot(9)
    if actor_item and (string.find(actor_item:section(), "test_use")) then

    local at = sys_ini:r_float_ex("test_use", "tool_max_weight")
    local curr_max = db.actor:get_actor_max_weight()
    local cur_max_walk = db.actor:get_actor_max_walk_weight()

    db.actor:set_actor_max_weight(curr_max + at)
    db.actor:set_actor_max_walk_weight(cur_max_walk + at)
else
    local curr_max1 = db.actor:get_actor_max_weight()
    local cur_max_walk1 = db.actor:get_actor_max_walk_weight()

    db.actor:set_actor_max_weight(curr_max1)
    db.actor:set_actor_max_walk_weight(cur_max_walk1)
end
end
 

 

3 часа назад, Colder сказал:

db.actor:get_actor_max_weight()

Возвращает текущее значение макс.веса. И get_actor_max_walk_weight аналогично.

Т.е. в блоке else ты читаешь, значения которые у ГГ сейчас. И устанавливаешь их же. Естественно что ничего не меняется.

Базовое значение куда возвращаться, в данном случае лучше из конфига прочитать, из секции actor.

  • Спасибо 1
  • Полезно 2

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

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

(Платформа ОП, rx_kill_wounded.script). 

Может есть какой-то способ сделать так, чтобы раненые враги полностью игнорировались?

Вопрос по ТЧ!
Доброго времени суток, товарищи. Я тут понемногу самостоятельно обучаюсь, решил вот сделать смарт-террейн (гулаг). Делал по аналогии уже имеющихся. 
1. В СДК поставил смарт, прицепил к нему шейп, прописал в логике имя, всё как положено: 

[smart_terrain]

type = pseudo_monolit
capacity = 3
groups = 0, 3
2. Поставил трех нпсов, в их кастом дату прописал принадлежность к этому гулагу: 

[smart_terrains]

pseudo_monolit = true
3. Создал для них три точки walk и три точки look. (их назвал правильно - имя_смарта_имя_точки
3ap6UJ2L537CZmMj_B21DE_5Kc2vDxZ7p_4HDkuW

 

в файле gulag_escape.script прописал для них логику и все, что нужно:
 

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

if type == "pseudo_monolit" then
    
    t = { section = "logic@pseudo_monolit_guard1",
        idle = 0,
        prior = 8, state = {0,2},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "",
        predicate = function(obj_info)
                        return obj_info.name == "esc_pseudo_monolit1"
                    end
    }


    table.insert(sj, t)
    
    t = { section = "logic@pseudo_monolit_guard2",
        idle = 0,
        prior = 8, state = {0,2},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "",
        predicate = function(obj_info)
                        return obj_info.name == "esc_pseudo_monolit2"
                    end
    }
    
    
        table.insert(sj, t)
    
    t = { section = "logic@pseudo_monolit_loner",
        idle = 0,
        prior = 8, state = {0,2},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "",
        predicate = function(obj_info)
                        return obj_info.name == "esc_pseudo_loner"
                        
                    end
    }
    
    table.insert(sj, t)
    
end

 

=========

 

        if type == "pseudo_monolit" then
        return function(gulag)
            return 0
        end
    end

 

=======

        if gulag_type == "pseudo_monolit" then
        return npc_community == "stalker"
    end

 

 

В файле gulag_escape.ltx прописал им их логику. 
 

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

[logic@pseudo_monolit_guard1]
active = walker@pseudo_monolit_guard1

[walker@pseudo_monolit_guard1]
path_walk = guard1_walk
path_look = guard1_look
def_state_standing = guard

[logic@pseudo_monolit_guard2]
active = walker@pseudo_monolit_guard2

[walker@pseudo_monolit_guard2]
path_walk = guard2_walk
path_look = guard2_look
def_state_standing = guard

[logic@pseudo_monolit_loner]
active = walker@pseudo_monolit_loner

[walker@pseudo_monolit_loner]
path_walk = loner_walk
path_look = loner_look
def_state_standing = guard

Так вот, сама проблема в том, что эти нпс - стоят на тех местах, где были заспавнены. Их логика почему-то к ним не "цепляется". Если на них нападут (мутант, или сталкер какой) то как всё успокоится, они встанут на том месте, где остановились. Как "заставить" их "увидеть" их логику и действовать, согласно ней? Спасибо!

God save Hatsune Miku!

@Colder смотрим сюда, и видим, что для этого параметра есть только метод get_artefact_count. set_artefact_count - отсутствует. Стало быть, одними скриптами это никак не возможно.

Это легко поправить.
 

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

 

CustomOutfit.h

void set_artefact_count (u32 x) { m_artefact_count = x; }

script_game_object.h

void SetArtefactCount(u32 val);

script_game_object.cpp

void CScriptGameObject::SetArtefactCount(u32 val)
{
	CCustomOutfit	*outfit = smart_cast<CCustomOutfit*>(&object());
	if (!outfit) return;
	outfit->set_artefact_count(val);
}

script_game_object_scriptXXX.cpp

		.def("set_artefact_count",			&CScriptGameObject::SetArtefactCount)

Добавить эти строчки, скомпилировать движок, и всё.

 

 

 

  • Спасибо 1
  • Полезно 3
  • Жуть! 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.

23 часа назад, Labadal сказал:

3. Создал для них три точки walk и три точки look.

Флаги в путях проставил?

Clipboard01.jpg

https://xray-engine.org/index.php?title=Точки_пути_(way_point)

Господа, вопрос такой:

 

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

(Можно инфопоршень, неважно).

 

А то по трем гайдам, у меня проблемы, везде вылеты с логом по "g_.script'у" с ошибкой "#2". 

Направьте пожалуйста, и прошу прощения если оффтоп. 

ТЧ. 1.0004

@EGER.OVERKILL WF , рестриктор на вход, там при входе актёру выдать инфо, который запустит квест. Прошу прощения, но с телефона не могу привести примеры кодов. 

Здесь могла быть ваша реклама.

23 минуты назад, mole venomous сказал:

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

Это понял, делаю по урокам разным, но результат один, при НИ вылет.

 

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

Я делаю так: 

 

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

custom_data = <<END

[logic]
active = sr_idle

[sr_idle]
on_inside = %+kura%
END 

 

Изменено пользователем EGER.OVERKILL WF
34 минуты назад, EGER.OVERKILL WF сказал:

делаю по урокам

Неправильные уроки потому что.

Не on_inside, а on_actor_inside

 

Можно добавить еще nil (on_actor_inside = nil %+kura%), чтобы при заходе в рестриктор и срабатывании инфопоршня/функции рестриктор больше не проверялся на апдтейте (т.е при повторном заходе в зону рестриктора повторной выдачи/вызова не будет). Если вызов поршня/функции должен повторяться, nil не нужен.

  • Согласен 2
9 минут назад, HellRatz сказал:

nil (on_actor_inside = nil %+kura%)

Cпасибо за ценные инструкции, я по этому сюда и написал, тут люди грамотные собрались.

Сейчас попробую. 

 

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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[871]

; cse_abstract properties
section_name = space_restrictor
name = wy
position =  -40.14, -15.15, -159.5; 13.43, 4. 51, 91.69
direction = 0.0, 0.0, 0.0
id = 65535
version = 118
script_version = 6
spawn_id = 871

; cse_alife_object properties
game_vertex_id = 108
level_vertex_id = 238464
object_flags = 0xffffff3e
custom_data = <<END

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = nil %+kura%
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 5

; cse_alife_space_restrictor properties
restrictor_type = 0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Но поршень который выдается, не активирует квест. (Хотя должен), В диалоге поршень отыгрывается нормально и выдается квест. 

 

Бегаю по этому месту (координатам которые указывал), по прежнему, никакой реакции.

Изменено пользователем EGER.OVERKILL WF

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

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

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

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

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

Войти

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

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

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