Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Попишу скрипты за еду.

тут можно задать вопрос по скриптингу
Half-Life
Novice
Novice
Posts: 86
Joined: 30.10.2012 12:06
Location: Одесса
Contact:

Попишу скрипты за еду.

Post by Half-Life »

Попишу любые скрипты за просто так или за символическое вознаграждение. Заявки можно просто оставлять здесь. Желательно под РанУО.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Попишу скрипты за еду.

Post by drabadan »

пиши самые востребованные - автоскупка и автофарм мобов.
я сейчас пишу автоскупку, пока времекни не хватает дописать!
Half-Life
Novice
Novice
Posts: 86
Joined: 30.10.2012 12:06
Location: Одесса
Contact:

Автоскупка регов RunUO

Post by Half-Life »

Скрипт полностью рабочий хоть и немного корявый. Будет время перепишу получше.
Автоскупка регов RunUO

Code: Select all

program RegsBuyHelper;
Autor: Half-Life;
Description: Скрипт на полном автомате летает по рунабуке и скупает реги. Нужно сидеть на Жуке. Жук желательно должен быть bonded.
UOStealthClientVersion: 6.2.1;
Warning! Будьте бдительны! - Администрация многих игровых серверов враждебно относится к использованию стелс клиента на своих серверах. Заподозрив вас в использовании стелс клиента и других неправославных программ они начинают сатанеть и в порыве слепой ярости могут попасть по вам Банхаммером;
const
RegsStorage=$4003101F;      //Сундук в доме куда будут скидываться реги.
StorX=1820;                 //Координата Х куда встать в доме.
StorY=1140;                 //Координата У куда встать в доме.
HomeRuneBook=$402F03B7;     //Рб с рункой в дом.
HomeRuneIndex=7;            //Номер рунки к дому. Отсчёт начинается с нуля!
HomeX=1818;                 //Координата Х рунки к дому.
HomeY=1138;                 //Координата У рунки к дому.
BankRuneIndex=8;            //Номер рунки к банку.
BankX=991;                  //Координата Х рунки к банку.
BankY=524;                  //Координата У рунки к банку.
RuneBookShift=5;      //Чем реколится. (5-магия, 7-Чива)

RuneAmount=10;        //Количетво Рун в книге с регами. Отсчёт начинается с нуля!

Mount=$0001D9F5; //Жук
GoldType=$0EED; //Тип Голды
WaitTime=500;

RecalTime=2000;
WaitCycles=7;
LagWait=10000;

Invis=False; //Кастовать инвиз или нет. По умолчанию выключено. Для того что бы прыгал в инвиз нужно поменять False на True

//Дальше ничего не меняем кроме РБ с регами в самом низу
var
CurrentRune:Byte;
CurrentBook,i:Integer;
RegTypes,VendorTypes:array of Word;
RuneBooks:array of Cardinal;
Vendors:array of String;
cTime,cTime2:TDateTime;

procedure MoveRegs(WhereFind:Cardinal;WhereDown:Cardinal);
var
CurReg: Integer;
begin
  FindDistance:=2;
  CheckLag(LagWait);
  for CurReg:=0 to Length(RegTypes)-1 do begin
    if Dead or not Connected then Exit;
    CheckLag(LagWait);
    if WhereFind=Mount then begin
      FindTypeEx(RegTypes[CurReg],$0000,WhereFind,True);
    end
    else begin
      FindType(RegTypes[CurReg],WhereFind);
    end;
    while FindCount > 0 do begin
      if Dead or not Connected then Exit;
      CheckLag(LagWait);
      Wait(WaitTime);
      MoveItem(Finditem, GetQuantity(Finditem), WhereDown, 0, 0, 0);
      if WhereFind=Mount then begin
        FindTypeEx(RegTypes[CurReg],$0000,WhereFind,True);
      end
      else begin
        FindType(RegTypes[CurReg],WhereFind);
      end;
    end;
  end;
end;

function RecallRune(RuneBook: Cardinal; Rune: Byte):Boolean;
var
X,Y:Word;
begin
  Result:=False;
  X:=GetX(Self);
  Y:=GetY(Self);
  CheckLag(LagWait);
  Wait(WaitTime);
  if Dead or not Connected then Exit;
  cTime2:=Now;
  while (cTime2<cTime)do begin
    cTime2:=Now;
    wait(100);
  end;
  UseObject(RuneBook);
  CheckLag(LagWait);
  cTime:=Now+0.00008;
  if IsGump then begin
    if NumGumpButton(GetGumpsCount-1, RuneBookShift + 6*Rune) then begin
      CheckLag(LagWait);
      Wait(RecalTime);
      CheckLag(LagWait);
      Result:=(X<>GetX(Self)) or (Y<>GetY(Self));
    end else Result:=False;
  end else Result:=False;
