6poHR777, Я в скриптах пока зелёный, и может чего лишнего добаввил, но я-бы так сделал
Code
local note = nil
function repair_outfit_start() if note and type(note) == "number" then if not level.object_by_id(note) then alife():create("repair_kit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end note = nil end if note and type(note) == "userdata" then note = note:id() else note = nil end end
function repair_outfit() local item_in_slot = db.actor:item_in_slot(6) if item_in_slot ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=0.999 then item_in_slot:set_condition(1) local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен." db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000) и Т.Д.
В конце добавь
Code
function use_repair(obj) if obj:section() == "repair_kit" then note = obj --если наша вещь, то запомнить его userdata end end
в function actor_binder:on_item_drop (obj) добавь repair.use_repair(obj) в function actor_binder:update(delta) repair.repair_outfit_start()
По анологии шомпол сделал, с функцией ремонта брони.
Факт в том, что всегда переносил эти вещи легко, а сейчас вылет этот. ЗЫ в сдк нехочется локацию декомпилировать, что бы потом всё снова компилировать (итак 10 штук на максах надо скомпилить)
sasmeleuz, как их вообще перенести можно. Если на локации есть стёкла, оконные например, которым назначен шейдер бьющегося стекла, xwindows кажется, то при компиляции СДК сама генерирует осколки, на которые будет разбито это стекло. Переносить их от куда то нибыло просто безсмысленно.
if note and type(note) == "number" then if not level.object_by_id(note) then if db.actor:object("key") then level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню end alife():create("repair_kit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end note = nil end if note and type(note) == "userdata" then note = note:id() else note = nil end end
function DeleteItem(iId) --добавляем функцию удаления предмета из инвентаря if iId then local seObj=alife():object(iId) if seObj then alife():release(seObj,true) end end end
function repair_wpn_1() local item_in_slot = db.actor:item_in_slot(1) local maslo = db.actor:object("maslo") if item_in_slot ~= nil and item_in_slot:condition() < 0.7 and maslo then --# собственно само сообщение news_manager.send_tip(db.actor, "%c[255,0,255,0]Шомлп\\n%c[default]Ремонт невозможен.", 0, "trader", 10000) elseif item_in_slot ~= nil and item_in_slot:condition() > 0.7 and maslo then item_in_slot:set_condition(1) DeleteItem(maslo:id()) end end
function repair_wpn_2() local item_in_slot = db.actor:item_in_slot(2) local maslo = db.actor:object("maslo") if item_in_slot ~= nil and item_in_slot:condition() < 0.7 and maslo then --# собственно само сообщение news_manager.send_tip(db.actor, "%c[255,0,255,0]Шомлп\\n%c[default]Ремонт невозможен.", 0, "trader", 10000) elseif item_in_slot ~= nil and item_in_slot:condition() > 0.7 and maslo then item_in_slot:set_condition(1) DeleteItem(maslo:id()) end end
function repair_armora() local item_in_slot = db.actor:item_in_slot(6) local kevlar = db.actor:object("kevlar") if item_in_slot ~= nil and item_in_slot:condition() < 0.7 and kevlar then --# собственно само сообщение news_manager.send_tip(db.actor, "%c[255,0,255,0]Шомлп\\n%c[default]Ремонт невозможен.", 0, "trader", 10000) elseif item_in_slot ~= nil and item_in_slot:condition() > 0.7 and kevlar then item_in_slot:set_condition(1) DeleteItem(kevlar:id()) end end
--/ спавн предметов в инвентори function spawn_item_in_inv(section,npc) if npc == nil then npc = db.actor end return alife():create(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) end
--функция вызываемая из дропа function use_repair(obj) if obj:section() == "repair_kit" then note = obj --если наша вещь, то запомнить его userdata end end
Как видишь запуск функций ремонта происходит через меню. И есть проверка наличия предмета.
Добавлено (20.08.2012, 14:35) --------------------------------------------- Объект из ТЧ алайфа к той же локации в ЗП. Эта возможно. Я сам делал, года два назад.
Добавлено (20.08.2012, 14:47) --------------------------------------------- И зы: это на всех объектах - аномалиях, кострах, физических и тп
6poHR777, Как я понимаю скрипт ты хочешь вызвать при нажатии использовать? Проверь любой другой вариант запуска, диалог, ТАВ и т.д. В если скрипт сработает по любому придёт смс, так увидишь работает ли скрипт.
Добавлено (20.08.2012, 15:28) --------------------------------------------- Вот это: and item_s6:condition() ~=1 зачем?
Добавлено (20.08.2012, 15:31) --------------------------------------------- alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) Надо вызвать один раз, потом прописать условия.
function actor_binder:repair_outfit_start(obj, who) if obj then if obj:section() == "repair_kit_outfit" then Remont_tool.repair_outfit() alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end end end
alife():create("repair_kit_outfit" -- Это вызов самого девайса.
П.С. Бинд_сталкер пока плохо знаю, ты уверен что правильно функцию вызываешь?
Сообщение отредактировал ins33 - Понедельник, 20.08.2012, 15:40
Честно, подобное подсмотрел на инсайде, вроде должно быть так, только использую итем, он исчезает, но функция не срабатывает... Сейчас буду смотреть через диалог.
function actor_binder:repair_outfit_start(obj, who) if obj then if obj:section() == "repair_kit_outfit" then Remont_tool.repair_outfit() -- УДАЛИ. alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end end end
Remont_tool.repair_outfit() -- это надо запускать из бинда,
Добавлено (20.08.2012, 15:49) --------------------------------------------- Вроде надо. Дай ссылку на инсайд.
Добавлено (20.08.2012, 15:54) --------------------------------------------- И этот код я-бы прописал в Remont_tool а не в бинд.
6poHR777, я попробовал без всяких колбеков в bind_stalker.script.В: function actor_binder:on_item_drop (obj) level_tasks.proceed(self.object) --game_stats.update_drop_item (obj, self.object) my_spawn.repair_outfit() end
Работает.
Добавлено (20.08.2012, 16:06) --------------------------------------------- Эта тоже не нужна.
function actor_binder:repair_outfit_start(obj, who) if obj then if obj:section() == "repair_kit_outfit" then Remont_tool.repair_outfit() -- УДАЛИ. alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id()) end end end