06.05.2003, 21:35
Я проверил только что структуру сложной комбинации вложений “if elseIF else”, в принципе, движок к счастью может работать на сложных вложениях. Для такого рода кейсов (свичей), нужно продумать оптимизацию. Например сделать в блоке такого кейса ловушку в самом начале из логическогой последовательности (Выход) AND (Условие1 OR Условие2 OR….). «Выход» -это переменная типа BOOL, ловушка для отмены повторной инициализации единожды выполняемого скрипта. Ну, чтобы кости «Зеленого Дракона» и «Опыт» не сыпался при каждом входе на зоны. В этом случае каждый блок скрипта будет усложняться, но зато мы типизируем весь скрипт, так же нужно поднять на верхние уровни все вложенные условия выполнения следующих заданий и подзаданий. Вкладывать в последовательную цепочку другие задания , на часто посещаемых зонах нельзя. Значить, нужно считать вкладывания, на единожды посещаемой зоне как «дурной тон» в кодинге скриптов этого типа. Особенно блещут вложениями скрипты на зоне 1.
Защешкой может служить любое проверяемое условие, например, isDead(Object), (хотя, лучше использовать Not(isAlive(Object)) ). Так вот Защелка будет следующая:
Script VCheck #0#1
(
If
(
Not(isAlive(Object))
)
then
(
KillScript()
VTriger#0#2
)
)
Script VTriger#0#2
(
If
(
isAlive(Object)
)
then
(
KillScript()
<Список команд>
)
)
Подобно у Нивала инициализируются и засчитываются переменные заданий в более поздних зонах игры. Это можно брать за правило, и везде где нет крайне1ё необходимости, построение логики должно быть именно таким.
Так же достаточно плохо, когда привязка сделана к статистическому объекту. Например:
IsLess(DistanceUnitUnit(this,DgunDragon),10), лучше все же использовать однотипность и применить, например: IsLess(DistanceUnitPoint(this,185,95),10). Я имею в виду именно в генераторе скрипта. Вообще, лучше, чтобы иметь в последующем гибкость и не волноваться, что перс может как-то обойти встречу с нужным местом, просто указать зону где находится перс, например самое первое задание когда перс выходит из развалин, нужно тловить не то когда он приблизился к статуе, а то, насколько перс удалился. Опять же, Нивал использовал этот метод, для реплики убегающих Any(i,Peasans,IsLess(DistanceUnitUnit(i,DgunDragon),12)). Вообще, метод правильный, так как в этом случае обрабатывается группа. Вообще по умолчанию везде должна была бы использоваться обработка группы, а не одного перса. Вдруг мы решим играть сразу вдвоем? Во всех места где нужно получить лидера группы нужно использовать только один метод, например функцию GetLeader()
….
Защешкой может служить любое проверяемое условие, например, isDead(Object), (хотя, лучше использовать Not(isAlive(Object)) ). Так вот Защелка будет следующая:
Script VCheck #0#1
(
If
(
Not(isAlive(Object))
)
then
(
KillScript()
VTriger#0#2
)
)
Script VTriger#0#2
(
If
(
isAlive(Object)
)
then
(
KillScript()
<Список команд>
)
)
Подобно у Нивала инициализируются и засчитываются переменные заданий в более поздних зонах игры. Это можно брать за правило, и везде где нет крайне1ё необходимости, построение логики должно быть именно таким.
Так же достаточно плохо, когда привязка сделана к статистическому объекту. Например:
IsLess(DistanceUnitUnit(this,DgunDragon),10), лучше все же использовать однотипность и применить, например: IsLess(DistanceUnitPoint(this,185,95),10). Я имею в виду именно в генераторе скрипта. Вообще, лучше, чтобы иметь в последующем гибкость и не волноваться, что перс может как-то обойти встречу с нужным местом, просто указать зону где находится перс, например самое первое задание когда перс выходит из развалин, нужно тловить не то когда он приблизился к статуе, а то, насколько перс удалился. Опять же, Нивал использовал этот метод, для реплики убегающих Any(i,Peasans,IsLess(DistanceUnitUnit(i,DgunDragon),12)). Вообще, метод правильный, так как в этом случае обрабатывается группа. Вообще по умолчанию везде должна была бы использоваться обработка группы, а не одного перса. Вдруг мы решим играть сразу вдвоем? Во всех места где нужно получить лидера группы нужно использовать только один метод, например функцию GetLeader()
….