1. Repeat 'Guards' until die, or get full health (without being poisoned)
Code: Sub CallGuards() var timeout=10 If UO.GetNotoriety('self')<=1 Then UO.Msg('Guards') End If While (UO.Life<UO.Str Or UO.Poisoned()) And Not Uo.Dead() If timeout<=0 Then UO.Msg('Guards') timeout=10 End If Wait(1000) timeout=timeout-1 WEnd End Sub
2. Wait lag (ping and reponde ms delay)
Code: Sub Ping() var aux=0 EraseFromJournal('backpack') UO.Click('backpack') Repeat Wait(1) aux=aux+1 Until UO.InJournal('backpack') return aux End Sub
3. Erase the lines of the journal that contains the text
Code: Sub EraseFromJournal(text) var aux=UO.InJournal(text) While aux>0 UO.SetJournalLine(aux-1,'') aux=UO.InJournal(text) Wend End Sub
4. Check journal searching only for my messages (my char's serial) or the system (0xffffffff) messages
Code: Sub CheckMyJournal(text) var aux=UO.InJournal(text) While aux>0 If UO.JournalSerial(aux-1)==UO.GetSerial('self') Or UO.JournalSerial(aux-1)=='0xFFFFFFFF' Then return aux Else UO.SetJournalLine(aux-1,'') End If aux=UO.InJournal(text) WEnd return 0 End Sub
5. Get the serial from some message in the journal (not sure where the searh in journal beggins, Code: bottom or top. Sub WhoJournal(text) If UO.InJournal(text) Then return UO.JournalSerial(UO.InJournal(text)-1) End If return '0x00000000' End Sub
6. Wait (or timeout) for a message to be said by someone, checking their name and serial. Usefull in questions, like: "how are you?" (then waits for an answer)
Code: Sub WaitOwnedText(target,timeout) EraseFromJournal(UO.GetName(target)) Repeat Repeat Wait(100) timeout=timeout-0.1 Until UO.InJournal(UO.GetName(target)) Or timeout<=0 If UO.InJournal(UO.GetName(target)) And Not UO.JournalSerial(UO.InJournal(UO.GetName(target))-1)==UO.GetSerial(target) Then UO.SetJournalLine(UO.InJournal(UO.GetName(target))-1,'') End If Until UO.JournalSerial(UO.InJournal(UO.GetName(target))-1)==UO.GetSerial(target) Or timeout<=0 If timeout>0 Or UO.JournalSerial(UO.InJournal(UO.GetName(target))-1)==UO.GetSerial(target) Then If Len(UO.Journal(UO.InJournal(UO.GetName(target))-1))>=Len(UO.GetName(target))+2 Then return Right(UO.Journal(UO.InJournal(UO.GetName(target))-1),Len(UO.Journal(UO.InJournal(UO.GetName(target))-1))-Len(UO.GetName(target))-2) End If End If return '' End Sub
7. Easily gets the serial/graphic/color from the selected target (waiting for the player to choose the target)
Code: Sub TargetSerial() UO.AddObject('temp') While UO.Targeting() Wait(100) WEnd return UO.GetSerial('temp') End Sub
Sub TargetGraphic() UO.AddObject('temp') While UO.Targeting() Wait(100) WEnd return UO.GetGraphic('temp') End Sub
Sub TargetColor() UO.AddObject('temp') While UO.Targeting() Wait(100) WEnd return UO.GetColor('temp') End Sub
8. Generates a screen shot image in '.bmp' format with the name pattern (shardname)_(playername)_(date)_(time).bmp
Code: Sub ScreenShot() var path=UO.GetInfo('shard')+'_'+UO.GetInfo('character')+'_'+str(UO.Date())+'_'+str(UO.Time())+'.bmp' UO.Snap('bmp',path) return path End Sub
9. Opens bank using 'guards' in the message in case notoriety is 'innocent' (blue/apk), or calls only bank
Code: Sub BankNotoriety() If UO.GetNotoriety('self')<=1 Then UO.Msg('Bank Guards') Else UO.Msg('Bank') End If End Sub
10. Force peace mode and cancel actions. If on peace mode will turn war mode and then peace mode.
Code: Sub CancelAction() var aux=0 If UO.WarMode()==0 Then UO.WarMode(1) EraseFromJournal('backpack') UO.Click('backpack') Repeat Wait(1) aux=aux+1 Until UO.WarMode()==1 Or UO.InJournal('backpack') UO.WarMode(0) Repeat Wait(1) aux=aux+1 Until UO.WarMode()==0 aux=int(aux/2) Else UO.WarMode(0) Repeat Wait(1) aux=aux+1 Until UO.WarMode()==0 End If return aux End Sub
11. Fully Count itens in a container, checking all stacks, like UO.Count but for any container and ground (with 2 tiles distance check)
Code: Sub CountQuantity(type,color,container) var count=0 UO.IgnoreReset() If container=='ground' Then UO.Set('finddistance',2) End If UO.FindType(type,color,container) While UO.Findcount()>0 If UO.GetQuantity('finditem')<=1 Then count=count+1 Else count=count+UO.GetQuantity('finditem') End If UO.Ignore('finditem') UO.FindType(type,color,container) WEnd UO.IgnoreReset() return count End Sub
12. Moves Items from one container/ground to another using 3 diferent ways: 'get' will use quantity as target quantity in the container that will recive items ; 'left' will leave items in the quantity asked (to store all but some portion items) ; anything else in 'quantitytype' will make the quantity value as absolute to move.
Code: Sub MoveQuantity(type,color,fromcontainer,tocontainer,quantitytype,quantity) var fromCount=CountQuantity(type,color,fromcontainer) var toCount=CountQuantity(type,color,tocontainer) var fromMoved=0 var toMoved=0 var fromBefore=fromCount var toBefore=toCount var move=0 var itemWeight=10 If quantitytype=='get' Then quantity=quantity-toCount Else If quantitytype=='left' Then quantity=fromCount-quantity End If End If If quantity>fromCount Then quantity=fromCount End If var trys=quantity*2 While fromMoved<quantity And toMoved<quantity And trys>0 And UO.GetSerial(fromcontainer)<>UO.GetSerial(tocontainer) And (UO.GetSerial(tocontainer)<>UO.GetSerial('backpack') Or UO.Weight<40+(UO.Str*3.5)-itemWeight) And UO.GetSerial(tocontainer)<>'0x00000000' UO.Findtype(type,color,fromcontainer) If UO.FindCount()>0 Then itemWeight=UO.Weight If fromMoved<=toMoved Then move=quantity-toMoved Else move=quantity-fromMoved End If If tocontainer=='ground' Then UO.Drop(move,UO.GetX()-2+UO.Random(5),UO.GetY()-1-UO.Random(2)+UO.Random(4),UO.GetZ(),'finditem') Else UO.MoveItem('finditem',move,tocontainer) End If Wait(1500) Ping() itemWeight=(UO.Weight-itemWeight)/move End If fromCount=CountQuantity(type,color,fromcontainer) toCount=CountQuantity(type,color,tocontainer) fromMoved=fromMoved+fromBefore-fromCount toMoved=toMoved+toCount-toBefore fromBefore=fromCount toBefore=toCount trys=trys-1 WEnd End Sub
13. Walks to the position X,Y until is close enough (proximity/distance) or until it trys to much to unstuck character (limit)
Code: Sub Walk(x,y,proximity,limit) var stuck=0 var stucked=0 var characterX=UO.GetX() var characterY=UO.GetY() var walkDirection=0 var loop dim DirWalk[8] ; Dir Press ; DirWalk[0]=33 ; N - 0 - 33 ; DirWalk[1]=39 ; NE - 1 - 39 ; DirWalk[2]=34 ; E - 2 - 34 ; DirWalk[3]=40 ; SE - 3 - 40 ; DirWalk[4]=35 ; S - 4 - 35 ; DirWalk[5]=37 ; SW - 5 - 37 ; DirWalk[6]=36 ; W - 6 - 36 ; DirWalk[7]=38 ; NW - 7 - 38 ; While (characterX>x+proximity Or characterX<x-proximity Or characterY>y+proximity Or characterY<y-proximity) And stucked<limit If characterX==x And characterY>y Then walkDirection=0 End If If characterX<x And characterY>y Then walkDirection=1 End If If characterX<x And characterY==y Then walkDirection=2 End If If characterX<x And characterY<y Then walkDirection=3 End If If characterX==x And characterY<y Then walkDirection=4 End If If characterX>x And characterY<y Then walkDirection=5 End If If characterX>x And characterY==y Then walkDirection=6 End If If characterX>x And characterY>y Then walkDirection=7 End If If stuck<=5 Then If UO.GetDir()<>walkDirection Then UO.Press(DirWalk[walkDirection]) Wait(100) End If UO.Press(DirWalk[walkDirection]) Wait(100) Else walkDirection=UO.Random(8) For loop=0 to UO.Random(4)+2 UO.Press(DirWalk[walkDirection]) Wait(100) Next stucked=stucked+1 End If If UO.GetX()==characterX And UO.GetY()==characterY Then stuck=stuck+1 Else stuck=0 End If characterX=UO.GetX() characterY=UO.GetY() WEnd End Sub
14. Format text turning all characters to upper case ('upper'), just the first characters of a word in upper case ('uinit') or all characters lower case (default)
Code: Sub FormatText(text,format) dim uppercase[49] uppercase[0]='A' uppercase[1]='B' uppercase[2]='C' uppercase[3]='D' uppercase[4]='E' uppercase[5]='F' uppercase[6]='G' uppercase[7]='H' uppercase[8]='I' uppercase[9]='J' uppercase[10]='K' uppercase[11]='L' uppercase[12]='M' uppercase[13]='N' uppercase[14]='O' uppercase[15]='P' uppercase[16]='Q' uppercase[17]='R' uppercase[18]='S' uppercase[19]='T' uppercase[20]='U' uppercase[21]='V' uppercase[22]='W' uppercase[23]='X' uppercase[24]='Y' uppercase[25]='Z' uppercase[26]='Á' uppercase[27]='É' uppercase[28]='Í' uppercase[29]='Ó' uppercase[30]='Ú' uppercase[31]='Â' uppercase[32]='Ê' uppercase[33]='Î' uppercase[34]='Ô' uppercase[35]='Û' uppercase[36]='À' uppercase[37]='È' uppercase[38]='Ì' uppercase[39]='Ò' uppercase[40]='Ù' uppercase[41]='Ä' uppercase[42]='Ë' uppercase[43]='Ï' uppercase[44]='Ö' uppercase[45]='Ü' uppercase[46]='Ã' uppercase[47]='Õ' uppercase[48]='Ç' dim lowercase[49] lowercase[0] ='a' lowercase[1] ='b' lowercase[2] ='c' lowercase[3] ='d' lowercase[4] ='e' lowercase[5] ='f' lowercase[6] ='g' lowercase[7] ='h' lowercase[8] ='i' lowercase[9] ='j' lowercase[10]='k' lowercase[11]='l' lowercase[12]='m' lowercase[13]='n' lowercase[14]='o' lowercase[15]='p' lowercase[16]='q' lowercase[17]='r' lowercase[18]='s' lowercase[19]='t' lowercase[20]='u' lowercase[21]='v' lowercase[22]='w' lowercase[23]='x' lowercase[24]='y' lowercase[25]='z' lowercase[26]='á' lowercase[27]='é' lowercase[28]='í' lowercase[29]='ó' lowercase[30]='ú' lowercase[31]='â' lowercase[32]='ê' lowercase[33]='î' lowercase[34]='ô' lowercase[35]='û' lowercase[36]='à' lowercase[37]='è' lowercase[38]='ì' lowercase[39]='ò' lowercase[40]='ù' lowercase[41]='ä' lowercase[42]='ë' lowercase[43]='ï' lowercase[44]='ö' lowercase[45]='ü' lowercase[46]='ã' lowercase[47]='õ' lowercase[48]='ç' var result='' var aux var position var index If Len(text)>0 Then For position=0 to Len(text)-1 If format=='upper' Then aux='upper' Else aux='lower' End If If format=='uinit' Then If position==0 Then aux='upper' Else If Mid(text,position-1,1)==' ' Then aux='upper' Else aux='lower' End If End If End If For index=0 to 48 If aux=='upper' Then If Mid(text,position,1)==lowercase[index] Then result=result+uppercase[index] aux='' index=48 End If Else If Mid(text,position,1)==uppercase[index] Then result=result+lowercase[index] aux='' index=48 End If End If Next If aux<>'' Then result=result+Mid(text,position,1) End If Next End If return result End Sub
15. InText functino works like injournal but checkes is the first text is inside the second (reading from end to start, checks if the second text contains the first)
Code: Sub InText(text,intext) var result=0 var position If Len(text)<Len(intext) Then For position=0 to Len(intext)-Len(text) If Mid(intext,position,Len(text))==text Then result=result+1 End If Next End If return result End Sub
16. This functions work like Mid, but using text also, not only positions (they dont use lenght)
Code: Sub SubstringPositionText(text,fromposition,totext) var position=fromposition While Len(text)>=position+Len(totext) If Mid(text,position,Len(totext))==totext Then return Mid(text,fromposition,position-fromposition) Else If Len(text)==position+Len(totext) And Len(totext)>0 Then totext=Left(totext,Len(totext)-1) End If End If position=position+1 WEnd return '' End Sub
Sub SubstringTextText(text,fromtext,totext) var fromposition=0 var position=0 While Len(text)>=position+Len(fromtext) And fromposition==0 If Mid(text,position,Len(fromtext))==fromtext Then fromposition=position+Len(fromtext) Else If Len(text)==position+Len(fromtext) And Len(fromtext)>0 Then fromtext=Left(fromtext,Len(fromtext)-1) End If End If position=position+1 WEnd position=fromposition While Len(text)>=position+Len(totext) If Mid(text,position,Len(totext))==totext Then return Mid(text,fromposition,position-fromposition) Else If Len(text)==position+Len(totext) And Len(totext)>0 Then totext=Left(totext,Len(totext)-1) End If End If position=position+1 WEnd return '' End Sub
Sub SubstringTextPosition(text,fromtext,toposition) var position=0 While Len(text)>=position+Len(fromtext) If Mid(text,position,Len(fromtext))==fromtext Then position=position+Len(fromtext) If toposition>position Then return Mid(text,position,toposition-position) Else return Mid(text,position,Len(text)-position) End If Else If Len(text)==position+Len(fromtext) And Len(fromtext)>0 Then fromtext=Left(fromtext,Len(fromtext)-1) End If End If position=position+1 WEnd return '' End Sub
17. Chages substring to another (substitute)
Code: Sub StringSubstitution(text,oldtext,newtext) var result='' var position If Len(oldtext)<Len(text) Then For position=0 to Len(text)-Len(oldtext) If Mid(text,position,Len(oldtext))==oldtext Then result=result+newtext position=position+Len(oldtext)-1 Else result=result+Mid(text,position,1) End If Next result=result+Right(text,Len(oldtext)) End If return result End Sub
18. Gets the word from a word count, like in 'I will have this word' text we have 0 for 'I', 1 for 'will', 2 for 'have' and so on.
Code: Sub GetWord(text,wordcount) var position=0 var count=0 var result='' While count<wordcount-1 and position<Len(text) If Mid(text,position,1)==' ' Then count=count+1 End If position=position+1 WEnd If position<Len(text) And count==wordcount-1 Then While Mid(text,position,1)<>' ' And position<Len(text) result=result+Mid(text,position,1) position=position+1 WEnd End If return result End Sub
19. Pow function (math - power)
Code: Sub Pow(number,expnumber) var result=number var expnegativa=0 If expnumber<0 then expnegativa=1 expnumber=-expnumber End If If expnumber==0 Then result=1 End If While expnumber>1 result=result*number expnumber=expnumber-1 WEnd If expnegativa==1 And result<>0 Then return 1/result End If return result End Sub
20. Unit converter (reads 'k' / 'K' as thousand [x10³], 'm' / 'M' as million [x10³x10³] or 'b' / 'B' as billion [x10³x10³x10³] , and can be used like '1kk 30k' that will be converted in 1030000)
Code: Sub Unit(text) var result=0 var temp='' var loop var flag=0 For loop=0 to Len(text)-1 If Mid(text,loop,1)=='k' Or Mid(text,loop,1)=='K' Then flag=1 temp=temp+'000' Else If Mid(text,loop,1)=='m' Or Mid(text,loop,1)=='M' Then flag=1 temp=temp+'000000' Else If Mid(text,loop,1)=='b' Or Mid(text,loop,1)=='B' Then flag=1 temp=temp+'000000000' Else If flag==1 Then result=result+val(temp) temp='' flag=0 End If temp=temp+Mid(text,loop,1) End If End If End If Next return result+val(temp) End Sub
|