Jump to content

klizmabeqa1992

Members
  • Posts

    19
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by klizmabeqa1992

  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. 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');

  9. Доброго времени суток!

     

    Помогите если не затруднит.Как реализовать скрипт на авто закупку из ГМ шопа?На сервере проблем с деньгами нет 21кол=2.1ккк.

    Итак:Есть ГМ шоп в пункте обменник нужно поменять 20 кол на адену,потом из пункта шоп выбрать к примеру свитки->заточки и купить 100 блес Ы випон.Пробывал ловить по 1му пакету и отправлять на сервер смог получить только нажатие кнопочки купить,пробывал словить ряд пакетов(очищаю лог пакетов произвожу обмен коинов на адену и покупку скролов,копирую все полученные пакеты и отправляю серверу),результат нулевой.

    Играю на сервере l2rx.com хроники камаэль-Хелбаунд.

  10. Всем добрый вечер.

    Так как я вообщем в l2phx не очень прошу помощи...

    Нужен скрипт примерно по такому алгоритму....(сервер GM PvP(почти каждый ГМ)) :

    1. Сам себя выбераеш в таргет

    2. Убиваеш себя скилом (как бы в игре через //use_skill)

    3. Потом опять выбераеш себя в таргет

    4. Ресаеш себя (тоже через //use_skill)

    И как бы возвращаешься к 1 пункту.

     

    Если я написал не в тот раздел отпишите я перенесу...

     

     

    P.S. Готов дать вознаграждение

  11. 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 раза больше, чем итемов.

  12. закупаемся книжками, выставляем уровень заточки и ник

    точим на +1, скрипт продолжает пока не точнет до указанного уровня

    ЗЫ точить надо с нуля, иначе счетчик не правильно считать начнет

     

     

     

    delpi code:

     

    const

      nik='xxxxx';

      Enchant=13;

     

    var

      SubID, SkillID, SkillLvl, CurrEnch: integer;

     

    procedure Init; //Вызывается при включении скрипта

    begin

     

    end;

     

    procedure OnTimer01(Sender: TObject);

    begin

     

    end;

     

    procedure Free; //Вызывается при выключении скрипта

    begin

    CurrEnch:=0;

    end;

     

    procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения

    begin

     

    end;

     

    procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения

    begin

     

    end;

     

    //основная часть скрипта

    //вызывается при приходе каждого пакета если скрипт включен

    begin

        if FromServer and (pck[1]=#$62) then case pck[2] of

            #$A0:  //точнулся

                    if CurrEnch<Enchant then

                      begin

                        CurrEnch:=CurrEnch+1;

                        Buf:=#$D0;

                        WriteH(SubID);

                        WriteD(SkillID);

                        WriteD(SkillLvl+CurrEnch);

                        SendToServerEx(nik);

                      end;

            #$A1:  //не точнулся

                begin

                        CurrEnch:=1;

     

                        Buf:=#$D0;

                        WriteH(SubID);

                        WriteD(SkillID);

                        WriteD(SkillLvl+CurrEnch);

                        SendToServerEx(nik);

     

                end;

        end;

     

        if FromClient and (pck[1]=#$D0) then

            begin

              SubID:=ReadH(2);

              SkillID:=ReadD(4);

              SkillLvl:=ReadD(8)-1;

              CurrEnch:=1;

            end;

    end.

  13. Идея не нова.

    оформил краткий гайд по интерфейсу, работе с последней (на данный момент) версией.

    так же включил несколько полезностей взятых с форума.

    валяеться тут http://l2phx.pp.ru/arhive/l2ph_help/

    комунить да пригодится.

     

     

    Обновлен в соостветствии с 3.5.23

    важно: Страница "Перечень поддерживаемых функций/процедур, переменные." дополнена новыми переменными, функциями\процедурами и краткими пояснениями к ним.

  14. всем привет,будьте добры,нужна помощь.

    я играю на серве и меня там всё устраивает даже ла2 phx робит) вот, но минус то что там пушки безопасно до 15 точятся и если она(пушка) ломается например на 16 то пушка не на 0 скидывается а остаётся на 15 и сразу же точишь на 16 её, будьте добры помогите разобраться, и la2phx точит но он наичнает "тупить")

     

    Добавлено через 2 минуты

    l2phx.3.4.1.61-это phx которым я вхожу в ла2 и щас покажу сам скрипт

     

    Добавлено через 3 минуты

    а не он не вместится)ну вы меня поняли надеюсь) что мне изменить подскажите плиз

×
×
  • Create New...