Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

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

Only working scripts
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

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

Post 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.
id
Neophyte
Neophyte
Posts: 30
Joined: 23.12.2006 22:37

Post by id »

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

Это для ДРВ :)
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

А приведенный выше скрипт написан для Форест Варз. Тупой скрипт, я давно его переписал на каст стрелки в себя и лечение спиритом.
id
Neophyte
Neophyte
Posts: 30
Joined: 23.12.2006 22:37

Post 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
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post 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;
id
Neophyte
Neophyte
Posts: 30
Joined: 23.12.2006 22:37

Post by id »

В принципе всё, что ты сказал - я знал, просто я не внимательный какой-то :)
Спасибо, что направил. Попробую завтра переписать, сейчас нет настроя)
id
Neophyte
Neophyte
Posts: 30
Joined: 23.12.2006 22:37

Post 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. И вобще логика моего скрипта правильная для моего описания?

Заранее спасибо.
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

Точки с запятой за тебя кто ставить будет?

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

Post 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;
Вроде больше ничего не вижу.
Ответь пожалуйста на мой предидущий вопрос: логика того, что я хочу вобще верно реализована?
Edred
Moderator
Moderator
Posts: 559
Joined: 28.03.2006 21:29

Post by Edred »

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

to ALL: Не подсказывать!
SLAK
Novice
Novice
Posts: 65
Joined: 15.01.2006 3:20

Post by SLAK »

Edred wrote: to ALL: Не подсказывать!
Хе-хе... Вижу растиш нового скриптёра :)
id
Neophyte
Neophyte
Posts: 30
Joined: 23.12.2006 22:37

Post by id »

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

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

Post 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.
Прошу консультации :)
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Постоянно чистить журнал - не удачный вариант. Используй временные сканирования журнала с помошью InJournalBetweenTimes.
Last edited by Miralex on 28.12.2006 14:11, edited 1 time in total.
id
Neophyte
Neophyte
Posts: 30
Joined: 23.12.2006 22:37

Post by id »

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