Репутация: 3
Регистрация: 05.01.2010
Город: МОСКВА
curtis спрашивал я ответил (в лс не получилось)
короче качаешь распаковщик подойдёт к примеру universal extraktor (поищи на сайте в утилитах). в меню экстратора выбираешь игру указываешь путь к игре, жди пока распакуется. Потом заходишь в директорию игру. Там будет папка Uegamedata (переименуй на gamedata просто удали UE спереди _ ). Там в папке config---weapons--- (например w_f1.ltx открой блокнотом)
up_throw_factor = 1.2 ========================================================= редактируй D ИЛИ ОРУЖИЕ ========================================================= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [wpn_ak74]identity_immunities GroupControlSection = spawn_group discovery_dependency = $spawn = weaponsak-74 ; name and section in level editor $npc = on $prefetch = 8 scheduled = off ;[] option for ALife Simulator cform = skeleton class = WP_AK74 ; class of the weapon that corresponding to CPP class min_radius = 30 ; [] for AI max_radius = 100 ; [] for AI description = enc_weapons1_wpn-ak74
ef_main_weapon_type = 2 ef_weapon_type = 6
;----------------------------------------------------------------------------------- holder_range_modifier = 1.0 ; во сколько раз увеличивается eye_range holder_fov_modifier = 0.7 ; во сколько раз увеличивается eye_fov ;-----------------------------------------------------------------------------------
cost = 2000-ЦЕНА ; the price of the item weapon_class = assault_rifle ; the type of the box that will be used in buy-menu in multiplayer mode
ammo_class = ammo_5.45x39_fmj, ammo_5.45x39_ap ; name of the ltx-section of used ammo grenade_class = ammo_vog-25, ammo_vog-25p ; name of the ltx-section of used grenades launch_speed = 0
hand_dependence = 1 ; how many hands (1 or 2) we used to hold weapon in single_handed = 0 slot = 2 ; number of slot in inventory we put weapon in (1 - knife slot, 2 - pistol, 3 - rifle, 4 - grenade, 5 - apparatus) animation_slot = 2 ; type of the animation that will be used
inv_name = wpn-ak74 ; name in inventory inv_name_short = wpn-ak74 inv_weight = 3.3 -ВЕС ; weight in inventory
inv_grid_width = 5 ; position and size of the icon that will be used to display weapon in the inventory menu inv_grid_height = 2 ; all icons are on the texture ui_icon_equipment.dds, inv_grid_x = 5 ; position and size are in terms of 64x64 squares inv_grid_y = 5
;----------------------------------------------------------------------------------- ; base dispersion ; ; === Setting of the weapon shooting dispersal parameter === ;Dispersal consists from to basic constituents – dispersal of the weapon (relatively small). In fact, this is a dispersal of a weapon griped in a vice; - dispersal of the weapon behavior in the hands of the host (if he running, or walking or shoots in single shots or in a burst) is another, more significant factor of dispersal. ;Dispersal of the weapon depends only from basic dispersal, basket case factor ant time of the ammo. ;Dispersal of the way the host shooting (standing, running and etc.) ;Two types of shooting modes can be defined - usual mode and zoomed mode. ;Usual mode - depends from the position of the player while shooting (standing, sitting, walking and running) ;Zoomed mode – depends from the dispersal of the weapon and do NOT depends from the position of the shooter. In that mode, dispersal of the weapon « switches to;» sight swinging (created be effector). ;Weapon recoil in the game also created by recoil effector. ; ;----------------------------------------------------------------------------------- ;params of weapon recoil fire_dispersion_base = 0.2 ;угол (в градусах) базовой дисперсии оружия (оружия зажатого в тисках) control_inertion_factor = 1.25f
;отдача cam_relax_speed =5;3.5; 0.15 ;скорость возврата в исходное положение cam_dispersion = 0.15 ;увеличения угла (в градусах) с каждым выстрелом cam_dispersion_inc = 0.3 ;увеличениe cam_dispersion с каждым выстрелом cam_dispertion_frac = 0.9 ;ствол будет подыматься на cam_dispersioncam_dispertion_frac +- cam_dispersion(1-cam_dispertion_frac) cam_max_angle = 10.0 ;максимальный угол отдачи cam_max_angle_horz = 20.0 ;(degree) maximum shot horizontal degree cam_step_angle_horz = 1.1;1 ;(degree) size of step camera moved in horizontal position while shooting
fire_dispersion_condition_factor = 5 ;увеличение дисперсии в процентах при максимальном износе misfire_probability = 0.003 ;вероятность осечки при максимальном износе misfire_condition_k = 0.05 condition_shot_dec = 0.0001 ;увеличение износа при каждом выстреле ;-----------------------------------------------------------------------------------
fire_point = 0,0.216,0.638 ; position (3rd person view) for particles of fire fire_point2 = 0,0.216,0.730 ; position (3rd person view) for particles of fire (when shooting with secondary fire)
shell_point = 0,0.216,0.174 ; position (3rd person view) for shell to throw out shell_particles = weaponsgeneric_shells ; name of the particles for shells
; ttc hit_power = 0.35, 0.39, 0.42, 0.45--СИЛА УРОН (ЧЕМ БОЛЬШЕ ТЕМ СИЛЬНЕЕ) РЕДАКТИРУЙ ЭТО А НЕ НИЖНЕЕ ; size of damage by bullet hit_impulse = 140-СИЛА УДАРА ; size of physic impulse by bullet hit_type = fire_wound ; [] type of the wound fire_distance = 1000-РАССТОЯНИЕ ; maximum fire distance that bullet can fly bullet_speed = 900-СКОРОСТЬ ПУЛИ ; starting bullet speed rpm = 600 ; max round per minute
use_aim_bullet = true ;Поддерживается ли первая суппер пуля time_to_aim = 1.0
;params when silencer is attached ;similar to corresponding params without prefix silencer_
hud = wpn_ak74_hud ; name of the section of the hud
position = -0.026,-0.172,0 ; position (offset) and orientation of the weapon in the hands of character orientation = 0,0,0 ; (3rd person view)
;--STRAP PARAMETERS----------------------------------------------------------------- strap_position = -0.16,-0.40,0.15 ; position (offset) and orientation of the weapon when it is strapped strap_orientation = -10,-5,10 ; (3rd person view in degrees) strap_bone0 = bip01_spine2 strap_bone1 = bip01_spine1
visual = weaponsak74wpn_ak74 ; name of the model for 3rd person view
light_color = 0.6,0.5,0.3 ; params for light during the fire light_range = 5 ; radius light_var_color = 0.05 light_var_range = 0.5 light_time = 0.2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;HUD offset in zoom mode (to all) ;(use CONSOLE hud_adjust_mode 0,1,2, then keys WSADQE and P to show current value in console)
Есть способ воскресить машину без редактирования all.spawn. Первое. Для начала нам нужно файл vehicles.ltx (находится в creatures) внести в файл system.ltx. Вот так:
Code
#include "creatures\vehicles.ltx"
То есть добавить его в число прочих файлов (по крайней мере у меня он не был туда внесен), откуда игра будет брать необходимую информацию.
Второе. Добавить в файл vehicles.ltx полный конфиг машины. Например уазика. Вот готовый пример:
Характеристики машин можно менять в файлах лежащих в models\vehicles.
Третье. Создать скриптовую функцию по спавну машины. Мой пример:
Code
function buy_uaz (position, total) alife():create("vehicle_uaz",vector():set(-245.01445007324,-18.792783737183,-107.14138031006),12480,8) end
Название функции - buy_uaz - может быть любое. Саму функцию надо положить в какой-нибудь скриптовый файл в папке scripts. У меня она лежит в escape_dialog.script.
Для того, чтобы можно было заводить машину не залезая в консоль открываем файл ui_keybinding (находится в config\ui) и вписываем туда в секцию
Недавно решил поэкспериментировать с анимками НПС, и теперь выкладываю результаты моих опытов над "людьми". Разумеется, опытные модмейкеры все это давно знают – поэтому материал предназначен для новичков, которые еще не освоили как прописывать неписям разные прикольные анимки, а заодно и озвучку через логику. Все анимки взяты из файла state_lib. script. Анимки, которые имеются в движке, но не вписаны в указанный файл, не рассматриваются. Это тема для отдельной статьи. Озвучка взята из файла sound_script (папка misc). Конечно, хотелось использовать и звуковые темы не вписанные в этот файл, но имеющиеся в папке sounds - но с этим еще надо разобраться. [править] Часть первая.
Вся изложенная ниже схема является единым целым и ее можно ставить в ltx –ный файл логики любому вашему НПС целиком. Она будет зациклена и повторяться по кругу если кое-где поставить другие варианты перехода от одной ремарки к другой.
Code
[logic] active = remark@base danger = danger_condition meet = meet
В базовой ремарке мой чувак использует анимку Волка - hello_wpn – одной рукой машет ГГ, другой держит ствол. Это начальная анимка, которая будет отрабатываться НПС, пока ГГ не подойдет на дистанцию встречи. В секции meet задается схема реагирования НПС при подходе к нему эктора. В строчке meet_state – реакция при подходе безоружного ГГ. На расстоянии 10 метров НПС отдает честь, затем встает в позицию «смирно» - руки по швам. Это анимка salut. Ближе 5 метров – тоже самое, дальше переходит в позицию «вольно». Это анимка salut_free. В секции meet можно задавать и то, что НПС будет базарить при виде эктора. В моей схеме: «чего стоишь сталкер, подходи, будем разговаривать» (esc_bridge_soldiers) отдавая салют, и на второй дистанции - «разбежались сосунки и т.д». (esc_lager_killer) В строчке meet_state_wpn - реакция НПС если эктор с пушкой в руках. У меня в этой схеме он встает в позу ward – руки за спиной, голова наклонена вниз. Словом поза тюремщика или надсмотрщика (ward примерно так и переводится). В этой позе НПС на дистанции ближе 10 метров орет «повторяю для тупых - отошел к дальней стене камеры…» (cit_base_guard_talk_to_actor2), а если ГГ подойдет еще ближе - «ты щас сдохнешь падла, понял…» (gar_bandits_seryi) и еще несколько рандомных фраз, которые заданы звуковой темой gar_bandits_seryi. К начальной анимке также можно добавлять любую звуковую тему через строчку snd. В данной ремарке ее нет.
Переходим к следующей схеме. Так как все эти схему у меня завязаны вместе, то переход ко второй ремарке произойдет, когда ГГ подойдет к НПС на дистанцию ближе двух метров. Прописано этой в строчке on_actor_dist_le = 2| remark@sit
Итак, что делает НПС в этой ремарке. Сидит на заднице - sit_ass, орет - mil_guard_to_max – «макс, у нас тут проблема на хуторе нарисовалась, собирай народ…» В секции meet прописано отсутствие встречи, так как задано no_meet . Так что разговаривать с ГГ непись не будет. После отработки заданной звуковой темы идет переход к к ремарке remark@ raciya. Сделано это через строчку on_signal = sound_end| remark@raciya. Переведу: на сигнал «конец звуковой темы» переходим к схеме remark@raciya.
Анимка choose – ГГ что-то высматривает: оглядывается по сторонам, прикладывает руку ко лбу, так же как это делам мы, когда смотрим вдаль против солнца. Звуковая тема – что то там из реплик на арене. При встрече – смотрит в бинокль (если он у него есть) и издевательски базарит - «скоро ты будешь работать обедом для мутантов» (в этой теме реплик несколько). На 5 метрах достает рацию (если есть) - анимка guard_rac и базарит реплики из темы предателя Павлика на милитари «все чисто можете подходить». При угрозе стволом - анимка hide_rac («сидит с рацией»), базар - «это засада, уходим» Через 120 секунд - переход к следующей ремарке: on_timer = 120000| remark@work
Анимка caution – ГГ слегка согнувшись, что-то внимательно высматривает на земле, руки прикладывает к коленям. А затем радостно сообщает - «ребята у нас появилась работа». Видимо, что-то высмотрел интересное. Через 30 секунд - снова переход. [remark@work2] anim = search no_move = true snd = mil_collect_phrase3 target = actor on_timer = 30000| remark@zombied meet = no_meet danger = danger_condition
Анимка search - поиск, только более развернутый. ГГ встает на колени или на корточки и начинает что-то искать. Что он при этом произносит – узнаете, когда послушаете. Через 30 секунд переход к схеме зомби.
Анимка trans_zombied - падает на колени, головой двигает вверх-вниз. trans_1 - также стоит на коленях, только головой вращает по кругу. trans_0 – то же самое, только более энергичней. Или наоборот - извиняюсь если перепутал.
wounded_heavy_3 – это анимка тяжелораненого. (есть еще и другие анимки раненого). Чувак скрючившись, грохнется на землю. Но на ней не остается, а тут же встает и бежит в сторону в денжере. Что и понятно – здоровье то у него норм. Остальные неписи видевшие как чувак упал, так же срываются в денжере с места. Ищут того, кто «стрелял». Не удивляйтесь, но так они запрограммированы.
sit_knee - чувак сидит на заднице, опираясь на руку. eat_bread, eat_kolbasa, eat_energy, eat_vodka - тут я думаю ничего объяснять не надо. Чувак хавает и пьет. Пригубив водки, произносит – «пусть земля тебе будет пухом» При отходе эктора на дистанцию больше 15 метров - переход к схеме динамит. Звуковая тема wait – это пауза, в которой непись ничего не говорит.
Анимка refuse - непись пожимает плечами и произносит mil_collect_phrase5 - «не срать». probe_2 - судя по сопровождающим ее звукам (независимо от прописанной мной звуковой темы) – это анимка Круглова (его манипуляции с прибором, а может Сахарова - впрочем, это не важно). Если у вашего НПС будет в руках оружие - то смотреться она будет куда интереснее, так как выглядит будто непись проверяет свой ствол, совершая массу интересных движений. Фраза mil_collect_phrase6 - «опа – с нами новое мясо».
backoff - обычная анимка. Непись начинает махать стволом в разные стороны – типа убери ствол, меченый. Фраза - gar_dm_bandit_demand - «бабки артефакты гони», «ты че козел не врубаешься», «гони бабло или бошку отстрелим». Так как тема рандомная (с окончанием rnd в имени темы в файле sound_script – то и фраз несколько)
mode_shlem - анимка то ли Круглова, то ли Сахарова. Непись будет что то вертеть в руках. probe_1 – тоже самое что и probe_2 , только здесь он плечами вроде бы не дергает. suicide - самоубийство. Советую посмотреть – тем более с озвучкой mil_crazy. probe - укороченный вариант probe_2 и probe_1
probe_3 - интересная анимка (похоже что кругловская)- чувак срывается с места в панике, затем сгибается как будто от боли, хватается за голову. agr_doctor_1 - базар доктора в тайнике стрелка.
Когда эктор отойдет от НПС дальше чем 30 метров, ГГ выдается инфопоршень passage_to_story_end. После его получения - on_info - произойдет переход к базовой ремарке. Сам инфопоршень необходимо регистрировать в соответствующих файлах. Так как мой НПС находится на кордоне, то поршень я сунул в файл info_l01escape. Сообственно инфопоршень в строчке on_actor_dist_ge писать не обязательно(я его использовал только для примера) - можно просто поставить имя следующей ремарки - и в нужный момент произойдет переход. Но инфопоршень может понадобиться для других случаев.
Как я уже говорил в начале, схему можно сделать полностью зацикленной. Нужно лишь в тех блоках, где идет переход к следующей схеме через on_signal поставить таймер или дистанцию. Почему так - не знаю. Но у меня по второму кругу схема стопорилась на тех блоках, где шел переход через on_signal = sound_end|. По таймеру же все прекрасно крутится. Схема из второй части - как раз зацикленная.
P.S. : Кажется понял почему у меня стопорилась схема при использовании перехода on_signal = sound_end|. Дело в том, что если в имени звука, по завершении которого схема должна перейти к новому блоку стоит флажок seq, то он вроде как отыграется только один раз (если в этой теме нет дополнительных реплик). Следовательно по второму кругу он просто не будет срабатывать, а значит и схема застопорится. Так что для этого нужно ставить звук в имени которого в файле sound_script есть флажок rnd. Тема mil_guard_to_max как раз с флажком seq (и реплика только одна - без вариантов). Потому здесь (в схеме sit) она и будет стопориться на втором круге, если не заменить тему на другую. Но это еще надо проверить. Закоментированные строчки - пред которыми стоит ; - может смело выкидывать - это остатки проб разных вариантов. [править] Часть вторая.
Еще одна схема. На этот раз в нее добавлены еще постэффекты.
Code
[logic] active = remark@base danger = danger_condition meet = meet
punch– анимка удара рукой (или прикладом). Так как я не специалист по боксу, то не скажу точно как именно называется этот удар с правой в челюсть. Если поставите ее в meet_state_wpn на дистанции 2 метра - ГГ получит реальный удар в морду прикладом ствола. Так как я эксперементировал на своем торговце - то он (будучи безоружным) бил чисто кулаком. А если вместо запуска анимации камеры %=run_cam_effector(fatigue)% поставите запуск функции %=killactor%, то НПС кинется вас убивать.
hide_s_left и hide_s_right - непись присядет с разворотом ствола вправо или влево. backoff2 - более веселая анимка backoff. НПС покажет ГГ что-то вроде фака, перед тем как помахать стволом и при этом скажет что-то весьма нелицеприятное. %=run_cam_effector(fatigue)% - это вызов анимации камеры fatigue из папки anims. Земля уйдет из под ног ГГ. Ненадолго. Сработает сразу же после окончания фразы cit_jail_guard_sneer. А ровно через минуту от начала работы схемы – запуск постпроцесса %=run_postprocess(deadcity_wake:1777:false)% и переход к следующей схеме.
deadcity_wake – это постпроцесс, который должен был использоваться в Мертвом городе, если бы разрабы МГ все таки доделали. Если не видели - обязательно посмотрите.Сначала черный экран, затем прояснение с раздвоением картинки и красным фоном.
В следующей схеме идет продолжение постпроцесса – первые 15 секунд. Потом его остановка: on_timer = 15000| %=stop_postprocess(1777)%.
Начальная анимация - doctor_wakeup – доктор в мертвом городе. НПС склонится вниз – как будто над чьим то телом (по задумке – над меченым) и начнет базарить. Но совсем не то, что стоит у меня в строчке snd. Видимо, данная анимка завязана со звуком, и иначе не идет. Фразу прописанную мною - cit_doctor_start_dlg – нпс произнесет потом. Обе озвучки длинные – та, что идет с анимкой – монолог доктора в подземелье агропрома в тайнике Стрелка – типа, «что ж ты меченый в растяжку полез, сам же придумал эту хрень…» Моя озвучка - cit_doctor_start_dlg – неиспользованный монолог доктора в мертвом городе. Через 180 секунд – завершение схемы и переход к следующей.
Анимка – prisoner – пленный. Помните Шустрого у бандитов? Вот это она и есть. Фраза - agr_krot_fear – не смотря на то, что в названии звуковой темы имя Крота, орет ее Шустрый: типа братцы я тут, спасите.
help_me - машет рукой сидя на одном колене и орет, что у него "нет денег" - gar_dm_newbie_no_money . hands_up - руки кверху и орет "не убивай дяденька" (или типа того) - agr_dont_shoot.
Через 60 секунд возврат к базовой ремарке. [править] Часть третья.
В файле state_lib – большая библиотека анимок. Я успел попробовать только часть. У одного бармена их 12. Правда, из пяти опробованных мной сработала только одна bar_sleep - НПС положит голову на руки сложенные перед лицом и будет спать стоя.
Анимки - barman_talk_freу, barman_shock, barman_wait_danger, barman_walk_danger - никакого эффекта не дали. Видимо, они работают только на бармене. Остальные пробуйте сами.
Анимка psy_pain – пораженный пси-излучением. Чувак сядет на колени, начнет трясти головой и бить себе руками по голове.
psycho_pain – вроде бы тоже самое, только чувак обхватывает голову руками и так сидит.
Анимки psy_shoot, psy_armed, psycho_pain, psycho_shoot– пока остаются на стадии исследования. Так как с ними либо глючит, либо вылетает.
Автор: Erlik
Сообщение отредактировал vavilov8 - Понедельник, 01.11.2010, 17:36:05
В.Распишите по подробнее как создавать новые модели сталкеров,переносить скажем из ЧН, задавать места появления и привязывать к ним отдельные текстуры
О.
создавать саму модель (ее меш) - в 3д-редакторе (Maya, 3dsMax, Milkshape 3D). После создания модели ее надо привязать к "родному" сталкерскому скелету (если привязывать модель к своему скелету, то тогда придется переделывать все анимации), а в Макс его импортировать проблематично. В Милкшейпе качественно сделать мягкую привязку достаточно сложно (читать: практически невозможно), поэтому более всего для создания модели подходит редактор, которым пользовались сами разрабы, т.е. Maya. После привязки к скелету производим экспорт в .object (формат, читаемый СДК), настраиваем в Actor Editor'e костей (лучше достать нужную информацию из стандартной модели при помощи конвертера bardak'а и подгрузить ее в СДК с последующим инвертированием некоторых значений ограничителей), указываем используемые текстуры и пути к omf-файлам (библиотеки анимаций) и производим экспорт в OGF. Все, модель готова. Можем делать с ней что хотим.
Относительно переноса моделей из ЧН\ЗП - тут есть два пути. Дело в том, что скелеты "обычных" НПС в ТЧ и ЧН различаются, причем ровно на две кости. Соответственно анимации ТЧ не подходят к ЧНовцам, и наоборот. Соответствено, очевидный первый путь - импортировать модели из ТЧ и ЧН в Майю с последующим удалением меша из ТЧ и привязкой на его скелет меша из ЧН. Но скелеты ТЧ и ЧН практически идентичны, поэтому дело обстоит намного проще: достаточно удалить из скелета ЧН две лишних кости и не мучиться с привязкой. Это делается при помощи операции Unparent. Не менее очевидный второй путь - перенести до кучи еще и анимации из ЧН, и далее тупо прогонять ЧНовцев через СДК без использования каких-либо 3д-редакторов, подключая при этом анимации из ЧН. Производя перенос таким способом, придется один раз пошаманить с СДК чтобы получить этот самый OMF, зато потом модели можно будет перегонять, что называется, в промышленных масштабах. Только при использовании данного способа в один прекрасный момент могут вылезти подводные камни, связанные с отсутствием в omf'ах ЧН анимаций, которые есть в omf'ах ТЧ. Но лично мне вылеты с жалобами на отсутствие этих анимаций не встречались. Хотя если и встретятся - теоретически, и анимацию из ТЧ можно перенести на ЧН-скелет.
Файлы character_desc_*.xml можно сравнить со стволом дерева диалогов. В них перечисляется названия прикрепляемых веток диалогов
Например вот список веток диалога с Сидоровичем взятый из файла character_desc_escape.xml <start_dialog>escape_trader_start_dialog</start_dialog> <actor_dialog>escape_trader_talk_info</actor_dialog> <actor_dialog>escape_trader_jobs</actor_dialog> <actor_dialog>tm_trader_dialog</actor_dialog> <actor_dialog>tm_trader_reward</actor_dialog> <actor_dialog>escape_trader_done_blockpost_box</actor_dialog>
В свою очередь каждая ветка диалога также может ветвится.
2) Ветвление диалогов прописывается уже в других файлах.
Например, ветвление диалога с Сидоровичем содержится в файле gamedata/config/gameplay/dialogs_escape.xml Возьмем оттуда, например, ветвление escape_trader_jobs.
Ветвление имеет довольно большие масштабы, поэтому приведу только часть: <dialog id="escape_trader_talk_info"> <precondition>escape_dialog.trader_has_talk_info_wr</precondition> <has_info>tutorial_end</has_info> <phrase_list> <phrase id="1"> <text>escape_trader_talk_info_1</text> <next>100</next> <next>99</next> <next>9995</next> </phrase> ... <phrase id="0"> <text>escape_trader_talk_info_0</text> <next>1</next> </phrase> </phrase_list> </dialog>
Здесь <precondition>…</precondition> - это проверка выполнения условия. Ветка появится в диалоге, только если условие выполняется. Конкретно <precondition>escape_dialog.trader_has_talk_info_wr</precondition> из ветки escape_trader_talk_info - это обращение к функции trader_has_talk_info_wr, находящейся в файле скрипте gamedata/scripts/escape_dialog.script
Функция выглядит так: function trader_has_talk_info_wr( trader, actor ) return true end
То есть, судя по его структуре, <precondition>escape_dialog.trader_has_talk_info_wr</precondition> выполняется всегда, т.к. функция всегда возвращает истину и <dialog id="escape_trader_talk_info"> пропускается в списк реплик.
Но для конкретной ветки может быть несколько precondition и других условий.
Далее, <has_info>tutorial_end</has_info> - это еще одна проверка, на этот раз на наличие у игрока так называемых infoportions, выдаваемы в процессе ключевых диалогов. В данном случае это проверка на то, закончена ли определенная стадия туториала, или нет. Т.е. ветка допустится в список реплик если стадия туториала закончена.
Более детально мы это разберем в конце статьи.
А далее идут конкретные фразы, содержащие ссылки на вытекающие фразы, например: <phrase id="0"> <text>escape_trader_talk_info_0</text> <next>1</next> </phrase>
Это основа ветки escape_trader_talk_info.
Важно! В любой основной ветке любого диалога фраза <phrase id="0"> будет основой, из которой далее будет все вытекать. Она должна обязательно присутствовать и в вашем диалоге.
<next>1</next> - это ссылка на вытекающую фразу <phrase id="1">: <phrase id="1"> <text>escape_trader_talk_info_1</text> <next>100</next> <next>99</next> <next>9995</next> </phrase>
В свою очередь <next>100</next>, <next>99</next>, <next>9995</next> это ссылки на фразы веточки растущие из фразы <phrase id="1">.
3) Текст каждой фразы содержится в третьем файле. Для диалога с Сидоровичем тексты лежат в файле gamedata/config/text/rus/stable_dialogs_escape.xml <string id="escape_trader_talk_info_0"> <text>Есть несколько вопросов.</text> </string> <string id="escape_trader_talk_info_1"> <text>Спрашивай, только я ведь всего не знаю. Сам понимаешь, сижу тут целыми днями, а жизнь - она вся там, снаружи, в Зоне. Могу рассказать о Зоне вообще, а немного могу о ближайших окрестностях, где сам ходил.</text> </string> ...
Эти строки содержат тексты для фраз <phrase id="0"> и <phrase id="1">
Итого диалоги разложены по трем, а то и более файлам.
Да кстати, путь по веткам может быть зацикленным, если того требует диалог. Например так: <phrase id="0"> <text>...</text> <next>1</next> <next>2</next> </phrase> <phrase id="1"> <text>...</text> <next>11</next> <next>12</next> </phrase> <phrase id="11"> <text>...</text> <next>1</next> - Это возврат к фразе №1 (зацикливание) <next>111</next> </phrase> Практика
Добавим в диалог с Сидоровичем ветку своего собственного изготовления.Например такую: Меченый: Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые? Сидорович: Чего?! Меченый: Ты их совсем, совсем не кормишь? Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.
Для этого:
1) В файле gamedata/config/gameplay/character_desc_escape.xml в конце списка веток для trader припишем свою ветку с произвольным названием. Это будет, например, <actor_dialog>escape_trader_letat_gusi</actor_dialog>.
Т.е у нас получится так: <specific_character id="escape_trader" no_random = "1"> ... <start_dialog>escape_trader_start_dialog</start_dialog> <actor_dialog>escape_trader_talk_info</actor_dialog> <actor_dialog>escape_trader_jobs</actor_dialog> <actor_dialog>tm_trader_dialog</actor_dialog> <actor_dialog>tm_trader_reward</actor_dialog> <actor_dialog>escape_trader_done_blockpost_box</actor_dialog> <actor_dialog>escape_trader_letat_gusi</actor_dialog> </specific_character> …
Записываем изменения, с этим файлом пока всё.
2) Теперь берем файл gamedata/config/gameplay/dialogs_escape.xml
Диалогу: Меченый: Сидрыч а почему это у тебя зеленые человечки, что по столу бегают, такие худые? Сидорович: Чего?!! Меченый: Ты их совсем, совсем не кормишь? Сидорович: В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.
Условия наличия ветки в диалоге можно взять из ветки <dialog id="escape_trader_talk_info">.
Т.е берем условия <precondition>escape_dialog.trader_has_talk_info_wr</precondition> и <has_info>tutorial_end</has_info>. Можно было, конечно, прописать в скрипте еще одно условие для ветки, чтобы она появилась только один раз, а потом больше не возникала. Но об этом как-нибудь позже.
В итоге у нас получилась такая структура: <dialog id="escape_trader_letat_gusi"> <precondition>escape_dialog.trader_has_talk_info_wr</precondition> <has_info>tutorial_end</has_info> <phrase_list> <phrase id="0"> <text>escape_trader_letat_gusi_0</text> <next>1</next> </phrase> <phrase id="1"> <text>escape_trader_letat_gusi_1</text> <next>2</next> </phrase> <phrase id="2"> <text> escape_trader_letat_gusi_2</text> <next>3</next> </phrase> <phrase id="3"> <text> escape_trader_letat_gusi_3</text> </phrase> </phrase_list> </dialog>
Её нужно вставить в любом месте между dialog id'ами других веток в файле dialogs_escape.xml. Главное - не промахнутся и засунуть именно между, а не внутрь одного из dialog id.
После сохранения внесенных изменений с файлом dialogs_escape.xml все.
3) Теперь вбиваем сами текстовички в файле gamedata/config/text/rus/stable_dialogs_escape.xml
Т.е нам надо в файле stable_dialogs_escape.xml вставить такую конструкцию: <string id="escape_trader_letat_gusi_0"> <text>Сидрыч, а чего это у тебя зеленые человечки, что по столу бегают, такие худые?</text> </string> <string id="escape_trader_letat_gusi_1"> <text>Чего?!</text> </string> <string id="escape_trader_letat_gusi_2"> <text>Ты их совсем, совсем не кормишь?</text> </string> <string id="escape_trader_letat_gusi_3"> <text>В следующий раз, как пойдешь в зону, бери-ка вместо водяры побольше антирада. А то мало что таким перегаром дышишь, уже до зеленых человечков долечился... Шутник.</text> </string>
В любом месте между уже существующими string id. После сохранения изменений, у нас все готово. Можно загружать игру и смотреть что получилось. Дополнительно
Внимание! После патча 1.002 данный урок перестал работать. Причина - со вторым патчем несовместимо это условие: <precondition>escape_dialog.trader_has_talk_info_wr</precondition>
Дело в том, что во втором патче из файла escape_dialog.script была удалена функция: function trader_has_talk_info_wr( trader, actor ) return true end
Можно либо записать эту функцию обратно в escape_dialog.script, либо использовать другие более-менее подходящие условия, например: <precondition>escape_dialog.trader_alredy_give_job</precondition>
Всё. Мы научились писать простые диалоги.
Однотипные квесты
Структура однотипных квестов
Сами задания находятся в конфиге: gamedata\config\misc\task_manager.ltx
Цели квестов и условия их выполнения фиксируются в скрипте: gamedata\scripts\task_manager.script
Ветки диалогов, отвечающие за эти задания (например, у Сидоровича) выглядит так: <actor_dialog>tm_trader_dialog</actor_dialog> <actor_dialog>tm_trader_reward</actor_dialog>
Где первый actor_dialog – диалог с выдачей задания, а второй - диалог по заданию и получению награды, либо отказа от выполнения оного. Никто нас насильно его выполнять не заставляет.
При получении задания информация об этом прописывается и в PDA, не забываем об этом. Информация добавляется с помощью файла: gamedata\config\gameplay\storyline_info_taskmanager.xml
Описание задания хранится в файле: gamedata\config\text\rus\stable_task_manager.xml
Всего существует шесть видов подобных заданий: eliminate_lager = уничтожить лагерь defend_lager = защитить лагерь kill_stalker = убить сталкер artefact = найти артефакт monster_part = найти часть монстра find_item = найти предмет Создаем квест
Для создания дополнительного квеста у Сидоровича нам понадобятся всего три файла: gamedata\config\gameplay\storyline_info_taskmanager.xml gamedata\config\misc\task_manager.ltx gamedata\config\text\rus\stable_task _manag er.xml
Открываем task_manager.ltx, в начале видим длинный список заданий, а уж потом сами задания и условия выполнения к ним. Т.е. cначала идет: [...] tm_kill_stalker_5 tm_kill_stalker_6 tm_kill_stalker_7 [...]
А затем то, что нам нужно: [...] [tm_kill_stalker_6] type = kill_stalker community = actor text = tm_kill_stalker_6_text description = tm_kill_stalker_6_descr parent = trader target = sim_stalker_novice ;reward_money = 1000 reward_reputation = +3 reward_rank = 2 reward_item = af_vyvert, conserva time = 86400 prior = 1
[tm_kill_stalker_7] type = kill_stalker community = actor text = tm_kill_stalker_7_text description = tm_kill_stalker_7_descr parent = trader target = esc_wolf reward_money = 10000 reward_reputation = +3 reward_rank = 2 reward_item = vodka, conserva time = 86400 prior = 1 [...]
Рассмотрим структуру этих записей, заодно создав новую: [tm_kill_stalker_7] – наше задание type = kill_stalker – тип задания, в данном случае – убийство сталкера community = actor – комьюнити, к которому принадлежит выполняющий задание (странный параметр, в игре используется - везде выставлен равным actor'у) text = tm_kill_stalker_7_text – описание нашего задания в диалоге description = tm_kill_stalker_7_descr – описание нашего задания в PDA parent = trader - заказчик target = esc_wolf – цель, в данном случае мы собираемся грохнуть Волка reward_money = 10000 – сколько денег нам дадут за выполнение reward_reputation = +3 – повышение/понижение репутации после выполнения задания reward_rank = 2 – кличество очков ранга, выдаваемых за выполнение reward_item = vodka, conserva – предметы, выдаваемые в награду за квест time = 86400 – время выполнения квеста prior = 1 – приоритет задания
Не забываем про PDA. В файл: gamedata\config\gameplay\storyline_info_taskmanager.xml
Добавляем следующие строки: <article id="tm_kill_stalker_7_descr" name="kill_stalker" article_type="task"> <text>tm_kill_stalker_7_descr</text> </article>
Текст на русском для задания нужен? Тогда открываем gamedata\config\text\rus\stable_task_manager.xml
И туда вгоняем следующие строки: <string id="tm_kill_stalker_7"> <text>Убить Волка</text> </string> <string id="tm_kill_stalker_7_text"> <text>Достал меня Волк! Понимаешь, достал! Ворует у меня водку, понимаешь, потом идет и клянчит деньги на тушенку, потому что новички его не слушают и есть ничего не дают, а вот сойти со своего места и пойти охотится на кабанов, он, видите ли, не хочет, ибо ЛЕНЬ! Грохни его, Меченый, я в долгу не останусь.</text> </string> <string id="tm_kill_stalker_7_descr"> <text>Сидрыч заказал убийство Волка</text> </string>
Важно! Эти строки не должны выходить за пределы тегов <string_table> и </string_table>.
Вот и все, теперь у Сидоровича появился новый квест - "Убить Волка".
Вычесляем координаты
Вычисляем координаты
Нашел на одном форуме, достаточно интересно.
Как получить координаты для спавна предмета или НПЦ. Скрипт сей найден на каком-то форуме, проверен и работает функция спавна имеет вид alife():create(section,position,levelvertex,gamevertex)
Где:
section - имя того/чего спавним
position,levelvertex,gamevertex - координаты, позиция вершины обьекта, и сектора карты.
Напишу подробно, как очень просто их узнать:
Заходим, предварительно распаковав, в каталог 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 или на бумажку.
Создание враждующей фракции для S.T.A.L.K.E.R. чистое небо
Теория
Для моего мода, мне понадобилось сделать новую группировку. Сообственно для начала вы должны создать свою группировку по статье приведеной в соседней теме. Не люблю теорий, перейдём сразу к практике! Практика
Рассмотрим функцию из dialogs.script function actor_set_stalker(actor, npc) printf("ACTOR NOW IN [STALKER] COMMUNITY") sim_board.get_sim_board():set_actor_community("stalker") return true end
Если попробовать добавить: sim_board.get_sim_board():set_actor_community("my_comm")
То ничего не произойдет, значит идём дальше в sim_board.script: -- Перевод игрока в группировку. function sim_board:set_actor_community(community) ---- Устанавливаем группировку игрока db.actor:set_character_community(actor_communitites[community], 0, 0) local tm = task_manager.get_task_manager()
for k,v in pairs(self.players) do if v.player_name == community then v.community_player = true else v.community_player = false -- Обнуляем все квесты, которые выдала эта группировка for kk,vv in pairs(v.random_tasks) do local task = tm:get_task_by_entity_id(vv) task.last_check_task = "reversed" end end v.brain:calculate_expansion_targets() end end
Здесь есть два выхода либо подправить actor_communitites(в текущем скрипте и в game_relation.ltx) local actor_communitites = { csky = "actor_csky", dolg = "actor_dolg", freedom = "actor_freedom", bandit = "actor_bandit", stalker = "actor_stalker", none = "actor", zombied = "zombied", monolith = "monolith", my_comm = "my_comm" }
game_relation.ltx [actor_communities] actor = actor, actor actor_csky = csky, renegade actor_bandit = bandit, stalker actor_dolg = dolg, freedom actor_freedom = freedom, dolg actor_stalker = stalker, bandit my_comm = my_comm, bandit
[pda_rank_communities] dolg freedom stalker bandit csky renegade my_comm
Обратите внимание, что в конфиге после знака "=", идёт "Группировка-друзья,Группировка-враги"
Или 2 способом: db.actor:set_character_community("my_comm", 0, 0)
И в конфиге естественно.
Вот мы и разобрались со вступлением, но при переходе в раздел, война группировок-вылет. Идём дальше. Видем что ошибка в скрипте pda.script, значит поаналогии добавляем туда:
elseif(state.faction_id=="freedom") then state.name = game.translate_string("ui_st_name_freedom") state.icon = "freedom_wide" state.icon_big = "freedom_big" if faction ~= nil then state.target = faction:get_war_target_title() state.target_desc = faction:get_war_target_descr() else state.target = "" state.target_desc = "" end state.location = game.translate_string("st_location_freedom")
--Наша часть elseif(state.faction_id=="my_comm") then state.name = game.translate_string("ui_st_name_freedom")--Имя нашей группировки в войне группировок state.icon = "freedom_wide" --Иконка в инвентаре state.icon_big = "freedom_big" --Иконка в войне группировок if faction ~= nil then state.target = faction:get_war_target_title() state.target_desc = faction:get_war_target_descr() else state.target = "" state.target_desc = "" end state.location = game.translate_string("st_location_freedom")--Локация обитания The End
Ну вроде всё! Тутор рассчитан на опытных модмейкеров! Сам процесс вступления не описывал.
S.T.A.L.K.E.R.Зов Припяти Создание новых шлемов/пртивогазов
;-----------------------------------------------; ;----------------[Разбор секций:]---------------; ;-----------------------------------------------; Открываем файл outfit.ltx находится он "gamedata/configs/misc/"
И так для начала разберемся что и как,возмём к примеру стандартный шлем [helm_respirator] его код выглядит так:
[helm_respirator]:helmet - название секции шлема,именно к нему игра будет обращаться.helmet базовая (наследуемая) секция (изменять строго не рекомендуется). $spawn = "outfit\helm_respirator" - тут у нас спавн менять его не будем,оставим стандартный visual = dynamics\outfit\helm_respirator - тут у нас модель шлема control_inertion_factor = 1.0 - управление инертион фактором inv_name = st_helm_respirator - название шлема в инвентаре. inv_name_short = st_helm_respirator - название шлема в инвентаре. description = st_helm_respirator_descr - ссылка на описание шлема
inv_weight = 4.0 - Вес шлема
inv_grid_width = 2 - Ширина иконки в ui_icon_equipment.dds inv_grid_height = 2 - Высота иконки в ui_icon_equipment.dds inv_grid_x = 4 - Положение по Х в ui_icon_equipment.dds inv_grid_y = 18 - Положение по У в ui_icon_equipment.dds
upgr_icon_x = 20 - Тут всё тоже самое но только для иконки Апгрейда - ui_actor_armor.dds upgr_icon_y = 619 - Тут всё тоже самое но только для иконки Апгрейда - ui_actor_armor.dds upgr_icon_width = 106 - Тут всё тоже самое но только для иконки Апгрейда - ui_actor_armor.dds upgr_icon_height = 149 - Тут всё тоже самое но только для иконки Апгрейда - ui_actor_armor.dds
cost = 1000 - Цена
immunities_sect = sect_helm_respirator_immunities - секции имунитета bones_koeff_protection = actor_helm_respirator - это помоему защита головы ГГ
telepatic_protection = 0.0200 - защита от телепатии radiation_protection = 0.0015 - защита от радиации chemical_burn_protection = 0.0500 - защита от химических ожогов
upgrades = up_gr_firstab_helm_respirator - это код на Апгрейд installed_upgrades = upgrade_scheme = upgrade_scheme_helm_respirator - это код на схему Апгрейд
[sect_helm_respirator_immunities] - коэффициенты иммунитета самого костюма, то есть - то, насколько сильно он сам подвержен повреждениям от различных типов воздействий. по значениям каждого типа
burn_immunity = 0.04 - защита от воздействия огня (костры,аномалия "Жарка" и т.д.) strike_immunity = 0.0 - защита от ударов (наносятся мутантами, например, псевдогигантом) shock_immunity = 0.04 - ащита от поражения электричеством. wound_immunity = 0.0 - защита от ранений (наносятся мутантами, например, собаками, кровососами и т.д.) wound_2_immunity = 0.0 - защита от ранений (наносятся мутантами, например, собаками, кровососами и т.д.) radiation_immunity = 0.0 - защита от радиации. telepatic_immunity = 0.0 - защита от пси-воздействия (например, присутствие контроллера серьезно влияет на psy_health) chemical_burn_immunity = 0.04 - защита от химического воздействия. explosion_immunity = 0.04 - защита от взрывов/осколков. fire_wound_immunity = 0.04 - защита от огнестрельного оружия.
Далее добавим к нему Апгрейд,в файле outfit.ltx в верху пишем ...... #include "outfit_upgrades\helm_battle_dolg_up.ltx"
Так теперь создадим ветку Апгрейда.Для этого создадим текстовый документ helm_battle_dolg_up.ltx в папке outfit_upgrades находится она gamedata/configs/misc/outfit_upgrades/ Далее в нашь файл helm_battle_dolg_up.ltx пишем
[up_sect_firsta_helm_battle_dolg] cost = 500 value = +10
[up_gr_firstab_helm_battle_dolg] elements = up_firsta_helm_battle_dolg
[up_gr_firstcd_helm_battle_dolg] elements = up_firstc_helm_battle_dolg, up_firstd_helm_battle_dolg
[up_gr_firstef_helm_battle_dolg] elements = up_firste_helm_battle_dolg
[up_gr_seconab_helm_battle_dolg] elements = up_secona_helm_battle_dolg
[up_gr_seconcd_helm_battle_dolg] elements = up_seconc_helm_battle_dolg, up_second_helm_battle_dolg
[up_gr_seconef_helm_battle_dolg] elements = up_secone_helm_battle_dolg
Теперь добавим наш Апргейд Кардану,в файле stalkers_upgrade_info.ltx пропишем название нашего шлема После строк ........ helm_respirator helm_tactic helm_battle_dolg-нашь шлем
Затем всё в этом же файле stalkers_upgrade_info.ltx после строк ................. up_sect_secona_helm_battle = {!upgrade_hint_kardan(1)} false, true up_sect_seconc_helm_battle = {!upgrade_hint_kardan(2)} false, true up_sect_second_helm_battle = {!upgrade_hint_kardan(2)} false, true up_sect_secone_helm_battle = {!upgrade_hint_kardan(3)} false, true up_sect_seconf_helm_battle = {!upgrade_hint_kardan(3)} false, true Пишем:
Так же можно добавим описание нашему шлему , для этого откроем файл st_items_outfit.xml находится он в gamedata/configs/text/rus/ и в самом низу пишем
<string id="st_helm_battle_dolg"> <text>Стальной Сталкера</text> </string> <string id="st_helm_battle_dolg_descr"> <text>......ТУТ ПИШЕМ ОПИСАНИЕ ВАШЕГО ШЛЕМА .....Я БЫ НАПИСАЛ ТОЛЬКО ГОЛОВА УЖЕ НЕ ДУМАЕТ</text> </string>
Всё сохраняем , далее добавляем нашь шлем либо в торговлю либо сразу спавним в стартовом капитале ГГ Я предпочитаю спавнить , для этого в файле character_desc_general.xml находится он gamedata/configs/gameplay/ Пишем после строки ................. conserva = 2 \n helm_battle_dolg = \n Всё можно начинть игру
Редактирование NPC
Вступление
В этой статье мы научимся редактировать NPC: изменять содержимое их инвентаря, реплики, поведение, имя, и другие параметры. Параметры
За параметры NPC отвечают файлы: \config\gameplay\character_desc_[название локации].xml
Каждый из них разбит на секции - по одной на NPC. Используются следующие параметры: <name>...</name> - Имя (ссылка на строку в текстовом массиве). <icon>ui_npc_...</icon> - Иконка для диалогов/торговли/PDA <bio>..._bio</bio> - Биография (в игре не используется). <class>...</class> - Класс (лучше не трогать).Imp 12:46, 12 августа 2007 (EEST)Нужно для того что-бы автоматические респавнеры могли спавнить немного разных персонажей. То есть например в игре есть описание восьми (кажеться может и больше) разных новичков и что бы при автоматическом респавне не получалась куча братьев-близнецов, респавнер настраивается на класс персонажей и спавнит случайным образом разных персонажей одного класса. <community>...</community> - Группировка. <rank>...</rank> - Ранг. <reputation>...</reputation> - Репутация. <money min="..." max="..." infinitive="..."/> - Количество денег (infinitive="1" - бесконечные деньги). <snd_config>...</snd_config> - Набор звуков. <crouch_type>-1</crouch_type> - Тип приседания. Лучше не трогать. <visual>actors\...</visual> - Внешность. Влияет как на внешний вид костюма, так и на его свойства. Укажите здесь экзоскелет - и персонаж действительно в нем окажется: как по внешности, так и по свойствам. <supplies>...</supplies> - Предметы, находящиеся у него в инвентаре. Некоторые из них в игре не отображаются, поэтому не удивляйтесь присутствию здесь предметов вроде рации или фонарика.
В игре отображаються все предметы, просто при торговле есть ограничения на допустимые к торговле предметы, а при смерти персонажа, "запрещенные" предметы удаляються скриптом. Imp 12:46, 12 августа 2007 (EEST) <start_dialog>...<start_dialog> - Приветственный диалог. Их может быть несколько, с различными условиями появления. <actor_dialog>...</actor_dialog> - Диалоги с игроком. Практика
Изменим некоторые параметры. Выдадим ему FN2000 и Desert Eagle, примем в "Долг" и сделаем неограниченное количество денег: <!---------------------esc_wolf--------------------->
Насчет машины все окей: заспавнил, ездил и все дела , НО как только отъеду на 150-200 метров от места спавна, машина и я , вместе с ней, оказываемся в точке спавна. smart terrains убирал - не помогает. Кстати я посмотрел скрины из твоей разрботки - в целом очень даже неплохо. И возникает у меня вопрос : ОДИН ДЕЛАЕШЬ?( ничего не подумай , я сам делаю мод )
Добавлено (02.06.2011, 21:04:34) --------------------------------------------- Лично для меня : Редактирую character_desc_xxx.xml Например бандиту-снайперу вместо МП-5 ставлю СВД и игра вылетает ? На ошибки в правописании проверял все норм. Может дело в размере файла ?
Сообщение отредактировал andreyzhilenko - Четверг, 26.05.2011, 17:12:28
Делаем винтовку с переменной кратностью. Для примера можно взять канфиг любой винтовки с оптикой. Добавляем вот эти строки в свою снайперу. snd_gyro = weapons\binoculars_gyro snd_zoomin = weapons\binoculars_zoomin snd_zoomout = weapons\binoculars_zoomout snd_close = weapons\generic_close
vision_present = true ; обводить цель в квадрат или false нет. vis_frame_speed = 4 ; скорость, с которой наводится рамка на цель vis_frame_color = 0.7,0.7,0.7,1.0 ; цвет рамки RGBA (A) Не учитывается found_snd = detectors\DA-2_beep1
; изменён класс на бинокль, единственный минус может стрелять только одиночными. class = WP_BINOC f_mode можно удолить или поставить 1 означает что стреляет только оденочными. f_mode = 1
И ещо нужен изменённый файл xrGame.dll чтобы игра не ругалась на класс бинокля в винтовке.xrGame.dll Можно взять из НС.
люди скажите пожалуйста откуда и как можно добавить спальный мешок?и еще как добавить выброс в обычную игру,как менять время респавна?и последнее как добавить фриплей и откуда?заранее спасибо!
Добавлено (21.06.2011, 14:55:23) --------------------------------------------- народ!подскажите пожалуйста как пользоваться аддончиком Position Informer?заранее спасибо!
andreyzhilenko. Можно. Находим сточку и ставим 1 и прицел будет несъемный. 2-сёмный. scope_status = 1 и добавляем эти строчки если нужно scope_texture = wpn\wpn_crosshair ; текстура прицела. zoom_enabled = true scope_zoom_factor = 15 ;ПСО-1 4X Или пользуйтесь программой S.T.A.L.K.E.R. Ltx Editor. Это если я вас правельно понял.
На примере АК-74u объясните как сделать чтобы при приближении ,изображение калаша убиралось а оставалось одно перекрестие как при обычной стрельбе.Вроде мысль изложил правильно.
Сообщение отредактировал Vongmaer - Суббота, 02.07.2011, 12:23:12
supei-sa, может какие то строчки украсть из конфигов еды. Только все равно это не то... Получается, ты хавчиком утолишь жажду? Я не знаю. Я попробую у себя поколдовать. Если че, тут отпишусь
если что выкладываю часть своей сборки здесь кому интересно читаем
Работа с ACDC Сегодня мы разберем основу работы с ACDC. Но... для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC, нежели чем с xrSpawner? Отвечаю: xrSpawner, при всех его преимуществах, имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю, работающие с xrSpawner замечали, что порой обьекты, которые они спаунят, не всегда появляются на месте. Или вообще не появляются. Потому что - повторяю - xrSpawner не определяет вертексы, т.е. точную позицию и распределение по АИ-сетке. Итак, начнём работу! У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник "распаковка". Итак, all.spawn распакован! Видим файлы alife_*** и way_***. В файлах alife_*** только обьекты, которые спаунятся. А в way_*** только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и есть путь. По которому может двигаться живой обьект. Сейчас мы это рассмотрим. Для начала устроим текстовый беспредел:) Найдём файл alife_l01_escape, а в нём примерно такие строки: [869] ; cse_abstract properties section_name = actor name = level_prefix_actor_0001 s_rp = 0 position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0 s_flags = 0x29
upd:actor_state = 0xd20 upd:actor_accel_header = 0 upd:actor_accel_data = 0 upd:actor_velocity_header = 0 upd:actor_velocity_data = 0 upd:actor_radiation = 0 upd:actor_weapon = 110 upd:num_items = 0 Для начала расщедримся:) Припишем актору в [dont_spawn_character_supplies] такие строки: [spawn] [dont_spawn_character_supplies]
[spawn] wpn_binoc wpn_vintorez ammo_9x39_pab9 = 20 wpn_usp ammo_11.43x23_hydro = 22 novice_outfit device_torch Получится, что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему. Так. Теперь Меченый у нас будет крутым рэмбо:) Теперь ещё и подарим ему денежек: ; cse_alife_trader_abstract properties money = 40 trader_flags = 0 character_profile = actor В строке money напишем любое число. Тока астрономические не надо (не проверял). Ну, теперь Меченый не только рэмбо, но и миллионер:). Теперь займемся кординатами. У нас они такие: position = -139.449829101563,-29.6908683776855,-351.492797851563 direction = 0,0.00895109120756388,0 Это наши позиция и дирекция. ; cse_alife_object properties game_vertex_id = 19 ;тот самый вертекс на игре distance = 0.699999988079071 level_vertex_id = 111256 ;вертекс на уровне object_flags = 0xffffffbf custom_data = <<END А теперь пропишем туда такие кординаты: position = -167.232299804688,-25.4363708496094,-354.692901611328 direction = 0,-0.365248799324036,0
; cse_alife_object properties game_vertex_id = 0 distance = 0.699999988079071 level_vertex_id = 82413 object_flags = 0xffffffbf custom_data = <<END upd:health = 1 upd:timestamp = 0x75732029 upd:creature_flags = 0x70 upd:position = -167.232299804688,-25.4363708496094,-354.692901611328 upd:o_model = 0 upd:o_torso = -0.365248799324036,0,0.930909931659698 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 Теперь игра начнётся в здании блокпоста на 2 этаже:). С этим мы закончим. Теперь создадим нового НПС: [871] ; cse_abstract properties section_name = stalker name = esc_bridge_soldier1 position = -133.27989196777,-30.146812438965,-372.0263671875 direction = 0.028013030067086,0,0.9996075630188
; se_stalker properties Так вот он наш друг НПС - солдат на блокпосте:) Тут уже знакомы строки. Позиция, дирекция, вертексы... Но есть кое что новое:) [logic] active = walker
[walker] path_walk = hodim_dvor Элементарная логика НПС. hodim_dvor - это путь, по которому будет ходить НПС. НПС есть, всё готово. Но путя то у нас нет:) Создадим его в файле way_l01_escape. Припишем вот такие строчки: [hodim_dvor] points = p0,p1 p0:name = name00 p0:position = -120.44634246826,-30.15016746521,-363.68786621094 p0:game_vertex_id = 24 p0:level_vertex_id = 132887 p0:links = p1(1)
p1:name = name01 ;номер точки p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция p1:game_vertex_id = 19 ;вертекс на игре p1:level_vertex_id = 118862 ;вертекс на уровне p1:links = p0(1) ;на какую точку после этой перейдёт НПС (тут он будет ходить туда-сюда, если не написать линкс, то он остановится на месте.) Всё! Вгоняем в way_*** эти строки (тока мои коментарии писать не надо). Всё готово, можно тестить изменения :_))))). Как снимать координаты и работать с PI, расскажу в следующей статье. Теперь жмём на батник "запаковка" и усё! Пихаем all.spawn в игру. Только лучше ещё поправить отношения актора к военным и наоборот в лучшую сторону. Чтобы непись сразу пошёл по своему пути. Он будет ходить от казармы до дома (там поймёте).
Добавлено (31.07.2011, 11:09:09)
Все кому я нужен могут найти меня по этому адресу : #EGGO_TM в общем буду рад пообщаться )
Сообщение отредактировал rd_team - Воскресенье, 31.07.2011, 11:58:10