Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Помогите оптимизировать.

Рег
5 Мар 2016
Сообщения
45
Реакции
0
var
obj: TL2NPC;
buff: TL2Effect;
Enemy: TL2Live;
procedure Dead();
begin
while 1<>2 do begin // бесконечный цикл
if not User.Buffs.Byid(276, buff) or User.Dead then begin
print('Умер либо кончился баф');
Engine.useitem(736);
Delay(20000);
engine.GoHome;
Engine.FaceControl(0, false);
Elven();
Dark();
spot();
end;
end;
end;
procedure Elven();
begin
if User.inrange(45409, 49673, -3064, 3550, 3550) then begin
Engine.MoveTo(46049, 50000, -3093);
Engine.MoveTo(46734, 50619, -3086);
Engine.MoveTo(46987, 50837, -3022);
Engine.MoveTo(46920, 51380, -3003);
begin
engine.settarget(12001);
delay(500);
engine.dlgopen();
engine.movetotarget(-20);
engine.dlgsel(3);
delay(1000);
engine.dlgsel(1);
end;
engine.settarget(36486);
delay(500);
engine.dlgopen();
delay(500);
engine.dlgsel(8);
delay(400);
engine.dlgsel(13);
end;
end;
procedure Dark();
begin
if user.inrange (10456,16971,-4610,3000,500) then begin // меняйте значение 1500 если не хочет идти, или другие проблемы
Engine.MoveTo(12127, 16773, -4610);
engine.settarget(12001);
delay(500);
engine.dlgopen();
engine.movetotarget(-20);
engine.dlgsel(3);
delay(1000);
engine.dlgsel(1);
if user.inrange (12127, 16773, -4610,500) then begin
engine.moveto(10055,16586,-4601);
engine.moveto(9690,15563,-4601);
engine.settarget(36486);
delay(500);
engine.dlgopen();
delay(500);
engine.dlgsel(8);
delay(400);
engine.dlgsel(13);
end;
end;
end;
procedure spot();
begin
if user.inrange (-22490, 13868, -3199,500) then begin
Engine.MoveTo(-22841, 13917, -3199);
Engine.MoveTo(-22861, 13634, -3485);
Engine.MoveTo(-22861, 13599, -3633);
Engine.MoveTo(-22731, 13493, -5162);
Engine.MoveTo(-22681, 13475, -5503);
Engine.MoveTo(-22325, 13488, -5058);
Engine.MoveTo(-21728, 13487, -4961);
Engine.MoveTo(-20508, 13489, -4946);
Engine.MoveTo(-19904, 13492, -4927);
engine.settarget(31118);
delay(500);
engine.dlgopen();
delay(500);
engine.dlgsel(1);
if user.inrange (-19392, 13500, -4896,300) then begin
Engine.MoveTo(-19085, 13595, -4925);
Engine.MoveTo(-19081, 14668, -4925);
Engine.MoveTo(-19090, 15145, -4925);
Engine.MoveTo(-19073, 16408, -4927);
Engine.MoveTo(-18711, 16709, -4927);
Engine.MoveTo(-18669, 17339, -4927);
Engine.MoveTo(-17871, 17369, -4925);
if user.InRange(-17871, 17369, -4925,300) then begin
Engine.FaceControl(0,true);
end;
end;
end;
end;
begin
Script.NewThread(@dead);
Elven();
Dark();
spot();
end.

Ну очень грузит процесор,переписал все с нуля и не знаю что мешает.
 
@Huckster, где задержка в бесконечном цикле? он у тебя молотит без малейших остановок
Код:
var 
	obj: TL2NPC;
	buff: TL2Effect;
	Enemy: TL2Live;
procedure Dead();
begin
while 1<>2 do begin   // бесконечный цикл
if not User.Buffs.Byid(276, buff) or User.Dead then begin
print('Умер либо кончился баф');
Engine.useitem(736);
Delay(20000);
engine.GoHome;
Engine.FaceControl(0, false);
Elven();
Dark();
spot();
end;
Delay(500);
end;
end;
procedure Elven();
begin
if User.inrange(45409, 49673, -3064, 3550, 3550) then begin
     Engine.MoveTo(46049, 50000, -3093);
     Engine.MoveTo(46734, 50619, -3086);
     Engine.MoveTo(46987, 50837, -3022);
     Engine.MoveTo(46920, 51380, -3003);
