Скрипт на убивание овечек

Ask for scripts here

Moderators: Murderator+, Murderator

Post Reply
mort
Posts: 10
Joined: 2007-07-02 12:26:55

Скрипт на убивание овечек

Post by mort »

Есть загон в Еве 23 на 23 клетки,в нём респятся овцы,препятствий нет,напишите плз скриптик,чтобы как появлялась овца он шёл к ней,состригал бучером шерсть,убивал оружием,резал труп и доставал шерсть из трупа плз 0)
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Code: Select all

sub Abs(num)
	if num < 0 then
		return -num
	end if
	return num
end sub

sub Sig(num)
if num < 0 then 
	return -1
else
	if num == 0 then
		return 0
	endif
endif
return 1
end sub 
		 
sub MoveToXY(x, y, prec)
	var dx, dy
	dim Key[9]
		Key[0]=37
		Key[1]=35
		Key[2]=40
		Key[3]=36
		Key[4]=12
		Key[5]=34
		Key[6]=38
		Key[7]=33
		Key[8]=39
		dx=x-uo.GetX()
		dy=-y+uo.GetY()
	while (Abs(dx) > prec) or (Abs(dy) > prec)
		dx=x-uo.GetX()
		dy=-y+uo.GetY()
		uo.Press(Key[(sig(dy)+1)*3+1+sig(dx)])
		wait(10)
	wend
end sub	

sub MoveTo(object, prec)
	var dx, dy
	dim Key[9]
		Key[0]=37
		Key[1]=35
		Key[2]=40
		Key[3]=36
		Key[4]=12
		Key[5]=34
		Key[6]=38
		Key[7]=33
		Key[8]=39
	while uo.GetDistance(object) > prec
		dx=uo.GetX(object)-uo.GetX()
		dy=-uo.GetY(object)+uo.GetY()
		uo.Press(Key[(sig(dy)+1)*3+1+sig(dx)])
		wait(10)
	wend
end sub	

sub KillIt()
var animal=0x00CF #тип животного
var n=1
var x=uo.GetX()
var y=uo.GetY()
uo.ignorereset()
uo.forget('far')
uo.forget('counters')
uo.SetGlobal('KillCount', 0)

Repeat
	wait(10)
	uo.Set('finddistance', n)
	uo.FindType(animal, -1, 'ground')
	if uo.FindCount() then
		wait(100)
		if uo.IsNPC('finditem') then
			uo.info('finditem')
			while uo.IsNPC('finditem')
				if uo.GetDistance('finditem') > 1 then
					MoveTo('finditem', 1)
					uo.attack('finditem')
				end if
				wait(100)
			wend
			uo.SetGlobal('KillCount', val(uo.GetGlobal('KillCount'))+1)
			uo.forget('finditem')
			uo.warmode(0)
			uo.waittargetobject('lastcorpse')
			uo.usetype(0x0F51)
			while uo.waiting()
				wait(100)
			wend
			uo.disarm()
			n=1
		else
			uo.Ignore('finditem')
		end if
	else
		n=n+1
		if n > 20 then
			if (uo.GetX() <> x) or (uo.GetY() <> y) then
				MoveToXY(x, y, 1)
			end if
			n=1
		end if
	end if
Until uo.Dead()
end sub

sub Stat()
	uo.charprint(257, 'От ваших рук погибло: '+uo.GetGlobal('KillCount')+' невинных овец')
end sub
непомню что за шард
Бегает за овцами киляет и режит, дальше сам.
Лутше встать в центр поля и запустить.
Dralka
Posts: 10
Joined: 2005-05-14 15:46:38
Contact:

Post by Dralka »

нид хелп , у мну пишет finddistance=0 и стоит на месте , если пробовать ходить , то все время пытается вернутся в исходное положение
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Стучитесь комне...
помогу подогнать под вашь шард
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Code: Select all

sub Abs(num)
   if num < 0 then
      return -num
   end if
   return num
end sub

sub Sig(num)
	if num < 0 then
	   return -1
	else
	   if num == 0 then
	      return 0
	   endif
	endif
	return 1
end sub
      
sub MoveToXY(x, y, prec)
   var dx, dy
   dim Key[9]
      Key[0]=37
      Key[1]=35
      Key[2]=40
      Key[3]=36
      Key[4]=12
      Key[5]=34
      Key[6]=38
      Key[7]=33
      Key[8]=39
      dx=x-uo.GetX()
      dy=-y+uo.GetY()
   while (Abs(dx) > prec) or (Abs(dy) > prec)
      dx=x-uo.GetX()
      dy=-y+uo.GetY()
      uo.Press(Key[(sig(dy)+1)*3+1+sig(dx)])
      wait(100)
   wend
end sub   

sub MoveTo(object, prec)
   var dx, dy
   dim Key[9]
      Key[0]=37
      Key[1]=35
      Key[2]=40
      Key[3]=36
      Key[4]=12
      Key[5]=34
      Key[6]=38
      Key[7]=33
      Key[8]=39
   while uo.GetDistance(object) > prec
      dx=uo.GetX(object)-uo.GetX()
      dy=-uo.GetY(object)+uo.GetY()
      uo.Press(Key[(sig(dy)+1)*3+1+sig(dx)])
      wait(100)
   wend
end sub   

sub KillIt()

	var animal=0x00CF #тип животного
	var n=1
	var x=uo.GetX()
	var y=uo.GetY()
	var IsLamb
	var MaxWeight = 640
	
	uo.ignorereset()
	uo.forget('far')
	uo.forget('counters')
	uo.SetGlobal('KillCount', 0)

	while not uo.Dead()
		uo.Set('finddistance', n)
		uo.FindType(animal, -1, 'ground')
		if uo.FindCount() then
			wait(100)
			if uo.IsNPC('finditem') then
				IsLamb = 0
				
				while uo.IsNPC('finditem')
					if uo.GetDistance('finditem') > 1 then
						MoveTo('finditem', 1)
						if not IsLamb then
							uo.waittargetobject('finditem')
							uo.usetype(0x0F51)
							IsLamb = 1
						endif
						uo.attack('finditem')
					end if
					wait(100)
				wend
				
				uo.SetGlobal('KillCount', val(uo.GetGlobal('KillCount'))+1)
				uo.forget('finditem')
				uo.warmode(0)
				uo.waittargetobject('lastcorpse')
				uo.usetype(0x0F51)
				
				while uo.waiting()
					wait(100)
				wend
				
				wait(500)
				if uo.Weight > MaxWeight then
					uo.WaitTargetType(0x1078)
					uo.UseType(0x0F9E)
					while uo.Waiting()
						wait(100)
					wend
				endif
				uo.grab(-1, 'lastcorpse.0x1078')
				n=1
			else
				uo.Ignore('finditem')
			end if
		else
			n=n+1
			if n > 20 then
				if (uo.GetX() <> x) or (uo.GetY() <> y) then
					MoveToXY(x, y, 1)
				end if
				n=1
			end if
		end if
		wait(100)
	wend
	
end sub

sub Stat()
   uo.charprint(257, 'От ваших рук погибло: '+uo.GetGlobal('KillCount')+' невинных овец')
end sub
Chico
Posts: 46
Joined: 2005-05-02 17:37:12
Contact:

Post by Chico »

Делал кому то под антарес, только там не шерсть а кустики хлопка собирает из овцы. Поменяете тип заместо кустика - шерсть и вперед с песней.

Code: Select all

var Stoplocation     ;   Переменная отслеживает остановку чара
var nogik = '0x0f51'    ; тип ножа для резки 
var Box = '0x40079d3a'  ; бокс откуда брать и куда складывать кустики
var Derevo = '0x0c4f'    ;  Кустик
var hаvka = '0x09f2'      ; еда
var dich = '0x00cf'    ; Овца  
var paus = 300


sub pvm()
	nac:
	repeat 
		warka()	
		uo.print('ishem')
	until uo.life == 0  ; or uo.count(nogik) == 0
	go_bank()	         ; бежим к банку  
	if uo.Life ==0  then     ; Если мы прибежали к банку по причине смерти то бежим чуть далее до креста
		uo.print('umer')
		uo.warmode(1)
		gotoxy(634,851,1)     ;  забегаем
		gotoxy(635,824,1)     ; к двери скрестом
		gotoxy(635,817,1)
		uo.usefromground('0x0005')
		gotoxy(635,824,1)     ; к двери скрестом
		uo.opendoor()         ; открываем ее
		gotoxy(634,855,1)      ; к двери наружной
		uo.opendoor()         ; открываем ее
		gotoxy(634,857,1)     ; выходим
	end if
		
		GrKust()             ; Скидываем кустики
		GrNog()				 ; Берем ножи
		havaem()             ; хаваем
		go_past()             ; бежим к пастбищу
		goto nac              ; к началу скрипта
end sub

Sub GrKust()             ; Скидываем кусты если они есть
repeat 
  uo.say("BANK")
  wait(500)
  uo.useobject(Box)
  uo.findtype(Derevo) #Derevo 
  uo.moveitem('finditem','0',Box,1,1,1)      ; выкидываем в аккуратную стопочку все кустики
  wait(500) 
until not uo.count(Derevo)
end sub 

Sub GrNog()                   ;    берем нож
uo.deletejournal() 
uo.print('Berem nog')
wait(1000)
if uo.count(nogik) < 1 then
      uo.findtype(nogik,'-1',Box) 
      UO.grab('1','finditem') 
      Wait(1200) 
end if 
end sub 

Sub havaem()
var h
	uo.deletejournal() 
	uo.print('Berem edu')
wait(3000)
if uo.count(hаvka) < 5 then
      uo.findtype(hаvka,'-1',Box) 
      UO.grab('5','finditem') 
      Wait(1200) 
end if 
for h = 1 to 5
	  uo.usetype(hаvka)     ; пытемся сожрать еду
	  wait(500)
next
  uo.findtype(hаvka) 
  uo.moveitem('finditem','0',Box,1,1,1)      ; выкидываем обратно еду если что осталось
  wait(500) 
end sub




sub warka()
var dx,dy, obj, i, obj2
		
		if Stoplocation  == 1 then        ; если застряли то отбежим в средину пастбища
			gotoxy(570,1099,1)           
		end if

		UO.Set('finddistance',40)            ; дистанция для поиска
		UO.FindType(Dich, '-1', '1')    ; Ищем животное
		wait(paus)
		If UO.FindCount() > 0 Then          ; если нашли 
			obj = UO.GetSerial("finditem")           ; запоминаем его
			dx=UO.GetX(obj)           ; находим координаты
			dy=UO.GetY(obj)    
			uo.warmode(1)             ; входим в вармод
			wait(paus)
			Gotoxy(dx,dy,1)       ; подходим поближе
			uo.attack(obj)         ; атакуем
			repeat 
				wait(200)     ; чуть подождем пока убьет жертву, или если промахнулись То дальще
			until uo.GetHP(obj) == 0 or uo.GetDistance(obj) > 1
			
			UO.Set('finddistance',2)            ; дистанция для поиска
			wait(200)
	    	UO.FindType('0x2006', '-1', '1')    ; Ищем на земле труп
			uo.print('poisk trupa')
			wait(200)

			if uo.findcount()  > 0 then        ; если находим то далее режем и т.д.
				obj2 = UO.GetSerial("finditem")   
				uo.warmode(0)             ; выходим из вармод
				uo.print('vihod iz wara')	    	
				wait(paus)
			    uo.waittargetobject(obj2)      ; установить прицел на труп
			    wait(paus)
			    UO.usetype('0x0f51')            ; Использовать нож на прицеле
			    wait(paus)
				; UO.FindType('0x0c4f', '-1', obj2)    ;  Искать ростки
				UO.FindType('0x09f1', '-1', obj2)    ;  Искать ростки				
				uo.print('poisk rostkov')
				wait(500)
				if uo.findcount()  > 0 then       ; если находим ростки то
					UO.Grab( 100, 'finditem' )     ;  грабим 
					wait(paus)
					uo.print("Vziali")
				else
					uo.print("Pusto")
				end if
		   	uo.ignore(obj2)      ; игнорировать обьект в дальнейшем		    
			uo.disarm()            ; разоружаемся
			wait(paus)
			end if
		end if
	
end sub

Sub gotoxy(x,y,prec)
VAR ld=0,ldc=0
VAR dx,dy
VAR mx,my
VAR ox,oy,mk,k

start:
mx=Uo.GetX()
my=Uo.GetY()
dx=mx-x
IF dx<0 then
dx=0-dx
endIF
dy=my-y
IF dy<0 then
dy=0-dy
endIF
IF dy>dx then
dx=dy
End IF
IF dx<=prec then
return
End IF
IF dx<3 then
mk=70
else
mk=15
End IF
ox=mx
oy=my
for k=1 to mk
mx=Uo.GetX()
my=Uo.GetY()
IF mx<>ox or my<>oy then
goto sdidapl
End IF
wait(10)
next
sdidapl:
mx=Uo.GetX()
my=Uo.GetY()
dx=mx-x
IF dx<0 then
dx=0-dx
endIF
dy=my-y
IF dy<0 then
dy=0-dy
endIF
IF dy>dx then
dx=dy
End IF
IF dx<=prec then
return
End IF
IF ld==dx then
ldc=ldc+1
IF ldc>50 then
  Uo.print("Zastrial!"+"***"+" "+Time())
  Stoplocation = 1   
  return
