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

Скриптование


Svoboда

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

Первый вопрос: Как отследить class id оружия из которого было произведено убийство? Просто как не бился все равно вылетает "actor79", и кстати почему 79, а в lua_help.script указан индекс равный 78?

 

Второй вопрос: Как можно перенести менеджер тайников из ЗП в ТЧ? Или написать что-то подобное?

 

Третий вопрос: Есть ли 'hit callback' для актора, делал по аналогии - ничего не работало, его действительно нет, или я что-то не так делаю?

 

Версия игры: ТЧ 1.0004

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Artos, (по первому) а как тогда в симбионе работают подобного рода проверки?(н-р isGrenade)

 

Просто как ты говоришь - я так и делал,

Но работает не так как мне надо.

Поделиться этим сообщением


Ссылка на сообщение

Struck, как сделано в Симбионе там и смотри, не копипастить же кучку скриптов в этот топик ...

И что-то не вижу где мною даны конкретные ("как говоришь") коды, а то как именно ты делаешь и не получается - нам неведомо.

Раз не получается - значит "не так как тебе надо" делаешь, и или разбирайся самостоятельно или показывай как делаешь.

 

Как делаю - думаю всем понятно, просто передаю (victim, who) в коллбек и все. Я долго рассматривал кучку скриптов и пытался делать по аналогии - не вышло(делал, относительно говоря, копипастом).

Мне нужен только алгоритм отлавливания клсида оружия и все, пока только вырисовывается громоздкий код по отлавливанию смертельного хита(его типа) и в связи с этим я лишь "предполагаю" какое оружие могло быть в момент убийства.

Хотелось бы как-нибудь наверняка знать...кодов я не прошу :ny_ph34r_1: (пока)

Поделиться этим сообщением


Ссылка на сообщение

Artos, аргх, я ведь и говорю что именно так и делал, но мне нужно отследить тип хита, т.к. допустим я кидаю гранату и достаю ПМ, проверяю секцию активного слота в момент смерти - высветится ПМ, а не граната, ясно? И да, я над этим довольно долго думал и эксперименитровал, и вот пришлось только через отслежку хита делать, думал есть какой-то более рациональный способ.

Изменено пользователем ColR_iT
Жирным шрифтом писать абсолютно не за чем! Устное предупреждение.

Поделиться этим сообщением


Ссылка на сообщение

Artos, я сформулировал цель - мне нужно получить точный(!) clsid оружия из которого было произведено убийство, внятного ответа/алгоритма я так и не увидел("...наличие активного предмета у него в руках. Если таковой предмет имеется - он (предмет) и имеет твой искомый клсид." - если это внятный алгоритм, то он абсолютно не годится для решения моей задачки).

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Artos, действительно... :ny_dry:

 

мне нужно получить точный(!) clsid оружия

 

А не бочки, БТР'а и иже с ним...(ибо поняв как определяется одно, поймешь и остальное)

 

И по поводу "как задавать вопрос". Я смысл данного понимаю как код+указание на место "где не получается", я вроде все доступно указал, определяем victim и who, передаем в коллбек, копипастил я функции из _g.script, разве что переделал вид ЗП на ТЧ.

Поделиться этим сообщением


Ссылка на сообщение

malandrinus, я так и сделал, так как тоже ничего другого на ум не пришло; покопав коды simbion'a увидел портянки кодов того, что мне в данный момент нужно, вот и решил спросить о алгоритме, возможно(думал) есть другой путь, ну раз нет, так нет :) .

-----------------------------------------------------------------------------------------------------

 

Как получить факт того, что объект был поднят с земли?(parent() мне всегда 'userdata' возвращает, возможно потому, что в момент поднятия объект оказывается уже в рюкзаке)

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Предыдущий мой вопрос НЕ актуален.

 

 

 

TYOPA, минимум? я делал через EnableScrollBar

Поделиться этим сообщением


Ссылка на сообщение

Shredder, горизонтальной полосы прокрутки действительно нет.

Поделиться этим сообщением


Ссылка на сообщение

Хотя пожалуй мой вопрос не снимается :) .

Мне нужно отследить факт того что объект мы подняли с земли.

Делаю вот так:

 

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")

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Artos,

Поэтому потрудить привести коды, из которых будет видно, что же ты такое у себя вытворяешь

 

Я привел тот код, который я вставляю напрямую в коллбек на обретение предмета, сторонних махинаций я(пока) не делаю. Выдает он мне то, что я написал. Что еще нужно для прояснения ситуации?

 

давай оперировать понятием "безхозный", т.е. не имеющий владельца.

Согласен.

Поделиться этим сообщением


Ссылка на сообщение

Artos, и как же быть? Я просто пока не представляю как свзяать 'бесхозный' предмет и инвентарь нпс/актора.

Поделиться этим сообщением


Ссылка на сообщение

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

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Artos, у меня есть определенные предметы, ГГ бегает их и собирает, и как только он подбирает этот бесхозный(!) предмет происходит событие(единожды(!)(т.е. если мы выкинули этот предмет и подобрали опять(одругими словами - предмет побывал в инвентаре актора/нпс), то событие уже НЕпроисходит)), мне нужно запомнить id() в табличку(разумеется ее сохранив в псторе допустим) и вроде все просто, но ругается он у меня на строку с table.insert, когда я добавляю id предмета в свою табличку. Получаю id пердмета опять таки в коллбеке на обретение.

Добавляю разумеется как то так:

local id = obj:id()
table.insert(tbl,id)

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

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

 

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Предыдущий вопрос неактуален, все сделал!

 

Как можно проверить какая фраза была выбрана в скриптовом диалоге(без использования инфопоршней/функций)?

 

Обрисую что хочу в конечном итоге:

 

Мне выпадает три фразы для ответа:

Фраза 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.

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Такой вопрос, вывожу статик в инвентарь, который по мере игры обновляется, все вроде хорошо, бегаем - собираем итемы, он обновляется, но(!) после save/load статик старый остается, причем сбрасывается параметр cnt на 0(изначально у меня local cnt = 0), а поверх него появляется новый(накладывается) и отсчет идет уже в наложенном статике, ввиду чего получается невозможно прочесть написанное.

 


local wnd = nil
local ca, cr, cg, cb = 255, 231, 153, 22

function show(cnt)
if wnd == nil then return end
wnd:SetText("Кол-во: "..cnt)
end

function init()
if wnd then return end
local 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, но...мало что понял, хотя там вроде бы есть что мне нужно.

Поделиться этим сообщением


Ссылка на сообщение

_Призрак_, я, как бы, прежде чем писать перепробовал кучу вариантов <_<, и этот приводит к...

 

attempt to index local 'inventory_wnd' (a nil value)

 

Ибо, как я понял, он(main_input_receiver) отлавливает открытое окно, а не закрытое :) .

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение

Я вообще-то так и сделал, только ругается то не на мой класс окна, если ты не заметил.

Поделиться этим сообщением


Ссылка на сообщение

Charsi, Чет я тугой походу...вылетаю с пустым логом при повторном открытии инвентаря.

 


local wnd = nil
local inventory_wnd = nil
local ca, cr, cg, cb = 255, 231, 153, 22

function show(cnt)
if wnd == nil then return end
wnd:SetText("Кол-во: "..cnt)
end

function de_init()
inventory_wnd:DetachChild(wnd)
end

function init()
if not wnd then
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)
end
inventory_wnd:AttachChild(wnd)
end

 

Изменено пользователем Struck

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...