Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Что сделано не так?
Что сделано не так?
Program heal
begin
if (HP < MaxHP) then
uosay('.bandageself');
wait(4000);
End;
if (HP < 50) then // смысл этого в том, что бы пить поушен если нанесяно больше 50 повреждений
uosay('.drink greaterhealpotion');
wait(25000);
End;
if (HP < 60) then // смысл этого в том, что бы пить поушен если нанесяно больше 60 повреждений
uosay(',usetype 123123');
wait(20000);
End.
На практике полечается что, если чар получил дамаг, он хилится бинтами, и пьет поушен только при HP < 50.
Смысл в том что бы скрипт был постоянно в работе проверяя состояние чара, если снизились Хп, чарт лечился бинтами, а если получал 50 дамага и более пил поушен и юзал необходимый итем.
Все это в постоянном цикле.
На практике он не работает, что тут не так?
begin
if (HP < MaxHP) then
uosay('.bandageself');
wait(4000);
End;
if (HP < 50) then // смысл этого в том, что бы пить поушен если нанесяно больше 50 повреждений
uosay('.drink greaterhealpotion');
wait(25000);
End;
if (HP < 60) then // смысл этого в том, что бы пить поушен если нанесяно больше 60 повреждений
uosay(',usetype 123123');
wait(20000);
End.
На практике полечается что, если чар получил дамаг, он хилится бинтами, и пьет поушен только при HP < 50.
Смысл в том что бы скрипт был постоянно в работе проверяя состояние чара, если снизились Хп, чарт лечился бинтами, а если получал 50 дамага и более пил поушен и юзал необходимый итем.
Все это в постоянном цикле.
На практике он не работает, что тут не так?
Re: Что сделано не так?
тело скрипта не взято в тег скрипт.
И реализовывать это или через свой обработчик или с помощью евентов.
И реализовывать это или через свой обработчик или с помощью евентов.
Re: Что сделано не так?
1. Не было главного цикла, программа отработает один раз.iluha wrote:Program heal
begin
if (HP < MaxHP) then
uosay('.bandageself');
wait(4000);
End;
if (HP < 50) then // смысл этого в том, что бы пить поушен если нанесяно больше 50 повреждений
uosay('.drink greaterhealpotion');
wait(25000);
End;
if (HP < 60) then // смысл этого в том, что бы пить поушен если нанесяно больше 60 повреждений
uosay(',usetype 123123');
wait(20000);
End.
На практике полечается что, если чар получил дамаг, он хилится бинтами, и пьет поушен только при HP < 50.
Смысл в том что бы скрипт был постоянно в работе проверяя состояние чара, если снизились Хп, чарт лечился бинтами, а если получал 50 дамага и более пил поушен и юзал необходимый итем.
Все это в постоянном цикле.
На практике он не работает, что тут не так?
2. "End;" завершает составной блок операторов, а в начале блока "begin", вы его забыли написать.
Code: Select all
Program heal
begin
while true do
begin
if (HP < MaxHP) then
begin
uosay('.bandageself');
wait(4000);
End;
if (HP < 50) then // смысл этого в том, что бы пить поушен если нанесяно больше 50 повреждений
begin
uosay('.drink greaterhealpotion');
wait(25000);
End;
if (HP < 60) then // смысл этого в том, что бы пить поушен если нанесяно больше 60 повреждений
begin
uosay(',usetype 123123');
wait(20000);
End;
End;
End.
Re: Что сделано не так?
Macks , спасибо за помошь
Я так понял в этом скрипте будет использоваться если здоровье уподет ниже 50 Хп.
if (HP < 50) then // смысл этого в том, что бы пить поушен если нанесяно больше 50 повреждений
begin
uosay('.drink greaterhealpotion');
wait(25000);
End;
Как то можно сделать, что бы данное действие начиналось при потере этого кол-ва здоровья.
Вот пример, Чар с 250 Хп, в существующем скрипте при Хп ниже 50 будет использоваться вышеуказанное условие.
А как сделать условие, что бы при снижении на 50 Хп не зависимо от общего Объема жизни начиналось лечение?
Я так понял в этом скрипте будет использоваться если здоровье уподет ниже 50 Хп.
if (HP < 50) then // смысл этого в том, что бы пить поушен если нанесяно больше 50 повреждений
begin
uosay('.drink greaterhealpotion');
wait(25000);
End;
Как то можно сделать, что бы данное действие начиналось при потере этого кол-ва здоровья.
Вот пример, Чар с 250 Хп, в существующем скрипте при Хп ниже 50 будет использоваться вышеуказанное условие.
А как сделать условие, что бы при снижении на 50 Хп не зависимо от общего Объема жизни начиналось лечение?
Re: Что сделано не так?
Извини, вообще ничего не понял:)drabadan wrote:тело скрипта не взято в тег скрипт.
И реализовывать это или через свой обработчик или с помощью евентов.
Re: Что сделано не так?
if (hp < (maxhp-49)) theniluha wrote:Macks , спасибо за помошь
Я так понял в этом скрипте будет использоваться если здоровье уподет ниже 50 Хп.
if (HP < 50) then // смысл этого в том, что бы пить поушен если нанесяно больше 50 повреждений
begin
uosay('.drink greaterhealpotion');
wait(25000);
End;
Как то можно сделать, что бы данное действие начиналось при потере этого кол-ва здоровья.
Вот пример, Чар с 250 Хп, в существующем скрипте при Хп ниже 50 будет использоваться вышеуказанное условие.
А как сделать условие, что бы при снижении на 50 Хп не зависимо от общего Объема жизни начиналось лечение?
автор топика, как я понял, хочет асинхронный хил.
Re: Что сделано не так?
нужно попробывать и по тестить, спасибо Драбаданушка
Re: Что сделано не так?
Я так понимаю что цикл этого скрипта будет не прирывный, но если будет чар убит, эти условия будут выполняться?
если сделать вот так "while Dead = false do"
скрипт будет игнорить хил? а то получается будет грузить клиент в состоянии Гост
и паралельный вопрос, в процессе лечения .bandageself стоит задержка 4 сек. получается что в пределах 4 секунд если чар не отхилится будет накладываться новый бинт, но чар уже лечится бинтом.
Можно ли как то дополнить следующим условием if (InJournalBetweenTimes('You finish applying the bandages|You apply the bandages, but they barely help', ctimeq, Now)>= 0) then
если сделать вот так "while Dead = false do"
скрипт будет игнорить хил? а то получается будет грузить клиент в состоянии Гост
и паралельный вопрос, в процессе лечения .bandageself стоит задержка 4 сек. получается что в пределах 4 секунд если чар не отхилится будет накладываться новый бинт, но чар уже лечится бинтом.
Можно ли как то дополнить следующим условием if (InJournalBetweenTimes('You finish applying the bandages|You apply the bandages, but they barely help', ctimeq, Now)>= 0) then
Re: Что сделано не так?
https://ru.wikipedia.org/wiki/BbCodeiluha wrote:Извини, вообще ничего не понял:)drabadan wrote:тело скрипта не взято в тег скрипт.
И реализовывать это или через свой обработчик или с помощью евентов.
Code: Select all
[ code ] Моноширинный текст или web код[ / code ]
Re: Что сделано не так?
Я предпочитаю явно написатьiluha wrote:Я так понимаю что цикл этого скрипта будет не прирывный, но если будет чар убит, эти условия будут выполняться?
если сделать вот так "while Dead = false do"
скрипт будет игнорить хил? а то получается будет грузить клиент в состоянии Гост
Code: Select all
while Not Dead do
begin
end;
Можно, но нужно определить переменную соответствующего типа.iluha wrote:и паралельный вопрос, в процессе лечения .bandageself стоит задержка 4 сек. получается что в пределах 4 секунд если чар не отхилится будет накладываться новый бинт, но чар уже лечится бинтом.
Можно ли как то дополнить следующим условием if (InJournalBetweenTimes('You finish applying the bandages|You apply the bandages, but they barely help', ctimeq, Now)>= 0) then
Перед использованием бинта запомнить в ней(переменной) текущее время.
Использовать команду лечения бинтами.
Дать минимальную паузу для поступления в журнал сообщения.
А уже потом искать нужные строчки и на их основе ставить основную задержку.
Re: Что сделано не так?
Macks wrote:https://ru.wikipedia.org/wiki/BbCodeiluha wrote:Извини, вообще ничего не понял:)drabadan wrote:тело скрипта не взято в тег скрипт.
И реализовывать это или через свой обработчик или с помощью евентов.Code: Select all
[ code ] Моноширинный текст или web код[ / code ]
Code: Select all
Макс ты мой кумир
Спасибо
Re: Что сделано не так?
Развитие цивилизации возможно только при обмене опытом и передаче его новым поколениям.iluha wrote:Code: Select all
Макс ты мой кумир Спасибо
Re: Что сделано не так?
Максим подскажи следующее:Macks wrote:Развитие цивилизации возможно только при обмене опытом и передаче его новым поколениям.iluha wrote:Code: Select all
Макс ты мой кумир Спасибо
У меня есть 2а типа вещей, которые мне нужно искать в радиусе 5 тайлов, как только будет найден один из двух типов на него должен будет установиться таргет и выполниться условие (использовать на него предмет "яйцо" с задержкой в 500 мс, до тех пор пока в него не попадет "вы попали яйцом (надпись из журнала)" и скрипт останавливатся)
если предмет из радиуса поражения (5 тайлов) вышел, то поиск начинается с начала.
Code: Select all
Program search;
const
FindDistance:=5
type
a=$1542
b=$1256
c=$1436
begin
if WaitTargetGround (a,b,c) then useobject ('eggs');
Wait (500);
Re: Что сделано не так?
iluha wrote:Максим подскажи следующее:
У меня есть 2а типа вещей, которые мне нужно искать в радиусе 5 тайлов, как только будет найден один из двух типов на него должен будет установиться таргет и выполниться условие (использовать на него предмет "яйцо" с задержкой в 500 мс, до тех пор пока в него не попадет "вы попали яйцом (надпись из журнала)" и скрипт останавливатся)
если предмет из радиуса поражения (5 тайлов) вышел, то поиск начинается с начала.
начало правильное или бредятина?Code: Select all
Program search; const FindDistance:=5 type a=$1542 b=$1256 c=$1436 begin if WaitTargetGround (a,b,c) then useobject ('eggs'); Wait (500);
Code: Select all
Program search;
const
MyFindDistance = 5
ItemType1 = $1542
ItemType2 = $1256
EggsType = $1436
begin
FindDistance := MyFindDistance;
while Not Dead do
begin
if FindType(ItemType1, Ground) > 0 or FindType(ItemType2, Ground) > 0 then
begin
while ((IsObjectExists(FindItem)) and (Dist(GetX(FindItem), GetY(FindItem), GetX(Self), GetY(Self)) <= MyFindDistance)) do
begin
if TargetPresent then CancelTarget;
WaitTargetObject(FindItem);
UseType(EggsType, $ffff);
Wait (500);
end;
end;
Wait (500);
end;
end.
Re: Что сделано не так?
Претензия на ассинхронный хил. Как он работает не знаю, общая идея возникла, решил реализовать.
Может, у кого есть возможность потестировать - потестируйте.
Может, у кого есть возможность потестировать - потестируйте.
Code: Select all
program asyncHealer;
type
TTimer = record
Ticks : Integer;
MaxTicks : Integer;
Enabled : Boolean;
end;
var
Timers : Array of TTimer;
procedure InitTimer(Timer : TTimer; MaxTicks : Integer);
begin
Timer.Ticks := 0;
MaxTicks := MaxTicks;
Timer.Enabled := False;
end;
procedure InitVars;
begin
SetLength(Timers, 3);
InitTimer(Timers[0], 40);//bandage
InitTimer(Timers[1], 250);//gh
InitTimer(Timers[2], 200);//item
end;
procedure HealSelf;
begin
if (HP < MaxHP) and (not Timers[0].Enabled) then begin
UOSay('.bandageself');
Timers[0].Enabled := True;
end;
if (HP < 50) and (not Timers[1].Enabled) then begin
UOSay('.drink greaterhealpotion');
Timers[1].Enabled := True;
end;
if (HP < 60) and (not Timers[1].Enabled) then begin
UOSay(',usetype 123123');
Timers[2].Enabled := True;
end;
end;
procedure TimerProc;
var
i : Integer;
begin
for i := 0 to 2 do
if (Timers[i].Enabled) then begin
Timers[i].Ticks := Timers[i].Ticks + 1;
if (Timers[i].Ticks >= Timers[i].MaxTicks) then
Timers[i].Enabled := False;
end;
end;
begin
SetEventProc(evTimer1, 'TimerProc');
while true do wait(50);
end.