Главная » 2012 » Февраль » 23 » Модостроительство
11:34
Модостроительство
Как создать новую группировку??

Создание новой группировки

Содержание
1 Новая группировка
2 Практика 
2.1 Базовый уровень
2.2 Продвинутый уровень 
2.2.1 Квесты
2.2.2 Вступление в группировку
2.2.3 Новые NPC
3 Авторы


Новая группировка

Сегодня мы создадим новую группировку. Назовем её, скажем, "Ветер". Не суть важно. 

Практика

Базовый уровень

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

мир= 0, 0, 0, 700, 0, 0, 0, 1000, 100, 0, 0, 0, -5000, 0, 0, 100, 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,<мир, 20> 

Отсчет идет построчно начиная сверху. Хотя есть небольшой нюанс. У первых трех строк - нумерация начинается с нуля, с остальных группировок она идет как надо. Для 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

мир = 0.1 2. После этого в файле death_manager.script ищем строку local community_list и в скобках добавляем название своей группировки: 
function init_drop_settings()
local community_list = { "stalker", "dolg", "freedom", "bandit", "military", "zombied", "ecolog", "killer", "monolith", 
"arena_enemy", "actor_dolg", "wind" }
, "мир" }</pre> 

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

[мир]: stalker bread = 0 kolbasa = 0 vodka = 0 energy_drink = 0.3 </pre> 4. Если предусматривается респавн бойцов новой группировки, в se_respawn.script прописываем в local simMaxCount = { после строчек с зомбированными сталкерами строку: 
wind_novice = 20, wind_regular = 20, wind_veteran = 20, wind_master = 6,

мир novice =30, мир_regular =20, мир_veteran =20, мир_master =10 5. Чтобы при убийстве непися новой группировки игра не вылетала в xr_statistic.script, 

после строки: 
zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,
пишем

<pre>dark_stalker_novice = 1, dark_stalker_experienced = 2, dark_stalker_veteran = 3, dark_stalker_master = 4,


6. Ну а в character_desk_x.xml выбираем любого NPC (или группу) и меняем группировку на свою: 

<мир> <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> [...]</pre> 

7. Чтобы у персонажа в графе "Группировка" отображалось не "wind", а "Ветер", зарегистрируем соответствующую строку в файле string_table_general.xml: 
<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>[tm_trader_diolog]_dialog</actor_dialog>
<actor_dialog>[tm_wolf_diolog]_reward</actor_dialog>

Примеры названий: tm_trader_dialog, tm_wolf_dialog... 

Внимание! Метод не проверен. 

Этим мы добавили ему ветку диалога "Есть работа?", а также ветку для награды за квест/отказа от него. Теперь зарегистрируем в task_manager.ltx набор новых заданий. 
[list]

[...]

;--------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_task</precondition>
    </dialog>

Соответственно, пройдем туда, куда указывает строка task_manager.init_dolg_task_dialog - в task_manager.script: 
function init_dolg_task_dialog(dlg)  
get_random_task():init_task_dialog(dlg, "dolg")

По аналогии делаем и с нашим "Ветром". 

Вступление в группировку

Реализуем возможность вступления в группировку. 

Прописываем в dialogs.script такие 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

Лучше всего всё вышеприведенное повесить на нового, уникального персонажа. Способ его спавна описан здесь. 


Просмотров: 208 | Добавил: StalkerModer | Рейтинг: 5.0/1
Всего комментариев: 3
3 StalkerModer  
0
Как создать артефакт????

Сегодня мы на примере научимся созданию новых артефактов. Создадим, например, артефакт под названием "Ромашка".

Статья написана по материалам Hunter Mod.
Создание конфига

Заходим в папку gamedata\config\misc и открываем файл artefacts.ltx.
И находим, например, артефакт "Медуза":
[af_medusa]:af_base
GroupControlSection = spawn_group
$spawn = "artifacts\moscito medusa"

$prefetch = 64
cform = skeleton
class = ARTEFACT

visual = physics\anomaly\artefact_blackdrip.ogf
description = enc_zone_artifact_af-medusa
inv_name = af-medusa
inv_name_short =
inv_weight = 0.5

inv_grid_x = 9
inv_grid_y = 4

cost = 1000

jump_height = .5

particles = anomaly2\artefact\artefact_gravi

lights_enabled = false

;скорости увеличения (уменьшения)
health_restore_speed = 0.0
radiation_restore_speed = 0.0005
satiety_restore_speed = 0.0
power_restore_speed = 0.0
bleeding_restore_speed = 0.0
hit_absorbation_sect = af_medusa_absorbation

artefact_activation_seq = af_activation_bold

[af_medusa_absorbation]
burn_immunity = 1.0 ;коэффициенты иммунитета
strike_immunity = 1.0
shock_immunity = 1.0
wound_immunity = 1.0
radiation_immunity = 1.0
telepatic_immunity = 1.0
chemical_burn_immunity = 1.0
explosion_immunity = 1.0
fire_wound_immunity = 0.98

В этой секции задаются параметры артефакта, начиная от внешнего вида и заканчивая коэффициентами различных эффектов вроде вывода радиации. Сделаем копию секции, принадлежающей "Медузе", и заменим её название с af_medusa на af_romashka.

Должно выйти примерно вот так:
[af_romashka]:af_base
GroupControlSection = spawn_group
$spawn = "artifacts\moscito romashka"

$prefetch = 64
cform = skeleton
class = ARTEFACT

visual = physics\anomaly\artefact_blackdrip.ogf
description = enc_zone_artifact_af-romashka
inv_name = af-romashka
inv_name_short =
inv_weight = 0.5

inv_grid_x = 9
inv_grid_y = 4

cost = 1000

jump_height = .5

particles = anomaly2\artefact\artefact_gravi

lights_enabled = false

;скорости увеличения (уменьшения)
health_restore_speed = 0.0
radiation_restore_speed = 0.0005
satiety_restore_speed = 0.0
power_restore_speed = 0.0
bleeding_restore_speed = 0.0
hit_absorbation_sect = af_romashka_absorbation

artefact_activation_seq = af_activation_bold

[af_romashka_absorbation]
burn_immunity = 1.0 ;коэффициенты иммунитета
strike_immunity = 1.0
shock_immunity = 1.0
wound_immunity = 1.0
radiation_immunity = 1.0
telepatic_immunity = 1.0
chemical_burn_immunity = 1.0
explosion_immunity = 1.0
fire_wound_immunity = 0.98

Назначение некоторых параметров, влияющих на одевшего артефакт:
health_restore_speed - прирост к скорости восстановления здоровья
radiation_restore_speed - прирост скорость вывода радиации
satiety_restore_speed - прирост к голоду
power_restore_speed - прирост к выносливости
bleeding_restore_speed - прирост к скорости остановки кровотечений
Создание описания и имени артефакта

Заходим в gamedata\config\text\rus и открываем файл string_table_enc_zone.xml. Добавим туда строку с названием артефакта.
<string id="af-romashka">
<text>"Ромашка"</text>
</string>

Теперь у артефакта есть имя, но одного его недостаточно. Нужно сделать описание.
Поэтому добавим и его.
<string id="enc_zone_artifact_af-romaska">
<text>Очень странный артефакт. Впервые появился в Зоне где-то в 2011 году, но толку от него - ноль. Ученые
не обнаружили никакого влияния артефакта на организм носителя.</text>
</string>

Все, поздравляю, вы только что создали свой первый артефакт! smile

2 StalkerModer  
0
В этой статье я расскажу как создавать новые предметы:

Для начал находим файл items.ltx, находящийся в папке config/misc/, и копируем какой-нибудь предмет, я, например, взял:

[bread]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency =
$spawn = "food and drugs\bread"
;$prefetch = 32
class = II_FOOD
cform = skeleton
visual = weapons\bred\bred.ogf
description = enc_equipment_food_bread1

inv_name = Bread
inv_name_short = Bread
inv_weight = 0.3 ;0.2

inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 11
inv_grid_y = 9
cost = 20

attach_angle_offset = -0.287979, 1.560923, 1.544060
attach_position_offset = 0.096910, -0.013594, 0.107925
attach_bone_name = bip01_r_hand
auto_attach = false

// should be deleted after update
bone_name = bip01_r_hand
position_offset = 0.0,0.0,0.0
angle_offset = 1.570790,1.570790,3.92699

; eatable item
eat_health = 0.05
eat_satiety = 0.2
eat_power = 0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = -1

; food item
slot = 4
animation_slot = 4

;hud item
hud = wpn_vodka_hud

Вставляем его копию в конец, меняем название:

[bread]

На:

[test]

А также:

inv_name = Bread
inv_name_short = Bread

На:

inv_name = test
inv_name_short = test

И description = enc_equipment_food_bread1 на description = enc_equipment_food_bread1_test

И, также, "по желанию":

eat_health = 0.05 eat_satiety = 0.2 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = -1

Всё, в item.ltx работа закончена, теперь переходим к редактированию описания, открываем string_table_enc_equipment "Блокнотом". Что мы там видим: все описания и названия прописаны по тегам:

<string id="название из inv_name">

Название в игре

</string>

И:

<string id="описание из description">

Описание в игре

</string>

Пишем:

<string id="test">

Тестовый предмет

</string>

И:

<string id="enc_equipment_food_bread1_test">

Тестовый предмет, разработанный в сверхсекретных лабораториях Зоны smile

</string>

Сохраняем... Все! Основная работа завершена! Теперь добавим предмет торговцам, например, Сидоровичу.

Открываем trade_trader из папки config/misc (работа с ним подробно описана в этой статье), прописываем:

test = 0.3, 0.5

В секции:

[trader_generic_buy]

И далее в:

[supplies_start]

test = 10, 1

В [supplies_after_fabric]

test = 10, 1

В [trader_start_sell]

И в:

[trader_after_fabric_sell]

test = 1. 3

Сохраняем, запускаем игру, торгуем с Сидоровичем и видим у него два вида хлеба: один из них - наш biggrin

1 StalkerModer  
0
Как создать НПС????

Для того, чтобы создать нового НПС нам понадобятся координаты нужного места, где и будет заспаунен наш NPC. Возьмём Кордон, лагерь новичков. Можете снять координаты сами, а можете взять мною уже снятые: (-218.20,-20.2,-145.63),35362,47). Далее. Создаём файл в папке gamedata/scripts файл, скажем esc_unik_npc.script. В нём создаём функцию. Код: function esc_unik_npc () alife():create("esc_unik_npc",vector():set(-218.20,-20.2,-145.63),35362,47) end

