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

Сортировка по Имени Книги

тут можно задать вопрос по скриптингу
Post Reply
MyEyE
Posts: 4
Joined: 07.02.2018 8:07

Сортировка по Имени Книги

Post by MyEyE »

Доброе время всем,
У вас на форуме позаимствовал удобный скрипт сбора БОД как Тайлор, так и БС, работает без нареканий, но есть одно но которое хотел бы подправить, если не сложно помогите:

Code: Select all

program BoDCollector;
{
Autor: Костяк скрипта написан Gauhar. Всё что связано с получением бодов реализовал Half-Life;
Description: Скрипт на автовзятие бодов. По умолчанию собирает боды и кузнеца и тейлора. Сортирует боды по двум книгам - для БС'а и Тейлора.
UOStealthClientVersion: 6.2.1;
Warning! Будьте бдительны! - Администрация многих игровых серверов враждебно относится к использованию стелс клиента на своих серверах. Заподозрив вас в использовании стелс клиента и других неправославных программ они начинают сатанеть и в порыве слепой ярости могут попасть по вам Банхаммером;
}
const
GumpIgnoredID=0; //ID незакрывающегося гампа. Если у вас на сервере такого не сущесвует установите значение 0;
TailorVendor=$00008646;    //ID NPC Тейлора;
ContextMenuHookTailor=1;   //Номер пункта контекстного меню отвечающего за взятие бода тейлора;
BSVendor=$00008643;        //ID NPC Блексмитера;
ContextMenuHookBS=1;       //Номер пункта контекстного меню отвечающего за взятие бода блексмитера;
BodType=$2258;             //Тип бода;
BodClrT=$0483;             //Цвет тейлор бодов;
BoDClrBS=$044E;            //Цвет бс бодов;
Trash=$400F78FB;
TakeTailor=False;          //Брать боды у тейлора. Чтобы отключить установите значение False;
TakeBS=True;               //Брать боды у блексмитера. Чтобы отключить установите значение False;
TBook=0;                   //ID книги в которую слаживать тейлор боды. Установите значение 0 если не хотите слаживать боды в книгу;
BSBook=0;                  //ID книги в которую слаживать блексмит боды. Установите значение 0 если не хотите слаживать боды в книгу;
TMsg='Taking Tailor BOD';
BSMsg='Taking BS BOD';
WaitTime=500;              //Время минимальной задержки. Лучше не менять.
WaitLag=10000;
var
MyProfiles:array of String;
TimeOrder:array of TDateTime;
nProfile:Integer;

procedure CollectBoD(Msg:String;Vendor:Cardinal;MenuHook:Integer;BodColor:Integer;BulkBook:Cardinal);
var
StringList:TStringList;
Text:String;
begin
  AddToSystemJournal(Msg);
  Wait(WaitTime);
  SetContextMenuHook(Vendor, MenuHook);
  CheckLag(WaitLag);
  RequestContextMenu(Vendor);
  Wait(WaitTime*2);
  WaitGump('1');
  Wait(WaitTime*4);
  if BulkBook=0 then AddToSystemJournal('Количество бодов = ' + IntToStr(CountEx(BodType,BodColor,backpack)));
  if BulkBook<>0 then begin
    while (FindTypeEx(BodType,BodColor,backpack,false)>1) do begin
      MoveItem(FindItem,1,BulkBook,0,0,0);
      Wait(WaitTime*2);
      While IsGump do CloseSimpleGump(GetGumpsCount-1);
      StringList:=TStringList.Create;
      StrBreakApart(GetCliloc(BulkBook),'stone|',StringList);
      Text:=StringList.strings[1];
      StrBreakApart(Text,'|',StringList);
      Text:=StringList.strings[0];
      Wait(WaitTime);
      CheckLag(WaitLag);
      AddToDebugJournal(Text);
    end;
  end;
end;

function CheckBackpack:Boolean;
var
StringList:TStringList;
Text:String;
begin
  StringList:=TStringList.Create;
  StrBreakApart(GetCliloc(Backpack),'Contents: ',StringList);
  Text:=StringList.strings[1];
  StrBreakApart(Text,'/',StringList);
  Text:=StringList.strings[0];
  if StrToInt(Text)=125 then begin
    AddToSystemJournal(myProfiles[nProfile]+' Ваш рюкзак полон.');
    Result:=True;
  end;
end;