begin
engine.settarget(12001);
delay(500);
engine.dlgopen();
engine.movetotarget(-20);
engine.dlgsel(3);
delay(1000);
engine.dlgsel(1);
end;
engine.settarget(36486);
delay(500);
engine.dlgopen();
delay(500);
engine.dlgsel(8);
delay(400);
engine.dlgsel(13);
end;
end;
procedure Dark();
begin
if user.inrange (10456,16971,-4610,3000,500) then begin       // меняйте значение 1500 если не хочет идти, или другие проблемы
Engine.MoveTo(12127, 16773, -4610);
engine.settarget(12001);
delay(500);
engine.dlgopen();
engine.movetotarget(-20);
engine.dlgsel(3);
delay(1000);
engine.dlgsel(1);
if user.inrange (12127, 16773, -4610,500) then begin 
engine.moveto(10055,16586,-4601);   
engine.moveto(9690,15563,-4601); 
engine.settarget(36486);
delay(500);
engine.dlgopen();
delay(500);
engine.dlgsel(8);
delay(400);
engine.dlgsel(13);
end;
end;
end;
procedure spot();
begin
 if user.inrange (-22490, 13868, -3199,500) then begin
Engine.MoveTo(-22841, 13917, -3199);
Engine.MoveTo(-22861, 13634, -3485);
Engine.MoveTo(-22861, 13599, -3633);
Engine.MoveTo(-22731, 13493, -5162);
Engine.MoveTo(-22681, 13475, -5503);
Engine.MoveTo(-22325, 13488, -5058);
Engine.MoveTo(-21728, 13487, -4961);
Engine.MoveTo(-20508, 13489, -4946);
Engine.MoveTo(-19904, 13492, -4927);
engine.settarget(31118);
delay(500);
engine.dlgopen();
delay(500);
engine.dlgsel(1);
 if user.inrange (-19392, 13500, -4896,300) then begin
Engine.MoveTo(-19085, 13595, -4925);
Engine.MoveTo(-19081, 14668, -4925);
Engine.MoveTo(-19090, 15145, -4925);
Engine.MoveTo(-19073, 16408, -4927);
Engine.MoveTo(-18711, 16709, -4927);
Engine.MoveTo(-18669, 17339, -4927);
Engine.MoveTo(-17871, 17369, -4925);
if user.InRange(-17871, 17369, -4925,300) then   begin
Engine.FaceControl(0,true);
end;
end;
end;
end;
begin
Script.NewThread(@dead);
Elven();
Dark();
spot();
end.
 
begin
while 1<>2 do begin // бесконечный цикл
if not User.Buffs.Byid(276, buff) or User.Dead then begin
решил.
 
@Huckster, а где собственно разница? задержку ты не добавил, так и будет молотить проверку миллион раз в секунду. А в проверке у тебя ByID, который перебирает в цикле весь список...
 
@Krickt, как правильно изменить?
Поправь где не правильно,делейку добавил уже в своем скрипте с ид как правильно изменить?
 
Huckster написал(а):
как правильно изменить? Поправь где не правильно,делейку добавил уже в своем скрипте с ид как правильно изменить?
Я думаю нужно изменить так:
Код:
var
    obj: TL2NPC;
    buff: TL2Effect;
    Enemy: TL2Live;
procedure Dead();
begin
while 1<>2 do begin // бесконечный цикл
delay (5000);                                            тут поставить задержку, которая наиболее подойдет для тебя. Без задержки у тебя скрипт постоянно                                           
if not User.Buffs.Byid(276, buff) or User.Dead then begin                                                      проверяет условия, и это грузит процессор.
print('Умер либо кончился баф');
Engine.useitem(736);
Delay(20000);
engine.GoHome;
Engine.FaceControl(0, false);
Elven();
Dark();
spot();
end;
end;
end;
 
Krickt написал(а):
нужно в любых циклах while просто делать задержку.
Написал зацикленный скрипт:

Begin
while 1<>2 do begin
//тело скрипта
end.
Спустя некоторое время в логе появляется ошибка о нехватке памяти. Добавление задержки между зацикливанием и телом скрипта решит эту проблему?
 
Назад
Сверху