Jump to content


Toggle shoutbox Chat Open the Shoutbox in a popup

Прямая связь с администрацией по скайпу: gods.dragon
@  Costesti : (10 June 2025 - 22:26) Артём закрой сервер толку от него ноль так как лаги бешеные ничего не сделать
@  Costesti : (10 June 2025 - 21:03) бля это у меня сервер только логает или у всех?
@  papasha : (10 June 2025 - 15:13) @Costesti da kanesna vvodit, uze dohuja obnov vishlo za 7 let poslednix!!
@  Costesti : (09 June 2025 - 18:34) Артём ты там нововведения водишь?
@  Costesti : (09 June 2025 - 18:31) Сервер работает?
@  Costesti : (31 May 2025 - 23:46) Шан комп меняй уже игру не тянет
@  Costesti : (31 May 2025 - 20:02) мда никому не нужен этот сервер
@  fr33 : (29 May 2025 - 14:07) shenahnan gnom
@  fr33 : (29 May 2025 - 14:07) gm zb!!!1 lagi ept
@  Costesti : (28 May 2025 - 22:43) и это опять и за сейвы
@  Costesti : (28 May 2025 - 22:43) Народ да у кого там номер Шана пускай чинит сервер
@  Costesti : (27 May 2025 - 21:38) Вопрос Крафтить молоко можно?
@  fr33 : (26 May 2025 - 17:33) gm blad chini lag
@  Costesti : (23 May 2025 - 22:37) Бешеные лаги
@  Costesti : (17 May 2025 - 22:54) Опять лаги на Сервере
@  fr33 : (12 May 2025 - 15:21) ble daite mne gm i zdelaju pvp vam
@  Mokasin : (12 May 2025 - 09:04) Puišiem nav garlaicīgi xDDD
@  Egoons : (10 May 2025 - 18:48) lanc 2025 gads jau, ara silts atkal. tas taa, infai
@  beatiful : (10 May 2025 - 10:14) griga pidar
@  fr33 : (08 May 2025 - 17:53) griga eta samij zoskj dalbaeb etam server

Dustman

Member Since 20 Jan 2010
Offline Last Active Feb 26 2010 17:40
-----

Posts I've Made

In Topic: Проблема с инжой

19 February 2010 - 11:35

На готов отказываться от функциональности АСМа из за такой проблемы ... =)

Попробую решить обновлением дллок

In Topic: Проблема с инжой

19 February 2010 - 02:37

автолоад немаленький =))) и проблем в нем я не нашел... но может свежий взгляд... =)

sub recallASMmini()

	var runebook = '0x40044c23'; ID Runebook. Use ,info

	var where = uo.asminputstring("Введите порядковый номер руны от 1 до 16:")

	var how = 2				#### 1 = Реколл_по_зарядам; 2 = Реколл_по_регам; 3 = Реколл_гейтом; 4 = Перезарядка_рунбуки

	var oldX=uo.getX()

	var oldY=uo.getY()

	var number, num=val(where)

	if how == 1 then

		number = num+1

	endif

	if how == 2 then

		number = num*2+18

	endif

	if how == 3 then 

		number = num*2+19

	endif

	if how == 4 then

		deletejournal('You have no scrolls')

		uo.recall(runebook, 1)

		if uo.injournal('You have no scrolls') then

			uo.print('You have no scrolls. Terminating.')

			return

		else

			return

		endif

	endif

	if num>16 or num<1 then

		uo.print('Wrong rune number. Terminating.')

		return

	endif

	repeat

		uo.warmode(false)

		deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')

		uo.recall(runebook, number)

		uo.useskill('Hiding')

		var k=0

		repeat

			wait(500)

			k=k+500

		until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000

		if uo.injournal('Insufficient mana for this spell') then

			uo.print('You need more mana. Terminating')

			return

		endif

		if uo.injournal('You lack the reagents for this spell') then

			uo.print('You need more reagents. Terminating')

			return

		endif

	until oldX<>uo.getX() or oldY<>uo.getY()

end sub



sub saysell()

uo.msg('Продам МС+9/+15/Холинайт грудак/Драгон руки/ДМ перчи')

endsub



sub testtt()

repeat

uo.findtype('0x13E3', '0x0000', -1)

if uo.findcount()>0 then

deletejournal('You smelt')

wait(100)

uo.waittargetobject('finditem')

uo.useobject(0x400541FB)

	repeat

	wait(100)

	until uo.injournal('You smelt')

else

wait(1000)

endif

until uo.findcount()==0

endsub







sub repairarm()

	var i, name, y, itemnum, reptool, item

	var dblhand = 1; 1 - dvuruchnoe; 0 - odnoruchnoe oruzhie

	var armor = 1; 0 - esli metal, 1 - esli kozha

	var necklace = 1; если используешь реген ожерелье то ставим 0, если используешь армор горжетку, то 1 

	Dim ar[8]

	ar[0] = 'Hat'

	ar[1] = 'Lhand'

	ar[2] = 'Torso'

	ar[3] = 'Arms'

	ar[4] = 'Gloves'

	ar[5] = 'Legs'

	ar[6] = 'Pants'

	ar[7] = 'Neck'

	if armor == 0 then

		reptool = '0x1865'

	else

		reptool = '0x0F9D'

	endif

	if uo.count(reptool) then

		uo.print('Repair tool is avaliable. Starting to repair your armor')

	else

		uo.print('Repair tool not found! Terminating..')

		return

	endif

	

	if necklace == 0 then

		itemnum = 6

	else

		itemnum = 7

	endif

	for i = 0 to itemnum

		if uo.objatlayer(ar[i])<>'' then

			if i==1 and dblhand==1 then

				goto skip

			endif

			item = uo.getserial(uo.objatlayer(ar[i]))

			uo.moveitem(uo.objatlayer(ar[i]),-1,'backpack')	

			wait(300)

			deletejournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')

			uo.waittargetobject(item)

			uo.usetype(reptool)

			repeat

				wait(100)

			until uo.injournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')

			if uo.injournal('must have') then

				uo.print('No resourses to repair the weapon')

			endif

			if uo.injournal('fully repaired') then

				uo.print('Succesfully repaired')

			endif

			if uo.injournal('Target weapon or armor to repair|Target leather armor to repair') then

				uo.useobject(item)

				uo.print('False settings. Terminating...')

				return

			endif

			uo.useobject(item)

			while uo.objatlayer(ar[i])<>item

				wait(100)

			wend

			skip:

		endif

	next

	uo.print('-=Done=-')