begin
  AddGumpIgnoreByID(GumpIgnoredID);
  if not TakeTailor and not TakeBS then begin
    AddToSystemJournal('Внимание ошибка! Хотя бы один из параметров TakeTailor или TakeBS должен быть True. Скрипт остановлен.')
    Halt;
  end;
  myProfiles:=['Boder_I_I','Boder_I_II','Boder_I_III','Boder_I_IV','Boder_I_V','Boder_I_VI','Boder_I_VII']; //Сюда вписываем названия профилей. 1 чар = 1 профиль.

  //Дальше, если вы не уверены в том, что вы делаете то лучше не лезть.
  SetLength(timeOrder, Length(myProfiles));
  for nProfile:=0 to (Length(timeOrder)-1) do timeOrder[nProfile]:=0;

  repeat
    for nProfile:=0 to Length(myProfiles)-1 do begin
      if (Now>timeOrder[nProfile]) then begin
        ChangeProfile(myProfiles[nProfile]);
        SetARStatus(True);
        Connect;
        While not Connected() do Wait(2000);
       // if not CheckBackpack then begin
          While IsGump do CloseSimpleGump(GetGumpsCount-1);
          if TakeTailor then CollectBoD(TMsg,TailorVendor,ContextMenuHookTailor,BoDClrT,TBook);
          if TakeBS then CollectBoD(BSMsg,BSVendor,ContextMenuHookBS,BoDClrBS,BSBook);
       // end;
        SetARStatus(False);
        While Connected do begin
          Disconnect;
          Wait(5000);                  // Ждем пока бодер не выйдет из игры.
        end;
        timeOrder[nProfile]:=Now + 1.0 / 24;     // Следующий заказ брать через час.
      end;
    end;
    wait(1000);
  until False;
end.
В данном скрипте Книги Бодов указываются по ID. для 1 чара это работает, но так как скрипт перебирает чаров то на 2 чаре он работать перестает, так как не находит ID нужных ему книг для складывание Бодов.
Вопрос:
возможно ли в константе указать тип+имя? тип 1 для всех книг бодов и имя которым ее назовешь? Тем самым данные книги с нужным именем могут быть у всех чаров для сбора бодоа.

или как лучше организовать складывание бодов в книги?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Сортировка по Имени Книги

Post by Vizit0r »

Findtype
while finditem > 0 do
begin
GetName
если не подходит, то Ignore
если подходит, то запись айдишника в переменную и Break
findtype
end;
if имя_переменной = 0 then - что-то пошло не так, книга не найдена.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
MyEyE
Posts: 4
Joined: 07.02.2018 8:07

Re: Сортировка по Имени Книги

Post by MyEyE »

Если не сложно, можешь скинуть для примера любую готовую функцию по записи ID в переменную по имени предмета?
Мне с 0 тяжело писать.
MyEyE
Posts: 4
Joined: 07.02.2018 8:07

Re: Сортировка по Имени Книги

Post by MyEyE »

Дохлый форум
maza
Neophyte
Neophyte
Posts: 14
Joined: 21.04.2014 16:43

Re: Сортировка по Имени Книги

Post by maza »

Можно класть тайлор и бс боды в одну книгу
Можно назвать кнги TBOD BBOD и чекать их через GetCliloc и класть боды по разным книгам
GeeZeR
Apprentice
Apprentice
Posts: 226
Joined: 28.01.2012 19:48

Re: Сортировка по Имени Книги

Post by GeeZeR »

rtfm :)
Stealth 8.10.2 | Клиент: 7.0.13.4
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Сортировка по Имени Книги

Post by drabadan »

MyEyE wrote:Если не сложно, можешь скинуть для примера любую готовую функцию по записи ID в переменную по имени предмета?
Мне с 0 тяжело писать.
можно не быть таким ленивым и искать на форуме если оно тебе действительно надо.
MyEyE wrote: Дохлый форум
толстота...
MyEyE
Posts: 4
Joined: 07.02.2018 8:07

Re: Сортировка по Имени Книги

Post by MyEyE »

А можно не умничать и кинуть ссылку, но это же так сложно, проще написать кучу букв, а по сути просьбы выдать ноль.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Сортировка по Имени Книги

Post by drabadan »

MyEyE wrote:А можно не умничать и кинуть ссылку, но это же так сложно, проще написать кучу букв, а по сути просьбы выдать ноль.
http://stealth.od.ua/forum/search.php
держи!
Node
Posts: 9
Joined: 24.03.2014 23:11

Re: Сортировка по Имени Книги

Post by Node »

MyEyE wrote:Если не сложно, можешь скинуть для примера любую готовую функцию по записи ID в переменную по имени предмета?
Мне с 0 тяжело писать.
MyEyE wrote:А можно не умничать и кинуть ссылку, но это же так сложно, проще написать кучу букв, а по сути просьбы выдать ноль.
http://stealth.od.ua/Doc:Manual/Referen ... h#FindType
http://stealth.od.ua/Doc:Manual/Referen ... h#FindItem
http://stealth.od.ua/forum/viewtopic.php?f=2&t=1123
Post Reply