Мини-Чат
Правила мини-чата
Соцопрос
Кто ты посетитель нашего сайта?
1. Я мега игрок в МП игры Paradox.
2. Я вобще молча читаю.
3. Я захожу по старой памяти иногда, ничего не пишу.
4. Я пишу в темах игр Paradox, обо всем по немногу
5. Я просто мимо шел, отношения к сайту не имею.
6. Я супер писатель ААРов.
Всего ответов: 186
Minecraft HoI2games
Раздел MineCraft HoI2games
[Начать играть]
обновлено 20.05.15
Карта сервера
Адрес сервера:
srv24.minecraft-hosting.ru:25774
Рейтинг ААР-щиков
Радио HoI2games
Радио онлайн
Файлы
[15.10.2014][Аддоны]
DLC «Charlemagne» («Карл Великий»)
Всего комментариев:(0)
Добавил: Роммель
[10.04.2013][Моды]
Techno_mod v0.2
Всего комментариев:(6)
Добавил: Strateg_wowa
[05.04.2013][Моды]
Tehno_mod v0.1 альфа
Всего комментариев:(2)
Добавил: Strateg_wowa
[17.11.2012][Моды]
A Game of Thrones (Игра престолов)
Всего комментариев:(0)
Добавил: Sainttony
[05.11.2012][Игра]
Крестоносцы 2 v1.07b + полный пак dlc + русификатор
Всего комментариев:(3)
Добавил: Sainttony
[05.11.2012][Русификаторы]
Перевод CK II v1.07b
Всего комментариев:(0)
Добавил: Sainttony
[01.11.2012][Патчи]
Патч 2.31 ( Англоязычная версия )
Всего комментариев:(0)
Добавил: Slavker
[ Личные сообщения () · Новые сообщения · Участники · Правила форума · Поиск · ]
  • Страница 1 из 1
  • 1
Форум » День Победы 2 (Hearts of Iron II) » Гильдия День Победы 2 (Hearts of Iron II) » Учебник по модингу. Урок №1. Редактирование событий.
Учебник по модингу. Урок №1. Редактирование событий.
OtshelnikДата: Суббота, 04.06.2011, 13:33 | Сообщение # 1
Сообщений: 2972
Украина
Дата регистрации: 08.06.2010
Статус: Offline
Награды: 5
ВМЕСТО ПРЕДИСЛОВИЯ

Все события (ивенты) находятся в папке по адресу C:\ХОИ2\db\events
Перед редактированием событий не забывайте делать резервную копию оригинала. Если вы написали совершенно новое событие, которого раньше не было, можете его либо бросить в один из существующих файлов, либо создать свой и бросить его в ту же папку с ивентами. Однако в таком случае нужно иметь ввиду несколько моментов: во-первых, название файла нужно писать латинскими буквами; во-вторых, о добавлении нового файла нужно сообщить игре в служебном файле "events", который лежит по адресу C:\ХОИ2\db\; в-третьих, чтобы новый файл заработал, нужно начать новую игру, так как в сейвах старых игр прописан другой набор файлов.
Чтобы легче было ориентироваться в файле с ивентами, можно делать для себя разные пометки. Например перед ивентом сделать шапку такого вида:
################################################
#### Независимость Индонезии из рук японцев ####
################################################
Таким образом вы сразу поймете, что это за событие и не нужно будет вчитываться в код. В самом теле события также можно делать пометки:
control = { province = 14 data = ENG } # Ливерпуль
Таким образом сразу становится понятно, о какой провинции идет речь.
Важно, чтоб все эти пометки обрамлялись символом "#". Это знак комментария, все, что идет после него до конца строки, не учитывается. Так что можете после него хоть поэму написать, главное не меняйте строку.

ШАПКА СОБЫТИЯ

Каждое событие имеет форму:
event = { - это начало текста события
} - это конец текста события, закрывающая скобка стоит в САМОМ конце

Следующая строка "id = 3200" – идентификатор события, должен быть уникальным (не должно быть двух событий с одинаковыми идентификаторами). Число должно быть неотрицательным целым. Никаких других ограничений нет. Но для удобства нумерации парадоксы выделили себе на каждую группу событий (для страны или несколько связанных между собой событий) по 100 чисел. Например, для Японии выделили числа 38хх, а для СССР 26хх. Вы можете выбирать любые числа, главное чтоб не повторить существующие. Вот здесь есть неполный список ивентов для ДП ПС. Можно ориентироваться на него. Также можно попытаться вызвать ивент с интересущим вас номером в самой игре через консоль. Если не появится, значит номер свободен.

Следующая строка "random = no/yes". Определяет является ли событие случайным или нет. Неслучайные события происходят как только выполняются условия (с задержкой, см. ниже) и только один раз. Случайные события происходят в случайные моменты времени (при выполнении условий) и могут происходить по несколько раз. Абсолютное большинство событий являются не случайными.

Следующая строка "country = FIN" – определяет страну, в которой происходит событие. Тэг (3-хбуквенное слово определяющее страну) можно узнать в файле world_names.csv по адресу C:\ХОИ2\config. Строка необязательная, для событий которые могут произойти в любой стране (например случайные шпионские) не требуется.

Следующая строка "persistent = yes" – событие может произойти несколько раз. Если вы создаете одноразовый ивент, строка не нужна.

УСЛОВИЯ СОБЫТИЯ

Чтобы событие происходило, когда нужно, а не как попало, уделите особое внимание условиям, при которых оно появится. Блок условий начинается со строчки
trigger = {
и обязательно заканчивается закрывающей скобкой
}
Разных типов условий, которые могут быть помещены в триггер, довольно много и описывать их все нет нужды. Просто посмотрите, как выглядят триггеры уже существующих событий и вы быстро разберетесь. Список всех триггеров можно посмотреть в начале файла "event commands", до строки "COMMANDS:". Файл лежит в папке с ивентами.

Остановлюсь лишь на общих конструкциях построения триггера. Итак.
Простой триггер:
Code

trigger = {
                          war = { country = GER country = SOV }
                          control = { province = 1418 data = TAN } # Kyzyl
                          alliance = { country = SOV country = TAN }
}

Как видим, чтобы событие произошло, нужно во-первых, СССР воюет с Германией, во-вторых, Тува контролирует провинцию Кызыл (собственно это ее единственная провинция), в-третьих, СССР и Тува являются союзниками. Чтобы событие произошло все три условия должны быть выполнены на данный момент времени. Если хоть одно из них не выполнено, событие не произойдет. В примере поставлено только три условия, но их может быть сколь угодно много.

Отрицание:
Очень часто в триггере приходится указывать не только, когда событие должно произойти, но и когда оно не должно произойти (или чего не должно быть, чтоб оно произошло). Для этого используется конструкция
NOT = { }.
Например:
Code

trigger = {
                          atwar = no
                          war = { country = GER country = SOV }
                          war = { country = GER country = ENG }
                          NOT = {
                      alliance = { country = BRA country = GER }
                      alliance = { country = BRA country = ENG }
                      alliance = { country = BRA country = SOV }
                          }
}

Это триггер события для Бразилии. Как видим, событие произойдет, если, во-первых, Бразилия не находится в состоянии войны с кем-либо, во-вторых, Германия одновременно воюет с Англией и с СССР, в-третьих, Бразилия НЕ состоит в союзе с Германией, Англией или СССР. Если Бразилия будет иметь союз хотя бы с одним из них, событие не произойдет.

Альтернативность:
Иногда любой простой триггер будет слишком конкретен и появление события попадет в зависимость от слишком специфической, слишком конкретной ситуации в игре, которая не всякий раз складывается. Чтобы прописать несколько вариантов условий используется блок OR = { } , который означает "или"
Например:
Code

trigger = {
                         event = 2657 # Объявлена Великая отечественная война.
                         lost_national = { country = SOV value = 7 }
                         OR = {
                    NOT = { control = { province = 189 data = SOV } } # Novgorod
                    NOT = { control = { province = 219 data = SOV } } # Smolensk
                    NOT = { control = { province = 238 data = SOV } } # Kiev
                    NOT = { control = { province = 253 data = SOV } } # Sevastopol
                    NOT = { control = { province = 1372 data = SOV } } # Владивосток
                         }
}

Это триггер события за СССР. Как видим, событие произойдет, если, во-первых, уже произошло событие "Великая отечественная война", во-вторых, СССР потерял 7% национальных провинций, в-третьих, не контролирует одну из указанных провинций. Он может не контролировать их все, но это слишком специфическая ситуация, чтоб ее прописывать в триггере, поэтому здесь прописана потеря хотя бы одной из них.

Одновременность:
Как уже говорилось в описании простого триггера, чтоб событие произошло, нужно одновременное выполнение всех его условий. Но иногда приходится специально указать, что каккие-то условия должны быть одновременно выполнены, независимо от остальных условий. Обычно такая необходимость возникает в сложных триггерах. Для этого используется блок AND = { }.
Например:
Code

trigger = {
                        NOT = { event = 2657 }
                        OR = {
                      AND = {
                         year = 1942
                         month = 5 # June
                       }
                       lost_national = { country = SOV value = 8 }
                       AND = {
                         ai = yes
                         OR = {
                         war = { country = SOV country = GER }
                         war = { country = SOV country = JAP }
                         war = { country = SOV country = CHI }
                         war = { country = SOV country = ENG }
                         war = { country = SOV country = USA }
                         war = { country = SOV country = FRA }
                         }
                       }
                         }
}

Перед нами весьма сложная конструкция и в ней важно не запутаться.
Code

trigger = { ### начало триггера
                        NOT = { event = 2657 } ### не произошло событие 2657 (ВОВ)
                        OR = { ### пошел блок альтернативности, для его выполнения достаточно одного из вариантов, которий и должен выполнятся вместе с отсутствием события ВОВ
                    AND = { ### блок одновременности, то что внутри него должно выполнятся вместе. Это 1-й вариант блока "OR = {". То есть если на данный момент игры 5 июня 42 года и не объявлена ВОВ, событие произойдет, не зависимо от остальных условий.              
                           year = 1942
                           month = 5 # June
                    } ### конец блока одновременности
                    lost_national = { country = SOV value = 8 } ### 2-й вариант блока "OR = {". То есть если на данный момент игры СССР потерял 8% нац.пров и не объявлена ВОВ, событие произойдет, не зависимо от остальных условий.
                    AND = { ### 2-й блок одновременности, 3-й вариант для блока "OR = {". Если его содержимое (страной управляет АИ и идет война СССР или с Германией, или с Японией, или с Китаем, или с Англией, или с США, или с Францией) выполнено и не обьявлена ВОВ, событие произойдет.
                          ai = yes ### страной управляет Аи
                          OR = { ### и ведет войну хотя бы с одной из упомянутых стран
                     war = { country = SOV country = GER }
                     war = { country = SOV country = JAP }
                     war = { country = SOV country = CHI }
                     war = { country = SOV country = ENG }
                     war = { country = SOV country = USA }
                     war = { country = SOV country = FRA }
                          }
                     }
                        }
}

А теперь словами. Чтоб событие произошло нужно:
1) Не произошло событие 2657
2) Выполнено любое из следующих условий
а) и 1942 год
и 5 июня
б) потеря 8% провинций
в) и управление АИ
и выполнение любого из условий
I) война СССР с Германией
II) война СССР с Японией
III) война СССР с Китаем
IV) война СССР с Англией
V) война СССР с США
VI) Война СССР с Францией

