Профиль |
Гость!
|
Мы В Контакте |
⇓⇓⇓Подпишись!⇓⇓⇓
|
|
для тех кто хочет заниматся модостроем
|
|
GoReLaZ | Дата: Пятница, 11.11.2011, 23:40 | Сообщение # 1 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| Респаун, один из самых часто задаваемый вопросов на форумах. Вот, решил написать статью, дабы не втирать одно и тоже каждому, кто не может с этим разобраться.
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------- RESPAWN NPC----------------------------------------------------------------------------- Для создания респавна, понадобится два файла, all.spawn и spawn_section.ltx. Это минимальный набор. Для полной настройки респавнера, нужны ещё character_desc_simulation.xml и npc_profile.xml.
--------------------------------------------------------------------------------
1. В all.spawn создаём секцию респавнера
[10000] ; cse_abstract properties section_name = respawn name = имя респавнера position = координаты (x,y,z) direction = 0,0,0
; cse_alife_object properties game_vertex_id = гейм-вертекс distance = 10 level_vertex_id = левел-вертекс object_flags = 0xffffff3e custom_data = END [respawn] respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9 max_count = 8 min_count = 4 max_spawn = 2 idle_spawn = medium conditions = 100 END
; cse_shape properties shapes = shape0 shape0type = sphere shape0offset = 0,0,0 shape0radius = 1
; cse_alife_space_restrictor properties restrictor_type = 0
; se_respawn propertiesЕсли используется программа XrSpawner, то копируем любую секцию respawn; меняем имя объекта, координаты, и в окошке скрипт прописываем
[respawn] respawn_section = esc_urody_respawn_1,12, esc_urody_respawn_2,9 max_count = 8 min_count = 4 max_spawn = 2 idle_spawn = medium conditions = 100Где respawn_section = id респавн-секций из файла spawn_section.ltx. Цифры после запятой, означают отношение одной секции к другой. Если планируется одинаковое колличество респавна из каждой секции, то цифры ставить не требуется. max_count = колличество респавн-запросов за период времени, пока ГГ находится на уровне. При переходе на другой уровень, счётчик max_count сбрасывается. (ставить не обязательно) min_count = минимальное колличество нпс, для экстренного респавна. (ставить не обязательно) max_spawn = колличество нпс за один цикл респавна. idle_spawn = тип спавна. Известно три типа medium, often, seldom. Обычно, используется тип medium. conditions =Условие респавна. Можно установить проверку условий (инфопоршень), где респавн будет происходить только при выполнении условия. Номер означает общий процент выполнения респавна. Например так conditions = {+инфо} 100, 0 где, респавн будет происходить со сто-процентной вероятностью, только при наличии установленного инфопоршна.
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Пятница, 11.11.2011, 23:41 | Сообщение # 2 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| 2. В файле spawn_section.ltx, создаём респавн-секции
[esc_urody_respawn_1]stalker $spawn = respawnesc_urody_respawn_1 character_profile = sim_urody_novice spec_rank = novice community = bandit
[esc_urody_respawn_2]stalker $spawn = respawnesc_urody_respawn_2 character_profile = sim_urody_regular spec_rank = regular community = banditГде esc_urody_respawn_1 id респавн-секции. sim_urody_novice и sim_urody_regular классы профайлов нпс. novice и regular ранги нпс. bandit группировка нпс.
--------------------------------------------------------------------------------
3. В файле npc_profile.xml регистрируем классы sim_urody_regular и sim_urody_novice
character id=sim_urody_regular classsim_urody_regularclass character
character id=sim_urody_novice classsim_urody_noviceclass character --------------------------------------------------------------------------------
4. Создаём профили, в файле character_desc_simulation.xml, с классами sim_urody_regular и sim_urody_novice и группировкой bandit.
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------- RESPAWN MUTANTOV------------------------------------------------------------------------------- В принципе, респавн мутантов идентичен респавну нпс. Но с одним лишь отличием, которое его значительно упрощает. Вся настройка респавна мутантов, ограничивается секцией в файле all.spawn. Вписываем секцию респавнера, как указано в -RESPAWN NPC-. Все настройки идентичны, кроме строки respawn_section = . В ней прописываем типы мутантов, из файла se_respawn.script. Такие как flesh_weak, flesh_normal, dog_weak, boar_strong, и т.д..
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------- ОБЩИЕ НАСТРОЙКИ-------------------------------------------------------------------------------- Обязательные условия респавна
1. На уровне обязательно должен быть хоть один гулаг для респавнящихся нпс и мутантов. Так как колличество неписей для респавна, ориентируется по доступным местам в гулагах.
2. Респавн производится, только если под гулагами есть доступные работы.
3. На каждом уровне, респавн ограничен определёнными типами неписей. Данные ограничения установлены в файле miscsmart_terrain_presets.ltx. Чтобы сделать возможным респавн неписей, не предусмотренных на данном уровне. Надо в секции нужного уровня, дописать требуемые типы неписей.
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Пятница, 11.11.2011, 23:41 | Сообщение # 3 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| Для проверки созданного респавнера, можно не ждать когда сработает системный респавн, а вызвать принудительно респавн в нужной секции. Для этого, прописываем в любой логике, вызов функции %=respawner_spawn(имя респавнера)%. Где, имя респавнера - имя секции, созданой в файле all.spawn. Скобки обязательны.
Например, можно создать рядом с зоной респавнера, временный рестриктор. И в кастом дате рестриктора, прописать вызов функции принудительного вызова респавна, в нужном респавнере, при входе ГГ в зону рестриктора
[logic] active = sr_idle@in
[sr_idle@in] on_actor_inside = %=respawner_spawn(имя респавнера)% sr_idle@out
[sr_idle@out] on_actor_outside = sr_idle@inФункция принудительного вызова респавна, находится в файле xr_effects.script.
--------------------------------------------------------------------------------
-------------------------------------------------------------------------------- RESPAWN ITEMS------------------------------------------------------------------------------- Респавн инвентаря в инвентарных ящиках, несколько отличается от способа респавна неписей.
--------------------------------------------------------------------------------
1. Первое, что нам нужно сделать, это создать инвентарный ящик в файле all.spawn
[10000] ; cse_abstract properties section_name = inventory_box name = имя ящика position = координаты x,y,z direction = 0,0,0
; cse_alife_object properties game_vertex_id = гейм-вертекс distance = 0 level_vertex_id = левел-вертекс object_flags = 0xffffffba
story_id = ай-ди ящика
; cse_visual properties visual_name = equipmentsitem_box_01 --------------------------------------------------------------------------------
2. Затем, в файле game_story_id.ltx регистрируем id ящика. (выбираем любое свободное число).
--------------------------------------------------------------------------------
3. Создаём респавнер в файле all.spawn. Координаты и размеры зоны респавнера, должны быть такими, чтоб инвентарный ящик поместился внутри зоны респавнера
[10001] ; cse_abstract properties section_name = respawn name = имя респавнера position = координаты x,y,z direction = 0,0,0
; cse_alife_object properties game_vertex_id = гейм-вертекс distance = 2 level_vertex_id = левел-вертекс object_flags = 0xffffff3e custom_data = END [respawn] respawn_section = список вещей респавна idle_spawn = -1 parent = ай-ди ящика item_spawn = true max_count = 7 END
; cse_shape properties shapes = shape0 shape0type = box shape0axis_x = 0.5,0,0 (ширина зоны респавнера, по X) shape0axis_y = 0,0.5,0 (высота зоны респавнера) shape0axis_z = 0,0,1 (ширина зоны респавнера, по Z) shape0offset = 0,0,0
; cse_alife_space_restrictor properties restrictor_type = 3
; se_respawn propertiesГде
respawn_section = список вещей респавна. Как и в респавнерах неписей, возможна прописка соотношений между вещами. Например
respawn_section = wpn_pm,2, vodka,2, medkit,1, energy_drink,2, ammo_9x18_fmj,3 idle_spawn = тип спавна. Инвентарь не имеет типов спавна, поэтому ставится (-1).
parent = ай-ди инвентарного ящика, в котором производить респавн вещей.
item_spawn = (truefalse) возможность включения и отключения респавна. Можно задавать условия.
max_count = количество респав-циклов за определённый период времени. (Пока ГГ находится на уровне. После перехода ГГ на другой уровень, счётчик сбрасывается).
--------------------------------------------------------------------------------
4. Создаём вызов респавна. Обычно вызов производится из smart_terrain. В custom_data любого подходящего smart_terrain, под секцией [smart_terrain], вписываем вызов респавна
[smart_terrain] respawn = имя респавнера И респавн будет производиться, при каждом пополнении нпс, под данным смартом.
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Пятница, 11.11.2011, 23:43 | Сообщение # 4 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| Активация артефактов Распишу по пунктам как добавить например к "огненому шару" аномалию Жарка... Открываете файл: gamedata/config/misc/artefacts.ltx И там в самом начале файла такая секция: ;Артефакты, которые при активизации создают аномальные зоны ;формат: {секция_артефакта} = {секция_зоны},Radius,Power [artefact_spawn_zones] af_medusa = zone_mosquito_bald_weak, 2.0, 30.0
Обозначает что артефакт af_medusa при активации создаст аномальную зону zone_mosquito_bald_weak с радиусом 2 метра и мощностью 30 (возможно влияет и на время жизни аномалии) Кончается этот список по идее строчкой: mp_af_electra_flash = zone_witches_galantine, 3, 50.0 и сразу после неё пишете: af_fireball = zone_zharka_static, 3, 30.0 В принципе можно прописать там не статик а zone_zharka_weak незнаю что из них правильнее использовать... статик работает тоже.В той-же папке есть файл zone_zharka, где описаны свойства зон _weak, _average, _strong( слабая, средняя, сильная), а также зона zone_zharka_static. После этого у вас игра станет вылетать с ошибкой про невозможность обнаружить последовательность описывающую анимацию активации аномалии. А это всё там же в начале файла чуть ниже того где вы добавили новый артефакт в список есть такие строчки: [af_activation_gravi] ;---------------------------------------------------------------------------------------------------------------------------------------- ;format: time(sec), sound_name, light_R,G,B, light_range, particle_name, af_animation_name ;---------------------------------------------------------------------------------------------------------------------------------------- starting = 5.0, anomalygravi_idle00, 0.5, 1.0, 1.5, 5.0, "anomaly2artefact_gravi_blast_start", "idle" flying = 2.0, anomalygravi_idle01, 0.8, 1.0, 1.2, 3.0, "anomaly2artefactartefact_gravi", "idle" idle_before_spawning = 5.0, anomalygravi_blowout5, 1.0, 1.0, 1, 0.0, "anomaly2artefact_gravi_blast_finished", "idle" spawning = 1, anomalygravity_entrance, 0.9, 1.1, 1.01, 0.0, "", "idle"
Что как раз и описывает анимацию.. По-хорошему надо написать свою анимацию к жарке но это честно говоря не обязательно... потому что нам сейчас важна не красота а работоспособность.... Так вот... из заголовка "[af_activation_gravi]" берем название последовательности af_activation_gravi и ищем сам артефакт af_fireball (кто уже забыл зачем, мы на него собирались вешать новую активацию) Найдете что-то вроде: [af_fireball]:af_base GroupControlSection = spawn_group $spawn = "artifactszharka fireball" $npc = on ; option for Level Editor ;$prefetch = 3 cform = skeleton class = ARTEFACT
visual = physicsanomalyartefact_fire.ogf description = enc_zone_artifact_af-fireball inv_name = af-fireball И где-нибудь тут добавляете строчку: artefact_activation_seq = af_activation_gravi И на этом всё. Прописываем в artefacts.ltx в блоке [af_base]:identity_immunities вместо ;slot=10 вот это: slot=1. Насколько я знаю, знак ; зоначает, что строка закомментирована(неактивна) У себя я прописывал slot=1 между строчками inv_name = af-electra-moonlight inv_name_short = inv_weight = 0.05 slot = 1 inv_grid_x = 10 inv_grid_y = 10 для того артефакта, который хочу активировать. В игре берем артефакт в первый слот и активируем. By XiaNi Получено с http://www.stalkerin.gameru.net/wiki...82%D0%BE%D0%B2
Добавление статей в PDA Добавление статьи На примере статьи из Artefact Activation Mod разберем их добавление в PDA: • Добавим в файл config\gameplay\encyclopedia_zone.xml новую статью: <!-------------------------------- Activation - Basic ----------------------------->
<article id="zone_anomalies_activation_basic" name="zone_anomalies_activation-basic" group="Anomalies"> <texture x="500" y="150" width="100" height="100">ui_icon_photo</texture> <text>enc_zone_anomalies_activation_basic</text> </article> Здесь: • o article id - внутреннее имя статьи, именно на него ссылаются в файлах игры o name - имя статьи, отображаемое в игре, подгружается из строкового массива o texture - картинка и её позиция в статье, в данном случае мы использовали обычный белый шум o text - текст статьи, отображаемый в игре, подгружается из строкового массива • Добавим в, например, config\gameplay\info_l01escape.xml (инфопорции уровня "Кордон") ссылку на получение статьи - скажем, к трупу у туннеля, при обыске которого выдается информация о аномалиях в туннеле (вы его обнаруживаете, проходя второе спецзадание от Сидоровича). Найдем эти строки и дополним их: <!-- труп у аномалии --> <info_portion id="esc_tutorial_dead_novice"> <article>tutorial_moving_anomaly</article> '''<article>zone_anomalies_activation_basic</article>''' </info_portion> Главное - никогда не путайте article id, name и text статьи. Я в данном примере это сделать легко. Лучше называйте их непохожими друг на друга названиями. • Так как в статье у нас есть такое поле: <text>enc_zone_anomalies_activation_basic</text> Да и название тоже не написано прямо, а ссылается на определенную строку, то добавим этот самый text в config\text\rus\string_table_enc_zone.xml, в нашем случае: <string id="enc_zone_anomalies_activation-basic"> <text>Активация - базис</text> </string> <string id="enc_zone_anomalies_activation_basic"> <text>С артефактами связана, помимо всего прочего, ''(ну, и так далее, там большой текст)''...</text> </string> [править] Дополнительно Чтобы статья добавлялась при получении определенного задания, в ..._task.xml (вместо ... стоит название уровня) нужно прописать конструкцию вида: <article>название_задания_descr</article>
Редактирование NPC Вступление В этой статье мы научимся редактировать NPC: изменять содержимое их инвентаря, реплики, поведение, имя, и другие параметры. Параметры За параметры NPC отвечают файлы: \config\gameplay\character_desc_[название локации].xml Каждый из них разбит на секции - по одной на NPC. Используются следующие параметры: • <name>...</name> - Имя (ссылка на строку в текстовом массиве). • <icon>ui_npc_...</icon> - Иконка для диалогов/торговли. • <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> - Диалоги с игроком. Практика Изменим, например, параметры NPC по имени Волк. Откроем файл: \config\gameplay\character_desc_escape.xml И найдем в нем раздел, ему соответствующий: <!---------------------esc_wolf--------------------->
<specific_character id="esc_wolf" team_default = "1"> <name>esc_wolf_name</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_wolf_bio</bio>
<class>esc_wolf</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>434</rank> <reputation>5</reputation> <money min="600" max="2000" infinitive="0"/>
<snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type>
<visual>actors\neytral\stalker_neytral_balon_1</visual> <supplies> [spawn] \n wpn_pm \n ammo_9x18_fmj = 1 \n wpn_ak74u \n ammo_5.45x39_fmj \n device_torch \n hand_radio \n </supplies>
#include "gameplay\character_criticals_4.xml" //
<start_dialog>escape_lager_volk_talk</start_dialog> <start_dialog>dm_hello_dialog</start_dialog> <actor_dialog>dm_cool_info_dialog</actor_dialog> <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> <actor_dialog>tm_wolf_dialog</actor_dialog> <actor_dialog>tm_wolf_reward</actor_dialog> </specific_character> Изменим некоторые параметры. Выдадим ему FN2000 и Desert Eagle, примем в "Долг" и сделаем неограниченное количество денег: <!---------------------esc_wolf--------------------->
<specific_character id="esc_wolf" team_default = "1"> <name>esc_wolf_name</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_wolf_bio</bio>
<class>esc_wolf</class> <community>dolg</community> <terrain_sect>stalker_terrain</terrain_sect>
<rank>434</rank> <reputation>5</reputation> <money min="600" max="2000" infinitive="1"/>
<snd_config>characters_voice\human_01\stalker\</snd_config> <crouch_type>-1</crouch_type>
<visual>actors\neytral\stalker_neytral_balon_1</visual> <supplies> [spawn] \n wpn_deagle \n ammo_11.43x23_fmj = 1 \n wpn_fn2000 \n ammo_5.56x45_ap \n ammo_5.45x39_fmj \n device_torch \n hand_radio \n </supplies>
#include "gameplay\character_criticals_4.xml" //
<start_dialog>escape_lager_volk_talk</start_dialog> <start_dialog>dm_hello_dialog</start_dialog> <actor_dialog>dm_cool_info_dialog</actor_dialog> <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> <actor_dialog>tm_wolf_dialog</actor_dialog> <actor_dialog>tm_wolf_reward</actor_dialog> </specific_character>
Создание новой группировки Новая группировка Сегодня мы создадим новую группировку. Назовем её, скажем, "Ветер". Не суть важно. Практика: Базовый уровень 1. Для начала в game_relations.ltx и в таблицу отношений группировок в конце и в заголовке добавляем название своей группировки и коэффициенты отношений к ней у других группировок. Также, не забываем прописать её собственное отношение к другим группировкам: [communities_relations] ;|actor |act_dol|act_fre|stalker|monolit|militar|killer |ecolog |dolg |freedom|bandit |zombied|strange|trader|arena_enemy|wind| ;================================================= ================================================== ============================== actor = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0 actor_dolg = 0, 0, 0, 0, -5000, -500, -5000, 5000, 600, -5000, -5000, -5000, 0, 0, -5000 actor_freedom = 0, 0, 0, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, -5000, 0
stalker = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0 monolith = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, 5000, 5000, -5000, 0, -5000, 0 military = -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, -5000, -5000, -5000, 0, 0, -5000, 0 killer = -5000, -5000, 0, -5000, -5000, -5000, 5000, -5000, -5000, -5000, 0, -5000, -5000, 0, -5000, 0 ecolog = 0, 600, -5000, 0, -5000, 1000, -5000, 5000, 500, -5000, -500, -5000, 0, 0, 0, 0 dolg = 0, 600, -5000, 0, -5000, -500, -5000, 5000, 5000, -5000, -5000, -5000, 0, 0, 0, 0 freedom = 0, -5000, 600, 0, -5000, -5000, -5000, -1500, -5000, 5000, 0, -5000, 0, 0, 0, 0 bandit = -5000, -5000, 0, -5000, -5000, -500, 0, -5000, -5000, 0, 0, -5000, -5000, 0, -5000, 0 zombied = -5000, -5000, -5000, -5000, 5000, -5000, -5000, -5000, -5000, -5000, -5000, 5000, -5000, 0, -5000, 0 stranger = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -500, -5000, 0, 0, 0, 0 trader = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 arena_enemy = -5000, -5000, -5000, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, 0, 0, 0
wind = 0, 0, 0, 0, -5000, -5000, -5000, 0, 0, 0, -5000, -5000, 0, 0, -5000, 0 Также, изменим эту строку, добавив туда имя и номер группировки: ;названия группировок communities = actor, 0, actor_dolg, 1, actor_freedom, 2, stalker, 5, monolith, 6, military, 7, killer, 8, ecolog, 9, dolg, 10, freedom, 11, bandit, 12, zombied, 13, stranger, 14, trader, 15, arena_enemy, 16, wind, 18, Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для wind выставили 18, так как мы эту группировку отделили от других. Далее, в разделе [communities_sympathy] в конце добавляем свою группировку и коэффициент "впечатлительности" - чем он меньше, тем меньше отношение группировки будет меняться к вам в целом: [communities_sympathy] actor = 0.0 actor_dolg = 0.0 actor_freedom = 0.0 stalker = 0.0 monolith = 0.0 military = 0.0 killer = 0.0 ecolog = 0.0 dolg = 0.1 freedom = 0.1 bandit = 0.0 zombied = 0.0 trader = 0.0 stranger = 0.0 arena_enemy = 0.0 wind = 0.0 2. После этого в файле death_manager*****ipt ищем строку local community_list и в скобках добавляем название своей группировки: function init_drop_settings() local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", "arena_enemy", "actor_dolg", "wind" } 3. В файле death_items_by_communities.ltx пишем [x]:stalker (вместо x - название вашей группировки): [...] af_dummy_spring = 0 af_fuzz_kolobok = 0
;Еда vodka = 0
[arena_enemy] [actor_dolg]
[wind]: stalker bread = 0 kolbasa = 0 vodka = 0 energy_drink = 0.3 4. Если предусматривается респавн бойцов новой группировки, в se_respawn*****ipt прописываем в local simMaxCount = { после строчек с зомбированными сталкерами строку: wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6, 5. Чтобы при убийстве непися новой группировки игра не вылетала в xr_statistic*****ipt, после строки: zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4, пишем dark_stalker_novice = 1, dark_stalker_experienced = 2, dark_stalker_veteran = 3, dark_stalker_master = 4,
6. Ну а в character_desk_x.xml выбираем любого NPC (или группу) и меняем группировку на свою: <!---esc_wolf---> <specific_character id="esc_wolf" team_default = "1"> <name>esc_wolf_name</name> <icon>ui_npc_u_stalker_neytral_balon_1</icon> <bio>esc_wolf_bio</bio>
<class>esc_wolf</class> <community>wind</community> [...] 7. Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml: <?xml version="1.0" encoding="windows-1251" ?> <string_table> <string id="wind"> <text>Ветер</text> </string> <string id="actor"> <text>Одиночка</text> </string> [...] 8. Существует возможность создать для нашей новой группировки места, где они будут ходить (*_terrain брать из m_stalker.ltx): То есть, к примеру, существует секция: [stalker_terrain] 255,000,255,255 008,001,255,255 ;Разрешено ходить по опасным местам на баре 012,001,255,255 ;Разрешено ходить по опасным местам на Милитари Тогда можно создать новую, по аналогии: [wind_terrain] 255,000,255,255 008,001,255,255 ;Разрешено ходить по опасным местам на баре 012,001,255,255 ;Разрешено ходить по опасным местам на Милитари 010,001,255,255 ;Разрешено ходить по опасным местам на янтаре
Здесь, очевидно, указаны координаты самого уровня. Для каждого уровня существует своя начальная координата. Продвинутый уровень: Такой метод достаточно примитивен. Это не полноценная группировка. Нам нужны соответствующие диалоги, возможность получения квестов и вступления в группировку, уникальные NPC. Квесты: Добавим квесты, которые нужно выполнить для группировки. Пока - простые поручения распространенных типов. Во-первых, пропишите в список диалогов персонажа следующие строки: <actor_dialog>[что-нибудь]_dialog</actor_dialog> <actor_dialog>[что-нибудь]_reward</actor_dialog> Примеры названий: tm_trader_dialog, tm_wolf_dialog... Внимание! Метод не проверен. Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в task_manager.ltx набор новых заданий.
[...]
;--------Wind------------------------ ;----------Kill Stalker---- wind_kill_stalker ;----------Find Item---- wind_find_item
[...]
;tasks for Wind
[wind_find_item] type = find_item community = actor text = [ссылка на текст с рассказом заказчика о задании] description = [ссылка на текст с описанием задания] parent = [имя NPC-заказчика] target = scientific_outfit reward_money = 5000 reward_reputation = +5 reward_rank = 4 reward_item = wpn_sig_m1 time = 86400
[wind_kill_stalker] type = kill_stalker community = actor text = [ссылка на текст с рассказом заказчика о задании] description = [ссылка на текст с описанием задания] parent = [имя NPC-заказчика] target = sim_stalker_master_master reward_money = 4000 reward_reputation = +5 reward_rank = 9 reward_item = ammo_5.56x45_ap, ammo_5.56x45_ap, ammo_5.56x45_ap time = 86400 Не забудьте прописать описания заданий в текстовые массивы. Подробнее о редактировании task_manager.ltx читайте в уроке, посвященном однотипным квестам. Да, и зарегистрируйте сами ветки диалогов в файле dialogs.xml. Вот пример того, как это сделано для заданий "Долга": <dialog id="tm_dolg_dialog" priority="-1"> <init_func>task_manager.init_dolg_task_dialog</init_func> </dialog> <dialog id="tm_dolg_reward" priority="0"> <init_func>task_manager.init_dolg_reward_dialog</init_func> <precondition>task_manager.has_active_vendor_tas k</precondition> </dialog> Соответственно, пройдем туда, куда указывает строка task_manager.init_dolg_task_dialog - в task_manager*****ipt: function init_dolg_task_dialog(dlg) get_random_task():init_task_dialog(dlg, "dolg") По аналогии делаем и с нашим "Ветром". Вступление в группировку: Реализуем возможность вступления в группировку. Прописываем в dialogs*****ipt такие action'ы: ----------------------------------------------------------------------------------- -- Community -----------------------------------------------------------------------------------
[...]
function actor_set_wind (actor, npc) printf ("ACTOR NOW IN WIND COMMUNITY" if db.actor then db.actor:set_character_community ("actor_wind", 0, 0) end return true end После чего создадим диалог, и сделаем в нем фразу с action'ом вида <action>actor_set_wind</action>. Советую изучить урок, посвященный диалогам. [править] Новые NPC Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан здесь.
Вычисляем координаты Нашел на одном форуме, достаточно интересно. Как получить координаты для спавна предмета или НПЦ. Скрипт сей найден на каком-то форуме, проверен и работает функция спавна имеет вид alife():create(section,position,levelvertex,gameve rtex) Где: section - имя того/чего спавним position,levelvertex,gamevertex - координаты, позиция вершины обьекта, и сектора карты. Напишу подробно, как очень про100 их узнать: Заходим, предварительно распаковав, в каталог gamedata/scripts/ И там в файле ui_main_menu*****ipt в конце дописываем это: 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 или на бумажку.
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Пятница, 11.11.2011, 23:54 | Сообщение # 5 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| Настройка погоды и освещения
Содержание 1 Значение параметров погодных и относящихся к ним конфигов 1.1 Параметры погоды 1.2 Параметры бликов 1.3 Параметры фонарика 2 Авторы
Значение параметров погодных и относящихся к ним конфигов
Параметры погоды [sect_default_weather]
01:00:00 = default_weather_01 02:00:00 = default_weather_02 ...
Здесь указывается время смены типов погоды, каждый тип включает в себя свой скайбокс и индивидуальные параметры освещения, дождя, грозы, и звука окружения. Переход осуществляется не скачкообразно, а плавно, практически не заметно. [default_weather_01] ; имя типа погоды, описание которого ведется в этом блоке.
flares = flares_gradient1 ; здесь указывается имя заготовки блика от солнца (заготовки прописаны в файле flares.ltx).
sky_texture = skysky_14_cube ; это имя используемого скайбокса. cкайбокс - это куб, окружающий всю локацию, на 6 граней которого натянуты 6 текстур из файла, указанного в этой строке. нужно обратить внимание, что строка содержит еще и путь к файлу.
sky_rotation = 0 ; определяет положение (азимут) скайбокса на описываемый час.
sky_color = 1.0, 1.0, 1.0 ; это цвет неба, или, точнее, цвет рассеянного света, формат из 3 цифр, как и в параметрах ниже, подразумевает цветовую модель RGB, учитывая то, что здесь максимальная интенсивность цвета (255), здесь равна 1.0. например, цвет неба, равный [1.0, 0.0, 0.0] - зальет окрестность ярко красным светом. стоит учитывать, что здесь описывается не цвет, а свет, поэтому параметр, например, [0,0,0] - даст не черный цвет, а отсутствие вообще какого либо света. аналогично эффекту смешивания в фотошопе (screen).
clouds_texture = skysky_oblaka ; это - имя тектуры облаков. не путать со скайбоксом.
clouds_color = 0.333, 0.341, 0.431, 0.7, 1.7 ; это цвет облаков, первые 3 цифры - это RGB (см.выше), четвертая - это видимость (непрозрачность) текстуры облаков, т.е 0 - облаков не видно, а 1 - полная видимость. пятая цифра - скорость движения облаков.
far_plane = 350 ; это, судя по всему, дальность видимости (расстояние, на котором "обрезается" карта).
fog_distance = 350 ; в DX9 это расстояние, на котором туман фактически "прекращает" действовать. непосредственно дымка, интенсивность которой задаётся fog_density, "висит" в радиусе fog_distance. за пределами этого радиуса часть геометрии "съедается" и вместо неё отображается небо (скайбокс). правильно подобранная текстура неба имитирует вдали клубы тумана. а уже дальше снова проявляется геометрия уровня (холмы и т.д.). в DX8-режиме туман рудиментарен и обсуждать его нет особого смысла.
fog_color = 0.043, 0.043, 0.055 ; непосредственно сам цвет тумана.
fog_density = 0.9 ; это плотность тумана, выставив значение в 0, можно увидеть четкие края карты.
rain_density = 0.2 ; это плотность дождя, действует, видимо, как и туман.
rain_color = 0.21, 0.21, 0.27 ; цвет (непосредственно капель) падающего дождя.
thunderbolt = thunderbolt_collection_default ; это имя заготовки грозы, если грозы не предусмотрено, значение можно оставить пустым.
bolt_period = 4.5f ; это время между вспышками молний. значение прописано не в секундах. В принципе, эмпирически установлено, что в грозовую погоду желательно ставить значения около 20f, в дождливую - в районе 50f.
bolt_duration = 0.35f ; это собственно продолжительность фазы вспышки молнии. выставив высокое значение, можно вовсе получить не молнию, а некое плавно нарастающее свечение.
wind_velocity = 0.0 ; сила ветра.
wind_direction = 0.0 ; направление ветра.
ambient = 0.0425, 0.045, 0.0475 ; общее освещение локации, те тона, в которые она будет окрашена (цвет и интенсивность света фонового освещения там, где не светит солнце - выставив значения в [0,0,0] - получим кромешную тьму в зданиях и под навесами. работает только на R2.
lmap_color = 1.0, 1.0, 1.0 ; видимо, цвет лайтмапа.
hemi_color = 0.0425, 0.045, 0.0475, 0.1 ;по слухам, параметр, идентичный амбиенту, только предназначенный для статичного освещения. насчет четвертой цифры - не в курсе.
sun_color = 0.0, 0.0, 0.0 ; свет солнца, его интенсивность также влияет на тени, если солнце не светит, теней от него не будет.
sun_dir = -18.0, 291 ; положение солнца, первая цифра - это высота, знак минус означает, что солнце выше горизонта. от горизонта до горизонта солнце описывает полукруг, значения в игре соотносятся с градусами, то есть от -0 до -180, зенит -90, вторая цифра определяет положение солнца относительно сторон горизонта, нулевое значение вроде соответствует югу.
env_ambient = ambient_env_rain ; это набор звуков окружения.
Параметры бликов
Находятся в файле flares.ltx. [flares_sun_rise] ; название cекции, параметры которой описываются ниже
flare_opacity = 0.340, 0.260, 0.500, 0.420, 0.260, 0.260 ; непрозрачность каждого отражения, в порядке от дальнего к ближнему.
flare_position = 1.300, 1.000, 0.500, -0.300, -0.600, -1.000 ; позиция каждого отражения на оси, порядок соотв. верхнему.
flare_radius = 0.080, 0.120, 0.040, 0.080, 0.120, 0.300 ; радиус каждого отражения, порядок соотв. верхнему.
flare_textures = fxfx_flare1.tga, fxfx_flare2.tga, fxfx_flare2.tga, fxfx_flare2.tga, fxfx_flare3.tga, fxfx_flare1.tga
; имена текстур, использованных на каждое отражение, порядок аналогичен. можно заметить, что прописан формат *.tga, в действительности используются, как и везде, текстуры *.dds, а вообще - поддержка формата *.tga под вопросом.
flare_shader = effectsflare ; шейдер.
flares = on ; параметр включает или выключает блики, например, для луны - они не уместны.
gradient = on ; параметр, включающий/выключающий ореол вокруг светила, дающий эффект ослепления.
gradient_opacity = 1.0 ; непрозрачность ореола.
gradient_radius = 0.7 ; радиус ореола.
gradient_texture = fxfx_gradient.tga ;имя текстуры ореола.
gradient_shader = effectsflare ; аналогично [flare_shader].
source = on ;параметр, включающий/выключающий отображение источника, то есть самого солнца или луны.
source_radius = 0.03 ; радиус источника.
source_texture = fxfx_sun_rise.tga ;имя используемой для источника текстуры.
source_shader = effectssun ; аналогично [flare_shader].
source_ignore_color = false ; игнорирование цвета источника.
Параметры фонарика
Файл находится по следующему пути: config\models\objects\light_night.ltx [torch_definition]
range = 30 ; дистанция в метрах.
range_r2 = 30 ; дистанция в метрах (для динамического освещения).
color = 0.22,0.22,0.22,0.2 ; цвет, из 4 компонентов <r,g,b,a> значением от 0 до 3.
color_r2 = 1.1,1.1,1.1,0.0 ; цвет, из 4 компонентов <r,g,b,a> значением от 0 до 3 (для динамического освещения).
omni_range = 3 ; дистанция освещения от фонариков неписей в метрах.
omni_range_r2 = 3 ; дистанция освещения от фонариков неписей в метрах (для динамического освещения).
omni_color = 1.0,1.0,1.0,0.1 ; цвет фонариков неписей, из 4 компонентов <r,g,b,a> значением от 0 до 3.
omni_color_r2 = 1.0,1.0,1.0,0.1 ; цвет фонариков неписей, из 4 компонентов <r,g,b,a> значением от 0 до 3 (для динамического освещения).
color_animator = empty ; цвет аниматора (empty - аниматор не используется).
spot_texture = internalinternal_light_torch_r2 ; текстура яркой точки (для динамического освещения).
spot_angle = 45 ; угол освещения в градусах.
glow_texture = glowglow_torch_r2 ; текстура свечения фонарика, когда он направлен в глаза (обязательный параметр).
glow_radius = 0.3 ; радиус свечения в метрах.
guide_bone = lights_bone ; кость, к направлению которой привязывается фонарик (изменять строго не рекомендуется).
Авторы
Статья создана по материалам, предоставленным: Argus Saharov sergy172 Xarvius NightVz GoReLaZ
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Пятница, 11.11.2011, 23:55 | Сообщение # 6 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| Подготовка.
Устанавливаем active perl.
Заходим в папку с программой ggEditor_01.Создаем там папки Cs или Cop(Смотря на какую игру делаете) и папку Soc.В папке Soc создаем папку gamedata и кидаем в нее файл game.graph(Важно чтобы game.graph лежал там, иначе программа не прочитает.) из мода, или от ТЧ.В папке gamedata создаем папку levels и кидаем туда папку с уровнем, который мы хотим портировать. Далее возвращаемся в папку Soc и туда кидаем папку с ACDC для ТЧ, туда же кладём all.spawn.Запускаем соответствующий батник для распаковки all.spawn`а.
Далее в папку ggEditor_01\Cs или Cop, кидаем папку с соответствующим ACDC, опять-же кладем туда all.spawn, распаковываем.
В итоге у нас должно получиться 2 распакованных all.spawn`а, game.graph от ТЧ и папка с переносимым уровнем.
С приготовлениями всё. Основная работа.
Запускаем программу ggEditor.Видим там два окошка. В левом открываем game.graph от ТЧ, а в правом — от ЗП или ЧН(В ЗП и ЧН граф вшит в all.spawn, ищите его там.)(Нужно выбрать тип файлов для ЧН — graph.bin, а для ЗП — все файлы и открыть в папке с ACDC файл section4.bin). В окошках мы видим список уровней. В левом окошке находим нужный нам уровень и нажимаем на соответствующую стрелку для переноса уровня в нужный нам граф. Нажимаем в правом окошке «сохранить».После того, как граф сохранился, можно закрыть программу, она нам больше не понадобится. Потом этого шагаем в папку с ACDC для ЧН\ЗП и удаляем старые файлы section4.bin или graph.bin.Затем переименовываем файлы graph.bin.new или section4.bin.new в graph.bin и соответственно section4.bin.
Далее идем в папку с ACDC от ТЧ, находим там файл alife_наша_локация и копируем его. Затем шуруем в папку с ACDC от ЧН\ЗП, вставляем скопированный нами файл. Открываем этот файл, сносим все, оставляем только одну секцию спавна(Лучше всего если это будет какой-нибудь объект), присваиваем секции номер не меньше 20000, сворачиваем на время этот файл. Далее нужно подогнать вертексы. Для этого запускаем батник ggtool, ждем некоторое время, после чего появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией(в ЧН это скорее всего будет 1620, а в ЗП 934).Далее разворачиваем alife_ файл с нашей локацией, ищем там строку «game_vertex_id» и пишем там число которое появилось рядом с нашей локацией при запуске батника ggtool.Затем обращаем свой взор на строку «level_vertex_id».К исходному значению строки прибавляем число, которое мы записали в строку «game_vertex_id», полученное число записываем. Далее, в добавляемых потом секциях спавна нужно писать эти числа. Мы подогнали вертексы.
Затем открываем файл all.ltx.Вписываем туда свой alife_ файл локации, way_ файлы не трогаем. Меняем на соответствующее число локации строку level_count.
После этого открываем файл alife_zaton(для ЗП) или alife_marsh(для ЧН)и ищем там гг по строке «section_name = actor».Нашли?Отлично. Теперь присваиваем этой секции спавна позицию(новую позицию прописываем также в строке "upd:position = ") и вертексы как у единственного предмета в файле alife_новая_локация. При следующей распаковке, если вы все сделали правильно, наш актор окажется в файле alife_новая_лока.
Мы почти закончили с пробной сборкой новой локации(пока без перехода).
Осталось только прописать наш новый уровень в файл ACDC Cop\acdccop.pl(для ЗП)либо в файле ACDC Cs\stkutils\level.pm.
В этих файлах ищем такие строки(для ЗП):
use constant levels_info => ( { gvid0 => 934, }, { gvid0 => 883, name => 'jupiter_underground' }, { gvid0 => 857, name => 'labx8' }, { gvid0 => 666, name => 'pripyat' }, { gvid0 => 317, name => 'jupiter' }, { gvid0 => 0, name => 'zaton' },
И если у вас число когда мы запускали батник ggtool тоже 934 то прописываем так:
use constant levels_info => ( { gvid0 => 934, name => 'ваша_локация' }, { gvid0 => 883, name => 'jupiter_underground' }, { gvid0 => 857, name => 'labx8' }, { gvid0 => 666, name => 'pripyat' }, { gvid0 => 317, name => 'jupiter' }, { gvid0 => 0, name => 'zaton' },
А в файле level.pm от ACDC ЧН вы увидите такой текст:
use constant levels_info => ( { gvid0 => 1620, }, { gvid0 => 1573, name => 'l12_hospital' }, { gvid0 => 1565, name => 'l11_stancia2' }, { gvid0 => 1524, name => 'l10_limansk' }, { gvid0 => 1511, name => 'l09_agroprom_undeground' }, { gvid0 => 1313, name => 'l08_military' }, { gvid0 => 1212, name => 'l07_yantar' }, { gvid0 => 1057, name => 'l06_agroprom' }, { gvid0 => 961, name => 'l05_red_forest' }, { gvid0 => 743, name => 'l04_darkvalley' }, { gvid0 => 472, name => 'l03_escape' }, { gvid0 => 245, name => 'l02_garbage' }, { gvid0 => 0, name => 'l01_marsh' },
Прописать там свой уровень нужно точно так-же как в файле от ACDC ЗП:
use constant levels_info => ( { gvid0 => 1620, name => 'ваша_локация' }, { gvid0 => 1573, name => 'l12_hospital' }, { gvid0 => 1565, name => 'l11_stancia2' }, { gvid0 => 1524, name => 'l10_limansk' }, { gvid0 => 1511, name => 'l09_agroprom_undeground' }, { gvid0 => 1313, name => 'l08_military' }, { gvid0 => 1212, name => 'l07_yantar' }, { gvid0 => 1057, name => 'l06_agroprom' }, { gvid0 => 961, name => 'l05_red_forest' }, { gvid0 => 743, name => 'l04_darkvalley' }, { gvid0 => 472, name => 'l03_escape' }, { gvid0 => 245, name => 'l02_garbage' }, { gvid0 => 0, name => 'l01_marsh' },
Всё.Собираем all.spawn. Сборка геймдаты.
Осталось собрать gamedat`у для игры и смотреть что получилось. Итак, приступим:
В папке с игрой создаем папку gamedata, а в ней папки configs, levels, spawns.В папку spawns ложим получившийся при сборке all.spawn.new(или new.spawn), не забывая переименовать его в all.spawn.В папку levels ложим уровень из ggEditor_01\Soc\gamedata\levels\ваша_локация.Затем заходим в папку с уровнем, удаляем файл level.ai и переименовываем файл level.ai10 в level.ai.
Теперь осталось только прописать уровень в конфигах.Из распакованной геймдаты игры берем файлы configs\game_graphs.ltx, game_levels.ltx, game_maps_single.ltx.
game_graphs.ltx для ЧН должен выглядеть так:
[location_0] 000 = "..." 001 = "эскейп" 002 = "свалка" 003 = "агропром" 004 = "агропром-подземка" 005 = "темная долина" 006 = "лаборатория X-18" 007 = "даркскейп" 008 = "Бар" 009 = "Росток" 010 = "Янтарь" 011 = "лаборатория X-16" 012 = "Милитари" 013 = "Мертвый город" 014 = "Радар" 015 = "Радар бункер" 016 = "Припять" 017 = "станция АЭС" 018 = "ваша_локация" [location_1] 000 = "..." 001 = "ограниченный доступ" 002 = "запрещенный доступ" [location_2] 000 = "..." 001 = "не для игрока" [location_3] 000 = "..." 001 = "ваша_локация"
game_graphs для ЗП должен выглядеть так:
[location_0] 000 = "..." 001 = "ваша_локация" 002 = "sim_smart_2" 003 = "sim_smart_3" 004 = "sim_smart_4" 005 = "sim_smart_5" 006 = "sim_smart_6" 007 = "sim_smart_7" 008 = "sim_smart_8" 009 = "sim_smart_base" [location_1] 000 = "..." 001 = "ограниченный доступ" 002 = "запрещенный доступ" [location_2] 000 = "..." 001 = "не для игрока" [location_3] 000 = "..." ... . ....................... 112 = "pri_a22_smart_terrain" 113 = "pri_a25_smart_terrain" 114 = "pri_a28_arch" 115 = "pri_a28_base" 116 = "pri_b28_evac" 117 = "pri_a28_heli" 118 = "pri_a28_school" 119 = "pri_a28_shop" 120 = "pri_b301" 121 = "pri_b302" 122 = "pri_b303" 123 = "pri_b304_monsters_smart_terrain" 124 = "pri_b305_dogs" 125 = "pri_b306" 126 = "pri_b307" 127 = "pri_b35_mercs" 128 = "pri_b35_military" 129 = "pri_b36_smart_terrain" 130 = "pri_sim_1" 131 = "pri_sim_2" 132 = "pri_sim_3" 133 = "pri_sim_4" 134 = "pri_sim_5" 135 = "pri_sim_6" 136 = "pri_sim_7" 137 = "pri_sim_8" 138 = "pri_sim_9" 139 = "pri_sim_10" 140 = "pri_sim_11" 141 = "pri_sim_12" 142 = "ваша_локация" [graph_points_draw_color_palette] default = 0x6000ffff 000_000_000_000 = 0x60ff00ff
Далее лезем в game_levels.ltx. Там в самом начале, где список уровней, вписываем "level183"(число не менее 183.) Листаем файл до самого конца и в конце пишем следующее:
[level183] name = ваша_локация caption = "ваша_локация" offset = 700.0, 1000.0, -840.0 weathers = [default] id = 183
Затем открываем файл game_maps_single.ltx и прописываем свой уровень в секции "[level_maps_single]", а затем создаем примерно такую секцию для нашего уровня:
[ваша_локация] global_rect = 307.0, 90.0, 717.0, 500.000000 weathers = dynamic_default
Всё.Запускайте игру и пробуйте, что получилось.
Соединение с остальными уровнями.
Предлагаю вам не терять зря времени просто бегая по подключенной локации, а замерить координаты для создания перехода.Координаты будем снимать на 2-х локациях:на подключенной и на той на которую вы хотите сделать переход соответственно.На каждой локации нам нужно снять по две координаты(координата самого перехода и координата места в которое будет бросать при переходе с второй локации, вторую координату делаем на пару метров дальше, потому как если сделать близко, то сразу же будет кидать обратно, на локацию с которой переходим.).Как снять координаты, я думаю все знают, поэтому объяснять здесь не буду.
Мы отмерили все необходимые нам координаты.
Затем распаковываем сделанный нами ранее all.spawn.Теперь в нужных нам локациях, в alife_ файлах добавляем следующую секцию спавна:
[1] ; cse_abstract properties section_name = level_changer name = escgar_level_changer - уникальное имя position = 28.060224533081,16.556184768677,685.80151367188 - координаты перехода direction = 0,0,0 cse_abstract__unk1_h16 = 0x1 ; cse_alife_object properties game_vertex_id = 1142 - геймвертексы distance = 0 level_vertex_id = 308110 - геймвертексы object_flags = 0xffffff3e ; cse_shape properties shapes = shape0 shape0:type = box shape0:axis_x = 1.25219917297363,0,0 shape0:axis_y = 0,3.09340000152588,0 shape0:axis_z = 0,0,1.25219917297363 shape0:offset = 0,0,0 ; cse_alife_space_restrictor properties restrictor_type = 3 ; cse_alife_level_changer properties dest_game_vertex_id = 1187 - вертексы локи на которую ведет переход dest_level_vertex_id = 212769 - вертексы локи на которую ведет переход dest_position = 39.396331787109,0.48722490668297,-299.7674505469 - позиция куда кидает dest_direction = 0,0,0 - поворот гг dest_level_name = l02_garbage - на какую локу кидает dest_graph_point = start_actor_01 silent_mode = 1 ; se_level_changer properties
Изменяем только те места, которые я прокомментировал, комментарии соответственно, удаляем. Всё готово.Собираем all.spawn и запихиваем в игру.
Убедительная просьба к начинающим модмейкерам.Пожалуйста, если вы только начали заниматься модами, то я вам настоятельно не советую заниматься подключением локаций.Наберитесь опыта, подучитесь элементарному.Я вас учить этому не подписывался.
Да и еще.Если будете переносить секции спавна, то для массовой замены гейм вертексов и левел вертексов можно использовать блокнот: открываем наш файл в блокноте=> правка=> заменить, и пишем что на что заменять.
Автор статьи: БАТЯ-STALKER
О способе подключения поведал: джЭдай (ака Panisher)
Если у вас что-то не получается или появились вопросы, есть тема на форуме.
Далее нужно подогнать вертексы. Для этого запускаем батник ggtool, ждем некоторое время, после чего появляются имена локаций, а рядом с ними числа. Смотрим это число рядом с нашей локацией(в ЧН это скорее всего будет 1620, а в ЗП 934).Далее разворачиваем alife_ файл с нашей локацией, ищем там строку «game_vertex_id» и пишем там число которое появилось рядом с нашей локацией при запуске батника ggtool.Затем обращаем свой взор на строку «level_vertex_id».К исходному значению строки прибавляем число, которое мы записали в строку «game_vertex_id», полученное число записываем. Далее, в добавляемых потом секциях спавна нужно писать эти числа. Мы подогнали вертексы.
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Воскресенье, 13.11.2011, 13:56 | Сообщение # 7 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| прога для создания однотипных квестов очень проста в управлении и с примерами
|
|
| | | Кол-во символов:
11
| |
Avery | Дата: Воскресенье, 13.11.2011, 16:14 | Сообщение # 8 |
Ст. Лейтенант
Группа: Долг
Сообщений: 149
Награды: 21
Репутация: 10
Статус: Offline
| у меня крыша поехала
"Зона сама рассудит, кто отмычка, кто шакал, а кто легенда зоны." - Дмитрий Силов "Закон Снайпера" Мои новые рассказы, читать всем! Просьба оставлять комментарии! Часть 1 Часть 2
|
|
| |
GoReLaZ | Дата: Воскресенье, 13.11.2011, 22:04 | Сообщение # 9 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| ну кому что)))
|
|
| | | Кол-во символов:
11
| |
Андрюха-Пулемётчик | Дата: Воскресенье, 13.11.2011, 22:50 | Сообщение # 10 |
Пулемётчик
Группа: Долг
Сообщений: 524
Награды: 18
Репутация: 30
Статус: Offline
| И не лень столько писать?А бы запарился и бросил. А вообще вопрос: я с модами вообще не дружу( вернее с модостроением ), поетому спрашиваю : как создавать файлы форматов: spawn, xml ,ltx? Как ?
[img]http://nick-name.ru/forum....mg]
|
|
| |
GoReLaZ | Дата: Воскресенье, 13.11.2011, 23:11 | Сообщение # 11 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| Андрюха-Пулемётчик, смотри моно поискать проги для создания таких файлов а мона создать тхт но само слово тхт в названии неписать а втавить spawn, xml ,ltx и прочее главное не как создать а как открыть и запустить чтоб работало
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Воскресенье, 13.11.2011, 23:13 | Сообщение # 12 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| но для того штоботкрыть и работало нуны проги
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Воскресенье, 13.11.2011, 23:18 | Сообщение # 13 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| и я не всё писал сам некоторые статьи брал с других сайтов некоторые сам
|
|
| | | Кол-во символов:
11
| |
GoReLaZ | Дата: Воскресенье, 13.11.2011, 23:20 | Сообщение # 14 |
Лейтенант
Группа: Долг
Сообщений: 52
Награды: 3
Репутация: 3
Статус: Offline
| Используя прогу acdc от bardak'a декомпилим all.spawn
|
|
| | | Кол-во символов:
11
| |
Макс_Лис | Дата: Понедельник, 14.11.2011, 17:38 | Сообщение # 15 |
Бродяга
Группа: Одиночки
Сообщений: 1116
Награды: 159
Репутация: 131
Статус: Offline
| Кто им один хочет заниматься ?! Бред блин.
Люблю три вещи,запах ели,осень и её....Зону...
|
|
| | | Кол-во символов:
11
| |
|
Топ пользователей | | | ТаченкоПостов: 2566 Репутация: 174 Файлов: 7 | | | КальтерПостов: 1233 Репутация: 77 Файлов: 0 | | | Макс_ЛисПостов: 1116 Репутация: 131 Файлов: 0 | | | СнайперПостов: 1012 Репутация: 91 Файлов: 7 | | | ХимикПостов: 746 Репутация: 128 Файлов: 0 | | | ЛабусПостов: 665 Репутация: 25 Файлов: 2 | |
Партнеры |
|
|