Работаем над скриптом
#7
Я проверил только что структуру сложной комбинации вложений “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()
….
Ответ


Сообщения в этой теме
Работаем над скриптом - от sun - 06.05.2003, 21:35

Перейти к форуму:


Пользователи, просматривающие эту тему: 3 Гость(ей)