Резист на стенке (помогите исправить)

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
4ukca-
Posts: 3
Joined: 2008-08-24 10:40:48
Location: Владивосток

Резист на стенке (помогите исправить)

Post by 4ukca- »

Доброговсем времени суток! У меня возникла такая проблема, хотела прокачать резист и одновременно хилинг на шардфе forgotten world, нашла скрипт, который бы мне подошел, но он неправельно работает...

Я задаю координаты тайла куда нужно кастовать стенку (дом у меня стоит по оси z на 6 координате) но стенка кастуется почему под пол... Если я кастую ее на оси z=0 то все нормально... Но мне бы не хотелось переносить свой домик из-за какого скрипта... Тем более стенка все равно кастуется немного не туда...

Далее хилинг не хочет работать, после первого хела чар просто стоит и ничего не делает... Сначала я думала что это из-за месаг, я переписала их на те что у нас на шарде но эффект остался прежним...

Помогите доработать скрипт! Буду очень благодарна! :)

Code: Select all

sub Resist() 
; (c) Destruction, v1.0
Var CastT = 1200 ; тип тайла на который кастуем
Var CastX = 1328 ; координата X тайла на который кастуем
Var CastY = 1055 ; координата Y тайла на который кастуем
Var CastZ = 6    ; координата 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 = "You put the bloody bandage"
Var f = "You apply the badages"
Var w = "Do you wanna make a mummy?"
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
[/code]
4ukca-
Posts: 3
Joined: 2008-08-24 10:40:48
Location: Владивосток

Post by 4ukca- »

Ап! Люди что никто не знает в чем проблема?
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Var CastZ = 6 ; координата Z тайла на который кастуем
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
4ukca-
Posts: 3
Joined: 2008-08-24 10:40:48
Location: Владивосток

Post by 4ukca- »

Конечно спасибо, но это вроде понятно. Только он все равно кастует в нулевую координату, хоть там 12 ставь...
Post Reply