delphi Код:
//FreedomEmulator v1.0beta
//скрипт скрывающий нпс и\или игроков
//помогает снять нагрузку с несчастного клиента
//при убивании пакетов активность можно посмотреть в отдельном окне
//тестировался на la2c6 abyss 10alpha
//(c)metalFan
const name=('metalFan');
var
frm,frm2: TForm;
Button1,Button2,Button3,Button4,Button5: TButton;
m:TMemo;
box:TGroupBox;
i,k,RaceID,SexID,ClassID: integer;
r1,r2,r3,s:boolean;
CharName,FName,VictimName,race,sex,class,message: string;
Inventory: array[0..79,0..9] of integer;
IdItem:real;
zu:Tlabel;
procedure Init; //Вызывается при включении скрипта
begin
//формочка
frm2 := TForm.Create(Application);
frm2.Caption := 'Activity (player\class\race\sex)';
frm2.BorderStyle := bsSizeable;
frm2.Position := poDesigned;
frm2.Width:=300;
frm2.Height:=200;
frm2.OnClose := @FormClose;
frm := TForm.Create(nil);
frm.Caption := 'FreedomEmulator by metalFan v1.0b';
frm.BorderStyle := bsDialog;
frm.Position := poScreenCenter;
frm.Width:=295;
frm.Height:=120;
frm.OnClose := @FormClose;
box:=TGroupBox.Create(nil);
box.parent:=frm;
box.Width:=273;
box.Height:=73;
box.Left := 8;
box.top := 8;
box.align:=alnone;
zu:=Tlabel.create(nil);
zu.parent:=frm;
zu.Width:=73;
zu.Height:=25;
zu.top:=52;
zu.left:=184;
zu.Caption:=('(c)metalFan');
zu.Transparent := False;
zu.Visible := True;
m:=TMemo.Create(frm2);
m.parent:=frm2;
m.align:=alClient;
m.ReadOnly:=true;
m.ScrollBars:=ssBoth;
Button1 := TButton.Create(frm);
Button1.Parent := frm;
Button1.Caption := '>.<';
Button1.Left := 16;
Button1.Top := 16;
Button1.onClick := @Action1;
Button1.OnMouseMove := @Button1MouseMove;
Button2 := TButton.Create(frm);
Button2.Parent := frm;
Button2.Caption := '>.<';
Button2.Left := 96;
Button2.Top := 16;
Button2.onClick := @Action2;
Button2.OnMouseMove := @Button2MouseMove;
Button3 := TButton.Create(frm);
Button3.Parent := frm;
Button3.Caption := '>.<';
Button3.Left := 16;
Button3.Top := 48;
Button3.onClick := @Action3;
Button3.OnMouseMove := @Button3MouseMove;
Button4 := TButton.Create(frm);
Button4.Parent := frm;
Button4.Caption := '>.<';
Button4.Left := 96;
Button4.Top := 48;
Button4.onClick := @Action4;
Button4.OnMouseMove := @Button4MouseMove;
Button5 := TButton.Create(frm);
Button5.Parent := frm;
Button5.Caption := '>.<';
Button5.Left := 176;
Button5.Top := 16;
Button5.onClick := @Action5;
Button5.OnMouseMove := @Button5MouseMove;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 4B 00 69 00 6C 00 6C 00 20 00 50 00 6C 00 61 00 79 00 65 00 72 00 73 00 20 00 2D 00 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 35 04 42 04 20 00 32 04 41 04 35 04 45 04 20 00 3F 04 35 04 40 04 41 04 3E 04 3D 04 30 04 36 04 35 04 39 04 2C 00 20 00 4B 00 69 00 6C 00 6C 00 20 00 4E 00 70 00 63 00 20 00 2D 00 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 35 04 42 04 20 00 32 04 41 04 35 04 45 04 20 00 32 04 35 04 3D 04 34 04 3E 04 40 04 3E 04 32 04 20 00 3A 00 29 00 20 00 2C 00 20 00 43 00 75 00 72 00 65 00 20 00 2D 00 20 00 32 04 4B 04 3A 04 3B 04 4E 04 47 04 30 04 35 04 42 04 20 00 41 04 3A 04 40 04 4B 04 32 04 30 04 3B 04 3A 04 43 04 2C 00 20 00 34 04 3B 04 4F 04 20 00 3E 04 42 04 3E 04 31 04 40 04 30 04 36 04 35 04 3D 04 38 04 4F 04 20 00 32 04 41 04 35 04 45 04 20 00 32 04 3E 04 3A 04 40 04 43 04 33 04 20 00 32 04 3A 04 3B 04 4E 04 47 04 38 04 42 04 35 04 20 00 38 04 20 00 37 04 30 04 42 04 35 04 3C 04 20 00 32 04 4B 04 3A 04 3B 04 4E 04 47 04 38 04 42 04 35 04 20 00 32 04 38 04 34 04 35 04 3E 04 41 04 4A 04 35 04 3C 04 3A 04 43 04 20 00 40 04 3E 04 3B 04 38 04 3A 04 3E 04 32 04 20 00 28 00 41 04 29 00 6D 00 65 00 74 00 61 00 6C 00 46 00 61 00 6E 00 00 00');
SendToClientEx(name);
frm.show;
frm2.Show;
r1:=False;
r2:=False;
r3:=True;
s:=true;
end;
procedure Free; //Вызывается при выключении скрипта
begin
button1.free;
button2.free;
button3.free;
m.free;
frm2.free;
frm.free;
end;
//(c)NLObP скажи нет случайному закрытию формы
procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
end;
procedure OnDisconnect(WithClient: Boolean); //Вызывается при установке соединения
begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
end;
procedure Button1MouseMove(Sender: TButton);
begin
Button1.Caption := 'Kill players';
end;
procedure Button2MouseMove(Sender: TButton);
begin
Button2.Caption := 'Kill npc';
end;
procedure Button3MouseMove(Sender: TButton);
begin
Button3.Caption := 'Stop filter';
end;
procedure Button4MouseMove(Sender: TButton);
begin
Button4.Caption := 'Switch';
end;
procedure Button5MouseMove(Sender: TButton);
begin
if s=true then
begin
Button5.Caption := 'Hide Monitor'
end else
begin
Button5.Caption := 'Show Monitor';
end;
end;
procedure Action1(Sender: TButton);
begin
r1:=True;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 23 04 31 04 38 04 32 04 30 04 4E 04 20 00 38 04 33 04 40 04 3E 04 3A 04 3E 04 32 04 00 00');
SendToClientEx(name);
end;
procedure Action2 (Sender: TButton);
begin
r2:=True;
buf:=Hstr('4A 00 00 00 00 0A 00 00 00 00 00 23 04 31 04 38 04 32 04 30 04 4E 04 20 00 32 04 35 04 3D 04 34 04 3E 04 40 04 3E 04 32 04 00 00');
SendToClientEx(name);
end;
procedure Action3 (Sender: TButton);
begin
Button3.Caption := 'Load...';
r1:=False;
r2:=False;
buf:=Hstr('CF');
SendToServerEx(name);
delay(5000);
Button3.Caption := 'Done';
end;
procedure Action4 (Sender: TButton);
begin
if r3=true then
begin
r3:=False;
Button4.Caption := 'Stop...';
m.Lines.Add('Остановка монитора');
end
else
begin r3:=true;
Button4.Caption := 'Start...';
m.Lines.Add('Запуск монитора');
end;
delay(1000);
Button4.Caption := 'Done';
end;
procedure Action5 (Sender: TButton);
begin
if s=true then
begin
m.Lines.Add('Сворачиваю окошко с живностью');
s:=false;
m.Lines.Add('>.<');
delay(1000);
frm2.hide;
Button5.Caption := '>.<';
end else
begin
frm2.Show;
s:=True;
delay(1000);
m.Lines.Add('Разворачиваю окошко с живностью');
Button5.Caption := '>.<';
end;
end;
//(c)Shura1oplot инвентарь
procedure InventoryCreate;
var
i,k: integer;
begin
for i:=0 to 79 do
if (i<ReadH(4)) then begin
Inventory[i,0]:=ReadH(i*28+6); // itemType1
Inventory[i,1]:=ReadD(i*28+8); // ObjectId
Inventory[i,2]:=ReadD(i*28+12); // ItemID
end else
for k:=0 to 9 do Inventory[i,k]:=0; // забиваем нулями
end;
function GetInv(obj,up,down:integer): integer;
var
i: integer;
begin
for i:=0 to 79 do
if (Inventory[i,up]=obj) then begin
Result:=Inventory[i,down];
exit;
end;
Result:=-1;
end;
begin
if (FromServer) and (ConnectName=name) then
case pck[1] of
#$03: begin
if r1=true then
begin
pck:='';
end;
end;
#$16: begin
if r2=true then
begin
pck:='';
end;
end;
end;
if FromServer and (pck[1]=#$03) and r3=true then
begin
k:=22;
FName:=ReadS(k);
RaceID:=ReadD(k);
SexID:=ReadD(k);
ClassID:=ReadD(k);
case RaceID of
0:race:='Human';
1:race:='Elf';
2:race:='Dark Elf';
3:race:='Оrc';
4:race:='Dwarf';
end;
case SexID of
0:sex:='Male';
1:sex:='Female';
end;
case ClassID of
0:class:='Fighter';
1:class:='Warrior';
2:class:='Gladiator';
88:class:='Duelist';
3:class:='Warlord';
89:class:='Dreadnought';
4:class:='Knight';
5:class:='Paladin';
90:class:='PhoenixKnight';
6:class:='DarkAvenger';
91:class:='HellKnight';
7:class:='Rogue';
8:class:='TreasureHunter';
93:class:='Adventurer';
9:class:='Hawkeye';
92:class:='Sagittarius';
10:class:='Mage';
11:class:='Wizard';
12:class:='Sorceror';
94:class:='Archmage';
13:class:='Necromancer';
95:class:='Soultaker';
14:class:='Warlock';
96:class:='ArcanaLord';
15:class:='Cleric';
16:class:='Bishop';
97:class:='Cardinal';
17:class:='Prophet';
98:class:='Hierophant';
18:class:='Fighter';
19:class:='Knight';
20:class:='TempleKnight';
99:class:='EvaTemplar';
21:class:='SwordSinger';
22:class:='Scout';
23:class:='PlainsWalker';
101:class:='WindRider';
24:class:='SilverRanger';
102:class:='MoonlightSentinel';
25:class:='Mage';
26:class:='Wizard';
27:class:='SpellSinger';
103:class:='MysticMuse';
28:class:='ElementalSummoner';
104:class:='ElementalMaster';
29:class:='Oracle';
30:class:='Elder';
105:class:='EvaSaint';
31:class:='Fighter';
32:class:='PaulusKnight';
33:class:='ShillienKnight';
106:class:='ShillienTemplar';
34:class:='BladeDancer';
107:class:='SpectralDancer';
35:class:='Assassin';
36:class:='AbyssWalker';
108:class:='GhostHunter';
37:class:='PhantomRanger';
109:class:='GhostSentinel';
38:class:='Mage';
39:class:='DarkWizard';
40:class:='Spellhowler';
110:class:='StormScreamer';
41:class:='PhantomSummoner';
111:class:='SpectralMaster';
42:class:='ShillienOracle';
43:class:='ShillienElder';
112:class:='ShillienSaint';
44:class:='Fighter';
45:class:='Raider';
46:class:='Destroyer';
113:class:='Titan';
47:class:='Monk';
48:class:='Tyrant';
114:class:='GrandKhauatari';
49:class:='Mage';
50:class:='Shaman';
51:class:='Overlord';
115:class:='Dominator';
52:class:='Warcryer';
116:class:='Doomcryer';
53:class:='Fighter';
54:class:='Scavenger';
55:class:='BountyHunter';
117:class:='FortuneSeeker';
56:class:='Artisan';
57:class:='Warsmith';
118:class:='Maestro';
end;
Message:=(class+ ' |' +race+ ' |' +sex+ ' |');
m.Lines.Add(FName+' | '+Message);
end;
end.
end.
end.
в общем идете вы в гиран мило купить бутылки у вендора на сервере где онлайн под пару тысяч закатил, а там...
лаги...
всюду гномы трейдеры и ктото бегает в общем очень плохо ващему слабому компьютеру...
но этот скрипт если не полностью, (MoveToPawn, MoveToLocation ни как не убить =\ хотя...) то облягчит вам жизнь, он скроет всех ненужных игроков и\или вендоров
функции можно включать\отключать в общем методом тыка думаю разберетесь