Struck 61 Опубликовано 9 Сентября 2012 (изменено) Первый вопрос: Как отследить class id оружия из которого было произведено убийство? Просто как не бился все равно вылетает "actor79", и кстати почему 79, а в lua_help.script указан индекс равный 78? Второй вопрос: Как можно перенести менеджер тайников из ЗП в ТЧ? Или написать что-то подобное? Третий вопрос: Есть ли 'hit callback' для актора, делал по аналогии - ничего не работало, его действительно нет, или я что-то не так делаю? Версия игры: ТЧ 1.0004 Изменено 9 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 11 Сентября 2012 Artos, (по первому) а как тогда в симбионе работают подобного рода проверки?(н-р isGrenade) Просто как ты говоришь - я так и делал, Но работает не так как мне надо. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 16 Сентября 2012 Struck, как сделано в Симбионе там и смотри, не копипастить же кучку скриптов в этот топик ... И что-то не вижу где мною даны конкретные ("как говоришь") коды, а то как именно ты делаешь и не получается - нам неведомо. Раз не получается - значит "не так как тебе надо" делаешь, и или разбирайся самостоятельно или показывай как делаешь. Как делаю - думаю всем понятно, просто передаю (victim, who) в коллбек и все. Я долго рассматривал кучку скриптов и пытался делать по аналогии - не вышло(делал, относительно говоря, копипастом). Мне нужен только алгоритм отлавливания клсида оружия и все, пока только вырисовывается громоздкий код по отлавливанию смертельного хита(его типа) и в связи с этим я лишь "предполагаю" какое оружие могло быть в момент убийства. Хотелось бы как-нибудь наверняка знать...кодов я не прошу :ny_ph34r_1: (пока) Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 17 Сентября 2012 (изменено) Artos, аргх, я ведь и говорю что именно так и делал, но мне нужно отследить тип хита, т.к. допустим я кидаю гранату и достаю ПМ, проверяю секцию активного слота в момент смерти - высветится ПМ, а не граната, ясно? И да, я над этим довольно долго думал и эксперименитровал, и вот пришлось только через отслежку хита делать, думал есть какой-то более рациональный способ. Изменено 17 Сентября 2012 пользователем ColR_iT Жирным шрифтом писать абсолютно не за чем! Устное предупреждение. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 17 Сентября 2012 (изменено) Artos, я сформулировал цель - мне нужно получить точный(!) clsid оружия из которого было произведено убийство, внятного ответа/алгоритма я так и не увидел("...наличие активного предмета у него в руках. Если таковой предмет имеется - он (предмет) и имеет твой искомый клсид." - если это внятный алгоритм, то он абсолютно не годится для решения моей задачки). Изменено 17 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 17 Сентября 2012 Artos, действительно... :ny_dry: мне нужно получить точный(!) clsid оружия А не бочки, БТР'а и иже с ним...(ибо поняв как определяется одно, поймешь и остальное) И по поводу "как задавать вопрос". Я смысл данного понимаю как код+указание на место "где не получается", я вроде все доступно указал, определяем victim и who, передаем в коллбек, копипастил я функции из _g.script, разве что переделал вид ЗП на ТЧ. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 (изменено) malandrinus, я так и сделал, так как тоже ничего другого на ум не пришло; покопав коды simbion'a увидел портянки кодов того, что мне в данный момент нужно, вот и решил спросить о алгоритме, возможно(думал) есть другой путь, ну раз нет, так нет . ----------------------------------------------------------------------------------------------------- Как получить факт того, что объект был поднят с земли?(parent() мне всегда 'userdata' возвращает, возможно потому, что в момент поднятия объект оказывается уже в рюкзаке) Изменено 18 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 Предыдущий мой вопрос НЕ актуален. TYOPA, минимум? я делал через EnableScrollBar Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 Shredder, горизонтальной полосы прокрутки действительно нет. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 (изменено) Хотя пожалуй мой вопрос не снимается . Мне нужно отследить факт того что объект мы подняли с земли. Делаю вот так: local sobj = alife():object(obj:id()) if sobj and sobj.parent_id and sobj.parent_id == 65535 then sendtip("подобрали") end Типс вообще не вылетает, какой тогда parent у объекта лежащего на земле?(parent_id всегда возвращает "0", parent() - "userdata") Изменено 18 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 Artos, Поэтому потрудить привести коды, из которых будет видно, что же ты такое у себя вытворяешь Я привел тот код, который я вставляю напрямую в коллбек на обретение предмета, сторонних махинаций я(пока) не делаю. Выдает он мне то, что я написал. Что еще нужно для прояснения ситуации? давай оперировать понятием "безхозный", т.е. не имеющий владельца. Согласен. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 Artos, и как же быть? Я просто пока не представляю как свзяать 'бесхозный' предмет и инвентарь нпс/актора. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 (изменено) Artos, нужно получить факт обретения 'бесхозного' предмета, а связать...я имел ввиду отслежку как раз таки поднятия предмета.(да, я не прав, оперирую разными понятиями - а цель неизменна) Захотелось "взять" предмет Можно поподробнее? Допустим я начинаю вот так: for i=1,65535 do local obj = alife():object(i) if obj and obj.online and obj.parent_id and obj.parent_id == 65535 then --/ сюда что? end end Изменено 18 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 18 Сентября 2012 (изменено) Artos, у меня есть определенные предметы, ГГ бегает их и собирает, и как только он подбирает этот бесхозный(!) предмет происходит событие(единожды(!)(т.е. если мы выкинули этот предмет и подобрали опять(одругими словами - предмет побывал в инвентаре актора/нпс), то событие уже НЕпроисходит)), мне нужно запомнить id() в табличку(разумеется ее сохранив в псторе допустим) и вроде все просто, но ругается он у меня на строку с table.insert, когда я добавляю id предмета в свою табличку. Получаю id пердмета опять таки в коллбеке на обретение. Добавляю разумеется как то так: local id = obj:id() table.insert(tbl,id) Изменено 18 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 19 Сентября 2012 (изменено) Artos, да, именно это мне и нужно было(не изложив конечной цели запутал и вас, и себя), спасибо за помощь и наводку, все сделал и работает как надо. Только осталось одно но(!), как сделать еще запоминание того, что предмет побывал и у непися в инвентаре? Т.к. когда я беру из рюкзака непися предмет у меня тоже происходит мое событие. Зарегестрировать оn_item_take в xr_motivator.script и вызывать там? Или только более геморройный вариант годится?(Типа перебирать инвентарь юзаемого трупа, если в нем есть мои предметы то заносить их в таблицу "побывавших в рюкзаке"). Типа как-то так: function use(npc) for i=0,npc:object_count()-1 do local obj = npc:object(i) local id = obj:id() if npc:object(obj:section()) then if founded_items[id] == nil then if isMyItems(obj) then founded_items[id] = true end else if not isMyItems(obj) then founded_items[id] = nil end end end end end Изменено 19 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 19 Сентября 2012 (изменено) Предыдущий вопрос неактуален, все сделал! Как можно проверить какая фраза была выбрана в скриптовом диалоге(без использования инфопоршней/функций)? Обрисую что хочу в конечном итоге: Мне выпадает три фразы для ответа: Фраза 1 Фраза 2 Фраза 3 После этого у меня выпадает три talk_message в зависимости от выбранной фразы, и появляются опять таки три фразы для ответа, т.о. от каждого talk_message по три фразы для ответа. Поехали дальше, эти три фразы для ответа на фразу с talk_message имеют одинаковое название, т.о. я нехочу городить девять фраз, а хочу лишь три, и в зависимости от выбранного варианта из фразы с talk_message подставлять разные условия в эти три фразы. Постараюсь сейчас обрисовать свой диалог: Фраза 1 => Сообщение с talk_message(1) => Фраза 4 Фраза 5 Фраза 6 Фраза 2 => Сообщение с talk_message(2) => Фраза 4 Фраза 5 Фраза 6 Фраза 3 => Сообщение с talk_message(3) => Фраза 4 Фраза 5 Фраза 6 У 4,5 и 6 фраз название одинаковое, но действия разнятся в зависимости от выбранного сообщения с talk_message. Изменено 19 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 24 Сентября 2012 Такой вопрос, вывожу статик в инвентарь, который по мере игры обновляется, все вроде хорошо, бегаем - собираем итемы, он обновляется, но(!) после save/load статик старый остается, причем сбрасывается параметр cnt на 0(изначально у меня local cnt = 0), а поверх него появляется новый(накладывается) и отсчет идет уже в наложенном статике, ввиду чего получается невозможно прочесть написанное. local wnd = nillocal ca, cr, cg, cb = 255, 231, 153, 22function show(cnt)if wnd == nil then return endwnd:SetText("Кол-во: "..cnt)endfunction init()if wnd then return endlocal inventory_wnd = level.main_input_receiver()wnd = CUIStatic()wnd:SetAutoDelete(true)wnd:SetWndRect(190, 730, 108, 33)wnd:SetText("Кол-во: ")wnd:SetFont(GetFontGraffiti22Russian())wnd:SetTextColor(ca,cr,cg,cb)inventory_wnd:AttachChild(wnd)end Вызываю следующим образом, при переборе инвентаря методом iterate_inventory пишу show(cnt), в info_callback'e вызываю функцию init(). P.S. Смотрел m_backpack.script в SIMBION'e, но...мало что понял, хотя там вроде бы есть что мне нужно. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 24 Сентября 2012 (изменено) _Призрак_, я, как бы, прежде чем писать перепробовал кучу вариантов , и этот приводит к... attempt to index local 'inventory_wnd' (a nil value) Ибо, как я понял, он(main_input_receiver) отлавливает открытое окно, а не закрытое . Изменено 24 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 24 Сентября 2012 Я вообще-то так и сделал, только ругается то не на мой класс окна, если ты не заметил. Поделиться этим сообщением Ссылка на сообщение
Struck 61 Опубликовано 24 Сентября 2012 (изменено) Charsi, Чет я тугой походу...вылетаю с пустым логом при повторном открытии инвентаря. local wnd = nillocal inventory_wnd = nillocal ca, cr, cg, cb = 255, 231, 153, 22function show(cnt)if wnd == nil then return endwnd:SetText("Кол-во: "..cnt)endfunction de_init()inventory_wnd:DetachChild(wnd)endfunction init()if not wnd theninventory_wnd = level.main_input_receiver()wnd = CUIStatic()wnd:SetAutoDelete(true)wnd:SetWndRect(190, 730, 108, 33)wnd:SetText("Кол-во: ")wnd:SetFont(GetFontGraffiti22Russian())wnd:SetTextColor(ca,cr,cg,cb)endinventory_wnd:AttachChild(wnd)end Изменено 24 Сентября 2012 пользователем Struck Поделиться этим сообщением Ссылка на сообщение