Теперь мы в файле npc_profile.xml (в папке gameplay) добавляем нашего НПС. Код: <character id="escape_trader"> <class>Trader</class> <specific_character>escape_trader</specific_character> </character>

<character id="esc_unik_npc"> <class>esc_unik_npc</class> <specific_character>esc_unik_npc</specific_character> </character>

Копируем или создаём по образцу только нижний блок Второго торговца нам ненадо. Теперь моздадим секцию нашего персоонажа. В файле spawn_section.ltx (gamedata/config/creatures) в блоке:

--------Escape--------------
--------neutrals------------

Создаём секцию. Код: [esc_unik_npc]:stalker $spawn = "respawn\esc_unik_npc" character_profile = esc_unik_npc spec_rank = regular community = dolg

В строке community можете вместо долга вписать другую группировку. Однако если мы хотим, чтоба наш персоонаж не гулял по Зоне, пока не наткнётся на первуюю аномалию, то пропишем чтобы он стоял на месте. Для этого под community вставляем: custom_data = scripts\esc_unik_npc.ltx Далее создаём в gamedata/config папку scripts в в папке создаём файл esc_unik_npc.ltx В наш созданый файл вставляем: Код: [logic] active = remark1 danger = danger_ignore

[danger_ignore] ignore_distance = 5

