Тема: МАКРОСЫ
Показать сообщение отдельно
Re: МАКРОСЫ
Старый 27.01.2010, 10:20   #13
Sindo
The Hero
 
Регистрация: 02.02.2007
Адрес: KIDs
Возраст: 35
Сообщений: 969
Репутация: 52 [+/-]
имеет хорошую репутацию (от 26 до 75)
Sindo имеет хорошую репутацию (от 26 до 75)
Чар: Sindoatan
Гильдия: KIDs
По умолчанию Re: МАКРОСЫ

[PHP]// Бродилка Sindo Edition
//Используется как дополнительная процедурка внутри основного скрипта
// и требует соответствующей изоляции. Пример использования:
set #kudax 1067 // Перед вызовом бродилки указываем координаты цели
set #kuday 2670 //
gosub gogogo // вызов бродилки
repeat 5 // сообщим что переход к цели выполнен
alarm
end_repeat
stop_script

:gogogo
set #try 0 // счетчик шагов
set #flip 0 // счетчик/индикатор разворотов на месте
set #ston 0 // индикатор застревания
:nextstep
set #try #try + 1
:nextfixstep

if (charposx = #prevx ) and ( charposy = #prevy ) // если еще не перешли на новый тайл
if (#flip >= 1) // если мы уже разворачивались на этом тайле подождем, может лагаем
set #ston #ston + 1
wait 500
set #flip #flip + 1
if (#flip >= 5) // если не дождались попробуем шагнуть еще раз
set #flip 0
end_if
goto nextfixstep
end_if
set #flip #flip + 1
end_if

if (charposx <> #prevx ) and ( charposy <> #prevy ) // перешли на новый тайл
set #ston 0
set #flip 0
end_if

if #ston > 10 // если долго не можем сдвинуться с одного тайла отойдем в сторону (рандомный выбор)
set #walk random 8
if #walk = 0
repeat 5
send PageUp 200
end_repeat
end_if
if #walk = 1
repeat 5
send PageDown 200
end_repeat
end_if
if #walk = 2
repeat 5
send Home 200
end_repeat
end_if
if #walk = 3
repeat 5
send End 200
end_repeat
end_if
if #walk = 4
repeat 5
send Up 200
end_repeat
end_if
if #walk = 5
repeat 5
send Down 200
end_repeat
end_if
if #walk = 6
repeat 5
send Left 200
end_repeat
end_if
if #walk = 7
repeat 5
send Right 200
end_repeat
end_if
set #ston 0
end_if

if #try > 50 // если наш путь к цели слишком долог, пробуем привлечь внимание хозяина чара
repeat 5
flash
flash Sindo
wait 2s
end_repeat
set #try 0
end_if

if (charposx = #kudax ) and ( charposy = #kuday ) // цель достигнута
goto yes
end_if

// Корректировка, если уже стоим на оси Х с целью
if charposx = #kudax
if charposy > #kuday
gosub savepos
send pageup
goto nextstep
end_if
if charposy < #kuday
gosub savepos
send end
goto nextstep
end_if
end_if

// Корректировка, если уже стоим на оси У с целью
if charposy = #kuday
if charposx > #kudax
gosub savepos
send home
goto nextstep
end_if
if charposx < #kudax
gosub savepos
send pagedown
goto nextstep
end_if
end_if

// Корректировка, если нет пересечений с целью по осям координат
if charposy < #kuday
if charposx < #kudax
gosub savepos
send down
goto nextstep
else
gosub savepos
send left
goto nextstep
end_if
else
if charposx < #kudax
gosub savepos
send right
goto nextstep
else
gosub savepos
send up
goto nextstep
end_if
end_if

:yes
return

:savepos
set #prevx charposx
set #prevy charposy
return
// Биндить ничего не нужно, стоит лишь передать координаты цели и убедиться, что в "строке речи чара(вобщем где текст пишем в уо)" нет никаких символов и кнопки end, home, pageup и pagedown свободны от биндов.
[/PHP]Добавлено через 12 минут
[PHP]// AutoMeditation by Sindo
set #a 0 // счетчик сбросов вар мода
set #b 0 // для проверки используется ли скрипт в данный момент
set $war with thoughts // сообщение о нахождении чара в вар моде
set $medbtn 6 // UseSkill+Meditation
:try
while mana < int
if #b = 0
say *Meditation Started*
set #b 1
end_if
send $medbtn
send Backspace // убрать лишний символ с экрана (если не требуется, убрать)
if (lastmsg = $war)
if #a > 0 // кол-во снятий вара корректировать по желанию
say *Nakilon is under attack! No more time for meditation!*
stop_script
end_if
set #a #a + 1
send Tab // снять вар мод
goto try
end_if
wait 3s
end_while
say *Nakilon's magic energy succesfully refreshed*
alarm
// set #b 0
// возможно потом придумаю систему для безостановочной работы
stop_script

[/PHP]
__________________
May the Force be with you..
Sindo вне форума   Ответить с цитированием