Вот тоже попытался коечто слямзить и добавить но....как говорится "дело было не в машине.." вот оно:
[...]
если заремить строки проверки x=7 то пп работает, берет торг но бафает только до b(9), b(10) уже не идет...В чем ошибка моя подскажите
Ты забыл про конструкцию типа:
Код:
if X then Y;
if X then begin X1; X2; X3; end;
Так по идее должно работать (не забываем inc(x) делать):
delphi Код:
begincase x of1: begin
buf:=hstr(b1);
SendToServerEx(bufer);
inc(x);
end;
2: begin
buf:=hstr(b2);
SendToServerEx(bufer);
inc(x);
end;
3: begin
buf:=hstr(b3);
SendToServerEx(bufer);
inc(x);
end;
4: begin
buf:=hstr(b4);
SendToServerEx(bufer);
inc(x);
end;
5: begin
buf:=hstr(b5);
SendToServerEx(bufer);
inc(x);
end;
6: begin
buf:=hstr(b6);
SendToServerEx(bufer);
inc(x);
end;
7: beginif(prof=2)thenbegin
buf:=hstr(b7);
SendToServerEx(bufer);
end;
inc(x);
end;
8: beginif(prof=1)thenbegin
buf:=hstr(b8);
SendToServerEx(bufer);
end;
inc(x);
end;
9: begin
buf:=hstr(b9);
SendToServerEx(bufer);
inc(x);
end;
10: begin
buf:=hstr(b10);
SendToServerEx(bufer);
inc(x);
end;
11: beginif(prof=1)thenbegin
buf:=hstr(b11);
SendToServerEx(bufer);
end;
inc(x);
end;
12: begin
buf:=hstr(b12);
SendToServerEx(bufer);
inc(x);
end;
13: begin
buf:=hstr(b13);
SendToServerEx(bufer);
inc(x);
end;
14: beginif(prof=2)thenbegin
buf:=hstr(b14);
SendToServerEx(bufer);
end;
inc(x);
end;
15: beginif(prof=2)thenbegin
buf:=hstr(b15);
SendToServerEx(bufer);
end;
x:=0;
end;
end;
end;
Переделал скрипт, сейчас синтаксис в порядке, но бафает все равно только до WindWalk дальше останавливается несмотря ни на что, несрабатывают вложенные условия..или тут другой способ добавить их?
Последний раз редактировалось Breadfan, 29.04.2008 в 17:48.
if prof<>0 then
begin
x:=1;
// prof:=0;//убери эту строчку, вставь ее в последний бафф(16)
end;
и будет тебе счастье)
Добавлено через 9 минут
хотя тогда в это условие надо добавить еще and (x=0)
и вообще я тут все бы переделал, у тебя получается если он не баффает не нужный бафф операясь на переменную prof, то 2.5сек на этот бафф один фиг будет отсчитывать
Последний раз редактировалось mks, 29.04.2008 в 17:59.
Причина: Добавлено сообщение
Не хватает ';' точки с запятой после x:=x+1!
Поверяй скрипт в пакетхаке нажатием кнопки "ПРОВЕРИТЬ СИНТАКСИС".
Это просто в коде пропушенно..сам скрипт проверку проходит, все нормально НО он не бафает бафы где стоят if...then... Вот в этом и трудность моя. Причем они не срабатывают в обоих случаях prof=1 и prof=2
Breadfan,
ты похоже пропустил что я тебе написал чуть выше, у тебя переменной prof присваивается 0 одновременно с началом баффа, вот он и не баффает когда условие что prof=1 или 2
гон у вас это а не бот, по всем правилам
что оформления кода
что написанию бота
Любой нормальный сервер сразу забанит
по оформлению согласен....
а по поводу что что сервер сразу забанит, единственное место где серв может прочухать что это бот - пакет Action здесь отправляется не полный, ID таргета есть, а координат нет(Target:=#$04+pck[2]+pck[3]+pck[4]+pck[5], а это не сложно поправить....
Uses'.\Scripts\OlegDX by USES.txt';
const
HTML1='<html><body><center><img src="L2UI_CH3.herotower_deco" width=256 height=32><font color="LEVEL">Меню инвентаря "что я типо знаю"'+
'</font><br><font color="LEVEL">Автор: OlegDX</font><img src="L2UI.SquareWhite" width=260 height=1><img src="L2UI.SquareBlank" width=260 height=4><br1>';
HTML2='<br><img src="L2UI.SquareWhite" width=260 height=1><img src="L2UI.SquareBlank" width=260 height=4><br1></center></body></html>';
////////////////////////////////////////////////////////////////////////////////var
SkillBaffCount,BaffID,BaffType,LiderID:Integer;
SkillBaff:arrayofinteger;
Procedure BaffListAdd(SkillID:Integer;SkillName:String);
BeginInc(SkillBaffCount);
SetLength(SkillBaff,SkillBaffCount);
SkillBaff[SkillBaffCount-1]:=SkillID;
End;
Procedure ReBaffListCreate(BaffT:Integer=0);
Begin
BaffType:=BaffT;
SkillBaffCount:=0;
BaffListAdd(1085,'ACUMEN');
BaffListAdd(1062,'BERSERK_SPIRIT');
BaffListAdd(1045,'BLESS_OF_BOODY');
BaffListAdd(1048,'BLESS_OF_SOUL');
End;
Procedure BaffListCreate;
Begin
BaffType:=-1;
SkillBaffCount:=0;
BaffListAdd(1085,'ACUMEN');
BaffListAdd(1086,'HASTE');
BaffListAdd(1045,'BLESS_OF_BOODY');
BaffListAdd(1048,'BLESS_OF_SOUL');
BaffListAdd(1036,'MAGIC_BARRIER');
BaffListAdd(1243,'BLESS_SHIELD');
BaffListAdd(1044,'REGENERATION');
//BaffListAdd(1191,'RESIST_FIRE' );
BaffListAdd(1043,'HOLY_WEAPON');
BaffListAdd(1062,'BERSERK_SPIRIT');
//BaffListAdd(1388,'GREATER_MIGTH' );
BaffListAdd(1389,'GREATER_SHIEL');
End;
Procedure UsedBaff(Param:Integer=0);
var N:Integer;Done:Boolean;
BeginCase Param of0,1:BEGIN
DONE:=FALSE;
IF MyObject[ID]=0THENEXIT;
IF Param=0THEN BaffID:=0;
IF BaffID>=SkillBaffCount THEN UsedBaff(2);
WHILE BaffID<SkillBaffCount DOBEGINFOR N:=1TO mySkillCount DOIF(SkillBaff[BaffID]= mySkillList[N-1,2])THENBEGIN DONE:=TRUE;BREAK; END;
INC(BaffID);
IF DONE THENBEGIN
UseSkill(SkillBaff[BaffID-1]);
Break;
END;
END;
End;
2,3,4,5:BeginIF Param=3THEN BaffListCreate;
IF Param=4THEN ReBaffListCreate(0);
IF Param=5THEN ReBaffListCreate(1);
IF Param=2THENBEGIN
BaffID:=SkillBaffCount;
IF BaffType=0THEN SendMSGServer('GoEMP',3);
IF BaffType=1THENBEGIN
SendMSGServer('GoTARGET',3);
buf:=hstr('37 01 00');SendToServer;
Action(LiderID);
UsedBaff(3);
UsedBaff(0);
END;
END;
End;
End;
End;
////////////////////////////////////////////////////////////////////////////////procedure ListSkill;
Var I:Integer; HTMLTEXT:String;
begin
HTMLTEXT:='';
FOR I:=1TO mySkillCount DOBEGINIF mySkillList[I-1,0]=0THENBEGIN
HTMLTEXT:=HTMLTEXT+'<br>'+Format('%s(%.d)',[fListSkill.Values[IntToStr(mySkillList[I-1,2])],mySkillList[I-1,2]]);
END;
END;
ShowHTML(HTML1+HTMLTEXT+HTML2);
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*** Вызывается при включении скрипта *****************************************procedure Init;
begin
Init_old;
LiderID:=0;
UsedBaff(3);
end;
//*** Вызывается при выключении скрипта ****************************************procedure Free;
begin
free_old;
end;
//////////////////////////////////////////////////////////////////////////////////Основная часть скрипта вызывается при приходе каждого пакета если скрипт включенbegin//----------------------------------------------------------------------------if pck=''thenexit;
//----------------------------------------------------------------------------if FromServer thenbeginCase pck[1] of
#$A6:BEGIN TargetID:=ReadD(2); END;
#$04:BEGIN ReadUserInfo; END;
#$58:BEGIN CreateSkillBase; END;
#$76:BEGINIF ReadD(2)=MyObject[ID] THEN UsedBaff(1); END;
#$49:BEGINIF ReadD(2)=MyObject[ID] THEN UsedBaff(2); END;
#$4A:Begin
PosIndex:=02;
ObjectID :=ReadD(PosIndex);
MesageType:=ReadD(PosIndex);
MesageStrg:=ReadS(PosIndex);
MesageStrg:=ReadS(PosIndex);
Case MesageType of3:BEGINIf(Length(MesageStrg)=4)and(MesageStrg='Baff')Thenbegin
buf:=hstr('37 01 00');SendToServer;
Action(ObjectID);
UsedBaff(3);
UsedBaff(0);
EndElseIf(Length(MesageStrg)=7)and(MesageStrg='akumBAF')Thenbegin
LiderID:=ObjectID;
buf:=hstr('37 01 00');SendToServer;
Action(MyObject[ID]);
UsedBaff(4);
UsedBaff(0);
EndElseIf(Length(MesageStrg)=6)and(MesageStrg='empBAF')Thenbegin
buf:=hstr('37 01 00');SendToServer;
Action(ObjectID);
UsedBaff(5);
UsedBaff(0);
EndElseIf(Length(MesageStrg)=3)and(MesageStrg='tar')Thenbegin
buf:=hstr('37 01 00');SendToServer;
Action(ObjectID);
EndElse;
END;
ENDEND;
end;
endelse//----------------------------------------------------------------------------if FromClient thenbeginCase pck[1] of
#$38:Begin
PosIndex:=02;
MesageStrg:=ReadS(PosIndex);
MesageType:=ReadD(PosIndex);
Case MesageType of//Обычный чат 0:Begin End;//Крик чат 1:Begin End;//торговый чат 8:Begin End;3:Begin//Пати чатIf(Length(MesageStrg)=1)and((MesageStrg[1]='B')or(MesageStrg[1]='b'))Thenbegin
UsedBaff(0);
EndElseIf(Length(MesageStrg)=1)and((MesageStrg[1]='L')or(MesageStrg[1]='l'))Thenbegin
ListSkill;
EndElseEnd;
ElseEnd;
End;
End;
endelse;
end.
////////////////////////////////////////////////////////////////////////////////
Добавлено через 4 минуты
delphi Код:
//xmlNpc:Variant;//xmlNpc:=CreateOleObject('Msxml.DOMDocument');//xmlNpc.Load('.\UserData\itemname-e.xml' );//xmlNpc.documentElement.selectNodes(Format('/itemname/descrt[@id="%d"]/@name',[Inventory[I,3]])).item[0].text;//xmlNpc:=nil;//Uses '.\Scripts\OlegDX by USES.txt';//*****************************************************************FunctionSqr(X:Integer):Integer;
Begin
Result:=X*X;
End;
//*****************************************************************Function StrToHex(Value:String):String;
Var Len,I:Integer;
Begin
Result:='';
Len:=Length(Value);
IF Len>0Then Result:= Format('%.2x',[ord(Value[1])]);
For I:=2to Len do Result:=Result+Format(' %.2x',[ord(Value[i])]);
End;
//*****************************************************************procedure ShowHTML(HTML:String);
begin
buf:=#$0F;
WriteD(5);
WriteS(HTML);
WriteD(0);
SendToClient;
end;
//*****************************************************************procedure SendMSGClient(value:string;Types:Integer=10);
begin
buf:=#$4A;
WriteD(0);
WriteD(Types);
WriteS('');
WriteS(value);
SendToClient;
end;
//*****************************************************************Procedure SendMSGServer(value:String;Types:Integer=0);
Begin
buf:=#$38;
WriteS(value);
WriteD(Types);
SendToServer;
End;
//******************************************************************************procedure DoorAction(DoorID:Cardinal;Status:Cardinal);
begin
buf:=#$4D;
WriteD(DoorID);
WriteD(Status);
WriteD(0);
WriteD(1);
WriteD(0);
SendToClient;
end;
//******************************************************************************procedure Action(ObjectID:Cardinal;Action:Integer=0;X,Y,Z:Integer=0);
begin
buf:=#$04;
WriteD(ObjectID);
WriteD(X);
WriteD(Y);
WriteD(Z);
WriteC(Action);
SendToServer;
end;
//*****************************************************************procedure UseItems(ObjectID:Cardinal;shift:Cardinal=0);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(shift);
SendToServer;
end;
//******************************************************************************procedure UseSkill(SkillID:Integer;Ctrl:Integer=0;Shift:byte=0);
begin
buf:=#$2F;
WriteD(SkillID);
WriteD(Ctrl );
WriteC(Shift);
SendToServer;
end;
//*****************************************************************Procedure MoveXYZ(X1,Y1,Z1,X2,Y2,Z2:Integer);
BeginIF(X1=X2)and(Y1=Y2)and(Z1=Z2)ThenExit;
buf:=#$01;
WriteD(X1);WriteD(Y1);WriteD(Z1);
WriteD(X2);WriteD(Y2);WriteD(Z2);
WriteD(01);
SendToServer
End;
//******************************************************************************// /---|H|---\// [ >>>|1|_______________|3|___________|2|>> ]Function GetMoveXYZ(X1,Y1,Z1,X2,Y2,Z2,H:Integer; var X,Y,Z:Integer):Boolean;
var AB:Double;
Begin
Result:=False;
AB:=Sqrt(sqr(X2-X1)+sqr(Y2-Y1)+sqr(Z2-Z1));
IFabs(AB)<=H THENEXIT;
X:=X2-round(((X2-X1)*H)/AB);
Y:=Y2-round(((Y2-Y1)*H)/AB);
Z:=Z2-round(((Z2-Z1)*H)/AB);
Result:=True;
End;
//******************************************************************************////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Const ID=0;Xnow=1;Ynow=2;Znow=3;Xold=4;Yold=5;Zold=6;
Var//--------------------------------------------------------------------------
PosIndex,ObjectID,TargetID,X,Y,Z,W:Integer;
MesageStrg:String;MesageType:Integer;
MyObject: array[0..7] ofInteger; //ID,X,Y,Z,Xd,Yd,Zd
MyTarget: array[0..7] ofInteger; //ID,X,Y,Z,Xd,Yd,Zd
MySkillCount:Integer;MySkillList:array[0..250,0..3] ofInteger;//Group,Lvl,SkillID,Reserved
fListSkill,fListItems,fListMessg:TStringList;//:TStrings;//--------------------------------------------------------------------------
MyItemsCount:integer; //количество занятых слотов/количество вещей
MyInventory: array[1..250,1..10]of integer; //массив инвентаря//инвентарь //1 - ItemType1 //2 - ObjectID //3 - ItemID //4 - ItemCount //5 - ItemType2 //6 - CustType1 //7 - IsEquipped //8 - BodyPart //9 - EnchantLevel //10 - CustType2//--------------------------------------------------------------------------////////////////////////////////////////////////////////////////////////////////Procedure CreateSkillBase;
Begin
PosIndex:=2;
mySkillCount:=ReadD(PosIndex);
For W:= 1to mySkillCount dobegin
mySkillList[W-1,0]:=ReadD(PosIndex);
mySkillList[W-1,1]:=ReadD(PosIndex);
mySkillList[W-1,2]:=ReadD(PosIndex);
mySkillList[W-1,3]:=ReadC(PosIndex);
End;
End;
//******************************************************************************procedure ReadUserInfo;
Begin
PosIndex:=2;
MyObject[Xold]:=ReadD(PosIndex); MyObject[Xnow]:=MyObject[Xold];
MyObject[Yold]:=ReadD(PosIndex); MyObject[Xnow]:=MyObject[Yold];
MyObject[Zold]:=ReadD(PosIndex); MyObject[Xnow]:=MyObject[Zold];
W:=ReadD(PosIndex);
MyObject[ ID]:=ReadD(PosIndex);
End;
//******************************************************************************procedure Init_old;
Begin
MyItemsCount:=0;
MySkillCount:=0;
MyObject[ID]:=0;
MyTarget[ID]:=0;
fListMessg:=nil;fListMessg:=TStringList.Create;//TStrings.Create;
fListItems:=nil;fListItems:=TStringList.Create;//TStrings.Create;
fListSkill:=nil;fListSkill:=TStringList.Create;//TStrings.Create;
fListMessg.LoadFromFile('.\sysmsgid.ini');
fListItems.LoadFromFile('.\itemsid.ini');
fListSkill.LoadFromFile('.\skillsid.ini');
//ShowTab;UserTab.caption:=fListSkill.Values['150']End;
procedure Free_Old; //Вызывается при выключении скриптаbegin
HideTab;
fListMessg.free;fListMessg:=nil;
fListItems.free;fListItems:=nil;
fListSkill.free;fListSkill:=nil;
end;
//******************************************************************************//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////***процедура считывания параметров одного предмета ***************************//******************************************************************************procedure ItemAction(var Position:integer;CurrentSlot:integer);
begin
MyInventory[CurrentSlot,01]:=ReadH(Position);//ItemType1
MyInventory[CurrentSlot,02]:=ReadD(Position);//ObjectID
MyInventory[CurrentSlot,03]:=ReadD(Position);//ItemID
MyInventory[CurrentSlot,04]:=ReadD(Position);//ItemCount
MyInventory[CurrentSlot,05]:=ReadH(Position);//ItemType2
MyInventory[CurrentSlot,06]:=ReadH(Position);//CustType1
MyInventory[CurrentSlot,07]:=ReadH(Position);//isEquipped
MyInventory[CurrentSlot,08]:=ReadD(Position);//BodyPart
MyInventory[CurrentSlot,09]:=ReadH(Position);//EnchantLevel
MyInventory[CurrentSlot,10]:=ReadH(Position);//CustType2end;
//******************************************************************************//*** Пакет от сервера 1В - создаем или модифицируем весь инвентарь ************//******************************************************************************procedure ItemBaseCreate;
var i,PosInt: integer;
begin//Считываем количество вещей в инвентаре
MyItemsCount:=ReadC(4);PosInt:=6;
for i:=1to MyItemsCount do ItemAction(PosInt,i);
end;
//******************************************************************************//*** Пакет от сервера 27 - действия (доавить/изменить/удалить)//*** над одним/несколькими предметами//******************************************************************************procedure ItemBaseUpdate;
var I,J,N,count,PosInt:integer;
begin//Считываем количество изменяемых предметов
Count:=ReadC(2);
for I:=1to Count dobegin
N:=(I-1)*30+4;PosInt:=N+2;
Case ReadC(N)of01:begin//ADDInc(MyItemsCount);//Увеличиваем количество занятых слотов
ItemAction(PosInt,MyItemsCount);//Добавляем предметend;
02:begin//UPD
N:=ReadD(PosInt+2);
for J:=1to MyItemsCount do//Ищем изменяемый предмет по ObjectID в списке обековIf MyInventory[J,2]=N Thenbegin ItemAction(PosInt,j);break;end;
end;
03:begin//DEL
N:=ReadD(PosInt+2);
for J:=1to MyItemsCount do//Ищем изменяемый предмет по ObjectID в списке обековIf MyInventory[J,2]=N Thenbegin
MyInventory[J,01]:=MyInventory[MyItemsCount,01];
MyInventory[J,02]:=MyInventory[MyItemsCount,02];
MyInventory[J,03]:=MyInventory[MyItemsCount,03];
MyInventory[J,04]:=MyInventory[MyItemsCount,04];
MyInventory[J,05]:=MyInventory[MyItemsCount,05];
MyInventory[J,06]:=MyInventory[MyItemsCount,06];
MyInventory[J,07]:=MyInventory[MyItemsCount,07];
MyInventory[J,08]:=MyInventory[MyItemsCount,08];
MyInventory[J,09]:=MyInventory[MyItemsCount,09];
MyInventory[J,10]:=MyInventory[MyItemsCount,10];
Dec(MyItemsCount);//Уменьшаем количество занятых слотовbreak;
endend;
end;
end;
end;
//******************************************************************************//Получить ObjectID предмета, зная его ItemsID *********************************function ItemBaseGetInfo(ItemsID:integer):integer;
var c1:integer;
begin
Result:=-1;
for c1:=1to MyItemsCount doif ItemsID=MyInventory[c1,3] thenbegin
Result:=MyInventory[c1,2];
exit;//Если нашли - выходим из циклаend;
end;
//Использовать предмет с заданным ItemsID **************************************Function ItemBaseUseItem(ItemsID:integer):Boolean;
var c1:integer;
begin
Result:=False;
for c1:=1to MyItemsCount doif ItemsID=MyInventory[c1,3] thenbegin
Result:=True;
UseItems(MyInventory[c1,2]);
//buf:=#$14; WriteD(MyInventory[c1,2]);WriteD(0);SendToServer;Break; //Чтоб не использовать несколько предметов с одинаковым ItemID (например заточки)end;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////BeginEnd.
Добавлено через 11 минут
сразу извеняюсь за разпрос кодо
но тут правило
1)все команды серверу выносятся в проседуры (а не строчки хекс кода)
2) незя использовать баф который твой чар незнает (нужно проверить что он знаит и от эирго отталкиватся)
3) нужно следить за задержками и ответами сервера
Последний раз редактировалось NLObP, 30.04.2008 в 19:50.
Причина: Добавлено сообщение