Модостроение. Редактирование и создание скриптов
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Редактирование и создание скриптов Редактирование и создание скриптов на языке LUA Если у вас появились вопросы по применению скриптов в игре. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Code function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Code Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Code Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
tema796 | Дата: Вт, 11.10.2011, 14:46 | Сообщение # 2 |
Гражданский
Пользователи
Сообщений: 20
| я создал скрип function mesage() news_manager.send_tip(db.actor, "%c[255,215,195,170]тут твой текст",nil,nil,10000) local snd_obj = xr_sound.get_safe_sound_object([[music\dyn_track\kovalski_mesage]]) snd_obj:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d) end вот чем проблема лог говорит об этом get_safe_sound_object может зарегать его нада
|
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
XOBAH | Дата: Вт, 11.10.2011, 15:15 | Сообщение # 3 |
Техник Вольных
Вольные сталкеры
Сообщений: 912
| tema796, в ЗП (чистом) нет функции get_safe_sound_object, добавляй ее. Откуда - оттуда-же откуда брал эту функцию (message)
|
|
|
Эти 0 пользователя(ей) поблагодарили XOBAH за это полезное сообщение: |
|
|
tema796 | Дата: Вт, 11.10.2011, 15:19 | Сообщение # 4 |
Гражданский
Пользователи
Сообщений: 20
| это название функций XOBAH, что надо изменить чтобы приходило сообщение и проигрывался мой звук
|
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
XOBAH | Дата: Вт, 11.10.2011, 19:13 | Сообщение # 5 |
Техник Вольных
Вольные сталкеры
Сообщений: 912
| tema796, Я знаю что это названия функций, касаемо твоей проблемы: Зарегистрировать свой звук в файле script_sound.ltx, а затем проиграть: xr_sound.set_sound_play(db.actor:id(),"НАЗВАНИЕ_ЗВУКА") Исправил: actor на db.actor
Добавлено (11.10.2011, 19:13) --------------------------------------------- tema796, Вот 100% рабочая функция: function message() news_manager.send_tip(db.actor,"Текст сообщения",nil,nil,10000) local snd_obj = sound_object("Путь до звука") --пример пути: material\\glass\\glass_fall03hl snd_obj:play(db.actor,0,sound_object.s2d) end
|
|
|
Эти 0 пользователя(ей) поблагодарили XOBAH за это полезное сообщение: |
|
|
tema796 | Дата: Вт, 11.10.2011, 19:47 | Сообщение # 6 |
Гражданский
Пользователи
Сообщений: 20
| а как сделать чтобы после первого скрипта сразу же заработал второй скрипт
|
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
XOBAH | Дата: Вт, 11.10.2011, 20:24 | Сообщение # 7 |
Техник Вольных
Вольные сталкеры
Сообщений: 912
| tema796, вызываешь их последовательно Если: [cut noguest=Через Диалог]<action>script1</action> <action>script2</action> ... <action>scriptN</action>[/cut][cut noguest=Через скрипт]function runscripts() script1() script2() ... scriptN() end function script1() ... end
function script2() ... end ...[/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили XOBAH за это полезное сообщение: |
|
|
tema796 | Дата: Ср, 12.10.2011, 17:28 | Сообщение # 8 |
Гражданский
Пользователи
Сообщений: 20
| XOBAH, вот так надо? [cut noguest]function runscripts() sms1() sms2() end
function sms1() news_manager.send_tip(db.actor, "%c[255,0,255,0]".."СТРЕЛОК:".."\\n".."%c[255,255,128,128]Ну вот и меня постигла неудача - срок действия некоторых артов закончился и они превратились в булыжники...".."".."\n", nil, nil, 20000) local snd = sound_object([[characters_voice\human_03\stalker\talk\leaves\leaves_42]]) snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0) end
function sms2() news_manager.send_tip(db.actor, "%c[255,0,255,0]".."СТРЕЛОК:".."\\n".."%c[255,255,128,128]Действительно, что-то с артами не так. Вероятно, срок действия некоторых закончился. Надо проверить пояс и рюкзак.".."".."\n", nil, nil, 25000) local snd = sound_object([[characters_voice\human_03\stalker\talk\leaves\leaves_61]]) snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0) end[/cut]
Добавлено (11.10.2011, 20:42) --------------------------------------------- если нет то как
Удали передачу параметров, они не работают (параметры - это то, что в скобках после названия функции) XOBAH
так надо?
Да. XOBAH
Добавлено (11.10.2011, 20:57) --------------------------------------------- у меня сразу выскакивает два сообщения а мне надо сначала одно а потом другое после того когда кончиться первое сообщение
Сообщение отредактировал tema796 - Ср, 12.10.2011, 17:29 |
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
InvuL | Дата: Ср, 12.10.2011, 17:40 | Сообщение # 9 |
Отмычка
Пользователи
Сообщений: 25
| В эту тему или нет вопрос задать, но задам здесь:Можноли в ЗП + SGM 1.7 сделать отображение всех (сталкеров, мутантов, зомби и т.п.) в КПК когда его открываешь, но только так как в ЧН сразу видно всех, и на всех локациях сразу.
Нет. denis2000
А в движке можно поменять это как нибудь?
Поменяй. Как будет результат выкладывай ссылку. denis2000
Сообщение отредактировал InvuL - Ср, 12.10.2011, 18:34 |
|
|
Эти 0 пользователя(ей) поблагодарили InvuL за это полезное сообщение: |
|
|
pepers | Дата: Ср, 12.10.2011, 17:55 | Сообщение # 10 |
Гражданский
Пользователи
Сообщений: 3
| Всем привет!! взял я квест у Ноя отбить волну мутантов (понадеялся на свои силы - глупец), 2 волны я выдерживает, но перед началом 3, когда убиваешь второго контролера, у меня погибает Давид. Внимание вопрос - как и где в скрипте или еще где нибудь (читертнуть вообщем) прописать ему побольше здоровья чтоб он не умер. Именно Давиду а не Дягтереву. Понимаю что поступаю плохо, но нужно. Хотя я может передумаю и загружусь по раньше, но все же подскажите! Заранее спасибо!
Ответ на такой вопрос есть в шапке темы, в сборнике модостроения. Рассмотрены там члены отряда в путепроводе в Припять. А так, лучше загрузитесь пораньше - ибо если менять иммунитеты, то надо загружаться до спавна персонажа (т.е. как минимум до взятия квеста у Бороды). XOBAH
|
|
|
Эти 0 пользователя(ей) поблагодарили pepers за это полезное сообщение: |
|
|
tema796 | Дата: Ср, 12.10.2011, 18:12 | Сообщение # 11 |
Гражданский
Пользователи
Сообщений: 20
| я создал скрипт
function sms() news_manager.send_tip(db.actor, "%c[255,0,255,0]".."СТРЕЛОК:".."\\n".."%c[255,255,128,128]Ну вот и меня постигла неудача - срок действия некоторых артов закончился и они превратились в булыжники...".."".."\n", nil, nil, 20000) local snd = sound_object([[characters_voice\human_03\stalker\talk\leaves\leaves_42]]) snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0) end
теперь вопрос как ставить туда инфопоршен чтобы когда у меня появился инфопоршен заработал этот скрипт
Вроде в ТЧ можно было использовать action в описании инфопоршней, на ЗП не пробовал. Предрекая последующие вопросы: где узнать про тег action - в КМБ пример работы с квестами, инфопоршни - создание диалогов в той-же ветке. XOBAH
А выполнить свою функцию вместе с выдачей инфопорции нельзя? denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
InvuL | Дата: Ср, 12.10.2011, 18:45 | Сообщение # 12 |
Отмычка
Пользователи
Сообщений: 25
| pepers, В логике Давида убери выдачу инфопоршней на неуязвимость в файле ...S.T.A.L.K.E.R. Зов Припяти\gamedata\configs\scripts\SGM\zaton\zat_barge_commander.ltx.И будет тебе щастье
Сообщение отредактировал InvuL - Ср, 12.10.2011, 18:47 |
|
|
Эти 0 пользователя(ей) поблагодарили InvuL за это полезное сообщение: |
|
|
xardaslich | Дата: Чт, 13.10.2011, 11:57 | Сообщение # 13 |
Отмычка
Пользователи
Сообщений: 41
| S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08
В моде уже реализован динамический худ брони(вид через окуляры маски(противогаза)+ дыхание)- обыгривается в скрипте sgm_huds.script; А вот запотевание стёкол окуляров и трещины(от износа брони)- не реализовано Хотелось-бы добавить(адаптировать скрипт в файле sgm_huds.script под нужды SGM 1.7)
В моде BAS_1_46 присутствует скрипт для обыгривания динамического худа брони (дыхание+запотевание+трещины)- файл vergas_masks.script
[cut noguest]--Lotions from Vergas---------------------------- -- Динамический худ ----------------------------------------------------- local wnd_hud local wnd_hud_steklo local hud_dirt --текущая грязь local hud_mask --текущее стекло local hud_mask_old --стекло при последнем апдейте local hud_osnova --текущая основа маски local hud_osnova_old -- основа маски при последнем апдейте local flag_mask local flag_mask_zoom local flag_mask_optics local phase --фаза дыхательного цикла local blurs = nil local time_finish = 0 --время окончания дыхательного цикла local flag local delta_time local dirt_phase --фаза цикла загрязнения стекла шлема local time_dirt_finish -- время окончания грязевой фазы local hud = get_hud() local mask_ini = ini_file("verg\\vergas_masks.ltx") local time_dirt_phase = mask_ini:r_s32("list_parameters","time_dirt_phase") -- время фазы загрязнения стекла в реальных секундах
function update() if db.actor then local helmet = db.actor:item_in_slot(12) -- шлем на ГГ local outfit = db.actor:get_current_outfit() -- костюм на ГГ local condition
--определю кондицию стекла шлема if helmet ~= nil then --у ГГ есть шлем hud_mask = vergas_lib.set_pr_from_config_str(helmet:section(),"hud_mask") condition = helmet:condition() hud_osnova = hud_mask.."_0" else --у ГГ шлема нет if outfit ~= nil then hud_mask = vergas_lib.set_pr_from_config_str(outfit:section(),"hud_mask") condition = outfit:condition() hud_osnova = hud_mask.."_0" end end
--а не решил ли наш друг с биноклем побаловаться? local gg_item=db.actor:active_item() if gg_item and gg_item:section()=="wpn_binoc" and device().fov<50 then if wnd_hud then wnd_hud:SetWndRect(Frect():set(0,0,0,0)) local zoom = mask_ini:r_s32("list_parameters","zoom_binoc") if wnd_hud_steklo then wnd_hud_steklo:SetWndRect(Frect():set(0,0,0,0)) --wnd_hud_steklo:SetWndRect(Frect():set(-512*zoom+512,-384*zoom+384,1024*zoom,768*zoom)) end if wnd_hud_dirt then wnd_hud_dirt:SetWndRect(Frect():set(0,0,0,0)) --wnd_hud_dirt:SetWndRect(Frect():set(-512*zoom+512,-384*zoom+384,1024*zoom,768*zoom)) end flag_mask = true --смотрит в биноклю delete_blurs() --убираю дыхание return end else if wnd_hud and flag_mask then wnd_hud:SetWndRect(Frect():set(0,0,1024,768)) if wnd_hud_steklo then wnd_hud_steklo:SetWndRect(Frect():set(0,0,1024,768)) end if wnd_hud_dirt then wnd_hud_dirt:SetWndRect(Frect():set(0,0,1024,768)) end flag_mask = false --перестал смотреть в биноклю return end end --а не прицеливается ли, чтобы стрельнуть? if gg_item and gg_item:section() ~= "wpn_binoc" and device().fov>56 then if wnd_hud then delete_blurs() --убираю дыхание local zoom = mask_ini:r_s32("list_parameters","zoom_sight") wnd_hud:SetWndRect(Frect():set(-1024*zoom,-768*zoom+768,1024*zoom,768*zoom)) if wnd_hud_steklo then wnd_hud_steklo:SetWndRect(Frect():set(-1024*zoom,-768*zoom+768,1024*zoom,768*zoom)) end if wnd_hud_dirt then wnd_hud_dirt:SetWndRect(Frect():set(-1024*zoom,-768*zoom+768,1024*zoom,768*zoom)) end flag_mask_zoom = true --прицеливается end else if wnd_hud and flag_mask_zoom then wnd_hud:SetWndRect(Frect():set(0,0,1024,768)) if wnd_hud_steklo then wnd_hud_steklo:SetWndRect(Frect():set(0,0,1024,768)) end if wnd_hud_dirt then wnd_hud_dirt:SetWndRect(Frect():set(0,0,1024,768)) end flag_mask_zoom = false --больше не прицеливается end end --а не пользуется ли оптикой на руже? if gg_item and device().fov<40 then if wnd_hud then wnd_hud:SetWndRect(Frect():set(0,0,0,0)) local zoom = mask_ini:r_s32("list_parameters","zoom_binoc") if wnd_hud_steklo then wnd_hud_steklo:SetWndRect(Frect():set(0,0,0,0)) end --wnd_hud_steklo:SetWndRect(Frect():set(-512*zoom+512,-384*zoom+384,1024*zoom,768*zoom)) if wnd_hud_dirt then wnd_hud_dirt:SetWndRect(Frect():set(0,0,0,0)) --wnd_hud_dirt:SetWndRect(Frect():set(-512*zoom+512,-384*zoom+384,1024*zoom,768*zoom)) end flag_mask_optics = true --смотрит в прицел delete_blurs() --убираю дыхание return end else if wnd_hud and flag_mask_optics then wnd_hud:SetWndRect(Frect():set(0,0,1024,768)) if wnd_hud_steklo then wnd_hud_steklo:SetWndRect(Frect():set(0,0,1024,768)) end if wnd_hud_dirt then wnd_hud_dirt:SetWndRect(Frect():set(0,0,1024,768)) end flag_mask_optics = false --перестал смотреть в прицел return end end
if hud_mask ~= nil and hud_mask ~= "?" then --у ГГ что-то есть на голове if not string.find(hud_mask,"plch") then hud_mask = set_hud_textur(condition) -- это стекло end if hud_mask ~= hud_mask_old then --что-то есть и не то что было. Удаляю старое delete_mask() delete_steklo() --удаляю дыхание delete_blurs() --удаляю грязь delete_dirt() -- напяливаю новое if hud_osnova_old ~= hud_osnova then --поменялась основа маски --устанавливаю параметры загрязнения стекла в 0 time_dirt_finish = time_global()/1000 + time_dirt_phase dirt_phase = 1 --стекло чистое hud_dirt = string.sub(hud_mask,1,string.len(hud_mask)-1)..dirt_phase.."_"..get_steklo_phase() restore_dirt() else --основа не поменялась, поменялось стекло --проверяю не сменилась ли фаза стекла с 5 на 6 (появились дырки) и подставляю грязь if not string.find(hud_mask,"plch") then if dirt_phase ~= 0 then hud_dirt = string.sub(hud_mask,1,string.len(hud_mask)-1)..dirt_phase.."_"..get_steklo_phase() restore_dirt() end end end --восстанавливаю маску if not string.find(hud_mask,"plch") then restore_steklo() end restore_mask()
hud_mask_old = hud_mask hud_osnova_old = hud_osnova end -- не пора ли загрязнить стекло local current_time = time_global()/1000 -- нулевую фазу грязи меняю сразу на первую
if current_time - time_dirt_finish >= time_dirt_phase then --меняю фазу грязи if dirt_phase < 6 then dirt_phase = dirt_phase + 1 time_dirt_finish = current_time + time_dirt_phase --меняю текстуру грязи delete_dirt() --определяю фазу состояния стекла и формирую имя текстуры грязи hud_dirt = string.sub(hud_mask,1,string.len(hud_mask)-1)..dirt_phase.."_"..get_steklo_phase() --сварачиваю всю маску delete_mask() --сварачиваю дыхание delete_blurs() --ставлю грязь restore_dirt() --разварачиваю маску restore_mask() end
end --эффект дыхания breath_effect() else --у ГГ на голове ничего нет if hud_mask_old ~= nil then --но что-то было: снял, паразит delete_mask() delete_steklo() --удаляю грязь delete_dirt() wnd_hud_dirt = nil wnd_hud = nil wnd_hud_steklo = nil --прикрываю дыхание breath_effect() end hud_mask_old = nil hud_osnova_old = nil end hud_mask = nil end end
function breath_effect() --заставим ГГ дышать потно if hud_mask ~= nil and hud_mask ~= "?" then if not string.find(hud_mask,"protective") and not string.find(hud_mask,"csh") and not string.find(hud_mask,"plch") then set_blurs(true) else set_blurs(false) end else set_blurs(false) end end
function set_hud_textur(condition) local mask_steklo if condition > mask_ini:r_float("list_parameters","condition_1") then mask_steklo = hud_mask.."_1" elseif condition > mask_ini:r_float("list_parameters","condition_2") then mask_steklo = hud_mask.."_2" elseif condition > mask_ini:r_float("list_parameters","condition_3") then mask_steklo = hud_mask.."_3" elseif condition > mask_ini:r_float("list_parameters","condition_4") then mask_steklo = hud_mask.."_4" elseif condition > mask_ini:r_float("list_parameters","condition_5") then mask_steklo = hud_mask.."_5" else mask_steklo = hud_mask.."_6" end return mask_steklo end
function set_blurs(enabled)
local hud = get_hud() local cycle = 0 if flag_mask or flag_mask_zoom then return end if not (blurs and hud:GetCustomStatic("hud_blur1")) then blurs = {} for i=1,4 do hud:AddCustomStatic("hud_blur"..i) blurs[i] = hud:GetCustomStatic("hud_blur"..i):wnd() end end
if not enabled then for i=1,4 do local bh = hud:GetCustomStatic("hud_blur"..i) if bh then hud:RemoveCustomStatic("hud_blur"..i) end end return end
if phase == 0 or phase == nil then --расчитываю количество дыхательных циклов в минуту local power=db.actor.power if power > 0.75 then cycle = 30 elseif power > 0.5 then cycle = 60 elseif power > 0.25 then cycle = 90 else cycle = 120 end phase = 1 -- время начала цикла local time_start = time_global()/1000 -- длинна цикла delta_time = 60/cycle/4 --длина одного из 4 циклов: выдох, пауза, вдох, пауза time_finish = time_start + delta_time flag = false end
local t = time_global()/1000 if t < time_finish then
local x = 0 local y = 0 local w = 1024 local h = 0 if cycle == 30 then x = 0 y = 275 w = 1024 h = 918 elseif cycle == 60 then x = -25 y = 300 w = 1074 h = 868 elseif cycle == 90 then x = -50 y = 325 w = 1124 h = 818 elseif cycle == 120 then x = -75 y = 325 w = 1174 h = 818 end if phase == 1 and not flag then for i=1,4 do --выдох blurs[i]:SetWndRect(Frect():set(x,y,w,h)) end flag = true elseif phase == 3 and not flag then for i=1,4 do --вдох blurs[i]:SetWndRect(Frect():set(x,y,0,0)) end flag = true end else if phase == 1 then --выдох phase = 2 elseif phase == 2 then --пауза phase = 3 elseif phase == 3 then --вдох phase = 4 elseif phase == 4 then --пауза phase = 0 end flag = false time_finish = time_finish + delta_time end end
function delete_mask() local bh = hud:GetCustomStatic(hud_osnova_old) if bh then hud:RemoveCustomStatic(hud_osnova_old) --удаляю основу маски end end
function delete_steklo() local bh = hud:GetCustomStatic(hud_mask_old) if bh then hud:RemoveCustomStatic(hud_mask_old) --удаляю стекло end end
function delete_dirt() local bh = hud:GetCustomStatic(hud_dirt) if bh then hud:RemoveCustomStatic(hud_dirt) end end
function delete_blurs() for i=1,4 do local bh = hud:GetCustomStatic("hud_blur"..i) if bh then hud:RemoveCustomStatic("hud_blur"..i) end end end
function restore_mask() hud:AddCustomStatic(hud_osnova, true) --это основа маски wnd_hud = hud:GetCustomStatic(hud_osnova):wnd() wnd_hud:SetWndRect(Frect():set(0,0,1024,768)) end
function restore_steklo() hud:AddCustomStatic(hud_mask, true) --это стекло wnd_hud_steklo = hud:GetCustomStatic(hud_mask):wnd() wnd_hud_steklo:SetWndRect(Frect():set(0,0,1024,768)) end
function restore_dirt() hud:AddCustomStatic(hud_dirt, true) --это грязь wnd_hud_dirt = hud:GetCustomStatic(hud_dirt):wnd() wnd_hud_dirt:SetWndRect(Frect():set(0,0,1024,768)) end
function get_steklo_phase() local str = string.sub(hud_mask,9,1) if str == "6" then return "b" else return "n" end end
function clean_dirt() delete_dirt() end
function delete_dyn_hud() --сварачиваю всю маску delete_mask() delete_steklo() --сварачиваю дыхание delete_blurs() delete_dirt() end
function replay_dyn_hud() restore_mask() restore_steklo() restore_dirt() end[/cut]
В моде skins_dinamic_hud присутствуют собственно сами текстуры для динамического худа брони(по возростанию "изношенности и запотеванию"-->например: от hud_exo1.dds(целое, чистое) до hud_exo6.dds(очень запотевшее, очень разбитое) и т.д.
Подскажите пожайлуста как мне правильно дополнить скрипт в файле sgm_huds.script чтобы адаптировать эти 2 мода с SGM 1.7?
Я бы выключил динамический хад в SGM и полностью перенес скрипты из BAS_1_46, там все вроде неплохо сделано. О совмещении модов читай в КМБ Урок 002. Адаптация модов. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили xardaslich за это полезное сообщение: |
|
|
pepers | Дата: Чт, 13.10.2011, 12:43 | Сообщение # 14 |
Гражданский
Пользователи
Сообщений: 3
| InvuL, спасибо добрый человек!! Еще бы узнать мне что такое "убери выдачу инфопоршней на неуязвимость" и как именно это делается (в какой строчки это написано)? Будет возможность, подскажите! ЗЫ что файл открывать блокнотом я знаю
|
|
|
Эти 0 пользователя(ей) поблагодарили pepers за это полезное сообщение: |
|
|
InvuL | Дата: Чт, 13.10.2011, 18:54 | Сообщение # 15 |
Отмычка
Пользователи
Сообщений: 25
| [cut=zat_barge_commander.ltx] Code [logic] active = move@waiting on_death = death
[death] on_info = %+zat_monsters_wave_defence_commander_killed =zat_monsters_wave_commander_death%
[move@waiting] move_dest_number = 1219831 move_look_vertex = 1219848 move_state_when_center = guard move_state_when_move = walk meet = meet invulnerable = true combat_ignore_cond = {=check_enemy_name(zat_b18_dog_noah)} true on_info = {=actor_neutral} %=actor_friend% on_info2 = {=actor_enemy} %=actor_friend% on_info3 = {+zat_monsters_wave_fail} nil on_info4 = {+zat_monsters_wave_complete} nil on_info5 = {+zat_monsters_wave_on_firepos} move@defence %=play_s2d_sound(characters_voice\human_01\stalker\alife\defence\actor_come_1_pda)%
[move@defence] scheme_type = shooter shooter_pos = 1219831 shooter_fire_look = enemy shooter_idle_look = 1219848 shooter_clip = -1 shooter_reload = 1 shooter_type_wpn = rifle shooter_ignore_actor = true shooter_need_see = true shooter_need_dist = 60 shooter_move_state = assault shooter_idle_state = threat shooter_fire_state = threat_fire shooter_home_teleport = true combat_ignore_cond = {=check_enemy_name(zat_b18_dog_noah)} true invulnerable = true --Просто поставь вот так и всё-- on_info = {=actor_neutral} %=actor_friend% on_info2 = {=actor_enemy} %=actor_friend% on_info3 = {+zat_monsters_wave_fail} nil on_info4 = {+zat_monsters_wave_3_controller_destroyed} nil %=play_s2d_sound(characters_voice\human_01\stalker\alife\defence\end_defence_2_pda)% [/cut] И вот эта строка отвечает за неуязвимость: ... combat_ignore_cond = {=check_enemy_name(zat_b18_dog_noah)} true invulnerable = true --Просто поставь вот так и всё-- on_info = {=actor_neutral} %=actor_friend% ...
А инфопоршни это условия на выполнение того или инного действия.
Сообщение отредактировал InvuL - Чт, 13.10.2011, 19:01 |
|
|
Эти 0 пользователя(ей) поблагодарили InvuL за это полезное сообщение: |
|
|
|