Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
  • Страница 1 из 61
  • 1
  • 2
  • 3
  • 60
  • 61
  • »
Модератор форума: denis2000, FantomICW  
Модостроение. Редактирование и создание скриптов
denis2000Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Редактирование и создание скриптов

Редактирование и создание скриптов на языке 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
tema796Дата: Вт, 11.10.2011, 14:46 | Сообщение # 2
Гражданский
Пользователи
Сообщений: 20
Награды: 0
Репутация: [ -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
может зарегать его нада
 
XOBAHДата: Вт, 11.10.2011, 15:15 | Сообщение # 3
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

tema796, в ЗП (чистом) нет функции get_safe_sound_object, добавляй ее. Откуда - оттуда-же откуда брал эту функцию (message)

 
tema796Дата: Вт, 11.10.2011, 15:19 | Сообщение # 4
Гражданский
Пользователи
Сообщений: 20
Награды: 0
Репутация: [ -20 ]

это название функций XOBAH, что надо изменить чтобы приходило сообщение и проигрывался мой звук
 
XOBAHДата: Вт, 11.10.2011, 19:13 | Сообщение # 5
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

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


 
tema796Дата: Вт, 11.10.2011, 19:47 | Сообщение # 6
Гражданский
Пользователи
Сообщений: 20
Награды: 0
Репутация: [ -20 ]

а как сделать чтобы после первого скрипта сразу же заработал второй скрипт
 
XOBAHДата: Вт, 11.10.2011, 20:24 | Сообщение # 7
Техник Вольных
Вольные сталкеры
Сообщений: 912
Награды: 21
Репутация: [ 991 ]

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]


 
tema796Дата: Ср, 12.10.2011, 17:28 | Сообщение # 8
Гражданский
Пользователи
Сообщений: 20
Награды: 0
Репутация: [ -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
 
InvuLДата: Ср, 12.10.2011, 17:40 | Сообщение # 9
Отмычка
Пользователи
Сообщений: 25
Награды: 2
Репутация: [ 4 ]

В эту тему или нет вопрос задать, но задам здесь:Можноли в ЗП + SGM 1.7 сделать отображение всех (сталкеров, мутантов, зомби и т.п.) в КПК когда его открываешь, но только так как в ЧН сразу видно всех, и на всех локациях сразу.

Нет. denis2000

А в движке можно поменять это как нибудь?

Поменяй. Как будет результат выкладывай ссылку. denis2000


Сообщение отредактировал InvuL - Ср, 12.10.2011, 18:34
 
pepersДата: Ср, 12.10.2011, 17:55 | Сообщение # 10
Гражданский
Пользователи
Сообщений: 3
Награды: 0
Репутация: [ 0 ]

Всем привет!!
взял я квест у Ноя отбить волну мутантов (понадеялся на свои силы - глупец), 2 волны я выдерживает, но перед началом 3, когда убиваешь второго контролера, у меня погибает Давид.
Внимание вопрос - как и где в скрипте или еще где нибудь (читертнуть вообщем) прописать ему побольше здоровья чтоб он не умер. Именно Давиду а не Дягтереву.
Понимаю что поступаю плохо, но нужно.
Хотя я может передумаю и загружусь по раньше, но все же подскажите! Заранее спасибо!

Ответ на такой вопрос есть в шапке темы, в сборнике модостроения. Рассмотрены там члены отряда в путепроводе в Припять. А так, лучше загрузитесь пораньше - ибо если менять иммунитеты, то надо загружаться до спавна персонажа (т.е. как минимум до взятия квеста у Бороды). XOBAH
 
tema796Дата: Ср, 12.10.2011, 18:12 | Сообщение # 11
Гражданский
Пользователи
Сообщений: 20
Награды: 0
Репутация: [ -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
 
InvuLДата: Ср, 12.10.2011, 18:45 | Сообщение # 12
Отмычка
Пользователи
Сообщений: 25
Награды: 2
Репутация: [ 4 ]

pepers, В логике Давида убери выдачу инфопоршней на неуязвимость в файле ...S.T.A.L.K.E.R. Зов Припяти\gamedata\configs\scripts\SGM\zaton\zat_barge_commander.ltx.И будет тебе щастье smile

Сообщение отредактировал InvuL - Ср, 12.10.2011, 18:47
 
xardaslichДата: Чт, 13.10.2011, 11:57 | Сообщение # 13
Отмычка
Пользователи
Сообщений: 41
Награды: 1
Репутация: [ 49 ]

S.T.A.L.K.E.R. Call of Pripyat 1.6.02(лиц) + Sigerous Mod 1.7+ fix 31.08

В моде уже реализован динамический худ брони(вид через окуляры маски(противогаза)+ дыхание)- обыгривается в скрипте sgm_huds.script;
А вот запотевание стёкол окуляров и трещины(от износа брони)- не реализовано sad
Хотелось-бы добавить(адаптировать скрипт в файле 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
 
pepersДата: Чт, 13.10.2011, 12:43 | Сообщение # 14
Гражданский
Пользователи
Сообщений: 3
Награды: 0
Репутация: [ 0 ]

InvuL, спасибо добрый человек!!
Еще бы узнать мне что такое "убери выдачу инфопоршней на неуязвимость" wacko и как именно это делается (в какой строчки это написано)? Будет возможность, подскажите!
ЗЫ что файл открывать блокнотом я знаю biggrin
 
InvuLДата: Чт, 13.10.2011, 18:54 | Сообщение # 15
Отмычка
Пользователи
Сообщений: 25
Награды: 2
Репутация: [ 4 ]

[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
 
  • Страница 1 из 61
  • 1
  • 2
  • 3
  • 60
  • 61
  • »
Поиск: