Page 1 of 1

Fishing - перс эррор

Posted: 2008-08-12 14:37:25
by stella
Есть скрипт на фишинг, но независимо от действий ( я так думаю ) он выдаёт ошибки парс эррор и скрипт перестаёт работать, могу только запустить - он сразу выдадит ошибку, может и попоже. Суть скрипта - ловит рыбу на лодке, пробивает точки где ловится и там потом ловит, если подлетает какаято нечесть одевает оружие и начинает колбасить. Рыбку складывает на лодочке под собой.

Code: Select all

var RandomFlag = 0 
var UpOrFish = 1 
var GZExist = 0 
var GZTimer = 0 
var NextDot = 0 
var bandages = "0x02e1" 
var meal = "0x097b" 
var SOSBP = "ground" 
var MapBP = "ground" 
var Enemy = "self" 
var WType = "0x0F51" 
var fPole = "0x0dbf" 
var fTime = 3500 
var fPoleSize = 0 
var GlobalFileMap = 'fpoint.map' 
var FishLagTimer = 0 

sub main() 
Init() 
var EnemyExists, EatTimer, fPoint 
DIM FishingMap[121] 
DIM FishingStuff[6] 
FishingStuff[0] = "0x09CC" # Grey Fish 
FishingStuff[1] = "0x09CD" # Green Fish 
FishingStuff[2] = "0x09CE" # Blue Fish 
FishingStuff[3] = "0x09CF" # Yellow Fish 
FishingStuff[4] = "0x099F" # SOS bottle 
FishingStuff[5] = "0x14ED" # old tattered map 

if CheckFExist(GlobalFileMap) then 
ReadFile(GlobalFileMap, FishingMap) 
else 
fPoleSize = CreateMap(FishingMap) 
SToFile(FishingMap, fPoleSize, GlobalFileMap) 
endif 
FishLagTimer = UO.Timer() 
SetFishTime(FishingMap[0]) 
fPoint = 0 
repeat 
CheckSave() 
If ((UO.Timer() - EatTimer) > 3000) then 
EatCheck() 
EatTimer = UO.Timer() 
EndIf 
While CheckDanger() 
TryToRes(1) 
UO.DeleteJournal() 
WEnd 
CheckEq(fPole) 
If UpOrFish Then 
if NextDot Then 
fPoint = fPoint + 1 
NextDot = 0 
else 
fPoint = fPoint 
endif 
if (fPoint == fPoleSize) then 
fPoint = 0 
endif 
Else # UpOrFish 
if RandomFlag then 
fPoint = UO.Random(fPoleSize) 
else # RandomFlag 
fPoint = fPoint + 1 
if (fPoint == fPoleSize) then 
fPoint = 0 
endif # fPoint == fPoleSize 
endif # RandomFlag 
EndIf # UpOrFish 
If ((UO.Timer() - FishLagTimer) > 9000) then 
SetFishTime(FishingMap[fPoint]) 
FishLagTimer = UO.Timer() 
EndIf 
Fish(FishingMap[fPoint]) 
If (UO.Weight > 370) Then 
DropIt(FishingStuff) 
EndIf 
until false 
end sub 

sub GZCheck() 
var GZE = 0 
CheckSave() 
UO.ServerPrint('.guards') 
Wait(5000) 
if CheckMsg('This area is not watched','System') then 
UO.Print('No guards') 
else 
GZE = 1 
UO.Print('Guard Zone!') 
endif 
return GZE 
end sub 

sub Init() 
UO.TextOpen() 
UO.TextPrint('Скрипт стартовал: '+MakeTime()) 
UO.Exec('terminate Reconnector') 
UO.Exec('exec Reconnector') 
Wait(2000) 
UO.Print('An exceptional fishing script v1.0 Release [crafted by totus]') 
Wait(2000) 
GZTimer = UO.Timer() 
GZExist = GZCheck() 
UO.Set('norbcheck','1') 
UO.Set('norbcalc','1') 
UO.Set('finddistance','3') 
UO.Set('distance','2') 
end sub 

sub CreateMap(mapArray) 
DIM tileArray[7] 
tileArray[0] = '0' 
tileArray[1] = '6039' 
tileArray[2] = '6040' 
tileArray[3] = '6041' 
tileArray[4] = '6042' 
tileArray[5] = '6043' 
tileArray[6] = '6044' 
DIM FishMsg[6] 
FishMsg[0] = 'You catch' 
FishMsg[1] = 'You find' 
FishMsg[2] = 'That location' 
FishMsg[3] = 'That is too far' 
FishMsg[4] = 'There does' 
FishMsg[5] = 'You can' 
var mX, mY, mZ, StopFuckingSearch, nTileNum, cDelta, dX, dY 
cDelta = 5 
mX = UO.GetX() 
mY = UO.GetY() 
mZ = '251' 
var mSize = 0 
nTileNum = 0 
for dX = -cDelta to cDelta 
for dY = -cDelta to cDelta 
StopFuckingSearch = 0 
nTileNum = 0 
repeat 
CheckSave() 
CheckEq(fPole) 
UO.Print('Fishing @: '+tileArray[nTileNum]+' '+STR(mX+dX)+' '+STR(mY+dY)+' '+mZ) 
Fish(tileArray[nTileNum]+' '+STR(mX+dX)+' '+STR(mY+dY)+' '+mZ) 
if (CheckMsg(FishMsg[0],'System') or CheckMsg(FishMsg[1],'System')) Then 
mapArray[mSize] = tileArray[nTileNum]+' '+STR(mX+dX)+' '+STR(mY+dY)+' '+mZ 
mSize = mSize + 1 
StopFuckingSearch = 1 
else 
if CheckMsg(FishMsg[2],'System') then 
StopFuckingSearch = 1 
endif 
endif 
UO.DeleteJournal() 
nTileNum = nTileNum + 1 
if (nTileNum == 7) then 
StopFuckingSearch = 1 
endif 
until StopFuckingSearch 
next 
next 
Return mSize 
end sub 

