Page 1 of 2

спарринг

Posted: 19.11.2016 18:18
by wane5
Всем доброго времени суток.

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

Пока процедура выглядит вот так:

Code: Select all

procedure equip_all;

begin
if (ObjAtLayer(HatLayer) = 0) and (GetQuantity(FindType($1412,sunduk)) > 0) then  // helmet
    begin
        UseObject(sunduk);
        Wait(100);
        MoveItem(FindItem,-1,Backpack,0,0,0);
        UnEquip(HatLayer);
        Wait(100);
        Equip(HatLayer,FindItem);
        Wait(100);
    end;
...
И такая есть для каждого слоя армора, который хочу надевать.

Так как армор в спарринге со временем разбивается, падает прочность и показатель защиты, есть задача в эту процедуру добавить проверку прочности, к примеру, если (прочность < 10) то снимать вещь, выкидывать в рядом стоящий треш и одевать новую.

Еще хотел бы каждую часть армора изначально класть в отдельную конкретную сумку(шкатулку) в главном сундуке и не знаю как сделать, чтобы скрипт искал и брал определённую часть армора в определённой шкатулке в главном сундуке.

Заранее благодарен за помощь.

Re: спарринг

Posted: 21.11.2016 14:57
by wane5
Нашёл дискуссию на тему проверки прочности армора, один из как мне кажется адекватных методв это через использование скилла armslore. Ссылка на тему:

http://www.stealth.od.ua/forum/viewtopic.php?f=2&t=703

Но, так как у нас на шарде, армслор не классовый скилл у война, поэтому вариант не подходит, да и тема старая, подскажите кто знает, на данный момент появились ещё какие то способы получить значение прочности армора?

Re: спарринг

Posted: 21.11.2016 15:34
by Oasis
щелчек по армору, берешь данные с экрана, и пишешь алгоритм действия.

С какого ты зулу?

Re: спарринг

Posted: 21.11.2016 15:50
by wane5
Oasis wrote:щелчек по армору, берешь данные с экрана, и пишешь алгоритм действия.

С какого ты зулу?
Думаю мне не под силу будет такое реализовать) Надеялся что есть какая нибудь функция кот возвращает значение прочности)

Если не сложно, покажи какой нибудь пример, как вообще выглядит такой алгоритм, когда какие то данные берутся с экрана? а то я чет даже не представляю как это работает.

я с зулухотел.нет

Re: спарринг

Posted: 21.11.2016 15:57
by Oasis
Я беру пример с чеклага, где чар щелкая по паку считывает инфу.
Я примерно подсказал в какую сторону рыть, сам щас этим занимаюсь, про функцию пока не знаю. Хотя в вики есть информация по слоям вещей, просмотри все функции

http://stealth.od.ua/Doc:RU/Api/GetName
Что-то нашел=)

Для меня эти функции очень сложные, я не разобрался.
Альтернативный вариант:
Понадобится 1 крафт с армс лором, 2 судука и треш. Сундук №1 для армора, сундук №2 для сброса всего комплекта и проверки такового крафтом.

Считываем общее количество армора, если значение падает ниже заданного, то скинуть весь армор в сундук №2 (можно сделать задержку и скидывать по 1 части брони в заданное время)Крафт сканирует армор, тот который слишком убитый по значению, крафт бросает в треш, хороший или нормальный - возвращает в сундук №1 :cry:
Вариант для аутсайдеров :lol:

Re: спарринг

Posted: 21.11.2016 16:46
by wane5
Oasis wrote:Я беру пример с чеклага, где чар щелкая по паку считывает инфу.
Я примерно подсказал в какую сторону рыть, сам щас этим занимаюсь, про функцию пока не знаю. Хотя в вики есть информация по слоям вещей, просмотри все функции

http://stealth.od.ua/Doc:RU/Api/GetName
Что-то нашел=)
Функции по слоям видел, по ним же и пишу процедуры чтобы чар одевал каждую часть армора, они возвращают только номер слоя:
http://stealth.od.ua/Category:%D0%9E%D0 ... 0%BE%D0%B8
А вот как вытащить оттуда показатель прочности, что не пойму.

