Page 1 of 1
Мой первый скрипт - на музыку :)
Posted: 2005-06-14 14:15:18
by Tergos
Что скажете по общему стилю написания? Где можно было сделать лучше и как?
Code: Select all
sub Music()
DIM[5]
instrument[0]='' ;Лютня
instrument[1]='' ;Арфа Не помню их типы :)
instrument[2]='' ;Бубен
instrument[3]='' ;Барабан
Var i=0
Var instrumentest=0, instrumentcurrent
Hide()
While instrumentest==0 and i<4
UO.FindType('instrument[i]')
if UO.FindCount >=1 then
instrumentest=1
instrumentcurrent=instrument[i]
endif
i=i+1
wend
if instrumentest==1 then
UO.Sayu(',warmode 0') ; На всякий случай
repeat
UO.Useobject('instrumentcurrent')
wait(100)
UO.Sayu(',warmode 1')
wait(100)
UO.Sayu(',warmode 0')
until UO.Dead() or UO.SkillVal('Musicianship')==1000
endif
endsub
Sub Hide()
While not UO.Hidden()==1
UO.UseSkill('Hiding')
UO.DeleteJournal()
repeat
wait(100)
until UO.InJournal('have hidden') or ('hide here')
wait(100)
wend
endsub
Posted: 2005-06-14 15:19:47
by Grin
Пообщему стилю?;) если бы этот скрипт работал то было бы наверно ничего;)
UO.FindType('instrument[i]') - фантастика
UO.Sayu(',warmode 1') - класс
until UO.InJournal('have hidden') or ('hide here') - фантастика
While not UO.Hidden()==1 - не рационально
UO.Useobject('instrumentcurrent') - из области фантастики;)
Как думаешь сколько ошибок тебе сразу выдаст парсер?;)
в общем тепер ьпо пунктам....
UO.FindType('instrument[i]')
ну и что тут? а тут унас зарание созданый тип объекта в вкладке ObjectType или просто строчка не понятного содержания а нам нужен элемент массива... по этому нах кавычки
UO.Useobject('instrumentcurrent')
тоже самое, утебя переменая instrumentcurrent объявлина поэтому выдергивай ее содержимое нах кавычки
UO.Sayu(',warmode 1')
uo.warmode(1)
until UO.InJournal('have hidden') or ('hide here')
вот обрати внимание на вторую часть ('hide here') как ты это понимаешь? Самое страное что я понимаю эо просто как выражение...
ясно дело что ты там хотел написчать UO.InJournal('hide here')
Но это уже не модно и все уже пишут UO.InJournal('have hidden|hide here')
While not UO.Hidden()==1
зачем писат ьтакую логику? не проще просто While not UO.Hidden()?
Posted: 2005-06-14 15:36:18
by Tergos
Grin wrote:UO.FindType('instrument[i]')
ну и что тут? а тут унас зарание созданый тип объекта в вкладке ObjectType или просто строчка не понятного содержания а нам нужен элемент массива... по этому нах кавычки
Не знал что он нормально всопримет просто имя переменной.
Grin wrote:UO.Sayu(',warmode 1')
uo.warmode(1)
хмм. т.е. команды вызываемые через запятую можно использовать в скрипте напрямую. Гуд.
Grin wrote:until UO.InJournal('have hidden') or ('hide here')
вот обрати внимание на вторую часть ('hide here') как ты это понимаешь? Самое страное что я понимаю эо просто как выражение...
ясно дело что ты там хотел написчать UO.InJournal('hide here')
Но это уже не модно и все уже пишут UO.InJournal('have hidden|hide here')
Нигде не видел пометки что такое выражение воспринимается нормально. Вот за это биг сенкс. Ну и разумеется имелось в виду UO.InJournal('hide here')
Grin wrote:While not UO.Hidden()==1
зачем писать такую логику? не проще просто While not UO.Hidden()?
т.е. опять же он нормально воспримет такое условие. Не был уверен в этом.
В целом - Вери Биг Сенкс за разъяснения.
Posted: 2005-06-14 15:48:44
by casper46
Пацаны завик так парится на счет какогото мусикалшипа на те скриптик сразу качается антисентемент музыка и ПИСмайкинг
Code: Select all
Var Animal1='0x003856CD'
sub Peacemaking()
var i=0
while uo.skillval('Peacemaking',1)<1000
i=i+1
if i==50 then
uo.usetype('0x097B')
wait(1000)
i=0
end if
cheklag()
uo.useskill('Peacemaking')
wait(3000)
wend
uo.closeuo()
end sub
sub Enticement()
var i=0
while uo.skillval('Enticement',1)<1000
i=i+1
if i==50 then
uo.usetype('0x097B')
wait(1000)
i=0
end if
cheklag()
uo.useskill('Enticement',Animal1)
wait(2500)
wend
uo.closeuo()
end sub
sub cheklag()
uo.deletejournal()
uo.click('backpack')
repeat
wait(10)
until uo.InJournal("backpack")
end sub
sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(20000) # WorldSave Protection
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
Wait(3000)
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub
sub MakeTime()
VAR D, T, Ret, i
Ret = STR(UO.Time())
T = ""
For i = 0 To Len(Ret)
T = Ret[Len(Ret)-i] + T
If (I == 2) OR (I == 4) Then
T = ":" + T
EndIf
Next
Ret = STR(UO.Date())
D = ""
For i = 0 To Len(Ret)
D = Ret[Len(Ret)-i] + D
If (I == 2) OR (I == 4) Then
D = "." + D
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub
Писал не я но скрипт овигеный короче до ГМа качается за 36часов!!!
[Убью ну вставляйте теги читать невозможно. I'm]
Posted: 2005-06-15 07:04:59
by Tergos
Я не люблю пользоваться чужими готовыми кодами. Как справочником - да, а для дела - сам напишу.
Вот что получилось после плейтеста:
Code: Select all
sub Music()
DIM instrument[5]
instrument[0]='0x0EB3'
instrument[1]='0x0EB2'
instrument[2]='0x0E9D'
instrument[3]='0x0E9C'
Var i=0
Var instrumentest=0, instrumentcurrent
While instrumentest==0 and i<4
UO.FindType(instrument[i])
if UO.FindCount() >=1 then
instrumentest=1
instrumentcurrent=instrument[i]
endif
i=i+1
wend
if instrumentest==1 then
UO.warmode(0)
repeat
UO.Usetype(instrumentcurrent)
wait(500)
UO.warmode(1)
wait(100)
UO.warmode(0)
wait(100)
until UO.Dead() or UO.SkillVal('Musicianship')==1000
endif
endsub
Posted: 2005-06-15 14:28:01
by Edred
Grin wrote:UO.Useobject('instrumentcurrent')
тоже самое, утебя переменая instrumentcurrent объявлина поэтому выдергивай ее содержимое нах кавычки
Кавычки здесь конечно стоят зря, но на настоящую ошибку ты сам внимание не обратил. Дело в том, что instrumentcurrent - это тип объекта, поэтому правильно надо было UO.Usetype(instrumentcurrent)
UO.Sayu(',warmode 1')
uo.warmode(1)
Оба написания работоспособны, на скорость не влияет. Здесь никакой ошибки нету.
Но это уже не модно и все уже пишут UO.InJournal('have hidden|hide here')
Первый раз слышу про такую моду. Прежде чем советовать - поинтересовался бы у человека, может он на старой длл-ке сидит. Я вот например сижу на 312.19 и большинству советую того же. Так что на фиг такую моду.
While not UO.Hidden()==1
зачем писат ьтакую логику? не проще просто While not UO.Hidden()?
Опять же, на работоспособность не влияет.
Posted: 2005-06-15 15:44:39
by Tergos
Дллька новая, посему работает и с '|'. А насчет того. что не ошибки - меня это и интересовало. оптимизация кода

Posted: 2005-06-25 12:18:59
by -=SweD=-
casper46 wrote:Пацаны завик так парится на счет какогото мусикалшипа на те скриптик сразу качается антисентемент музыка и ПИСмайкинг
Code: Select all
Var Animal1='0x003856CD'
sub Peacemaking()
var i=0
while uo.skillval('Peacemaking',1)<1000
i=i+1
if i==50 then
uo.usetype('0x097B')
wait(1000)
i=0
end if
cheklag()
uo.useskill('Peacemaking')
wait(3000)
wend
uo.closeuo()
end sub
sub Enticement()
var i=0
while uo.skillval('Enticement',1)<1000
i=i+1
if i==50 then
uo.usetype('0x097B')
wait(1000)
i=0
end if
cheklag()
uo.useskill('Enticement',Animal1)
wait(2500)
wend
uo.closeuo()
end sub
sub cheklag()
uo.deletejournal()
uo.click('backpack')
repeat
wait(10)
until uo.InJournal("backpack")
end sub
sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
if RFlag Then
ReconnectTime = MakeTime()
RFlag = 0
endif
Wait(20000) # WorldSave Protection
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.Say('')
Wait(3000)
UO.LDblClick(357,164)
UO.LClick(616,459)
Wait(3000)
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
UO.TextOpen()
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
RFlag = 1
ReconnectTime = '0'
endif
Until false
end sub
sub MakeTime()
VAR D, T, Ret, i
Ret = STR(UO.Time())
T = ""
For i = 0 To Len(Ret)
T = Ret[Len(Ret)-i] + T
If (I == 2) OR (I == 4) Then
T = ":" + T
EndIf
Next
Ret = STR(UO.Date())
D = ""
For i = 0 To Len(Ret)
D = Ret[Len(Ret)-i] + D
If (I == 2) OR (I == 4) Then
D = "." + D
EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub
Ну и как мне разобраться в твоём скрипте?
Code: Select all
UO.LDblClick(357,164)
UO.LClick(616,459)
Вот Это зачем например ?
Posted: 2005-06-25 13:36:23
by Boris
еще массив задан неверно
Code: Select all
DIM[4]
instrument[0]='' ;
instrument[1]='' ;
instrument[2]='' ;
instrument[3]='' ;
так надо, у тебя всего 4 эллемента а не 5