sub CheckMsg(cMsg, mAuthor) 
var ij 
ij = UO.InJournal(cMsg) 
if ij Then 
if (UO.JournalSerial(ij+1) == mAuthor) then 
return ij+1 
else 
if (mAuthor == 'System') and (UO.JournalSerial(ij+1) == '0x01010101') then 
return ij+1 
endif 
endif 
else 
return 0 
endif 
end sub 

sub CheckFExist(fName) 
var FileResult = 0 
var xx = file(fName) 
FileResult = safe call xx.Open() 
Return FileResult 
end sub 

sub SToFile(wtSave, wtsSize, fName) 
var wtsLNum 
var f=file(fName) 
f.Create() 
f.Open() 
f.WriteLn(STR(wtsSize)) 
for wtsLNum = 0 to (wtsSize - 1) 
f.WriteLn(wtSave[wtsLNum]) 
next 
f.Close() 
end sub 

sub ReadFile(fName, Pole) 
var tFile = file(fName) 
var LLLine, lNum, lSize 
tFile.Open() 
lSize = safe call tFile.ReadNumber() 
fPoleSize = lSize 
safe call tFile.ReadLn() 
if ((lSize > 0) and IsNumber(lSize)) then 
for lNum = 0 to fPoleSize - 1 
LLLine = safe call tFile.ReadLn() 
Pole[lNum] = Left(LLLine,LEN(LLLine)-1) 
next 
else 
Message('Файл пуст') 
UO.Exec("terminate all") 
endif 
UO.TextPrint('Количество точек вылова:'+STR(lSize)) 
tFile.Close() 
end sub 

sub AutoLootSelf() 
var CorpseType, CorpseID, SelfID 
SelfID = UO.GetSerial() 
UO.Click(SelfID) 
UO.IgnoreReSet() 
If (UO.GetGraphic(UO.GetSerial()) == '0x0190') Then 
CorpseType = '0x2006' 
Else 
CorpseType = '0x2006' 
EndIf 
UO.FindType(CorpseType,'-1','ground') 
If (UO.FindCount() > 0) then 
repeat 
UO.FindType(CorpseType,'-1','ground') 
CorpseID = UO.GetSerial('finditem') 
UO.Click(CorpseID) 
if (Right(UO.GetName(CorpseID),Len(UO.GetName(SelfID))) == UO.GetName(SelfID)) Then 
UO.Emptycontainer('50',CorpseID) 
Wait(500) 
UO.Emptycontainer('50',CorpseID) 
Wait(500) 
endif 
UO.Ignore(CorpseID) 
UO.FindType(CorpseType,'-1','ground') 
until (UO.FindCount() == 0) 
endif 
end sub 

sub CheckSpells() 
VAR Si, nStop, Result, JPos 
JPos = 0 
Si = 0 
nStop = 1 
Result = 0 
DIM BadSpells[20] 
BadSpells[0] = "In Por Ylem" 
BadSpells[1] = "An Mani" 
BadSpells[2] = "Vas Flam" 
BadSpells[3] = "In Nox" 
BadSpells[4] = "Des Sanct" 
BadSpells[5] = "In Flam Grav" 
BadSpells[6] = "Ort Grav" 
BadSpells[7] = "In Jux Hur Ylem" 
BadSpells[8] = "Por Corp Wis" 
BadSpells[9] = "An Ex Por" 
BadSpells[10] = "Corp Por" 
BadSpells[11] = "Vas Ort Flam" 
BadSpells[12] = "In Ex Grav" 
BadSpells[13] = "Vas Flam" 
BadSpells[14] = "Kal Vas Xen" 
BadSpells[15] = "attacking you*" 
BadSpells[16] = "Ort Rel" 
BadSpells[17] = "Ort Sanct" 
BadSpells[18] = "Flam Kal Des Ylem" 
BadSpells[19] = "In Vas Por" 
While nStop 
JPos = UO.InJournal(BadSpells[Si]) 
If JPos Then 
UO.TextPrint("Чар '"+UO.GetName(UO.JournalSerial(JPos-1))+"' - зафиксирована атака..") 
UO.ServerPrint(UO.GetName(UO.JournalSerial(JPos-1))+" ne kill pliz ya nub na macrose!!!") 
Result = 1 
EndIf 
Si = Si + 1 
If ((Si == 20) or (Result == 1)) Then 
nStop = 0 
EndIf 
WEnd 
Return Result 
end sub 

sub IsDanger(dcNum)
VAR Danger_cnt, Cycle_cnt, EmergencyFlag
EmergencyFlag = 0
UO.IgnoreReset() 
UO.Set('finddistance','10')
if (dcNum == 0) Then
UO.IgnoreReSet()
UO.FindType('0x0010','-1','ground')
Danger_cnt = UO.FindCount()
If Danger_cnt > 0 Then
For Cycle_cnt = 0 To Danger_cnt - 1
UO.FindType('0x0010','-1','ground')
If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
UO.Click(UO.GetSerial('finditem'))
UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
EmergencyFlag = 1
Enemy = UO.GetSerial('finditem')
EndIf
UO.Ignore('finditem')
Next
EndIf
EndIf
if (dcNum == 1) Then
UO.IgnoreReSet()
UO.FindType('0x0096','-1','ground')
Danger_cnt = UO.FindCount()
If Danger_cnt > 0 Then
For Cycle_cnt = 0 To Danger_cnt - 1
UO.FindType('0x0096','-1','ground')
If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
UO.Click(UO.GetSerial('finditem'))
UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
EmergencyFlag = 1
Enemy = UO.GetSerial('finditem')
EndIf
UO.Ignore('finditem')
Next
EndIf
EndIf
if (dcNum == 2) Then
UO.IgnoreReSet()
UO.FindType('0x0191','-1','ground')
Danger_cnt = UO.FindCount()
If Danger_cnt > 0 Then
For Cycle_cnt = 0 To Danger_cnt - 1
UO.FindType('0x0191','-1','ground')
If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
UO.Click(UO.GetSerial('finditem'))
UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
EmergencyFlag = 1
Enemy = UO.GetSerial('finditem')
Wait(2000)
EndIf
UO.Ignore('finditem')
Next
EndIf
EndIf
if (dcNum == 3) Then
UO.IgnoreReSet()
UO.FindType('0x0190','-1','ground')
Danger_cnt = UO.FindCount()
If Danger_cnt > 0 Then
For Cycle_cnt = 0 To Danger_cnt - 1
UO.FindType('0x0190','-1','ground')
If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
UO.Click(UO.GetSerial('finditem'))
UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
EmergencyFlag = 1
Enemy = UO.GetSerial('finditem')
EndIf
UO.Ignore('finditem')
Next
EndIf
EndIf
If (dcNum == 4) Then
EmergencyFlag = CheckSpells()
EndIf
Return EmergencyFlag 
end sub

