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

Stack

тут можно задать вопрос по скриптингу
Post Reply
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Stack

Post by shinma »

Решение найдено внизу темы.

Ситуация такая. Рануо сервер. сундуки все имеют ограничение на 125 итемов включая вложенные.
Я приношу на скрипте руду и бросаю в сундук MoveItem(FindType(OreType[g],Backpack),0,sunduk,0,0,0);
но он каждый раз создает новый стак а не кидает в старый. Есть ли способ заставить его кидать в стак? кроме как открывать этот сундук использовать grab, а потом опять класть в сундук.
Last edited by shinma on 24.01.2013 18:55, edited 1 time in total.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Stack

Post by Vizit0r »

кидай не в сундук, а в стек.
для кого писался инклюд stack.inc ?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Stack

Post by shinma »

он там работает с ground.
FindtypeEx(ObjType,Color,ground,false);

. тобишь шмотки на полу и стек он создает на полу. а я приношу их в сумке и кладу в сундук, прилоченный к дому без боковой стенки. и каждый раз создаю новый стек в сундуке, который ограничен на кол-во итемов 125 . тобишь 125 стеков и все - чар стоит. этот инклуд вообще не подходит. так как я не в доме я подхожу сбоку дома и закидываю в сундук, который прилочен к дому без стенки. я нашел как вариант выгружать каждый раз всю руду командой граб из сундука к себе в сумку, тогда она падает как раз в стеки в бэкпаке, и потом выгружать её обратно в сундук. но это ТУПО!!! любой говнюк меня убивает в этот момент и на тебе полный труп руды нафармленной может и не за один месяц.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Stack

Post by Vizit0r »

я рад что он тебе не подходит. но стоило бы его почитать, чтобы понять как он работает, и самому стекировать как надо.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Stack

Post by shinma »

допер. позже опишу когда проснусь.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Stack

Post by shinma »

Ответ на вопрос

Code: Select all

procedure Dropore(oretype1,color:word);//в процедуру передаются тип руды и цвет руды. sunduk - переменная которой присвоили ID сундука куда класть руду. записывается в константы скрипта.
var g : integer;
oreid,oresundukid: Cardinal;
Begin
finddistance := 2;//искать на расстоянии 2 квадратиков
checklag(60000);//проверка на лаги
useobject(sunduk); //открываем сундук sunduk
oresundukid:=FindTypeEx(OreType1,color,sunduk,false);//ищем руду типа OreType1 и цвета  color в сундуке sunduk. полученный ID кучки руды записываем в переменную oresundukid.

checklag(60000);//проверка на лаги
FindTypeEx(OreType1,color,backpack,false);//ищем тип руды с заданным цветом у себя в сумке
if FindCount > 0 then  // если нашли то выполняем дальнейшие действия
begin
h:=0; //эту переменную использую для гарантии отсутствия бесконечного цикла
oreid:=FindItem ; //в переменную oreid записываем ID кучки руды( которую мы нашли в сумке)
   repeat
   checklag(60000);
   MoveItem(oreid,0,oresundukid,0,0,0);//ВОТ ТУТ ПОДРОБНЕЕ!!!
{
MoveItem(  перемещаю итем
oreid,  ID итема мы заранее задавали, его будем перемещать
0, ноль - значит весь стак, все кол-во
oresundukid//перемещаю -" в". вот я его перемещаю НЕ в сундук, а в ID кучки руды того же цвета и того же типа в сундуке. так как FindTypeEx(OreType1,color,sunduk,false) выдаст в итоге мне именно ID кучки руды OreType1 цвета color лежащей в сундуке sunduk.
,0,0,0 -координаты нули. 
);
}

   wait (900);//ждем 900мс
   h:=h+1; 
   FindTypeEx(OreType1,color,backpack,false); //опять ищем руду типа OreType1 и цвета color у себя в сумке чтобы получить новые данные о кол-ве это руды в сумке для выхода из цикла
until (FindCount = 0) or dead or(h>30);//если кол-во руды ноль или чар мертв или счетчик больше 30 - заканчиваем цикл.
end;

End;
Last edited by shinma on 24.01.2013 20:02, edited 5 times in total.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Stack

Post by Vizit0r »

ничего что ты таким названием перекрываешь родную стелсовую функцию Drop ?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Stack

Post by shinma »

главное общий смысл описал. у меня то там записаны и массивы итд. просто упростил свою процедурку до понятного вида. писал на коленке. ну имя подкорректировал.
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
shinma
Expert
Expert
Posts: 505
Joined: 28.04.2011 12:05

Re: Stack

Post by shinma »

можно и дальше пойти. чтобы руду кидал в сундук не только когда там кучка есть, но и тогда когда сундук пуст. вариаций куча. у всех серваки разные.

Code: Select all

   repeat
   checklag(60000);
   oresundukid:=FindTypeEx(OreType1,color,sunduk,false); 
   if  FindCount = 0 then
    MoveItem(oreid,0,sunduk,0,0,0)
   else
   MoveItem(oreid,0,oresundukid,0,0,0);
   wait (900);
   h:=h+1; 
   FindTypeEx(OreType1,color,backpack,false);
until (FindCount = 0) or dead or(h>30);
--->>>ПОИСК ПО ФОРУМУ, НАЧНИ С НЕГО!!!<<<---
--->>>Search the forum, start with him!!!<<<---
95% Ваших вопросов уже кем-то написаны и решены.
elgreen
Posts: 5
Joined: 05.03.2013 17:27

Re: Stack

Post by elgreen »

Как сделать чтобы итемы наоборот не стакались при закидывании в контейнер или на землю?
Пример: в сумке 20 фиш стейков в 1й пачке, нужно разделить пачку что бы было 20 отдельных стейков в той же сумке.
Post Reply