end;


function GoBase: Boolean;
var
StartTime:TDateTime;
begin
  StartTime:=Now;
  Result:=RecallRune(HomeRuneBook, HomeRuneIndex);
  if InJournalBetweenTimes('That location is blocked', StartTime, Now) > 0 then GoBase;
end;

function GoBank: Boolean;
var
StartTime:TDateTime;
begin
  StartTime:=Now;
  Result:=RecallRune(HomeRuneBook, BankRuneIndex);
  if InJournalBetweenTimes('That location is blocked', StartTime, Now) > 0 then GoBank;
end;

function CheckJrnl: Boolean;
var
StartTime:TDateTime;
begin
  StartTime:=Now;
  if InJournalBetweenTimes('The World is saving, please wait.', StartTime, Now) > 0 then begin
  Result:=True;
  end
  else begin
    Result:=False;
  end;
end;

function NextRune: Boolean;
var
StartTime:TDateTime;
begin
  if CurrentRune>RuneAmount then begin
    IgnoreReset;
    CurrentRune:=0
    GoBase;
    MoveXY(HomeX,HomeY,true,0,true);
    Wait(WaitTime*2);
    UseSkill('Hiding');
    while not CheckJrnl do begin
      Wait(WaitTime*20);
    end;
    //Inc(CurrentBook);
    //if CurrentBook >= Length(RuneBooks) then CurrentBook := 0;
  end;
  StartTime:=Now;
  Result:=RecallRune(RuneBooks[CurrentBook], CurrentRune);
  if InJournalBetweenTimes('That location is blocked', StartTime, Now) > 0 then RecallRune(RuneBooks[CurrentBook], CurrentRune);
end;

procedure CheckGold;
var
X,Y,GoldCount:Word;
begin
  FindType(GoldType,backpack);
  GoldCount:=5000-FindFullQuantity;
  if FindFullQuantity>=5000 then exit;
  X:=GetX(Self);
  Y:=GetY(Self);
  if (X<>BankX)and(Y<>BankY) then GoBank;
  UOSay('withdraw '+IntToStr(GoldCount));
  Wait(WaitTime);
  FindType(GoldType,backpack);
  MoveItem(FindItem,FindQuantity,backpack,0,0,0);
  if FindFullQuantity < 5000 then begin
    Halt;
  end;
  RecallRune(RuneBooks[CurrentBook], CurrentRune);
end;
procedure LoadOnload;
begin
  if (BMCount=0) and (BPCount=0) and (GACount=0) and (GSCount=0) and (MRCount=0) and (NSCount=0) and (SACount=0) and (SSCount=0) then Exit;
  UseObject(self);
  Wait(WaitTime);
  CheckLag(LagWait);
  MoveRegs(backpack,Mount);
  MoveRegs(ground,Mount);
  Wait(WaitTime);
  UseObject(Mount);
  CheckLag(LagWait);
  GoBase;
  UseObject(self);
  Wait(WaitTime);
  CheckLag(LagWait);
  SetContextMenuHook(Mount,10);
  RequestContextMenu(Mount);
  MoveRegs(Mount,RegsStorage);
  Wait(WaitTime);
  UseObject(Mount);
  CheckLag(LagWait);
end;

function CheckVendor(Str:String):Boolean;
var
i:Byte;
begin
  for i:=0 to Length(Vendors)-1 do begin
    if Pos(Vendors[i],Str)>1 then begin
      Result:=True;
      Exit;
    end;
  end;
end;


Procedure Buy;
var
j:Byte;
VendorID:Cardinal;
VendorName:String;
X,Y:Word;
begin
  FindDistance:=8;
  Wait(WaitTime);
  CheckLag(LagWait);
  for j:=0 to Length(VendorTypes)-1 do begin
    if Dead or not Connected then Exit;
    CheckLag(LagWait);
    FindType(VendorTypes[j], ground);
    while FindCount>0 do begin
      if Invis then begin
        if (not Hidden) then begin
          Cast('Invisibility');
          WaitForTarget(2000);
          TargetToObject(self);
          Wait(WaitTime);
        end;
      end;
      VendorID:=Finditem;
      ClientPrint(GetCliloc(VendorID));
      VendorName:=AnsiLowerCase(GetCliloc(VendorID));
      if not CheckVendor(VendorName) then begin
        Ignore(VendorID);
        Wait(WaitTime);
        FindType(VendorTypes[j], ground);
        Continue;
      end;
      SetContextMenuHook(VendorID,1);
      RequestContextMenu(VendorID);
      Wait(WaitTime*2);
      CheckLag(LagWait);
      LoadOnload;
      CheckGold;
      X:=GetX(Self);
      Y:=GetY(Self);
      if ((X=BankX)and(Y=BankY) or (X=StorX)and(Y=StorY)) then RecallRune(RuneBooks[CurrentBook], CurrentRune);
      Ignore(VendorID);
      Wait(WaitTime);
      CheckLag(LagWait)
      FindType(VendorTypes[j], ground);
    end;
  end;
  Inc(CurrentRune);