endsub





sub repairarmASM()

# podumat pro sloj malenkogo nagrudnika...

   var MinDur = 10

   var i, name, y, itemnum, reptool, item

   var dblhand = 	UO.asmInputList("Выберите тип оружия","Одноручное;Двуручное")							;2 - dvuruchnoe; 1 - odnoruchnoe oruzhie

   var armor = UO.asmInputList("Выберите тип доспехов","Металл;Кожа")										;1 - esli metal, 2 - esli kozha

   var necklace = UO.asmInputList("Что у Вас на шее?","Ожерелье;Горжетка") 		;если используешь реген ожерелье то ставим 1, если используешь армор горжетку, то 2

Dim ar[8]

ar[0] = 'Hat'

ar[1] = 'Lhand'

ar[2] = 'Torso'

ar[3] = 'Arms'

ar[4] = 'Gloves'

ar[5] = 'Legs'

ar[6] = 'Pants'

ar[7] = 'Neck'





if armor == 1 then

reptool = '0x1865'  ;reptool for metall stuff

else

reptool = '0x0F9D'   ;reptool for tailored stuff

endif



   if uo.count(reptool) then

	  #h=uo.getserial('_0x13E3')

	  uo.print('Repair tool is avaliable. Starting to repair your armor')

   else

	  uo.print('Repair tool not found! Terminating..')

	  return

   endif

   

if necklace == 1 then

itemnum = 6

else

itemnum = 7

endif



for i = 0 to itemnum

if uo.objatlayer(ar[i])<>'' then

#deletejournal('Durability')

#uo.click(uo.objatlayer(ar[i]))

# repeat

#	  wait(10)

#   until UO.InJournal("Durability")

#   name = uo.Journal(uo.InJournal("Durability")-1)

#   y = val(onlynumbers( name ))

#   if y < MinDur then 

#   uo.print('Nachinau pochinku')

if i==1 and dblhand==2 then

goto skip

endif

   item = uo.getserial(uo.objatlayer(ar[i]))

 uo.moveitem(uo.objatlayer(ar[i]),-1,'backpack')				###	 uo.moveitem(Arms,-1,'backpack')   or  uo.unequip(ar[i])

 #CheckLag()

 wait(300)

 deletejournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')

 uo.waittargetobject(item)

 uo.usetype(reptool)

	repeat

	   wait(100)

	until uo.injournal('fully repaired|must have|Target weapon or armor to repair|Target leather armor to repair')

	if uo.injournal('must have') then

	uo.print('No resourses to repair the weapon')

	endif

	if uo.injournal('fully repaired') then

	uo.print('Succesfully repaired')

	endif

	if uo.injournal('Target weapon or armor to repair|Target leather armor to repair') then

	uo.useobject(item)

	uo.print('False settings. Terminating...')

	return

	endif

	uo.useobject(item)

		while uo.objatlayer(ar[i])<>item

		wait(100)

		wend

#	  else

#   uo.print('Pochinka ne nuzhna. Tekushaya prochnost: ' + str(y))

#   endif

skip:

endif

next

	 uo.print('-=Done=-')

endsub



sub checkdurability()

var MinDur = 10, name, y, hand

var dblhand = 1

if dblhand == 0 then

hand = 'Rhand'

else

hand = 'Lhand'

endif

deletejournal('Durability')

uo.click(uo.objatlayer(hand))

 repeat

	  wait(100)

   until UO.InJournal("Durability")

   name=uo.Journal(uo.InJournal("Durability")-1)

   if len(onlynumbers( name )) == 4 then

   	y = val(Left(onlynumbers( name ),2))

   endif

   if len(onlynumbers( name )) == 3 then

   	y = val(Left(onlynumbers( name ),1))

   endif

   if y < MinDur then 

   	uo.print('Nachinau pochinku')

   	repair()

   else

   	uo.print('Pochinka ne nuzhna. Tekushaya prochnost: ' + str(y))

   endif

endsub



sub repair()

var reptool = '0x1865'

var dblhand = 1; 0 - onehand. 1 - 2hand weapon

var wep, hand 

if uo.count(reptool) then

	  uo.print('Repair tool is avaliable. Starting to repair your weapon')

   else

	  uo.print('Repair tool not found! Terminating..')

	  return

   endif

if dblhand == 0 then

wep = uo.getserial(uo.objatlayer('Rhand'))

hand = 'Rhand'

else

wep = uo.getserial(uo.objatlayer('Lhand'))

hand = 'Lhand'

endif

uo.unequip(hand)

CheckLag()

deletejournal('fully repaired|must have')

uo.waittargetobject(wep)

uo.usetype(reptool)

repeat

wait(100)

until uo.injournal('fully repaired|must have')

if uo.injournal('must have') then

uo.print('No resourses to repair the weapon')

endif

wait(50)

if uo.injournal('fully repaired') then

uo.print('Succesfully repaired')

endif

uo.useobject(wep)

end sub



sub fullavtoloot()

deletejournal('Body of')

while not false

if uo.injournal('Body of') then

deletejournal('Body of')

Looting2()

#checkdurability()

else

wait(100)

endif

wend

endsub





sub autoattack()

var mob

If UO.InJournal('is attacking you') then

mob=uo.getserial(UO.JournalSerial(UO.InJournal('is attacking you')-1))

UO.DeleteJournal()

if mob<>0 and mob<>uo.getserial('self') then

uo.attack(mob)

wait(1000)

end if

endif

wait(500)

endsub





##################################################################### 

; Remember armor & weapon, disarm, healing from bandages, arm 

Sub Bandag() 

   UO.Exec('bandageself') 

endsub 









##################################################################### 

; AutoHeal. v.1.10b (c) Edred 

; 

; ?????????????? ?????? ???? (???????? ????? 30). ?????????????? ????? 

; ???????? ??????? ??? ???????? ?????? 60. ?????????????? ??????????? 

; ?????? ? ???? ??? ??????? ? ?????? ?? ? ???? ????? ????????. 

; dorabotat poison

sub AutoHeal() 

	while not uo.dead()

	DeleteJournal('You put the bloody|You fail|already fully heal|Targeting cancelled|Unexpected target info')

	  If UO.Life < uo.str-(uo.str/10) Then

		  UO.Exec('bandageself') 

		 repeat

		 wait(100)

		   until UO.InJournal('You put the bloody|You fail|already fully heal|Targeting cancelled|Unexpected target info')

	  else

	  wait(100)

	  Endif 

	  wend 

endsub 







Sub Looting()

var wep = uo.getserial(uo.objatlayer('Lhand'))  #Rhand for 1hand weapon - Lhand for 2 hand wep

VAR WaitTime=1800

VAR Exit=0, i

VAR dagger=0x0F51

DIM Loot[15]



Loot[0]=0x0EED;gold

Loot[1]=0x09AA;pandora

Loot[2]=0x1088;бусы

Loot[3]=0x108A;кольцо

Loot[4]=0x1086;браслет

Loot[5]=0x1087;серьги

Loot[6]=0x1078;кожа

Loot[7]=0x0F7B; BM

Loot[8]=0x0F7A; BP

Loot[9]=0x0F84; GA

Loot[10]=0x0F85; GI

Loot[11]=0x0F86; MR

Loot[12]=0x0F88; NS

Loot[13]=0x0F8C; SA

Loot[14]=0x0F8D; SS

Loot[15]=0x0E76;bag





#UO.UseObject('lastcorpse')



uo.waittargetobject('lastcontainer')

UO.UseType(dagger); бучер

wait(500)

uo.useobject(wep)

uo.say(chr(27))



For i=0 to 15

#UO.FindType(Loot[i],-1,'ground')

#if uo.findcount() then

#UO.moveitem("finditem", -1, 'backpack') 

#wait(WaitTime)

#endif



#if UO.GetQuantity('lastcorpse') then

UO.FindType(Loot[i],-1,'lastcontainer')

if uo.findcount() then

UO.moveitem("finditem", -1, 'backpack') 

wait(WaitTime)

endif

#endif

next

end sub



Sub Looting2() 

var i,n 

Dim Loot[15] 

Loot[0]=0x0EED;gold

Loot[1]=0x09AA;pandora

Loot[2]=0x1088;бусы

Loot[3]=0x108A;кольцо

Loot[4]=0x1086;браслет

Loot[5]=0x1087;серьги

Loot[6]=0x1078;кожа

Loot[7]=0x0F7B; BM

Loot[8]=0x0F7A; BP

Loot[9]=0x0F84; GA

Loot[10]=0x0F85; GI

Loot[11]=0x0F86; MR

Loot[12]=0x0F88; NS

Loot[13]=0x0F8C; SA

Loot[14]=0x0F8D; SS

Loot[15]=0x0E76;bag

i = 1800

FOR n=0 TO 15

uo.findtype(Loot[n],"-1","lastcontainer") 

if uo.findcount() > 0 then 

UO.moveitem("finditem", -1, 'backpack') 

uo.print("Found "+str(uo.findcount())) 

Wait(i) 

END if 

next 

end sub



##################################################################### 

Sub GoHide() 

   While not UO.Hidden() 

   uo.warmode(false)

	  UO.UseSkill('Hiding') 

	  Wait(4000) 

   Wend 

endsub 



Sub dogonPvM()

var mob

mob=uo.getserial('laststatus')

repeat

if uo.getdistance(mob)>1 then

	Walker(uo.getX(mob), uo.gety(mob), 1)

end if 

wait(500)

until uo.getHP(mob)<=0

endsub



sub RegCheck()

   VAR n, q, c

   Dim Req[50]; Requirements

   Req[0]='0x0F7A'; regi bp

   Req[1]='0x0F7B'; regi bm 

   Req[2]='0x0F86'; regi mr 

   Req[3]='0x0F88'; regi ns 

   Req[4]='0x0F8D'; regi ss

   Req[5]='0x0F84'; regi ga

   Req[6]='0x0F85'; regi gs

   Req[7]='0x0F8C'; regi sa

   Req[8]='0x0F0E'; gh

   Req[9]='0x0F0E'; mana

   Req[10]='0x0F0E'; refresh

   Req[11]='0x0E21'; bandages

   Req[12]='0x1F52'; paralyze scrolls

   Req[13]='0x0F0E'; poison

   Req[14]='0x0F3F'; arrows

   Req[15]='0x0F0E'; empty bottles

   Req[16]='0x0E20'; bloody bandages

   Req[17]='0x1F5F'; fs

   Req[18]='0x1BFB'; bolts

   Req[19]='0x0F03'; Antifreeze

   Req[20]='0x0F0E'; Invisibility

   Req[21]='0x1F50'; Magic Reflection

   

   Dim Qnt[50]; Quantity

   Qnt[0]=50; regi

   Qnt[1]=50; regi

   Qnt[2]=50; regi

   Qnt[3]=50; regi

   Qnt[4]=50; regi

   Qnt[5]=50; regi

   Qnt[6]=50; regi

   Qnt[7]=50; regi

   Qnt[8]=15; gh

   Qnt[9]=15; mana

   Qnt[10]=10; refresh

   Qnt[11]=100; bandages

   Qnt[12]=20; paralyze scrolls

   Qnt[13]=3; poison

   Qnt[14]=0; arrows

   Qnt[15]=0; empty bottles

   Qnt[16]=0; bloody bandages

   Qnt[17]=10; fs

   Qnt[18]=50; bolts

   Qnt[19]=3; Antifreeze

   Qnt[20]=0; Invisibility

   Qnt[21]=0; Magic Reflection

   

   Dim Clr[50]; Color

   Clr[0]='0x0000'; regi

   Clr[1]='0x0000'; regi

   Clr[2]='0x0000'; regi

   Clr[3]='0x0000'; regi

   Clr[4]='0x0000'; regi

   Clr[5]='0x0000'; regi

   Clr[6]='0x0000'; regi

   Clr[7]='0x0000'; regi

   Clr[8]='0x09BB'; gh

   Clr[9]='0x09DF'; mana

   Clr[10]='0x0997'; refresh

   Clr[11]='0x0000'; bandages

   Clr[12]='0x0000'; paralyze scrolls

   Clr[13]='0x0998'; poison

   Clr[14]='0x0000'; arrows

   Clr[15]='0x0000'; empty bottles

   Clr[16]='0x0000'; bloody bandages

   Clr[17]='0x0000'; fs

   Clr[18]='0x0000'; bolts

   Clr[19]='0x09CF'; Antifreeze

   Clr[20]='0x0631'; Invisibility

   Clr[21]='0x0000'; Magic Reflection

   

   if (uo.getserial('backpack') <> uo.getserial('lastcontainer')) then

	  c=uo.getserial('lastcontainer')

	  for n=0 to 7

		 while uo.count(Req[n],Clr[n])<>Qnt[n]

			q=Qnt[n]-uo.count(Req[n],Clr[n])

			if q>0 then

			   uo.findtype(Req[n],Clr[n],c)

			   if uo.findcount() then

				  uo.moveitem('finditem',STR(q),'backpack',141,134,0)

				  checklag()

				  wait(600)

			   else

				  uo.msg(' item Req('+str(n)+') NOT FOUND ')

				  return

			   endif

			else

			   q=-q			

			   uo.findtype(Req[n],Clr[n],'backpack')   

			   if uo.findcount() then

				  uo.moveitem('finditem',STR(q),c)

				  checklag()

				  wait(600)

			   endif

			endif

		 wend

	  next

   endif

   uo.print(' -= done =- ')

endsub



sub unloadregs()

   VAR n, q, c

   Dim Req[50]; Requirements

   Req[0]='0x0F7A'; regi 

   Req[1]='0x0F7B'; regi  

   Req[2]='0x0F86'; regi  

   Req[3]='0x0F88'; regi  

   Req[4]='0x0F8D'; regi 

   Req[5]='0x0F84'; regi 

   Req[6]='0x0F85'; regi 

   Req[7]='0x0F8C'; regi

   Req[8]='0x0F0E'; gh

   Req[9]='0x0F0E'; mana

   Req[10]='0x0F0E'; refresh

   Req[11]='0x0E21'; bandages

   Req[12]='0x1F52'; paralyze scrolls

   Req[13]='0x0F0E'; poison

   Req[14]='0x0F3F'; arrows

   Req[15]='0x0F0E'; empty bottles

   Req[16]='0x0E20'; bloody bandages

   Req[17]='0x1F5F'; fs   

   Req[18]='0x1BFB'; bolts

   Req[19]='0x0F03'; Antifreeze

   if (uo.getserial('backpack') <> uo.getserial('lastcontainer')) then

	  c=uo.getserial('lastcontainer')

	  for n=0 to 7

		 uo.findtype(Req[n],-1,'my')

		 while uo.findcount()

			uo.moveitem('finditem',0,c)

			checklag()

			wait(700)

			uo.findtype(Req[n],-1,'my')

		 wend

	  next

   endif

   uo.print(' -= done =- ')

endsub



Sub opendoor()

uo.set('distance','2')

uo.opendoor()

uo.set('distance','3')

endsub



Sub RunebookRecall()

var n = 1

  var oldX=uo.getX()

  var oldY=uo.getY()

   repeat

	  uo.Exec('warmode 0')

	  uo.UseObject('0x40044C23')

	  CheckLag()

	  uo.LClick(255, n*15+240)

	  CheckLag()

	  uo.LClick(255, n*15+240)

	 var time=uo.Timer()

	  repeat

		 wait(500)

	  until oldX<>uo.getX() or oldY<>uo.getY() or uo.Life==0 or uo.InJournal('needs') or time+200<uo.Timer()

	  uo.DeleteJournal()

   until oldX<>uo.getX() or oldY<>uo.getY()

end sub



sub RunebookRecallRegs()

  var oldX=uo.getX()

  var oldY=uo.getY()

   repeat

	  uo.Exec('warmode 0')

	  uo.UseObject('0x40044C23')

	  CheckLag()

	  uo.LClick(255, 377)

	  CheckLag()

	  uo.LClick(260, 330)

	  UO.UseSkill('Hiding') 

	  var time=uo.Timer()

	  repeat

		 wait(500)

	  until oldX<>uo.getX() or oldY<>uo.getY() or uo.Life==0 or uo.InJournal('needs') or time+200<uo.Timer()

	  uo.DeleteJournal()

   until oldX<>uo.getX() or oldY<>uo.getY()

end sub





########################################## ХОДИЛКА 3 ##########################

#var Prec=3 # Как близко следует подойти к цели (Precision) 

#var MaxTraceDistance=5 # Максимальная длина обхода. Желательно ставить с расчета возможных препятсвий. Если ставить очень #большие числа, кодилка может пойти в обход пол мира чтобы дойти к соседнему дереву. 

#var Speed=2 # Длина шага. Сколько шагов делать за раз. Выше 3 ставить смысла нет. Тоесть тупое умножение шагов. Для ламбера #идеально 3, для майнинга - 1. 

#var StepTimeOut=400 # Если уперлись в неопознанный обьект, сколько мсек ждать сдвига с места. Если по простому - таймаут #шага. Если поставить сильно маленькие, ходилка начнет трассировать пустые места. 

#UO.SetGlobal("Logging","1")  # - показывать отладочные сообщения. 

#UO.SetGlobal("BlindWalk","0") # - не использовать проверку тайлов, а использовать ходьбу наощупь. Для майнинга ОБЯЗАТЕЛЬНО #ВКЛЮЧИТЬ. 

#В функции IsPass, содержиться список проходимых тайлов.



#Walker(X,Y,Prec) - идем к цели с координатами X,Y. Возвращает 1 в случае успешного достижения цели, и 0 - при невозможном обходе (путь не найден)

#Tracer(StartDir,Direction) - трассировка 1 шага. Возвращает направление по которому получилось сдвинуться с места. StartDir #- направление последнего движения, Direction (-1 или +1) направление обхода. -1 - по часовой стрелке, +1 против часовой #стрелки. Направления скрипт использует личного формата: 

#1 - влево вниз 

#2 - вниз 

#3 - вправо вниз 

#4 - вправо 

#5 - вправо вверх 

#6 - вверх 

#7 - влево вверх 

#8 - влево 

#Tracer(StartDir,Direction) - идеально подходит для рыбалки вдоль берега так как она будет обходить берег бесконечно (1 #запуск функции = 1 шаг обхода). 

##################################################### 

# WW  W  WW   AA	LL	 Kk KK  EE  EE  RRR	   # 

# WW  W  WW  AA A   LL	 Kk K   EEE	 R  R	  # 

# WW  W  WW  AA A   LL	 KKK	EEEEE   R R	   # 

# WW WW  WW  AAAA   LL	 KKK	EEE	 RRR	   # 

#  WWW WWW  AA   A   LLLL  KK Kk  EE  EE  R  RR	 # 

####################################################

var MaxTraceDistance=5 

var TraceLoopIncrease=5 #Увеличение MaxTraceDistance при исчерпании количества ходов

var LimitTrace=20 #Сколько шагов в ОБЕ стороны от начальной точки обхода прекращают ходилку (выхода нет).

var Speed=2 

var StepTimeOut=300 #Таймаут шага. Устанавливать не в размер пинга, а в размер шага + размер пинга.

# Для ходьбы - 500+Ping

# Для бега/ходьбы на лошади - 300+Ping

# Бег на лошади - 150 + Ping



var CheckCnt=2 #Количество слепых проверок. УВЕЛИЧИВАЕТ В СТОЛЬКО РАЗ ТАЙМАУТ. Использовать только на БЫСТРОМ но НЕСТАБИЛЬНОМ коннекте. При большом пинге будет УЖАС.

var DynamicPause=30 #Минимальные паузы в циклах. Чем меньше число - тем меньше рывков и тем больше нагрузка процессора.





Sub Walker(GoX,GoY,Prec) 

  UO.SetGlobal("Logging","0") 

  UO.SetGlobal("BlindWalk","0") 

  var LastDir 

  var MoveRes

  var TracerCnt

  UO.SetGlobal("GlobalGoX",str(GoX)) 

  UO.SetGlobal("GlobalGoY",str(GoY)) 

  while not IsEnd(GoX,GoY,Prec) 

	TracerCnt = MaxTraceDistance

	repeat

	  LogInfo('Just walking') 

	  LastDir=GoUntilHit(GoX,GoY,Prec) 



	  if IsEnd(GoX,GoY,Prec) then 

		return 1

	  end if



	  LogInfo('Tracing') 

	  MoveRes = FullAroundTrace(LastDir,GoX,GoY,Prec,TracerCnt) 

	  if TracerCnt > LimitTrace then

		return 0

	  endif

	  TracerCnt = TracerCnt + TraceLoopIncrease

	until MoveRes == 1

  wend 

  return 1

end sub 



Sub FullAroundTrace(StartDir,GoX,GoY,Prec,MaxTrace) 

  var LineX=UO.GetX() 

  var LineY=UO.GetY() 

  var CurDir=StartDir 

  var Direction=CountDirection(GoX,GoY,CurDir,Prec) 

  var StartX,StartY 

  var MovesDone=0 

  repeat 

	StartX=UO.GetX() 

	StartY=UO.GetY() 

	CurDir=Tracer(CurDir,Direction,Prec) 

	if (CurDir==GetDir(GoX,GoY,Prec)) then 

	  return 1

	endif 

	if MovesDone>0 and PrevMoveCross(GetDirToDir(UO.GetDir(),Prec),LineX,LineY,GoX,GoY,StartX,StartY,Prec) then 

	  return 1

	end if 

	MovesDone=MovesDone+1 

	CurDir=AddToDir(CurDir,-Direction,Prec) 

  until MovesDone>MaxTrace 

  return 0

end sub 



Sub CountDirection(GoX,GoY,StartDir,Prec) 

  var GoDir=GetDir(GoX,GoY,Prec) 

  var MyX=UO.GetX() 

  var MyY=UO.GetY() 

  if GoDir<StartDir then 

	return -1 

  end if 

  if GoDir>StartDir then 

	return 1 

  end if 

  if Abs(MyX-GoX)>Abs(MyY-GoY) then 

	if (GoDir==3 and GoY>MyY) OR (GoDir==7 and GoY<MyY) then 

	  return -1 

	else 

	  return 1 

	end if 

  else 

	if (GoDir==1 and GoX<MyX) or (GoDir==5 and GoX>MyX) then 

	  return -1 

	else 

	  return 1 

	end if 

  end if 

end sub 



Sub PrevMoveCross(Dir,x1,y1,x2,y2,StartX,StartY,Prec) 

  var x3,y3,x4,y4 

  x3=StartX 

  y3=StartY 

  x4=StartX+(XFromDir(Dir)-StartX)*Speed 

  y4=StartY+(YFromDir(Dir)-StartY)*Speed 

  return LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec) 

end sub 



Sub LinesCrossing(x1,y1,x2,y2,x3,y3,x4,y4,Prec) 

  if x1==x3 and y1==y3 then 

	return false 

  end if 

  var z1=(x3-x1)*(y2-y1)-(y3-y1)*(x2-x1) 

  var z2=(x4-x1)*(y2-y1)-(y4-y1)*(x2-x1) 

  if z1*z2>0 then 

	return false 

  else 

	LogInfo('Vector info:') 

	LogInfo('x1= '+str(x1)) 

	LogInfo('y1= '+str(y1)) 

	LogInfo('x2= '+str(x2)) 

	LogInfo('y2= '+str(y2)) 

	LogInfo('x3= '+str(x3)) 

	LogInfo('y3= '+str(y3)) 

	LogInfo('x4= '+str(x4)) 

	LogInfo('y4= '+str(y4)) 

	return true 

  end if 

end sub 



Sub IsDiap(X,X0,X1,Prec) 

  if X<=X0+Prec and X>=X1-Prec OR X>=X0-Prec and X<=X1+Prec then 

	return true 

  end if 

  return false 

end sub 



Sub GoUntilHit(GoX,GoY,Prec) 

  var LastDir 

  LastDir=GetDir(GoX,GoY,Prec) 

  var CouldMove 

  repeat 

	LastDir=GetDir(GoX,GoY,Prec) 

	if LastDir<>0 and not IsEnd(GoX,GoY,Prec) then 

	  CouldMove=TryDir(LastDir,Prec) 

	end if 

  until LastDir==0 or IsEnd(GoX,GoY,Prec) or not CouldMove 

  return LastDir 

end sub 



Sub IsEnd(GoX,GoY,Prec) 

  if Abs(UO.GetX()-GoX)<=Prec and Abs(UO.GetY()-GoY)<=Prec then 

	LogInfo('END FOUND') 

	return true 

  else 

	return false 

  end if 

end sub 



Sub GetDir(GoX,GoY,Prec) 

  var MyX=UO.GetX() 

  var MyY=UO.GetY() 

  var DiffX=Abs(UO.GetX()-GoX) 

  var DiffY=Abs(UO.GetY()-GoY) 

  var GoDir=0 

  if (DiffX/(DiffY+0.1))>=2 then 

	if (MyX>GoX) then 

	  GoDir=7 

	else 

	  GoDir=3 

	end if 

  else 



  if (DiffY/(DiffX+0.1))>=2 then 

	if (MyY>GoY) then 

	  GoDir=5 

	else 

	  GoDir=1 

	end if 

  else 

  

  if (MyX>GoX) and (MyY>GoY) then 

	GoDir=6 

  else 

  if (MyX>GoX) and (MyY<GoY) then 

	GoDir=8 

  else 

  if (MyX<GoX) and (MyY>GoY) then 

	GoDir=4 

  else 

  if (MyX<GoX) and (MyY<GoY) then 

	GoDir=2 

  end if 

  end if 

  end if 

  end if 

  end if 

  end if 

  return GoDir 

end sub 



Sub Tracer(StartDir,Direction,Prec) 

  var CurDir=StartDir 

  var Result 

  repeat 

	Result=TryDir(CurDir,Prec) 

	if not Result then 

	  CurDir=AddToDir(CurDir,Direction,Prec) 

	end if 

  until Result 

  return Result 

end sub 



Sub AddToDir(Dir,Cnt,Prec) 

  var NewDir=Dir 

  NewDir=NewDir+Cnt 

  while NewDir>8 

	NewDir=NewDir-8 

  wend 

  while NewDir<1 

	NewDir=NewDir+8 

  wend 

  return NewDir 

end sub 



Sub TryDir(Dir,Prec) 

  var BegX=UO.GetX() # Ia?aeuiia O 

  var BegY=UO.GetY() # Ia?aeuiia Y 

  var Counter=0 

  var GoX=BegX 

  var GoY=BegY 

  GoX=XFromDir(Dir) 

  GoY=YFromDir(Dir) 

  if not IsPass(GoX,GoY) then 

	LogInfo(str(GoX)+':'+str(GoY)+' is not passable') 

	return false 

  end if 

  return TurnAndGoDir(Dir,Prec) 

end sub 



Sub XFromDir(Dir) 

  if Dir==2 OR Dir==3 Or Dir==4 then 

	return (UO.GetX()+1) 

  end if 

  if Dir==6 OR Dir==7 Or Dir==8 then 

	return (UO.GetX()-1) 

  end if 

  return (UO.GetX()) 

end sub 



Sub YFromDir(Dir) 

  if Dir==8 OR Dir==1 Or Dir==2 then 

	return (UO.GetY()+1) 

  end if 

  if Dir==4 OR Dir==5 Or Dir==6 then 

	return (UO.GetY()-1) 

  end if 

  return (UO.GetY()) 

end sub 



Sub TurnAndGoDir(Dir,Prec) 

  var StartDir=GetDirToDir(UO.GetDir(),Prec) 

  var StartX=UO.GetX() 

  var StartY=UO.GetY() 

  var EndDir 

  var Counter=0

  var TestCounter=CheckCnt



