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

Ребята помогите сбор

тут можно задать вопрос по скриптингу
Post Reply
username
Neophyte
Neophyte
Posts: 18
Joined: 27.02.2016 11:53

Ребята помогите сбор

Post by username »

Господа скриптеры. Если вас не затруднит может у кого есть или кто сможет сделать скриптик на сбор хлопка по 3 загончикам в городе Мунглоу и разгрузкой в банк в сундук... (все пешком). Был бы очень признателен.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Ребята помогите сбор

Post by Vizit0r »

сделайте, чтобы где-то что-то куда-то собирал.
Ты умеешь ставить ТЗ.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
username
Neophyte
Neophyte
Posts: 18
Joined: 27.02.2016 11:53

Re: Ребята помогите сбор

Post by username »

Ну как еще по подробенй объеснить :) Чар отходит от банка идет к 1 полю в мунглоу вот его координаты 4412, 1447. Проверяет наличие на земле хлопка вот его тип 0x0C51 (только дистанцию поиска поставить где-то 30) , собрал или не нашел и идет на 2 поле 4567, 1475 (тут надо открыть колитку). Так же проверяет наличие хлопка, идет на 3 тоже проверяет хлопок поле 4633, 1301 (и тут на входе открыть калитку) и в итого идет в банк 4464, 1164 говорил Bank и выгружал все в определенный сундук по ID...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Ребята помогите сбор

Post by Vizit0r »

сбор регов

Code: Select all

program harvesting;
{CurrentBush# Reagents Harvesting Script RC1 [v1.01]
 [c] Vizit0r (based on Injection script by totus)
 [*]  time: 21.01.2007 - 23.01.2007
 finding&harvesting optimized 21.04.2007}


{$Include 'all.inc'}
type
ArrayType = Array[0..300] of Cardinal;
ArrayType2 = Array [0..4] of Word;

var
i, Harvest_cnt:Integer;
RawReagent, Bush,Regs : ArrayType2;
A : ArrayType;
stime : TDateTime;
StrubsList: TStringList;

const
RBID_MY = $4A8BD2CE;
RBID_POLE =$7F530DFD;
DoorID = $4DF064BE;

procedure Anti_fuck;
var Index : Integer;
begin
{Анти-покраска минионом}
  if Poisoned then
  begin
	sTime:= Now - (2.0 / 1440);
	Index := InJournalBetweenTimes('plague', sTime, Now);
	if (Index >= 0) and (LineType = 257) then
	begin
	  ClearJournal;
	  UOSay('.c Menya krasyat minionom po koordinatam: ' + IntToStr(GetX(Self)) + ' ' + IntToStr(GetY(Self)) + ' ! ');
	  AddToSystemJournal('Меня попытались покрасить минионом. Убился об вендора!');
	  attack($018282BD); // ид вендора
	  wait(3000);
	end;
  end;
 {Конец анти-покраски}
end;

procedure DropAll;
Var
Counter : Integer;
begin
RawReagent[4] := $18de; // Mandrake
RawReagent[2] := $18eb; // Ginseng
RawReagent[3] := $18e3; // Garlic
RawReagent[0] := $18e7; // NightShade
RawReagent[1] := $0C70; // Blood Moss
  For counter := 0 to 4 do
  begin
    Findtype(RawReagent[counter],backpack);
    IF FindFullQuantity > 0 then Stack(RawReagent[counter],$FFFF);
      Wait(200);
  end;
   Findtype($0f81,backpack);
    IF FindFullQuantity > 0 then Stack($0f81,$FFFF);
end;

procedure RecallRB(RBID : Cardinal);
var
var_mana : Integer;
Breaking : Boolean;
begin
  Breaking := False;
  IF Life < Str then UOSay('.guards');
  IF not Dead then
  begin
    while Breaking = False do
    begin
	stime := Now;
	var_mana := mana;
	WaitTargetObject(RBID);
	Cast('Recall');
	repeat
		CheckSave;
		InJournalBetweenTimes('fizzles', stime, Now);
		wait(100);
	until (LineCount > 0) or (var_mana > mana) or (Now > stime + (1.0/1440));
	IF (var_mana > mana) then Breaking := true;
          Wait(500);
  end;
  While Mana < 15 do Wait(1000);
  end;