sub TryToRes(HealFlag) 
var ResFlag = 0 
If UO.Dead() Then 
Repeat 
UO.Recall('self','1') 
Wait(6000) 
Until (NOT UO.Dead()) 
AutoLootSelf() 
ResFlag = 1 
EndIf 
if HealFlag Then 
if ResFlag then 
AutoLootSelf() 
DropRangerStuff() 
endif 
Heal() 
endif 
end sub 

sub DropRangerStuff() 
var iX 
DIM RangerTool[3] 
RangerTool[0] = "0x13B2" 
RangerTool[1] = "0x0F4F" 
RangerTool[2] = "0x13FD" 

DIM RangerArr[3] 
RangerArr[0] = "0x0F3F" 
RangerArr[1] = "0x1BFB" 
RangerArr[2] = "0x1BFB" 
For iX = 0 to 2 
UO.FindType(RangerTool[iX],'-1','my') 
UO.Drophere(UO.GetSerial('finditem')) 
Wait(500) 
Stack(RangerArr[iX]) 
Wait(500) 
Next 
end sub 

sub GetRangerStuff() 
var iX = 0, StopMe = 0 
DIM RangerTool[3] 
RangerTool[0] = "0x13B2" 
RangerTool[1] = "0x0F4F" 
RangerTool[2] = "0x13FD" 

DIM RangerArr[3] 
RangerArr[0] = "0x0F3F" 
RangerArr[1] = "0x1BFB" 
RangerArr[2] = "0x1BFB" 
repeat 
UO.FindType(RangerTool[iX],'-1','ground') 
If (UO.FindCount() and (not StopMe)) Then 
WType = RangerTool[iX] 
UO.Grab('0',UO.GetSerial('finditem')) 
Wait(500) 
UO.FindType(RangerArr[ix],'-1','ground') 
if UO.FindCount() Then 
UO.Grab('100',UO.GetSerial('finditem')) 
Wait(500) 
endif 
StopMe = 1 
endif 
iX = iX + 1 
until (StopMe or (iX == 3)) 
Return WType 
end sub 

sub Guards() 
if ((UO.Timer() - GZTimer) >= 100) then 
UO.ServerPrint('.guards') 
Wait(500) 
UO.ServerPrint('.guards') 
GZTimer = UO.Timer() 
endif 
end sub 

sub TryToKill() 
var TTKi,TTKStop, TTKUse, TTKGrabN, WTWeap 
TTKi = 0 
TTKStop = 0 
TTKGrabN = 0 
If (GZExist and (UO.GetNotoriety() < 3)) then 
Guards() 
Else 
DropRangerStuff() 
Wait(500) 
GetRangerStuff() 
If (UO.GetGraphic(UO.ObjAtLayer('Rhand')) <> WType) Then 
UO.Disarm() 
Wait(500) 
EndIf 
Wait(200) 
UO.EquipT('Rhand',WType) 
Wait(500) 
Repeat 
UO.WarMode(1) 
UO.Attack(Enemy) 
Wait(3000) 
Heal() 
Until ((UO.GetHP(Enemy) == 0) or UO.Dead(Enemy) or UO.Dead() or (UO.GetDistance(Enemy) > 12)) 
DropRangerStuff() 
EndIf 
end sub 

sub CheckDanger() 
Var dX, DangerFactor, DangerResult 
dX = 0 
DangerFactor = 0 
DangerResult = 0 
dX = 0 
Repeat 
DangerResult = IsDanger(dX) 
If (DangerResult > 0) Then 
If (dX < 4) Then 
TryToKill() 
Else 
UO.ServerPrint('.guards') 
EndIf 
DangerFactor = 1 
EndIf 
dX = dX + 1 
Until (dX == 5) or (DangerResult) 
Return DangerFactor 
end sub 


sub EatCheck() 
var GHS, Hung_i, Meal 
GHS = 0 
Meal = '0x097b' 
GHS = GetHungryStatus() 
UO.TextPrint('GHS = '+STR(GHS)) 
If (GHS > 1) then 
For Hung_i = 0 To (GHS - 2) 
Eat(Meal) 
Wait(350) 
Next 
EndIf 
end sub 

sub Eat(wtEat) 
If UO.Count(wtEat) then 
UO.UseType(wtEat) 
else 
If UO.CountGround(wtEat) then 
UO.UseFromGround(wtEat) 
else 
UO.Print('No meal found.') 
endif 
endif 
end sub 

sub GetHungryStatus() 
VAR Ret_i, Cycle_i, LastStr 
DIM HArr[11] 
HArr[0] = "You are absolutely stuffed!" 
HArr[1] = "You are stuffed" 
HArr[2] = "You aren't hungry at all" 
HArr[3] = "You are a little hungry" 
HArr[4] = "You are somewhat hungry" 
HArr[5] = "You are REALLY hungry" 
HArr[6] = "Your stomash hurts" 
HArr[7] = "Your stomash hurts and you feel dizzy" 
HArr[8] = "You are starving" 
HArr[9] = "You are almost dying of hunger" 
HArr[10] = "You are DYING of hunger..." 
UO.DeleteJournal() 
UO.ServerPrint(".hungry") 
Ret_i = 0 
Cycle_i = 0 
Wait(400) 
For Cycle_i = 0 To 10 
If CheckMsg(HArr[Cycle_i],'System') Then 
Ret_i = Cycle_i 
EndIf 
Next 
RETURN Ret_i 
end sub 

sub Stack(StackType) 
var GroundItem, PackItem 
PackItem = '' 
GroundItem = '' 
if UO.Count(StackType) then 
PackItem = '^'+StackType 
endif 
if UO.CountGround(StackType) then 
GroundItem = '~'+StackType 
endif 
if ((PackItem <> '') and (GroundItem <> '')) then 
UO.MoveItem(PackItem,STR(UO.GetQuantity(PackItem)),GroundItem,'0','0','0') 
else 
UO.DropHere('^'+StackType) 
Endif 
end sub 

sub Heal() 
If UO.Poisoned() Then 
if (UO.SkillVal('Healing') > 730) then 
Repeat 
UO.WaitTargetObject(UO.GetSerial('self')) 
UO.UseFromGround('0x0E21') 
Wait(5000) 
Until ((Not UO.Poisoned()) or UO.Dead()) 
else 
Repeat 
UO.ServerPrint("Cure") 
UO.UseFromGround('0x0F07') 
Wait(4000) 
Until ((Not UO.Poisoned()) or UO.Dead()) 
endif 
EndIf 
If ((UO.GetHP() < UO.GetMaxHP()) and UO.Life) Then 
if (UO.SkillVal('Healing') > 0) then 
Repeat 
UO.WaitTargetObject(UO.GetSerial('self')) 
UO.UseFromGround('0x0E21') 
Wait(5000) 
Until ((UO.GetHP() == UO.GetMaxHP()) or UO.Dead()) 
else 
Repeat 
UO.ServerPrint("Heal") 
UO.UseFromGround('0x0F0C') 
Wait(4000) 
Until ((UO.GetHP() == UO.GetMaxHP()) or UO.Dead()) 
endif 
EndIf 
end sub 

sub CheckEq(cType) 
if (UO.Hex2Int(UO.GetGraphic(UO.ObjAtLayer('Lhand'))) <> UO.Hex2Int(cType)) Then 
UO.Unequip('Lhand') 
UO.Unequip('Rhand') 
Wait(1000) 
if UO.Count(cType) then 
UO.UseType(cType) 
Wait(400) 
else 
UO.FindType(cType,'-1','ground') 
if UO.FindCount() Then 
UO.Grab('1',UO.GetSerial('finditem')) 
Wait(1000) 
UO.UseType(cType) 
Else 
if (UO.Count(cType)+UO.CountGround(cType) == 0) then 
UO.ServerPrint('Vaxa, u menya kon4ilis udochki!!!') 
UO.Exec('terminate all') 
UO.CloseUO() 
endif 
EndIf 
EndIf 
EndIf 
end sub 

sub CheckSave() 
If CheckMsg("Saving World State",'System') Then 
UO.Print("WorldSave: "+MakeTime()) 
UO.DeleteJournal() 
Wait(25000) 
EndIf 
end sub 

sub MakeTime() 
VAR D, T, Ret, i 
Ret = STR(UO.Time()) 
T = "" 
For i = 0 To Len(Ret) 
T = Ret[Len(Ret)-i] + T 
If (I == 2) OR (I == 4) Then 
T = ":" + T 
EndIf 
Next 
Ret = STR(UO.Date()) 
D = "" 
For i = 0 To Len(Ret) 
D = Ret[Len(Ret)-i] + D 
If (I == 2) OR (I == 4) Then 
D = "." + D 
EndIf 
Next 
Ret = T + " @ " + D 
RETURN Ret 
end sub 

sub DropIt(WTF) 
var DropCnt 
For DropCnt = 0 to 3 
if UO.Count(WTF[DropCnt]) Then 
Stack(WTF[DropCnt]) 
EndIf 
Next 
While (UO.Count(WTF[4]) > 0) 
UO.MoveItem('^'+WTF[4],'1',SOSBP) 
Wait(400) 
WEnd 
While (UO.Count(WTF[5]) > 0) 
UO.MoveItem('^'+WTF[5],'1',MapBP) 
Wait(400) 
WEnd 
end sub 

sub Fish(tPoint) 
UO.WarMode(0) 
CheckSave() 
UO.Exec('waittargettile '+tPoint) 
UO.UseObject(UO.ObjAtLayer('Lhand')) 
Wait(fTime) 
If CheckMsg('There does','System') then 
NextDot = 1 
EndIf 
end sub 

sub SetFishTime(fTile) 
var fRes = 0 
var fTmp 
CheckEq(fPole) 
fTime = 0 
Fish(fTile) 
fTmp = UO.Timer() 
repeat 
Wait(50) 
until (CheckMsg('You catch','System') or CheckMsg('They','System') or CheckMsg('Your tool','System') or CheckMsg('There does','System') or CheckMsg('You find','System') or UO.Dead() or CheckMsg('I am already','System')) 
fRes = UO.Timer() - fTmp 
fTime = fRes * 100 
if ((fTime < 3400) or (fTime > 6000)) Then 
fTime = 3400 
endif 
end sub 

sub Reconnector() 
var ReconnectTime, RFlag 
ReconnectTime = '0' 
RFlag = 1 
Repeat 
While (UO.ObjAtLayer('Bpack') == '') 
if RFlag Then 
ReconnectTime = MakeTime() 
RFlag = 0 
endif 
Wait(20000) # WorldSave Protection 
UO.Say('') 
Wait(3000) 
UO.Say('') 
Wait(3000) 
UO.Say('') 
Wait(3000) 
UO.LDblClick(357,164) 
UO.LClick(616,459) 
Wait(3000) 
WEnd 
Wait(3000) 
if (RFlag == 0) and (ReconnectTime <> '0') Then 
UO.Exec('terminate main') 
UO.Exec('exec main') 
UO.TextOpen() 
UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime) 
RFlag = 1 
ReconnectTime = '0' 
endif 
Until false 
end sub

Posted: 2008-08-12 15:19:01
by stella
ясно дело не в скрипте, теперь он просто выдаёт парс эрор без скрипта и ещё пару ошибок и выдаёт краш клиента... прикольно что на другом окне где вор качает хайд на той же лодке ничего не происходит...

