Page 1 of 1

Помогите со скриптом на таминг

Posted: 04.08.2017 12:11
by Faifer
На части персонажей работает нормально, на части нехочет. Для каждого персонажа либо отдельный домик, либо отдельный угол в касле обгороженый сундуками(в касле какраз работает), а в домиках нет...

Я боюсь что проблема с перебором - я его както неправильно прописал?

Code: Select all

Program Animal_Taming; //v1.3h
{$Include 'checksave.inc'}

const
animal=$0295eab1;

var
ctime : TDateTime;
animal_type : array [1..4] of Byte;
i : Integer;

BEGIN
animal_type[1] := $00CC   // коричневая лошадь
animal_type[2] := $00E2   // серая лошадь
animal_type[3] := $00C8   // обычная лошадь
animal_type[4] := $00E4   // лошадь-медведь

FindDistance := 10
FindVertical := 20
i := 1

SetARStatus(True);
SetPauseScriptOnDisconnectStatus(True);
SetWarMode(False);

while (Dead = False) do 
begin
	if (i > 0) and (i <= 4) then
	begin
	while FindTypeEX(animal_type[i], $FFFF, Ground, False) <> 0 do
		begin
		CheckSave;
		if TargetPresent then CancelTarget;
		UseSkill('Animal Taming');       
		WaitTargetObject(FindItem); 
		repeat
			wait(100);
			CheckSave;
		until (InJournalBetweenTimes('полюбило вас.|Вы не в состоянии|уже приручили.|fail to tame', ctime, Now) <> -1);
		wait(100);

		If (InJournal('полюбило вас.|Это существо уже приручили.') <> -1) then UoSay('all release');
		wait(100);
		ClearJournal;
		end;
	end;
end;
END.

Re: Помогите со скриптом на таминг

Posted: 04.08.2017 18:37
by GeeZeR
Ну у тебя i всегда равно "1" в этом скрипте, и если рядом с персом нет лошади с типом animal_type[1] := $00CC, то while (Dead = False) просто будет крутить пустоту в вечном цикле пока перс не умрёт.

Зачем тебе странная вещь типа i := 1 и начинать заполнять массив со второго по счёту индекса (т.е. не с ноля, а с 1)?

Code: Select all

animal_type : array [1..4] of Byte
тип данных поставь Word
Faifer wrote:Я боюсь что проблема с перебором
Да, у тебя его вообще нет, вместо

Code: Select all

if (i > 0) and (i <= 4) then
напиши

Code: Select all

for i:=1 to High(animal_type) do begin

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 2:10
by Faifer
Привет) Спасибо)

Я думал оно возьмёт i=1 как старт и переберет до 4 =))
Можешь смеяться но без строчки i := 1 скрипт нехотел работать)) А слепил я его из нескольких кусков с других скриптов) когдато я лучше шарил, но сейчас заново учусь)

Вобщем благодаря твоей подсказке получилось так:

Code: Select all

Program Animal_Taming; //v1.4h
{$Include 'checksave.inc'}

const
animal=$0295eab1;

var
ctime : TDateTime;
animal_type : array [1..4] of Word;
i : Integer;

BEGIN
animal_type[1] := $00CC   // коричневая лошадь
animal_type[2] := $00E2   // серая лошадь
animal_type[3] := $00C8   // обычная лошадь
animal_type[4] := $00E4   // лошадь-медведь

SetARStatus(True);
SetPauseScriptOnDisconnectStatus(True);
SetWarMode(False);

while (Dead = False) do 
begin
	for i:=1 to High(animal_type) do begin
	while FindTypeEX(animal_type[i], $FFFF, Ground, False) <> 0 do
		begin
		CheckSave;
		if TargetPresent then CancelTarget;
		UseSkill('Animal Taming');       
		WaitTargetObject(FindItem); 
		repeat
			wait(100);
			CheckSave;
		until (InJournalBetweenTimes('полюбило вас.|Вы не в состоянии|уже приручили.|fail to tame', ctime, Now) <> -1);
		wait(100);

		If (InJournal('полюбило вас.|Это существо уже приручили.') <> -1) then UoSay('all release');
		wait(100);
		ClearJournal;
		end;
	end;
