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

Loot from corpse(Run UO)

тут можно задать вопрос по скриптингу
Post Reply
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Loot from corpse(Run UO)

Post by MuDaCk »

Code: Select all

// Type: $0ECB Tooltip: the remains of a white wyrm
Program WyrmCorpse;
var
corpse1: cardinal;
corpse: cardinal;
resourse: array [0..13] of word; 
i: integer;

procedure loot(ID:cardinal);
begin
if (GetName(id) = 'a white wyrm corpse') then
begin 
 AddToSystemJournal(GetName(id));
newMoveXY(GetX(Id), GetY(Id), true , 0, true);
UseObject(ID);
wait(300);
UseObject(findtype(resourse[11],Backpack));  
    WaitForTarget(500); 
TargetToObject(id);
for i:= 0 to 10 do 
 begin 
   while (getquantity(findtype(resourse[i],ID))>0) do 
    begin 
     moveitem(finditem,0,backpack,0,0,0); 
      wait(1000); 
    end; 
  end;
cast('animate dead');
WaitForTarget(3000); 
TargetToObject(id);
wait(300);
UseObject(findtype(resourse[12],Backpack));  
    WaitForTarget(500); 
TargetToObject(findtype(resourse[10],Backpack));
 wait(100);
newMoveXY(5759, 137, true , 0, true);
 wait(100);
if not hidden then UseSkill('Hiding');
IgnoreReset;
end;
  end;
  
   
begin
FindDistance := 50; 
resourse[0] :=$0F26; // Type: $0F26  Tooltip: Diamond 
resourse[1] :=$0F13; //Type: $0F13 Tooltip: 2 Ruby 
resourse[2] :=$0F10;  //Type: $0F10  Tooltip: Emerald  
resourse[3] :=$0F16; //Type: $0F16 Tooltip: Amethyst 
resourse[4] :=$0F15; //Type: $0F15  Tooltip: Citrine 
resourse[5] :=$0F2D; //Type: $0F2D  Tooltip: tourmaline 
resourse[6] :=$0F25;  //Type: $0F25  Tooltip: Amber 
resourse[7] :=$0F19; //Type: $0F19  Tooltip: sapphire
resourse[8] :=$0EED;  // Type: $0EED  Tooltip: 1356 gold coin   
resourse[9] :=$1079; // Type: $1079  Tooltip: 20 pile of hides  
resourse[10] :=$26B4;  //Type: $26B4  Tooltip: 9 dragon scales
 
resourse[11] :=$0F52; //Type: $0F52  Tooltip: dagger
resourse[12] :=$0F9F; // Type: $0F9F Tooltip: scissors
corpse1 :=$2006; // Type: $2006  Tooltip: a white wyrm corpse
while true do
begin

while (GetName(findtype(corpse1, Ground)) = 'a white wyrm corpse') do
begin
corpse:=finditem;
loot(corpse);
end;
  
//begin
 //AddToSystemJournal(GetName(finditem));
//Ignore(finditem);
//end;
//AddToSystemJournal('1');
wait(1000);
end;
End.
1) трупик не находит)))
2) если подбежать к трупику, то он выполняет только эту часть:

Code: Select all

cast('animate dead');
WaitForTarget(3000); 
TargetToObject(id);
wait(300);
UseObject(findtype(resourse[12],Backpack));  
    WaitForTarget(500); 
TargetToObject(findtype(resourse[10],Backpack));
 wait(100);
newMoveXY(5759, 137, true , 0, true);
 wait(100);
if not hidden then UseSkill('Hiding');
3) через закладку World видит что кол-во трупиков в пачке больше тридцати(39 или 40 там было - уже и не вспомню)...
Именно в пачке! не раскиданно по всему ворлду, а именно в одной пачке. А в клиенте вижу что труп только один.

4) всё это получил через стелскоманду ',info'

Code: Select all