Posted: 2008-08-12 15:40:31
by Destruction
Как это не в скрипте, если он кривой ?

Не пробовали отступы расставить ?... У меня в подписи есть мега полезная ссылка...

Перенёс из "I need script!", вы бы хоть раздел подобрали.

Posted: 2008-08-12 16:22:55
by stella
Ок извините, проблема главная сейчас в том, что он спокойно ловит себе рыбку, подплывает морское чудовище, он снимает удочку и одевает лук, убивает лохнесское чудовище и не продолжает ловить рыбку,а одевает снимает лук , кидает на пол под себя со стрелами и потом опять поднимает одевает и так циклично, помогите разобраться

Code: Select all

var RandomFlag = 0
var UpOrFish = 1
var GZExist = 0
var GZTimer = 0
var NextDot = 0
var bandages = "0x02e1"
var meal = "0x097b"
var SOSBP = "ground"
var MapBP = "ground"
var Enemy = "self"
var WType = "0x0F51"
var fPole = "0x0dbf"
var fTime = 3500
var fPoleSize = 0
var GlobalFileMap = 'fpoint.map'
var FishLagTimer = 0

sub main()
	Init()
	var EnemyExists, EatTimer, fPoint
	DIM FishingMap[121]
	DIM FishingStuff[6]
	FishingStuff[0] = "0x09CC" # Grey Fish
	FishingStuff[1] = "0x09CD" # Green Fish
	FishingStuff[2] = "0x09CE" # Blue Fish
	FishingStuff[3] = "0x09CF" # Yellow Fish
	FishingStuff[4] = "0x099F" # SOS bottle
	FishingStuff[5] = "0x14ED" # old tattered map
	
	if CheckFExist(GlobalFileMap) then
		ReadFile(GlobalFileMap, FishingMap)
	else
		fPoleSize = CreateMap(FishingMap)
		SToFile(FishingMap, fPoleSize, GlobalFileMap)
	endif
	FishLagTimer = UO.Timer()
	SetFishTime(FishingMap[0])
	fPoint = 0
	repeat
		CheckSave()
		If ((UO.Timer() - EatTimer) > 3000) then
			EatCheck()
			EatTimer = UO.Timer()
		EndIf
		While CheckDanger()
			TryToRes(1)
			UO.DeleteJournal()
		WEnd
		CheckEq(fPole)
		If UpOrFish Then
			if NextDot Then
				fPoint = fPoint + 1
			NextDot = 0
		else
			fPoint = fPoint
		endif
		if (fPoint == fPoleSize) then
			fPoint = 0
		endif
	Else # UpOrFish
		if RandomFlag then
			fPoint = UO.Random(fPoleSize)
		else # RandomFlag
			fPoint = fPoint + 1
			if (fPoint == fPoleSize) then
				fPoint = 0
			endif # fPoint == fPoleSize
		endif # RandomFlag
	EndIf # UpOrFish
	If ((UO.Timer() - FishLagTimer) > 9000) then
		SetFishTime(FishingMap[fPoint])
		FishLagTimer = UO.Timer()
	EndIf
	Fish(FishingMap[fPoint])
	If (UO.Weight > 370) Then
		DropIt(FishingStuff)
	EndIf
until false
end sub

sub GZCheck()
var GZE = 0
CheckSave()
UO.ServerPrint('.guards')
Wait(5000)
if CheckMsg('This area is not watched','System') then
	UO.Print('No guards')
else
	GZE = 1
	UO.Print('Guard Zone!')
endif
return GZE
end sub

sub Init()
UO.TextOpen()
UO.TextPrint('Скрипт стартовал: '+MakeTime())
UO.Exec('terminate Reconnector')
UO.Exec('exec Reconnector')
Wait(2000)
UO.Print('An exceptional fishing script v1.0 Release [crafted by totus]')
Wait(2000)
GZTimer = UO.Timer()
GZExist = GZCheck()
UO.Set('norbcheck','1')
UO.Set('norbcalc','1')
UO.Set('finddistance','3')
UO.Set('distance','2')
end sub

sub CreateMap(mapArray)
DIM tileArray[7]
tileArray[0] = '0'
tileArray[1] = '6039'
tileArray[2] = '6040'
tileArray[3] = '6041'
tileArray[4] = '6042'
tileArray[5] = '6043'
tileArray[6] = '6044'
DIM FishMsg[6]
FishMsg[0] = 'You catch'
FishMsg[1] = 'You find'
FishMsg[2] = 'That location'
FishMsg[3] = 'That is too far'
FishMsg[4] = 'There does'
FishMsg[5] = 'You can'
var mX, mY, mZ, StopFuckingSearch, nTileNum, cDelta, dX, dY
cDelta = 5
mX = UO.GetX()
mY = UO.GetY()
mZ = '251'
var mSize = 0
nTileNum = 0
for dX = -cDelta to cDelta
	for dY = -cDelta to cDelta
		StopFuckingSearch = 0
		nTileNum = 0
		repeat
			CheckSave()
			CheckEq(fPole)
			UO.Print('Fishing @: '+tileArray[nTileNum]+' '+STR(mX+dX)+' '+STR(mY+dY)+' '+mZ)
			Fish(tileArray[nTileNum]+' '+STR(mX+dX)+' '+STR(mY+dY)+' '+mZ)
			if (CheckMsg(FishMsg[0],'System') or CheckMsg(FishMsg[1],'System')) Then
				mapArray[mSize] = tileArray[nTileNum]+' '+STR(mX+dX)+' '+STR(mY+dY)+' '+mZ
				mSize = mSize + 1
				StopFuckingSearch = 1
			else
				if CheckMsg(FishMsg[2],'System') then
					StopFuckingSearch = 1
				endif
			endif
			UO.DeleteJournal()
			nTileNum = nTileNum + 1
			if (nTileNum == 7) then
				StopFuckingSearch = 1
			endif
		until StopFuckingSearch
	next
next
Return mSize
end sub