#Direction Test

  repeat

	Counter = 0

	LogInfo('Dir: '+str(StartDir)+' Counter: '+str(Counter))  

	PressDir(Dir) 

	repeat 

	  EndDir=GetDirToDir(UO.GetDir(),Prec) 

	  wait(DynamicPause) 

	  Counter=Counter+1 

	until StartDir<>EndDir or StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause 

	TestCounter = TestCounter - 1

	LogInfo('Dir: '+str(EndDir)+' Counter: '+str(Counter))  

  until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause 



  if Counter>=StepTimeOut/DynamicPause  then 

	 LogInfo('Direction timeout reached') 

	 return 0 

  end if 

  #End direction Test



  if StartY<>UO.GetY() or StartX<>UO.GetX() then 

	return Dir 

  end if



  #Start Primary test

  TestCounter=CheckCnt

  repeat

	GoDir(Dir,Prec)

	Counter=0

	repeat 

	  wait(DynamicPause) 

	  Counter=Counter+1 

	until StartY<>UO.GetY() or StartX<>UO.GetX() or Counter>=StepTimeOut/DynamicPause 

	TestCounter = TestCounter - 1

  until TestCounter <= 0 or Counter < StepTimeOut/DynamicPause 

  #End primary test



  if Counter>=StepTimeOut/DynamicPause then 

	LogInfo('Step timeout reached') 

	return 0 

  else 

	return Dir 

  end if 

end sub 



Sub GetDirToDir(GotDir,Prec) 

   var ChangedDir=-GotDir 

   ChangedDir=AddToDir(ChangedDir,5,Prec) 

   return ChangedDir 

end sub 



Sub DirToInj(Dir) 

   dim Dirs[9] 

   Dirs[1]=1 

   Dirs[2]=2 

   Dirs[3]=3 

   Dirs[4]=6 

   Dirs[5]=9 

   Dirs[6]=8 

   Dirs[7]=7 

   Dirs[8]=4 



   return (Dirs[Dir]) 

end sub 



Sub PressDir(Dir)

   dim Dirs[9] 

   Dirs[1]=35 

   Dirs[2]=40 

   Dirs[3]=34 

   Dirs[4]=39 

   Dirs[5]=33 

   Dirs[6]=38 

   Dirs[7]=36 

   Dirs[8]=37 



   UO.Press(Dirs[Dir],1) 

end sub 



Sub GoDir(Dir,Prec) 

   dim Dirs[9] 

   Dirs[1]=35 

   Dirs[2]=40 

   Dirs[3]=34 

   Dirs[4]=39 

   Dirs[5]=33 

   Dirs[6]=38 

   Dirs[7]=36 

   Dirs[8]=37 



   var DistanceX=Abs(UO.GetX()-val(UO.GetGlobal("GlobalGoX"))) 

   var DistanceY=Abs(UO.GetY()-val(UO.GetGlobal("GlobalGoY"))) 

   var GoDistance 

   if (DistanceX-Prec)<Speed then 

	  GoDistance=DistanceX-Prec 

   else 

	  if (DistanceY-Prec)<Speed then 

		 GoDistance=DistanceY-Prec 

	  else 

		 GoDistance=Speed 

	  endif 

   endif 



   UO.Press(Dirs[Dir],GoDistance) 

end sub 



Sub IsPass(X,Y) 

  if UO.GetGlobal("BlindWalk") then 

	return true 

  endif 



   dim Types[60] 

   Types[1]=3 

   Types[2]=25 

   Types[3]=51 

   Types[4]=63 

   Types[5]=113 

   Types[6]=140 

   Types[7]=172 

   Types[8]=219 

   Types[9]=232 

   Types[10]=235 

   Types[11]=239 

   Types[12]=243 

   Types[13]=248 

   Types[14]=251 

   Types[15]=264 

   Types[16]=267 

   Types[17]=282 

   Types[18]=289 

   Types[19]=321 

   Types[20]=379 

   Types[21]=420 

   Types[22]=440 

   Types[23]=476 

   Types[24]=499 

   Types[25]=513 

   Types[26]=542 

   Types[27]=578 

   Types[28]=586 

   Types[29]=622 

   Types[30]=700 

   Types[31]=804 

   Types[32]=1740 

   Types[33]=1758 

   Types[34]=1770 

   Types[35]=1779 

   Types[36]=1779 

   Types[37]=1881 

   Types[38]=1886 

   Types[39]=1801 

   Types[40]=1805 

   Types[41]=1813 

   Types[42]=1820 

   Types[43]=1831 

   Types[44]=1833 

   Types[45]=1843 

   Types[46]=1850 

   Types[47]=1873 

   Types[48]=1876 

   Types[49]=1885 

   Types[50]=1888 

   Types[51]=1946 

   Types[52]=1969 

   Types[53]=2500 

   Types[54]=2539 

  

  for var i=1 TO 53 STEP 2 

	if UO.PrivateGetTile(X,Y,-1,Types[i],Types[i+1]) then 

	  return true 

	end if 

  next 

  return false 

end sub 



Sub LogInfo(Line) 

  if not UO.GetGlobal("Logging")=="0" then 

	UO.TextOpen() 

	UO.TextPrint(str(UO.GetX())+":"+str(UO.GetY())+" - "+Line); 

  end if 

end sub 



Sub Abs(X) 

  if X>0 then 

	return X 

  else 

	return (-X) 

  end if 

end sub 

########################################## КОНЕЦ ХОДИЛКИ 3 ##########################



Sub DeleteJournal(msg); msg это параметр, см. выше как его передают

   var nom=UO.InJournal(msg); ищем сообщение и в переменную его

   if nom>0 then 

	  UO.SetJournalLine(Nom - 1,"deleted"); подменим сообщение

	  DeleteJournal(msg); вызов функцией самой себя, рекурсия

   endif 

endsub



Sub CheckLag()

   DeleteJournal("backpack"); вытрим ТОЛЬКО нужные нам сообщения в журнале

   UO.Click('backpack'); одиночный клик по вашему backpack

;	   ждем сообщения в журнале

   repeat

	  wait(100)

   until UO.InJournal("backpack")

end sub



Sub onlynumbers(string)

var i, j

var text=''

