// MultyFix.fsc v1.0 by UnikZ for AllCheats.ru
// Этот скрипт-энциклопедия содержит в себе следующие исправления:
// PacketError fix
// MoveBackwardToLocation fix
// EnterWorld fix
// Sit&Stand fix
// NPCDialogs fix By PiR(c)
// RequestMagicSkillUse fix By ShadeOfNothing(c)
// PartySmallWindowUpdate fix By Be3geBJIa3(c)
// ProtocolVersion fix By BuuG_T(c)
const
EnterWorldPacket = HStr('6B001100000000000000000000000000000000C9BCF2A7665A0B9836A5BD8 9ED7FE4D76B49E29FEF76EBCEA3FAF4BF0C64A3B4A4CEDCC6083E6EEA45CAD3FE881387 B8062C96F09B1E8EBCC69B98C86316CFD023480000C0A8010C0A83040151587A0151587 A2651587A41');
Title = 'Title: Исправление разговоров с НПЦ и замена кнопок ссылками by PiR for allcheats.ru ';
var
PName,StatusPacket,buf: String;
i,i1,i2,iPos, id,CR, PObjectID,PMaxHP,PCurHP,PMaxMP,PCurMP,PMaxCP,PCurCP: Integer;
normlink,lowlink: TStringList;
KillButtons:Boolean=True; //Поставить в False, если вам неудобно убирать кнопки.
procedure OnCreate;
begin
scripttimeout(99999);
normlink:=TstringList.create;
lowlink:=TstringList.create;
end;
Procedure OnDestroy;
begin
normlink.free;
lowlink.free;
end;
procedure NpcHtmlMessage(bf:string);
var value,action,txt,txt2,out,link:string='';
i,butn,val,act,id,c:integer=0;
begin
scanpck5(bf,3,'cds',null,ID,txt,null,null);
if killbuttons then
begin
txt2:=txt;
lowercase(txt2);
repeat
butn:=pos('<button',txt2);
if butn=0 then break;
out:=out+copy(txt2,1,butn-1);
deletestr(txt2,1,butn-1);
val:=pos('value="',txt2);
act:=pos('action="',txt2);
if val>act then
begin
deletestr(txt2,1,act+7);
c:=pos('"',txt2);
action:=copy(txt2,1,c-1);
val:=pos('value="',txt2);
deletestr(txt2,1,val+6);
c:=pos('"',txt2);
value:=copy(txt2,1,c-1);
end else
begin
deletestr(txt2,1,val+6);
c:=pos('"',txt2);
value:=copy(txt2,1,c-1);
act:=pos('action="',txt2);
deletestr(txt2,1,act+7);
c:=pos('"',txt2);
action:=copy(txt2,1,c-1);
end;
c:=pos('>',txt2);
deletestr(txt2,1,c);
out:=out+' <a action="'+action+'">'+value+'</a> ';
inc(i);
until i>100;
out:=trim(out+txt2);
case cr of
1:_gOutBuff:=formatpck('%cds',[#$0f,id,out+#0]);
2:_gOutBuff:=formatpck('%cds',[#$19,id,out+#0]);
end;
end;
i:=0;
repeat
c:=pos('bypass -h',txt);
if c=0 then break;
deletestr(txt,1,c+9);
c:=pos('"',txt);
link:=copy(txt,1,c-1);
normlink.add(link);
lowlink.add(lowercase(link));
until c=0;
end;
procedure RequestBypassToServer(bf:string);
var link:string;
k:integer;
begin
scanpck5(bf,3,'cs',null,link,null,null,null);
writelogln(link);
k:=lowlink.indexof(trim(lowercase(link)));
if k=-1 then exit;
case cr of
1:_gOutBuff:=FormatPck('%cs',[#$21,normlink[k]+#0]);
2:_gOutBuff:=FormatPck('%cs',[#$23,normlink[k]+#0]);
end;
end;
BEGIN
if _gAbsNumPkt = 1 then begin
_gOutBuff := HStr('0B010E3F0300000907545603090B010702545456070002555600510053570 40755085401070153005655560106050451030851085156045406550802095156015306 55045300565653010902090151545109555609030407055504065504060904510108080 60552060401075403065255065555510102045403555401575155055205540751515507 0253530052055207015400030505080605050603000D080107090351030753095106075 40A50560252040555510253000854045256060209000803535601050055060856040D06 07520607040A0601045404000502045400095253050401040505015251520D065108095 453000D01020354530105030856540702540B06FB87B94A');
end;
if _gAbsNumPkt < 800 then
if (not _gFromServ) and StrCmp( copy(_gBuff,3,1), HStr('11') ) then begin
gBlockPacket;
gSys.EnSendS(EnterWorldPacket);
end;
if length(_gBuff) < 3 then gBlockPacket;
if ( _gFromServ) and StrCmp( copy(_gBuff,1,3), HStr('FF FF 86') ) then gBlockPacket;
if (not _gFromServ) and StrCmp(copy(_gBuff,1,3), HStr('1B 00 0F')) then begin
_gOutBuff := _gBuff + HStr('01 00 00 00');
_gOutBuff[1] := #$1F;
end;
if (not _gFromServ) and StrCmp( copy(_gBuff,1,3), HStr('03 00 8B') ) then gBlockPacket;
if (not _gFromServ) and StrCmp(copy(_gBuff,3,1), HStr('39')) then
if GInt( _gBuff, 8, 4) > 1 then begin
_gOutBuff := _gBuff;
PInt(_gOutBuff, 0, 8, 4);
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,1,3), HStr('07 00 36')) then
_gOutBuff := HStr('0C0056000000000000000000');
if (gSys.isGS > 0) and (_gFromServ) then begin
if StrCmp(copy(_gbuff,3,1),#$52) then begin
gSys.EnSendC(_gBuff);
PCurHP:= 0;
PMaxHP:= 0;
PCurMP:= 0;
PMaxMP:= 0;
PCurCP:= 0;
PMaxCP:= 0;
iPos:= ScanPck5(_gBuff, 4, 'dd', PObjectID, i, null, null, null);
while i>0 do begin
iPos:= ScanPck5(_gBuff, iPos, 'dd', i1, i2, null, null, null);
i:= i - 1;
case i1 of
9: PCurHP:= i2;
10: PMaxHP:= i2;
11: PCurMP:= i2;
12: PMaxMP:= i2;
33: PCurCP:= i2;
34: PMaxCP:= i2;
end;
end;
i := 0;
buf := Format('cdd',[$18,PObjectID,0]);
if PMaxHP>0 then begin
buf := buf + Format('dddd',[$09,PCurHP,$0A,PMaxHP]);
i := i + 2;
end;
if PMaxMP>0 then begin
buf := buf + Format('dddd',[$0B,PCurMP,$0C,PMaxMP]);
i := i + 2;
end;
if PMaxCP>0 then begin
buf := buf + Format('dddd',[$21,PCurCP,$22,PMaxCP]);
i := i + 2;
end;
if i>0 then PInt(buf,i,6,4);
_gOutBuff := Hpck(BufToHex(buf));
end;
end;
if cr<0 then exit;
id:=gint(_gBuff,3,1);
if _gAbsNumPkt<5 then
if (pos(HStr('05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52'),_gBuff) > 0) and (cr=0) then
if gint(_gBuff,4,4)>=828 then CR:=2
else CR:=1;
if (cr=0) and (_gAbsNumPkt>=5) then cr:=-1;
if (cr=1) then
case id of
$0F:if _gFromserv then NpcHtmlMessage(_gBuff);
$21:if not _gFromServ then RequestBypassToServer(_gBuff);
end;
if (cr=2) then
case id of
$19: if _gFromserv then NpcHtmlMessage(_gBuff);
$23: if not _gFromServ then RequestBypassToServer(_gBuff);
end;
END.
const
EnterWorldPacket = HStr('6B001100000000000000000000000000000000C9BCF2A7665A0B9836A5BD8 9ED7FE4D76B49E29FEF76EBCEA3FAF4BF0C64A3B4A4CEDCC6083E6EEA45CAD3FE881387 B8062C96F09B1E8EBCC69B98C86316CFD023480000C0A8010C0A83040151587A0151587 A2651587A41');
Title = 'Title: Исправление разговоров с НПЦ и замена кнопок ссылками by PiR ';
var
normlink,lowlink: TStringList;
KillButtons:Boolean=True; //Поставить в False, если вам неудобно убирать кнопки.
procedure OnCreate;
begin
scripttimeout(99999);
normlink:=TstringList.create;
lowlink:=TstringList.create;
end;
Procedure OnDestroy;
begin
normlink.free;
lowlink.free;
end;
BEGIN;END.
Procedure OnDeCode;
var le : integer;
s : string;
begin
if _dFromServ and (_gAbsNumPkt = 1) then gSys.Protocol := 871;
if _dFromServ and (_gAbsNumPkt = 2) then begin
if (gSys.TrafType = 2) then begin
le := length(_dBuff);
if (le in [$15,$18,$19,$1A,$1C,$21]) then begin
s := copy(_dBuff,5,8)+ HStr('C8279301A16C3197');
gSys.Kci := s; gSys.Kco := s; gSys.Ksi := s; gSys.Kso := s;
gSys.tKeyType := 3;
gSys.tPDecode := 2;
end;
end;
end;
end;
begin
if (length(_gBuff)<3) or (not (gsys.isgs>0)) then exit;
if (not _gFromServ) and strcmp(_gBuff[3],#$0F) then
if (length(_gBuff)<>31) then
_gOutBuff:=hstr('1F 00')+copy(_gBuff,3,25)+hstr('01 00 00 00');
end.
var
PObjectID,PMaxHP,PCurHP,PMaxMP,PCurMP,PMaxCP,PCurCP : Integer;
PName,StatusPacket : String;
begin
if (length(_gBuff)<3) or (not (gsys.isgs>0)) then exit;
if (not _gFromServ) and strcmp(_gBuff[3],#$0F) then
if (length(_gBuff)<>31) then
_gOutBuff:=hstr('1F 00')+copy(_gBuff,3,25)+hstr('01 00 00 00');
if _gFromServ then
begin
if StrCmp(copy(_gbuff,3,1),#$52) then // PartySmallWindowUpdate
begin
ScanPck5(_gbuff,ScanPck5(_gbuff,4,'dsddd',PObjectID,PName,PCurC P,PMaxCP,PCurHP),'ddd',PMaxHP,PCurMP,PMaxMP,null,null);
StatusPacket := FormatPck('%cdddddddddddddd',[$18,PObjectID,6,$09,PCurHP,$0A,PM axHP,$0B,PCurMP,$0C,PMaxMP,$21,PCurCP,$22,PMaxCP]);
gSys.EnSendC(StatusPacket);
end;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('63 00 68 00 61 00 74 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #67;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('6C 00 6F 00 74 00 6F 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #76;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('73 00 75 00 70 00 70 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #83;
_gOutBuff[46] := #77;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('71 00 75 00 65 00 73 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #81;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('62 00 75 00 79 00 20 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #66;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('73 00 65 00 6C 00 6C 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #83;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('74 00 65 00 72 00 72 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #84;
_gOutBuff[50] := #83;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('6F 00 6C 00 79 00 6D 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #79;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('64 00 65 00 70 00 6F 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #68;
_gOutBuff[46] := #80;
end;
if (not _gFromServ) and StrCmp(copy(_gBuff,32,8), HStr('77 00 69 00 74 00 68 00')) then begin
_gOutBuff := _gBuff;
_gOutBuff[32] := #87;
_gOutBuff[48] := #80;
end;
end.
Сообщений: 2731 Вас поблагодарили: 32 раз(а) в 27 сообщениях Зарегистрирован: 24.03.10 Со дня регистрации: 5901
Откуда: Россия
RE: L2walker: фикс скрипты
Multi_Interlude.fsc версия 1.5
допиленный Multi_Interlude.fsc
Новые плюшки
Html Парсинг, нумеруем строки
Кастомные команды .exp on .exp off
/unstuck из скриптов
Команда .tele парсинг телепортов из ALT+B
Фикс /invite теперь валкер отправляет инвайт даже если персонажа нет в зоне видимости
Реализовал автопринятие пати если персонажа нет в зоне видимости
Автоматическое использование сосок как в клиенте
Фикс бесконечного использования Death Penalty
Реализована функция покупки из .buy в L2Walker
Установка
Заменить Multi_Interlude.fsc на новый в папке l2walker\WPF\wpsc
Как использовать автопринятие в пати
Просто вписывайте ники в стандартный интерфейс L2Walker вкладка Party Settings > Auto Accept Invites:Name
Теперь работает когда персонаж вне зоны видимости
//1. Fix Move
//2. Анти Packet Error.
//3. RequestGMList
//4. RequestManorList
//5. RequestMagicSkillUse
//6. GG
//7. HPMPCP
//8. Fixawalk2
//9. Html Парсинг, нумеруем строки by OneFinal
//10. Кастомные команды .exp on .exp off by OneFinal
//11. /unstuck из скриптов by OneFinal
//12. Команда .tele парсинг телепортов из альтб by OneFinal
//13. Фикс /invite теперь валкер отправляет инвайт даже если персонажа нет в зоне видимости by OneFinal
//14. Реализовал автопринятие пати если персонажа нет в зоне видимости by OneFinal
//15. Автоматическое включение соулшотов\блес шотов .autoss bsss 1 (ssn ssd ssc ssb ssa sss bssn bssd bssc bssb bsss) 1 включить 0 выключить by OneFinal
//16. Fix DeathPenalty Scrolls
//17. Покупка итемов из .buy Комманда buy 1 5 купит 5 банок маны команда buy 40 1 купит 1 свиток пинальки S грейда
//Пример использования
//SAY(.buy)
//delay(500)
//SAY(buy 40 1)
procedure NpcHtmlMessage(bf:string);
var value,action,txt,txt2,out,link:string='';
i,alink,butn,val,val2,act,id,c:integer=0;
s:integer=1;
begin
scanpck5(bf,3,'cds',null,ID,txt,null,null);
txt2:=txt;
lowercase(txt2);
repeat
if length(bf) > 8000 then break;
alink:=pos('<a',txt2);
if alink=0 then break;
out:=out+copy(txt2,1,alink-1);
delete(txt2,1,alink-1);
act:=pos('action="',txt2);
delete(txt2,1,act+7);
c:=pos('"',txt2);
action:=copy(txt2,1,c-1);
case cr of
1:_gOutBuff:=formatpck('%cds',[#$0f,id,out+#0]);
2:_gOutBuff:=formatpck('%cds',[#$19,id,out+#0]);
end;
i:=0;
repeat
c:=pos('bypass -h',txt);
if c=0 then break;
deletestr(txt,1,c+9);
c:=pos('"',txt);
link:=copy(txt,1,c-1);
normlink.add(link);
lowlink.add(lowercase(link));
until c=0;
end;
procedure RequestBypassToServer(bf:string);
var link:string;
k:integer;
begin
scanpck5(bf,3,'cs',null,link,null,null,null);
if length(bf) > 8000 then break;
k:=lowlink.indexof(trim(lowercase(link)));
if k=-1 then exit;
case cr of
1:_gOutBuff:=FormatPck('%cs',[#$21,normlink[k]+#0]);
2:_gOutBuff:=FormatPck('%cs',[#$23,normlink[k]+#0]);
end;
end;
BEGIN
// Anti Packet Error.
if length(_gBuff) < 3 then gBlockPacket;
// RequestGMList
if (not _gFromServ) and StrCmp( copy(_gBuff,1,3), HStr('03 00 81') ) then gBlockPacket;
if (not _gFromServ) and StrCmp( copy(_gBuff,1,3), HStr('03 00 8B') ) then gBlockPacket;
if (_gFromServ) AND (StrCmp( copy(_gBuff,3,1), HStr('39'))) then
begin
if (itemID > 0) and (itemCount > 0) then
begin
gSys.EnSendS(formatPck('%cddd',[$A7,99999991,itemI D,itemCount]));
gBlockPacket;
end;
end;
end;
&nb sp;
//On Off Exp command .exp on .exp off
begin
if not _gFromServ then
if StrCmp(_gBuff, HStr('19 00 38 2E 00 65 00 78 00 70 00 20 00 6F 00 6600 66 00 00 00 00 00 00 00')) then
if trim(autosstext) = 'bssn' then ssID := 3947;
if trim(autosstext) = 'bssd' then ssID := 3948;
if trim(autosstext) = 'bssc' then ssID := 3949;
if trim(autosstext) = 'bssb' then ssID := 3950;
if trim(autosstext) = 'bssa' then ssID := 3951;
if trim(autosstext) = 'bsss' then ssID := 3952;
if trim(autosstext) = 'ssn' then ssID := 1835;
if trim(autosstext) = 'ssd' then ssID := 1463;
if trim(autosstext) = 'ssc' then ssID := 1464;
if trim(autosstext) = 'ssb' then ssID := 1465;
if trim(autosstext) = 'ssa' then ssID := 1466;
if trim(autosstext) = 'sss' then ssID := 1467;
if (ssID > 0) AND ((autossaction = 1) OR (autossaction = 0)) then _gOutBuff:=FormatPck('%chdd',[$D0,5,ssID,autossaction]);
e nd;
if cr<0 then exit;
idHtml:=gint(_gBuff,3,1);
if _gAbsNumPkt<5 then
if (pos(HStr('05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52'),_gBuff) > 0) and (cr=0) then
if gint(_gBuff,4,4)>=828 then CR:=2
else CR:=1;
if (cr=0) and (_gAbsNumPkt>=5) then cr:=-1;
if (cr=1) then
case idHtml of
$0F:if _gFromserv then NpcHtmlMessage(_gBuff);
$21:if not _gFromServ then RequestBypassToServer(_gBuff);
end;
if (cr=2) then
case idHtml of
$19: if _gFromserv then NpcHtmlMessage(_gBuff);
$23: if not _gFromServ then RequestBypassToServer(_gBuff);
end;
// MoveBackwardToLocation
begin
if gSys.TrafType <> 2 then exit;
if not( gSys.isGS > 0 ) then exit;
if ( length( _gBuff ) < 3 ) or ( gInt( _gBuff, 1, 2 ) = 2 ) then begin
gBlockPacket;
exit;
end else ID := gInt( _gBuff, 3, 1 );
if (_gAbsNumPkt = 1) then begin
packetID := $0;
if (ID = $0E) then begin
gSys.EnSendC( FormatPck( '%cddss', [$4A,0,$0A,#0,'==> FixMove. Kamael+ mode'+#0] ) );
packetID := $0F;
end;
if (ID = $00) then begin
gSys.EnSendC( FormatPck( '%cddss', [$4A,0,$0A,#0,'==> FixMove. C4 mode'+#0] ) );
packetID := $01;
end;
if (packetID = 0) then
gSys.EnSendC( FormatPck( '%cddss', [$4A,0,$0A,#0,'==> FixMove. Unknown protocol version'+#0] ) );
end;
if (packetID = 0) then Exit;
if ( not _gFromServ ) and ( ID = packetID ) then begin // FixMove
ScanPck5(_gBuff,4,'ddd',ToX,ToY,ToZ,null,null);
ScanPck5(_gBuff,16,'ddd',oX,oY,oZ,null,null);
_gOutBuff := SetPckSize( copy( _gBuff, 3, 25 ) + HStr('01 00 00 00') );
gSys.EnSendC(FormatPck('%cddddddd',[$01,SelfOID,ToX,ToY,ToZ,oX, oY,oZ]));
end
end;
// RequestMagicSkillUse
if (not _gFromServ) and StrCmp(copy(_gBuff,3,1), HStr('39')) then begin
if GInt( _gBuff, 8, 4) > 1 then begin
_gOutBuff := _gBuff;
PInt(_gOutBuff, 0, 8, 4);
end
end;
// GG
if ( _gFromServ) and StrCmp( copy(_gBuff,1,3), HStr('03 00 F9') ) then begin
gBlockPacket;
gSys.EnSendS(HPck('CA000000000000 00000000000000000 000'));
end;
if _gFromServ then
begin
if StrCmp(copy(_gbuff,3,1),#$F3) then // Fix DeathPenalty use
begin
gSys.EnSendS(HStr('03 00 3F'));
end
end;
//HPMPCP
&nbs p;if _gFromServ then
begin
if StrCmp(copy(_gbuff,3,1),#$52) then // PartySmallWindowUpdate
begin
gSys.EnSendC(_gbuff);
  ;ScanPck5(_gbuff,ScanPck5(_gbuff,4,'dsddd',PObjectID,PName,PCur CP,PMaxCP,PCurHP),'ddd',PMaxHP,PCurMP, PMaxMP,null,null);
StatusPacket := FormatPck('%cdddddddddddddd',[$0E,PObjectID,6,$09,PCurHP,$0A,PM axHP,$0B,PCurMP,$0C,PMaxMP,$21,PCurCP,$22,PMaxCP]);
gSys.EnSendC(Sta tusPacket);
end
end;
//Private Recipe
begin
if not _gFromServ then
if StrCmp(_gBuff, HStr('0300B0')) then
_gOutBuff := HStr('0C 00 45 25 00 00 00 00 00 00 00 00');
end;
//Return To Clan Hall
begin
if not _gFromServ then
if StrCmp(_gBuff, HStr('07 00 6D 03 00 00 00')) then
_gOutBuff := HStr('07 00 6D 01 00 00 00');
end;
// Get char oID
if (_gFromServ) and (ID=$04) then
begin
ScanPck5(_gBuff,20,'d',selfOID,null,null,null,null);
&nb sp; end;