Page 1 of 1

GetName

Posted: 24.01.2014 12:13
by CxC
Парни, на работе появились "свободные коридоры", вот решил перелопатить один из скриптов, поэтому есть вопросы )

Code: Select all

Program name;
begin
    Ignore(self);
    FindDistance := 20;
    if (FindType($0190, Ground) > 1) or (FindType($0191, Ground) > 0) then
        begin   
            //GetCliloc(FindItem);     
            //wait (5000)  
            ClickOnObject(FindItem);
            wait (5000)
            AddToSystemJournal('Name PK: ' + GetName(FindItem));
        end;
end.
Что не так? Пробовал и так, и так. И с задержками, и без. В итоге в журнале
12:36:14:639 [...]: Compiling
12:36:14:654 [...]: Compiled succesfully
12:36:19:657 [...]: Name PK:
12:36:19:659 [...]: Succesfully executed
12:36:19:662 [...]: Script гет нейм.sc stopped successfuly
Версия стелса последняя, на других не пробовал

Re: GetName

Posted: 24.01.2014 13:55
by Vizit0r
значит не имя, а тултип.

Re: GetName

Posted: 24.01.2014 14:07
by CxC
Vizit0r wrote:значит не имя, а тултип.
нет. Живой чар, сфера, тултипов вообще нет. Тем более на инжекте работает гетнейм )

Re: GetName

Posted: 24.01.2014 14:57
by Vizit0r
AddToSystemJournal(GetName(Self));
АОП - показало свой ник.

Re: GetName

Posted: 24.01.2014 15:05
by CxC
и у меня показало

тестю, вроде бы причина понятна

Re: GetName

Posted: 24.01.2014 15:23
by CxC
Не работает из-за or (FindType($0191, Ground) > 0), почему?
Рабочий вариант:

Code: Select all

Program name;
begin
    Ignore(self);
    FindDistance := 20;
    if (FindType($0190, Ground) > 0)  then
        begin   
            //GetCliloc(FindItem);     
            //wait (5000)  
            ClickOnObject(FindItem);
            wait (5000)
            AddToSystemJournal('Name PK: ' + GetName(FindItem));
        end;
end.
Нерабочий вариант:

Code: Select all

Program name;
begin
    Ignore(self);
    FindDistance := 20;
    if (FindType($0190, Ground) > 0) or (FindType($0191, Ground) > 0) then
        begin   
            //GetCliloc(FindItem);     
            //wait (5000)  
            ClickOnObject(FindItem);
            wait (5000)
            AddToSystemJournal('Name PK: ' + GetName(FindItem));
        end;
end.

Re: GetName

Posted: 24.01.2014 19:08
by Vizit0r
ну, возможно что $0190 найден, но при поиске $0191 ничего не найдено, файндайтем устанавливается в ноль.
Вот и получается что формально условие if a or b выполняется, но finditem равно нулю.

Re: GetName

Posted: 24.01.2014 21:44
by drabadan
Vizit0r wrote:ну, возможно что $0190 найден, но при поиске $0191 ничего не найдено, файндайтем устанавливается в ноль.
Вот и получается что формально условие if a or b выполняется, но finditem равно нулю.
едрить колотить!
Я себе весь мозг изнасиловал когда-то из-за этого.
По моей "логике" если это так можно назвать, я думал, что finditem остается с предыдущим результатом, а не переписывается в 0.

Кстати, а можно ли зафиксить это, а то получается почти любой 'or' с finditem'ом будет давать неоднозначный результат!

Re: GetName

Posted: 24.01.2014 21:58
by Vizit0r
а нефиг такое городить.
FindItem, и все другие FindXXX устанавливаются в ноль при вызове функции. Это нормально, так и должно быть.