Создание лекарей как в ЗП, которые будут выводить радиацию и лечить Вас!
Допустим мы хотим сделать сидоровичу ветку диалога на лечение, для этого открываем файл character_desc_escape, там находим Сидоровича(в стандартной игре он самый первый) и после строки <actor_dialog>escape_trader_done_blockpost_box</actor_dialog>, вписываем вот это: <actor_dialog>actor_vostanovlenie_zdorovya</actor_dialog> Тем самым мы добавили Сидоровичу ссылку на наш диалог, но самого диалога ещё нет, исправим это! Создаём файл под названием aksm_dialog, который должен находиться в папке gamedata\config\gameplay, далее открываем его и вписываем туда вот это: <?xml version="1.0" encoding="windows-1251" ?> <game_dialogs> <dialog id="actor_vostanovlenie_zdorovya"> <phrase_list> <phrase id="0"> <text>У меня проблемы со здоровьем, ты сможешь мне помочь?</text> <next>1</next> </phrase> <phrase id="1"> <text>Да в чём именно тебе помочь?</text> <next>2</next> <next>7</next> </phrase> <phrase id="2"> <text>Облучился я сильно...</text> <next>4</next> </phrase> <phrase id="7"> <text>Да со здоровьем конкретные проблемы, еле на ногах стою...</text> <next>5</next> </phrase> <phrase id="4"> <text>Ща всё мигом сделаю!так...ага...всё, готово! Теперь у тебя в организме ни одного радионуклиида!</text> <action>aksm_lekar.radiation_actor</action> <next>8</next> </phrase> <phrase id="8"> <text>Спасибо большое, выручил!</text> </phrase> <phrase id="5"> <text>Щас, я и "трупы" оживлял, не то что ты!....Всё, теперь у тебя здоровье в норме!</text> <action>aksm_lekar.heal_actor</action> <next>8</next> </phrase> </phrase_list> </dialog> </game_dialogs> Далее сохраняем файл! Теперь нужно этот файл вписать в игру для этого открываем system и в разделе dialogs после dialogs_aes, ставим запятую и пишем aksm_dialog, далее сохраняем файл!
Теперь нам необходимо создатьскрипт для даннго диалога, для этого заходим в папку gamedata\scripts и создаём там файл aksm_lekar в формате script! Далее открываем это файл и пишем туда вот такие строки:
function heal_actor() db.actor.health = 1; snd = sound_object([[characters_voice\volt\meet_hello_3]]) end
function radiation_actor() db.actor.radiation = -1; snd = sound_object([[characters_voice\volt\meet_hello_2]]) end После чего сохраняем файл! Ну вот собственно и всё, теперь после того как вы возьмёте у Сидора спецзадание, у него появится этот диалог!
Автор: XrAlexZ Сайт: http://aksm-team.tk/ P.S извеняйте если что-то непонятно, т.к это моя первая статья! Если действительно что-то не получается, то пишите мне в асю: 496499825
1. Создаем файл effect_blood.script и записываем туда следущее: Код lite_treshold = 0.05 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб экран окрасился в красный crit_treshold = 0.30 -- насколько должно уменьшиться здоровье с предыдущего обновления чтоб ГГ начало шатать drop_item_on_crit_prob = 0.20 -- вероятность того что ГГ выронит оружие effector_power_coeff = 0.7 prev_health = -1 chk_h_t = 0
function wounded_pp_update() if (chk_h_t or 0) < time_global() then chk_h_t = time_global()+1000 if prev_health > (db.actor.health + lite_treshold) then level.add_pp_effector("fire_hit.ppe", 2011, false) local effector_power = (prev_health - db.actor.health)*100*effector_power_coeff level.set_pp_effector_factor(2011, effector_power) if prev_health > db.actor.health + crit_treshold then level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "") local snd_obj = xr_sound.get_safe_sound_object([[actor\pain_3]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) if math.random() < drop_item_on_crit_prob then local active_item = db.actor:active_item() if active_item and active_item:section() ~= "bolt" and active_item:section()~= "wpn_knife" then db.actor:drop_item(active_item) end end end end prev_health = db.actor.health end end
2. Далее открываем bind_stalker.script: после строчек: Код function actor_binder:update(delta) object_binder.update(self, delta) local time = time_global() game_stats.update (delta, self.object)
Файлы:spawn_sections.ltx,devices.ltx,любой стандартный диалог. Для того, чтобы замерить координаты можно воспользоватся аддончиком Position Informer. (В теме инструментарий для мододелов)
1.Создаём файл ваше_название_скрипта.script в папке gamedata/scripts и пишем в него:
Код function ваше_название_функции() $$$НАЗВАНИЕ ФУНКЦИИ$$$ alife():create(section,position,levelvertex,gamevertex) $$$ЭТО ТОЧКА ГДЕ СПАВНИТСЯ ПРЕДМЕТ$$$ end
2.В папке config/scripts создаём файл m_taynik.ltx и пишем в него: Код [spawn] $$$ Это то, что появится в тайнике $$$ предмет предмет предмет предмет предмет
3. Открываем файл spawn_sections.ltx из папки gamedata/config/creatures и пишем:
Дата: Понедельник, 05.07.2010, 12:57 | Сообщение # 5
Разработчик мода
Группа: Администраторы
Сообщений: 449
Статус: Offline
Создание непися и профиля
И так Сперва мы создаём профиль непися. Например, в файле character_desc_escape.xml по адресу gamedata\config\gameplay\ Можно создать отдельный файл для наших неписей, это упрощает совмещение модов. В файле character_desc_escape.xml, в самом низу, перед тегом </xml> пишем профиль нового непися: <specific_character id="esc_dark_stalker_voron" no_random = "1"> ;важно при создании торговца, указать параметр no_random = "1"
<class>esc_dark_stalker_01</class> -- настраивает респавнер на класс персонажа для спавна разных моделей. ;т.к. мы спавним уникального непися, класс можно скопировать у любого другого непися или написать новый, уникальный класс. <community>dark_stalker</community> <money min="500000" max="500000" infinitive="1"></money> ;в поле денег, надо поставить бессконечные деньги - infinitive="1" ;иначе вы сможете продать неписю товаров исключительно на указанную сумму.
<rank>1000</rank> <reputation>-553</reputation>
<visual>actors\dark_stalker\dark_stalker_voron</visual> ;ссылка на файл-модель персонажа без окончания .ogf <snd_config>characters_voice\human_01\monolith\</snd_config> <crouch_type>-1</crouch_type> <panic_treshold>0</panic_treshold> <supplies> [spawn] \n wpn_gauss \n ammo_gauss \n #include "gameplay\character_items.xml" \n #include "gameplay\character_drugs.xml" \n #include "gameplay\character_food.xml" </supplies>
Профиль создан, пара стандартных диалогов, взятых у любого другого профиля, дописать не составит труда. Я ничего не менял в своём коде. Лезем в npc_profile.xml, который находится в той же папке. Где-нить внизу делаем запись: <character id="esc_dark_stalker_voron"> <class>esc_dark_stalker_01</class> -- настраивает респавнер на класс персонажа для спавна разных моделей. ;т.к. мы спавним уникального непися, класс можно скопировать у любого другого непися или написать новый, уникальный класс. <specific_character>esc_dark_stalker_voron</specific_character> -- ссылка на профиль нашего непися. </character> [править] Ввод в симуляцию
Непись создан. Теперь надо вводить его в симуляцию. Открываем файл gamedata\config\creatures\spawn_sections.ltx и прописываем в конце: [esc_dark_stalker_voron]:stalker_trader - дописать суффикс торговца... хотя у меня и без него всё работало =) $spawn = "respawn\esc_dark_stalker_voron" - опция спавна для Левел Едитора character_profile = esc_dark_stalker_voron - профиль непися, записанный в npc_profile.xml spec_rank = regular community = dark_stalker - группировка [править] Спавн торговца через all.spawn файл
Дальше, самое нудное - спавн. Спасибо Arhet'y за пример. Используя прогу acdc от bardak'a декомпилим all.spawn, создав батник разбора спавна (без active perl толку от проги бардака нуль - просто не запустится) и в понравившемся месте делаем запись с уникальным номером.
Дата: Понедельник, 05.07.2010, 13:01 | Сообщение # 6
Разработчик мода
Группа: Администраторы
Сообщений: 449
Статус: Offline
Продолжение
Я заспавнил на Кордоне: [8796] ; cse_abstract properties section_name = stalker_trader -- метка, что сталкер является торговцем name = dark_stalker_voron -- имя любое, вроде бы; где оно используется не знаю position = -215.67399597168,-20.403390884355,-151.03227233887 -- местоположение на игровой карте direction = 0.0445535257458687,-0.000645029998850077,0.0144814234226942
; cse_alife_object properties game_vertex_id = 61 -- геймвертекс, без него спавнер не будет знать, на какой именно карте и в какой её части спавнить объект distance = 3.5 level_vertex_id = 42599 -- левелвертекс, без него спавнер не будет знать, в именно какой части карты спавнить объект object_flags = 0xfffffffb custom_data = <<END [logic] cfg = scripts\esc_voron.ltx -- конфиг с логикой [smart_terrains] none = true -- смарт террейн; если создаёте статического торговца - лучше не выставлять смарт террейн ;если хотите бродягу - пишите по аналогии с другими неписями или создавайте свой смарт террейн, куда и определяйте непися
[spawn] wpn_gauss -- спавним в инвентаре всё, что хотим, в продажу оно не пойдёт END story_id = 9958 - уникальный стори_ид для меток на карте
; cse_visual properties visual_name = actors\dark_stalker\dark_stalker_voron -- внешний вид, указать путь к .ogf модели, без окончания формата файла!
Дата: Понедельник, 05.07.2010, 13:02 | Сообщение # 7
Разработчик мода
Группа: Администраторы
Сообщений: 449
Статус: Offline
Продолжение_2
Спавн файл еще рано собирать! [править] Логика торговца
Далее, создаём файл конфиг торговца, который указали в спавне - gamedata\config\scripts\esc_voron.ltx и пишем в нём: [logic] active = walker trade = misc\trade_voron.ltx -- файл торговли, создаётся по аналогии с существующими trader_flags = 0 - флаг трейдера inv_max_weight = 10000 -- вес инвентаря торговца on_death = death
[walker] path_walk = esc_sin_voron_walk -- привязка вейпоинта, чтобы трейдер стоял на месте или двигался по определённому курсу path_look = esc_sin_voron_look -- куда будет смотреть непись meet = meet -- параметры реакции непися на встречу с актором
[meet] use = true use_wpn = true -- перезаряжает оружие meet_talk_enabled = true
Теперь лезем за скриптом от бардака и снимаем координаты местоположения нашего непися. У кого нету скрипта, копируем в gamedata/scripts/ui_main_menu.script этот скрипт: function main_menu:OnButton_credits_clicked() local text local vid local gvid local a = vector() local text a = db.actor:position() vid = db.actor:level_vertex_id() gvid = db.actor:game_vertex_id() text = "Позиция:\\nX= "..a.x.."\\nY= "..a.y.."\\nZ= "..a.z.."\\nlevel_vertex= "..vid.."\\ngame_vertex_id= "..gvid news_manager.send_tip(db.actor, text, nil, nil, 30000) end
Заходим в игру, ищем нужное нам место (ногами), жмём из меню кнопку CREDITS и мы услышим звуковой сигнал, после чего выходим в игру из меню, и в строке сообщений высветиться вся инфа. Всё - F12 или на бумажку списываем полученные координаты. [править] Создаём вейпоинты и лукпоинты
И так, мы сняли координаты мест, где хотим видеть торговца и где мы хотим, чтобы он ходил - теперь в разобранном all.spawn ищите файл way_*левел*.ltx и туда пишем данные. Я приведу пример свой, опять таки. В файле way_l01_escape.ltx пишем: [esc_sin_voron_look] -- имя, которые мы записали в ''gamedata\config\scripts\esc_voron.ltx'' points = p0,p1 p0:name = wp00 p0:flags = 0x1 p0:position = -205.306793212891,-20.4855155944824,-150.415893554688 p0:game_vertex_id = 46 p0:level_vertex_id = 54218
[esc_sin_voron_walk] -- имя, которые мы записали в ''gamedata\config\scripts\esc_voron.ltx'' points = p0 p0:name = wp00 p0:flags = 0x1 p0:position = -215.67399597168,-20.403390884355,-151.03227233887 p0:game_vertex_id = 47 p0:level_vertex_id = 37503
Если нужно создать несколько вейпоинтов - смотрите по аналогии с уже существующими.
После всего этого собираем all.spawn батником (что писать в батниках для сбора и разбора спавна - в файле help.txt в папке с программой), закидываем новый файл спавна в gamedata/spawn и стартуем новую игру.
<?xml version="1.0" encoding="windows-1251" ?> <game_dialogs> <dialog id="actor_vostanovlenie_zdorovya"> <phrase_list> <phrase id="0"> <text>У меня проблемы со здоровьем, ты сможешь мне помочь?</text> <next>1</next> </phrase> <phrase id="1"> <text>Да в чём именно тебе помочь?</text> <next>2</next> <next>7</next> </phrase> <phrase id="2"> <text>Облучился я сильно...</text> <next>4</next> </phrase> <phrase id="7"> <text>Да со здоровьем конкретные проблемы, еле на ногах стою...</text> <next>5</next> </phrase> <phrase id="4"> <text>Ща всё мигом сделаю!так...ага...всё, готово! Теперь у тебя в организме ни одного радионуклиида!</text> <action>aksm_lekar.radiation_actor</action> <next>8</next> </phrase> <phrase id="8"> <text>Спасибо большое, выручил!</text> </phrase> <phrase id="5"> <text>Щас, я и "трупы" оживлял, не то что ты!....Всё, теперь у тебя здоровье в норме!</text> <action>aksm_lekar.heal_actor</action> <next>8</next> </phrase> </phrase_list> </dialog> </game_dialogs>