Чтоб не запутаться, где какой блок заканчивается, правильно расставляйте закрывающие скобки на строке. Технически не важно, где она будет стоять - в начале строки, в середине, или в конце. Но для наглядности ставте ее точно под первой буквой блока. К сожалению, не могу проиллюстрировать, так как на форуме строки кода сбиваются. И всегда следите, чтобы количество открывающих скобок точно соответствовало количеству закрывающих, и стояли они на своих местах. Именно с этим связано абсолютное большинство ошибок.

ВРЕМЯ СОБЫТИЯ И ОПИСАНИЕ СОБЫТИЯ

Любому событию нужно задать временные рамки, когда оно может произойти. Большинство событий можно сделать доступными от самого старта игры до самого конца. Но некоторые события лучше ограничить во времени, чтоб не возникало глупых ситуаций. Кроме того нужно назначить частоту, с которой игра будет проверять выполняемость события по триггеру. Стандартный блок со временем выглядит так:
Code

date = { day = 1 month = january year = 1940 }
offset = 30
deathdate = { day = 30 month = december year = 1945 }

Первая строка - это дата, начиная с которой событие в принципе может произойти.
Вторая строка - частота проверки условий. Чем больше число, тем реже проверяются условия и тем больше времени пройдет с момента выполнения всех условий прежде, чем событие произойдет.
Третья строка - дата, после которой событие уже не может произойти.

Имейте ввиду, что чем чаще игра будет проверять триггеры, тем больше нагрузка на компьютер. В этой связи не стоит ставить во все свои ивенты единицу, если у вас не очень мощный компьютер. Тем более для большинства событий моментальная выполняемость и не требуется.

Время появления события не обязательно прописывать временным отрезком. Можно указать конкретную дату. Например, начало Великой Отечественной войны - строго 22 июня 1941 года. Для этого достаточно написать только первую строчку блока.
Code

date = { day = 22 month = june year = 1941 }

Указав точную дату, не забудьте максимально облегчить триггер. Если вы пропишете в нем слишком специфические условия, которые не всегда складываются к этой дате, то событие вообще никогда не произойдет.
И еще: такова уж механика игры, что сообщение о событии датированном 22 июня появляется только в полночь следующего дня. Так что если хотите, чтоб событие о начале ВОВ выскакивало именно 22 июня, а не 23-го, указывайте в дате 21 июня. Если же вы хотите, чтобы событие произошло 1 числа (как например нападение Германии на Польшу 1 сентября 1939 года), то укажите время так:
Code

date = { day = 0 month = september year = 1939 }

Если вы укажите 30 августа, то событие произойдет 30 августа, что можно наблюдать в стандартной версии ДП ПС, где разработчики зделали эту досадную оплошность.

Теперь перейдем к описанию события. Блок описания выглядит следующим образом:
Code

name = "EVT_2901_NAME"
desc = "EVT_2901_DESC"
style = 0
picture = "SCW_Italian_Intervention"

Первая строчка - название события. Например - "Капитуляция Италии".
Вторая строчка - описание события, тот текст, который вы видите при появлении события.
Третья строчка - рамка, в которой выскакивает событие. Эту строку трогать не стоит.
Чеетвертая строка - ссылка на иллюстрацию. Можете воспользоваться уже готовыми событийными картинками (они лежат по адресу C:\ХОИ2\gfx\events_pics), а можете создать свою, ориентируясь на уже существующие. Можно вообще обойтись без картинки.

В приведенном мною примере, вместо нормального русского текста вы видете англоязычный код. Дело в том, что разработчики почти все тексты поместили в специальные файлы, на которые и ссылаются такие строки в коде. Нормальный русский текст к этому событию будет лежать в одном из файлов по адресу C:\ХОИ2\config. К сожалению, сказать, где точно вы можете найти описание к интересующему вас событию, невозможно. В этих файлах наблюдается полный бардак. Большинство ивентовых текстов лежат либо в файле event_text, либо в new_text. Но и в самих файлах тексты размещены в произвольном порядке, так что придется поискать.
Если же вы создаете свое событие, то можете смело писать название ивента русскими буквами прямо в тексте события, обозначив его кавычками:
Code