end;

begin

  AddGumpIgnoreByID(4063159494);
  if not Connected() then begin
    Connect();
    Wait(10000);
  end;
  While IsGump do CloseSimpleGump(GetGumpsCount-1);
  cTime:=Now;
  RuneBooks:=[$40274DF3]; //Рунабука с Регами
  RegTypes:=[$0F7A,$0F7B,$0F84,$0F85,$0F86,$0F88,$0F8C,$0F8D];
  VendorTypes:=[$029A,$029B,$0190,$0191];
  Vendors:=['mage','alchemist','herbalist','mystic','the reagent man','necromancer'];
  CurrentBook:=0;
  CurrentRune:=0;
  LoadOnload;
  for i:=0 to Length(RegTypes)-1 do begin
    AutoBuy(RegTypes[i],$0000,999);
  end;
  SetAutoBuyDelay:=1500;
  i:=0;
  CheckGold;
  while True do begin
    if Dead then begin
      Halt;
    end;
    if not Connected() then begin
      Connect();
      Wait(10000);
      Continue;
    end;
    NextRune;
    Buy;
  end;
end.
Irohay
Neophyte
Neophyte
Posts: 42
Joined: 20.03.2011 16:51

Re: Попишу скрипты за еду.

Post by Irohay »

нарисуй на стак руды на пол по цвету если так делать нечего
Half-Life
Novice
Novice
Posts: 86
Joined: 30.10.2012 12:06
Location: Одесса
Contact:

Re: Попишу скрипты за еду.

Post by Half-Life »

Irohay wrote:нарисуй на стак руды на пол по цвету если так делать нечего
StackOre

Code: Select all

Program StackOre;
{
Autor: Half-Life;
Description: Cтак руды на пол по цвету.
UOStealthClientVersion: 6.4.0;
Warning! Будьте бдительны! - Администрация многих игровых серверов враждебно относится к использованию стелс клиента на своих серверах. Заподозрив вас в использовании стелс клиента и других неправославных программ они начинают сатанеть и в порыве слепой ярости могут попасть по вам Банхаммером;
}
const
WhereLook=backpack; //Где искать руду;
_DropX=1809;   //
_DropY=1140;  // Координаты на полу куда скидывать руду;
_DropZ=-90;  //
WaitTime=500;
WaitLag=10000;

var
OreTypes,OreColors:array of Word;

procedure MoveOre(OreType,OreColor:Word;FindOre:Cardinal;Quantity:Integer);
begin
  if (FindTypeEx(OreType, OreColor, Ground, False)>1) then MoveItem(FindOre, Quantity, FindItem, 0,0,0)
  else MoveItem(FindOre, Quantity, Ground, _DropX, _DropY, _DropZ);
end;

procedure FindOre;
var
j,i:Byte;
begin
  CheckLag(WaitLag);
  for j := 0 to Length(OreTypes)-1 do begin
    if Dead or not Connected then Exit;
    CheckLag(WaitLag);
    for i := 0 to Length(OreColors)-1 do begin
      While (FindTypeEx(OreTypes[j], OreColors[i], WhereLook, False)>1) do begin
        if Dead or not Connected then Exit;
        CheckLag(WaitLag);
        Wait(WaitTime);
        MoveOre(OreTypes[j],OreColors[i],FindItem,FindQuantity);
      end;
    end;
  end;
end;

begin
  OreTypes:=[$19B7,$19B8,$19B9,$19BA]; // Типы руды;
  OreColors:=[$0000,$0973,$0966,$096D,$08A5,$0972,$0979,$089F,$08AB]; // Цвета руды;
  FindOre;
end.
Irohay
Neophyte
Neophyte
Posts: 42
Joined: 20.03.2011 16:51

Re: Попишу скрипты за еду.

Post by Irohay »

работает если бы ищо сделал место Program procedure вобще шикарно было бы
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Попишу скрипты за еду.

Post by drabadan »

почему бы не реализовать через инклюд!
Irohay
Neophyte
Neophyte
Posts: 42
Joined: 20.03.2011 16:51

