24 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Скрипты для S.T.A.L.K.E.R.: Shadow of Chernobyl

Функции script_stalker

11. Привязка сталкера к конкретной позиции ( к vertex _ id )

xr_position. setPosition(obj, position)

obj – обжект сталкера, обычно это self . object

position – vertex _ id ноды, к которой он будет привязан.

Если вам нужно, чтобы в каком то экшине он был в данной позиции, то нужно сделать:

action:add_precondition (world_property(properties[«position»], true))

где properties[«position»]= xr_evaluators_id.position

2. Смена положений тела

object – объект, которому нужно изменить положение тела

new – id нового положения тела

Чтобы во время смены положений избежать действий ваших экшнов, нужно сделать следующее

action:add_precondition (world_property(properties[«state_end»], true))

где properties[«state_end»] = xr_evaluators_id.state_change

— ОПИСАНИЕ ИДЕНТИФИКАТОРОВ ПОЗИЦИЙ:

Xr_state.sit _ wait

3. Рандомное проигрывание звуков

Xr_sound.set_sound(npc, sound, now)

— Пример конструктора, описывающего звуки

— begin = nil ,— служебное поле

— maxidle = 10, — максимальное время между звуками

— sumidle = 10, — надбавочное время, добавляется к рандомно выбранному от 1 до максимального.

— rnd = 100, — вероятность, с которой будет проигран звук, если пришло время

— lastsound = nil , — служебное поле

— sounds = < < pack = sounds [" idle "], id = 0>, — пачка звуков, из которых будет выбираться

— Проигрыш саундов ( By Stohe )

— npc — object который будет играть звук

— sound — конструктр звуков, см выше

— now — если звук отыграть надо прямо сейчас

4. Проверка, находится ли объект в онлайне

передавать ID объекта

5. Проверка, является ли данный итем оружием

передавать cls _ id объекта

6. Настройка реакций

Реакции можно настраивать через кастом дату и в рантайме.

В рантайме можно добавлять и удалять правила

где obj – объект, которому вы добавляете правило

В кастом дате правила нужно писать без кавычек, а в функциях – в кавычках.

Список поддерживаемых правил:

“ no _ item ” — игнорирует все вещи

“ no _ check ” — никогда не ходить проверять источник, только смотрит на него

“ignore” – игнорирует все раздражители

“ silence ” – не издавать звук (не говорить реплики)

7. Время суток в мс

8. Время суток в часах

9. Парсит строку вида » ааа , ббб , ввв . » втаблицу < " ааа «, » ббб «, » ввв «, . >

function parse_names( s )

10. Взвешеннаяслучайнаявыборкаизтаблицывида

Возвращает один из obj. Веса >= 0

function random_choice_weighted( a )

11 . Звуковая система

Живет в xr _ sound . script . Для инициализации нужно вызвать из мотиватора функцию load _ sounds с параметром game _ object :

function play_sound (obj, delay, theme, sub_theme, phrase_set, sub_phrase)

где obj – NPC , delay – задержка перед воспроизведением (время в миллисекундах), theme – тема (строка), sub _ theme – подтема (если несколько),

phrase _ set – набор фраз в подтеме, sub _ phrase – номер фразы в наборе.

Первые 3 параметра обязательны, остальные нет. Для необязательных параметров

Будут выбраны рандомные значения.

function create_sound_constructor (theme, sub_theme) – возвращает sound constructor. Параметры обязательны и соответствуют тому, что изложено выше.

Пример конструктора, описывающего звуки

idle = 0, — служебное поле
begin = nil, — служебное поле
maxidle = 10, — максимальное время между звуками
sumidle = 10, — надбавочное время, добавляется к рандомно выбранному от 1 до максимального.
— rnd = 100, — вероятность, с которой будет проигран звук, если пришло время
— lastsound = nil, — служебное поле
— sounds = < , — пачка звуков, из которых будет выбираться
,
,
,
,
,
,
,
>>

Добавление своих тем.

Тема – ассоциативный массив (таблица) в которой хранятся таблицы подтем. Подтема – таблица, в которой хранится идентификатор загруженных звуков и их количество. Пример :

