фан-сайт игры Mafia: the City of Lost Heaven
   radio             


Оглавление

Новости
Немного истории
Секреты и приколы
Видеогалерея
Моддинг Мафии
Расширенная версия Mafia
Пишем скрипты для Mafia
Как делать ADDin`ы
Доступ к DTA файлам
Чемпионат по игре
The Alive mod v.16
Пришелец-алхимик
Телохранители
Пушка броневика
Продавцы машин
Грязные гонки
Голем (памятник)
Супер-телохранители
Миссия в порту
Террорист-смертник
Ресторан Сальери
Сельская местность
Alive Mod Evolution 18.0
Секреты Аливе мода
Скачать Alive mod
Юморная страничка
Наш музей Мафии
Альфонсо Капоне
Бонни и Клайд
Джон Диллинджер
Машины той эпохи
Оружие той эпохи
Музыка из Мафии
Если хотите помочь
Благодарности
Кладовочка



03.04.2011

Создание телохранителя - разберём, как он устроен.


Я давно хотел создать своего телохранителя для Мафии. На сайте есть только скрипт. Но ведь нужно понять, как этот сценарий работает. Для этого я и пишу эту статью.

Для начала, создадим объект типа Human в BScriptView. Для этого лучше использовать BSV 3.0. Скрипт можно присвоить в любой версии. Почему для создания телохранителя, точнее - его тела, лучше использовать третью версию BSV? Дело в том, что в скриптовом языке Мафии нет команды "защищать игрока". И нет конкретного поведения "Защита игрока". Зато BSV 3.0 создаёт человека с типом male, который, по умолчанию, должен защищать Томми. Человек имеет нужные параметры поведения и агрессии. Созданный таким способом человек будет защищать Томми, но если в его скрипт вставить команду enemy_vidim 0, защитник будет реагировать только на игрока, а на него телохранитель, в соответсвии с поведением и уровнем агрессии, которые можно увидеть в BSV 5, например, реагировать не будет, то есть, защищать Томми он перестанет. Телохранитель будет защищать Томми после того, как будет использована команда enemy_vidim 1 - человек будет реагировать на всё. На самом деле, он не защищает Томми, а защищает себя, реагируя на врагов, получается. В игре, чтобы телохранитель защищал игрока, мы его используем, "говорим" с ним. Телохранитель должен быть платным. Например, $5000 за 1 использование. Но можно и отказаться от услуг телохранителя, таким же способом. Разговор с человеком распознаётся командой event use_ab. Этот эвент активируется после "использования" человека, то есть, разговора с ним. Но эвенты в Мафии при одном считывании скрипта активируются 1 раз. Чтобы получить возможность повторной активации эвентов в скрипте, нужно повторить, обновить скрипт. Это можно сделать командой return. Итак, мы можем нанять телохранителя, поговорив с ним. Чтобы его уволить, мы должны повторно поговорить с ним, использовав один и тот же эвент, для повторной активации которого, мы должны обновить скрипт. Для того, чтобы распознать, используется телохранитель или нет, мы будем использовать перменнные - особые резервирующиеся объекты данных, в Мафии они числовые и имеют свои номера. У каждой переменной есть своё значение, которое в Мафии мы присваиваем командой let flt[...]=... . В начале скрипта рекомендуется присвоить начальное значение переменной, которую мы будем использовать для распознавания занятости телохранителя, то есть, 0 - не используется, например. Но при обновлении скрипта значение меняется на 0, ведь мы в начале скрипта присвоим перменной начальное значение. Для того, чтобы скрипт обновить, но сохранить значение переменной, мы после присваивания начального значения переменной поставим { up, обозначив место, с которого нужно начинать выполнение скрипта при повторах. Теперь, после того, как мы поговорим с телохранителем, должна быть проверка занятости телохранителя, то есть, работает он на Томми, или нет. Для этого мы проверим значение зарезервированной переменнной. Если оно равно нулю, например, - телохранитель не используется - нужно его нанять, перейдя, например, на следующую строку, если он используется - на метку увольнения телохранителя. Но как же нам обновить скрипт, если мы прикажем после разговора (при условии, что телохранитель не нанят) следовать за Томми, а после команды enemy_action_follow выполнение скрипта не продолжается, и команда return не будет выполняться? Тогда мы в начале скрипта, но после команды { up, которая указывает на начало скрипта при повторах, напишем команду для проверки занятости телохранителя, и если он используется, то должна установиться реакция телохранителя на всё и быть команда следования за актёром Томми, а если телохранитель не используется, то скрипт можно просто обновить. Да, совсем забыл сказать самое важное - в области сценария, где содержится информация об увольнении или принятии телохранителя на работу, необходимо указать соответствующее значение занятости телохранителя путём присваивания нужного значения переменной.

Вроде, всё рассказал. Если вы что-то не поняли или обнаружили ошибку (или ошибки) в статье, хотя я старался и всё проверял, пишите на форум. Ниже я выкладываю скрипт телохранителя из Alive Continuing mod. В нём есть функция курения и приезда на вызов телохранителя, но чтобы они работали, нужны некоторые доработки. О них я рассказывать не буду потому, что они не так важны, если вам нужно включить эти функции в список всех функций телохранителя, разбирайтесь в моём сценарии, если что - пишите на форум, я помогу.

dim_flt 3
dim_act 8
dim_frm 9
findactor 0, "Tommy"
findactor 1, "Bodyguard1"
findactor 2, "cfmb"
findactor 3, "Bodyguard2"
findactor 4, "cfmbf"
findactor 5, "Bf"
findactor 6, "Cigareta"
findactor 7, "Bodyguard3"
findframe 0, "9u9jho"
findframe 1, "cfmbf"
findframe 2, "Bodyguard1f"
findframe 3, "Cigareta"
findframe 4, "Bodyguard1.neck"
findframe 5, "Bf"
findframe 6, "Cigaretaf"
findframe 7, "Bf1"
findframe 8, "Bf5"
human_setproperty 1, 9999, Energy
human_setproperty 1, 9999, Intelligence
human_setproperty 1, 150, Speed
human_addweapon 1, 10, 50, 9999
human_linktohand 1,3, right
let flt[1]=0
car_disable_uo 2,0,0
car_disable_uo 2,1,0
car_unbreakable 2,1
{ up
human_holster 1
enemy_vidim 0
if flt[1]=0,124,-1
human_unlinkfromhand 1,3, right
actor_setplacement 6, 6
enemy_vidim 1
enemy_action_follow 0, 5, nonext, crouch
label 191
goto 191
label 124
human_linktohand 1,3, right
label 11
ENEMY_PLAYANIM "KurakLoop.I3D"
wait 5500
emitparticle 4, 25
wait 3500
ENEMY_PLAYANIM "KurakPotahnuti.I3D"
emitparticle 3, 25
wait 8500
goto 11
}
event 1
setevent 3,2,-1
setevent 7,2,-1
human_unlinkfromhand 1,3, right
actor_setplacement 6, 6
enemy_move_to_car 2, 0
enemy_usecar 2, 0
enemy_car_moveto 2, 0
car_repair 2
enemy_usecar
car_disable_uo 2,0,0
car_disable_uo 2,1,0
enemy_move_to_frame 5, 1
actor_setplacement 1, 5
return
event use_ab, 159
enemy_stopanim
human_unlinkfromhand 1,3, right
actor_setplacement 6, 6
enemy_stop
enemy_actionsclear
if flt[1]=0,-1,120
commandblock 1
freeride_scoreget 0
if flt[0]<5000,105,-1
let flt[0]=flt[0]-5000
freeride_scoreset flt[0]
commandblock 0
let flt[1]=1
setevent 3,2,-1
setevent 7,2,-1
setevent 5,2,-1
car_disable_uo 2,0,1
car_disable_uo 2,1,1
policemanager_add "Bodyguard1"
enemy_vidim 1
return
label 5
goto 5
label 105
commandblock 0
console_addtext 3472
return
label 128
goto 128
label 120
setevent 3,1,-1
setevent 7,1,-1
policemanager_del "Bodyguard1"
enemy_vidim 0
getactorsdist 2, 4, 2
if flt[2]>10,-1,129
enemy_move_to_car 2,0
enemy_usecar 2,0
enemy_car_moveto 2,1
enemy_usecar
label 129
car_repair 2
car_disable_uo 2,0,0
car_disable_uo 2,1,0
enemy_move_to_frame 2,1
actor_setplacement 1, 2
setevent 3,1,-1
let flt[1]=0
setevent 5,1,-1
return
label 190
goto 190
event 2
human_holster 1
return
event 3
setevent 3,2,-1
human_unlinkfromhand 1,3, right
actor_setplacement 6, 6
enemy_move_to_car 2, 0
enemy_usecar 2, 0
enemy_car_moveto 2, 7
car_repair 2
enemy_usecar
car_disable_uo 2,0,0
car_disable_uo 2,1,0
enemy_move_to_frame 8, 1
actor_setplacement 1, 8
return


Надеюсь, вы поняли весь материал и разобрались с приведённым скриптом.



Автор Димыч



 

Последние новости

2.05.2017
50 оттенков Alive Bars Mod
29.04.2017
Gangsters Mod
12.09.2015
Functional Black Metal
8.04.2015
О форсированных машинах
1.04.2015
История одного сицилийца
11.02.2015
Мод для изучения ПДД на улицах Лост Хэвэна
10.02.2015
Alive Continuing Mod - новый мод из семейства Alive



Это интересно

200stran.ru

Все права защищены © www.webgamer.hhos.ru 2003- © MikeMouse 2003- ©

HotLog