Попробую потестить getname, что он там вернёт...

Re: спарринг

Posted: 21.11.2016 20:18
by drabadan
wane5 wrote:
Oasis wrote:Я беру пример с чеклага, где чар щелкая по паку считывает инфу.
Я примерно подсказал в какую сторону рыть, сам щас этим занимаюсь, про функцию пока не знаю. Хотя в вики есть информация по слоям вещей, просмотри все функции

http://stealth.od.ua/Doc:RU/Api/GetName
Что-то нашел=)
Функции по слоям видел, по ним же и пишу процедуры чтобы чар одевал каждую часть армора, они возвращают только номер слоя:
http://stealth.od.ua/Category:%D0%9E%D0 ... 0%BE%D0%B8
А вот как вытащить оттуда показатель прочности, что не пойму.

Попробую потестить getname, что он там вернёт...
GetTooltip
GetClilocItemRec

Re: спарринг

Posted: 21.11.2016 20:56
by Oasis
Я в вике находил это, пример бы использования.
Без примера или кратким объяснением - это лес.

Re: спарринг

Posted: 21.11.2016 21:15
by drabadan
Oasis wrote:Я в вике находил это, пример бы использования.
Без примера или кратким объяснением - это лес.

Code: Select all

function CheckItemProps(Item : Cardinal) : Boolean;
var
 Props : Array of String;
 i : Integer;
begin
 Result:= False;
 Props := ['recovery 3',
           'casting 3',
           'cost 10%',
           'cost 11%',
           'cost 12%',
           'cost 13%',
           'cost 14%',
           'cost 15%',
           'cost 16%',
           'cost 17%',
           'cost 18%',
           'cost 19%',
           'cost 20%',
           'repond',
           'regeneration',
           'chance increase'           
          ];
          
 for i := 0 to Length(Props)-1 do
  if (BmSearch(1,AnsiLowerCase(GetToolTip(Item)), Props[i]) > 0) then
   Result := True; 
end;
з.ы. Тут конечно бред в скрипте, что инициализируется каждый раз список, который может быть статическим. Но разобратся можно...

Re: спарринг

Posted: 21.11.2016 21:54
by Oasis
Спасибо. К сожалению я ничего не понял.

Re: спарринг

Posted: 21.11.2016 22:12
by drabadan
Oasis wrote:Спасибо. К сожалению я ничего не понял.
ну поищи в тултипе Durability вычлени из него значение и парси к инту StrToInt

Re: спарринг

Posted: 21.11.2016 23:15
by wane5
drabadan wrote:
wane5 wrote:
Oasis wrote:Я беру пример с чеклага, где чар щелкая по паку считывает инфу.
Я примерно подсказал в какую сторону рыть, сам щас этим занимаюсь, про функцию пока не знаю. Хотя в вики есть информация по слоям вещей, просмотри все функции

http://stealth.od.ua/Doc:RU/Api/GetName
Что-то нашел=)
Функции по слоям видел, по ним же и пишу процедуры чтобы чар одевал каждую часть армора, они возвращают только номер слоя:
http://stealth.od.ua/Category:%D0%9E%D0 ... 0%BE%D0%B8
А вот как вытащить оттуда показатель прочности, что не пойму.

Попробую потестить getname, что он там вернёт...
GetTooltip
GetClilocItemRec[/quote]

О спасибо, поискал на форуме примеры, нашёл тему:
http://stealth.od.ua/forum/viewtopic.php?f=1&t=2440

Там скрипт который выводит все параметры в журнал. Вот собственно сам скрипт:

Code: Select all

