Показать сообщение отдельно
Старый 21.12.2009, 23:02   #253
Местный
 
Аватар для Stas
 
Регистрация: 21.10.2009
Адрес: Тюмень
Сообщений: 128
Сказал Спасибо: 38
Имеет 171 спасибок в 52 сообщенях
Stas на пути к лучшему
По умолчанию

Ещё один пример. В моём блоке есть маленькая подпрограмма (я ещё буду её усовершенствовать), к которой есть необходимость часто обращаться. Что она делает? Она выполняет несколько простых задач: Включает и выключает Волкер и команду на бой, отбивает прилипших мобов, проверяет чара на смерть, проверяет на ХР, если ранен, то лечит, если погиб, то отправляет в город и т. д.
Управляется также - одной строкой. Эту строку вы можете вставлять во многие опасные места своего скрипта, там, где необходимо включить бой, проверить, жив ли чар и т.д.
Одну строку, а не вот такой примерно блок:
LABEL(103_FinishProwerka)
DELAY(500)
LOADCONFIG(FILEFORALL.ini)
DELAY(500)
SET(RANGETYPE,STARTPOS,80)
DELAY(500)
SET(MON,ATTACK,*)
DELAY(500)
SET(L2WALKER,ENABLE)
DELAY(500)
SET(FIGHTSTART)
LABEL(103_FinishProwerka_03)
CHARSTATUS(CHP,<,1)
{
DELAY(500)
SET(L2WALKER,DISABLE)
DELAY(500)
SET(FIGHTSTOP)
DELAY(500)
LOADCONFIG(CLEAR.ini)
DELAY(2000)
GOHOME()
CALL(100_TeleportTime)
CALL(XYZ_Pos_NubGid)
RETURN()
}
LABEL(103_FinishProwerka_05)
CHARSTATUS(HP,<,100)
{
DELAY(1000)
JMP(102_FinishProwerka_03)
}
DELAY(500)
LOADCONFIG(CLEAR.ini)
DELAY(500)
SET(L2WALKER,DISABLE)
DELAY(500)
SET(FIGHTSTOP)
DELAY(500)
RETURN()

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

Здесь же есть яркий пример взаимосвязи всей программы с её отдельными блоками. Даже в этом маленьком блоке есть обращение к другому блоку (тоже важному , хотя и маленькому):
CALL(100_TeleportTime), а вот сама подпрограмма:

LABEL(02_01_TeleportTime)
DELAY(10000)
RETURN()

Маленькая в три строки, но главное её преимущество не в том, что она сокращает текст моей программы, а в том, что каждый из вас, изменив одну единственную цифру, может управлять всей моей программой. Одним надо, чтобы время задержки после телепортации было 10 секунд, другим надо 15, а некоторым 30 секунд. Так вот вам простое, но универсальное решение этой проблемы. Все блоки моей программы десятки, а в последующем и сотни раз, обращаются к этому блоку. Вам не надо изменять все цифры, стоит поменять время в этой программе 10000 на 30000 и время задержки после всех телепортаций изменится с 10 секунд на 30 секунд.

А этот блок управляет временем задержки при диалогах с НПЦ (аналог предыдущего блока):

LABEL(02_02_DialogTime)
DELAY(1000)
RETURN()

Последний раз редактировалось Stas, 21.12.2009 в 23:34.
Stas вне форума   Ответить с цитированием