Page 1 of 1

А проблем с определением координат ни у кого не возникало?

Posted: 04.03.2008 9:45
by grundick
Качал резист, бегая голыми пятками по фаерфильду и обратил внимание, что в стелсе координаты определяются с ошибкой +-1 тайл.Спасал только постоянный ресинк.Теперь в скрипте на мининг с кучкой маршрутов изза этого возникают проблемы в узких проходах.То есть частенько залезает куда не нужно.Ставить ресинк на каждом шагу не очень хочется... Кто что думает по этому поводу?

Posted: 04.03.2008 14:00
by Acronym
"в стелсе координаты определяются с ошибкой" - координаты чего то или просто координаты?

По поводу маршрута- raw_move это все таки временная замена. Пересмотри маршруты которые используешь на кривизну пути, может имеет смысл разбить несколько кривых на прямые отрезки, чтобы чар не застревал.

Ты кидаешь ФФилд, проверку на то как он лёг делаешь и если да, то корректно ли?

Posted: 04.03.2008 15:53
by grundick
Координаты чара ,естественно.ФФ кидаю на тайл, находящийся в строго заданных относительно кастующего координатах.Наблюдая за процессом, заметил ,что чар часто начинает бегать параллельно ФФ,причем то с одной, то с другой стороны.Стал смотреть координаты на закладке Main.И понял, что в таких ситуациях отображаются они неверно.Пока ресинк не сделашь...

Posted: 04.03.2008 17:45
by Acronym
У тебя чар который бегает:
а)не тот же самый который кидает каст, иными словами 2 чара используются в скрипте?
б)бегает по заданным изначально координатам рядом с которыми кидается ФФ или по координатам около ФФ, котоые он вычисляет исходя из положения ФФ?
в)глупый вопрос - местность конечно ровная?

PS: что такое "ресинк"?

Posted: 04.03.2008 20:41
by grundick
Вообщем так.Запускаю чара, который кастует ФФ. ФФ он кастует в соответсвии со своими кординатами.Он в глобалку кидает свои координаты. Запускаю чара, который бегает по ФФ. Он читает координаты, соответствующим образом обрабатывает.Определяет две точки, между которыми он и бегает. В общем то проблема возникала не только в этой ситуации, проблема возникает и при хождении по маршрутам в скрипте на мининг.Тоже часто слетает на +-1-2 тайла с маршрута...

Posted: 04.03.2008 22:26
by Edred
Проверяй свои скрипты. Потому что у меня никогда ничего не слетало. А так, как это описал ты, слетать просто не может физически. Потому что координаты чара определяет не стелс - их присылает шард. А шард не может ошибаться +-1 тайл. Если только не какой-нибудь кривой, написанный безграмотным скриптером на коленке...

Posted: 05.03.2008 2:00
by Chepka
кажись видел гдето на форуме что в ходилке можно выставлять точность, скорее всего там стоит единица тоесть +-1 тайл, а надо поставить 0

Posted: 05.03.2008 6:45
by grundick
Edred wrote:Проверяй свои скрипты. Потому что у меня никогда ничего не слетало. А так, как это описал ты, слетать просто не может физически. Потому что координаты чара определяет не стелс - их присылает шард. А шард не может ошибаться +-1 тайл. Если только не какой-нибудь кривой, написанный безграмотным скриптером на коленке...
Возможно и изза шарда...Бывали чудеса ,когда минер реколился от ПК, выжидал дома 20 мин., реколился обратно и находил того же ПК.(Хотя на самом деле его и след простыл).Или ревилишь чара, от которого успеваешь на два-три экрана отбежать...
Скрипт то простейший. Чар бегает по клеткам вдоль оси Х.Y фиксированно.Я знаю чему равно Y, и стелс показывает это значение.Тем не менее чар может бегать и "справа", и "слева" от этого Y.

Posted: 05.03.2008 19:52
by Edred
Как правильно уже заметил Chepka, ты для хождения что используешь? Мной написанную функцию GotoXY? А как выглядит ее вызов из скрипта?

Code: Select all

