Ув. ELForcer, Вот исправленная версия
Ручаюсь, что автор я
Эта тема предназначена для картостроителей, обладающих тригерами на среднем уровне и предназначена для повышения их уровня. Для этого я дам пару заданий по созданию достаточно сложных тригерных наработок с подробным описанием каждого действия.
При создании тригерной наработки определитесь с названием, например если тригерная наработка предназначена для поведения камеры и вас зовут Вася, то назовите наработку VasyaKamera название не играет большой роли. Все тригеры отдельной наработки размещайте в одной категории, и назовите эту категорию VasyaKamera v1.00.
К названиям всех переменых вашей наработки добавляйте суффикс названия наработки, например к целочисленной переменой x добавьте суффикс, чтобы было название VasyaKamera_x. Также подобный суффикс добавляйте ко всем тригерам.
Для чего это нужно? чтобы при импортировании наработки в карту не было конфликтов переменных или тригеров, есть вероятность того, что переменная с таким же названием используется.
В категории с тригерами вашей наработки сделайте комментарий к тригеру с описанием наработки, именами создателей наработки и способы контактов с разработчиками, а также описания условий, при соблюдений которых другие люди могут использовать вашу наработку (например добавление вашего имени в авторы карты, куда импортирована ваша наработка).
Первым тригером делайте "VasyaKamera Start" тригер предназначен для установления начальных значений некоторых переменных наработки.
Например
Установить VasyaKamera_plavnost как 3.00
--Комментарий - установите значение этой переменой от 0.00 до 10.00, значение этой переменой влияет на плавность камеры--
И т. д.
Старайтесь использовать как можно больше настраиваемых переменных, что бы наработка была более мобильной. например если наработка предназначена для восстановления враждебных мобов, то сделайте настраиваемую переменную, которая отвечает за время восстановления мобов.
Вроде для введения всё. Вот пару заданий по созданию наработок. Создав их вы приобретёте опыт по корректному использованию массивных переменных. Сделайте тригерную наработку, которая будет считать дату в игре. каждый день календарю будет прибавляться 1 день. В году 12 месяцев, сама сложность в том, что в каждом месяце разное количество дней.
Подсказка
Так как в некоторых месяцах разное количество дней, логично создать две массивные переменные
Calendar_name_m - массивная переменная текстовая, каждая ячейка будет содержать название месяца соответствующего индексу.
Calendar_day_in_m - массивная переменная целочисленная, каждая ячейка будет содержать количество дней в месяце, соответствующего индексу
Calendar_day - целочисленная переменная показывающая номер текущего дня
Calendar_m - целочисленная переменная показывающая номер текущего месяца
При наступлении следующего дня переменная Calendar_day должна повыситься на 1
Затем включается условие, если количество дней в текущем месяце меньше сегодняшнего дня, то установить текущий месяц на 1 больше, установить текущий день как 1.
Всю наработку можно сделать двумя тригерами
В первом тригере человек-редактор устанавливает переменные, которые устанавливаются на это значение при инициализации
А второй тригер будет делать эти вычисления
К названию всем переменным и тригеров добавляйте приставку "Calendar_" дабы при импортировании в кампанию не было конфликта тригеров и переменных.
Если что-то непонятно не бойтесь задавать вопросы через ЛС
Не переходите к дальнейшему тексту, пока не выполните первую наработку.
Вторая наработка будет сложнее
тригерная наработка системы репутаций.
Описание простое, но сама наработка не столь проста
она будет показывать значение репутации героя
resp_x - целочисленная переменная, настраиваемая при инициализации, показывающая количество значений репутаций (например - 4)
resp_tex - массивная переменная типа строка, настраиваемая при инициализации, каждая ячейка её содержит название значений репутации
Например
resp_tex(1) = неизвестный
resp_tex(2) = знаменитый
resp_tex(3) = великий
resp_tex(4) = легендарный
resp_znach - массивная целочисленная, показывающая требуемое значение репутации героя для перехода на следующую ступень репутации
Например
resp_znach(1) = 400
resp_znach(2) = 1200
resp_znach(3) = 3500
resp_znach(4) = 10000
Целочисленные переменные, связанные с показателями репутации героя
resp_pleer - показывает количество играющих героев (это для того, что бы наработку можно было легко использовать в других наших проектах, в том числе мультиплеерных) в кампании будет стоять значение 1
resp_pleer_namber - массивная переменная игрок, в каждой ячейке указывается номер играющего игрока
(resp_pleer_namber(1) = Игрок 1 (красный)
resp_pleer_hero - массивная переменная боевая единица, в каждой ячейке указывается играбельный герой игрока
resp_hero_r - массивная переменная показывает балы репутации героя каждого игрока
resp_hero_znach - массивная переменная, показывающая ступень репутации героя (от 1 до resp_x)
Должны присутствовать 2 тригера, в одном редактор устанавливает значения переменных при инициализации, другой тригер без события (он запускается другими тригерами при изменении значения репутации)
С первым всё понятно, вот описание второго
Вначале идёт цикл А от 1 до количества играющих игроков (resp_pleer)
В цикле А вставляем ещё один цикл B от 1 до количества значений репутаций (resp_x)
В нём проверяем соответствует ли балы репутаций игрока (resp_pleer_namber(A)) диапазону от минимально значения репутации данной ступени до максимального.
If resp_hero_r(А) больше (resp_znach(B-1) + 1) AND resp_hero_x(А) меньше или равно resp_znach(B) then set resp_hero_znach(А) = B
Более подробное описание наработки, если первое описание вы не поняли
начнём с цикла B
Допустим что вычисляется репутация игрока Resp_pleer_namber(1) то есть игрока 1
Его репутация, допустим, равна resp_pleer_r(1) = 1380
Далее запускается цикл
Цикл B от 1 до количества значений репутаций (resp_x)
--То есть B от 1 до 4--
И так, первый шаг цикла, B = 1
Проверяется условие того, что репутация игрока 1 (resp_pleer_r(1)) находится в диапазоне значений первой ступени репутации
Макс. значение это resp_znach(B) так как B=1, значит максимальное значение диапазона resp_znach(1) что равно 400
Мин. значение данной ступени – то максимальное значение предыдущей плюс 1
То есть resp_znach(B-1) + 1. так как B=1, то B-1 = 0, а resp_znach(0) = 0. Таким образом настраивается resp_znach(B-1) + 1 = 0 + 1 = 1.
У нас вышел диапазон от 1 до 400
Условие проверяет, чтобы значение репутации игрока было в этом диапазоне,
Если да (resp_znach(B) < resp_pleer_r(1) > resp_znach(B-1) + 1) если да, то степень репутации игрока resp_hero_znach(1) устанавливается как B, то есть как 1, но это не так, потому ничего не происходит
Но resp_hero_znach(1) = 1380, это больше максимального значения ступени, потому идёт следующий шаг
И так B = 2
Макс. значение это resp_znach(B) так как B=2, значит максимальное значение диапазона resp_znach(2) что равно 1200
Мин. значение данной ступени – то максимальное значение предыдущей плюс 1
То есть resp_znach(B-1) + 1. так как B=2, то B-1 = 1, а resp_znach(1) = 400. Таким образом настраивается resp_znach(B-1) + 1 = 400 + 1 = 401
У нас вышел диапазон от 401 до 1200
Условие проверяет, чтобы значение репутации игрока было в этом диапазоне,
Если да (resp_znach(B) < resp_pleer_r(1) > resp_znach(B-1) + 1) если да, то степень репутации игрока resp_hero_znach(1) устанавливается как B, то есть как 2, но это не так, потому ничего не происходит
Но resp_hero_znach(1) = 1380, это больше максимального значения ступени (1200), потому идёт следующий шаг
И так B = 3
Макс. значение это resp_znach(B) так как B=3, значит максимальное значение диапазона resp_znach(3) что равно 3500
Мин. значение данной ступени – то максимальное значение предыдущей плюс 1
То есть resp_znach(B-1) + 1. так как B=3, то B-1 = 2, а resp_znach(1) = 1200. Таким образом настраивается resp_znach(B-1) + 1 = 1200 + 1 = 1201
У нас вышел диапазон от 1201 до 3500
Условие проверяет, чтобы значение репутации игрока было в этом диапазоне,
Если да (resp_znach(B) < resp_pleer_r(1) > resp_znach(B-1) + 1) если да, то степень репутации игрока resp_hero_znach(1) устанавливается как B, то есть как 3
resp_hero_znach(1) = 1380, это входит в диапазон от 1201 до 3500,
Потому resp_hero_znach(1) устанавливается как 3
На практике это означает, что если игрок заработал1380 очков репутации, то он на 3 ступени известности, он (resp_tex(3) + «герой») что значит «Великий герой»
Теперь цикл А, этот цикл высчитывает ступень репутации для каждого играющего игрока
Вот пример
Играет три игрока
Игрок 1
Игрок 4
Игрок 5
Устанавливаются переменные
resp_pleer_namber(1) = Игрок 1 (красный)
resp_pleer_namber(2) = Игрок 4 (фиолетовый)
resp_pleer_namber(3) = Игрок 5 (желтый)
resp_pleer = 3 (количество играющих игроков)
У героя первого игрока resp_hero_znach(1) = 500
У героя второго игрока resp_hero_znach(2) = 200
У героя второго игрока resp_hero_znach(3) = 155
Второй триггер
Цикл А от 1 до resp_pleer
То есть от 1 до 3
Там проверяется какому диапазону подходит resp_hero_znach(А)
Получается триггер
For integer A от 1 до resp_pleer
For integer B от 1 до resp_x
If resp_hero_r(А) больше (resp_znach(B-1) + 1) AND resp_hero_x(А) меньше или равно resp_znach(B) then set resp_hero_znach(А) = B
Next B
Next A
Этот тригер покажет, что игрок красный знаменитый, а игроки фиолетовый и жёлтый неизвестные
На этом пока всё. Надеюсь, мой урок вам поможет. И последнее, если вы будете использовать наработку репутаций, то вставьте моё имя в список авторов карты и в описание наработки репутаций благодарность Cancel'у c моим почтовым ящиком для связи.
Если вы сделали эти две наработки, то теперь вы можете делать более корректные тригеры))