name = "Капитуляция Италии"
desc = "После стремительного наступления Красной Армии обширные территории Восточной и Центральной Европы оказались в руках большевиков. Когда русские вторглись в Италию, Германия уже не могла оказать помощь своему союзнику. Участию Италии в войне пришел конец".
style = 0
picture = "Ita_Surrender"

Как видите, прямо в ивенте можно написать и описание, но только в том случае, если оно короткое. Если же описание длинное, то игра будет выдавать ошибку. В таком случае придется поместить свое описание в один из файлов в папке config. Посмотрите, как там сделаны описания других событий: сначала уникальный код-ссылка с номером ивента (например, EVT_22659_DESC) затем само описание. Код-ссылку продублируйте в сам ивент, где вы хотите потом увидеть текст во время игры.

Оба эти блока - и время, и описание - можно ставить как перед триггером, так и после него, а также в любом порядке относительно друг друга. Тем не менее я рекомендую всё же ставить после триггера блок со временем (написали условия, и сразу понятно когда они в принципе могут быть выполнены), а после него описание.

ВАРИАНТЫ ВЫБОРА (КОМАНДЫ)

Любое событие влечет за собой некоторые последствия. Конечно, вы можете написать событие, которое вообще ни на что не влияет (так сказать для атмосферности), но даже ему понадобиться кнопочка "ОК".

Безвариантное событие:
Такое событие обычно является последним в цепочке многих, или просто сообщением о произошедших событиях, на которые нельзя повлиять.
Code

action_a = {
     name = "Перенести столицу в Вильнюс и впустить советские войска"     
     command = { type = capital which = 208 } # Вильнюс
     command = { type = access which = SOV }     
     command = { type = manpowerpool value = 10 }     
     command = { type = supplies value = 100 }     
     command = { type = oilpool value = 50 }     
     command = { type = money value = 5 }     
     }

