Как бы определить объекты вокруг себя
Moderators: Murderator+, Murderator
Как бы определить объекты вокруг себя
Чар кастует вокруг себя стенки огня, как бы определить есть ли стена огня в тех тайлах куда оно колдовалось, дабы не колдовать постоянно эти стенки вокруг себя и не тратить реги
. я пишу свои перый скрипт и делаю маленький шаг в программировании вообще
. Так что не шлите меня по ссылкам. Заранее благодарю
Last edited by Rijo on 2006-05-02 13:03:55, edited 1 time in total.
-
Scripts Writer
- Posts: 2259
- Joined: 2005-04-19 18:00:29
- Location: Московская область
- Contact:
-
Scripts Writer
- Posts: 2259
- Joined: 2005-04-19 18:00:29
- Location: Московская область
- Contact:
если не ошибаюсь , в журнале отписывается
Code: Select all
Body( items)Я хочу вот этот код запихать, чтобы он врубался когда находился труп. Может в коде можно что тосделать, чтобы он по кругу проверял новые трупы на нужные вещи.
Code: Select all
sub Loot2()
VAR i
DIM Loot[20]
Loot[0]=0x1089 ;
Loot[1]=0x1F0A ;
Loot[2]=0x1F07 ;
Loot[3]=0x1F06 ;
Loot[4]=0x1F09 ;
Loot[5]=0x108A ;
Loot[6]=0x0EED ;
Loot[7]=0x1086 ;
Loot[8]=0x1087 ;
Loot[9]=0x1F08 ;
Loot[10]=0x1088 ;
UO.UseObject('lastcorpse')
if UO.GetQuantity('lastcorpse') then
UO.SetArm('temp')
UO.WaitTargetObject('lastcorpse')
UO.UseType('0x000') ;dagger
wait(500)
UO.Arm('temp')
wait(500)
endif
UO.SetReceivingContainer('0x40099AA2') ; loot store bag
For i=0 to 10
UO.FindType(Loot[i],-1,'ground')
if UO.GetQuantity('finditem') then
UO.Grab(STR(0),'finditem')
wait(1000)
endif
if UO.GetQuantity('lastcorpse') then
UO.FindType(Loot[i],-1,'lastcorpse')
if UO.GetQuantity('finditem') then
if Loot[i]==0x1078 then
UO.WaitTargetObject('finditem')
UO.UseType('0x0F9E')
else
UO.Grab(STR(0),'finditem')
endif
wait(1000)
endif
endif
next
UO.UnSetReceivingContainer()
else
wait(1000)
endif
end sub -
Scripts Writer
- Posts: 2259
- Joined: 2005-04-19 18:00:29
- Location: Московская область
- Contact:
ну так зацыкли его ввиде:
это к примеру, а так-сам продумай и отредактируй. Или же опиши точнее,что и как.
п.с. Loot[20] = это ты замудрил конешно
могу пример привести :
ищет,как нашел-забивает в переменную труп, и запускает скрипт лута, затем игнорит труп, чтобы в следующий раз не видеть его =\ -эт грубый пример
Code: Select all
whle not uo.Dead()
while not uo.InJournal('Body')
wait(500)
wend
. . .это к примеру, а так-сам продумай и отредактируй. Или же опиши точнее,что и как.
п.с. Loot[20] = это ты замудрил конешно
могу пример привести :
Code: Select all
var tryp
var body
var color
uo.Set('finddistance','5')
while not uo.Dead()
if uo.InJournal('Body') then
uo.FindType(body,color,'ground')
tryp=uo.GetSerial('finditem')
Loot()
uo.Ignore(tryp)
else
wait(500)
end if
wend
uo.IgnoreReset()ищет,как нашел-забивает в переменную труп, и запускает скрипт лута, затем игнорит труп, чтобы в следующий раз не видеть его =\ -эт грубый пример
Ну скрипт у меня запахал, вроде бы даже без ошибок. Но проверку на труп, после которой бы начинался лут я не придумал, наверно моск еще мыслит не в том направлении
. Если кто сможет предложить что нибудь интересное, я посмотрю
.
Моя проверка через инжектовский журнал, когда проверяется надпись "Body of" почему то не хочет пахать
И вот только что заметил после продолжительного теста, что проверка на количество огня тоже не пашет
while not UO.FindType(0x398C ,-1,'ground') > 6 - это может быть похоже на правду, где 0x398C-тип одного тайла стены огня
Моя проверка через инжектовский журнал, когда проверяется надпись "Body of" почему то не хочет пахать
И вот только что заметил после продолжительного теста, что проверка на количество огня тоже не пашет
while not UO.FindType(0x398C ,-1,'ground') > 6 - это может быть похоже на правду, где 0x398C-тип одного тайла стены огня
-
Savage
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Финдтайп возвращает указатель на объект, чтобы исследовать количество найденных итемов надо потом юзануть UO.FindCount()
По поводу боди и трупов, попробуй ввести ,set injectecho 1 и ,saveconfig так же у трупов разных мастей один тип 0x2006, можно делать поиск по нему и потом применять некоторую логику. То есть если труп уже был найден, игнорить его или нечто подобное.
По поводу боди и трупов, попробуй ввести ,set injectecho 1 и ,saveconfig так же у трупов разных мастей один тип 0x2006, можно делать поиск по нему и потом применять некоторую логику. То есть если труп уже был найден, игнорить его или нечто подобное.
ну вот он собсно скрипт, не забудьте что первый мной написанный, хотя много что просто стырино у других, копирайты не ставил потому что не знаю кто их написал
. Добваьте пожалуста проверок. Коменты как токовые не ставил, думаю там все понятно, для тех кто может мне помочь
. Переменные добваил, но не использовал, потом сриптик маленький на АнтиПк добавлю. Скрипт для очень узкой функциональности
Если подскажите способ скриптования полегче, то буду рад впитать в себя информацию
Code: Select all
var PKMagArr = "In Por Ylem"
var PKTeleport = "Rel Por"
var PKParaliz = "An Ex Por"
var PKpf = "In Ex Grav"
var PKPoison = "In Nox"
var Apk = 0
var RecallHome = 0
var Chest='0x401AE9BA'
var fire = 1
var tryp = '0x2006'
var color
var WaitTime = 5000
#################################################################
sub DetectForLoot()
while not uo.Dead()
Loot()
wait(500)
wend
end sub
#################################################################
sub ForFire()
while not uo.Dead()
if uo.mana < uo.int then
Medit()
wait(500)
else
DetectFire()
wait(500)
endif
wend
wait(500)
end sub
#################################################################
sub DetectFire()
uo.Set('finddistance','0')
UO.FindType(0x398C ,-1,'ground')
if UO.FindCount() < 6 then
FireAround()
wait(500)
endif
wait(500)
end sub
#################################################################
sub FireAround()
uo.waittargettile("400",str(uo.getx("self")),str(uo.gety("self")+1),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")),str(uo.gety("self")-1),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")-1),str(uo.gety("self")),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")+1),str(uo.gety("self")),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
uo.waittargettile("400",str(uo.getx("self")),str(uo.gety("self")),str(uo.getz("self")-20))
uo.cast("Fire Field")
wait(WaitTime)
wait(500)
end sub
#################################################################
sub Medit()
UO.DeleteJournal()
wait(1000)
UO.Useskill('Meditation')
Repeat
wait(100)
until UO.InJournal("You are") OR UO.InJournal("Ìåäèòàöèÿ")
wait(500)
end sub
#################################################################
sub Loot()
VAR i
DIM Loot[10]
Loot[0]=0x1089 ;
Loot[1]=0x1F0A ;
Loot[2]=0x1F07 ;
Loot[3]=0x1F06 ;
Loot[4]=0x1F09 ;
Loot[5]=0x108A ;
Loot[6]=0x0EED ;
Loot[7]=0x1086 ;
Loot[8]=0x1087 ;
Loot[9]=0x1F08 ;
Loot[10]=0x1088 ;
UO.UseObject('lastcorpse')
if UO.GetQuantity('lastcorpse') then
UO.WaitTargetObject('lastcorpse')
UO.UseType('0x000') ;dagger
wait(500)
endif
UO.SetReceivingContainer('0x40099AA2') ; loot store bag
For i=0 to 10
UO.FindType(Loot[i],-1,'ground')
if UO.GetQuantity('finditem') then
UO.Grab(STR(0),'finditem')
wait(1000)
endif
if UO.GetQuantity('lastcorpse') then
UO.FindType(Loot[i],-1,'lastcorpse')
if UO.GetQuantity('finditem') then
if Loot[i]==0x1078 then
UO.WaitTargetObject('finditem')
UO.UseType('0x0F9E')
else
UO.Grab(STR(0),'finditem')
endif
wait(1000)
endif
endif
next
UO.UnSetReceivingContainer()
wait(500)
end sub
Если подскажите способ скриптования полегче, то буду рад впитать в себя информацию
-
Savage
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Это точно работает?
Дело в том что ты объявляешь массив из 10 элементов а используешь 11. Должна быть ошибка выхода за границы массива, что ведет к довольно неожиданным результатам
Если ты подробно объяснищь чего хочешь достичь в своем скрипте, то возможно тут объяснят как это сделать правильно, красиво и коротко
Более того, а впроцессе формулировки вопроса ты сам построешь линейный алгоритм решения своей задачи
Дело в том что ты объявляешь массив из 10 элементов а используешь 11. Должна быть ошибка выхода за границы массива, что ведет к довольно неожиданным результатам
Если ты подробно объяснищь чего хочешь достичь в своем скрипте, то возможно тут объяснят как это сделать правильно, красиво и коротко
Более того, а впроцессе формулировки вопроса ты сам построешь линейный алгоритм решения своей задачи
Ты говоришь про масси функции лута? Хм, кстати да. А я думаю, че то он у меня поттупливает. Скрпит в общем кое как да работает. Массив я щас исправлю. А принцип действия скрипта таков. Я стою на крыше здания и кидаю стену огня сковзь пол крыши на пол который находится под крышей. НПСники видя меня начинают бежать на меня и атачить, и тем самым попадают в мой огонь. После того как они умерают я их лучу и все
.
Огноь я пускаю вокруг себя, но на координата Z ниже своих на 20.
Вот меня интересует такие вопросы:
1.Как бы поточнее сделать проверку на то что вокруг меня огня хватает. Я использую такой способ, не очень точный и вообще на мой взгляд ничего не делающий
:
UO.FindType(0x398C ,-1,'ground')
if UO.FindCount() < 6 then
2.Как запускать лут трупа с появления строки в журнале. И как бы сделать так чтобы он не оставлял на трупах ничего нужного, псейчас, когда падают сразу 2 нпс он лутит только с одного
Огноь я пускаю вокруг себя, но на координата Z ниже своих на 20.
Вот меня интересует такие вопросы:
1.Как бы поточнее сделать проверку на то что вокруг меня огня хватает. Я использую такой способ, не очень точный и вообще на мой взгляд ничего не делающий
UO.FindType(0x398C ,-1,'ground')
if UO.FindCount() < 6 then
2.Как запускать лут трупа с появления строки в журнале. И как бы сделать так чтобы он не оставлял на трупах ничего нужного, псейчас, когда падают сразу 2 нпс он лутит только с одного
-
Savage
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
1. С проверкой на огонь париться не стоит, кастуешь стену, засекаешь время как первый из 7 сполохов огня погас значит пора ставить новую. Потом проверяешь свое время на простеньком скрипте который кастует стенку, ждет, кастует снова.
2. Тебе нужно лутить в цикле с последующим игнором полутанного трупа.
2. Тебе нужно лутить в цикле с последующим игнором полутанного трупа.
Savage wrote:1. С проверкой на огонь париться не стоит, кастуешь стену, засекаешь время как первый из 7 сполохов огня погас значит пора ставить новую. Потом проверяешь свое время на простеньком скрипте который кастует стенку, ждет, кастует снова.
2. Тебе нужно лутить в цикле с последующим игнором полутанного трупа.
Ну вот с игнором я немного не допонял, хотя в принципе сильно не разбарался, потому что щас ночь у меня и мозг уже спит. Может приведешь пример, тока с поясняловом. Заранее благодарю
-
Savage
- Expert!
- Posts: 1205
- Joined: 2004-04-04 11:13:54
- Location: Балаково, Саратовская обл.
- Contact:
Code: Select all
VAR Exit=0
UO.IgnoreReset()
While Exit<>1
UO.FindType(Trup, -1,'ground')
If Uo.FindCount() Then
Loot()
Else
Exit=1
Endif
UO.IgnoreItem('finditem')
Wend
Почему же у тебя через сообщение 'Body of' не работает? Вот простой и надежный скрипт, я когда играл и зоннерил, постоянно его в фон запускал:
Code: Select all
#####################################################################
; BackgroundZonner. v.1.02b (c) Edred
;
; Ожидание сообщения 'Body of' и автоматический лут последнего трупа.
;
sub BackgroundZonner()
VAR msg1 = 'Body of'
VAR flag = 1
If UO.Targeting() Then
UO.CancelTarget()
Endif
DeleteJournal( msg1 )
While NOT UO.Dead()
If UO.InJournal( msg1 ) Then
DeleteJournal( msg1 )
AutoLoot()
Else
wait(300)
Endif
Wend
endsubНу видно пальцы еще не выпрямились чтобы нормально скрипты писать
. Нада у You Must Die спросить где можно скачать ruki.exe. Я думаю это хорошая программка по выпрямлению пальцев рук 
Last edited by Rijo on 2006-05-02 02:09:10, edited 1 time in total.
Savage wrote:Это точно работает?
Дело в том что ты объявляешь массив из 10 элементов а используешь 11. Должна быть ошибка выхода за границы массива, что ведет к довольно неожиданным результатам
Если ты подробно объяснищь чего хочешь достичь в своем скрипте, то возможно тут объяснят как это сделать правильно, красиво и коротко
Более того, а впроцессе формулировки вопроса ты сам построешь линейный алгоритм решения своей задачи
Немного не понял. Где я использую 11 элементов массива? Я объявил от 0 до 10, вот и использую... Наверно я чего то недопонял тебя или не доразгялядел в скрипте
Проверка на огонь работает у меня подобным образом
Проверяется каждые 10 секнуд, есть ли вокруг меня 9 тейлов огня
Code: Select all
#################################################################
sub DetectFire()
uo.Set('finddistance','1')
UO.FindType(0x398C ,-1,'ground')
if UO.FindCount() < 9 then
FireAround()
wait(500)
else
wait(10000)
endif
wait(500)
end sub
Проверяется каждые 10 секнуд, есть ли вокруг меня 9 тейлов огня
-
Scripts Writer
- Posts: 2259
- Joined: 2005-04-19 18:00:29
- Location: Московская область
- Contact: