Редактор на тригер за модифициране - Уроци за редактор на тригер (GUI).
18-04-2019 Въведение |
Приготвяме се да започнем
Първо създайте папка с име "UI" в главната директория на Warcraft III. Трябва да се нарича "Потребителски интерфейс", за да може световният редактор да разпознава файловете в него.
Сега имате нужда от най-новите версии на следните файлове: UI\TriggerData.txt UI\TriggerStrings.txt UI\WorldEditStrings.txt
Те могат да бъдат извлечени от War3Patch.mpq. Поставете тези файлове в интерфейсната директория, която сте създали.
Тези файлове се четат, когато заредите World Editor, но само тогава. Така че, ако сте направили промени в някой от тези файлове и сте отворили WE, трябва да затворите и рестартирате WE, за да влязат в сила промените.
Първият и най-важен файл е TriggerData.txt. Тук всички функции на вградения gets файл съдържат следните раздели:
[] TriggerTypeDefaults - Някои типове променливи се инициализират със стойности по подразбиране. Така, например, целите числа са зададени на 0 по подразбиране. Някои изгледи трябва да бъдат инициализирани с функция (обикновено "Създаване" ____), за да работят правилно, така че е добра практика да направите това тук. Например таймерите се инициализират от CreateTimer(), а групите се инициализират от CreateGroup().
[TriggerParams] – Те са известни като „Предварителни настройки“ в Trigger Editor. Те се определят от стойностите на променливата тип, която може да бъде избрана от списък. Някои видове променливи, има само тези предварително зададени настройки и няма друга цел. За тези от вас с външен опит в програмирането, това са основно "изброени типове". Пример би бил списък с поръчки, можете да проверите елемента за ориентация („Преместване“, „Human Archmage – Blizzard“, „Orc Tauren Chieftain – Shockwave“ ии т.н.).
[dde] - Всички дейности са дефинирани тук.
[TriggerConditions] - всички условия са дефинирани тук.
[TriggerActions] - Всички действия, дефинирани тук.
[TriggerCalls] – Това са така наречените „Функции“ в Trigger Editor, когато трябва да попълните стойност като параметър. Примери: „Математика – произволни числа“ и „Регион – център на региона“.
Секциите на TriggerStrings.txt са както следва:
[TriggerEventStrings] - Низове за всички събития.
[TriggerConditionStrings] - Низове за всички условия.
[TriggerActionStrings] - Низове за всички действия.
[TriggerCallStrings] - Низове за всички функции.
Имайте предвид, че WorldEditStrings.txt има само една секция. Това означава, че можете да добавяте редове навсякъде във файла. Смятам, че е най-лесно просто да добавя редове в края на този файл, но това зависи от вас.
Добре, да се заемем с работата. Ще започна тук с прост пример за добавяне на действие и ще се върна към действията много по-късно в урока с малко по-подробен пример.
Отворете TriggerData.txt. Редът, в който се появяват редовете в TriggerData.txt, пряко засяга реда, в който елементите се показват в списъците в Trigger Editor. Така че, ако искате да добавите ново действие, вероятно искате то да е точно преди или точно след съществуващото действие Destroy Influence. Знаем, че DestroyEffectBJ ще се появи във файла, така че нека потърсим това. Тогава виждаме редовете:
Код: DestroyEffectBJ=0,ефект _DestroyEffectBJ_Defaults=GetLastCreatedEffectBJ _DestroyEffectBJ_Category=TC_SPECIALEFFECT Какво казва всеки ред? Първият ред казва, че имаме функция, наречена DestroyEffectBJ. Стойност "0"означава, че функцията е дефинирана в WC3: Reign of Chaos. Ако функцията е дефинирана само в WC3: The Frozen Throne, трябва да поставите стойността "1" тук. Останалите стойности на променливата от типа параметър. В този случай имаме „резултат“, специален ефект.
Следващият ред дава стойността по подразбиране за всички опции. В този случай функцията GetLastCreatedEffectBJ("Последно създаден специален ефект") е стойността по подразбиране.
Така че сега искаме да добавим запис за функцията DestroyEffect. Има същата цел и параметри като DestroyEffectBJ, така че в този случай можем просто да копираме и поставим редовете, като променим само името на функцията. Така че добавяме следните редове:
Код: DestroyEffect=0,effect _DestroyEffect_Defaults=GetLastCreatedEffectBJ _DestroyEffect_Category=TC_SPECIALEFFECT И ние приключихме с TriggerData.txt за този пример.
След това трябва да добавим подходящите низове към TriggerStrings.txt. Отворете TriggerStrings.txt и както преди потърсете „DestroyEffectBJ“. Този файл има своите записи в същия ред като TriggerData.txt и вероятно е добра идея да го запазите с текущата конвенция. Ще видите следните редове:
Код: DestroyEffectBJ = "Унищожи специален ефект" DestroyEffectBJ = "Унищожи",
Специален ефект DestroyEffectBJHint = Първият ред, който виждате, когато изберете действие от списъка. Вторият ред е това, което виждате, когато имате действие в момента. Той също така показва какви редове, ако действието е част от вашия тригер. Третият ред, „Подсказка“, се отпечатва с малък сив шрифт, ако сте избрали запас. DestroyEffectBJ не е намек, така че този ред е оставен празен.
Обърнете специално внимание навтора линия. Трябва да кажем на Trigger Editor къде в реда оставяме интервалите на параметрите. Начинът, по който трябва да направите това, е като завършите низа с двойни кавички ("), последвани от запетая, след това тилда (
) и "името" на параметъра. Можете да поставите всичко на това име. Ако няма настройка по подразбиране за параметъра, това означава, че ще видите това име в червения Trigger Editor, което означава, че имате нужда от параметъра. Ако имате стойност по подразбиране, никога няма да видите това име, така че можете да го наименувате както желаете, .
И така, нека сега се запознаем с DestroyEffect. В повечето случаи можем просто да копираме и поставим тук отново, както преди. Ние обаче не искаме и двете действия да имат еднакви низове. Ако това се случи, може да не можем да различим! Затова искаме да добавим бележка, че това е "ефективната" версия. Можем също да попълним полето Hint. Всъщност не е необходимо да променяме втория ред, защото имаме достатъчно информация, за да разделим двете действия само с промяна в първия ред.
Затова добавяме следните редове: Код: DestroyEffectBJ="Унищожи специален ефект" DestroyEffectBJ="Унищожи ",
Специален ефект DestroyEffectBJHint= Запазете и затворете TriggerStrings.txt. Стартирайте World Editor, отворете картата и проверете дали действието се показва в Trigger Editor. Сега го хвърлете в тригера и запазете картата, за да сте сигурни, че няма да получите грешки при компилиране. Вижте колко лесно беше това?
Уверете се, че сте завършили всичко до този момент, преди да продължите.
Използвайки същия модел, ще направим за 1 проследими:
Код: TC_TRACKABLE=WESTRING_TRIGCAT_TRACKABLE,ReplaceableTextures\WorldEditUI\Actions-Nothing Нямаме иконата за проследявано действие, така че просто използваме действията по подразбиране-Nothing.
Сега трябва да дефинираме линията WESTRING_TRIGCAT_TRACKABLE. Това отива към WorldEditStrings.txt, за да отворите този файл, отидете до дъното и добавете реда:
Добавяне на променлива тип
След това трябва да дефинирате типа на променливата, така че Trigger Editor да разбере, че това се контролира.
И така, нека разберем какви знамена са ни необходими. Наистина не си спомням дали проследимите са дефинирани в RoC. Мисля, че са, но за всеки случай винаги можете просто да поставите "1" за версията. Ако правите карти само за TFT, няма значение какво ще поставите тук.
Определено искаме да можем да правим променливи с контролиран тип, така че нека поставим 1 за флага на глобалната променлива.
Да, проследимите могат да се използват в оператори за сравнение, може да се нуждаем от тази функция, за да определим дали кликнат върху проследимия е определено 1, така че ще поставим 1 в това поле.
И накрая, трябва да добавим връзка към низа, озаглавен "controlled". Така че нашият добавен ред ще изглежда така:
Код: trackable=1,1,1,WESTRING_TRIGTYPE_trackable Не забравяйте да добавите подходящите редове към WorldEditStrings.txt.
Добавяне на стойност по подразбиране за тип
Ще пропусна добавянето на типа по подразбиране. Това не е необходимо за trackables, тъй като искаме те да започват като null. Това обаче е много проста процедура и съм сигурен, че можете да я разберете сами. Но да те спася, ще ти кажа това, ако решишимплементирайте следните типове данни: region, unitpool, itempool; ще трябва да завършите нещо за този раздел.
Плъзгачите за проследими нямат смисъл. Има обаче една от предварително зададените стойности, която има смисъл за проследими и всички манипулатори на извлечен тип: нула. Виждате този редактор на тригери „Няма ден“, „Без блок“ и т.н. Стойността "null" трябва да се дефинира отделно за всеки тип. Искаме опцията „Без контрол“ за сравнение, за да проверим дали стойността е празна или не.
Тук (както и навсякъде) е най-лесно да намерите пример, подобен на това, което искате, да го копирате и да го промените за вашите цели. Вземете например: „Не, блокирай“:
Код: UnitNull=0,unit,null,WESTRING_TRIGUNIT_NULL Първо нека да разгледаме какво означава всяка част. Името на ключа тук е само за справка, "UnitNull" няма значение в JASS или където и да е. „0“ означава, че тази стойност е валидна в RoC. „Единица“ е типът на даденото, което дефинираме. "Null" е стойността на предварително зададената настройка. И накрая, това е низът, който ще се показва в интерфейса, когато използваме тази предварителна настройка (в WorldEditStrings.txt това е „няма устройство“).
Искаме да копираме това за проследяване. Най-очевидният начин е просто да промените всички екземпляри на единицата, която ще се контролира. Можем да зададем флага на версията на 1, за да маркираме това като само TFT (запазването му като 0 също ще работи също). Отново, не забравяйте да добавите реда към WorldEditStrings.txt.
Има две събития, които се отнасят до проследими, дефинирани в common.j:
Код: нативният TriggerRegisterTrackableHitEvent приема тригер whichTrigger, проследяваем t връща събитие нативният TriggerRegisterTrackableTrackEvent вземаtrigger whichTrigger, trackable t връща събитие Първото е "щракване с мишката", второто е събитие "Mouse Over". Нека добавим и двете.
Добавянето на събития е почти идентично с добавянето на действия. Единствената разлика е, че ги дефинирате в секцията [dde] и че пропускате първия параметър, който се счита за тип "тригер". Използвайки същия модел с действия (без първия параметър), добавете ги в долната част на раздела за събития. Не забравяйте, че не е необходимо да задавате опции по подразбиране. И не забравяйте да добавите записи към TriggerStrings.txt!
Единственото условие, различно от сравненията A и Or. Затова искаме да добавим „проследено сравнение“. Разликата между този раздел и събитията или действията е, че условията не са извиквания на функции, а се обработват вътрешно от Trigger Editor. Всъщност операторите се преобразуват в JASS директно с помощта на ==,! = и т.н. Нека да разгледаме „Сравнение на задействания“: