SkyLoader 53 Опубликовано 23 Октября 2010 (изменено) Kolmogor, спасибо, но мне это уже говорили, а код написать никто не смог. Я открывал скрипт xStream'a, но он там так все запутал, что не распутать Вопрос: Как включить панику у непися не надолго? Пробовал этими методами - ничего не происходит: set_custom_panic_threshold(float), set_default_panic_threshold() Изменено 23 Октября 2010 пользователем SkyLoader Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 11 Января 2011 Министр, ок ____________________ Вопрос: у меня есть непись-таргет. Я пытаюсь сделать так: local panic=target_iter(target) get_console():execute(panic) Если непись имеет какую-либо пушку, то выдает true, иначе false. function target_iter(target) target:iterate_inventory( function(dummy,item) if string.find(item:section(),"wpn_") then return true else return false end end , target) end У меня получается какой-то бредовый вылет. У меня тут все правильно? Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 21 Января 2011 (изменено) Shadows, если ты про кастом статик, то удалять так: get_hud():RemoveCustomStatic("название_статика") ______________________ Есть 2 вопроса: 1) Можно ли сделать плавное появление кастом статика? 2) Включается ли какой-либо шейдерный коллбек при "Загрузке шейдеров"? Изменено 21 Января 2011 пользователем SkyLoader Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 31 Марта 2011 Народ, помогите плз. Я хочу заспаунить турель из огсе, но она не спаунится, если место спауна онлайн. Спаун происходит через ф-цию [white]create_turret()[/white]. Вот так создаю турель: turret_mgun.create_turret("turret_nato", "l06_rostok", vector():set(-84.12,0.9,140.35), "killer", "", 90, 90) Текст скрипта turret_mgun.script function bind(obj) -- printf("turret_mgun.bind") local ini = obj:spawn_ini() if ini == nil or not ini:section_exist("logic") then abort("turret '%s' must have logic", obj:name()) end obj:bind_object(turret_binder(obj, ini)) end class "turret_binder" (object_binder) function turret_binder:__init(obj, ini) super(obj) self.ini = ini self.initialized = false self.loaded = false end function turret_binder:reinit() object_binder.reinit(self) db.storage[self.object:id()] = {} self.st = db.storage[self.object:id()] self.heli = self.object:get_helicopter() self.object:set_callback(callback.helicopter_on_hit, self.on_hit, self) end function turret_binder:update(delta) object_binder.update(self, delta) if not self.initialized and db.actor ~= nil then xr_logic.initialize_obj(self.object, self.st, self.loaded, db.actor, modules.stype_heli) self.initialized = true end if self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta) end self:check_health() end function turret_binder:net_spawn(data) if not object_binder.net_spawn(self, data) then return false end self.se_obj = alife():object(self.object:id()) self.heli:SetfHealth(self.se_obj.health) self.st.alive = self.se_obj.health > 0.005 db.add_turret(self.object) return true end function turret_binder:net_destroy() db.del_turret(self.object) object_binder.net_destroy(self) end function turret_binder:net_save_relevant() return true end function turret_binder:save(packet) object_binder.save(self, packet) xr_logic.save_obj(self.object, packet) end function turret_binder:load(packet) object_binder.load(self, packet) xr_logic.load_obj(self.object, packet) end function turret_binder:on_hit(power, impulse, hit_type, enemy_id) dbglog("hit: power=%f impulse=%f hit_type=%d enemy_id=%d health=%f", power, impulse, hit_type, enemy_id, self.heli:GetfHealth()) self.se_obj.health = self.heli:GetfHealth() local enemy = level.object_by_id(enemy_id) if enemy ~= nil and self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "hit_callback", self.object, power, nil, enemy, nil) end end function turret_binder:check_health() if self.st.alive and self.heli:GetfHealth() <= 0.005 then explode_turret(self.object) end end function explode_turret(turret) local heli = turret:get_helicopter() heli:ClearEnemy() heli:Die() local se_obj = alife():object(turret:id()) se_obj.health = 0 db.storage[turret:id()].alive = false utils2.deferred_release(turret:id(), 5) end function is_friendly_turret(npc, turret, position) -- сначала выясним, турель ли это вообще. local k,v if turret == nil then -- ссылки на объект нет. что ж, бывает, попробуем -- определить по месту расположения. for k,v in pairs(db.turret) do local test_position = v:position() if test_position.x == position.x and test_position.z == position.z then turret = v break end end if turret == nil then return false end elseif (turret:section() ~= "turret_mgun") and (turret:section() ~= "turret_army") and (turret:section() ~= "turret_nato") then return false end local community = db.storage[turret:id()].community if community == nil then return false end if utils2.community_relation(community, npc) > -400 then return true end return false end function create_turret(turret_section_name, level_name, position, community, owner_gulag, search_dist, hunt_actor_prob, explode_dist, spawner) local packet1 = utils2.packet_pool_get() local packet2 = utils2.packet_pool_get() local level_vertex_id, game_vertex_id = utils2.get_top_graph_ids(level_name) local se_obj = alife():create(turret_section_name, position, level_vertex_id, game_vertex_id) if se_obj == nil then abort("can't create '%s' at (%f,%f,%f)") end -- лучше через table.concat() local custom_data = "[logic]\nactive = turret\n[turret]\n" if community ~= nil then custom_data = custom_data.."community = "..community.."\n" end if owner_gulag ~= nil then custom_data = custom_data.."owner_gulag = "..owner_gulag.."\n" end if hunt_actor_prob ~= nil then custom_data = custom_data.."hunt_actor_prob = "..tostring(hunt_actor_prob).."\n" else custom_data = custom_data.."hunt_actor_prob = 50\n" end if search_dist ~= nil then custom_data = custom_data.."search_dist = "..tostring(search_dist).."\n" else custom_data = custom_data.."search_dist = 90\n" end if explode_dist ~= nil then custom_data = custom_data.."explode_dist = "..tostring(explode_dist).."\n" else custom_data = custom_data.."explode_dist = 1\n" end if spawner ~= nil then custom_data = custom_data.."[spawner]\ncond = "..spawner.."\n" end se_obj:STATE_Write(packet1) local dead_space = packet2:w_tell() -- cse_alife_dynamic_object utils2.packet_copy(packet2, packet1, 18) packet1:r_stringZ() packet2:w_stringZ(custom_data) utils2.packet_copy(packet2, packet1, 8) -- cse_visual packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 1) -- cse_motion packet2:w_stringZ(packet1:r_stringZ()) -- cse_ph_skeleton packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 3) -- cse_alife_helicopter packet2:w_stringZ("idle") packet2:w_stringZ("$no_sound") -- se_turret_mgun packet2:w_float(1.0) se_obj:STATE_Read(packet2, packet2:w_tell() - dead_space) utils2.packet_pool_put(packet1) utils2.packet_pool_put(packet2) end function create_dir_turret(turret_section_name, level_name, position, community, owner_gulag, search_dist, hunt_actor_prob, explode_dist, spawner) local packet1 = utils2.packet_pool_get() local packet2 = utils2.packet_pool_get() local level_vertex_id, game_vertex_id = utils2.get_top_graph_ids(level_name) local se_obj = alife():create(turret_section_name, position, level_vertex_id, game_vertex_id) if se_obj == nil then abort("can't create '%s' at (%f,%f,%f)") end -- лучше через table.concat() local custom_data = "[logic]\nactive = turret\n[turret]\n" if community ~= nil then custom_data = custom_data.."community = "..community.."\n" end if owner_gulag ~= nil then custom_data = custom_data.."owner_gulag = "..owner_gulag.."\n" end if hunt_actor_prob ~= nil then custom_data = custom_data.."hunt_actor_prob = "..tostring(hunt_actor_prob).."\n" else custom_data = custom_data.."hunt_actor_prob = 50\n" end if search_dist ~= nil then custom_data = custom_data.."search_dist = "..tostring(search_dist).."\n" else custom_data = custom_data.."search_dist = 90\n" end if explode_dist ~= nil then custom_data = custom_data.."explode_dist = "..tostring(explode_dist).."\n" else custom_data = custom_data.."explode_dist = 3\n" end if spawner ~= nil then custom_data = custom_data.."[spawner]\ncond = "..spawner.."\n" end se_obj:STATE_Write(packet1) local dead_space = packet2:w_tell() -- cse_alife_dynamic_object utils2.packet_copy(packet2, packet1, 18) packet1:r_stringZ() packet2:w_stringZ(custom_data) utils2.packet_copy(packet2, packet1, 8) -- cse_visual packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 1) -- cse_motion packet2:w_stringZ(packet1:r_stringZ()) -- cse_ph_skeleton packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 3) -- cse_alife_helicopter packet2:w_stringZ("idle") packet2:w_stringZ("$no_sound") -- se_turret_mgun packet2:w_float(1.0) se_obj:STATE_Read(packet2, packet2:w_tell() - dead_space) utils2.packet_pool_put(packet1) utils2.packet_pool_put(packet2) ---------------direction se_obj.direction = vector():set(-1, 0, 0) --------------- end ----------------------------------------------------------------------- class "se_turret_mgun" (cse_alife_helicopter) function se_turret_mgun:__init(section) super(section) self.spawner_present = false self.health = 1.0 self.direction = vector():set(0, 0, 0) end function se_turret_mgun:can_switch_offline() return cse_alife_helicopter.can_switch_offline(self) end function se_turret_mgun:can_switch_online() if self.health <= 0.005 then return false end if self.spawner_present == nil then local ini = self:spawn_ini() self.spawner_present = ini:section_exist("spawner") end if self.spawner_present == true then return cse_alife_helicopter.can_switch_online(self) end return xr_spawner.check_spawn(self) end function se_turret_mgun:STATE_Read(packet, size) cse_alife_helicopter.STATE_Read(self, packet, size) self.health = packet:r_float() self.direction = packet:r_vec3() end function se_turret_mgun:STATE_Write(packet) cse_alife_helicopter.STATE_Write(self, packet) packet:w_float(self.health) packet:w_vec3(self.direction) end Как мне вынести турель в онлайн? Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 31 Марта 2011 _Призрак_, а методов смены позиции вроде нет у турелей. Они на классе вертолета. Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 31 Марта 2011 _Призрак_, ну так на это ж требуется время, чтобы турель пролетела. + я хочу сделать динамический спавн, .т.е. в любой момент спавнить турель. А вертолеты летают по точкам в алл.спавне. Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 31 Марта 2011 Ну эту проблему возможно можно решить. Осталась одна: нужно найти метод скриптового назначения точки полета. Ибо через логику не получится сделать, потому что вертолеты летают по точкам в алл.спавне А я хочу сделать динамический спавн. Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 1 Апреля 2011 (изменено) TRAMP14, if level.name()=="l08_yantar" then Изменено 1 Апреля 2011 пользователем SkyLoader Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 14 Октября 2011 Приветствую всех. Можно ли убрать разаттачивание предметов при смерти непися? (убрал очистку инвентаря при смерти) Если можно, то как? Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 20 Октября 2011 Скажите плз, как получить забинденную команду? Т.е. по экшену получить забинденную кнопку. Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 21 Октября 2011 (изменено) Charsi, спасибо. Жаль, что по другому нельзя. (а то парсинг user не очень подходит) Изменено 21 Октября 2011 пользователем SkyLoader Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 30 Января 2012 Такие вопросы появились: 1. Как надо записать ф-ции в таблицу, чтобы можно было их потом вызвать? Например: ... [12] = func() spawn(), ... 2. Как можно проверить, что гг зашел в аномалию с определенной секцией? Есть ли у них биндер, чтобы проверить? Или надо его создавать? Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 30 Января 2012 (изменено) Gun12, у меня идет временно перебор таблицы, в котором ключ - время в секундах, значение - некоторые ф-ции, которые в эту секунду должны выполниться. Просто таких таблиц я хочу сделать много. А, вот еще вспомнил: можно ли из стринговой строки, например, local t = "four_table", сделать такую строку, чтобы можно делать так: for k,v in pairs(t) do? Если да, то как? Artos, я хочу сделать, чтобы функции в значениях выполнялись (например спавн, запуск звука, и тд.), а не что-то возвращали, т.е. если время = ключ, то делаем спавн. Изменено 30 Января 2012 пользователем SkyLoader Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 3 Февраля 2012 (изменено) *Shoker*, а как же get_wpn_shared_str()? Если malandrinus ответит, как заставить этот метод работать, то все получится. Изменено 3 Февраля 2012 пользователем SkyLoader Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 22 Февраля 2012 Такой вопрос, давно его задавал: есть ли возможность изменять направление у физ. объектов через нет-пакеты? Обновленные пакеты позволяют это сделать, или движком не добавлено направление для класса физ. объектов? Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 13 Мая 2012 Такая проблема возникла: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...e.r. - life in fear\gamedata\scripts\xr_logic.script:453: attempt to call method 'id' (a nil value) Тут ясно, что вылет происходит при установки схемы. Я сделал вывод в лог текста вызываемой функции printf(), изменив _g.script. В итоге я понял, что во всем виновата схема 'heli_hunter'. Вот более точный лог: ... ! Unknown command: setup_gulag_and_logic_on_spawn_obj=gar_depo_bandit_st2,_strn_id=253 ! Unknown command: [smart_terrain_gar_depo_bandit]_gulag:_object_setup_online:_obj=gar_depo_bandit_st2_need_setup_logic=true_need_setup_restrictors=true ! Unknown command: _bp:_enable_scripts:_object_'gar_depo_bandit_st2'_has_NO_external_configuration_file,_using_'misc\gulag_tasks.ltx' ! Unknown command: DEBUG:_set_scheme:_scheme='heli_hunter'_section='<nil>' ! Unknown command: DEBUG:_add_to_binder:_scheme='heli_hunter' FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...e.r. - life in fear\gamedata\scripts\xr_logic.script:453: attempt to call method 'id' (a nil value) Но тут не ясно. Схема у меня не изменена. В xr_logic, modules и xr_motivator никаких изменений по поводу этой схемы нет. Добавлены несколько АИ-схем, но в них тоже нет упоминания о 'heli_hunter' (может бы они вызвали какие-то коллизии?). Теперь сижу, гадаю. Отключать схему не хотелось бы, ведь она оригинальная. Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 13 Мая 2012 (изменено) Artos, ой, извиняюсь, забыл код строки вылета привести 1. id выводился нормально за пределами ф-ции. В итоге оказалось, что какая-то новая аи-схема портит все. Т.к. я предусмотрел возможные ошибки и перенес все схемы в отдельный файл. Разом отключил все новые схемы и вылет пропал Кстати, давно еще писал про зависание биндера, видимо из-за этой же проблемы. Биндер больше не зависает. Теперь буду искать, в какой схеме такой ужас происходит. Спасибо за ответ. P.S. Видимо все-таки я такой невезучий, у которого случаются баги и вылеты, которых ни у кого не было. Изменено 13 Мая 2012 пользователем SkyLoader Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 7 Июня 2012 (изменено) Кто-нибудь использовал для неписей или монстров функцию action()? Рабочая ли она? В ЧН она использовалась, но финальном ТЧ вроде нет. Ты про какую конкретно функцию говоришь? Функция action есть в файле _g.scritp, есть метод класса planner_action, унаследованного от класса action_planner; есть в классах game_object и object. ColR_iT Добавлено через 53 мин.: Пример: action(trader, anim("vstuplenie"), cond(cond.anim_end)) Эта функция из файла _g.script. ColR_iT Изменено 7 Июня 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 29 Ноября 2012 (изменено) malandrinus, к сожалению, твой способ для сталкеров и мутантов не подойдет, чтобы скрывать кости. При скрытии кости, матрицы полигонов кости будут scale в 0, т.е. все координаты полигонов кости будут иметь нулевое значение, поэтому кажется, что кость пропала, а на самом деле она просто смялась в ничего. Для оружия это срабатывает потому что кости глушителей, прицелов и гранатометов являются отдельными мешами и не соединены с другими мешами. В случае с моделью сталкера кости имеют общий меш, и при скрытии кости, между двумя костями (фэйсы) будут тянуться в нулевые координаты, т.е. между ног будет тянуться вниз такая полоска от парента скрываемой кости. Для реализации этого я могу посоветовать создать новую функцию (вместо set_bone_visible) и после того, как полигоны окажутся нулевых координатах, взять позицию из матрицы парента этой кости и назначить позиции матрицы самой кости. Тогда все выглядит нормально, и дырок никаких не будет. И да, коллизия кости будет оставаться прежней, т.е. стреляем в пустоту, где раньше была кость, и от нее остаются кровавые следы. Изменено 29 Ноября 2012 пользователем SkyLoader 1 Поделиться этим сообщением Ссылка на сообщение
SkyLoader 53 Опубликовано 29 Ноября 2012 malandrinus, я уже пробовал так делать. Если будет мягкая привязка у модели, то все равно будет стяжка фейсов к нулевым координатам. Если же грубая привязка, то будет видна щель между костями. Я много как пробовал, но выход нашел только этот. Хотя он и не до конца хорош, скорее как прототип. LL_SetBoneVisible, к сожалению, действует только на визуальную составляющую, на коллизийный бокс никакого влияния не оказывает. Поделиться этим сообщением Ссылка на сообщение