Список изменений:
- - Добавлен параметр StartTime в функцию uo.WaitingForJournalText(StartTime,MaxDelay,Text,[Equals],[IgnoreCase],[SkillName/ObjectID])
- Добавлены функции uo.GetFoundedText() и uo.GetFoundedTextID()
uo.GetFoundedText() - служит для получения текстовой строки, в которой был найден искомый текст от всех поисковых функций журнала
uo.GetFoundedTextID() - индекс искомого текста
- Добавлена опция запуска инжекта /lowcpu или /lowcpu:<value> для включения снижения нагрузки на процессор. Не желательно ставить больше пяти /lowcpu:5
- Исправлена дистанция поиска в uo.Findtype и uo.FindList
- Поиск с использованием uo.FindList теперь производится по-порядку, как добавляли в лист типы
- Поисковые функции при поиске объектов на земле теперь всегда возвращают самый ближайший к игроку объект (если такой был найден и исключая Nearest=1)
- На вкладку скриптов добавлен чекбокс "Go to last line on load/show script", в включенном состоянии при открытии редактора скриптов каретка устанавливается на ту строку, где она была при закрытии редактора в последний раз
- Исправлено несколько незначительных багов в Script.dll
- Исправлен краш при вводе трех кавычек подряд в редакторе скриптов
- Добавлены операторы continue; break; switch->case->end switch о них ниже
- Исправлен (скорее всего) краш при удалении/обновлении предметов
- В Script.dll добавлены функции:
Pos(Source,SearchText) - поиск текста SearchText в строке Source, при удачном поиске возвращает позицию в строке, при неудаче 0
GetWord(Source,WordIndex,[Separator]) - получение слова из строки Source под номером WordIndex разделенного пробелом (или Separator'ом, если он указан)
GetWordCount(Source,[Separator]) - получение общего кол-ва слов, содержащихся в строке Source разделенных пробелом (или Separator'ом, если он указан)
- Добавлена функция ReceiveObjectName(Serial,[MaxDelay]) для получения имени объекта. MaxDelay - время в мс за которое должно прийти имя от сервера (старндартно 1000). Актуально использовать взамен CheckLag()
- Теперь опции препарсера досвечиваются синим цветом. Начал подсвечиваться endsub (слитный)
Оператор switch->case->end switch работает так же, как описано по ссылке, только без default: и не много другое объявление.
Code: Select all
switch <Condition> / switch:<Condition>
case <Condition> /case:<Condition>
end switch / endswitch
Пример использования:
Code: Select all
Sub GetCodeByGraphic(Graphic)
switch:Graphic
case:'0x0190'
case:'0x0191'
uo.print('this is human!')
return 1
case:'0x2006'
uo.print('this is corpse!')
return 2
case:'0x0414'
case:'0x0146'
case:'0x0394'
case:'0x0681'
uo.print('what is it?!?!?')
return 3
end switch
return 0
end sub
Code: Select all
Sub GetCodeByGraphic(Graphic)
if Graphic=='0x0190' or Graphic=='0x0191' then
uo.print('this is human!')
return 1
else
if Graphic=='0x2006' then
uo.print('this is corpse!')
return 2
else
if Graphic=='0x0414' or Graphic=='0x0146' or Graphic=='0x0394' or Graphic=='0x0681' then
uo.print('what is it?!?!?')
return 3
endif
endif
endif
return 0
end sub
Оператор break - немедленно выходит из цикла (или из блока switch), в котором объявлен с сохранением всех переменных (существенно для цикла for)
Оператор continue - прерывает выполнение текущей итерации цикла и переходит на следующую (если это предусмотрено в рамках цикла)
Пример (по сути бесполезен, но если запустить будет видно где срабатывают continue и break):
Code: Select all
sub test_new_operators()
var i,test1=5,test2=7,test3=23,test_bool=1,test4=1
if test_bool then
for i=test4 to test3
switch i
uo.print('switch i')
case test1
uo.print('case test1')
while i>=test2-2 && i<=test3-3
i=i+1
if i==test3-6 then
uo.print('continue from while')
continue
endif
uo.print('i='+str(i))
wait(100)
if i==test3-5 then
i=test4+test2
uo.print('break from while')
break
endif
wend
uo.print('end of while')
case test4+test2+1
uo.print('test4+test2+1')
repeat
i=i+1
if i==test4+10 then
uo.print('continue from until')
continue
endif
uo.print('i='+str(i))
wait(100)
if i==test4+14 then
uo.print('break from until')
break
endif
until i>=test3-6
uo.print('end of until')
end switch
if i==test3-4 then
i=13
break
endif
next
uo.print('end of for with i='+str(i))
endif
end sub
Вот во что превратится такой скрипт:
Code: Select all
sub test_new_operators()
var BreakPointerVariable_2=0,BreakPointerVariable_3=0,BreakPointerVariable_0=0
var i,test1=5,test2=7,test3=23,test_bool=1,test4=1
if test_bool then
for i=test4 to test3
uo.print('switch i')
if i==test1 then
uo.print('case test1')
BreakPointerVariable_2=0
while BreakPointerVariable_2==0 and (i>=test2-2 && i<=test3-3)
i=i+1
if i==test3-6 then
uo.print('continue from while')
goto loc_continue_2
endif
uo.print('i='+str(i))
wait(100)
if i==test3-5 then
i=test4+test2
uo.print('break from while')
BreakPointerVariable_2=1
goto loc_continue_2
endif
loc_continue_2:
wend
uo.print('end of while')
else
if i==test4+test2+1 then
uo.print('test4+test2+1')
repeat
BreakPointerVariable_3=0
i=i+1
if i==test4+10 then
uo.print('continue from until')
goto loc_continue_3
endif
uo.print('i='+str(i))
wait(100)
if i==test4+14 then
uo.print('break from until')
BreakPointerVariable_3=1
goto loc_continue_3
endif
loc_continue_3:
until BreakPointerVariable_3==1 or (i>=test3-6)
uo.print('end of until')
endif
endif
if i==test3-4 then
i=13
BreakPointerVariable_0=i
i=test3
goto loc_continue_0
endif
BreakPointerVariable_0=i
loc_continue_0:
next
i=BreakPointerVariable_0
uo.print('end of for with i='+str(i))
endif
end sub