залезь в файловый архив форума, там все есть...
пора бы уже темку офф
__________________
помог?СКАЖИ СПАСИБО!)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)
program zatochka_IL;
const
Name='AdolfHitler'; //Вписать сюда имя чара
ScrollID=6577; //957 ScrollID скролла заточки
ItemID=9605; //129 ItemIDID затачиваемого предмета
MaxEnchLvl=25;//уровень заточки который требуется достичmax=250; //количество слотов в инвентаре чара, максимально - 250var
ItemBase: array[1..2,1..max] ofinteger; //ItemID ObjID, lvl
ScrollBase: array[1..max] ofinteger; //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:=200; //время задержки
add:=false;
for i:=1tomaxdobegin//очищаем масив//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 по ItemIDvar
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 соответствующие необходимым ItemIDfor i:=1to ListCount dobegin
ObjID:=ReadD(j); //ObjectID
ItmID:=ReadD(j); //ItemID
j:=j+14;
Lvl:=ReadD(j); //Levelcase 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 по ItemIDvar
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:=1to ListCount dobegin
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 of1:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem+1;
Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
for ii:=1tomaxdoif ItemBase[1,ii]=0thenbegin ItemBase[1,ii]:=ObjID; ItemBase[2,ii]:=lvl; end;
end;
ScrollID: begin
ss:=ss+1;
Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
for ii:=1tomaxdoif ScrollBase[ii]=0then ScrollBase[ii]:=ObjID;
end;
end;
2:case ItmID of
ItemID:
for ii:=1tomaxdoif ItemBase[1,ii]=ObjID then ItemBase[2,ii]:=lvl;
ScrollID:
Say('Внимание! Изменения в скролле!?');
end;
//удален3:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem-1;
for ii:=1tomaxdoif ItemBase[1,ii]=ObjID thenbegin ItemBase[1,ii]:=0; ItemBase[2,ii]:=0; end;
Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
end;
ScrollID: begin
ColvoScrl:=ColvoScrl-1;
for ii:=1tomaxdoif 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, подбираем минимальный текущий уровень заточки -3var
i: integer;
begin
Result:=-1;
if CurEnchLvl>=MaxEnchLvl thenbegin
Result:=-2;
exit;
end;
for i:=1tomaxdobegin//находим первый подходящий предметif(ItemBase[1,i]<>0)and(ItemBase[2,i]<=CurEnchLvl)thenbegin
Result:=ItemBase[1,i];
exit;
end;
end;
inc(CurEnchLvl);
Result:=-3;
end;
//******************************************************************************function GetNextScroll: integer;
//Выдает ObjID скролла, если предмет не найден в базе, выдает -1var
i: integer;
begin
Result:=-1;
for i:=1tomaxdobegin//находим первый подходящий предметif(ScrollBase[i]<>0)thenbegin
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;
beginif ColvoScrl=0thenbegin
timer.enabled:=false;
Say('Покупаю скролы');
delay(500);
buf:=#$4B#$00#$00#$00#$00#$00#$15#$AE#$0C;
SendToServerEx(Name);
buf:=#$A7#$B1#$02#$00#$00#$C0#$27#$09#$00#$0A#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00#$00;
SendToServerEx(Name);
delay(700);
timer.enabled:=true;
exit;
end;
///if ColvoItem=1 then begin/// Say('Остался последний предмет! Прервано!');/// timer.enabled:=false;/// exit;///end;
Scrl:=GetNextScroll;
if scrl=-1thenbegin
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=''thenexit;
//****************************************************************************if FromClient and(ConnectName=Name)and(pck[1]=#$1B)thenbegin
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 thencase pck[1] of//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предметаend;
end.
__________________
помог?СКАЖИ СПАСИБО!)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)
блин томат чёто я ваще тупой я засунул скрипт в л2пнх (3.1.8 от 05.09.2007) а когда в игре нажимаю галочку около скрипта у меня не окошко для точки выскакивает а в игре в ПМ мне пишет хрень какуюто! помоги ещё плз=)
у меня не окошко для точки выскакивает а в игре в ПМ мне пишет хрень какуюто!
все правильно, ты в начале скрипта вводиш ID всех не обходимых предметов, а потом включив скрипт в игре делаеш соц действие "yes"
__________________
помог?СКАЖИ СПАСИБО!)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок, а в том, чтобы писать программы, работающие при любом количестве ошибок.
Цитата:
[10-06, 14:15] efreet Заплачу за настройку l2px
[11-06, 09:25] xkor не плач)
томат последний вопрос=)
мне когда в игре пишет там ID предмета , точки и ещё пишет вотето CurEnchLvl=0 <---это что?
а и ещё объесни как делать социальное действие "yes"