Jump to content

klizmabeqa1992

Members
  • Posts

    19
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

About klizmabeqa1992

Profile Information

  • Gender
    Not Telling

klizmabeqa1992's Achievements

Newbie

Newbie (1/16)

0

Reputation

  1. Предлагаю на суд общественности вот такой вот небольшой крафтер-бот. Спорить не буду, скрипт сыроват, кое-где может и остался мусор, хотя, старался убрать всё лишнее. Возможности: крафт и продажа сосок всех видов в автоматическом режиме, закупка соул/спирит оре. Надо только закидывать кристаллы. Думаю, в будущем научу его делать себе Д, Ц и Б кристаллы. Только не судите слишком строго. С паскалем я практически впервые общаюсь - первый раз был в школе лет этак 10 назад. Потому, есть один огромный вопрос к знатокам: а есть ли возможность в этом самом FastScript'е запускать альтернативные потоки, которые имели бы доступ к данным основного потока? Если да, это ОЧЕНЬ сильно упростило бы дело написания ботов. Просьба ко всем, кто будет пользоваться этим скриптом: переправьте в массиве pathX, pathY и pathZ последнюю точку пути. Или сам массив измените, чтоб бегал по другому маршруту. Иначе, все боты будут сидеть в одном месте. kod: const crafterName = 'crafterBot'; shopMessage = 'Ваша реклама'; minMP = 200; maxMPtoCraft = 500; shopResetupTime = 200; minSoulOre = 500; minSpiritOre = 500; maxSoulOre = 7000; maxSpiritOre = 7000; SSDprice = 30; //цены на соски. чего не понятного? SSCprice = 60; SSBprice = 120; SSAprice = 240; SSSprice = 1500; BSSDprice = 125; BSSCprice = 250; BSSBprice = 300; BSSAprice = 600; BSSSprice = 3000; maxSSD = 20000; // максимальное число шотов для крафта на продажу, которое бот будет maxSSC = 20000; // стремиться поддерживать. Ноль означает не крафтить, но если в инвентаре уже есть maxSSB = 0; // соски, он будет пытаться их продать. maxSSA = 0; // Если установлено число больше 0, соответствующий рецепт должен быть изучен maxSSS = 0; maxBSSD = 20000; maxBSSC = 20000; maxBSSB = 0; maxBSSA = 0; maxBSSS = 0; SSDid = 1463; SSCid = 1464; SSBid = 1465; SSAid = 1466; SSSid = 1467; BSSDid = 3948; BSSCid = 3949; BSSBid = 3950; BSSAid = 3951; BSSSid = 3952; soulOreID = 1785; spiritOreID = 3031; pathWayPoints = 11; //число точек пути в массиве path buyPoint = 5; //точка пути, по достижению которой можно начинать закупку сырья var out:TForm; m:TMemo; infoUpdate, moveOn, mainLoop, crafting, shop, delayedProc, fixTrade :TTimer; act:integer; initMode, trading :boolean; pathX, pathY, pathZ :array[1..pathWayPoints] of integer; shopping :array[1..3] of String; posX, posY, posZ, currentWayPoint, targetWayPoint, lastRSM :integer; SSD, SSC, SSB, SSA, SSS, BSSD, BSSC, BSSB, BSSA, BSSS, soulOre, spiritOre :integer; SSDoid, SSCoid, SSBoid, SSAoid, SSSoid, BSSDoid, BSSCoid, BSSBoid, BSSAoid, BSSSoid :integer; MyID, MP, maxMP, traderId, buyListID, shopPhase, requestShopManage :integer; i, count, resetupTimer :integer; procedure OnTimer; begin m.Lines.Clear; m.Lines.Add('Current position: '+IntToStr(posX)+', '+IntToStr(posY)+', '+IntToStr(posZ)); m.Lines.Add('Target waypoint: #'+IntToStr(targetWayPoint)+' ('+IntToStr(pathX[targetWayPoint])+', '+IntToStr(pathY[targetWayPoint])+', '+IntToStr(pathZ[targetWayPoint])+')'); m.Lines.Add('Current waypoint: #'+IntToStr(currentWayPoint)); m.Lines.Add('MP: '+IntToStr(MP)+'/'+IntToStr(maxMP)); m.Lines.Add('SSD count:'+IntToStr(SSD)); m.Lines.Add('SSC count:'+IntToStr(SSC)); m.Lines.Add('SSB count:'+IntToStr(SSB)); m.Lines.Add('SSA count:'+IntToStr(SSA)); m.Lines.Add('SSS count:'+IntToStr(SSS)); m.Lines.Add('BSSD count:'+IntToStr(BSSD)); m.Lines.Add('BSSC count:'+IntToStr(BSSC)); m.Lines.Add('BSSB count:'+IntToStr(BSSB)); m.Lines.Add('BSSA count:'+IntToStr(BSSA)); m.Lines.Add('BSSS count:'+IntToStr(BSSS)); m.Lines.Add('SpiritOre count:'+IntToStr(spiritOre)); m.Lines.Add('SoulOre count:'+IntToStr(soulOre)); m.Lines.Add('Last shop request: '+IntToStr(lastRSM)); if trading then m.Lines.Add('Trading...') else m.Lines.Add('Trading stopped.'); if infoUpdate.enabled then m.Lines.Add('infoUpdate: enabled') else m.Lines.Add('infoUpdate: disabled'); if moveOn.enabled then m.Lines.Add('moveOn: enabled') else m.Lines.Add('moveOn: disabled'); if mainLoop.enabled then m.Lines.Add('mainLoop: enabled') else m.Lines.Add('mainLoop: disabled'); if crafting.enabled then m.Lines.Add('crafting: enabled') else m.Lines.Add('crafting: disabled'); if shop.enabled then m.Lines.Add('shop: enabled') else m.Lines.Add('shop: disabled'); end; procedure moveOnTimer; var dx, dy, dz, d :integer; begin dx:=posX-pathX[currentWayPoint]; dy:=posY-pathY[currentWayPoint]; dz:=posZ-pathZ[currentWayPoint]; d:=Round(sqrt(dx*dx+dy*dy)); if (d<40) and (sqrt(dz*dz)<500) then begin if (currentWayPoint=targetWayPoint) then moveOn.enabled:=false else begin currentWayPoint:=currentWayPoint+1; if (currentWayPoint>pathWayPoints) then currentWayPoint:=1; end; exit; end else begin buf:=''; WriteC(1); WriteD(pathX[currentWayPoint]); WriteD(pathY[currentWayPoint]); WriteD(pathZ[currentWayPoint]); WriteD(posX); WriteD(posY); WriteD(posZ); WriteD(1); SendToServerEx(crafterName); end; end; procedure StartTrade; begin mainLoop.enabled:=false; requestShopManage:=1; buf:=#$73; SendToServerEx(crafterName); fixTrade.enabled:=true; end; procedure StartTrade2; begin requestShopManage:=0; buf:=#$77; WriteS(shopMessage); SendToServerEx(crafterName); delay(100); buf:=#$74; WriteD(0); WriteD(0); count:=0; if (SSD>0) then begin inc(count); WriteD(SSDoid); WriteD(SSD); WriteD(SSDprice); end; if (SSC>0) then begin inc(count); WriteD(SSCoid); WriteD(SSC); WriteD(SSCprice); end; if (SSB>0) then begin inc(count); WriteD(SSBoid); WriteD(SSB); WriteD(SSBprice); end; if (SSA>0) then begin inc(count); WriteD(SSAoid); WriteD(SSA); WriteD(SSAprice); end; if (SSS>0) and (count<4) then begin inc(count); WriteD(SSSoid); WriteD(SSS); WriteD(SSSprice); end; if (BSSD>0) and (count<4) then begin inc(count); WriteD(BSSDoid); WriteD(BSSD); WriteD(BSSDprice); end; if (BSSC>0) and (count<4) then begin inc(count); WriteD(BSSCoid); WriteD(BSSC); WriteD(BSSCprice); end; if (BSSB>0) and (count<4) then begin inc(count); WriteD(BSSBoid); WriteD(BSSB); WriteD(BSSBprice); end; if (BSSA>0) and (count<4) then begin inc(count); WriteD(BSSAoid); WriteD(BSSA); WriteD(BSSAprice); end; if (BSSS>0) and (count<4) then begin inc(count); WriteD(BSSSoid); WriteD(BSSS); WriteD(BSSSprice); end; if (count=0) then exit; WriteD(count,6); SendToServerEx(crafterName); resetupTimer:=0; trading:=true; mainLoop.enabled:=true; delayedProc.enabled:=false; fixTrade.enabled:=false; end; procedure StopTrade; begin mainLoop.enabled:=false; buf:=HStr('1D 01 00 00 00'); SendToServerEx(crafterName); delay(200); requestShopManage:=2; buf:=#$73; SendToServerEx(crafterName); fixTrade.enabled:=true; end; procedure StopTrade2; begin requestShopManage:=0; buf:=#$76; SendToServerEx(crafterName); delay(100); trading:=false; mainLoop.enabled:=true; delayedProc.enabled:=false; fixTrade.enabled:=false; end; procedure mainLoopTick; var toCraft :boolean; begin if moveOn.enabled then exit; if (currentWayPoint=buyPoint) then begin mainLoop.enabled:=false; targetWayPoint:=pathWayPoints; shop.enabled:=true; exit; end; if(soulOre<minSoulOre) or (spiritOre<minSpiritOre) then begin if (SSD+SSC+SSB+SSA+SSS+BSSD+BSSC+BSSB+BSSA+BSSS=0) then begin buf:=HStr('1D 01 00 00 00'); SendToServerEx(crafterName); end else StopTrade; targetWayPoint:=buyPoint; moveOn.enabled:=true; exit; end; resetupTimer:=resetupTimer+10; toCraft:=false; if (SSD<maxSSD) then toCraft:=true; if (SSC<maxSSC) then toCraft:=true; if (SSB<maxSSB) then toCraft:=true; if (SSA<maxSSA) then toCraft:=true; if (SSS<maxSSS) then toCraft:=true; if (BSSD<maxBSSD) then toCraft:=true; if (BSSC<maxBSSC) then toCraft:=true; if (BSSB<maxBSSB) then toCraft:=true; if (BSSA<maxBSSA) then toCraft:=true; if (BSSS<maxBSSS) then toCraft:=true; if toCraft and (MP>maxMPtoCraft) and trading then begin mainLoop.enabled:=false; crafting.enabled:=true; exit; end; if (trading=false) then begin StartTrade; exit; end; if (resetupTimer<shopResetupTime) then exit; if (SSD+SSC+SSB+SSA+SSS+BSSD+BSSC+BSSB+BSSA+BSSS=0) then begin buf:=HStr('1D 01 00 00 00'); SendToServerEx(crafterName); exit; end; StopTrade; end; procedure craftingTick; var nocraft :boolean; begin nocraft:=true; if (SSD<maxSSD) then begin buf:=HStr('AF 14 00 00 00'); SendToServerEx(crafterName); delay(33); nocraft:=false; end; if (SSC<maxSSC) then begin buf:=HStr('AF 15 00 00 00'); SendToServerEx(crafterName); delay(33); nocraft:=false; end; if (SSB<maxSSB) then ; if (SSA<maxSSA) then ; if (SSS<maxSSS) then ; if (BSSD<maxBSSD) then begin buf:=HStr('AF 43 01 00 00'); SendToServerEx(crafterName); delay(33); nocraft:=false; end; if (BSSC<maxBSSC) then begin buf:=HStr('AF 44 01 00 00'); SendToServerEx(crafterName); delay(33); nocraft:=false; end; if (BSSB<maxBSSB) then ; if (BSSA<maxBSSA) then ; if (BSSS<maxBSSS) then ; if (MP<minMP) or nocraft then begin crafting.enabled:=false; mainLoop.enabled:=true; exit; end; end; procedure shoppingTick; begin if(shopPhase<4) then begin buf:=shopping[shopPhase]; SendToServerEx(crafterName); inc(shopPhase); exit; end; if(buyListID=0) then exit; shopPhase:=1; shop.enabled:=false; buf:=#$1F; WriteD(buyListID); WriteD(0); i:=0; if(soulOre<maxSoulOre) then begin WriteD(soulOreID); WriteD(maxSoulOre-soulOre); inc(i); end; if(spiritOre<maxSpiritOre) then begin WriteD(spiritOreID); WriteD(maxSpiritOre-spiritOre); inc(i); end; WriteD(i,6); SendToServerEx(crafterName); buyListID:=0; moveOn.enabled:=true; mainLoop.enabled:=true; end; procedure fixOnTimer; begin buf:=#$76; SendToServerEx(crafterName); delay(200); buf:=#$73; SendToServerEx(crafterName); end; procedure Init; //Вызывается при включении скрипта begin out := TForm.Create(nil); out.Caption := 'Status'; out.BorderStyle := bsSizeable; out.Position := poScreenCenter; out.Width:=400; out.Height:=600; m:=TMemo.Create(out); m.parent:=out; m.align:=alClient; m.ReadOnly:=true; m.ScrollBars:=ssBoth; out.Show; infoUpdate:=TTimer.Create(nil); infoUpdate.OnTimer:=@OnTimer; infoUpdate.interval:=1000; moveOn:=TTimer.Create(nil); moveOn.OnTimer:=@moveOnTimer; moveOn.interval:=1000; moveOn.enabled:=false; mainLoop:=TTimer.Create(nil); mainLoop.OnTimer:=@mainLoopTick; mainLoop.interval:=10000; mainLoop.enabled:=false; crafting:=TTimer.Create(nil); crafting.OnTimer:=@craftingTick; crafting.interval:=333; crafting.enabled:=false; shop:=TTimer.Create(nil); shop.OnTimer:=@shoppingTick; shop.interval:=500; shop.enabled:=false; delayedProc:=TTimer.Create(nil); delayedProc.OnTimer:=nil; delayedProc.interval:=333; delayedProc.enabled:=false; fixTrade:=TTimer.Create(nil); fixTrade.OnTimer:=@fixOnTimer; fixTrade.interval:=30000; fixTrade.enabled:=false; posX:=0; posY:=0; posZ:=0; SSD:=0; SSC:=0; SSB:=0; SSA:=0; SSS:=0; BSSD:=0; BSSC:=0; BSSB:=0; BSSA:=0; BSSS:=0; act:=0; MyID:=0; traderId:=0; shopPhase:=1; buyListID:=0; currentWayPoint:=pathWayPoints; targetWayPoint:=pathWayPoints; pathX[1]:= 80687; pathY[1]:= 148621; pathZ[1]:= -3490; pathX[2]:= 79833; pathY[2]:= 148476; pathZ[2]:= -3559; pathX[3]:= 79804; pathY[3]:= 148213; pathZ[3]:= -3559; pathX[4]:= 80247; pathY[4]:= 148172; pathZ[4]:= -3534; pathX[5]:= 80466; pathY[5]:= 147892; pathZ[5]:= -3533; pathX[6]:= 80185; pathY[6]:= 148185; pathZ[6]:= -3534; pathX[7]:= 79787; pathY[7]:= 148246; pathZ[7]:= -3559; pathX[8]:= 79867; pathY[8]:= 148584; pathZ[8]:= -3559; pathX[9]:= 80885; pathY[9]:= 148624; pathZ[9]:= -3495; pathX[10]:= 81749; pathY[10]:= 148292; pathZ[10]:= -3493; pathX[11]:= 0; pathY[11]:= 0; pathZ[11]:= -3493; shopping[3]:=HStr('21 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 31 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 30 00 00 00'); infoUpdate.enabled:=true; initMode:=true; trading:=false; buf:=#$0F; SendToServerEx(crafterName); {delay(100); buf:=HStr('A0 03 00 00 00'); SendToServerEx(crafterName);} end; procedure Free; //Вызывается при выключении скрипта begin mainLoop.Free; crafting.Free; infoUpdate.Free; moveOn.Free; m.Free; out.Free; fixTrade.Free; delayedProc.Free; shop.free; end; procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения begin end; procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения begin end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен begin if (ConnectName<>crafterName) then exit; case FromServer of true: begin //Обработка пакетов сервера if (pck[1]=#$04) then begin maxMP:=ReadD(84); MP:=ReadD(88); if initMode=false then exit; posX:=ReadD(2); posY:=ReadD(6); posZ:=ReadD(10); initMode:=false; MyID:=ReadD(18); moveOn.enabled:=true; mainLoop.enabled:=true; resetupTimer:=0; exit; end; if (pck[1]=#$1B) then //Загрузка инвентаря begin count:=ReadH(4); for i:=0 to count-1 do case ReadD(i*28+12) of SSDid: begin SSD:=ReadD(i*28+16); SSDoid:=ReadD(i*28+8); end; SSCid: begin SSC:=ReadD(i*28+16); SSCoid:=ReadD(i*28+8); end; SSBid: begin SSB:=ReadD(i*28+16); SSBoid:=ReadD(i*28+8); end; SSAid: begin SSA:=ReadD(i*28+16); SSAoid:=ReadD(i*28+8); end; SSSid: begin SSS:=ReadD(i*28+16); SSSoid:=ReadD(i*28+8); end; BSSDid: begin BSSD:=ReadD(i*28+16); BSSDoid:=ReadD(i*28+8); end; BSSCid: begin BSSC:=ReadD(i*28+16); BSSCoid:=ReadD(i*28+8); end; BSSBid: begin BSSB:=ReadD(i*28+16); BSSBoid:=ReadD(i*28+8); end; BSSAid: begin BSSA:=ReadD(i*28+16); BSSAoid:=ReadD(i*28+8); end; BSSSid: begin BSSS:=ReadD(i*28+16); BSSSoid:=ReadD(i*28+8); end; soulOreID: begin soulOre:=ReadD(i*28+16); end; spiritOreID: begin spiritOre:=ReadD(i*28+16); end; end; exit; end; if (pck[1]=#$27) then //Обновление инвентаря begin count:=ReadH(2); for i:=0 to count-1 do begin act:=ReadH(i*30+4); case ReadD(i*30+12) of SSDid: case act of 1: SSD:=SSD+ReadD(i*30+16); 2: SSD:=ReadD(i*30+16); 3: SSD:=SSD-ReadD(i*30+16); end; SSCid: case act of 1: SSC:=SSC+ReadD(i*30+16); 2: SSC:=ReadD(i*30+16); 3: SSC:=SSC-ReadD(i*30+16); end; SSBid: case act of 1: SSB:=SSB+ReadD(i*30+16); 2: SSB:=ReadD(i*30+16); 3: SSB:=SSB-ReadD(i*30+16); end; SSAid: case act of 1: SSA:=SSA+ReadD(i*30+16); 2: SSA:=ReadD(i*30+16); 3: SSA:=SSA-ReadD(i*30+16); end; SSSid: case act of 1: SSS:=SSS+ReadD(i*30+16); 2: SSS:=ReadD(i*30+16); 3: SSS:=SSS-ReadD(i*30+16); end; BSSDid: case act of 1: BSSD:=BSSD+ReadD(i*30+16); 2: BSSD:=ReadD(i*30+16); 3: BSSD:=BSSD-ReadD(i*30+16); end; BSSCid: case act of 1: BSSC:=BSSC+ReadD(i*30+16); 2: BSSC:=ReadD(i*30+16); 3: BSSC:=BSSC-ReadD(i*30+16); end; BSSBid: case act of 1: BSSB:=BSSB+ReadD(i*30+16); 2: BSSB:=ReadD(i*30+16); 3: BSSB:=BSSB-ReadD(i*30+16); end; BSSAid: case act of 1: BSSA:=BSSA+ReadD(i*30+16); 2: BSSA:=ReadD(i*30+16); 3: BSSA:=BSSA-ReadD(i*30+16); end; BSSSid: case act of 1: BSSS:=BSSS+ReadD(i*30+16); 2: BSSS:=ReadD(i*30+16); 3: BSSS:=BSSS-ReadD(i*30+16); end; soulOreID: case act of 1: soulOre:=soulOre+ReadD(i*30+16); 2: soulOre:=ReadD(i*30+16); 3: soulOre:=soulOre-ReadD(i*30+16); end; spiritOreID: case act of 1: spiritOre:=spiritOre+ReadD(i*30+16); 2: spiritOre:=ReadD(i*30+16); 3: spiritOre:=spiritOre-ReadD(i*30+16); end; end; end; exit; end; if (pck[1]=#$0E) and (ReadD(2)=MyID) then begin count:=ReadD(6); for i:=0 to (count-1) do case ReadD(10+i*8) of 11: MP:=ReadD(14+i*8); 12: maxMP:=ReadD(14+i*8); end; exit; end; if (pck[1]=#$9A) and (ReadD(2)=MyID) then begin count:=ReadD(14); for i:=0 to count-1 do case ReadD(i*30+26) of SSDid: SSDoid:=ReadD(i*30+22); SSCid: SSCoid:=ReadD(i*30+22); SSBid: SSBoid:=ReadD(i*30+22); SSAid: SSAoid:=ReadD(i*30+22); SSSid: SSSoid:=ReadD(i*30+22); BSSDid: BSSDoid:=ReadD(i*30+22); BSSCid: BSSCoid:=ReadD(i*30+22); BSSBid: BSSBoid:=ReadD(i*30+22); BSSAid: BSSAoid:=ReadD(i*30+22); BSSSid: BSSSoid:=ReadD(i*30+22); end; case requestShopManage of 0: exit; 1: delayedProc.OnTimer:=@StartTrade2; 2: delayedProc.OnTimer:=@StopTrade2; end; delayedProc.enabled:=true; exit; end; if (pck[1]=#$11) then buyListID:= ReadD(6); end; //end of case 'true' false: begin //Обработка пакетов клиента if (pck[1]=#$48) then begin posX:=ReadD(2); posY:=ReadD(6); posZ:=ReadD(10); exit; end; if (pck[1]=#$04) and (traderId=0) then begin traderId:=ReadD(2); buf:=#$04; WriteD(traderID); WriteD(posX); WriteD(posY); WriteD(posZ); WriteC(0); shopping[1]:=buf; shopping[2]:=buf; end; end; //end of case 'false' end; //end of case end.
  2. delpi cod : { Юля Сегодня, 11:46 Помню этот небольшой скриптик принес мне просто бешеное богатсво на сервере где я играла, но поскольку я больше не играю, то выкладываю в массы суть проста, программа ведет учет всех персов в округе, когда по вашему персу-торговцу кликают, она пишет в френдчат ему предложение купить стрелу и обешание за это рассказать анекдотик. за покупку программа конечно же как и обешала рассказывает анекдотик. как показывает практика, самая идеальная цена чтобы клиенты купили как можно больше ваших стрел, для х1 - это не более 3к, для х5 - 10к. а для привлечения внимания именно к вашему торговцу, в титуле (для этого вам надо быть в клане) постоянно мигает рожица и надпись "АНЕКДОТЫ". Все анекдоты грузяться с папки c:\l2jokes (в аттаче уже готовый архив с 237 анекдотами), каждый анекдот в отдельном файле, не более 255 символов. Пользуйтесь на здоровье } // copyright © 2006, 2007 Puella var curpos: byte; TITLE_DATA2: array [0..16] of string; const jokes_max = 237; var f: TStringList; jokes: array [1..jokes_max] of string; jokes_real: integer; IDs: array [1..2000] of cardinal; Names: array [1..2000] of String; count: Integer; MyID: Cardinal; MyName: String; m: TMemo; t: TTimer; InTimer: Boolean; procedure OnTimerProc; begin InTimer := true; buf := #$55; WriteS(MyName); WriteS(TITLE_DATA2[curpos]); SendToServer; curpos := curpos + 1; if curpos > 16 then curpos := 0; InTimer := false; end; procedure Init; var i: byte; begin randomize; count := 0; f := TStringList.Create; jokes_real := 0; for i := 1 to jokes_max do begin try f.LoadFromFile('C:\l2jokes\' + IntToStr(i) + '.txt'); jokes_real := jokes_real + 1; except end; jokes[jokes_real] := f.Text; end; f.free; TITLE_DATA2[0] := '@(o_O)@'; TITLE_DATA2[1] := '@(O_o)@'; TITLE_DATA2[2] := '@(o_O)@'; TITLE_DATA2[3] := '@(O_o)@'; TITLE_DATA2[4] := ''; TITLE_DATA2[5] := 'ANEKDOTI'; TITLE_DATA2[6] := ''; TITLE_DATA2[7] := 'ANEKDOTI'; TITLE_DATA2[8] := ''; TITLE_DATA2[9] := 'ANEKDOTI'; TITLE_DATA2[10] := ''; TITLE_DATA2[11] := '@(o_O)@'; TITLE_DATA2[12] := '@(O_o)@'; TITLE_DATA2[13] := '@(o_O)@'; TITLE_DATA2[14] := '@(O_o)@'; TITLE_DATA2[15] := '@(o_O)@'; TITLE_DATA2[16] := '@(O_o)@'; curpos := 0; t := TTimer.Create(nil); t.Enabled := false; t.Interval := 2000; t.OnTimer := @OnTimerProc; ShowTab; m:=TMemo.Create(UserTab); m.parent:=UserTab; m.align:=alClient; m.ReadOnly:=true; m.ScrollBars:=ssBoth; m.lines.add('Анекдотов загружено: ' + inttostr(jokes_real)); end; procedure Free; begin m.Free; HideTab; t.OnTimer := nil; t.Enabled := false; t.Interval := 0; t.Free; end; function FindPlayer(ObjID: cardinal): integer; var k: cardinal; begin result := -1; if Count > 0 then for k := 1 to Count do if IDs[k] = ObjID then begin result := k; break end; end; var i, k: integer; objid: cardinal; name: string; begin if FromServer then case pck[1] of #$64: begin i := 2; if ReadD(i) = 380 then {S1_PURCHASED_S3_S2_s} begin i := i + 4*2; name := ReadS(i); if (name = '') then begin // внесем в лог (blacklist) m.Lines.Add(TimeToStr(now)+': '+name+' purchased (BLACKLISTED)'); end else begin while (InTimer = true) do i := i; buf := #$CC; i := int(random * jokes_real) + 1; WriteS(jokes); WriteS(name); SendToServer; if (Length(m.Lines.Text) > 60000) then m.Lines.Text := '<cleared>'; // внесем в лог m.Lines.Add(TimeToStr(now)+': '+name+' purchased'); m.Lines.Add('> ' + jokes); end; end end; #$03: // CharInfo begin i := 4 + 4 * 4 - 2; objid := ReadD(i); i := FindPlayer(ObjID); if i = -1 then begin i := 4 + 4 * 5 - 2; name := ReadS(i); // blacklist if (name = '') then begin // (none) end else begin // добавление count := count + 1; IDs[count] := ObjID; Names[count] := name; //m.Lines.Add(IntToStr(count) + ' - ' + Format('%x', [ObjId])+' = '+ Names[count]); end; end; end; #$04: //UserInfo begin i := 2 + 4*4; MyID := ReadD(i); MyName := ReadS(i); t.Enabled := true; end; #$12: // ObjectDelete begin i := 2; objid := ReadD(i); i := FindPlayer(objid); if i <> -1 then begin IDs := IDs[count]; Names := Names[count]; count := count - 1; end end; #$29: //TargetSeleted begin i := 2; objid := ReadD(i); if ReadD(i) <> MyID then exit; i := FindPlayer(objid); if i <> -1 then begin while (InTimer = true) do i := i; buf := #$CC; WriteS('Привет, '+names+'! Я бот! Купи у меня стрел и я, в благодарность за это, расскажу тебе анекдот или стишок на тему LineAge2! ;)'); WriteS(names); SendToServer; // внесем в лог m.Lines.Add(TimeToStr(now)+': '+names); end end; end; end.
  3. Скрипт собирать Рекомендации.для ХБ в башку стукнуло наверно над в туалет СУТЬ переделать скрипты расказывающие анекдоты на собирание РЕКов. В титул пишу За РЕК скажу Анекдот чел рекает и ему в пм анекдот.норм наверн будит я туп могу ток поменять в скрипте чтото как писать незнаю неумею необучен анекдоты два скрипта как основа для примера kod: //by VORON //скрипт который рассказывает анекдоты без бана: /////////////////////////////////////////////////////////////////////////// var temp: array [1..20] of string; timer1: TTimer; x: integer; procedure Init; //Вызывается при включении скрипта begin timer1:=TTimer.Create(nil); timer1.OnTimer:=@OnTimer; // timer1.enabled:=true; // timer1.interval:=1000; temp[1]:='" Водка в стиле IT: '; temp[2]:='0.1л - demo '; temp[3]:='0.25л - trial version '; temp[4]:='0.5л - personal edition '; temp[5]:='0.7л - professional edition '; temp[6]:='1.0л - network edition '; temp[7]:='1.75л - enterprise '; temp[8]:='3л - for small business '; temp[9]:='5л - corporate edition '; temp[10]:='Бутыль самогона - home edition '; temp[11]:='"На посошок" - Service pack '; temp[12]:='Рассол с утра - Recovery tool '; temp[13]:='Закуска - plugins '; temp[14]:='Пиво - patch '; temp[15]:='Coca-cola, Fanta, 7 UP - trojan viruses'; temp[16]:=''; x:=1; end; procedure OnTimer(Sender: TObject); begin /// if temp[x] <> '' then begin buf:=hstr('38'); writes(temp[x]); buf:=buf + hstr('01 00 00 00'); ///9- али // 3-пати // 01 - общий sendtoserverex('ник'); end; x:=x+1; if x>= 19 then x:=19; //ЭТА СТРОКА ДЛЯ ТОГО ЧТОБ XELAT заценил глубину мысли! незнаю я синтаксиса-) и учиться лень-) там какойто АНТИЛ надо применять-) а зачем? и так все пашет. end; procedure Free; //Вызывается при выключении скрипта begin timer1.Free; end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен begin end.
  4. я сам недавно нашел этот сайт и стал пользоваться l2phxписать необучен скрипты собрал это как в конструкторе из деталей АВТО ТРЕЙД delphi Код: //АВТО ТРЕЙД //скрипт вкл у чара кому передаете вещи // кинь трейд. чар автоматом подтвердит //положи вещь в трейд и нажми ОК и все // ХБ procedure Init; //Вызывается при включении скрипта begin end; procedure Free; //Вызывается при выключении скрипта begin end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен begin if FromServer and (pck[1]=#$70) then begin//вам кинули трейд buf:=#$55; WriteD(1); // принять ТРЕЙД SendToServer; pck:=''; exit; end; begin if FromServer and (pck[1]=#$62) and (pck[2]=#$79)then begin//вам потвердили обмен buf:=#$1C; WriteD(1); // подтвердить обмен SendToServer; end; end; end.
  5. Нашел скриптик на харде, кидает в вх две стопки, вдруг кому пригодится еще PHP код: var beg,id, id2,amount:string; SocialID, Status: Integer; procedure SendMsg(msg:string); begin buf:=#$4A; WriteD(0); WriteD(10); WriteS(''); WriteS(msg); SendToClient; end; begin if FromClient and (pck[1]=#$1B) then begin SocialID:=ReadD(2); case ord(pck[2]) of $06:begin Status:=1; SendMsg('ITS ON'); end; $05:begin Status:=0; SendMsg('ITS OFF'); end; end; end; if Status=1 then begin if FromClient and (pck[01]=#$31) then begin beg:=pck[01] + hstr('02') +pck[03]+pck[04]+pck[05]; id:=pck[06]+pck[07]+pck[08]+pck[09]; amount:=pck[10]+pck[11]+pck[12]+pck[13]; pck:=''; buf:=beg + id + amount + id + hstr('01000000'); SendToServer; end; if FromServer and (pck[01]=#$42) then begin beg:=hstr('3203000000'); id:=pck[38]+pck[39]+pck[40]+pck[41]; amount:=pck[20]+pck[21]+pck[22]+pck[23]; id2:=pck[78]+pck[79]+pck[80]+pck[81]; buf:=beg + id + amount + id2 + hstr('01000000')+ id2 + hstr('01000000'); SendToServer; end; end; end.
  6. Добрый день. У меня такая проблема, я хотел написать такой скрипт c такими задачами: cтоят 2 npc рядом, 1-ый Gatekeper (gk) и 2-ой Game-shop (gs). Так вот при помощи скрипта мой чар должен сначала 1 раз купить кристалы у (gs), потом обменять их на свитки у (gk) 16 раз(столько влазит до перевеса) то есть ему нада сначала сделать таргет на (gk) потом еще раз чтоб открыть диалог, потом выбрать обмен и только потом отправить пакет на обмен. После нада о5 же такую манипуляцю c таргетом и диалогом на (gs) и продать их всех. После о5 к (gk) (так как кристаллы еще остались) меняем 16 раз на свитки и о5 в (gs) продаем.Ну вот тут можно закончить чтоб проще было, дальше я сам смогу разобраться и доделать. Ну а в идеале он должен о5 1 раз купить кристаллы у (gs) и ити менять и продавать и так по кругу до бесконечности. Впринципе вот такой вот скрипт его можно сделать доработав вот етот скрипт на покупку только поправте пожалуйста и покажите куда мне пакеты вставлять на (таргет, выбор, покупку, обмен, продажу,) Буду очень признателен! Думаю такой скрипт многим пригодиться так как его легко сможет каждый редактировать под свои задачи. delphi Код: const Name='nick'; var timer:TTimer; procedure Init; begin timer:=TTimer.Create(nil); timer.interval:=50; timer.OnTimer:=@fireTimer; timer.enabled:=true; end; procedure Free; begin timer.Free; end; procedure fireTimer(Sender: TObject); begin buf:=hstr('покупка'); SendToServer; end; begin if FromServer and (ConnectName=Name) and (pck = HStr('нет денег')) then begin timer.enabled:=false; end; end.
  7. program autotarget; // Автоматическое взятие в таргет атакующего вас игрока или моба // Чтобы включить скрипт используйте в игре социальное действие - Yes // Чтобы выключить скрипт используйте в игре социальное действие - No // Автор: Furious // Версия: 0.4 // Для Грации by NLObP 09.08.2009г. const Name='NLObP'; //имя чара, с соблюдением регистра букв var Attacker, MyOID, ObjectID, MyX, MyY, MyZ, i: Integer; Status: boolean; procedure Init; //Вызывается при включении скрипта begin status:=false; end; procedure TargetAttacker(Attacker: Integer); begin //c1F=Action:d(ObjectID)d(OriginX)d(OriginY)d(OriginZ)c(ActionID) buf:=#$1F; WriteD(Attacker); WriteD(MyX); WriteD(MyY); WriteD(MyZ); WriteC(00); SendToServerEx(Name); end; //****************************************************************************** //основная часть скрипта, вызывается при приходе каждого пакета, если скрипт включен begin //не обрабатываем пустые пакеты if pck='' then exit; if (ConnectName=Name) and FromServer then begin case pck[1] of //32=UserInfo:d(X)d(Y)d(Z)d(isInAirShip)d(ObjectID)... #$32: begin i:=2; MyX:=ReadD(i); MyY:=ReadD(i); MyZ:=ReadD(i); ReadD(i); //пропускаем isInAirShip MyOID:=ReadD(i); end; //33=Attack:d(AttackerID)d(TargetID)... //48=MagicSkillUse:d(CharID)d(TargetID)... #$33,#$48: begin if Status then begin Attacker:=ReadD(2); ObjectID:=ReadD(6); if (Attacker<>ObjectID) and (MyOID=ObjectID) then TargetAttacker(Attacker); end; end; end; //case end; //if if (ConnectName=Name) and FromClient then begin case pck[1] of //34=RequestSocialAction:d(Action:Get.Func09) #$34: begin case ReadD(2) of 5: Status:=false; 6: Status:=true; end; end; //59=ValidatePosition:d(X)d(Y)d(Z)... #$59: begin MyX:=ReadD(2); //получаю координату х моего чара MyY:=ReadD(6); //получаю координату у моего чара MyZ:=ReadD(10); //получаю координату z моего чара end; end; //case end; //if end.
  8. дан пакет например 60 60 87 70 48 6C D2 D0 4D 73 00 00 00 95 9E 01 00 55 54 03 00 38 F2 FF FF нужно заменить выделенные биты и послать новый пакет на серв и убить старый. Помогите плиз в написании
  9. list=HStr('49 50 00 4D 00 20 00 22 00 6D 00 61 00 67 00 65 00 20 00 6F 00 72 00 20 00 22 00 66 00 69 00 67 00 68 00 74 00 65 00 72 00 00 00 03 00 00 00'); HolyResistance=HStr('39 70 05 00 00 00 00 00 00 00'); UnholyResistance=HStr('39 71 05 00 00 00 00 00 00 00'); ResistFire=HStr('39 A7 04 00 00 00 00 00 00 00'); ResistWind=HStr('39 A5 04 00 00 00 00 00 00 00'); ResistAqua=HStr('39 9E 04 00 00 00 00 00 00 00'); ElementalProtection=HStr('39 48 05 00 00 00 00 00 00 00'); DivineProtection=HStr('39 49 05 00 00 00 00 00 00 00'); ArcaneProtection=HStr('39 4A 05 00 00 00 00 00 00 00'); MentalShield=HStr('39 0B 04 00 00 00 00 00 00 00'); ResistShock=HStr('39 EB 04 00 00 00 00 00 00 00'); ImproveShieldDefense=HStr('39 DF 05 00 00 00 00 00 00 00'); ImproveMagic=HStr('39 DC 05 00 00 00 00 00 00 00'); ImproveCombat=HStr('39 DB 05 00 00 00 00 00 00 00'); ImproveCondition=HStr('39 DD 05 00 00 00 00 00 00 00'); ImproveMovement=HStr('39 E0 05 00 00 00 00 00 00 00'); WildMagic=HStr('39 17 05 00 00 00 00 00 00 00'); Acumen=HStr('39 3D 04 00 00 00 00 00 00 00'); EarthChant=HStr('39 6F 05 00 00 00 00 00 00 00'); ProphecyofWater=HStr('39 4B 05 00 00 00 00 00 00 00'); NoblesseBlessing=HStr('39 2B 05 00 00 00 00 00 00 00'); ChantofProtection=HStr('39 B5 05 00 00 00 00 00 00 00'); DanceofAquaGuard=HStr('39 33 01 00 00 00 00 00 00 00'); SongofElemental=HStr('39 11 02 00 00 00 00 00 00 00'); SongofEarth=HStr('39 08 01 00 00 00 00 00 00 00'); SongofWarding=HStr('39 0B 01 00 00 00 00 00 00 00'); SongofWind=HStr('39 0C 01 00 00 00 00 00 00 00'); SongofInvocation=HStr('39 0E 01 00 00 00 00 00 00 00'); SongofVitality=HStr('39 30 01 00 00 00 00 00 00 00'); DanceofConcentration=HStr('39 14 01 00 00 00 00 00 00 00'); SirenDance=HStr('39 6D 01 00 00 00 00 00 00 00'); DanceMystic=HStr('39 11 01 00 00 00 00 00 00 00'); SongofRenewal=HStr('39 5D 01 00 00 00 00 00 00 00'); Guidance=HStr('39 D8 04 00 00 00 00 00 00 00'); WarChant=HStr('39 6E 05 00 00 00 00 00 00 00'); ImproveCriticalAttack=HStr('39 DE 05 00 00 00 00 00 00 00'); ChantofBloodAwakening=HStr('39 EF 05 00 00 00 00 00 00 00'); ProphecyofFire=HStr('39 4C 05 00 00 00 00 00 00 00'); SongofFlameGuard=HStr('39 32 01 00 00 00 00 00 00 00'); SongofHunter=HStr('39 0D 01 00 00 00 00 00 00 00'); DanceofFury=HStr('39 13 01 00 00 00 00 00 00 00'); DanceofFire=HStr('39 12 01 00 00 00 00 00 00 00'); DanceoftheWarrior=HStr('39 0F 01 00 00 00 00 00 00 00'); SongofChampion=HStr('39 6C 01 00 00 00 00 00 00 00'); RequestAnswerJoinParty=HStr('43 01 00 00 00');
  10. 0x23 (RequestBypassToServer) 23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 39 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 34 00 30 00 30 00 31 00 00 00
  11. B0 39 4A 00 00 01 00 00 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  12. 0x23 (RequestBypassToServer) 23 6D 00 65 00 6E 00 75 00 5F 00 73 00 65 00 6C 00 65 00 63 00 74 00 3F 00 61 00 73 00 6B 00 3D 00 2D 00 31 00 31 00 26 00 72 00 65 00 70 00 6C 00 79 00 3D 00 31 00 39 00 30 00 30 00 31 00 00 00
  13. Доброго времени суток! Помогите если не затруднит.Как реализовать скрипт на авто закупку из ГМ шопа?На сервере проблем с деньгами нет 21кол=2.1ккк. Итак:Есть ГМ шоп в пункте обменник нужно поменять 20 кол на адену,потом из пункта шоп выбрать к примеру свитки->заточки и купить 100 блес Ы випон.Пробывал ловить по 1му пакету и отправлять на сервер смог получить только нажатие кнопочки купить,пробывал словить ряд пакетов(очищаю лог пакетов произвожу обмен коинов на адену и покупку скролов,копирую все полученные пакеты и отправляю серверу),результат нулевой. Играю на сервере l2rx.com хроники камаэль-Хелбаунд.
  14. Всем добрый вечер. Так как я вообщем в l2phx не очень прошу помощи... Нужен скрипт примерно по такому алгоритму....(сервер GM PvP(почти каждый ГМ)) : 1. Сам себя выбераеш в таргет 2. Убиваеш себя скилом (как бы в игре через //use_skill) 3. Потом опять выбераеш себя в таргет 4. Ресаеш себя (тоже через //use_skill) И как бы возвращаешься к 1 пункту. Если я написал не в тот раздел отпишите я перенесу... P.S. Готов дать вознаграждение
  15. cod: //---------------------------------------------------------------- const ItemID = 9455; // ItemID шмотки myname = 'ник; //---------------------------------------------------------------- var ItemBase: array of integer; Crystal: boolean; //------------------------------------------------------------------ procedure SendMsg2(msg:string); begin buf:=#$4A; WriteD(0); WriteD(10); WriteS(''); WriteS(msg); SendToClientEx(myname); end; //---------------------------------------------------------------- procedure Init; //Вызывается при включении скрипта begin SendMsg2('Начало инициализации скрипта, откройте инвентарь' ); Crystal:=false; end; //----------------------------------------------------------------- procedure Free; //Вызывается при выключении скрипта begin end; //---------------------------------------------------------------- procedure CreateItemBase; //Создает базу ObjectID и ItemID, опять же не проверяет пакет на правильность для экономия ресурсов var i,j: integer; begin j:=8; SetLength(ItemBase,int((length(pck)-5)/14)); //1ый байт - идентификатор пакета, следующие 4 байта хз, далее для каждого итема отводится 28 байт, размер массива должен быть в 2 раза больше, чем итемов.
×
×
  • Create New...