Shkiper2012 35 Опубликовано 16 Июня 2015 (изменено) Доброго времени суток. Вопрос: можно ли установить "состояние"(condition) предмету на классе "антирада"? Если - да, то как это корректно сделать. local sim = alife()local pos = db.actor:position()local lvid = db.actor:level_vertex_id()local gvid = db.actor:game_vertex_id()local pid = db.actor:id()local obj = sim:create("Мой предмет section", pos, lvid, gvid, pid)if obj then obj:set_condition(0.5)end Либо так:local se_obj = (alife():object(obj:id())if se_obj then se_obj:set_condition(0.5)endИтог: вылет со строкой: attempt to call method 'condition' (a nil value) Мне это нужно для того, чтобы: несколько таких предметов не группировались в инвентаре ГГ, для отслеживание их состояния, а так же возможность их использования. Если подобное уже описывалось на форуме - ткните куда копать. Поиск не выдал ничего конкретного(либо я плохо искал.). Заранее признателен. Изменено 16 Июня 2015 пользователем Shkiper2012 Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 18 Июня 2015 (изменено) Признателен всем ответившим. Для себя нашел такой выход, как создание "нового" класса на базе "object_binder" для нужного предмета. И уже в нем задаю нужные параметры. Хотя ХЕ и 7, тоже интересуюсь, но пока только хожу около них, как кот у горячей каши, а "съесть" не могу. =) Ещё такой вопрос: как отловить момент перезарядки, разрядки и момент смены типов патронов у оружия? Есть ли флаг или что-то подобное для этого? Я сейчас "ловлю" последний патрон в стволе, но может быть есть более изящный способ? Для версии ТЧ 1.0006, нужно для манипуляций с оружием. Изменено 11 Июля 2015 пользователем Dennis_Chikin Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 4 Мая 2017 @TIGER_VLAD, Если используешь движок, где есть коллбэки на нажатие/удержание/отпускание клавиш (например, X-Ray extensions), то можно попробовать так: [spoiler=noclip.script] --[[ ------------------------------------------------------------------------------------------------------- -- File: noclip.script -- Description: Noclip режим (режим свободного полета). --]] ------------------------------------------------------------------------------------------------------- local debug_log = true -- Пишем лог? Да = true / Нет = false local module_init = true local module_name = script_name() local function dbg_logf(fmt,...) if debug_log then log1(fmt,...) end end noclip_active = true -- Вкл. = true / ВЫКЛ. = false local distant_step = 1 -- Кол-во метров, на который смещается камера в режиме NOclip. -- Вкл./ВЫКЛ. режима NOclip. -- function noclip_ON_OFF() if (noclip_active == true) then dbg_logf("~~noclip >>> OFF ") noclip_active = false -- ВЫКЛ.режим бога. -- local console = get_console() console:execute("g_god off") else dbg_logf("--noclip >>> ON ") noclip_active = true -- Вкл.режим бога. -- local console = get_console() console:execute("g_god on") end end -- Коллбэк на удержание клавиши. -- function on_key_hold(key, bind) if (noclip_active == false) then return true end -- kR -- +1 метр к скорости! -- if bind == key_bindings.kWPN_RELOAD then distant_step = distant_step + 1 end -- kT -- -1 метр к скорости! -- if bind == key_bindings.kWPN_FUNC then distant_step = distant_step - 1 if distant_step <= 0 then distant_step = 1 end end -- kW -- Вперед! -- if bind == key_bindings.kFWD then local position = db.actor:position() local direction = device().cam_dir db.actor:set_actor_position(position:mad(direction, distant_step)) end -- kS -- Назад! -- if bind == key_bindings.kBACK then local position = db.actor:position() local direction = device().cam_dir db.actor:set_actor_position(position:mad(direction, (-distant_step))) end -- kA -- Стрейф влево! -- if bind == key_bindings.kL_STRAFE then local position = db.actor:position() local direction = device().cam_right db.actor:set_actor_position(position:mad(direction, (-distant_step))) end -- kD -- Стрейф вправо! -- if bind == key_bindings.kR_STRAFE then local position = db.actor:position() local direction = device().cam_right db.actor:set_actor_position(position:mad(direction, distant_step)) end -- kSpace -- Наверх! -- if bind == key_bindings.kJUMP then local position = db.actor:position() local direction = device().cam_top db.actor:set_actor_position(position:mad(direction, distant_step)) end -- Left SHIFT -- Вниз! -- if bind == key_bindings.kCROUCH_TOGGLE then local position = db.actor:position() local direction = device().cam_top db.actor:set_actor_position(position:mad(direction, (-distant_step))) end end if module_init then dbg_logf("**DBG: LOADING MODULE: "..module_name..".script -- Ok. ") end Во время режима NOclip я включаю режим бога, чтоб гг не застрелили пока он летит до пункта назначения. Клавишами R(по-умолчанию "Перезарядка") и T(у меня это = "Переключение на подствольник") регулирую скорость (а точнее, кол-во метров на которое смещается камера). Клавиши: W,A,S,D - управление как обычно. 1 1 Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 1 Ноября 2017 Снимаю флаг flUsedAI_Locations (в данном примере для предметов из ящиков, чтоб не проваливались) local sobj_item = alife():object( obj_itm.id ) local pk = m_netpk.get( sobj_item ) local data = pk:get() data.object_flags = bit_and( data.object_flags, bit_not( 128 ) ) -- снять флаг flUsedAI_Locations pk:set( data ) Как выставить флаг обратно, так же скриптом? (В побитовой математике не шарю.) @TIGER_VLAD Можно попробовать, через имитацию нажатия клавиши (если есть такой функционал). Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 18 Ноября 2017 Можно ли скриптом "повесить" актора в пространстве? Чтоб он завис в воздухе. Пробовал делать через "db.actor:set_actor_position( ... точка в пространстве ... )", и обновлять через апдейт - в результате камеру "колбасит не по-детстки". Можно конечно, что-нибудь спавнить под актором и фиксировать, но это не то. Есть варианты? Именно скриптом. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 11 Июля 2018 [ЗП, СоС] Можно ли скриптово отловить момент(...какой-либо флаг, поршень, окно...), когда при разговоре с механиком, открыто окно с ремонтом/апгрейдами для предметов? Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 25 Июля 2018 [ЗП, СоС] Как скриптово отследить в каком положении находится актор (идёт/бежит/сидит/в глубоком присяди/и т.п...). Есть ли какой-либо флаг/метод/что-либо? Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 13 Августа 2018 (изменено) [ЗП, СоС] Как заставить нпс скриптом перезарядить оружие, которое держит в руках (с анимацией и прочим)? Смотрел как сделано у @Bak в AI Additions, но так до конца и не понял. Вроде используется такая штука, после кучи проверок: npc:set_item(object.aim_force_full1,wpn) Пытаюсь сделать по аналогии, типа так: Скрытый текст -- добавление недостающих команд для оружия if not object.aim_force_full1 then object.aim_ready1 = object.drop+1 -- eObjectActionAimReady1 = 12 object.aim_ready2 = object.aim_ready1+1 -- eObjectActionAimReady2 = 13 object.aim_force_full1 = object.aim_ready2+1 -- eObjectActionAimForceFull1 = 14 object.aim_force_full2 = object.aim_force_full1+1 -- eObjectActionAimForceFull2 = 15 end local target_obj = level.get_target_obj() local npc = target_obj local wpn = npc and npc:active_item() if npc and wpn then log("reloading wpn -- start --") -- 1 -- Либо так: -- -- npc:set_item( object.reload, wpn ) -- npc:set_item( object.reload1, wpn ) -- npc:set_item( object.reload2, wpn ) -- 2 -- или так: npc:set_item( object.aim_force_full1, wpn ) log("reloading wpn -- end --") end Ничего "не выходит" - нпс просто стоит "как ни в чем не бывало". Или парой строк скрипта не обойтись (нужно писать схему поведения, добавлять в планировщик и т.д.)? Изменено 13 Августа 2018 пользователем Shkiper2012 Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 26 Сентября 2018 [ЗП/СоС] Как прочесть/выставить режим огня для оружия, с помощью нет-пакетов? Если есть готовые примеры, ткните, пожалуйста. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 19 Ноября 2018 В 18.11.2018 в 17:48, Fenrir02 сказал: Как именно применить это на практике? @Fenrir02, в нужную функцию вставляем: level.send_event_key_press(DIK_keys.DIK_F3) -- вместо "DIK_F3" может быть любая другая клавиша. Результатом будет имитация нажатия, как будто ты нажал на кл."F3" (не касаясь пальцем физически). Только вот не помню, должна ли быть локация загружена в этот момент, так как используется пространство "level". На всякий, может проверку поставить, типа "if level then ... end" 1 Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение
Shkiper2012 35 Опубликовано 12 Марта @Stalkersof попробуй так: Скрытый текст function upgradeS:spawn_item(spawn_item_sec, dist) -- спавним только в игре if self:check_game() then local s_obj = alife():create(spawn_item_sec, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) if s_obj then local c_obj = level.object_by_id(s_obj.id) if c_obj then db.actor:move_to_slot(c_obj) -- Перемещаем объект в слот end end end end Ещё, у тебя метод называется "spawn_item" и параметр в этом методе называется так же --> upgradeS:spawn_item(spawn_item, dist) В примере выше, изменил параметр на "spawn_item_sec". Рекомендую их как-то различать, чтоб не было двойных толкований. В данном случае это не критично, но в других, может сыграть злую шутку. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Поделиться этим сообщением Ссылка на сообщение