RayTwitty 558 Опубликовано 21 Марта 2010 (изменено) Проблема-вопрос. Первый работаю с all.spawn. Для начала хочу изменить стартовый набор ГГ. Скачал xrSpawner v0.13.1 Beta. Открыл в нем all.spawn. На шел вот это: Добавил то что выделена красным. Потом жму "Принять изменения". Потом Файл->Сохранить. Начинаю новую игру, но нового предмета нет. После этого открываю опять алл.спавн и вижу что он остался таки каким был (нету моего добавленного предмета). Может я не так сохранил\добавил? З.Ы. Файл алл.спавн из мода "Зона Поражения 1.1". Изменено 21 Марта 2010 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 1 Сентября 2010 (изменено) Может быть детский вопрос, для тех кто хорошо знает скрипты. Суть вопроса. Имеется функция: local fov = device().fov local wpn if fov < 35 and xr_logic.pstor_retrieve(db.actor, "use_scope", 0) == 0 then wpn = db.actor:item_in_slot(db.actor:active_slot()) if wpn and wpn:section() == "wpn_crossbow" then level.add_pp_effector("bast.ppe", 1034, true) get_console():execute ("r2_sun_lumscale_amb 3") get_console():execute ("r2_mblur 0.6") xr_logic.pstor_store(db.actor, "use_scope", 1) wpn_crossbow - это пушка. Мне надо в этой строке сделать так чтобы было ДВЕ пушки. пробовал сделать так: if wpn and wpn:section() == "wpn_crossbow" and "wpn_arm_binoc" then Но ничего не вышло. Как добавить в функцию вторую пушку? Kirag, сработало! Большое спасибо! Изменено 1 Сентября 2010 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 8 Апреля 2011 Zander_driver, возможно стоит посмотреть еще и это: http://www.amk-team.ru/forum/index.php?s=&...st&p=451270 Это правка по аналогичному вылету в Солянке. Может поможет... Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 16 Апреля 2011 Desertir, А как на счет неживых? В РМА моде Нива в ТД сама ездила. Подъезжала к фабрике и останавливалась. Можешь там посмотреть. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 4 Июня 2011 (изменено) Всем привет. Вопрос: возможно ли, в ТЧ скриптами реализовать защиту от хим. заражения? Ну т.е. химзащиту как в ЗП, при употреблении препарата? Щас думаю только подменять костюм (или вешать арт) с улучшенными характеристиками химзащиты при использовании препарата... Но может есть что-то по лучше? Изменено 4 Июня 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 16 Июня 2011 (изменено) Ulman, отслеживать голод ГГ вроде бы нельзя... Так что никак... Хотя можно попробовать сделать по статику на экране (иконка голода)... Если только она именно статиком сделана, а не движком... По звуку: function sound_update() if db.actor and db.actor:alive() then local outfit = db.actor:item_in_slot(6) if outfit and outfit:section() and outfits[outfit:section()] then if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) else if snd:playing() then snd:stop() end end end end end То что жирным выделено добавь. Не будет на каждом апдейте включатся. То что подчеркнуто вообще не нужно. Изменено 16 Июня 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 18 Июня 2011 Ulman, чисто из интереса попробуй так сделать: local snd = xr_sound.get_safe_sound_object([[папка_звука\звук]]) function update() local snd_satiety = 0.2 if snd_satiety>db.actor.satiety then if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end else if snd:playing() then snd:stop() end end snd_satiety = db.actor.satiety end Если значение сытости ГГ меньше 0.2, то будет повторятся звук... Всё это дело на апдейт вешай. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 7 Августа 2011 speczadanie, смотри это Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 17 Августа 2011 Artos, немного можно уменьшить код. Будет достаточно такой функции: if self.object:clsid()==clsid.car_s then local h = hit() h.draftsman = db.actor h.type = hit.strike h.direction = vector():set(0,0,0) h.power = 0.0001 h.impulse = 0.0001 self.object:hit(h) end Давно пользуюсь, проблем не было Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 19 Августа 2011 Artos, Что, кстати, и сделано у тебя намерено (h.draftsman = db.actor <???). Так что то, что не имеешь проблем - это пока не будешь использовать логику. Ведь не только машинки для покататься спавнятся, но и 'враждебные' БТРы ... У меня в моде логика кстати используется (ну те же ключи). Плюс еще много-много чего. На счет БТРов... Я привел код для чистой игры, если нужно чтобы каким-то тачкам хит не наносился, можно фильтровать по секции: self.object:section()~="секция". Ну понятно, это в условие пихаем. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 28 Августа 2011 (изменено) Habaromaniac, не парься. Вот функция переходов: Сама функция перехода: -- Author - singapur22 function create_level_changer( p_story_id, -- STORY_ID нового level_changer (понадобится нам позже) p_position, -- вектор, координаты точки, в которой будет располагаться центр нового level_changer p_lvertex_id, -- level_vertext_id - идентифицируют уровень, на котором будет создан level_changer p_gvertex_id, -- game_vertext_id p_dest_lv, -- level_vertex_id - идентифицируют уровень, на будет перебрасывать игрока p_dest_gv, -- game_vertex_id p_dest_pos, -- координаты точки, в которой на новом уровне окажется игрок p_dest_dir, -- направрение взгляда игрока p_dest_level, -- название уровня, например "L11_Pripyat" p_silent -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход) ) local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id) level.map_add_object_spot(obj.id, "level_changer", "") local packet = net_packet() obj:STATE_Write(packet) -- свойства cse_alife_object local game_vertex_id = packet:r_u16() local cse_alife_object__unk1_f32 = packet:r_float() local cse_alife_object__unk2_u32 = packet:r_u32() local level_vertex_id = packet:r_u32() local object_flags = packet:r_u32() local custom_data = packet:r_stringZ() local story_id = packet:r_u32() local spawn_story_id = packet:r_u32() -- свойства cse_shape local shape_count = packet:r_u8() for i=1,shape_count do local shape_type = packet:r_u8() if shape_type == 0 then -- sphere local center = packet:r_vec3() local radius = packet:r_float() else -- box local axis_x_x = packet:r_float() local axis_x_y = packet:r_float() local axis_x_z = packet:r_float() local axis_y_x = packet:r_float() local axis_y_y = packet:r_float() local axis_y_z = packet:r_float() local axis_z_x = packet:r_float() local axis_z_y = packet:r_float() local axis_z_z = packet:r_float() local offset_x = packet:r_float() local offset_y = packet:r_float() local offset_z = packet:r_float() end end -- свойства cse_alife_space_restrictor local restrictor_type = packet:r_u8() -- свойства cse_level_changer local dest_game_vertex_id = packet:r_u16() local dest_level_vertex_id = packet:r_u32() local dest_position = packet:r_vec3() local dest_direction = packet:r_vec3() local dest_level_name = packet:r_stringZ() local dest_graph_point = packet:r_stringZ() local silent_mode = packet:r_u8() packet:w_begin(game_vertex_id) -- game_vertex_id packet:w_float(cse_alife_object__unk1_f32) packet:w_u32(cse_alife_object__unk2_u32) packet:w_u32(level_vertex_id) -- level_vertex_id packet:w_u32( bit_not(193) ) -- object_flags = -193 = 0xFFFFFF3E packet:w_stringZ(custom_data) packet:w_u32(p_story_id) -- story_id packet:w_u32(spawn_story_id) packet:w_u8(1) -- количество фигур packet:w_u8(1) -- тип фигуры: box packet:w_float(2) -- axis_x_x packet:w_float(0) -- axis_x_y packet:w_float(0) -- axis_x_z packet:w_float(0) -- axis_y_x packet:w_float(4) -- axis_y_y packet:w_float(0) -- axis_y_z packet:w_float(0) -- axis_z_x packet:w_float(0) -- axis_z_y packet:w_float(4) -- axis_z_z packet:w_float(0) -- offset_x packet:w_float(0) -- offset_y packet:w_float(0) -- offset_z packet:w_u8(3) -- restrictor_type packet:w_u16(p_dest_gv) -- destination game_vertex_id packet:w_u32(p_dest_lv) -- destination level_vertex_id packet:w_vec3(p_dest_pos) -- destination position packet:w_vec3(p_dest_dir) -- destination direction (направление взгляда) packet:w_stringZ(p_dest_level) -- destination level name packet:w_stringZ("start_actor_99") -- some string, always const packet:w_u8(p_silent) -- 1 for silent level changing packet:r_seek(0) obj:STATE_Read(packet, packet:w_tell()) end Кидаешь её в свой скрипт. Дальше пишешь функцию спавна своего перехода (в том же скрипте что и прошлую функцию!). Например так (переход с Припяти, в Припять ЗП): function pripyat_to_cop_pripyat() create_level_changer(97115, vector():set(189.497,-2.115,233.149),259791,2149, -- где переход (SID,x,y,z,lvertex,gvertex) 176155,3760, vector():set(-15.765,-0.496,307.323), -- куда переходить (lvertex,gvertex,x,y,z) vector():set(0.0,-1.58,-1.0), -- направление взгляда при появлении "pripyat",0) -- на какую локу и запрос (0 - появится вопрос, 1 - автоматический переход) end Думаю понятно. Вот кстати у себя вычислил направления взгляда при появлении: (0.0,0.0,-1.0) смотрим на север (0.0,1.56,-1.0) смотрим на запад (0.0,-1.58,-1.0) смотрим на восток (0.0,-3.15,-1.0) смотрим на юг Дальше нужно переход отметить на карте. Конечно если это нужно (например в подземных локах это будет не красиво смотреться)... В скрипте level_tasks пишешь рядом с стандартными переходами: obj = sim:story_object(97115) -- сид уровня ,который ты задавал в функции спавна, вот здесь: create_level_changer(97115 ... if obj then level.map_add_object_spot(obj.id, "level_changer", "В Припять ЗП") end Всё. Для появления перехода вызываешь: pripyat_to_cop_pripyat(). Изменено 28 Августа 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 29 Августа 2011 (изменено) Habaromaniac, на счет координат тебе ответили выше. Теперь на счет вызова функции. Можно её выполнять при новой игре. Как мы знаем при НИ выдается поршен, и можно на него повесить выполнение функции. В gamedata\config\gameplay в файле info_portions.xml вверху файла видишь: <info_portion id="storyline_actor_start"> <task>storyline_eliminate_gunslinger</task> <action>названия_скрипта.pripyat_to_cop_pripyat</action> ВОТ ЭТО ДОБАВИТЬ </info_portion> pripyat_to_cop_pripyat - название функции спавна перехода. Пишешь какая у тебя там. Добавлено через 2 мин.: singapur22, ну да, я вычислял "кустарным" способом - переходил по новому переходу и смотрел куда смотрит ГГ. Habaromaniac, вызывай pripyat_to_cop_pripyat() откуда угодно. Можешь поставить в поршен завершения игры - тогда переход появится после последнего телепорта. Изменено 29 Августа 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 16 Сентября 2011 Всем привет, есть пару вопросов. 1) Имеется ли способ отлова открытой вкладке в ПДА? Если нет, то какими-нибудь обходными путями это можно выяснить? 2) Имеется скриптовое окно-меню. В нем есть статик, допустим 200х200. В этом статике есть текст, довольно большой. Есть ли возможность сделать, чтобы если текст не влазил в окно статика, появлялся скролл и можно было прокручивать текст? В конфигах есть параметр complex_mode, но он отвечает только за перенос текста на новые строчки, если строка не влазит в размеры статика... Заранее спасибо. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 16 Сентября 2011 (изменено) malandrinus, Колмогор ещё делал выдачу инфопорции по переходу на конкретную закладку. Да? Где можно это посмотреть? Забыл сказать - с ТЧ работаю. Кстати в дефолте - инфо о вкладках есть в конфигах, но они не выдаются... У статика прокрутки нет, на то он и статик. А через какой класс в ТЧ можно сделать текст, с возможностью его прокрутки? Изменено 16 Сентября 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 16 Сентября 2011 (изменено) Artos, malandrinus, При открытии КПК в ТЧ(SHoC), открытии различных вкладок - выдаются различные инфопоршни: На 6 патче не выдаются, точно. Выдаются только инфо о открытии и закрытии ПДА: ui_pda, ui_pda_hide На 4 патче вроде тоже не выдаются... На 5-ом не проверял. Если вопрос подразумевает узкую спецификацию версии иль еще чего - следует сразу это в вопросе указывать. На 4-м и 5-м патчах - инфопоршни закладок выдаются. На 6-м ... ну тогда пробовать выцарапать что-то из объекта худа открытого КПК. Может удастся имена окон получить и по ним определять какак закладка. --/ Artos Изменено 16 Сентября 2011 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 18 Сентября 2011 (изменено) *Shoker*, start_stop_menu(self.ui_dlg, true) Последний аргумент отвечает за скрытие элементов худа при включенном меню. Изменено 18 Сентября 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 13 Ноября 2011 (изменено) Привет всем. Есть небольшой вопрос. Допустим имеется предмет local item = db.actor:object("ak74") Для того чтобы заспавнить wpn_ с припиской ak74 (самопальная функция спавна в инвентарь), нужно написать так: spawn_item_in_inv("wpn_"..item) У нас заспавнится wpn_ + ak74, то есть wpn_ak74. А как можно заспавнить предмет wpn_ak74 без приписки wpn_ ? То есть если: local item = db.actor:object("wpn_ak74") То как отсюда отрезать wpn_ ? Заранее спасибо. demover123, штатных функций замены предмета в слоте, на сколько я знаю, нет. Но можно самому написать это действие. Сначала дропнуть предмет из слота в инвентарь (или удалить вообще), а потом заспавнить предмет, который может стать в освободившийся слот. Изменено 13 Ноября 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 9 Декабря 2011 (изменено) Есть вопрос. Существует ли возможность скриптом проиграть звук если не загружена игра? Когда актора и других объектов ещё нет. ТЧ 1.0006. Старлей, да. Изменено 9 Декабря 2011 пользователем Shadows Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 10 Декабря 2011 О Боже... Зачем же так мудрить: add_item.item_icon:Init("ui\\ui_icon_equipment",x, y, width, height) -- это где расположить на экране. Чтобы вырезать из текстуры область есть метод SetOriginalRect(x,y,w,h) т.е. add_item.item_icon:Init("ui\\ui_icon_equipment",x, y,width,height) -- из какой текстуры и куда поместить на экране. add_item.item_icon:SetOriginalRect(x,y,w,h) -- откуда вырезать из текстуры. Поделиться этим сообщением Ссылка на сообщение
RayTwitty 558 Опубликовано 19 Января 2012 Никто не знает, есть ли метод\функция для выключения (или регулировки) общей громкости звуков и музыки в ТЧ? Я нашел только метод level.set_snd_volume(), но он устанавливает громкость только у различных звуков, а на музыку (амбиент и музыки в гл. меню) не влияет. Знаю что можно сделать через команду в консоли, но хотелось бы узнать, может есть спец. метод (как например level.set_snd_volume(), но с учетом музыки). Поделиться этим сообщением Ссылка на сообщение