GotoXY(111,222,1,true);
Так, нет? Просто напоминаю - третий параметр - точность подхода к точке.

Code: Select all

procedure GotoXY(x,y,prec : integer; runflag : boolean);
// x,y - координаты, в которые идем
// prec - точность подхода
// runflag - бежать или идти
ЗЫ: Сослаться, что мол, шард кривой или стелс неправильно работает - это проще всего. Гораздо труднее понять, что в 99% случаев виноват кривой скрипт. Так что скрипты в студию.

Posted: 05.03.2008 20:56
by grundick
Как скажешь, белый хозяин...

Code: Select all

Program Resist;

  {$Include 'GotoXY.inc'}
  {$Include 'all.inc'}

Var
   xxMage,yyMage: integer;
   x0,x1,x2,y: integer;
Const
   Gloves=$13C6;

Procedure InitCoord;
Begin
repeat
AddToSystemJournal('Считываем координаты мага ...');
xxMage:=myStrToInt(GetGlobal('stealth','xMage'));
yyMage:=myStrToInt(GetGlobal('stealth','yMage'));
Wait(2000);
until ((xxMage<>-666) AND (yyMage<>-666));
AddToSystemJournal('Координаты мага инициализированы. X='+IntToStr(xxMage)+', Y='+IntToStr(yyMage));
x0:=xxMage-2;
x1:=xxMage;
x2:=xxMage+2;
y:=yyMage+3;
end;

Procedure CheckSkill;
Begin
If GetSkillValue('Magic Resistance')>=100 then
    begin
    GotoXY(xxMage,yyMage+2,0,false);
    SetGlobal('stealth','TargetStatus','STOP');
    FullllDisconnect;
    raiseException(erCustomError,'Скилл достиг максимума!');
    end;
End;

Procedure CheckHealth;
Begin
If Life<80 then 
   begin
   AddToSystemJournal('Со здоровьем совсем хреновенько! Выходим из огня! ');
   GotoXY(xxMage,yyMage+2,0,false);
   While (Life<>STR) do Wait(500);
   end;
end;


BEGIN
WaitConnection(3000);
SetARStatus(true);
InitCoord;
SetGlobal('stealth','ResistTargetID',IntToStr(self));
SetGlobal('stealth','TargetStatus','Ready');
While Not Dead do
    begin
    If Connected then 
        begin
	CheckSkill;
	PutTheGloves;
	UOSay('.resync');
        Wait(300);
	
	CheckHealth;
	GotoXY(x0,y,0,false);
        
	CheckHealth;
	GotoXY(x1,y,0,false);
	
	CheckHealth;
	GotoXY(x2,y,0,false);
	end
    Else 
        Wait(3000);
    end;
If Dead then 
   begin
   AddToSystemJournal('Я  ПОДОХЛА!!');
   PlayWav('death2.wav');
   Exit;
   end;
END.

Ребят, я прекрасно понимаю как пользоваться вашими функциями.Кстати, в ходилке СамБоди расстояние между точками рассчитывается неверно.Кв Корень не катит...

Posted: 06.03.2008 2:06
by Edred
Ну, я, конечно, сделал бы не так, но неважно. Ошибок не вижу. Правда, я не вижу и скрипта, который кастует фаерфилд в координату yyMage+3. Плюс есть еще какая-то PutTheGloves, но она явно не влияет. Перчатки чар что ли какие надевает? :lol: По названию похоже...

Кидай скрипт второго чара на каст. А вообще, если нет ошибок, подумай об обходном маневре. Легко ведь можно вычислить, попал чар в стенку или нет. Если, как у тебя получается, он ошибся на 1 линию, ну что ж, засекаем здоровье, пробегаемся, если здоровье не изменилось - надо попробовать сдвинуться по оси Y... Сначала в одну сторону, потом в другую... И все ок, чар будет сам подстраиваться под огненную стенку...

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

Posted: 06.03.2008 19:05
by grundick
Да, одевает перчатки когда скилл достигает 30%.Иначе скилл не растет.Перчатки дают +к резисту, потом он их снимает.Вырезал, это роли не играет.Вот кастер:

