Page 1 of 2

Прокачка спирит спика

Posted: 27.09.2006 2:14
by Edred

Code: Select all

Program Spirit;

{$Include 'all.inc'}

var
k : integer;
ctime : TDateTime;

	procedure TrySpirit;
		begin
			repeat
				waitconnection(3000);
				ctime := Now;
				k := 0
				UseSkill('Spirit Speak');
				repeat
					wait(100);
					k := k + 1;
				until (InJournalBetweenTimes('You fail|You channel|You lack|You establish', ctime, Now)<>-1) or (Mana < (MaxMana - 50)) or (k > 300);
				wait(500);
				If (InJournalBetweenTimes('You establish', ctime, Now)<>-1) then
				begin
					wait(5000);
					SetWarMode(true);
					wait(500);
					SetWarMode(false);
				end;
			until (Mana < (MaxMana - 50));
		end;

	procedure TryMedit;
		begin
			while (Mana < MaxMana) do
			begin
				waitconnection(3000);
				ctime := Now;
				k := 0
				UseSkill('Meditation');
				repeat
					wait(100);
					k := k + 1;
				until (InJournalBetweenTimes('reached full mana|lost', ctime, Now)<>-1) or (k > 600);
				wait(500);
			end;
		end;

Begin
	while not Dead do
	begin
		TrySpirit;
		TryMedit;
	end;
End.

Posted: 23.12.2006 22:55
by id
Что-то всё очень сложно в этом скрипте.
Надо только проверять если скилл не удалось заюзать (You fail your attempt at contacting the netherworld.), то повторить ещё раз через 3 секунды, если удалось (You establish a connection to the netherworld.), то следующий раз через 5 минут + 10 сек на всякий случай.

Это для ДРВ :)

Posted: 24.12.2006 0:25
by Edred
А приведенный выше скрипт написан для Форест Варз. Тупой скрипт, я давно его переписал на каст стрелки в себя и лечение спиритом.

Posted: 24.12.2006 10:18
by id
Попытался переписать так, как я описал. Не хочет компилиться:

Code: Select all

Program Spirit; 

{$Include 'all.inc'} 

var 
k : integer; 
ctime : TDateTime;
const fizzle = 'You fail your attempt';
const success = 'You establish a connection';

procedure SpSpeak;
begin
	ClearJournal;
	repeat
		UseSkill('Spirit Speak');
		k := 1;
		repeat
			Wait(100);
			k: = k+1;
		until (InJournal(fizzle|success)>0) OR k>600	
	until InJournal(success)	
end;

procedure UseSp;
begin
	SpSpeak;
	ctime := Now;
		if (Now-ctime)/600>5 then
		begin
			SpSpeak;
			ctime = Now;
		end
		else
		Wait(500);		
end;

begin
   while not Dead do 
   begin 
      UseSp; 
   end;
End. 
В чем ошибка? Подскажи, пожалуйста.
Стелс пишет так: Compiler: [Error] (spirit_speak.sc at 19:5): Assignment expected

Posted: 24.12.2006 20:15
by Edred
В чем ошибка? Подскажи, пожалуйста.
Стелс пишет так: Compiler: [Error] (spirit_speak.sc at 19:5): Assignment expected
Стелс же тебе говорит, рой строку 19, позицию 5 (табуляции считаются за один знак каждая).

Code: Select all

k: = k+1;
Зачем здесь пробел? Пробел - это разделитель, а оператор присваивания

Code: Select all

:=
Но у тебя быстрее всего могут еще вылезти проблемы в строке:

Code: Select all

if (Now-ctime)/600>5 then
Паскаль строго, в отличие от других языков, относится к типам переменных. Ты здесь из TDateTime вычитаешь TDateTime (нормально), потом делишь на Integer (плохо) и сравниваешь с Integer. Я не уверен, что Паскаль сам по дороге преобразует типы, быстрее всего он ругнется. Смотри функции преобразования типов, топик "все функции" в разделе Help. Тебе надо отказаться от деления (зачем оно?) и сравнивать результат с 5 минут.

Кроме того, не забывай такую вещь:

В инжекте:

Code: Select all

=	присваивание
==	сравнение
В паскале:

Code: Select all

:=	присваивание
=	сравнение
Вот это - неверно:

Code: Select all

ctime = Now;

Posted: 24.12.2006 22:22
by id
В принципе всё, что ты сказал - я знал, просто я не внимательный какой-то :)
Спасибо, что направил. Попробую завтра переписать, сейчас нет настроя)

