когда я на ночь ставлю работать скрипт на заточку то утром обнаруживаю ошибку о недостатке виртуальной памяти. Память увеличил(с другого диска добавил 4Гб памяти) всеравно при загружености на все 2гб(стандартной с диска С) вылетает ошибка подскажите может кто то сталкивался
__________________
помог?СКАЖИ СПАСИБО!)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)
Сколько же у тебя заточек, у меня обычно минут через 10 все заканчиваются
Возможно скрипт с утечкой написан. А может в Пакетхаке утечка.
Выложи хоть скрипт посмотреть.
А если просто клиент на ночь оставить в том месте?
Да все великолепно пашит
Цитата:
Сообщение от lexayar
Сколько же у тебя заточек, у меня обычно минут через 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.
__________________
помог?СКАЖИ СПАСИБО!)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)