Program New;
var
aa : TClilocRec;
bb : TClilocItemRec;
i,k : Integer;
begin
aa := GetToolTipRec(ObjAtLayer(rhandLayer));
AddToSystemJournal('Total lines in Toolptip: ' + IntToStr(aa.Count));
for i := 0 to aa.Count - 1 do
  begin
    AddToSystemJournal('Line ' + IntToStr(i) + ': ');
    bb := aa.Items[i];   
    AddToSystemJournal('Cliloc: $' + IntToHex(bb.ClilocID,8));
    AddToSystemJournal('Cliloc text: ' + GetClilocByID(bb.ClilocID));
    for k := 0 to Length(bb.Params) - 1 do
     AddToSystemJournal('Param' + IntToStr(k) + ': "'
                        + bb.Params[k] + '"');
  end; 
end.
Теперь стало понятнее, как это работает.

Re: спарринг

Posted: 21.11.2016 23:24
by Oasis
ооо, спасибо. я было думал забить уже. :D

а у меня наводя на айтем, параметры как в дьябло :lol:
и скрипт соответственно дает информацию о прочности, повреждениях, весе... кароче под одним названием 3 параметра, надеюсь у тебя получше с этим=)

Code: Select all

21:18:42:890 [Warrior]: Compiling
21:18:42:917 [Warrior]: Compiled succesfully
21:18:42:919 [Warrior]: Total lines in Toolptip: 7
21:18:42:921 [Warrior]: Line 0: 
21:18:42:923 [Warrior]: Cliloc: $000FEA1B
21:18:42:925 [Warrior]: Cliloc text: ~1_NOTHING~
21:18:42:927 [Warrior]: Param-0: "a Wood Butcher Knife"
21:18:42:929 [Warrior]: Line 1: 
21:18:42:931 [Warrior]: Cliloc: $00105C61
21:18:42:934 [Warrior]: Cliloc text: Вес: ~1_WEIGHT~ камней
21:18:42:938 [Warrior]: Param-0: "1"
21:18:42:942 [Warrior]: Line 2: 
21:18:42:945 [Warrior]: Cliloc: $00103130
21:18:42:948 [Warrior]: Cliloc text: повреждение оружия ~1_val~ - ~2_val~
21:18:42:952 [Warrior]: Param-0: "1"
21:18:42:955 [Warrior]: Param-1: "8"
21:18:42:958 [Warrior]: Line 3: 
21:18:42:960 [Warrior]: Cliloc: $0010312F
21:18:42:963 [Warrior]: Cliloc text: скорость оружия ~1_val~
21:18:42:966 [Warrior]: Param-0: "30"
21:18:42:968 [Warrior]: Line 4: 
21:18:42:971 [Warrior]: Cliloc: $001033C0
21:18:42:973 [Warrior]: Cliloc text: одноручное оружие
21:18:42:975 [Warrior]: Param-0: "error{ errortext = "Array index out of bounds" }"
21:18:42:978 [Warrior]: Line 5: 
21:18:42:981 [Warrior]: Cliloc: $00103134
21:18:42:984 [Warrior]: Cliloc text: требуемый навык: меченосец
21:18:42:986 [Warrior]: Param-0: "error{ errortext = "Array index out of bounds" }"
21:18:42:989 [Warrior]: Line 6: 
21:18:42:991 [Warrior]: Cliloc: $00102F1F
21:18:42:994 [Warrior]: Cliloc text: прочность ~1_val~ / ~2_val~
21:18:42:996 [Warrior]: Param-0: "45"
21:18:42:998 [Warrior]: Param-1: "45" 

Re: спарринг

Posted: 22.11.2016 0:04
by Oasis
Разобрался с своей проблемой.
Если у кого-то такая же беда с кучей инфы, и парам-0, парм-1 сыпять много информации, шаманить нужно тут:

Code: Select all

for i := 0 to aa.Count - 1 do
я изменил 0 на 6, и сразу получаю шестую строку информации, о прочности=)

Re: спарринг

Posted: 22.11.2016 0:46
by wane5
Я пока не пробовал прикрутить эту штуку.
Там в той же теме, чел пример написал как можно проверять параметр прочности. Примерно так:

Code: Select all

AddToSystemJournal('Прямой способ достать значение параметра'+aa.Items[2].Params[0]); 

if StrToInt(aa.Items[2].Params[0]) = 0 then
AddToSystemJournal('Оружие убито в НОЛЬ');
end.