Re: Попишу скрипты за еду.

Post by Irohay »

drabadan wrote:почему бы не реализовать через инклюд!
это как я что то пробовал не получилось :(
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Попишу скрипты за еду.

Post by drabadan »

Irohay попробуй, я своим скудным умишкой мало что понял, но попытался!
Source code

Code: Select all

procedure StackOre(WhereLook : Cardinal; _DropX, _DropY, _DropZ : Word);
var
 OreTypes, OreColors : array of Word; 
 WaitTime, WaitLag, i, j : Integer;
 FindOre : Cardinal;
begin
  WaitTime:=500;
  WaitLag:=10000;
  OreTypes:=[$19B7,$19B8,$19B9,$19BA]; // Типы руды;
  OreColors:=[$0000,$0973,$0966,$096D,$08A5,$0972,$0979,$089F,$08AB]; // Цвета руды;
  CheckLag(WaitLag);
  for j := 0 to Length(OreTypes)-1 do begin
    if Dead or not Connected then Exit;
    CheckLag(WaitLag);
    for i := 0 to Length(OreColors)-1 do begin
      While (FindTypeEx(OreTypes[j], OreColors[i], WhereLook, False)>1) do begin
        if Dead or not Connected then Exit;
        CheckLag(WaitLag);
		FindOre := FindItem;
        Wait(WaitTime);
        if (FindTypeEx(OreTypes[j], OreColors[i], Ground, False)>1) then MoveItem(FindOre, 0, FindItem, 0,0,0)
		else MoveItem(FindOre, 0, Ground, _DropX, _DropY, _DropZ);
      end;
    end;
  end;
end;
Irohay
Neophyte
Neophyte
Posts: 42
Joined: 20.03.2011 16:51

Re: Попишу скрипты за еду.

Post by Irohay »

Error exec script method "StackOre" - Not enough parameters
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Попишу скрипты за еду.

Post by drabadan »

Irohay wrote:Error exec script method "StackOre" - Not enough parameters
так ты хотел чтоб оно в дллке работало?
Irohay
Neophyte
Neophyte
Posts: 42
Joined: 20.03.2011 16:51

Re: Попишу скрипты за еду.

Post by Irohay »

не знаю что такое дллке хотел в скрипт добавить что бы окло дома он стыкавал руду. а ты под что сделал?
Irohay
Neophyte
Neophyte
Posts: 42
Joined: 20.03.2011 16:51

Re: Попишу скрипты за еду.

Post by Irohay »

ну что не кто не поможет?
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Попишу скрипты за еду.

Post by drabadan »

Irohay wrote:ну что не кто не поможет?
script

Code: Select all

Program New;

procedure StackOre(WhereLook : Cardinal; _DropX, _DropY, _DropZ : Word);
var
 OreTypes, OreColors : array of Word; 
 WaitTime, WaitLag, i, j : Integer;
 FindOre : Cardinal;
begin
  WaitTime:=500;
  WaitLag:=10000;
  OreTypes:=[$19B7,$19B8,$19B9,$19BA]; // Типы руды;
  OreColors:=[$0000,$0973,$0966,$096D,$08A5,$0972,$0979,$089F,$08AB]; // Цвета руды;
  CheckLag(WaitLag);
  for j := 0 to Length(OreTypes)-1 do begin
    if Dead or not Connected then Exit;
    CheckLag(WaitLag);
    for i := 0 to Length(OreColors)-1 do begin
      While (FindTypeEx(OreTypes[j], OreColors[i], WhereLook, False)>1) do begin
        if Dead or not Connected then Exit;
        CheckLag(WaitLag);
      FindOre := FindItem;
        Wait(WaitTime);
        if (FindTypeEx(OreTypes[j], OreColors[i], Ground, False)>1) then MoveItem(FindOre, 0, FindItem, 0,0,0)
      else MoveItem(FindOre, 0, Ground, _DropX, _DropY, _DropZ);
      end;
    end;
  end;
end;

begin
 StackOre(Backpack, 0,0,0);
end.

Code: Select all

20:09:03:776 [GuardiolaUORPG]: Compiling
20:09:03:831 [GuardiolaUORPG]: Compiled succesfully
20:09:04:419 [GuardiolaUORPG]: Succesfully executed
20:09:04:420 [GuardiolaUORPG]: Script IROHAY.pas stopped successfuly
что я делаю не так(с).
King
Neophyte
Neophyte
Posts: 15
Joined: 29.06.2015 20:56

Re: Попишу скрипты за еду.

Post by King »

Всем привет.
занимаетца кто-то еще скриптами на заказ?
Post Reply