end;
END.
Так лучше или можно еще улучшить?
Я вот думаю надо еще прикрутить проверялку на уровень скила и чтобы оно выборочно определяло цель.
Например до 72.5% качать на хорсе, если уже 72.5% и нету других животных то выключать чара и макрос, а если в радиусе есть мустанг то отмечать ему приоритет начиная с 70% до 90% например, дальше зоста, а после 99% медведя - както примерно так.

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 11:44
by GeeZeR
Ты время не засёк для проверки в журнале, ctime:=Now; сделай перед UseSkill('Animal Taming');
Проверялку можно конечно сделать если ты знаешь какой тип животных на каком скиле лучше тамить сделай простую проверку: если скилл такой-то то тамить животных с таким-то типом.

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 12:14
by Faifer
У меня проблема - одновременно работает до 37 чаров, еще 8 шт стоят ничего не делают....

Поставил ctime:=Now; по твоему совету - стало еще хуже, поставил FindDistance := 3 и FindVertical := 20 чтобы искало только рядом(думал мб оно цепляется на лошадь с соседних домов) - тоже не помогает без ctime:=Now; и FindDistance := 3 хотябы 37 чаров качается...

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 12:21
by Faifer
Блин сейчас несклько раз перезапустил но то 10 то 15 первых работает остальные тупят...

Попробовал перезапускать последовательно скрипты - первых 36 заработало нормально, ещё 9 сколько раз не перезагружай не работает...

Оно тупо делает 2 записи
[13:20:53:601] System: Targeting cancelled.
[13:20:53:767] System: Какое животное попробуем приручить?
и всё...

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 12:22
by Faifer
Кстати подобная проблема была перед этим при прокачке Энимал лора - но он слишком быстро качался, я просто лишних чаров отключил с 100% скила и тогда остальные заработали тож...

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 15:23
by GeeZeR
да, можно и не засекать если ты чистишь журнал каждый раз, но лучше засекать, ты избавишься от лишнего кода на очистку, плюс у тебя останется вся инфа в журнале.
Faifer wrote:Блин сейчас несклько раз перезапустил но то 10 то 15 первых работает остальные тупят...

Попробовал перезапускать последовательно скрипты - первых 36 заработало нормально, ещё 9 сколько раз не перезагружай не работает...

Оно тупо делает 2 записи
[13:20:53:601] System: Targeting cancelled.
[13:20:53:767] System: Какое животное попробуем приручить?
и всё...
Короче, у тебя перебора никакого нет, while FindTypeEX(animal_type, $FFFF, Ground, False) <> 0 do всегда будет находить один и тот же тип i и ты его будешь постоянно тамить. Внешний цикл for i:=1 to High(animal_type) do begin не будет перебирать от 1 до 4, потому что сработает один раз, назначит переменной i значение "1" и просто будет ждать пока скрипт не выйдет из цикла while FindTypeEX(animal_type, $FFFF, Ground, False) <> 0 do, а он не выйдет потому что условий выхода нет, он всегда будет находить тип $00CC.

Эти лошади требуют разного скила? Если перс не может приручить animal_type[1] := $00CC, то блок

Code: Select all

      repeat
         wait(100);
         CheckSave;
      until (InJournalBetweenTimes('полюбило вас.|Вы не в состоянии|уже приручили.|fail to tame', ctime, Now) <> -1);
будет прерываться сразу по истечении 100 милисекунд и не дождётся результата второй попытки, потому что сразу найдёт строку в журнале "fail to tame | Вы не в состоянии", которая останется после первой неудачной попытки, потому что в условии на очистку журнала нет "fail to tame | Вы не в состоянии". Поэтому у тебя получается, что таминга не происходит, а скрипт постоянно юзает скилл UseSkill('Animal Taming');, выдаёт тебе мессаг "System: Какое животное попробуем приручить?" и перс ничего не делает. Короче проблема в том что перс не может затамить animal_type[1] := $00CC и стоит в вечном цикле.

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 18:14
by Faifer
Фишка в том что первые 35-36 чаров с конями разных видов все, но там всё нормально работает.... с твоей подсказкой переборка работает как надо. Там какойто глюк самого стелса, ведь подобное я наблюдал уже для других макросов.

Re: Помогите со скриптом на таминг

Posted: 05.08.2017 18:22
by GeeZeR
Тебе надо в массиве расположить зверей по степени сложности и в цикле где тамминг делать проверку, если скилл поднялся то прерывать цикл и тогда внешний цикл (for i:=1 to High(animal_type) do begin) увеличит i на 1 и ты будешь тамить следующий тип по порядку в массиве.

Re: Помогите со скриптом на таминг

Posted: 06.08.2017 2:32
by Faifer
диапазоны я примерно помню как делаются, разберусь с некоторыми техническими особенностями и буду дальше улучшать макрос.

Ты кстати ещё играешь? На одном из серверов завтра квестик, мне надо ещё 2х человек для прохождения(если что я могу дать чара...)