end;

procedure GoToBoat;
begin
  while GetY(self) > 790 do
  begin
	IF IntToHex(GetType(DoorID),4) = '06A5' then
	begin
	  UseObject( DoorID);
	  Wait(500);
	end;
	IF IntToHex(GetType(DoorID),4) = '06A6' then GotoXY(3196,790,0,False);
	wait(500);
  end;
 Raw_Move(8,false);
 wait(500);
 Raw_Move(8,false);
 wait(3000);
GotoXY(5663,2279,0,True);
end;

procedure CheckReags;
var
Counter, quantity : Integer;
begin
  Regs[1] := $0F7B; // BM
  Regs[2] := $0F7A; // BP
  Regs[3] := $0F86; // MR
    for Counter := 1 to 3 do
    begin
        if  Count(regs[Counter]) <20 then
begin
        quantity :=Count(regs[Counter]);
        FindType(regs[Counter],ground);
        IF FindFullQuantity > 0 then
        begin
       MoveItem (finditem,20-quantity, backpack, 0,0,0) ;
      wait(300);
        end;
end;
    end;
AddToSystemJournal('Сейчас у вас '+IntToStr(Count(bp))+'bp, '++IntToStr(Count(mr))+'mr, '++IntToStr(Count(bm))+'bm');
end;


procedure GoDropReagAndBack;
begin
	  AddToSystemJournal('Иду домой');
  RecallRB(RBID_MY);
  Wait(3000);
  GoToBoat;
  wait(500);
FindDistance:=1;
  DropAll;
  Findtype($097B,backpack);
  IF FindFullQuantity <2 then
  begin
    Findtype($097B,ground);
    IF FindFullQuantity > 0 then MoveItem (FindItem, 2, backpack, 0,0,0);
  end;
   CheckReags;
   RecallRB(RBID_POLE);
end;

procedure HarvestReagent(BushType:Integer);
var
NoStop : Boolean;
Tmp_i : Integer;
flag : Boolean;
  Bushes_Num,i,j  : Integer;
  tempValue: Cardinal;
StrubsList, SL, SL2: TStringList;

begin
Bush[2] := $18e0; // Mandrake
 Bush[4] := $18e1; // Garlic
 Bush[3] := $18e9; //Ginseng
 Bush[0] := $18e5; //NightShade
 Bush[1] := $1783; //Blood Moss
 FindDistance := 20;
 Findtype(Bush[BushType],ground);
 AddToSystemJournal('Всего кустов этого типа найдено ' + IntToStr(FindFullQuantity));
 if (FindFullQuantity = 0) then Exit;
 StrubsList := TStringList.Create;
 GetFindedList(StrubsList);
 For i:= 0 to (StrubsList.Count-1) do  A[i] := StrToInt64('$'+StrubsList.Strings[i]);
 For i := (StrubsList.Count) to 300 do A[i] := 0;
// AddToSystemJournal('11 ' + IntToStr(StrubsList.Count));
// For i:= 0 to (StrubsList.Count-1) do  SL.Add(Int64ToStr(A[i]));
//SL.SaveToFile('c:\st2.txt');


  If (StrubsList.Count> 2) Then
  begin
//сортировка пузырьковым методом
  j := StrubsList.Count-1;
  flag := True;
  while ((j >= 1) and flag) do
  begin
        j := j - 1;
        flag := False;
        for i := 0 to j - 1 do
         begin
            if ((i < (StrubsList.Count -2)) and ((GetX(A[i]) > GetX(A[i+1])) or ((GetX(A[i]) = GetX(A[i+1])) and (GetY(A[i]) > GetY(A[i+ 1]))))) then
            begin
	  tempValue := A[I];
	  A[I] := A[i+1];
	  A[i+1] := tempValue;
               flag := True;
	  end
	end
  end
  end;
