Code:
#------------------START OF CONFIG FUNCTIONS (ADD TREES TO FILE) -----------------
sub config()
var f=file('trees.dat')
var w,n=0,i
dim aX[300]
dim aY[300]
dim aID[300]
uo.exec('filterspeech add party')
uo.exec('filterspeech on')
uo.say('')
uo.charprint('0x0045','Lumber (by xinxilas ChavinhO)')
uo.charprint('0x0035','Choose the trees')
uo.charprint('0x0022','Select your char to finalize')
loop:
uo.say('/add')
while not uo.targeting()
wait(10)
wend
while uo.targeting()
wait(10)
wend
if uo.lasttile(0)==400 then
if n>0 then
f.open()
f.create()
w=safe call f.writeln(str(n))
for i=1 to n
w=safe call f.writeln(str(aX[i])+' '+str(aY[i])+' '+str(aID[i]))
next
f.close()
endif
goto fim
endif
if aID(str(uo.lasttile(0)))==0 then
uo.charprint('0x0022','Invalid Tree.')
goto loop
endif
if n>=1 then
for i=1 to n
if str(aX[i])+' '+str(aY[i]) == str(uo.lasttile(1))+' '+str(uo.lasttile(2)) then
uo.charprint('0x0022','Repeated Tree')
goto loop
endif
next
endif
n=n+1
aID[n] = uo.lasttile(0)
aX[n] = uo.lasttile(1)
aY[n] = uo.lasttile(2)
uo.charprint('0x0045','Tree added('+str(n)+')')
goto loop
fim:
if n>0 then
uo.charprint('0x0045','Trees: '+str(n))
uo.charprint('0x0045','OK! get your runes and start the macro')
if n<76 then
uo.charprint('0x0022','Recomended more then 75 arvores.')
endif
else
uo.charprint('0x0022','The File wasnt modified/created.')
endif
uo.exec('filterspeech clear')
uo.exec('filterspeech off')
end sub
Sub aID( type )
var i
DIM tree[23]
tree[0] = '3274'
tree[1] = '3275'
tree[2] = '3276'
tree[3] = '3277'
tree[4] = '3280'
tree[5] = '3283'
tree[6] = '3286'
tree[7] = '3288'
tree[8] = '3289'
tree[9] = '3290'
tree[10] = '3291'
tree[11] = '3292'
tree[12] = '3293'
tree[13] = '3294'
tree[14] = '3295'
tree[15] = '3296'
tree[16] = '3299'
tree[17] = '3302'
tree[18] = '3394'
tree[19] = '3395'
tree[20] = '3417'
tree[21] = '3440'
tree[22] = '3461'
for i = 0 to 22
if tree[i]==type then
return 1
endif
next
return 0
endsub
#------------------END OF CONFIG FUNCTIONS (ADD TREES TO FILE) -----------------
Code:
#--------------------START COMMENTS--------------------
# MARK AN RUNE NEAR OF THE FIRST TREE
# ANTI-PKILLERS (GUARDS, BANDS, POTS, CURE)
# MAKE SURE YOU HAVE BANDS AND HEAL POTS (IT WORKS WIHTOUT THIS ITEMS)
# BRING A RUNE ON YOUR BACKPACK TO HELP THE MACRO...
# ...SO YOU CAN BACK EXATLY WHERE YOU WERE WHEN YOU GOT YOUR WEIGHT LIMIT
# FEATURE: TEXTBOX WITH ALL YOUR LOGS AT BANK
# FEATURE: STATUS INFOS(LOGS, TREES, HOW MANY BACKS TO BANK) CLICK ON YOUR CHAR
# FEATURE: TO SEE ALL YOUR LOGS AT BACKPACK, CLICK ON YOUR BACKPACK
# IF YOU ARE NOT GM LUMBERJACKING, IT SHOWS ALSO YOUR SKILL
# TO START: ,EXEC LUMBER
# by XINXILAS CHAVINHO
#------------------END COMMENTS-----------------
#------------------START LUMBER SCRIPT-----------------
#--------------------START CONFIG--------------------
var f=file('trees.dat') #NAME of file to keep the Trees infos
var toofar='Isto esta' #MSGs (when you did not reach the tree)
var putlog='Voce pos' #MSGs (when put logs on backpack)
var logsover='Nao ha ma' #MSGs ( tree whitout choops(logs) )
var fail='Voce nao con|Skills L' #MSGs (when you failed)
var attacked='Vortex|attacks you' #MSGs (dangerous things)
var bank='You have' #MSG (when bank opens)
var potheal='.drinkheal' #MSG heal potion bind of your shard(or use ',useobject X' ',usetype X' etc..)
var tent1=4 #HOW MANY TRYS to get logs before goes to next tree
var tent2=4 #EXTRA-TRYS in case your char already got and log on the tree at the moment
#(TRYS and EXTRA TRYS is a protection in case you are not skill GM)
var weight=350 #WEIGHT LIMIT
var runebank='runebook 4' #RUNEBOOK and NUMBER of bank rune
var runelogs='runebook 5' #RUNEBOOK and NUMBER of first tree rune
var colorm = 44 #COLOR OF TEXTS when you got an Log
#1=same color of the log
#--------------------END CONFIG--------------------
sub lumber()
dim aID[500]
dim aX[500]
dim aY[500]
var a, i, try, log
starting()
f.open()
a=safe call f.readNumber()
for i=1 to a
aX[i]=safe call f.ReadNumber()
aY[i]=safe call f.ReadNumber()
aID[i]=safe call f.ReadNumber()
next
f.close()
loop:
for i=1 to a
if ( uo.weight > weight ) then
uo.charprint('0x0022','You get your weight limit')
guardar.logs()
endif
log=0
try=0
irarvore(aX[i],aY[i])
uo.charprint('0x0050','Tree: '+str(i)+' ('+str(a)+')')
repeat
status()
uo.deletejournal()
uo.waittargettile(aID[i], aX[i], aY[i], 0)
uo.useobject('hatchet')
repeat
wait(10)
status()
until uo.injournal( toofar + '|' + putlog + '|' + logsover + '|' + attacked + '|' + fail ) or uo.life<uo.str
if uo.injournal( putlog ) then
msg.log()
log=1
endif
if uo.injournal( fail ) then
try=try+1
uo.charprint('0x0007', 'Try: ' + str(try) + '/' + str(log*tent1+tent2) )
endif
if uo.life<uo.str or uo.injournal( attacked ) then
perigo()
endif
until uo.injournal( toofar + '|' + logsover ) or (try==tent1 and log==0) or try==tent1+tent2
if log==1 then
uo.setglobal('arvores',val(uo.getglobal('arvores'))+1)
endif
next
uo.charprint('0x0022','Trees ended')
recall('recall '+runelogs)
goto loop
end sub
sub starting()
uo.setglobal('arvores','')
uo.setglobal('bank','')
uo.setglobal('logs','')
hatchet()
uo.charprint('0x0007','Strating Script.')
uo.charprint('0x0045','By ChavinhO!')
recall('recall '+runelogs)
uo.deletejournal()
endsub
sub hatchet()
uo.useobject('backpack')
if uo.count('0x0F44') or uo.count('0x0F43') then
if uo.count('0x0F44') then
uo.findtype('0x0F44','-1','my')
endif
if uo.count('0x0F43') then
uo.findtype('0x0F43','-1','my')
endif
uo.addobject('hatchet','finditem')
else
uo.charprint('0x0022','You have no Hatchet')
uo.charprint('0x0022','Script stopped')
uo.exec('terminate all')
endif
endsub
sub guardar.logs()
if uo.count('0x1F14') then
uo.findtype('0x1F14','-1','backpack')
uo.cast('Mark','finditem')
wait(6000)
endif
recall('recall '+runebank)
uo.setglobal('bank',val(uo.getglobal('bank'))+1)
logs.bank()
if uo.count('0x1F14') then
uo.findtype('0x1F14','-1','backpack')
recall('runa')
else
recall('recall '+runelogs)
endif
endsub
sub logstobank()
var b,c,n
uo.deletejournal()
uo.msg('bank')
repeat
wait(5)
until uo.injournal( bank )
b=uo.getserial('lastcontainer')
while uo.count('0x1BDD')>0
uo.findtype('0x1BDD','-1','backpack')
while not uo.ContainerOF('finditem')==b
UO.moveitem('finditem','-1',b)
wait(5)
wend
if uo.getcolor('finditem')=='0x0000' then
uo.setglobal('logs',val(uo.getglobal('logs'))+uo.getquantity('finditem'))
endif
wend
showlogs(b)
endsub
sub status()
var x, l,uid,n=uo.getname('self')
if uo.injournal(n) then
uo.deletejournal(n)
uo.findtype('0x1BDD','0x0000','backpack')
x=uo.getquantity('finditem')+val(uo.getglobal('logs'))
uo.charprint('0x0047','..went to bank '+str(val(uo.getglobal('bank')))+' times.')
uo.charprint('0x0047','..cutted '+str(val(uo.getglobal('arvores')))+' trees.')
uo.charprint('0x0047','..tem '+str(x)+' normal logs.')
if uo.skillval('Lumberjacking',1) < 1000 then
uo.print('You have '+ str(uo.skillval('Lumberjacking',1)) + ' LumberJacking.')
endif
endif
if uo.injournal('backpack') then
uid=uo.getserial('backpack')
showlogs(uid)
uo.deletejournal('backpack')
endif
endsub
sub msg.log()
var l, c, n
uo.ignorereset()
uo.deletejournal('logs')
uo.findtype('0x1BDD','-1','backpack')
l=uo.findcount('finditem')-1
while l>0
uo.ignore('finditem')
uo.findtype('0x1BDD','-1','backpack')
l=l-1
wend
uo.findtype('0x1BDD','-1','backpack')
uo.click('finditem')
repeat
wait(1)
until uo.injournal('log')
c=uo.getcolor('finditem')
if colorm<>1 then
c=colorm
endif
n=uo.getname('finditem')
uo.charprint( c,'You have: '+n )
uo.ignorereset()
endsub
sub showlogs(uid)
var l,n
if not uid==uo.getserial('backpack') then
uo.exec('textclear')
endif
uo.ignorereset()
uo.deletejournal('logs')
uo.findtype('0x1BDD','-1',uid)
l=uo.findcount('finditem')
while l>0
uo.deletejournal('logs')
uo.click('finditem')
repeat
wait(1)
until uo.injournal('log')
n=uo.getname('finditem')
uo.print('Voce tem: '+n)
if not uid==uo.getserial('backpack') then
uo.exec('showjournal 1')
endif
uo.ignore('finditem')
uo.findtype('0x1BDD','-1',uid)
l=l-1
wend
uo.ignorereset()
endsub
sub recall(runa)
var px=uo.getx('self'),py=uo.gety('self'),timer
timer=uo.timer() + 80
if runa=='runa' then
uo.cast('Recall','finditem')
else
uo.exec(runa)
endif
while px==uo.getx('self') and py==uo.gety('self')
if uo.timer() >= timer then
uo.useskill('Meditation')
recall(runa)
endif
wait(5)
wend
endsub
sub irarvore(x,y)
dim key[8]
key[0] = '383933'
key[1] = '383739'
key[2] = '394034'
key[3] = '373840'
key[4] = '403735'
key[5] = '403937'
key[6] = '373836'
key[7] = '394038'
var myX,myY,t=0,d,d2,z,m=0,mydir
repeat
myX=uo.getX();
myY=uo.getY();
if x==myX then
if y>myY then
uo.Press(35)
endif
if y<myY then
uo.Press(33)
endif
else
if x<myX then
if y==myY then
uo.Press(36)
else
if y<myY then
uo.Press(38)
endif
if y>myY then
uo.Press(37)
endif
endif
endif
if x>myX then
if y==myY then
uo.Press(34)
else
if y<myY then
uo.Press(39)
endif
if y>myY then
uo.Press(40)
endif
endif
endif
endif
if uo.getx()==myX and uo.gety()==myY then
if t==4 then
t=0
mydir=uo.getdir()
d=val(MID(key[mydir],0,2))
d2=val(MID(key[mydir],2,2))
for z=1 to 4
uo.press(d)
next
if uo.getx()==myX and uo.gety()==myY then
for z=1 to 3
uo.press(d2)
next
endif
else
t=t+1
endif
endif
wait(70)
endif
until (num(x-uo.getx())<=1 and num(y-uo.gety())<=2) or (num(x-uo.getx())<=2 and num(y-uo.gety())<=1)
end sub
sub num(num)
if num>=0 then
return num
else
return num*(-1)
end if
end sub
sub perigo()
var t1=0,t2=0,t3=0,t4=0
repeat
if t1 < uo.timer() then
uo.msg('guards')
t1=UO.Timer() + 10
endif
if uo.poisoned('self') then
if t2 < uo.timer() then
uo.cast('Cure','self')
t2=UO.Timer() + 25
wait(100)
endif
else
if t3< uo.timer() then
uo.bandageself()
wait(120)
t3=UO.Timer() + 70
endif
endif
if uo.life < 75 then
if t4 < uo.timer() then
uo.msg('.drinkheal')
t4=UO.Timer() + 160
wait(100)
endif
endif
wait(20)
until uo.life>=uo.str
uo.exec('exec guards')
end sub
sub guards()
var i
for i=1 to 6
uo.msg('guards')
wait(1000)
next
endsub
#------------------START LUMBER SCRIPT-----------------