for i=0 to len(string); вот начинается этот самый перебор строки по 1 символу

for j=0 to 9; используется для "если символ (str) от 0 до 9, то.."

if mid(string,i,1)==str(j) then; если текущий символ в строке равен (преобразованному в текст) числу от 0 до 9, то...

text = text + mid(string,i,1); ...то записываем его в переменную которая потом будет  передана в исходный скрипт

end if

next

next

return text

end sub

In Topic: Хорошие скрипты

19 February 2010 - 01:33

Третий вариант рекола. Задает только один вопрос - номер руны. Переменную вар меняет под себя в соответствии с комментариями.


sub recallASMmini()

	var runebook = '0x40044c23'; ID Runebook. Use ,info

	var where = uo.asminputstring("Введите порядковый номер руны от 1 до 16:")

	var how = 2				#### 1 = Реколл_по_зарядам; 2 = Реколл_по_регам; 3 = Реколл_гейтом; 4 = Перезарядка_рунбуки

	var oldX=uo.getX()

	var oldY=uo.getY()

	var number, num=val(where)

	if how == 1 then

		number = num+1

	endif

	if how == 2 then

		number = num*2+18

	endif

	if how == 3 then 

		number = num*2+19

	endif

	if how == 4 then

		deletejournal('You have no scrolls')

		uo.recall(runebook, 1)

		if uo.injournal('You have no scrolls') then

			uo.print('You have no scrolls. Terminating.')

			return

		else

			return

		endif

	endif

	if num>16 or num<1 then

		uo.print('Wrong rune number. Terminating.')

		return

	endif

	repeat

		uo.warmode(false)

		deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')

		uo.recall(runebook, number)

		uo.useskill('Hiding')

		var k=0

		repeat

			wait(500)

			k=k+500

		until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000

		if uo.injournal('Insufficient mana for this spell') then

			uo.print('You need more mana. Terminating')

			return

		endif

		if uo.injournal('You lack the reagents for this spell') then

			uo.print('You need more reagents. Terminating')

			return

		endif

	until oldX<>uo.getX() or oldY<>uo.getY()

end sub

In Topic: Хорошие скрипты

19 February 2010 - 01:31

Отличие от предыдущего скрипта в том, что номер руны не руками вводим, а выбираем из меню...

sub recallASMcombo()

	var runebook = '0x40044c23'; ID Runebook. Use ,info

	var where = uo.asminputcombo("Укажите порядковый номер руны","1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16")

	var how = uo.asminputlist("Укажите задачу","Реколл_по_зарядам;Реколл_по_регам;Реколл_гейтом;Перезарядка_рунбуки")

	var oldX=uo.getX()

	var oldY=uo.getY()

	var number

	if how == 1 then

		number = where+1

	endif

	if how == 2 then

		number = where*2+18

	endif

	if how == 3 then 

		number = where*2+19

	endif

	if how == 4 then

		deletejournal('You have no scrolls')

		uo.recall(runebook, 1)

		if uo.injournal('You have no scrolls') then

			uo.print('You have no scrolls. Terminating.')

			return

		else

			return

		endif

	endif

	if how == 0 then

		uo.print('Wrong choise of recall method. Terminating.')

		return

	endif

	if where>16 or where<1 then

		uo.print('Wrong rune number. Terminating.')

		return

	endif

	repeat

		uo.warmode(false)

		deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')

		uo.recall(runebook, number)

		uo.useskill('Hiding')

		var k=0

		repeat

			wait(500)

			k=k+500

		until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000

		if uo.injournal('Insufficient mana for this spell') then

			uo.print('You need more mana. Terminating')

			return

		endif

		if uo.injournal('You lack the reagents for this spell') then

			uo.print('You need more reagents. Terminating')

			return

		endif

	until oldX<>uo.getX() or oldY<>uo.getY()

end sub

In Topic: Хорошие скрипты

19 February 2010 - 01:28

Скрипт на рекол по рунбуке. Ставим АйДи своей буки и пользуемся. Вводим номер руны руками и выбераем необходимый способ. Так же можно перезаряжать, выбрав соответствующий пункт. Не стоит использовать для побега от ПК.

sub recallASMstring()

	var runebook = '0x40044c23'; ID Runebook. Use ,info

	var where = uo.asminputstring("Введите порядковый номер руны от 1 до 16:")

	var how = uo.asminputlist("Укажите задачу","Реколл_по_зарядам;Реколл_по_регам;Реколл_гейтом;Перезарядка_рунбуки")

	var oldX=uo.getX()

	var oldY=uo.getY()

	var number, num=val(where)

	if how == 1 then

		number = num+1

	endif

	if how == 2 then

		number = num*2+18

	endif

	if how == 3 then 

		number = num*2+19

	endif

	if how == 4 then

		deletejournal('You have no scrolls')

		uo.recall(runebook, 1)

		if uo.injournal('You have no scrolls') then

			uo.print('You have no scrolls. Terminating.')

			return

		else

			return

		endif

	endif

	if how == 0 then

		uo.print('Wrong choise of recall method. Terminating.')

		return

	endif

	if num>16 or num<1 then

		uo.print('Wrong rune number. Terminating.')

		return

	endif

	repeat

		uo.warmode(false)

		deleteJournal('Insufficient mana for this spell|You lack the reagents for this spell')

		uo.recall(runebook, number)

		uo.useskill('Hiding')

		var k=0

		repeat

			wait(500)

			k=k+500

		until oldX<>uo.getX() or oldY<>uo.getY() or uo.InJournal('Insufficient mana for this spell|You lack the reagents for this spell') or k>15000

		if uo.injournal('Insufficient mana for this spell') then

			uo.print('You need more mana. Terminating')

			return

		endif

		if uo.injournal('You lack the reagents for this spell') then

			uo.print('You need more reagents. Terminating')

			return

		endif

	until oldX<>uo.getX() or oldY<>uo.getY()

end sub