sounds_base,
obj:add_sound («script_replics\radio\message\radio_turn_on_», 30,

snd_type.talk, 2, 1, sounds_base + 0),

obj:add_sound («script_replics\radio\commander\radio_start_», 30,

snd_type.talk, 2, 1, sounds_base + 1),
obj:add_sound («script_replics\radio\message\radio_voice_», 30,

snd_type.talk, 2, 1, sounds_base + 2),
obj:add_sound («script_replics\radio\commander\radio_reply_», 30,

snd_type.talk, 2, 1, sounds_base + 3),
obj:add_sound («script_replics\radio\message\radio_voice_», 30,

snd_type.talk, 2, 1, sounds_base + 4),
obj:add_sound («script_replics\radio\commander\radio_finish_», 30,

snd_type.talk, 2, 1, sounds_base + 5),
obj:add_sound («script_replics\radio\message\radio_turn_off_», 30,

snd_type.talk, 2, 1, sounds_base + 6)
>
>

Здесь объявлена тема commander _ radio с одной подтемой. Для добавления еще одной подтемы нужно добавить еще одну таблицу к теме и прописать по аналогии с существующей (соответственно с нужными параметрами).

Необходимо, чтобы поле sound _ base четко соответствовало своему значению, иначе может произойти вылет движка.

11. Прекращение проигрывания звука

12. Определения типа обьекта

obj — объект из памяти

возвращает тип обьекта:

13. Выбор точки пути с заданным битом

point_with_bit( patrol_path, bit, old_point )

patrol_path — патрульный путь

bit — заданный бит

old_point — индекс точки, которую не надо выбирать( параметр не обязательный)

Если точек несколько, то произвольно выберет одну из них

Если не находит ни одной точки, то возвращает nil . Сразу видно, что путь построен не так, как задумывал разработчик.

Рекурсивная распечатка таблицы

Print _ table ( table )

Система проигрывания анимаций

Nil – прекратить проигрывание

Читать еще:  S.T.A.L.K.E.R.: Shadow of Chernobyl "Графическое дополнение для NLC 7.1с от Евгения (Пермь)"

“ idle ” – стоячий айдл

“ poisk ” – поиск чего либо

“ hide ” – ожидание в засаде ( mental . state Должен быть danger )

Примеры использования смотрите в коде или спрашивате в справочной.

Xr _ state . anim _ safe _ to _ break ( npc ) – указывает можно ли прервать анимации, чтобы не было сильно заметных рывков.

Контекстно-зависимая озвучка

Эта схема нужна для случаев, когда нужно проиграть случайный звук из набора, соответствующего текущим условиям (погода, здоровье, класс объекта, класс объекта, в чей адрес должна прозвучать реплика и т.п.).

Состоит из двух этапов:

  1. Формирование таблицы-конструктора озвучки. Это обычно можно делать в initialize . Пример:

maxidle = 10, — максимальное время (сек) между звуками (умолчание = 10)

sumidle = 10, — надбавочное время, добавляется к рандомно выбранному от 1 до максимального. (умолчание = 10)

rnd = 75, — вероятность, с которой будет проигран звук, если пришло время (умолчание = 100)

themes = < " weather ", " state " >— список тем для разговора

  1. Проигрываниеэтогонабораспомощью xr_sound.sound_update. Это нужно делать в execute , разумеется.

function sound_update(npc, sound, now)

sound – таблица — конструктор

now – если true , то проиграть звук немедленно без задержки. Если число, то с этой задержкой.

перечень возможных тем:

— состояния тела, а также всяческие «покашливания»

— просьба о помощи

«threat_back» – свали отседа

«threat_stop» — стоять, не сместа

Использование xr _ sound для проигрывания сюжетных/одноразовых звуков.

Нужно создать свои темы, а потом просто вызывать sound _ update . Пример создания темы:

В функции load _ sound () внизу в соответствии с уровнем дописать тему:

— бандиты на заводе

theme[«escape_factory_bandits_novice»] = load_theme(«esc_f_band_novice«)

То, что выделено жирным – ключ в таблице наборов звуков. Набор звуков для темы нужно прописать вверху файла в табличке snd _ files . Например:

— бандиты на заводе

esc_f_band_novice = «l_escape\factory_bandits\bandit_about_novice_»,