sub CheckMsg(cMsg, mAuthor)
var ij
ij = UO.InJournal(cMsg)
if ij Then
	if (UO.JournalSerial(ij+1) == mAuthor) then
		return ij+1
	else
		if (mAuthor == 'System') and (UO.JournalSerial(ij+1) == '0x01010101') then
			return ij+1
		endif
	endif
else
	return 0
endif
end sub

sub CheckFExist(fName)
var FileResult = 0
var xx = file(fName)
FileResult = safe call xx.Open()
Return FileResult
end sub

sub SToFile(wtSave, wtsSize, fName)
var wtsLNum
var f=file(fName)
f.Create()
f.Open()
f.WriteLn(STR(wtsSize))
for wtsLNum = 0 to (wtsSize - 1)
	f.WriteLn(wtSave[wtsLNum])
next
f.Close()
end sub

sub ReadFile(fName, Pole)
var tFile = file(fName)
var LLLine, lNum, lSize
tFile.Open()
lSize = safe call tFile.ReadNumber()
fPoleSize = lSize
safe call tFile.ReadLn()
if ((lSize > 0) and IsNumber(lSize)) then
	for lNum = 0 to fPoleSize - 1
		LLLine = safe call tFile.ReadLn()
		Pole[lNum] = Left(LLLine,LEN(LLLine)-1)
	next
else
	Message('Файл пуст')
	UO.Exec("terminate all")
endif
UO.TextPrint('Количество точек вылова:'+STR(lSize))
tFile.Close()
end sub

sub AutoLootSelf()
var CorpseType, CorpseID, SelfID
SelfID = UO.GetSerial()
UO.Click(SelfID)
UO.IgnoreReSet()
If (UO.GetGraphic(UO.GetSerial()) == '0x0190') Then
	CorpseType = '0x2006'
Else
	CorpseType = '0x2006'
EndIf
UO.FindType(CorpseType,'-1','ground')
If (UO.FindCount() > 0) then
	repeat
		UO.FindType(CorpseType,'-1','ground')
		CorpseID = UO.GetSerial('finditem')
		UO.Click(CorpseID)
		if (Right(UO.GetName(CorpseID),Len(UO.GetName(SelfID))) == UO.GetName(SelfID)) Then
			UO.Emptycontainer('50',CorpseID)
			Wait(500)
			UO.Emptycontainer('50',CorpseID)
			Wait(500)
		endif
		UO.Ignore(CorpseID)
		UO.FindType(CorpseType,'-1','ground')
	until (UO.FindCount() == 0)
endif
end sub

sub CheckSpells()
VAR Si, nStop, Result, JPos
JPos = 0
Si = 0
nStop = 1
Result = 0
DIM BadSpells[20]
BadSpells[0] = "In Por Ylem"
BadSpells[1] = "An Mani"
BadSpells[2] = "Vas Flam"
BadSpells[3] = "In Nox"
BadSpells[4] = "Des Sanct"
BadSpells[5] = "In Flam Grav"
BadSpells[6] = "Ort Grav"
BadSpells[7] = "In Jux Hur Ylem"
BadSpells[8] = "Por Corp Wis"
BadSpells[9] = "An Ex Por"
BadSpells[10] = "Corp Por"
BadSpells[11] = "Vas Ort Flam"
BadSpells[12] = "In Ex Grav"
BadSpells[13] = "Vas Flam"
BadSpells[14] = "Kal Vas Xen"
BadSpells[15] = "attacking you*"
BadSpells[16] = "Ort Rel"
BadSpells[17] = "Ort Sanct"
BadSpells[18] = "Flam Kal Des Ylem"
BadSpells[19] = "In Vas Por"
While nStop
	JPos = UO.InJournal(BadSpells[Si])
	If JPos Then
		UO.TextPrint("Чар '"+UO.GetName(UO.JournalSerial(JPos-1))+"' - зафиксирована атака..")
		UO.ServerPrint(UO.GetName(UO.JournalSerial(JPos-1))+" ne kill pliz ya nub na macrose!!!")
		Result = 1
	EndIf
	Si = Si + 1
	If ((Si == 20) or (Result == 1)) Then
		nStop = 0
	EndIf
WEnd
Return Result
end sub

sub IsDanger(dcNum)
VAR Danger_cnt, Cycle_cnt, EmergencyFlag
EmergencyFlag = 0
UO.IgnoreReset()
UO.Set('finddistance','10')
if (dcNum == 0) Then
	UO.IgnoreReSet()
	UO.FindType('0x0010','-1','ground')
	Danger_cnt = UO.FindCount()
	If Danger_cnt > 0 Then
		For Cycle_cnt = 0 To Danger_cnt - 1
			UO.FindType('0x0010','-1','ground')
			If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
				UO.Click(UO.GetSerial('finditem'))
				UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
				EmergencyFlag = 1
				Enemy = UO.GetSerial('finditem')
			EndIf
			UO.Ignore('finditem')
		Next
	EndIf
EndIf
if (dcNum == 1) Then
	UO.IgnoreReSet()
	UO.FindType('0x0096','-1','ground')
	Danger_cnt = UO.FindCount()
	If Danger_cnt > 0 Then
		For Cycle_cnt = 0 To Danger_cnt - 1
			UO.FindType('0x0096','-1','ground')
			If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
				UO.Click(UO.GetSerial('finditem'))
				UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
				EmergencyFlag = 1
				Enemy = UO.GetSerial('finditem')
			EndIf
			UO.Ignore('finditem')
		Next
	EndIf
EndIf
if (dcNum == 2) Then
	UO.IgnoreReSet()
	UO.FindType('0x0191','-1','ground')
	Danger_cnt = UO.FindCount()
	If Danger_cnt > 0 Then
		For Cycle_cnt = 0 To Danger_cnt - 1
			UO.FindType('0x0191','-1','ground')
			If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
				UO.Click(UO.GetSerial('finditem'))
				UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
				EmergencyFlag = 1
				Enemy = UO.GetSerial('finditem')
				Wait(2000)
			EndIf
			UO.Ignore('finditem')
		Next
	EndIf
