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

Функция открыт ли банк с булевым результатом.

тут можно задать вопрос по скриптингу
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Функция открыт ли банк с булевым результатом.

Post by drabadan »

Собственно сабж, никто никогда такого себе не писал?
Подскажите если есть такой опыт или вообще соображения в подобной логике.
Я пока из того что придумал сам - запоминать по серийнику итем в переменную при инициализации скрипта, а потом после UOSay('BANK') искать файндтайпом. Но, при тесте такой ф-ции вылазят "какие-то бока"...
Буду рад полезным советам!
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Re: Функция открыт ли банк с булевым результатом.

Post by grundick »

а если заюзать LastContainer?
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by drabadan »

grundick wrote:а если заюзать LastContainer?
а чем она мне поможет? Может, я просто недопонимаю всей глубины этой функции?
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Re: Функция открыт ли банк с булевым результатом.

Post by grundick »

Ну как чем... Насколько я понимаю, тебе нужно убедиться, что банк открылся? По идее (на практике не проверял), если банк открылся, в LastContainer попадёт ИД банка.
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by drabadan »

grundick wrote:Ну как чем... Насколько я понимаю, тебе нужно убедиться, что банк открылся? По идее (на практике не проверял), если банк открылся, в LastContainer попадёт ИД банка.
Оно у меня там всегда будет, ибо открывается только банк.
grundick
Developer
Developer
Posts: 272
Joined: 31.01.2008 21:16

Re: Функция открыт ли банк с булевым результатом.

Post by grundick »

Ну чтоб его там всегда не было, ты перед открытием банка открой что-нибудь другое, например, свой бекпак. Потом кричишь BANk и проверяешь LastContainer...
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by drabadan »

grundick wrote:Ну чтоб его там всегда не было, ты перед открытием банка открой что-нибудь другое, например, свой бекпак. Потом кричишь BANk и проверяешь LastContainer...
Вся идея - это во время выгрузки или загрузки, а также после крафта - проверить открыт ли банк.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by Vizit0r »

при коннекте чара бекпак открывается всегда автоматически, так что ластконтейнер нулем не будет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by drabadan »

Я, наверно, не правильно описал свою "трудность".
По порядку, есть скрипт в котором есть функции - некоторые из них пользуются банком. Суть - иногда при работе скрипта - чар, открыв банк, загружает себе ресурсы в бекпак. После загрузки - крафтит некие вещи, в процессе крафта проверяет - хватает ли ресурсов, коль их не хватает - догружает.
Проблема - в том, что иногда банк "самопроизвольно" закрывается, совершенно вопиющим способом, и скрипт соответственно переходит в цикл без конца и края. По сему, было желание "изобрести" некую булевую фцию которая бы без кд совершенно точно бы утверждала что банк - открыт, ну или закрыт.
Айди банка, мне мало чем поможет, поможет только глупое постоянное открытие банка перед каждым действием связанным с ним.
Что-то вроде расширения

Code: Select all

function IsContainer(ObjID : Cardinal) : Boolean
...

примерный код, может так нагляднее будет:

Code: Select all

function BankIsOpen : Boolean;
  begin
    Result := False;
    if FindType(Item_Type, Bank_Id) <> 0 then Result := True;
  end;
Будет ли оно работать на отличненько?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by Vizit0r »

самый простой способ - это если в банке что-то есть, то поиск в банковском контейнере, если findquantity > 0, значится банк открыт.
кстати, было бы интересно посмотреть на пакеты от сервера в момент закрытия банковского контейнера.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by drabadan »

Vizit0r wrote:самый простой способ - это если в банке что-то есть, то поиск в банковском контейнере, если findquantity > 0, значится банк открыт.
кстати, было бы интересно посмотреть на пакеты от сервера в момент закрытия банковского контейнера.
Пакеты собирать не умею, а проблемка выскакивает раз на 3-5 часов, вручную уследить - крайне трудная задача!
код с FindQuantity работает только 1 раз =), дальше он наверно запоминает все в банке или я хз.

Code: Select all

function MoveItem(ItemID : Cardinal; Count : Integer; MoveIntoID : Cardinal; X,Y,Z : Integer) : Boolean
- результат Булевый, если возвращает в бекпак - это true или false? или я не правильно понимаю механику работы ф-ции?

вот кусок моего скрипта, может мне MoveItem можно через проверку какую-то написать?

Code: Select all

while GetQuantity(FindType(Logs, backpack)) < 100 do 
  begin
    UOSay('BANK');
    WaitAverageLag(AVERAGE_LAG_MS*2);
    if GetQuantity(FindItem) > 100 then break;
    MoveItem(FindType(Logs, BANK_ID), 25, backpack, 0,0,0);
    WaitAverageLag(AVERAGE_LAG_MS);
  end;
что-то вроде:

Code: Select all

while GetQuantity(FindType(Logs, backpack)) < 100 do 
  begin				
    if GetQuantity(FindItem) > 100 then break;
    if not MoveItem(FindType(Logs, BANK_ID), 25, backpack, 0,0,0) then UOSay('BANK');
    WaitAverageLag(AVERAGE_LAG_MS);
  end;
такое будет работать, то-есть как его написать чтоб работало?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by Vizit0r »

что происходит, когда этот самый банковский контейнер якобы закрывается?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by drabadan »

Vizit0r wrote:что происходит, когда этот самый банковский контейнер якобы закрывается?
не могу сказать на 100%, видел при ворлд сейве, иногда если кто-то "насквозь" пробегает. Иногда сам юзверь скрипта включает клиент и банк закрывается, иногда при обработке гампа крафт меню.
Это важно?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by Vizit0r »

ты не понял. с чего ты взял, что банк закрывается? в чем это выражается?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
drabadan
Expert
Expert
Posts: 730
Joined: 13.12.2012 17:35
Contact:

Re: Функция открыт ли банк с булевым результатом.

Post by drabadan »

Vizit0r wrote:ты не понял. с чего ты взял, что банк закрывается? в чем это выражается?
инготы выложить не может то-есть DragItem выполняет а DropItem с результатом в бекпак выполняется.
Post Reply