jboo7, самому докопаться до истины - "не наш метод"?? Ну ок, сделаю тебе полный "тутор по взрыву канистры". В картинках. С кодом.
Так как амк_канистры не нашёл, сделал пример на "Ниве", надеюсь, это-то сможешь поменять?? В файле
ui_main_menu.script объявляем переменную в самом начале:
local niva_id = 0далее добавляем свои вызовы в
function main_menu:OnKeyboard(dik, keyboard_action) - вешаем на F1 и F2
Код
if dik == DIK_keys.DIK_F1 then
if level.present() and (db.actor ~= nil) and db.actor:alive() then
local console = get_console()
console:execute("main_menu off")
spawn_niva()
end
end
if dik == DIK_keys.DIK_F2 then
if level.present() and (db.actor ~= nil) and db.actor:alive() then
local console = get_console()
console:execute("main_menu off")
boom_niva()
end
end
в конце скрипта, собственно, "наше всё"
Код
function spawn_niva()
local lvid, gvid = db.actor:level_vertex_id(),db.actor:game_vertex_id()
local pos = db.actor:position()
local dir = db.actor:direction()
pos = pos:add(dir:mul(5))
local spawn_item = alife():create("vehicle_niva",pos,lvid, gvid)
local niva_name = spawn_item:section_name()
niva_id = spawn_item.id
amk.logf("Марка и номер двигателя: "..tostring(niva_name).." "..tostring(spawn_item.id))
end
function boom_niva()
local obj_niva = level.object_by_id(niva_id)
if obj_niva then
local niva_pos = obj_niva:position()
local niva_dist = niva_pos:distance_to(db.actor:position())
amk.logf("Номер авто в ГАИ: "..tostring(niva_id))
amk.logf("Позиция авто: "..tostring(niva_pos.x).." "..tostring(niva_pos.y).." "..tostring(niva_pos.z))
amk.logf("Расстояние до актора: "..tostring(niva_dist))
local boom = hit()
boom.direction = vector():set(0,1,0)
boom.impulse = 1
boom.draftsman = obj_niva
boom.power = 10
boom.type = hit.explosion
obj_niva:hit(boom)
else
amk.logf("Авто в ГАИ не зарегестировано!! Угнали??")
end
end
Запускаем, проверяем, скриним
Тыц на Esc и F1, опа, сработало!
И в логе появилось
! Unknown command: :Марка и номер двигателя: vehicle_niva 41217Отходим, шоб не долбануло...
Тыц на Esc и F2, Бумс!
Ну и на финал, лог
! Unknown command: :Номер авто в ГАИ: 41217
! Unknown command: :Позиция авто: -119.96485137939 -8.2003936767578 -141.2625579834
! Unknown command: :Расстояние до актора: 12.44276714325Вывод в лог используется амк-шный, ибо удобен... если у тебя нет файла amk.script ( в чём я сомневаюсь), то вот используемые функции
Код
function logf( fmt, ... )
logf_console = get_console()
logf = logf_main
logf_main( fmt, ... )
end
function logf_main( fmt, ... )
local c = select( "#", ... )
if c <= 0 then -- nothing to format
logf_console:execute( ":" .. string.gsub( fmt, " ", "\160" ) )
else
logf_console:execute( ":" .. string.gsub( string.format( fmt, ... ), " ", "\160" ) )
end
end
Вопросы??