Code: Select all

program Resist_Mage;

{$Include 'all.inc'}

Const
   ReagsChest=$40028EC0;
   FFType=$3996;

   
Procedure CastFF;

Var
   STime: TDateTime;
Begin
FindType(FFType,ground);
AddToSystemJournal(IntToStr(FindCount)+' FireField tiles found');
UOSay('.resync');
Wait(700);
If FindCount<6 then
   Repeat
       STime:=Now;
       IF Mana<20 then Exit;
       Cast('Fire Field');
       WaitTargetTile(400,GetX(self),GetY(self)+3,GetZ(self));
       Wait(5000);
   Until (InJournalBetweenTimes('Заклинание не удалось!',STime,Now)=-1);
End;

Procedure CoordInit;
Begin
UOSay('.resync');
Wait(700);
SetGlobal('stealth','xMage',IntToStr(GetX(self)));
SetGlobal('stealth','yMage',IntToStr(GetY(self)));
End;

Procedure meditation;
VAR
STime:TDateTime;

Begin
repeat
  //AddToSystemJournal('Медитируем...') ;
  STime:=Now;
  SetWarMode(false);
  UseSkill('Meditation')
  wait(1500);
  WaitJournalLine(STime,'at peace.|прервана',60000); 
  If (InJournalBetweenTimes('прервана',STime,Now)<>-1) then Wait(500);
until (InJournalBetweenTimes('at peace',STime,Now)<>-1);   
end;

BEGIN
SetARStatus(true);
WaitConnection(2000);
FindDistance:=8;
FindVertical:=8;
CoordInit;

While Not Dead do
    begin
    If Connected then
        begin
	If (GetGlobal('stealth','TargetStatus')='STOP') then
	    begin
	    FullllDisconnect;
            raiseException(erCustomError,'Резист прокачан!');
	    end;
	LoadItem(BP,$FFFF,ReagsChest,40,10);
	LoadItem(SS,$FFFF,ReagsChest,40,10);
	LoadItem(SA,$FFFF,ReagsChest,40,10);
	CastFF;
	Meditation;
	Wait(100000); 
	end
    Else 
        Wait(30000);

    end;
END.
Вообще ситуацию я спасаю ресинками.Просто и доступно:)
Блин, почему тут отступы неверно отображаются?
А равмув я обвинить не могу.Я знаю значение координаты У, на закладке main отображается именно оно.Но бегает чар по соседним У.То есть равмув тут ни причем.Делаешь ресинк, маршрут выправляется...Пробегает пару "кругов"- и опять сбивается.

Posted: 09.11.2008 21:44
by grundick
И всё таки он глючит... Что ИЗЯ, что инжект показывают вернуюю координату!!! Стелс же ошибаеться на плис-минус единицу!!! Просто делаю реконект и стелс начинает правильно показывать её.
У фаерфильда Y=2000. Конекчюсь... Показывает Y=1999. Запускаю скрипт, чар делает один шаг, а стелсе координата Y оказывается равной 2001! За один шаг она увеличилась на две единицы! Чар из огня выскакивает на один тайл, теперь Y чара равно 2000... Делаю реконект, Y опять равно 1999.
ПС: ресинк отрубили ,суки...

Posted: 11.11.2008 17:34
by omi4
Ошибка действительно есть!!! И не только в Стелсе, Инжа тем же страдает. Ходилка это ух как не просто.

Posted: 08.12.2008 15:07
by Vladimirus
в инжекте спасает ,resend
в стелзе кроме как реконекта -выхода не нашел
еще интересное обновление координаты- z на лодке -2, он сходит с лодки, и z остается -2, хотя на самом деле у него она изменяется.
а самый ужасначинается при пробежках по пересеченной местности, скажем, по песчаным барханам- очень часто высота меняется и становится оч тяжело копать - в оригинале таргет кидался на мировые координаты + GetZ(self) -пишет что не может, т.к. точка не достежима - потому как копает где себя видит.а не там где на самом деле стоит...