End IF
else
ld=dx
End IF
IF mx==x then
IF my==y then
return
endIF
IF my>y then
Uo.Press(33)
goto start
endIF
Uo.Press(35)
goto start
End IF
IF mx<x then
IF my>y then
Uo.Press(39)
goto start
endIF
IF my==y then
Uo.Press(34)
goto start
endIF
Uo.Press(40)
goto start
End IF
IF my<y then
Uo.Press(37)
goto start
endIF
IF my==y then
Uo.Press(36)
goto start
endIF
Uo.Press(38)
goto start

end sub

#++++++++++++++++++++++++++++++++
Sub Time()
VAR Date,nTime,uTime,i
uTime=str(Uo.Time())
nTime=""
for i=0 to Len(uTime)
nTime=uTime[Len(uTime)-i]+nTime
IF (i==2) or (i==4) then
nTime=":"+nTime
End IF
next
uTime=str(Uo.Date())
Date=""
for i=0 to Len(uTime)
Date=uTime[Len(uTime)-i]+Date
IF (i==2) or (i==4) then
Date="."+Date
End IF
next
uTime=nTime+" @ "+Date
return uTime
end sub
#++++++++++++++++++++++++++++++++
Sub GetNumb(C,I)
VAR J,T,K
J=0
K=1
While K>0
  J=J+1
  IF (Mid(C,J,1)==" ") Or (J>=Len(C)-1) Then
   IF I==0 Then
    T=Val(Left(C,J))
   Else
    T=GetNumb(Right(C,Len(C)-J-1),I-1)
   EndIF
   K=0
  EndIF
wend
return T
end sub


sub go_bank()   ; Бег к банку
gotoxy(561,1110,1)     ; бежим ближе к выходу
uo.opendoor()          ;  открываем двери  	
uo.print('1 точка') 
GotoXY(563,1126,1)
uo.print('4 точка') 
GotoXY(542,1133,1)
uo.print('5 точка') 
GotoXY(539,1114,1)
uo.print('6 точка') 
GotoXY(538,1085,1)
uo.print('7 точка') 
GotoXY(551,1067,1)
uo.print('8 точка') 
GotoXY(549,1039,1)
uo.print('9 точка') 
GotoXY(554,1005,1)
uo.print('10 точка') 
GotoXY(590,995,1)
uo.print('11 точка') 
GotoXY(612,997,1)
uo.print('15 точка') 
GotoXY(631,970,1)
uo.print('16 точка') 
GotoXY(631,962,1)
uo.print('17 точка') 
GotoXY(633,933,1)
uo.print('18 точка') 
GotoXY(637,915,1)
uo.print('19 точка') 
GotoXY(646,915,1)
uo.print('20 точка') 
GotoXY(649,900,1)
uo.print('21 точка') 
GotoXY(640,892,1)
uo.print('22 точка') 
GotoXY(635,875,1)
uo.print('23 точка') 
GotoXY(634,856,1)
end sub

sub go_past()             ; бег к пастбищу
uo.print('1 точка') 
GotoXY(635,864,1)
uo.print('2 точка') 
GotoXY(639,890,1)
uo.print('3 точка') 
GotoXY(648,899,1)
uo.print('4 точка') 
GotoXY(647,911,1)
uo.print('5 точка')
GotoXY(633,916,1)
uo.print('6 точка') 
GotoXY(625,922,1)
uo.print('6_1 точка') 
GotoXY(606,933,1)
uo.print('7 точка') 
GotoXY(634,961,1)
uo.print('8 точка') 
GotoXY(646,981,1)
uo.print('9 точка') 
GotoXY(612,997,1)
uo.print('10 точка') 
GotoXY(590,995,1)
uo.print('11 точка') 
GotoXY(554,1005,1)
uo.print('12 точка') 
GotoXY(549,1039,1)
uo.print('13 точка') 
GotoXY(551,1067,1)
uo.print('14 точка') 
GotoXY(538,1085,1)
uo.print('15 точка') 
GotoXY(539,1114,1)
uo.print('16 точка') 
GotoXY(542,1133,1)
uo.print('17 точка') 
GotoXY(556,1145,1)
uo.print('19 точка') 
GotoXY(563,1126,1)
uo.print('20 точка') 
GotoXY(562,1112,0)
uo.opendoor()         ; открываем ворота
gotoxy(562,1109,0)     ; забегаем внутрь
end sub
;   ----  Вспомоагтельные сабы, для сбора тайлов и для сбора ид обьектов
sub Metka()   #         
repeat
uo.infotile()
wait(3000)
until false
end sub

sub ukazka_boxa()                    ; это не нужная утилита
	uo.Exec('addobject Box')
	while uo.Targeting()
	wait(100)
	wend
end sub
Post Reply