[Share] Scripts for l2phx
[hide][align=left] Here I'm planned posted scripts for l2packetHack, and replanish of content.[color=black]Ferst script "warrior helper" Char warrior fallawing the main char and help him in a fight)
Code:
Capabilities:
1. Can fallaw the player
2. Help fight.
3. Can healing (HP pots).
4. For script it's not importantly that players in party, or not in party.
5. Working on same Interlude servers
Instruction:
1. Run packet hack
2. Run 2 client's of the game.
3. Ask the name of main charecter and support.
4. Carefully configure other constant's in script.
5.Run script
}
//######################## Section of configure######################################################
const
interlude = true; // C6 - true, C4 - false;
CommanderName = 'abc'; // nick of main charecter
AssistantName = 'def'; // nick of helper
CommanderBot = true; // main it's bot or man
HPMedium = 70; // % when we must healing HP with pots
HPBottleID = 1061; // ItemID 1060=Lesser Healing Potion; 1061=Healing Potion; 1539=Greater Healing Potion;
DrinkDelay = 14; // reapeat time (10 - 20 sec)
InvRazmer = 99; // Inventor from assistant -1 (if invetor 80, then writting 79, if 100, so writting 99)
//#################################################################################################
var
CommanderX, CommanderY, CommanderZ : integer; // my stats
CommanderID, CommanderHP, CommanderMaxHP: integer;
AssistX, AssistY, AssistZ : integer; // stats helper
AssistID, AssistHP, AssistMaxHP: integer;
AssistMP, AssistMaxMP : integer;
AssistHPlevelProcent : integer;
TargetID : integer;
time1: integer;
Inventory: array[0..InvRazmer, 0..9] of integer; // inventor (itemType1, ObjectID, ItemID, count, itemType2, CustType1, isEquipped, BodyPart, EnchantLevel, CustType2)
HPBottleObjID: integer; // ObjectID pots
HpBottleCount: integer; // how long pots
procedure Init; //begining when script started
begin
CommanderID:= 0; // zero all data
CommanderX:= 0;
CommanderY:= 0;
CommanderZ:= 0;
CommanderID:= 0;
CommanderHP:= 0;
CommanderMaxHP:= 0;
// MyMP:= 0;
// MyMaxMP:= 0;
AssistID:= 0;
AssistX:= 0;
AssistY:= 0;
AssistZ:= 0;
AssistID:= 0;
AssistHP:= 0;
AssistMaxHP:= 0;
AssistMP:= 0;
AssistMaxMP:= 0;
TargetID:=0;
time1:=1;
buf:= #$0F; //requiers packet of invetor and userinfo
SendToServerEx(AssistantName);
SendToServerEx(CommanderName);
end;
function Wait(var tick: integer;Timewait: Integer): Boolean; // ÑÐºÐ²Ð¾Ð·Ð½Ð°Ñ Ð¿ÑовеÑка без оÑÑановки ÑкÑипÑа (c)dmitry501, modifed by Sh00rGo
var
t: integer;
begin
result:=false;
t:=Round(Time*86400);
if t>(tick+Timewait) then begin
if tick>0 then result:=true;
tick:=t;
end;
end;
//############################## ÐодÑÐ»Ñ ÑабоÑÑ Ñ ÐнвенÑаÑем ###########################
procedure InventoryCreate;
var
i,k, offset : integer;
begin
if interlude then offset:= 8 else offset:=0;
for i:=0 to InvRazmer do
if (i<ReadH(4)) then begin
Inventory[i,0]:=ReadH(i*(28+offset)+6); // itemType1
Inventory[i,1]:=ReadD(i*(28+offset)+8); // ObjectId
Inventory[i,2]:=ReadD(i*(28+offset)+12); // ItemID
Inventory[i,3]:=ReadD(i*(28+offset)+16); // count
Inventory[i,4]:=ReadH(i*(28+offset)+20); // itemType2
Inventory[i,5]:=ReadH(i*(28+offset)+22); // CustType1
Inventory[i,6]:=ReadH(i*(28+offset)+24); // isEquipped
Inventory[i,7]:=ReadD(i*(28+offset)+26); // BodyPart
Inventory[i,8]:=ReadH(i*(28+offset)+30); // EnchantLevel
Inventory[i,9]:=ReadH(i*(28+offset)+32); // CustType2
end else
for k:=0 to 9 do Inventory[i,k]:=0; // забиваем нÑлÑми
end;
function GetInv(obj,up,down:integer): integer; // up и down не пÑовеÑÑÑÑÑÑ
var // 0-itemType1, 1-ObjectId, 2-ItemID, 3-count, 4-itemType2, 5-CustType1, 6-isEquipped, 7-BodyPart, 8-EnchantLevel, 9-CustType2
i: integer;
begin
for i:=0 to InvRazmer do if (Inventory[i,up]=obj) then
begin
Result:=Inventory[i,down];
exit;
end;
Result:=-1;
end;
procedure UseItemObjID(ItemObjID:integer); //ÐÑполÑзоваÑÑ Ð¿ÑÐµÐ´Ð¼ÐµÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ItemID
begin
buf:=#$14;
WriteD(ItemObjID);
WriteD(0);
SendToServerEx(AssistantName);;
end;
//############################################################################################
procedure AssistUserInfo; // обновление даннÑÑ
о аÑÑиÑÑенÑе
var
i:word;
begin
AssistID:=ReadD(18);
AssistX:=ReadD(2);
AssistY:=ReadD(6);
AssistZ:=ReadD(10);
i:=22;
ReadS(i);
if interlude then i:=i+48 else i:=i+44;
AssistMaxHP:=ReadD(i);
AssistHP:=ReadD(i);
AssistMaxMP:=ReadD(i); // ÑиÑÑо инÑоÑмаÑивно
AssistMP:=ReadD(i);
// i:=i+363; пока не иÑполÑзÑеÑÑÑ
// MyMaxCP:=ReadD(i);
// MyCP:=ReadD(i);
end;
procedure AssistStatusUpdate; // обновление даннÑÑ
о аÑÑиÑÑенÑе
var
i:integer;
begin
for i:=0 to ReadD(6)-1 do
case pck[i*8+10] of
#$09: AssistHP:=ReadD(i*8+14);
#$0A: AssistMaxHP:=ReadD(i*8+14);
#$0B: AssistMP:=ReadD(i*8+14);
#$0C: AssistMaxMP:=ReadD(i*8+14);
// #$21: MyCP:=ReadD(i*8+14); пока не иÑполÑзÑеÑÑÑ
// #$22: MyMaxCP:=ReadD(i*8+14);
end;
if AssistMaxHP > 0 then AssistHPlevelProcent:= Round((AssistMaxHP/100)*HPMedium);
end;
procedure CommanderUserInfo; // обновление даннÑÑ
о Ñебе
var
i:word;
begin
CommanderID:=ReadD(18);
CommanderX:=ReadD(2);
CommanderY:=ReadD(6);
CommanderZ:=ReadD(10);
i:=22;
ReadS(i);
if interlude then i:=i+48 else i:=i+44;
CommanderMaxHP:=ReadD(i);
CommanderHP:=ReadD(i);
end;
procedure Action; // команда дейÑÑвиÑ
begin
buf:=#$04; //action
WriteD(TargetID);
WriteD(AssistX);
WriteD(AssistY);
WriteD(AssistZ);
WriteC(0);
SendToServerEx(AssistantName);
end;
procedure DrinkBottle; // пÑем бÑÑÑлки и Ñледим за иÑ
колиÑеÑÑвом
begin
if HPBottleCount > 0 then
begin
UseItemObjID(HPBottleObjID);
dec (HPBottleCount);
end;
end;
begin // Ðалее обÑабоÑка вÑ
одÑÑиÑ
пакеÑов
if pck = '' then exit;
if (ConnectName = CommanderName) and FromServer then
case pck[1] of
#$04: if ReadS(22) = CommanderName then CommanderUserInfo;
end;
if (ConnectName = AssistantName) and FromServer then
case pck[1] of
#$04: if ReadS(22) = AssistantName then AssistUserInfo;
#$0E: if AssistID=ReadD(2) then // StatusUpdate:h(ObjectID)d(Attributes)
begin
AssistStatusUpdate;
if (AssistHP > 0) and (AssistHP < AssistHPlevelProcent) then if Wait(time1, DrinkDelay) then DrinkBottle; // пÑем бÑÑÑлки Ñ Ð¸Ð½ÑеÑвалом в 19 Ñек
if (AssistHP > 0) and (AssistHP > AssistHPlevelProcent) then time1:=1;
end;
#$1B: begin
InventoryCreate; // ÐнвенÑаÑÑ
HPBottleObjID:= getinv(HPBottleID, 2,1);
HPBottleCount:= getinv(HPBottleID, 2,3);
end;
//#$27: InventoryUpdate;
end;
if (ConnectName = AssistantName) and FromServer and CommanderBot then
case pck[1] of
#$01: if CommanderID = ReadD(2) then
begin
TargetID:= CommanderID;
Action; Action;
end;
#$05, #$60 : if CommanderID = ReadD(2) then //Attack:d(AttackerID)d(TargetID)d(Damage)b(Flags)d(X)d(Y)d(Z)h(Hits)
begin
TargetID:= ReadD(6);
Action; Action;
end;
end;
if (ConnectName = CommanderName) and FromClient and (not CommanderBot) then
case pck[1] of
#$01: begin
TargetID:= CommanderID;
Action; Action;
end;
#$04: begin
TargetID:= ReadD(2); // Action:h(ObjectID)d(OriginX)d(OriginY)d(OriginZ)b(ActionID)
Action;
end;
end;
end.
Level up script for the dragon
Code:
//auto level up for 'Hatchling of the Stars'
//******************************************************************************
// 1)call the dragon
//
// 2 - give the eat
//******************************************************************************
// When healer select taret , dragon attacked them ,if it's need in heal he healing himself
// after fight fallowing the healer
//******************************************************************************
//******************************************************************************
// const of the scripts
//******************************************************************************
const
Owner='Sex_Driver'; //nick of the owner
Pet=''; //name of pet
var
OwnerID, PetID, TargetID : Integer; //ID owner, pet, ID target
CoordX, CoordY, CoordZ : String; //coordination of the pet
Cmd :String; //commands for pet
CurHP, MaxHP, CurMP, MaxMP, i : Integer;
tick: Integer;
timerA: TTimer;
timerB: TTimer;
timerHP: TTimer;
MagicAtck:boolean;
//******************************************************************************
// ÐодпÑогÑаммÑ
//******************************************************************************
//(c)dmitry501
//еÑли ÑÑавиÑÑ sleep() Ñо ÑкÑÐ¸Ð¿Ñ Ð¾ÑÑанавливаеÑÑÑ Ð½Ð° вÑемÑ, но и пакеÑÑ Ñоже
//не пÑинимаÑÑÑÑ Ð¸ не оÑпÑавлÑÑÑÑÑ, Ñак Ð²Ð¾Ñ ÑÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð·Ð²Ð°Ð»ÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑого
function Pause(Timewait: Integer):Boolean;
// ÑÐºÐ²Ð¾Ð·Ð½Ð°Ñ Ð¿ÑовеÑка без оÑÑановки ÑкÑипÑа
var
t : integer;
begin
result:=false;
t:= Round(Time*86400);
if t>(tick+Timewait) then
begin
tick:=t;
result:=true;
end;
end;
//вÑе ÑообÑÐµÐ½Ð¸Ñ Ð±Ð¾Ñов в пÑиваÑном ÑаÑе паÑилидеÑа
//Ð²Ð¸Ð´Ð½Ñ ÑолÑко нам
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(ConnectName);
WriteS(msg);
SendToClientEx(Owner);
end;
procedure OnTimerA(Sender: TObject);
begin
//Ð¿Ð°ÐºÐµÑ RequestActionUse;
buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магиÑеÑÐºÐ°Ñ Ð°Ñака пеÑа
SendToServerEX(Owner);
//Say('магиÑеÑÐºÐ°Ñ Ð°Ñака пеÑа');
end;
procedure OnTimerB(Sender: TObject);
begin
//Ð¿Ð°ÐºÐµÑ RequestActionUse;
buf:=hstr('45 10 00 00 00 00 00 00 00 00'); //аÑака пеÑа
SendToServerEX(Owner);
end;
procedure OnTimerHP(Sender: TObject);
begin
buf:=hstr('45 EE 03 00 00 00 00 00 00 00'); //Ð¿ÐµÑ Ð»ÐµÑиÑÑÑÑ
SendToServerEX(Owner);
end;
//******************************************************************************
// ÐÑзÑваеÑÑÑ Ð¿Ñи вклÑÑении ÑкÑипÑа
//******************************************************************************
procedure Init;
begin
MagicAtck:=true; //магиÑеÑÐºÐ°Ñ Ð°Ñака
OwnerID:=0;
PetID:=0;
timerA:=TTimer.Create(nil);
timerA.OnTimer:=@OnTimerA;
timerA.enabled:=false;
timerA.interval:=5000; //вÑÐµÐ¼Ñ Ð¾ÑкаÑа магии пеÑа
timerB:=TTimer.Create(nil);
timerB.OnTimer:=@OnTimerB;
timerB.enabled:=false;
timerB.interval:=5000; //вÑÐµÐ¼Ñ Ð¾ÑкаÑа
timerHP:=TTimer.Create(nil);
timerHP.OnTimer:=@OnTimerHP;
timerHP.enabled:=false;
timerHP.interval:=2000; //вÑÐµÐ¼Ñ Ð¾ÑкаÑа леÑÐµÐ½Ð¸Ñ Ð¿ÐµÑа
end;
//******************************************************************************
// ÐÑзÑваеÑÑÑ Ð¿Ñи вÑклÑÑении ÑкÑипÑа
//******************************************************************************
procedure Free;
begin
timerA.Free;
timerB.Free;
timerHP.Free;
end;
//******************************************************************************
// ÐÑзÑваеÑÑÑ Ð¿Ñи пÑиÑ
оде каждого пакеÑа, еÑли ÑкÑÐ¸Ð¿Ñ Ð²ÐºÐ»ÑÑен
//******************************************************************************
begin
//не обÑабаÑÑваем пÑÑÑÑе пакеÑÑ
if pck='' then exit;
//еÑли Ð¾Ñ ÑеÑвака пÑинÑÑ Ð¿Ð°ÐºÐµÑ Ñ UserInfo
if FromServer and (OwnerID=0) and (ConnectName=Owner) and (pck[1]=#$04) then begin
//Ðапоминаем ÑобÑÑвеннÑй ÐÐ
OwnerID:=ReadD(18);
Say('СкÑÐ¸Ð¿Ñ Ð³Ð¾Ñов к ÑабоÑе!');
end;
//Ð¿Ð°ÐºÐµÑ Attack
//аÑаковаÑÑ, еÑли Ñ
озÑин напал на ÑелÑ
if FromServer and (ConnectName=Owner) and (pck[1]=#$05) and (OwnerID=ReadD(2)) then begin
if (TargetID<>0) and (OwnerID<>TargetID) then begin
if magicatck then begin
buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магиÑеÑÐºÐ°Ñ Ð°Ñака пеÑа
SendToServerEX(Owner);
Say('ÐÑакÑÑ Ð¼Ð°Ð³Ð¸ÐµÐ¹!');
TimerA.enabled:=true;
TimerB.enabled:=false;
//Say('ÐклÑÑили ÑаймеÑ');
end
else begin
Say('ÐÑакÑÑ ÑелÑ!');
TimerB.enabled:=true;
TimerA.enabled:=false;
end;
end;
end;
//Ð¿Ð°ÐºÐµÑ MagicSkillUse
//аÑаковаÑÑ, еÑли Ñ
озÑин напал на ÑÐµÐ»Ñ Ð¼Ð°Ð³Ð¸ÐµÐ¹
if FromServer and (ConnectName=Owner) and (pck[1]=#$48) and (OwnerID=ReadD(2)) then begin
if (TargetID<>0) and (OwnerID<>TargetID) then begin
if magicatck then begin
buf:=hstr('45 ED 03 00 00 00 00 00 00 00'); //магиÑеÑÐºÐ°Ñ Ð°Ñака пеÑа
SendToServerEX(Owner);
Say('ÐÑакÑÑ Ð¼Ð°Ð³Ð¸ÐµÐ¹!');
TimerA.enabled:=true;
TimerB.enabled:=false;
//Say('ÐклÑÑили ÑаймеÑ');
end
else begin
Say('ÐÑакÑÑ ÑелÑ!');
TimerB.enabled:=true;
TimerA.enabled:=false;
end;
end;
end;
//Ð¿Ð°ÐºÐµÑ TargetSelect
//еÑли пÑинÑÑ Ð¿Ð°ÐºÐµÑ Ñо Ñменой ÑаÑгеÑа
if FromServer and (ConnectName=Owner) and (pck[1]=#$a6) then begin
//запоминаем ÐÐ ÑаÑгеÑа Ð´Ð»Ñ Ð°ÑÑиÑÑа
TargetID:=ReadD(2);
//Say('ÐÑо ÐÐ ÑаÑгеÑа.');
end;
//Ð¿Ð°ÐºÐµÑ TargetUnselected
//ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸Ñ Ð¾Ñменил ÑелÑ
if FromServer and (ConnectName=Owner) and (pck[1]=#$2a) and (OwnerID=ReadD(2)) then begin
TargetID:=0;
buf:=hstr('45 11 00 00 00 00 00 00 00 00'); //stop current action
SendToServerEX(Owner);
//Say('СÑоп!');
TimerA.enabled:=false;
TimerB.enabled:=false;
//Say('ÐÑклÑÑили ÑаймеÑ');
end;
//еÑли Ð¾Ñ ÑеÑвака пÑинÑÑ Ð¿Ð°ÐºÐµÑ Ñ PetInfo
if FromServer and (PetID=0) and (ConnectName=Owner) and (pck[1]=#$b1) then begin
//Ðапоминаем ÐРпеÑа
PetID:=ReadD(6);
//ÑмеÑение пеÑеменное, завиÑÐ¸Ñ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÐеÑа(LenName*2+2) и имени ЧаÑа(LenName*2+2)
//126 Ð±Ð°Ð¹Ñ Ð´Ð¾ имени ÐеÑа(LenName*2+2) и имени ЧаÑа(LenName*2+2) поÑле 20 Ð±Ð°Ð¹Ñ (+1 наÑало CurHP)
i:=126+(Length(Pet)*2+2)+(Length(Owner)*2+2)+20+1;
CurHP:=ReadD(i);
MaxHP:=ReadD(i);
CurMP:=ReadD(i);
MaxMP:=ReadD(i);
if (CurHP<MaxHP)
then TimerHP.enabled:=true
else TimerHP.enabled:=false;
if (CurMP<MaxMP/2) then MagicAtck:=false else MagicAtck:=true; //магиÑеÑÐºÐ°Ñ Ð°Ñака
end;
//Ð¿Ð°ÐºÐµÑ PetStatusUpdate
//пÑовеÑÑем на Ð¶Ð¸Ð·Ð½Ñ Ð¿ÐµÑа
if FromServer and (ConnectName=Owner) and (pck[1]=#$b5) and (PetID=ReadD(6)) then begin
//ÑмеÑение пеÑеменное, завиÑÐ¸Ñ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÐеÑа(LenName*2+2)
//21 Ð±Ð°Ð¹Ñ Ð´Ð¾ имени ÐеÑа(LenName*2+2) поÑле 8 Ð±Ð°Ð¹Ñ (+1 наÑало CurHP)
i:=21+(Length(Pet)*2+2)+8+1;
CurHP:=ReadD(i);
MaxHP:=ReadD(i);
CurMP:=ReadD(i);
MaxMP:=ReadD(i);
//Say('СÑиÑÑваем паÑамеÑÑÑ Ð¿ÐµÑа');
if (CurHP<MaxHP)
then TimerHP.enabled:=true
else TimerHP.enabled:=false;
if (CurMP<MaxMP/2) then MagicAtck:=false else MagicAtck:=true; //магиÑеÑÐºÐ°Ñ Ð°Ñака
end;
end.
[/hide]
Dont forget to smile
|