Всем привет!
Возникла проблема с объединением скриптов.
Есть процедура создания нового списка
type
TL2CharListItem = packed record
Ch: TL2Char;
Rating: integer;
end;
TL2CharList = packed record
Items: array [0..1500] of TL2CharListItem;
Count: integer;
end;
var
i,j,n: integer;
Chars: TL2CharList;
Sorted: boolean;
Tmp: TL2CharListItem;
const
ClassPriorityList: array of integer = [
88, 4,
91, 4,
111,4,
94 ,3
];
procedure SortChars;
begin
end;
begin
while engine.status=lsonline do
begin
Chars.Count:= 0;
for i:= 0 to CharList.count - 1 do
begin
inc(Chars.Count);
Chars.Items.Ch:= CharList.items(i);
Chars.Items.Rating:= 0;
for j:= 0 to high(ClassPriorityList) do
begin
if (Chars.Items.Ch.ClassID = ClassPriorityList[j]) then
begin
Chars.Items.Rating:= ClassPriorityList[j+1];
break;
end;
inc(j);
end;
end;
// Сортируем
SortChars;
begin
n:= Chars.Count;
repeat
Sorted:= false;
Dec;
if n > 0 then
for i:= 0 to n - 1 do
if (Chars.Items.Rating < Chars.Items[i+1].Rating) then
begin
Tmp:= Chars.items;
Chars.items:= Chars.items[i + 1];
Chars.items[i + 1]:= Tmp;
Sorted:= true;
end;
until not Sorted;
end;
for i:=0 to Chars.Count -1 do
If Chars.Items.Rating>0 then
print(chars.items.ch.name);
delay(20000);
end;
end.
И допустим, есть процедура
procedure APContoller;
var
buff: TL2Buff;
begin
while Engine.Status = lsOnline do
begin
if not User.Dead and not User.Buffs.ById(337, buff) then
Engine.UseSkill(337);
delay(1000);
end;
end;
При попытке объединения данных скриптов через
begin
script.newthread(@Sortchars);
script.newthread(@APContoller);
end.
Работает только скрипт на создание нового списка.
При удалении
procedure SortChars;
begin //удаляем
end; //удаляем
begin
while engine.status=lsonline do
begin
Chars.Count:= 0;
for i:= 0 to CharList.count - 1 do
Скрипт ругается на строку (Stack Overflow)
// Сортируем
SortChars; // ругается
begin
n:= Chars.Count;
При ее удалении, список не сортируется, но работают 2 процедуры.
Вопрос. Как объединить эти 2 скрипта? Заранее спасибо за ответы.
Возникла проблема с объединением скриптов.
Есть процедура создания нового списка
type
TL2CharListItem = packed record
Ch: TL2Char;
Rating: integer;
end;
TL2CharList = packed record
Items: array [0..1500] of TL2CharListItem;
Count: integer;
end;
var
i,j,n: integer;
Chars: TL2CharList;
Sorted: boolean;
Tmp: TL2CharListItem;
const
ClassPriorityList: array of integer = [
88, 4,
91, 4,
111,4,
94 ,3
];
procedure SortChars;
begin
end;
begin
while engine.status=lsonline do
begin
Chars.Count:= 0;
for i:= 0 to CharList.count - 1 do
begin
inc(Chars.Count);
Chars.Items.Ch:= CharList.items(i);
Chars.Items.Rating:= 0;
for j:= 0 to high(ClassPriorityList) do
begin
if (Chars.Items.Ch.ClassID = ClassPriorityList[j]) then
begin
Chars.Items.Rating:= ClassPriorityList[j+1];
break;
end;
inc(j);
end;
end;
// Сортируем
SortChars;
begin
n:= Chars.Count;
repeat
Sorted:= false;
Dec;
if n > 0 then
for i:= 0 to n - 1 do
if (Chars.Items.Rating < Chars.Items[i+1].Rating) then
begin
Tmp:= Chars.items;
Chars.items:= Chars.items[i + 1];
Chars.items[i + 1]:= Tmp;
Sorted:= true;
end;
until not Sorted;
end;
for i:=0 to Chars.Count -1 do
If Chars.Items.Rating>0 then
print(chars.items.ch.name);
delay(20000);
end;
end.
И допустим, есть процедура
procedure APContoller;
var
buff: TL2Buff;
begin
while Engine.Status = lsOnline do
begin
if not User.Dead and not User.Buffs.ById(337, buff) then
Engine.UseSkill(337);
delay(1000);
end;
end;
При попытке объединения данных скриптов через
begin
script.newthread(@Sortchars);
script.newthread(@APContoller);
end.
Работает только скрипт на создание нового списка.
При удалении
procedure SortChars;
begin //удаляем
end; //удаляем
begin
while engine.status=lsonline do
begin
Chars.Count:= 0;
for i:= 0 to CharList.count - 1 do
Скрипт ругается на строку (Stack Overflow)
// Сортируем
SortChars; // ругается
begin
n:= Chars.Count;
При ее удалении, список не сортируется, но работают 2 процедуры.
Вопрос. Как объединить эти 2 скрипта? Заранее спасибо за ответы.