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

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

Тема для обсуждения скриптов всего и всех в серии игр 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/

@АтомныйФизик 

1. Судя по всему, тебе для начала нужно разобраться, как вообще делается квест. Тогда ты начнёшь задавать правильные вопросы в правильных темах. 

Ну и не мешало бы посмотреть, как это сделано в оригинале. 

2. Пока - пред за даблпостинг. 

 

   УРАГАН.png

                 Краткий гид по моду Тайные Тропы 2

                                      ПАРТИКЛЫ TERRA

 

 

 

Всем привет!
Решил я для death_manager в ТЧ сделать доп. проверку по рангу НПС и реализовал это по аналогии с проверкой по локации в виде коэффициента, домножающий генерящий лут. Основная проблема: не могу получить данные о ранге НПС. Получаю такой вылет при загрузке сохранения:

FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ... - shadow of chernobyl\gamedata\scripts\ranks.script:66: attempt to index local 'obj' (a nil value)


stack trace:

Вот код:

    local rank_name = ranks.get_obj_rank_name(obj)    --запрашиваем ранг НПС

    if not death_ini:section_exist(rank_name) then
        rank_name = "novice"
    end

    local n = death_ini:line_count(rank_name)
    local id, value = "", ""
    for i=0,n-1 do
        result, id, value = death_ini:r_line(rank_name,i,"","")
            mul_by_rank[id] = tonumber(value)
    end    

Я находил такую проверку ранга в АМК моде:

function get_npc_rank(obj)
    local m_rank = ""
    if (obj) then
        m_rank = ranks.get_obj_rank_name(obj)
        if (m_rank == nil) then
            m_rank = ""
        end
    end
    return m_rank
end

Добавил эту проверку перед основным запросом. Тогда в основном коде запрос ранга будет выглядет так:

local rank_name = get_npc_rank(obj)    --запрашиваем ранг НПС

Вылет пропал, но игра всё равно возвращает пустое значение для m_rank = "" и не может получить данные о ранге. В чём может быть причина?

@Solditary а это тебе о чём говорит?

"attempt to index local 'obj' (a nil value)".

У тебя видимо в саму функцию передаётся nil, а не ссылка на структуру obj

ЗЫ..И еще...

LUA error: ... - shadow of chernobyl\gamedata\scripts\ranks.script:66: attempt to index local 'obj' (a nil value) ..в оригинале в 66 строке этого скрипта стоит end...Значит файл скрипта правленый..

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

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

@Solditary 

функция из чистого SOC 1.00006

-- возвращает название ранга заданного game_object (персонажа)
function get_obj_rank_name( obj )
    if not ranks_loaded then
        read_all_ranks()
    end

    local obj_rank

    -- HACK
    if obj.m_story_id ~= nil then                                     --это 66 строка
        obj_rank = obj:rank()
    else
        obj_rank = obj:character_rank()
    end

    if IsStalker(obj) then
        return get_rank_name( obj_rank, stalker_rank_intervals ) or stalker_max_rank_name
    else
        return get_rank_name( obj_rank, monster_rank_intervals ) or monster_max_rank_name
    end
end

 

....- "И не важно куда подует ветер..."

                                                   Freddie Mercury.

Здравствуйте. Я вообще почти ничего не понимаю в Lua, но появилась необходимость кое-что сделать.STALKER Dead Air на движке OpenXRay 1.6.0.2. Нужно сделать чтобы при перетаскивании одного предмета на другой он использовался с задержкой т.к. само использование предмета имеет анимацию.
Но я никак не могу понять, как через скрипт использовать предмет. Поиск выдаёт только спавн под ноги или в инвентарь. 
 

Заголовок спойлера (редактируемый)

 

if (
		(
			sec1 == "wpn_knife" or
			sec1 == "wpn_knife2" or
			sec1 == "wpn_knife3" or
			sec1 == "wpn_knife4" or
			sec1 == "wpn_knife5"
		)
	and
		sec2 == "kolbasa"
	) then
	
	actor_effects.use_item("canned_food_dummy") 
	
end	

 

Изменено пользователем ziken
28.07.2026 в 00:24, ziken сказал:

как через скрипт использовать предмет

Использовать предмет - это значит съесть его:

db.actor:eat( db.actor:object("antirad") )

  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

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

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

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

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

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

Войти

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

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

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