Есть скрипт, который ищет на дистанции в 28 тайлов игроков по типу указанному в массиве, если нашел то проверяет его цвет. Одна проблема как сделать правльную проверку на цвет ника. Т.к. например если чар синий и рядом находится какой-нибудь красный моб он определяет чела как красного. Не пойму как сделать чтобы он игнорил остальные типы или проверял только нужные мне. Подскажите пожалуйста. Вот сам скрипт
sub ScanPlayers() var Check var Message1,Message2 Message1="is attacking you" Message2="Wis Quas|In Ex Grav|An Ex Por|In Sanct Ylem|Vas An Ort" dim Char[2] Char[1]='0x0190' ; Male Char[2]='0x0191' ; Female
while not UO.Dead() for Check=1 to 2 UO.FindType(Char[Check],'-1','1')
if UO.FindCount()>0 then danger=UO.GetNotoriety(UO.JournalSerial(0)) if UnderAttack==1 and UO.InJournal(Message1) then ; Атака UO.Print('Бьют!') end if if SeeCasting==1 and UO.InJournal(Message2) then ; Каст caster=UO.JournalSerial(UO.InJournal(Message2)-1) UO.Cast('Magic Arrow',caster) end if if ComingRed==1 and danger==6 and UO.JournalSerial(0)<>UO.GetSerial() then ; Красный UO.Print('Красный!') return else wait(100) end if if ComingGrey==1 and danger==4 and UO.JournalSerial(0)<>UO.GetSerial() then ; Серый UO.Print('Серый!') return else wait(100) end if if ComingBlue==1 and danger==1 and UO.JournalSerial(0)<>UO.GetSerial() then ; Синий UO.Print('Синий!') return else wait(100) end if end if
У тебя нет проверки на ник игрока в твоем примере. if uo.getnotoriety(player) == 6 then ; <----- определяет "цвет" ника игрока Нужно вот так делать -- тогда не слетит.
Mirage wrote:У тебя нет проверки на ник игрока в твоем примере. if uo.getnotoriety(player) == 6 then ; <----- определяет "цвет" ника игрока Нужно вот так делать -- тогда не слетит.
sub ScanPlayers() var i,player,caster var Message1,Message2 Message1="is attacking you" Message2="Wis Quas|In Ex Grav|An Ex Por|In Sanct Ylem|Vas An Ort" UO.Ignore('self') UO.Set('finddistance','28') caster=''
dim Char[2] Char[1]='0x0190' ; Male Char[2]='0x0191' ; Female
while not UO.Dead() for i=1 to 2 UO.FindType(Char[i],'-1','1')
if UO.FindCount()>0 then player=UO.GetSerial('finditem') if UO.InJournal(Message1) then ; Атака UO.Print('Бьют!') end if
if UO.InJournal(Message2) then ; Каст caster=UO.JournalSerial(UO.InJournal(Message2)-1) UO.Cast('Magic Arrow',caster) end if
if UO.GetNotoriety(player)==6 then ; Красный UO.Print('Красный!') return else wait(100) end if
if UO.GetNotoriety(player)==4 then ; Серый UO.Print('Серый!') return else wait(100) end if
if UO.GetNotoriety(player)==1 then ; Синий UO.Print('Синий!') return else wait(100) end if end if
Правильно в оформлении но не правильно в применении. Во первых ты не написал цель своего скрипта. Ну нашел человека, ну определил направленность. А дальше? Во вторых в твоем первом примере направленность определялась словами ComingRed==1 if ComingBlue==1 и так далее. Ты не привел пример этой функции. Ошибка в ней была. В третьих по поводу второго скрипта. Если ты его запустишь, найдешь человека который тебя атакует скрипт повиснет повторяя фразу АТАКУЮТ!!!! Если чар будет кастовать то скрипт повиснет на касте стрелки. Если чар увидит красного\синего\серого игрока то скрипт выключится. Мораль пиши чего ты хочешь получить в конечном результате и проставляй паузы.
Mirage wrote:Правильно в оформлении но не правильно в применении. Во первых ты не написал цель своего скрипта. Ну нашел человека, ну определил направленность. А дальше? Во вторых в твоем первом примере направленность определялась словами ComingRed==1 if ComingBlue==1 и так далее. Ты не привел пример этой функции. Ошибка в ней была. В третьих по поводу второго скрипта. Если ты его запустишь, найдешь человека который тебя атакует скрипт повиснет повторяя фразу АТАКУЮТ!!!! Если чар будет кастовать то скрипт повиснет на касте стрелки. Если чар увидит красного\синего\серого игрока то скрипт выключится. Мораль пиши чего ты хочешь получить в конечном результате и проставляй паузы.
Переменные я убрал для удобства (ComingRed==1 if ComingBlue==1). Вообщем от скрипта хочу получить чтобы при обнаружении, атаке и касте он делал реколл... к примеру. Т.е. если срабатывает одно из условий скрипт загружает функцию реколла.
sub ScanPlayers() var i,player,caster var Message1,Message2 Message1="is attacking you" Message2="Wis Quas|In Ex Grav|An Ex Por|In Sanct Ylem|Vas An Ort" UO.Ignore('self') UO.Set('finddistance','24') caster='' dim Char[2] Char[1]='0x0190' ; Male Char[2]='0x0191' ; Female UO.DeleteJournal() while not UO.Dead() for i=1 to 2 UO.FindType(Char[i],'-1','1') if UO.FindCount()>0 then player=UO.GetSerial('finditem') if UO.GetNotoriety(player)==6 or UO.GetNotoriety(player)==4 or UO.InJournal(Message1) then UO.DeleteJournal() UO.Print('Улетаем') runehome() end if if UO.InJournal(Message2) then ; Каст caster=UO.JournalSerial(UO.InJournal(Message2)-1) UO.Cast('Magic Arrow',caster) wait(1000) ; паузу между кастами отрегулировать UO.DeleteJournal() runehome() end if wait(100) end if next wend end sub
sub ScanPlayers() var i,player,caster var Message1,Message2 Message1="is attacking you" Message2="Wis Quas|In Ex Grav|An Ex Por|In Sanct Ylem|Vas An Ort" UO.Ignore('self') UO.Set('finddistance','24') caster='' dim Char[2] Char[1]='0x0190' ; Male Char[2]='0x0191' ; Female UO.DeleteJournal() while not UO.Dead() for i=1 to 2 UO.FindType(Char[i],'-1','1') if UO.FindCount()>0 then player=UO.GetSerial('finditem') if UO.GetNotoriety(player)==6 or UO.GetNotoriety(player)==4 or UO.InJournal(Message1) then UO.DeleteJournal() UO.Print('Улетаем') runehome() end if if UO.InJournal(Message2) then ; Каст caster=UO.JournalSerial(UO.InJournal(Message2)-1) UO.Cast('Magic Arrow',caster) wait(1000) ; паузу между кастами отрегулировать UO.DeleteJournal() runehome() end if wait(100) end if next wend end sub
runehome() ссылка на sub runehome() - реколку.
Спасибо вроди бы работает. А чтобы он вырубался после действия это нужно к примеру в модуль реколла поставить ,terminate ScanPlayers или можно в этом скрипте придумать что-то ?