Эти темы можно использовать вместе с темами контекстно-зависимой озвучки. А можно и для одноразового проигрывания какой-то реплики.

Создадим таблички (. причём лучше один раз при загрузке скрипта. ):

Первую табличку можно использовать в execute для того, чтобы бандит время от времени говорил о погоде, новичке, зоне и т.д.:

xr_sound.sound_update( self.object, rnd_phrases )

Вторую табличку можно использовать для проигровки звука по теме в определённый момент (например, когда бандиты увидели новичка):

xr_sound.sound_update( npc, snd_novice_again, true )

Причём взведён флажок now , что означает моментальную проигровку звука без задержек. Если в now передать число, то оно будет считаться задержкой (в мс), по истечению которой проиграется звук.

Скрипты для S.T.A.L.K.E.R.: Shadow of Chernobyl

1. Все файлы скрипты находятся в папке gamedatascrips .
2. Файл скрипта — это текстовый файл имеющий расширение .script .
3. В С.Т.А.Л.К.Е.Р используется немного изменённый скриптовый язык Lua 5.1 .
4. Для редактирования скриптов я советую NotePad c++, данная программа имеет подсветку синтаксиса для многих языков, в том числе и для Lua. Чтобы активировать подсветку нажмите клините Стиль — Lua .
5. Чтобы закоментировать строку (код игры не будет ёё читать) , необходимо перед строкой поставить .
Если вы хотите закоментировать кусок (много строк) то —[[ . ]] , ваш текст будет закоментирован.

Начнём уроки.
1)Создадим свой my.scripts и поместим его в папку scrips . Откроем с помощью НотПада и настроим подсветку.
2) Внутри файла-скрипта должны содержаться только КОД скрипта и ваши ЗАКОМЕНТИРОВАННЫе пометки. Если будет лишний текст, т.е какие-то знаки и слова, то будет вылет на этот скрипт. Так как код игры полностью собирает весь скрипт в стек и выбирает только то, что вы задали, но если будет мусор, то игра не воспримет код.
3)Архитектур. Для создания функций нужны лишь знания синтаксиса и игровые методы и глобальные функции(которые записаны в движке) можете почитать lua_help.scrip , но я советую посетить тему на АМК . Там собраны все методы, классы и полное их описание.
4) Функция. Это то, что будет делать игра.

Любая функция начинается со слов

И заканчивается тегом end . Этот тег означает конец функции, сравнения, он закрывающий и обязателен. Я советую при составлении функций , чтобы не забыть чего-нибудь, писать скелет извне, т.е сначала функция, потом закрывающий тег, и по нарастающей во внутрь.
() -Обязательный элемент. Позже расскажу как передавать переменные через этот тег.Между окончание функции и этим тегом ПРОБЕЛА НЕТ.

Обращаю внимание, что все функции вызываются из других скриптов. Допустим нам из одного скрипта, нужно вызвать(запустить функцию в другом) для этого мы пишем
название скрипта . название функции в скрипте (парметр если есть)
my.my_function()

Чтобы объявить какой-либо элемент для функции локальным используется тег local
local helth = db.actor.helth
Т.е мы расшифровали helth , и показали , что это значение db.actor.helth.
Если вы хотите вставить слово или свой текст нужно заключить слово в кавычки.
local helth = «Уровень здоровья.»
Если вы хотите вставить слово с кавычками или свой текст нужно сделать так:
local helth = «»Уровень здоровья.»»
Чтобы объявить глобальну нужно всего лишь сделать так
helth = db.actor.helth

Глобальные можно объявлять вначале скрипта и она будет сохранятся в коде, в памяти процесса (если я правильно понял)
Переменная объявляется только перед функцией и логическими выражениями, где используется переменная и её использует только та функция, перед которой она объявляется (На пальцах перед строкой с вашей функцией). Т.е елси функция простая без логических решений(if, elseif, for и.т.д) То ставим перед функцией, если же есть переменная, которая находится в теле такого логического решения, то она ставится строго перед этим логическим решением!

Читать еще:  Моды для S.T.A.L.K.E.R.: Call of Pripyat

local helth = db.actor.helth
function my_function()
.
end

Чтобы сосчитать значение переменной из другого скрипта достаточно в другом скрипте сделать так:
text=«Я иду гулять по бродвею»
Теперь в нашем скрипте вызываем этот параметр
local pisanina = название скрипта . text
() — При таком обращении этот тег НЕ СТАВИТСЯ !

if . then
.
end
Перевожу Если что-то то
конец тега .
Пример

if db.actor.psy==0.5 then
db.actor:kill(db.actor)
end
Если пси-здоровье ГГ — половина, то мы его убиваем.
Полная функция:

function my_function()
if db.actor.psy==0.5 then
db.actor:kill(db.actor)
end
end

[/color]
local acter = db.actor
function my_function()
local psy_zdorovie = acter.psy
if psy_zdorovie==0.5 then
acter:kill(acter)
end
end
Что я сделал?
Обозначил кусок db.actor локальной acter .
А acter.psy (db.actor)+.psy равносильно db.actor.psy

local psy_zdorovie = acter .psy
Нам нужна эта acter перменная, и мы ДОЛЖНЫ ОБЪЯВИТЬ её перед переменной
local psy_zdorovie = acter .psy .
Мы ее и объявили local acter = db.actor .
Думаю смысл понятен?

if . then
1 действие.
else
2 действие.
end

Перевод: Если подходит условие то
1 действие
иначе (т.е условие не выполняется)
2 действие
конец тега
Пример:

function my_function()
if db.actor.psy==0.5 then
db.actor:kill(db.actor)
else
db.actor.give_info_portion(«info»)
end
end

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

Допустим нам нужно проверить несколько условий:
Чтобы они все выполнялись!

if (db.actor) and (db.actor.helth==1) and (db.actor.psy ==0.5) then
действие
end
Функция сработает если есть актор и здоровье актора полное и псиздоровье половина .

Тег and — означает И . Если один из элементов не выполняется, то функция не срабатывает. Кстати — это ленивый метод, как писал Kamikaze , если не выполняется первый элемент, то другие — уже не просчитывааются. Т.е. не загнружается процесс.

Если подходит хоть один элемент.
if (db.actor) or (db.actor.helth==1) or (db.actor.psy ==0.5) then
действие
end

Тег or обозначает ИЛИ . Или один, или другой. Функция сработает при условии соответствия хоть одного элемента. Так же ленивый метод. Проверяет до получения утвердительного решения, потом проверка не идет.

Данный метод заменяет перебор через таблицу. Отличается простотой и потерей производительности.

if . then
самое основное действие
elseif . then
действие 1
elseif . then
действие 2
elseif . then
действие 3
elseif . then
действие 4
elseif . then
действие 5
end
Здесь представлен перебор elseif иначе если , т.е не подходит первый вариант, мы проверяем второй и так по цепочке , до первого подходящего(где выполняется заданное условие), если же ни одно не подойдет, то ничего не произойдет. Если бы мы просто в йункции написали кучу

function perebor()
if . then
действие
end
if . then
действие
end
if . then
действие
end
if . then
действие
end
if . then
действие
end
if . then
действие
end
end

Тон ничего хорошего не вышло бы. Так как проверялись бы все функции. А в первом варианте до первого попавшегося.

Пременная нил указывает, что объекта , условия, да чего угодно НЕТ, его не существует.
ВСЕГДА проверяйте некоторые объекты на nil
Во первых это актор .
Можно написать

Но правильнее и эстетичнее, сразу писать так.

if (db.actor) then
.
end

Проверкой советую проверять многие элементы, так как в игре они зачастую не существуют в определенные моменты.

if имя скрипта then
.
end

if my then
.
end

И делайте всегда, потому как, просто удалите этот скрипт из каталога и не надо будет мучаться с переписыванием других скриптов.

math.random (1,100)
Данная функция рандомно выберет число от 1 до 100.
Сначала ставится наименьшее, потом наибольшее.
Если ставить десятичные , допустим (0.0005, 1), то перебуеруться ВСЕ значения, т.е числа с несколькими знаками, ТАК ДЕЛАТЬ НЕ НУЖНО. вы перегрузите некоторые элементы кода.
Использование

