 |
help по скриптам - Общение и обсуждение, архив Lineage 2 - Cобытия, информация, вопросы и ответы по Lineage 2 |
05.12.2011, 16:14
|
#1
|
|
|
|
Сержант
|
 Регистрация: 24.06.2010
 Сообщений: 167
 Популярность: 2000
 Сказал(а) спасибо: 936
Поблагодарили 224 раз(а) в 109 сообщениях
|
help по скриптам
 собственно первый раз решил воспользоваться скриптами на автоточку, и впал в ступор...на последовательности действий.
прошу помочь, разложить все по полочкам.
К примеру как делаю я.
Код:
// для любых хроник
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один раз чтоб запомнить чем и что точить
// точить для запоминания по одному предмету
// если будите точить разные предметы
// предметы должны соответствовать применяемому skrol
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
// дальше скрипт сам точит до указаного уровня заточки
// все предметы одинаковые с первыми заточеными
// точит первый предмет до максима потом второй и т.д
// т.е если вы заточили несколько разных предметов
// одного класса армор или веапон они будут точиться
// АВТОР ==>>>> TAMBIK
program Enchant_gracia;
const
myname='TAMBIK'; //<<== пишем свой НИК
max=140;//<<== колличество ячеек в рюкзаке
var
BaseItems:array[1..max,1..11] of integer;
BaseID:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;
flag,start,select,selectID,autoMsg:Boolean;
autostart:Boolean;
mytext:string;
ListSize,ItemEnch:word;
textID,itemID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID:integer;
ItemOID,objectOID: integer;
sumskrol,sumitemID: integer;
key,x,y,ii:integer;
maxlvl: integer;
GetiD:integer;
skrolID,skrolObj:integer;
t,l,d:integer;
//-----------------------------------------
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(3);
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
if FromClient and (pck[1]=#$49) then begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' установлен Уровень Заточки: '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
end;
//..............................................................................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
count:=0;
x:=0;
y:=0;
j:=4; //пропускаем дo ListSize
ListSize:=ReadH(j);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1- 1:одето броня. 0:бижа. 4:в рюкзаке
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); // Amount:
BaseItems[i,6]:=ReadD(j); // Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x); // счетчик
count:=round((Length(pck)-5) / ListSize);// длина блока
//y := пропускаем до следущего блока
y:=count*x-(j-6);// . 6= длина ListSize + 4 байта пропуска в начале пакета
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
if (0 < skrolObjectID) then begin
sumskrol:=Getitem(skrolID,3,5);
SendMsg2 (' SKROL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if start and (0<sumskrol) then Timer01.enabled:=true;
if (sumskrol=0) then begin
Timer01.enabled:=false;
stopselectskrol;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROL........ ');
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
end;
end;
//=============================
procedure EnchantResult;
begin
end;
//=============================
procedure InventoryUpdate;
var
Id,ObjId:integer;
begin
ObjId:=ReadD(8);
Id:=ReadD(12);
SendMsg2 ('удален предмет Id : '+IntToStr(Id)+' ObjectID: '+IntToStr(ObjId)+' ');
deleteBase;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2]=enchantID) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0; // забиваем нулями
end;
//===========================================
//
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//=================================
//добавляем в базу ID предмета
procedure addIDtoarray(ItemOID:integer);
begin
SendMsg2( '------------------------------------- ' );
SendMsg2 (' добавить в базу для заточки ID : '+IntToStr(ItemOID)+' Предмета ');
SendMsg2(' .................' );
flag:=false;
for ii:=1 to max do
if (BaseID[ii]=ItemOID) then begin // текущий ID уже есть в массиве,
flag := true;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' предмет в базе есть с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
if (flag = false) then begin
for ii:=1 to max do
if (BaseID[ii]=0) then begin // добавим ID в массив,
BaseID[ii]:=ItemOID;
sumitemID:=Getsumitem(ItemOID,3,5);//счет скоко предметов
SendMsg2 (' Добавлен Предмет с ID : '+IntToStr(ItemOID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2( '------------------------------------- ' );
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//=============================
procedure ChooseInventory;
begin
if (itemID>0) then begin
objectOID:=GetObjectID(itemID);//находим по ItemID предмет с ObjectID
if (objectOID=0) then begin
stopselectskrol;
SendMsg2 (' предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ! ');
for ii:=1 to max do
if (BaseID[ii]=itemID) then begin
BaseID[ii]:=0;
SendMsg2 (' ..... ПОИСК ______ ПРЕДМЕТА..... ');
GetItemID ;
Break; // прерываем дальнейший перебор массива.
end;
if (itemID=0) then begin
SendMsg2 ('___НЕТ ПРЕДМЕТОВ ДЛЯ ЗАТОЧКИ___ ');
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
stopselectskrol;
start:=false;
end;
end;
end;
end;
//=================================
// GetiD:=GetItemID(itemID);//находим в базе ItemID предмет для Заточки
//находим ItemID предмета для Заточки в базе ItemID
procedure GetItemID ;
begin
if start then begin
if (maxlvl=0) then begin
SendMsg2 (' неуказан уровень заточки ');
stopselectskrol;
SendMsg2 ('___ О С Т А Н О В Л Е Н О ___ ');
end;
if (maxlvl>0) then begin
itemID:=0;
for ii:=1 to max do
if (BaseID[ii]<>0) then begin
itemID:=BaseID[ii];
SendMsg2 (' НАШЛИ ПРЕДМЕТ для ЗАТОЧКИ с ID = '+IntToStr(itemID)+' ');
Timer01.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
end;
//=================================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
SendMsg2('------------------------------' );
if (itemID>0) then begin
SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(itemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3]= itemID) and (BaseItems[i,11]< maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
SendMsg2(' ..... найден предмет для заточки ..... ');
SendMsg2(' ID : '+IntToStr( itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+' ');
SendMsg2('------------------------------' );
if (enchantID>0) then startselectEnch;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObjectID);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure startselectEnch;
begin
Timer02.enabled:=true
end;
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
SendMsg2(' ..... Точим Предмет ..... ');
SendMsg2( ' ID : '+IntToStr(itemID)+' ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+' ' );
SendMsg2( '_______________________________' );
end;
//-----------------------------------------
procedure Init;
begin
t:=0;l:=0;d:=0;
autostart:=false;
flag:=false;
selectID:=false;
autoMsg:=true;
GetiD:=0;
sumskrol:=0;
objectOID:=0;
maxlvl:=0;
itemID:=0;
enchantID:=0;
ItemEnch:=0;
start:=false;
select:=false;
skrolObjectID:=0;
enchantObjectID:=0;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=400; //<<== время выбора свитка
Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=400; //<<== время выбора предмета
Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=3000; //<<== время между заточкой
SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предметы один раз ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2('В К Л сообщения соцдействие-приветствие\hello ' );
SendMsg2('ВЫКЛ сообщения соцдействие-победа\victory ' );
SendMsg2( '------------------------------------- ' );
buf:=hstr('14');
SendToServerEx(myname);
for ii:=1 to max do
BaseID[ii]:=0;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure RequestActionUse;
begin
case ReadD(2) of
12:begin autoMsg:=true; pck:=''; exit; end;
13:begin autoMsg:=false; pck:=''; exit; end;
24:begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if autostart then begin
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
GetItemID ;
pck:='';
exit;
end;
end;
25:begin
start:=false;
enchantID:=0;
ItemEnch:=0;
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopselectskrol;
pck:='';
exit;
end;
end;
end;
//=========
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$21) and (ReadH(4)=3)then InventoryUpdate;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then Resultmaxlvl;
if FromClient and (pck[1]=#$56) then RequestActionUse;
begin
if (start=false) and FromClient then
case pck[1] of
#$19:begin
t:=1;
skrolObjectID:=ReadD(2);
skrolID:= Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
SendMsg2(' .................' );
SendMsg2(' активирован SKROL ID : '+IntToStr(skrolID)+' ' );
SendMsg2(' .................' );
buf:=hstr('14');
SendToServerEx(myname);
end;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' окно выбора предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
autostart:=true;
ItemOID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
SendMsg2 (' заточен предмет c ID : '+IntToStr(ItemOID)+' ');
SendMsg2(' .................' );
addIDtoarray(ItemOID);//добавляем в базу ID предмета
stopselectskrol;
end;
end;
end;
end;
end.
вкл на соц приветствие
const
nik='NIK'; //сюда свой ник
Enchant=5;
var
UseItem, EnchantItem: string;
Count, CurrentEnch: integer;
Timer01: TTimer;
procedure Init;
begin
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=3200; //скорость точки
end;
procedure OnTimer01(Sender: TObject);
begin
buf:=UseItem;
SendToServerEx(nik);
buf:=EnchantItem;
SendToServerEx(nik);
end;
procedure Free;
begin
Timer01.free;
count:=0;
CurrentEnch:=0;
end;
begin
if FromServer and (pck[1]=#$87) then
begin
if ReadD(2)=0 then inc(CurrentEnch);
if CurrentEnch=Enchant then Timer01.enabled:=false;
end;
if FromClient and (pck[1]=#$19) then UseItem:=pck;
if FromClient and (pck[1]=#$5F) then EnchantItem:=pck;
if FromClient and (pck=#$34#$02#$00#$00#$00) then
begin
pck:='';
Timer01.enabled:=not(Timer01.enabled);
end;
end.
как делаю я:
1.ставлю галочку на выполнение
2.пишу в пати чат 80
3.точу вещь что бы запомнил
4.жму СТАРТ нажать соцдействие ДА
ии всё.ничего не происходит.ни на 1 сервере(опробовал около 50)
пробовал всеми скриптами что смог найти.Ни 1 не пашет.Тоесть тупо ни-че-го не происходит...
Добавлено через 12 часов 4 минуты
потестил еще 3 версии, так и не вкурил что к чему...может кто поможет?
________________
Не стоит принимать доброту за слабость, грубость за силу, а подлость — за умение
жить
Последний раз редактировалось AnotherTest; 06.12.2011 в 04:18.
Причина: Добавлено сообщение
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 23:19.
|
 |