Full Noob 1 Опубликовано 21 Мая 2014 Зарегистрировал по туторы юз предмета: function actor_binder:use_obj(obj) if obj:section()=="repair_kit_weapon" thenalife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())ineeded_condition = obj:condition()hm_repair.action_repair(ineeded_condition)endend создал скрипт: function action_repair(rcond)local repair_kit = db.actor:object("repair_kit_weapon")if repair_kit and (db.actor:active_slot()==1 or db.actor:active_slot()==2) and db.actor:item_in_slot(db.actor:active_slot()) thenrepair_kit:set_condition(rcond)local item = db.actor:item_in_slot(db.actor:active_slot())local need_for_repair = (1-item:condition())*(1/25)if item thenif repair_kit:condition()>=need_for_repair thenitem:set_condition(1)repair_kit:set_condition(repair_kit:condition()-need_for_repair)snd_obj = xr_sound.get_safe_sound_object([[hardcore_mod\repair\repair_weapon]])snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)endendendend Вылет. Пишет что не знает что condition() обращается к nil! Это что не успевает дойти до игры что у меня ремкомплект реснулся или как? И как решить? 1 Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 22 Мая 2014 (изменено) Да сама проверка кондишна. Вот я переделал скрипт немного вроде function action_repair(newcondition) local repair_kit = alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id()) --,db.actor:id())--local repair_kit = db.actor:object("repair_kit_weapon")--repair_kit:set_condition(newcondition)if (db.actor:active_slot()==1 or db.actor:active_slot()==2) and db.actor:item_in_slot(db.actor:active_slot()) thenlocal item = db.actor:item_in_slot(db.actor:active_slot())local need_for_repair = (1-item:condition())*(1/2)if item thenif repair_kit:condition()>=need_for_repair thenitem:set_condition(1)repair_kit:set_condition(repair_kit:condition()-need_for_repair)snd_obj = xr_sound.get_safe_sound_object([[hardcore_mod\repair\repair_weapon]])snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)endendenddb.actor:transfer_item(repair_kit,db.actor)end по разному пробовал, в итоге трансфер не работает, походу не знает что такое repair_kit...не успевает обработать? Как быть! Изменено 22 Мая 2014 пользователем Full Noob Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 22 Мая 2014 Тогда как? Так тоже не канает: alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id()) local repair_kit = db.actor:object("repair_kit_weapon") Видимо из за того что клиентский даже еще в онлайн перейти не успел. Как быть то?) Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 22 Мая 2014 Блин ничего не понял , я в скриптах просто не очень шарю пока. Завтра попробую разобраться если смогу. Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 23 Мая 2014 (изменено) А чё за global_time_ms? Expression : fatal error Function : CScriptEngine::lua_errorFile : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cppLine : 73Description :Arguments : LUA error: ...e.r. - hardcore\gamedata\scripts\bind_stalker.script:204: attempt to perform arithmetic on global 'global_time_ms' (a nil value) Таймер вроде как работает т.к. при изменении global_time_ms на time_global() не вылетает, но тайм глобал в минутах или как? Я написал 20 и в итоге ждать пришлось, так и не дождался. А что такое global_time_ms игра получается не знает. Изменено 23 Мая 2014 пользователем Full Noob 1 Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 23 Мая 2014 (изменено) У меня почемуто через тайм_глобал не работает) Я сделал так: local need_to_repair_weapon = nil local repairconditionfornew = 0local repairprocess = 0 function actor_binder:use_obj(obj)if obj:section()=="repair_kit_weapon" thenrepairconditionfornew = obj:condition()alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())need_to_repair_weapon = 20repairprocess = 1endend if repairprocess==1 thenneed_to_repair_weapon = need_to_repair_weapon-1if need_to_repair_weapon<1 thenhm_repair.action_repair(repairconditionfornew)need_to_repair_weapon = 0repairprocess = 0endend Вот блин а после загрузки сохранения ремкомплект опять целый, видимо потому что не предусмотрено ему изменение состояния...как быть? Изменено 23 Мая 2014 пользователем Full Noob Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 24 Мая 2014 Блин решил попробовать сделать ремкомплект оружием которое нельзя поместить в слот и который используется на K, но как его использовать на К? Видел в солянке ДМХ были как в зп так называемые ГОРЯЧИЕ КЛАВИШИ на юз аптеки консервы антирада и бинта вроде на F1-F4, вот мне также надо только с ремкомплектом. Почитал про назначение скриптам горячих кнопок там походу только через меню работать будет, да и не понятно даже что надо писать что не надо. Написал в актор_биндер.апдейт: if DIK_keys.DIK_K==1 then if db.actor:object("repair_kit_weapon") then hm_repair.action_repair() end end в итоге когда я достаю оружие у меня треск потому что сразу автоматом срабатывает ремкомплект как будто я нажимаю постоянно К. Может объясните что как писать прально ) 1 Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 25 Мая 2014 Я не умею нет-пакеты юзать, но спасибо по статье сделал работает, но вот только не мог бы ты обьяснить что из этого надо а что нет? Тут просто не очень хорошие пояснения, мне бы лишнее убрать если оно тут есть. Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 26 Мая 2014 Вот у меня тут вопросик опять по ремкомплекту возник: как отрисовать на худе что-либо? Мне нужно отрисовать на худе иконку ремкомплекта и его состояние(если он имеется в наличии). Возомжно ли это? Просто он у меня будет спрятан в слоте 4 и посмотреть состояние можно будет только в ящике т.к по непонятной причине если самому запихнуть предмет из инвентаря в слот 4 то игра вылетает без лога, что не даёт просто возвращать его в рюкзак на юзе. Из за этого и пришлось ему юз на K прикручивать. Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 26 Мая 2014 Поставить лог на actor_binder:info_callback(), и посмотреть, что реально когда выдается. Это ты мне? Если да то я думаю что тут дело просто в том что тот слот не видно и видимо там ячеек нету поэтому такая фигня, и всё же: можно ли отрисовать на худе иконку и состояние предмета под ней? Это было про PDA и инфо. Про слоты вспоминать надо. Что-то такое было, но, думаю, кто-нибудь раньше ответит. dc Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 27 Мая 2014 С ремкомплектом разобрался: гранаты ведь я тоже передвинул в слот песта чтобы трудней было , а ремкомплект поставил на слот гранат и при его доставании сделал weapon_hide и всё работает. Оружие в слоте 3 видно в инвентаре и его нельзя швырять по слотам то что надо, но вот ещё проблемка маленькая: разумеется не обойтись без сообщений чтобы яснее было, но вот только я получаю сообщение не такое news_manager.send_tip(db.actor, "%c[255,255,255,128]Невозможно отремонтировать оружие. Ремкомплект в плохом состоянии!", nil, nil, 3000) а вот этот кошмар http://pixs.ru/showimage/ssuser0527_2904593_12293821.jpg Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 27 Мая 2014 (изменено) А как прально транслейт прописать? Я вот вписал в string_table_tips то что надо и news_manager.send_tip(db.actor, "%c[255,255,255,128]"..game.translate_string("rk_text_weapon_in_slot").." %c[255,255,25,25]"..tostring(db.actor:active_slot()).."%c[255,255,255,128] "..game.translate_string("rk_text_repaired"), nil, nil, 3000) но не прокатило Хех а кодировка работает не вылетает как при некоторых. Изменено 18 Июня 2014 пользователем Black Hawk Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 11 Августа 2019 Значит взялся я ремкомплекты "отсебятские" делать для ТЧ. Логика такая: +Юзаем комплект - в инвентарь спавнится открытый ремкомплект. +Юзаем открытый ремкомплект - открывается окно с вариантами "Починить" и "Закрыть". Всё бы ничего, но почему-то после использования закрытого ремкомплекта колбэк use_object ломается. Подскажет кто в чём проблема? Скрытый текст --FUNCTION TO CHECK USED ITEM function mod_func_check_used_item(obj) mod_dbg("something used") if(obj~=nil) then local t_s_sect = obj:section() mod_dbg("cond now "..l_n_repairkit_cond) if(l_n_repairkit_cond==-1) then if(string.sub(t_s_sect,1,9)=="repairkit") then mod_func_respawn_kit(obj,true) elseif(string.sub(t_s_sect,1,16)=="opened_repairkit") then mod_func_respawn_kit(obj,true) local t_u_rep_act = ui_repairkit.mod_repair_action_ui(get_hud()) level.start_stop_menu(t_u_rep_act, true) end end end end --REPAIR FUNCTION function mod_func_repair_item(i_kit,n_slot) local t_i_repair = db.actor:item_in_slot(n_slot) local t_s_kittype = i_kit:section() local t_n_repairkit_cond = i_kit:condition() if(t_i_repair~=nil) then local t_s_sound = [[interface\inv_ruck]] --предмет сильно сломан --[[interface\inv_belt]] --звук пополнения local t_n_cond = t_i_repair:condition() local t_n_repaircond = 1-t_n_cond local t_n_newcond = 1 if(t_n_cond>0.26) then if(n_slot==6) then t_s_sound = [[interface\inv_belt]] --броня починена else t_s_sound = [[interface\inv_attach_addon]] --предмет починен end if(t_n_repairkit_cond<t_n_repaircond) then t_n_newcond = t_n_cond+t_n_repairkit_cond t_n_repairkit_cond = 0 else t_n_repairkit_cond = t_n_repairkit_cond-t_n_repaircond end t_i_repair:set_condition(t_n_newcond) end local snd_obj = xr_sound.get_safe_sound_object(t_s_sound) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end --SET NEW REPAIRKIT CONDITION function mod_set_newkit_condition(n_id) local t_i_newkit = level.object_by_id(n_id) if(t_i_newkit~=nil) then t_i_newkit:set_condition(l_n_repairkit_cond) else l_i_mod_repairkit = nil end l_n_repairkit_cond = -1 end function mod_func_respawn_kit(obj,open) l_n_repairkit_cond = obj:condition() local t_s_sect = obj:section() if(open==true) then t_s_sect = "opened_"..t_s_sect end l_i_mod_repairkit = alife():create(t_s_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) level.client_spawn_manager():add(l_i_mod_repairkit, -1, mod_set_newkit_condition) end Простите я забыл в спойлер код запихнуть, но сайт мне не позволяет отредактировать :D Ах да забыл! Вот это написано ещё в самом начале (чтобы не было лишних вопросов): Скрытый текст function mod_dbg(fmt,...) local con = get_console() con:execute(string.gsub(string.format(fmt,...), " ", "_")) con:execute("flush") end l_i_mod_repairkit = nil l_n_repairkit_cond = -1 Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 12 Августа 2019 (изменено) Методом тыка выяснил, что проблему вызывает колбэк на вход в онлайн комплекта: level.client_spawn_manager():add(l_i_mod_repairkit, -1, mod_set_newkit_condition) Видимо я не правильно записал сам колбэк? Не понимаю что не так. Изменено 12 Августа 2019 пользователем Full Noob Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 13 Августа 2019 @Kirgudu, не помогло. Один фиг дебаговые сообщения о юзе предмета перестают появляться после использования комплекта. Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 13 Августа 2019 (изменено) @AndreySol, не помогло. Я закомментил весь колбэк, но ничего не поменялось. Спасает только закомменчивание самой строчки "заведения" колбэка, но мне без него никак, так как при попытке сделать set_condition происходит краш: Скрытый текст [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: ...l.k.e.r\gamedata\scripts\secretsmod_functions.script:123: attempt to call method 'set_condition' (a nil value) Изменено 13 Августа 2019 пользователем Full Noob Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 14 Августа 2019 @AndreySol, всмысле? Если ты имеешь в виду "а можно ли НЕ на оружии применить set_condition", то я отвечу: да, можно. Только что поменял запуск функции спавна открытого комплекта на простой obj:set_condition(0.5). Это сработало. Если имелось в виду "можно ли получить condition НЕ оружия и перенести на другое НЕ оружие", то я уверен, что да (но это не точно). Но я попробовал написать так: Скрытый текст l_i_mod_repairkit = alife():create(t_s_sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) l_i_mod_repairkit:set_condition(0.5) Результат можешь почитать в моём предыдущем посте. Поделиться этим сообщением Ссылка на сообщение
Full Noob 1 Опубликовано 15 Августа 2019 (изменено) Сильно пахнет маразмом. Появилась кое-какая мысль и я решил попробовать в конец колбэка на выход в онлайн дописать level.client_spawn_manager():remove(n_id,-1) Получил довольно экзотический вылет: Скрытый текст stack trace: 0023:03C9D16A xrGame.dll [error][ 183] : Невозможно создать файл, так как он уже существует. Ещё эксперементировал с вторым ИД (который -1 сейчас). Пробовал и 0 и db.actor:id() (вроде что 0 что актор ид одинаковые насколько я знаю, но я так на всякий). Изменено 15 Августа 2019 пользователем Full Noob Поделиться этим сообщением Ссылка на сообщение