if math.random(0,1) self.spawn_frame+2000) then
jump_level.try_to_jump()
self.already_jumped = true
return
end

— Вызов апдейта переноса игрока проводником
if travel_func

— DEBUG slowdown
—slowdown.update()
local time = time_global()
game_stats.update (delta, self.object)
— апдейт погоды
self.weather_manager:update()

— Обновление отключения ввода с клавиатуры.
if self.st.disable_input_time

= nil and
game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
then
level.enable_input()
self.st.disable_input_time = nil
end

— Апдейт прятание оружия игрока во время диалога
if self.object:is_talking() then
if self.weapon_hide_in_dialog == false then
self.object:hide_weapon()
printf(«hiding weapon. «)
self.weapon_hide_in_dialog = true
end
else
if self.weapon_hide_in_dialog == true then
printf(«restoring weapon. «)
self.object:restore_weapon()
self.weapon_hide_in_dialog = false
end
end
— Апдейт прятание оружия игрока в зоне sr_no_weapon
if check_for_weapon_hide_by_zones() == true then
if self.weapon_hide == false then
printf(«hiding weapon. «)
self.object:hide_weapon()
self.weapon_hide = true
end
else
if self.weapon_hide == true then
printf(«restoring weapon. «)
self.object:restore_weapon()
self.weapon_hide = false
end
end

— обновление пси-антенны
if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:update(delta)
end
—[[
—‘ Вывод сообщения о большой радиации
if self.object.radiation >= 0.7 then
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static == nil then
hud:AddCustomStatic(«cs_radiation_danger», true)
hud:GetCustomStatic(«cs_radiation_danger»):wnd():TextControl():SetTextST(«st_radiation_danger»)
end
else
local hud = get_hud()
local custom_static = hud:GetCustomStatic(«cs_radiation_danger»)
if custom_static

Читать еще:  S.T.A.L.K.E.R.: Call of Pripyat "Смена FOV"

if self.bCheckStart then
printf(«SET DEFAULT INFOS»)
if not has_alife_info(«global_dialogs») then
self.object:give_info_portion(«global_dialogs»)
end
if not has_alife_info(«level_changer_icons») then
self.object:give_info_portion(«level_changer_icons»)
end
self.bCheckStart = false

—if self.actor_weapon_on_start == true then
—db.actor:activate_slot(3)
—self.actor_weapon_on_start = false
—end
end
—device().precache_frame== 0 and
if not self.loaded_slot_applied then
self.object:activate_slot(self.loaded_active_slot)
self.loaded_slot_applied = true
end
xr_s.on_actor_update(delta)

= true) then
self.surge_manager:initialize()
self.f_surge_manager_loaded = true
end
if(self.surge_manager.levels_respawn[level.name()]) then
self.surge_manager:respawn_artefacts_and_replace_anomaly_zone()
end
self.surge_manager:update()
end
— Апдейт доступности для симуляции.
simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())

if not self.loaded then
get_console():execute(«dump_infos»)
self.loaded = true
end
treasure_manager.get_treasure_manager():update()

if not(primary_objects_filled) then
pda.fill_primary_objects()
primary_objects_filled = true
end
pda.fill_sleep_zones()
—СЮДА в САМЫЙ КОНЕЦ
end

В том же скрипте есть колбэки на взятие, потерю, использование предметов. Нужно лишь искать.
Этим вы займетесь сами, или спросите у меня.

В диалогах можно вызывать через тег (без () )

Изменение различных параметров

Smilerastafar
Rasta

Сообщения : 67
Дата регистрации : 2008-05-20
Откуда : Украина Харьков

Что касается правки параметров,что и для чего надо:
Как изменить время респауна
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedatascriptsse_repawn.scripts найти строку
idle_time:setHMSms( 0, 0, 0, math.random(self.idle_spawn_min, self.idle_spawn_max)*1000)
и исправить на
idle_time:setHMSms( math.random(Первое число, Второе число), 0, 0, math.random(self.idle_spawn_min, self.idle_spawn_max)*1000)
где первое и второе числа задают диапазон случайной переменной в часах отвечающей за респаун.

Как поднять камеру
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigcreaturesactor.ltx найти переменную camera_height_factor и увеличить примерно до 0.95 (это нормальный рост глаза-в-глаза)