EndIf
if (dcNum == 3) Then
	UO.IgnoreReSet()
	UO.FindType('0x0190','-1','ground')
	Danger_cnt = UO.FindCount()
	If Danger_cnt > 0 Then
		For Cycle_cnt = 0 To Danger_cnt - 1
			UO.FindType('0x0190','-1','ground')
			If ((UO.GetNotoriety('finditem') >= 3) and (UO.GetSerial('finditem') <> UO.GetSerial())) Then
				UO.Click(UO.GetSerial('finditem'))
				UO.TextPrint('Найден потенциальный враг, имя чара: '+UO.GetName(UO.GetSerial('finditem')))
				EmergencyFlag = 1
				Enemy = UO.GetSerial('finditem')
			EndIf
			UO.Ignore('finditem')
		Next
	EndIf
EndIf
If (dcNum == 4) Then
	EmergencyFlag = CheckSpells()
EndIf
Return EmergencyFlag
end sub

sub TryToRes(HealFlag)
var ResFlag = 0
If UO.Dead() Then
	Repeat
		UO.Recall('self','1')
		Wait(6000)
	Until (NOT UO.Dead())
	AutoLootSelf()
	ResFlag = 1
EndIf
if HealFlag Then
	if ResFlag then
		AutoLootSelf()
		DropRangerStuff()
	endif
	Heal()
endif
end sub

sub DropRangerStuff()
var iX
DIM RangerTool[3]
RangerTool[0] = "0x13B2"
RangerTool[1] = "0x0F4F"
RangerTool[2] = "0x13FD"

DIM RangerArr[3]
RangerArr[0] = "0x0F3F"
RangerArr[1] = "0x1BFB"
RangerArr[2] = "0x1BFB"
For iX = 0 to 2
	UO.FindType(RangerTool[iX],'-1','my')
	UO.Drophere(UO.GetSerial('finditem'))
	Wait(500)
	Stack(RangerArr[iX])
	Wait(500)
Next
end sub

sub GetRangerStuff()
var iX = 0, StopMe = 0
DIM RangerTool[3]
RangerTool[0] = "0x13B2"
RangerTool[1] = "0x0F4F"
RangerTool[2] = "0x13FD"

DIM RangerArr[3]
RangerArr[0] = "0x0F3F"
RangerArr[1] = "0x1BFB"
RangerArr[2] = "0x1BFB"
repeat
	UO.FindType(RangerTool[iX],'-1','ground')
	If (UO.FindCount() and (not StopMe)) Then
		WType = RangerTool[iX]
		UO.Grab('0',UO.GetSerial('finditem'))
		Wait(500)
		UO.FindType(RangerArr[ix],'-1','ground')
		if UO.FindCount() Then
			UO.Grab('100',UO.GetSerial('finditem'))
			Wait(500)
		endif
		StopMe = 1
	endif
	iX = iX + 1
until (StopMe or (iX == 3))
Return WType
end sub

sub Guards()
if ((UO.Timer() - GZTimer) >= 100) then
	UO.ServerPrint('.guards')
	Wait(500)
	UO.ServerPrint('.guards')
	GZTimer = UO.Timer()
endif
end sub

sub TryToKill()
var TTKi,TTKStop, TTKUse, TTKGrabN, WTWeap
TTKi = 0
TTKStop = 0
TTKGrabN = 0
If (GZExist and (UO.GetNotoriety() < 3)) then
	Guards()
Else
	DropRangerStuff()
	Wait(500)
	GetRangerStuff()
	If (UO.GetGraphic(UO.ObjAtLayer('Rhand')) <> WType) Then
		UO.Disarm()
		Wait(500)
	EndIf
	Wait(200)
	UO.EquipT('Rhand',WType)
	Wait(500)
	Repeat
		UO.WarMode(1)
		UO.Attack(Enemy)
		Wait(3000)
		Heal()
	Until ((UO.GetHP(Enemy) == 0) or UO.Dead(Enemy) or UO.Dead() or (UO.GetDistance(Enemy) > 12))
	DropRangerStuff()
EndIf
end sub

sub CheckDanger()
Var dX, DangerFactor, DangerResult
dX = 0
DangerFactor = 0
DangerResult = 0
dX = 0
Repeat
	DangerResult = IsDanger(dX)
	If (DangerResult > 0) Then
		If (dX < 4) Then
			TryToKill()
		Else
			UO.ServerPrint('.guards')
		EndIf
		DangerFactor = 1
	EndIf
	dX = dX + 1
Until (dX == 5) or (DangerResult)
Return DangerFactor
end sub


sub EatCheck()
var GHS, Hung_i, Meal
GHS = 0
Meal = '0x097b'
GHS = GetHungryStatus()
UO.TextPrint('GHS = '+STR(GHS))
If (GHS > 1) then
	For Hung_i = 0 To (GHS - 2)
		Eat(Meal)
		Wait(350)
	Next
EndIf
end sub

sub Eat(wtEat)
If UO.Count(wtEat) then
	UO.UseType(wtEat)
else
	If UO.CountGround(wtEat) then
		UO.UseFromGround(wtEat)
	else
		UO.Print('No meal found.')
	endif
endif
end sub

sub GetHungryStatus()
VAR Ret_i, Cycle_i, LastStr
DIM HArr[11]
HArr[0] = "You are absolutely stuffed!"
HArr[1] = "You are stuffed"
HArr[2] = "You aren't hungry at all"
HArr[3] = "You are a little hungry"
HArr[4] = "You are somewhat hungry"
HArr[5] = "You are REALLY hungry"
HArr[6] = "Your stomash hurts"
HArr[7] = "Your stomash hurts and you feel dizzy"
HArr[8] = "You are starving"
HArr[9] = "You are almost dying of hunger"
HArr[10] = "You are DYING of hunger..."
UO.DeleteJournal()
UO.ServerPrint(".hungry")
Ret_i = 0
Cycle_i = 0
Wait(400)
For Cycle_i = 0 To 10
	If CheckMsg(HArr[Cycle_i],'System') Then
		Ret_i = Cycle_i
	EndIf
