Docs
This commit is contained in:
parent
30ffde533a
commit
043d61633e
57
docs/Forsian_GS_Decrypt.cpp
Normal file
57
docs/Forsian_GS_Decrypt.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
// [17:13:24] <Forsian>
|
||||||
|
|
||||||
|
void Decrypt(unsigned char *Data, int size_data){
|
||||||
|
if (!Crypt) return;
|
||||||
|
if (Settings.DebugLogFileLineage) {
|
||||||
|
fprintf(LogLineagePacket, "=======================================? %d (TCP: ~? %d)=============================================\nPacket:\n", NumberLineage2Packet, NumberIPPacket);
|
||||||
|
PrintData(Data, size_data, LogLineagePacket);
|
||||||
|
}
|
||||||
|
int i;
|
||||||
|
int j=0;
|
||||||
|
int Temp;
|
||||||
|
int Temp2 = 0;
|
||||||
|
for (i=0; i < size_data; i++){
|
||||||
|
Temp = Data[i] & 0xFF;
|
||||||
|
Data[i] = (byte)(Temp ^ (CryptKey[j++] & 0xFF) ^ Temp2);
|
||||||
|
Temp2 = Temp;
|
||||||
|
if (j == 16) j = 0;
|
||||||
|
}
|
||||||
|
if (Settings.DebugLogFileLineage) {
|
||||||
|
fprintf(LogLineagePacket, "\nOld Key: ");
|
||||||
|
for (i = 0; i < 16; i++){
|
||||||
|
fprintf(LogLineagePacket, "%02X ", CryptKey[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
long old = 0;
|
||||||
|
old |= CryptKey[8] & 0xFF;
|
||||||
|
old |= CryptKey[9] << 0x08 & 0xFF00;
|
||||||
|
old |= CryptKey[10] << 0x10 & 0xFF0000;
|
||||||
|
old |= CryptKey[11] << 0x18 & 0xFF000000;
|
||||||
|
if (Settings.DebugLogFileLineage) {
|
||||||
|
fprintf(LogLineagePacket, "\nLong Old = 0x%08X\n", old);
|
||||||
|
fprintf(LogLineagePacket, "Size: %d(dec) %04X(hex)\n", size_data, size_data);
|
||||||
|
}
|
||||||
|
old += size_data;
|
||||||
|
if (Settings.DebugLogFileLineage) {
|
||||||
|
fprintf(LogLineagePacket, "Old+Size: 0x%08X\n", old);
|
||||||
|
}
|
||||||
|
CryptKey[8] = (byte)(old & 0xFF);
|
||||||
|
CryptKey[9] = (byte)(old >> 0x08 & 0xFF);
|
||||||
|
CryptKey[10] = (byte)(old >> 0x10 & 0xFF);
|
||||||
|
CryptKey[11] = (byte)(old >> 0x18 & 0xFF);
|
||||||
|
if (Settings.DebugLogFileLineage) {
|
||||||
|
fprintf(LogLineagePacket, "New Crypt Key: ");
|
||||||
|
for (i = 0; i < 16; i++){
|
||||||
|
fprintf(LogLineagePacket, "%02X ", CryptKey[i]);
|
||||||
|
}
|
||||||
|
fprintf(LogLineagePacket, "\nPacket After Decrypt:\n");
|
||||||
|
PrintData(Data, size_data, LogLineagePacket);
|
||||||
|
fprintf(LogLineagePacket, "New Crypt Key: ");
|
||||||
|
for (i = 0; i < 16; i++){
|
||||||
|
fprintf(LogLineagePacket, "%02X ", CryptKey[i]);
|
||||||
|
}
|
||||||
|
fprintf(LogLineagePacket, "\n");
|
||||||
|
fflush(LogLineagePacket);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
1226
docs/GameGuardKey.txt
Normal file
1226
docs/GameGuardKey.txt
Normal file
File diff suppressed because it is too large
Load Diff
197
docs/corrector-2.fsc
Normal file
197
docs/corrector-2.fsc
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
// corrector-3.fsc CT2.2 version
|
||||||
|
// ne?eio aey aiiieieoaeuiiai [aa]eiae?iaaiey ID enoiayueo iaeaoia aaeina?aa?a
|
||||||
|
// a ianoiyuaa a?aiy, ii aeaeiiio, io?ai oieuei aey ioa.
|
||||||
|
// Aaoiii?aaaeaiea LA2 aie?ii auou AEE??AII.
|
||||||
|
//
|
||||||
|
|
||||||
|
var
|
||||||
|
|
||||||
|
_seed : integer; // random generator seed for mixing id tables
|
||||||
|
_1_byte_table : string;
|
||||||
|
_2_byte_table : string;
|
||||||
|
_2_byte_table_size: integer;
|
||||||
|
_id_mix : boolean;
|
||||||
|
|
||||||
|
|
||||||
|
temp_seed : integer;
|
||||||
|
CharName : string;
|
||||||
|
|
||||||
|
Procedure OnCreate;
|
||||||
|
begin
|
||||||
|
|
||||||
|
_id_mix := false;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _pseudo_srand(seed : integer);
|
||||||
|
begin
|
||||||
|
_seed := seed;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function _pseudo_rand: integer;
|
||||||
|
var
|
||||||
|
a : integer;
|
||||||
|
begin
|
||||||
|
a := (Int64(_seed) * $343fd + $269EC3) and $FFFFFFFF;
|
||||||
|
_seed := a;
|
||||||
|
result := (_seed shr $10) and $7FFF;
|
||||||
|
// writelogln(format('rand = %x; seed = %x',[result, _seed]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _init_tables(seed: integer; _2_byte_size: integer);
|
||||||
|
var
|
||||||
|
i : integer;
|
||||||
|
x : byte;
|
||||||
|
rand_pos : integer;
|
||||||
|
cur_pos : integer;
|
||||||
|
begin
|
||||||
|
|
||||||
|
_1_byte_table := '';
|
||||||
|
_2_byte_table := '';
|
||||||
|
|
||||||
|
_2_byte_table_size := _2_byte_size;
|
||||||
|
|
||||||
|
for i := 0 to $D0 do begin
|
||||||
|
_1_byte_table := _1_byte_table + chr(i);
|
||||||
|
end;
|
||||||
|
for i := 0 to _2_byte_size do begin
|
||||||
|
_2_byte_table := _2_byte_table + chr(i) + #$0;
|
||||||
|
end;
|
||||||
|
_pseudo_srand(seed);
|
||||||
|
for i := 2 to $D1 do begin
|
||||||
|
rand_pos := (_pseudo_rand mod i) + 1;
|
||||||
|
x := GInt(_1_byte_table, rand_pos, 1);
|
||||||
|
PInt(_1_byte_table, GInt(_1_byte_table, i, 1), rand_pos, 1);
|
||||||
|
PInt(_1_byte_table, x, i, 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
cur_pos := 3;
|
||||||
|
for i := 2 to _2_byte_size+1 do begin
|
||||||
|
rand_pos := _pseudo_rand mod i;
|
||||||
|
x := GInt(_2_byte_table, rand_pos * 2 + 1 , 2);
|
||||||
|
PInt(_2_byte_table, GInt(_2_byte_table, cur_pos, 2), rand_pos * 2 + 1, 2);
|
||||||
|
PInt(_2_byte_table, x, cur_pos, 2);
|
||||||
|
cur_pos := cur_pos + 2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
cur_pos := Pos(#$12, _1_byte_table);
|
||||||
|
x := GInt(_1_byte_table, $13, 1);
|
||||||
|
PInt(_1_byte_table, $12, $13, 1);
|
||||||
|
PInt(_1_byte_table, x, cur_pos, 1);
|
||||||
|
|
||||||
|
cur_pos := Pos(#$B1, _1_byte_table);
|
||||||
|
x := GInt(_1_byte_table, $B2, 1);
|
||||||
|
PInt(_1_byte_table, $B1, $B2, 1);
|
||||||
|
PInt(_1_byte_table, x, cur_pos, 1);
|
||||||
|
|
||||||
|
writelogln('one byte table');
|
||||||
|
writeloghexB(_1_byte_table);
|
||||||
|
writelogln('two byte table');
|
||||||
|
writeloghexB(_2_byte_table);
|
||||||
|
|
||||||
|
_id_mix := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _decode_ID(var buff:string);
|
||||||
|
var
|
||||||
|
p: integer;
|
||||||
|
begin
|
||||||
|
// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1),GInt(_1_byte_table, GInt(buff, 3, 1)+1, 1) ]));
|
||||||
|
writelogln(format('id changed %x -> %x',[GInt(buff, 3, 1), GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1)]));
|
||||||
|
PInt(buff, GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1) , 3, 1);
|
||||||
|
if GInt(buff, 3, 1) = $D0 then begin
|
||||||
|
if GInt(buff, 4, 1) > _2_byte_table_size then begin
|
||||||
|
writelogln(format('incompatible subID %x detected',[GInt(buff, 4, 1)]));
|
||||||
|
writelogln('packet - blocked, terminating....');
|
||||||
|
gBlockPacket;
|
||||||
|
gSys.Killself;
|
||||||
|
end;
|
||||||
|
writelogln(format('sub id changed %x -> %x',[GInt(buff, 4, 1), GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1)] ));
|
||||||
|
PInt(buff, GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1) , 4, 1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _encode_ID(var buff:string);
|
||||||
|
var
|
||||||
|
p: integer;
|
||||||
|
begin
|
||||||
|
if GInt(buff, 3, 1) = $D0 then begin
|
||||||
|
p:= pos(Chr(GInt(buff, 4, 1)), _2_byte_table);
|
||||||
|
writelogln(format('changing back subID %x -> %x', [ GInt(buff, 4, 1), ((p + 1) shr 1) - 1 ]));
|
||||||
|
PInt(buff, ((p + 1) shr 1) - 1, 4, 1);
|
||||||
|
|
||||||
|
end;
|
||||||
|
p := pos(Chr(GInt(buff, 3, 1)), _1_byte_table);
|
||||||
|
writelogln(format('changing back ID %x -> %x',[GInt(buff, 3, 1), p-1]));
|
||||||
|
|
||||||
|
PInt(buff, p-1, 3, 1);
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Procedure OnDeCodeAlt;
|
||||||
|
begin
|
||||||
|
if _id_mix and (not _dFromServ) then begin
|
||||||
|
|
||||||
|
_dOutBuff := _dBuff;
|
||||||
|
_Decode_ID(_dOutBuff);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure OnEnCodeAlt;
|
||||||
|
begin
|
||||||
|
|
||||||
|
if _id_mix and (not _dFromServ) then begin
|
||||||
|
|
||||||
|
_dOutBuff := _dBuff;
|
||||||
|
_Encode_ID(_dOutBuff);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
begin
|
||||||
|
// CT2.2 einoueu
|
||||||
|
|
||||||
|
if (gSys.TrafType = 2) and (gSys.Protocol = 12) then begin
|
||||||
|
gSys.Protocol := 871;
|
||||||
|
if gSys.isGS > 0 then gSys.isGS := 3;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// ii?aaaeaiea o?aoeea e onoaiiaea oaaeeo
|
||||||
|
// ?anoeay i?eaycea e eniieucoaiiio aa?eaioo i?ioieiea
|
||||||
|
|
||||||
|
if _gAbsNumPkt = 2 then begin
|
||||||
|
|
||||||
|
if (gSys.TrafType = 2) and (gSys.isGS = 3) and (Length(_gBuff) = $19) then begin
|
||||||
|
if gSys.Protocol = 871 then _init_tables(GInt(_dBuff, $16, 4), $58); // CT2.2
|
||||||
|
if gSys.Protocol = 851 then _init_tables(GInt(_dBuff, $16, 4), $55); // CT2
|
||||||
|
if gSys.Protocol = 831 then _init_tables(GInt(_dBuff, $16, 4), $4E); // CT1.5+
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
// writelogln(format('TrafType = %d, isGS= %d, Protocol = %d',[gSys.TrafType, gSys.isGS, gSys.Protocol]));
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
if _id_mix and (GInt(_gBuff, 3, 1) = $0B) then begin
|
||||||
|
|
||||||
|
ScanPck5(_gBuff, 4, 's-99-99-04d' ,CharName, temp_seed, null, null, null);
|
||||||
|
writelogln(format('reseting id tables on CharSelected; Seed = %x',[temp_seed]));
|
||||||
|
_init_tables(temp_seed,_2_byte_table_size);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
190
docs/corrector-gracia1.fsc
Normal file
190
docs/corrector-gracia1.fsc
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
// corrector-3.fsc ñêðèïò äëÿ äîïîëíèòåëüíîãî [äå]êîäèðîâàíèÿ ID èñõîäÿùèõ ïàêåòîâ ãåéìñåðâåðà
|
||||||
|
// â íàñòîÿùåå âðåìÿ, ïî âèäèìîìó, íóæåí òîëüêî äëÿ îôà.
|
||||||
|
// Àâòîîïðåäåëåíèå LA2 äîëæíî áûòü ÂÊËÞ×ÅÍÎ.
|
||||||
|
//
|
||||||
|
|
||||||
|
var
|
||||||
|
|
||||||
|
_seed : integer; // random generator seed for mixing id tables
|
||||||
|
_1_byte_table : string;
|
||||||
|
_2_byte_table : string;
|
||||||
|
_2_byte_table_size: integer;
|
||||||
|
_id_mix : boolean;
|
||||||
|
|
||||||
|
|
||||||
|
temp_seed : integer;
|
||||||
|
CharName : string;
|
||||||
|
|
||||||
|
Procedure OnCreate;
|
||||||
|
begin
|
||||||
|
|
||||||
|
_id_mix := false;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _pseudo_srand(seed : integer);
|
||||||
|
begin
|
||||||
|
_seed := seed;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function _pseudo_rand: integer;
|
||||||
|
var
|
||||||
|
a : integer;
|
||||||
|
begin
|
||||||
|
a := (Int64(_seed) * $343fd + $269EC3) and $FFFFFFFF;
|
||||||
|
_seed := a;
|
||||||
|
result := (_seed shr $10) and $7FFF;
|
||||||
|
// writelogln(format('rand = %x; seed = %x',[result, _seed]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _init_tables(seed: integer; _2_byte_size: integer);
|
||||||
|
var
|
||||||
|
i : integer;
|
||||||
|
x : byte;
|
||||||
|
rand_pos : integer;
|
||||||
|
cur_pos : integer;
|
||||||
|
begin
|
||||||
|
|
||||||
|
_1_byte_table := '';
|
||||||
|
_2_byte_table := '';
|
||||||
|
|
||||||
|
_2_byte_table_size := _2_byte_size;
|
||||||
|
|
||||||
|
for i := 0 to $D0 do begin
|
||||||
|
_1_byte_table := _1_byte_table + chr(i);
|
||||||
|
end;
|
||||||
|
for i := 0 to _2_byte_size do begin
|
||||||
|
_2_byte_table := _2_byte_table + chr(i) + #$0;
|
||||||
|
end;
|
||||||
|
_pseudo_srand(seed);
|
||||||
|
for i := 2 to $D1 do begin
|
||||||
|
rand_pos := (_pseudo_rand mod i) + 1;
|
||||||
|
x := GInt(_1_byte_table, rand_pos, 1);
|
||||||
|
PInt(_1_byte_table, GInt(_1_byte_table, i, 1), rand_pos, 1);
|
||||||
|
PInt(_1_byte_table, x, i, 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
cur_pos := 3;
|
||||||
|
for i := 2 to _2_byte_size+1 do begin
|
||||||
|
rand_pos := _pseudo_rand mod i;
|
||||||
|
x := GInt(_2_byte_table, rand_pos * 2 + 1 , 2);
|
||||||
|
PInt(_2_byte_table, GInt(_2_byte_table, cur_pos, 2), rand_pos * 2 + 1, 2);
|
||||||
|
PInt(_2_byte_table, x, cur_pos, 2);
|
||||||
|
cur_pos := cur_pos + 2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
cur_pos := Pos(#$12, _1_byte_table);
|
||||||
|
x := GInt(_1_byte_table, $13, 1);
|
||||||
|
PInt(_1_byte_table, $12, $13, 1);
|
||||||
|
PInt(_1_byte_table, x, cur_pos, 1);
|
||||||
|
|
||||||
|
cur_pos := Pos(#$B1, _1_byte_table);
|
||||||
|
x := GInt(_1_byte_table, $B2, 1);
|
||||||
|
PInt(_1_byte_table, $B1, $B2, 1);
|
||||||
|
PInt(_1_byte_table, x, cur_pos, 1);
|
||||||
|
|
||||||
|
writelogln('one byte table');
|
||||||
|
writeloghexB(_1_byte_table);
|
||||||
|
writelogln('two byte table');
|
||||||
|
writeloghexB(_2_byte_table);
|
||||||
|
|
||||||
|
_id_mix := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _decode_ID(var buff:string);
|
||||||
|
var
|
||||||
|
p: integer;
|
||||||
|
begin
|
||||||
|
// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1),GInt(_1_byte_table, GInt(buff, 3, 1)+1, 1) ]));
|
||||||
|
writelogln(format('id changed %x -> %x',[GInt(buff, 3, 1), GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1)]));
|
||||||
|
PInt(buff, GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1) , 3, 1);
|
||||||
|
if GInt(buff, 3, 1) = $D0 then begin
|
||||||
|
if GInt(buff, 4, 1) > _2_byte_table_size then begin
|
||||||
|
writelogln(format('incompatible subID %x detected',[GInt(buff, 4, 1)]));
|
||||||
|
writelogln('packet - blocked, terminating....');
|
||||||
|
gBlockPacket;
|
||||||
|
gSys.Killself;
|
||||||
|
end;
|
||||||
|
writelogln(format('sub id changed %x -> %x',[GInt(buff, 4, 1), GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1)] ));
|
||||||
|
PInt(buff, GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1) , 4, 1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _encode_ID(var buff:string);
|
||||||
|
var
|
||||||
|
p: integer;
|
||||||
|
begin
|
||||||
|
if GInt(buff, 3, 1) = $D0 then begin
|
||||||
|
p:= pos(Chr(GInt(buff, 4, 1)), _2_byte_table);
|
||||||
|
writelogln(format('changing back subID %x -> %x', [ GInt(buff, 4, 1), ((p + 1) shr 1) - 1 ]));
|
||||||
|
PInt(buff, ((p + 1) shr 1) - 1, 4, 1);
|
||||||
|
|
||||||
|
end;
|
||||||
|
p := pos(Chr(GInt(buff, 3, 1)), _1_byte_table);
|
||||||
|
writelogln(format('changing back ID %x -> %x',[GInt(buff, 3, 1), p-1]));
|
||||||
|
|
||||||
|
PInt(buff, p-1, 3, 1);
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Procedure OnDeCodeAlt;
|
||||||
|
begin
|
||||||
|
if _id_mix and (not _dFromServ) then begin
|
||||||
|
|
||||||
|
_dOutBuff := _dBuff;
|
||||||
|
_Decode_ID(_dOutBuff);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure OnEnCodeAlt;
|
||||||
|
begin
|
||||||
|
|
||||||
|
if _id_mix and (not _dFromServ) then begin
|
||||||
|
|
||||||
|
_dOutBuff := _dBuff;
|
||||||
|
_Encode_ID(_dOutBuff);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
begin
|
||||||
|
|
||||||
|
// îïðåäåëåíèå òðàôèêà è óñòàíîâêà òàáëèö
|
||||||
|
// æåñòêàÿ ïðèâÿçêà ê èñïîëüçóåìîìó âàðèàíòó ïðîòîêîëà
|
||||||
|
|
||||||
|
if _gAbsNumPkt = 2 then begin
|
||||||
|
|
||||||
|
if (gSys.TrafType = 2) and (gSys.isGS = 3) and (Length(_gBuff) = $19) then begin
|
||||||
|
if gSys.Protocol = 851 then _init_tables(GInt(_dBuff, $16, 4), $55); // CT2
|
||||||
|
if gSys.Protocol = 831 then _init_tables(GInt(_dBuff, $16, 4), $4E); // CT1.5+
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
// writelogln(format('TrafType = %d, isGS= %d, Protocol = %d',[gSys.TrafType, gSys.isGS, gSys.Protocol]));
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
if _id_mix and (GInt(_gBuff, 3, 1) = $0B) then begin
|
||||||
|
|
||||||
|
ScanPck5(_gBuff, 4, 's-99-99-04d' ,CharName, temp_seed, null, null, null);
|
||||||
|
writelogln(format('reseting id tables on CharSelected; Seed = %x',[temp_seed]));
|
||||||
|
_init_tables(temp_seed,_2_byte_table_size);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
373
docs/demo_la2endecGS4m2.fsc
Normal file
373
docs/demo_la2endecGS4m2.fsc
Normal file
@ -0,0 +1,373 @@
|
|||||||
|
// 'demo_la2-endecGS-4m.fsc' Ïðèìåð ðó÷íîãî äåêîäèðîâàíèÿ LA2 GS ïàêåòîâ. Ñòàíäàðòíûé àëãîðèòì.
|
||||||
|
// âíóòðåííåå àâòîîïðåäåëåíèå è àâòîäåêîäèðîâàíèå ÍÅ ÈÑÏÎËÜÇÓÅÒÑß, îíî îòêëþ÷àåòñÿ (â ñêðèïòå).
|
||||||
|
//
|
||||||
|
// îïðåäåëåíèå òðàôèêà è äå/êîäèðîâàíèå GS ïîëíîñòüþ íà ñêðèïòå.
|
||||||
|
//
|
||||||
|
// èñïîëüçóþòñÿ ñîáûòèÿ-ôóíêöèè 'OnDeCode' è 'OnEnCode'
|
||||||
|
//
|
||||||
|
// (äëÿ ðàáîòû ñêðèïòà íåîáõîäèì WP507F èëè âûøå)
|
||||||
|
// â ïðèìåðå èñïîëüçóåòñÿ ðó÷íàÿ äå/êîäèðîâêà GS ïàêåòîâ C4/C5/Interlude ñòàíäàðòíûì àëãîðèòìîì.
|
||||||
|
// ñêðèïò FS
|
||||||
|
//
|
||||||
|
// 'demo_la2-endecGS-4m.fsc' ýòî ìîäèôèêàöèÿ ñêðèïòà 'demo_la2-endecGS-4.fsc'
|
||||||
|
// äîáàâëåíî îïðåäåëåíèå Êàìàýëü â GS3 (äëÿ WP507F íàäî ñêà÷àòü ôàéëû îïðåäåëåíèÿ)
|
||||||
|
//
|
||||||
|
|
||||||
|
var // áóäåì èñïîëüçîâàòü ëîêàëüíûå êëþ÷è, à íå âíóòðåííèå (õîòÿ ìîæíî ëþáûå, áåç ðàçíèöû)
|
||||||
|
Kci : string;// - äëÿ ïàêåòîâ ïðèøåäøèõ ñ êëèåíòà.
|
||||||
|
Kco : string;// - äëÿ ïàêåòîâ óõîäÿùèõ íà êëèåíò.
|
||||||
|
Ksi : string;// - äëÿ ïàêåòîâ ïðèøåäøèõ ñ ñåðâåðà.
|
||||||
|
Kso : string;// - äëÿ ïàêåòîâ óõîäÿùèõ íà ñåðâåð.
|
||||||
|
s,s1 : string;
|
||||||
|
scode : boolean;
|
||||||
|
le : integer;
|
||||||
|
ID : integer;
|
||||||
|
CharName : string;
|
||||||
|
|
||||||
|
_seed : integer; // random generator seed for mixing id tables
|
||||||
|
_1_byte_table : string;
|
||||||
|
_2_byte_table : string;
|
||||||
|
_id_mix : boolean;
|
||||||
|
|
||||||
|
temp_seed : integer;
|
||||||
|
|
||||||
|
Procedure OnCreate; // ôóíêöèÿ-ñîáûòèå íà ñòàðò ñêðèïòà.
|
||||||
|
// ýòà ô-öèÿ âûçûâàåòñÿ àâòîìàòè÷åñêè ïðè ñòàðòå ñêðèïòà (åùå äî ïåðâîãî ïàêåòà)
|
||||||
|
// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ...
|
||||||
|
begin
|
||||||
|
//
|
||||||
|
// Ïîîòêëþ÷àåì âñå ÀÂÒÎîïðåäåëåíèÿ è ÀÂÒÎäåêîäèðîâàíèÿ:
|
||||||
|
//
|
||||||
|
gSys.TrafType := 0; // îòêëþ÷èì âíóòðåííåå àâòîîïðåäåëåíèå òðàôèêà
|
||||||
|
gSys.tPDecode := 0; // îòêëþ÷èì âíóòðåííåå àâòîäåêîäèðîâàíèå
|
||||||
|
gSys.tKeyType := 0; // îòêëþ÷èì íà÷àëüíîå àâòîîïðåäåëåíèå êëþ÷à
|
||||||
|
gSys.Protocol := -1; // ïðîòîêîë ñîåäèíåíèÿ (ó LS è GS ðàçíûå ! îáû÷íî ãîâîðÿò î ïðîòîêîëå GS)
|
||||||
|
gSys.isGS := 0;
|
||||||
|
gSys.isLS := 0;
|
||||||
|
gSys.tParse := 2; // òèï ïàðñèíãà ïàêåòîâ (äâóõáàéòîâûé ðàçìåð â íà÷àëå ïàêåòà)
|
||||||
|
//
|
||||||
|
scode := false; // ôëàã äå/êîäèðîâàíèÿ GS
|
||||||
|
Kci := ''; Kco := ''; Ksi := ''; Kso := '';
|
||||||
|
//
|
||||||
|
CharName := '';
|
||||||
|
_id_mix := false;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure OnDestroy; // ôóíêöèÿ-ñîáûòèå íà çàêðûòèå ñêðèïòà è ñîåäèíåíèÿ.
|
||||||
|
// ýòà ô-öèÿ âûçûâàåòñÿ àâòîìàòè÷åñêè ïðè çàêðûòèå ñîåäèíåíèÿ
|
||||||
|
// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ...
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _DecGS(var bf : string;var ke : string; tk : integer); // äåêîäèðóåì ïàêåò GS, ýòî îáû÷íàÿ ô-öèÿ
|
||||||
|
var i,j,b,i1,sz,sk : integer;
|
||||||
|
begin
|
||||||
|
// ñòàíäàðòíûé àëãîðèòì XOR äåêîäèðîâàíèÿ GS la2
|
||||||
|
sz := length(bf);
|
||||||
|
sk := length(ke);
|
||||||
|
if sk = 0 then exit;
|
||||||
|
b := 0; j := 1;
|
||||||
|
for i := 3 to sz do begin
|
||||||
|
i1 := ord(bf[i]);
|
||||||
|
bf[i] := chr(i1 xor ord(ke[j]) xor b);
|
||||||
|
b := i1;
|
||||||
|
Inc(j,1);
|
||||||
|
if j > sk then j := 1;
|
||||||
|
end;
|
||||||
|
case tk of
|
||||||
|
1: PInt(ke,GInt(ke,1,4)+sz-2,1,4);
|
||||||
|
2: PInt(ke,GInt(ke,1,8)+sz-2,1,8);
|
||||||
|
3: PInt(ke,GInt(ke,9,8)+sz-2,9,8);
|
||||||
|
4: PInt(ke,GInt(ke,9,8)+sz-2,9,8);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _EncGS(var bf : string;var ke : string; tk : integer); // êîäèðóåì ïàêåò GS, ýòî îáû÷íàÿ ô-öèÿ
|
||||||
|
var i,j,b,i1,sz,sk : integer;
|
||||||
|
begin
|
||||||
|
// ñòàíäàðòíûé àëãîðèòì XOR êîäèðîâàíèÿ GS la2
|
||||||
|
sz := length(bf);
|
||||||
|
sk := length(ke);
|
||||||
|
if sk = 0 then exit;
|
||||||
|
i1 := 0; j := 1;
|
||||||
|
for i := 3 to sz do begin
|
||||||
|
bf[i] := chr(ord(bf[i]) xor ord(ke[j]) xor i1);
|
||||||
|
i1 := ord(bf[i]);
|
||||||
|
Inc(j,1);
|
||||||
|
if j > sk then j := 1;
|
||||||
|
end;
|
||||||
|
case tk of
|
||||||
|
1: PInt(ke,GInt(ke,1,4)+sz-2,1,4);
|
||||||
|
2: PInt(ke,GInt(ke,1,8)+sz-2,1,8);
|
||||||
|
3: PInt(ke,GInt(ke,9,8)+sz-2,9,8);
|
||||||
|
4: PInt(ke,GInt(ke,9,8)+sz-2,9,8);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _pseudo_srand(seed : integer);
|
||||||
|
begin
|
||||||
|
_seed := seed;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function _pseudo_rand: integer;
|
||||||
|
var
|
||||||
|
a : integer;
|
||||||
|
begin
|
||||||
|
a := (Int64(_seed) * $343fd + $269EC3) and $FFFFFFFF;
|
||||||
|
_seed := a;
|
||||||
|
result := (_seed shr $10) and $7FFF;
|
||||||
|
// writelogln(format('rand = %x; seed = %x',[result, _seed]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _init_tables(seed: integer);
|
||||||
|
var
|
||||||
|
i : integer;
|
||||||
|
x : byte;
|
||||||
|
rand_pos : integer;
|
||||||
|
cur_pos : integer;
|
||||||
|
begin
|
||||||
|
_1_byte_table := '';
|
||||||
|
_2_byte_table := '';
|
||||||
|
|
||||||
|
for i := 0 to $D0 do begin
|
||||||
|
_1_byte_table := _1_byte_table + chr(i);
|
||||||
|
end;
|
||||||
|
for i := 0 to $4D do begin
|
||||||
|
_2_byte_table := _2_byte_table + chr(i) + #$0;
|
||||||
|
end;
|
||||||
|
_pseudo_srand(seed);
|
||||||
|
for i := 2 to $D1 do begin
|
||||||
|
rand_pos := (_pseudo_rand mod i) + 1;
|
||||||
|
x := GInt(_1_byte_table, rand_pos, 1);
|
||||||
|
PInt(_1_byte_table, GInt(_1_byte_table, i, 1), rand_pos, 1);
|
||||||
|
PInt(_1_byte_table, x, i, 1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
cur_pos := 3;
|
||||||
|
for i := 2 to $4E do begin
|
||||||
|
rand_pos := _pseudo_rand mod i;
|
||||||
|
x := GInt(_2_byte_table, rand_pos * 2 + 1 , 2);
|
||||||
|
PInt(_2_byte_table, GInt(_2_byte_table, cur_pos, 2), rand_pos * 2 + 1, 2);
|
||||||
|
PInt(_2_byte_table, x, cur_pos, 2);
|
||||||
|
cur_pos := cur_pos + 2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
cur_pos := Pos(#$12, _1_byte_table);
|
||||||
|
x := GInt(_1_byte_table, $13, 1);
|
||||||
|
PInt(_1_byte_table, $12, $13, 1);
|
||||||
|
PInt(_1_byte_table, x, cur_pos, 1);
|
||||||
|
|
||||||
|
cur_pos := Pos(#$B1, _1_byte_table);
|
||||||
|
x := GInt(_1_byte_table, $B2, 1);
|
||||||
|
PInt(_1_byte_table, $B1, $B2, 1);
|
||||||
|
PInt(_1_byte_table, x, cur_pos, 1);
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _decode_ID(var buff:string);
|
||||||
|
var
|
||||||
|
p: integer;
|
||||||
|
begin
|
||||||
|
// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1),GInt(_1_byte_table, GInt(buff, 3, 1)+1, 1) ]));
|
||||||
|
PInt(buff, GInt(_1_byte_table, GInt(buff, 3, 1) + 1, 1) , 3, 1);
|
||||||
|
if GInt(buff, 3, 1) = $D0 then begin
|
||||||
|
|
||||||
|
PInt(buff, GInt(_2_byte_table, GInt(buff, 4, 1) * 2 + 1, 1) , 4, 1);
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _encode_ID(var buff:string);
|
||||||
|
var
|
||||||
|
p: integer;
|
||||||
|
begin
|
||||||
|
if GInt(buff, 3, 1) = $D0 then begin
|
||||||
|
p:= pos(Chr(GInt(buff, 4, 1)), _2_byte_table);
|
||||||
|
PInt(buff, ((p + 1) shr 1) - 1, 4, 1);
|
||||||
|
end;
|
||||||
|
p := pos(Chr(GInt(buff, 3, 1)), _1_byte_table);
|
||||||
|
// writelogln(format('changing %x -> %x',[GInt(buff, 3, 1), p-1]));
|
||||||
|
|
||||||
|
PInt(buff, p-1, 3, 1);
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Procedure Trafic_Detector;
|
||||||
|
var _s : string;
|
||||||
|
begin
|
||||||
|
// Îïðåäåëèì òèï òðàôèêà è òèï ñåðâåðà.
|
||||||
|
// Âíèìàíèå! ïðè íåîáõîäèìîñòè, îïðåäåëåíèå òðàôèêà ìîæíî äîïîëíèòü íîâûìè âàðèàíòàìè =)
|
||||||
|
//
|
||||||
|
le := length(_dBuff); // _dBuff - âõîäíîé ïàêåò (òàê êàê ýòà ô-öèÿ âûçâàíà èç OnDeCode)
|
||||||
|
//
|
||||||
|
// Îïðåäåëèì òèï òðàôèêà (â ýòîì ïðèìåðå íàñ èíòåðåñóåò òîëüêî LA2)
|
||||||
|
//
|
||||||
|
if (gSys.TrafType = 0) and (_gAbsNumPkt = 1) then begin
|
||||||
|
case le of
|
||||||
|
$0B,$9B,$AB,$BA: begin
|
||||||
|
gSys.TrafType := 2; // LA2
|
||||||
|
gSys.isLS := 1; // LS
|
||||||
|
if le = $0B then gSys.tKeyType := 1 else gSys.tKeyType := 2; // ýòî äëÿ LS, ïîêà íå ïîòðåáóåòñÿ
|
||||||
|
end;
|
||||||
|
$107: begin
|
||||||
|
gSys.TrafType := 2; // LA2
|
||||||
|
gSys.isGS := 1; // GS
|
||||||
|
end;
|
||||||
|
$07: begin
|
||||||
|
gSys.TrafType := 2; // LA2
|
||||||
|
gSys.isGS := 2; // GS
|
||||||
|
end;
|
||||||
|
else if le >= $107 then begin // áîëåå íàäåæíûé ñïîñîá îïðåäåëèòü LA2 GS
|
||||||
|
if pos(HStr('05 52 05 54 07 51 51 55 07 02 53 53 00 52 05 52'),_dBuff) <> 0 then begin
|
||||||
|
// åñëè íàéäåíà ñòðî÷êà '.R.T.QQU..SS.R.R' (äðåâíèé ðèì åïòü =) òîãäà ýòî ãåéì ñåðâåð ëà2.
|
||||||
|
gSys.TrafType := 2; // LA2
|
||||||
|
gSys.isGS := 2; // GS
|
||||||
|
end;
|
||||||
|
|
||||||
|
if StrCmp(copy(_dBuff, 3, 5), HStr('0E 3C 03 00 00')) then begin
|
||||||
|
writelogln('CT1 traffic detected');
|
||||||
|
gSys.TrafType := 2; // LA2
|
||||||
|
gSys.isGS := 3; // GS CT1
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
if gSys.TrafType = 2 then gSys.SetIDposlen(3,1); // ID â ïàêåòàõ LA2 íàõîäèòñÿ â òðåòüåì áàéòå, ðàçìåð 1 áàéò.
|
||||||
|
if gSys.isGS > 0 then gSys.Protocol := gInt(_dBuff,4,4); // áåðåì íîìåð ïðîòîêîëà GS
|
||||||
|
|
||||||
|
// ïðîäóáëèì ïðîòîêîëû CT1
|
||||||
|
if gSys.Protocol >= 828 then gSys.isGS := 3; // GS CT1
|
||||||
|
// GS CT1+ ïîêà òàêîé æå
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
// îïðåäåëèì êëþ÷ GS:
|
||||||
|
//
|
||||||
|
if (_gAbsNumPkt = 2) then
|
||||||
|
|
||||||
|
if (gSys.TrafType = 2) and (gSys.isGS > 0) and _dFromServ then begin
|
||||||
|
if (le = 12) then gSys.tKeyType := 1; // 12 áàéòíûé ïàêåò - òèï 1. GSDecodeJ (90% l2j)
|
||||||
|
if (le = 16) then gSys.tKeyType := 2; // 16 áàéòíûé ïàêåò - òèï 2. GSDecode (sub-off servers)
|
||||||
|
if (le = $1A) then gSys.tKeyType := 3; // ÷àñòü ôðè ñåðâåðîâ Interlude
|
||||||
|
if (le = $1C) then gSys.tKeyType := 3; // ÷àñòü ôðè ñåðâåðîâ Interlude
|
||||||
|
if (le = $15) then gSys.tKeyType := 3; // îôèöèàëüíûå ñåðâåðà Interlude (íà äàííûé ìîìåíò)
|
||||||
|
if (le = $19) then gSys.tKeyType := 4; // îôèöèàëüíûå ñåðâåðà CT1+
|
||||||
|
if gSys.tKeyType > 0 then begin
|
||||||
|
s := copy(_dBuff,5,16);
|
||||||
|
if gSys.tKeyType < 3 then s := copy(s,1,4)+Hstr('A1 6C 54 87'); // C4/C5/ïñåâäî èíòåðëþä.
|
||||||
|
if gSys.tKeyType = 3 then s := copy(s,1,8)+Hstr('C8 27 93 01 A1 6C 31 97'); // èíòåðëþä.
|
||||||
|
if gSys.tKeyType = 4 then begin
|
||||||
|
s := copy(s,1,8)+Hstr('C8 27 93 01 A1 6C 31 97');
|
||||||
|
_id_mix := true;
|
||||||
|
// ScriptTimeOut(30000);
|
||||||
|
_init_tables(GInt(_dBuff, $16, 4));
|
||||||
|
writelogln('kamael+ trafic detected');
|
||||||
|
// writelog('one byte table');
|
||||||
|
// writelogHexB(_1_byte_table);
|
||||||
|
// writelog('two byte table');
|
||||||
|
// writelogHexB(_2_byte_table);
|
||||||
|
|
||||||
|
// gSys.sleep(10000);
|
||||||
|
// ScriptTimeOut(1000);
|
||||||
|
end;
|
||||||
|
Kci := s; Kco := s; Ksi := s; Kso := s;
|
||||||
|
scode := true; // çàïóñòèì äå/êîäèðîâàíèå GS
|
||||||
|
writelogln('key:');writeloghexb(s);
|
||||||
|
end else writelogln('íåîïîçíàííûé êëþ÷åâîé ïàêåò GS LA2 ïðîòîêîëà')
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure OnDeCode; // ôóíêöèÿ-ñîáûòèå íà äåêîäèðîâàíèå ïàêåòà.
|
||||||
|
// ýòà ô-öèÿ âûçûâàåòñÿ ïðè ïîëó÷åíèè ïàêåòà, ÄÎ àâòîìàòè÷åñêîãî äåêîäèðîâàíèÿ (åñëè âêëþ÷åíî) è ÄÎ çàïèñåé â àâòîëîããåð îñíîâíûõ ïàêåòîâ
|
||||||
|
// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ...
|
||||||
|
// âõîäíîé áóôåð '_dBuff', âûõîäíîé '_dOutBuff', ôëàã íàïðàâëåíèÿ '_dFromServ' (íå ïåðåïóòàéòå)
|
||||||
|
begin
|
||||||
|
//writelogln('OnDeCode ..');
|
||||||
|
|
||||||
|
// _dBuff - âõîäíîé ïàêåò äëÿ äåêîäèðîâàíèÿ
|
||||||
|
if _gAbsNumPkt < 6 then Trafic_Detector; // îïðåäåëèì òðàôèê è òèï ñåðâåðà (â ïðåäåëàõ 5 ïåðâûõ ïàêåòîâ, äëÿ LA2 ýòîãî õâàòèò)
|
||||||
|
//
|
||||||
|
if scode and (_gAbsNumPkt > 2) then begin
|
||||||
|
// äåêîäèðóåì ïàêåò, ðó÷íàÿ ðåàëèçàöèÿ ñòàíäàðòíîãî àëãîðèòìà.
|
||||||
|
if _dFromServ then
|
||||||
|
_DecGS(_dBuff,Ksi,gSys.tKeyType)
|
||||||
|
else begin
|
||||||
|
_DecGS(_dBuff,Kci,gSys.tKeyType);
|
||||||
|
writelogHexB(_dBuff);
|
||||||
|
if _id_mix then _decode_id(_dBuff);
|
||||||
|
end;
|
||||||
|
_dOutBuff := _dBuff;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Procedure OnEnCode; // ôóíêöèÿ-ñîáûòèå íà êîäèðîâàíèå ïàêåòà.
|
||||||
|
// ýòà ô-öèÿ âûçûâàåòñÿ ïåðåä îòñûëêîé ïàêåòà, ïîñëå çàïèñè â àâòîëîããåð îñíîâíûõ ïàêåòîâ è ïîñëå àâòîìàòè÷åñêîãî êîäèðîâàíèÿ (åñëè âêëþ÷åíî)
|
||||||
|
// òàê æå ô-öèÿ âûçûâàåòñÿ àâòîìàòè÷åñêè ïðè èñïîëüçîâàíèè gSys.EnSendC è gSys.EnSendS
|
||||||
|
// !! Âíèìàíèå !!
|
||||||
|
// â OnEnCode çàïðåùåíî èñïîëüçîâàòü ô-öèè gSys.EnSendC è gSys.EnSendS âî èçáåæàíèå çàìêíóòîé ðåêóðñèè
|
||||||
|
// ô-öèÿ íå îáÿçàòåëüíà è ìîæåò îòñóòñòâîâàòü â ñêðèïòàõ ...
|
||||||
|
// âõîäíîé áóôåð '_dBuff', âûõîäíîé '_dOutBuff', ôëàã íàïðàâëåíèÿ '_dFromServ' (íå ïåðåïóòàéòå)
|
||||||
|
begin
|
||||||
|
//writelogln('OnEnCode ..');
|
||||||
|
|
||||||
|
if scode and (_gAbsNumPkt > 2) then begin
|
||||||
|
// êîäèðóåì ïàêåò, ðó÷íàÿ ðåàëèçàöèÿ ñòàíäàðòíîãî àëãîðèòìà
|
||||||
|
if _dFromServ then
|
||||||
|
_EncGS(_dBuff,Kco,gSys.tKeyType)
|
||||||
|
else begin
|
||||||
|
if _id_mix then _encode_id(_dBuff);
|
||||||
|
_EncGS(_dBuff,Kso,gSys.tKeyType);
|
||||||
|
end;
|
||||||
|
_dOutBuff := _dBuff;
|
||||||
|
|
||||||
|
//if _dFromServ then gSys.EnSendC(_dBuff) else gSys.EnSendS(_dBuff);
|
||||||
|
//gBlockPacket;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SendMsg(msg : string); // ô-öèÿ äëÿ âûâîäà ëþáîãî ñîîáùåíèÿ â ÷àò êëèåíòà (äðóãèì íå âèäíî)
|
||||||
|
begin
|
||||||
|
if (gSys.isGS > 0) and (gSys.TrafType = 2) then // ïðîâåðêà íà òðàôèê LA2 GS
|
||||||
|
gSys.EnSendC(FormatPck('%cddss',[#$4A,0,10,#0,msg+#0]));
|
||||||
|
end;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
// Òåëî ñêðèïòà
|
||||||
|
// âûçûâàåòñÿ ïðè ïîëó÷åíèè ïàêåòà ïðîøåäøåãî âñå äåêîäèðîâîêè è àâòîäåêîäèðîâêè
|
||||||
|
// êàê îáû÷íî, çäåñü ïàêåò ïðèõîäèò â _gBuff è åñëè åãî íàäî èçìåíèòü, òî ïèøåì â _gOutBuff
|
||||||
|
// ...
|
||||||
|
|
||||||
|
if length(_gBuff) < 3 then exit;
|
||||||
|
ID := gInt(_gBuff,3,1);
|
||||||
|
//if (ID = $FE) or (ID = $D0) then ID := gInt(_gBuff,3,2);
|
||||||
|
//
|
||||||
|
// â êà÷åñòâå ïðèìåðà
|
||||||
|
if ID = $15 then begin // âîçüìåì èìÿ âûáðàííîãî ïåðñîíàæà
|
||||||
|
//GetAnsiStr(copy(_gBuff,4,
|
||||||
|
ScanPck5(_gBuff,4,'s',CharName, null, null, null, null);
|
||||||
|
CharName := trim(CharName);
|
||||||
|
Writelogln('Âûáðàííûé ïåðñ: '+CharName);
|
||||||
|
end;
|
||||||
|
//
|
||||||
|
|
||||||
|
// CT1+ table reset on char selected
|
||||||
|
if ID = $0B then begin
|
||||||
|
|
||||||
|
ScanPck5(_gBuff, 4, 's-99-99-04d' ,CharName, temp_seed, null, null, null);
|
||||||
|
writelogln(format('reseting id tables on CharSelected; Seed = %x',[temp_seed]));
|
||||||
|
_init_tables(temp_seed);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ... äàëåå ïàêåò ëîãèðóåòñÿ è óõîäèò íà àâòîêîäèðîâêó çàòåì íà êîäèðîâêó (OnEnCode) è îòïðàâëÿåòñÿ.
|
||||||
|
END.
|
||||||
|
|
||||||
|
|
||||||
|
|
24
docs/exp_percent.txt
Normal file
24
docs/exp_percent.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
exp_table: array[0..85] of integer =
|
||||||
|
(
|
||||||
|
0, // level 0
|
||||||
|
1, 69, 364, 1169, 2885, 6039, 11288, 19424, 31379, 48230, //level 10
|
||||||
|
71203, 101678, 141194, 191455, 254331, 331868, 426289, 540001, 675597, 835863, //level 20
|
||||||
|
1023785, 1242547, 1495544, 1786380, 2118877, 2497078, 2925251, 3407898, 3949755, 4555797, //level 30
|
||||||
|
5231247, 5981577, 6812514, 7730045, 8740423, 9850167, 11066073, 12395216, 13844952, 15422930, //level 40
|
||||||
|
17137088, 18995666, 21007204, 23180551, 25524869, 28049636, 30764655, 33680053, 36806290, 40154163, //level 50
|
||||||
|
45525134, 51262491, 57383989, 63907912, 70853090, 80700832, 91162655, 102265882, 114038596, 126509653, //level 60
|
||||||
|
146308200, 167244337, 189364894, 212717908, 237352644, 271975263, 308443198, 346827154, 387199547, 429634523, //level 70
|
||||||
|
474207979, 532694979, 606322775, 696381369, 800225364, 900275364, 1000571463, 1100482881, 1200687304, 1300321654, //level 80
|
||||||
|
1400123456, 1550789123, 1680156789, 1850164821, 2099305232 //level 85
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
function PercentExp(lvl, Exp:integer):double;
|
||||||
|
var
|
||||||
|
Result:double;
|
||||||
|
begin
|
||||||
|
Result:=0;
|
||||||
|
if((lvl>=1)AND(lvl<=85))then Result:= (Exp-exp_table[lvl])/(exp_table[lvl+1]-exp_table[lvl])*100;
|
||||||
|
if(Result<0)then Result:=0;
|
||||||
|
PercentExp:=Result;
|
||||||
|
end;
|
78
docs/experience.txt
Normal file
78
docs/experience.txt
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
2 67
|
||||||
|
3 362
|
||||||
|
4 1,167
|
||||||
|
5 2,883
|
||||||
|
6 6,037
|
||||||
|
7 11,286
|
||||||
|
8 19,422
|
||||||
|
9 31,377
|
||||||
|
10 48,228
|
||||||
|
11 71,201
|
||||||
|
12 101,676
|
||||||
|
13 141,192
|
||||||
|
14 191,453
|
||||||
|
15 254,329
|
||||||
|
16 331,866
|
||||||
|
17 426,287
|
||||||
|
18 539,999
|
||||||
|
19 675,595
|
||||||
|
20 835,861
|
||||||
|
21 1,023,783
|
||||||
|
22 1,242,545
|
||||||
|
23 1,301,364
|
||||||
|
24 1,447,733
|
||||||
|
25 2,118,875
|
||||||
|
26 2,497,076
|
||||||
|
27 2,925,249
|
||||||
|
28 3,407,896
|
||||||
|
29 3,949,754
|
||||||
|
30 4,555,795
|
||||||
|
31 5,231,244
|
||||||
|
32 5,981,575
|
||||||
|
33 6,812,513
|
||||||
|
34 7,730,043
|
||||||
|
35 8,740,421
|
||||||
|
36 9,850,165
|
||||||
|
37 11,066,071
|
||||||
|
38 12,395,215
|
||||||
|
39 13,844,951
|
||||||
|
40 15,422,928
|
||||||
|
41 17,137,086
|
||||||
|
42 18,995,665
|
||||||
|
43 21,007,200
|
||||||
|
44 23,180,550
|
||||||
|
45 25,524,869
|
||||||
|
46 28,049,631
|
||||||
|
47 30,764,650
|
||||||
|
48 33,680,051
|
||||||
|
49 36,806,285
|
||||||
|
50 40,154,161
|
||||||
|
51 45,525,133
|
||||||
|
52 51,262,487
|
||||||
|
53 57,383,992
|
||||||
|
54 63,907,914
|
||||||
|
55 70,853,088
|
||||||
|
56 80,700,825
|
||||||
|
57 91,162,660
|
||||||
|
58 102,265,882
|
||||||
|
59 114,038,590
|
||||||
|
60 126,509,653
|
||||||
|
61 146,308,201
|
||||||
|
62 167,244,335
|
||||||
|
63 189,364,888
|
||||||
|
64 212,717,913
|
||||||
|
65 237,352,657
|
||||||
|
66 271,975,264
|
||||||
|
67 308,443,191
|
||||||
|
68 346,827,140
|
||||||
|
69 387,199,535
|
||||||
|
70 429,634,523
|
||||||
|
71 474,207,980
|
||||||
|
72 532,694,971
|
||||||
|
73 606,322,751
|
||||||
|
74 696,381,374
|
||||||
|
75 804,225,311
|
||||||
|
76 931,275,813
|
||||||
|
77 1,151,275,702
|
||||||
|
78 1,511,275,832
|
||||||
|
79 2,099,275,897
|
38
docs/exploring_c_prng.cpp
Normal file
38
docs/exploring_c_prng.cpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
void __cdecl srand( unsigned int seed )
|
||||||
|
{
|
||||||
|
_getptd()->_holdrand = (unsigned long)seed;
|
||||||
|
}
|
||||||
|
|
||||||
|
int __cdecl rand( void )
|
||||||
|
{
|
||||||
|
_ptiddata ptd = _getptd();
|
||||||
|
return( ((ptd->_holdrand = ptd->_holdrand * 214013L + 2531011L) >> 16) & 0x7fff );
|
||||||
|
}
|
||||||
|
|
||||||
|
public rand
|
||||||
|
rand proc near
|
||||||
|
call sub_77C29F25 // _getptd()?
|
||||||
|
mov ecx, [eax+14h] // offset of _holdrand?
|
||||||
|
imul ecx, 343FDh // 214013
|
||||||
|
add ecx, 269EC3h // 2531011
|
||||||
|
mov [eax+14h], ecx
|
||||||
|
mov eax, ecx
|
||||||
|
shr eax, 10h // >> 16
|
||||||
|
and eax, 7FFFh
|
||||||
|
retn
|
||||||
|
rand endp
|
||||||
|
|
||||||
|
public srand
|
||||||
|
srand proc near
|
||||||
|
|
||||||
|
arg_0= dword ptr 8
|
||||||
|
|
||||||
|
mov edi, edi // 3 lines - BP-based frame
|
||||||
|
push ebp
|
||||||
|
mov ebp, esp
|
||||||
|
call sub_77C29F25 // _getptd()?
|
||||||
|
mov ecx, [ebp+arg_0] // ecx = seed (argument 0)
|
||||||
|
mov [eax+14h], ecx // _getptd()->_holdrand = seed
|
||||||
|
pop ebp
|
||||||
|
retn
|
||||||
|
srand endp
|
22
docs/gamepackets/AbnormalStatusUpdate.txt
Normal file
22
docs/gamepackets/AbnormalStatusUpdate.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Server: 85 AbnormalStatusUpdate: len 25
|
||||||
|
19 00
|
||||||
|
85
|
||||||
|
02 00 // nEffects = 2
|
||||||
|
3E 14 00 00 // skillID 5182 \
|
||||||
|
01 00 // level 1 > 1
|
||||||
|
BF 1E 00 00 // duration 7871 /
|
||||||
|
E2 10 00 00 // skillID \
|
||||||
|
01 00 // level 1 > 2
|
||||||
|
42 0F 00 00 // duration 3906 /
|
||||||
|
|
||||||
|
19 00
|
||||||
|
85
|
||||||
|
02 00
|
||||||
|
3E 14 00 00 // skill
|
||||||
|
01 00
|
||||||
|
C5 1E 00 00 // 7877
|
||||||
|
E2 10 00 00
|
||||||
|
01 00
|
||||||
|
47 0F 00 00 // 3911
|
||||||
|
|
||||||
|
duration in seconds...?
|
18
docs/gamepackets/Action.txt
Normal file
18
docs/gamepackets/Action.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
14 00 // len - 20
|
||||||
|
1F // ptype - Action
|
||||||
|
39 A4 00 10 // objectID 268477497 of a target
|
||||||
|
9A CB 00 00 // originX 52122
|
||||||
|
3D 2B FF FF // originY -544657
|
||||||
|
A9 F3 FF FF // originZ -3159
|
||||||
|
00 // use shift? 00 - false, 01 - true
|
||||||
|
|
||||||
|
|
||||||
|
client sends its own coordinates
|
||||||
|
|
||||||
|
(52136,-54431,-3184)
|
||||||
|
|
||||||
|
[PACKET] Client: 1F Action [268477497]
|
||||||
|
[PACKET] Server: 23 TargetSelected [268636209] -> [268477497]
|
||||||
|
my_obj_ID -> targ_obj_ID
|
||||||
|
[PACKET] Server: B9 MyTargetSelected [268477497]
|
||||||
|
targ_obj_ID
|
3
docs/gamepackets/Appearing.txt
Normal file
3
docs/gamepackets/Appearing.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Client Len 3 [Appearing]
|
||||||
|
03 00
|
||||||
|
3A // pcode Appearing
|
11
docs/gamepackets/AskJoinParty.txt
Normal file
11
docs/gamepackets/AskJoinParty.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Server: 39 AskJoinParty: len 23
|
||||||
|
17 00
|
||||||
|
39
|
||||||
|
41 00 6C 00 65 00 78 00 78 00 69 00 61 00 00 00 // inviter A l e x x i a
|
||||||
|
04 00 00 00 // loot type
|
||||||
|
|
||||||
|
// 0 - Finders Keepers
|
||||||
|
// 1 - Random
|
||||||
|
// 2 - Random including spoil
|
||||||
|
// 3 - by turn
|
||||||
|
// 4 - by turn including spoil
|
38
docs/gamepackets/Attack.txt
Normal file
38
docs/gamepackets/Attack.txt
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
Server: Len 39 [Attack]
|
||||||
|
27 00
|
||||||
|
33
|
||||||
|
6C 08 00 10 // attacker
|
||||||
|
B2 16 00 10 // target
|
||||||
|
A6 00 00 00 // damage
|
||||||
|
00 // flags
|
||||||
|
9A AC 00 00 // x
|
||||||
|
F9 A4 00 00 // y coords of attacker
|
||||||
|
5D F2 FF FF // z
|
||||||
|
00 00 // count-1
|
||||||
|
B2 16 00 10 // attacker (same)
|
||||||
|
A6 00 00 00 // damage (same)
|
||||||
|
00 // flags (same)
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
if (soulshot) _flags |= 0x10 | _grade;
|
||||||
|
if (crit) _flags |= 0x20;
|
||||||
|
if (shld > 0) _flags |= 0x40;
|
||||||
|
if (miss) _flags |= 0x80;
|
||||||
|
|
||||||
|
|
||||||
|
writeC(0x33);
|
||||||
|
|
||||||
|
writeD(_attackerObjId);
|
||||||
|
writeD(_hits[0]._targetId);
|
||||||
|
writeD(_hits[0]._damage);
|
||||||
|
writeC(_hits[0]._flags);
|
||||||
|
writeD(_x);
|
||||||
|
writeD(_y);
|
||||||
|
writeD(_z);
|
||||||
|
writeH(_hits.length-1);
|
||||||
|
for (Hit temp: _hits)
|
||||||
|
{
|
||||||
|
writeD(temp._targetId);
|
||||||
|
writeD(temp._damage);
|
||||||
|
writeC(temp._flags);
|
||||||
|
}
|
9
docs/gamepackets/AuthLogin.txt
Normal file
9
docs/gamepackets/AuthLogin.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
21 00 // 33 b
|
||||||
|
2B // on L2J if obfuscator (last 4 bytes) in KeyPacket are 00 00 00 00
|
||||||
|
// pcode may vary on retail!
|
||||||
|
6C 00 65 00 78 00 78 00 00 00 // account login (Unicode string)
|
||||||
|
BC C4 1C 61 // sessionKey2 part2
|
||||||
|
6A 92 28 32 // sessionKey2 part1
|
||||||
|
62 05 8C 1A // sessionKey1 part1
|
||||||
|
A7 0D 32 D9 // sessionKey1 part2
|
||||||
|
01 00 00 00 // hz
|
76
docs/gamepackets/BuyList.txt
Normal file
76
docs/gamepackets/BuyList.txt
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
Server: Len 2765 [BuyList] |
|
||||||
|
CD 0A
|
||||||
|
07
|
||||||
|
C7 55 35 00 // money 3495367
|
||||||
|
90 00 00 00 // list ID 144
|
||||||
|
2B 00 // items count 43
|
||||||
|
|
||||||
|
04 00 // item type 1 0-weapon/ring/earring/necklace 1-armor/shield 4-item/questitem/adena
|
||||||
|
00 00 00 00 // objectID
|
||||||
|
2B 07 00 00 // itemID 1835 Soulshot no grade
|
||||||
|
00 00 00 00 // current count
|
||||||
|
05 00 // item type2 0-weapon 1-shield/armor 2-ring/earring/necklace 3-questitem 4-adena 5-item
|
||||||
|
00 00 // ??
|
||||||
|
00 00 00 00 // bodypart (for armor)
|
||||||
|
00 00 // enchant level
|
||||||
|
00 00 00 00 // ??
|
||||||
|
07 00 00 00 // price (=7)
|
||||||
|
FE FF FF FF // atk attribute type (-2) \\
|
||||||
|
00 00 00 00 // atk attribute value \\
|
||||||
|
00 00 00 00 // fire def \\
|
||||||
|
00 00 00 00 // water def || element attributes
|
||||||
|
00 00 00 00 // wind def ||
|
||||||
|
00 00 00 00 // earth def //
|
||||||
|
00 00 00 00 // holy def //
|
||||||
|
00 00 00 00 // unholy def //
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0x07);
|
||||||
|
writeD(_money); // current money
|
||||||
|
writeD(_listId);
|
||||||
|
|
||||||
|
writeH(_list.size());
|
||||||
|
|
||||||
|
for (L2TradeItem item : _list)
|
||||||
|
{
|
||||||
|
if (item.getCurrentCount() > 0 || !item.hasLimitedStock())
|
||||||
|
{
|
||||||
|
writeH(item.getTemplate().getType1()); // item type1
|
||||||
|
writeD(0x00); //objectId
|
||||||
|
writeD(item.getItemId());
|
||||||
|
writeD(item.getCurrentCount() <0 ? 0 : item.getCurrentCount());
|
||||||
|
writeH(item.getTemplate().getType2()); // item type2
|
||||||
|
writeH(0x00); // ?
|
||||||
|
|
||||||
|
if (item.getTemplate().getType1() != L2Item.TYPE1_ITEM_QUESTITEM_ADENA)
|
||||||
|
{
|
||||||
|
writeD(item.getTemplate().getBodyPart());
|
||||||
|
writeH(0x00); // item enchant level
|
||||||
|
writeH(0x00); // ?
|
||||||
|
writeH(0x00);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writeD(0x00);
|
||||||
|
writeH(0x00);
|
||||||
|
writeH(0x00);
|
||||||
|
writeH(0x00);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.getItemId() >= 3960 && item.getItemId() <= 4026)//Config.RATE_SIEGE_GUARDS_PRICE-//'
|
||||||
|
writeD((int)(item.getPrice() * Config.RATE_SIEGE_GUARDS_PRICE * (1 + _taxRate)));
|
||||||
|
else
|
||||||
|
writeD((int)(item.getPrice() * (1 + _taxRate)));
|
||||||
|
|
||||||
|
// T1
|
||||||
|
for (byte i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
writeD(0x00);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
docs/gamepackets/ChangeMoveType.txt
Normal file
11
docs/gamepackets/ChangeMoveType.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Server: Len 15 [ChangeMoveType]
|
||||||
|
0F 00
|
||||||
|
28
|
||||||
|
B2 16 00 10 // object id
|
||||||
|
00 00 00 00 // 0 - walk, 1 - run
|
||||||
|
00 00 00 00 // ??
|
||||||
|
|
||||||
|
writeC(0x28);
|
||||||
|
writeD(_charObjId);
|
||||||
|
writeD(_running ? RUN : WALK);
|
||||||
|
writeD(0); //c2
|
46
docs/gamepackets/CharSelected_hellbound.txt
Normal file
46
docs/gamepackets/CharSelected_hellbound.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Server: Len 284
|
||||||
|
1C 01
|
||||||
|
0B // CharSelected
|
||||||
|
4E 00 69 00 72 00 61 00 65 00 6C 00 00 00 // char name
|
||||||
|
7A 0B 03 00 // char id?
|
||||||
|
00 00 // title
|
||||||
|
FA B6 BA AF // session id
|
||||||
|
00 00 00 00 // clan id
|
||||||
|
00 00 00 00 // always 0
|
||||||
|
01 00 00 00 // sex
|
||||||
|
01 00 00 00 // race
|
||||||
|
17 00 00 00 // class id
|
||||||
|
01 00 00 00 // 1 - active?
|
||||||
|
F4 40 02 00 // x
|
||||||
|
7F 31 FF FF // y
|
||||||
|
3A F5 FF FF // z
|
||||||
|
00 00 00 00 00 0A A8 40 // cur Hp
|
||||||
|
58 A8 35 CD 3B EC 99 40 // cur mp
|
||||||
|
FF CA 53 00 // sp
|
||||||
|
5A B6 E2 31 00 00 00 00 // exp
|
||||||
|
4B 00 00 00 // level
|
||||||
|
00 00 00 00 // karma
|
||||||
|
00 00 00 00 // const 0x00
|
||||||
|
17 00 00 00 // int
|
||||||
|
28 00 00 00 // str
|
||||||
|
1E 00 00 00 // con
|
||||||
|
1A 00 00 00 // men
|
||||||
|
24 00 00 00 // dex
|
||||||
|
0E 00 00 00 // wit
|
||||||
|
00 00 00 00 00 00 00 00 // const
|
||||||
|
00 00 00 00 // class id...? O_o
|
||||||
|
00 00 00 00 // 00 1
|
||||||
|
00 00 00 00 // 00
|
||||||
|
00 00 00 00 // 00
|
||||||
|
00 00 00 00 // 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 E1 1A 00 00
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
00
|
||||||
|
|
||||||
|
wtf dunno end of packet
|
75
docs/gamepackets/CharSelectionInfo.txt
Normal file
75
docs/gamepackets/CharSelectionInfo.txt
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
S->C Len 317
|
||||||
|
3D 01 // length (example 317)
|
||||||
|
09 // packet code
|
||||||
|
01 00 00 00 // number of chars
|
||||||
|
07 00 00 00 // max chars on server?
|
||||||
|
00 // always 0x00
|
||||||
|
|
||||||
|
// repeated block unknown length, because of var-length strings
|
||||||
|
// minimum length must be 281 bytes (not sure)
|
||||||
|
46 00 6C 00 61 00 6D 00 65 00 64 00 53 00 6F 00 75 00 6C 00 00 00 // char name (Unicode)
|
||||||
|
37 0B 0E 00 // char ID
|
||||||
|
6C 00 65 00 78 00 78 00 68 00 75 00 6C 00 65 00 00 00 // login name
|
||||||
|
0D FE 0F 00 // sessionID (playOkId1)
|
||||||
|
4E 2A 00 00 // clanID
|
||||||
|
00 00 00 00 // L2J says it's always 00 00 00 00; as I saw, on retail also
|
||||||
|
01 00 00 00 // sex
|
||||||
|
00 00 00 00 // race
|
||||||
|
0A 00 00 00 // character base class ID
|
||||||
|
01 00 00 00 // active? (c) L2J // useless >_<
|
||||||
|
9F B1 FF FF \
|
||||||
|
32 E4 01 00 | (( x ,y ,z )) ?
|
||||||
|
00 F3 FF FF /
|
||||||
|
B8 1E 85 EB 51 F8 79 40 // HP cur
|
||||||
|
C2 F5 28 5C 8F 92 78 40 // MP cur
|
||||||
|
85 51 00 00 // SP
|
||||||
|
0C BA 0D 00 00 00 00 00 // Exp
|
||||||
|
14 00 00 00 // Level
|
||||||
|
00 00 00 00 // karma
|
||||||
|
00 00 00 00 // PK kills
|
||||||
|
00 00 00 00 // PVP kills
|
||||||
|
00 00 00 00 \
|
||||||
|
00 00 00 00 \
|
||||||
|
00 00 00 00 | some 7 zero dwords
|
||||||
|
00 00 00 00 |
|
||||||
|
00 00 00 00 /
|
||||||
|
00 00 00 00 /
|
||||||
|
00 00 00 00 /
|
||||||
|
00 00 00 00 // itemID hair all
|
||||||
|
4E 03 00 00 // itemID r ear
|
||||||
|
4E 03 00 00 // itemID l ear
|
||||||
|
8D 03 00 00 // necklace
|
||||||
|
6E 03 00 00 // r finger
|
||||||
|
6E 03 00 00 // l finger
|
||||||
|
2C 00 00 00 // head
|
||||||
|
37 01 00 00 // r hand
|
||||||
|
71 02 00 00 // l hand
|
||||||
|
33 00 00 00 // gloves
|
||||||
|
4D 04 00 00 // chest
|
||||||
|
50 04 00 00 // legs
|
||||||
|
27 00 00 00 // feet
|
||||||
|
00 00 00 00 // back
|
||||||
|
00 00 00 00 // LR hand
|
||||||
|
00 00 00 00 // hair
|
||||||
|
00 00 00 00 // hair 2
|
||||||
|
00 00 00 00 // R bracelet
|
||||||
|
00 00 00 00 // L bracelet
|
||||||
|
00 00 00 00 \
|
||||||
|
00 00 00 00 \
|
||||||
|
00 00 00 00 | some 6 null dwords
|
||||||
|
00 00 00 00 |
|
||||||
|
00 00 00 00 /
|
||||||
|
00 00 00 00 /
|
||||||
|
02 00 00 00 // hair style
|
||||||
|
03 00 00 00 // hair color
|
||||||
|
00 00 00 00 // face
|
||||||
|
B8 1E 85 EB 51 F8 79 40 // HP max
|
||||||
|
C2 F5 28 5C 8F 92 78 40 // MP max
|
||||||
|
00 00 00 00 // deleteDays; if != 0 then char is inactive
|
||||||
|
0A 00 00 00 // classID
|
||||||
|
01 00 00 00 // 0x00000001 if last used char, 0x00000000 otherwise
|
||||||
|
00 // enchantEffect (<=127)
|
||||||
|
00 00 // Augmentation ID
|
||||||
|
00 00 // something also for augment
|
||||||
|
00 00 00 00 // transformation ID
|
||||||
|
// (but on retail you cannot see transform on char select screen)
|
16
docs/gamepackets/CharacterCreate.txt
Normal file
16
docs/gamepackets/CharacterCreate.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Client: Len 63 [CharacterCreate]
|
||||||
|
3F 00
|
||||||
|
0C // opcode
|
||||||
|
41 00 65 00 72 00 69 00 6E 00 00 00 // name
|
||||||
|
01 00 00 00 // race
|
||||||
|
01 00 00 00 // sex
|
||||||
|
19 00 00 00 // class id
|
||||||
|
1C 00 00 00 // INT
|
||||||
|
27 00 00 00 // STR
|
||||||
|
1E 00 00 00 // CON
|
||||||
|
1B 00 00 00 // MEN
|
||||||
|
23 00 00 00 // DEX
|
||||||
|
0B 00 00 00 // WIT
|
||||||
|
00 00 00 00 // hair style
|
||||||
|
00 00 00 00 // hair color
|
||||||
|
00 00 00 00 // face
|
8
docs/gamepackets/CharacterSelect_hellbound.txt
Normal file
8
docs/gamepackets/CharacterSelect_hellbound.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Client: Len 21
|
||||||
|
15 00
|
||||||
|
12
|
||||||
|
00 00 00 00 // charslot
|
||||||
|
00 00 00 00 // rest are constant
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
00 00
|
72
docs/gamepackets/CharacterSelectionInfo_final.txt
Normal file
72
docs/gamepackets/CharacterSelectionInfo_final.txt
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
Server: Len 313 [CharacterSelectionInfo]
|
||||||
|
39 01
|
||||||
|
09
|
||||||
|
01 00 00 00 // num chars
|
||||||
|
07 00 00 00 // server max chars
|
||||||
|
00 // 00
|
||||||
|
|
||||||
|
41 00 6C 00 65 00 78 00 78 00 69 00 61 00 00 00 // name
|
||||||
|
7A 0B 03 00 // oid
|
||||||
|
6D 00 69 00 6E 00 6C 00 65 00 78 00 78 00 00 00 // acc
|
||||||
|
46 8D 2A 54 /// play ok 1
|
||||||
|
00 00 00 00 /// clan id
|
||||||
|
00 00 00 00 // 0x00
|
||||||
|
01 00 00 00 // sex
|
||||||
|
00 00 00 00 // race
|
||||||
|
10 00 00 00 // base cls
|
||||||
|
01 00 00 00 // 0x01 - active
|
||||||
|
E8 AA 00 00 \
|
||||||
|
58 42 FF FF > x,y,z
|
||||||
|
E8 FC FF FF /
|
||||||
|
00 00 00 00 00 06 A6 40 // hp cur
|
||||||
|
00 00 00 00 00 98 AC 40 // mp cur
|
||||||
|
39 B9 56 00 // sp
|
||||||
|
A6 8E F5 0B 00 00 00 00 // exp
|
||||||
|
3F 00 00 00 // level 63
|
||||||
|
00 00 00 00 // karma
|
||||||
|
00 00 00 00 // pk
|
||||||
|
02 00 00 00 // pvp
|
||||||
|
00 00 00 00 \
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00 > 7 zero dwords
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00 /
|
||||||
|
70 25 00 00 \ HAIRALL
|
||||||
|
39 30 00 00 REAR
|
||||||
|
32 30 00 00 LEAR
|
||||||
|
30 30 00 00 NECK
|
||||||
|
31 30 00 00 RFINGER
|
||||||
|
31 30 00 00 LFINGER
|
||||||
|
00 02 00 00 HEAD
|
||||||
|
C2 2E 00 00 RHAND
|
||||||
|
00 00 00 00 LHAND
|
||||||
|
87 16 00 00 GLOVES
|
||||||
|
67 09 00 00 CHEST
|
||||||
|
00 00 00 00 LEGS
|
||||||
|
93 16 00 00 FEET
|
||||||
|
00 00 00 00 BACK
|
||||||
|
00 00 00 00 LRHAND
|
||||||
|
F4 22 00 00 HAIR
|
||||||
|
00 00 00 00 HAIR2
|
||||||
|
75 25 00 00 RBRACELET
|
||||||
|
00 00 00 00 LBRACELET
|
||||||
|
00 00 00 00 DECO1
|
||||||
|
00 00 00 00 2
|
||||||
|
00 00 00 00 3
|
||||||
|
00 00 00 00 4
|
||||||
|
00 00 00 00 5
|
||||||
|
00 00 00 00 6
|
||||||
|
00 00 00 00 BELT
|
||||||
|
02 00 00 00 hStyle
|
||||||
|
03 00 00 00 hColor
|
||||||
|
00 00 00 00 face
|
||||||
|
00 00 00 00 00 06 A6 40 HP max
|
||||||
|
00 00 00 00 00 98 AC 40 MP max
|
||||||
|
00 00 00 00 del secs
|
||||||
|
10 00 00 00 classId
|
||||||
|
01 00 00 00 1 - last used char
|
||||||
|
00 enchantEffect
|
||||||
|
00 00 00 00 aug Id
|
||||||
|
00 00 00 00 transform id
|
71
docs/gamepackets/CreatureSay.txt
Normal file
71
docs/gamepackets/CreatureSay.txt
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
Server: 4A CreatureSay: len 255
|
||||||
|
FF 00
|
||||||
|
4A
|
||||||
|
00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 J 0 G
|
||||||
|
30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5
|
||||||
|
3D 04 42 04 20 00 27 00 43 00 6F 00 66 00 66 00 B C o f f
|
||||||
|
65 00 72 00 20 00 6F 00 66 00 20 00 53 00 68 00 e r o f S h
|
||||||
|
61 00 64 00 6F 00 77 00 73 00 27 00 2E 00 20 00 a d o w s
|
||||||
|
1F 04 3E 04 34 04 40 04 3E 04 31 04 3D 04 3E 04 4 1
|
||||||
|
41 04 42 04 38 04 20 00 3C 04 3E 04 36 04 3D 04 A B 8 6
|
||||||
|
3E 04 20 00 43 04 37 04 3D 04 30 04 42 04 4C 04 C 7 0 B L
|
||||||
|
20 00 43 04 20 00 4F 00 6D 00 65 00 67 00 61 00 C O m e g a
|
||||||
|
27 00 73 00 20 00 43 00 61 00 74 00 2C 00 20 00 s C a t
|
||||||
|
3A 04 3E 04 42 04 3E 04 40 04 3E 04 33 04 3E 04 B 3
|
||||||
|
20 00 12 04 4B 04 20 00 41 04 3C 04 3E 04 36 04 K A 6
|
||||||
|
35 04 42 04 35 04 20 00 3D 04 30 04 39 04 42 04 5 B 5 0 9 B
|
||||||
|
38 04 20 00 32 04 20 00 31 04 3B 04 38 04 36 04 8 2 1 8 6
|
||||||
|
30 04 39 04 48 04 35 04 3C 04 20 00 33 04 3E 04 0 9 H 5 3
|
||||||
|
40 04 3E 04 34 04 35 04 2E 00 00 00
|
||||||
|
|
||||||
|
FF 00 // len 255
|
||||||
|
4A
|
||||||
|
00 00 00 00 // objectID
|
||||||
|
0A 00 00 00 // text Type
|
||||||
|
00 00 // char name - empty here
|
||||||
|
1D 04 30 04 47 04
|
||||||
|
30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5
|
||||||
|
3D 04 42 04 20 00 27 00 43 00 6F 00 66 00 66 00 B C o f f
|
||||||
|
65 00 72 00 20 00 6F 00 66 00 20 00 53 00 68 00 e r o f S h
|
||||||
|
61 00 64 00 6F 00 77 00 73 00 27 00 2E 00 20 00 a d o w s
|
||||||
|
1F 04 3E 04 34 04 40 04 3E 04 31 04 3D 04 3E 04 4 1
|
||||||
|
41 04 42 04 38 04 20 00 3C 04 3E 04 36 04 3D 04 A B 8 6
|
||||||
|
3E 04 20 00 43 04 37 04 3D 04 30 04 42 04 4C 04 C 7 0 B L
|
||||||
|
20 00 43 04 20 00 4F 00 6D 00 65 00 67 00 61 00 C O m e g a
|
||||||
|
27 00 73 00 20 00 43 00 61 00 74 00 2C 00 20 00 s C a t
|
||||||
|
3A 04 3E 04 42 04 3E 04 40 04 3E 04 33 04 3E 04 B 3
|
||||||
|
20 00 12 04 4B 04 20 00 41 04 3C 04 3E 04 36 04 K A 6
|
||||||
|
35 04 42 04 35 04 20 00 3D 04 30 04 39 04 42 04 5 B 5 0 9 B
|
||||||
|
38 04 20 00 32 04 20 00 31 04 3B 04 38 04 36 04 8 2 1 8 6
|
||||||
|
30 04 39 04 48 04 35 04 3C 04 20 00 33 04 3E 04 0 9 H 5 3
|
||||||
|
40 04 3E 04 34 04 35 04 2E 00 00 00
|
||||||
|
|
||||||
|
[++] Server: 4A CreatureSay: len 93
|
||||||
|
5D 00
|
||||||
|
4A
|
||||||
|
00 00 00 00 0A 00 00 00 54 00 58 00 77 00 6B 00 J T X w k
|
||||||
|
61 00 00 00 14 04 3E 04 31 04 40 04 3E 04 20 00 a 1
|
||||||
|
3F 04 3E 04 36 04 30 04 3B 04 3E 04 32 04 30 04 6 0 2 0
|
||||||
|
42 04 4C 04 20 00 3D 04 30 04 20 00 41 04 35 04 B L 0 A 5
|
||||||
|
40 04 32 04 35 04 40 04 20 00 4E 00 4C 00 20 00 2 5 N L
|
||||||
|
78 00 31 00 30 00 2E 00 00 00
|
||||||
|
|
||||||
|
[++] Server: 4A CreatureSay: len 81
|
||||||
|
51 00
|
||||||
|
4A
|
||||||
|
00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 J 0 G
|
||||||
|
30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5
|
||||||
|
3D 04 42 04 20 00 27 00 54 00 68 00 65 00 20 00 B T h e
|
||||||
|
46 00 61 00 6C 00 6C 00 20 00 48 00 61 00 72 00 F a l l H a r
|
||||||
|
76 00 65 00 73 00 74 00 27 00 2E 00 00 00
|
||||||
|
|
||||||
|
[++] Server: 4A CreatureSay: len 99
|
||||||
|
63 00
|
||||||
|
4A
|
||||||
|
00 00 00 00 0A 00 00 00 00 00 1D 04 30 04 47 04 J 0 G
|
||||||
|
30 04 3B 04 41 04 4F 04 20 00 4D 04 32 04 35 04 0 A O M 2 5
|
||||||
|
3D 04 42 04 20 00 27 00 4C 00 32 00 20 00 4D 00 B L 2 M
|
||||||
|
65 00 64 00 61 00 6C 00 20 00 43 00 6F 00 6C 00 e d a l C o l
|
||||||
|
6C 00 65 00 63 00 74 00 69 00 6F 00 6E 00 20 00 l e c t i o n
|
||||||
|
45 00 76 00 65 00 6E 00 74 00 27 00 2E 00 00 00 E v e n t
|
||||||
|
|
13
docs/gamepackets/Die.txt
Normal file
13
docs/gamepackets/Die.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Server: Len 35 [Die]
|
||||||
|
23 00
|
||||||
|
00
|
||||||
|
3F 8E 05 10 // objectID?
|
||||||
|
01 00 00 00 // 1 - can resurrect to nearest village
|
||||||
|
00 00 00 00 // 1 - can res to CH
|
||||||
|
01 00 00 00 // 1 - can res to castle
|
||||||
|
00 00 00 00 // 1 - can res to siege HQ
|
||||||
|
|
||||||
|
also possible that next will follow:
|
||||||
|
00 00 00 00 // sweepable (blue glow)
|
||||||
|
00 00 00 00 // allow fixed res
|
||||||
|
00 00 00 00 // to fortress
|
78
docs/gamepackets/EnterWorld.txt
Normal file
78
docs/gamepackets/EnterWorld.txt
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
Java server ignores all EnterWorld content, parsing unknown :(
|
||||||
|
|
||||||
|
Client: Len 107
|
||||||
|
6B 00
|
||||||
|
11
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
C9 BC F2 A7
|
||||||
|
66 5A 0B 98
|
||||||
|
36 A5 BD 89
|
||||||
|
ED 7F E4 D7
|
||||||
|
6B 49 E2 9F
|
||||||
|
EF 76 EB CE
|
||||||
|
A3 FA F4 BF
|
||||||
|
0C 64 A3 B4
|
||||||
|
A4 CE DC C6
|
||||||
|
08 3E 6E EA
|
||||||
|
45 CA D3 FE
|
||||||
|
88 13 87 B8
|
||||||
|
06 2C 96 F0
|
||||||
|
9B 1E 8E BC
|
||||||
|
C6 9B 98 C8
|
||||||
|
63 16 CF D0
|
||||||
|
29 00 00 00
|
||||||
|
0A E1 74 17
|
||||||
|
0A 08 00 08
|
||||||
|
5C 32 BD E1
|
||||||
|
5C 32 BE 01
|
||||||
|
5C 32 BE 22
|
||||||
|
|
||||||
|
same char as above:
|
||||||
|
|
||||||
|
Client: Len 107
|
||||||
|
6B 00
|
||||||
|
11
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
00 00 00 00
|
||||||
|
C9 BC F2 A7
|
||||||
|
66 5A 0B 98
|
||||||
|
36 A5 BD 89
|
||||||
|
ED 7F E4 D7
|
||||||
|
6B 49 E2 9F
|
||||||
|
EF 76 EB CE
|
||||||
|
A3 FA F4 BF
|
||||||
|
0C 64 A3 B4
|
||||||
|
A4 CE DC C6
|
||||||
|
08 3E 6E EA
|
||||||
|
45 CA D3 FE
|
||||||
|
88 13 87 B8
|
||||||
|
06 2C 96 F0
|
||||||
|
9B 1E 8E BC
|
||||||
|
C6 9B 98 C8
|
||||||
|
63 16 CF D0
|
||||||
|
29 00 00 00
|
||||||
|
0A E1 74 17
|
||||||
|
0A 08 00 08
|
||||||
|
5C 32 BD E1
|
||||||
|
5C 32 BE 01
|
||||||
|
5C 32 BE 22
|
||||||
|
|
||||||
|
different acc, different char:
|
||||||
|
|
||||||
|
Client: Len 107
|
||||||
|
6B 00
|
||||||
|
11
|
||||||
|
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
C9 BC F2 A7 66 5A 0B 98 36 A5 BD 89 ED 7F E4 D7
|
||||||
|
6B 49 E2 9F EF 76 EB CE A3 FA F4 BF 0C 64 A3 B4
|
||||||
|
A4 CE DC C6 08 3E 6E EA 45 CA D3 FE 88 13 87 B8
|
||||||
|
06 2C 96 F0 9B 1E 8E BC C6 9B 98 C8 63 16 CF D0
|
||||||
|
29 00 00 00 0A E1 74 17 0A 08 00 08 5C 32 BD E1
|
||||||
|
5C 32 BE 22 5E 19 03 41
|
||||||
|
|
||||||
|
last 2 D's are different, depend on char and/or account
|
11
docs/gamepackets/EtcStatusUpdate.txt
Normal file
11
docs/gamepackets/EtcStatusUpdate.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Server: F9 EtcStatusUpdate: len 35
|
||||||
|
23 00
|
||||||
|
F9
|
||||||
|
00 00 00 00 // 1-7 increase force, lvl
|
||||||
|
00 00 00 00 // 1-4 weight penalty, lvl (1=50%, 2=66.6%, 3=80%, 4=100%)
|
||||||
|
00 00 00 00 // 1 = block all chat
|
||||||
|
00 00 00 00 // 1 = danger area
|
||||||
|
00 00 00 00 // 1 = grade penalty
|
||||||
|
00 00 00 00 // 1 = charm of courage (allows resurrection on the same spot upon death on the siege battlefield)
|
||||||
|
00 00 00 00 // 1-15 death penalty, lvl (combat ability decreased due to death)
|
||||||
|
00 00 00 00 // _activeChar.getSouls()
|
9
docs/gamepackets/GameGuard.txt
Normal file
9
docs/gamepackets/GameGuard.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Server: Len 19 [GameGuardQuery]
|
||||||
|
13 00
|
||||||
|
74
|
||||||
|
D9 3D 53 27 1D A5 72 2E 8B 03 17 20 A3 1E 5B C3
|
||||||
|
|
||||||
|
Client: Len 19 [GameGuardReply]
|
||||||
|
13 00
|
||||||
|
CB
|
||||||
|
7F 97 F0 78 04 3C E6 D6 71 0C F6 89 DD 9E 06 70
|
10
docs/gamepackets/JoinParty.txt
Normal file
10
docs/gamepackets/JoinParty.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Server: Len 7
|
||||||
|
07 00
|
||||||
|
3A
|
||||||
|
00 00 00 00 // response
|
||||||
|
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0x3a);
|
||||||
|
writeD(_response);
|
||||||
|
}
|
22
docs/gamepackets/KeyPacket.txt
Normal file
22
docs/gamepackets/KeyPacket.txt
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
===================================
|
||||||
|
L2J
|
||||||
|
19 00 // p.len 25
|
||||||
|
2E // pcode
|
||||||
|
01 // always const
|
||||||
|
42 55 77 8F C3 05 69 87 // xorkey first part
|
||||||
|
01 00 00 00 // always const
|
||||||
|
01 // possible Game Server ID // on L2J always 01
|
||||||
|
00 00 00 00 // always NULLs
|
||||||
|
00 00 00 00 // in L2J always NULLs - no obfuscation
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
Retail NCSoft
|
||||||
|
19 00 // p.len 25
|
||||||
|
2E // pcode
|
||||||
|
01 // always const
|
||||||
|
42 55 77 8F C3 05 69 87 // xorkey first part
|
||||||
|
01 00 00 00 // always const
|
||||||
|
01 // possible Game Server ID - depends on game server ID
|
||||||
|
00 00 00 00 // always NULLs
|
||||||
|
XX XX XX XX // always different, non-nulls: opcode obfuscator
|
||||||
|
|
8
docs/gamepackets/Logout.txt
Normal file
8
docs/gamepackets/Logout.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Client: Len 3
|
||||||
|
03 00
|
||||||
|
00
|
||||||
|
|
||||||
|
send when IN_GAME mode, to disconnect and close client
|
||||||
|
if restart possible server responds with 0x84 LeaveWorld from IN_GAME mode
|
||||||
|
|
||||||
|
from character selection screen, whe client sends this packet, server just disconencts... TODO: check...
|
15
docs/gamepackets/MagicSkillUse.txt
Normal file
15
docs/gamepackets/MagicSkillUse.txt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Server: Len 49 [MagicSkillUse]
|
||||||
|
31 00
|
||||||
|
48
|
||||||
|
6C 08 00 10 // objectId
|
||||||
|
AC 16 00 10 // targetObjectId
|
||||||
|
79 05 00 00 // skillID 1401 - Major HEal
|
||||||
|
0A 00 00 00 // skillLevel level 10
|
||||||
|
57 07 00 00 // hitTime cast time 1879 ms
|
||||||
|
CF 08 00 00 // reuseDelay 2255 reuse delay
|
||||||
|
5B AD 00 00 // x
|
||||||
|
E5 A4 00 00 // y
|
||||||
|
5D F2 FF FF // z
|
||||||
|
00 00 00 00 // ??
|
||||||
|
00 00 00 00 // ??
|
||||||
|
00 00 // ??
|
11
docs/gamepackets/MoveToPawn.txt
Normal file
11
docs/gamepackets/MoveToPawn.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Server: Len 27 [MoveToPawn]
|
||||||
|
1B 00
|
||||||
|
72 // MoveToPawn
|
||||||
|
6C 08 00 10 // _charObjId // 6C080010 objectID who is moving (can be user at least)
|
||||||
|
B2 16 00 10 // _targetId // B2160010 is target object id, to which he moves to
|
||||||
|
39 00 00 00 // _distance wtf is 57?..
|
||||||
|
C7 AC 00 00 // x
|
||||||
|
0A A6 00 00 // y dunno if it is user coordinates or mob coordinates
|
||||||
|
5D F2 FF FF // z
|
||||||
|
|
||||||
|
possible these are target's coordinates
|
3
docs/gamepackets/NewCharacter.txt
Normal file
3
docs/gamepackets/NewCharacter.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Client: Len 3 [NewCharacter]
|
||||||
|
03 00 // packet length - 3 bytes
|
||||||
|
13 // opcode
|
28
docs/gamepackets/NewCharacterSuccess.txt
Normal file
28
docs/gamepackets/NewCharacterSuccess.txt
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
Server: Len 967 [NewCharacterSuccess]
|
||||||
|
C7 03
|
||||||
|
0D // opcode
|
||||||
|
0C 00 00 00 // number of templates
|
||||||
|
|
||||||
|
// [ for each template ]
|
||||||
|
|
||||||
|
00 00 00 00 // race
|
||||||
|
00 00 00 00 // class id
|
||||||
|
46 00 00 00 // 0x46
|
||||||
|
28 00 00 00 // base STR
|
||||||
|
0A 00 00 00 // 0x0A
|
||||||
|
46 00 00 00 // 0x46
|
||||||
|
1E 00 00 00 // base DEX
|
||||||
|
0A 00 00 00
|
||||||
|
46 00 00 00
|
||||||
|
2B 00 00 00 // base CON
|
||||||
|
0A 00 00 00
|
||||||
|
46 00 00 00
|
||||||
|
15 00 00 00 // base INT
|
||||||
|
0A 00 00 00
|
||||||
|
46 00 00 00
|
||||||
|
0B 00 00 00 // base WIT
|
||||||
|
0A 00 00 00
|
||||||
|
46 00 00 00
|
||||||
|
19 00 00 00 // base MEN
|
||||||
|
0A 00 00 00
|
||||||
|
|
117
docs/gamepackets/NpcHtmlMessage.txt
Normal file
117
docs/gamepackets/NpcHtmlMessage.txt
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
Server: Len 1503 [NpcHtmlMessage]
|
||||||
|
DF 05
|
||||||
|
19
|
||||||
|
AC 16 00 10 // npcObjectID
|
||||||
|
3C 00 68 00 ... 3E 00 00 00 // html
|
||||||
|
00 00 00 00 // itemID
|
||||||
|
|
||||||
|
writeC(0x19);
|
||||||
|
writeD(_npcObjId);
|
||||||
|
writeS(_html);
|
||||||
|
writeD(_itemId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* the HTML parser in the client knowns these standard and non-standard tags and attributes
|
||||||
|
* VOLUMN
|
||||||
|
* UNKNOWN
|
||||||
|
* UL
|
||||||
|
* U
|
||||||
|
* TT
|
||||||
|
* TR
|
||||||
|
* TITLE
|
||||||
|
* TEXTCODE
|
||||||
|
* TEXTAREA
|
||||||
|
* TD
|
||||||
|
* TABLE
|
||||||
|
* SUP
|
||||||
|
* SUB
|
||||||
|
* STRIKE
|
||||||
|
* SPIN
|
||||||
|
* SELECT
|
||||||
|
* RIGHT
|
||||||
|
* PRE
|
||||||
|
* P
|
||||||
|
* OPTION
|
||||||
|
* OL
|
||||||
|
* MULTIEDIT
|
||||||
|
* LI
|
||||||
|
* LEFT
|
||||||
|
* INPUT
|
||||||
|
* IMG
|
||||||
|
* I
|
||||||
|
* HTML
|
||||||
|
* H7
|
||||||
|
* H6
|
||||||
|
* H5
|
||||||
|
* H4
|
||||||
|
* H3
|
||||||
|
* H2
|
||||||
|
* H1
|
||||||
|
* FONT
|
||||||
|
* EXTEND
|
||||||
|
* EDIT
|
||||||
|
* COMMENT
|
||||||
|
* COMBOBOX
|
||||||
|
* CENTER
|
||||||
|
* BUTTON
|
||||||
|
* BR
|
||||||
|
* BODY
|
||||||
|
* BAR
|
||||||
|
* ADDRESS
|
||||||
|
* A
|
||||||
|
* SEL
|
||||||
|
* LIST
|
||||||
|
* VAR
|
||||||
|
* FORE
|
||||||
|
* READONL
|
||||||
|
* ROWS
|
||||||
|
* VALIGN
|
||||||
|
* FIXWIDTH
|
||||||
|
* BORDERCOLORLI
|
||||||
|
* BORDERCOLORDA
|
||||||
|
* BORDERCOLOR
|
||||||
|
* BORDER
|
||||||
|
* BGCOLOR
|
||||||
|
* BACKGROUND
|
||||||
|
* ALIGN
|
||||||
|
* VALU
|
||||||
|
* READONLY
|
||||||
|
* MULTIPLE
|
||||||
|
* SELECTED
|
||||||
|
* TYP
|
||||||
|
* TYPE
|
||||||
|
* MAXLENGTH
|
||||||
|
* CHECKED
|
||||||
|
* SRC
|
||||||
|
* Y
|
||||||
|
* X
|
||||||
|
* QUERYDELAY
|
||||||
|
* NOSCROLLBAR
|
||||||
|
* IMGSRC
|
||||||
|
* B
|
||||||
|
* FG
|
||||||
|
* SIZE
|
||||||
|
* FACE
|
||||||
|
* COLOR
|
||||||
|
* DEFFON
|
||||||
|
* DEFFIXEDFONT
|
||||||
|
* WIDTH
|
||||||
|
* VALUE
|
||||||
|
* TOOLTIP
|
||||||
|
* NAME
|
||||||
|
* MIN
|
||||||
|
* MAX
|
||||||
|
* HEIGHT
|
||||||
|
* DISABLED
|
||||||
|
* ALIGN
|
||||||
|
* MSG
|
||||||
|
* LINK
|
||||||
|
* HREF
|
||||||
|
* ACTION
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.3.2.1.2.3 $ $Date: 2005/03/27 15:29:57 $
|
||||||
|
*/
|
||||||
|
|
||||||
|
// html code must not exceed 8192 bytes
|
51
docs/gamepackets/PartySmallWindowAll.txt
Normal file
51
docs/gamepackets/PartySmallWindowAll.txt
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
Server: Len 75
|
||||||
|
4B 00
|
||||||
|
4E
|
||||||
|
6C 08 00 10 // party leader object id
|
||||||
|
00 00 00 00 // party loot type
|
||||||
|
01 00 00 00 // number of members (except you)
|
||||||
|
|
||||||
|
6C 08 00 10 // member oobject id
|
||||||
|
41 00 65 00 72 00 69 00 6E 00 00 00 // member name
|
||||||
|
CD 06 00 00 // current cp
|
||||||
|
CD 06 00 00 // max cp
|
||||||
|
61 0D 00 00 // current hp
|
||||||
|
61 0D 00 00 // max hp
|
||||||
|
7B 0A 00 00 // current mp
|
||||||
|
7B 0A 00 00 // max mp
|
||||||
|
50 00 00 00 // level
|
||||||
|
1E 00 00 00 // class id
|
||||||
|
00 00 00 00 // constant 00 00 00 00
|
||||||
|
01 00 00 00 // race
|
||||||
|
00 00 00 00 // constant 00 00 00 00
|
||||||
|
|
||||||
|
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0x4e);
|
||||||
|
writeD(_partyMembers.get(0).getObjectId()); // c3 party leader id
|
||||||
|
writeD(_partyMembers.get(0).getParty().getLootDistribution());//c3 party loot type (0,1,2,....)
|
||||||
|
writeD(_partyMembers.size()-1);
|
||||||
|
|
||||||
|
for(L2PcInstance member: _partyMembers)
|
||||||
|
{
|
||||||
|
if (member != _exclude)
|
||||||
|
{
|
||||||
|
writeD(member.getObjectId());
|
||||||
|
writeS(member.getName());
|
||||||
|
|
||||||
|
writeD((int) member.getCurrentCp()); //c4
|
||||||
|
writeD(member.getMaxCp()); //c4
|
||||||
|
|
||||||
|
writeD((int) member.getCurrentHp());
|
||||||
|
writeD(member.getMaxHp());
|
||||||
|
writeD((int) member.getCurrentMp());
|
||||||
|
writeD(member.getMaxMp());
|
||||||
|
writeD(member.getLevel());
|
||||||
|
writeD(member.getClassId().getId());
|
||||||
|
writeD(0);//writeD(0x01); ??
|
||||||
|
writeD(member.getRace().ordinal());
|
||||||
|
writeD(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
49
docs/gamepackets/PrivateStoreListBuy.txt
Normal file
49
docs/gamepackets/PrivateStoreListBuy.txt
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
Server: Len 81 [PrivateStoreListBuy]
|
||||||
|
51 00
|
||||||
|
BE
|
||||||
|
CE 09 00 10 // buyer oid
|
||||||
|
EA B0 0B 00 // cur.user adena
|
||||||
|
01 00 00 00 // sell items count
|
||||||
|
// for each item
|
||||||
|
C7 09 00 10 // item oid
|
||||||
|
F4 25 00 00 // item itemID
|
||||||
|
00 00 // enchant
|
||||||
|
02 00 00 00 // count
|
||||||
|
00 00 00 00 // reference price
|
||||||
|
00 00 // 00
|
||||||
|
00 00 00 00 // body part
|
||||||
|
05 00 // type2
|
||||||
|
01 00 00 00 // buyers price
|
||||||
|
02 00 00 00 // ma buy amount
|
||||||
|
FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attributes
|
||||||
|
|
||||||
|
writeC(0xbe);
|
||||||
|
writeD(_objId); // buyer
|
||||||
|
writeD(_playerAdena);
|
||||||
|
|
||||||
|
writeD(_items.length);
|
||||||
|
|
||||||
|
for (TradeList.TradeItem item : _items)
|
||||||
|
{
|
||||||
|
writeD(item.getObjectId());
|
||||||
|
writeD(item.getItem().getItemId());
|
||||||
|
writeH(item.getEnchant());
|
||||||
|
writeD(item.getCount()); //give max possible sell amount
|
||||||
|
|
||||||
|
writeD(item.getItem().getReferencePrice());
|
||||||
|
writeH(0);
|
||||||
|
|
||||||
|
writeD(item.getItem().getBodyPart());
|
||||||
|
writeH(item.getItem().getType2());
|
||||||
|
writeD(item.getPrice());//buyers price
|
||||||
|
|
||||||
|
writeD(item.getCount()); // maximum possible tradecount
|
||||||
|
|
||||||
|
// T1
|
||||||
|
writeD(item.getAttackElementType());
|
||||||
|
writeD(item.getAttackElementPower());
|
||||||
|
for (byte i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
writeD(item.getElementDefAttr(i));
|
||||||
|
}
|
||||||
|
}
|
67
docs/gamepackets/PrivateStoreListSell.txt
Normal file
67
docs/gamepackets/PrivateStoreListSell.txt
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
Server: Len 85 [PrivateStoreListSell]
|
||||||
|
55 00
|
||||||
|
A1
|
||||||
|
CE 09 00 10 // seller oid
|
||||||
|
00 00 00 00 // is package sale
|
||||||
|
EB B0 0B 00 // cur.user adena
|
||||||
|
01 00 00 00 // sell items count
|
||||||
|
/// for each item
|
||||||
|
05 00 00 00 // type2
|
||||||
|
D0 09 00 10 // item oid
|
||||||
|
F4 25 00 00 // item itemID
|
||||||
|
01 00 00 00 // item count
|
||||||
|
00 00 // 00
|
||||||
|
00 00 // enchant
|
||||||
|
00 00 // 00
|
||||||
|
00 00 00 00 // body part
|
||||||
|
01 00 00 00 // sell price
|
||||||
|
00 00 00 00 // reference price (original price)
|
||||||
|
FE FF FF FF // atk attr type
|
||||||
|
00 00 00 00 // atk attr val
|
||||||
|
00 00 00 00 // def fire
|
||||||
|
00 00 00 00 // def water
|
||||||
|
00 00 00 00 // def wind
|
||||||
|
00 00 00 00 // def earth
|
||||||
|
00 00 00 00 // def holy
|
||||||
|
00 00 00 00 // def dark
|
||||||
|
|
||||||
|
// player's private shop
|
||||||
|
public PrivateStoreListSell(L2PcInstance player, L2PcInstance storePlayer)
|
||||||
|
{
|
||||||
|
_objId = storePlayer.getObjectId();
|
||||||
|
_playerAdena = player.getAdena();
|
||||||
|
_items = storePlayer.getSellList().getItems();
|
||||||
|
_packageSale = storePlayer.getSellList().isPackaged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0xa1);
|
||||||
|
writeD(_objId);
|
||||||
|
writeD(_packageSale ? 1 : 0);
|
||||||
|
writeD(_playerAdena);
|
||||||
|
|
||||||
|
writeD(_items.length);
|
||||||
|
for (TradeList.TradeItem item : _items)
|
||||||
|
{
|
||||||
|
writeD(item.getItem().getType2());
|
||||||
|
writeD(item.getObjectId());
|
||||||
|
writeD(item.getItem().getItemId());
|
||||||
|
writeD(item.getCount());
|
||||||
|
writeH(0x00);
|
||||||
|
writeH(item.getEnchant());
|
||||||
|
writeH(0x00);
|
||||||
|
writeD(item.getItem().getBodyPart());
|
||||||
|
writeD(item.getPrice()); //your price
|
||||||
|
writeD(item.getItem().getReferencePrice()); //store price
|
||||||
|
|
||||||
|
// T1
|
||||||
|
writeD(item.getAttackElementType());
|
||||||
|
writeD(item.getAttackElementPower());
|
||||||
|
for (byte i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
writeD(item.getElementDefAttr(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4
docs/gamepackets/PrivateStoreManageListBuy.txt
Normal file
4
docs/gamepackets/PrivateStoreManageListBuy.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Server: Len 451 [PrivateStoreManageListBuy]
|
||||||
|
C3 01
|
||||||
|
BD // pcode
|
||||||
|
D1 73 02 10 C5 97 06 00 08 00 00 00 E0 02 00 00 00 00 01 00 00 00 90 01 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 61 27 00 00 00 00 01 00 00 00 74 0E 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 25 04 00 00 00 00 6E 00 00 00 4A 01 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6D 0F 00 00 00 00 E8 01 00 00 5A 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 07 00 00 00 00 04 00 00 00 B4 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B8 05 00 00 00 00 BC 0E 00 00 0F 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F4 25 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A 11 00 00 00 00 41 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
59
docs/gamepackets/PrivateStoreManageListSell.txt
Normal file
59
docs/gamepackets/PrivateStoreManageListSell.txt
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/**
|
||||||
|
* 3 section to this packet
|
||||||
|
* 1)playerinfo which is always sent
|
||||||
|
* 2)list of items which can be added to sell
|
||||||
|
* 3)list of items which have already been setup
|
||||||
|
*/
|
||||||
|
|
||||||
|
Server: Len 2255 [PrivateStoreManageListSell]
|
||||||
|
CF 08
|
||||||
|
A0 // pcode
|
||||||
|
|
||||||
|
// section 1
|
||||||
|
|
||||||
|
09 A5 04 10 // player (user) objectID
|
||||||
|
00 00 00 00 // is package sale
|
||||||
|
87 C1 00 00 // player (user) adena
|
||||||
|
|
||||||
|
// section 2
|
||||||
|
|
||||||
|
24 00 00 00 // items count in section 2
|
||||||
|
[[ for each item ]]
|
||||||
|
05 00 00 00 // type2
|
||||||
|
39 D6 05 10 // objectID
|
||||||
|
B2 05 00 00 // itemID
|
||||||
|
2E 00 00 00 // count
|
||||||
|
00 00 // 00
|
||||||
|
00 00 // enchant
|
||||||
|
00 00 // 00
|
||||||
|
00 00 00 00 // body part
|
||||||
|
8A 02 00 00 // store price
|
||||||
|
FE FF FF FF // atk attr type
|
||||||
|
00 00 00 00 // atk attr val
|
||||||
|
00 00 00 00 // fire def
|
||||||
|
00 00 00 00 // water def
|
||||||
|
00 00 00 00 // wind def
|
||||||
|
00 00 00 00 // earth def
|
||||||
|
00 00 00 00 // holy def
|
||||||
|
00 00 00 00 // dark def
|
||||||
|
|
||||||
|
// section 2
|
||||||
|
00 00 00 00 // items count in section 3
|
||||||
|
D // type2
|
||||||
|
D // oid
|
||||||
|
D // itemID
|
||||||
|
D // cnt
|
||||||
|
H // 0
|
||||||
|
H // ench
|
||||||
|
H // 0
|
||||||
|
D // b.part
|
||||||
|
D // your price
|
||||||
|
D // referencePrice (store price)
|
||||||
|
FE FF FF FF // atk attr type
|
||||||
|
00 00 00 00 // atk attr val
|
||||||
|
00 00 00 00 // fire def
|
||||||
|
00 00 00 00 // water def
|
||||||
|
00 00 00 00 // wind def
|
||||||
|
00 00 00 00 // earth def
|
||||||
|
00 00 00 00 // holy def
|
||||||
|
00 00 00 00 // dark def
|
13
docs/gamepackets/PrivateStoreMsgBuy.txt
Normal file
13
docs/gamepackets/PrivateStoreMsgBuy.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Server: Len 45 [PrivateStoreMsgBuy]
|
||||||
|
2D 00
|
||||||
|
BF
|
||||||
|
99 73 06 10 // objectID
|
||||||
|
6B 00 61 00 ... 00 00 // store msg
|
||||||
|
|
||||||
|
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0xbf);
|
||||||
|
writeD(_objId);
|
||||||
|
writeS(_storeMsg);
|
||||||
|
}
|
21
docs/gamepackets/ProtocolVersion-l2emu_client_t1.txt
Normal file
21
docs/gamepackets/ProtocolVersion-l2emu_client_t1.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
C->S
|
||||||
|
0B 01 // len
|
||||||
|
0E // p.code ProtocolVersion
|
||||||
|
3C 03 00 00 // protocol - 828
|
||||||
|
09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02
|
||||||
|
55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53
|
||||||
|
00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04
|
||||||
|
54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56
|
||||||
|
56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04
|
||||||
|
07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05
|
||||||
|
52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02
|
||||||
|
04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51
|
||||||
|
55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05
|
||||||
|
08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07
|
||||||
|
53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02
|
||||||
|
53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01
|
||||||
|
05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06
|
||||||
|
01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01
|
||||||
|
04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D
|
||||||
|
01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06
|
||||||
|
8D 71 5F 08
|
20
docs/gamepackets/ProtocolVersion_GraciaEpilogue.txt
Normal file
20
docs/gamepackets/ProtocolVersion_GraciaEpilogue.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
0B 01 // len
|
||||||
|
0E
|
||||||
|
92 00 00 00
|
||||||
|
09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02
|
||||||
|
55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53
|
||||||
|
00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04
|
||||||
|
54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56
|
||||||
|
56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04
|
||||||
|
07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05
|
||||||
|
52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02
|
||||||
|
04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51
|
||||||
|
55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05
|
||||||
|
08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07
|
||||||
|
53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02
|
||||||
|
53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01
|
||||||
|
05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06
|
||||||
|
01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01
|
||||||
|
04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D
|
||||||
|
01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06
|
||||||
|
A6 23 F4 FE
|
20
docs/gamepackets/ProtocolVersion_GraciaPart2.txt
Normal file
20
docs/gamepackets/ProtocolVersion_GraciaPart2.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
0B 01
|
||||||
|
0E
|
||||||
|
0C 00 00 00
|
||||||
|
09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02
|
||||||
|
55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53
|
||||||
|
00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04
|
||||||
|
54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56
|
||||||
|
56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04
|
||||||
|
07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05
|
||||||
|
52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02
|
||||||
|
04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51
|
||||||
|
55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05
|
||||||
|
08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07
|
||||||
|
53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02
|
||||||
|
53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01
|
||||||
|
05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06
|
||||||
|
01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01
|
||||||
|
04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D
|
||||||
|
01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06
|
||||||
|
EB EF 3D E6
|
21
docs/gamepackets/ProtocolVersion_HellboundClient.txt
Normal file
21
docs/gamepackets/ProtocolVersion_HellboundClient.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
C->S Len 267
|
||||||
|
0B 01 // len
|
||||||
|
0E // p. code
|
||||||
|
3F 03 00 00 // protocol - 831 (Hellbound?)
|
||||||
|
09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02
|
||||||
|
55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53
|
||||||
|
00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04
|
||||||
|
54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56
|
||||||
|
56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04
|
||||||
|
07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05
|
||||||
|
52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02
|
||||||
|
04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51
|
||||||
|
55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05
|
||||||
|
08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07
|
||||||
|
53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02
|
||||||
|
53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01
|
||||||
|
05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06
|
||||||
|
01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01
|
||||||
|
04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D
|
||||||
|
01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06
|
||||||
|
FB 87 B9 4A
|
4
docs/gamepackets/RecipeShopMsg.txt
Normal file
4
docs/gamepackets/RecipeShopMsg.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Server: Len 43 [RecipeShopMsg]
|
||||||
|
2B 00
|
||||||
|
E1
|
||||||
|
86 C5 01 10 2D 00 3D 00 3D 00 3D 00 44 00 45 00 4C 00 41 00 79 00 20 00 43 00 41 00 4D 00 3D 00 3D 00 3D 00 2D 00 00 00
|
6
docs/gamepackets/RequestAutoSoulShot.txt
Normal file
6
docs/gamepackets/RequestAutoSoulShot.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Client Len 13 [RequestAutoSoulShot]
|
||||||
|
0D 00
|
||||||
|
D0
|
||||||
|
0D 00
|
||||||
|
6F 0F 00 00 // itemID
|
||||||
|
01 00 00 00 // 1 - on, 0 - off
|
8
docs/gamepackets/RequestBuyItem.txt
Normal file
8
docs/gamepackets/RequestBuyItem.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Client: Len 19 [RequestBuyItem]
|
||||||
|
13 00
|
||||||
|
40
|
||||||
|
90 00 00 00 // list ID
|
||||||
|
01 00 00 00 // count
|
||||||
|
[[ for each item ]]
|
||||||
|
25 04 00 00 // itemID
|
||||||
|
64 00 00 00 // count
|
8
docs/gamepackets/RequestBypassToServer.txt
Normal file
8
docs/gamepackets/RequestBypassToServer.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
Client: Len 45 [RequestBypassToServer]
|
||||||
|
2D 00
|
||||||
|
23
|
||||||
|
6E 00 70 00 63 00 5F 00 32 00 36 00 38 00 34 00
|
||||||
|
33 00 37 00 39 00 39 00 30 00 5F 00 43 00 68 00
|
||||||
|
61 00 74 00 20 00 31 00 00 00
|
||||||
|
|
||||||
|
_command = readS()
|
5
docs/gamepackets/RequestCrystallizeItem.txt
Normal file
5
docs/gamepackets/RequestCrystallizeItem.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Client: Len 11
|
||||||
|
0B 00
|
||||||
|
2F
|
||||||
|
13 14 04 10 // objectID 268702739
|
||||||
|
01 00 00 00 // count 1
|
5
docs/gamepackets/RequestDestroyItem.txt
Normal file
5
docs/gamepackets/RequestDestroyItem.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Client: Len 11 [RequestDestroyItem]
|
||||||
|
0B 00
|
||||||
|
60
|
||||||
|
71 08 00 10 // objectID
|
||||||
|
01 00 00 00 // count
|
5
docs/gamepackets/RequestDispel.txt
Normal file
5
docs/gamepackets/RequestDispel.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Client: Len 13 [RequestDispel]
|
||||||
|
0D 00
|
||||||
|
D0 4E 00 // D0:004E RequestDispel
|
||||||
|
4B 05 00 00 // skillID 1355 (PoWater?)
|
||||||
|
01 00 00 00 // skillLvl lvl 1
|
14
docs/gamepackets/RequestDropItem.txt
Normal file
14
docs/gamepackets/RequestDropItem.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Client: Len 23 [RequestDropItem]
|
||||||
|
17 00
|
||||||
|
17
|
||||||
|
E4 09 00 10 // objectID
|
||||||
|
01 00 00 00 // count
|
||||||
|
F4 AA 00 00 // x
|
||||||
|
2F A4 00 00 // y
|
||||||
|
43 F2 FF FF // z
|
||||||
|
|
||||||
|
_objectId = readD();
|
||||||
|
_count = readD();
|
||||||
|
_x = readD();
|
||||||
|
_y = readD();
|
||||||
|
_z = readD();
|
5
docs/gamepackets/RequestJoinParty.txt
Normal file
5
docs/gamepackets/RequestJoinParty.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Client: Len 15
|
||||||
|
0F 00
|
||||||
|
42
|
||||||
|
6C 00 6F 00 6C 00 00 00 // target char name
|
||||||
|
00 00 00 00 // loot type, item distribution
|
9
docs/gamepackets/RequestOustPartyMember.txt
Normal file
9
docs/gamepackets/RequestOustPartyMember.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
protected void readImpl()
|
||||||
|
{
|
||||||
|
_name = readS();
|
||||||
|
}
|
||||||
|
|
||||||
|
Client: Len 13
|
||||||
|
0D 00
|
||||||
|
45
|
||||||
|
4C 00 65 00 78 00 78 00 00 00
|
9
docs/gamepackets/RequestPrivateStoreBuy.txt
Normal file
9
docs/gamepackets/RequestPrivateStoreBuy.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Client: Len 23 [RequestPrivateStoreBuy]
|
||||||
|
17 00
|
||||||
|
83 // pcode
|
||||||
|
CE 09 00 10 // seller player oid
|
||||||
|
01 00 00 00 // count
|
||||||
|
// for each item
|
||||||
|
D0 09 00 10 // item oid
|
||||||
|
01 00 00 00 // count
|
||||||
|
01 00 00 00 // price
|
1
docs/gamepackets/RequestPrivateStoreQuitBuy.txt
Normal file
1
docs/gamepackets/RequestPrivateStoreQuitBuy.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Client: Len 3 [RequestPrivateStoreQuitBuy] | 03 00 / 9C /
|
1
docs/gamepackets/RequestPrivateStoreQuitSell.txt
Normal file
1
docs/gamepackets/RequestPrivateStoreQuitSell.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Client: Len 3 [RequestPrivateStoreQuitSell] | 03 00 / 96 /
|
11
docs/gamepackets/RequestPrivateStoreSell.txt
Normal file
11
docs/gamepackets/RequestPrivateStoreSell.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Client: Len 31 [RequestPrivateStoreSell]
|
||||||
|
1F 00
|
||||||
|
9F // pcode
|
||||||
|
CE 09 00 10 // seller oid
|
||||||
|
01 00 00 00 // count
|
||||||
|
|
||||||
|
C7 09 00 10 // oid
|
||||||
|
F4 25 00 00 // iid
|
||||||
|
00 00 00 00 // ?? 0x00000000
|
||||||
|
02 00 00 00 // cnt
|
||||||
|
01 00 00 00 // price
|
6
docs/gamepackets/RequestRestart.txt
Normal file
6
docs/gamepackets/RequestRestart.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Client: Len 3
|
||||||
|
03 00
|
||||||
|
57
|
||||||
|
|
||||||
|
send when IN_GAME mode, to character select screen.
|
||||||
|
if restart possible server responds with 0x57 RestartResponse
|
15
docs/gamepackets/RequestRestartPoint.txt
Normal file
15
docs/gamepackets/RequestRestartPoint.txt
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Client: Len 7 [RequestRestartPoint]
|
||||||
|
07 00
|
||||||
|
7D
|
||||||
|
00 00 00 00 // 00 - to village
|
||||||
|
|
||||||
|
|
||||||
|
case 1: // to clanhall
|
||||||
|
case 2: // to castle
|
||||||
|
case 3: // to fortress
|
||||||
|
case 4: // to siege HQ
|
||||||
|
case 5: // Fixed or Player is a festival participant
|
||||||
|
|
||||||
|
after successful restart point server sends TeleportToLocation
|
||||||
|
then client send Appearing
|
||||||
|
then server sends Revive
|
7
docs/gamepackets/RequestSaveInventoryOrder.txt
Normal file
7
docs/gamepackets/RequestSaveInventoryOrder.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Client Len 49 [RequestSaveInventoryOrder]
|
||||||
|
31 00
|
||||||
|
D0
|
||||||
|
24 00
|
||||||
|
05 00 00 00 6E 08 00 10 00 00 00 00 6F 08 00 10 01 00
|
||||||
|
00 00 70 08 00 10 02 00 00 00 EC 09 00 10 03 00
|
||||||
|
00 00 F5 0C 00 10 04 00 00 00
|
13
docs/gamepackets/RequestSellItem.txt
Normal file
13
docs/gamepackets/RequestSellItem.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Client: Len 59 [RequestSellItem]
|
||||||
|
3B 00
|
||||||
|
37 // pcode
|
||||||
|
00 00 00 00 // list ID (0 - to NPC?)
|
||||||
|
04 00 00 00 // count
|
||||||
|
[[ for each item ]]
|
||||||
|
1D 21 01 10 // objectID
|
||||||
|
F0 0F 00 00 // itemID
|
||||||
|
01 00 00 00 // count
|
||||||
|
|
||||||
|
B4 20 01 10 F9 0F 00 00 01 00 00 00
|
||||||
|
A5 1C 01 10 03 10 00 00 02 00 00 00
|
||||||
|
05 23 01 10 F8 0F 00 00 01 00 00 00
|
3
docs/gamepackets/RequestSkillCoolTime.txt
Normal file
3
docs/gamepackets/RequestSkillCoolTime.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Client: Len 3
|
||||||
|
03 00
|
||||||
|
A6
|
4
docs/gamepackets/RequestTargetCanceld.txt
Normal file
4
docs/gamepackets/RequestTargetCanceld.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Client Len 5 [ RequestTargetCanceld]
|
||||||
|
05 00
|
||||||
|
48
|
||||||
|
00 00
|
24
docs/gamepackets/RequestUserCommand.txt
Normal file
24
docs/gamepackets/RequestUserCommand.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
Client Len 7 [ RequestUserCommand]
|
||||||
|
07 00
|
||||||
|
B3
|
||||||
|
00 00 00 00 // command ID
|
||||||
|
|
||||||
|
================================
|
||||||
|
|
||||||
|
Decimal command numbers:
|
||||||
|
|
||||||
|
0 - /loc
|
||||||
|
52 - /unstuck (Escape)
|
||||||
|
61 - /Mount
|
||||||
|
62 - /DisMount
|
||||||
|
77 - /time
|
||||||
|
81 - /partyinfo
|
||||||
|
88 - /AttackList
|
||||||
|
89 - /underattacklist
|
||||||
|
90 - /warlist
|
||||||
|
93 - /ChannelDelete
|
||||||
|
96 - /ChannelLeave
|
||||||
|
97 - /ChannelListUpdate
|
||||||
|
100 - /ClanPenalty
|
||||||
|
109 - /OlympiadStat
|
||||||
|
114 - /InstanceZone
|
4
docs/gamepackets/Revive.txt
Normal file
4
docs/gamepackets/Revive.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Server: Len 7 [Revive]
|
||||||
|
07 00
|
||||||
|
01
|
||||||
|
3F 8E 05 10 // objectID?
|
56
docs/gamepackets/SellList.txt
Normal file
56
docs/gamepackets/SellList.txt
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
Server: Len 1357 [SellList]
|
||||||
|
4D 05
|
||||||
|
06
|
||||||
|
6F A5 34 00 // cur money
|
||||||
|
00 00 00 00 // lease npcID ? O_o wtf
|
||||||
|
15 00 // items count
|
||||||
|
|
||||||
|
[ for each item ]
|
||||||
|
|
||||||
|
04 00 // type1
|
||||||
|
C4 40 07 10 // objectID
|
||||||
|
E0 02 00 00 // itemID
|
||||||
|
0B 00 00 00 // count
|
||||||
|
05 00 // type2
|
||||||
|
00 00 // ??
|
||||||
|
00 00 00 00 // body part
|
||||||
|
00 00 // enchant level
|
||||||
|
00 00 00 00 // ??
|
||||||
|
C8 00 00 00 // sell price
|
||||||
|
FE FF FF FF // atk attrib type
|
||||||
|
00 00 00 00 // atk attrib val
|
||||||
|
00 00 00 00 // def attr fire
|
||||||
|
00 00 00 00 // -- water
|
||||||
|
00 00 00 00 // -- wind
|
||||||
|
00 00 00 00 // -- earth
|
||||||
|
00 00 00 00 // -- holy
|
||||||
|
00 00 00 00 // -- unholy
|
||||||
|
|
||||||
|
|
||||||
|
L2J WriteImpl
|
||||||
|
|
||||||
|
writeC(0x06);
|
||||||
|
writeD(_money);
|
||||||
|
writeD(_lease == null ? 0x00 : 1000000 + _lease.getTemplate().npcId);
|
||||||
|
writeH(_selllist.size());
|
||||||
|
for (L2ItemInstance item : _selllist)
|
||||||
|
{
|
||||||
|
writeH(item.getItem().getType1());
|
||||||
|
writeD(item.getObjectId());
|
||||||
|
writeD(item.getItemId());
|
||||||
|
writeD(item.getCount());
|
||||||
|
writeH(item.getItem().getType2());
|
||||||
|
writeH(0x00);
|
||||||
|
writeD(item.getItem().getBodyPart());
|
||||||
|
writeH(item.getEnchantLevel());
|
||||||
|
writeH(0x00);
|
||||||
|
writeH(0x00);
|
||||||
|
writeD(item.getItem().getReferencePrice()/2);
|
||||||
|
// T1
|
||||||
|
writeD(item.getAttackElementType());
|
||||||
|
writeD(item.getAttackElementPower());
|
||||||
|
for (byte i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
writeD(item.getElementDefAttr(i));
|
||||||
|
}
|
||||||
|
}
|
26
docs/gamepackets/Selling.txt
Normal file
26
docs/gamepackets/Selling.txt
Normal file
File diff suppressed because one or more lines are too long
5
docs/gamepackets/SendBypassBuildCmd.txt
Normal file
5
docs/gamepackets/SendBypassBuildCmd.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Client: Len 13 [SendBypassBuildCmd]
|
||||||
|
0D 00
|
||||||
|
74
|
||||||
|
68 00 65 00 61 00 6C 00 00 00 _command = readS();
|
||||||
|
|
1
docs/gamepackets/SendWarehouseDepositList.txt
Normal file
1
docs/gamepackets/SendWarehouseDepositList.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Client: Len 111 [ SendWareHouseDepositList] | 6F 00 / 3B / 0D 00 00 00 53 20 01 10 02 00 00 00 D2 0C 02 10 10 00 00 00 26 1E 01 10 1F 00 00 00 8B 1D 01 10 37 00 00 00 29 1D 01 10 06 00 00 00 9A 1B 01 10 04 00 00 00 83 1B 01 10 0F 00 00 00 70 FC 00 10 18 00 00 00 F9 0C 08 10 02 00 00 00 E2 51 06 10 02 00 00 00 41 53 07 10 0E 00 00 00 94 4D 07 10 07 00 00 00 45 4D 07 10 27 00 00 00
|
4
docs/gamepackets/SendWarehouseWithdrawalList.txt
Normal file
4
docs/gamepackets/SendWarehouseWithdrawalList.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Client: Len 103 [SendWareHouseWithDrawList]
|
||||||
|
67 00
|
||||||
|
3C
|
||||||
|
0C 00 00 00 60 72 08 10 01 00 00 00 5E 72 08 10 01 00 00 00 61 72 08 10 01 00 00 00 5C 72 08 10 01 00 00 00 5D 72 08 10 01 00 00 00 E5 6E 07 10 01 00 00 00 E1 6E 07 10 01 00 00 00 F9 6E 07 10 01 00 00 00 03 6F 07 10 01 00 00 00 E2 6E 07 10 01 00 00 00 D0 60 07 10 01 00 00 00 B5 BB 07 10 7E 05 00 00
|
9
docs/gamepackets/SetPrivateStoreListSell.txt
Normal file
9
docs/gamepackets/SetPrivateStoreListSell.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
Client: Len 23 [SetPrivateStoreListSell]
|
||||||
|
17 00
|
||||||
|
31 // pcode
|
||||||
|
00 00 00 00 // package?
|
||||||
|
01 00 00 00 // count
|
||||||
|
|
||||||
|
2D 9A 06 10 // obj ID
|
||||||
|
DC 13 00 00 // count
|
||||||
|
0E 00 00 00 // price
|
6
docs/gamepackets/SetupGauge.txt
Normal file
6
docs/gamepackets/SetupGauge.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Server: Len 15 [SetupGauge]
|
||||||
|
0F 00
|
||||||
|
6B
|
||||||
|
00 00 00 00 // color 0-blue 1-red 2-cyan 3-
|
||||||
|
57 07 00 00 // skill cast time 1879, ms
|
||||||
|
57 07 00 00
|
13
docs/gamepackets/ShortBuffStatusUpdate.txt
Normal file
13
docs/gamepackets/ShortBuffStatusUpdate.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0xfa);
|
||||||
|
writeD(_skillId);
|
||||||
|
writeD(_skillLvl);
|
||||||
|
writeD(_duration); // in seconds!
|
||||||
|
}
|
||||||
|
|
||||||
|
0D 00
|
||||||
|
FA
|
||||||
|
XX XX XX XX
|
||||||
|
XX XX XX XX
|
||||||
|
XX XX XX XX // in seconds!
|
81
docs/gamepackets/Siiting_on_Craft.txt
Normal file
81
docs/gamepackets/Siiting_on_Craft.txt
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
Client: Len 12 [RequestActionUse] | 0C 00 / 56 / 25 00 00 00 00 00 00 00 00
|
||||||
|
|
||||||
|
Server: Len 183 [RecipeShopManageList]
|
||||||
|
B7 00
|
||||||
|
DE // pcode
|
||||||
|
09 A5 04 10 // seller oid
|
||||||
|
D4 A1 1E 00 // seller adena
|
||||||
|
00 00 00 00 // isCommonCraft; 0 - dwarven, 1 - common
|
||||||
|
14 00 00 00 // section 2 count
|
||||||
|
14 00 00 00 // recipe ID
|
||||||
|
01 00 00 00 // seq.number
|
||||||
|
15 00 00 00 02 00 00 00
|
||||||
|
19 00 00 00 03 00 00 00
|
||||||
|
1A 00 00 00 04 00 00 00
|
||||||
|
1B 00 00 00 05 00 00 00
|
||||||
|
1C 00 00 00 06 00 00 00
|
||||||
|
1D 00 00 00 07 00 00 00
|
||||||
|
1E 00 00 00 08 00 00 00
|
||||||
|
1F 00 00 00 09 00 00 00
|
||||||
|
20 00 00 00 0A 00 00 00
|
||||||
|
21 00 00 00 0B 00 00 00
|
||||||
|
22 00 00 00 0C 00 00 00
|
||||||
|
23 00 00 00 0D 00 00 00
|
||||||
|
24 00 00 00 0E 00 00 00
|
||||||
|
25 00 00 00 0F 00 00 00
|
||||||
|
26 00 00 00 10 00 00 00
|
||||||
|
27 00 00 00 11 00 00 00
|
||||||
|
43 01 00 00 12 00 00 00
|
||||||
|
44 01 00 00 13 00 00 00
|
||||||
|
60 02 00 00 14 00 00 00
|
||||||
|
00 00 00 00 // section 3 count
|
||||||
|
XX XX XX XX // recipe id
|
||||||
|
00 00 00 00 // 0x00
|
||||||
|
XX XX XX XX // cost
|
||||||
|
|
||||||
|
Client: Len 25 [RequestRecipeShopMessageSet]
|
||||||
|
19 00
|
||||||
|
BA // pcode
|
||||||
|
63 00 72 00 61 00 66 00 74 00 20 00 66 00 72 00 65 00 65 00 00 00 // unicode str
|
||||||
|
|
||||||
|
Client: Len 31 [RequestRecipeShopListSet]
|
||||||
|
1F 00
|
||||||
|
BB // pcode
|
||||||
|
03 00 00 00 // count
|
||||||
|
[ for each recipe ]
|
||||||
|
44 01 00 00 // recipe ID
|
||||||
|
01 00 00 00 // price
|
||||||
|
|
||||||
|
// server makes client sit down
|
||||||
|
Server: Len 23 [ChangeWaitType] | 17 00 / 29 / 09 A5 04 10 00 00 00 00 F2 40 01 00 F5 D2 00 00 24 FA FF FF
|
||||||
|
|
||||||
|
//
|
||||||
|
Server: Len 29 [RecipeShopMsg]
|
||||||
|
1D 00
|
||||||
|
E1
|
||||||
|
09 A5 04 10 // oid?
|
||||||
|
63 00 72 00 61 00 66 00 74 00 20 00 66 00 72 00 65 00 65 00 00 00 // message str
|
||||||
|
|
||||||
|
.........
|
||||||
|
|
||||||
|
Client: Len 3 [RequestRecipeShopManageQuit] | 03 00 / BC /
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Recipe ID ==>> item ID conversion from sql table.... or some other
|
||||||
|
|
||||||
|
Client: Len 31 [RequestRecipeShopListSet]
|
||||||
|
1F 00
|
||||||
|
BB
|
||||||
|
03 00 00 00
|
||||||
|
|
||||||
|
14 00 00 00 // ssd (20)
|
||||||
|
01 00 00 00
|
||||||
|
|
||||||
|
15 00 00 00 // ssc (21)
|
||||||
|
02 00 00 00
|
||||||
|
|
||||||
|
44 01 00 00 // bssc (324)
|
||||||
|
03 00 00 00
|
||||||
|
|
18
docs/gamepackets/StopMove.txt
Normal file
18
docs/gamepackets/StopMove.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Server: Len 23 [StopMove]
|
||||||
|
17 00
|
||||||
|
47 // StopMove
|
||||||
|
6C 08 00 10 // objectID of char who stopped
|
||||||
|
9A AC 00 00 // x
|
||||||
|
F9 A4 00 00 // y
|
||||||
|
5D F2 FF FF // z
|
||||||
|
45 B9 00 00 // heading
|
||||||
|
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0x47);
|
||||||
|
writeD(_objectId);
|
||||||
|
writeD(_x);
|
||||||
|
writeD(_y);
|
||||||
|
writeD(_z);
|
||||||
|
writeD(_heading);
|
||||||
|
}
|
13
docs/gamepackets/TeleportToLocation.txt
Normal file
13
docs/gamepackets/TeleportToLocation.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Server: Len 19 [TeleportToLocation]
|
||||||
|
13 00
|
||||||
|
22
|
||||||
|
6D 08 00 10 // oid 268437613
|
||||||
|
3F 1D 01 00 // x 73023
|
||||||
|
DC CE 01 00 // y 118492
|
||||||
|
9D F1 FF FF // z -3683
|
||||||
|
|
||||||
|
writeC(0x22);
|
||||||
|
writeD(_targetObjId);
|
||||||
|
writeD(_x);
|
||||||
|
writeD(_y);
|
||||||
|
writeD(_z);
|
81
docs/gamepackets/TradeRequest.txt
Normal file
81
docs/gamepackets/TradeRequest.txt
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
Trading (requester sends):
|
||||||
|
Client: Len 7 [TradeRequest] | 07 00
|
||||||
|
1A // pcode
|
||||||
|
C5 09 00 10 // objectID of partner
|
||||||
|
|
||||||
|
Trade receiver recieves:
|
||||||
|
Server: Len 7 [SendTradeRequest]
|
||||||
|
07 00
|
||||||
|
70 // pcode
|
||||||
|
CE 09 00 10 // object ID of person who wants to trade to you
|
||||||
|
|
||||||
|
Trade receiver responds:
|
||||||
|
Client: Len 7 [AnswerTradeRequest]
|
||||||
|
07 00
|
||||||
|
55 // pcode
|
||||||
|
01 00 00 00 // 1 - ok, 0 - cancel
|
||||||
|
|
||||||
|
// then both (requester and receiver) receive
|
||||||
|
Server: Len 189 [TradeStart]
|
||||||
|
BD 00
|
||||||
|
14 // pcode
|
||||||
|
C5 09 00 10 // partner objectID
|
||||||
|
03 00 // items count (your inv)
|
||||||
|
/// for each item
|
||||||
|
04 00 // item type1
|
||||||
|
CF 09 00 10 // item oid
|
||||||
|
D4 15 00 00 // item iid
|
||||||
|
01 00 00 00 // item count
|
||||||
|
05 00 // item type2
|
||||||
|
00 00 // 00
|
||||||
|
00 00 00 00 // body part
|
||||||
|
00 00 // enchant
|
||||||
|
00 00 00 00 // 0000
|
||||||
|
FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attribs
|
||||||
|
|
||||||
|
Server: Len 65 [TradeOtherAdd]
|
||||||
|
41 00
|
||||||
|
1B // pcode
|
||||||
|
01 00 // item cnt
|
||||||
|
04 00 // type1
|
||||||
|
C0 09 00 10 // oid
|
||||||
|
39 00 00 00 // iid
|
||||||
|
0D 00 00 00 // cnt
|
||||||
|
04 00 // type2
|
||||||
|
00 00 // 00
|
||||||
|
00 00 00 00 // b.part
|
||||||
|
00 00 // enchatnt
|
||||||
|
00 00 00 00 // 00 ??
|
||||||
|
FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attribs
|
||||||
|
|
||||||
|
Client: Len 15 [AddTradeItem]
|
||||||
|
0F 00
|
||||||
|
1B // pcode
|
||||||
|
01 00 00 00 // tradeId? O_o wtf L2J ignores this
|
||||||
|
D1 09 00 10 // objectID
|
||||||
|
01 00 00 00 // count
|
||||||
|
|
||||||
|
Server: Len 65 [TradeOwnAdd]
|
||||||
|
41 00
|
||||||
|
1A // pcode
|
||||||
|
01 00 // count
|
||||||
|
04 00 // type1
|
||||||
|
D1 09 00 10 // oid
|
||||||
|
9A 29 00 00 // iid
|
||||||
|
01 00 00 00 // cnt
|
||||||
|
05 00 // type2
|
||||||
|
00 00 // 00
|
||||||
|
00 00 00 00 // b.part
|
||||||
|
00 00 // enchant
|
||||||
|
00 00 00 00 // 00
|
||||||
|
FE FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // attribs
|
||||||
|
|
||||||
|
Client: Len 7 [TradeDone]
|
||||||
|
07 00
|
||||||
|
1C // pcode
|
||||||
|
01 00 00 00 // num; 1 - confirm, 0 - cancel trade
|
||||||
|
|
||||||
|
Server: Len 7 [TradeDone]
|
||||||
|
07 00
|
||||||
|
1C // pcode
|
||||||
|
01 00 00 00 // num; 1 - confirm, 0 - cancel trade
|
4
docs/gamepackets/UseItem.txt
Normal file
4
docs/gamepackets/UseItem.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
0B 00 // len 11
|
||||||
|
19 // ptype - UseItem
|
||||||
|
57 EA 03 10 // objectID? 268692055
|
||||||
|
00 00 00 00 // wtf nulls?
|
18
docs/gamepackets/ValidateLocation.txt
Normal file
18
docs/gamepackets/ValidateLocation.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Server: Len 23 [ValidateLocation]
|
||||||
|
17 00
|
||||||
|
79
|
||||||
|
B2 16 00 10 // mob/npc objectID
|
||||||
|
91 AC 00 00 // x
|
||||||
|
C5 A4 00 00 // y
|
||||||
|
5D F2 FF FF // z
|
||||||
|
FA C5 00 00 // heading
|
||||||
|
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0x79);
|
||||||
|
writeD(_charObjId);
|
||||||
|
writeD(_x);
|
||||||
|
writeD(_y);
|
||||||
|
writeD(_z);
|
||||||
|
writeD(_heading);
|
||||||
|
}
|
32
docs/gamepackets/ValidatePosition.txt
Normal file
32
docs/gamepackets/ValidatePosition.txt
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
Client: Len 23 [ValidatePosition]
|
||||||
|
17 00
|
||||||
|
59
|
||||||
|
B3 A5 00 00 // x 42419
|
||||||
|
39 A4 00 00 // y 42041
|
||||||
|
5B F2 FF FF // z -3493
|
||||||
|
E2 24 00 00 // heading 9442
|
||||||
|
00 00 00 00 // wtf data? L2J ignores
|
||||||
|
|
||||||
|
After TeleportToLocation client sends ValidatePosition twice.
|
||||||
|
First is above
|
||||||
|
Second below:
|
||||||
|
Both coordinates x,y,z are coords BEFORE teleport.
|
||||||
|
|
||||||
|
Client: Len 23 [ValidatePosition]
|
||||||
|
17 00
|
||||||
|
59
|
||||||
|
B3 A5 00 00 // x,y,z are the same
|
||||||
|
39 A4 00 00
|
||||||
|
5B F2 FF FF
|
||||||
|
00 00 00 00 // client changes heading to 0
|
||||||
|
00 00 00 00
|
||||||
|
|
||||||
|
Then client sends Appearing (trigger).
|
||||||
|
After that server sends UserInfo with all info, icluding new coords.
|
||||||
|
|
||||||
|
ValidatePosition L2J:
|
||||||
|
_x = readD();
|
||||||
|
_y = readD();
|
||||||
|
_z = readD();
|
||||||
|
_heading = readD();
|
||||||
|
_data = readD();
|
1
docs/gamepackets/WarehouseDepositList.txt
Normal file
1
docs/gamepackets/WarehouseDepositList.txt
Normal file
File diff suppressed because one or more lines are too long
1
docs/gamepackets/WarehouseWithdrawalList.txt
Normal file
1
docs/gamepackets/WarehouseWithdrawalList.txt
Normal file
File diff suppressed because one or more lines are too long
506
docs/gamepackets/action_useitem_1230567729.txt
Normal file
506
docs/gamepackets/action_useitem_1230567729.txt
Normal file
File diff suppressed because one or more lines are too long
4
docs/gamepackets/client_Logout_fromAUTHED.txt
Normal file
4
docs/gamepackets/client_Logout_fromAUTHED.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
Client: Len 3
|
||||||
|
|
||||||
|
03 00
|
||||||
|
00
|
24
docs/gamepackets/compare_gs_login_gracia_hack.txt
Normal file
24
docs/gamepackets/compare_gs_login_gracia_hack.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
ProtocolVersion - MyChanged
|
||||||
|
0030 0b 01 0e 53 03 00 00 09 07 54 ..B.....S.....TV
|
||||||
|
0040 56 03 09 0b 01 07 02 54 54 56 07 00 02 55 56 00 ......TTV...UV.Q
|
||||||
|
0050 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 .SW..U.T...S.VUV
|
||||||
|
0060 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 ....Q..Q.QV.T.U.
|
||||||
|
0070 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 ..QV.S.U.S.VVS..
|
||||||
|
0080 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 ...QTQ.UV.....U.
|
||||||
|
0090 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 .U....Q.....R...
|
||||||
|
00a0 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 .T..RU.UUQ...T.U
|
||||||
|
00b0 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 T.WQU.R.T.QQU..S
|
||||||
|
00c0 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 S.R.R..T........
|
||||||
|
00d0 05 06 03 00 0d 08 01 07 09 03 51 03 07 53 09 51 .........Q..S.Q.
|
||||||
|
00e0 06 07 54 0a 50 56 02 52 04 05 55 51 02 53 00 08 .T.PV.R..UQ.S..T
|
||||||
|
00f0 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 .RV......SV...U.
|
||||||
|
0100 06 08 56 04 0d 06 07 52 06 07 04 0a 06 01 04 54 .V....R.......T.
|
||||||
|
0110 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 ....T..RS.......
|
||||||
|
0120 01 52 51 52 0d 06 51 08 09 54 53 00 0d 01 02 03 RQR..Q..TS.....T
|
||||||
|
0130 54 53 01 05 03 08 56 54 07 02 54 0b 06 df b8 3b S....VT..T....;T
|
||||||
|
0140 54
|
||||||
|
|
||||||
|
RequestGSAuthLogin - MyChanged
|
||||||
|
0030 00 bc 6c 00 65 00 78 00 78 00 ........l.e.x.x.
|
||||||
|
0040 68 00 75 00 6c 00 65 00 00 00 0d fe 0f 00 12 eb h.u.l.e.........
|
||||||
|
0050 01 00 0d fe 0f 00 30 28 fc 55 01 00 00 00 ......0(.U....
|
25
docs/gamepackets/compare_gs_login_gracia_hb.txt
Normal file
25
docs/gamepackets/compare_gs_login_gracia_hb.txt
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
ProtocolVersion - Gracia
|
||||||
|
0030 0b 01 0e 53 03 00 00 09 07 54 ...b.....S.....T
|
||||||
|
0040 56 03 09 0b 01 07 02 54 54 56 07 00 02 55 56 00 V......TTV...UV.
|
||||||
|
0050 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 Q.SW..U.T...S.VU
|
||||||
|
0060 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 V....Q..Q.QV.T.U
|
||||||
|
0070 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 ...QV.S.U.S.VVS.
|
||||||
|
0080 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 ....QTQ.UV.....U
|
||||||
|
0090 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 ..U....Q.....R..
|
||||||
|
00a0 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 ..T..RU.UUQ...T.
|
||||||
|
00b0 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 UT.WQU.R.T.QQU..
|
||||||
|
00c0 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 SS.R.R..T.......
|
||||||
|
00d0 05 06 03 00 0d 08 01 07 09 03 51 03 07 53 09 51 ..........Q..S.Q
|
||||||
|
00e0 06 07 54 0a 50 56 02 52 04 05 55 51 02 53 00 08 ..T.PV.R..UQ.S..
|
||||||
|
00f0 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 T.RV......SV...U
|
||||||
|
0100 06 08 56 04 0d 06 07 52 06 07 04 0a 06 01 04 54 ..V....R.......T
|
||||||
|
0110 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 .....T..RS......
|
||||||
|
0120 01 52 51 52 0d 06 51 08 09 54 53 00 0d 01 02 03 .RQR..Q..TS.....
|
||||||
|
0130 54 53 01 05 03 08 56 54 07 02 54 0b 06 df b8 3b TS....VT..T....;
|
||||||
|
0140 54 T
|
||||||
|
|
||||||
|
RequestGSAuthLogin - Gracia
|
||||||
|
0030 31 00 3e c0 a3 ab da ed 20 49 ..>g..1.>..... I
|
||||||
|
0040 81 ce 5d 29 88 88 b9 4b e4 76 15 75 fa ba 77 00 ..])...K.v.u..w.
|
||||||
|
0050 21 07 94 98 c7 a4 95 4d cc 2d 00 6c 1d 52 9f be !......M.-.l.R..
|
||||||
|
0060 ab f1 0c 01 a0 cc fd .......
|
19
docs/gamepackets/compare_gs_login_gracia_hbb.txt
Normal file
19
docs/gamepackets/compare_gs_login_gracia_hbb.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
ProtocolVersion - Hellbound
|
||||||
|
0030 0b 01 0e 3f 03 00 00 09 07 54 .........?.....T
|
||||||
|
0040 56 03 09 0b 01 07 02 54 54 56 07 00 02 55 56 00 V......TTV...UV.
|
||||||
|
0050 51 00 53 57 04 07 55 08 54 01 07 01 53 00 56 55 Q.SW..U.T...S.VU
|
||||||
|
0060 56 01 06 05 04 51 03 08 51 08 51 56 04 54 06 55 V....Q..Q.QV.T.U
|
||||||
|
0070 08 02 09 51 56 01 53 06 55 04 53 00 56 56 53 01 ...QV.S.U.S.VVS.
|
||||||
|
0080 09 02 09 01 51 54 51 09 55 56 09 03 04 07 05 55 ....QTQ.UV.....U
|
||||||
|
0090 04 06 55 04 06 09 04 51 01 08 08 06 05 52 06 04 ..U....Q.....R..
|
||||||
|
00a0 01 07 54 03 06 52 55 06 55 55 51 01 02 04 54 03 ..T..RU.UUQ...T.
|
||||||
|
00b0 55 54 01 57 51 55 05 52 05 54 07 51 51 55 07 02 UT.WQU.R.T.QQU..
|
||||||
|
00c0 53 53 00 52 05 52 07 01 54 00 03 05 05 08 06 05 SS.R.R..T.......
|
||||||
|
00d0 05 06 03 00 0d 08 01 07 09 03 51 03 07 53 09 51 ..........Q..S.Q
|
||||||
|
00e0 06 07 54 0a 50 56 02 52 04 05 55 51 02 53 00 08 ..T.PV.R..UQ.S..
|
||||||
|
00f0 54 04 52 56 06 02 09 00 08 03 53 56 01 05 00 55 T.RV......SV...U
|
||||||
|
0100 06 08 56 04 0d 06 07 52 06 07 04 0a 06 01 04 54 ..V....R.......T
|
||||||
|
0110 04 00 05 02 04 54 00 09 52 53 05 04 01 04 05 05 .....T..RS......
|
||||||
|
0120 01 52 51 52 0d 06 51 08 09 54 53 00 0d 01 02 03 .RQR..Q..TS.....
|
||||||
|
0130 54 53 01 05 03 08 56 54 07 02 54 0b 06 fb 87 b9 TS....VT..T.....
|
||||||
|
0140 4a J
|
9
docs/hide.txt
Normal file
9
docs/hide.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
This "hide" as it's called here, is actually nothing but a standard setting inside the L2 client.
|
||||||
|
|
||||||
|
It's been part of an invisible options menu since the birth of L2, under CPU settings. There, you could set some extraordinary values which would cause the client to "lag" in the same fashion as regular zone lag, and cause the infamous "teleport". A key bind into the actual L2 client could be set there as well.
|
||||||
|
|
||||||
|
The built-in teleport is actually better utilized than this programmed version. Since it allows you to literally click a location on the floor (even at the opposite side of a room/dungeon/field) and teleport right to it.
|
||||||
|
|
||||||
|
Back in the day, the few who knew about it simply called it a "teleport hack".
|
||||||
|
|
||||||
|
I've used it 2 times to personally test, but never after that. it's way to sketchy to risk getting banned for that, imo.
|
27
docs/interlude_map_coords.txt
Normal file
27
docs/interlude_map_coords.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
0,0-655,1310
|
||||||
|
|
||||||
|
line 22: x = -94 344 [ix = 182]
|
||||||
|
line 45: x = 185 823
|
||||||
|
dline = 23; dx = 280 167
|
||||||
|
x per line = 12181
|
||||||
|
|
||||||
|
line 24: y = -213 611
|
||||||
|
line 62: y = 249 634
|
||||||
|
dline = 38
|
||||||
|
y per line = 12190
|
||||||
|
|
||||||
|
-94344 - [3*12185 = 36555] = -130899; kx = -130899
|
||||||
|
-213611 - [4*12185 = 48740] = -262351; ky = -262351
|
||||||
|
|
||||||
|
line num starts with x: 19; y: 20 ... why?..
|
||||||
|
dline on img = 61px; dline on game map ~= 12185
|
||||||
|
dc = dlm / dli = 199.75 ~= 200
|
||||||
|
|
||||||
|
===================================================
|
||||||
|
Constants: dc = 200; kx = -130899; ky = -262351
|
||||||
|
Input: mx, my - coords of point in game
|
||||||
|
Output: ix, iy - coords of point on image
|
||||||
|
---------------------------------------------------
|
||||||
|
ix = (mx - kx) / dc
|
||||||
|
iy = (my - ky) / dc
|
||||||
|
===================================================
|
467
docs/l2_launcher.c
Normal file
467
docs/l2_launcher.c
Normal file
@ -0,0 +1,467 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#define LAUNCHER_DAT_LINES 446
|
||||||
|
|
||||||
|
char *launcher_dat [ LAUNCHER_DAT_LINES ] = {
|
||||||
|
"[URL]",
|
||||||
|
"Protocol=unreal",
|
||||||
|
"ProtocolDescription=Unreal Protocol",
|
||||||
|
"Name=Player",
|
||||||
|
"Map=Index.unr",
|
||||||
|
"LocalMap=Entry.unr",
|
||||||
|
"Host=",
|
||||||
|
"Portal=",
|
||||||
|
"MapExt=unr",
|
||||||
|
"EXEName=l2.exe",
|
||||||
|
"SaveExt=usa",
|
||||||
|
"Port=7777",
|
||||||
|
"Class=LineageWarrior.MFighter",
|
||||||
|
"ServerAddr=94.23.90.121",
|
||||||
|
"IsL2NetLogin=True",
|
||||||
|
"IsL2Console=True",
|
||||||
|
"IsL2Seamless=True",
|
||||||
|
"IsL2Projector=True",
|
||||||
|
"ISL2Mark=2",
|
||||||
|
"ForceAspectRatio=False",
|
||||||
|
"AspectRatio=1.334",
|
||||||
|
"IsDefaultShaodw=False",
|
||||||
|
"IsUnderWaterEffect=False",
|
||||||
|
"IsUseCommand=True",
|
||||||
|
"L2VersionCheck=false",
|
||||||
|
"IsL2MemLog=False",
|
||||||
|
"L2ThreadFilter=1",
|
||||||
|
"L2TestServer=false",
|
||||||
|
"EnablePurgeLevel=True",
|
||||||
|
"SharedSky=True",
|
||||||
|
"L2MaxPawnResourceLoad=1.0",
|
||||||
|
"L2UseKeyCrypt=true",
|
||||||
|
"L2UseReplayManager=true",
|
||||||
|
"L2SaveLog=true",
|
||||||
|
"EnableSecondWindow=true",
|
||||||
|
"IsUseXMLUI=True",
|
||||||
|
"L2ShaderPath=..\\system\\",
|
||||||
|
"",
|
||||||
|
"[L2WaterEffect]",
|
||||||
|
"ColorReference=(A=180,R=38,G=56,B=64,RR=150)",
|
||||||
|
"EffectResolution=512",
|
||||||
|
"",
|
||||||
|
"[LanguageSet]",
|
||||||
|
"Language=0",
|
||||||
|
"",
|
||||||
|
"[FontSet]",
|
||||||
|
";Font=L2Font.Japan",
|
||||||
|
";Glyph=Japan.gly",
|
||||||
|
"Font=L2Font.gulim",
|
||||||
|
"Glyph=gulim.gly",
|
||||||
|
"",
|
||||||
|
"[CharacterDisplay]",
|
||||||
|
"Name=true",
|
||||||
|
"Dist=1000",
|
||||||
|
"",
|
||||||
|
"[ClippingRange]",
|
||||||
|
"PawnMax=3.0",
|
||||||
|
"PawnMin=1.5",
|
||||||
|
"AntiPortal=1.5",
|
||||||
|
"Terrain=8.0",
|
||||||
|
"StaticMesh=4.0",
|
||||||
|
"Projector=0.2",
|
||||||
|
"StaticMeshLod=5.0",
|
||||||
|
"Pawn=2.0",
|
||||||
|
"Actor=4.0",
|
||||||
|
"",
|
||||||
|
"[AutoLogOn]",
|
||||||
|
"IsL2AutoLogOn=Ture",
|
||||||
|
"L2ID=zodiac",
|
||||||
|
"L2Passwd=zodiac",
|
||||||
|
"L2Slot=7",
|
||||||
|
"",
|
||||||
|
"[FirstRun]",
|
||||||
|
"FirstRun=2110",
|
||||||
|
"",
|
||||||
|
"[Engine.Engine]",
|
||||||
|
"RenderDevice=D3DDrv.D3DRenderDevice",
|
||||||
|
";RenderDevice=Engine.NullRenderDevice",
|
||||||
|
";RenderDevice=OpenGLDrv.OpenGLRenderDevice",
|
||||||
|
"AudioDevice=ALAudio.ALAudioSubsystem",
|
||||||
|
";AudioDevice=XboxAudio.XboxAudioSubsystem",
|
||||||
|
"NetworkDevice=IpDrv.TcpNetDriver",
|
||||||
|
"DemoRecordingDevice=Engine.DemoRecDriver",
|
||||||
|
"Console=Engine.Console",
|
||||||
|
"DefaultPlayerMenu=UDebugMenu.UDebugRootWindow",
|
||||||
|
"Language=int",
|
||||||
|
"GameEngine=Engine.GameEngine",
|
||||||
|
"EditorEngine=Editor.EditorEngine",
|
||||||
|
"GUIController=Engine.BaseGUIController",
|
||||||
|
";DefaultGame=WarfareGame.WarfareTeamGame",
|
||||||
|
";DefaultServerGame=WarfareGame.WarfareTeamGame",
|
||||||
|
"DefaultGame=Engine.GameInfo",
|
||||||
|
"DefaultServerGame=Engine.GameInfo",
|
||||||
|
"ViewportManager=WinDrv.WindowsClient",
|
||||||
|
";ViewportManager=XboxDrv.XboxClient",
|
||||||
|
";ViewportManager=SDLDrv.SDLClient",
|
||||||
|
"Render=Render.Render",
|
||||||
|
"Input=Engine.Input",
|
||||||
|
"Canvas=Engine.Canvas",
|
||||||
|
"DefaultPlayerController=Engine.LineagePlayerController",
|
||||||
|
"L2NetHandler=Engine.NetHandler",
|
||||||
|
"L2Console=NWindow.ConsoleWnd",
|
||||||
|
"L2Font=NWindow.L2Font",
|
||||||
|
"",
|
||||||
|
"[Core.System]",
|
||||||
|
"PurgeCacheDays=30",
|
||||||
|
"SavePath=../Save",
|
||||||
|
"CachePath=../Cache",
|
||||||
|
"CacheExt=.uxx",
|
||||||
|
"Paths=../System/*.u",
|
||||||
|
"Paths=../StaticMeshes/*.usx",
|
||||||
|
"Paths=../Textures/*.utx",
|
||||||
|
"Paths=../Sounds/*.uax",
|
||||||
|
"Paths=../Voice/*.uax",
|
||||||
|
"Paths=../Maps/*.unr",
|
||||||
|
";Paths=../Music/*.umx",
|
||||||
|
"Paths=../Animations/*.ukx",
|
||||||
|
"Paths=../Animations/*.uix",
|
||||||
|
"Paths=../SysTextures/*.utx",
|
||||||
|
"Paths=../Animations/*.usk",
|
||||||
|
"Paths=../Saves/*.uvx",
|
||||||
|
"Suppress=DevLoad",
|
||||||
|
"Suppress=DevSave",
|
||||||
|
"Suppress=DevNetTraffic",
|
||||||
|
"Suppress=DevGarbage",
|
||||||
|
"Suppress=DevKill",
|
||||||
|
"Suppress=DevReplace",
|
||||||
|
"Suppress=DevCompile",
|
||||||
|
"Suppress=DevBind",
|
||||||
|
"Suppress=DevBsp",
|
||||||
|
"",
|
||||||
|
"[Engine.GameEngine]",
|
||||||
|
"CacheSizeMegs=32",
|
||||||
|
"UseSound=True",
|
||||||
|
";ServerActors=IpDrv.UdpBeacon",
|
||||||
|
";ServerActors=IpServer.UdpServerQuery",
|
||||||
|
";ServerActors=IpServer.UdpServerUplink MasterServerAddress=unreal.epicgames.com MasterServerPort=27900",
|
||||||
|
";ServerActors=UWeb.WebServer",
|
||||||
|
"ServerPackages=AmbientCreatures",
|
||||||
|
";ServerPackages=WarEffects",
|
||||||
|
";ServerPackages=Decorations",
|
||||||
|
"ServerPackages=GamePlay",
|
||||||
|
"ServerPackages=UnrealGame",
|
||||||
|
";ServerPackages=WarfareGame",
|
||||||
|
";ServerPackages=WarClassLight",
|
||||||
|
";ServerPackages=WarClassHeavy",
|
||||||
|
";ServerPackages=WarClassMisc",
|
||||||
|
";ServerPackages=Pickups",
|
||||||
|
"",
|
||||||
|
"[WinDrv.WindowsClient]",
|
||||||
|
"WindowedViewportX=640",
|
||||||
|
"WindowedViewportY=480",
|
||||||
|
"FullscreenViewportX=1024",
|
||||||
|
"FullscreenViewportY=768",
|
||||||
|
"MenuViewportX=640",
|
||||||
|
"MenuViewportY=480",
|
||||||
|
"Brightness=0.800000",
|
||||||
|
"Contrast=0.700000",
|
||||||
|
"Gamma=0.800000",
|
||||||
|
"UseJoystick=True",
|
||||||
|
"CaptureMouse=True",
|
||||||
|
"StartupFullscreen=True",
|
||||||
|
"UseWindowFrame=True",
|
||||||
|
"ScreenFlashes=True",
|
||||||
|
"NoLighting=False",
|
||||||
|
"MinDesiredFrameRate=35.000000",
|
||||||
|
"Decals=True",
|
||||||
|
"Coronas=True",
|
||||||
|
"DecoLayers=True",
|
||||||
|
"Projectors=True",
|
||||||
|
"NoDynamicLights=False",
|
||||||
|
"ReportDynamicUploads=False",
|
||||||
|
"TextureDetailInterface=Higher",
|
||||||
|
"TextureDetailTerrain=Higher",
|
||||||
|
"TextureDetailWeaponSkin=Higher",
|
||||||
|
"TextureDetailPlayerSkin=Higher",
|
||||||
|
"TextureDetailWorld=Higher",
|
||||||
|
"TextureDetailRenderMap=Higher",
|
||||||
|
"TextureDetailLightmap=Higher",
|
||||||
|
"NoFractalAnim=False",
|
||||||
|
"ScaleHUDX=0.0",
|
||||||
|
"",
|
||||||
|
"[SDLDrv.SDLClient]",
|
||||||
|
"WindowedViewportX=640",
|
||||||
|
"WindowedViewportY=480",
|
||||||
|
"FullscreenViewportX=800",
|
||||||
|
"FullscreenViewportY=600",
|
||||||
|
"MenuViewportX=640",
|
||||||
|
"MenuViewportY=480",
|
||||||
|
"Brightness=0.800000",
|
||||||
|
"Contrast=0.700000",
|
||||||
|
"Gamma=0.800000",
|
||||||
|
"UseJoystick=True",
|
||||||
|
"JoystickNumber=0",
|
||||||
|
"IgnoreHat=False",
|
||||||
|
"JoystickHatNumber=0",
|
||||||
|
"CaptureMouse=True",
|
||||||
|
"StartupFullscreen=True",
|
||||||
|
"ScreenFlashes=True",
|
||||||
|
"NoLighting=False",
|
||||||
|
"MinDesiredFrameRate=35.000000",
|
||||||
|
"Decals=True",
|
||||||
|
"Coronas=True",
|
||||||
|
"DecoLayers=True",
|
||||||
|
"Projectors=True",
|
||||||
|
"NoDynamicLights=False",
|
||||||
|
"ReportDynamicUploads=False",
|
||||||
|
"TextureDetailInterface=Normal",
|
||||||
|
"TextureDetailTerrain=Normal",
|
||||||
|
"TextureDetailWeaponSkin=Normal",
|
||||||
|
"TextureDetailPlayerSkin=Normal",
|
||||||
|
"TextureDetailWorld=Normal",
|
||||||
|
"TextureDetailRenderMap=Normal",
|
||||||
|
"TextureDetailLightmap=UltraHigh",
|
||||||
|
"NoFractalAnim=False",
|
||||||
|
"",
|
||||||
|
"[Engine.Player]",
|
||||||
|
"ConfiguredInternetSpeed=10000",
|
||||||
|
"ConfiguredLanSpeed=20000",
|
||||||
|
"",
|
||||||
|
"[ALAudio.ALAudioSubsystem]",
|
||||||
|
"UseEAX=False",
|
||||||
|
"Use3DSound=False",
|
||||||
|
"UseDefaultDriver=False",
|
||||||
|
"CompatibilityMode=False",
|
||||||
|
"UsePrecache=True",
|
||||||
|
"ReverseStereo=false",
|
||||||
|
"Channels=32",
|
||||||
|
"MusicVolume=0.1",
|
||||||
|
"AmbientVolume=1.0",
|
||||||
|
"SoundVolume=1.0",
|
||||||
|
"DopplerFactor=1.0",
|
||||||
|
"Rolloff=0.5",
|
||||||
|
"TimeBetweenHWUpdates=15",
|
||||||
|
"DisablePitch=False",
|
||||||
|
"LowQualitySound=False",
|
||||||
|
"",
|
||||||
|
"[IpDrv.TcpNetDriver]",
|
||||||
|
"AllowDownloads=True",
|
||||||
|
"ConnectionTimeout=15.0",
|
||||||
|
"InitialConnectTimeout=500.0",
|
||||||
|
"AckTimeout=1.0",
|
||||||
|
"KeepAliveTime=0.2",
|
||||||
|
"MaxClientRate=20000",
|
||||||
|
"SimLatency=0",
|
||||||
|
"RelevantTimeout=5.0",
|
||||||
|
"SpawnPrioritySeconds=1.0",
|
||||||
|
"ServerTravelPause=4.0",
|
||||||
|
"NetServerMaxTickRate=20",
|
||||||
|
"LanServerMaxTickRate=35",
|
||||||
|
"DownloadManagers=IpDrv.HTTPDownload",
|
||||||
|
"DownloadManagers=Engine.ChannelDownload",
|
||||||
|
"",
|
||||||
|
"[IpDrv.HTTPDownload]",
|
||||||
|
"RedirectToURL=",
|
||||||
|
"ProxyServerHost=",
|
||||||
|
"ProxyServerPort=3128",
|
||||||
|
"UseCompression=True",
|
||||||
|
"",
|
||||||
|
"[Engine.DemoRecDriver]",
|
||||||
|
"DemoSpectatorClass=Warriors.CHSpectator",
|
||||||
|
"MaxClientRate=25000",
|
||||||
|
"ConnectionTimeout=15.0",
|
||||||
|
"InitialConnectTimeout=500.0",
|
||||||
|
"AckTimeout=1.0",
|
||||||
|
"KeepAliveTime=1.0",
|
||||||
|
"SimLatency=0",
|
||||||
|
"RelevantTimeout=5.0",
|
||||||
|
"SpawnPrioritySeconds=1.0",
|
||||||
|
"ServerTravelPause=4.0",
|
||||||
|
"NetServerMaxTickRate=60",
|
||||||
|
"LanServerMaxTickRate=60",
|
||||||
|
"",
|
||||||
|
"[Engine.GameReplicationInfo]",
|
||||||
|
"ServerName=Another Unreal Server",
|
||||||
|
"ShortName=Unreal Server",
|
||||||
|
"",
|
||||||
|
"[IpDrv.TcpipConnection]",
|
||||||
|
"SimPacketLoss=0",
|
||||||
|
"SimLatency=0",
|
||||||
|
"",
|
||||||
|
"[IpServer.UdpServerQuery]",
|
||||||
|
"GameName=ut",
|
||||||
|
"",
|
||||||
|
"[IpDrv.UdpBeacon]",
|
||||||
|
"DoBeacon=True",
|
||||||
|
"BeaconTime=0.50",
|
||||||
|
"BeaconTimeout=5.0",
|
||||||
|
"BeaconProduct=ut",
|
||||||
|
"",
|
||||||
|
"[XboxDrv.XboxClient]",
|
||||||
|
"TextureDetail=Medium",
|
||||||
|
"SkinDetail=Medium",
|
||||||
|
"LightmapDetail=High",
|
||||||
|
"TextureMinLOD=6",
|
||||||
|
"TextureMaxLOD=9",
|
||||||
|
"Brightness=0.8",
|
||||||
|
"Contrast=0.7",
|
||||||
|
"Gamma=0.8",
|
||||||
|
"NoFractalAnim=True",
|
||||||
|
"",
|
||||||
|
"[XBoxAudio.XBoxAudioSubsystem]",
|
||||||
|
"ReverseStereo=False",
|
||||||
|
"Channels=32",
|
||||||
|
"MusicVolume=1.0",
|
||||||
|
"SoundVolume=1.0",
|
||||||
|
"AmbientFactor=1.0",
|
||||||
|
"UsePrecache=True",
|
||||||
|
"",
|
||||||
|
"[D3DDrv.D3DRenderDevice]",
|
||||||
|
"DetailTextures=True",
|
||||||
|
"HighDetailActors=True",
|
||||||
|
"SuperHighDetailActors=True",
|
||||||
|
"UsePrecaching=True",
|
||||||
|
"UseTrilinear=True",
|
||||||
|
"AdapterNumber=-1",
|
||||||
|
"ReduceMouseLag=True",
|
||||||
|
"UseTripleBuffering=False",
|
||||||
|
"UseHardwareTL=True",
|
||||||
|
"UseHardwareVS=True",
|
||||||
|
"UseCubemaps=True",
|
||||||
|
"DesiredRefreshRate=60",
|
||||||
|
"UseCompressedLightmaps=True",
|
||||||
|
"UseStencil=True",
|
||||||
|
"Use16bit=False",
|
||||||
|
"Use16bitTextures=False",
|
||||||
|
"MaxPixelShaderVersion=255",
|
||||||
|
"UseVSync=False",
|
||||||
|
"LevelOfAnisotropy=1",
|
||||||
|
"DetailTexMipBias=0.8",
|
||||||
|
"DefaultTexMipBias=-0.5",
|
||||||
|
"UseNPatches=False",
|
||||||
|
"TesselationFactor=1.0",
|
||||||
|
"CheckForOverflow=False",
|
||||||
|
"",
|
||||||
|
"[OpenGLDrv.OpenGLRenderDevice]",
|
||||||
|
"DetailTextures=True",
|
||||||
|
"HighDetailActors=True",
|
||||||
|
"SuperHighDetailActors=True",
|
||||||
|
"UsePrecaching=True",
|
||||||
|
"UseCompressedLightmaps=True",
|
||||||
|
"UseTrilinear=True",
|
||||||
|
"UseStencil=False",
|
||||||
|
"MaxTextureUnits=8",
|
||||||
|
"VARSize=32",
|
||||||
|
"ReduceMouseLag=False",
|
||||||
|
"",
|
||||||
|
"[Engine.NullRenderDevice]",
|
||||||
|
"DetailTextures=True",
|
||||||
|
"HighDetailActors=True",
|
||||||
|
"SuperHighDetailActors=True",
|
||||||
|
"UsePrecaching=True",
|
||||||
|
"UseCompressedLightmaps=True",
|
||||||
|
"UseStencil=False",
|
||||||
|
"",
|
||||||
|
"[Editor.EditorEngine]",
|
||||||
|
"UseSound=True",
|
||||||
|
"CacheSizeMegs=32",
|
||||||
|
"GridEnabled=True",
|
||||||
|
"SnapVertices=False",
|
||||||
|
"SnapDistance=10.000000",
|
||||||
|
"GridSize=(X=16.000000,Y=16.000000,Z=16.000000)",
|
||||||
|
"RotGridEnabled=True",
|
||||||
|
"RotGridSize=(Pitch=1024,Yaw=1024,Roll=1024)",
|
||||||
|
"GameCommandLine=-log",
|
||||||
|
"FovAngleDegrees=90.000000",
|
||||||
|
"GodMode=True",
|
||||||
|
"AutoSave=True",
|
||||||
|
"AutoSaveTimeMinutes=5",
|
||||||
|
"AutoSaveIndex=6",
|
||||||
|
"UseAxisIndicator=True",
|
||||||
|
"MatineeCurveDetail=0.1",
|
||||||
|
"LoadEntirePackageWhenSaving=0",
|
||||||
|
"EditPackages=Core",
|
||||||
|
"EditPackages=Engine",
|
||||||
|
"EditPackages=Fire",
|
||||||
|
"EditPackages=Editor",
|
||||||
|
"EditPackages=UWindow",
|
||||||
|
"EditPackages=UnrealEd",
|
||||||
|
"EditPackages=IpDrv",
|
||||||
|
"EditPackages=GamePlay",
|
||||||
|
"EditPackages=LineageEffect",
|
||||||
|
"EditPackages=LineageWarrior",
|
||||||
|
"EditPackages=LineageNpc",
|
||||||
|
"EditPackages=LineageNpc2",
|
||||||
|
"EditPackages=LineageNpcEv",
|
||||||
|
"EditPackages=LineageMonster",
|
||||||
|
"EditPackages=LineageMonster2",
|
||||||
|
"EditPackages=LineageMonster3",
|
||||||
|
"EditPackages=LineageMonster4",
|
||||||
|
"EditPackages=LineageVehicle",
|
||||||
|
"EditPackages=LineageDeco",
|
||||||
|
"EditPackages=LineageCreature",
|
||||||
|
"EditPackages=LineageSceneInfo",
|
||||||
|
"EditPackages=UDebugMenu",
|
||||||
|
"EditPackages=NWindow",
|
||||||
|
"EditPackages=LineageSkillEffect",
|
||||||
|
";EditPackages=WarEffects",
|
||||||
|
";EditPackages=Decorations",
|
||||||
|
";EditPackages=WarfareGame",
|
||||||
|
";EditPackages=IHVDemoContent",
|
||||||
|
";EditPackages=Pickups",
|
||||||
|
";EditPackages=WarClassLight",
|
||||||
|
";EditPackages=WarClassHeavy",
|
||||||
|
";EditPackages=WarClassMisc",
|
||||||
|
";EditPackages=AmbientCreatures",
|
||||||
|
";EditPackages=Vehicles",
|
||||||
|
";EditPackages=UPreview",
|
||||||
|
"",
|
||||||
|
"[UMenu.UnrealConsole]",
|
||||||
|
"RootWindow=UMenu.UMenuRootWindow",
|
||||||
|
"UWindowKey=IK_Esc",
|
||||||
|
"ShowDesktop=True",
|
||||||
|
"",
|
||||||
|
"[UMenu.UMenuMenuBar]",
|
||||||
|
"ShowHelp=True",
|
||||||
|
"GameUMenuDefault=UTMenu.UTGameMenu",
|
||||||
|
"MultiplayerUMenuDefault=UTMenu.UTMultiplayerMenu",
|
||||||
|
"OptionsUMenuDefault=UTMenu.UTOptionsMenu",
|
||||||
|
"",
|
||||||
|
"[Engine.GameInfo]",
|
||||||
|
"bLowGore=False",
|
||||||
|
"bVeryLowGore=False",
|
||||||
|
"",
|
||||||
|
"[UWeb.WebServer]",
|
||||||
|
";Applications[0]=UTServerAdmin.UTServerAdmin",
|
||||||
|
";ApplicationPaths[0]=/ServerAdmin",
|
||||||
|
";Applications[1]=UTServerAdmin.UTImageServer",
|
||||||
|
";ApplicationPaths[1]=/images",
|
||||||
|
"DefaultApplication=0",
|
||||||
|
"bEnabled=False",
|
||||||
|
"",
|
||||||
|
"[Engine.LevelInfo]",
|
||||||
|
"PhysicsDetailLevel=PDL_Medium",
|
||||||
|
"",
|
||||||
|
"[Engine.Console]",
|
||||||
|
"ConsoleKey=9",
|
||||||
|
"",
|
||||||
|
"[WindowPositions]",
|
||||||
|
"GameLog=(X=0,Y=0,XL=512,YL=256)",
|
||||||
|
"",
|
||||||
|
"[Secure]",
|
||||||
|
"SecureModule=False",
|
||||||
|
"",
|
||||||
|
"[PrimeShop]",
|
||||||
|
"UsePrimeShop=false"
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
FILE *f = fopen("launcher.dat", "w");
|
||||||
|
int i;
|
||||||
|
if (f==NULL) {
|
||||||
|
perror("Error! Nie mogę pisać do 'launcher.dat'");
|
||||||
|
printf("%s\n", "Wszyscy zginiemy! Aaaaa!");
|
||||||
|
system("PAUSE");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
for (i = 0; i < LAUNCHER_DAT_LINES; i++)
|
||||||
|
fprintf(f, "%s\n", launcher_dat[i]);
|
||||||
|
fclose(f);
|
||||||
|
i = execlp("L2.bin", "L2.bin", "-INI=launcher.dat", (char *)0);
|
||||||
|
return i;
|
||||||
|
}
|
163
docs/l2_races_classes.ini
Normal file
163
docs/l2_races_classes.ini
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
// Lineage II races
|
||||||
|
L2MaxRaces = 6;
|
||||||
|
L2Race[0] = "Human";
|
||||||
|
L2Race[1] = "Elf";
|
||||||
|
L2Race[2] = "Dark Elf";
|
||||||
|
L2Race[3] = "Orc";
|
||||||
|
L2Race[4] = "Dwarf";
|
||||||
|
L2Race[5] = "Kamael";
|
||||||
|
|
||||||
|
// Lineage II classes
|
||||||
|
L2MaxClasses = 137;
|
||||||
|
L2Class[0] = "Human Fighter";
|
||||||
|
L2Class[1] = "Warrior";
|
||||||
|
L2Class[2] = "Gladiator";
|
||||||
|
L2Class[3] = "Warlord";
|
||||||
|
L2Class[4] = "Knight";
|
||||||
|
L2Class[5] = "Paladin";
|
||||||
|
L2Class[6] = "Dark Avenger";
|
||||||
|
L2Class[7] = "Rogue";
|
||||||
|
L2Class[8] = "Treasure Hunter";
|
||||||
|
L2Class[9] = "Hawkeye";
|
||||||
|
L2Class[10] = "Human Mystic";
|
||||||
|
L2Class[11] = "Human Wizard";
|
||||||
|
L2Class[12] = "Sorceror";
|
||||||
|
L2Class[13] = "Necromancer";
|
||||||
|
L2Class[14] = "Warlock";
|
||||||
|
L2Class[15] = "Cleric";
|
||||||
|
L2Class[16] = "Bishop";
|
||||||
|
L2Class[17] = "Prophet";
|
||||||
|
L2Class[18] = "Elven Fighter";
|
||||||
|
L2Class[19] = "Elven Knight";
|
||||||
|
L2Class[20] = "Temple Knight";
|
||||||
|
L2Class[21] = "Sword Singer";
|
||||||
|
L2Class[22] = "Elven Scout";
|
||||||
|
L2Class[23] = "Plains Walker";
|
||||||
|
L2Class[24] = "Silver Ranger";
|
||||||
|
L2Class[25] = "Elven Mystic";
|
||||||
|
L2Class[26] = "Elven Wizard";
|
||||||
|
L2Class[27] = "SpellSinger";
|
||||||
|
L2Class[28] = "Elemental Summoner";
|
||||||
|
L2Class[29] = "Elven Oracle";
|
||||||
|
L2Class[30] = "Elven Elder";
|
||||||
|
L2Class[31] = "Dark Fighter";
|
||||||
|
L2Class[32] = "Paulus Knight";
|
||||||
|
L2Class[33] = "Shillien Knight";
|
||||||
|
L2Class[34] = "BladeDancer";
|
||||||
|
L2Class[35] = "Assassin";
|
||||||
|
L2Class[36] = "Abyss Walker";
|
||||||
|
L2Class[37] = "Phantom Ranger";
|
||||||
|
L2Class[38] = "Dark Mystic";
|
||||||
|
L2Class[39] = "Dark Wizard";
|
||||||
|
L2Class[40] = "Spellhowler";
|
||||||
|
L2Class[41] = "Phantom Summoner";
|
||||||
|
L2Class[42] = "Shillien Oracle";
|
||||||
|
L2Class[43] = "Shillien Elder";
|
||||||
|
L2Class[44] = "Orc Fighter";
|
||||||
|
L2Class[45] = "Orc Raider";
|
||||||
|
L2Class[46] = "Destroyer";
|
||||||
|
L2Class[47] = "Orc Monk";
|
||||||
|
L2Class[48] = "Tyrant";
|
||||||
|
L2Class[49] = "Orc Mystic";
|
||||||
|
L2Class[50] = "Orc Shaman";
|
||||||
|
L2Class[51] = "Overlord";
|
||||||
|
L2Class[52] = "Warcryer";
|
||||||
|
L2Class[53] = "Dwarven Fighter";
|
||||||
|
L2Class[54] = "Scavenger";
|
||||||
|
L2Class[55] = "Bounty Hunter";
|
||||||
|
L2Class[56] = "Artisan";
|
||||||
|
L2Class[57] = "Warsmith";
|
||||||
|
L2Class[88] = "Duelist";
|
||||||
|
L2Class[89] = "Dreadnought";
|
||||||
|
L2Class[90] = "Phoenix Knight";
|
||||||
|
L2Class[91] = "HellKnight";
|
||||||
|
L2Class[92] = "Sagittarius";
|
||||||
|
L2Class[93] = "Adventurer";
|
||||||
|
L2Class[94] = "Archmage";
|
||||||
|
L2Class[95] = "Soultaker";
|
||||||
|
L2Class[96] = "Arcana Lord";
|
||||||
|
L2Class[97] = "Cardinal";
|
||||||
|
L2Class[98] = "Hierophant";
|
||||||
|
L2Class[99] = "Eva's Templar";
|
||||||
|
L2Class[100] = "Sword Muse";
|
||||||
|
L2Class[101] = "Wind Rider";
|
||||||
|
L2Class[102] = "Moonlight Sentinel";
|
||||||
|
L2Class[103] = "Mystic Muse";
|
||||||
|
L2Class[104] = "Elemental Master";
|
||||||
|
L2Class[105] = "Eva's Saint";
|
||||||
|
L2Class[106] = "Shillien Templar";
|
||||||
|
L2Class[107] = "Spectral Dancer";
|
||||||
|
L2Class[108] = "Ghost Hunter";
|
||||||
|
L2Class[109] = "Ghost Sentinel";
|
||||||
|
L2Class[110] = "Storm Screamer";
|
||||||
|
L2Class[111] = "Spectral Master";
|
||||||
|
L2Class[112] = "Shillien Saint";
|
||||||
|
L2Class[113] = "Titan";
|
||||||
|
L2Class[114] = "Grand Khauatari";
|
||||||
|
L2Class[115] = "Dominator";
|
||||||
|
L2Class[116] = "Doomcryer";
|
||||||
|
L2Class[117] = "Fortune Seeker";
|
||||||
|
L2Class[118] = "Maestro";
|
||||||
|
L2Class[123] = "Kamael Male Soldier";
|
||||||
|
L2Class[124] = "Kamael Female Soldier";
|
||||||
|
L2Class[125] = "Trooper";
|
||||||
|
L2Class[126] = "Warder";
|
||||||
|
L2Class[127] = "Berserker";
|
||||||
|
L2Class[128] = "Soulbreaker (Male)"; //"Male Soulbreaker";
|
||||||
|
L2Class[129] = "Soulbreaker (Female)"; //"Female Soulbreaker";
|
||||||
|
L2Class[130] = "Arbalester";
|
||||||
|
L2Class[131] = "Doombringer";
|
||||||
|
L2Class[132] = "Soulhound (Male)"; // male
|
||||||
|
L2Class[133] = "Soulhound (Female)"; // female
|
||||||
|
L2Class[134] = "Trickster"; // female
|
||||||
|
L2Class[135] = "Inspector";
|
||||||
|
L2Class[136] = "Judicator";
|
||||||
|
|
||||||
|
// Sex :)
|
||||||
|
L2MaxSexes = 2;
|
||||||
|
L2Sex[0] = "Male";
|
||||||
|
L2Sex[1] = "Female";
|
||||||
|
|
||||||
|
// Races pictures depending on sex
|
||||||
|
// L2MaxRacePics = L2MaxRaces * L2MaxSexes;
|
||||||
|
L2RacePic[0] = "human_male.png";
|
||||||
|
L2RacePic[1] = "human_female.png";
|
||||||
|
L2RacePic[2] = "elf_male.png";
|
||||||
|
L2RacePic[3] = "elf_female.png";
|
||||||
|
L2RacePic[4] = "darkelf_male.png";
|
||||||
|
L2RacePic[5] = "darkelf_female.png";
|
||||||
|
L2RacePic[6] = "orc_male.png";
|
||||||
|
L2RacePic[7] = "orc_female.png";
|
||||||
|
L2RacePic[8] = "dwarf_male.png";
|
||||||
|
L2RacePic[9] = "dwarf_female.png";
|
||||||
|
L2RacePic[10] = "kamael_male.png";
|
||||||
|
L2RacePic[11] = "kamael_female.png";
|
||||||
|
|
||||||
|
// NPC races/classes
|
||||||
|
// index is level of skill id = 4416
|
||||||
|
L2MaxNPCRaces = 25;
|
||||||
|
L2NPCRace[0] = "NPC race index 0 not used";
|
||||||
|
L2NPCRace[1] = "Undead";
|
||||||
|
L2NPCRace[2] = "Magic Creatures";
|
||||||
|
L2NPCRace[3] = "Beasts";
|
||||||
|
L2NPCRace[4] = "Animals";
|
||||||
|
L2NPCRace[5] = "Plants";
|
||||||
|
L2NPCRace[6] = "Humanoids";
|
||||||
|
L2NPCRace[7] = "Spirits";
|
||||||
|
L2NPCRace[8] = "Angels";
|
||||||
|
L2NPCRace[9] = "Demons";
|
||||||
|
L2NPCRace[10] = "Dragons";
|
||||||
|
L2NPCRace[11] = "Giants";
|
||||||
|
L2NPCRace[12] = "Bugs";
|
||||||
|
L2NPCRace[13] = "Fairies";
|
||||||
|
L2NPCRace[14] = "Humans";
|
||||||
|
L2NPCRace[15] = "Elves";
|
||||||
|
L2NPCRace[16] = "Dark Elves";
|
||||||
|
L2NPCRace[17] = "Orcs";
|
||||||
|
L2NPCRace[18] = "Dwarves";
|
||||||
|
L2NPCRace[19] = "Others";
|
||||||
|
L2NPCRace[20] = "Non-living Beings";
|
||||||
|
L2NPCRace[21] = "Siege Weapons";
|
||||||
|
L2NPCRace[22] = "Defending Army";
|
||||||
|
L2NPCRace[23] = "Mercenaries";
|
||||||
|
L2NPCRace[24] = "Unknown Creature";
|
1703
docs/l2client_internal_hooks.html
Normal file
1703
docs/l2client_internal_hooks.html
Normal file
File diff suppressed because one or more lines are too long
BIN
docs/l2client_internal_hooks_files/Thumbs.db
Normal file
BIN
docs/l2client_internal_hooks_files/Thumbs.db
Normal file
Binary file not shown.
9
docs/l2client_internal_hooks_files/a.htm
Normal file
9
docs/l2client_internal_hooks_files/a.htm
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||||
|
<html><head>
|
||||||
|
<title>404 Not Found</title>
|
||||||
|
</head><body>
|
||||||
|
<h1>Not Found</h1>
|
||||||
|
<p>The requested URL /< was not found on this server.</p>
|
||||||
|
<hr>
|
||||||
|
<address>Apache/2.2.3 (Debian) PHP/5.2.0-8+etch13 Server at forum.vingrad.ru Port 8080</address>
|
||||||
|
</body></html>
|
BIN
docs/l2client_internal_hooks_files/angel.gif
Normal file
BIN
docs/l2client_internal_hooks_files/angel.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
docs/l2client_internal_hooks_files/biggrin.gif
Normal file
BIN
docs/l2client_internal_hooks_files/biggrin.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 514 B |
BIN
docs/l2client_internal_hooks_files/blum3.gif
Normal file
BIN
docs/l2client_internal_hooks_files/blum3.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
BIN
docs/l2client_internal_hooks_files/crazy.gif
Normal file
BIN
docs/l2client_internal_hooks_files/crazy.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.4 KiB |
BIN
docs/l2client_internal_hooks_files/dance3.gif
Normal file
BIN
docs/l2client_internal_hooks_files/dance3.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.6 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user