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

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

@AndreySol 

Сложновато для того, кто не в курсе - что такое СДК от слова вообще. Да и не непись это получается - а голем какой-то. 

В принципе спорно и утверждение, что метод лучше - чем приравнивание в сталкеру Сахарову.

 

Изменено пользователем _Val_
Ссылка на комментарий
5 часов назад, _Val_ сказал:

@AndreySol 

Сложновато для того, кто не в курсе - что такое СДК от слова вообще. Да и не непись это получается - а голем какой-то. 

В принципе спорно и утверждение, что метод лучше - чем приравнивание в сталкеру Сахарову.

 

Мне в сдк и надо настроить торговца, как логику торговли прописать знаю, а вот остальное нет! Ошибки появляются какие-то, иногда вылеты(

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

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

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
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

×
×
  • Создать...