Page 1 of 1

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

Posted: 2008-08-24 10:54:58
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]

Posted: 2008-08-25 20:49:28
by 4ukca-
Ап! Люди что никто не знает в чем проблема?

Posted: 2008-08-25 23:37:55
by Destruction
Var CastZ = 6 ; координата Z тайла на который кастуем

Posted: 2008-08-26 05:45:39
by 4ukca-
Конечно спасибо, но это вроде понятно. Только он все равно кастует в нулевую координату, хоть там 12 ставь...