PDA

Просмотр полной версии : Проблема с l2phx и L2


8tomat8
18.03.2009, 01:50
когда я на ночь ставлю работать скрипт на заточку то утром обнаруживаю ошибку о недостатке виртуальной памяти. Память увеличил(с другого диска добавил 4Гб памяти) всеравно при загружености на все 2гб(стандартной с диска С) вылетает ошибка:( подскажите может кто то сталкивался

ratvier
18.03.2009, 15:01
А если просто клиент на ночь оставить в том месте?

lexayar
18.03.2009, 18:03
Сколько же у тебя заточек, у меня обычно минут через 10 все заканчиваются:)
Возможно скрипт с утечкой написан. А может в Пакетхаке утечка.
Выложи хоть скрипт посмотреть.

8tomat8
20.03.2009, 22:08
А если просто клиент на ночь оставить в том месте?
Да все великолепно пашит


Сколько же у тебя заточек, у меня обычно минут через 10 все заканчиваются
Возможно скрипт с утечкой написан. А может в Пакетхаке утечка.
Выложи хоть скрипт посмотреть.
Заточок - 10шт каждий раз как заканчиваются)

А скрипт от NLObP, только старый, поскольку на сервере при поломке оружия оно сбрасивается не на 0 а на 10) и новый скрипт подвисает((

program zatochka_IL;


const
Name='To4uJIa'; //Вписать сюда имя чара
ScrollID=6577; //957 ScrollID скролла заточки
ItemID=6598; //129 ItemIDID затачиваемого предмета
MaxEnchLvl=100;//уровень заточки который требуется достич
max=130; //количество слотов в инвентаре чара, максимально - 250

var
ItemBase: array[1..2,1..max] of integer; //ItemID ObjID, lvl
ScrollBase: array[1..max] of integer; //Scroll
add: boolean; //прошла заточка?
timer: TTimer;
CurEnchLvl, ColvoItem, ColvoScrl, CurItem, CurScrl: integer;
SocialID:integer; // вспомогательная

procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimerHP;
timer.enabled:=false;
timer.interval:=350; //время задержки
add:=false;
for i:=1 to max do begin
//очищаем масив
//Say('очищаем масив');
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
end;

//Пакет RequestItemList
buf:=hstr('0F');
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure Free; //Вызывается при выключении скрипта
begin
ItemBase:=nil;
ScrollBase:=nil;
timer.Free;
end;

//************************************************** ****************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;

//************************************************** ****************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
i, ss, ww, j, ObjID, ItmID, lvl, ListCount: integer;
begin
ss:=1; //индекс в массиве скроллов
ww:=1; //индекс в массиве предметов
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
if ListCount>max then ListCount:=max;
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
ObjID:=ReadD(j); //ObjectID
ItmID:=ReadD(j); //ItemID
j:=j+14;
Lvl:=ReadD(j); //Level
case ItmID of
ScrollID: begin
ScrollBase[ss]:=ObjID;
inc(ss);
////// !!!!!!!!!!! Say('ColvoScrl='+IntToStr(ss)); !!!!!!!!!!!!!!!!!! ////
end;
ItemID: begin
ItemBase[1,ww]:=ObjID;
ItemBase[2,ww]:=lvl;
inc(ww);
///// !!!!!!!!!!!!!!! Say('ColvoItem='+IntToStr(ww)); !!!!!!!!!!!!!!!! /////
end;
end;
j:=j+10;
end;
ColvoItem:=ww-1;
ColvoScrl:=ss-1;
Say('>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;

//************************************************** ****************************
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ss, ww, ObjID, ItmID, Lvl, ListCount, UpdType: integer;
begin
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
// Say('Апдейт базы!');
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
j:=j+14;
Lvl:=ReadH(j);
Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
case UpdType of
1:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem+1;
Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
for ii:=1 to max do
if ItemBase[1,ii]=0 then begin ItemBase[1,ii]:=ObjID; ItemBase[2,ii]:=lvl; end;
end;
ScrollID: begin
ss:=ss+1;
Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
for ii:=1 to max do if ScrollBase[ii]=0 then ScrollBase[ii]:=ObjID;
end;
end;
2:case ItmID of
ItemID:
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then ItemBase[2,ii]:=lvl;
ScrollID:
Say('Внимание! Изменения в скролле!?');
end;
//удален
3:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem-1;
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin ItemBase[1,ii]:=0; ItemBase[2,ii]:=0; end;
Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
end;
ScrollID: begin
ColvoScrl:=ColvoScrl-1;
for ii:=1 to max do
if ScrollBase[ii]=ObjID then ScrollBase[ii]:=0;
Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
end;
end;
end;
j:=j+10; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
end;
Say('>>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;

//************************************************** ****************************
function GetNextItemID: integer;
//Выдает ObjID предмета, если не найден в базе, выдает -1,
//достигли макс уровня заточки -2, подбираем минимальный текущий уровень заточки -3
var
i: integer;
begin
Result:=-1;
if CurEnchLvl>=MaxEnchLvl then begin
Result:=-2;
exit;
end;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ItemBase[1,i]<>0) and (ItemBase[2,i]<=CurEnchLvl) then begin
Result:=ItemBase[1,i];
exit;
end;
end;
inc(CurEnchLvl);
Result:=-3;
end;

//************************************************** ****************************
function GetNextScroll: integer;
//Выдает ObjID скролла, если предмет не найден в базе, выдает -1
var
i: integer;
begin
Result:=-1;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ScrollBase[i]<>0) then begin
Result:=ScrollBase[i];
exit;
end;
end;
end;

//************************************************** ****************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
end;

//************************************************** ****************************
procedure OnTimerHP(Sender: TObject);
var
Item, scrl:integer;
begin
if ColvoScrl=0 then begin
timer.enabled:=false;
Say('Покупаю скролы');
delay(500);
///buf:=HStr('A7 CD A4 08 00 A0 86 01 00 01 00 00 00 00 00 00 00 00 00 00 00');
///SendToServer;
buf:=HStr('A7 B1 02 00 00 A0 86 01 00 0A 00 00 00 00 00 00 00 00 00 00 00');
SendToServer;
delay(500);
timer.enabled:=true;
exit;
end;
///if ColvoItem=1 then begin
/// Say('Остался последний предмет! Прервано!');
/// timer.enabled:=false;
/// exit;
///end;
Scrl:=GetNextScroll;
if scrl=-1 then begin
Say('Нет такой заточки! Прервано!');
timer.enabled:=false;
exit;
end;
Item:=GetNextItemID;
case Item of
-1: begin
Say('Нет такого предмета! Прервано!');
timer.enabled:=false;
exit;
end;
-2: begin
Say('Достигли максимальный уровень заточки! Прервано!');
timer.enabled:=false;
exit;
end;
-3: begin
Say('Подбираем текущий уровень заточки!');
timer.enabled:=true;
exit;
end;
end;
//************************************************

UseItem(Scrl);
RequestEnchantItem(Item);
//************************************************
///Say('Заточили предмет! ItemID='+IntToStr(Item));
end;

//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;

//************************************************** **************************
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
case SocialID of
//социальное действие Yes для начала затачивания
6: begin
CurEnchLvl:=0;
Say('Команда Старт!!!');
timer.enabled:=true;
exit;
end;
//социальное действие No для окончания
5: begin
Say('Команда Стоп!!!');
timer.enabled:=false;
exit;
end;
end;
end;

//************************************************** **************************
if FromServer then
case pck[1] of
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
end;

end.

8tomat8
22.03.2009, 23:14
АП!!!!

Fer123
28.03.2009, 23:50
Попробуй убрать "Запоминать пакеты"

8tomat8
28.03.2009, 23:56
Попробуй убрать "Запоминать пакеты"
Попробую, спс