Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Подвисания стелса
Подвисания стелса
В общем смысл такой,5 персов-1 сервер,схожий скрипт копают руду но по разным точкам хотя приносят в 1 точку и так постоянно.
Примерно после часов 6 работы стелса он начинает сииииильно тормозить(по вкладкам долго переходит и тд.), бывает мол программа не отвечает(так пишет винда),но потом нормально, расчухивается секунд через 5.
Засекал в диспетчере задач что по началу стелс ест 11 мегобайт памяти,в конце 29.Вопрос почему и куда ушли эти метры может с этим связано подвисание?Стоит Windows 7.
Примерно после часов 6 работы стелса он начинает сииииильно тормозить(по вкладкам долго переходит и тд.), бывает мол программа не отвечает(так пишет винда),но потом нормально, расчухивается секунд через 5.
Засекал в диспетчере задач что по началу стелс ест 11 мегобайт памяти,в конце 29.Вопрос почему и куда ушли эти метры может с этим связано подвисание?Стоит Windows 7.
Логично предположить что нет,ибо только через несколько часов проявляются эффекты тормозов,скрипт просто зациклен копать пока не умрет персонаж,никаких записей в файлы и тд не делает.MuDaCK wrote:может быть проблема ещё и в скриптах.
Поправочка скрипт в очередной раз застопорился причем сразу на всех персонажах,как обычно в прочем,у 1 персонажа я нашол в журнале сообщение о поломаном предмете по скрипту он должен был бы его выкинуть если в журнале проскочит сообщение которое идет на обычном клиенте при попытке использовать поломанный предмет в стелсе оно не проходит,в журнале просто нет,но и скрипт стопорит после этого.добавил другое сообщение по которому тоже ясно что сломан предмет если не будет проблем значит мой скрипт все таки был кривой)
очень реально
цикл вида
без задержки внутри - приводит к 100% загружке ядра (либо одноядерного проца) + диким утечкам памяти - течет буквально везде.
цикл вида
Code: Select all
while true do
begin
какое_то_простое действие, либо несработавшее условие
end;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Vizit0r wrote:очень реально
цикл видабез задержки внутри - приводит к 100% загружке ядра (либо одноядерного проца) + диким утечкам памяти - течет буквально везде.Code: Select all
while true do begin какое_то_простое действие, либо несработавшее условие end;
Code: Select all
var a: integer;
Begin
a:=0;
while true do if (a = 1) then exit;
End.
Течь может только если в бесконечном цикле что-то создается, но не освобождается память потом .... например списки, которые часто создают через Create, но забывают потом вызвать конструктор Free, когда этот список уже ненужен
100% загрузка проца (на одноядерках) говорит только о том, что бесконечный цикл Pascal Scripts пытается занимать все процессорное время в случае когда оно не нужно другим приложениям ....
Может на старых одноядерных компьютерах будет слегка притормаживать, но тормозить тоже не должно. Сам тестил sleep(0) и рядом с ним цифра "20" была выбрана опытным путем, чтобы было более менее комфортно на AMD Duron 700 MHz (Windows XP) в то время ...
Code: Select all
program mining_ful;
type
ArrayType1 = Array of Word;
var
kamen : ArrayType1;
valun : ArrayType1;
k:integer;
ctime : TDateTime;
procedure eda();
begin
useobject($50D6EFE4);
wait(1000);
if(findtype($097B,$50D6EFE4)<>0)then
useobject(findtype($097B,$50D6EFE4));
end;
procedure ugol();
begin
if(findtype($19B8,backpack)<>0)then
repeat
moveitem(findtype($19B8,backpack),0,findtype($19B8,ground),0,0,0);
wait(1500);
until(findtype($19B8,backpack)=0);
if(findtype($0F3B,backpack)<>0)then
repeat
moveitem(findtype($0F3B,backpack),0,$53CFDE93,0,0,0);
wait(1500);
until(findtype($0F3B,backpack)=0);
end;
procedure instrument();
begin
if (count($10E7)<2)then
begin
useobject($53CE7E83);
repeat
moveitem(findtype($10E7,$53CE7E83),1,backpack,0,0,0);
wait(500);
until(count($10E7)>=2);
end;
if (count($0E85)<2)then
begin
useobject($53CE7E84);
repeat
moveitem(findtype($0E85,$53CE7E84),1,backpack,0,0,0);
wait(500);
until(count($0E85)>2);
end;
end;
procedure slitki();
begin
if(findtype($1BF2,backpack)<>0)then
repeat
moveitem(findtype($1BF2,backpack),0,$50F2203F,0,0,0);
wait(1500);
if (findtype($1BF2,ground)<>0)then
repeat
moveitem(findtype($1BF2,ground),0,backpack,0,0,0);
wait(1500);
until(findtype($1BF2,ground)=0);
until(findtype($1BF2,backpack)=0);
end;
procedure musor();
var
i:integer;
begin
kamen:=[$1771,$1772,$1773,$1774,$1775,$1776,$1777,$1778,$1779,$177a,$177b,$177c,$1363,$1364,$1365,$1366,$1367,$1368,$1369,$136a,$136b,$136c,$136d,$08E6,$3B0F];
for i:=0 to 24 do
if (findtype(kamen[i],backpack)<>0)then
repeat
drophere(findtype(kamen[i],backpack));
until (findtype(kamen[i],backpack)=0);
end;
procedure kamni();
var
i:integer;
begin
kamen:=[$1771,$1772,$1773,$1774,$1775,$1776,$1777,$1778,$1779,$177a,$177b,$177c,$1363,$1364,$1365,$1366,$1367,$1368,$1369,$136a,$136b,$136c,$136d,$08E6];
for i:=0 to 23 do
if (findtype(kamen[i],ground)<>0) then
repeat
ClearJournal;
ctime:= Now;
findtype($10E7,backpack);
useobject(finditem);
if (InJournalBetweenTimes('System: Этот предмет поломан, отнесите его мастеру',ctime,Now)<>-1) then
begin
drophere(finditem);
wait(3000);
ClearJournal;
end;
wait(500);
targettoobject(findtype(kamen[i],ground));
wait(500);
until ((findtype(kamen[i],ground)=0)or(InJournalBetweenTimes('That is not within your line of sight',ctime,Now)<>-1));
end;
procedure valuni();
var
i:integer;
begin
valun:=[$1362,$1361,$1355,$1356,$135B,$135A,$1360,$135F];
for i:=0 to 7 do
if (findtype(valun[i],ground)<>0) then
repeat
useobject(FindType($0E85,backpack));
wait(500);
targettoobject(findtype(valun[i],ground));
wait(500);
until (findtype(valun[i],ground)=0);
end;
procedure ruda();
begin
if (findtype($0F3B,ground)<>0) then
repeat
moveItem(findtype($0F3B,ground),1,backpack,0,0,0);
wait(500);
until(findtype($0F3B,ground)=0);
end;
procedure kopka();
var i,j:integer;
begin
repeat
for i:=-2 to 2 do
for j:=-2 to 2 do
begin
repeat
if (count($0E85)=0)then
exit;
ClearJournal;
ctime:= Now;
FindType($0E85,backpack);
useobject(finditem);
waitfortarget(500);
targettotile(1342,(getx(self))+i,(gety(self))+j,getz(self));
wait(5000);
if ((InJournalBetweenTimes('System: Этот предмет поломан, отнесите его мастеру',ctime,Now)<>-1)or
(InJournalBetweenTimes('System: Вы сломали кирка',ctime,Now)<>-1) or
(InJournalBetweenTimes('System: Вы сломали великолепная кирка',ctime,Now)<>-1)) then
begin
drophere(finditem);
wait(3000);
ClearJournal;
end;
until (InJournalBetweenTimes('Здесь больше нет руды',ctime,Now)<>-1) or
(InJournalBetweenTimes('Слишком далеко',ctime,Now)<>-1) or
(InJournalBetweenTimes('Вы не видите это место',ctime,Now)<>-1) or
(Weight+50>350) or (InJournalBetweenTimes('That is too far away',ctime,Now)<>-1);
musor();
valuni();
kamni();
if (Weight+50>350) then
exit;
end;
until(weight+50>350);
end;
procedure plavka();
begin
if (findtype($19B9,backpack)<>0) then
repeat
useobject(findtype($19B9,backpack));
targettoobject($543D1795);
wait(500);
until(findtype($19B9,backpack)=0);
end;
begin
repeat
k:=0;
useobject(backpack);
repeat
repeat
NewMoveXY(2315+k,816,true,1,false);
wait(2500);
until (((getx(self)=(2315+k-1))or(getx(self)=(2315+k+1))or(getx(self)=(2315+k)))and((gety(self)=(816-1))or(gety(self)=(816+1))or(gety(self)=(816))));
kopka();
repeat
NewMoveXY(2350,839,true,0,false);
wait(2500);
until ((getx(self)=2350)and(gety(self)=839));
repeat
NewMoveXY(2364,865,true,0,false);
wait(2500);
until ((getx(self)=2364)and(gety(self)=865));
repeat
NewMoveXY(2362,860,true,0,false);
wait(2500);
until ((getx(self)=2362)and(gety(self)=860));
plavka();
slitki();
eda();
ugol();
instrument();
repeat
NewMoveXY(2350,839,true,0,false);
wait(2500);
until ((getx(self)=2350)and(gety(self)=839));
k:=k+1;
until (k>=15);
UOsay('Циклимся');
until dead;
end.