class procedure TServerListReqHandler.HandlePacket(Packet: TMapleStream;
C: TMapleClient);
var
i: Integer;
begin
for i := 0 to frmSettings.LVWorlds.Items.Count - 1 do
C.EncryptAndSend(GetServerList(MSH.Worlds[i]));
C.EncryptAndSend(GetEndOfServerList);
end;
function GetServerList(World: TWorldServer): TMapleStream;
var
i: Integer;
begin
Result := TMapleStream.Create;
with Result do
begin
WriteShort(OpHandler.SendOps['ServerList']);
WriteByte(World.Index); // Server ID: 0 = Scania; 1 = Bera; 2 = Broa and so on
WriteMapleAnsiString(World.Name);
WriteByte(0); // Ribbon: 1 = E; 2 = N; 3 = H
WriteMapleAnsiString(frmSettings.edtEventMsg.Text);
WriteShort(100); // rate modifier, don't ask O.O!
WriteShort(100); // rate modifier, don't ask O.O!
{$IFNDEF EMS}
WriteByte(0);
{$ENDIF}
WriteByte(World.Channels.Count);
for i := 0 to World.Channels.Count - 1 do
begin
WriteMapleAnsiString(World.Name + '-' + IntToStr(i + 1));
// Here we can see the last 7 bytes of each of the 14 channels. [EMS]
// L O A D |Sv|ID|LANGUAGE
(* '00 03 00 00 00 00 05 ' +
'56 01 00 00 00 01 05 ' +
'5C 01 00 00 00 02 05 ' +
'1E 01 00 00 00 03 00 ' +
'FB 00 00 00 00 04 00 ' +
'EE 00 00 00 00 05 00 ' +
'F9 00 00 00 00 06 02 ' +
'B4 00 00 00 00 07 02 ' +
'46 FF FF FF 00 08 03 ' +
'FA FF FF FF 00 09 03 ' +
'49 01 00 00 00 0A 04 ' +
'12 01 00 00 00 0B 04 ' +
'88 00 00 00 00 0C 01 ' +
'73 00 00 00 00 0D 01 ' +
'00 00'); *)
WriteInt(0); // xxx Channel-Population (Load)
WriteByte(World.Index);
WriteByte(i);
// Language: 0 = English; 1 = French; 2 = German; 3 = Spanish; 4 = NL; 5 = Europe (All)
WriteByte({$IFNDEF EMS} 0 {$ELSE} 5 {$ENDIF});
// ===================
end;
WriteShort(0); // End
end;
end;
function GetEndOfServerList: TMapleStream;
begin
Result := TMapleStream.Create;
with Result do
begin
WriteShort(OpHandler.SendOps['ServerList']);
WriteByte($FF);
end;
end;