Next
RETURN Ret_i
end sub

sub Stack(StackType)
var GroundItem, PackItem
PackItem = ''
GroundItem = ''
if UO.Count(StackType) then
	PackItem = '^'+StackType
endif
if UO.CountGround(StackType) then
	GroundItem = '~'+StackType
endif
if ((PackItem <> '') and (GroundItem <> '')) then
	UO.MoveItem(PackItem,STR(UO.GetQuantity(PackItem)),GroundItem,'0','0','0')
else
	UO.DropHere('^'+StackType)
Endif
end sub

sub Heal()
If UO.Poisoned() Then
	if (UO.SkillVal('Healing') > 730) then
		Repeat
			UO.WaitTargetObject(UO.GetSerial('self'))
			UO.UseFromGround('0x0E21')
			Wait(5000)
		Until ((Not UO.Poisoned()) or UO.Dead())
	else
		Repeat
			UO.ServerPrint("Cure")
			UO.UseFromGround('0x0F07')
			Wait(4000)
		Until ((Not UO.Poisoned()) or UO.Dead())
	endif
EndIf
If ((UO.GetHP() < UO.GetMaxHP()) and UO.Life) Then
	if (UO.SkillVal('Healing') > 0) then
		Repeat
			UO.WaitTargetObject(UO.GetSerial('self'))
			UO.UseFromGround('0x0E21')
			Wait(5000)
		Until ((UO.GetHP() == UO.GetMaxHP()) or UO.Dead())
	else
		Repeat
			UO.ServerPrint("Heal")
			UO.UseFromGround('0x0F0C')
			Wait(4000)
		Until ((UO.GetHP() == UO.GetMaxHP()) or UO.Dead())
	endif
EndIf
end sub

sub CheckEq(cType)
if (UO.Hex2Int(UO.GetGraphic(UO.ObjAtLayer('Lhand'))) <> UO.Hex2Int(cType)) Then
	UO.Unequip('Lhand')
	UO.Unequip('Rhand')
	Wait(1000)
	if UO.Count(cType) then
		UO.UseType(cType)
		Wait(400)
	else
		UO.FindType(cType,'-1','ground')
		if UO.FindCount() Then
			UO.Grab('1',UO.GetSerial('finditem'))
			Wait(1000)
			UO.UseType(cType)
		Else
			if (UO.Count(cType)+UO.CountGround(cType) == 0) then
				UO.ServerPrint('Vaxa, u menya kon4ilis udochki!!!')
				UO.Exec('terminate all')
				UO.CloseUO()
			endif
		EndIf
	EndIf
EndIf
end sub

sub CheckSave()
If CheckMsg("Saving World State",'System') Then
	UO.Print("WorldSave: "+MakeTime())
	UO.DeleteJournal()
	Wait(25000)
EndIf
end sub

sub MakeTime()
VAR D, T, Ret, i
Ret = STR(UO.Time())
T = ""
For i = 0 To Len(Ret)
	T = Ret[Len(Ret)-i] + T
	If (I == 2) OR (I == 4) Then
		T = ":" + T
	EndIf
Next
Ret = STR(UO.Date())
D = ""
For i = 0 To Len(Ret)
	D = Ret[Len(Ret)-i] + D
	If (I == 2) OR (I == 4) Then
		D = "." + D
	EndIf
Next
Ret = T + " @ " + D
RETURN Ret
end sub

sub DropIt(WTF)
var DropCnt
For DropCnt = 0 to 3
	if UO.Count(WTF[DropCnt]) Then
		Stack(WTF[DropCnt])
	EndIf
Next
While (UO.Count(WTF[4]) > 0)
	UO.MoveItem('^'+WTF[4],'1',SOSBP)
	Wait(400)
WEnd
While (UO.Count(WTF[5]) > 0)
	UO.MoveItem('^'+WTF[5],'1',MapBP)
	Wait(400)
WEnd
end sub

sub Fish(tPoint)
UO.WarMode(0)
CheckSave()
UO.Exec('waittargettile '+tPoint)
UO.UseObject(UO.ObjAtLayer('Lhand'))
Wait(fTime)
If CheckMsg('There does','System') then
NextDot = 1
EndIf
end sub

sub SetFishTime(fTile)
var fRes = 0
var fTmp
CheckEq(fPole)
fTime = 0
Fish(fTile)
fTmp = UO.Timer()
repeat
Wait(50)
until (CheckMsg('You catch','System') or CheckMsg('They','System') or CheckMsg('Your tool','System') or CheckMsg('There does','System') or CheckMsg('You find','System') or UO.Dead() or CheckMsg('I am already','System'))
fRes = UO.Timer() - fTmp
fTime = fRes * 100
if ((fTime < 3400) or (fTime > 6000)) Then
fTime = 3400
endif
end sub

sub Reconnector()
var ReconnectTime, RFlag
ReconnectTime = '0'
RFlag = 1
Repeat
While (UO.ObjAtLayer('Bpack') == '')
	if RFlag Then
		ReconnectTime = MakeTime()
		RFlag = 0
	endif
	Wait(20000) # WorldSave Protection
	UO.Say('')
	Wait(3000)
	UO.Say('')
	Wait(3000)
	UO.Say('')
	Wait(3000)
	UO.LDblClick(357,164)
	UO.LClick(616,459)
	Wait(3000)
WEnd
Wait(3000)
if (RFlag == 0) and (ReconnectTime <> '0') Then
	UO.Exec('terminate main')
	UO.Exec('exec main')
	UO.TextOpen()
	UO.TextPrint('Disconnected & Reconnected @ '+ReconnectTime)
	RFlag = 1
	ReconnectTime = '0'
endif
Until false
end sub

Posted: 2008-08-13 17:31:16
by stella
парс эррор задрал капец( помогите...

Posted: 2008-08-14 00:53:48
by stella
Сначала выдаёт ошибку:
Unhandled exception in parser.
потом сразу
Yo client perfomed an unrecoverable invalid operation.
Terminate? yes/no