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

Мой скрипт на спаринг. Нужна помощь экспертов !!!

тут можно задать вопрос по скриптингу
Post Reply
Brutus
Posts: 9
Joined: 13.11.2005 19:01
Contact:

Мой скрипт на спаринг. Нужна помощь экспертов !!!

Post by Brutus »

program fighter;
var i:Integer;
{$Include 'all.inc'}
Const
naparnik = $012EB700;
dager = $0F51;
binti = $0E21;
ghost = $0193;

procedure fight(object:Cardinal);
begin
If (GetHp(self)>((0.5)*GetMaxHp(self))) and (GetHp(object)>((0.5)*GetMaxHp(object))) then begin attack(object); end
else SetWarMode(false);
end;

procedure heal(object:Cardinal);
begin
if GetHp(object)<GetMaxHP(object) then begin
Useobject(FindType(binti,ground));
waittargetobject(object);
CheckTargetError(2,2);
WaitJournalLine(now,'you have healed', 14000);
end
end;

procedure reshim(object:Cardinal);
begin
If IsDead(object) then begin
FindType(ghost,ground); AddToSystemJournal('RESHIM');
heal(finditem);
end
end;

procedure resself;
begin
if dead then begin
UOSay('.forgivethee');
SetWarMode(true);
waitgump('1');
AddToSystemJournal('RESSELF');
while dead do
begin
wait(1000)
end;
end
end;

Begin
SetARStatus(true); finddistance:=2;
while connected do begin
for i:=1 to 7 do begin
while not dead do begin
checksave; wait(100);
//checkeq;
wait(100);
fight(naparnik); wait(200);
heal(naparnik); wait(200);
reshim(naparnik); wait(200);
end;
resself;
end;
Hungry(1,ground)
end;
End.
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Телепатов нету. И в чем нужна помощь?



Несколько замечаний по скрипту:
1. По поводу Include:
Сначала Type, Var, Const а потом Include!

2. GetHp(object)
Чтобы получить GetHp(object) - необходимо "вытянуть" полоску со ХП чара. Стелс клиент покачто это делать не умеет.
Brutus
Posts: 9
Joined: 13.11.2005 19:01
Contact:

Post by Brutus »

15:32:45: Compiling
15:32:45: Compiled succesfully
15:32:46: Exception: Type Mismatch at 28.131
15:32:46: Script fighter1.txt stoped successfuly

что-то я не могу понять, где там ошибка...???
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Тоже не могу понять.
Компилятор вон тебе сказал, что ошибка в 28-й строке. А что это за строка - не знаю.
Brutus
Posts: 9
Joined: 13.11.2005 19:01
Contact:

Post by Brutus »

видимо это баг стелса..... :( :( :(

и никто мне не может помочь.....
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Нет, это нежелание пользователя выдать информацию о проблеме.
Brutus
Posts: 9
Joined: 13.11.2005 19:01
Contact:

Post by Brutus »

компилятор ругается на 28 строчке:

procedure reshim(object:Cardinal);
begin //28 строчка
If IsDead(object) then begin
FindType(ghost,ground); AddToSystemJournal('RESHIM');
heal(finditem);
end
end;
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Post by Alex »

не хватает точки с запятой в предпоследнем end`е
Brutus
Posts: 9
Joined: 13.11.2005 19:01
Contact:

Post by Brutus »

поставил точку с запятой - та же ошибка, там не в точке с запятой дело...
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Очень большое подозрение, что у тебя не 0.95-я версия Stealth клиента.
У меня на 0.95-й откомпилировалось без проблем.
Brutus
Posts: 9
Joined: 13.11.2005 19:01
Contact:

Post by Brutus »

именно 0.95, на дриме ниже запрещено
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

В процессе компиляции проблем нету.
Проблема есть и она возникает именно в процессе работы.

Code: Select all

If (GetHp(self)>((0.5)*GetMaxHp(self))) and (GetHp(object)>((0.5)*GetMaxHp(object))) then
Суть в том, что Pascal Script не может сравнивать переменные различных типов. У тебя GetHp(self) имеет целочисленный тип, а (0.5)*GetMaxHp(self)) имеет вещественный тип. Тебе надо и то и другое привести к одному типу. Точнее необходимо просто целое число умножить на (1.0) и оно станет вещественным.

В результате будет:

Code: Select all

If ((1.0)*GetHp(self)>((0.5)*GetMaxHp(self))) and ((1.0)*GetHp(object)>((0.5)*GetMaxHp(object))) then
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

не легче просто разделить на 2 а не умножать на 0,5....
Dex
Posts: 5
Joined: 27.12.2005 22:37

Post by Dex »

ParadoX wrote:не легче просто разделить на 2 а не умножать на 0,5....
Есть такой раздел в программировании - "Оптимизация". Так вот операция деления отнимает больше времени, чем умножения.
И как раз замена "деления на 2" "умножением на 0.5" является классическим примером. :D
P.S. Тестовый чар на шарде Nova:
212.1.224.60 порт 2593
Поля логина и пароля оставить пустыми.
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

хех.. да асм это моя слабость... уже два раза неугадывал что быстрее :evil:

вопрос - проще заного присвоить переменной значение или сделать проверку на схожесть ? :roll: ваще щас занимаюсь таким занимательным делом... рисую график с хДС чтобы еще и маштаб можно было менять :) полиномы лагранжа рулят...
Post Reply