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