Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Small Stone Depositer


Rekomendowane odpowiedzi

Opublikowano

Witam

 

Jesli ktos marzyl o Small Stone Depositerze w NG to ten temat jest dla niego. Depositer odnosi Small Stony do depo Ab'Dendriel z Fermour Hills (gobliny).

 

 

Oto opis jak zrobic:

 

1. Kopiujemy ponizsze WAYPOINTY, wklejamy je do notatnika i zapisujemy, np. gobliny.wpt nalezy napisac na koncu .wpt

 

32624

31792

7

6

32605

31836

7

6

32601

31838

7

8

32585

31856

6

6

32567

31849

6

6

32531

31855

6

6

32528

31826

6

6

32536

31790

6

6

32575

31768

6

6

32612

31772

6

6

32620

31790

6

6

32622

31790

6

8

32623

31790

7

6

 

 

2. Kopiujemy ponizszy skrypt i robimy podobnie jak w punckie 1. czyli wklejamy do notatnika i zapisujemy tylko ze z koncowka .ng

 

 

 

{wpt.walkerbyX inspired by mahamad, modified and added by xadi(test30)

v1.41

->openingbackpacks improved to be liek elfstyle. everybackpack from first opened container will be opened in separated window

v1.4

->modified talking with travel-npcs by adding loop, so if for example buddel will sail you to wrong place (the correct place is based on next waypoints) script will try to talk to him again about sailing.

->added withdrawitemsfromdepot which can withdraw for example spears from depot to backpack, where loot is. adding array [3277,50,100] will withdraw spears from depot until reached 50 cap OR 100 spears in first opened backpack, if there are not enough speras in depot, script will pause itself by showing message.

it can be used to refill food for example, lets say 1234 is food's id. [1234,10,30] will look for food while it is in depot until cap=10 or lower OR amount of food is above 30;

-array ammoids tells script which items is ammo, lets say you want to script equips spears after withdrawing them from depot, so you need to have 3277(spearid) and at least 1 spear in any of your hands

v1.32

->procedure checking is container full used in depositer now always will return a value

v1.31

->fixed reopenbpafterdp if choosed false

v1.3

->laguna island support, even with PUSHING players and moving items staying on turtle

->improved ramp detection, now not only Z-level change makes it reached, but big teleportations too

->added bigger delay between reopening backpacks

v1.2

->npc traveling

v1.11

->added item stacker in depo

->no more BP-2 reopening backpack problem

->fixed a little shoveling

->fixed ramp reaching

v1.0 beta

->first release to the public:

+useful variables such as

|def_capacity-> below this character's capacity script in nearest execution will go to depo, it is in 'every depositer'

|

+items2dp->depositing items to depo with

|script will check is depot available, if it is not, it will try to open another, if there is not free depot, it will wait until someone leaves and it will continue depositing procedure, simple, isn't it?

|advanced choosing the best position in depo to item be stacked with, for example, if you have in your bp 1200gps in gold coins, and script opens depo and it sees there is pile with 1gp and 2gp, it droops 100gp on this 1gp what makes another 1gp is first item in bp, next turn drops 100gp on this 2gp, so it makes first items in backpack are 2gp,1gp, there is no chance of fast-wasting backpacks

|automatically opening next backpacks in depo, automatically looking for free space there

 

+pause(scroll lock key)

|for example, if you are being attacked by pk while script is running, simply press [scroll lock key] which is mostly to the left from famous pause|break key and depositer will get paused in way which can be resumed by simply reclicking scrolllock

 

+waypoint scrolling keys[pageup/pagedown]

|if you want to back to waypoint which you were going to in previous turn press pagedown, if you want to skip waypoints to not waste time of waiting, press pageup

 

+def_delta->first used in depositers variable delta it is simple and useful!

|if you got delta=5 and script is executed while having 15 items in backpack, which has 20 maximum-items-in, delta of first opened backpack equals to 20-15=5 and it is >=5, so if you got 15 or more items in first opened backpack script will go to depo

 

+improved shoveling

|full support for normal shovel and light shovel

|if hole is hidden, for example tombs, it will try to pick it many times, but not in infinity.

|if there is rubish on hole it will move it under your feet so bot can simply use shovel on hole, not on rubbish

 

+sever gate using included in script, no more having problem with edron-gobs depositer

 

+full support for elvenhair rope and normal rope

 

+reopenbpafterdp->backpack reopener

|lets say you are hunting turtles and you want to script leave isle when 20cap, average amount of gp is then like 8k~=4bps of cash, after you will back to island you will have only last backpack ready for looting, so you need to reopen backpack by your own hands, this procedure lets you to script after depositing items reopen backpack

 

+def_attackmonsters->attacking controller, do you want to depositer attacks monsters? no problem, set it to 1, do you want depositer not to attack monsters? set it to 0, want to leave it without scripter decision? set it to 2

 

+depositer with withdrawer, why is it needed? lets say you want to deposit gold and items from Laguna Island with turtles, you need 50gp after depositing all to bank to get back to exp-spot, this depositer allows you to withdraw this cash to be able to travel there again and keep exping, tottaly afk can be left there and it will not stand in front of npc and wont keep saying hi>passage>yes

|procedure which checks is there bank npc, if there is not near you, script wont be executed

 

+included-in-depositer house depositer, why in depositer? where can i find it useful? for example in fibula, i have got ready setting for http://erig.net/house/MORGANA/FibulaVillage4 house, and script it 100% working, tested it well by creating many 50lvls knights

|items may be even dropped by the window

 

+100% support for door opening, fibula houseORThaisDepo-depositer makes no more difficult

|100% support for ab'trolls door opening, ability of opening seal'quest' doors, for example nomad cave in Darama

 

This script is capable of doing EVERYTHING. Even if now no, in future - yes.

} const {configcststart}

def_capacity=60; def_delta=-1; def_attackmonsters=1; {configcstend}

ev=4; bj=['Briasol','Ebenizer','Eva','Ferks','Jefrey','Muzir','Paulie','Rokyn','Suzy','Tesha','Tezila','Znozel','Jessica']; cc=[452,431,563] fa=[453,430,564] br=[3277,7378,1781,3031]; cx=100; var items2dp,goifz,eg,cg:array;delta,capacity,cr,index:integer; dj,bm,dodepo,reopenbpafterdp:boolean;waypoints,bu{ad for displaytext},eu:string; bc,ew:boolean;attackmonsters,es:byte;en:integer; cl:array;

procedure ay; begin {configvarstart}

items2dp:=[3031,1781,3560,3403,647]; cg:=[[nil,0,0]]; reopenbpafterdp:=false; goifz:=[nil]; {configvarend}

end;

function bf:integer begin result:=0; for x:=1 to length(eu) do if (eu[x]=' ') then inc(result); if ((result mod 4) <> 0) then result:=((result div 4)+1) else result:=result div 4; end;

function ck(be:string;count:integer):integer; var bk: integer begin bk:=vararraycreate([0, count-1, 0, 3], $C); y:=0;x:=0; bd:=''; af:=false; for fg:=1 to length(eu) do begin if y>3 then begin y:=0; inc(x);end if (fg=length(eu)) and (eu[length(eu)]<>' ') then begin af:=true; bd:=bd+eu[fg];end if (eu[fg]=' ') or (af) then begin if (x=0) and (y=0) then if strtoint(bd)>60000 then ew:=true else ew:=false if not ew then bk[x,y]:=bd else bk[x,y]:=inttostr(((strtoint(bd)-10)/3)) inc(y); bd:=''; end else bd:=bd+eu[fg]; end result:=bk end;

function ao(x, y, z: integer): ttile; begin result := nil; if abs((self.x - 7) - x) > 14 then exit; if abs((self.y - 5) - y) > 11 then exit; if self.z <> z then exit; result := screen.tile[abs((self.x - 7) - x), abs((self.y - 5) - y)]; end;

function du:boolean; begin result:=true; if (low(cg)=high(cg)) and (cg[0][0]=nil) then result:=false; end

function cm(x,y,z,df:integer); begin if df>110 then df:=110 updateworld; result:=false; if (abs(self.x-x)<=df) and (abs(self.y-y)<=df) then result:=true; end

function em(tile: ttile): boolean; begin result := true; for x:=0 to tile.count-1 do if tile.item[x] then if not tile.item[x].properties.walkable then result:=false end;

function cq(tile:ttile):boolean begin result:=true for x:=tile.count-1 downto 0 do if tile.item[x] then if tile.item[x].properties.movable then begin result:=false tile.item[x].movetoground(self.x,self.y,self.z,0) sleep(100) break; end end

function ac(x,y,z:integer):boolean var tile:ttile begin if not cm(x,y,z,5) then exit tile:=ao(x,y,z) bs:=0 repeat inc(bs) updateworld sleep(100) until cq(tile) or terminated or (bs>100) bs:=0 repeat inc(bs) updateworld sleep(100) self.righthand.usewithground(x,y,z) sleep(100) self.lefthand.usewithground(x,y,z) sleep(100) until em(ao(x,y,z)) or terminated or (bs>100) end

function bl(fb,co : integer):integer; var x,y:integer; begin updateworld; result:=0; for y:=0 to self.containers.count-1 do if y=co then for x:=self.containers.container[y].count-1 downto 0 do if self.containers.container[y].item[x].id=fb then begin if self.containers.container[y].item[x].properties.pilable then result:=result+self.containers.container[y].item[x].amount; else result:=result+1; end end;

function di(x,y,z:integer):byte; var bs:integer; bn:byte; eq,fd,fh:integer; eh:boolean; begin bs:=0; bn:=0; repeat updateworld; if bs=0 then begin eq:=self.x;fd:=self.y;fh:=self.z; end self.moveto(x,y,z); sleep(200); updateworld; self.displaytext(bs); if (eq<>self.x) or (fd<>self.y) or (self.z<>fh) then eh:=true else eh:=false; if eh then bs:=0 else inc(bs); updateworld; if (bs>60) then bn:=1; if ((self.x=x) and (self.y=y) and (self.z=z)) then bn:=2; until bn<>0 or terminated; result:=bn; end

function cw:boolean; var tile:ttile; dz:boolean; x,y,fg:integer; cp:boolean; begin cp:=false; result:=false; tile:=screen.tile[7,5]; for fg:=tile.count-1 downto 0 do for ab:=low(fa) to high(fa) do if tile.item[fg].id=fa[ab] then begin cp:=true; self.displaytext('INFO_: already on dp'); break; end ds:=0 if not cp then repeat for x:=-7 to 7 do for y:=-5 to 5 do begin tile:=screen.tile[x+7,y+5]; for fg:=0 to tile.count-1 do for ek:=low(cc) to high(cc) do begin if tile.count>fg then if tile.item[fg] then if (not cp) and (tile.item[fg].id=cc[ek]) then begin dp:=self.x+x;ae:=self.y+y;cu:=self.z; if di(dp,ae,cu)=2 then begin cp:=true; break; exit end end end end inc(ds) until terminated or (ds>5) result:=cp; end

function fc(id,co:integer):integer begin result:=0; if self.lefthand.id=id then result:=result+self.lefthand.amount; if self.righthand.id=id then result:=result+self.righthand.amount; result:=result+bl(id,co);end

function fe(eb:integer):boolean; var ca,fg,x,y:integer; begin updateworld; result:=true; if not du then exit; for fg:=low(cg) to high(cg) do begin if cg[fg][1]>0 then if self.capacity>cg[fg][1] then begin result:=false; exit; end; if fc(cg[fg][0],0)<cg[fg][2] then begin result:=false; exit; end; end; end

function dc(co:integer):Dv; var y,x,fg,count:integer; begin count:=0; result:=nil; updateworld; for y:=0 to self.containers.count-1 do if (co>=0) then begin if (y<>co) then for x:=0 to self.containers.container[y].count-1 do begin for fg:=low(items2dp) to high(items2dp) do if (self.containers.container[y].item[x].id=items2dp[fg]) then if not self.containers.container[y].item[x].properties.container then begin result:=self.containers.container[y].item[x]; exit end end end else if y=abs(co) then begin for x:=0 to self.containers.container[y].count-1 do begin for fg:=low(cg) to high(cg) do begin if self.containers.container[y].item[x] then if (self.containers.container[y].item[x].id=cg[fg][0]) then if not self.containers.container[y].item[x].properties.container then if fc(self.containers.container[y].item[x].id,0)<cg[fg][2] then begin result:=self.containers.container[y].item[x]; sleep(10); exit end end end end end

function bp(y,id:integer):boolean; var x:integer; begin result:=0 updateworld; if self.containers.container[y] then for x:=self.containers.container[y].count-1 downto 0 do if (self.containers.container[y].item[x].id=id) then if self.containers.container[y].item[x].properties.pilable then if self.containers.container[y].item[x].amount<100 then result:=result+1; if result<=1 then result:=0; end;

function an(ax,y:byte):boolean; var c:integer; begin result:=false; c:=0; for x:=self.containers.container[y].count-1 downto 0 do if (ax<>x) then if self.containers.container[y].item[ax] then if self.containers.container[y].item[x] then if (self.containers.container[y].item[x].id=self.containers.container[y].item[ax].i

) then if (self.containers.container[y].item[x].properties.pilable) then if bp(y,self.containers.container[y].item[x].id) then if (self.containers.container[y].item[x].amount<100) then begin inc©; self.containers.container[y].item[ax].movetocontainer(self.containers.container[

],x,0); sleep(300); result:=true; exit end result:=false; end

function bx:boolean; begin result:=false for y:=self.containers.count-1 downto 0 do if not result then for x:=0 to self.containers.container[y].count-1 do if an(x,y) then begin result:=true; exit end else result:=false end

procedure dk; repeat updateworld fi:=bx; sleep(100) until (terminated) or (not fi)

function er(id,au:integer):integer; begin for x:=self.containers.container[au].count-1 downto 0 do begin if self.containers.container[au].item[x].id=id then if self.containers.container[au].item[x].properties.pilable then if self.containers.container[au].item[x].amount<>100 then begin result:=x; exit; end; else break; end for x:=0 to self.containers.container[au].count-1 do if not self.containers.container[au].item[x].properties.container then if not self.containers.container[au].item[x].properties.pilable then begin result:=x; break; end end

function dw(index:integer):boolean; begin result:=false if self.containers.container[index] then begin if self.containers.container[index].capacity=self.containers.container[index].count then result:=true end end

procedure bt; var x,y:integer; begin repeat updateworld for y:=self.containers.count-1 downto 0 do begin self.containers.container[y].close sleep(900) end updateworld; if self.backpack then self.backpack.open; sleep(900) updateworld until (self.containers.count=1) and (self.containers.container[0]<>nil) sleep(100+cx); updateworld; if not self.containers.container[0] then showmessage('ERROR_: there is no backpack opened, something went wrong'); for x:=0 to self.containers.container[0].count-1 do if self.containers.container[0].item[x] then if self.containers.container[0].item[x].properties.container then begin self.containers.container[0].item[x].openinnewwindow(); sleep(500+cx); end end

function ef(index:integer):boolean; var x,y:integer;item:dv; begin result:=false begin updateworld item:=dc(index) if index>=0 then begin if dw(index) then begin result:=false; exit; end; end else begin index:=0; end if (item<>nil) then begin if index=0 then bq:=1; else bq:=0; item.movetocontainer(self.containers.container[index],er(item.id,index),bq) result:=true; sleep(cx+100); exit; end end end;

function dx(y,ea:integer;ec:string):boolean; var x,cb,dg:byte; begin result:=true if terminated or (y=0) then exit; if ec='d' then cb:=abs(y) else if ec='w' then cb:=-abs(y); repeat sleep(10+cx); updateworld; if not ef(cb) then break; if fe(abs(cb)) and (ec='w') then break; until terminated; updateworld begin sleep(100); updateworld; if not self.containers.container[y] then showmessage('ERROR_: something went wrong with '+ec+', maybe ping, this is prevention from your dieing'); for x:=0 to self.containers.container[y].count-1 do if self.containers.container[y] then if self.containers.container[y].item[x] then if self.containers.container[y].item[x].properties.container then begin updateworld; fj:=((ec='w') and fe(y)) or ((ec='d') and (dc(cb)=nil)); if fj then exit; self.containers.container[y].item[x].open; sleep(cx+200); if fj then result:=false; else dx(y,ea+1,ec); updateworld; if self.containers.container[y] then begin self.containers.container[y].openparent; sleep(500+cx); end; if fj then exit; updateworld; end; end end { { sleep(200+cx); updateworld; fj:=fe(abs(cb)); begin result:=false; if not dx(y,ea+1,ec) then begin self.containers.container[y].openparent; exit; end end updateworld; sleep(150);}

procedure event_containeropened(index, id: integer; name: string); begin case en of 309: if (ansilowercase(name)='locker') or ((id>=3495) and (id<=3550)) then begin y:=index begin updateworld; if self.containers.container[y] then es:=y en:=0; end end end end;

function db:byte; var tile:ttile;cd:byte; begin result:=0; for x:=-1 to 1 do for y:=-1 to 1 do begin if screen.tile[7+x,5+y].item[screen.tile[7+x,5+y].count-1].properties.depot then begin repeat en:=309; updateworld cd:=self.containers.count; screen.tile[7+x,5+y].item[screen.tile[7+x,5+y].count-1].open; sleep(500+cx);updateworld; until terminated or (cd<=self.containers.count) or (en=0) result:=self.containers.count-1; exit end end end

procedure aw; var x,y,fg:integer;dr:boolean;al:dv; begin repeat updateworld; dr:=false; al:=nil; for y:=self.containers.count-1 downto 0 do if not dr then for x:=self.containers.container[y].count-1 downto 0 do if not dr then for fg:=low(br) to high(br) do if self.containers.container[y].item[x] then if self.containers.container[y].item[x].id=br[fg] then begin if (self.righthand.id=br[fg]) or (self.righthand.id=0) then al:=self.righthand; else if (self.lefthand.id=br[fg]) or (self.lefthand.id=0) then al:=self.lefthand; if al<>nil then if al.amount<100 then begin self.containers.container[y].item[x].movetobody(al,1); dr:=true; sleep(100); break; end end sleep(10); until terminated or (not dr); end

procedure ci; var x,y,fg:integer;ah:boolean begin repeat ah:=false; for y:=-1 to 1 do if not ah then for x:=-1 to 1 do if not ah then for fg:=screen.tile[7+x,5+y].count-1 downto 0 do if screen.tile[7+x,5+y].item[fg] then if screen.tile[7+x,5+y].item[fg].properties.movable then begin screen.tile[7+x,5+y].item[fg].movetoground(self.x,self.y,self.z,0); sleep(100+cx); ah:=true; break; end until terminated or (not ah) end

procedure aj; begin ep:=0 cw dx(db,0,'d'); dx(db,0,'w'); if es=0 then exit; if du then begin begin for fg:=low(cg) to high(cg) do begin count:=fc(cg[fg][0],0); if count<cg[fg][2] then showmessage('ERROR_: there is amount='+inttostr(count)+' id='+inttostr(cg[fg][0])+'; it is not enough, there should be '+inttostr(cg[fg][2])+' of it'+chr(13)+chr(10)+'Anyway, if you click this [OK] script will continue hunting normally.'); end end; aw; dk; end; if reopenbpafterdp then bt; es:=0; end

function ak(cn, cs, ce: string; ct: integer): boolean; begin updateworld; result := false; case ct of 1: if (strtoint(ce) = self.z + 1) then result := true; 2: if abs(strtoint(ce) - self.z)= 1 then result := true; 3: if (strtoint(ce) = self.z) then result := true; 4: if (strtoint(ce) = self.z) then result := true; 5: if (strtoint(ce) = self.z) then result := true; 6: if ((strtoint(cn) = self.x) and (strtoint(cs) = self.y) and (strtoint(ce) = self.z)) then result := true; 7: if (strtoint(ce) = self.z) then result := true; 8: if ((strtoint(ce) - self.z)<>0) or (not cm(strtoint(cn),strtoint(cs),strtoint(ce),30)) then result := true else result:=false; 80: begin self.say(inttostr(ct)+inttostr(strtoint(ce) - self.z));result:=false; sleep(1000) end else result := true; end; end;

function moveto(x,y,z: integer):boolean; begin updateworld; if (z<>self.z) or (not cm(x,y,z,550)) then dj := true else self.moveto(x,y,z); end;

procedure dd(x,y,z: integer); begin if z <> self.z then dj := true else begin self.containers.useitemwithground(3003, x, y, z); self.containers.useitemwithground(646, x, y, z); end end;

procedure de(x,y,z: integer); var tile: ttile; bs:integer begin updateworld; bs:=0; if (z = self.z) and (abs(x-self.x)<=7) and (abs(y-self.y)<=5) then repeat begin tile := ao(x, y, z); tile.item[1].use; inc(bs) if tile.count>2 then begin sleep(100);tile.item[2].use; end sleep(100) end until (self.z=z) or (bs>100) or dj; else dj := true; sleep(2000); end;

procedure dl(x,y,z: integer); var tile: ttile ag:integer; bv:array begin if cm(x,y,z,120) then begin bv:=[x,y+1,z] bs:=0; repeat ag:=0; self.displaytext('INFO_: shoveling'); self.moveto(bv[0], bv[1], bv[2]); sleep(100) repeat updateworld; tile := ao(x, y, z); if tile then if tile.count then if not tile.item[tile.count-1].properties.movable then if not ((self.x=x) and (self.y=y) and (self.z=z)) then begin self.containers.useitemwithground(5710, x, y, z); self.containers.useitemwithground(3457, x, y, z); sleep(700);inc(ag) end updateworld; tile := ao(x, y, z); if tile then if tile.count then if tile.item[tile.count-1].properties.hole then break else if tile.item[tile.count-1].properties.movable then tile.item[tile.count-1].movetoground(self.x,self.y,self.z,0); sleep(300) until ((self.z<>z) or (terminated) or (ag>5)) sleep(100) ca:=0; repeat moveto(x, y, z); inc(ca) sleep(100) until (ca>10) or terminated; inc(bs) sleep(1000) until (self.z<>bv[2]) or terminated or (bs>5) end else dj := true; end;

procedure event_keydown(key:integer); begin case key of 145:bm:=not bm; 33:if index<cr-1 then begin inc(index);bu:='wptwalker INFO_> waypoint increased to '+inttostr(index);end 34:if index>0 then begin dec(index);bu:='wptwalker INFO_> waypoint decreased to '+inttostr(index);end end end;

function dm(id: integer): tcreature; var x: integer; begin result := nil; for x := 0 to creatures.count - 1 do begin if x >= creatures.count then break; if creatures.creature[x].id = id then begin result := creatures.creature[x]; exit; end; end; end;

procedure event_attacked(id: integer); var creature:tcreature; if attackmonsters then begin if not bm then if not self.attacking then begin creature:=dm(id); if creature then if creature.npc and attackmonsters then if ((abs(creature.x-self.x)<2) and (abs(creature.y-self.y)<2) ) then creature.attacking:=true else creature.attacking:=false;end end

function ee(x:integer):string;case x of1: result:='rope';2: result:='ladder';3: result:='upstairs';4: result:='downstairs';5: result:='hole';6: result:='ground';7: result:='shovel';8: result:='ramp';9: result:='sleep';10: result:='script';else result:='other';end;

procedure bo(ct:byte); var tile:ttile;cf,dy,bg:integer; begin updateworld; case ct of 0:begin cf:=self.x;dy:=self.y-1;bg:=self.z; end 1:begin cf:=self.x+1;dy:=self.y;bg:=self.z; end 2:begin cf:=self.x;dy:=self.y+1;bg:=self.z; end 3:begin cf:=self.x-1;dy:=self.y;bg:=self.z; end end; while (not terminated) do begin updateworld; tile := ao(cf,dy,bg); if not tile then exit; if not (tile.count>1) then exit; if not tile.item[1] then exit; if not tile.item[1].properties.door then exit; if tile.item[1].properties.walkable then begin self.displaytext('wptwalker.dooropener INFO_: door opened');exit; end else self.displaytext('wptwalker.dooropener INFO_: opening....'); if tile <> nil then if tile.count > 1 then if tile.item[1].properties.door then if not tile.item[1].properties.walkable then begin tile.item[1].use; end sleep(1000); end; end;

function ap:boolean; var x,y,dq:integer; name:string; begin result:=false; dq:=4; for y:=low(bj) to high(bj) do for x:=0 to creatures.count-1 do begin if creatures.creature[x].name=bj[y] then if abs(creatures.creature[x].x-self.x)<=dq then if abs(creatures.creature[x].y-self.y)<=dq then if creatures.creature[x].z=self.z then result:=true; end end

procedure ai(cz:integer); var cv,ey:integer; el:boolean;bs:integer; begin bs:=0; dt:=0; updateworld; if not ap then exit; el:=false; cv:=self.capacity; ez:=[self.x,self.y,self.z]; repeat sleep(2000); self.npcsay('hi'); sleep(200); self.npcsay('deposit all'); sleep(200); self.npcsay('yes'); writelog('C:\depositerbyxadi.txt',self.name+','+datetostr(now)+' '+timetostr(now)+', depogld'); sleep(100); self.containers.useitemwithself(3031); sleep(600); processevents; if dt=0 then el:=true; sleep(1000); if cz<>0 then begin self.npcsay('withdraw '+inttostr(cz)); sleep(2100); self.npcsay('yes');sleep(100);self.npcsay('yes');sleep(1000); end self.npcsay('balance'); updateworld; inc(bs); if (cv<>self.capacity) or (ez[0]<>self.x) or (ez[1]<>self.y) or (ez[2]<>self.z) or (dt=0) then el:=true; if not el then sleep(5000); until el or terminated or (bs>ev); sleep(100); updateworld if reopenbpafterdp then begin bt; bt; end; end;

procedure da(name:string;ch:string); var bd:string;bh:boolean;ca:integer; begin repeat self.displaytext('wpt.walkerbyx.INFO_: talking with npc '+name+'.'); bh:=false updateworld for x:=0 to creatures.count-1 do if ansilowercase(creatures.creature[x].name)=ansilowercase(name) then begin creatures.creature[x].following:=true if cm(creatures.creature[x].x,creatures.creature[x].y,creatures.creature[x].z,7) then bh:=true ca:=0; repeat sleep(1000); inc(ca) updateworld; until cm(creatures.creature[x].x,creatures.creature[x].y,creatures.creature[x].z,3) or terminated or (ca>30); end if index>0 then if cm(cl[0],cl[1],cl[2],2) then bh:=true bb:=''; bz:='' if not bh then continue for x:=1 to length(ch) do if (ord(ch[x])>=48) and (ord(ch[x])<=57) then begin bz:=bz+ch[x]; continue; end else if (ord(ch[x])=32) and (bz<>'') then begin bb:=bb+chr(strtoint(bz)) bz:='' continue end else if ch[x]='n' then begin self.npcsay(bb) bb:='' bz:='' sleep(500) continue end sleep(1000); until (ansilowercase(name)<>'buddel') or cm(eg[index+1,0],eg[index+1,1],eg[index+1,2],8) or terminated; end

procedure ex; var ed,ax,ec,bs:integer et:boolean; tile:ttile; begin if index<=0 then exit; et:=false ed:=eg[index-1,0] ax:=eg[index-1,1]-1; ec:=eg[index-1,2] if not cm(ed,ax,ec,7) then exit repeat updateworld tile:=ao(ed,ax,ec) dh:=true for x:=tile.count-1 downto 0 do begin if tile.item[x] then if tile.item[x].properties.movable then begin tile.item[x].movetoground(ed,ax-1,ec,0); dh:=false; end end inc(bs) if dh then for x:=0 to creatures.count-1 do if creatures.creature[x].x=ed then if creatures.creature[x].y=ax then if creatures.creature[x].z=ec then if not et then begin creatures.creature[x].moveto(ed,ax-1,ec); sleep(2000) self.moveto(ed,ax,ec); sleep(100) updateworld; et:=((self.x=ed) and (self.y=ax) and (self.z=ec)) end self.moveto(ed,ax,ec); sleep(10) et:=((self.x=ed) and (self.y=ax) and (self.z=ec)) until (bs>10) or et or terminated; end

procedure ej(cn, cs, ce: string; ct: integer); begin updateworld; if (attackmonsters=1) and (self.attacking<>nil) then exit; case ct of 1: dd(strtoint(cn), strtoint(cs), strtoint(ce)); 2: de(strtoint(cn),strtoint(cs), strtoint(ce)); 3: moveto(strtoint(cn), strtoint(cs)+1, strtoint(ce)+1); 4: moveto(strtoint(cn), strtoint(cs)-1, strtoint(ce)-1); 5: moveto(strtoint(cn), strtoint(cs), strtoint(ce)-1); 6: moveto(strtoint(cn), strtoint(cs), strtoint(ce)); 7: dl(strtoint(cn), strtoint(cs), strtoint(ce)-1); 8: moveto(strtoint(cn), strtoint(cs), strtoint(ce)); 9: if (strtoint(cn)>=31000) and (strtoint(cn)<32000) then ai(strtoint(cn) mod 1000) else case strtoint(cn) of 309: aj; 310:begin ai(0); end; 525:ex; 600:da('svenson','104 105 at 116 105 98 105 97 at 121 101 115 at') 601:da('nielson','104 105 at 102 111 108 100 97 at 121 101 115 at') 603:da('sebastian','104 105 at 108 105 98 101 114 116 121 32 98 97 121 at 121 101 115 at') 604:da('cj waverider','104 105 at 112 101 103 108 101 103 at 121 101 115 at') 682:da('buddel','104 105 at 112 97 115 115 97 103 101 at 115 118 97 114 103 114 111 110 100 at 121 101 115 at') 685:da('buddel','104 105 at 112 97 115 115 97 103 101 at 116 121 114 115 117 110 103 at 121 101 115 at') 689:da('buddel','104 105 at 112 97 115 115 97 103 101 at 111 107 111 108 110 105 114 at 121 101 115 at') 683:da('buddel','104 105 at 112 97 115 115 97 103 101 at 99 97 109 112 at 121 101 115 at') 300:bo(0); 302:bo(2); 350:ac(self.x,self.y-1,self.z) 351:ac(self.x+1,self.y,self.z) 352:ac(self.x,self.y+1,self.z) 353:ac(self.x-1,self.y,self.z) else sleep(strtoint(cn) * 1000); end else moveto(strtoint(cn), strtoint(cs), strtoint(ce)); end; end;

function ff(bi:string):integer; result:=(bi[1]*10+bi[2])*60*60+(bi[4]*10+bi[5])*60+(bi[7]*10+bi[8])

procedure ar;begin self.moveup(); sleep(100);self.movedown(); sleep(100);self.moveright(); sleep(100);self.moveleft(); sleep(100); end

function aq:boolean; var x:integer; begin updateworld; result:=false; for x:=low(goifz) to high(goifz) do if goifz[x]=self.z then result:=true; end begin if waypoints<>'' then by:=waypoints; cr:=0; index:=0; dj:=false; bm:=false; {if (av='') and (eu='') then if by<>'' then begin cr:=ba(by); eg := dn(by, cr); end else begin cr:=ba(cy); eg := dn(cy, cr); end else} begin eu:='32621 31790 6 6 32622 31790 6 8 32641 31718 7 6 32641 31712 7 6 32680 31693 7 6 32681 31693 7 6 32682 31689 7 6 32682 31687 7 6 32682 31687 7 2 32682 31688 6 6 309 0 0 9 32676 31691 6 6 32670 31689 6 6 32656 31675 6 6 32656 31674 7 5 32642 31707 7 6 32638 31757 7 6 32624 31788 7 6 32623 31790 7 6 32622 31790 7 6 32621 31790 6 6 '; {bw}eu:='32621 31790 6 6 32622 31790 6 8 32641 31718 7 6 32641 31712 7 6 32680 31693 7 6 32681 31693 7 6 32682 31689 7 6 32682 31687 7 6 32682 31687 7 2 32682 31688 6 6 309 0 0 9 32676 31691 6 6 32670 31689 6 6 32656 31675 6 6 32656 31674 7 5 32642 31707 7 6 32638 31757 7 6 32624 31788 7 6 32623 31790 7 6 32622 31790 7 6 32621 31790 6 6 '; cr:=bf; eg:=ck(eu,cr); end; am:=[0,0,0,0]; eo:=0; en:=0; aa:=0; cl:=[nil,nil,nil,nil]; cg:=[[nil,0,0]]; bu:=''; dodepo:=false; goifz:=[nil]; attackmonsters:=2; items2dp:=[nil] updateworld; ay if def_capacity>0 then capacity:=def_capacity; if def_attackmonsters<>2 then attackmonsters:=def_attackmonsters; if def_delta>0 then delta:=def_delta; if self.capacity <= capacity then dodepo:=true; if self.containers.count>0 then if abs(self.containers.container[0].capacity-self.containers.container[0].count)<=delta then dodepo:=true; if aq then dodepo:=true; if not dodepo then exit; while (index<cr) and (not terminated) do begin if (aa>20) or (bu[1]='I') then begin bu:=''; aa:=0;end updateworld; processevents; az:=ff(timetostr(now)); if bu='' then bu:='INDX[pgdn/up]:'+inttostr(index)+ '; PSD[pause]'+inttostr(bm)+'; repeats:'+inttostr(eo)+'; type: '+ee(eg[index,3]); self.displaytext(bu); inc(aa); if not bm then begin if (attackmonsters<>1) then ej(eg[index,0],eg[index,1],eg[index,2],eg[index,3]) else if (self.attacking=nil) then ej(eg[index,0],eg[index,1],eg[index,2],eg[index,3]) if ak(eg[index,0],eg[index,1],eg[index,2],eg[index,3]) or dj or (not cm(eg[index,0],eg[index,1],eg[index,2],250)) or (eo>20) then begin dj:=false; inc(index); eo:=0;end if self.attacking=0 then begin if abs(az-am[3])>1 then if (self.x=am[0]) and (self.y=am[1]) and (self.z=am[2]) then inc(eo) else begin am[0]:=self.x;am[1]:=self.y;am[2]:=self.z; am[3]:=az; eo:=0; end end end sleep(100); if index>0 then cl:=[eg[index-1,0],eg[index-1,1],eg[index-1,2],eg[index-1,3]]; end self.displaytext('wpt.walker_: finished successfuly'); end

 

 

 

 

 

 

3. Po zapisaniu waypointa i skrypta, robimy tak: w bocie NG: Tools >>> Cave Hunting >>> wczytujemy plik .wpt, pozniej na samym koncu waypointa robimy tak: klikamy prawym przyciskiem myszy >>> Add >>> Script i wczytujemy wczesiej zapisany skrypt .ng

 

 

4. Ustawiamy ze ma zbierac kamienie, ID: 1781 i to wszystko, skrypt jest ustawiony tak ze odnosi kamienie do depo gdy ma ~60cap i wszystko, robimy follow waypoints i idziemy spac ;d

 

 

Pozdro

 

 

Opublikowano

Noo czegoś takiego szukałem wielkie THX :P

Bóg napisał wstęp: Szanuj ludzi, Kurwy tęp.!

Opublikowano

nie wiem czemu ;/ nie ejstem jego autorem. Ja tylko znazlem tego depositera na ofcijalnej stronie bota i zapodalem tutaj z instrukcja jak zrobic krok po kroku, a czy to takie wazne jak ejst napisany ?? wazne ze dziala;]

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...