[remark1] no_move = true

Всё наш НПС будет стоять на месте своего спауна. Едем дальше. Нам надо активировать нашего персоонажа. для этого мы должны вставить строку: <action>esc_unik_npc.esc_unik_npc</action> Либо в диалог, либо в какой-нибудь квест. Давайте вставим строку в файл info_portions.xml (gamedata/gameplay) под Код: <game_information_portions>

<info_portion id="storyline_actor_start">
<task>storyline_eliminate_gunslinger</task>

Выклядеть это будет так:

Код: <game_information_portions>

<info_portion id="storyline_actor_start">
<task>storyline_eliminate_gunslinger</task>
<action>esc_unik_npc.esc_unik_npc</action>
</info_portion>

Однако мы не прописали самого НПС, как личность В файле character_desc_escape.xml (gamedata/gameplay) добавляем: Код: <specific_character id="esc_unik_npc" team_default = "1"> <name>GENERATE_NAME_bandit</name> <icon>ui_npc_u_stalker_bandit_3</icon> <bio>esc_wolf_bio</bio>

<class>esc_otbrosi_1</class> <community>dolg</community> <terrain_sect>stalker_terrain</terrain_sect>

<rank>367</rank> <reputation>-60</reputation> <money min="600" max="2000" infinitive="1"/>

<snd_config>characters_voice\human_01\monolith\</snd_config> <crouch_type>-1</crouch_type>

<visual>actors\bandit\stalker_bandit_3</visual> <supplies> [spawn] \n

wpn_groza \n

ammo_9x39_pab9 \n

1. include "gameplay\character_items.xml" \n
2. include "gameplay\character_food.xml"

</supplies>

1. include "gameplay\character_criticals_3.xml"

1. include "gameplay\character_dialogs.xml"

</specific_character>

Правда тут получится у нас долговец в одежде бандита и говорящего голосом монолитовца xD Всё сохроняем. НПС готов.

Но так же можно добавить нашему НПС диалог) Как добавлять диалоги написано в нашем факе) Если хотяте сделать нашему НПС своё имя то в файле stable_bio_name.xml (gamedata/config/text/rus) добавляем: Код: <string id="esc_unik_npc"> <text>Факер-мазафакер</text> </string>

А в файле сharacter_desc_escape.xml (gamedata/gameplay) находим нашего уже прописаного НПС и вставляем в секцию <name></name> (у нас в ней написано GENERATE_NAME_bandit) esc_unik_npc Всё Поздравляю)

Имя *:
Email *:
Код *:

Меню

Категории раздела

Чат

Часы

Опрос
Какая часть лучше?
Всего ответов: 25

Вход на сайт

Создать бесплатный сайт с uCoz