Рассмотрим этот пример.
action_a = { - начало блока с командой. Даже если вариант только один, нужно писать "вариант а".
name = "Перенести столицу в Вильнюс и впустить советские войска" - это текст, который будет написан на кнопочке под описанием события. Можете написать там, что угодно. Но в рамках разумного. Слишком длинный текст не поместится на кнопке.
Дальше пошли команды, то есть изменения, которые произойдут, когда вы нажмете на кнопочку с текстом. Команд, как и триггеров довольно много, поэтому посмотрите на команды в существующих ивентах. Все возможные команды можно увидеть в файле "event commands", после строки "COMMANDS:". Файл лежит в папке с ивентами.

Многовариантное событие:
Большинство событий имеют по два, а то и больше вариантов выбора. Вы можете выбрать - начинать войну или нет, эвакуировать промышленность или нет, выбирать правые или левые партии и т.д.
Команды многовариантного события выглядят так:
Code

action_a = {
     ai_chance = 45
     name = "За свободу и демократию!"
     command = { type = dissent value = -5 }
     command = { type = domestic which = interventionism value = 3 }
     command = { type = domestic which = defense_lobby value = 3 }
     command = { type = alliance which = USA }
}
action_b = {
     ai_chance = 45
     name = "За справедливость и социализм!"
     command = { type = dissent value = -5 }
     command = { type = domestic which = interventionism value = 3 }
     command = { type = domestic which = defense_lobby value = 3 }
     command = { type = alliance which = SOV }
}
action_c = {
     ai_chance = 10
     name = "За мир и толерантность!"
     command = { type = dissent value = -10 }
}

Как видите, перед названием варианта выбора появилась строчка ai_chance = Х. Это приоритеты разных вариантов для АИ. Игроку-человеку они не нужны, но если вы хотите, чтоб компьютерный игрок чаще выбирал один вариант, и реже другие, ему нужно расставить такие приоритеты. Главное, чтобы общая сумма приоритетов для всех вариантов выбора равнялась 100.

КОНЕЦ СОБЫТИЯ

Скобка, которую теряют чаще всего - финальная закрываяющая. Помните, с чего начинается ивент? Вот с этого - event = {.
Именно поэтому заканчиваться он должен вот этим - }

Удачи вам, модостроители!


Смерть фашистской России!

Сообщение отредактировал Otshelnik - Понедельник, 20.06.2011, 23:10
 
СержантДата: Четверг, 16.06.2011, 10:52 | Сообщение # 2
Сообщений: 480
Российская Федерация
Дата регистрации: 11.02.2011
Статус: Offline
Награды: 0
А если я по ивенту хочу вдвэшников добавить и пару транспортов для них как писать команду?



За ВДВ!
Я очень добрый и тихий мальчик,
а ещё люблю скидывать атомные бомбы и захватывать мир.
 
СержантДата: Четверг, 16.06.2011, 11:17 | Сообщение # 3
Сообщений: 480
Российская Федерация
Дата регистрации: 11.02.2011
Статус: Offline
Награды: 0
event = {
id = 123456
random = no
country = SOV
trigger = {
control = { province = 1418 data = TAN } # Kyzyl
alliance = { country = SOV country = TAN }
AND = {
year = 1937
month = 8 # June
}
}
date = { day = 8 month = june year = 1937 }
name = "EVT_123456_NAME"
desc = "EVT_123456_DESC"
style = 0
picture = "barbarossa"
action_a = {
ai_chance = 70
name = "Принять пополнение из училищ"
command = { type = add_division which = "diviziya" value = paratrooper when = 1 where = 1418 }
}
action_b = {
ai_chance = 30
name = "Они нам не нужны"
command = {}
}

Можно ли так добавить десантников?

}




За ВДВ!
Я очень добрый и тихий мальчик,
а ещё люблю скидывать атомные бомбы и захватывать мир.


Сообщение отредактировал Kolbasnik98 - Четверг, 16.06.2011, 11:36
 
СержантДата: Четверг, 16.06.2011, 11:36 | Сообщение # 4
Сообщений: 480
Российская Федерация
Дата регистрации: 11.02.2011
Статус: Offline
Награды: 0
Блин, вылетает



За ВДВ!
Я очень добрый и тихий мальчик,
а ещё люблю скидывать атомные бомбы и захватывать мир.
 
KeosДата: Четверг, 16.06.2011, 15:30 | Сообщение # 5
Сообщений: 508
Российская Федерация
Дата регистрации: 18.08.2008
Статус: Offline
Награды: 0
Маршал
Quote (Kolbasnik98)
AND = { year = 1937 month = 8 # June }

это лишнее, дата и так указана точно

вот так должно получиться
command = { type = add_corps which = 1 value = land where = 1418}
command = { type = add_division which = "diviziya" value = paratrooper when = 0 }


"Величайший воин побеждает без боя, величайший полководец не воюет."
 
OtshelnikДата: Четверг, 16.06.2011, 22:17 | Сообщение # 6
Сообщений: 2972
Украина
Дата регистрации: 08.06.2010
Статус: Offline
Награды: 5
Kolbasnik98, уточни вопрос и лучше напиши его в тему с вопросами, а здесь пусть будут только дополнения к учебнику. В связи с этим просьба к модераторам очистить тему от всего, что не относится к обучению.

Смерть фашистской России!
 
Форум » День Победы 2 (Hearts of Iron II) » Гильдия День Победы 2 (Hearts of Iron II) » Учебник по модингу. Урок №1. Редактирование событий.
  • Страница 1 из 1
  • 1
Поиск:
Сегодня нас посетили