Как изменить силу оружия
В папке S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigweapons лежат файлы конфигурации – открываешь необходимый тебе и находишь hit_power – изменяешь как тебе заблагорассудится.

Как изменить цены
На оружие – в папке S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigweapons находишь нужный тебе файл и в нем строку переменную cost (в самом начале) вместо указанной цены пишешь что тебе нужно.
Патроны – в той же папаке файл weapons.ltx в нем строка cost для каждого вида патронов
Предметы – файл S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigmiscitems.ltx – аналогично
Броня – там же файл outfit.ltx как и что менять надеюсь теперь догадаетесь 

Как изменить носимый вес
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigcreaturesactor.ltx находим переменную max_item_mass – это максимальный вес при достижении которго игрок перестает двигаться
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfig system.ltx изменяем переменную max_weight – это вес который игрок несет не напрягаясь.

Как сделать невидимые аномалии
В папке S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigmisc находим файл отвечающий за интересующую нас аномалию (например грави — zone_gravi.ltx) в файле находим строку idle_particles = anomaly2gravity_idle и коментим ее символами «—« — все визуально ничего нет. Что бы отключить еще и звуковое оповещение (а так имхо намного интереснее) находим строку visible_by_detector и меняем значение on на off

Как сделать что бы еда не лечила
Находим в файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigmiscitems.ltx нужный нам хавчик – например Kolbasa под ним переменную eat_health значение которой меняем на 0

Как изменить силу врагов
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigcreaturesactor.ltx найти строки
hit_probability_gd_novice = 0.20
hit_probability_gd_stalker = 0.30
hit_probability_gd_veteran = 0.40
hit_probability_gd_master = 0.50
они отвечают за вероятность попадания по вам при разных уровнях сложности. Повышаете значение до единицы и наслаждаетесь хардкором.

Как изменить разброс при стрельбе
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigcreaturesactor.ltx находим переменную disp_base и уменьшаем – разлет уменьшается соответсвенно

Как сделать много крови
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfig system.ltx находим переменную start_blood_size и уменьшаем ее – это минимальный размер раны при котором идет кровь (у меня 0.1 стоит) чуть ниже находим blood_drop_size и увеличиваем – как понятно это размер капли крови (у меня 0.3)

Как изменить музыку в приемнике у Сидоровича
В папке Z:GamesS.T.A.L.K.E.R. — Shadow of Chernobylgamedatasoundsscriptsmagnitofon лежит файл magnitofon_2.ogg. Берем любимую музыку сохраняем в формате ogg (моно, 44000) обзываем его magnitofon_2.ogg заменяем существующий файл и вуаля  хоть «Владимирский Централ» хоть «Районы Кварталы»

Как изменять артефакты
В файле S.T.A.L.K.E.R. — Shadow of Chernobylgamedataconfigmiscartefacts.ltx находим нужный артефакт смотрим его характеристики и меняем

health_restore_speed скорость восстановления здоровья 0.0001 = +100%
radiation_restore_speed скорость накопления радиации 0.0004 = 4 если поставить отрицательное число будет ускорять выведение радиации

иммунитеты например 0.7 = +30% 0.2 = +80% больше единицы пойдет наоборот в минус 1.3 это -30%

strike_immunity — удар
shock_immunity — электрошок
chemical_burn_immunity — химический ожог
telepatic_immunity — телепатия
radiation_immunity — радиация
wound_immunity — разрыв
explosion_immunity — взрыв
fire_wound_immunity — огнестрел

Уменьшить время спринта
cant_sprint_power_begin = 0.20 ;порог силы меньше которого актер не может бежать в спринте
cant_sprint_power_end = 0.30 ;порог силы больше которого актер сможет бежать в спринте

Система областей поражения. Для свиньи она расположена в секции [m_Boar_damage]. Изначально:
bip01_pelvis = 1, -1, 0.3
bip01_spine = 1, -1, 0.3
bip01_spine1 = 1, -1, 0.3
bip01_neck = 1, -1, 1.5
bip01_head = 2, -1, 0.3, 10
таз — 2 спины — шея — голова. параметр 10 возможно крит

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector