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

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

@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

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