resourse[0] :=$0F26; // Type: $0F26  Tooltip: Diamond 
resourse[1] :=$0F13; //Type: $0F13 Tooltip: 2 Ruby 
resourse[2] :=$0F10;  //Type: $0F10  Tooltip: Emerald  
resourse[3] :=$0F16; //Type: $0F16 Tooltip: Amethyst 
resourse[4] :=$0F15; //Type: $0F15  Tooltip: Citrine 
resourse[5] :=$0F2D; //Type: $0F2D  Tooltip: tourmaline 
resourse[6] :=$0F25;  //Type: $0F25  Tooltip: Amber 
resourse[7] :=$0F19; //Type: $0F19  Tooltip: sapphire
resourse[8] :=$0EED;  // Type: $0EED  Tooltip: 1356 gold coin   
resourse[9] :=$1079; // Type: $1079  Tooltip: 20 pile of hides  
resourse[10] :=$26B4;  //Type: $26B4  Tooltip: 9 dragon scales
 
resourse[11] :=$0F52; //Type: $0F52  Tooltip: dagger
resourse[12] :=$0F9F; // Type: $0F9F Tooltip: scissors
corpse1 :=$2006; // Type: $2006  Tooltip: a white wyrm corpse
P.S. Дурью маюсь, делать нечего, вот и колупаю, что раньше недоделал. Так что это не срочно. расмотрим любые идеи как организовать луталку из трупа :wink: .
My name is Игорёшка Image
Пишу скрипты за едуImage
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Re: Loot from corpse(Run UO)

Post by MuDaCk »

Image
Вот пример) количество слегка преувеличенно))))). Кстати, тип у трупика совпадает с трупиком вирма.
My name is Игорёшка Image
Пишу скрипты за едуImage
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Re: Loot from corpse(Run UO)

Post by Fenix »

1.

Code: Select all

while (GetName(findtype(corpse1, Ground)) = 'a white wyrm corpse') do
Найденный итем в игнор не добавляется. Соответственно он будет всегда возвращать один и тот же ID первого встречного трупа, который может не быть трупом вирма.
2. Насчет пачки трупов - это нормально. При некоторых раскладах это можно использовать как баг на дюп :)
3. По поводу того, что выполняется только часть метода. Хочешь сказать, что первая часть метода вообще не выполняется? Включая подход к трупу и срезание кожи?
P.S.: Кстати, рекомендую вместо обычных вейтов перед TargetToObject использовать связку WaitForTarget() + if TargetPresent() then. В этом случае можно реализовать дополнительную логику в случае "непоявления" таргета.
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
chernysh
Novice
Novice
Posts: 61
Joined: 05.06.2011 14:54
Location: Ukraine

Re: Loot from corpse(Run UO)

Post by chernysh »

Fenix wrote:Соответственно он будет всегда возвращать один и тот же ID первого встречного трупа, который может не быть трупом вирма.
Кажется, он будет возвращать самый дальний найденный corpse, потому что FindType возвращает последний элемент из списка.
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Re: Loot from corpse(Run UO)

Post by MuDaCk »

Феникс.
1.Я пробовал ставить там if + else.
в скрипте:

Code: Select all

//begin
 //AddToSystemJournal(GetName(finditem));
//Ignore(finditem);
//end;
это было под else

3.Меня это и удивило! одна часть не срабатывает, а другая работает только в том случае, если вручную подбегаешь.

Code: Select all

if TargetPresent() then.
учту в будущем.
My name is Игорёшка Image
Пишу скрипты за едуImage
Fenix
Developer
Developer
Posts: 275
Joined: 24.08.2010 7:20
Location: Ставрополь
Contact:

Re: Loot from corpse(Run UO)

Post by Fenix »

chernysh wrote:Кажется, он будет возвращать самый дальний найденный corpse, потому что FindType возвращает последний элемент из списка.
Самый дальний итем не обязательно самый последний в списке, т.к. итемы могут появляться (кто-то выбросил шмотку из бекпака, смерть моба если при этом его ID не переходит в ID трупа, спавн). К тому же, я не помню реализацию хранения итемов в списке, возможно, что ID как-либо упорядочены.
Насчет неработоспособности первой части метода. Могу посоветовать добавить побольше отладочной информации (в том числе на появление таргета и эффективность подхода к трупу).
Помните – ничто так не защищает ваши зубы 12 часов днем и 12 часов ночью как уважительное отношение к окружающим.
"Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня"© Larry Wall
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Re: Loot from corpse(Run UO)

Post by MuDaCk »

Насчет неработоспособности первой части метода. Могу посоветовать добавить побольше отладочной информации (в том числе на появление таргета и эффективность подхода к трупу).
Ок . буду пробовать)
My name is Игорёшка Image
Пишу скрипты за едуImage
Post Reply