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

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

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

Словил тут вылет, когда помер в ЗП:

xr_conditions.script:2196: attempt to index field 'actor' (a nil value)

Точнее при загрузке последнего сохранения.


В кондишнс у меня добавлен код:

function sad_predateli_pda()
if (db.actor:object("sad_mudak_pda") ~= nil) and not (db.actor:has_info("sad_predateli_info")) then
db.actor:give_info_portion("sad_predateli_info")
end
end


2196 это вторая строка, которая if
В чем тут дело?

 

Изначальная функция взята отсюда: http://www.amk-team.ru/forum/topic/8806-cop-kvesty/?page=2&tab=comments#comment-349951

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

-

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

@dsh предложили добавить проверку актора на nil:

function sad_predateli_pda()
if db.actor ~= nil and db.actor:object("sad_mudak_pda") ~= nil and not db.actor:has_info("sad_predateli_info") then
db.actor:give_info_portion("sad_predateli_info")
end
end

Проверил, теперь не вылетает.

-

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

@aka_sektor вылет, возможно, происходит тогда, когда карта уже загрузилась и ты вызываешь эту функцию, а игрок ещё не появился. Соответственно db.actor ещё не существует(равен nil).

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

Не, всё нормально вроде. Но...

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

Не я же придумал.

function sad_predateli_pda()
local actor = db.actor
if actor ~= nil and actor:object("sad_mudak_pda") ~= nil and not actor:has_info("sad_predateli_info") then
actor:give_info_portion("sad_predateli_info")
end
end

 

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

Подскажите, что делать: добавил уникального персонажа в НС 2016 на Кордоне. Задал ему логику стоять на месте. Всё работает, но после его спавна, происходят постоянные вылеты с непонятным для меня логом:
FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...ogrammes\s.t.a.l.k.e.r\gamedata\scripts\_util.script:20: attempt to perform arithmetic on local 'a' (a nil value)
 
Что это за ошибка?

Важнейшая задача цивилизации - научить человека мыслить.

Ссылка на комментарий
21 minutes ago, Nazgool said:

local actor = db.actor

Это экономия на спичках. Имеет смысл только в очень частых и нагруженных циклах и то, сначала бы померить нужно. Возможно в условиях выполнения около 50 раз в секунду, если мы возьмем апдейт актора, это ни при каких условиях не будет иметь смысла.

 

  • Согласен 3
Ссылка на комментарий
1 час назад, Fenrir02 сказал:

[error]Arguments     : LUA error: ...ogrammes\s.t.a.l.k.e.r\gamedata\scripts\_util.script:20: attempt to perform arithmetic on local 'a' (a nil value)
 Что это за ошибка?

Открой редактором, у которого есть нумерация строк, файл gamedata\scripts\_util.script и смотри, что в нем на 20-й строке прописано.

Ссылка на комментарий
1 час назад, AndreySol сказал:

Открой редактором, у которого есть нумерация строк, файл gamedata\scripts\_util.script и смотри, что в нем на 20-й строке прописано.

 

local a ; a = 1/a; get_console():execute( "quit" ) - не знаю что это означает. Пробовал удалить эту строку - получаю вылет с ссылкой на другой фаил

Важнейшая задача цивилизации - научить человека мыслить.

Ссылка на комментарий
16 часов назад, dsh сказал:

Это экономия на спичках.

спички при этом с легкостью необычайной могут выглядеть как

bd.actor, dd.actor, bb.actor или даже db,actor

 

Кроме того, это реально может быть actor без предварительного actor = db.actor  не по тому, что "экономили на спичках", а по  тому, что "пишу то, что думаю".

 

Есть еще вариант, когда обращение к актору зачем-то надо до того, как он вошел в онлайн, и конструкция if db.actor then foo( db.actor, .... ) else foo( db.actor_proxy, ... ) end - написанная раз, этак, много - это уже не про "экономию на спичках", а куда-то в разряд развлечений с латексом, наручниками и плетками. (С чего, собственно, и начался этот трэд.)

 

14 часов назад, Fenrir02 сказал:

local a ; a = 1/a; get_console():execute( "quit" )

 

А немного выше - русский текст про принудительную остановку игры и вывод того, что не нравится в "добавленном уникальном персонаже на кордоне". И все это есть в логе.

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

@Dennis_Chikin все, что угодно, может стать всем, чем угодно, в результате очепятки. И actor на следующей строке с лёгкостью может стать aktor-ом.

 

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

Может. Чем больше набиваем - тем больше опечаток.

А когда при достижении некоторого объема в ход идет копипаста - вот здесь и начинается настоящее веселье...

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

Господа, а никто не реализовывал такую вещь, чтобы НПС стреляли реальными патронами из инвентаря? То есть нет патронов - нечем стрелять НПСишке. Прошу прощения у модеров, если не в ту ветку строчу. 

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

Можно ли добавлять свои данные (в конец) для сохранения или смещение тут нельзя трогать?

xr_logic.script ТЧ

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

function save_obj(obj, packet)
    printf("save_obj: obj:name()='%s'", obj:name())

    local npc_id = obj:id()
    local st = db.storage[npc_id]

    printf("save_obj: ini_filename='%s'", utils.to_str(st.ini_filename))
    printf("save_obj: section_logic='%s'", utils.to_str(st.section_logic))
    printf("save_obj: active_section='%s'", utils.to_str(st.active_section))
    printf("save_obj: gulag_name='%s'", utils.to_str(st.gulag_name))

    if st.ini_filename then
        packet:w_stringZ(st.ini_filename)
    else
        packet:w_stringZ("")
    end

    if st.section_logic then
        packet:w_stringZ(st.section_logic)
    else
        packet:w_stringZ("")
    end

    if st.active_section then
        packet:w_stringZ(st.active_section)
    else
        packet:w_stringZ("")
    end

    --if st.active_scheme then
    --    packet:w_stringZ(st.active_scheme)
    --else
    --    packet:w_stringZ("")
    --end

    if st.gulag_name then
        packet:w_stringZ(st.gulag_name)
    else
        packet:w_stringZ("")
    end

    --packet:w_s32(st.stype)

    save_logic(obj, packet)

    if st.active_scheme then
        issue_event(obj, db.storage[npc_id][st.active_scheme], "save")
    end

    pstor_save_all(obj, packet)
end

 

 

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

@Graff46 можно. Почему нет. Главное обратно прочитать в правильном порядке и за границу нетпакета не вылезти.

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

@Graff46 дополню ответ dsh очевидным (хотя, может, и не для всех) уточнением: после таких изменений нужна новая игра, старые сейвы, не содержащие добавленных данных, читаться будут некорректно.

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

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

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

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

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

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

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

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

Войти

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

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

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