Code: Select all
sub Resist()
; (c) Destruction, v1.0
Var CastT = 1200 ; тип тайла на который кастуем
Var CastX = 1328 ; координата X тайла на который кастуем
Var CastY = 1055 ; координата Y тайла на который кастуем
Var CastZ = 7 ; координата Z тайла на который кастуем
Var StayX = 1328 ; место для отхила и каста по X
Var StayY = 1056 ; место для отхила и каста по Y
Var ManaCast = 11 ; нужно маны на спелл
Var Spell = "Fire Field" ; кастуемый спелл
Var GoType = "X" ; по какой координате ходить
Var GoDist = 2 ; как далеко ходить, от точки каста
Var Damage = 5 ; максимальный урон наносимый огненной стеной
Repeat
MyGo(StayX,StayY)
MyCheckReag()
CheckMana(ManaCast)
FullHeal()
Medit()
MyGroundCast(Spell, CastT, CastX, CastY, CastZ)
MyRWalker(CastX,CastY,GoType,GoDist,Damage)
MyGoFromField(CastX, CastY, GoType, StayX, StayY)
Until uo.SkillVal("Magic Resistance",1) > 999
End Sub
Sub MyGoFromField(x, y, t, sX, sY)
var GoX, GoY
If t == "x" || t == "X" Then
If sY > y Then
GoY = uo.GetY()+1
Else
GoY = uo.GetY()-1
End If
GoX = uo.GetX()
Else
If sX > x Then
GoX = uo.GetX()+1
Else
GoX = uo.GetX()-1
End If
GoY = uo.GetY()
End If
MyGo(GoX, GoY)
End Sub
Sub MyRWalker(x, y, t, d, dmg)
Var Field = "0x398C" ; тип огненной стены
Var Count = 7 ; Количество появляющихся огненных стен
var GoX = x, GoY = y, dist
MyGo(x, y)
While uo.GetHP() > 60 && uo.CountGround(Field) >= Count
dist = Math.Round((uo.GetHP()-60)/dmg)
If dist > d Then
dist = d
End If
If t == "X" || t == "x" Then
GoX = GoX - dist
GoY = GoY
Else
GoX = GoX
GoY = GoY - dist
EndIf
MyGo(GoX, GoY)
If uo.GetHP() < 60 || uo.CountGround(Field) < Count Then
return
End If
dist = Math.Round((uo.GetHP()-60)/dmg)
If dist > d*2 Then
dist = d*2
End If
If t == "X" || t == "x" Then
GoX = GoX + dist
GoY = GoY
Else
GoX = GoX
GoY = GoY + dist
EndIf
MyGo(GoX, GoY)
If uo.GetHP() < 60 || uo.CountGround(Field) < Count Then
return
End If
dist = Math.Round((uo.GetHP()-60)/dmg)
If dist > d Then
dist = d
End If
If t == "X" || t == "x" Then
GoX = GoX - dist
GoY = GoY
Else
GoX = GoX
GoY = GoY - dist
EndIf
MyGo(GoX, GoY)
WEnd
End Sub
Sub Math.Round(val)
var i=1
While Not Right(Left(str(val),i),1) == "."
If i > StrLen(str(val)) Then
Return val
End If
i = i + 1
WEnd
Return val(Left(str(val),i-1))
endsub
Sub MyCheckReag()
Var c, i, ReagCount = 4 ; количество типов реагентов
Var ReagCnt = "0x40021A29" ; ID сумки с реагентами
DIM Reagents[val(str(ReagCount))]
Reagents[0] = "0x0F8C" ; Sulfurous Ash
Reagents[1] = "0x0F7A" ; Black Pearls
Reagents[2] = "0x0F8D" ; Spider Silk
Reagents[3] = "0x0E21" ; Bandage
For i=0 To ReagCount-1
uo.FindType(Reagents[i])
If uo.FindCount() Then
c = uo.GetQuantity("finditem")
Else
c = 0
End If
While c < 50
uo.FindType(Reagents[i],"-1",ReagCnt)
If Not uo.FindCount() Then
uo.Print("Reagents Not Found!")
uo.Exec("terminate all")
End If
uo.MoveItem("finditem",str(50-c),"backpack")
checklag()
uo.FindType(Reagents[i])
If uo.FindCount() Then
c = uo.GetQuantity("finditem")
Else
c = 0
End If
WEnd
Next
End Sub
Sub MyGroundCast(s, t, x, y, z)
Var Field = "0x398C" ; тип огненной стены
Var Count = 7 ; Количество появляющихся огненных стен
Var Mana
While uo.CountGround(Field) < Count
Mana = uo.Mana
uo.WaitTargetTile(t, x, y, z)
uo.Cast(s)
While Mana == uo.Mana
Wait(100)
WEnd
WEnd
End Sub
Sub FullHeal()
Var s = "Вы полечили себя."
Var f = "Вам не удалось полечить себя."
Var w = "Вы пока не можете пользоваться бинтами снова."
While uo.GetHP() < uo.GetMaxHP()
deljournal(s+"|"+f+"|"+w)
uo.WaitTargetObject('self')
uo.UseType('bandage')
Repeat
Wait(100)
Until uo.InJournal(s+"|"+f+"|"+w)
If uo.InJournal(w) Then
Wait(500)
End If
WEnd
End Sub
Sub CheckMana(ManaCast)
While uo.Mana < ManaCast
uo.UseSkill("Meditation")
wait(100)
WEnd
End Sub
Sub MyGo(GoX, GoY)
Var CurX, CurY, Dir = MyGetDir(GoX, GoY)
DIM Dirs[10]
Dirs[1] = 35 ; End
Dirs[2] = 40 ; Down
Dirs[3] = 34 ; PgDown
Dirs[6] = 39 ; Right
Dirs[9] = 33 ; PgUp
Dirs[8] = 38 ; Up
Dirs[7] = 36 ; Home
Dirs[4] = 37 ; Left
DIM sDir[10]
sDir[3] = 2
sDir[2] = 3
sDir[1] = 6
sDir[0] = 9
sDir[7] = 8
sDir[6] = 7
sDir[5] = 4
sDir[4] = 1
While Dir
CurX = uo.GetX()
CurY = uo.GetY()
If Not sDir[uo.GetDir()] == Dir Then
uo.Press(Dirs[Dir],2)
Else
uo.Press(Dirs[Dir])
End If
While uo.GetX() == CurX && uo.GetY() == CurY
wait(100)
WEnd
Dir = MyGetDir(GoX, GoY)
WEnd
endsub
Sub MyGetDir(x, y)
Var cx, cy
x = -(uo.GetX() - x)
y = -(uo.GetY() - y)
cx = x
cy = y
If cx <= 0 Then
cx = -cx
End If
If cy <= 0 Then
cy = -cy
End If
If cx+cy Then
If x>0 && y>0 && x==y Then
Return 2
End If
If x>0 && cx>cy Then
Return 3
End If
If x>0 && y<0 && cx==cy Then
Return 6
End If
If y<0 && cy>cx Then
Return 9
End If
If x<0 && y<0 && x==y Then
Return 8
End If
If x<0 && cx>cy Then
Return 7
End If
If x<0 && y>0 && cx==cy Then
Return 4
End If
If y>0 && cy>cx Then
Return 1
End If
Else
Return False
End If
End Sub
Sub Medit()
While uo.Mana < uo.Int
uo.UseSkill("Meditation")
Wait(300)
WEnd
End Sub
Во, шедевр нах!
Чар кастует стенку, ходит по ней, когда хитов меньше 60 или пропала хоть одна стенка - отходит, отхиливается, если надо - ставит новую стенку..
Вобщем сами разбирайтесь, вроде работает..
Помывку бинтов потом как-нить воткну, ибо ща савсем лень.