ins33 16 Опубликовано 14 Июля 2012 Для ТЧ, делаю девайс, он уже работает, но хотелось бы добавить ключ, который позволит им пользоваться. (вызывать диалоговое окно). Подскажите ПЛЗ как, или хот намекните. СПС. Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 16 Июля 2012 AndreySol, Да вариант с ключем, как с предметом. local key = db.actor:object("key") --проверка на ключ if note and type(note) == "number" then if not level.object_by_id(note) then level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню Ключа нет, а диалоговое окно открывается. Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 16 Июля 2012 Shredder, Прописал так: if note and type(note) == "number" then if not level.object_by_id(note) then local key = db.actor:object("key") if key then --проверка на ключ level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню alife():create("repair_kit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) Вылет по бинду. Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 16 Июля 2012 (изменено) Shredder, local note = nil function use_repkit() if note and type(note) == "number" then if not level.object_by_id(note) then local key = db.actor:object("key") if key then --проверка на ключ level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню 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 Изменено 16 Июля 2012 пользователем ins33 Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 16 Июля 2012 Shredder, Да, я только учусь. Это прописывал. Но вылет мешает, опять бинд. И если убрать : if note and type(note) == "number" then if not level.object_by_id(note) then Тот-же вылет. Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 17 Июля 2012 (изменено) Zander_driver, Согласен, но вылет стабилен! \s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:240: attempt to index global 'repair' (a nil value) В строчке 240: repair.use_repkit(). Если к коду добавить: if note and type(note) == "number" then if not level.object_by_id(note) then Девайс пропадает из инвентаря, а диалоговое окно ремонта не появляется. Изменено 17 Июля 2012 пользователем ins33 Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 17 Июля 2012 Desertir, http://rghost.ru/39256261 чистый файл из тт2. Scarabay, Ошибок нет, без ключа всё работает. Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 17 Июля 2012 Shredder, Спасибо, до этого не допёр: if db.actor:object("key") then. Проверка нужна для квеста. СПАСИБО!!! Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 21 Июля 2012 ---------- -- чтение формы из нет-пакета ---------- function r_shape(packet) local s local st = {} st.count = packet:r_u8() st.shapes = {} for i=1, st.count do s = {} s.type = packet:r_u8() if s.type == 0 then s.center = packet:r_vec3() s.radius = packet:r_float() else s.axis_x = packet:r_vec3() s.axis_y = packet:r_vec3() s.axis_z = packet:r_vec3() s.offset = packet:r_vec3() end st.shapes[i] = s end return st end ---------- -- запись формы в нет-пакет ---------- function w_shape(packet, st) local s packet:w_u8(st.count) for i=1, st.count do s = st.shapes[i] packet:w_u8(s.type) if s.type == 0 then packet:w_vec3(s.center) packet:w_float(s.radius) else packet:w_vec3(s.axis_x) packet:w_vec3(s.axis_y) packet:w_v ec3(s.axis_z) packet:w_vec3(s.offset) end end end ---------- -- перепаковка нет-пакета созданного скриптом рестрикта ---------- function rewrite_restrictor(se_obj, custom, radius) local packet = net_packet() se_obj:STATE_Write(packet) local game_vertex_id = packet:r_u16() local distance = packet:r_float() local direct_control = packet:r_s32() local level_vertex_id = packet:r_s32() local object_flags = packet:r_s32() local custom_data = packet:r_stringZ() local story_id = packet:r_s32() local spawn_story_id = packet:r_s32() local shape = r_shape(packet) local restrictor_type = packet:r_u8() custom_data = custom shape = {} shape.count = 1 shape.shapes = {} shape.shapes[1] = {} shape.shapes[1].type = 0 shape.shapes[1].center = vector():set(0,0,0) shape.shapes[1].radius = radius packet:w_u16(game_vertex_id) packet:w_float(distance) packet:w_s32(direct_control) packet:w_s32(level_vertex_id) packet:w _s32(object_flags) packet:w_stringZ(custom_data) packet:w_s32(story_id) packet:w_s32(spawn_story_id) w_shape(packet, shape) packet:w_u8(restrictor_type) se_obj:STATE_Read(packet, packet:w_tell() - packet:r_tell()) end function create_shompl_restr() local se_obj = alife():create("space_restrictor",vector():set(-247.4907989502,-20.131322860718,-153.27322387695),12047,47) local custom = "[logic]\ncfg = scripts\ins\shompl.ltx" --путь к логике рестриктора rewrite_restrictor(se_obj, custom, 5.0) --5.0 - это радиус действия нашего рестриктора end Вроде всё правильно сделал, но при добавлении в бинд_сталкер имя_файла.create_shompl_restr(), происходит вылет по этой строчке. Подскажите, может что-то пропустил? Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 3 Августа 2012 (изменено) NaslednikTutti, [logic] active = sr_idle@one [sr_idle@one] on_actor_inside = {+поршень} nil %=имя_скрипта.функцияl()% nil указывает на однократное срабатывание. Добавлено через 23 мин.: Пытаюсь запустить скрипт function in_loc() if level_name == "l05_bar" then return true else return false end end function metka_gost() printf ("Поговорить В Баре с Гостом") news_manager.send_tip(db.actor, "%c[255,0,255,0]ГОСТ\\n%c[default]Зайди в бар, дело есть.", 0, "trader", 10000) local obj = alife():story_object(504) --сид Госта local obj_id = obj.id function add_spot_on_map(obj_id,type,text) if obj_id then if not text then text = "no_text" end level.map_add_object_spot_ser(obj_id, type, text) end end function add_spot_on_map2(obj_id,type,text) metka_gost.add_spot_on_map(obj.id,"green_location","Поговорить с Гостом") end из бинд_сталкера. Прописывал в function actor_binder:update(delta) потм в function actor_binder:net_spawn(data) metka_gost.in_loc (actor, npc) return false end и получаю вылет. Подскажите, что не так сделал. Изменено 3 Августа 2012 пользователем ins33 Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 3 Августа 2012 Struck, Делаю по уроку. имя_файла.add_spot_on_map(obj.id,"green_location","Текст") Какое имя_файла надо задать наверно не правильно понял. Но больше всего интересует, как в биндере актора правильно вызвать функцию проверки уровня. Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 5 Августа 2012 (изменено) NaslednikTutti, Это логика для рестраикса. Изменено 5 Августа 2012 пользователем ins33 Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 20 Августа 2012 Подскажите, как запустить скрипт через определённый промежуток времени. В скрипте две функции: проверка_наличия_предмета и функция_действия. Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 20 Августа 2012 Struck Я собираюсь его запускать при заходе на локу, с определённым событием. пстор это что? Поделиться этим сообщением Ссылка на сообщение
ins33 16 Опубликовано 21 Июня 2016 (изменено) С помощью string.find получаю таблицу в которой есть строки с индексом _delet.Затем table.remove(tbl, _delet) пытаюсь очистить таблицу от всех строк _deletи ловлю вылет bad argument #1 to 'foreach' (table expected, got table) -- вместо таблицы получена таблица table.remove(obj, "_flame") --> bad argument #1 to 'remove' (table expected, got userdata) for a=10,65635,1 do local obj =level.object _by_id ( a ) if obj and string.fi nd ( obj:nam e(),"search_") then table.remove ( obj, _delete) По сути надо из таблицы:a_*, а_*2, а_*_3, а_delet, а_*_delet, а_*_конец_таблицыудалить все вхождения в delet.Или произвести действие только с:a_*, а_*2, а_*_3, а_*_конец_таблицыисключая а_delet, а_*_delet Или может надо вообще по другому получать таблицу? @dsh, local sObj = alife():object("esc_wolf") Изменено 21 Июня 2016 пользователем ins33 Поделиться этим сообщением Ссылка на сообщение