Posted: 26.12.2006 17:35
by id

Code: Select all

Program Spirit; 

{$Include 'all.inc'} 

var 
k : integer; 
ctime : TDateTime; 
const fizzle = 'You fail your attempt'; 
const success = 'You establish a connection'; 

procedure SpSpeak; 
begin 
   ClearJournal; 
   repeat 
      UseSkill('Spirit Speak'); 
      k:= 1; 
      repeat 
         Wait(100); 
         k:= k+1; 
      until (InJournal(success+'|'+success)>0) OR k>600    
   until InJournal(success)    
end; 

procedure UseSp; 
begin 
   SpSpeak; 
   ctime:= Now; 
      if (Now-ctime)%600>5 then 
      begin 
         SpSpeak; 
         ctime: = Now; 
      end 
      else 
      Wait(500);       
end; 

begin 
   while not Dead do 
   begin 
      UseSp; 
   end; 
End.
Стелс: Compiler: [Error] (sspeak2.txt at 20:52): Type mismatch

Опять не понятно в чём ошибка.
Вижу ошибку: типы не совпадают в этой строке: until (InJournal(success+'|'+success)>0) OR k>600, но в чём здесь дело?

PS. И вобще логика моего скрипта правильная для моего описания?

Заранее спасибо.

Posted: 26.12.2006 18:15
by Edred
Точки с запятой за тебя кто ставить будет?

ЗЫ: Если ты опять ответишь, что ты все это знал, но просто невнимателен - следующую подсказку получишь через месяц после вопроса. Вижу у тебя в скрипте еще одну описку - не скажу, сам смотри.

Posted: 26.12.2006 19:16
by id
Опять же я сейчас не могу проверить скрипт, я дома, а качаться оставляю на работе :)
Но попробую головой, не забитой работой подумать:
1. Точки с запятой после обеих строк:

Code: Select all

until (InJournal(success+'|'+success)>0) OR k>600    
   until InJournal(success)  
я ставил.
2. Наверно опечатка тут:

Code: Select all

until (InJournal(success+'|'+success)>0) OR k>600 
Надо

Code: Select all

k>600
брать в скобки.
3. И вот здесь опять опечаточка:

Code: Select all

ctime: = Now;
Вроде больше ничего не вижу.
Ответь пожалуйста на мой предидущий вопрос: логика того, что я хочу вобще верно реализована?

Posted: 26.12.2006 23:10
by Edred
Логику не смотрел и смотреть не буду, тут уж сам. Точки с запятой ставил - зачем убрал? Без них работать не будет. В скобки взять - рекомендуется. Опечатки - это на твоей совести. Есть у тебя там описка (не опечатка), которая работать скрипту мешать не будет, но скрипт будет работать криво. Так что тренируй внимательность.

to ALL: Не подсказывать!

Posted: 26.12.2006 23:40
by SLAK
Edred wrote: to ALL: Не подсказывать!
Хе-хе... Вижу растиш нового скриптёра :)

Posted: 27.12.2006 10:18
by id
Вроде написал нормально. Переделал полностью.
В этом значительно легче писать оказалось :)
http://img404.imageshack.us/img404/604/stealthbp7.png

А проверить не могу пока из-за этой проблемы: http://stealth.od.ua/forum/viewtopic.php?t=819
Проверю и покажу.

Posted: 27.12.2006 14:32
by id
Проверил. Работает как-то не совсем однозначно. Ошибок нет. Что-то не так в логике.

Code: Select all

Program Spirit;

{$Include 'all.inc'}

var
ctime : TDateTime;
const fizzle = 'You fail your attempt';
const success = 'You establish a connection';

procedure SpSpeak;
begin
	ClearJournal;
	repeat
		UseSkill('Spirit Speak');
		Wait(1000);
	until InJournal(success)<=0;
	ctime:=Now;
end;

begin
	SpSpeak;
	while not Dead do
	begin
		if Trunc((Now-ctime)/600)>5 then SpSpeak else wait(500);
	end;
End.
Прошу консультации :)

Posted: 27.12.2006 14:52
by Miralex
Постоянно чистить журнал - не удачный вариант. Используй временные сканирования журнала с помошью InJournalBetweenTimes.

Posted: 27.12.2006 14:57
by id
Спасибо. Исправился сам после того, как внимательно прочитал этот топик: http://stealth.od.ua/forum/viewtopic.php?t=475