ツМаLinK@ツ 35 Опубликовано 27 Декабря 2014 Всем привет, в этой статье я расскажу, как сделать рюкзак - тайник типа АМКшного. Начнем мы с создания необходимых секций в конфигах. Открываем config\creatures\spawn_sections.ltx и добавляем секцию: [taynik_sect]:taynik visual = equipments\item_rukzak radius = 1Это тот тайник, который и будет спавниться при юзании предмета.Далее config\misc\devices.ltx. В него пишем: [taynik] GroupControlSection = spawn_group discovery_dependency = $spawn = "devices\inventory box" class = O_INVBOX cform = skeleton visual = physics\box\expl_dinamit.ogf script_binding = bind_physic_object.initСекцию лучше не трогать, она содержит в себе необходимые для тайника функции. Именно на нее мы ссылались в секции спавна.В этом-же файле добавляем секцию предмета, который будем юзать: [rukzak_taynik]:identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = "food and drugs\kolbasa" $prefetch = 8 class = II_FOOD cform = skeleton visual = equipments\item_rukzak.ogf description = taynik_desc inv_name = taynik_name inv_name_short = taynik_name inv_weight = 0.5 inv_grid_width = 2 inv_grid_height = 3 inv_grid_x = 12 inv_grid_y = 32 cost = 1000 attach_angle_offset = 0.440521, 1.378287, -0.644026 ; eatable item eat_health = 0 eat_satiety = 0 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = -1 attach_position_offset = 0.104196, -0.010821, 0.076969 attach_bone_name = bip01_r_hand auto_attach = false // should be deleted after update bone_name = bip01_r_hand position_offset = 0.0,0.0,0.0 angle_offset = 1.570790,1.570790,3.92699 ; food item slot = 4 animation_slot = 4 ;hud item hud = wpn_vodka_hudТут мы создали предмет. Небольшая оговорочка: иконку к моду я прописала NLCшную, при желании можно сделать самому, это описано в куче статей.С конфигами закончили, теперь самое важное - скрипты! Создаем свой скрипт, например kristi.script и в него пишем: function spawn_item(obj) local pos = db.actor:position() local dir = db.actor:direction() local gver = db.actor:game_vertex_id() local lver = db.actor:level_vertex_id() alife():create(obj, pos:add(dir:mul(1)), lver, gver) end kristi.spawn_item("taynik_sect") - это функция спавна нашего тайника под ногами актора.Идем в bind_stalker.script и ищем функцию function actor_binder:reinit().В ее конце, после строки self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) ставим свой коллбэк на юзание итема: self.object:set_callback(callback.use_object, self.taynik_spawn, self)В этом-же файле например после функции function actor_binder:load(reader) (после task_manager.load(reader)self.actor_detector:load(reader) end) пишем: function actor_binder:taynik_spawn(obj, who) if obj then if obj:section() == "rukzak_taynik" then kristi.spawn_item("taynik_sect") end end endГотово! Если мы все сделали правильно, то при использовании предмета rukzak_taynik у нас под ногами заспавнится пустой тайничок в который можно сложить хабар.Да и не забудьте добавить предмету описание! С уважением ツМаLinK@ツ. Всё отлично работает, но... Но, к сожалению, если тайник нам больше не нужен, мы не можем забрать рюкзак обратно. Исправим это. Открываем файл bind_stalker.scriptи в нём находим функцию actor_binder:take_item_from_box(box, item). В ней в самом конце добавляем такой код: -- если это наш тайник, и он пустой, т.е. мы забрали из него последни предмет, то... if box:section() == "taynik_sect" and box:is_inv_box_empty() then level.start_stop_menu(level.main_input_receiver(), true) -- закрываем окно "обыскивания тайника" alife():release(alife():object(box:id()), true) -- удаляем тайник alife():create("rukzak_taynik",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) -- спавним рюкзак в инвентарь endВот и всё. Теперь, когда забираем все вещи из своего тайника, рюкзак возвращается к гг в инвентарь, а тайник исчезает. Сумела восстановить одну схему вертолетов, а именно, при стрельбе в вертолет, он начнет ответную атаку! Открываем файлbind_heli.script Ищем там вот такую строку: -- если обидчик актёр или сталкер, то сделать его своим врагом if enemy_cls_id == clsid.actor or enemy_cls_id == clsid.script_stalker then -- if not self.st.combat.enemy_id then -- self.st.combat.enemy_id = enemy_id -- endУдаляем коментарии...Все,теперь сохраняйте,запускайте игру,возьмите задание волка,бегите к вагончику,стреляйте в вертолет и бегите!!! 3 9 1 1 1 Поделиться этим сообщением Ссылка на сообщение