//конец сортировки
//начало сбора
 Tmp_i := 0;
  NoStop := True;
//  UO.Print('Массив кустиков сформирован.')
  While (NoStop and (not Dead)) do
  begin
       CheckSave;
        If (GetDistance(A[Tmp_i]) < 16) Then
        begin
	 If (GetDistance(A[Tmp_i])  > 2) Then GotoXY(GetX(A[Tmp_i]),GetY(A[Tmp_i]),1,True);
	  IF IsGump then waitgump('0');
	 CheckTargetError(10,2);
	  Anti_fuck;
           UseObject(A[Tmp_i]);
	  WaitJournalLine(now,'harvest all|stop|harvested|already|can''t see|far away', 60000);
        End
	wait(500);
        Tmp_i := Tmp_i + 1;
        If Weight > 390 Then GoDropReagAndBack;
        If (Tmp_i = StrubsList.Count) Then NoStop := False;

  End
//конец сбора
FindDistance := 2;
end;

BEGIN
 {FindDistance := 20;
 Findtype($1783,ground);
 AddToSystemJournal('Всего кустов этого типа найдено ' + IntToStr(FindFullQuantity));
 if (FindFullQuantity = 0) then Exit;
 StrubsList := TStringList.Create;
 GetFindedList(StrubsList);
 For i:= 0 to (StrubsList.Count-1) do  A[i] := StrToInt64('$'+StrubsList.Strings[i]);
 For i := (StrubsList.Count) to 300 do A[i] := 0;
StrubsList.SaveToFile('c:\st.txt');
 AddToSystemJournal('11 ' + IntToStr(StrubsList.Count));
 AddToSystemJournal('11 ' + StrubsList.Strings[10]);
 AddToSystemJournal('222          ' + Int64ToStr(A[10]));
}

 While not Dead do
  begin
    Hungry(1,backpack);
    For Harvest_cnt := 0 To 4 do
     begin
            If Weight > 390 Then GoDropReagAndBack;
            AddToSystemJournal('harv '+IntToStr(harvest_cnt));
            HarvestReagent(Harvest_cnt);
	  wait(1000);
     end
     wait(30000);
     UOSay('1');
  end;
//CheckReags;
end.
сбор регов. Допотопный, но вполне себе рабочий.
Возможно, тут на форуме тоже есть скрипты на сбор с полей.
Переписывай, допиливай - с нуля тебе такое точно писать не будет никто.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
username
Neophyte
Neophyte
Posts: 18
Joined: 27.02.2016 11:53

Re: Ребята помогите сбор

Post by username »

ок попробую
username
Neophyte
Neophyte
Posts: 18
Joined: 27.02.2016 11:53

Re: Ребята помогите сбор

Post by username »

глянул скрипт увидел дистанцию сбор по типу, но не увидел программу передвижения... Намекните хоть куда ее поставить и какая команда??? С координатами я сам разберусь...
username
Neophyte
Neophyte
Posts: 18
Joined: 27.02.2016 11:53

Re: Ребята помогите сбор

Post by username »

хоябы покажи на примере как зациклить скрипт для сбора на 1 поле вот координаты прохода к этому полю:
sub NaPole1()

Walk(4471, 1177, '')
Walk(4462, 1177, '')
Walk(4459, 1173, '')
Walk(4442, 1173, '')
Walk(4442, 1232, '')
Walk(4419, 1232, '')
Walk(4419, 1292, '')
Walk(4443, 1315, '')
Walk(4432, 1354, '')
Walk(4430, 1408, '')
Walk(4418, 1447, '')
Walk(4411, 1447, '')

sbor()

Walk(4416, 1447, '')
Walk(4422, 1447, '')
Napole2()
end sub

Был бы признателен. Просто в стелсе новичек...
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Ребята помогите сбор

Post by Vizit0r »

username wrote:глянул скрипт увидел дистанцию сбор по типу, но не увидел программу передвижения... Намекните хоть куда ее поставить и какая команда??? С координатами я сам разберусь...
http://stealth.od.ua/Doc:RU/Api/NewMoveXY
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply