From a17341f70f303efeac9a346ab1583244b45f41c5 Mon Sep 17 00:00:00 2001 From: M4shy <31762675+M4shy@users.noreply.github.com> Date: Mon, 6 Jul 2020 12:53:36 +0200 Subject: [PATCH] Add files via upload First commit --- bookmark.dcu | Bin 0 -> 19049 bytes bookmark.ddp | Bin 0 -> 51 bytes bookmark.dfm | 531 +++++++++++++++ bookmark.pas | 552 ++++++++++++++++ constants.dcu | Bin 0 -> 2075 bytes constants.pas | 66 ++ licence.txt | 342 ++++++++++ main.dcu | Bin 0 -> 33708 bytes main.ddp | Bin 0 -> 51 bytes main.dfm | 1696 ++++++++++++++++++++++++++++++++++++++++++++++++ main.pas | 994 ++++++++++++++++++++++++++++ queryLib.dcu | Bin 0 -> 26649 bytes queryLib.ddp | Bin 0 -> 51 bytes queryLib.dfm | 25 + queryLib.pas | 1075 ++++++++++++++++++++++++++++++ servermain.dcu | Bin 0 -> 26484 bytes servermain.ddp | Bin 0 -> 69 bytes servermain.dfm | 1091 +++++++++++++++++++++++++++++++ servermain.pas | 760 ++++++++++++++++++++++ setup.dcu | Bin 0 -> 37287 bytes setup.ddp | Bin 0 -> 51 bytes setup.dfm | 1694 +++++++++++++++++++++++++++++++++++++++++++++++ setup.pas | 826 +++++++++++++++++++++++ syslib.dcu | Bin 0 -> 5993 bytes syslib.pas | 260 ++++++++ tstruct.dcu | Bin 0 -> 2312 bytes tstruct.pas | 145 +++++ winfragg.cfg | 35 + winfragg.dof | 89 +++ winfragg.dpr | 79 +++ winfragg.res | Bin 0 -> 4148 bytes winfragg.todo | 28 + 32 files changed, 10288 insertions(+) create mode 100644 bookmark.dcu create mode 100644 bookmark.ddp create mode 100644 bookmark.dfm create mode 100644 bookmark.pas create mode 100644 constants.dcu create mode 100644 constants.pas create mode 100644 licence.txt create mode 100644 main.dcu create mode 100644 main.ddp create mode 100644 main.dfm create mode 100644 main.pas create mode 100644 queryLib.dcu create mode 100644 queryLib.ddp create mode 100644 queryLib.dfm create mode 100644 queryLib.pas create mode 100644 servermain.dcu create mode 100644 servermain.ddp create mode 100644 servermain.dfm create mode 100644 servermain.pas create mode 100644 setup.dcu create mode 100644 setup.ddp create mode 100644 setup.dfm create mode 100644 setup.pas create mode 100644 syslib.dcu create mode 100644 syslib.pas create mode 100644 tstruct.dcu create mode 100644 tstruct.pas create mode 100644 winfragg.cfg create mode 100644 winfragg.dof create mode 100644 winfragg.dpr create mode 100644 winfragg.res create mode 100644 winfragg.todo diff --git a/bookmark.dcu b/bookmark.dcu new file mode 100644 index 0000000000000000000000000000000000000000..d411f17a7e954c02ea53e5a7dcf2f4f9afd76672 GIT binary patch literal 19049 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 E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/bookmark.dfm b/bookmark.dfm new file mode 100644 index 0000000..c349444 --- /dev/null +++ b/bookmark.dfm @@ -0,0 +1,531 @@ +object MainBook: TMainBook + Tag = 1 + Left = 64 + Top = 140 + Width = 920 + Height = 494 + BorderIcons = [biSystemMenu, biMaximize] + Caption = 'BookMark' + Color = clBtnFace + Constraints.MinWidth = 510 + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object lvServers: TListView + Left = 0 + Top = 0 + Width = 912 + Height = 418 + Align = alClient + BevelInner = bvSpace + BevelOuter = bvSpace + Columns = < + item + Caption = 'IP' + Width = 155 + end + item + Caption = 'Host' + Width = 200 + end + item + Caption = 'Map' + Width = 80 + end + item + Caption = 'Description' + Width = 100 + end + item + Caption = 'GameType' + Width = 80 + end + item + Caption = 'Ping' + end + item + Caption = 'Pop' + end + item + Caption = 'Pass' + Width = 40 + end + item + Caption = 'FF' + Width = 35 + end + item + Caption = 'AC' + end + item + Caption = 'TimeLeft' + Width = 60 + end> + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + HideSelection = False + HotTrack = True + HotTrackStyles = [htUnderlineHot] + HoverTime = 0 + IconOptions.AutoArrange = True + ReadOnly = True + RowSelect = True + ParentFont = False + PopupMenu = PopupMenu + SmallImages = MainForm.ImgLst + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = lvServersColumnClick + OnCompare = lvServersCompare + OnContextPopup = lvServersContextPopup + OnDblClick = lvServersDblClick + OnDeletion = lvServersDeletion + OnInsert = lvServersInsert + end + object SBar: TStatusBar + Left = 0 + Top = 448 + Width = 912 + Height = 19 + Panels = < + item + Alignment = taCenter + Width = 220 + end + item + Alignment = taCenter + Width = 140 + end + item + Alignment = taCenter + Text = 'Auto retry delay : disabled' + Width = 50 + end> + SimplePanel = False + end + object Board: TPanel + Tag = 1 + Left = 0 + Top = 418 + Width = 912 + Height = 30 + Align = alBottom + BevelOuter = bvLowered + TabOrder = 2 + DesignSize = ( + 912 + 30) + object SBRefresh: TSpeedButton + Tag = 1 + Left = 786 + Top = 1 + Width = 70 + Height = 28 + Cursor = crHandPoint + Anchors = [akRight] + Caption = '&Refresh' + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00770000000000 + 0007770FFFFFFFFFFF07770FFFFF2FFFFF07770FFFF22FFFFF07770FFF22222F + FF07770FFFF22FF2FF07770FFFFF2FF2FF07770FF2FFFFF2FF07770FF2FF2FFF + FF07770FF2FF22FFFF07770FFF22222FFF07770FFFFF22FFFF07770FFFFF2FF0 + 0007770FFFFFFFF0F077770FFFFFFFF007777700000000007777} + OnClick = SBRefreshClick + end + object SBQuit: TSpeedButton + Tag = 1 + Left = 856 + Top = 1 + Width = 55 + Height = 28 + Cursor = crHandPoint + Anchors = [akTop, akRight, akBottom] + Caption = '&Quit' + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777077777777770777000777777777777700007777777077777000777777 + 0777777700077770077777777000770077777777770000077777777777700077 + 7777777777000007777777777000770077777770000777700777770000777777 + 0077770007777777770777777777777777777777777777777777} + OnClick = SBQuitClick + end + object SBSave: TSpeedButton + Tag = 1 + Left = 66 + Top = 1 + Width = 63 + Height = 28 + Cursor = crHandPoint + Anchors = [akLeft] + Caption = '&Save' + Enabled = False + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777770000000000000770330000007703077033000000770307703300000077 + 0307703300000000030770333333333333077033000000003307703077777777 + 0307703077777777030770307777777703077030777777770307703077777777 + 0007703077777777070770000000000000077777777777777777} + OnClick = SBSaveClick + end + object SBExport: TSpeedButton + Tag = 1 + Left = 0 + Top = 1 + Width = 66 + Height = 28 + Cursor = crHandPoint + Anchors = [akLeft] + Caption = '&Export' + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 0800000000000001000000000000000000000001000000010000000000000000 + 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA + A60004040400080808000C0C0C0011111100161616001C1C1C00222222002929 + 2900555555004D4D4D004242420039393900807CFF005050FF009300D600FFEC + CC00C6D6EF00D6E7E70090A9AD000000330000006600000099000000CC000033 + 00000033330000336600003399000033CC000033FF0000660000006633000066 + 6600006699000066CC000066FF00009900000099330000996600009999000099 + CC000099FF0000CC000000CC330000CC660000CC990000CCCC0000CCFF0000FF + 660000FF990000FFCC00330000003300330033006600330099003300CC003300 + FF00333300003333330033336600333399003333CC003333FF00336600003366 + 330033666600336699003366CC003366FF003399000033993300339966003399 + 99003399CC003399FF0033CC000033CC330033CC660033CC990033CCCC0033CC + FF0033FF330033FF660033FF990033FFCC0033FFFF0066000000660033006600 + 6600660099006600CC006600FF00663300006633330066336600663399006633 + CC006633FF00666600006666330066666600666699006666CC00669900006699 + 330066996600669999006699CC006699FF0066CC000066CC330066CC990066CC + CC0066CCFF0066FF000066FF330066FF990066FFCC00CC00FF00FF00CC009999 + 000099339900990099009900CC009900000099333300990066009933CC009900 + FF00996600009966330099336600996699009966CC009933FF00999933009999 + 6600999999009999CC009999FF0099CC000099CC330066CC660099CC990099CC + CC0099CCFF0099FF000099FF330099CC660099FF990099FFCC0099FFFF00CC00 + 000099003300CC006600CC009900CC00CC0099330000CC333300CC336600CC33 + 9900CC33CC00CC33FF00CC660000CC66330099666600CC669900CC66CC009966 + FF00CC990000CC993300CC996600CC999900CC99CC00CC99FF00CCCC0000CCCC + 3300CCCC6600CCCC9900CCCCCC00CCCCFF00CCFF0000CCFF330099FF6600CCFF + 9900CCFFCC00CCFFFF00CC003300FF006600FF009900CC330000FF333300FF33 + 6600FF339900FF33CC00FF33FF00FF660000FF663300CC666600FF669900FF66 + CC00CC66FF00FF990000FF993300FF996600FF999900FF99CC00FF99FF00FFCC + 0000FFCC3300FFCC6600FFCC9900FFCCCC00FFCCFF00FFFF3300CCFF6600FFFF + 9900FFFFCC006666FF0066FF660066FFFF00FF666600FF66FF00FFFF66002100 + A5005F5F5F00777777008686860096969600CBCBCB00B2B2B200D7D7D700DDDD + DD00E3E3E300EAEAEA00F1F1F100F8F8F800F0FBFF00A4A0A000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00EEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00EEEEEEEEEEEEEEEEEEEEEEEEEE + EE00FE00EEEEEEEEEEEEEEEEEEEEEEEE00FEFEFE00EEEEEEEEEEEEEEEEEEEE00 + FEFEFEFEFE00EEEEEEEEEEEEEEEE00FEFEFEFEFEFEFE00EEEEEEEEEEEE00ECEC + ECFEFEFEFEECEC00EEEEEEEEEEEEEEEECDD9FEFED3EEEEEEEEEEEEEEEEEEEEEE + CDD9D3D9D3EEEEEEEEEEEEEEEEEEEECDD3D3D3E6D3EEEEEEEEEEEEEEEEEEC8AC + CDD3D9E6D3EEEEEEEEEEC8C8C8C8C8C8CDFFE6E6EEEEEEEEEEEEEEC8E6E6E6FF + FFE6E6EEEEEEEEEEEEEEEEEEC8E6E6E6E6EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE} + OnClick = SBExportClick + end + object SBGo: TSpeedButton + Tag = 1 + Left = 730 + Top = 1 + Width = 56 + Height = 28 + Cursor = crHandPoint + Anchors = [akRight] + Caption = '&Go !' + Flat = True + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777777777777777777777777777777777777770000000000 + 007777F888888888807777F777777777807777F777777777807777F777777777 + 807777F777777777807777F777777777807777FFFFFFFFFFF077777777777777 + 7777777777777777777777777777777777777777777777777777} + ParentFont = False + OnClick = SBGoClick + end + object SBAdd: TSpeedButton + Tag = 1 + Left = 129 + Top = 1 + Width = 56 + Height = 28 + Cursor = crHandPoint + Anchors = [akLeft] + Caption = '&Add' + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 333333333333FF3333333333333C0C333333333333F777F3333333333CC0F0C3 + 333333333777377F33333333C30F0F0C333333337F737377F333333C00FFF0F0 + C33333F7773337377F333CC0FFFFFF0F0C3337773F33337377F3C30F0FFFFFF0 + F0C37F7373F33337377F00FFF0FFFFFF0F0C7733373F333373770FFFFF0FFFFF + F0F073F33373F333373730FFFFF0FFFFFF03373F33373F333F73330FFFFF0FFF + 00333373F33373FF77333330FFFFF000333333373F333777333333330FFF0333 + 3333333373FF7333333333333000333333333333377733333333333333333333 + 3333333333333333333333333333333333333333333333333333} + NumGlyphs = 2 + OnClick = SBAddClick + end + object SBConfig: TSpeedButton + Tag = 1 + Left = 185 + Top = 1 + Width = 56 + Height = 28 + Cursor = crHandPoint + Anchors = [akLeft] + Caption = '&Setup' + Flat = True + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00370777033333 + 3330337F3F7F33333F3787070003333707303F737773333373F7007703333330 + 700077337F3333373777887007333337007733F773F333337733700070333333 + 077037773733333F7F37703707333300080737F373333377737F003333333307 + 78087733FFF3337FFF7F33300033330008073F3777F33F777F73073070370733 + 078073F7F7FF73F37FF7700070007037007837773777F73377FF007777700730 + 70007733FFF77F37377707700077033707307F37773F7FFF7337080777070003 + 3330737F3F7F777F333778080707770333333F7F737F3F7F3333080787070003 + 33337F73FF737773333307800077033333337337773373333333} + NumGlyphs = 2 + OnClick = SBConfigClick + end + end + object PopupMenu: TPopupMenu + Images = MainForm.ImgLst + Left = 8 + Top = 384 + object Refresh1: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00770000000000 + 0007770FFFFFFFFFFF07770FFFFF2FFFFF07770FFFF22FFFFF07770FFF22222F + FF07770FFFF22FF2FF07770FFFFF2FF2FF07770FF2FFFFF2FF07770FF2FF2FFF + FF07770FF2FF22FFFF07770FFF22222FFF07770FFFFF22FFFF07770FFFFF2FF0 + 0007770FFFFFFFF0F077770FFFFFFFF007777700000000007777} + Caption = '&Refresh' + Default = True + GroupIndex = 1 + OnClick = Refresh1Click + end + object Queryserver1: TMenuItem + Tag = 2 + Bitmap.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 0800000000000001000000000000000000000001000000010000000000000000 + 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA + A60004040400080808000C0C0C0011111100161616001C1C1C00222222002929 + 2900555555004D4D4D004242420039393900807CFF005050FF009300D600FFEC + CC00C6D6EF00D6E7E70090A9AD000000330000006600000099000000CC000033 + 00000033330000336600003399000033CC000033FF0000660000006633000066 + 6600006699000066CC000066FF00009900000099330000996600009999000099 + CC000099FF0000CC000000CC330000CC660000CC990000CCCC0000CCFF0000FF + 660000FF990000FFCC00330000003300330033006600330099003300CC003300 + FF00333300003333330033336600333399003333CC003333FF00336600003366 + 330033666600336699003366CC003366FF003399000033993300339966003399 + 99003399CC003399FF0033CC000033CC330033CC660033CC990033CCCC0033CC + FF0033FF330033FF660033FF990033FFCC0033FFFF0066000000660033006600 + 6600660099006600CC006600FF00663300006633330066336600663399006633 + CC006633FF00666600006666330066666600666699006666CC00669900006699 + 330066996600669999006699CC006699FF0066CC000066CC330066CC990066CC + CC0066CCFF0066FF000066FF330066FF990066FFCC00CC00FF00FF00CC009999 + 000099339900990099009900CC009900000099333300990066009933CC009900 + FF00996600009966330099336600996699009966CC009933FF00999933009999 + 6600999999009999CC009999FF0099CC000099CC330066CC660099CC990099CC + CC0099CCFF0099FF000099FF330099CC660099FF990099FFCC0099FFFF00CC00 + 000099003300CC006600CC009900CC00CC0099330000CC333300CC336600CC33 + 9900CC33CC00CC33FF00CC660000CC66330099666600CC669900CC66CC009966 + FF00CC990000CC993300CC996600CC999900CC99CC00CC99FF00CCCC0000CCCC + 3300CCCC6600CCCC9900CCCCCC00CCCCFF00CCFF0000CCFF330099FF6600CCFF + 9900CCFFCC00CCFFFF00CC003300FF006600FF009900CC330000FF333300FF33 + 6600FF339900FF33CC00FF33FF00FF660000FF663300CC666600FF669900FF66 + CC00CC66FF00FF990000FF993300FF996600FF999900FF99CC00FF99FF00FFCC + 0000FFCC3300FFCC6600FFCC9900FFCCCC00FFCCFF00FFFF3300CCFF6600FFFF + 9900FFFFCC006666FF0066FF660066FFFF00FF666600FF66FF00FFFF66002100 + A5005F5F5F00777777008686860096969600CBCBCB00B2B2B200D7D7D700DDDD + DD00E3E3E300EAEAEA00F1F1F100F8F8F800F0FBFF00A4A0A000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00EEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00EEEEEEEEEEEEEEEEEEEEEEEEEE + EE00FE00EEEEEEEEEEEEEEEEEEEEEEEE00FEFEFE00EEEEEEEEEEEEEEEEEEEE00 + FEFEFEFEFE00EEEEEEEEEEEEEEEE00FEFEFEFEFEFEFE00EEEEEEEEEEEE00ECEC + ECFEFEFEFEECEC00EEEEEEEEEEEEEEEECDD9FEFED3EEEEEEEEEEEEEEEEEEEEEE + CDD9D3D9D3EEEEEEEEEEEEEEEEEEEECDD3D3D3E6D3EEEEEEEEEEEEEEEEEEC8AC + CDD3D9E6D3EEEEEEEEEEC8C8C8C8C8C8CDFFE6E6EEEEEEEEEEEEEEC8E6E6E6FF + FFE6E6EEEEEEEEEEEEEEEEEEC8E6E6E6E6EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE} + Caption = '&Query server' + GroupIndex = 1 + OnClick = Queryserver1Click + end + object Go1: TMenuItem + Caption = 'Go ! (with password)' + GroupIndex = 1 + OnClick = Go1Click + end + object N1: TMenuItem + Caption = '-' + GroupIndex = 1 + end + object Addserver1: TMenuItem + Tag = 3 + Caption = '&Add server (auto)' + GroupIndex = 1 + OnClick = AddServer + end + object AddserverManually: TMenuItem + Caption = '&Add server Manually' + GroupIndex = 1 + OnClick = AddServer + end + object Removeall1: TMenuItem + Caption = '&Remove all' + GroupIndex = 1 + OnClick = Removeall1Click + end + object Removeserver1: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777077777777770777000777777777777700007777777077777000777777 + 0777777700077770077777777000770077777777770000077777777777700077 + 7777777777000007777777777000770077777770000777700777770000777777 + 0077770007777777770777777777777777777777777777777777} + Caption = '&Remove server' + GroupIndex = 1 + OnClick = Removeserver1Click + end + object N2: TMenuItem + Caption = '-' + GroupIndex = 1 + end + object Copyserverinfo2: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 777777777744444444477777774FFFFFFF477777774F00000F470000004FFFFF + FF470FFFFF4F00000F470F00004FFFFFFF470FFFFF4F00F444470F00004FFFF4 + F4770FFFFF4FFFF447770F00F044444477770FFFF0F0777777770FFFF0077777 + 7777000000777777777777777777777777777777777777777777} + Caption = '&Copy server address' + GroupIndex = 1 + OnClick = Copyserverinfo2Click + end + object Copyserverinfo1: TMenuItem + Caption = '&Copy server info' + GroupIndex = 1 + OnClick = Copyserverinfo1Click + end + object N3: TMenuItem + Caption = '-' + GroupIndex = 1 + end + object Options1: TMenuItem + Bitmap.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 0800000000000001000000000000000000000001000000010000FFFFFF00C0C0 + C000808080000000800000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00010101010101 + 0101010101010101010101010404040404040404040401010101010100000000 + 0000000000000401010101010000000101000000000004010101010100000003 + 0101000000000401010101010000030303010100000004010101010100030300 + 0303010000000401010101010000000000030201000004010101010100000000 + 0000030101000401010101010000000000000003010004010101010100000000 + 0000000003000401010101010000000000000000000004010101010100000404 + 0404040400000401010101010101040001010104010101010101010101010101 + 0101010101010101010101010101010101010101010101010101} + Caption = '&Options' + GroupIndex = 1 + object RefreshTming1: TMenuItem + Caption = '&Network settings' + OnClick = RefreshTming1Click + end + object Advancedsettings1: TMenuItem + Caption = '&Advanced settings' + OnClick = SBConfigClick + end + end + object RestoreDefaultcolwigth1: TMenuItem + Caption = '&Restore default column width' + GroupIndex = 1 + OnClick = RestoreDefaultcolwigth1Click + end + object N4: TMenuItem + Caption = '-' + GroupIndex = 1 + end + object Exit1: TMenuItem + Caption = '&Exit' + GroupIndex = 1 + OnClick = Exit1Click + end + end +end diff --git a/bookmark.pas b/bookmark.pas new file mode 100644 index 0000000..3774fe4 --- /dev/null +++ b/bookmark.pas @@ -0,0 +1,552 @@ + (*----------------------------------------------------------------------------+ + Winfragg(c) is created by Wash for A.M.U + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + The CsTiger searching feature is an exclusivity for Winfragg(c) only. + + Amu's page : http://winfragg.sourceforge.net/ + Dev Page : https://sourceforge.net/projects/winfragg/ + Contact : amunit@users.sourceforge.net + CsTiger : http://www.cstiger.de + Borland : http://www.borland.com + +----------------------------------------------------------------------------*) + +unit bookmark; + +interface + +uses + Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms, Clipbrd, + Buttons, ComCtrls, queryLib, ExtCtrls, StdCtrls, sysLib, Menus, Registry, + Dialogs, tstruct, Setup; + +type + TMainBook = class(TForm) + lvServers: TListView; + SBar: TStatusBar; + Board: TPanel; + SBRefresh: TSpeedButton; + SBQuit: TSpeedButton; + SBSave: TSpeedButton; + PopupMenu: TPopupMenu; + AddserverManually: TMenuItem; + SBExport: TSpeedButton; + SBGo: TSpeedButton; + SBAdd: TSpeedButton; + SBConfig: TSpeedButton; + Advancedsettings1: TMenuItem; + RestoreDefaultcolwigth1: TMenuItem; + procedure GetPacket(HPacket : TPacketHead; SInfo : TRINfo); + procedure lvServersColumnClick(Sender: TObject; Column: TListColumn); + procedure lvServersCompare(Sender: TObject; Item1, Item2: TListItem; + Data: Integer; var Compare: Integer); + procedure SBSaveClick(Sender: TObject); + procedure Queryserver1Click(Sender: TObject); + procedure Removeserver1Click(Sender: TObject); + procedure Exit1Click(Sender: TObject); + procedure lvServersContextPopup(Sender: TObject; MousePos: TPoint; + var Handled: Boolean); + procedure Removeall1Click(Sender: TObject); + procedure SBRefreshClick(Sender: TObject); + procedure AddServer(Sender : TObject); + procedure Refresh1Click(Sender: TObject); + procedure lvServersDeletion(Sender: TObject; Item: TListItem); + procedure lvServersInsert(Sender: TObject; Item: TListItem); + procedure Copyserverinfo2Click(Sender: TObject); + procedure Copyserverinfo1Click(Sender: TObject); + procedure Operation(n : byte); + procedure SBExportClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Refreshing(Sender: TObject); + procedure RefreshTming1Click(Sender: TObject); + procedure lvServersDblClick(Sender: TObject); + procedure SBGoClick(Sender: TObject); + procedure Go1Click(Sender: TObject); + procedure SBQuitClick(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure MinimizeTray; + procedure SBAddClick(Sender: TObject); + procedure SBConfigClick(Sender: TObject); + procedure RestoreDefaultcolwigth1Click(Sender: TObject); + private + ColumnToSort: integer; + ColumnSortUp: boolean; + LatencyTimer, AutoRefreshTimer : TTimer; + Index : byte; + end; + +var MainBook: TMainBook; + +implementation + +uses main; + +{$R *.dfm} + +(*----------------------------------------------------------------------------+ + "Operation" indicates the current action. + +----------------------------------------------------------------------------*) + +procedure TMainBook.Operation(n : byte); +var i,j : byte; +begin + Case n of + 1 : begin + i:=0; j:=0; + while i <= lvServers.Items.Count -1 do + begin + if LvServers.Items[i].SubItems[1] <> '' then inc(j); + inc(i); + end; + Sbar.Panels[0].Text := inttostr(lvServers.Items.Count) + + ' server(s) listed, ' + + inttostr(j) + ' active(s) server(s)' + end; + 2 : begin + Sbar.Panels[0].Text := + inttostr(lvServers.Items.Count)+ + ' server(s) succesfully saved to registry'; + SBSave.Enabled := false + end + end +end; + +(*----------------------------------------------------------------------------+ + "GetPacket" gets HPacket TPacketHead type and SInfo TRInfo type informations. + It does an insertion or an update of servers. + +----------------------------------------------------------------------------*) + +procedure TMainBook.GetPacket(HPacket : TPacketHead; SInfo : TRInfo); +var LstItem, LStItem2 : TListItem; +begin + LstItem:= lvServers.FindCaption(0, HPacket.ip +':'+ + inttostr(HPacket.port) + ,false, true, false); + + if LstItem <> nil + then + if HPacket.UdpTag <> 2 + then + with lvServers.Items[LstItem.Index] do + if SInfo.IdRec = 'HLRules' + then + begin + SubItems[4] := inttostr(Hpacket.ping); + SubItems[7] := SInfo.FF; + SubItems[8] := SInfo.AC; + SubItems[9] := SInfo.TimeLeft; + end + else + begin + ImageIndex := SInfo.Icn; + SubItems[0] := SInfo.HostName; + SubItems[1] := SInfo.Map; + SubItems[2] := SInfo.Description; + SubItems[3] := SInfo.GameType; + SubItems[5] := SInfo.NumPlayers + '/' + SInfo.MaxPlayers; + SubItems[6] := SInfo.PassWord; + if SInfo.IdRec <> 'HLInfo' + then + begin + SubItems[4] := inttostr(Hpacket.ping); + SubItems[7] := SInfo.FF; + SubItems[8] := SInfo.AC + end + end + else MessageDlg('Server already exists in bookmark', + mtInformation, [mbOk], 0) + else + if HPacket.udpTag = 2 then + begin + LStItem2 := LvServers.Items.Add; + With LStItem2.SubItems do + begin + LStItem2.Caption := HPacket.ip+':'+inttostr(HPacket.port); + LStItem2.ImageIndex := 0; + Add(''); + Add(''); + Add(''); + Add(''); + Add(''); + Add(''); + Add(''); + Add(''); + Add(''); + Add('') + end; + SBRefresh.Click + end +end; + +(*----------------------------------------------------------------------------+ + "Refreshing" does a query for each server in bookmark. + +----------------------------------------------------------------------------*) + +procedure TMainBook.Refreshing; +var Q : ShortString; +begin + if index = LvServers.Items.Count then + begin + LatencyTimer.Free; + SBRefresh.Enabled := true; + Index := 0; + Operation(1); + if SetupMain.CBAutoRefreshQueryBook.Checked + then + With AutoRefreshTimer do + begin + Interval :=SetupMain.SEAutoRefreshQueryBook.Value*1000; + Enabled := true + end + else AutoRefreshTimer.Enabled := false; + exit + end; + + case LvServers.Items[index].ImageIndex of + 0 : Q := 'b';//BroadCast + 1..6 : Q := 'v';//Valve + 7..14 : Q := 'e';//Epic + 15..21 : Q := 'i'//iD + end; + + try + QueryMain.QueryServer(3,Q,LvServers.Items[index].Caption) + except on E:Exception do GetErrorLog(E.Message) + end; + + inc(index) +end; + +procedure TMainBook.SBRefreshClick(Sender: TObject); +begin + if (not SBRefresh.Enabled) or (lvServers.Items.Count = 0) then exit; + + if SBRefresh.Enabled then SBRefresh.Enabled := false; + + LatencyTimer := TTimer.create (nil); + LatencyTimer.Interval := SetupMain.SENetwork.Value; + LatencyTimer.OnTimer := Refreshing +end; + +procedure TMainBook.lvServersColumnClick(Sender: TObject; + Column: TListColumn); +begin + ColumnToSort := Column.Index; + ColumnSortUp := not ColumnSortUp; + (Sender as TCustomListView).AlphaSort +end; + + (*----------------------------------------------------------------------------+ + "lvServersCompare" compares values into the Listview (players). The syntax + was inspired from "eD2k Utils" (BierBaron). + +----------------------------------------------------------------------------*) + +procedure TMainBook.lvServersCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); +var ix, code1, code2: Integer; + x, y: real; +begin + ix := ColumnToSort - 1; + + if ix < 0 then + begin + if item1.ImageIndex < item2.ImageIndex then compare := -1 + else compare := 1; + exit; + end; + + Val(Item1.SubItems[ix], x, Code1); + Val(Item2.SubItems[ix], y, Code2); + + If ((Code1 = 0) and (Code2 = 0)) then + begin + If (x < y) then Compare := -1 + else Compare := 1; + end + else Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]); + + If ColumnSortUp then Compare := Compare * -1 +end; + +procedure TMainBook.SBSaveClick(Sender: TObject); +var MyRegistry: TRegistry; + i : byte; +begin + MyRegistry := TRegistry.Create; + With MyRegistry do + begin + OpenKey('SOFTWARE\AMU\winfragg\bookmark',true); + + i:=0; + While not (i = lvServers.Items.Count) do + begin + WriteString('server'+inttostr(i),lvServers.Items[i].Caption); + inc(i); + end; + + While ValueExists('server'+inttostr(i)) do + begin + MyRegistry.DeleteValue('server'+inttostr(i)); + inc(i); + end; + CloseKey; + Free + + end; + + Operation(2) +end; + +procedure TMainBook.lvServersContextPopup(Sender: TObject; + MousePos: TPoint; var Handled: Boolean); +begin + if LvServers.GetItemAt(MousePos.X,MousePos.Y) = nil + then + With PopupMenu do + begin + Items[1].Enabled := false; + Items[2].Enabled := false; + Items[7].Enabled := false; + Items[8].Enabled := false; + Items[9].Enabled := false; + Items[10].Enabled := false; + end + else + With PopupMenu do + begin + Items[1].Enabled := true; + Items[2].Enabled := true; + Items[7].Enabled := true; + Items[8].Enabled := true; + Items[9].Enabled := true; + Items[10].Enabled := true; + end +end; + +procedure TMainBook.Removeall1Click(Sender: TObject); +begin + if LvServers.Items.Count > 0 + then + if MessageDlg(#13+'Remove all the server List ? ', + mtConfirmation, [mbYes, mbNo], 0) = mrYes + then LvServers.Clear +end; + + (*----------------------------------------------------------------------------+ + "AddServer" adds a new server. + +----------------------------------------------------------------------------*) + +procedure TMainBook.AddServer(Sender : TObject); +var HPacket : TPackethead; + NewIP : String; + NAddress : TAdd; + NPacket : TRInfo; +begin + NewIP := Mainform.CBedit.text; + if not inputQuery('Add server to bookmark', + '(Note : auto add server requires an active server)', + NewIp) + then exit; + + Naddress := GetAddress(NewIp,0);//again ds queryserver .. + if NAddress.ko = 0 + then + begin + HPacket.ip := Naddress.ip; + HPacket.port := Naddress.port; + HPacket.UdpTag := 2; + if TMenuItem(Sender).Tag = 2 + then + try + QueryMain.QueryServer(2,'b',HPacket.ip +':'+inttostr(HPacket.port))//3 + except on E:Exception do GetErrorLog(E.Message) + end + else GetPacket(HPacket,NPacket); + MainBook.Visible := true; + MainBook.BringToFront + end + else MessageDlg('Please insert a valid IP'+#13+ + '(Format : xxx.xxx.xxx.xxx:xxxxx)', mtWarning, [mbOk], 0) +end; + +procedure TMainBook.FormCreate(Sender: TObject); +var MyRegistry: TRegistry; + NItem : TListItem; + i : byte; +begin + MyRegistry := TRegistry.Create; + MyRegistry.OpenKey('SOFTWARE\AMU\winfragg\bookmark\', false); + + i:=0; + while MyRegistry.ValueExists('server'+ inttostr(i))=true do + begin + NItem := LvServers.Items.Add; + NItem.Caption := Myregistry.ReadString('server'+inttostr(i)); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + NItem.SubItems.Add(''); + inc(i) + end; + + MyRegistry.CloseKey; + MyRegistry.Free; + + Operation(2); + + AutoRefreshTimer:=TTimer.Create(self); + AutoRefreshTimer.Enabled := false; + AutoRefreshTimer.OnTimer := SBRefreshClick +end; + +procedure TMainBook.RestoreDefaultcolwigth1Click(Sender: TObject); +begin + lvServers.Column[0].Width := 140; + lvServers.Column[1].Width := 160; + lvServers.Column[2].Width := 100; + lvServers.Column[3].Width := 100; + lvServers.Column[4].Width := 90; + lvServers.Column[5].Width := 40; + lvServers.Column[6].Width := 45; + lvServers.Column[7].Width := 55; + lvServers.Column[8].Width := 35; + lvServers.Column[9].Width := 35; + lvServers.Column[10].Width := 60 +end; + +procedure TMainBook.Queryserver1Click(Sender: TObject); +begin + MainForm.InfoPanel.Clear; + MainForm.LstPlay.Clear; + MainForm.CBedit.Text := LvServers.Selected.Caption; + MainForm.BringToFront; + MainForm.SBnfo.Click +end; + +procedure TMainBook.SBQuitClick(Sender: TObject); +begin + if SBSave.Enabled then + begin + if SetupMain.CBSaveServer.Checked then SBSave.Click + else + if MessageDlg(#13+'Save the server list ? ', + mtConfirmation, [mbYes, mbNo], 0) = mrYes + then SBSave.Click + else SBSave.Enabled := false + end; + + MainBook.Close +end; + +procedure TMainBook.SBGoClick(Sender: TObject); +begin + if LvServers.SelCount = 0 then + begin + MessageDlg(#13+'Please choose a server first..',mtWarning, [mbOk], 0); + exit + end; + + MainForm.CBedit.Text := LvServers.Selected.Caption; + MainForm.DisplayIconServer(LvServers.Selected.ImageIndex); + MainForm.BringToFront; + MainForm.SBGo.Click +end; + +procedure TMainBook.lvServersDblClick(Sender: TObject); +begin + if lvServers.ItemIndex < 0 then exit; + + if SetupMain.RBQClick.Checked then Queryserver1Click(nil) + else SBGo.Click +end; + +procedure TMainBook.SBConfigClick(Sender: TObject); +begin + SetupMain.PAdvance.BringToFront; + SetupMain.Show +end; + +procedure TMainBook.RefreshTming1Click(Sender: TObject); +begin + SetupMain.PNetwork.BringToFront; + SetupMain.Show +end; + +procedure TMainBook.MinimizeTray; +begin + AutoRefreshTimer.Enabled := false; + Hide +end; + +procedure TMainBook.Go1Click(Sender: TObject); +begin + SBGo.Click +end; + +procedure TMainBook.FormClose(Sender: TObject; var Action: TCloseAction); +begin + AutoRefreshTimer.Enabled := false +end; + +procedure TMainBook.Removeserver1Click(Sender: TObject); +begin + LvServers.Items.Delete(LvServers.Selected.Index) +end; + +procedure TMainBook.Exit1Click(Sender: TObject); +begin + Close +end; + +procedure TMainBook.Refresh1Click(Sender: TObject); +begin + SBRefresh.Click +end; + +procedure TMainBook.lvServersDeletion(Sender: TObject; Item: TListItem); +begin + SBsave.Enabled := true +end; + +procedure TMainBook.lvServersInsert(Sender: TObject; Item: TListItem); +begin + SBsave.Enabled := true +end; + +procedure TMainBook.Copyserverinfo2Click(Sender: TObject); +begin + Clipboard.AsText := LvServers.Selected.Caption +end; + +procedure TMainBook.Copyserverinfo1Click(Sender: TObject); +begin + ClipBoard.AsText := LVservers.Selected.SubItems.Text +end; + +procedure TMainBook.SBExportClick(Sender: TObject); +begin + MainForm.Serverlist.Click +end; + +procedure TMainBook.SBAddClick(Sender: TObject); +begin + AddserverManually.Click +end; + +end. diff --git a/constants.dcu b/constants.dcu new file mode 100644 index 0000000000000000000000000000000000000000..afa0d3d3c0156c67eb1fd40d75273ee33f5e2483 GIT binary patch literal 2075 zcmZ`)Yitx%6uvv1ZXdMUjX?wioDzpL($2nkw55S=cc<;Pvk!M>w+pGtbar-kaCUYx zGwo79ApuDoV|*a~;Fm@DA;ARd4-=yi1Neyk@DXE7VWY>>)xGdnt~sa~${joJ>K_)htSS#Gny9MNnNA@q(G6)f$w%Tb zYhcTNXGvn?0z8lc@_Pfm9>2?6Mbu>&sz1zTis{-dwwW}po1F}iIanG%9rh>MS=gItQW zZe6ZUU1ex8>hB)4HnY`GR~=vnwvAe?wyj`$E74MkPLEG=ltc_ z<*i&2g?(b`qI$Qk3z`^=M)^hl3)fHnN)o*|>6MVQ-@BdhZ4bZ;zrMv}ooTLG)V_D> zpIf%OF{upa1i}92svE<4WV&vD3qn6R=+;OWS0);d;ca7WaD;X&TVoL)N2silHA*?N zBI+_Dm5QL(vlWWdVsn#1Xp9xCgQJcBNpM(gJ)|g`MX2Wkxy?40j}Q8-v1iVGvaC2Y z9w_=5U7V6NtZnOheYh!&HLhU&eMT4|i6qvfKy#64$~oWNR7g31=q8&wGU~UI%4R6( zQoc5K-?R5xWm)UL%QPnAQWd+66Fa`n}#jZLM-yk@8{@?gMCy$B^|Y zSyvUq^yDU0wF|C3`)YBriE1KWesJY9No>Fo@r^JpONG)nYz#JGr{c6zIq9I=xL_(4 z8iqp}3dYhw-n#j_XJFa+JAYwzZjR!_Nlhxi=3*G?e$U+8?1l4)ZjHrxE-vu3P^FhY z{qUYpLP0SodjV8IG$^e^8EVNisGKg#5WW`5edm&_MQcB|39d;2uc;l@gwtSpDeUI) zF+OTSG!%)_<#I_ktBE3tV0<|j>S(Ec9Fzm130LqD{E0y0?UY;UXj=LV9f5!dx!c`t zDU1l@Lbn~e!ia>y{6byd;;5l}047_|?Yf;|)QDVdz&X+e`5bol!%$UIFWm}UOciJ_ zvJ2kqi_}6r3{l|Xp542%FS-kzU|hP1|N7&fr!F1s!Xw9}q8rtxU5@l>hp^U>ZXuf8 z^%>G3v^X=bl1+|rg^1N1!vuyZ9q|0;li)d1nO0E6oQ zhBp9=PypOUfY{>ziA?~>4glc^fOIE7h5^{)1sL}OJiP^A?>2ymZh&krK&}s + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + + diff --git a/main.dcu b/main.dcu new file mode 100644 index 0000000000000000000000000000000000000000..017bc3c2aa8146aad3008a28d03db22edb32ee9c GIT binary patch literal 33708 zcmeIbeSB2awKsm|%sD5M$>h}`h6p&}0!=ZAyn2C)Hg6LNCLtsf6wBL?%o`3#oS7(C zv58?69LGu(uU4_(mHyOfuZXsi7K?x{+^QEW_F{$m=)LMCMJcqXhdpQSwbov1uf6u#Ywfeone><-WIfv}2yZ+w|4M=WJtWNSw5|4r+RHk<(cg5> zyHbd7u+6{v-fi=*6x-6OL*8&lAo^z2yMOjOJXIaxj);o7e@n!l;i>6pk8woE@|{Zp znPuiSZ?BCl3pmP5jrRTNtAT*Mw!O0}wy?_=S!;d%!jA%%m>QHd`(h+><$mWswzj3W zcC<%h-u76O)D2|URkSoz&8uy=wyL6GQAKnA$5&PcvMZZfJQa0SbqlUrR8iOB{%rpT z+X9&l3!3W|c$#^;j^wL-t!?(GFLH}7LgQu9?DeQMGu+eLzIULtEiD#}MY>vJM8(h= zy{$L-V)K07wnzVPXudzK(bHVp?(f+9<6orv?Eo6X-nG6+^q&_NhW(1CiD+xLPYgp& zRXEhSGSWsy3#2ok!y9SK%zE#EfYYPHG}MZy$G0XnW+>%ajZy$gYn!d!7ma!YK0XaL zj|wI_-}o|+cYXcxg)Q!;#qNgcW_NRQ?Sh8=)dyh#;0@FPLfL_;b~k&P7A$^=;55cs z>v>IU-@LfFYC(N{MMHH>AB;%!mS%U;jNJgT05ny$csvUlsux_}FzeSUuFk;C1P;nJ z2YumiMPn`VnQTu(M=a!DTZ@^j_Qt$-@B6_&2Xa`G2n+MtQ2bqOp$EwX0!x!j@G>ytjVZ zx%EtIn-X0c4Tn}TFUqQk_QNMeo3VAU#b`z_w+@s^OCny~i&y5>Ko1~PfQjN5rZ)5%aEPes81 zwe2x1dT;nT!si-zce{6G*w;3H2zo&~6I=&0^u^>D`lfrxF&2e%SO{l%C%G((Wb+nJ0^{@6o785`MqvQquG4p93A`CSr90eG)^=)H*_dVD^ zr@(l%?QOm_(NuhttV*nhNYW*Gdxo#-=xUGsI}vhpLRqyh?2Gv}keE@b_Kn_lUs#tE z9vFKYbmEp_BvOl_UeT(F3;o$chB!C&>ZgGmWRWgfeA>VtTKe$2fzd;dWfkGhptrdr z5-Wf$Xz|3_%yWaOTG>(AvBr94!Igd)L34FS&^BQbnO!3-JvQmGfKtY2dryCni!tzy z-EE;5^bGr2V-?}>>Ye{}UY`s`s_N)m>*>%#xgQO%@alc-UEGt?+3Fvxhyw1^0HrxpG;gVpvw%zghq$uV?>h0WjpDZEybr%l+B z6MxP}1gq?d#gH;t=yiCSJAJ-3j{56+kGUv2n^5(?jUwd8H64-FoIyq&j;zjoX!H*$ z)l&qhXeC$sm&eO~PgWx8O+P%fN}mZrU=~7w_9~?8NJltodu7Eypg=VuBdf8_8}Y7= zW)OAUaO(AN>yBIJdE48i}ZP%F4P+AkX>vJpNK<0BbM#6q)37I0Z;^Ltx;mlHk3 zicQ$Z&?5A?h&0yBiuKs&jbJ2|q3Te5N1N{-hH>jnCK4&d4lSK+kjgzJI*G_BdM)yX zL)4(j*N$vcO!O4nH~FHW+hC+Ch>~I?J|`;)pE44TZ}8pPN~BB7BT*--jR+}2tnee| z!%6uD57zY!Yf|a+cSL+l0``Dt;-@D0X7OxIFhd84mNHJbqPHs?<4zn25j|y`uwYF` zYge>uSjQU0*QTzbTc}COkeh=Yw_;+v;Wb1`ahdC}JFW_b!fn_2)~+S$L{D=omSPw- zg|Db0ksVgS-wlWT`0)l$VA9AZJB6ED-Rw9i}Au%t-Qunp-CQne4f|Mp~|Hxf! zJ5m23g~|dO3(K|bc;<<5&whp)UVf2=*sO-g=YLL(^39FZC55T^SE5~Jrs*MYK_nCi zwf~kHq>P0c@XUaH9s*4CRcbP3h>U9AEumH)HN>u9FSST9B>9Re3TRa#Bk8jmmX0IS;<71-Si-&>$ z+mA-)6AkWc(A4E~9TAGm1T8UCceLKr9E$m>!ro}Ko|++KsQl1TbDt%{DAX$j>ZPfD zf=BIh84+K9I^7;0sEoItjxGSU?dvaK;4W_RX9~?T*gb?DhMqyy38WO{qOt1X!W^73HUKZ~> z@EV4s@|Gdy`r6z6+gE)xEV;-V3DIGU`gGd7Hrf&k@n^R{Cg;GK3&W0!ro8`<-&!_v z#vuL$91*{Y$7XuwpZ@*5fDJnpPX}1$JO1%R06X`Hrvs?XgH7FCteBmS&9DwH znxAvlV14h+q$iL;ievLaezVs*P{d?4()PTn?W;~q1K%(44X#w-Sx|q=f}7~Prm+K| zp{Xu*B9PHswYIIy&;es9<_pqkJM1 zK$udNtkOISR<6P{|Gmg{tv?MW^#y#9Ew}%)!!K2?jrorKXH(dpfruK3@%h@(Sr_%& zs&G7oY#Khcv+%s%*1Q@{2J75+{ft3>8crO-K5u)&hSoRy_KNmsh%^3V*5GL@2;N&+ zbtu~DjkN~9{5bO_tREGNJsL6)&hJ`%UlGBn5$McBqYQxJR}7(kxv?tfjhy=RORECX zJa3pC#|4yfs!q9~#M2g#+-pKA7KX=j9XsntE9XFXbjJ?^5_teW0x7S9YyugtQs-+A z#De@lg^_?Dw+p1H2RSN9g_yJ~)(`<`HB;@f%f<}`Y+UZ@P9`?9oEB#F+IBAuOGQz~ z6_JQ{ZB;n3^NGE`4P;>u^o)bYc(mpUNuEfT@Bf*4q$42Lc*9ZO&!}pxZEt0IWa~Y1 z10DE}+aE&L6*MHZ>vXP&H`btbi-UkB9~N9|N2HCR^cK?@m|f2L$G(KOdHFW?9f3?H zg)K?M3=>;jMKtj6t$F3zfW3TldFoIWwCk&rF=dojBg}CeL#TENM}G9*f87wsD5se) z>6WD{!z{JunZ2`Vd^mGL^jsJ2e#XuNuwwn6|17A(PzTjINqzLDC%W$MT|H&@4Z>vp>`s^spENH% zbfe2g59b7b`qy2NLpL6BnZhV@0g6q#Z<+618uldlWPynlK$Zt|wi$@tUnk#85&ko?a z|H|Zunw(06qIvh1vZAI2lYkPh*dMg;l zrygZ?4^oFa%!(JK&Eu!yHHuIqc82rqiYu*-pEl)>v$^DY@0!{+fA!y7mXN>tjLRD9 z==9r#C_M?2C2_q}|O{Lp^&+M^>Dy=i5>ZqYV+H?g7$s+vJhh{mQm4 zi=-yB@;kggPtny9!thD686(_VR~5_GcGO1$m{?1Lu#Amoz?IGp&FI*ac+;^BX-BN> zi1=&Hf9bNg^XCZs-ddbi(-jVL{)%+sr+(lc{MeS9sjM;LtMhiXw+6c<8vnu!Z2<5P zef)mK`*UpoJO0&`iFCIbF@$@xzhU9eTg@U70r~uN|AlPgP1i({vuJbYS9W|^#BFM$ zNt|TQ(X@6N6VzM@qjASO%VbGrS%%|jtR^>t77?1)shs^1HagSnn*DYJb~@swLvMcW z-2Hdz-EVX*q+H)n9pv*QWU^v8dMgJqKNuwSLc@6enn|45$-#fpl2-4VE{}Ik_c2UFrUc zSXZ0WH<>^rZ(fnQo)L4~19*nRmO9#fikR1q>@Z+6#W&7IoAqe-Y2rFGvbNwd>FHk6 zi46?BaO+NI&XsAH+2kI|#I#Cp)Q5u+dxOY!qPa*C^R9C*US8GG)Z}jPu-99H%N~tI zaPSbo8KuAB90S#L=5ILVN(Z$vf=x`&-vF!ADo+_h^GY05cXG#(Nu6g6ZOoINGD*zT zbi~?iCzf`D#cuMG@d|(L%%38q1bA;-TXWY+@*yPq2woy}=aCePIXR?sheJ$tHGV-> zzRKv%Jg+H6u2|X8MF&Q$H+3r{{2GJDWMd?rOO2(30}Dh$pW2m!*rpk5sa=^OA@(C} zyr(aRXqVcP$pxA#VFS)1Qa6Q0H>o_Pg$`TsbVv`@oY(rbyrz_jVD0zej1+I|)X}98 ztK(wbrl<;D-kpVbCR~ii)Llh=3!W7Gc+3x|-Pwq>;9{(%Fj!UT!^?~6mFlkHZ)DMn zc4^AUoR2Ta?%c0c)U<#by?FFcRm>))Ck+)-=i6iv+5@UQImGkSx8R{Yzsi$AJQuaR z$sLJ@UX*a-XMQc4L){d!1IKRKx(Z8*T+3RErPbKbb<_4z$SKNM)_SdA6K?Qmi z?1h+fg2hoHGmmzbIZE&xt$*6#6n8jE?8cWJPU%&2 zfHMzY)LDE8BpfQ@Ly9oY955oR&f*I2=o<)U@xsi~G<73=c+MuN)L~9E&XZrsr5UCi;yjtIloC7N z1vyXFgKpYGJ5O$xO0!Zo3eJ<8G6s8TY^WoGC_af)XL(m!~N=>iM zlM6Bbx?8H9cF9;tINVu|=UHFq7GIk%*PB_Ai=!iYnZ{EMEpoweb7n~vxjFyhh4y(u z&W@!eN*$tSZKqI^yS&8Ku#!8iFfX^Y#KHHNcpk?_N0?XCT7s{Y)~ItW%%7^aAbLxu zP&d1^M8Zg;LPJGsNe0e1V_qZxoG(lH3xS}FheH8u6@pT}x3#qzL2OAjLRxn=4(NWE zQ;w<|xMg^SE7k$f{>`-rf&^d@%6CML-6RXb(E_c-|6iIdki`JiP{I-`ryYc~3WY~u zw^NM7QpFimErOma&H)q!o-8h)ZWYvQff}a3NEZ?l%JYQ{by?67hJ#VmjFF=PJY@h- z1S4k@Fd}5YJ;$J)CTLm11;{3-X=4I_bb<0lF>0canm9^;vkT_TF$I_m!IU~?FgBh$ zX0f^{dCX-9J$saMP+Qs63^ek`JO;A_QirM{q-KytMn($pa6WypP89f@XldjUHYF)} zB#)uYi6n<%j7*}oFr|`Fti_OALeCeliIGgyR;k%UMW&{c(TsJ3e4@5aO(?2NrCjHIFtNQ;?p1GS&jw4xfzoLBTQYKcWhXqiPF%J9^pYNh8E&8kLnQDqs~ zg@>8p=|#m4%P*<`Bf)5v(K3wQKusDm)28MO-|&uA`Z zN;ImpVVOpq1>JjD*T#vYgDLiZa--m#W(d$?`x1feYXzYt@ma!cOO#)b!Ij>m%aWF zivG7jXkk4q?tj%(f5}vT+Em|yI`vg9O*}OS!LCz~7{43XZ4f6gNvxLm`g;FzO^~e= zCxAliir(Ya?D#dnCf%nRnVf|CLZX`@QKJ4#qUBVgV6eHoe+=WhpfzA6Z{Ba=BK=S< z(Q?7R@y;8-`!ZRWw>}c2dNaiO6Wv7Pd`b6bjY;?M#P3y^$9H95BzE(V_YBNI;t}s<;o=8M|9MYK0CxLRwaKp{XpM(O;V!eV>Up_M2vpovZVX4 z#@TW>l{i%C#6DFfOhl>1|H_F$j%hiEwyZjR&y9;0w{6S`E52l|-3c~RoXHk3lonz{`@cFkl^qMLG}-hH1B zEf|5Rpf;gQ$$a`mQ6KS+*x-$F2S`HSdfXDd#KJ@@`~E(rAJLZKYF^a4|5W0SiBpNY zD0%Whmpl8g*Xrhg34fSjJf@~MGR!Jr`ks6CHLkLlD2ap94h-d7jkL$EAgfE$;ddENb`(BBI^(blqx{8*dK`crH+X)iJTU9RM* z_}{YQzo4O#mlGw?U81={;uM@xV{Z8@@jB;ewk2w83ESYpS;>~;*}tulIJ)Jyj&^^X ze1NQ|5ul5CP0Sj+ z-j!@QY$#cO7&Nx1IL&>~tZDs0qCyivrM{)BTmKf3U>}Y2rdj9uH;GCiI5A~#k!!&H zW#UnC$lhPm9igdnU~mw+%Cu4JdlEfNKX8w&g4riKzKQrou>bUT?`iq+pZ4An8;N+& z(k~|;xpnb%8{A)DnrWh2_QRXpUvQ(>@7I}3a~&K1wU%S71NC1F?Cbh@!hME;`tscZ zt&{HkeUzFQMO(hh`T9+pSI3@5;j84OtFT1ip^0;pA@+br%@B7xVS+^Yj6Ow^!M}SSb&miD$yjmu69upUAXHt$WYheLUkdYPVPSPr@_Hp z5>n(}wlME3*40N9h+}skI2~OQ`(8PZ^h&vgwMBK{ko`(lQM1nZ-Ep7Wg6c^D%8BJpf6cnH>cp5idhOLOoL$J@q~>b5UleQa2~@q7$QD~cuc-Qu+Edic?=(9h`5t@x{ZDa)_H84 z$M7eHh&zbK@ChziZkayjHdoVk`7|&7q#wVRccM{iEsZH*%ZOO2W zi@G~{eaN1Vp3vy<0|)r@%BaoN9PWq}N5AWu46p}xQ?SUDb404lhZzR z*BsE)Z7O!+w88unOsAdG&`Hpchh}~}l<20TYdkyQ0k2I%vCTN!NB2pXH@=x>r%8!! zgT|R=jleYP;!J&w8g2Rq;FLc*0gnsVno{~mz4~Jle!RP7NJ{doUM#fV~Vl%ZS=usK8d%DkIY3 z;Bt^&!L<}}>FOu>Ew;JoUDD3X6XH%s@B&09ZhZNoms(I ztpB5EF;qRmsp=ik$R_m&7hJ;BJB;c`>Jff~3H%Ufvw8#%Q?Ccc-I*5bW*xkBkq!ty ztOMpi$@rU~4IL8U)FJKH$fh9?4i9U%o7E$Dn0o((`QK>^KFF;18%>sJatRlFijiN| z$fm9c7kn9H^UMX`VxxT#w2{n7_+)$!?q>A}9;RLu)Pv;im&uhg;fv|;MZ0R5XTdSl zGK5nt^OQz5sY|$FhEB$x2im+82_B})ugGtQ1);v9G|b?%h(W0mJe_!Najc5G_T|d}*1W;o#egnF1{05ah zDJm!81n>G7{CyX2W5FoF1tsH+pd~lchJ@pjgrHDz7`dOnQRx0sj(z_dx~v12VWmWz zU}!rJMT&Gnq)Iji8!J9a`0fn`tI^TmBHu9SZwq34P%+B$*ZI@eaGNSgwO_KoEPKC zYM_1~JH80p_Eh;$=J#LguCquz_!fIpRK#3=qxJvzZWDYi?V&P4Dgk zLOK22mf&Wb-nR`-Yuh-USV!1vcZ~r7D)^zt zfRp!A@<=6cmW1h1pl=MU&a<%k`tQW-e(1p7=TZ4HD1tYnOfJ{j%sp4*Hqo)#i)r!c zql#U^hmGz2k98e&3zVd`&EPt6j^Uez6186(v##3tTL$T%Q9W!_ zj}QZFq%nMKkd6~cm&MN``riXmJ(6J0-&cV3`5iBO@PUi}@&>;OD=Tx2^zVZYUfA(G z^xIf3hnPMk{IN~aQn zcD6u$;L8oIkCt})ae%O?1EO1qj!Uc4835I(-z&e@j()FZFze%cS|1!oU#hsSz?XwD zZzSfL>bhbTemScisDQ-yE@N#%_)RMQ%tpJ9HS1)59*v!J7_zU3f=KE2-kT0jRaqN z)OAa=%!O}~@K;JYBCcuUU8NDVhEwz5BS<0|C}62D=8m!XF~M;xcm$sAX+ z&l|yn;1|M}mDQcGwXPzr|9DMD%v&RVWgPXn{FoqDEa-FLPf7%1jEA?S_2$AqG&Rek zB_xo4lV0==TATke-x^wq3~xi}y`^)S8Am)*ReC;3CYu(i$J6MF_?YFj^{J0#2;J|+ zNAYdEk8zp|42Az?Hwqb00)KCg{;(JY4)q;4K33_n^}fzNl1e}ie)zTx0@#7enUpM$ zz5a3FQ;5B5970$7^aC$g7@9@T#F2!u@!`W*t%-eoTOpLPY(YXnh61kdWw;7&r(#~P zs9b6|V$-y6^FMKIr zq$u^k8s8W#Uc7W4`3|im(|6O%Z!QO}3BP7sOH-+aDLQ+_AM7Jvz154~p%d>FXvg!4 zCm4#l*kO0X74$}3?Hw#@L|ypy8ZO{6@(PQq_}eT-EQ&%H|+G zMWe237r0^_qzHcK*ah!~KlSXFPGO(kvwsg>w$Op@2OGES!JcH}mi_GhCcD4I?g!bO zb}R{enLxWd)0YXfRZ_o9z~@6F9QjlGA)hArV0rE27{|uUKh$qCa0H3=eKE8!4l=r` zwQm#7>l4gAR?y})`?o)S3x>JkVEo-X9NL$EQ!sg2eF9Bn{5;-p_1&H-+Jz5Wk{jsA zw(ovWUVaugCYJWOpTnR@_ANtl^LgWy4Vgvj8eim5*Eq-n60P)iR}7)IO8kUc`LDnm zATlr-8Y3YDYX~y5@o#*XOJtVVld5hl8nDlPlAD=fDb%Xln$0wS>@ywx>$^mpaQf#C zZ$g&3fKQC_$3M6uUA51NG_|68K7AXALp)70uC=jI`sR67SIV!oeU!Gh!FSs?cj5gE z!XNWh$~XM)4YBa8C2U5+F%^5C!gekZgHL;}lTOagelyH`df~3`$ofkP?OPgrJo6d0 za|=};U7R?bz#I^2h*M6$h*hVIp90y^yB{+aoC|bP7pRfBcRP;48i z?=aPG3=+NcjXb`CLlgBI1O8ZjkNaGSCA;@`7+x~|A*3W9*pIy!cNT_7Y$gpEBKD8T zUZQf8@$O*yo{dbcL@#^Gi1l+A@)EriPa$LA&mW9~8%-GDQrI+y8}j(` zF65*<{%GxjS1@~%96o=$0ILgtSN#?$enC}T`Tc7 zPw>7GRi1n4+p{C|&MS?LkG@UT%+yV3m)SKt(VP0wSucIV%98GMy>$tBgz?N-nCLwM zFVnIr<51HcV^Kd#T?g6p?Wq1mD%tw?&`z~AvRkjQ=-n6e74L+;s_SVM9AfE@A!TGs zXMq<GP6@}6boP`m75y0CAyhkM<(9nihsVn7Gc=IaNv1uaG%&>NtPJRlG( z5xgT+r%9a-6=DWZ>xphMvpx;W_UU-~9gex>u=+l7qVtKrV8_KjQ`^}4CZ_(L-gj`H zVcEdS#OtQ0#6-a2^u2EH{)0SAFFm|*>A{Ulk8E6ebYuO6#3}O1`4&BNJx(&Oi+`}L zoH9ZA1SSJrx^pz(pN?cF|A+y1zd{}3%lWr)r{fGEaq#a)u#MU%_V)pmtUt;`*b=|z z=U?ul$(D0W-m#^}A5GSCp$7R#vW0)+d2H#2kM^!RCuBdkr+3{M6nn?-jTIepA3wVE z!~gZ+<54<1d4ny!6IZh;)E7=nOX6!>5p-fM82(heG z^)*iqE`;Eu`=If;iR#8D)Ck}hvbyON5KjSpU!cn7mK%_*zP`7BRN<7BPOGt(@zPOP z@}jGeoLBWNO~)at@j=buo1e{{m)XjfA{cV|$~x^CQbJ8pQdnu!EUr)r8Q5KPvMUlD*Nl@-^a)E>MsjgU@d&A&O~Z~kAIX* zOPCh$K;l|Q?{P~cEjD^yZ1RaYiC(scE$>V`KmmSZpC%VH>o;5fTHnGtb;Ua9m8NxQx z#Af7_VZ9wrWuq`P+&Y)di2YGRYM)fBQ?*bEma`#iavQ}B8>Pjr znip$3af{kwh=HiHMB@#*f!@?RcbgbYrWwlcmd*gZRH7--s-c-J3HEvVA1N3=jtNlr zk^4-+JWqnAOqNO8}a)Sm0AHJBB6BWZ0`HjX!B93c7kmARPilhioXDhan9>eEp zcBDY*!;tv4h5gLH%~J|~bHsNVjbu(Xer-Jt36Zyef8-Fk9Td`4H%)4|XOHVn7)$#T z8D;p(e6He}&>CMG+v-su{SN5E{?yBo<_>@CR{XiZCHUds67BayEQ8_e0O3lvD@7zw zj0SbsKax8hHLVf;I3i@>Z-STGt?rYuEwI0;44Wpky z(cYOo#vpgxrKgK+M5jcd?z)B8B)-O2Qykyi#g4LYhIJuvm-$>_**=8sb1FM?FI^Nh z(|2^qyUo96T)vFLTV6d<*aB>~?xmtgenDeoGG-O`W-=Xiq@ z?+)GuiC=TZ)Qoh);wR%WRljfSJ@pV~9^XFV^QGlpy>B=b7>C)ssy(3^8S`4*m`pk>$_JUUfzrZ2uz?vW^?8JzM%WCg60u(} zO;74G5tGe#F}lpgi^$}o<#)&@Whd&Q2kDv7*e;X+P$SK`rTcnIiD=okIyYO8*GYn9 zom7C!X6eC2ZII0SX4!^fH?CK4{SCdKIDqSIT!(O_>uOvT;uy<>9LpiA6ZYtr(f=6BSMnrFx-!91FS{(; zr3scz@??uo9&dR~nQV!pzD1s9c@E`b{PDeYxQ?OS=b)cP+uhP+%SX~A%X7+j%SK$A zm1&mQpwEOnAK-1u6w5ALqfoB^?^%>LE5#N|TCrt^G{tfZ?fQW`q)f6bM7u8e8p|JT zmUnEHgEq@6Hp?EH8rlDG#2-UXE6`v?T%_%-vCN8v2L$w4Km6LImi9ah5pSlW^xqz<1 zMWr9?PVu|a4Dp#c;xltWg`h&#)Gj_dPFz-q2AcYl<&UIdO!+kNa51!>1^yg>V^F%p zQfU$DTGOlK)6yN5advSkR^tRJa^N%MH`H4VIH+zHXEH5Ds>j3~Qoh=Lf^|(6s#)S~ zbG`*9jcX){X8Z(*8;^F>1C=Gv-%OwKf8Fyp^z6uzjOqBbp|tkHt$JuMbc^q(yw`WHf89^{PysM$-6FlxM^(H@oS;WRAwm8Cem{$E%pxvN4DC zZ00eCg=m0Yo#J9O;OUXhFZ-aPk69bBZoIX#QoL^hoMj5291v(!c{C~?jmnViGh|bB zA)7px+y!Y}Sg3~!bQxWSjILA}U4{&*av784xGY&$<%vGN2|7!~cxZzylPpq9Bn)Pp?c!1->R;x_&&lQ33(mqM72>)}3`y7EdQe4=u zHeH`1)E>ip_lvaOAxG24ek@h*V}{;T<$BMOKZoC9!>MnAa+XF9q^f@>o$kFOH#5AzMpE ztmeq+N~4%n!u}T)zoOQKC`wYRIr1p%Yey+#EC@^@^CptkKt433z3TXD|N{O!h4E5Qz;YggMeadXPsQ3u-T8P zUIANW$qSWn*p`>TRV#6g5ocQq0c#QpW2p{|e!9W28dmDshI6z?WIDW$QrH^rJSi~=J=!O zIt;eINVk(*agt(}W=S^t-z2;8OQ{;v8j;G707?5HStnWMr2qiX9VU7oE^O3r{iyn3hFi9-M8Z zbY2v{D@x;~GO<%Bkjj*DvCj4+R?ReNg*ZleA@890kXRr+BjqdeFkLyo<>S$491Oll znIdjgUdXypoFY|A1ciSv>pMeZX zTE>)R%5DWKBws27V?H4jNwm?BP*X4|m0~x#Mhh{Y4-!LE&@KxQhHew}%MOZ&6(WiG zyaq{taWBCH*l>^8Y@!_;c4?WAwMi6{*}{+WZp2yX!#Bny;k;Nd?wBOJX3d(BE(`0V ztQncIfIL1UR~9UC{)|zwP$3u0m?;ZO)3fr<%fezu&I4PluSvOSf+&>XP(c)GdeEmZ zuLlcVnBOBQqELrpBvEMSK`s*-dth6ksRs|Df~N<|Ran%6fGgb4gODrS*nu%rje zOjy=~Ct+bl4?Id(iK7ZpXzRf)LGbrr(;)_Fp6QP}Vr ziMscm-0U8lEC~0+iF)6?rD$9u3ioay@c#RJ0OyIqea{j2;QfyPoG%LZFDBlH9<0ym zk?^6;gX;)<_@T`J8${uuW7PO34_lyfqbNN5If0M;WGcWWQTWMeQu6V~d{U3(5rxNg z6S(#9khMozBnppzMBo!!i$J|W6t+G`lAnB{AChkrg(o%=__HUU1Gq#Kp4?2}Q$KqZ z;4)G8*=*|QnWuK+}X5kJ|c)dsJ7KMN7k?s_Qw|b=YqVP_SbeAX` z>_JQx-tCd@VfTAQ;c$<1pD6sH2S;YYksj&CqHwfFdJuQ4CsFu#Gu>M=#7C&Su!Zge z+vsk==^Bc3@o6d^y-a+L%G2UYR0zB1KHK^#6_=frUZXN(J-~~%saS12M8(b4_jvI> z6vCQ@-o{w@_sTPcHVQ>pmewvY;;h3-Z6#k^R`3ojK(dx#2QHQjgE zZ>Hj`eJvFaOt!A05;H-?*o=)-{2@vA(u~bie7RhDgv#2CZBz)`>F&#Tnio5$Sg5>2 z#paA%yx2{}BN?yq;x%3zpkhnL+q^i$i}$G5mhnC>KB7YSgzgqcKNUre(^UMt*Ls%9 zsSb;RV!BI_seHtdNk!E-F_%h9=4dK}v2^!k7Euw(oJhs$%S#i2= z&Pr0z`UC4GDxb@Ggo?Z^bbmE#I~9=nG?njV?V#e`W>) zW*{J z%1hG0fnB(EOMBJ`ozo6TP0HKSi?+9={R3}Hr%>*e29Duo!%Z1DAdN}`esnqrJJJU} zl2#Oe>2qnW@`*Ip{<$>PI`9eIPD?%Ft2cmjR(i*NR+=piq|38KC0#xy4V;y55}PS| z6(v*lWe()Zp)4g=zB+$kl>C0aGD==|`G731b}1HlR1w}@JY6(kkz2;2_R)CoPMiQL zZlh(3RFNihE-I3biAs^Y&^k~gFSeq#I1ROA8fq3hYUy^=);Um%J5W2Hg_mEiFQA z_5{?{PDIUp<-kvz4a?Du`=^;8tw*TI|Yd75uqGB{;B9A^YaFDASY{2wF@`Il@v! z!7`sV;8R=z{@u*6UBGrJWdnGjMA(gl6$Dz$o0Niq%^alVyanJk>JL#;5d>P&+ZFr3 z)3~0aRxV+Of(Q&1c5x;wZ(+BRKkyo-9suDhi9#b%NIe8x`CCW$2V*~vh o{2but%GQCiToe|$a2_35($Eq9dUqOK_JPba7oeP6RtVnz4ZbLB%>V!Z literal 0 HcmV?d00001 diff --git a/main.ddp b/main.ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/main.dfm b/main.dfm new file mode 100644 index 0000000..5a1f0e3 --- /dev/null +++ b/main.dfm @@ -0,0 +1,1696 @@ +object MainForm: TMainForm + Left = 370 + Top = 349 + BorderIcons = [biSystemMenu, biMinimize] + BorderStyle = bsSingle + Caption = 'Winfragg FUSiON #2.031' + ClientHeight = 57 + ClientWidth = 270 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Menu = MainMenu + OldCreateOrder = False + PopupMenu = PopupMenu + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object SBnfo: TSpeedButton + Left = 0 + Top = 21 + Width = 193 + Height = 18 + Cursor = crHandPoint + Hint = 'Get informations about the server' + Caption = 'Informations' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'MS Sans Serif' + Font.Style = [] + Layout = blGlyphBottom + ParentFont = False + ParentShowHint = False + ShowHint = True + OnClick = SBnfoClick + end + object SBgo: TSpeedButton + Left = 192 + Top = 21 + Width = 78 + Height = 18 + Cursor = crHandPoint + Caption = 'Go' + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + Layout = blGlyphBottom + ParentFont = False + OnClick = SBgoClick + end + object SBref: TSpeedButton + Left = 143 + Top = 168 + Width = 68 + Height = 20 + Cursor = crHandPoint + Caption = '&Refresh' + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333FFFFF3333333333999993333333333F77777FFF333333999999999 + 3333333777333777FF33339993707399933333773337F3777FF3399933000339 + 9933377333777F3377F3399333707333993337733337333337FF993333333333 + 399377F33333F333377F993333303333399377F33337FF333373993333707333 + 333377F333777F333333993333101333333377F333777F3FFFFF993333000399 + 999377FF33777F77777F3993330003399993373FF3777F37777F399933000333 + 99933773FF777F3F777F339993707399999333773F373F77777F333999999999 + 3393333777333777337333333999993333333333377777333333} + NumGlyphs = 2 + OnClick = SBrefClick + end + object SBadd: TSpeedButton + Tag = 3 + Left = 0 + Top = 168 + Width = 143 + Height = 20 + Cursor = crHandPoint + Hint = 'Save address in bookmark' + Caption = '&Add server to bookmark' + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 333333333333FF3333333333333C0C333333333333F777F3333333333CC0F0C3 + 333333333777377F33333333C30F0F0C333333337F737377F333333C00FFF0F0 + C33333F7773337377F333CC0FFFFFF0F0C3337773F33337377F3C30F0FFFFFF0 + F0C37F7373F33337377F00FFF0FFFFFF0F0C7733373F333373770FFFFF0FFFFF + F0F073F33373F333373730FFFFF0FFFFFF03373F33373F333F73330FFFFF0FFF + 00333373F33373FF77333330FFFFF000333333373F333777333333330FFF0333 + 3333333373FF7333333333333000333333333333377733333333333333333333 + 3333333333333333333333333333333333333333333333333333} + NumGlyphs = 2 + ParentShowHint = False + ShowHint = True + OnClick = SBaddClick + end + object Sbstop: TSpeedButton + Left = 211 + Top = 168 + Width = 58 + Height = 20 + Cursor = crHandPoint + Caption = '&Stop' + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333FFFFF3333333333999993333333333F77777FFF333333999999999 + 3333333777333777FF3333993333339993333377FF3333377FF3399993333339 + 993337777FF3333377F3393999333333993337F777FF333337FF993399933333 + 399377F3777FF333377F993339993333399377F33777FF33377F993333999333 + 399377F333777FF3377F993333399933399377F3333777FF377F993333339993 + 399377FF3333777FF7733993333339993933373FF3333777F7F3399933333399 + 99333773FF3333777733339993333339933333773FFFFFF77333333999999999 + 3333333777333777333333333999993333333333377777333333} + NumGlyphs = 2 + OnClick = SbstopClick + end + object SBroll: TSpeedButton + Left = 0 + Top = 38 + Width = 270 + Height = 9 + Cursor = crHandPoint + Caption = '^' + OnClick = SBrollClick + end + object Img: TImage + Left = 2 + Top = 2 + Width = 16 + Height = 16 + Hint = 'Game' + AutoSize = True + Center = True + ParentShowHint = False + ShowHint = True + Stretch = True + end + object LstPlay: TListView + Left = 0 + Top = 188 + Width = 270 + Height = 141 + BevelInner = bvLowered + BevelOuter = bvSpace + BorderStyle = bsNone + Color = clBlack + Columns = < + item + Caption = 'id' + Width = 19 + end + item + Caption = 'player' + Tag = 1 + Width = 90 + end + item + Caption = 'fragg' + Tag = 2 + Width = 34 + end + item + Caption = 'team' + Tag = 3 + Width = 33 + end + item + Caption = 'ping' + Tag = 4 + Width = 35 + end + item + Caption = 'time' + Tag = 5 + Width = 49 + end> + Ctl3D = False + Font.Charset = ANSI_CHARSET + Font.Color = clSilver + Font.Height = -9 + Font.Name = 'Arial' + Font.Style = [] + HotTrack = True + ReadOnly = True + RowSelect = True + ParentFont = False + TabOrder = 2 + ViewStyle = vsReport + OnColumnClick = LstPlayColumnClick + OnCompare = LstPlayCompare + end + object InfoPanel: TMemo + Left = 0 + Top = 47 + Width = 270 + Height = 121 + BevelOuter = bvSpace + BorderStyle = bsNone + Color = clBlack + Ctl3D = False + Font.Charset = OEM_CHARSET + Font.Color = clSilver + Font.Height = -8 + Font.Name = 'Terminal' + Font.Style = [] + ParentCtl3D = False + ParentFont = False + ScrollBars = ssBoth + TabOrder = 1 + WantReturns = False + WordWrap = False + end + object CBedit: TComboBox + Left = 19 + Top = 0 + Width = 251 + Height = 21 + Cursor = crHandPoint + Hint = 'Insert address server' + BevelInner = bvLowered + BevelKind = bkSoft + BevelOuter = bvSpace + BiDiMode = bdRightToLeft + Color = clBlack + Ctl3D = False + DropDownCount = 2 + Font.Charset = DEFAULT_CHARSET + Font.Color = clSilver + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ItemHeight = 13 + ParentBiDiMode = False + ParentCtl3D = False + ParentFont = False + ParentShowHint = False + ShowHint = True + TabOrder = 0 + OnChange = CBeditChange + OnDblClick = CBeditDblClick + end + object StatusB: TStatusBar + Left = 0 + Top = 38 + Width = 270 + Height = 19 + Panels = < + item + Alignment = taCenter + Text = 'ReceiveBuffer' + Width = 150 + end + item + Alignment = taCenter + Text = 'Ping' + Width = 45 + end> + SimplePanel = False + end + object MainMenu: TMainMenu + Left = 172 + Top = 65528 + object Files: TMenuItem + Bitmap.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 0800000000000001000000000000000000000001000000010000000000000000 + 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA + A60004040400080808000C0C0C0011111100161616001C1C1C00222222002929 + 2900555555004D4D4D004242420039393900807CFF005050FF009300D600FFEC + CC00C6D6EF00D6E7E70090A9AD000000330000006600000099000000CC000033 + 00000033330000336600003399000033CC000033FF0000660000006633000066 + 6600006699000066CC000066FF00009900000099330000996600009999000099 + CC000099FF0000CC000000CC330000CC660000CC990000CCCC0000CCFF0000FF + 660000FF990000FFCC00330000003300330033006600330099003300CC003300 + FF00333300003333330033336600333399003333CC003333FF00336600003366 + 330033666600336699003366CC003366FF003399000033993300339966003399 + 99003399CC003399FF0033CC000033CC330033CC660033CC990033CCCC0033CC + FF0033FF330033FF660033FF990033FFCC0033FFFF0066000000660033006600 + 6600660099006600CC006600FF00663300006633330066336600663399006633 + CC006633FF00666600006666330066666600666699006666CC00669900006699 + 330066996600669999006699CC006699FF0066CC000066CC330066CC990066CC + CC0066CCFF0066FF000066FF330066FF990066FFCC00CC00FF00FF00CC009999 + 000099339900990099009900CC009900000099333300990066009933CC009900 + FF00996600009966330099336600996699009966CC009933FF00999933009999 + 6600999999009999CC009999FF0099CC000099CC330066CC660099CC990099CC + CC0099CCFF0099FF000099FF330099CC660099FF990099FFCC0099FFFF00CC00 + 000099003300CC006600CC009900CC00CC0099330000CC333300CC336600CC33 + 9900CC33CC00CC33FF00CC660000CC66330099666600CC669900CC66CC009966 + FF00CC990000CC993300CC996600CC999900CC99CC00CC99FF00CCCC0000CCCC + 3300CCCC6600CCCC9900CCCCCC00CCCCFF00CCFF0000CCFF330099FF6600CCFF + 9900CCFFCC00CCFFFF00CC003300FF006600FF009900CC330000FF333300FF33 + 6600FF339900FF33CC00FF33FF00FF660000FF663300CC666600FF669900FF66 + CC00CC66FF00FF990000FF993300FF996600FF999900FF99CC00FF99FF00FFCC + 0000FFCC3300FFCC6600FFCC9900FFCCCC00FFCCFF00FFFF3300CCFF6600FFFF + 9900FFFFCC006666FF0066FF660066FFFF00FF666600FF66FF00FFFF66002100 + A5005F5F5F00777777008686860096969600CBCBCB00B2B2B200D7D7D700DDDD + DD00E3E3E300EAEAEA00F1F1F100F8F8F800F0FBFF00A4A0A000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00EEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00EEEEEEEEEEEEEEEEEEEEEEEEEE + EE00FE00EEEEEEEEEEEEEEEEEEEEEEEE00FEFEFE00EEEEEEEEEEEEEEEEEEEE00 + FEFEFEFEFE00EEEEEEEEEEEEEEEE00FEFEFEFEFEFEFE00EEEEEEEEEEEE00ECEC + ECFEFEFEFEECEC00EEEEEEEEEEEEEEEECDD9FEFED3EEEEEEEEEEEEEEEEEEEEEE + CDD9D3D9D3EEEEEEEEEEEEEEEEEEEECDD3D3D3E6D3EEEEEEEEEEEEEEEEEEC8AC + CDD3D9E6D3EEEEEEEEEEC8C8C8C8C8C8CDFFE6E6EEEEEEEEEEEEEEC8E6E6E6FF + FFE6E6EEEEEEEEEEEEEEEEEEC8E6E6E6E6EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE} + Caption = '&Files' + object Export: TMenuItem + Caption = '&Export' + object Registry: TMenuItem + Caption = '&Registry (all)' + OnClick = ExportInfo + end + object serverlist: TMenuItem + Tag = 10 + Caption = '&Server list' + OnClick = ExportInfo + end + object Apparence1: TMenuItem + Tag = 1 + Caption = 'Apparence' + OnClick = ExportInfo + end + end + object N1: TMenuItem + Caption = '-' + end + object ExitMenu: TMenuItem + Caption = '&Exit' + OnClick = ExitMenuClick + end + end + object Bookmarks: TMenuItem + Caption = '&Bookmark' + OnClick = BookmarksClick + end + object Find: TMenuItem + Caption = '&Find' + OnClick = FindClick + end + object Settings2: TMenuItem + Caption = '&Settings' + OnClick = Settings2Click + end + object About: TMenuItem + Caption = '&About' + OnClick = AboutClick + end + end + object PopupMenu: TPopupMenu + BiDiMode = bdLeftToRight + MenuAnimation = [maTopToBottom, maBottomToTop] + ParentBiDiMode = False + Left = 200 + Top = 65528 + object AMUWinfragg1: TMenuItem + Caption = 'AMU Winfragg..' + Default = True + RadioItem = True + OnClick = AMUWinfragg1Click + end + object N3: TMenuItem + Caption = '-' + end + object Getrules1: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777700000000077777770FFFFFFF077777070FFFFFFF077770070FFFFFFF077 + 700070FFFF800087000770FFF00FFF00007770FF08FFFF08077770F80E000F07 + 087770F0EFEFEF07707770F0F0000F0770777000EFEFFF077077777800000007 + 0877777700777778077777777007770077777777778000877777} + Caption = '&Get server settings' + Hint = '-' + ShortCut = 16455 + OnClick = Getrules1Click + end + object N8: TMenuItem + Caption = '-' + end + object Paste1: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777744444444477000004FFFFFFF470383834F44444F470838384FFFF + FFF470383834F444F44470838384FFFFF4F470383834FFFFF447708383844444 + 4407703838383838380770830000000083077038077777703807708380B00B03 + 83077700000BB000007777777700007777777777777777777777} + Caption = '&Paste address server' + OnClick = Paste1Click + end + object Copy1: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 777777777744444444477777774FFFFFFF477777774F00000F470000004FFFFF + FF470FFFFF4F00000F470F00004FFFFFFF470FFFFF4F00F444470F00004FFFF4 + F4770FFFFF4FFFF447770F00F044444477770FFFF0F0777777770FFFF0077777 + 7777000000777777777777777777777777777777777777777777} + Caption = '&Copy address server' + OnClick = Copy1Click + end + object est1: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 777777777744444444477777774FFFFFFF477777774F00000F470000004FFFFF + FF470FFFFF4F00000F470F00004FFFFFFF470FFFFF4F00F444470F00004FFFF4 + F4770FFFFF4FFFF447770F00F044444477770FFFF0F0777777770FFFF0077777 + 7777000000777777777777777777777777777777777777777777} + Caption = 'Copy &infopanel' + OnClick = est1Click + end + object N9: TMenuItem + Caption = '-' + end + object Server1: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00700000000007 + 7777700333333330777770F033333333077770BF03333333307770FBF0000000 + 000770BFBFBFBF07777770FBFBFBFB07000780BFB00000077007CC00022C0877 + 0707CCC22226C0007777C22222C2C0777777C722C2C2207777778CF62CC22877 + 77778F7672220777777778C78220777777777788888777777777} + Caption = '&Bookmark' + object AddServerAuto: TMenuItem + Tag = 3 + Caption = '&Add Server (auto)' + OnClick = AddServerAutoClick + end + object Addservermanually1: TMenuItem + Caption = 'Add Server &manually' + OnClick = AddServerAutoClick + end + end + object Options2: TMenuItem + Bitmap.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 0800000000000001000000000000000000000001000000010000FFFFFF00C0C0 + C000808080000000800000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFFFF00010101010101 + 0101010101010101010101010404040404040404040401010101010100000000 + 0000000000000401010101010000000101000000000004010101010100000003 + 0101000000000401010101010000030303010100000004010101010100030300 + 0303010000000401010101010000000000030201000004010101010100000000 + 0000030101000401010101010000000000000003010004010101010100000000 + 0000000003000401010101010000000000000000000004010101010100000404 + 0404040400000401010101010101040001010104010101010101010101010101 + 0101010101010101010101010101010101010101010101010101} + Caption = '&Options' + object Preferences1: TMenuItem + Caption = '&Preferences..' + ShortCut = 16464 + OnClick = Preferences1Click + end + object Setfonts1: TMenuItem + Caption = 'Set &Fonts' + object InfoPanel2: TMenuItem + Caption = '&Info Panel' + OnClick = ChangeFonts + end + object Playerspanel2: TMenuItem + Tag = 1 + Caption = '&Players Panel' + OnClick = ChangeFonts + end + end + object SetColors1: TMenuItem + Caption = 'Set &Background' + object InfoPanel1: TMenuItem + Caption = '&Info Panel' + OnClick = ChangeColors + end + object PlayersPanel1: TMenuItem + Tag = 1 + Caption = '&Players Panel' + OnClick = ChangeColors + end + object AddressField1: TMenuItem + Tag = 2 + Caption = '&Address Field' + OnClick = ChangeColors + end + end + end + object N4: TMenuItem + Caption = '-' + end + object N6: TMenuItem + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00770000000000 + 0007770FFFFFFFFFFF07770FFFFF2FFFFF07770FFFF22FFFFF07770FFF22222F + FF07770FFFF22FF2FF07770FFFFF2FF2FF07770FF2FFFFF2FF07770FF2FF2FFF + FF07770FF2FF22FFFF07770FFF22222FFF07770FFFFF22FFFF07770FFFFF2FF0 + 0007770FFFFFFFF0F077770FFFFFFFF007777700000000007777} + Caption = '&Refresh' + ShortCut = 16466 + OnClick = SBrefClick + end + object N7: TMenuItem + Caption = '-' + end + object Ext1: TMenuItem + Caption = '&Exit' + end + end + object ImgLst: TImageList + Masked = False + Left = 88 + Top = 65528 + Bitmap = { + 494C010119001D00040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000008000000001002000000000000080 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F1F3F40000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000D6DCDF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008080 + 8000C0C0C000C0C0C00080808000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000808080000000 + 00000000000000000000C0C0C000808080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080808000C0C0C0008080 + 8000C0C0C000C0C0C00000000000C0C0C0000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C00000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000C0C0C000000000000000000000000000808080000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000808080008080 + 8000C0C0C0000000000000000000000000000000000000000000000000000000 + 0000808080000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008080800000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000080808000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000808080000000000000000000C0C0C000000000000000 + 0000000000008080800000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000C0C0C0000000000000000000C0C0C0000000 + 0000C0C0C0000000000000000000808080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000808080000000000000000000000000000000 + 0000000000000000000000000000808080000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000C0C0C0000000 + 0000C0C0C0000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000C0C0C00000000000000000000000 + 00000000000000000000C0C0C000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000080808000C0C0C000000000000000 + 000000000000C0C0C00000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000DDE2E40000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008080 + 8000000000000000000000000000DCE2E4000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000006363630042424200424242004242 + 4200424242004242420042424200424242004242420042424200424242004242 + 4200424242004242420042424200424242001818180008080800080808000808 + 0800080808000808080008080800080808000808080008080800080808000808 + 0800080808000808080008080800181818000000000000000000F7F7F700F7F7 + F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7F700F7F7 + F700F7F7F700000000000000000000000000DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00EFEFEF00DEDEDE00E7E7E700E7E7E700E7E7E700E7EF + EF00DEDEDE00DEDEDE00DEDEDE00DEDEDE007B7B7B0039393900737373009494 + 94008C8C8C007B7B7B00848484008C8C8C008C8C8C00848484007B7B7B008C8C + 8C00949494007373730039393900848484000808080000000000000000001039 + 4A00001010000000000000000000000000000000000000000000000000000000 + 00001818180000000000000000000808080000000000E7E7E700000000008400 + 8400840084008400840000000000000000000000000084008400000000008400 + 840000000000F7F7F7000000000000000000DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00CECECE0073635A005A524A005A525200635A52005A5A52005A5A + 52007B7B7B00DEDED600DEDEDE00DEDEDE007B7B7B0018181800080808005252 + 52008C8C8C004A4A4A006B6B6B0042424200424242006B6B6B004A4A4A008C8C + 8C005252520008080800181818007B7B7B000808080000000000000000000042 + 630000528C000000000000000000000000000000000000000000000000000018 + 29000021390000000000000000000808080000000000F7F7F700000000008400 + 84008400840084008400FF00FF00848484000084840084008400840084008400 + 840000000000F7F7F7000000000000000000DEDEDE00DEDEDE00DEDEDE00DEDE + DE00EFE7DE009C734200945A290094632900945A2900945A2900946329008C5A + 29005A42290073737300DEDEDE00DEDEDE0084848400848484006B6363003939 + 3900424242001818180029292900080808000808080029292900181818004242 + 4200393939006B63630084848400848484000808080000000000000000000029 + 42002184B50010426B0000000000000000000000000000000000000000000052 + 8C00002139000000000000000000080808000000000000000000D6D6D6000000 + 000000000000840084008400840000848400C6C6C6008484840000000000E7E7 + E700F7F7F700000000000000000000000000DEDEDE00F7F7F700C6C6C600E7EF + EF00D6BDA500945A21009C6331009C6331009C6331009C6331009C633100A56B + 3100945A2900736B5A00DEDEDE00DEDEDE008484840084848400848484008484 + 8400636363000808080008080800080808000808080008080800080808006363 + 6300848484008484840084848400848484000808080000000000000000000010 + 1000527384007394A50000528C0000213900000000000018290000527300186B + 940000101000000000000000000008080800000000000000000000000000E7E7 + E700000000000000000084848400C6C6C6000000000084848400CECECE00E7E7 + E700F7F7F700000000000000000000000000DEDEDE00B5A594005A4A39007373 + 7300B59473009C6329009C6331009C6331009C6331009C6331009C6331009C63 + 3100945A2900AD9C9400DEDEDE00DEDEDE008484840084848400848484008484 + 8400848484004A4A4A00181818001818180018181800181818004A4A4A008484 + 8400848484008484840084848400848484001821290000294200002942002931 + 4200396B8400ADA59C007394A5002184B50000639400186B94006B8494003163 + 730000213900001829000021390018293100000000000000000000000000EFEF + EF00000000000000000084848400848484008484840084848400848484000000 + 0000F7F7F700000000000000000000000000DED6C6009C6329009C6329006B52 + 42009C846B009C6329009C6331009C6331009C6331009C6331009C6331009C5A + 2900A57B5A00DEDEDE00DEDEDE00DEDEDE008484840084848400848484007B7B + 7B00525252003939390042424200636B6B00636B6B0042424200393939005252 + 52007B7B7B008484840084848400848484003163730008319400083194000831 + 9400085A9C009CA59C00B5ADA5009C9C9C00849494008C8C8C008C8C8C00084A + B50000108C0008186B0008319400316373000000000000000000F7F7F7001818 + 1800008484000084840000848400000000000000000000000000000000008484 + 8400F7F7F700000000000000000000000000CEB5A500945A2100A56329008463 + 4200BDBDBD00B5845A009C6329009C6331009C6331009C6331009C5A2900A57B + 5200EFEFE700DEDEDE00DEDEDE00DEDEDE008484840084848400636363005252 + 520063636300427373005A84840031394A0039525200316B73005A7373006B63 + 63005252520063636300848484008484840010426B0000104A0031316B003942 + 5200215294009C9C9C00BDB5B500A5A5A5009C9C9C009C9494007B8C8C002152 + 94002931420008186B0000104A0010426B000000000000000000DEDEDE000000 + 0000008484000084840000848400C6C6C6000000000000000000848484000000 + 0000D6D6D600000000000000000000000000D6C6B500945A2100945A1800AD8C + 6B00DEDEDE00E7DECE009C6329009C6329009C6331009C5A29009C734200EFDE + D600DEDEDE0073736B007B7B7B00E7E7E70084848400848484007B7B7B008484 + 84005A949400398C8C00C6C6C600847B7B00BDB5B500394A4A0052B5B5007B8C + 8C00848484007B7B7B00848484008484840010426B0000317B00635A5A009C94 + 9400527384006B849400C6BDBD00ADA5A5009C9C9C00A59C94004A849C005273 + 840094948C00635A5A0000104A0010426B000000000000000000000000000084 + 840000FFFF0000848400C6C6C600C6C6C6000000000000000000C6C6C6008484 + 840000000000000000000000000000000000F7F7EF00C6A58C00BD947300EFE7 + DE00D6DEDE00B5B5B500B59C7B009C6B31009C632900B58C6B00EFE7DE00DEDE + DE00AD9473007B5229004A3929009C9C9C008484840084848400848484007384 + 840042A5A5006B636300C6C6C6008C8C8C00C6C6C6005A4A4A007B9C9C004A9C + 9C00847B7B0084848400848484008484840008425200084AB50008186B000010 + 8C0008186B00297BAD00BDB5B500ADADAD00A5A5A5009C9C9C002163A5000010 + 4A0000108C0000104A000839B50010394A0000000000F7F7F700000000000084 + 840000FFFF000084840000000000C6C6C60000000000C6C6C600000000000000 + 0000E7E7E700000000000000000000000000DEDEDE00DEDEDE00DEDEDE00E7E7 + DE007B634A004A39310094949C00E7DECE00D6C6B500ADADAD00C6C6C600E7DE + D6009C6B3100A56329008C5A2900847B73008484840084848400848484007384 + 840021636B00181818007B7B7B005A7373007384840029313100425A5A002973 + 73008484840084848400848484008484840018181800394252005273D6003163 + B50000315200006394009CA5AD00BDB5B500B5ADA5006B84940000317B000021 + 390000104A000021390000294200181818000000000000000000000000000084 + 840000FFFF0000FFFF0000FFFF00C6C6C6000000000084848400848484000000 + 0000DEDEDE00000000000000000000000000DEDEDE00DEDEDE00DEDEDE00BD9C + 7B009C5A21008C5A29007B736B00DEDEDE00B5A59400735229004A424200B5AD + AD00A5734A009C632900945A2900BDAD9C008484840084848400848484008484 + 840063848C00425A5A00395252004A636B00394252005A7373004A636B00185A + 5A00848484008484840084848400848484000808080000000000001829000008 + 180000000000002139004284A500C6BDBD00ADADAD0021638400000000000000 + 0000000000000000000000000000080808000000000000000000000000000084 + 840000FFFF0000FFFF0000FFFF000084840000000000C6C6C600C6C6C6008484 + 840000000000F7F7F7000000000000000000DEDEDE00DEDEDE00DEDEDE00AD84 + 5A009C5A2100945A2900ADA59400DED6C6009C633100A56329006B4A2900A5AD + AD00D6BDA5009C632900B58C6300F7F7EF0084848400848484007B7B7B008484 + 8400DEDEDE006B636300847B7B00C6C6C60073737300635A6300BDB5B500294A + 4A007B7B7B008484840084848400848484000808080000000000000000000000 + 00000000000000000000004A7B007394A5006B84940000315200000000000000 + 0000000000000000000000000000080808000000000000000000DEDEDE000000 + 000000FFFF0000FFFF0000FFFF0000FFFF000084840000FFFF0000FFFF0000FF + FF0000000000000000000000000000000000DEDEDE00DEDEDE00DEDEDE00C6A5 + 8C00945A1800A5734A00F7EFEF00D6BDAD00945A21009C632900845A2900C6C6 + BD00DEDEDE00E7DED600F7F7EF00DEDEDE008484840084848400848484008484 + 8400ADB5B50063848C008C9C9C00A5B5B5006B6B6B0063848C00A5BDBD007B7B + 7B007B7B7B008484840084848400848484000808080000000000000000000000 + 0000000000000000000000213900005273000042630000081800000000000000 + 0000000000000000000000000000080808000000000000000000000000001010 + 10000084840000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF000000 + 0000EFEFEF00000000000000000000000000DEDEDE00DEDEDE00DEDEDE00F7F7 + EF00D6BDAD00EFE7DE00DEDEDE00DECEB500945A2100945A2100A58C6B00EFEF + EF00DEDEDE00DEDEDE00DEDEDE00DEDEDE007B7B7B007B7B7B007B7B7B007B7B + 7B007B7B7B005A848400398C8C0042737300428484004284840073848400847B + 7B007B7B7B007B7B7B007B7B7B007B7B7B000808080000000000000000000000 + 0000000000000000000000000000084252000021390000000000000000000000 + 000000000000000000000000000008080800000000000000000000000000EFEF + EF0000000000000000000084840000848400008484000084840000000000DEDE + DE0000000000000000000000000000000000DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00D6BDA500C6A58400F7EFE700DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00A5A5A500A5A5A500A5A5A500A5A5 + A500A5A5A500A59C9C00A5A5A5009CADA5009CADA500A59C9C00A59C9C00A5A5 + A500A5A5A500A5A5A500A5A5A500A5A5A5001818180008080800080808000808 + 0800080808000808080008080800181818001818180008080800080808000808 + 0800080808000808080008080800181818000000000000000000000000000000 + 0000F7F7F700F7F7F700F7F7F700F7F7F70000000000F7F7F700F7F7F7000000 + 000000000000000000000000000000000000DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDEDE00DEDE + DE00DEDEDE00DEDEDE00DEDEDE00DEDEDE000000000000000000000000000000 + 00000000000000000000000000005A5AAD005A5AAD0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000B5B5 + B5009C9C9C00ADADAD00A5A5A500BDBDBD00BDBDBD00BDBDBD00000000000000 + 0000000000000000000000000000000000001818180018181800313131004A4A + 4A00525A5A006B7373007B7B7B007B7B7B007B7B7B00CEADA500CEADA5006B63 + 63004A4A4A003942420021212100181818000000000000000000000000000000 + 000000000000000000009C9CCE0031319C0031319C009C9CCE00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000004A4A4A007B7B7B004242 + 42008C8C8C00525252005252520031313100393939006B6B6B00424242006B6B + 6B0073737300737373004A4A4A00000000002121210018181800212121004A4A + 4A006B636300C6AD9C00CEADA500BD8C7300DEAD9400FFDEB500FFE7CE00C69C + 8C006B6363003131310010101000101010000000000000000000000000000000 + 000000000000000000005A5AAD0031319C0031319C005A5AAD00000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000073737300DEDEDE008484 + 840052525200313131007B7B7B006B6B6B0073737300424242007B7B7B00B5B5 + B500CECECE00D6D6D60073737300000000002929290031313100394242006B63 + 6300D6A58C00FFDEBD00FFDEBD00FFC6A500FFC69C00FFD6C600FFE7CE00FFB5 + 7300AD947B003942420029292900313131000000000000000000000000000000 + 000000000000BDBDDE0008089C004242A50042429C0008088400BDBDDE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000006B6B6B00D6D6D6008484 + 8400525252004A4A4A00CECECE004A4A4A00737373003939390073737300ADAD + AD00C6C6C600CECECE006B6B6B000000000018181800292929004A4A5200BD9C + 8C00FFB58C00FFDEBD00FFDEBD00FFD6C600FFC69C00FFD6C600FFEFDE00DE8C + 5200D6947B00525A5A0039393900313131000000000000000000000000000000 + 000000000000BDBDDE001010CE004242CE004242DE001010B500BDBDDE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000848484008484C6004242420042424200000000000000 + 000000000000000000000000000000000000000000006B6B6B00D6D6D6008484 + 8400525252005A5A5A00D6D6D600737373009494940029292900949494007373 + 7300C6C6C600CECECE006B6B6B00000000002929290031313100525A5A00C69C + 8C00DE946B00FFE7CE00FFE7CE00FFCEA500FFC6B500FFCEB500FFE7CE00F794 + 6300BD9C8C005252520029293100292929000000000000000000000000000000 + 000000000000C6C6DE001010BD004242FF004242FF001010BD00C6C6DE000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000848484000000FF003939FF007B7BFF003939FF00424242000000 + 000000000000000000000000000000000000000000006B6B6B00D6D6D6007B7B + 7B00737373002121210029292100292929002929210018181000393939007B7B + 7B0084848400D6D6D6006B6B6B0000000000313131003131310052525200BDA5 + 9400D6947B00FFDEB500FFD6BD00FFB58C00FFCEA500FFDEB500FFD6BD00D6A5 + 8C006B7373003939390029292900292929000000000000000000000000000000 + 0000E7E7EF00A5A5CE001010CE004242FF004242FF001010CE00A5A5CE00D6D6 + DE00000000000000000000000000000000000000000000000000000000000000 + 000000000000848484000000FF003939FF003939FF000000FF00848484000000 + 000000000000000000000000000000000000000000006B6B6B00D6D6D6006B6B + 6B0073737300A5A5AD008C8CEF006363EF008C8CEF00B5B5EF007B7B7B007373 + 73006B6B6B00D6D6D6006B6B6B000000000021212100313131004A4A4A007B7B + 7B00DEAD9400FFD6BD00FFCEB500FFB58C00D6947B00F7B5A500FFC6B5006B73 + 73004A4A4A0029292900101010001010100000000000ADADDE004A4ACE004A4A + FF000000BD000000AD000000E7004242FF004242FF000000E7000000AD000000 + AD002929EF004A4ACE00ADADDE00000000000000000000000000000000000000 + 000000000000848484000000FF007B7BFF007B7BFF000000FF00848484000000 + 000000000000000000000000000000000000000000006B6B6B00CECECE00BDBD + BD0094948C00737384001818FF000808FF003131FF003131FF00636373007373 + 7300C6C6C600CECECE006B6B6B00000000003131310029292900313131004A4A + 4A007B7B7B00FFC6B500F7C6AD00AD8C7B007B7B7B00CEADA500CEADA500525A + 5A00394242002929290010101000080808004A4AE7000000B5003939DE004A4A + FF005252D6005A5ABD007B7BC6004A4AFF004A4AFF007B7BC6005A5ABD005A5A + D6005252FF003131DE000000B5005252E7000000000000000000424242008484 + 840084848400C6C6C6000000FF007B7BFF007B7BFF000000FF00C6C6C6008484 + 840084848400424242000000000000000000000000006B6B6B00CECECE00C6C6 + C600ADADA50073738C003939FF005252FF005252FF003939FF006B6B84008C8C + 8C00CECECE00CECECE0073737300000000001818180010101000212121003942 + 4200525A5A00CEADA500C6AD9C006B7373006B636300C6A57B00BDA594004A4A + 5200292931002121210018181800212121002121CE00B5B5D600000000000000 + 00000000000000000000000000004A4AE7004A4AF70000000000000000000000 + 00000000000000000000ADADD6001818C6000000000042424200BDBDFF007B7B + FF007B7BFF007B7BFF007B7BFF008484C6008484C6007B7BFF007B7BFF007B7B + FF007B7BFF00BDBDFF00424242000000000000000000737373008C8C84006363 + 52005252420084848C003939FF005A5AFF005A5AFF003939FF0084848C005252 + 42006363520084847B006B6B7300000000000808080008080800292929003131 + 31004A4A5200BDA59400C69C63005A5A4A005A5A4A00C69C6300BDA57B004A4A + 4A0029293100080808000000000018181800C6C6DE008484BD00000000000000 + 00000000000000000000000000004A4AA5004A4AAD0000000000000000000000 + 000000000000000000006B6BAD008C8CBD0042424200BDBDFF007B7BFF007B7B + FF003939FF000000FF000000FF008484C6008484C6000000FF000000FF003939 + FF007B7BFF007B7BFF00BDBDFF0042424200000000004A4A39008C8CB5008484 + E7008484E7008C8CF7004242FF006363FF006363FF004242FF008C8CF7008484 + EF008484E7008484AD0039392900000000001010100021212100181818002929 + 31004A4A4A00C69C6300C69C63005A5A4A005A5A4A00B5946300C69C63003931 + 2900313131001818180000000000080808000000000000000000000000000000 + 00000000000000000000000000004A4AA5004A4AA50000000000000000000000 + 0000000000000000000000000000000000008484C6007B7BFF007B7BFF007B7B + FF007B7BFF008484C6007B7BFF007B7BFF007B7BFF007B7BFF008484C6007B7B + FF007B7BFF007B7BFF007B7BFF008484C600C6C6B5008484AD009494FF008484 + FF006B6BFF005252FF006B6BF70084849400848494006B6BF7005252FF006B6B + FF008484FF009494FF008484AD00C6C6B5002121210000000000101010003131 + 310039312900C69C6300B59463005A5A4A0052524200A58C6300AD8C63003931 + 2900212121002121210008080800080808000000000000000000000000000000 + 00000000000000000000000000004A4AA5004A4AA50000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000008484C6007B7BFF007B7BFF008484C600000000000000 + 0000000000000000000000000000000000008484B5009494FF007B7BFF008484 + FF004A4AFF004242FF003131FF008C8CF7008C8CF7003131FF004242FF004A4A + FF008484FF007B7BFF009494FF008484B5001010100000000000212121002929 + 290039312900B5946300AD8C63005A5A4A00525242008C7B5A008C7B5A002929 + 2100101010000808080018181800181818000000000000000000000000000000 + 00000000000000000000000000004A4AA5004A4AA50000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000008C8C9C006B6B8C007B7B94007373 + 94007B7B94007B7B63007373EF005A5AFF005A5AFF007373EF007B7B63007B7B + 9400737394007B7B94006B6B8C008C8C9C000808080008080800181818002121 + 2100393129008C7B5A009C845A0052524200525242006B6363007B6B52002929 + 2100101010000000000008080800212121000000000000000000000000000000 + 000000000000000000000000000042429C004A4AA50000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000393931005A5A52005252 + 52005A5A520052524A0052525A0073738C0073738C0052525A0052524A005A5A + 5200525252005A5A520039393100000000001010100010101000101010001818 + 1800393129007B6B52007B6B5200525242004A4A52004A4A52004A4A4A002929 + 2900101010000000000000000000080808000000000000000000000000000000 + 00000000000000000000000000009C9CCE007373B50000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002929290010101000101010002121 + 210031313100525A5A006B63630063523100635231004A4A4A00393939002929 + 2900181818000808080008080800181818000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 00000000000000000000000000000000CE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000002929A5004242420042424200424242004242 + 4200424242004242420042424200BDBDBD003931310031292900212121003129 + 2900212121003939420039394200312929002118180039313100524A52004221 + 1800423131002121290042313100423131000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF00000000000000000000009C000000 + 000000000000000000000000CE00009CCE000000CE0000000000000000000000 + 00000000000000008400000000000000000000000000000000002121AD000000 + 000000000000000000002121D6000021310000DEFF0000DEFF0000DEFF0000DE + FF0000DEFF0000DEFF0000DEFF007B7B7B003129310010080800211818001810 + 1000425A630063849C001818210039425A005263840039425A00181821002921 + 3100524A5200524A520042211800312118000818E70031639400316BA500316B + A500295294000008D6001021BD001831CE001831CE001018AD000000CE001831 + 94003973AD003973AD00427BBD005A6BCE0000000000000000000000CE000000 + CE000000CE000000CE000063CE0000CECE000063CE000000CE000000CE000000 + CE000000CE000000CE00000000000000000000000000000000002121D6002121 + D6002121D6002121D6000063CE000031310000DEFF0000DEFF00080831000808 + 3100080831000808310042424200BDBDBD003129310010080800212121001810 + 10004A5A73006B8CB500100808004252940084ADD60042529400312984006352 + BD00849CCE00947B7B0018101000422118000000FF000818B50029529C002952 + 9C0029529C00184A7B0021529400295A9C00295A9C003163A500215294003163 + A5003163A500396BAD005A6BCE000000FF0000000000000000000000CE00009C + CE0000FFFF0000FFFF0000FFFF0000FFFF0000848400009C9C0000FFFF0000CE + CE0000CECE000000CE00000000000000000000000000000000002121D600009C + CE0000FFFF0000FFFF0000FFFF0000BDBD000021210000DEFF0000DEFF000031 + 31000031310018189C0000000000000000003129290010080800212121001810 + 1000424A7B00526BA5001008080039397B004A63AD0031428C0042319400736B + D6009C8494004221180010080800312118000000FF000000FF0018319400295A + 9C00295A9C00295A9C003963A500426BA5003963A5003163A5003163A5003163 + A500426BA5005A6BCE000000FF000000FF0000000000000000000000CE00009C + CE0000FFFF0000FFFF0000636300000000000000000000000000000000000808 + 0800009CFF000000CE00000000000000000000000000000000002121D600009C + CE0000FFFF0000FFFF000063630000000000000000000000000000DEFF0000DE + FF0000DEFF0008083100BDBDBD00000000003129290010080800211818002121 + 2900526BA5005A84B50021214A003129840029295A0042319400524AB500635A + 8C00422929001810100021181800312118000000FF000000FF000008D6002152 + 94004273AD005A73940042638C002931BD00394AA500397BBD00427BBD00427B + BD00426BA5000000FF000000FF000000FF000000FF000031FF0000CECE000808 + 080000CEFF0000CECE0000000000000000000000000000000000000000000000 + 000000000000009CFF000000CE000000FF003939FF000031FF0000CECE000808 + 080000CEFF0000CECE0000000000000000000000000000000000000000000000 + 000000DEFF0000DEFF00080831002929BD003129290018101000181010002921 + 31005A73A5006B8CB500524AB5004231940031298400312984004A52C600736B + D600422929001008080010080800312929000000FF000000FF000000FF001831 + 940042638C00427BAD006BB5E700183194004A84BD006BB5E70073ADDE0063A5 + D6006BB5E7000810AD000000FF000000FF00000000000000CE000063630000CE + CE0000313100080808000808080000FFFF0000FFFF0000FFFF0000FFFF000808 + 08000000000000CECE000000CE0000000000000000002121D6000063630000CE + CE0000313100080808000808080000BDBD00004242000042420000BDBD000000 + 00000000000000DEFF0000DEFF00424242003129310029293900181010002118 + 18006B8CB5005A73A50039397B004A63AD006373D6006373D6005A6BBD007B73 + E7006B4242002118180010080800312929000000FF000008D6000000FF000000 + FF001039630073B5E70073BDEF006BB5E70073BDEF007BB5E7004252AD002142 + A5007BC6F7001831CE000000FF000000FF00000000000000CE0000CECE000031 + 3100003131000808080008080800101010001818180021212100212121001010 + 100008080800006363000000CE0000000000000000002121D60000CECE000031 + 31000031310008080800080808000000000000DEFF0000DEFF00080808001010 + 10000000000000DEFF0000DEFF00424242003129310031293100181010003939 + 42006B7B9C0039425A0029213100526B9400849CCE006B7B9C00636373004A5A + 73006B4242007B39290010080800312929000000FF001039630000089C001039 + 630000089C002952BD0073BDEF0073BDEF0073ADDE004252AD000000FF001029 + C6007BC6F7002139CE000000FF000000FF00000000000000CE0000CEFF0000FF + FF0008080800003131001818180031FFFF00F7FFFF0039393900F7FFFF002929 + 290010101000008484000000CE0000000000000000002121D60000CEFF0000FF + FF000808080000313100181818000842420000DEFF0000DEFF00394242000808 + 08000000000000DEFF0000DEFF00424242003939420021181800181010003131 + 4A0039397B0021214A0039425A00526B94006B8CB50052526B00292939002921 + 3100524A6B006B42420021181800393942000000FF00102952004A84BD00295A + 84000000FF000008D6004A84BD0073B5F70063A5DE000810AD000000FF000008 + 9C0063A5DE001029C6000000FF000000FF00000000000000CE0000FFFF0000FF + FF000808080000FFFF00292929003939390031FFFF005252520063FFFF004242 + 42002121210000FFFF000000FF0000000000000000002121D60000FFFF0000FF + FF000808080000FFFF0029292900292929000842420000DEFF0000DEFF0000DE + FF0000DEFF0000DEFF0008084200BDBDBD003931310021181800212129004242 + 6B0029295A0039425A005A73A50084ADD6006B8CB50084ADD600526384004A31 + 42004A31420042292900211818003939420018319400527BA5004273AD006394 + C60031527B000008D6000818B50063A5DE0073B5F700396BAD000000FF000810 + AD004A9CDE000008DE000000FF000000FF000031FF000031CE0000CEFF0000CE + FF0000FFFF001010100031313100424242004242420042424200424242004242 + 420031CECE0000CEFF000031CE000000FF000031FF000031CE0000CEFF0000CE + FF0000FFFF001010100031313100424242003131310010101000101010001010 + 1000083131000031420000219C003939FF004231310018101000312931004242 + 6B0039395200526384005A84B5009CC6DE009CC6DE0084ADD6005A84B500635A + 73007B3929004221180018101000393131001018AD0000089C00184A7B000810 + 73000810AD000008D6000000FF002931BD001018B5002139CE000008DE00317B + C6003152BD000000FF000000FF000000FF00000000000000CE000031CE0000CE + CE0000CEFF0000FFFF002929290031FFFF004242420042424200F7FFFF009CFF + FF00319CFF000000CE0000009C0000000000000000002121D6000031CE0000CE + CE0000CEFF0000FFFF002929290031FFFF004242420042424200F7FFFF009CFF + FF00319CFF002121D6002121AD00000000003939420029213100393942003939 + 520039395200424A7B006B94D60084ADD60084ADD6006B8CB5005A73A5003939 + 52006B4242004221180018101000312929000000FF000000FF00082184000000 + FF000000FF001029C6000818E7000000FF000818E7001029C6002163AD00426B + A5000000CE000000FF000000FF000000FF00000000000000000000009C00009C + FF00008484000063630031FFFF0031FFFF009CFFFF009CFFFF00CEFFFF009CFF + FF003163FF0000009C00000000000000000000000000000000002121AD00009C + FF00008484000063630031FFFF0031FFFF009CFFFF009CFFFF00CEFFFF009CFF + FF003163FF002121AD0000000000000000002121290039313100393952003131 + 4A0031314A00425294006B94D6006B94D60042529400526BA5006B73B5003939 + 52006B4242005A31210018101000422118000000FF000000FF000000FF000000 + FF000000FF0000089C0031527B00527BA5004A84BD004273AD0029399C000000 + CE000000FF000000FF000000FF000000FF000000000000000000000000000000 + 9C00009CFF00009CFF0000CEFF0031FFFF0063FFFF0063CEFF0063CEFF0031CE + FF0000009C000000000000000000000000000000000000000000000000002121 + AD00009CFF00009CFF0000CEFF0031FFFF0063FFFF0063CEFF0063CEFF0031CE + FF002121AD000000000000000000000000001008080021212100292939002921 + 310039395200425294004252940042426B0042426B00424A7B0039397B004A31 + 4200423131007B39290018101000422118000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF0000000000000000000000CE000000 + CE0000009C0000009C000000CE0000CEFF0000CEFF000000CE000000CE000000 + CE0000009C000000CE00000000000000000000000000000000002121D6002121 + D6002121AD002121AD002121D60000CEFF0000CEFF002121D6002121D6002121 + D6002121AD002121D60000000000000000001008080010080800181821002929 + 390042426B00425294004252940031314A0031314A0031314A00393952004242 + 6B00422929006329180031211800181010000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 + FF000000FF000000FF000000FF000000FF000000000000000000000000000000 + 00000000000000000000000000000000CE000000CE0000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000002121D6002121D60000000000000000000000 + 0000000000000000000000000000000000002118180010080800181010002118 + 18003939420042426B00424A7B0031314A003939420031314A004A3142004A31 + 4200422929003121180018101000211818005A6B6B00396B630063847B006384 + 7B00182929004A4A4A0021212100101010001018100021212100212918001818 + 1800181818001818100010101000212121000000000000000000000000000000 + 000000000000CED6D600CED6D600D6DEDE000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008C8C84004A4A420018212100182121004A4A42008C8C84000000 + 0000000000000000000000000000000000005A6B6B004A737300426363003152 + 4A00183931000000000000000000080800001818100021291800292921002929 + 210010100800181810000808080010100800000000000000000000000000848C + 8C00525A63004A5252004A4A4A0052525200525A63008C949C00CED6D6000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000003131310042635A003939390000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000ADAD + AD00181818000018210010314200294A6B00294A6B0010314200001821001818 + 1800ADADAD000000000000000000000000008C8C8C00BDBDBD00ADADAD009CA5 + A500849494001010100000000000000800000810080031312100424239003131 + 21001010080010100800181818002121180000000000000000006B6B6B002131 + 390018212900101821001018210018212900313942004A4A4A00525252009C9C + 9C00000000000000000000000000000000000000000000000000000000000000 + 00000000000039424200101810008CC6B50073A594007BA59400313131000000 + 00000000000000000000000000000000000000000000000000004A4A42001829 + 310039637B000018210000182100002121000021210000182100001821003963 + 7B00182931004A4A420000000000000000008C8C8C00BDBDBD00B5B5B500BDBD + BD00949494001818100008080000000000000000000010100800181818001818 + 10000808080018181000292921002929210000000000848C8C00182129001018 + 2100101821001821290018425200215A7B00182129001821290029424A003139 + 4200848C8C000000000000000000000000000000000000000000000000000000 + 00003942420031393900294239008CB5AD004A7B6B0031524A004A7B73004273 + 630042635A0010181000394242000000000000000000ADA5A500082139003163 + 94007B848C0018527B000810100018181800081010000810100018527B007B84 + 8C003163940008213900ADA5A500000000008C8C8C00B5BDBD00B5B5B500BDBD + BD00737373002118100021211800000000000808000000000000080800000000 + 0000101008003129210039392900393931000000000039424A00081018002131 + 390039738C00318CB50042A5D60052BDEF0021739C00104A6B0021739C00215A + 7B0031394200848C8C000000000000000000000000000000000000000000424A + 4A00424A4A00294239008CB5AD0073A594007BB5A5006B9C8C006BA58C006BA5 + 8C004273630039635A008CBDAD00426B6300000000001818180018427300084A + 84006B9CAD007B949400085273001821210018212100085273007B9494006B9C + AD00084A840018427300181818000000000094949400B5B5B500B5B5B500B5B5 + B50052524A002929210029292100101008002929180063636300393931001010 + 0800292921004A4A39004A4A39004A4A3900ADB5B50018212900182129003942 + 4A006B94A50042A5D600318CB50052738C007BADBD0042A5D600399CCE005A94 + AD0052738C0039424A00B5B5B50000000000000000000000000039424200424A + 4A0021292900B5E7DE0039635A007BAD9C00638C84007BAD9C00639484004A73 + 63002942390084B5A500395A520039635A00948C8C000821390018527B000031 + 310029525A008CD6DE00216B8C00295A7B00295A7B00216B8C008CD6DE002952 + 5A000031310018527B0008213900948C8C009C9C9C00B5B5B500B5B5B500ADAD + AD0039393100292918002118100010100800313121007B7B6B006B6B5A003129 + 21002929180042423100525242005A5A4A00A5A5AD0031394200313942003139 + 420052738C00318CB5002163840010182100394A52005AA5CE0042A5D6002142 + 520021313900314252006B6B6B0000000000000000003942420039393900424A + 4A009CBDB50052847B005A8C7B005A8473003963520039635A00427363003963 + 5200ADDECE0029423900527B6B00000000004A4A420010314200103142000031 + 310018212100398CB50029A5C60018527B0018527B0029A5C600398CB5001821 + 21000031310010314200103142004A4A42009C9C9C00BDBDBD00ADADAD006363 + 630029291800394A6B004A638C00314273002939520052636B00525A63003139 + 4A00424A5A00424A5200313931004A4A3900ADB5B50039525A00394A52003942 + 4A0052849C00318CB500215A7B0010182100313942006BB5D60052ADDE001842 + 5200081018000810180052525200C6C6C600394242003939390029423900636B + 6B007BAD9C0073A594004A736300426B6300314A4A00395A5200426B63008CBD + AD0031524A0073A594005A8C7B000000000018212100295A7B00081010001821 + 2100315A630029A5C600317B9C00294A6B00294A6B00317B9C0029A5C600315A + 63001821210008101000295A7B00182121009CA59C00BDBDBD00737373001010 + 08001821310021397300314A840039528C0018316B006384C6004263A500294A + 84006384C60084A5E7007394D600424A6300CED6D6004A637300525A6300525A + 63006B94A500318CB5002163840018212900394A52005AA5CE00318CB5001842 + 5200081018000810180031394200B5B5B50039393900393939001821210094C6 + B5006B9C8C00527B6B00294A4200DEEFEF0084BDAD00395A520084B5A5002131 + 3100526B6300395A520000000000000000001818180029525A0039637B004A73 + 8C0063B5DE006BBDE7007B8C9C004A4A42004A4A42007B8C9C006BBDE70063B5 + DE004A738C0039637B0029525A0018181800A5A5A500A5A5A500424242001818 + 18000818390000082900081018002129420000184A003952940018316B001021 + 52005A63840031426300314A8400314A84000000000094ADBD00395A6B00525A + 630084ADBD0094D6F70052849C0018212900394A520084BDD60052ADDE003952 + 5A00182129000810180021313900ADB5B50039393900294239006B9C8C005284 + 7B004A73630031524A00DEEFEF0084B5A500A5D6C6007BAD9C007BAD9C00426B + 6300294A42000000000000000000000000004A4A4200394A4A007B8C9C00638C + 9C0073949C008C8C9400C6DEFF00637B8C00637B8C00C6DEFF008C8C94007394 + 9C00638C9C007B8C9C00394A4A004A4A4200ADADAD00737373005A5A4A001010 + 1000000010000000100000001000000018000818390029426B00102952000008 + 29000008210008080800081018000818390000000000D6DEDE007BADBD003163 + 7B007BADBD00B5EFFF005A94AD0018212900394A5200B5D6EF0094D6F700395A + 6B00213139001821290031394200C6C6C60039635A00528473006B9C8C005284 + 7300314A4A00A5CEBD008CBDAD008CBDAD00A5D6C6009CCEBD0063948400A5D6 + C600000000000000000000000000000000008C8C8C0029425200317B9C001031 + 420000313100081010007B9494006B9CAD006B9CAD007B949400081010000031 + 310010314200317B9C00294252008C8C8C00949C940052525200424A42000000 + 0800000000000000000000000000000000000000080008102100000818000000 + 0800000008000008290000082100081031000000000000000000CED6D600B5D6 + EF00ADDEF700ADDEF7006B94A50039424A004A637300ADD6E7007BC6EF00395A + 6B003139420021313900525A63000000000031524A00527B6B006B847B00314A + 4A00639484004A736B009CD6BD008CBDAD0094C6B5009CD6BD008CBDAD000000 + 00000000000000000000000000000000000000000000081010005284AD0042A5 + D600004A63000031310042737B008494A5008494A50042737B0000313100004A + 630042A5D6005284AD0008101000000000009CA5A50063737300637B7300637B + 73006B737300637373005A6B6B004A5A5200394A420029313100212121001018 + 100008080800000808000000100008081000000000000000000000000000CED6 + D600BDDEF70084BDD6007B848C006B7B84006B7B8400848C9400B5D6EF005A94 + AD0039525A004A5252009CA5AD00000000002131310039635A00527B6B00527B + 6B00313939005A8C7B008CBDAD008CBDAD00739C8C0094B5AD00000000000000 + 00000000000000000000000000000000000000000000ADADAD00213939005A7B + 940063B5DE00004A5A00216B8C0094B5C60094B5C600216B8C00004A5A0063B5 + DE005A7B940021393900ADADAD0000000000ADADAD00526B63005A736B006B84 + 7B00738C84008CA5A500A5B5B500A5B5B5009CB5B5009CADAD008C9C9C007B8C + 8C00637B73005A736B0052635A00525A5A000000000000000000000000000000 + 0000CED6D60084ADBD006B7B84007B848C00848C94006B7B84007B848C00849C + AD004A6373007B848C0000000000000000000000000000000000000000003152 + 4A0039635A0039635A0042635A004A736B0039635A0000000000000000000000 + 0000000000000000000000000000000000000000000000000000423939002139 + 39007BA5AD0073ADC600397394008CBDD6008CBDD6003973940073ADC6007BA5 + AD0021393900423939000000000000000000BDBDBD004A635A00314A4A00425A + 5200526B63005A7373007B8C8C008CA5A50094ADA5008C9C9C007B949400738C + 84006B8484006B8484006B8484006B847B000000000000000000000000000000 + 000000000000E7E7E700ADB5B5008C949C008C949C007B848C006B7B84006B7B + 8400ADB5B5000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000ADAD + AD000810100039525A0042636B00C6E7EF00C6E7EF0042636B0039525A000810 + 1000ADADAD00000000000000000000000000D6D6D600949C9400848C8C00848C + 8C007B8C8C007B84840073847B007B8484007B8C8C0073847B00737B7B006B73 + 73006B737300636B6B0052635A006B7373000000000000000000000000000000 + 000000000000000000000000000000000000DEDEE700D6DEDE00DEDEE7000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000008484840052525200181818001818180052525200848484000000 + 000000000000000000000000000000000000CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D6009473390052422900423931004239 + 31004A42310042393100524A3100636B5A004A6B73004A636B005A6B6B006352 + 3100735221007B522100CED6D600CED6D6000000000000000000000000000000 + 0000000800000000000000000000000000000000000000000000001010000000 + 0000000000000808080000000000080808003131310018181800181818001818 + 1800181818002121210021212100212121002929290029292900292929002929 + 29002929290031313100313131005A5A5A00CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D600634A210000000000292100002118 + 000018100000393100005A5A18005A846B0010314A000821390031526B003152 + 5200181810000000000039291000CED6D6000000000008000000000000000000 + 000021424200395A5A000010100000000000080808000000000039525200314A + 5200001010000000000000000000080000002121210000000000000000000000 + 000008080800183131002139420021394200213942004A6B8400738C9C002929 + 290000000000000000000000000031313100CED6D60042424200424242004242 + 4200CED6D600CED6D600CED6D600424242004242420042424200CED6D600CED6 + D600424242004242420042424200CED6D6006B522100211800006B4A00006B4A + 00004239000052420000637B5A00528C94002952630018314A0029527B003963 + 7B005A735A0039390800000000007B5A21000800080000000000001829005A94 + A500317384005A8C940000000000180008000000000000000000315A63004A84 + 8C0029636B000010180000000000080000002121210000000000000000000818 + 1800184252000808080000000000000000000000000000000000000808005263 + 6B0052525A00000000000000000031313100CED6D600CECECE00CECECE004242 + 4200CED6D600CED6D600CED6D60042424200429C420042424200CED6D600CED6 + D60042424200429C420042424200CED6D6007B5A210052390000634200008463 + 0800634A00004A5229004A8CA500295A7B003973840039739C0039638400214A + 630031637B00314A4A0010100000735221000000000000081000528C9C00318C + A500187B940031738400000008000800000008000000000000007BB5C6001063 + 730010637B00528C9C000010100000000000292929000000000008182100214A + 7300000000000000000000000000292929000000000000000000000000001821 + 39004A6B8400000000000000000031313100CED6D600CECECE00CECECE004242 + 4200CED6D600CED6D600CED6D60042424200429C420042424200CED6D600CED6 + D60042424200429C420042424200CED6D6009C732100634A0800736B4A00737B + 5A004A5A4A00426B840031637B00182931001831310018425A00183952001839 + 420010293100295273001018100073522100000000003963630073BDCE00187B + 940042ADC6005AADBD000000080000000000080800000000000063A5AD0063BD + CE0052ADC600529CAD0029525200000000002929290008081800214A63000000 + 00001010180031526B0039738C0063A5DE00849CA50018314A004A8CBD004A7B + BD0000000000000000000008080031313100CED6D600CECECE00CECECE004242 + 4200CED6D600CED6D600CED6D60042424200429C420042424200CED6D600CED6 + D60042424200429C420042424200CED6D600AD7B2100635A31005A736B00315A + 6B004A94C6002952730008294A00104A7300215A8C00184A7B00102939001842 + 520018425200315A7300213131007B5A2100001008002142420021526300428C + 9C00318494005A94A500000000001008100000000000000808005A949C004A94 + 9C004A949C00639CA50042635A000010100031313100214A6300849CA5001010 + 1000000000004A7BB500639CCE004A73A500293952005A8CBD00639CCE004A7B + B50000000000000000000821210029292900CED6D600CECECE00CECECE004242 + 4200CED6D600CED6D600CED6D60042424200429C420042424200CED6D600CED6 + D60042424200429C420042424200CED6D600BD842100736B4A004A636B00214A + 6300296B8C0021526B002984C60052BDF70052C6FF0052BDFF00399CD6001031 + 420018393900396B6B00314A4200846321000000000000000000000808000008 + 0800000000000008080000000000080000000000000000080800000000000008 + 080000101800000000000000000000000000313131004A7BA5005A7BB5001818 + 1800294A6B00639CCE00639CCE0018315A000000000018294200639CCE004A7B + B50000000000000000003139630029292900CED6D600CECECE00CECECE004242 + 420042424200424242004242420042424200429C420042424200424242004242 + 420042424200429C420042424200CED6D6009C732100847B5A00315A63002952 + 5A0029423900185A8C0073DEFF00A5FFFF00BDFFFF00B5FFFF007BEFFF00297B + AD0008212100396B73004A5A42007B6318000000000008000000080000000800 + 0000000000000000000008000000100000000800080000000000080000000800 + 00000000000008000000100808000000000039393900398CDE00081821000000 + 000010293100639CCE00639CCE00183131000000000018313100639CCE004A7B + B500000000000000000029639C0031313100CED6D600CECECE00CECECE00CECE + CE00CECECE00CECECE004242420042424200429C4200429C4200429C4200429C + 4200429C4200429C420042424200CED6D600CE942100A59C5A00395A63003152 + 52004A6B630018528C004AADF700F7FFFF0000000000DEFFFF009CF7FF00218C + CE00184A5A004A738400293121009C7B21000000000000000000100000001808 + 0000080000000000000000000000000000001808100000000000080808000000 + 0000080000000800000000000000000000004242420029639C00000000000808 + 0800182131005A8CBD00639CCE00182131000000000018314A00639CCE004A7B + B50000000000314A63004A7BBD0039393900CED6D600CECECE00CECECE004242 + 4200CED6D600CED6D600CED6D60042424200429C420042424200CED6D600CED6 + D60042424200429C420042424200CED6D600EFAD2900D6A5420094A57B00294A + 4A0039636B0029525A00216BC600BDEFFF00A5FFFF005AD6FF00429CC6001873 + B500397394006B8C6300292100008C6321000008000000000000000000000000 + 0000000000000818210000000000080000000800000000000000000000000008 + 1000000000000000000000000000000808004242420018425200000000000000 + 0000000000005A8CBD004A8CB50021395A0008080800425A7300639CCE004A7B + A50000000000081818004A7BB50029292900CED6D600CECECE00CECECE004242 + 4200CED6D600CED6D600CED6D60042424200429C420042424200CED6D600CED6 + D60042424200429C420042424200CED6D600EFA52100EFAD1800DEDE84004A84 + 8C003984940010525200104A5A00216B94002973BD003184CE0018526300296B + 940052848C00424A2100181800007B632100000000005A636B0000000800396B + 730039737B00426B7300000008000800000008000000000808005A848C00427B + 8C00527B8C005A738400737B7B00000000004242420000000000000000000000 + 000021395A00314A730000000000101818000000000000000000213942004A7B + CE00313131000000000018315A0029292900CED6D600CECECE00CECECE004242 + 4200CED6D600CED6D600CED6D60042424200429C420042424200424242004242 + 4200429C4200429C420042424200CED6D600B5842100F7B51000E7CE5200A5B5 + 8C0094BDD6004A7BA500105A63002163730018426B0018314A00295A63005A94 + A5004A4A290029210000292100007B5A210000080000314A4A00426B7B004A8C + A5004294A50029636B000000080010000000100000000000080042848C00297B + 940039849C002952630000000000080800004A4A4A0000000000101818002942 + 5A00101818000000000000000000000000000000000000000000000000000818 + 2100738C9C004A637B000818180029292900CED6D600CECECE00CECECE004242 + 420042424200424242004242420042424200429C4200429C4200429C4200429C + 4200429C42004242420042424200CED6D60073522100B57B0000FFE72900EFEF + 9400ADB5E700425A840042638C008C9CDE00949CDE00848CC60029425A00295A + 73005A6B52005A52080018180000735A2100000800000000000042737B0052A5 + B50010637B0010525A0000081000100000000800000000080800397B8400005A + 6B0008526B00184A520000000000000000004A4A4A000000000018293100738C + 9C00000000000000000008080800080808000000000000000000000000000000 + 000000000000000000000000000021212100CED6D60042424200CECECE00CECE + CE00CECECE00CECECE00CECECE0042424200CED6D600429C4200429C4200429C + 42004242420042424200CED6D600CED6D6007352210021180000C69C3100D6CE + 7B009CAD8C0042638400A5ADEF0084A5DE0073A5E700849CE7008494DE004A6B + 94004A6B7300394229000808000073522100000000000008080000081000528C + 940031737B005A8C94000008080008000000080000000000000031636B004284 + 94005A949C000010210000000000080800005252520000000000000000001829 + 31006B84840021212100314A73009CADC6001010100000000000000000000000 + 000000000000000000000000000021212100CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D600CED6D6003129180010293900848C + 5A007394730084948C004263730039524A0039524A00425A520052736B004A6B + 8400315A730021394200000000006B4A21000808080000000000000000000000 + 0000395A5A005273730000000000101010000000000000080800395A5A00638C + 8C00000000000000000010101000000000005A5A5A0000000000000000000000 + 0000080818002942630039738C004A7BB5004A7BB500314A4A00181818000000 + 000000000000000000000000000021212100CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6 + D600CED6D600CED6D600CED6D600CED6D600CED6D600CED6D600736339006B63 + 5200948C6B006B634A004A4A31004A4229004A42290052423100524A31004A52 + 4A00526B7B004A5A6300524A3100947339000000000008000000080000000000 + 0000000000000000000000000000000000000800000000000000000800000000 + 000000080000100808000000000008080800849CA5005A5A5A005A5A5A005252 + 52004A4A4A004A4A4A0042424200424242003939390039393900393939003131 + 3100292929002929290029292900424242000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002118100010101000101010001010 + 1000292118004A3929008C735A00B59C7B00BDA58C00AD9484006B5A42002118 + 10001010100010101000101010001008080000000000948C8C00848484008C94 + 8C00848C84008C948C0094949400948C940094948400847B7B007B7B7B009494 + 9400847B8400948C94008C8C8400FFF7F7009CB59C003163310008420800084A + 0800084A0800084A0800084A0800104A1000737373007B7B7B00ADADA5009494 + E7002121F7000808FF000808FF001818FF000000000000000000000000000000 + 0000C6C6C600BDBDBD00CECECE00CECECE00C6C6C600C6C6C600CECECE000000 + 0000000000000000000000000000000000000800000000000000080000005242 + 3100A58C7300B5845200B5845200B59C7B00BDAD9400D6CEBD00F7EFE700BDB5 + AD00524A39000800000000000000080000008C848400ADA5A50073737300ADAD + A500DEDED600D6D6CE00C6C6C600DEDEDE00EFE7DE004A423900847B7B00E7DE + DE00EFEFEF00FFF7FF00D6D6D60094948C004A7B4A00EFEFEF005A845A000031 + 00000039000000420000004200000039000000000000000000008C8C94001010 + FF000000FF000000FF000000FF000808FF000000000000000000000000009494 + 9400A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A50094949400DEDE + DE0000000000000000000000000000000000080000001008080073634A00E7D6 + CE00D6B594009C7B5200524231003929210039292100524231008C7B6300E7D6 + CE0000000000948C7B00181008000800000084848400BDBDBD00292121003129 + 2100ADA59C00E7E7E700CED6D600EFF7F700CEBDB50039292900BDB5B500F7F7 + F70000000000F7F7F700EFEFEF0084847B0008420800A5BDA500000000008CAD + 8C000042000000310000004200000039000000000000423931007B7BE7000000 + FF000000FF000000FF000000FF000808FF000000000000000000000000009494 + 9400A5A5A500A5A5A500A5A5A5000808FF000808FF00A5A5A5005A5A5A009494 + 9400E7E7E700000000000000000000000000080000006B5A4200F7EFE700DECE + C6009C846B0039292100100808000800000000000000181008004A3929003929 + 2100B5A59400000000008473630008000000848C8C00D6D6D6007B736B002110 + 08004A393100C6BDBD00D6DED600EFFFF700A58C8C0031212100CEC6C600EFEF + EF00F7F7F700E7EFEF00F7F7F7008C948C000842080018521800EFF7EF000000 + 0000C6D6C600316331000031000000390000000000004A4242003939F7000000 + FF000000FF000000FF000000FF000808FF000000000000000000000000009494 + 9400A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A5005A5A5A005A5A + 5A00E7E7E70000000000000000000000000021181000C6BDAD00F7EFE7008C73 + 5A00BDAD9400CEC6C60039292100100808000800000039292100AD8C6300A58C + 7300735A4200C6BDAD00EFE7E70039292100737B7B00D6D6D600EFDEDE007363 + 5A0029181000AD9C940000000000CED6CE0073635A0029181800C6BDBD000000 + 0000F7F7F700EFF7F700F7F7F7007B847B00084A0800003100006B946B000000 + 000000000000EFF7EF006B946B000031000000000000424242003939F7000000 + FF000000FF000000FF000000FF000808FF000000000000000000000000009494 + 9400A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A5005A5A5A005A5A + 5A00E7E7E7000000000000000000000000004A392900FFFFF700AD9484004A39 + 2900846B5A00FFFFF700B5ADA5000800000029211800735A4200C6946300CEA5 + 7B00A58C730073634A0000000000948C7B008C8C9400CECECE00DED6D6009484 + 84002110080073635A00FFFFF700736B63002110080084737300F7EFEF000000 + 0000E7E7E700F7F7F700E7E7E70084848400084A08000039000000420000D6DE + D600000000000000000000000000A5B5A50000000000424242003939F7000000 + FF000000FF000000FF000000FF005252EF000000000000000000000000009494 + 94000000000000000000000000000000000000000000000000005A5A5A005A5A + 5A00EFEFEF0000000000000000000000000084736300FFF7EF006B5A42000800 + 000029211800AD9C8C00000000006B635A0018100800A58C7300CEA57B006352 + 39002921180029211800CEC6BD00ADA59C0084848400D6D6D600E7E7E700CEC6 + BD00423129003929180094847B004221210042393100F7E7E70000000000E7DE + E700F7F7F70000000000E7E7E70094948C00084A08000042000000310000396B + 3900F7FFF70000000000000000000000000000000000424242004242FF000000 + FF000000FF002929FF007373E700C6C6D6000000000000000000000000009494 + 94005A5A5A005A5A5A005A5A5A005A5A5A005A5A5A005A5A5A00080808005A5A + 5A00EFEFEF00000000000000000000000000A59C9400E7DEDE00292118000000 + 00001008080063523900EFE7DE00EFE7E700524A3900D6CEBD00B59C7B003929 + 21000000000018100800AD948400BDAD9C0084848C00D6D6DE00EFEFEF00E7E7 + DE0063635200312118003110080042181000948C8400F7EFEF00EFEFEF00F7F7 + F700FFF7FF00F7F7F700EFE7E700948C8400084A080000390000003100004A73 + 4A00EFF7EF000000000000000000F7F7F70008080800292929007373A5005A5A + A5006363AD007B7B840052524200848484000000000000000000000000009494 + 9400A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A5005A5A5A000808 + 0800E7E7E700000000000000000000000000ADA59C00E7DEDE00392921000800 + 000008000000211810008C7B630000000000EFE7E700F7EFE7008C7B63002118 + 10000000000029211800AD8C6300BDA58C007B7B7B00DEDEDE00EFE7E700F7F7 + F7005A5A5200211810003929180073634A00EFEFF700EFF7F700EFF7F700EFEF + EF00EFF7F700F7F7F700EFF7F7007B84840008420800295A29009CB59C000000 + 0000000000000000000000000000F7F7F7000808080000000000212108002929 + 0800292908000808000000000000737373000000000000000000000000009494 + 94000000000000000000000000000000000000000000000000005A5A5A005A5A + 5A00EFEFEF0000000000000000000000000094847300FFF7EF00635239001810 + 0800000000000000000039292100D6CEBD0000000000E7D6CE00635239001008 + 0800000000004A392900AD7B4A009C7B520094949400EFEFEF00D6D6D600EFEF + EF00736B6B002118080031180800947B6B00FFF7F700FFFFF70000000000EFEF + EF0000000000F7F7F700E7E7E700949C9C0094AD9400F7F7F700000000000000 + 0000000000000000000000000000F7F7F70000000000393939007B7BDE006363 + E7006363E7008484AD007B7B6B00A5A59C000000000000000000000000009494 + 94005A5A5A005A5A5A005A5A5A005A5A5A005A5A5A005A5A5A00080808005A5A + 5A00EFEFEF000000000000000000000000004A392900000000006B635A002118 + 100008000000000000004A392900AD94840000000000AD9C8C00392921000000 + 000010080800735A4200C6946300635239007B848400D6DEDE00D6DEDE000000 + 0000C6BDB5004A3931002110000039211000847B7300CEBDB500E7DED600ADA5 + A500DEDED60000000000F7F7F70084848400C6D6C600BDCEBD00B5CEB500B5CE + B500BDCEBD000000000000000000F7F7F70000000000424242003131F7000000 + FF000000FF000808FF005252FF00B5B5DE000000000000000000000000009494 + 9400A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A5005A5A5A000808 + 0800EFEFEF0000000000000000000000000010080800BDB5AD00DED6D6002118 + 1000211810004A392900A59C9400DED6D600FFF7EF00735A4200100808001008 + 08004A392900AD9C8C00D6B59400392921008C949400D6DEDE0000000000F7F7 + F700BDB5B50031211800392921004A3121004231210031211800423129007B73 + 6B00F7EFE700FFFFF700FFF7FF008C848C00084A080000390000003900000039 + 000000390000BDCEBD0000000000F7F7F70000000000424239003939F7000000 + FF000000FF000000FF000000FF003131F7000000000000000000000000009494 + 94000000000000000000000000000000000000000000000000005A5A5A005A5A + 5A00EFEFEF000000000000000000000000000800000052423100FFFFF700A59C + 94001810080052423100EFE7E700FFFFF700B5AD9C0039292100292118005242 + 3100AD9C8C00FFFFF7009484730010080800848C8C00DEE7E700F7FFFF00F7FF + FF00DEDEDE005A4A4A002918100042292100735A52005A4A3900211008003121 + 18007B736B00ADADAD00000000008C8C8C00084A080000390000003900000039 + 000000310000316B310000000000F7F7F70000000000424242003939F7000000 + FF000000FF000000FF000000FF000808FF000000000000000000000000009494 + 9400A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A500A5A5A5009494 + 9400EFEFEF00000000000000000000000000080000000000000073635A00FFFF + F700C6BDB500524A39006B5A42009C846B006B5A42006B5A42009C846B00C6BD + B50000000000B5AD9C0021181000080000007B847B00F7FFFF00E7EFEF00EFEF + EF0000000000D6CECE0039292100211008006B5A52009C948C00A59C9400CEC6 + BD00D6D6CE00D6D6D600F7F7F7008C848C00084A080000420000004200000042 + 00000039000000310000A5BDA5000000000000000000393929007B7BE7000000 + FF000000FF000000FF000000FF000808FF000000000000000000000000000000 + 0000949494009494940094949400949494009494940094949400949494009494 + 9400000000000000000000000000000000000800000000000000080000007363 + 5A00EFE7DE00FFF7EF00DED6CE00DED6CE00DED6CE00EFE7DE00FFFFF700F7EF + E7009484730018100800000000000800000084847B00D6D6D600000000000000 + 0000FFF7F700F7EFEF00635A520039292100BDB5B5000000000000000000F7F7 + F7000000000000000000DEE7E7007B7B7B00084A080000420000004200000042 + 0000004200000039000018521800D6DED60000000000000000008C8C94001818 + FF000000FF000000FF000000FF000808FF000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000002118100010101000101010002118 + 10004A39290084736300B5A59C00C6BDB500CEC6BD00C6BDB500948C7B00524A + 390021181000101010001010100010080800000000007B7B7B00949494008C8C + 8C008C8C8C00949494008C8C84008C847B008C8C940094949C00848C8C009494 + 94008C94940084848400848484000000000018521800084A0800084A0800084A + 0800084A0800084A0800084208007B9C7B008C8C8C00737373009C9C94009494 + DE002121F7000808FF000808FF001818FF00424D3E000000000000003E000000 + 2800000040000000800000000100010000000000000400000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 100000000000000000000000000000007D00000000000000FD00000000000000 + F9C0000000000000C7F000000000000003FC0000000000000182000000000000 + 009200000000000000BA00000000000000920000000000000044000000000000 + 0038000000000000000000000000000000000000C00700000000000080030000 + 000000008003000000000000C007000000000000E087000000000000E0070000 + 00000000C1E7000000000000C0C7000000000000C0C700000000000080A70000 + 00000000C087000000000000C083000000000000C007000000000000E0070000 + 00000000E00F000000000000F09F0000FE7FFFFFE03F0000FC3FFFFF80010000 + FC3FFFFF80010000F81FFFFF80010000F81FFC3F80010000F81FF81F80010000 + F00FF81F800100008001F81F800100000000C003800100003E7C800180010000 + 3E7C000080010000FE7F000000000000FE7FFC3F00000000FE7FFFFF00000000 + FE7FFFFF80010000FE7FFFFFFFFF00000000FEFFFE0000000000DC7BDC000000 + 0000C003C00000000000C003C00300000000C003C00100000000000000000000 + 0000800180000000000080018000000000008001800000000000800180000000 + 000000000000000000008001800100000000C003C00300000000E007E0070000 + 0000C003C00300000000FE7FFE7F00000000F8FFFFFFF81F0000E01FFC7FE007 + 0000C00FF81FC00300008007F001800100008003E000800100000001C0000000 + 0000000180010000000000000001000000000000000300000000800000070000 + 00008000000F00000000C001001F80010000E001003F80010000F003E07FC003 + 0000F807FFFFE0070000FF1FFFFFF81F00000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000080000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000FFFF000080000000F01F000000000000 + E00F000800082000E007000400001000E007000002101800E007000200100E00 + EFC7020000240700E007000000000600E007010000001E00EFC7008000283E00 + E007408010040600E007000020000200EFC7000000020200E007000808000100 + F00F0000306C0000FFFF00008001000000000000000000000000000000000000 + 000000000000} + end + object ColorDialog: TColorDialog + Ctl3D = True + Color = 11648570 + CustomColors.Strings = ( + 'ColorA=FFFFFFFF' + 'ColorB=FFFFFFFF' + 'ColorC=FFFFFFFF' + 'ColorD=FFFFFFFF' + 'ColorE=FFFFFFFF' + 'ColorF=FFFFFFFF' + 'ColorG=FFFFFFFF' + 'ColorH=FFFFFFFF' + 'ColorI=FFFFFFFF' + 'ColorJ=FFFFFFFF' + 'ColorK=FFFFFFFF' + 'ColorL=FFFFFFFF' + 'ColorM=FFFFFFFF' + 'ColorN=FFFFFFFF' + 'ColorO=FFFFFFFF' + 'ColorP=FFFFFFFF') + Options = [cdFullOpen, cdPreventFullOpen, cdShowHelp, cdSolidColor, cdAnyColor] + Left = 228 + Top = 65528 + end + object FontDialog: TFontDialog + Ctl3D = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + MinFontSize = 0 + MaxFontSize = 0 + Left = 116 + Top = 65528 + end + object PopupMenuIcon: TPopupMenu + Left = 144 + Top = 65528 + object AMUWinfragg2: TMenuItem + Caption = 'AMU Winfragg ..' + Default = True + OnClick = AboutClick + end + object N5: TMenuItem + Caption = '-' + end + object Restore1: TMenuItem + Caption = '&Restore' + SubMenuImages = ImgLst + ImageIndex = 0 + OnClick = Restore1Click + end + object Preferences2: TMenuItem + Caption = '&Preferences' + OnClick = Settings2Click + end + object N2: TMenuItem + Caption = '-' + end + object Exit1: TMenuItem + Caption = '&Exit winfragg' + OnClick = Exit1Click + end + end +end diff --git a/main.pas b/main.pas new file mode 100644 index 0000000..3129ddc --- /dev/null +++ b/main.pas @@ -0,0 +1,994 @@ + (*----------------------------------------------------------------------------+ + Winfragg(c) is created by Wash for A.M.U + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + The CsTiger searching feature is an exclusivity for Winfragg(c) only. + + Amu's page : http://winfragg.sourceforge.net/ + Dev Page : https://sourceforge.net/projects/winfragg/ + Contact : amunit@users.sourceforge.net + CsTiger : http://www.cstiger.de + Borland : http://www.borland.com + +----------------------------------------------------------------------------*) + +unit main; + +interface + +uses + Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms, Buttons, + Menus, StdCtrls, ComCtrls, ExtCtrls, queryLib, setup, bookmark, ScktComp, + syslib, ImgList, Registry, ShellAPI, Messages, Clipbrd, tstruct, servermain, + constants, Dialogs; + +type + + TMainForm = class(TForm) + SBgo: TSpeedButton; + MainMenu: TMainMenu; + About: TMenuItem; + CBedit: TComboBox; + InfoPanel: TMemo; + SBadd: TSpeedButton; + LstPlay: TListView; + Sbstop: TSpeedButton; + SBroll: TSpeedButton; + PopupMenu: TPopupMenu; + SBnfo: TSpeedButton; + StatusB: TStatusBar; + ImgLst: TImageList; + Img: TImage; + AddServerAuto: TMenuItem; + ColorDialog: TColorDialog; + FontDialog: TFontDialog; + Files: TMenuItem; + serverlist: TMenuItem; + Registry: TMenuItem; + ExitMenu: TMenuItem; + Bookmarks: TMenuItem; + Find: TMenuItem; + PopupMenuIcon: TPopupMenu; + N9: TMenuItem; + Getrules1: TMenuItem; + procedure WndProc(var Message: TMessage);override; + procedure ChangeColors(Sender : TObject); + procedure ChangeFonts(Sender : TObject); + procedure GetPacket(HPacket : TPacketHead; nfo : PTSInfo; pl : PTSPlayers); + procedure SBrollClick(Sender: TObject); + procedure Settings2Click(Sender: TObject); + procedure SBnfoClick(Sender: TObject); + procedure CBeditDblClick(Sender: TObject); + procedure BookmarksClick(Sender: TObject); + procedure LstPlayColumnClick(Sender: TObject; Column : TListColumn); + procedure LstPlayCompare(Sender: TObject; Item1, Item2: TListItem; + Data: Integer; var Compare: Integer); + procedure est1Click(Sender: TObject); + procedure FindClick(Sender: TObject); + procedure SBgoClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + Procedure DisplayInfo(HPacket : TPacketHead; Rnfo : TRInfo); + Procedure DisplayPlayers(HPacket : TPacketHead; pl : PTSPlayers); + Procedure DisplayRules(HPacket : TPacketHead; nfo : PTSINfo); + procedure SBrefClick(Sender: TObject); + procedure SBaddClick(Sender: TObject); + procedure AddServerAutoClick(Sender: TObject); + procedure PreLaunch(HPacket : TPacketHead; Rnfo : TRInfo); + procedure SbstopClick(Sender: TObject); + procedure AboutClick(Sender: TObject); + procedure Preferences1Click(Sender: TObject); + procedure AMUWinfragg1Click(Sender: TObject); + procedure ExportInfo(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Exit1Click(Sender: TObject); + procedure Restore1Click(Sender: TObject); + procedure ExitMenuClick(Sender: TObject); + procedure DisplayIconServer(icn : byte); + procedure Paste1Click(Sender: TObject); + procedure Copy1Click(Sender: TObject); + procedure CBeditChange(Sender: TObject); + procedure addSubItemAddress; + procedure Getrules1Click(Sender: TObject); + private + Atom_Received : Atom; + CurrentServerInfo : TRInfo; + IconNotifyData : TNotifyIconData; + LastIp : ShortString; + NbPacket, ColumnToSort : Cardinal; + MaxPlayers : SmallInt; + ColumnSortUp : boolean; + Pass : String; + public + BrutalClock, AutoRefresh : TTimer; + + end; + +var MainForm: TMainForm; + +implementation + +{$R *.dfm} + +(*----------------------------------------------------------------------------+ + "WndProc" listens for messages coming from Windows. + WM_USER + 17878 for messages about TrayIcon. + WM_USER + 17879 for a new occurence of Winfragg with (-IP) flag (not empty). + +----------------------------------------------------------------------------*) + +procedure TMainForm.WndProc(var Message: TMessage); +var p : TPoint; + TextIN : PChar; + +procedure ShutDown; +begin + Shell_NotifyIcon(NIM_DELETE, @IconNotifyData); + Message.Msg := 1; + Message.LParam :=0; + Message.Result:=0; + Halt +end; + +begin + Case Message.Msg of + WM_QUERYENDSESSION : ShutDown; + WM_ENDSESSION : ShutDown; + WM_DESTROY: ShutDown; + WM_QUIT : ShutDown; + + WM_SYSCOMMAND: + Case Message.WParam and $FFF0 of + SC_MINIMIZE: + begin + MainForm.Hide; + MainBook.Hide; + MainServer.Hide; + SetupMain.Hide; + Exit + end + end; + + WM_USER + 17878 : + Case Message.lParam of + WM_RBUTTONDOWN: + begin + GetCursorPos(p); + PopupMenuIcon.Popup(p.x, p.y) + end; + WM_LBUTTONDOWN: + begin + Show; + SetForegroundWindow(Self.handle) + end + end; + + WM_USER + 17879 : + begin + atom_Received := Message.WParam; + GetMem(TextIN, 256); + GlobalGetAtomName(atom_Received, TextIN, 256); + if Copy(TextIN,1,11) = 'winfragg://' then + CBEdit.Text := StringReplace(Copy(TextIN,10,Length(TextIn)),'/','',[rfReplaceAll]) + else CBEdit.Text := TextIn; + GlobalDeleteAtom(atom_received); + FreeMem(TextIN); + SBNfo.Click + end + end; + inherited +end; + +procedure TMainForm.SBrollClick(Sender: TObject); +begin + with Mainform do + if Height = 392 + then + begin + Sbstop.Click; + Height := 101; + SBroll.Tag := 0; + end + else + begin + Height := 392; + SBroll.Tag := 1; + end; + SBRoll.Caption := '^' +end; + +procedure TMainForm.DisplayIconServer(icn : byte); +begin + Img.Canvas.Brush.Color := clBtnFace; + Img.Canvas.FillRect(Img.Canvas.ClipRect); + ImgLst.Draw(Img.Canvas,0,0,icn,true) +end; + + (*----------------------------------------------------------------------------+ + "DisplayPlayers" gets "HPacket" TPacketHead type and "pl" PSPlayers type. + The syntax was inspired from "eD2k Utils" (BierBaron). + +----------------------------------------------------------------------------*) + +Procedure TMainForm.DisplayPlayers(HPacket : TPacketHead; pl : PTSPlayers); +var LstItem : TListItem; + MaxId,i : byte; + top : PTSPlayers; +begin + top := pl; + + MaxId := 0; + while pl^.Next <> nil do + begin + LstItem := LstPlay.FindCaption(0, pl^.id, false, true, false); + if LstItem = nil then + begin + LstItem := LstPlay.Items.Add; + LstItem.Caption := pl^.id; + LstItem.SubItems.Add(pl^.name); + LstItem.SubItems.Add(inttostr(pl^.fragg)); + LstItem.SubItems.Add(pl^.team); + LstItem.SubItems.Add(pl^.ping); + LstItem.SubItems.Add(pl^.time); + LstItem.SubItems.Add(pl^.id) + end + else + with LstPlay.Items[LstItem.Index] do + begin + SubItems[0] := pl^.name; + SubItems[1] := inttostr(pl^.fragg); + SubItems[2] := pl^.team; + SubItems[3] := pl^.ping; + SubItems[4] := pl^.time + end; + inc(MaxId); + pl := pl^.Next; + end; + + if CurrentServerInfo.IdRec = 'HLRules' then + if MaxId < LstPlay.Items.Count then + for i:=LstPlay.Items.Count downto MaxId do + begin + LstItem:=LstPlay.FindCaption(0, inttostr(i), true, true, false); + if LstItem <> nil then LstPlay.Items[LstItem.Index].Delete + end; + + FreeMemPlayers(top)//or dispose +end; + +Procedure TMainForm.DisplayRules(HPacket : TPacketHead; nfo : PTSINfo); +begin + PopupMenu.Items[6].Tag := 0; + SBStop.Click; + InfoPanel.Clear; + + while nfo <> nil do + begin + InfoPanel.Lines.Add(nfo.Variable + ' = ' + nfo.Value); + nfo := nfo^.Next + end +end; + +(*----------------------------------------------------------------------------+ + "DisplayInfo" gets "HPacket" TPacketHead type and "Rnfo" TRInfo type. + +----------------------------------------------------------------------------*) + +Procedure TMainForm.DisplayInfo(HPacket : TPacketHead; Rnfo : TRInfo); +var LstItem : TListItem; + i : byte; +begin + if Rnfo.IdRec = 'HLRules' + then + With InfoPanel.Lines do + begin + Add ('Reserved Slot(s) : ' + Rnfo.ReservedSlots); + Add ('TimeLeft : ' + Rnfo.TimeLeft); + Add ('FriendlyFire : ' + Rnfo.FF); + Add (Rnfo.Extra); + exit + end; + + InfoPanel.Clear; + DisplayIconServer(Rnfo.icn); + + if Rnfo.IdRec = 'HLInfo' + then + begin + QueryMain.QueryServer(0,'v',HPacket.Address); + With InfoPanel.Lines do + begin + Add('HostName : ' + Rnfo.HostName); + Add('Description : ' + Rnfo.Description); + Add('Server : ' + Rnfo.TypeServer); + Add('OS : ' + Rnfo.OS); + Add('Map : ' + Rnfo.Map); + Add('PassWord : ' + Rnfo.PassWord); + Add('Players : ' + Rnfo.NumPlayers + '/' + Rnfo.MaxPlayers); + Add('Anti-Cheat : ' + Rnfo.AC) + end; + end; + + if Rnfo.IdRec = 'UTInfo' + then + begin + QueryMain.QueryServer(0,'e',HPacket.Address); + With InfoPanel.Lines do + begin + Add ('HostName : ' + Rnfo.HostName); + Add ('GameName : ' + Rnfo.Description); + Add ('GameType : ' + Rnfo.GameType); + Add ('Map : ' + Rnfo.Map); + Add ('Players : ' + Rnfo.NumPlayers + '/' + Rnfo.MaxPlayers); + Add ('Reserved Slot(s) : ' + Rnfo.ReservedSlots); + Add ('PassWord : ' + Rnfo.PassWord); + Add ('FF : ' + Rnfo.FF); + Add ('Anti-Cheat : ' + Rnfo.AC) + end; + end; + + if Rnfo.IdRec = 'IdInfo' + then + With InfoPanel.Lines do + begin + Add ('HostName : ' + Rnfo.HostName); + Add ('Version : ' + Rnfo.GameVersion); + Add ('GameType : ' + Rnfo.GameType); + Add ('GameMod : ' + Rnfo.Description); + Add ('Map : ' + Rnfo.Map); + Add ('Players : ' + Rnfo.NumPlayers + '/' + Rnfo.MaxPlayers); + Add ('ReservedSlot(s) : ' + Rnfo.ReservedSlots); + Add ('PassWord : ' + Rnfo.PassWord); + Add ('FF : ' + Rnfo.FF); + Add ('Anti-Cheat : ' + Rnfo.AC) + end; + + for i:=LstPlay.Items.Count downto strtoint(Rnfo.NumPlayers)+1 do + begin + LstItem:=LstPlay.FindCaption(0, inttostr(i), true, true, false); + if LstItem <> nil then LstPlay.Items[LstItem.Index].Delete + else + begin + LstItem:=LstPlay.FindCaption(0, inttostr(i-1), true, true, false); + if LstItem <> nil then LstPlay.Items[LstItem.Index].Delete + end + end +end; + +(*----------------------------------------------------------------------------+ + "PreLaunch" gets "HPacket" TPacketHead type and "Rnfo" TRInfo type. Builds the + command line before launching. + +----------------------------------------------------------------------------*) + +procedure TMainForm.PreLaunch(HPacket : TPacketHead; Rnfo : TRInfo); +var CommandString : String; + +procedure GoMsg; +var i, IndexGame : byte; + Connector : ShortString; +begin + Sbstop.Click; + SBgo.Enabled := false; + InfoPanel.Lines.Add(LAUNCHINGCANVAS); + InfoPanel.Lines.Add(''); + InfoPanel.Lines.Add('Taking slot..'); + InfoPanel.Lines.Add('Identification Engine'); + IndexGame := 0;//null + + if Rnfo.IdRec = 'HLRules' then + begin + IndexGame := 6;//Half-Life + InfoPanel.Lines.Add(' .: Half-Life engine OK'); + + Connector := ' -game ' + CurrentServerInfo.GameDir + + ' +connect ' + + HPacket.Address + + ' +password ' + Pass + end; + + if Rnfo.IdRec = 'UTInfo' then + begin + InfoPanel.Lines.Add(' .: Unreal engine OK'); + case Rnfo.Icn of + 7,9 : begin + if Rnfo.Icn=9 then IndexGame := 13//UT2003 + else IndexGame := 12;//UT + Connector:= ' ' + + HPacket.ip + ':'+ RNfo.UTHostPort + + '/?name=' + SetupMain.EGPName.Text + + ' ?password=' + Pass + end; + 10 : begin + IndexGame := 14;//BattleField + Connector:= ' +restart 1 +joinServer ' + + HPacket.ip + ':'+ RNfo.UTHostPort + + ' +isInternet 1 +playerName ' + + SetupMain.EGPName.Text + + ' +password ' + Pass + end; + 11 : begin + IndexGame := 7;//Medal of Honor + Connector:= ' +set name ' + + SetupMain.EGPName.Text + + ' +password ' + Pass + + ' +connect ' + + HPacket.ip + ':'+ RNfo.UTHostPort + end; + 12 : begin + IndexGame := 8;//Operation Flashpoint + Connector:= ' -connect=' + HPacket.ip + + ' -port=' + RNfo.UTHostPort + + ' -password=' + Pass + + ' -name=' + SetupMain.EGPName.Text + end; + 13,14 : begin + if Rnfo.Icn=13 then IndexGame := 9 //Serious Sam + else IndexGame := 10; //Serious Sam 2 + Connector:= ' +connect ' + + HPacket.ip + ':'+ RNfo.UTHostPort + + ' +password ' + Pass + end; + 15 : begin + InfoPanel.Lines.Add(' ..: LithTech engine OK'); + IndexGame := 0; //Alien versus Predator 2 + Connector:= ' -windowtitle "Aliens vs. Predator 2"' + + ' -rez AVP2.REZ -rez SOUNDS.REZ' + + ' -rez AVP2L.REZ -rez AVP2DLL.REZ' + + ' -rez MULTI.REZ -rez AVP2P.REZ' + + ' -rez AVP2P1.REZ +gsa 1' + + ' gsa_ip ' + HPAcket.ip + + ' gsa_port ' + inttostr(HPAcket.port) + + ' +gsa_pw ' + Pass + + ' +gsa_name ' + SetupMain.EGPName.Text + end; + end; + end; + + if Rnfo.IdRec = 'IdInfo' then + begin + InfoPanel.Lines.Add(' .: Id engine OK'); + case Rnfo.Icn of + 16 : begin + IndexGame := 1;//Quake3 + Connector:= ' +set fs_game ' + Rnfo.Description + + ' +name ' + SetupMain.EGPName.Text + + ' +password ' + Pass + {+ +setu team s } + + ' +connect ' + + HPAcket.Address + end; + 17 : begin + IndexGame := 2;//RTCW + Connector:= ' +name ' + SetupMain.EGPName.Text + + ' +password ' + Pass + + ' +connect ' + + HPAcket.Address + end; + 18 : begin + IndexGame := 3;//RTCW ET + Connector:= ' +name ' + SetupMain.EGPName.Text + + ' +password ' + Pass + + ' +connect ' + + HPAcket.Address + end; + 19 : begin + IndexGame := 4;//Jedi Knight 2 + Connector:= ' +name ' + SetupMain.EGPName.Text + + ' +password ' + Pass + + ' +connect ' + + HPAcket.Address + end; + 20 : begin + IndexGame := 5;//Soldier of fortune 2 + Connector:= ' +name ' + SetupMain.EGPName.Text + + ' +password ' + Pass + + ' +connect ' + + HPAcket.Address + end; + 21 : begin + IndexGame := 11;//Star Trek Elite Force + Connector:= ' -client -ip ' + HPacket.ip + + ' -name ' + SetupMain.EGPName.Text + + ' -password ' + Pass + end + end; + end; + + if SetupMain.ListGame.Items[IndexGame].SubItems[1] = '' then + begin + InfoPanel.Lines.Add(' .: Search path empty !'); + InfoPanel.Lines.Add(' ..: Please find the right path'); + SBgo.Enabled := true; + exit + end; + + InfoPanel.Lines.Add(' .: Search path OK'); + + if IndexGame = 0 + then + CommandString := + StringReplace(SetupMain.ListGame.Items[IndexGame].SubItems[1], + 'avp2.exe','LithTech.exe',[rfReplaceAll]) + + Connector; + + if IndexGame <> 5 + then + CommandString := + SetupMain.ListGame.Items[IndexGame].SubItems[1] + Connector + else + CommandString := SetupMain.ListGame.Items[IndexGame].SubItems[1]; + + For i:=6 to SetupMain.ListGame.Items[IndexGame].SubItems.count-3 do + begin + if SetupMain.ListGame.Items[IndexGame].SubItems[i+2] = '1' + then CommandString := + CommandString + + ' ' + + SetupMain.ListGame.Items[IndexGame].SubItems[i+1] + end; + + CommandString := + CommandString + ' ' + SetupMain.ListGame.Items[IndexGame].SubItems[2]; + + if IndexGame = 5 + then CommandString := CommandString + Connector; + + if SetupMain.CBGStats.Checked + then + try + if Rnfo.IdRec = 'HLRules' + then SysLib.HttpPost(HPacket.Address, CurrentServerInfo.Description) + else SysLib.HttpPost(HPacket.Address, Rnfo.Description); + InfoPanel.Lines.Add(' ..: HTTP report OK'); + except on E:Exception do + begin + GetErrorLog(E.Message); + MainForm.InfoPanel.Lines.Add(' ..: HTTP report failed'); + end + end; + + if SetupMain.CBCopyclip.Checked + then ClipBoard.AsText := HPacket.Address; + + if SetupMain.CBMinjoin.Checked + then Hide; + + InfoPanel.Lines.Add(' .: Processing executable..'); + + try + SysLib.CreateProcessSimple(CommandString); + except on E:Exception do getErrorLog(E.Message); + end; + + SBgo.Enabled := true; + if SetupMain.CBQonjoin.Checked then application.terminate +end; + +procedure FullMsg; +begin + if SetupMain.RBFloodJoin.Checked + then + begin + if SetupMain.RBFloodJoin.Tag = 0 + then + begin + BrutalClock := TTimer.Create(nil); + BrutalClock.Name := 'BrutalClock'; + BrutalClock.Interval := BRUTALCLOKVALUE; + BrutalClock.Enabled := true; + BrutalClock.OnTimer := SBgoClick; + SetupMain.RBFloodJoin.Tag := 1 + end; + InfoPanel.Lines.Add('Retrying connection please wait'); + exit + end; + + if SBGo.Tag = 1 //switch stuff + then + begin + SBGo.Tag := 0; + GoMSg; + exit + end + else SBGo.Tag := 1; + + with InfoPanel.Lines do + begin + Add(NOSLOTSCANVAS); + Add(''); + Add(' .:Reserved Solt(s) = '+Rnfo.ReservedSlots); + Add(''); + Add(' ..:Press GO to continue') + end; + + SBgo.Enabled := true +end; + +begin + InfoPanel.Clear; + + if Rnfo.IdRec = 'HLRules' + then + if Maxplayers - strtoint(Rnfo.ReservedSlots) > 0 then GoMsg + else FullMsg + else + begin + if Rnfo.PassWord = 'Required' + then + if not InputQuery('Password required','Insert the password',Pass) + then exit; + + MaxPlayers := strtoint(Rnfo.MaxPlayers); + Maxplayers := Maxplayers - + StrToInt(Rnfo.NumPlayers)- + StrToInt(Rnfo.ReservedSlots); + + if Rnfo.IdRec = 'HLInfo' + then + begin + CurrentServerInfo := Rnfo;//because flrules next ! + QueryMain.QueryServer(1,'ÿÿÿÿrules',cbedit.Text) + end + else if Maxplayers > 0 then GoMsg + else FullMsg + + end +end; + +(*----------------------------------------------------------------------------+ + "GetPacket" gets "HPacket" TPacketHead type, "nfo" PSInfo type and "pl" + PSPlayers type. HPAcket.UdpTag equal 0 for a simple query and 1 for a query + before launching. + +----------------------------------------------------------------------------*) + +procedure TMainForm.GetPacket(HPacket:TPacketHead; nfo:PTSInfo; pl:PTSPlayers); +begin + NbPacket := NbPacket + HPacket.Bytes; + StatusB.Panels[0].Text := 'Rx : ' + inttostr(NbPacket) + ' byte(s)'; + + Case HPAcket.UdpTag of + 0 : begin + if LastIp <> HPacket.Address + then + begin + LastIP := HPacket.Address; + NbPacket := 0; + LstPlay.Clear; + SBGO.Tag := 0 + end; + + if PopupMenu.Items[6].Tag = 1 then + begin + DisplayRules(HPacket, nfo); + exit + end; + + if nfo <> nil then DisplayInfo(HPacket, QueryMain.P2Rec(nfo)); + if pl <> nil then DisplayPlayers(HPacket, pl) + end; + + else try PreLaunch(HPacket,QueryMain.P2Rec(nfo)) + except on E:Exception do getErrorLog(E.Message) + end + end +end; + +(*----------------------------------------------------------------------------+ + "SBnfoClick" does a broadcast on current server. + +----------------------------------------------------------------------------*) + +procedure TMainForm.SBnfoClick(Sender: TObject); +begin + if SetupMain.RBFloodJoin.Tag = 1 then SBStop.Click; + + if SBnfo.tag = 0 then + begin + if SetupMain.CBAutoRefreshQueryMain.Checked + then + begin + AutoRefresh.Enabled:=true; + SBnfo.tag:=1 + end + end; + + if MainForm.Height < 392 then SBroll.Click; + + try QueryMain.QueryServer(0,'b',cbedit.Text) + except on E:Exception do GetErrorLog(E.message) + end +end; + +procedure TMainForm.Getrules1Click(Sender: TObject); +begin + PopupMenu.Items[6].Tag := 1; + if MainForm.Height < 392 then SBroll.Click; + + try QueryMain.QueryServer(0,'r',cbedit.Text) + except on E:Exception do GetErrorLog(E.message) + end +end; + +procedure TMainForm.BookmarksClick(Sender: TObject); +begin + MainBook.visible:=true; + MainBook.BringToFront; + MainBook.SBRefresh.Click +end; + +procedure TMainForm.Settings2Click(Sender: TObject); +begin + SetupMain.PGeneral.BringToFront; + SetupMain.Show; + SetupMain.LoadGameconf +end; + +procedure TMainForm.LstPlayColumnClick(Sender: TObject; Column: TListColumn); +begin + ColumnToSort := Column.Index; + ColumnSortUp := not ColumnSortUp; + (Sender as TCustomListView).AlphaSort +end; + + (*----------------------------------------------------------------------------+ + "LstPlayCompare" compares values into the ListView (players). The syntax was + inspired from "eD2k Utils" (BierBaron). + +----------------------------------------------------------------------------*) + +procedure TMainForm.LstPlayCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); +var ix, code1, code2: Integer; + x, y: real; +begin + ix := ColumnToSort - 1; + + if ix < 0 then + begin + if strtoint(Item1.caption) < strtoint(Item2.Caption) + then If ColumnSortUp then Compare := Compare * -1; + exit; + end; + + Val(Item1.SubItems[ix], x, Code1); + Val(Item2.SubItems[ix], y, Code2); + + If ((Code1 = 0) and (Code2 = 0)) then + begin + If (x < y) then Compare := -1 + else Compare := 1; + end + else Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]); + + If ColumnSortUp then Compare := Compare * -1 +end; + +procedure TMainForm.SBgoClick(Sender: TObject); +begin + Mainform.Height := 250; + SBRoll.Caption := '~~~'; + + Sbstop.Click; + + try QueryMain.QueryServer(1,'b',cbEdit.Text) + except on E:Exception do getErrorLog(E.Message) + end +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + Img.Canvas.Brush.Color := clBtnFace; + Img.Canvas.FillRect(Img.Canvas.ClipRect); + ImgLst.Draw(Img.Canvas,0,0,0,true); + + AutoRefresh := TTimer.Create(self); + Autorefresh.Enabled := false; + Autorefresh.OnTimer := SBnfoClick; + + with IconNotifyData do + begin + hIcon := Application.Icon.Handle; + uCallbackMessage := WM_USER + 17878; + cbSize := sizeof(IconNotifyData); + Wnd := Handle; + uID := 0; + uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP + end; + + StrPCopy(IconNotifyData.szTip, Application.Title); + Shell_NotifyIcon(NIM_ADD, @IconNotifyData); + SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); + Application.ShowMainForm := False +end; + +procedure TMainForm.ChangeColors(Sender : TObject); +begin + case Tcomponent(Sender).Tag of + 0 : ColorDialog.Color := InfoPanel.Color; + 1 : ColorDialog.Color := LstPlay.Color; + 2 : ColorDialog.Color := CBedit.Color; + end; + + if ColorDialog.Execute + then + case Tcomponent(Sender).Tag of + 0 : begin + InfoPanel.Color := ColorDialog.Color; + SetupMain.SColorInfo.Brush.Color := ColorDialog.Color + end; + 1 : begin + LstPlay.Color := ColorDialog.Color; + SetupMain.SColorPlayer.Brush.Color := ColorDialog.Color + end; + 2 : begin + CBedit.Color := ColorDialog.Color; + SetupMain.SColorField.Brush.Color := ColorDialog.Color + end; + end; +end; + +procedure TMainForm.ChangeFonts(Sender : TObject); +begin + case Tcomponent(Sender).Tag of + 0 : FontDialog.Font := InfoPanel.Font; + 1 : FontDialog.Font := LstPlay.Font; + 2 : FontDialog.Font := CBedit.Font; + end; + + if FontDialog.Execute + then + case Tcomponent(Sender).Tag of + 0 : begin InfoPanel.Font := FontDialog.Font; + SetupMain.BFontInfo.Font := FontDialog.Font; + end; + 1 : begin LstPlay.Font := FontDialog.Font; + SetupMain.BFontPlayers.Font := FontDialog.Font; + end; + 2 : CBedit.Font := FontDialog.Font; + end +end; + + (*----------------------------------------------------------------------------+ + "ExportInfo" exports values from registry. + +----------------------------------------------------------------------------*) + +procedure TMainForm.ExportInfo(Sender: TObject); +const BaseKey = 'HKEY_CURRENT_USER' ; +var strProgram, strCommand,strBranch : String; +begin + Case (Sender as TMenuItem).Tag of + 0 : begin + SetupMain.SaveD.FileName := 'Winfragg.reg (Fixed)'; + strBranch := 'HKEY_CURRENT_USER\Software\AMU\winfragg'; + strCommand := '/E Winfragg.reg ' + strBranch + #0; + end; + 1 : begin + SetupMain.SaveD.FileName := 'WinfraggApparence.reg (Fixed name)'; + strBranch := 'HKEY_CURRENT_USER\Software\AMU\winfragg\windows\main'; + strCommand := '/E WinfraggApparence.reg ' + strBranch + #0; + end; + 10 : + begin + SetupMain.SaveD.FileName := 'WinfraggServerList.reg (Fixed name)'; + strBranch := 'HKEY_CURRENT_USER\Software\AMU\winfragg\bookmark'; + strCommand := '/E WinfraggServerList.reg ' + strBranch + #0; + end + + end; + if SetupMain.SaveD.Execute then + begin + strProgram := 'REGEDIT' + #0; + try + ShellExecute(0,nil,@strProgram[1],@strCommand[1],nil,SW_NORMAL) + except on E:Exception do getErrorLog(E.Message); + end + end +end; + +procedure TMainForm.SbstopClick(Sender: TObject); +begin + SBnfo.Tag := 0; + AutoRefresh.Enabled := false; + + if SetupMain.RBFloodJoin.Tag = 0 then exit; + + SetupMain.RBFloodJoin.Tag := 0; + BrutalClock.Destroy; + InfoPanel.Clear +end; + +procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + SetupMain.BClosesettingsClick(Sender); + MainBook.SBQuit.Click; + Shell_NotifyIcon(NIM_DELETE, @IconNotifyData) +end; + +procedure TMainForm.addSubItemAddress; +begin + if CBedit.Items.IndexOf(CbEdit.Text) = -1 + then CBedit.Items.Append(CbEdit.Text) +end; + +procedure TMainForm.est1Click(Sender: TObject); +begin + InfoPanel.SelectAll; + Infopanel.CopyToClipboard +end; + +procedure TMainForm.AboutClick(Sender: TObject); +begin + SetupMain.PAbout.BringToFront; + SetupMain.Show +end; + +procedure TMainForm.Restore1Click(Sender: TObject); +begin + SetForegroundWindow(Self.handle); + Show +end; + +procedure TMainForm.FindClick(Sender: TObject); +begin + MainServer.visible := true; + MainServer.BringToFront +end; + +procedure TMainForm.SBaddClick(Sender: TObject); +begin + MainBook.AddServer(Sender); +end; + +procedure TMainForm.AddServerAutoClick(Sender: TObject); +begin + MainBook.AddServer(Sender); +end; + +procedure TMainForm.Preferences1Click(Sender: TObject); +begin + Settings2Click(Sender) +end; + +procedure TMainForm.SBrefClick(Sender: TObject); +begin + SBnfo.Click +end; + +procedure TMainForm.AMUWinfragg1Click(Sender: TObject); +begin + About.Click +end; + +procedure TMainForm.CBeditDblClick(Sender: TObject); +begin + SBnfo.Click +end; + +procedure TMainForm.CBeditChange(Sender: TObject); +begin + SBStop.Click +end; + +procedure TMainForm.Paste1Click(Sender: TObject); +begin + CBEdit.Text := ClipBoard.AsText +end; + +procedure TMainForm.Copy1Click(Sender: TObject); +begin + ClipBoard.AsText := CBedit.Text +end; + +procedure TMainForm.Exit1Click(Sender: TObject); +begin + Close +end; + +procedure TMainForm.ExitMenuClick(Sender: TObject); +begin + Close +end; + +end. diff --git a/queryLib.dcu b/queryLib.dcu new file mode 100644 index 0000000000000000000000000000000000000000..cdc3810d94718380077ba6a676c82553971416cd GIT binary patch literal 26649 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 E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/queryLib.dfm b/queryLib.dfm new file mode 100644 index 0000000..e194c7a --- /dev/null +++ b/queryLib.dfm @@ -0,0 +1,25 @@ +object QueryMain: TQueryMain + Left = 432 + Top = 329 + Width = 153 + Height = 57 + Caption = 'QueryMain' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object UDP: TNMUDP + RemotePort = 0 + LocalPort = 17878 + ReportLevel = 3 + OnDataReceived = UDPDataReceived + OnInvalidHost = UDPInvalidHost + Left = 112 + end +end diff --git a/queryLib.pas b/queryLib.pas new file mode 100644 index 0000000..0fc1a93 --- /dev/null +++ b/queryLib.pas @@ -0,0 +1,1075 @@ + (*----------------------------------------------------------------------------+ + Winfragg(c) is created by Wash for A.M.U + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + The CsTiger searching feature is an exclusivity for Winfragg(c) only. + + Amu's page : http://winfragg.sourceforge.net/ + Dev Page : https://sourceforge.net/projects/winfragg/ + Contact : amunit@users.sourceforge.net + CsTiger : http://www.cstiger.de + Borland : http://www.borland.com + +----------------------------------------------------------------------------*) + +unit queryLib; //engine version 0.90 rev 01 +(*$WARNINGS OFF*) +interface + +uses + Windows, SysUtils, Variants, Classes, Forms, NMUDP, tstruct, constants; + +type + + TQueryMain = class(TForm) + UDP: TNMUDP; + procedure FormCreate(Sender: TObject); + procedure DisPath(HPacket : TPacketHead; + Sinfo : PTSINfo; + SPlayers : PTSPlayers; + SServer : PTSSList); + procedure UDPDataReceived(Sender : TComponent; + NumberBytes : Integer; + FromIP : String; + Port : Integer); + procedure QueryServer(STag : byte; q : ShortString; ip : String); + procedure WFilter(HPacket : TPacketHead; Stream : String); + function P2Rec (nfo : PTSInfo) : TRInfo; + function FCSTiger (s : String) : PTCSTiger; + function FHLSList (s : string) : PTSSList; + function FHLInfo (s : string) : PTSInfo; + function FHLRules (s : string) : PTSInfo; + function FHLPlayers (s : string) : PTSPlayers; + function FUTInfo (s : string) : PTSInfo; + function FUTPlayers (s : string) : PTSPlayers; + function FUTSList (s : string) : PTSSList; + function FiDSList (s : string) : PTSSList; + procedure FIDInfo (s : string; var IdInfo : PTSInfo; + var IdPlayers : PTSPlayers); + procedure UDPInvalidHost(var handled: Boolean); + private + TabQ : array[0..5] of String[20]; + end; + +var QueryMain: TQueryMain; + +implementation + +uses main, bookmark, servermain, syslib; + +{$R *.dfm} + +procedure TQueryMain.FormCreate(Sender: TObject); +begin + TabQ[0] := 'ÿÿÿÿrules'+#$00; + TabQ[1] := 'ÿÿÿÿplayers'+#$00; + TabQ[2] := '\players\'; + TabQ[3] := 'ÿÿÿÿinfostring'+#$00; + TabQ[4] := '\basic\\info\\rules\'; + TabQ[5] := 'ÿÿÿÿgetstatus'+#$00 +end; + + (*----------------------------------------------------------------------------+ + "QueryServer" gets "Stag" byte type for UDP Source, "q" ShortString type and + "ip" String type. It creates and sends a query to server. + +----------------------------------------------------------------------------*) + +procedure TQueryMain.QueryServer(STag : byte; q : ShortString; ip : String); +var Stream: TMemoryStream; + Address : TAdd; + j : byte; +begin + + try + Address := GetAddress(ip,STag); + except on E:Exception do GetErrorLog(E.Message) + end; + + if Address.ko=1 then exit; + + with udp do + begin + tag := STag; + RemoteHost := Address.ip; + RemotePort := Address.port + end; + + Stream := TMemoryStream.Create; + + try + if q = 'b' then//BroadCast .. flooded by old ut servers + for j:=3 to 5 do + begin + Stream.Write(TabQ[j][1], Length(TabQ[j])); + if j=4 then //old Gamespy protocol style Epic + begin + Udp.RemotePort := udp.RemotePort + 9; + Udp.SendStream(Stream); + Udp.RemotePort := udp.RemotePort - 8; + Udp.SendStream(Stream); + Udp.RemotePort := udp.RemotePort - 1 + end; + Udp.SendStream(Stream); + Stream.Clear + end; + + if q = 'r' then//only rules query + begin + Stream.Write(TabQ[0][1], Length(TabQ[0])); + Udp.SendStream(Stream); + Stream.Clear; + Stream.Write(TabQ[4][1], Length(TabQ[4])); + Udp.SendStream(Stream); + Stream.Clear; + Stream.Write(TabQ[5][1], Length(TabQ[5])); + Udp.SendStream(Stream); + Stream.Clear + end; + + if q = 'v' then//Valve + begin + Stream.Write(TabQ[0][1], Length(TabQ[0])); + Udp.SendStream(Stream); + Stream.Clear; + if Stag = 0 + then Stream.Write(TabQ[1][1], Length(TabQ[1])) + else Stream.Write(TabQ[3][1], Length(TabQ[3])); + Udp.SendStream(Stream); + Stream.Clear + end; + + if q = 'e' then//Epic + begin + if STag = 0 + then Stream.Write(TabQ[2][1], Length(TabQ[2])) + else Stream.Write(TabQ[4][1], Length(TabQ[4])); + Udp.SendStream(Stream); + Stream.Clear + end; + + if q = 'i' then//iD + begin + Stream.Write(TabQ[5][1], Length(TabQ[5])); + Udp.SendStream(Stream); + Stream.Clear + end; + + if length(q) > 1 then//MasterServer + begin + Stream.Write(q[1], Length(q)); + Udp.SendStream(Stream); + Stream.Clear + end; + + except on E: Exception do GetErrorLog(E.Message) + end; + + Stream.Free; + + if Stag <> 5 then Ping(Address.Ip+':'+IntToStr(Address.Port),0); + if Stag < 4 then MainForm.addSubItemAddress +end; + +procedure TQueryMain.UDPInvalidHost(var handled: Boolean); +begin + MainForm.Sbstop.Click; + MainForm.InfoPanel.Clear; + MainForm.LstPlay.Clear +end; + + (*----------------------------------------------------------------------------+ + "UDPDataReceived" gets "Sender", "NumberBytes" integer type, "Fromip" + string type and "Port" integer type. Receives and creates the HPacket header. + +----------------------------------------------------------------------------*) + +procedure TQueryMain.UDPDataReceived(Sender : TComponent; + NumberBytes : Integer; + FromIP : String; + Port : Integer); +var Stream: TMemoryStream; + s : String; + HPacket : TPacketHead; + i : byte; +begin + if numberbytes < 0 then exit; + + (*----------------------------------------------------------------------------+ + : Identification of incoming frame : : + : - Full source IP : + : - Original sender (TAG) : + : - Source IP : + : - Source Port : + +----------------------------------------------------------------------------*) + + if Sender.Tag <> 5 then HPacket.Ping := Ping(FromIP+':'+IntToStr(Port),1); + + HPacket.UdpTag := Sender.Tag; + HPacket.ip := FromIp; + HPacket.port := Port; + HPacket.Address := FromIP+':'+inttostr(Port); + HPacket.Bytes := NumberBytes; + + Stream := TMemoryStream.Create; + try + Udp.ReadStream(Stream); + SetLength(s,NumberBytes); + Stream.Read(s[1],NumberBytes); + finally + Stream.Free; + + if Sender.tag = 5 then + Case MainServer.CBEGames.ItemIndex of + 0..2 : for i:=7 to 10 do Move(s[i],HPacket.MQuery[i-7],SizeOf(byte)); + end; + + WFilter(HPacket, s) + end +end; + + (*----------------------------------------------------------------------------+ + "WFilter" gets "Hpacket" TPacketHead type and "stream" string type. It + parses the head of the stream and give it a way. + +----------------------------------------------------------------------------*) + +procedure TqueryMain.WFilter(HPacket : TPacketHead; Stream : String); +var NPSPLayers : PTSPLayers; + NPSInfo : PTSInfo; + HeadStr : string[5]; + +begin + if (HPacket.UdpTag=0) and (HPacket.Ping < MAXPING) + then MainForm.StatusB.Panels[1].Text := 'Ping : ' +inttostr(HPacket.ping) +' Ms'; + + if HPacket.UdpTag=6 + then + begin + DisPath (HPacket,nil,nil,nil); + exit; + end; + + HeadStr := copy(Stream,1,5); + + if (HeadStr = 'ÿÿÿÿE') or (copy(Stream,10,5) = 'ÿÿÿÿE') + then DisPath (HPacket,FHLRules(Stream),nil,nil); + + if HeadStr = 'ÿÿÿÿD' + then DisPath (HPacket,nil,FHLPlayers(Stream),nil); + + if HeadStr = 'ÿÿÿÿi' + then DisPath (HPacket,FHLInfo(Stream),nil,nil); + + if HeadStr = 'ÿÿÿÿf' + then DisPath (HPacket,nil,nil,FHLSList(Stream)); + + if HeadStr = 'ÿÿÿÿg' + then DisPath (HPacket,nil,nil,FiDSList(Stream)); + + if HeadStr = 'ÿÿÿÿL' + then Dispath (HPacket,nil,nil,nil); + + if HeadStr = 'ÿÿÿÿs' + then + try//a modif FIDnfo : function renvoie struct + FIDInfo(Stream,NPSINFO,NPSPLayers);//Error on players fraggs (browser servr) + DisPath(HPacket,NPSINFO,NPSPLayers,nil) + except on E: Exception do GetErrorLog(E.Message) + end; + + if HeadStr[1] = '\'//flood !! + then + begin + if (HeadStr = '\play') or + (HeadStr = '\team') or + (HeadStr = '\ping') + then DisPath (HPacket,nil,FUTPlayers(Stream),nil) + else + if (copy(Stream,1,8) <> '\queryid') and + (copy(Stream,1,6) <> '\final') + then DisPath (HPacket,FUTInfo(Stream),nil,nil) + end; +end; + + (*----------------------------------------------------------------------------+ + "DisPath" gets "Hpacket" PSPlayers type, "Sinfo" PSINfo type, "SPlayers" + PSPlayers type and "SServer" PSSList type. It dispatchs each packets. + +----------------------------------------------------------------------------*) + +procedure TQueryMain.DisPath(HPacket : TPacketHead; + Sinfo : PTSINfo; + SPlayers : PTSPlayers; + SServer : PTSSList); +begin + Case HPacket.UdpTag of + 0..1 : MainForm.GetPacket(HPacket,SInfo,SPlayers); + 2..3 : MainBook.GetPacket(HPacket,P2REC(SInfo)); + 4..6 : Mainserver.GetPacket(HPacket,P2REC(SInfo),SServer) + end +end; + + (*----------------------------------------------------------------------------+ + "P2Rec" gets "nfo" PSInfo type. Creates a record type (PSInfo). + +----------------------------------------------------------------------------*) + +function TqueryMain.P2Rec (nfo : PTSInfo) : TRInfo; +var V,Code : integer; + extra : string; + top : PTSInfo; +begin + if nfo = nil then exit; + + top := nfo; + + Result.HostName := '-'; + Result.Icn := 0; + Result.Protocol := '-'; + Result.UTHostPort := '0'; + Result.OS := '-'; + Result.TypeServer := '-'; + Result.Modif := '-'; + Result.Game := '-'; + Result.Description := '-'; + Result.GameDir := '-'; + Result.GameType := '-'; + Result.GameStyle := '-'; + Result.GameVersion := '-'; + Result.PassWord := '-'; + Result.Map := '-'; + Result.MaxPlayers := '0'; + Result.NumPlayers := '0'; + Result.ReservedSlots := '0'; + Result.TimeLeft := '0'; + Result.AC := '-'; + Result.FF := '-'; + Result.Extra := '-'; + + while nfo^.next <> nil do + begin + + if nfo^.Variable = 'IdPacket' + then Result.IdRec := nfo^.Value; + + if (nfo^.Variable = 'hostname') + then Result.HostName := nfo^.Value; + + if (nfo^.Variable = 'sv_hostname') + then Result.HostName := iDNameFormat(nfo^.Value); + + if nfo^.Variable = 'os' + then if nfo^.Value = 'l' + then Result.OS := 'Linux' + else Result.OS := 'Windows'; + + if (nfo^.Variable = 'map') or + (nfo^.Variable = 'mapname') + then Result.Map := nfo^.Value; + + if (nfo^.Variable = 'password') or + (nfo^.Variable = 'g_needpass') + then if nfo^.Value = '1' + then Result.PassWord := 'Required'; + + + if (nfo^.Variable = 'protocol') and + (Result.IdRec = 'IdInfo') + then + begin + Result.Protocol := nfo^.Value; + case strtoint(nfo^.Value) of + 15..16 : Result.Icn := 19; + 23..24 : Result.Icn := 21; + 56..60 : Result.Icn := 17; + 80..82 : Result.Icn := 18; + 2003,2004 : Result.Icn := 20 + else Result.Icn := 16//Q3 default + end + end; + + if (nfo^.Variable = 'hostport') + then Result.UTHostPort := nfo^.Value; + + if nfo^.Variable = 'gamedir' + then + begin + Result.GameDir := nfo^.Value; + Result.Icn := 1;//valve default + if nfo^.Value = 'cstrike' then Result.Icn := 2; + if nfo^.Value = 'dod' then Result.Icn := 3; + if nfo^.Value = 'firearms' then Result.Icn := 4; + if nfo^.Value = 'ns' then Result.Icn := 5; + if nfo^.Value = 'tfc' then Result.Icn := 6 + end; + + if (nfo^.Variable = 'gamename') + then + begin + if (Result.IdRec = 'UTInfo') then + begin + Result.Icn := 9;//ut2 + ut2d default + if nfo^.Value = 'ut' + then Result.Icn := 7; + if nfo^.Value = 'bfield1942' + then Result.Icn := 10; + if nfo^.Value = 'mohaa' + then Result.Icn := 11; + if (nfo^.Value = 'opflash') or (nfo^.Value = 'opflashr') + then Result.Icn := 12; + if nfo^.Value = 'serioussam' + then Result.Icn := 13; + if nfo^.Value = 'serioussamse' + then Result.Icn := 14; + if nfo^.Value = 'avp2' + then Result.Icn := 15 + end ; + Result.Description := nfo^.Value; + end; + + if nfo^.Variable = 'gametype' + then Result.GameType :=nfo^.Value; + + if nfo^.Variable = 'gamestyle' + then Result.GameType :=nfo^.Value; + + if (nfo^.Variable = 'version') or + (nfo^.Variable = 'gamever') + then Result.GameVersion := nfo^.Value; + + if nfo^.Variable = 'description' + then Result.Description := nfo^.Value; + + if nfo^.Variable = 'type' + then if nfo^.Value = 'd' + then Result.TypeServer := 'Dedicated Server' + else Result.TypeServer := 'Public Server'; + + if (nfo^.Variable = 'players') or + (nfo^.Variable = 'numplayers') + then Result.NumPlayers := nfo^.Value; + + if (nfo^.Variable = 'max') or + (nfo^.Variable = 'sv_maxClients') or + (nfo^.Variable = 'sv_maxclients') or + (nfo^.Variable = 'maxplayers') + then Result.MaxPlayers := nfo^.Value; + + if nfo^.Variable = 'g_gametype' + then + begin + val(nfo^.Value,V,Code); + if Code = 0 + then + case strtoint(nfo^.Value) of + 0 : Result.GameType := 'Free for All'; + 1 : Result.GameType := 'One on One Tournament'; + 2 : Result.GameType := 'Single Player FFA'; + 3 : Result.GameType := 'Team Deathmatch'; + 4 : Result.GameType := 'Capture the Flag'; + 5 : Result.GameType := 'One Flag CTF'; + 6 : Result.GameType := 'Obelisk'; + 7 : Result.GameType := 'Harvester'; + 8 : Result.GameType := 'Team Tournament' + end + else Result.GameType := nfo^.Value; + end; + + if (nfo^.Variable = 'reserve_slots') or + (nfo^.Variable = 'sv_privateClients') + then Result.ReservedSlots := nfo^.Value; + + if (nfo^.Variable = 'sv_cheats') or + (nfo^.Variable = 'secure') or + (nfo^.Variable = 'sv_punkbuster') + then if nfo^.Value = '1' + then Result.AC := 'ON' + else Result.AC := 'OFF'; + + if (nfo^.Variable = 'mp_timeleft') or + (nfo^.Variable = 'cm_timeleft') + then Result.TimeLeft := nfo^.Value; + + if (nfo^.Variable = 'mp_friendlyfire') or + (nfo^.Variable = 'g_friendlyFire') or + (nfo^.Variable = 'g_friendlyfire') or + (nfo^.Variable = 'friendlyfire') or + (nfo^.Variable = 'Soldier Friendly Fire') + then + if nfo^.Value = '1' + then Result.FF := 'ON' + else Result.FF := 'OFF'; + +(*!!*) if nfo^.Variable = 'wwclconfig_version' + then Extra := Extra + 'WWCL config version : ' + nfo^.value + #$0D; + +(*!!*) if nfo^.Variable = 'admin_mod_version' + then Extra := Extra + 'AdMinModVersion : ' + nfo^.value + #$0D; + +(*!!*) if nfo^.Variable = 'clanmod_version' + then Extra := Extra + 'ClanModVersion : ' + nfo^.value + #$0D; + +(*!!*) if nfo^.Variable = 'logmod_version' + then Extra := Extra + 'LogModVersion : ' + nfo^.value + #$0D; + +(*!!*) if nfo^.Variable = 'amx_match_deluxe' + then Extra := Extra + 'AMX Version : ' + nfo^.value + #$0D; + + nfo:=nfo^.Next + end; + + Result.Extra := extra; + + FreeMemInfo(top) +end; + + (*----------------------------------------------------------------------------+ + "FCSTiger" gets "s" string type. Returns a PTCSTiger pointer list. It parses + informations coming from searching server of CsTiger.de. + +----------------------------------------------------------------------------*) + +function TQueryMain.FCSTiger(s : String) : PTCSTiger; +var nxt : PTCSTiger; + i : Word; + j : byte; + tmp : String; +begin + Result:=new(PTCSTiger); + Result^.Next := nil; + + i:=0; j:=0; + + while i < length(s) do + begin + nxt:=new(PTCSTiger); + While (i < length(s)) and (s[i] <> #$A) do + begin + if copy(s,i,4) = 'ÿÿÿÿ' then + begin + Case j of + 0 : Result.SPName := tmp; + 1 : Result.Address := tmp; + 2 : Result.PSNAme := tmp; + end; + tmp:=''; + if not (s[i] = #$A) then + begin + inc(j); + inc(i,3); + end + end + else tmp := tmp + s[i]; + inc(i); + end; + + Result.Game := 0; + + if tmp='hl' then Result.Game := 1; + if tmp='ut2k3' then Result.Game := 9; + if tmp='bf42' then Result.Game := 10; + if tmp='q3' then Result.Game := 16; + + tmp:=''; + nxt^.Next:=Result; + Result:=nxt; + j:=0; inc(i) + end; + + Result:=nxt^.Next +end; + + (*----------------------------------------------------------------------------+ + "FHLInfo" gets "s" string type. Returns a PSInfo pointer list. It filters + common informations coming from a Valve engine based server. + +----------------------------------------------------------------------------*) + +function TQueryMain.FHLInfo(s : string) : PTSInfo; +var tmp : shortstring; + nxt : PTSInfo; + j : byte; + i : Word; +begin + Result:=new(PTSInfo); + Result^.Next := nil; + + i:=25; j:=0; + nxt:=new(PTSInfo); + + while i < length(s) do + begin + tmp := ''; + + while (s[i] <> '\') and (s[i] <> #$00) + do begin tmp := tmp + s[i]; inc (i); end; + + case j of + 0 : nxt^.Variable := tmp; + 1 : nxt^.Value := tmp; + end; + + if j < 1 then inc(j) + else begin + nxt^.Next:=Result; + Result:=nxt; + j:=0; + nxt:=new(PTSInfo) + end; + + inc (i); + + end; + + nxt^.Variable := 'IdPacket'; + nxt^.Value := 'HLInfo'; + nxt^.Next := Result; + + Result := nxt +end; + + (*----------------------------------------------------------------------------+ + "FHLRules" gets "s" string type. Returns a PSInfo pointer list. It filters + rules informations coming from a Valve engine based server. + +----------------------------------------------------------------------------*) + +function TqueryMain.FHLRules(s : string) : PTSInfo;//b 1.1 rev 01 Rules crasses A REVOIR +var tmp : String; + nxt : PTSInfo; + i : Word; +begin + Result:=new(PTSInfo); + Result^.Next := nil; + + i:=8; + + while i < length(s) do + begin + nxt:=new(PTSInfo); + while s[i] <> #$00 do begin tmp := tmp + s[i]; inc (i); end; + nxt^.Variable := tmp; tmp := ''; + inc (i); + while s[i] <> #$00 do begin tmp := tmp + s[i]; inc(i); end; + nxt^.Value := tmp; tmp:=''; + inc(i); + nxt^.Next:=Result; + Result:=nxt; + end; + + nxt:=new(PTSInfo); + nxt^.Variable := 'IdPacket'; + nxt^.Value := 'HLRules'; + nxt^.Next := Result; + + Result := nxt +end; + + (*----------------------------------------------------------------------------+ + "FHLPlayers" gets "s" string type. Returns a PSPlayers pointer list. It + filters players informations coming from a Valve engine based server. + +----------------------------------------------------------------------------*) + +function TqueryMain.FHLPlayers(s : string) : PTSPlayers;//ver 1.2 rev 01 +var str : String; + time : Single; + nxt : PTSPlayers; + i : Word; + +function GetTime(t : word) : ShortString; +Var h,m,s : Word; + tmp : ShortString; +begin + s:=t Mod 60; + h:=t div 3600; + t:=(t-s) Mod 3600; + m:=t div 60; + if h < 10 then tmp := '0'+inttostr(h)+':' + else tmp := inttostr(h)+':'; + if m < 10 then tmp := tmp + '0'+ inttostr(m)+':' + else tmp := tmp + inttostr(m)+':'; + if s < 10 then tmp := tmp + '0'+ inttostr(s) + else tmp := tmp + inttostr(s); + GetTime := tmp; +end; + +begin + Result:=new(PTSPlayers); + Result^.Next := nil; + + i:=7; + while i <= length(s) do + begin + nxt:=new(PTSPlayers); + nxt^.team := ''; + nxt^.ping := ''; + nxt^.id := inttostr(ord(s[i])); + inc(i); + while s[i] <> #$00 do begin str := str + s[i]; inc(i); end; + nxt^.name := str; str:=''; + inc(i); + move (s[i],nxt^.fragg,4); + inc(i,4); + move (s[i],time,4); + nxt^.time := GetTime(round(time)); + inc(i,4); + + nxt^.Next:=Result; + + Result:=nxt + end; +end; + + (*----------------------------------------------------------------------------+ + "FHLSList" gets "s" string type. Returns a PSSList pointer list. It filters + server list coming from Valve master server. The syntax was inspired from + Coldstorage Kquery . + +----------------------------------------------------------------------------*) + +function TQueryMain.FHLSList (s : string) : PTSSList; +var tmp,j : byte; + ip : string; + port : Word; + nxt : PTSSList; + i : Word; +begin + Result:=new(PTSSList); + Result^.Next := nil; + + i:=11; + while i < length(s) do + begin + nxt:=new(PTSSList); + for j:=0 to 3 do + begin + move(s[i],tmp,sizeof(byte)); + inc(i,sizeof(byte)); + if j = 0 then ip := ip + inttostr(ord(tmp)) + else ip := ip + '.' + inttostr(ord(tmp)); + end; + + nxt^.Address := ip; + ip:=''; + move(s[i],tmp,sizeof(byte)); + port := ord(tmp)*256; + inc(i,sizeof(byte)); + move(s[i],tmp,sizeof(byte)); + port := port + ord(tmp); + nxt^.Address := nxt^.Address +':'+ inttostr(port); + + nxt^.Next:=Result; + Result:=nxt + end +end; + + (*----------------------------------------------------------------------------+ + "FUTInfo" gets "s" string type. Returns a PSInfo pointer list. It filters + common informations coming from an Epic engine based server. + +----------------------------------------------------------------------------*) + +function TqueryMain.FUTInfo (s : string) : PTSInfo;//b 2.1 rev 0.2 +var tmp : shortstring; + nxt : PTSInfo; + j : byte; + i : Word; +begin + Result:=new(PTSInfo); + Result^.Next := nil; + + i:=2; j:=0; + nxt:=new(PTSInfo); + + while i <= length(s) do + begin + tmp := ''; + + while (s[i] <> '\') and (i <= length(s)) + do begin + tmp := tmp + s[i]; + inc (i); + end; + + case j of + 0 : nxt^.Variable := tmp; + 1 : nxt^.Value := tmp; + end; + + if j < 1 then inc(j) + else begin + nxt^.Next:=Result; + Result:=nxt; + j:=0; + nxt:=new(PTSInfo) + end; + + inc (i); + + end; + + nxt^.Variable := 'IdPacket'; + nxt^.Value := 'UTInfo'; + nxt^.Next := Result; + + Result := nxt +end; + + (*----------------------------------------------------------------------------+ + "FUTPlayers" gets "s" string type. Return a PSPlayers pointer list. It + filters players informations coming from an Epic engine based server. + +----------------------------------------------------------------------------*) + +function TqueryMain.FUTPlayers (s : string) : PTSPlayers;//f ver 2.1 rev 01 +var tmp : ShortString; + nxt : PTSPlayers; + j,k : byte; + i : Word; +begin + Result:=new(PTSPlayers); + Result^.Next := nil; + + i:=2; j:=0; k:=0; + nxt:=new(PTSPlayers); + + while i <= length(s) do + begin + tmp := ''; + + if j=1 + then while (copy(s,i,6) <> '\frags') and (i < length(s)) + do begin tmp := tmp + s[i]; inc (i); end + else while (s[i] <> '\') and (i < length(s)) + do begin tmp := tmp + s[i]; inc (i); end; + + case j of + 0 : nxt^.id :=copy(tmp,8,2);//dernière valeur = queryid + 1 : nxt^.name := tmp; + 3 : nxt^.fragg := strtoint(tmp); + 5 : nxt^.ping := tmp; + 7 : nxt^.team := tmp; + end; + + if (j=7) and (copy(s,i,5) = '\mesh') then //ut first version j=7 !! + begin + while k < 9 do + begin + if s[i]='\' then inc(k); + inc(i); + end; + k:=0; + end + else inc (i); + + if j < 7 then inc(j) + else begin + nxt^.time := ''; + nxt^.Next:=Result; + Result:=nxt; + j:=0; + nxt:=new(PTSPlayers) + end; + + end; + + dispose(nxt) +end; + + (*----------------------------------------------------------------------------+ + "FUTSList" gets "s" string type. Returns a PSSList pointer list. It filters + server list coming from Epic master server. + +----------------------------------------------------------------------------*) + +function TQueryMain.FUTSList (s : string) : PTSSList; +var i : Word; + tmpip : String; + nxt : PTSSList; +begin + Result:=new(PTSSList); + Result^.Next := nil; + + i:=5; + + While (i < length(s)) do + begin + nxt:=new(PTSSList); + + While (s[i] <> #$0A) and (i < length(s)) do + if s[i]= #$09 then + begin + inc(i); + While (s[i] <> #$09) and (i < length(s)) do inc(i); + tmpip := tmpip + ':'; + inc(i); + While (s[i] <> #$0A) and (i < length(s)) do + begin + tmpip := tmpip + s[i]; + inc(i) + end; + end + else + begin + tmpip:=tmpip + s[i]; + inc(i); + end; + + Result^.Address := tmpip; + tmpip:=''; + + nxt^.Next:=Result; + Result:=nxt; + + inc(i) + end +end; + + (*----------------------------------------------------------------------------+ + "FiDSList" gets "s" string type. Return a PSSList pointer list. It filters + server list coming from iD master server. The syntax was inspired from + Coldstorage Kquery . + +----------------------------------------------------------------------------*) + +function TQueryMain.FiDSList (s : string) : PTSSList;//beta 1.3 rev 01 Release mem !! +var tmp,j : byte; + i, port : Word; + nxt : PTSSList; +begin + Result:=new(PTSSList); + Result^.Next := nil; + + i:=23; + if s[i] = '\' then inc(i) + else inc(i,3);//SOF2 + + While i+3 < length(s) do + begin + nxt:=new(PTSSList); + + move(s[i],j,sizeof(byte)); + nxt^.Address := inttostr(j)+'.'; + inc(i); + move(s[i],j,sizeof(byte)); + nxt^.Address:= nxt^.Address + inttostr(j)+'.'; + inc(i); + move(s[i],j,sizeof(byte)); + nxt^.Address:= nxt^.Address + inttostr(j)+'.'; + inc(i); + move(s[i],j,sizeof(byte)); + nxt^.Address:= nxt^.Address + inttostr(j)+':'; + inc(i); + move(s[i],tmp,sizeof(byte)); + port := ord(tmp)*256; + inc(i); + move(s[i],tmp,sizeof(byte)); + port := port + ord(tmp); + nxt^.Address:= nxt^.Address + inttostr(port); + inc(i,2); + + nxt^.Next:=Result; + Result:=nxt; + end; +end; + + (*----------------------------------------------------------------------------+ + "FiDSList" gets "s" string type. Returns an IdPlayers PSPlayers type and an + IdInfo PSInfo type. It filters players and common informations coming from an + iD engine based server. + +----------------------------------------------------------------------------*) + +procedure TQueryMain.FIDInfo (s : string; + var IdInfo : PTSInfo; + var IdPlayers : PTSPlayers); +var tmp : ShortString; + nxt : PTSInfo; + nxt2 : PTSPlayers; + j, NumPlayers : byte; + i : Word; +begin + IdInfo:=new(PTSInfo); + IdInfo^.Next := nil; + + i:=20; j:=0; + nxt:=new(PTSInfo); + + while (i <= length(s)) and (s[i] <> #$0A) do + begin + inc (i); + + tmp := ''; + while (s[i] <> #$0A) and (s[i] <> '\') do + begin tmp := tmp + s[i]; inc (i); end; + + case j of + 0 : nxt^.Variable := tmp; + 1 : nxt^.Value := tmp; + end; + + if j < 1 then inc(j) + else begin + nxt^.Next:=IdInfo; + IdInfo:=nxt; + j:=0; + nxt:=new(PTSInfo) + end; + end; + + IdPlayers:=new(PTSPlayers); + IdPlayers^.Next := nil; + + inc(i); j:=0; NumPlayers:=0; + nxt2:=new(PTSPlayers); + + while i < length(s) do + begin + tmp := ''; + + while (s[i] <> #$20) and (s[i] <> #$0A) do + + if j = 2 then while s[i]<> #$0A do + begin + tmp := tmp + s[i]; + inc(i); + end + else + begin + tmp := tmp + s[i]; + inc(i); + end; + + case j of + 0 : nxt2^.fragg := strtoint(tmp); + 1 : nxt2^.ping := tmp; + 2 : nxt2^.name := iDNameFormat(tmp) + end; + + if j < 2 then inc(j) + else + begin + inc(NumPlayers); + nxt2^.id := inttostr(NumPlayers); + nxt2^.team := ''; + nxt2^.time := ''; + nxt2^.Next:=IdPlayers; + IdPlayers:=nxt2; + j:=0; + nxt2:=new(PTSPlayers) + end; + inc (i); + end; + + dispose(nxt2); + + nxt^.Variable := 'players'; + nxt^.Value := inttostr(Numplayers); + nxt^.Next := IdInfo; + IdInfo:=nxt; + + nxt:=new(PTSInfo); + + nxt^.Variable := 'IdPacket'; + nxt^.Value := 'IdInfo'; + nxt^.Next := IdInfo; + + IdInfo:=nxt +end; + +end. diff --git a/servermain.dcu b/servermain.dcu new file mode 100644 index 0000000000000000000000000000000000000000..97171b52e7d0fcad4d58cd530b56285be922423f GIT binary patch literal 26484 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 MsE}UF3&H+>0sVYbkN^Mx literal 0 HcmV?d00001 diff --git a/servermain.ddp b/servermain.ddp new file mode 100644 index 0000000000000000000000000000000000000000..696e61613e2d8411a0a2c3acfbf448a9cfa319ec GIT binary patch literal 69 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Ph$;KI)SCUzhlbT}4#=r!G JNFqiM5db_I4>14$ literal 0 HcmV?d00001 diff --git a/servermain.dfm b/servermain.dfm new file mode 100644 index 0000000..1cecdbc --- /dev/null +++ b/servermain.dfm @@ -0,0 +1,1091 @@ +object MainServer: TMainServer + Tag = 2 + Left = 159 + Top = 177 + Width = 734 + Height = 432 + BorderIcons = [biSystemMenu, biMaximize] + Caption = 'Main Server' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object TopPanel: TShape + Left = 0 + Top = 0 + Width = 726 + Height = 81 + Align = alTop + Brush.Color = clBtnFace + end + object SBSearch: TSpeedButton + Left = -3 + Top = 1 + Width = 63 + Height = 26 + Cursor = crHandPoint + Caption = ' &Find' + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777777777777777777700000777770000070F000777770F00070F000777770F + 0007000000070000000700F000000F00000700F000700F00000700F000700F00 + 00077000000000000077770F00070F0007777700000700000777777000777000 + 77777770F07770F0777777700077700077777777777777777777} + Spacing = 0 + OnClick = SBSearchClick + end + object LMs: TLabel + Left = 703 + Top = 7 + Width = 14 + Height = 13 + Caption = 'Ms' + end + object SBStop: TSpeedButton + Left = 59 + Top = 1 + Width = 55 + Height = 26 + Cursor = crHandPoint + Caption = '&Stop' + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000130B0000130B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333FFFFF3333333333999993333333333F77777FFF333333999999999 + 3333333777333777FF3333993333339993333377FF3333377FF3399993333339 + 993337777FF3333377F3393999333333993337F777FF333337FF993399933333 + 399377F3777FF333377F993339993333399377F33777FF33377F993333999333 + 399377F333777FF3377F993333399933399377F3333777FF377F993333339993 + 399377FF3333777FF7733993333339993933373FF3333777F7F3399933333399 + 99333773FF3333777733339993333339933333773FFFFFF77333333999999999 + 3333333777333777333333333999993333333333377777333333} + NumGlyphs = 2 + OnClick = SBStopClick + end + object LPing: TLabel + Left = 598 + Top = 7 + Width = 21 + Height = 13 + Caption = 'Ping' + end + object SBPing: TSpeedButton + Tag = 4 + Left = 113 + Top = 1 + Width = 56 + Height = 26 + Cursor = crHandPoint + Caption = ' &Ping' + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00333333333333 + 3333333333FFFFF3333333333700000733333333F777773FF3333333007F0F70 + 0333333773373377FF3333300FFF7FFF003333773F3333377FF33300F0FFFFF0 + F00337737333F37377F33707FFFF0FFFF70737F33337F33337FF300FFFFF0FFF + FF00773F3337F333377F30707FFF0FFF70707F733337F333737F300FFFF09FFF + FF0077F33377F33337733707FF0F9FFFF70737FF3737F33F37F33300F0FF9FF0 + F003377F7337F373773333300FFF9FFF00333377FF37F3377FF33300007F9F70 + 000337777FF7FF77773333703070007030733373777777737333333333330333 + 333333333337FF33333333333330003333333333337773333333} + NumGlyphs = 2 + Spacing = 0 + OnClick = SBPingClick + end + object SBSetup: TSpeedButton + Tag = 4 + Left = 168 + Top = 1 + Width = 68 + Height = 26 + Cursor = crHandPoint + Caption = ' &Setup' + Glyph.Data = { + 76010000424D7601000000000000760000002800000020000000100000000100 + 04000000000000010000120B0000120B00001000000000000000000000000000 + 800000800000008080008000000080008000808000007F7F7F00BFBFBF000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00555550FF0559 + 1950555FF75F7557F7F757000FF055591903557775F75557F77570FFFF055559 + 1933575FF57F5557F7FF0F00FF05555919337F775F7F5557F7F700550F055559 + 193577557F7F55F7577F07550F0555999995755575755F7FFF7F5570F0755011 + 11155557F755F777777555000755033305555577755F75F77F55555555503335 + 0555555FF5F75F757F5555005503335505555577FF75F7557F55505050333555 + 05555757F75F75557F5505000333555505557F777FF755557F55000000355557 + 07557777777F55557F5555000005555707555577777FF5557F55553000075557 + 0755557F7777FFF5755555335000005555555577577777555555} + NumGlyphs = 2 + Spacing = 0 + OnClick = SBSetupClick + end + object Image1: TImage + Left = 2 + Top = 28 + Width = 234 + Height = 52 + Cursor = crHandPoint + Hint = 'www.cstiger.de' + Picture.Data = { + 07544269746D61703A330000424D3A330000000000003604000028000000E900 + 0000330000000100080000000000042F00000000000000000000000100000001 + 0000ADAAAD00A5A2A500737173003938390094929400F7EFEF00BDB6B500E7DF + DE00DED7D600847D7B008C868400C6BAB500E7DBD600DED3CE00CEBEB500B5A6 + 9C008C827B00D6C7BD00D6BAA500A5928400CEB6A5007B6D6300BDAA9C009C8E + 8400DECBBD00947963008C756300947D6B00B59A8400BDA6940073655A009486 + 7B005234180084552900A5754A00946942008C6542007355390063493100A579 + 5200A57D5A009C795A008C6D52007B614A00B5927300735D4A00AD8E73009C82 + 6B005A381800392410009C6531007B512900634121009C6939005A493900F7EF + E700EFEBE7008C5D29009C714200946D420084654200AD865A0094755200BD9A + 7300B5967300BDA28400C6AA8C00B59E8400BDA68C00C6B29C00C6B6A500E7D7 + C600E7DBCE006B4921007B55290073553100846139006B5131007B5D3900735D + 42008C715200A58A6B009C866B008C796300AD9A8400B5A28C00A5968400422C + 100063554200CEC3B5005241290073695A007B716300A59E9400B5B2AD009C9A + 940042413900525552005A5D5A00636563006B6D6B00CECFCE00C6C7C6004249 + 4A00FFFFFF00FFFFFF0000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000686868686868686868686868686868686868686868686868686868686868 + 68686868686868686868686868686868686868686868050C6565666666666666 + 6666666666666666666666666666666666666666666666666666666666666666 + 6666666666666666666666666666666666666666666666666666666666666666 + 6666666666666666666666666666666666666666666666666666666666666666 + 6666666666666666666666666666666666666666666666666666666666666666 + 6666666666666666666666666666666666666666666666666666666666666666 + 6666666666666666666666000000686868686868686868686868686868686868 + 6868686868686868686868686868686868686868686868686868686868686868 + 6868070102646464646464646464646464646464646464646464646464646464 + 6464646464646464646464646464646464646464646464646464646464646464 + 6464646464646464646464646464646464646464646464646464646464646464 + 6464646464646464646464646464646464646464646464646464646464646464 + 6464646464646464646464646464646464646464646464646464646464646464 + 6464646464646464646464646464646464646464646464000000686868686868 + 6868686868686868686868686868680538070707073838383838383838380505 + 0505686868686868686868686868075F62606003030303030303030303030303 + 0303030303030303030303030303030303030303030303030303030303030303 + 0303030303030303030303030303030303030303030303030303030303030303 + 0303030303030303030303030303030303030303030303030303030303030303 + 0303030303030303030303030303030303030303030303030303030303030303 + 0303030303030303030303030303030303030303030303030303030303030303 + 0303030000006868686868686868686868686868686868686805085900015F5F + 0101005E5E5E5E5E5E5E5E060666083805686868686868680C32323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232320000006868686868686868686868686868 + 6868686838665F02636161616262636363636363636363646409040065386868 + 68686868681D3232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232320000006868 + 68686868686868686868686868686838590A6267600303030303606060606060 + 60606060606761630A0638686868686868054032323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323939393932323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323200000068686868686868686868686868686868686504623626 + 4A4A363636606060603636606060606003030360611059056868686868680C3D + 3232323232323232323232323232323232323232393939323232323232323232 + 3232323932323232323232323239393232392149492139323232323232323232 + 3239323232323232323232323932323232323232323232323232323939323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323200000068686868686868686868 + 68686868686838553C323232323232323232323232323232323232394A360303 + 60625F0868686868686805182232323232323232323232323232323232323921 + 333333332139323239393939392133332139393232323239213333332139680E + 3449333321393939393939213333332139393939393921333333213939393939 + 3232323232392133333339393939333333332139393921332139392139393939 + 3939393939393939393939393939392133333333213921213321393939213333 + 2139393939393939393939393939393939323939393939213333213932323200 + 000068686868686868686868686868686868593B323232323232323232323232 + 323232323232323232324A600367025905686868686868054532323232323232 + 3232323232323232323221493434343449332121334933333349344949333932 + 323232214E4E34344933680E2034343449333349493333493449493333334949 + 3333493449493333334933393232323239214E4E343449332149343434344933 + 2133494949333349332121334933334933213349332121334933334934343434 + 4933334934493321334949493333494921393349333349493333493321393349 + 3333493434494933393232000000686868686868686868686868686868383D32 + 3232323232323232323232323232323232323232323232396060630038686868 + 68686868382C3232323232323232323232323232323968686868380E4D344951 + 682F494E486868683833213232324068686868533449680E0F68680F3034680E + 344916686868685033680E344916686868685033680E3433393939212E686868 + 685334495168680D0D683049504868684533680E343311683449680E3433680E + 3433116834494868680E680E346868680D4D494E16686838330E68343351682F + 490E683449680E34332E681B342F386868684533393232000000686868686868 + 6868686868686868685935323232323232323232323232323232323232323232 + 323232324A606201076868686868686805593532323232323232323232323232 + 32396868532F4568682B342F681B3448685330255649213232323D2C24503868 + 2B496868172F38682B34680E3456680B20342F2A49680E3456680B20342F2A49 + 680E3433213333333E2E245038682B4938381B5668683049383856512921680E + 34490E683449680E3449680E34490E68345168563456680B302A494B680E4916 + 680F2F51211168344951681B340E683449680E343351681B4D683826342A2F33 + 3932320000006868686868686838070C07056868684032323232323232323232 + 3232323232323232323232323232323232366201076868686868686868051C32 + 3232323232323232323232323239686820493944680D202F681B34680D53531B + 1B2533393232323933340D681B49680D20342F680E34680E340E6853531B1B2A + 49680E340E6853531B1B2A49680E204943110E54333349340D681B49680E3449 + 4868302F685634492121680E30340E683449680E3034680E30340E68344E6848 + 2F1B680B3449560D681649680D30493321116830342F681B340E683449680E30 + 495168531B680F53531B1B49213232000000686868686805085E5F5F01660768 + 382732323232323232323232323232323232323232323232323232323236635E + 38686868686868686868183B3232323232323232323232323239686820493921 + 6868202F681B4968380E0E0D682A213232323933560D68384E33680D20341B68 + 0E34680E340E680E0E0E681649680E340E680E0E0E6816496838203454111144 + 3349560D68384E33680E343311683451685634343333680D20300E683449680D + 2030680D20340E68343329450E0E680E3448680E1B49336848343449330E6826 + 301B681B490E683449680D30341B681B2F68480E0E3838493932320000006868 + 686805655F64626162095E07083B323232323232323232323232323232323232 + 3232323232323232325809660568686868686868686805403232323232323232 + 32323232323968682034333368683451682F3345384E490E3833393232322338 + 6838164E21396868162F38682A33680E493E6851492F685033680E343E685149 + 2F68503368680E2F4C21393923386838164E2139680E3321116849333838562F + 4E336868171B386849216868565668681656683833212C24492F684533684849 + 494C211468452F50330E680B1B0E685133116849336868562F38682A33381149 + 4E384521393232000000686868680C0163670303606709065935323232323232 + 3232323232323232323232323232323232323232324F5F0C6868686868686868 + 686868593232323232323232323232323239686820303456680D495168513323 + 1468684823393232323211680E20344921396811456868452139680E33394437 + 68382E3939680E3433443768382E3939681111683939323211680E2034492139 + 68113939186839393A4868682921680E0E686851393968481168383E1168382E + 3939443768684523392C3768682E3939146868452111681B6868112139116833 + 2168114568684521393D48686845393932323200000068686805065B4F4A3660 + 0360610446353232323232323232323232323232323232323232323232323232 + 321A59056868686868686868686868073D323232323232323232323232326868 + 1B1B1668683E2139333321393232323232323232323214680E2F2F5021393232 + 3232323232322133333932323232323239680E49213232323232323232323232 + 3232323214680E2F2F5021393232323232323232323232323239680E49333932 + 3232323232323232323232323232323232323232323232323232323232323232 + 3911684933393932323933332139323232323232323232323232323232323200 + 000068686808193232323239360367021D3B3232323232323232323232323232 + 323232323232323232323232325507686868686868686868686868051D323232 + 323232323232323232326868686838452339392C682E39393232323232323232 + 3232321438686844393232323232323232326811213932323232323232681133 + 3932323232323232323232323232323232143868684439323232323232323232 + 3232323232326811333932323232323232323232323232323232323232323232 + 3232323232323232323232323218683339323232321868333932323232323232 + 3232323232323232323232000000686868403232323232323960606355223232 + 3232323232323232323232323232323232323232323232321965056868686868 + 686868686868686859323232323232323232323232323232393939323232323D + 1828393232323232323232323232323232393932323232323232323232321844 + 3932323232323232321844393232323232323232323232323232323232323232 + 3232323232323232323232323232323232321844393232323232323232323232 + 3232323232323232323232323232323232323232323232323244183932323232 + 324418393232323232323232323232323232323232323200000068680C223232 + 32323232324A60615F2C32323232323232323232323232323232323232323232 + 3232323B060568686868686868686868686868680C2732323232323232323232 + 3232323232323232323232323232323232323232323232323232323232393232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232320000006868453232323232323232326061044622323232323232323232 + 3232323232323232323232323232355538686868686868686868686868686868 + 052C323232323232323232323232323232323232323239393939393939393939 + 3232323239392121212121393939323232323232323232323232323939393232 + 3232323232323232323239393232323232323232323232323232393939393939 + 3939393939393232323232323239393939393939393939393939393232323232 + 3239393232323232323232323239393939323232323232323232323232323232 + 32323232323232323232323232323200000068682C3232323232323232323661 + 5F081C35323232323232323232323232323232323232323232322C0768686868 + 6868686868686868686868680541323232323232323232323232323232323239 + 3921333349494949494933333939393933494949494949493333393932323232 + 3232323232393933332139323232323232323232392133332139323232323232 + 3232323939213333334949494949493333213932323232323933334949494949 + 4949494933332139323232392133332139323232323232323921333333393232 + 3232323232323232323232323232323232323232323232323232320000006805 + 3D3232323232323232324A6201380C2732323232323232323232323232323232 + 3232323232520768686868686868686868686868686868680546323232323232 + 3232323232323232323921334934343030303030303034493339393349343020 + 2020203030344933393232323232323232393349344933393232323232323232 + 2149343449213232323232323239393333493434303030303030303034493339 + 3232323933493020202030303030303034343339323232214934344921323232 + 3232323933493434493339323232323232323232323232323232323232323232 + 3232323232323200000068053D3232323232323232324F640605684635323232 + 323232323232323232323232323232323D086868680538070705686868686868 + 6868686868593232323232323232323232323232393349343020202020202020 + 20202034332121331B5353535326202020203049333932323232323232214930 + 2034333932323232323232393334202034333932323232323921333430202020 + 2020202020202057572049213932323933305757575720202020202020344921 + 3232393334202034333932323232322149302020343339323232323232323232 + 3232323232323232323232323232323232323200000068055232323232323232 + 32323C04086868053D3232323232323232323232323232323232323D0C686868 + 38655E0101060805686868686868686868473532323232323232323232323239 + 334930530B38686868686868680E2B4933443868686868686868380F26575730 + 49213232323232324068686857204939323232323232321868680B2034333932 + 323232392149342D0F0B68686868686868380B1F585734333932326868686868 + 68686868686868680E49333932321868680B2034333932323232394568686817 + 4921393232323232323232323232323232323232323232323232323232323200 + 00006868413232323232323232321A6605686868593B32323232323232323232 + 3232323232323D0C68686838590A6362620201650568686868686868680C3B32 + 323232323232323232323933250F6868686868686868686868685133212C6868 + 6868686868686868385357573433393232323232406868685720493932323232 + 3232321868680B57343339323232392149563868686868686868686868686868 + 0B573433393232686868686868686868686868681121393932321868680B5734 + 3339323232322368686838303339323232323232323232323232323232323232 + 32323232323232323232320000006868183B3232323232323235453868686868 + 6840353232323232323232323232323235520C68686868650A6160036067635F + 0868686868686868680C3B3232323232323232323239332F3868686868684811 + 1118184868682C39394068182C2C2C404448686868682D572049393232323232 + 4068686857204939323232323232321868680B57303339323232214E0D686868 + 68684811442C2C14186868680B5730333932326868680D0B0E0E111818181818 + 4439323232321868680B5730333932323239456868682D343339323232323232 + 32323232323232323232323232323232323232323232320000006868052C3532 + 32323232322C38686868686868383D3232323232323232323232323540386868 + 686838001E583660030367645E38686868686868680C3B323232323232323232 + 3239516868686838542439323232323232403D32322232323232323232324068 + 68680D3120492132323232324068686857204939323232323232321868680B57 + 3033393232394C38686868684524393932323232321868680B57303339323268 + 68685C5734333932323232323232323232321868680B57303339323239236868 + 680D303339323232323232323232323232323232323232323232323232323232 + 3232320000006868680C3D35323232353D0C6868686838073838182732323232 + 3232323232323B41056868686868182232323232260303670A65686868686868 + 6865353232323232323232323951686868680E49213932323232323232323232 + 3232323232323232323239456868685A20492132323232324068686857204939 + 323232323232321868680B57303339323223386868680D4E3339323232323232 + 321168680B5730333932326868685C5734333932323232323232323232321868 + 680B57303339323239456868682D492139323232323232323232323232323232 + 3232323232323232323232323232320000006868686807413D273D1D38686868 + 38655E01000608592735323232323232352712056868686868053D3232323232 + 32260360640638686868686868593232323232323232323223386868680F3433 + 3932323232323232323232323232323232323232323939516868685C20493932 + 323232324068686857204939323232323232321868680B573033393239456868 + 680B34333932323232323939391168680B5730333932326868685C5734333939 + 393232323232323232321868680B5720492139214C6868680D34333932323232 + 3232323232323232323232323232323232323232323232323232320000006868 + 686868680538056868686838590A646262645F66182C3B353232352240476868 + 6868686868183B32323232323232360362010768686868680545323232323232 + 32323232446868680B2049393232323232323232323232323232323232323239 + 3933495668686853343339323232323240686868572049393232323232323218 + 68680B573033393223686868382049213232323232392133490E68680B573433 + 393232686868155730493333212121213939323232321868680B572034494949 + 166868682B492139323232323232323232323232323232323232323232323232 + 3232323232323200000068686868686868686868686805660A6160606067635F + 0838594140401D1807070C0C3805686868453532323232323232396061040C68 + 68686868054132323232323232323232386868685A3433393232323232323232 + 32323232323232323239393349344D386868684D493932323232323240686868 + 57204939323232323232321868680B5730333932146868681F20493932323232 + 39214934300E68680B5734333932326868681531573034343449494949333932 + 32321868680B31572030304D6868680B30333932323232323232323232323232 + 3232323232323232323232323232323232323200000068686868686868686868 + 6868075F3C5836360303670206056868686805075901045F0065386868413532 + 323232323232323667040C6868686868052C3232323232323232323A6868680B + 573433393232323232323232323232323232323239334934302D386868680E49 + 21393232323232324068686857204939323232323232321868680B5730333932 + 18686868573033393232323239214930200B68680B2049333932326868681531 + 31572020202020303433393232321868680B3131575726386868682630492132 + 3232323232323232323232323232323232323232323232323232323232323200 + 0000686868686868686868686868463B323232324A6060620107686868680C00 + 0962616163046605684135323232323232323226615F0768686868680C273232 + 32323232323232406868681F5734333932323232323232323232323232323239 + 3334302D0D68686868384C393932323232323232406868685720493932323232 + 3232321868680B57303339326868680B57204939323232326868686868686868 + 0E4933393232326868685D15155C53535353532B343339323232186868380B0B + 0B0B686868685C57203433393232323232323232323232323232323232323232 + 323232323232323232323200000068686868686868686868680C273232323232 + 324A0361040C686868385E026760030360625F0868453532323232323232324A + 6300386868686868593232323232323232323240686868155730333932323232 + 3232323232323232323239333417386868686868452139323232323232323232 + 4068686857204939323232323232321868680B57303339326868680B57204939 + 323232326868686868686868112139393232326868686868686868686868680E + 49333932323218686868686868686868381B2020202049333932323232323232 + 3232323232323232323232323232323232323232323232000000686868686868 + 68686868681D323232323232323236670A08686868651B4F4A4A360303670206 + 05183532323232323232324F10660568686868051D3232323232323232323240 + 6868685C572049213232323232323232323232323232212F3868686868684523 + 3932323232323232323232324068686857204939323232323232321868680B57 + 303339326868680B312034333932323218181818181818184439323232323268 + 6868686868686868686868113939323232321868686868686868686868683853 + 5757304939323232323232323232323232323232323232323232323232323232 + 32323200000068686868686868686868053D32323232323232324A61040C6868 + 381332323232324A6060620107072732323232323232323B5E0768686868680C + 3D323232323232323232323D6868680F57203433393232323232323232323232 + 3239116868686868452439323232323232323232323232324068686857204939 + 323232323232321868680B573033393237686838575730492139323232323232 + 32323232323232323232326868685D5C1B512C2C4040403D3232323232321868 + 680B573033393D44376868685C57203421393232323232323232323232323232 + 3232323232323232323232323232320000006868686868686868686807223232 + 3232323232324A620107686846353232323232324A0361040C68413532323232 + 3232351C07686868686868463232323232323232323232326868680D57572049 + 333932323232323232323232322C686868680F25333932323232323232323232 + 323232322C68686857204939323232323232321868680B573033393218686868 + 5A572034332139323232323232323232323232323232326868685C5734333932 + 323232323232323232321868680B57303339323232186868685A573433393232 + 3232323232323232323232323232323232323232323232323232320000006868 + 6868686868686868473B32323232323232324F02060568053D32323232323232 + 3260670A08680C27353232323235270C686868686868381C3232323232323232 + 32323232146868682D5757203433213939393939393939393948686868152034 + 333932323232323232323232323239392C686868572049213939323232323218 + 68680B5730333932406868680E57572034493339393939393939393939393232 + 3232326868685C5734333939393932323232323232321868680B573049213939 + 39236868685D5734333932323232323232323232323232323232323232323232 + 3232323232323200000068686868686868686868473B32323232323232323C5F + 0868681835323232323232323226670408686818273535353527186868686868 + 6805593B3232323232323232323232323D686868382657572034493333332121 + 33333321396868680D3157344933393939393939393239392121213351686868 + 31573449332121212139391868680B5730333932323768686853575720303449 + 3333212121333333332139323232326868685C57304933332121212121393932 + 32321868680B57203433333333496868680B2049213232323232323232323232 + 3232323232323232323232323232323232323200000068686868686868686868 + 3822323232323232323219660568681D3232323232323232324A615F07686868 + 47413D3D410C6868686868686807413232323232323232323232323232146868 + 68382657572020343434343434343449336868680B5757203449494949494933 + 39393933494949341B68686831572034343449494933211168680B5734333932 + 323D686868685320575720303434343434343434344921393232326868681531 + 20303434343449494933213932321868680B315720343434344D6868680B3433 + 3932323232323232323232323232323232323232323232323232323232323200 + 000068686868686868686868682C323232323232323546386868682C32323232 + 3232323232396200386868686868050568686868686868680545353232323232 + 323232323232323232321868686838562020202020202020204D304933486868 + 6826575720202030303034493339334934302020536868683131572020202030 + 3449331168680B2034333932323240686868680D2B202020202020202020202B + 304933393232326868685C5757202020202020203449333932321868680B5757 + 57202020260D6868681B49213232323232323232323232323232323232323232 + 32323232323232323232320000006868686868686868686868593B3232323232 + 324038686868682C3232323232323232324F6406056868686868686868686868 + 68686868652C32323232323232323232323232323232321868686868680E5353 + 535353170D683449212C6868683856202020202653173449332E51511B535353 + 0F68686853535353535353533449331168680E34492139323232324068686868 + 68380F5353535353530E3868344921393232326868680F535353535353535353 + 4D49333932321868680D53535353530E68686868483321393232323232323232 + 3232323232323232323232323232323232323232323232000000686868686868 + 6868686868681D2235323235523868686868682C3232323232323232324F0408 + 6868686868686868686868686868680741323232323232323232323232323232 + 3232323240376868686868686868686868684E33393218686868686868686868 + 6838493339686868686868686868686868686868686868684933391868680E33 + 3339323232323232221868686868686868686868686868684C21393232323268 + 6868686868686868686868685133213932321868686868686868686868686838 + 2439393232323232323232323232323232323232323232323232323232323232 + 32323200000068686868686868686868686805592C3D3D453868686868686841 + 3232323232323232321A06386868686868686868686868686868071C22323232 + 3232323232323232323232323232323232324018686868686868686868482839 + 3232324237686868686868686868213939686868686868686868686868686868 + 6868686821393918686811393932323232323232323222143768686868686868 + 6868681123393232323232686868686868686868686868682E39393232321868 + 6868686868686868684844393932323232323232323232323232323232323232 + 3232323232323232323232323232320000006868686868686868686868686868 + 0505056868686868686868183532323232323232351D07686868686868686868 + 6868686868381D3D323232323232323232323232323232323232323232323232 + 323D404040404040323232323232323232401418181818142C23323232404040 + 404040404040404040404040404040403232323D40403D323232323232323232 + 323232323232404040404040403A3232323232323232323F4040404040404040 + 404040403A32323232323D40404040404040403D323232323232323232323232 + 3232323232323232323232323232323232323232323232323232320000006868 + 6868686868686868686868686868686868686868686868053D35323232323232 + 5207686868686868686868686868686838002C32323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323200000068686868686868686868686868686868686868686868 + 686868681822353232323527476868686868686868686868686868385E413232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323200000068686868686868686868 + 6868686868686868686868686868686868183D223B222C476868686868686868 + 6868686868683806413232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323200 + 0000686868686868686868686868686868686868686868686868686868683847 + 1847056868686868686868686868686868680841323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232000000686868686868686868686868686868686868 + 6868686868686868686868686868686868686868686868686868686868384132 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232000000686868686868 + 6868686868686868686868686868686868686868686868686868686868686868 + 6868686868686868054132323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 3232323232323232323232323232323232323232323232323232323232323232 + 323232000000} + OnClick = Image1Click + end + object LName: TLabel + Left = 240 + Top = 29 + Width = 28 + Height = 13 + Caption = 'Name' + end + object Label1: TLabel + Left = 412 + Top = 28 + Width = 28 + Height = 13 + Caption = 'Game' + end + object Label2: TLabel + Left = 548 + Top = 28 + Width = 14 + Height = 13 + Caption = 'On' + end + object lvServers: TListView + Tag = 1 + Left = 0 + Top = 81 + Width = 726 + Height = 305 + Align = alClient + Columns = < + item + Caption = 'IP' + Width = 120 + end + item + Caption = 'Host Name' + Width = 150 + end + item + Caption = 'Description' + Width = 120 + end + item + Caption = 'O.S.' + end + item + Caption = 'Map' + end + item + Caption = 'Ping' + end + item + Caption = 'Population' + Width = 65 + end + item + Caption = 'PassWord' + Width = 70 + end + item + Caption = 'AC' + Width = 40 + end + item + Caption = 'FF' + end + item + Caption = 'TimeLeft' + Width = 60 + end + item + Caption = 'TypeServer' + Width = 70 + end> + Ctl3D = False + ReadOnly = True + RowSelect = True + PopupMenu = Pop + SmallImages = MainForm.ImgLst + TabOrder = 0 + ViewStyle = vsReport + OnColumnClick = lvServersColumnClick + OnCompare = lvServersCompare + OnContextPopup = lvServersContextPopup + OnDblClick = lvServersDblClick + end + object lvServers2: TListView + Tag = 2 + Left = 0 + Top = 81 + Width = 726 + Height = 305 + Align = alClient + Columns = < + item + Caption = 'IP' + Width = 150 + end + item + Caption = 'Name' + Width = 170 + end + item + Caption = 'Description' + Width = 300 + end> + Ctl3D = False + ReadOnly = True + RowSelect = True + PopupMenu = Pop2 + SmallImages = MainForm.ImgLst + TabOrder = 10 + ViewStyle = vsReport + OnColumnClick = lvServersColumnClick + OnCompare = lvServersCompare + OnContextPopup = lvServers2ContextPopup + OnDblClick = lvServersDblClick + end + object CBMap: TComboBox + Left = 410 + Top = 3 + Width = 105 + Height = 21 + Hint = 'Insert a map title' + BevelOuter = bvRaised + BiDiMode = bdRightToLeft + ItemHeight = 13 + ParentBiDiMode = False + ParentShowHint = False + ShowHint = True + TabOrder = 1 + end + object CBmod: TComboBox + Left = 515 + Top = 3 + Width = 81 + Height = 21 + Hint = 'Insert a type game or mod' + ItemHeight = 13 + ParentShowHint = False + ShowHint = True + TabOrder = 2 + end + object CBPinging: TComboBox + Left = 622 + Top = 3 + Width = 29 + Height = 21 + Hint = 'Choose a sign' + BevelOuter = bvRaised + ItemHeight = 13 + MaxLength = 1 + ParentShowHint = False + ShowHint = True + TabOrder = 3 + Items.Strings = ( + '' + '=' + '<' + '>') + end + object CBPing: TComboBox + Left = 652 + Top = 3 + Width = 49 + Height = 21 + Hint = 'Insert a ping' + BevelOuter = bvRaised + ItemHeight = 13 + ParentShowHint = False + ShowHint = True + TabOrder = 4 + Items.Strings = ( + 'none') + end + object StatusB: TStatusBar + Left = 0 + Top = 386 + Width = 726 + Height = 19 + Panels = < + item + Alignment = taCenter + Width = 100 + end + item + Alignment = taCenter + Width = 135 + end + item + Width = 50 + end> + SimplePanel = False + end + object CBEGames: TComboBoxEx + Left = 239 + Top = 2 + Width = 171 + Height = 22 + Hint = 'Choose a game' + ItemsEx.CaseSensitive = False + ItemsEx.SortType = stNone + ItemsEx = < + item + Caption = 'Half-Life [Won.East]' + ImageIndex = 1 + SelectedImageIndex = 1 + end + item + Caption = 'Half-Life [Won.Central]' + ImageIndex = 1 + SelectedImageIndex = 1 + end + item + Caption = 'Half-Life [Won.West]' + ImageIndex = 1 + SelectedImageIndex = 1 + end + item + Caption = 'Steam [Steam.Central]' + ImageIndex = 24 + SelectedImageIndex = 24 + end + item + Caption = 'Jedi Knight 2' + ImageIndex = 19 + Indent = 0 + SelectedImageIndex = 19 + end + item + Caption = 'Quake 3 Arena' + ImageIndex = 16 + Indent = 0 + SelectedImageIndex = 16 + end + item + Caption = 'Wolfenstein Enemy Territory' + ImageIndex = 18 + Indent = 0 + SelectedImageIndex = 18 + end + item + Caption = 'Return to Castle Wolfenstein' + ImageIndex = 17 + Indent = 0 + SelectedImageIndex = 17 + end + item + Caption = 'Soldier of Fortune 2' + ImageIndex = 20 + Indent = 0 + SelectedImageIndex = 20 + end + item + Caption = 'Unreal 2003' + ImageIndex = 9 + Indent = 0 + SelectedImageIndex = 9 + end + item + Caption = 'Buddy' + ImageIndex = 22 + SelectedImageIndex = 22 + end + item + Caption = 'Server' + ImageIndex = 0 + SelectedImageIndex = 0 + end> + Style = csExDropDownList + StyleEx = [] + Ctl3D = False + ItemHeight = 16 + ParentCtl3D = False + ParentShowHint = False + ShowHint = True + TabOrder = 5 + OnClick = CBEGamesClick + Images = MainForm.ImgLst + DropDownCount = 8 + end + object CBName: TComboBox + Left = 239 + Top = 43 + Width = 171 + Height = 21 + Hint = 'Please insert 2 minimum characters' + BevelOuter = bvRaised + BiDiMode = bdRightToLeft + DropDownCount = 5 + ItemHeight = 13 + ParentBiDiMode = False + ParentShowHint = False + ShowHint = True + TabOrder = 6 + end + object CBGames: TComboBoxEx + Left = 410 + Top = 43 + Width = 135 + Height = 22 + Hint = 'Choose a game' + ItemsEx.CaseSensitive = False + ItemsEx.SortType = stNone + ItemsEx = < + item + Caption = 'All the games' + ImageIndex = 0 + SelectedImageIndex = 0 + end + item + Caption = 'Half-Life' + ImageIndex = 1 + Indent = 0 + SelectedImageIndex = 1 + end + item + Caption = 'Quake 3 Arena' + ImageIndex = 16 + Indent = 0 + SelectedImageIndex = 16 + end + item + Caption = 'Unreal 2003' + ImageIndex = 9 + Indent = 0 + SelectedImageIndex = 9 + end + item + Caption = 'Battlefield 1942' + ImageIndex = 10 + SelectedImageIndex = 10 + end> + Style = csExDropDownList + StyleEx = [] + Ctl3D = False + ItemHeight = 16 + ParentCtl3D = False + ParentShowHint = False + ShowHint = True + TabOrder = 7 + Images = MainForm.ImgLst + DropDownCount = 8 + end + object CBNetwork: TComboBoxEx + Left = 545 + Top = 43 + Width = 112 + Height = 22 + Hint = 'Choose a network' + ItemsEx.CaseSensitive = False + ItemsEx.SortType = stNone + ItemsEx = < + item + Caption = 'cstiger.de' + ImageIndex = 23 + SelectedImageIndex = 23 + end> + Style = csExDropDownList + StyleEx = [] + Ctl3D = False + ItemHeight = 16 + ParentCtl3D = False + ParentShowHint = False + ShowHint = True + TabOrder = 8 + Images = MainForm.ImgLst + DropDownCount = 8 + end + object Pop: TPopupMenu + Tag = 1 + Images = MainForm.ImgLst + Left = 664 + Top = 40 + object Go1: TMenuItem + Tag = 1 + Caption = 'Go !' + Default = True + OnClick = Go1Click + end + object Query1: TMenuItem + Tag = 1 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00700000000000 + 0770787777777777070078FFFFFFF000000078FFFFFF0877800778FFFFF0877E + 880778FFFFF07777870778FFFFF07E77870778FFFFF08EE7880778FFFFFF0877 + 807778FFFFFFF000077778FFFFFFFFFF077778FFFFFFF000077778FFFFFFF070 + 777778FFFFFFF007777778888888807777777777777777777777} + Caption = 'Query server' + OnClick = lvServersDblClick + end + object Refreshserver1: TMenuItem + Tag = 1 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00770000000000 + 0007770FFFFFFFFFFF07770FFFFF2FFFFF07770FFFF22FFFFF07770FFF22222F + FF07770FFFF22FF2FF07770FFFFF2FF2FF07770FF2FFFFF2FF07770FF2FF2FFF + FF07770FF2FF22FFFF07770FFF22222FFF07770FFFFF22FFFF07770FFFFF2FF0 + 0007770FFFFFFFF0F077770FFFFFFFF007777700000000007777} + Caption = 'Refresh server' + OnClick = Refreshserver1Click + end + object N1: TMenuItem + Caption = '-' + end + object Importtobookmark1: TMenuItem + Tag = 1 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00770000000000 + 77777700333333330777770F033333333077770BF03333333307770FBF000000 + 0000770BFBFBFBF07777770FBFBFBFB07000780BFB00000077008CC00022C087 + 70708CCC22226C0007778C22222C2C0777778C722C2C2207777788CF62CC2287 + 777778F7672220777777778C7822077777777778888877777777} + Caption = 'Import to bookmark' + OnClick = Importtobookmark1Click + end + object N2: TMenuItem + Caption = '-' + end + object Copyiptoclipboard1: TMenuItem + Tag = 1 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 777777777744444444477777774FFFFFFF477777774F00000F470000004FFFFF + FF470FFFFF4F00000F470F00004FFFFFFF470FFFFF4F00F444470F00004FFFF4 + F4770FFFFF4FFFF447770F00F044444477770FFFF0F0777777770FFFF0077777 + 7777000000777777777777777777777777777777777777777777} + Caption = '&Copy address to clipboard' + OnClick = Copyiptoclipboard1Click + end + object N3: TMenuItem + Caption = '-' + end + object RestoredefaultColumnwidth1: TMenuItem + Tag = 1 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777747700007000700077777777777777777477000070007000777777777777 + 7777747700007000700077777777777777777477000070007000777777777777 + 7777747700007000700077777777777777777444444444444444777777777777 + 7777777700007000700077777777777777777777777777777777} + Caption = '&Restore default Columns width' + OnClick = RestoredefaultColumnwidth1Click + end + end + object Pop2: TPopupMenu + Tag = 2 + Images = MainForm.ImgLst + Left = 696 + Top = 40 + object MenuItem1: TMenuItem + Tag = 2 + Caption = 'Go !' + Default = True + OnClick = Go1Click + end + object MenuItem2: TMenuItem + Tag = 2 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00700000000000 + 0770787777777777070078FFFFFFF000000078FFFFFF0877800778FFFFF0877E + 880778FFFFF07777870778FFFFF07E77870778FFFFF08EE7880778FFFFFF0877 + 807778FFFFFFF000077778FFFFFFFFFF077778FFFFFFF000077778FFFFFFF070 + 777778FFFFFFF007777778888888807777777777777777777777} + Caption = 'Query server' + OnClick = lvServersDblClick + end + object MenuItem4: TMenuItem + Caption = '-' + end + object MenuItem5: TMenuItem + Tag = 2 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00770000000000 + 77777700333333330777770F033333333077770BF03333333307770FBF000000 + 0000770BFBFBFBF07777770FBFBFBFB07000780BFB00000077008CC00022C087 + 70708CCC22226C0007778C22222C2C0777778C722C2C2207777788CF62CC2287 + 777778F7672220777777778C7822077777777778888877777777} + Caption = 'Import to bookmark' + OnClick = Importtobookmark1Click + end + object MenuItem6: TMenuItem + Caption = '-' + end + object MenuItem7: TMenuItem + Tag = 2 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 777777777744444444477777774FFFFFFF477777774F00000F470000004FFFFF + FF470FFFFF4F00000F470F00004FFFFFFF470FFFFF4F00F444470F00004FFFF4 + F4770FFFFF4FFFF447770F00F044444477770FFFF0F0777777770FFFF0077777 + 7777000000777777777777777777777777777777777777777777} + Caption = '&Copy address to clipboard' + OnClick = Copyiptoclipboard1Click + end + object MenuItem8: TMenuItem + Caption = '-' + end + object MenuItem9: TMenuItem + Tag = 2 + Bitmap.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777747700007000700077777777777777777477000070007000777777777777 + 7777747700007000700077777777777777777477000070007000777777777777 + 7777747700007000700077777777777777777444444444444444777777777777 + 7777777700007000700077777777777777777777777777777777} + Caption = '&Restore default Columns width' + OnClick = RestoredefaultColumnwidth1Click + end + end +end diff --git a/servermain.pas b/servermain.pas new file mode 100644 index 0000000..2ee7f7e --- /dev/null +++ b/servermain.pas @@ -0,0 +1,760 @@ + (*----------------------------------------------------------------------------+ + Winfragg(c) is created by Wash for A.M.U + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + The CsTiger searching feature is an exclusivity for Winfragg(c) only. + + Amu's page : http://winfragg.sourceforge.net/ + Dev Page : https://sourceforge.net/projects/winfragg/ + Contact : amunit@users.sourceforge.net + CsTiger : http://www.cstiger.de + Borland : http://www.borland.com + +----------------------------------------------------------------------------*) + +unit servermain; + +interface + +uses + Windows, SysUtils, Variants, Classes, Controls, Forms, ComCtrls, QueryLib, + ExtCtrls, Buttons, StdCtrls, Menus, NMHttp, constants, tstruct, Clipbrd, + Graphics, ShellApi, Dialogs; + +type + + TMainServer = class(TForm) + lvServers : TListView; + TopPanel: TShape; + StatusB: TStatusBar; + CBMap: TComboBox; + CBmod: TComboBox; + CBPing: TComboBox; + CBPinging: TComboBox; + LPing: TLabel; + CBEGames: TComboBoxEx; + SBSearch: TSpeedButton; + SBStop: TSpeedButton; + SBPing: TSpeedButton; + Pop: TPopupMenu; + SBSetup: TSpeedButton; + Image1: TImage; + CBName: TComboBox; + LName: TLabel; + CBGames: TComboBoxEx; + CBNetwork: TComboBoxEx; + lvServers2: TListView; + Pop2: TPopupMenu; + function SetFilters : TFilter; + function Initialize : Boolean; + function Filter(HPacket : TPacketHead; Nfo : TRInfo) : boolean; + procedure LoadTigerList(Tlst : PTCsTiger); + Procedure addItem(Sender : Tobject); + Procedure AddServer(HPacket : TPacketHead; Nfo : TRInfo); + procedure QueryTiming(Sender : TObject); + procedure GetPacket(HPacket : TPacketHead; nfo : TRInfo; lst : PTSSList); + procedure LoadMasterList(HPacket : TPacketHead; Ml : PTSSList); + procedure SBSearchClick(Sender: TObject); + procedure SBStopClick(Sender: TObject); + procedure SBSetupClick(Sender: TObject); + procedure lvServersColumnClick(Sender: TObject; Column: TListColumn); + procedure lvServersCompare(Sender: TObject; Item1, Item2: TListItem; + Data: Integer; var Compare: Integer); + procedure lvServersDblClick(Sender: TObject); + procedure SBPingClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure lvServersContextPopup(Sender: TObject; MousePos: TPoint; + var Handled: Boolean); + procedure Refreshserver1Click(Sender: TObject); + procedure Importtobookmark1Click(Sender: TObject); + procedure Go1Click(Sender: TObject); + procedure RestoredefaultColumnwidth1Click(Sender: TObject); + procedure HTTPOPacketRecvd(Sender: TObject); + procedure HTTPODisconnect(Sender: TObject); + procedure Copyiptoclipboard1Click(Sender: TObject); + procedure DisplayRules; + procedure lvServers2ContextPopup(Sender: TObject; MousePos: TPoint; + var Handled: Boolean); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Image1Click(Sender: TObject); + procedure CBEGamesClick(Sender: TObject); + protected + ColumnToSort: integer; + ColumnSortUp: boolean; + private + MasterFilter : TFilter; + DelayQuery : TTImer; + HTTPO : TNMHTTP; + TopM : PTSSList; + nbServ, ListIndex : Word; + ProgressBar : TProgressBar; + end; + +var MainServer: TMainServer; + +implementation + +uses main, setup, bookmark, syslib; + +{$R *.dfm} + +procedure TMainServer.FormCreate(Sender: TObject); +begin + DelayQuery := TTimer.create (nil); + DelayQuery.Enabled := false; + DelayQuery.OnTimer := QueryTiming; + + HTTPO := TNMHTTP.Create(Nil); + HTTPO.OnPacketRecvd := HTTPOPacketRecvd; + HTTPO.OnDisconnect := HTTPODisconnect; + HTTPO.TimeOut := HTTPMASTERQUERYTIMEOUT; + HTTPO.Port := 80; + + ProgressBar := TProgressBar.Create(Self); + with ProgressBar do + begin + Parent := StatusB; + Top := 2; + Left := 1; + Width := StatusB.Panels[0].Width; + Height := Parent.ClientHeight - 2; + Smooth := true + end +end; + +procedure TMainServer.SBSetupClick(Sender: TObject); +begin + SetupMain.PAdvance.BringToFront; + SetupMain.Show +end; + +procedure TMainServer.SBStopClick(Sender: TObject); +begin + if DelayQuery.Enabled then DelayQuery.Enabled := false; + SBStop.Tag := SBSearch.Tag +end; + +procedure TMainServer.SBPingClick(Sender: TObject); +begin + if lvServers.Items.Count = 0 then exit; + ListIndex:=0; + SBPing.Enabled := false; + DelayQuery.Tag := 1; + DelayQuery.Enabled := true +end; + +Procedure TMainServer.addItem(Sender : Tobject); +begin + if (Sender as TComboBox).Items.IndexOf((Sender as TComboBox).Text) = -1 + then (Sender as TComboBox).Items.Append((Sender as TComboBox).Text) +end; + +function TMainServer.Initialize : Boolean; +var S, Code : Integer; +begin + Result := false; + + val(CBPing.Text,S,Code); + if (Code <> 0) and (CBPinging.Text <> '') then + begin + MessageDlg('Invalid ping value', mtWarning, [mbOk], 0); + exit + end; + + Case CBEGames.ItemIndex of + 0..9 : begin + addItem(CBMap); + addItem(CBMod); + addItem(CBPing); + end; + 10..11 : addItem(CBName) + end; + + lvServers.Clear; + ProgressBar.Position := 0; + ProgressBar.Max := 0; + StatusB.Panels[2].Text := ''; + DelayQuery.Interval := SetupMain.SENetwork.Value; + DelayQuery.Enabled := false; + SBSearch.Tag := 1; + SBStop.Tag := 0; + nbserv := 0; + TopM:=new(PTSSList); + TopM^.Next := nil; + + Result := true +end; + +(*----------------------------------------------------------------------------+ + "SetFilters" creates a master filter with current settings. + +----------------------------------------------------------------------------*) + +function TMainServer.SetFilters : TFilter; +var Game, Mode : String[5]; +begin + ProgressBar.Max := SetupMain.SPMaxServerQuery.Value; + + With Result do + begin + + MaxSrv := SetupMain.SPMaxServerQuery.Value; + PassWord := SetupMain.CBPassword.Checked; + EmptySrv := SetupMain.CBEmptyServer.Checked; + FullSrv := SetupMain.CBFullServer.Checked; + DedicSrv := SetupMain.CBDServer.Checked; + ACProtect := SetupMain.CBVAC.Checked; + FriendlyFire := SetupMain.CBFF.Checked; + QueryMaster := ''; + + case CBEGames.ItemIndex of + 0..3 : //HL + begin + Case CBEGames.ItemIndex of + 0 : MasterIP := VLMSIPEAST; + 1 : MasterIP := VLMSIPWEST; + 2 : MasterIP := VLMSIPCENTRAL; + 3 : MasterIP := STEAMMSCENTRAL; + end; + QueryPing := VLPING; + QueryServer := VLQUERY; + if CBmod.Text <> '' + then QueryMaster := '\gamedir\' + CBmod.Text; + if CBMap.Text <> '' + then QueryMaster := QueryMaster + '\map\' + CBMap.Text; + if FullSrv + then QueryMaster := QueryMaster + '\full\1'; + if EmptySrv + then QueryMaster := QueryMaster + '\empty\1'; + if PassWord + then QueryMaster := QueryMaster + '\password\1'; + if DedicSrv + then QueryMaster := QueryMaster + '\type\d'; + if ACProtect + then QueryMaster := QueryMaster + '\secure\1' + end; + 4..8 : //iD + begin + QueryPing := IDPING; + QueryServer := IDQUERY; + QueryMaster := 'ÿÿÿÿgetservers '; + Case CBEGames.ItemIndex of + 4 : begin + QueryMaster := QueryMaster + + SetupMain.ListGame.Items[4].SubItems[4]; + MasterIP := IDMSIPJK2 + end; + 5 : begin + QueryMaster := QueryMaster + + SetupMain.ListGame.Items[1].SubItems[4]; + MasterIP := IDMSIPMONSTER + end; + 6 : begin + QueryMaster := QueryMaster + + SetupMain.ListGame.Items[3].SubItems[4]; + MasterIP := IDMSIPRTCWET + end; + 7 : begin + QueryMaster := QueryMaster + + SetupMain.ListGame.Items[2].SubItems[4]; + MasterIP := IDMSIPMONSTER + end; + 8 : begin + QueryMaster := QueryMaster + + SetupMain.ListGame.Items[5].SubItems[4]; + MasterIP := IDMSIPSOF2 + end + end + end; + 9 : //UT + begin + QueryServer := EPQUERY; + QueryPing := EPPING; + QueryMaster := EPMASTERQUERY + end; + 10..11 : //CsTiger + begin + Mode := 's='; + if CBEGames.ItemIndex = 10 then Mode := 'p='; + Case CBGames.ItemIndex of + 0 : Game := 'all'; + 1 : Game := 'hl'; + 2 : Game := 'q3'; + 3 : Game := 'ut2k3'; + 4 : Game := 'bf42' + end; + QueryMaster := CSTIGERQ + Mode + CBName.Text + '&e=' + Game; + end + end; + end; + + MasterFilter := Result +end; + +procedure TMainServer.DisplayRules; +begin + With MasterFilter do + begin + StatusB.Panels[2].Text := ' No rule(s)'; + if DedicSrv + then StatusB.Panels[2].Text := ' | Dedicated'; + if EmptySrv + then StatusB.Panels[2].Text := ' | No Empty'; + if FullSrv + then StatusB.Panels[2].Text := StatusB.Panels[2].Text + ' | No Fully'; + if ACProtect + then StatusB.Panels[2].Text := StatusB.Panels[2].Text + ' | AC'; + if PassWord + then StatusB.Panels[2].Text := StatusB.Panels[2].Text + ' | No Password'; + if FriendlyFire + then StatusB.Panels[2].Text := StatusB.Panels[2].Text + ' | Friendly Fire' + end +end; + +procedure TMainServer.SBSearchClick(Sender: TObject); +var HPacket : TPacketHead; +begin + if not Initialize then exit; + + SetFilters; + DisplayRules; + + Case CBEGames.ItemIndex of + 0..8 : LoadMasterList(HPacket,nil); + 9..11 : begin + HTTPO.Tag := CBEGames.ItemIndex; + HTTPO.Get(MasterFilter.QueryMaster) + end + end +end; + +procedure TMainServer.Refreshserver1Click(Sender: TObject); +begin + QueryMain.QueryServer(4,MasterFilter.QueryServer,lvServers.Selected.Caption) +end; + +procedure TMainServer.HTTPODisconnect(Sender: TObject); +begin + DelayQuery.Tag := 0; + DelayQuery.Enabled := true +end; + +procedure TMainServer.HTTPOPacketRecvd(Sender: TObject); +var HPacket : TPacketHead; +begin + Case TNMHTTP(Sender).Tag of + 9 : LoadMasterList(HPacket,QueryMain.FUTSList(HTTPO.Body)) + else LoadTigerList(QueryMain.FCSTiger(HTTPO.Body)) + end +end; + +(*----------------------------------------------------------------------------+ + "LoadTigerList" gets "Tlst" PTCsTiger type. Displays the players coming from + CsTiger.de report. + +----------------------------------------------------------------------------*) + +procedure TMainServer.LoadTigerList(Tlst : PTCsTiger); +var Curr : PTCsTiger; + LstItem : TListItem; +begin + lvServers2.Clear; + + Curr := TLst; + + While Curr^.Next <> nil do + begin + if Curr.Game <> 0 then + begin + LstItem := lvServers2.Items.Add; + With LstItem.SubItems do + begin + LstItem.ImageIndex := Curr^.Game; + LstItem.Caption := Curr^.Address; + Add(Curr^.SPName); + if CBEGames.ItemIndex = 11 then Add('') + else Add(Curr^.PSNAme) + end; + end; + Curr := Curr^.Next; + end; + + ProgressBar.Position := ProgressBar.Max; + StatusB.Panels[1].Text := IntToStr(lvServers2.Items.Count) + ' Item(s) found'; + Dispose(Tlst) +end; + + (*----------------------------------------------------------------------------+ + "GetPacket" gets "HPacket" TPacketHead type, "nfo" TRInfo type and "lst" + PSSList type. Adds or loads new incoming servers. + +----------------------------------------------------------------------------*) + +procedure TMainServer.GetPacket(HPacket : TPacketHead; nfo : TRInfo; lst : PTSSList); +begin + if lst <> nil then LoadMasterList(HPacket,lst) + else + if HPacket.UdpTag = 6 then AddServer(HPacket,nfo) + else + if Filter(HPacket, nfo) then AddServer(HPacket,nfo) +end; + +(*----------------------------------------------------------------------------+ + "LoadMasterList" gets "HPacket" TPacketHead type and "Ml" PSSList type. + Loads the Master server list before query. + +----------------------------------------------------------------------------*) + +procedure TMainServer.LoadMasterList(HPacket : TPacketHead; Ml : PTSSList); +var Curr : PTSSList; + i : byte; +begin + if Ml = nil then + Case CBEGames.ItemIndex of + 0..3 : for i:=0 to 3 do HPacket.MQuery[i]:=0 + end + else + begin + Curr := Ml; + while (Curr^.Next <> nil) and + (nbserv < MasterFilter.MaxSrv) and + (SBStop.Tag <> 1) do + begin + inc(nbserv); + StatusB.Panels[1].Text := inttostr(nbserv) + ' server(s) received'; + Curr := Curr^.Next + end; + Curr^.Next := TopM^.Next; + TopM^.Next := Ml; + if (HPacket.MQuery[0] = 0) and (CBEGames.ItemIndex = 0) + then nbserv := MasterFilter.MaxSrv; + end; + + if CBEGames.ItemIndex = 9 then exit; + + if (nbserv < MasterFilter.MaxSrv) and (SBStop.Tag = 0) + then + Case CBEGames.ItemIndex of + 0..3 : QueryMain.QueryServer(5,#$31+chr(HPacket.MQuery[0])+ + chr(HPacket.MQuery[1])+ + chr(HPacket.MQuery[2])+ + chr(HPacket.MQuery[3])+ + MasterFilter.QueryMaster, + MasterFilter.MasterIP) + else QueryMain.QueryServer(5, MasterFilter.QueryMaster, MasterFilter.MasterIP) + end + else + begin + DelayQuery.Tag := 0; + DelayQuery.Enabled := true + end +end; + +(*----------------------------------------------------------------------------+ + "QueryTiming" performs a ping "1" or a query "0" for each interval of time. + +----------------------------------------------------------------------------*) + +procedure TMainServer.QueryTiming(Sender : TObject); +begin + Case TTImer(Sender).Tag of + 0 : begin + QueryMain.QueryServer(4,MasterFilter.QueryServer,TopM^.Address); + dec(nbServ); + ProgressBar.Position := ProgressBar.Max - nbServ; + if TopM^.Next <> nil then TopM:=TopM^.Next + else DelayQuery.Enabled := false + end; + 1 : begin + if ListIndex > lvServers.Items.Count-1 + then + begin + DelayQuery.Enabled := false; + SBPing.Enabled := true; + exit + end; + QueryMain.QueryServer(6,MasterFilter.QueryPing,lvServers.Items[ListIndex].Caption); + inc(ListIndex) + end + end +end; + +(*----------------------------------------------------------------------------+ + "Filter" gets "HPacket" TPacketHead type and "Nfo" TRInfo type. Performs a + filtering of the list. + +----------------------------------------------------------------------------*) + +function TMainServer.Filter(HPacket : TPacketHead; Nfo : TRInfo) : boolean; +begin + Result := false; + + if CBEGames.ItemIndex > 3 then//exclude Half Life + begin + + if CBPinging.Text = '=' then + if HPacket.Ping <> StrToInt(CBPing.Text) then exit; + if CBPinging.Text = '>' then + if HPacket.Ping < StrToInt(CBPing.Text) then exit; + if CBPinging.Text = '<' then + if HPacket.Ping > StrToInt(CBPing.Text) then exit; + + if (MasterFilter.FriendlyFire) and (Nfo.FF = 'OFF') + then exit; + if (Nfo.Description <> CBMod.Text) and (CBMod.Text <> '') + then exit; + if (Nfo.Map <> CBMap.Text) and (CBMap.Text <> '') + then exit; + if (MasterFilter.PassWord) and (Nfo.PassWord <> '-' ) + then exit; + if (MasterFilter.ACProtect) and (Nfo.AC = 'OFF') + then exit; + if (MasterFilter.EmptySrv) and (Nfo.NumPlayers = '0') + then exit; + if (MasterFilter.DedicSrv) and (Nfo.NumPlayers <> 'Dedicated') + then exit; + if (MasterFilter.FullSrv) and + ((Nfo.NumPlayers + Nfo.ReservedSlots) >= Nfo.MaxPlayers) + then exit; + end; + + Result := true +end; + +Procedure TMainServer.AddServer(HPacket : TPacketHead; Nfo : TRInfo); +var LstItem : TListItem; +begin + LstItem:= lvServers.FindCaption(0,HPacket.ip +':'+ + inttostr(HPacket.port) + ,false, true, false); + + if LstItem <> nil then + With lvServers.Items[LstItem.Index] do + begin + if HPacket.UdpTag = 6 + then + Begin + SubItems[4]:=inttostr(HPacket.Ping); + exit; + end; + ImageIndex := nfo.Icn; + SubItems[0]:=nfo.HostName; + SubItems[1]:=nfo.Description; + SubItems[2]:=nfo.OS; + SubItems[3]:=nfo.Map; + SubItems[5]:=(nfo.NumPlayers + '/' + nfo.MaxPlayers); + SubItems[6]:=nfo.PassWord; + SubItems[10]:=nfo.TypeServer + end + else + begin + LstItem := lvServers.Items.Add; + With LstItem.SubItems do + begin + LstItem.ImageIndex := nfo.Icn; + LstItem.Caption := HPacket.Address; + Add(nfo.HostName); + Add(nfo.Description); + Add(nfo.OS); + Add(nfo.Map); + Add(inttostr(HPacket.Ping)); + Add(nfo.NumPlayers + '/' + nfo.MaxPlayers); + Add(nfo.PassWord); + Add(nfo.AC); + Add(nfo.FF); + Add(nfo.TimeLeft); + Add(nfo.TypeServer) + end + end +end; + +procedure TMainServer.lvServersColumnClick(Sender: TObject; + Column: TListColumn); +begin + ColumnToSort := Column.Index; + ColumnSortUp := not ColumnSortUp; + TCustomListView(Sender).AlphaSort +end; + + (*----------------------------------------------------------------------------+ + "LstPlayCompare" compares values into the Listview (players). The syntax was + inspired from "eD2k Utils" (BierBaron). + +----------------------------------------------------------------------------*) + +procedure TMainServer.lvServersCompare(Sender: TObject; Item1, + Item2: TListItem; Data: Integer; var Compare: Integer); +var ix, code1, code2: Integer; + x, y: real; +begin + ix := ColumnToSort - 1; + + if ix < 0 then + begin + if item1.ImageIndex < item2.ImageIndex then compare := -1 + else compare := 1; + exit; + end; + + Val(Item1.SubItems[ix], x, Code1); + Val(Item2.SubItems[ix], y, Code2); + + If ((Code1 = 0) and (Code2 = 0)) then + begin + If (x < y) then Compare := -1 + else Compare := 1; + end + else Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]); + + If ColumnSortUp then Compare := Compare * -1 +end; + +procedure TMainServer.RestoredefaultColumnwidth1Click(Sender: TObject); +begin + Case (Sender as TComponent).Tag of + 1 : With lvServers do + begin + Column[0].Width := 140; + Column[1].Width := 160; + Column[2].Width := 100; + Column[3].Width := 100; + Column[4].Width := 90; + Column[5].Width := 40; + Column[6].Width := 65; + Column[7].Width := 65; + Column[8].Width := 35; + Column[9].Width := 35; + Column[10].Width := 60; + Column[11].Width := 70 + end; + 2 : With lvServers2 do + begin + Column[0].Width := 140; + Column[1].Width := 160; + Column[2].Width := 300 + end + end +end; + +procedure TMainServer.lvServersDblClick(Sender: TObject); +begin + Case (Sender as TComponent).Tag of + 1 : begin + if lvServers.ItemIndex < 0 then exit; + MainForm.CBedit.Text := lvServers.Selected.Caption + end; + 2 : begin + if lvServers2.ItemIndex < 0 then exit; + MainForm.CBedit.Text := lvServers2.Selected.Caption + end + end; + + MainForm.SBnfo.Click; + MainForm.BringToFront +end; + +procedure TMainServer.Go1Click(Sender: TObject); +begin + Case (Sender as TComponent).Tag of + 1 : MainForm.CBedit.Text := lvServers.Selected.Caption; + 2 : MainForm.CBedit.Text := lvServers2.Selected.Caption + end; + + MainForm.BringToFront; + MainForm.SBgo.Click +end; + +procedure TMainServer.Importtobookmark1Click(Sender: TObject); +begin + Case (Sender as TComponent).Tag of + 1 : MainForm.CBedit.Text := lvServers.Selected.Caption; + 2 : MainForm.CBedit.Text := lvServers2.Selected.Caption + end; + + MainBook.AddServer(Sender) +end; + +procedure TMainServer.Copyiptoclipboard1Click(Sender: TObject); +begin + Case (Sender as TComponent).Tag of + 1 :Clipboard.AsText := LvServers.Selected.Caption; + 2 :Clipboard.AsText := LvServers2.Selected.Caption + end +end; + +procedure TMainServer.lvServers2ContextPopup(Sender: TObject; + MousePos: TPoint; var Handled: Boolean); +begin + if TListView(Sender).GetItemAt(MousePos.X,MousePos.Y) = nil + then + With Pop2 do + begin + Items[0].Enabled := false; + Items[1].Enabled := false; + Items[3].Enabled := false; + Items[5].Enabled := false + end + else + With Pop2 do + begin + Items[0].Enabled := true; + Items[1].Enabled := true; + Items[3].Enabled := true; + Items[5].Enabled := true + end +end; + +procedure TMainServer.lvServersContextPopup(Sender: TObject; + MousePos: TPoint; var Handled: Boolean); +begin + if LvServers.GetItemAt(MousePos.X,MousePos.Y) = nil + then + With Pop do + begin + Items[0].Enabled := false; + Items[1].Enabled := false; + Items[2].Enabled := false; + Items[4].Enabled := false; + Items[6].Enabled := false + end + else + With Pop do + begin + Items[0].Enabled := true; + Items[1].Enabled := true; + Items[2].Enabled := true; + Items[4].Enabled := true; + Items[6].Enabled := true + end +end; + +procedure TMainServer.FormClose(Sender: TObject; var Action: TCloseAction); +begin + SBStop.Click +end; + +procedure TMainServer.Image1Click(Sender: TObject); +begin + try + ShellExecute(Application.MainForm.Handle, Nil, + pchar('http://www.cstiger.de'), Nil, Nil, SW_SHOWNORMAL) + except on E:Exception do getErrorLog(E.Message) + end +end; + +procedure TMainServer.CBEGamesClick(Sender: TObject); +begin + Case CBEGames.ItemIndex of + 0..9: begin + lvServers.BringToFront; + TopPanel.Height := 26 + end; + 10..11: begin + lvServers2.BringToFront; + TopPanel.Height := 79 + end + end +end; + +end. diff --git a/setup.dcu b/setup.dcu new file mode 100644 index 0000000000000000000000000000000000000000..b2c888dd390063dc357a72f1aaa7dcfa89c075ee GIT binary patch literal 37287 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 W5Dp})w@)10WcR{k_g0<={{IVc>FTWj literal 0 HcmV?d00001 diff --git a/setup.ddp b/setup.ddp new file mode 100644 index 0000000000000000000000000000000000000000..cdc0ee8c2b54a98895d906932c4351134611c8d5 GIT binary patch literal 51 zcmZRVaB=ks@bJ`g@pN<#a`e>;@DB=c^Y`)e=VxFz;K0Pl$;KI)SCUzhlbT}4#=r!G E07AM8lK=n! literal 0 HcmV?d00001 diff --git a/setup.dfm b/setup.dfm new file mode 100644 index 0000000..24bbe7e --- /dev/null +++ b/setup.dfm @@ -0,0 +1,1694 @@ +object SetupMain: TSetupMain + Tag = 1 + Left = 354 + Top = 206 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = 'Settings' + ClientHeight = 305 + ClientWidth = 294 + Color = clWhite + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poDesktopCenter + OnActivate = FormActivate + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object PAbout: TPanel + Left = 96 + Top = 0 + Width = 198 + Height = 305 + BevelOuter = bvNone + Color = clWhite + Ctl3D = True + ParentCtl3D = False + TabOrder = 2 + object Image2: TImage + Left = 4 + Top = 267 + Width = 194 + Height = 38 + Cursor = crHandPoint + AutoSize = True + Center = True + Picture.Data = { + 0A544A504547496D616765B1170000FFD8FFE000104A46494600010201004800 + 480000FFED0A5250686F746F73686F7020332E30003842494D03ED0A5265736F + 6C7574696F6E00000000100048024E000200020048024E000200023842494D04 + 0D18465820476C6F62616C204C69676874696E6720416E676C65000000000400 + 0000783842494D041912465820476C6F62616C20416C74697475646500000000 + 040000001E3842494D03F30B5072696E7420466C616773000000090000000000 + 00000001003842494D040A0E436F7079726967687420466C6167000000000100 + 003842494D2710144A6170616E657365205072696E7420466C61677300000000 + 0A000100000000000000023842494D03F517436F6C6F722048616C66746F6E65 + 2053657474696E677300000048002F66660001006C6666000600000000000100 + 2F6666000100A1999A0006000000000001003200000001005A00000006000000 + 000001003500000001002D000000060000000000013842494D03F817436F6C6F + 72205472616E736665722053657474696E6773000000700000FFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFF03E800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFF03E800003842494D04000B4C6179657220537461746500000002000138 + 42494D04020C4C617965722047726F7570730000000004000000003842494D04 + 0806477569646573000000001000000001000002400000024000000000384249 + 4D041E0D55524C206F766572726964657300000004000000003842494D041A06 + 536C69636573000000006F00000006000000000000000000000026000000C200 + 000007006C006F0067006F0061006D0075000000010000000000000000000000 + 0000000000000000010000000000000000000000C20000002600000000000000 + 0000000000000000000000000000000000000000000000000000003842494D04 + 111149434320556E74616767656420466C61670000000101003842494D041417 + 4C617965722049442047656E657261746F722042617365000000040000000238 + 42494D040C154E65772057696E646F7773205468756D626E61696C0000067C00 + 00000100000070000000160000015000001CE00000066000180001FFD8FFE000 + 104A46494600010201004800480000FFEE000E41646F626500648000000001FF + DB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318 + 110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C + 0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C + 11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C + 0C0C0C0C0CFFC00011080016007003012200021101031101FFDD00040007FFC4 + 013F0000010501010101010100000000000000030001020405060708090A0B01 + 00010501010101010100000000000000010002030405060708090A0B10000104 + 01030204020507060805030C3301000211030421123105415161132271813206 + 1491A1B14223241552C16233347282D14307259253F0E1F163733516A2B28326 + 4493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4 + F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711 + 0002020102040403040506070706053501000211032131120441516171221305 + 32819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283 + 072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4 + D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FF + DA000C03010002110311003F00F55557A9751C4E9B856E6E5BB65348927B9274 + 6B183F39EF77B58A87EDCBBBD2D006A4EE3FC1AB82FAC9F597A8758CEFB3FA5E + 96334C518D654D73C9D47DA1DF68ADD657659FC9D9E9D68135B6E59B06119244 + CA4218E038A723FBBFBB1FEBC97EA7D7F2FAC7AD9F65218DA400CA4FA5606309 + 0DF6BADC47BDBFF0BFA4FD259FC85DA7D4AEB1FB4FA3B1AFD2EC5FD0BC69C37F + 9B3EC6D6DFE6F67E62E1B1B0BACD18F6D35CB2BB9B1633D2ADC1C3F74FA8C739 + 1BEA6757B3A6755B319CD119000735DED2D734FD23B46EFA25345822EF56E66F + 6B2F2F9380C3F532138087B80FB3F2707EB610E3FF003937D51709F5FF00AB06 + 752C5E9CD6071633D5738FA6E00DAEF49BEDBE8C8FA2DA9DF43D3FA6AEF4FF00 + AF56E6E6BF12CC0FB296FD075961971DDB5A3D234B367B7DEB93EAD9B6751FAD + 0F7DF506B5D706B2BD818E2CAE2B639D66C6DCF6BF66FF007A3236001D4B0F2D + 8CE2C99259046F16394E8CBF4E51F40F43B5F51FAF574FDBD996E6D18F537ED0 + F7430001A0B2C74514D3FBB5AC6EAFF592EEA790ECE7D5B038ECA6B7FA4F2DAD + BAFF0085C4B1EDFE5FE99FFA67D8B372EDB7133B26986B3758E67A46B610E687 + FE8FF47633DEDFCEDFB14BA8D668B2AA4D5B185AD265A3DCE77B9DE9D859F9AD + 2D67E8933522BB68DE11C30CE67E83EE47DDAE23FAAC38E1AFFD532647D37EA7 + 3DEFE8944801AD6E81A00127DEFD2B654CFA4EFF0046A5F5BFA937A7741C9B48 + DCEBA28636409369F4DDF4D9733DB57A8FF7D6B059F5B1FD0A9C3C0AFA7FAB5B + 98C2EBBD42C602E3B76EB4D9BDCD6FBDFEE43FAEBD4B233BA5526A633D165BBE + C901E48DAE631EDF559ECDBBFF0033DE9E4E86BA39D8A04E7C52CBC318E5971E + B2D37FD2FDCFF09B5FE2FAF75D46410D6B1AE7CB835AC0741B19FCC558EDFF00 + A0AA7F8C1EADB33F1FA7B181E6BABD5738FA6E00DA7D368DB7E3E4FD16D5F99E + 9FF38B3BEACFD6FC6E8D84EA1B84FBEC264D8C7800FF005B77D1599939F93D77 + AE1BEFA580DAF07D36340DAC680DAD965ED636CB76B5BFE110BB0221B22071E7 + CB9F288C631E338E267F39FF00271870FAA5E97D4FA2B9CEE9B413000606B400 + 000D036B7DA215E5874756B28A595368606B1A001B8F6FECA9FEDCBBFD0B7FCE + 3FF914F735FFD0EC58CC4350DF61169209201DAD6CED7338F759B3F48B3A9A7E + AD7DB3F9F1F6D997687F747B5BB99FBEEFA7FC8FE6D78524929FA1FD3C5FF4CE + FF0036011EFD3876DFA35FF9EB3053F55FF681FD63F5B93C375FCFF2FE4B3FED + C5E16924A7DDB15BF56BED1B9CFF00F2880E2EADA1DAFD2D8CDD1FC9FF00A6A4 + 69FAB633CEFC8073606DF699993A8F6FE735BF41DFF6E2F0749253EE992CFAAF + FB4A917BDBEB6BEA176E9D07B76FB7F3DE3F354B32AFABA6CA466DC1B78680D2 + 412D2E80496CB776DF76CFFADAF0949253EEBD5DBD0B755EB3BD912CDF3C927D + BF47F3588AEFB37D9FDF1E8477E21782A4929F607B7EAA6F32F603DF6EEFFBE8 + 5A1D387481FD04D64F972BC3D24903E9F47E80497CFE92497FFFD93842494D04 + 211A56657273696F6E20636F6D7061746962696C69747920696E666F00000000 + 5500000001010000000F00410064006F00620065002000500068006F0074006F + 00730068006F00700000001300410064006F00620065002000500068006F0074 + 006F00730068006F007000200036002E003000000001003842494D04060C4A50 + 4547205175616C69747900000000070004000100010100FFEE000E41646F6265 + 00640000000001FFDB0084000604040405040605050609060506090B08060608 + 0B0C0A0A0B0A0A0C100C0C0C0C0C0C100C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C + 0C0C0C0C0C0C0C0C0C0C0C0C010707070D0C0D18101018140E0E0E14140E0E0E + 0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C + 0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108002600C203011100021101031101 + FFDD00040019FFC400AD00000105010101000000000000000000000700030506 + 0804020101010002030101000000000000000000000003040205060107100002 + 0103020304050808070100000000010203110405001221130631223207415142 + 231461715262E2A315168191A17282A23364F0C1B24353930825110001030202 + 05090506060300000000000200010312041105213122321341425262728292A2 + C2F0B2D2E22351615373340633C314246474A41516FFDA000C03010002110311 + 003F00D53A225A225A22AEF58F5961FA631DF137F770DBCF36E4B149F9A56494 + 2D78885269760F6DD636DBAC489995AB3B339CB01672E953F3D03E659E339D4C + 992BB9F277270F77348E04F7113E7957711DD0033A2AF05EEAAAEDD5777C74E8 + F32EBA385E3668C5A6D5B23FD9ABF792FD676C64B9C306B44566F888A3B66BC6 + EDA24858DE17F547E07FE1D4B13F22D2E756E4D4C8EC7D0FA9C1EEFE9FBDBC8D + 4A6AA08F4EA55A15F7444B44426F3CB3F636F163F1734B63B9CB5D3C17A720A7 + 80E5C6C86C36FAE5FEABFEEEA295F916FB24809EA3663E87D3E0F7BF51DDDD41 + D7CCD82D0F2317B5B8A912E6A84569E99750E8FBBCCB7CC323F24DA3FD35A1FC + B4EA15CA74DD8853191142910E5190A7BB1B3BBCEF7B4EEFFB9DFD5917D0B8DB + E0719899F1DEE75356D7E5EC78557BCDDEBCC7DA467A762BDC78B8701B256F79 + F880210D1A3556B050433789834ABDCDBDCEFEB090B916CF29B132FAAE278733 + 87C2EF7F1FE141A9B31611C850C18AA8F54B9BF4F1F4CB5D45A3EEF32DF88C8E + D8B34DFF000D1EBCAAC827E0169691471C6A14B9585A564DD212E68676797D3E + DB6AC0B60CB8EBE92B989F4EBA76A9AB67F2F63C2881AC9544C5D5D416B6D2DC + CEE238204692573D8A882AC4FCC345E88B93B336B7596B259EB2BFCAC930187B + 9B8BD9D9D9E3933A373CAF5EC678D4713E8555D55C717E4F32EDDA338A3D5330 + 80FF0089BA0B45F48DF24F8C8228976410C6B1C4A093454015454927B06AD2E2 + 4C9C9DDDF5AEBEA5CB4788C0DFE464963845B42EEB24DBF961E944DFCA0D26DD + E57C037E84F832CEDA279241166C6A7E6FCDB2B3563B218BB8CCDAC0B162A647 + 9577F225CDEE2A0D5B6F3E555AED1EDF775587077E4F32EC6E8A48E2227E3368 + E77F494F57736BC2B4CE0F20F7B68B2B7A457565712A4B444B444B445FFFD0D5 + 3A225A2288EA5EA3C5F4E61E7CAE4A5E5DB423B0789DCF85107B4EC75E1160D8 + A9EDAD8E636006D2EB26758F57653ABB3D2E46F5B6A9EE5B5B835486107822F6 + 7F137B6DAA8EEE4EBBD8A28EC60ECEF74A4353169D3D25DF4ADD7282AA428664 + 069B9993BC4FEF3535390B5382E5EDAFA42BC194F1DA7A3B205B3E5501D23997 + C3F50D9DF2B6D5470B2FEE3F74FEAF16A007C1D75599DBF1A0216D7BC3DA15B0 + 3037CB798E8A506B551AB8BE72A47444B445943CEACD7E2BE61E4769AC563B6C + A2F93943BE3FED69355257C497D032487876C3D7DBF17CB4AA85DA30B4B46228 + A55829F5D0D4FF00AB5E98E0CCA3CAEE78B2CDDBF93F96891E5DF9831F4C7495 + DCEE0493405A3B280FB72BD5941A7B209DCDF575981E02B557F97BCF7D4B6A21 + 133EC6E7A50F85CDCE4729364B20E6E2696469EE1DF8EF763B8D7E4D46038BE2 + EB6D995CB5BC4D147A0CFE9C7D5E6D4B899DA7B92EFC5A57DCDF3B1A9D62DA5D + 5E949A081DDB5461EEEEAD41E52DBB1C524ACA0540A70A6AEAF9A3BA22688A89 + E74E68E2FCBCC9146DB35F05B38FE5E71A483FEA126A391F015B4C961E25C8F5 + 76FC3F352B2FE101395B6A0A90E081DBC4766A089B125D5E77370ED8BED3D8F6 + EED4B5B7425B98F0D1330A12A356D700A9BFFA2B35F09D1D6F8C46A4993B950E + BEB8A0F78DF79CAD4533E85BFF00DBB0553B9FE18FBFB3F12047472B367ADF68 + A9AD070AF6F0D470B695B6FDC73530B074CBCA1EC2B5CF4D41CAC54408A12A35 + 65714A57444B444B445FFFD13FFE79FECBEF7EC6889AB9F3020B5824B8B8B511 + 4112979246968028ED3E0D1DD6411919308B6244807D77E6EF52E7F2ED2E36F2 + E7158C8872EDEDADA678CB0F4BCA50A6F66FE45EEFD266AA523BBE85DCD9E550 + C11632B0996F191B554AA8B5C657212F326BA9EE1BD3248EEE6BF3B13A93865F + 6AD4966D6ACEF84018773E152F6F71D49041CB87377B0C74FE92492AAFEA0E06 + 9C32FB563FF6F6DF801E4F81405CCD762ED9E59A479D4FF5599B77CF526BA849 + C99F0C57416B05B4D1B1B471ED75011FBCAEF31CB60A0B792DF9B2C4A1246325 + 0965E04F84F6EAD03E2CB8ACCADF83390F263B3D924E1FFD1FD3BF11C84C55DC + 8DBF629568A8C6B414A91DBAC38CCB61FF009E9E9A9DC1BC5F02B5DD798F05BD + 8CF76D6758A08DA573CDF4202C7D8F93523BE0B49146E64C2DAC9E9597725D43 + 9ACB5D34B91BEB8B9123962924AECA371AD1431200D5512777D6BBEBAB5B7861 + 22A03607A03DD53DD46CD0F4DD835B2BDB8321590AB9A36E5A804003E8EA599D + D9973DFB7E38CE4213113D9AB6B69562DB2F94B4522DAF67B707B79523A56BEB + DA46A16227E55D3CB6B6D18B9904748F5054EBDCBC78396F5CC8D72FB628AE5E + 425F7B1A9353C7C21B539BD22B93CBC06E6F31A45837E8E653CDF4A8AC65CCD7 + 19384DD3BDC71E01DC9FDA6BAC2277775B5CFA2862859840048CB9A228F10F9A + 189E8FC2D9ADDE3E5939F558D61752DDC00927705E1C75291B0AE7AC72E92E5D + D8306A7A5EC4A5FA73CE7C667D666B4C74F1084AA933BA2D4B54F776EFECA682 + 6C497D979DB3B31B8ED74555BCE9EADCCDC606D3F0E3358224F5B9782670594A + 90A1B684EE57D7F5758CB8E1A15EC8462295C64612C4766BDA41EC065E1B4CBC + 7797E1EE141EF31625AB5EDA9AEA209307D2B7999E503283708400C5FB1523AD + 8F9F3D1B65609180CCC807BB512D7F6C417F9B53714573AD915D3BEEF9810BBC + C3F35F33D519312594B718DC6451F2D2D12661BF892CF26C2ABB8F67D55D4252 + 3BBE85D258E531411FD56032DE222DD1F1A6FCB5D87262E6484CEE1AA58B53FC + 8EA706766D2B95CCE78E495F84C2203B3B3B35759684B6EB41140918B1E0A29F + D5FB1ACD6B939F9E7FB2FBDFB1A225F9E7FB2FBDFB1A225F9E7FB2FBDFB1A22F + FFD22AE88A2FA8F196B92C735B5D46658AA1B961DD0123B2BB0AEED78E2CFAD4 + F6F72709540F49774BDE428BDE86BC9AFB65BC262B7AF6024F0F9C92758B0336 + A562E333B8986932C47BA3EEA2074FF45D95A5A2ACA956A71D66A8296FCB58CF + F8C688A89D67D0ACF299AC14ABB7691F27C8786B07067D6AFDBE673C23481523 + DDF5277A1F0191B14963B80692021B8915A8A7A294D7AC2CDA9433DDC929B19B + D45DD51D94E8D783228D8FB5E5A23065EF3B508351E2275E3462AD1E717262E2 + E7A0BAA1F0ABD59E364B8C0CB697AA6459936C8B522A3D55520EB276C5508A52 + 8C98877850E6EFA16F0E502C1194B60D50B527B0FACD4EB16066D4AE4F9A5C4A + 0E06550BF547D22AED92E968EE7A792D248F7B47474E245180201E1F3EB22167 + D6ABDB5D4901551BD25BBED521E47D019896F42495E406A8140358B0336A535C + 6673CC3499543DD1F755F6EFA36D5B0296D245CC68FBC83732D1A94AF748AEBD + 2167D6A2B6BB9207778DE97EEFA955703D13904CBACB2A911A37747A86822CDA + 965757D2CF8711EAA7B3E9571EAEE9AB6BEB3859E0E6CF021588EE70003C4F00 + 40D0819F5AF6DAFE6819DA37A6AECFA943745E13296572CA50C7096DC40AF6F6 + 7A75E88B36A51DCDDC9395523D4FEDD1578CCE316FEC1A06E355A6BD5033BB69 + 6423CAF41656DEE18C00B475E0B4D46F18AD9C79D5D0361563DADA5CA9D31911 + C1AD493FA7FCB4E10A95F3EBA7E56F0AEBB6E84C9DE38578F971FA40D64C2CDA + 950B8BD9A6DF272F77C3BA891D2BD2B0E2611C3BDE9D64AAAB2E889688968896 + 88BFFFD337E03E0A37121F7D7EF510C20280800E2D590AA339F9F444E6463C2B + 5D6443CA8B23B272C90F446AFBD1DC0771FE5D117A07A78DB5F7C308045CD883 + D6BCDE4774332578EEDD56FF0057B3A22F2DF9779912831F2CCC0ABC7CDE1081 + D926EF69BEAE88BC46FD3CFC83346B156490C8B1973441E056356F11FA1A22F3 + 2374E07ACCB134A90C8595398217909F76A371DC283C5E1D11372BF4D722610C + 70EF5B74DA50C9569CF8B6D4F055D117674C8B1F81BBDE50EF245D134AA4411A + 878F6D5BE8E88BAAF1B14D6765CC544B011B987892A64E0221272EAFE1A97FAF + A22E4B0FC08DCDC7C37204E2D583D799CA663E322B57E0BFC5F47445F62FC1C8 + BB16F454290ACA577EC11EE067715AF77EAF8B444C29B53D655B808BEF7BA3BA + 786DF77D9C3E8E88BA218EC92DE75B8952546BA537F22860AA809A2D080E6AFF + 0047444C63DFA79EE6D1A38E38E7E74876465EB415E5A924B0AB36889BCF187F + 0FB214878EE3395F189ABDF07FC7F2E88A113915EE6DAFC9A2273444D49F0FFE + E6DFD3A2267FF9D5F62BA227A3F86F636FE8D113BA225A225A225A225A22FFD9} + OnClick = Image2Click + end + object VersionInfo: TMemo + Left = 0 + Top = 0 + Width = 198 + Height = 257 + BevelInner = bvNone + BevelOuter = bvRaised + BorderStyle = bsNone + Ctl3D = False + Lines.Strings = ( + 'A file called '#39'Version.txt'#39' was not foud. ' + 'See Log for details.') + ParentCtl3D = False + ScrollBars = ssVertical + TabOrder = 0 + end + end + object PGames: TPanel + Left = 96 + Top = 0 + Width = 198 + Height = 305 + BevelOuter = bvNone + Ctl3D = True + ParentCtl3D = False + TabOrder = 3 + DesignSize = ( + 198 + 305) + object Label4: TLabel + Left = 8 + Top = 8 + Width = 101 + Height = 14 + Caption = 'Games settings' + Color = clBtnFace + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object Bevel6: TBevel + Left = 9 + Top = 24 + Width = 187 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object ListGame: TListView + Left = 1 + Top = 28 + Width = 197 + Height = 277 + Cursor = crHandPoint + BevelInner = bvNone + BevelKind = bkTile + BorderStyle = bsNone + Color = clBtnFace + Columns = <> + ColumnClick = False + Font.Charset = ANSI_CHARSET + Font.Color = clWindowText + Font.Height = -13 + Font.Name = 'MS Sans Serif' + Font.Style = [] + HotTrackStyles = [htUnderlineHot] + Items.Data = { + D20600000F0000000F000000FFFFFFFFFFFFFFFF060000000000000017416C69 + 656E20766572737573205072656461746F722032044156503200000532373838 + 380130046E6F6E6510000000FFFFFFFFFFFFFFFF09000000000000000D517561 + 6B652033204172656E6102513300000532373936300236381C5175616B652049 + 4949204172656E612056657273696F6E20312E33321444697361626C65204950 + 582070726F746F636F6C0C2B6E65745F6E6F6970782031013011000000FFFFFF + FFFFFFFFFF06000000000000001C52657475726E20746F20436173746C652057 + 6F6C66656E737465696E04525457430000053237393630023630205265747572 + 6E20746F20436173746C6520576F6C66656E737465696E20312E3412000000FF + FFFFFFFFFFFFFF06000000000000001B576F6C66656E737465696E20456E656D + 79205465727269746F727903574554000005323739363002383220576F6C6665 + 6E737465696E20456E656D79205465727269746F727920322E353513000000FF + FFFFFFFFFFFFFF06000000000000000D4A656469204B6E696768742032034A4B + 320000053238303730023136134A656469204B6E6967687420494920312E3034 + 14000000FFFFFFFFFFFFFFFF060000000000000014536F6C64696572206F6620 + 466F7274756E65203204534F46320000053230313030043230303419536F6C64 + 696572206F6620466F7274756E65203220312E303201000000FFFFFFFFFFFFFF + FF1B000000000000000948616C662D4C69666502484C00000532373031350234 + 351048616C662D4C696665207620313130380E456E61626C6520436F6E736F6C + 65082D636F6E736F6C6501300E446576656C6F706572204D6F6465042D646576 + 01301444697361626C65204950582050726F746F636F6C062D6E6F6970780130 + 1844697361626C65204A6F79737469636B20537570706F7274062D6E6F6A6F79 + 0130114170706C79205A5F416C6C6F63204669780A2D7A6F6E65203430393601 + 301133322042697420436F6C6F72204D6F6465062D3332627070013013557365 + 2057696E585020536F756E64204669780F2B766F6963655F64736F756E642031 + 01300B000000FFFFFFFFFFFFFFFF12000000000000000E4D6564616C206F6620 + 486F6E6F72034D4F4800000531323230330130046E6F6E650A536B697020496E + 74726F132B73657420636C5F706C6179696E74726F203001300D536B69702045 + 41204D6F766965162B7365742075695F736B69705F65616D6F76696520310130 + 10536B6970205469746C6573637265656E1A2B7365742075695F736B69705F74 + 69746C6573637265656E2031013011536B6970204C6567616C2053637265656E + 1A2B7365742075695F736B69705F6C6567616C73637265656E203101300C0000 + 00FFFFFFFFFFFFFFFF0900000000000000144F7065726174696F6E20466C6173 + 68706F696E74024F46000004323233340130046E6F6E651444697361626C6520 + 53706C61736873637265656E092D6E6F73706C61636801300D000000FFFFFFFF + FFFFFFFF06000000000000000B536572696F75732053616D045353414D000005 + 32353630300130046E6F6E650E000000FFFFFFFFFFFFFFFF0600000000000000 + 0D536572696F75732053616D2032055353414D3200000532353630300130046E + 6F6E6515000000FFFFFFFFFFFFFFFF0600000000000000175374617220547265 + 6B203A20456C69746520466F7263650253540000053237393630023234225374 + 61725472656B20566F79616765723A20456C69746520466F72636520312E3230 + 07000000FFFFFFFFFFFFFFFF060000000000000011556E7265616C20546F7572 + 6E616D656E74025554000004373737380130046E6F6E6509000000FFFFFFFFFF + FFFFFF060000000000000016556E7265616C20546F75726E616D656E74203230 + 303306555432303033000004373738370130046E6F6E650A000000FFFFFFFFFF + FFFFFF060000000000000010426174746C654669656C64203139343204424634 + 3200000532333030300130046E6F6E65FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF} + LargeImages = MainForm.ImgLst + ParentFont = False + SmallImages = MainForm.ImgLst + StateImages = MainForm.ImgLst + TabOrder = 0 + ViewStyle = vsSmallIcon + OnMouseDown = ListGameMouseDown + end + end + object PGConfig: TPanel + Left = 96 + Top = 0 + Width = 198 + Height = 305 + BevelOuter = bvNone + Ctl3D = True + ParentCtl3D = False + TabOrder = 8 + DesignSize = ( + 198 + 305) + object LBConfigGame: TLabel + Left = 8 + Top = 8 + Width = 4 + Height = 14 + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object TBevel + Left = 9 + Top = 24 + Width = 187 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object LBPath: TLabel + Left = 8 + Top = 32 + Width = 50 + Height = 14 + Caption = 'Path game' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object LBExtra: TLabel + Left = 8 + Top = 72 + Width = 93 + Height = 14 + Caption = 'Extra command line' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object SBSeek: TSpeedButton + Left = 64 + Top = 32 + Width = 124 + Height = 14 + Cursor = crHandPoint + Caption = '>>Seek' + Flat = True + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ParentFont = False + OnClick = SBSeekClick + end + object LBProto: TLabel + Left = 8 + Top = 152 + Width = 86 + Height = 14 + Caption = 'Protocol Definition' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object SBSave: TSpeedButton + Left = 8 + Top = 279 + Width = 92 + Height = 24 + Cursor = crHandPoint + Caption = '&Save' + Flat = True + Glyph.Data = { + F6000000424DF600000000000000760000002800000010000000100000000100 + 0400000000008000000000000000000000001000000010000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00777777777777 + 7777770000000000000770330000007703077033000000770307703300000077 + 0307703300000000030770333333333333077033000000003307703077777777 + 0307703077777777030770307777777703077030777777770307703077777777 + 0007703077777777070770000000000000077777777777777777} + OnClick = SBSaveClick + end + object SBBAck: TSpeedButton + Left = 100 + Top = 279 + Width = 93 + Height = 24 + Cursor = crHandPoint + Caption = '&Back' + Flat = True + Glyph.Data = { + 36050000424D3605000000000000360400002800000010000000100000000100 + 0800000000000001000000000000000000000001000000010000000000000000 + 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA + A60004040400080808000C0C0C0011111100161616001C1C1C00222222002929 + 2900555555004D4D4D004242420039393900807CFF005050FF009300D600FFEC + CC00C6D6EF00D6E7E70090A9AD000000330000006600000099000000CC000033 + 00000033330000336600003399000033CC000033FF0000660000006633000066 + 6600006699000066CC000066FF00009900000099330000996600009999000099 + CC000099FF0000CC000000CC330000CC660000CC990000CCCC0000CCFF0000FF + 660000FF990000FFCC00330000003300330033006600330099003300CC003300 + FF00333300003333330033336600333399003333CC003333FF00336600003366 + 330033666600336699003366CC003366FF003399000033993300339966003399 + 99003399CC003399FF0033CC000033CC330033CC660033CC990033CCCC0033CC + FF0033FF330033FF660033FF990033FFCC0033FFFF0066000000660033006600 + 6600660099006600CC006600FF00663300006633330066336600663399006633 + CC006633FF00666600006666330066666600666699006666CC00669900006699 + 330066996600669999006699CC006699FF0066CC000066CC330066CC990066CC + CC0066CCFF0066FF000066FF330066FF990066FFCC00CC00FF00FF00CC009999 + 000099339900990099009900CC009900000099333300990066009933CC009900 + FF00996600009966330099336600996699009966CC009933FF00999933009999 + 6600999999009999CC009999FF0099CC000099CC330066CC660099CC990099CC + CC0099CCFF0099FF000099FF330099CC660099FF990099FFCC0099FFFF00CC00 + 000099003300CC006600CC009900CC00CC0099330000CC333300CC336600CC33 + 9900CC33CC00CC33FF00CC660000CC66330099666600CC669900CC66CC009966 + FF00CC990000CC993300CC996600CC999900CC99CC00CC99FF00CCCC0000CCCC + 3300CCCC6600CCCC9900CCCCCC00CCCCFF00CCFF0000CCFF330099FF6600CCFF + 9900CCFFCC00CCFFFF00CC003300FF006600FF009900CC330000FF333300FF33 + 6600FF339900FF33CC00FF33FF00FF660000FF663300CC666600FF669900FF66 + CC00CC66FF00FF990000FF993300FF996600FF999900FF99CC00FF99FF00FFCC + 0000FFCC3300FFCC6600FFCC9900FFCCCC00FFCCFF00FFFF3300CCFF6600FFFF + 9900FFFFCC006666FF0066FF660066FFFF00FF666600FF66FF00FFFF66002100 + A5005F5F5F00777777008686860096969600CBCBCB00B2B2B200D7D7D700DDDD + DD00E3E3E300EAEAEA00F1F1F100F8F8F800F0FBFF00A4A0A000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00EEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE00EEEEEEEEEEEEEEEEEEEEEEEEEE + EE00FE00EEEEEEEEEEEEEEEEEEEEEEEE00FEFEFE00EEEEEEEEEEEEEEEEEEEE00 + FEFEFEFEFE00EEEEEEEEEEEEEEEE00FEFEFEFEFEFEFE00EEEEEEEEEEEE00ECEC + ECFEFEFEFEECEC00EEEEEEEEEEEEEEEECDD9FEFED3EEEEEEEEEEEEEEEEEEEEEE + CDD9D3D9D3EEEEEEEEEEEEEEEEEEEECDD3D3D3E6D3EEEEEEEEEEEEEEEEEEC8AC + CDD3D9E6D3EEEEEEEEEEC8C8C8C8C8C8CDFFE6E6EEEEEEEEEEEEEEC8E6E6E6FF + FFE6E6EEEEEEEEEEEEEEEEEEC8E6E6E6E6EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE + EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE} + OnClick = SBBAckClick + end + object LBPort: TLabel + Left = 8 + Top = 112 + Width = 56 + Height = 14 + Caption = 'Default Port' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object LBVal: TLabel + Left = 112 + Top = 112 + Width = 68 + Height = 14 + Caption = 'Protocol value' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object EPath: TEdit + Left = 8 + Top = 48 + Width = 181 + Height = 21 + BorderStyle = bsNone + Color = 15132390 + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -15 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + end + object EEXtra: TEdit + Left = 8 + Top = 88 + Width = 181 + Height = 21 + BorderStyle = bsNone + Color = 15132390 + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -15 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 1 + end + object CBProto: TComboBox + Left = 8 + Top = 168 + Width = 185 + Height = 21 + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + ItemHeight = 13 + ParentFont = False + TabOrder = 2 + OnChange = CBProtoChange + Items.Strings = ( + 'Half-Life 1107' + 'Half-Life 1108' + 'Half-Life 1110' + 'Jedi Knight II 1.0' + 'Jedi Knight II 1.04' + 'Quake III Arena Version 1.11' + 'Quake III Arena Version 1.17' + 'Quake III Arena Version 1.25' + 'Quake III Arena Version 1.27' + 'Quake III Arena Version 1.27g' + 'Quake III Arena Version 1.30' + 'Quake III Arena Version 1.31' + 'Quake III Arena Version 1.32' + 'Return to Castle Wolfenstein 0.9' + 'Return to Castle Wolfenstein 1.1' + 'Return to Castle Wolfenstein 1.31' + 'Return to Castle Wolfenstein 1.33' + 'Return to Castle Wolfenstein 1.4' + 'Soldier of Fortune 2 1.01' + 'Soldier of Fortune 2 1.02' + 'StarTrek Voyager: Elite Force 1.10' + 'StarTrek Voyager: Elite Force 1.20' + 'Wolfenstein Enemy Territory 2.55') + end + object PMisc: TListView + Left = 8 + Top = 192 + Width = 185 + Height = 83 + BevelOuter = bvRaised + Checkboxes = True + Columns = <> + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + RowSelect = True + ParentFont = False + TabOrder = 3 + ViewStyle = vsSmallIcon + Visible = False + end + object SpinProto: TSpinEdit + Left = 112 + Top = 128 + Width = 78 + Height = 22 + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + MaxLength = 5 + MaxValue = 65535 + MinValue = 0 + ParentFont = False + TabOrder = 4 + Value = 0 + end + object EPort: TEdit + Left = 8 + Top = 128 + Width = 97 + Height = 21 + BorderStyle = bsNone + Color = 15132390 + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -15 + Font.Name = 'Arial' + Font.Style = [fsBold] + MaxLength = 5 + ParentFont = False + TabOrder = 5 + end + end + object PAdvance: TPanel + Left = 96 + Top = 0 + Width = 198 + Height = 305 + BevelOuter = bvNone + Ctl3D = True + ParentCtl3D = False + TabOrder = 5 + DesignSize = ( + 198 + 305) + object LbAdvancedSettings: TLabel + Left = 8 + Top = 8 + Width = 120 + Height = 14 + Caption = 'Advanced settings' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel7: TBevel + Left = 9 + Top = 24 + Width = 187 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object Bevel12: TBevel + Left = 11 + Top = 105 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object LBBookmarkList: TLabel + Left = 138 + Top = 89 + Width = 56 + Height = 15 + Caption = 'Bookmark' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Bevel13: TBevel + Left = 11 + Top = 50 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object Label2: TLabel + Left = 168 + Top = 34 + Width = 26 + Height = 15 + Caption = 'Main' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object LBMasterQueryServer: TLabel + Left = 85 + Top = 183 + Width = 109 + Height = 15 + Caption = 'Master Query server' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Bevel5: TBevel + Left = 11 + Top = 199 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object CBAutoRefreshQueryMain: TCheckBox + Left = 8 + Top = 61 + Width = 121 + Height = 17 + Cursor = crHandPoint + Caption = 'Auto Refresh Query' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 0 + OnClick = CBAutoRefreshQueryMainClick + end + object SEAutoRefreshQueryMain: TSpinEdit + Left = 128 + Top = 59 + Width = 61 + Height = 22 + Hint = 'Seconds value' + Enabled = False + MaxLength = 3 + MaxValue = 255 + MinValue = 4 + ParentShowHint = False + ShowHint = True + TabOrder = 1 + Value = 4 + OnChange = SEAutoRefreshQueryMainChange + end + object CBSaveServer: TCheckBox + Left = 8 + Top = 112 + Width = 177 + Height = 17 + Cursor = crHandPoint + Caption = 'Always save serverlist on exit' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 2 + end + object CBAutoRefreshQueryBook: TCheckBox + Left = 8 + Top = 136 + Width = 121 + Height = 17 + Cursor = crHandPoint + Caption = 'Auto Refresh Query' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnClick = CBAutoRefreshQueryBookClick + end + object SEAutoRefreshQueryBook: TSpinEdit + Left = 128 + Top = 134 + Width = 61 + Height = 22 + Hint = 'Seconds value' + Enabled = False + MaxLength = 3 + MaxValue = 255 + MinValue = 4 + ParentShowHint = False + ShowHint = True + TabOrder = 4 + Value = 4 + end + object RBGoClick: TRadioButton + Left = 8 + Top = 161 + Width = 73 + Height = 17 + Caption = 'Click to go' + TabOrder = 5 + end + object RBQClick: TRadioButton + Left = 88 + Top = 162 + Width = 89 + Height = 17 + Caption = 'Click to query' + Checked = True + TabOrder = 6 + TabStop = True + end + object SPMaxServerQuery: TSpinEdit + Left = 120 + Top = 209 + Width = 69 + Height = 22 + Enabled = False + MaxLength = 5 + MaxValue = 65535 + MinValue = 4 + TabOrder = 7 + Value = 1000 + end + object CBMaxServerQuery: TCheckBox + Left = 8 + Top = 211 + Width = 105 + Height = 17 + Cursor = crHandPoint + Caption = 'Max server query ' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 8 + OnClick = CBMaxServerQueryClick + end + object CBFullServer: TCheckBox + Left = 8 + Top = 235 + Width = 87 + Height = 17 + Cursor = crHandPoint + Caption = 'No full server' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 9 + OnClick = CBMaxServerQueryClick + end + object CBEmptyServer: TCheckBox + Left = 96 + Top = 235 + Width = 100 + Height = 17 + Cursor = crHandPoint + Caption = 'No empty server' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 10 + OnClick = CBMaxServerQueryClick + end + object CBPassword: TCheckBox + Left = 8 + Top = 259 + Width = 85 + Height = 17 + Cursor = crHandPoint + Caption = 'No Password' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 11 + OnClick = CBMaxServerQueryClick + end + object CBDServer: TCheckBox + Left = 96 + Top = 259 + Width = 103 + Height = 17 + Cursor = crHandPoint + Caption = 'Dedicated server' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 12 + OnClick = CBMaxServerQueryClick + end + object CBVAC: TCheckBox + Left = 8 + Top = 283 + Width = 73 + Height = 17 + Cursor = crHandPoint + Caption = 'Anti-Cheat' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 13 + OnClick = CBMaxServerQueryClick + end + object CBFF: TCheckBox + Left = 96 + Top = 283 + Width = 97 + Height = 17 + Cursor = crHandPoint + Caption = 'Friendly Fire' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 14 + OnClick = CBMaxServerQueryClick + end + end + object PNetwork: TPanel + Left = 96 + Top = 0 + Width = 198 + Height = 305 + BevelOuter = bvNone + Ctl3D = True + ParentCtl3D = False + TabOrder = 6 + DesignSize = ( + 198 + 305) + object Bevel9: TBevel + Left = 11 + Top = 24 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object LBNetworkSettings: TLabel + Left = 8 + Top = 8 + Width = 113 + Height = 14 + Caption = 'Network settings' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Label9: TLabel + Left = 8 + Top = 32 + Width = 164 + Height = 15 + Caption = 'Choose your connection type :' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Label11: TLabel + Left = 14 + Top = 187 + Width = 115 + Height = 14 + Caption = 'Approximate delay (ms)' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object TBevel + Left = 13 + Top = 176 + Width = 183 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object Label1: TLabel + Left = 10 + Top = 218 + Width = 179 + Height = 78 + Caption = + 'Information : These values may be an approximation. Be sure that' + + #39's working better on change the delay value. High value means mo' + + 're accurate on pinging server.' + Font.Charset = DEFAULT_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentFont = False + WordWrap = True + end + object RB28k: TRadioButton + Left = 16 + Top = 56 + Width = 81 + Height = 17 + Cursor = crHandPoint + Caption = 'Modem 28k' + Ctl3D = False + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentCtl3D = False + ParentFont = False + TabOrder = 0 + OnClick = RB28kClick + end + object RB36k6: TRadioButton + Left = 16 + Top = 80 + Width = 89 + Height = 17 + Cursor = crHandPoint + Caption = 'Modem 36k 6' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 1 + OnClick = RB36k6Click + end + object RB56k: TRadioButton + Left = 16 + Top = 104 + Width = 81 + Height = 17 + Cursor = crHandPoint + Caption = 'Modem 56k' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 2 + OnClick = RB56kClick + end + object RBISDN: TRadioButton + Left = 16 + Top = 128 + Width = 49 + Height = 17 + Cursor = crHandPoint + Caption = 'ISDN' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 3 + OnClick = RBISDNClick + end + object RBBroad: TRadioButton + Left = 16 + Top = 152 + Width = 161 + Height = 17 + Cursor = crHandPoint + Caption = 'Broadband (cable, DSL, T1..)' + Checked = True + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 4 + TabStop = True + OnClick = RBBroadClick + end + object SENetwork: TSpinEdit + Left = 136 + Top = 184 + Width = 57 + Height = 22 + Cursor = crHandPoint + Ctl3D = False + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + MaxLength = 4 + MaxValue = 9999 + MinValue = 1 + ParentCtl3D = False + ParentFont = False + TabOrder = 5 + Value = 10 + OnChange = SENetworkChange + end + end + object PColors: TPanel + Left = 96 + Top = 0 + Width = 198 + Height = 305 + BevelOuter = bvNone + Ctl3D = True + ParentCtl3D = False + TabOrder = 4 + DesignSize = ( + 198 + 305) + object LBDisplay: TLabel + Left = 8 + Top = 8 + Width = 49 + Height = 14 + Caption = 'Display' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel3: TBevel + Left = 9 + Top = 24 + Width = 187 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object Bevel10: TBevel + Left = 11 + Top = 48 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object LBInfoPanel: TLabel + Left = 139 + Top = 32 + Width = 55 + Height = 15 + Caption = 'Info Panel' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object LBPlayerPanel: TLabel + Left = 124 + Top = 112 + Width = 69 + Height = 15 + Caption = 'Player Panel' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Bevel11: TBevel + Left = 11 + Top = 128 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object SColorInfo: TShape + Left = 8 + Top = 56 + Width = 121 + Height = 17 + Brush.Color = clBlack + end + object SColorPlayer: TShape + Left = 8 + Top = 136 + Width = 121 + Height = 17 + Brush.Color = clBlack + end + object LBAddressField: TLabel + Left = 118 + Top = 192 + Width = 76 + Height = 15 + Caption = 'Address Field' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object SColorField: TShape + Left = 8 + Top = 216 + Width = 121 + Height = 17 + Brush.Color = clBlack + end + object Bevel4: TBevel + Left = 11 + Top = 208 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object SBReset: TSpeedButton + Left = 8 + Top = 248 + Width = 185 + Height = 49 + Cursor = crHandPoint + Caption = '&Reset to default' + Flat = True + Glyph.Data = { + 36080000424D3608000000000000360400002800000020000000200000000100 + 08000000000000040000120B0000120B00000001000000000000000000000000 + 80000080000000808000800000008000800080800000C0C0C000C0DCC000F0CA + A600D4F0FF00B1E2FF0098CBFF006BC6FF0048B8FF0025AAFF0000AAFF000092 + DC00007AB90033669800004A730000325000D4E3FF00B1C7FF008EABFF006698 + CB004873FF002557FF000055FF000049DC00003DB90000319600002573000019 + 5000D4D4FF00B1B1FF008E8EFF006B6BFF004848FF002525FF000000FE000000 + DC000000B900000096000000730000005000E3D4FF00C7B1FF00AB8EFF008F6B + FF007348FF005725FF005500FF004900DC003D00B90031009600250073001900 + 5000F0D4FF00E2B1FF00D48EFF00C66BFF00B848FF00AA25FF00AA00FF009200 + DC007A00B900620096004A00730032005000FFD4FF00FFB1FF00FF8EFF00FF6B + FF00FF48FF00FF25FF00FE00FE00DC00DC00B900B90096009600730073005000 + 5000FFD4F000FFB1E200FF8ED400FF6BC600FF48B800FF25AA00FF00AA00DC00 + 9200B9007A009600620073004A0050003200FFD4E300FFB1C700FF8EAB00FF6B + 8F00FF487300FF255700FF005500DC004900B9003D0096003100730025005000 + 1900FFD4D400FFB1B100FF8E8E00FF6B6B00FF484800FF252500FE000000DC00 + 0000B9000000960000007300000050000000FFE3D400FFC7B100FFAB8E00FF8F + 6B00FF734800FF572500FF550000DC490000B93D000096310000732500005019 + 0000FFF0D400FFE2B100FFD48E00FFC66B00FFB84800FFAA2500FFAA0000DC92 + 0000B97A000096620000734A000050320000FFFFD400FFFFB100FFFF8E00FFFF + 6B00FFFF4800FFFF2500FEFE0000DCDC0000B9B9000096960000737300005050 + 0000F0FFD400E2FFB100D4FF8E00C6FF6B00B8FF4800AAFF2500AAFF000092DC + 00007AB90000629600004A73000032500000E3FFD400C7FFB100ABFF8E008FFF + 6B0073FF480057FF250055FF000049DC00003DB9000031960000257300001950 + 0000D4FFD400B1FFB1008EFF8E006BFF6B0048FF480025FF250000FE000000DC + 000000B90000009600000073000000500000D4FFE300B1FFC7008EFFAB006BFF + 8F0048FF730025FF570000FF550000DC490000B93D0000963100007325000050 + 1900D4FFF000B1FFE2008EFFD4006BFFC60048FFB80025FFAA0000FFAA0000DC + 920000B97A000096620000734A0000503200D4FFFF00B1FFFF008EFFFF006BFF + FF0048FFFF0025FFFF0000FEFE0000DCDC0000B9B90000969600007373000050 + 5000F2F2F200E6E6E600DADADA00CECECE00C2C2C200B6B6B600AAAAAA009E9E + 9E0092929200868686007A7A7A006E6E6E0062626200565656004A4A4A003E3E + 3E0032323200262626001A1A1A000E0E0E00F0FBFF00A4A0A000808080000000 + FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 + E5E5E500000000EA000000EAEAE5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E50000 + 00EA000C0C19130013191300EAEAE5E5E5E5E5E5E5E5E5E5E5E5E5E5E5000C19 + 190000190C0C1913000C0C1300EAEAE5E5E5E5E5E5E5E5E5E5E5E5E5E500190C + 0C191300FF0C0C1900130C0C1300EAEAE5E5E5E5E5E5E5E5E5E5E5E5000000FF + 0C0C0C1300FF0C0C1900FF0C0C1300EAEAE5E5E5E5E5E5E5E5E5E5000C191300 + FF0C0C0C1300FF0C0C0C00FF0C0C1300EAEAE5E5E5E5E5E5E5E5E500190C0C13 + 00FF0C0C0C0C00FF0C0C0C00FF0C0C1300EAEAE5E5E5E5E5E5E5E5E500FF0C0C + 0C00FF0C0C0C0C000C0C0C0C00FF0C0C1300EAEAE5E5E5E5E5E5E5E5E500FF0C + 0C0C00FF0C0C0C0C000C0C0C0C000C0C191300EAEAE5E5E5E5E5E5E5E5E500FF + 0C0C0C00FF0C0C0C0C000C0C0C0C0C0C0C191300EAEAE5E5E5E5E5E5E5E5E500 + FF0C0C0C00FF0C0C0C0C000C0C0C0C0C0C0C191300EAEAE5E5E5E5E5E5E5E5E5 + 00FF0C0C0C000C0C0C0C0C0C0C0C0C0C0C0C0C191300EAEAE5E5E5E5E5E5E5E5 + E500FF0C0C0C000C0C0C0C0C0C0C0C190C0C0C0C191300EAEAE5E5E5E5E5E5E5 + E5E500FF0C0C0C0C0C0C0C0C0C0C0C190C0C0C0C0C191300EAEAE5E5E5E5E5E5 + E5E5E500FF0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C191300EAE5E5E5E5E5E5 + E5E5E5E500FF0C0C0C0C0C0C0C0C0C0C0C0CFF0C0C0C0C1900EAE5E5E5E5E5E5 + E5E5E5E5E500FFFF0C0C0C0C0C0C0C0C0CFFFF0C0C0C0C130007E5E5E5E5E5E5 + E5E5E5E5E5E500191919190C0C0C0C0C0C0C0C0C0C0C191300EAE5E5E5E5E5E5 + EAEAEAEAEAEAEA00131319FFFFFFFF0C0C0C0C0CFFFF13131300E5E5E5E5E5EA + 000000000000000000131919191919FFFF0CFFFF131319131300E5E5E5E5E500 + FF0C0C0C0C0C0C0C0C0C0C0C0C0C0C19191913130C0C0C191300E5E5E5E5E500 + FF0C0C0C0C0C0C0C0C0C0C0C0C0CFFFF13130C0C0C0C0C0C1900E5E5E5E5E500 + FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FF0C0C0C0C0C0C0000E5E5E5E5E5E5E5 + 0000000000000000000000000000E5E500FF0C0C0C0000E5E5E5E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E500000000E5E5E5E5E5E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 + E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5} + OnClick = SBResetClick + end + object BChangeInfoColor: TButton + Left = 136 + Top = 56 + Width = 57 + Height = 17 + Caption = 'Change' + TabOrder = 0 + OnClick = BChangeInfoColorClick + end + object BChangePlayerColor: TButton + Tag = 1 + Left = 136 + Top = 136 + Width = 57 + Height = 17 + Caption = 'Change' + TabOrder = 1 + OnClick = BChangePlayerColorClick + end + object BFontInfo: TButton + Left = 8 + Top = 80 + Width = 185 + Height = 25 + Caption = 'Fonts' + TabOrder = 2 + OnClick = BFontInfoClick + end + object BFontPlayers: TButton + Tag = 1 + Left = 8 + Top = 160 + Width = 185 + Height = 25 + Caption = 'Fonts' + TabOrder = 3 + OnClick = BFontPlayersClick + end + object BChangeFieldColor: TButton + Tag = 2 + Left = 136 + Top = 216 + Width = 57 + Height = 17 + Caption = 'Change' + TabOrder = 4 + OnClick = BChangeFieldColorClick + end + end + object PGeneral: TPanel + Left = 96 + Top = 0 + Width = 198 + Height = 305 + BevelOuter = bvNone + Ctl3D = True + ParentCtl3D = False + TabOrder = 1 + DesignSize = ( + 198 + 305) + object LGeneral: TLabel + Left = 8 + Top = 8 + Width = 108 + Height = 14 + Caption = 'General settings' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Verdana' + Font.Style = [fsBold] + ParentFont = False + end + object Bevel1: TBevel + Left = 9 + Top = 24 + Width = 187 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object LPlayer: TLabel + Left = 8 + Top = 32 + Width = 59 + Height = 14 + Caption = 'Player name' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object Bevel2: TBevel + Left = 11 + Top = 72 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object Bevel8: TBevel + Left = 11 + Top = 216 + Width = 185 + Height = 9 + Anchors = [akTop] + Shape = bsTopLine + end + object LBONjoin: TLabel + Left = 65 + Top = 200 + Width = 129 + Height = 15 + Caption = 'On joining full server do' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -12 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + end + object LBWarningFlood: TLabel + Left = 10 + Top = 271 + Width = 183 + Height = 26 + Caption = 'Warning : Some engines are protected against flooding.' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clRed + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + WordWrap = True + end + object EGPName: TEdit + Left = 8 + Top = 48 + Width = 185 + Height = 21 + BorderStyle = bsNone + Color = 15132390 + Font.Charset = ANSI_CHARSET + Font.Color = clGray + Font.Height = -16 + Font.Name = 'Arial' + Font.Style = [fsBold] + ParentFont = False + TabOrder = 0 + Text = 'WinfraggUser' + end + object CBGMin: TCheckBox + Left = 8 + Top = 151 + Width = 185 + Height = 17 + Cursor = crHandPoint + Caption = 'Starting application on tray system' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 1 + end + object CBQonjoin: TCheckBox + Left = 8 + Top = 79 + Width = 177 + Height = 17 + Cursor = crHandPoint + Caption = 'Quit winfragg after joining server' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 2 + end + object RBFloodJoin: TRadioButton + Left = 8 + Top = 224 + Width = 169 + Height = 17 + Cursor = crHandPoint + Caption = 'Auto-Retry connecting (brutal)' + TabOrder = 3 + end + object RBNormalJoin: TRadioButton + Left = 8 + Top = 244 + Width = 137 + Height = 17 + Cursor = crHandPoint + Caption = 'Don'#39't go further (default)' + Checked = True + TabOrder = 4 + TabStop = True + end + object CBGStats: TCheckBox + Left = 8 + Top = 175 + Width = 185 + Height = 17 + Cursor = crHandPoint + Caption = 'Allowing basic report for statistics' + Checked = True + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + State = cbChecked + TabOrder = 5 + end + object CBCopyclip: TCheckBox + Left = 8 + Top = 103 + Width = 161 + Height = 17 + Cursor = crHandPoint + Caption = 'Copy ip to clipboard after join' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 6 + end + object CBMinjoin: TCheckBox + Left = 8 + Top = 127 + Width = 177 + Height = 17 + Cursor = crHandPoint + Caption = 'Minimize to tray system after join' + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + ParentFont = False + TabOrder = 7 + end + end + object TreeView: TTreeView + Left = 0 + Top = 0 + Width = 97 + Height = 257 + Cursor = crHandPoint + BevelEdges = [beBottom] + BevelOuter = bvSpace + BevelKind = bkSoft + BorderStyle = bsNone + ChangeDelay = 4 + Color = 15132390 + Ctl3D = False + Font.Charset = ANSI_CHARSET + Font.Color = clBlack + Font.Height = -11 + Font.Name = 'Arial' + Font.Style = [] + HideSelection = False + HotTrack = True + Indent = 19 + MultiSelect = True + ParentCtl3D = False + ParentFont = False + ReadOnly = True + RightClickSelect = True + RowSelect = True + TabOrder = 0 + OnClick = TreeViewClick + Items.Data = { + 0400000020000000000000000000000000000000FFFFFFFF0000000002000000 + 0747656E6572616C1E0000000000000000000000FFFFFFFFFFFFFFFF00000000 + 000000000547616D6573210000000000000001000000FFFFFFFFFFFFFFFF0000 + 00000000000008416476616E63656420000000000000000200000000000000FF + FFFFFF000000000000000007446973706C617920000000000000000300000000 + 000000FFFFFFFF0000000000000000074E6574776F726B200000000000000004 + 00000000000000FFFFFFFF00000000000000000741626F75742E2E} + end + object BClosesettings: TButton + Tag = 2 + Left = 6 + Top = 266 + Width = 83 + Height = 28 + Cursor = crHandPoint + Caption = '&Save - Close' + TabOrder = 7 + OnClick = BClosesettingsClick + end + object OpenD: TOpenDialog + Ctl3D = False + FilterIndex = 2 + Options = [ofReadOnly, ofNoReadOnlyReturn] + Top = 228 + end + object SaveD: TSaveDialog + DefaultExt = '*.reg' + FileName = 'WinfraggServerList (Value not changeable)' + Filter = 'registry file (*.reg)|*.reg' + FilterIndex = 0 + Options = [ofHideReadOnly, ofNoTestFileCreate, ofEnableSizing] + Left = 27 + Top = 228 + end +end diff --git a/setup.pas b/setup.pas new file mode 100644 index 0000000..0b16fc2 --- /dev/null +++ b/setup.pas @@ -0,0 +1,826 @@ + (*----------------------------------------------------------------------------+ + Winfragg(c) is created by Wash for A.M.U + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + The CsTiger searching feature is an exclusivity for Winfragg(c) only. + + Amu's page : http://winfragg.sourceforge.net/ + Dev Page : https://sourceforge.net/projects/winfragg/ + Contact : amunit@users.sourceforge.net + CsTiger : http://www.cstiger.de + Borland : http://www.borland.com + +----------------------------------------------------------------------------*) + +unit setup; + +interface + +uses + Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms, + jpeg, ExtCtrls, ComCtrls, StdCtrls, Buttons, ShellApi, Registry, + Spin, constants, Dialogs; + +type + TSetupMain = class(TForm) + ListGame: TListView; + TreeView: TTreeView; + PGeneral: TPanel; + LGeneral: TLabel; + LPlayer: TLabel; + EGPName: TEdit; + PAbout: TPanel; + VersionInfo: TMemo; + CBGMin: TCheckBox; + PGames: TPanel; + PColors: TPanel; + LBDisplay: TLabel; + CBQonjoin: TCheckBox; + PAdvance: TPanel; + LbAdvancedSettings: TLabel; + CBAutoRefreshQueryMain: TCheckBox; + SEAutoRefreshQueryMain: TSpinEdit; + PNetwork: TPanel; + LBNetworkSettings: TLabel; + RB28k: TRadioButton; + RB36k6: TRadioButton; + RB56k: TRadioButton; + RBISDN: TRadioButton; + RBBroad: TRadioButton; + SENetwork: TSpinEdit; + BClosesettings: TButton; + LBInfoPanel: TLabel; + LBPlayerPanel: TLabel; + PGConfig: TPanel; + LBConfigGame: TLabel; + LBPath: TLabel; + LBExtra: TLabel; + SBSeek: TSpeedButton; + EPath: TEdit; + EEXtra: TEdit; + CBProto: TComboBox; + LBProto: TLabel; + PMisc: TListView; + SpinProto: TSpinEdit; + SBSave: TSpeedButton; + SBBAck: TSpeedButton; + LBPort: TLabel; + EPort: TEdit; + OpenD: TOpenDialog; + LBVal: TLabel; + Image2: TImage; + LBBookmarkList: TLabel; + CBSaveServer: TCheckBox; + CBAutoRefreshQueryBook: TCheckBox; + SEAutoRefreshQueryBook: TSpinEdit; + SColorInfo: TShape; + SColorPlayer: TShape; + BChangeInfoColor: TButton; + BChangePlayerColor: TButton; + BFontInfo: TButton; + BFontPlayers: TButton; + LBAddressField: TLabel; + SColorField: TShape; + BChangeFieldColor: TButton; + SBReset: TSpeedButton; + SaveD: TSaveDialog; + RBGoClick: TRadioButton; + RBQClick: TRadioButton; + Bevel8: TBevel; + LBONjoin: TLabel; + RBFloodJoin: TRadioButton; + RBNormalJoin: TRadioButton; + CBGStats: TCheckBox; + SPMaxServerQuery: TSpinEdit; + CBMaxServerQuery: TCheckBox; + LBMasterQueryServer: TLabel; + CBFullServer: TCheckBox; + CBEmptyServer: TCheckBox; + CBPassword: TCheckBox; + CBDServer: TCheckBox; + CBVAC: TCheckBox; + CBFF: TCheckBox; + LBWarningFlood: TLabel; + CBCopyclip: TCheckBox; + CBMinjoin: TCheckBox; + procedure Image2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure BClosesettingsClick(Sender: TObject); + procedure SBBAckClick(Sender: TObject); + procedure LoadValue(Gnode : TListItem); + procedure SBSeekClick(Sender: TObject); + procedure CBProtoChange(Sender: TObject); + procedure RB28kClick(Sender: TObject); + procedure Initializing(); + procedure TreeViewClick(Sender: TObject); + procedure LoadGameconf; + procedure SBSaveClick(Sender: TObject); + procedure RB36k6Click(Sender: TObject); + procedure RB56kClick(Sender: TObject); + procedure RBISDNClick(Sender: TObject); + procedure RBBroadClick(Sender: TObject); + procedure CBAutoRefreshQueryMainClick(Sender: TObject); + procedure CBMaxServerQueryClick(Sender: TObject); + procedure CBAutoRefreshQueryBookClick(Sender: TObject); + procedure BChangeInfoColorClick(Sender: TObject); + procedure BChangePlayerColorClick(Sender: TObject); + procedure BFontInfoClick(Sender: TObject); + procedure BFontPlayersClick(Sender: TObject); + procedure BFontFieldClick(Sender: TObject); + procedure BChangeFieldColorClick(Sender: TObject); + procedure SBResetClick(Sender: TObject); + procedure FormActivate(Sender: TObject); + procedure SENetworkChange(Sender: TObject); + procedure ListGameMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure SEAutoRefreshQueryMainChange(Sender: TObject); + end; + +var SetupMain: TSetupMain; + +implementation + +uses Main, syslib, bookmark, servermain; + +{$R *.dfm} + +procedure TSetupMain.FormCreate(Sender: TObject); +var MyRegistry: TRegistry; +begin + try + VersionInfo.Lines.LoadFromFile(VERSIONFILE) + except on E:Exception do getErrorLog(E.Message); + end; + + MyRegistry := TRegistry.Create; + + if not MyRegistry.OpenKey('SOFTWARE\AMU\winfragg\',false) then + MessageDlg + ('No informations retrieved in registry.'+#13+ + 'You are running for the fisrt time or reconfiguring. '+ + 'Please set the options.' + +#13 + +#13+ + '' + +#13 + +#13+ + 'Just for fun :), Wash',mtWarning, [mbOk], 0) + else Initializing; + + MyRegistry.CloseKey; + MyRegistry.Free +end; + +(*----------------------------------------------------------------------------+ + "LoadGameconf" loads gamepaths and settings into ListGame (memory) + +----------------------------------------------------------------------------*) + +procedure TSetupMain.LoadGameconf; +var i,j:byte; + MyRegistry: TRegistry; +begin + MyRegistry := TRegistry.Create; + ListGame.Items.BeginUpdate; + + For i:=0 to ListGame.Items.Count-1 do + if MyRegistry.OpenKey('SOFTWARE\AMU\winfragg\games\' + + ListGame.Items[i].SubItems[0], false) + then + begin + ListGame.Items[i].SubItems[1] := MyRegistry.ReadString('pathgame'); + ListGame.Items[i].SubItems[2] := MyRegistry.ReadString('extracmd'); + ListGame.Items[i].SubItems[3] := MyRegistry.ReadString('gamedefaultport'); + ListGame.Items[i].SubItems[4] := MyRegistry.ReadString('protocolvalue'); + ListGame.Items[i].SubItems[5] := MyRegistry.ReadString('protocolname'); + j:=6; + While j < ListGame.Items[i].SubItems.Count - 1 do + begin + ListGame.Items[i].SubItems[j+2]:= + inttostr(MyRegistry.ReadInteger(ListGame.Items[i].SubItems[j])); + inc(j,3) + end; + MyRegistry.CloseKey; + end; + ListGame.Items.EndUpdate; + MyRegistry.Free +end; + +(*----------------------------------------------------------------------------+ + "Initializing" loads values from registry + +----------------------------------------------------------------------------*) + +procedure TSetupMain.Initializing(); +var MyRegistry: TRegistry; + i : byte; +begin + MyRegistry := TRegistry.Create; + + with MyRegistry do + begin + + OpenKey('SOFTWARE\AMU\winfragg\',false); + EGPName.Text := ReadString('playername'); + CBGStats.Checked := ReadBool('statsreport'); + CBGMin.Checked := ReadBool('minimizeonstart'); + CBCopyClip.Checked := ReadBool('copytoclipboardonjoin'); + CBMinJoin.Checked := ReadBool('minimizeonjoin'); + CBQonJoin.Checked := ReadBool('quitonjoin'); + RBGoClick.Checked := ReadBool('bookgoclick'); + RBQClick.Checked := ReadBool('bookqclick'); + RBFloodJoin.Checked := ReadBool('brutalflood'); + RBNormalJoin.Checked := ReadBool('normaljoin'); + RB28k.Checked := ReadBool('m28k'); + RB36k6.Checked := ReadBool('m36k6'); + RB36k6.Checked := ReadBool('m56k'); + RBISDN.Checked := ReadBool('misdn'); + RBBroad.Checked := ReadBool('mbroad'); + SENetwork.Value := ReadInteger('networkdelay'); + CBAutoRefreshQueryMain.Checked := ReadBool('autorefreshquerymain'); + SEAutoRefreshQueryMain.Value := ReadInteger('autorefreshquerymainvalue'); + CBMaxServerQuery.Checked := ReadBool('maxserverquery'); + CBAutoRefreshQueryBook.Checked := ReadBool('autorefreshquerybook'); + SEAutoRefreshQueryBook.Value := ReadInteger('autorefreshquerybookvalue'); + SPMaxServerQuery.Value := ReadInteger('maxserverqueryvalue'); + CBSaveServer.Checked := ReadBool('alwayssaveserverlist'); + CBFullServer.Checked := ReadBool('qfullserver'); + CBEmptyServer.Checked := ReadBool('qemptyserver'); + CBPassword.Checked := ReadBool('qpasswordserver'); + CBDServer.Checked := ReadBool('qdedicatedserver'); + CBVAC.Checked := ReadBool('qvacserver'); + CBFF.Checked := ReadBool('qffserver'); + if ReadBool('enlarged') then MainForm.SBroll.Click; + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\windows\main',false); + MainForm.Left := ReadInteger('mainleft'); + MainForm.Top := ReadInteger('maintop'); + MainForm.LstPlay.Column[0].Width := ReadInteger('col0'); + MainForm.LstPlay.Column[1].Width := ReadInteger('col1'); + MainForm.LstPlay.Column[2].Width := ReadInteger('col2'); + MainForm.LstPlay.Column[3].Width := ReadInteger('col3'); + MainForm.LstPlay.Column[4].Width := ReadInteger('col4'); + MainForm.LstPlay.Column[5].Width := ReadInteger('col5'); + MainForm.InfoPanel.Color := ReadInteger('infopanelcolor'); + MainForm.InfoPanel.Font.Charset := ReadInteger('infopanelfontcharset'); + MainForm.InfoPanel.Font.Color := ReadInteger('infopanelfontcolor'); + MainForm.InfoPanel.Font.Size := ReadInteger('infopanelfontsize'); + MainForm.LstPlay.Color := ReadInteger('playerpanelcolor'); + MainForm.LstPlay.Font.Charset := ReadInteger('playerpanelfontcharset'); + MainForm.LstPlay.Font.Color := ReadInteger('playerpanelfontcolor'); + MainForm.LstPlay.Font.Size := ReadInteger('playerpanelfontsize'); + MainForm.CBedit.Color := ReadInteger('addressfieldcolor'); + SetupMain.SColorPlayer.Brush.Color := MainForm.LstPlay.Color; + SetupMain.SColorInfo.Brush.Color := MainForm.InfoPanel.Color; + SColorField.Brush.Color := MainForm.CBedit.Color; + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\windows\bookmark',false); + MainBook.Left := ReadInteger('bookleft'); + MainBook.Top := ReadInteger('booktop'); + MainBook.Width := ReadInteger('bookwidth'); + MainBook.Height := ReadInteger('bookheight'); + MainBook.lvServers.Column[0].Width := ReadInteger('col0'); + MainBook.lvServers.Column[1].Width := ReadInteger('col1'); + MainBook.lvServers.Column[2].Width := ReadInteger('col2'); + MainBook.lvServers.Column[3].Width := ReadInteger('col3'); + MainBook.lvServers.Column[4].Width := ReadInteger('col4'); + MainBook.lvServers.Column[5].Width := ReadInteger('col5'); + MainBook.lvServers.Column[6].Width := ReadInteger('col6'); + MainBook.lvServers.Column[7].Width := ReadInteger('col7'); + MainBook.lvServers.Column[8].Width := ReadInteger('col8'); + MainBook.lvServers.Column[9].Width := ReadInteger('col9'); + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\windows\serverquery',false); + MainServer.Left := ReadInteger('serveleft'); + MainServer.Top := ReadInteger('servetop'); + MainServer.Width := ReadInteger('servewidth'); + MainServer.Height := ReadInteger('serveheight'); + MainServer.TopPanel.Height := ReadInteger('servertoppanelheigth'); + MainServer.lvServers.Column[0].Width := ReadInteger('col0'); + MainServer.lvServers.Column[1].Width := ReadInteger('col1'); + MainServer.lvServers.Column[2].Width := ReadInteger('col2'); + MainServer.lvServers.Column[3].Width := ReadInteger('col3'); + MainServer.lvServers.Column[4].Width := ReadInteger('col4'); + MainServer.lvServers.Column[5].Width := ReadInteger('col5'); + MainServer.lvServers.Column[6].Width := ReadInteger('col6'); + MainServer.lvServers.Column[7].Width := ReadInteger('col7'); + MainServer.lvServers.Column[8].Width := ReadInteger('col8'); + MainServer.lvServers.Column[9].Width := ReadInteger('col9'); + MainServer.lvServers.Column[10].Width := ReadInteger('col10'); + MainServer.lvServers.Column[11].Width := ReadInteger('col11'); + if MainServer.TopPanel.Height > 27 + then MainServer.lvServers2.BringToFront + else MainServer.lvServers.BringToFront; + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\logs\history',false); + for i:=0 to 4 do + begin + MainForm.CBedit.Items.Add (ReadString('ip'+IntTostr(i))); + MainServer.CBName.Items.Add (ReadString('name'+IntTostr(i))); + MainServer.CBMap.Items.Add (ReadString('map'+IntTostr(i))); + MainServer.CBMod.Items.Add (ReadString('mod'+IntTostr(i))); + MainServer.CBPing.Items.Add (ReadString('ping'+IntTostr(i))); + end; + + MainForm.CBedit.Text := ReadString('ip0'); + + MainServer.CBEGames.ItemIndex := ReadInteger('indexquerygame'); + MainServer.CBMap.Text := ReadString('map0'); + MainServer.CBMod.Text := ReadString('mod0'); + MainServer.CBPinging.text := ReadString('querypinging'); + MainServer.CBPing.Text := ReadString('ping4'); + MainServer.CBName.ItemIndex := ReadInteger('serverqueryname'); + MainServer.CBGames.ItemIndex := ReadInteger('serverquerygame'); + MainServer.CBNetwork.ItemIndex := ReadInteger('serverquerynetwork'); + CloseKey; + + RootKey:=HKEY_LOCAL_MACHINE; + lazywrite := false; + + Openkey('Software\Classes\winfragg\shell\open\command',true); + WriteString('',Application.ExeName + ' %1'); + Closekey; + OpenKey('SOFTWARE\Classes\winfragg\', false); + WriteString('','URL:wgg Protocol'); + WriteString('URL Protocol',''); + Closekey; + + Free; + end; + + if not CBGMin.Checked then MainForm.Show; + MainBook.Sbar.Panels[1].Text := 'Network delay : ' + + SetupMain.SENetwork.Text + ' ms'; +end; + +(*----------------------------------------------------------------------------+ + "LoadGameconf" saves values to registry + +----------------------------------------------------------------------------*) + +procedure TSetupMain.BClosesettingsClick(Sender: TObject); +var MyRegistry: TRegistry; + i,j : byte; +begin + MyRegistry := TRegistry.Create; + + with MyRegistry do + begin + + OpenKey('SOFTWARE\AMU\winfragg\',true); + WriteString('playername',EGPName.Text); + WriteBool('statsreport',CBGStats.Checked); + WriteBool('minimizeonstart',CBGMin.Checked); + WriteBool('copytoclipboardonjoin',CBCopyclip.Checked); + WriteBool('minimizeonjoin',CBMinjoin.Checked); + WriteBool('quitonjoin',CBQonjoin.Checked); + WriteBool('bookgoclick',RBGoClick.Checked); + WriteBool('bookqclick',RBQClick.Checked); + WriteBool('m28k',RB28k.Checked); + WriteBool('m36k6',RB36k6.Checked); + WriteBool('m56k',RB36k6.Checked); + WriteBool('misdn',RBISDN.Checked); + WriteBool('mbroad',RBBroad.Checked); + WriteBool('brutalflood',RBFloodJoin.Checked); + WriteBool('normaljoin',RBNormalJoin.Checked); + WriteInteger('networkdelay',SENetwork.Value); + WriteBool('alwayssaveserverlist',CBSaveServer.Checked); + WriteBool('allowbasicreportstat',CBGStats.Checked); + WriteBool('autorefreshquerymain',CBAutoRefreshQueryMain.Checked); + WriteInteger('autorefreshquerymainvalue',SEAutoRefreshQueryMain.Value); + WriteBool('autorefreshquerybook',CBAutoRefreshQueryBook.Checked); + WriteInteger('autorefreshquerybookvalue',SEAutoRefreshQueryBook.Value); + WriteBool('maxserverquery',CBMaxServerQuery.Checked); + WriteInteger('maxserverqueryvalue',SPMaxServerQuery.Value); + WriteBool('qfullserver',CBFullServer.Checked); + WriteBool('qemptyserver',CBEmptyServer.Checked); + WriteBool('qpasswordserver',CBPassword.Checked); + WriteBool('qdedicatedserver',CBDServer.Checked); + WriteBool('qvacserver',CBVAC.Checked); + WriteBool('qffserver',CBFF.Checked); + + if MainForm.Height > 200 then WriteBool('enlarged',true) + else WriteBool('enlarged',false); + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\windows\main',true); + WriteInteger('mainleft',MainForm.Left); + WriteInteger('maintop',MainForm.Top); + WriteInteger('col0',MainForm.LstPlay.Column[0].Width); + WriteInteger('col1',MainForm.LstPlay.Column[1].Width); + WriteInteger('col2',MainForm.LstPlay.Column[2].Width); + WriteInteger('col3',MainForm.LstPlay.Column[3].Width); + WriteInteger('col4',MainForm.LstPlay.Column[4].Width); + WriteInteger('col5',MainForm.LstPlay.Column[5].Width); + WriteInteger('infopanelcolor',MainForm.InfoPanel.Color); + WriteInteger('infopanelfontcharset',MainForm.InfoPanel.Font.Charset); + WriteInteger('infopanelfontcolor',MainForm.InfoPanel.Font.Color); + WriteInteger('infopanelfontsize',MainForm.InfoPanel.Font.Size); + WriteInteger('playerpanelcolor',MainForm.LstPlay.Color); + WriteInteger('playerpanelfontcharset',MainForm.LstPlay.Font.Charset); + WriteInteger('playerpanelfontcolor',MainForm.LstPlay.Font.Color); + WriteInteger('playerpanelfontsize',MainForm.LstPlay.Font.Size); + WriteInteger('addressfieldcolor',MainForm.CBedit.Color); + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\windows\bookmark',true); + WriteInteger('bookleft',MainBook.Left); + WriteInteger('booktop',MainBook.Top); + WriteInteger('bookwidth',MainBook.Width); + WriteInteger('bookheight',MainBook.Height); + WriteInteger('col0',MainBook.lvServers.Column[0].Width); + WriteInteger('col1',MainBook.lvServers.Column[1].Width); + WriteInteger('col2',MainBook.lvServers.Column[2].Width); + WriteInteger('col3',MainBook.lvServers.Column[3].Width); + WriteInteger('col4',MainBook.lvServers.Column[4].Width); + WriteInteger('col5',MainBook.lvServers.Column[5].Width); + WriteInteger('col6',MainBook.lvServers.Column[6].Width); + WriteInteger('col7',MainBook.lvServers.Column[7].Width); + WriteInteger('col8',MainBook.lvServers.Column[8].Width); + WriteInteger('col9',MainBook.lvServers.Column[9].Width); + WriteInteger('col10',MainBook.lvServers.Column[10].Width); + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\windows\serverquery',true); + WriteInteger('serveleft',MainServer.Left); + WriteInteger('servetop',MainServer.Top); + WriteInteger('servewidth',MainServer.Width); + WriteInteger('serveheight',MainServer.Height); + WriteInteger('servertoppanelheigth',MainServer.TopPanel.Height); + WriteInteger('col0',MainServer.lvServers.Column[0].Width); + WriteInteger('col1',MainServer.lvServers.Column[1].Width); + WriteInteger('col2',MainServer.lvServers.Column[2].Width); + WriteInteger('col3',MainServer.lvServers.Column[3].Width); + WriteInteger('col4',MainServer.lvServers.Column[4].Width); + WriteInteger('col5',MainServer.lvServers.Column[5].Width); + WriteInteger('col6',MainServer.lvServers.Column[6].Width); + WriteInteger('col7',MainServer.lvServers.Column[7].Width); + WriteInteger('col8',MainServer.lvServers.Column[8].Width); + WriteInteger('col9',MainServer.lvServers.Column[9].Width); + WriteInteger('col10',MainServer.lvServers.Column[10].Width); + WriteInteger('col11',MainServer.lvServers.Column[11].Width); + WriteInteger('s2col0',MainServer.lvServers2.Column[0].Width); + WriteInteger('s2col1',MainServer.lvServers2.Column[1].Width); + WriteInteger('s2col2',MainServer.lvServers2.Column[2].Width); + CloseKey; + + OpenKey('SOFTWARE\AMU\winfragg\logs\history',true); + + WriteInteger('indexquerygame',MainServer.CBEGames.ItemIndex); + WriteInteger('serverqueryname',MainServer.CBName.ItemIndex); + WriteInteger('serverquerygame',MainServer.CBGames.ItemIndex); + WriteInteger('serverquerynetwork',MainServer.CBNetwork.ItemIndex); + + j:=0; + for i:=MainForm.CBedit.Items.Count downto 0 do + if (MainForm.CBedit.Items[i] <> '') and (j < 5) then + begin + MyRegistry.WriteString('ip'+IntToStr(j),MainForm.CBedit.Items[i]); + inc(j) + end; + + j:=0; + for i:=MainServer.CBName.Items.Count downto 0 do + if (MainServer.CBName.Items[i] <> '') and (j < 5) then + begin + MyRegistry.WriteString('name'+IntToStr(j),MainServer.CBName.Items[i]); + inc(j) + end; + + j:=0; + for i:=MainServer.CBMap.Items.Count downto 0 do + if (MainServer.CBMap.Items[i] <> '') and (j < 5) then + begin + MyRegistry.WriteString('map'+IntToStr(j),MainServer.CBMap.Items[i]); + inc(j) + end; + + j:=0; + for i:=MainServer.CBMod.Items.Count downto 0 do + if (MainServer.CBMod.Items[i] <> '') and (j < 5) then + begin + MyRegistry.WriteString('mod'+IntToStr(j),MainServer.CBMod.Items[i]); + inc(j) + end; + + j:=0; + for i:=MainServer.CBPing.Items.Count downto 0 do + if (MainServer.CBPing.Items[i] <> '') and (j < 5) then + begin + MyRegistry.WriteString('ping'+IntToStr(j),MainServer.CBPing.Items[i]); + inc(j) + end; + CloseKey; + + if Tform(Sender).Tag = 0 then exit + else hide; + + For i:=0 to ListGame.Items.Count-1 do + With MyRegistry do + begin + OpenKey('SOFTWARE\AMU\winfragg\games\'+ListGame.Items[i].SubItems[0], true); + WriteString('pathgame',ListGame.Items[i].SubItems[1]); + WriteString('extracmd',ListGame.Items[i].SubItems[2]); + WriteString('gamedefaultport',ListGame.Items[i].SubItems[3]); + WriteString('protocolvalue',ListGame.Items[i].SubItems[4]); + WriteString('protocolname',ListGame.Items[i].SubItems[5]); + j:=6; + While j < ListGame.Items[i].SubItems.Count-1 do + begin + WriteInteger(ListGame.Items[i].SubItems[j], + strtoint(ListGame.Items[i].SubItems[j+2])); + inc(j,3) + end; + CloseKey + end; + + Free; + end; +end; + +procedure TSetupMain.SBBAckClick(Sender: TObject); +begin + ListGame.ItemFocused.Selected := false; + PGames.BringToFront +end; + +(*----------------------------------------------------------------------------+ + "LoadValue" gets "Gnode" TListItem type. Loads values from ListGame's items + +----------------------------------------------------------------------------*) + +procedure TSetupMain.LoadValue(Gnode : TListItem); +var NList : TListItem; + i : byte; +begin + LBConfigGame.Caption := Gnode.Caption; + EPath.Text := Gnode.SubItems[1]; + EExtra.Text := Gnode.SubItems[2]; + EPort.Text := Gnode.SubItems[3]; + SPinProto.value := strtoint(Gnode.SubItems[4]); + CBProto.Text := Gnode.SubItems[5]; + + PMisc.Clear; + i:=6; + While i < Gnode.SubItems.Count - 1 do + begin + NList := PMisc.Items.Add; + if Gnode.SubItems[i+2] = '1' + then NList.Checked := true; + NList.Caption := Gnode.SubItems[i]; + inc(i); + NList.SubItems.Add(Gnode.SubItems[i]); + inc(i,2); + end; + + if i > 6 then PMisc.Visible := true + else PMisc.Visible := false +end; + +procedure TSetupMain.SBSeekClick(Sender: TObject);//into items.. +begin + case ListGame.Selected.ImageIndex of + 1 : OpenD.Filter := 'Half-Life|*.exe'; + 9 : OpenD.Filter := 'Unreal 2003|*.exe'; + 7 : OpenD.Filter := 'Unreal Tournament|*.exe'; + 10 : OpenD.Filter := 'BatteField|*.exe'; + 11 : OpenD.Filter := 'Medal of Honor|*.exe'; + 12 : OpenD.Filter := 'Operation FlashPoint|*.exe'; + 13 : OpenD.Filter := 'Serious Sam|*.exe'; + 14 : OpenD.Filter := 'Serious Sam 2|*.exe'; + 15 : OpenD.Filter := 'Alien vs Predator 2|*.exe'; + 16 : OpenD.Filter := 'Quake 3|*.exe'; + 17 : OpenD.Filter := 'Return to Castle Wolfenstein|*.exe'; + 18 : OpenD.Filter := 'Wolfenstein Enemy Territory|*.exe'; + 19 : OpenD.Filter := 'Jedi Knight 2|*.exe'; + 20 : OpenD.Filter := 'Soldier of Fortune 2|*.exe'; + 21 : OpenD.Filter := 'Star Trek|*.exe' + end; + + OpenD.execute; + if OpenD.FileName <> '' then EPath.text := OpenD.FileName +end; + +procedure TSetupMain.CBProtoChange(Sender: TObject); +begin + case CBProto.ItemIndex of + 0 : SpinProto.Value := 43; + 1 : SpinProto.Value := 45; + 2 : SpinProto.Value := 46; + 3 : SpinProto.Value := 15; + 4 : SpinProto.Value := 16; + 5 : SpinProto.Value := 43; + 6 : SpinProto.Value := 45; + 7 : SpinProto.Value := 46; + 8 : SpinProto.Value := 47; + 9 : SpinProto.Value := 48; + 10 : SpinProto.Value := 66; + 11 : SpinProto.Value := 67; + 12 : SpinProto.Value := 68; + 13 : SpinProto.Value := 56; + 14 : SpinProto.Value := 57; + 15 : SpinProto.Value := 58; + 16 : SpinProto.Value := 59; + 17 : SpinProto.Value := 60; + 18 : SpinProto.Value := 2003; + 19 : SpinProto.Value := 2004; + 20 : SpinProto.Value := 23; + 21 : SpinProto.Value := 24; + 22 : SpinProto.Value := 82 + end; +end; + +procedure TSetupMain.TreeViewClick(Sender: TObject); +begin + if (Sender as TTreeView).Selected.StateIndex > -1 then + case (Sender as TTreeView).Selected.Index of + 0 : PGeneral.BringToFront; + 1 : Pcolors.BringToFront; + 2 : PNetwork.BringToFront; + 3 : PAbout.BringToFront; + end + else + if (Sender as TTreeView).Selected.Index = 0 + then PGames.BringToFront + else PAdvance.BringToFront +end; + +procedure TSetupMain.SBSaveClick(Sender: TObject); +var i,j : byte; +begin + if ListGame.Selected = nil then exit; + + With ListGame.Selected do + begin + SubItems[1] := EPath.Text; + SubItems[2] := EEXtra.Text; + SubItems[3] := EPort.Text; + SubItems[4] := SpinProto.Text; + SubItems[5] := CBProto.Text; + end; + + i:=0; j:=8; + while i < PMisc.Items.Count do + begin + if PMisc.Items[i].Checked then ListGame.Selected.SubItems[j] := '1' + else ListGame.Selected.SubItems[j] := '0'; + inc(i); inc(j,3) + end +end; + +procedure TSetupMain.SBResetClick(Sender: TObject); +begin + MainForm.InfoPanel.Color := ClBlack; + MainForm.InfoPanel.Font.Name := 'Terminal'; + MainForm.InfoPanel.Font.Color := ClSilver; + MainForm.InfoPanel.Font.Size := 7; + + SetupMain.SColorInfo.Brush.Color := ClBlack; + SetupMain.BFontInfo.Font := MainForm.InfoPanel.Font; + + MainForm.LstPlay.Color := ClBlack; + MainForm.LstPlay.Font.Name := 'Terminal'; + MainForm.LstPlay.Font.Color := ClSilver; + MainForm.LstPlay.Font.Size := 7; + + SetupMain.SColorPlayer.Brush.Color := ClBlack; + SetupMain.BFontPlayers.Font := MainForm.LstPlay.Font; + + MainForm.CBedit.Color := ClBlack; + SetupMain.SColorField.Brush.Color := ClBlack +end; + +procedure TSetupMain.CBAutoRefreshQueryMainClick(Sender: TObject); +begin + SEAutoRefreshQueryMain.enabled := CBAutoRefreshQueryMain.Checked; + MainForm.AutoRefresh.Enabled := CBAutoRefreshQueryMain.Checked; + + if CBAutoRefreshQueryMain.Checked + then + begin + MainForm.AutoRefresh.Interval := SEAutoRefreshQueryMain.Value*1000; + if MainForm.SBroll.Tag = 1 + then MainForm.AutoRefresh.Enabled := true; + end +end; + +procedure TSetupMain.CBMaxServerQueryClick(Sender: TObject); +begin + SPMaxServerQuery.Enabled := CBMaxServerQuery.Checked; + if not CBMaxServerQuery.Checked + then SPMaxServerQuery.Value := MAXSERVER +end; + +procedure TSetupMain.CBAutoRefreshQueryBookClick(Sender: TObject); +begin + SEAutoRefreshQueryBook.Enabled := CBAutoRefreshQueryBook.Checked; + if CBAutoRefreshQueryBook.Checked + then + MainBook.Sbar.Panels[2].Text := 'Auto retry delay : ' + + SetupMain.SEAutoRefreshQueryBook.Text + + ' sec' + else + MainBook.Sbar.Panels[2].Text := 'Auto retry delay : disabled' + +end; + +procedure TSetupMain.SENetworkChange(Sender: TObject); +begin + MainBook.Sbar.Panels[1].Text := 'Network delay : ' + + SetupMain.SENetwork.Text + ' ms'; +end; + +procedure TSetupMain.ListGameMouseDown(Sender: TObject; + Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +begin + if ListGame.Selected = nil then exit; + if Button=mbleft then + begin + LoadValue(ListGame.ItemFocused); + PGConfig.BringToFront + end +end; + +procedure TSetupMain.Image2Click(Sender: TObject); +begin + try + ShellExecute(Application.MainForm.Handle, Nil, + pchar('http://winfragg.sourceforge.net'), Nil, Nil, SW_SHOWNORMAL) + except on E:Exception do getErrorLog(E.Message) + end +end; + +procedure TSetupMain.SEAutoRefreshQueryMainChange(Sender: TObject); +begin + MainForm.AutoRefresh.Interval:=SetupMain.SEAutoRefreshQueryMain.Value*1000 +end; + +procedure TSetupMain.RB28kClick(Sender: TObject); +begin + SENetwork.Value := m28k; +end; + +procedure TSetupMain.RB36k6Click(Sender: TObject); +begin + SENetwork.Value := m36k; +end; + +procedure TSetupMain.RB56kClick(Sender: TObject); +begin + SENetwork.Value := m56k; +end; + +procedure TSetupMain.RBISDNClick(Sender: TObject); +begin + SENetwork.Value := ISDN; +end; + +procedure TSetupMain.RBBroadClick(Sender: TObject); +begin + SENetwork.Value := DSL; +end; + +procedure TSetupMain.BChangeInfoColorClick(Sender: TObject); +begin + MainForm.ChangeColors(Sender) +end; + +procedure TSetupMain.BChangePlayerColorClick(Sender: TObject); +begin + MainForm.ChangeColors(Sender) +end; + +procedure TSetupMain.BChangeFieldColorClick(Sender: TObject); +begin + MainForm.ChangeColors(Sender) +end; + +procedure TSetupMain.BFontInfoClick(Sender: TObject); +begin + MainForm.ChangeFonts(Sender) +end; + +procedure TSetupMain.BFontPlayersClick(Sender: TObject); +begin + MainForm.ChangeFonts(Sender) +end; + +procedure TSetupMain.BFontFieldClick(Sender: TObject); +begin + MainForm.ChangeFonts(Sender) +end; + +procedure TSetupMain.FormActivate(Sender: TObject); +begin + BClosesettings.SetFocus +end; + +end. diff --git a/syslib.dcu b/syslib.dcu new file mode 100644 index 0000000000000000000000000000000000000000..34038420f9bb08bece559cada4e622c78ac440e1 GIT binary patch literal 5993 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 VZA=QJDY87 ip) and (Curr^.nxt <> nil) do + begin + Prev := Curr; + Curr := Curr^.nxt + end; + + case s of + 0 : if Curr^.ip <> ip + then + begin + Last := new(PTClockSlot); + Last^.ip := ip; + Last^.tc := GetTickCount; + Last^.nxt := nil; + Curr^.nxt := Last + end + else Curr^.tc := GetTickCount + else if Curr^.ip = ip + then + begin + Result := GetTickCount-Curr^.tc; + Prev^.nxt := Curr^.nxt; + Dispose(Curr) + end + end +end; + +(*----------------------------------------------------------------------------+ + "Lookup" gets "str" string type. Resolves hostnames. + +----------------------------------------------------------------------------*) + +function Lookup(str : string) : ShortString; +var Phe: PHostEnt; +begin + Result:=''; + pHe := gethostbyname(Pchar(str)); + if pHe = nil then exit; + Result:=inet_ntoa(PInAddr(pHe^.h_addr_list^)^) +end; + +(*----------------------------------------------------------------------------+ + "GetAddress" gets "address" string type and "STag" byte type. Validates new + IP. + +----------------------------------------------------------------------------*) + +function GetAddress (Address : String; STag : byte) : TAdd; +var i : Word; + ip, port : String; + +begin + Result.ko := 1; + + if length(Address) < 1 then exit; + + i:=1; + while (Address[i] <> ':') and (i < length(Address)) do + begin + if ord(Address[i]) <> 32 then ip := ip + Address[i]; + inc(i) + end; + + if (i = length(Address)) or (ip = '') then exit; + + if Stag > 2 then Result.ip := ip + else Result.ip := lookup(ip); + + inc(i); + + While i <= length(Address) do + begin + if (ord(Address[i]) < 58) and (ord(Address[i]) > 47) + then Port := Port + Address[i]; + inc(i) + end; + + Result.port := StrToInt(port); + Result.ko := 0 +end; + +(*----------------------------------------------------------------------------+ + "CreateProcessSimple" gets "sExecutableFilePath" string type. Creates a new + process for the selected game. + +----------------------------------------------------------------------------*) + +function CreateProcessSimple(sExecutableFilePath : string ): string; +var pi : TProcessInformation; + si : TStartupInfo; + rep : string; + i : smallint; +begin + i := length(sExecutableFilePath); + rep := sExecutableFilePath; + while not (sExecutableFilePath[i] = '\') do// test ! end of string + begin + delete(rep,i,1); + dec(i); + end; + FillMemory( @si, sizeof( si ), 0 ); + si.cb := sizeof( si ); + CreateProcess(Nil,PChar(sExecutableFilePath),Nil, Nil, + False,NORMAL_PRIORITY_CLASS, Nil, PChar(rep), si, pi ); + CloseHandle( pi.hProcess ); + CloseHandle( pi.hThread ) +end; + +(*----------------------------------------------------------------------------+ + "HttpPost" gets "address" string type and "description" ShortString + type. Reports statistic informations. + +----------------------------------------------------------------------------*) + +procedure HttpPost(Address : String; Description : ShortString); +var HTTPx : TNMHTTP; +begin + HTTPx := TNMHTTP.Create(nil); + HTTPx.Timeout := HTTPSTATREPORTTIMEOUT; + HTTPx.Port:=80; + MainForm.InfoPanel.Lines.Add(HTTPREPORTCANVAS); + HTTPx.Get(WideString(HTTPREPORTDEST + + 'postwf.php?' + + 'nick='+ StringReplace(iDNameFormat(SetupMain.EGPName.Text), + ' ', + '%20', + [rfReplaceAll]) + + '&ip=' + Address + + '&gm=' + StringReplace(Description,' ','_',[rfReplaceAll]) + + '&ver=' + version)); + HTTPx.Free +end; + +(*----------------------------------------------------------------------------+ + "GetErrorLog" gets an "E" string type. Reports an error into a file. + +----------------------------------------------------------------------------*) + +procedure GetErrorLog (E : String); +var Error : String; +begin + AssignFile(ErrorLogFile, LOGFILENAME); + if not FileExists(LOGFILENAME) then ReWrite(ErrorLogFile) + else Reset(ErrorLogFile); + Append(ErrorLogFile); + Error:=DateToStr(Date) + ' @ ' + + TimeToStr(Now) + + ' Exception : ' + + E + +#$0D+#$0A; + Write(ErrorLogFile,Error); + Close(ErrorLogFile) +end; + +(*----------------------------------------------------------------------------+ + Experimental stuff to release a pointer list from memory.. + +----------------------------------------------------------------------------*) + +function freeInfo(P : PTSInfo):PTSInfo; +begin + Result := P^.Next +end; + +procedure FreeMemInfo(P : PTSInfo); +begin + if P <> nil then FreeMemInfo(freeInfo(p)); + dispose(P) +end; + +function freePPlay(Pl : PTSPLayers):PTSPlayers; +begin + Result := Pl^.Next +end; + +procedure FreeMemPlayers(Pl : PTSPlayers); +begin + if Pl^.Next <> nil then FreeMemPlayers(freePPLay(Pl)); + dispose(Pl) +end; + +end. diff --git a/tstruct.dcu b/tstruct.dcu new file mode 100644 index 0000000000000000000000000000000000000000..f8812d391a28dba26adbccb965f94d3790f3a84b GIT binary patch literal 2312 zcmZuxe~2U19skbD%j_gO7w69Ph+z%cuovcrXUwii7>;ziKjW^qS+kq$dD`nA$d1@ zKd`U9x8}CQ1N?Af!}Eh(#ZS7+y%wF@F#PuFgEzt z7k66HoZ(we$8fLyGY^!C(5! z=dPx;p(ch8kUq0~@l~HA^C~cB&c#&3g-bMaJd6iV`CyJu1oO0!W!uZ919##DX+U&PP_Z1DaI0!Faj`V{$IS#72F^*tDq(OsqFn zX1FL&HiR|z?OqRo#ONK|LK0*~S8#6V=waEc!SSRju;JA$+wV7Q|D5g91Td*);E?%C zbt)4kE_B*X2Lnba#;AD~N_dKz(M3Vt^WAkog~DQCusV(*!VxAdY<7cw!#_urXp#+8 zw_G;_u_TkLzGLI~^sA09nYGoZ>%NY;&Bj}J9fZbovw zgIDW%9fY?enOHNnxt}I0dIXCWmX#{lp726RMw_;=N#zMFM$_SSp5Ruzpt*^#Ym=;YLMcY} zi_e=I8fcPPn_Z>l|K+0m>+I1H>^x3_%u|JvFoqezq~dYP#C5CNG}=_cykae^Fx5-c ztm!j#J;I_()|ze76L|E6?Z7uEo;b2(cBqtOGLrDu9Bl}nVx*PDx8F92@1gM)I1QF2l2DBxKF{qBcWmv6}vzq@{_#Wfe`6nfmPRo0r-JW2Qp(6a#{;c@HKWcP?F;!tN}N;;_A2K>ngI}RAmAWs|f;+s0yB2Jwo7uIzr&0dX&K9YLdVcYKp*<>L`Klt7!sHYZ&i` z43{4<40?%S&>u4l`g|UBKP%w!^8ykt6p;8u0f}E0Fx!g-%yzke*?BA!~(e>Rj{?7Oz{ 'ip') and (ParamStr(1) <> '') + then + begin + atom_Send := GlobalAddAtom(PChar(ParamStr(1))); + SendMessage(FindWindow('TMainForm',nil),WM_USER+17879,atom_Send,0) + end + end; + +begin + + hMutex := CreateMutex(nil, true, 'Winfragg'); + + if GetLastError = ERROR_ALREADY_EXISTS then + begin + CloseHandle(hMutex); + SendingMessage(); + end + else + begin + Application.Initialize; + Application.Title := 'Winfragg FUSiON #2.03'; + Application.CreateForm(TMainForm, MainForm); + Application.CreateForm(TQueryMain, QueryMain); + Application.CreateForm(TMainBook, MainBook); + Application.CreateForm(TMainServer, MainServer); + Application.CreateForm(TSetupMain, SetupMain); + SetupMain.LoadGameconf; + SendingMessage(); + Application.Run + end; + +end. diff --git a/winfragg.res b/winfragg.res new file mode 100644 index 0000000000000000000000000000000000000000..003b9329f8d70cd42da5112ab516b66db981398a GIT binary patch literal 4148 zcmcgvL2uMn5PqSQx)O?fsMI|mC2pfqBLrDWBo--ZSO^NMrbMRQR(k*;!=}ivAe<_y ze4qzQx%jw8UoG|GqmRDsaeqY*-1-lie&5WqcZoRHiQhhZ=Y8|dH}l3`V~knHd3vfR zrXL)CU2MMp1U4)3o$Fq78l!J9S;x79bH#Kp8uKUCoIT3AD5|oo%c3m9aO8GewQv+k zMwwgWUcZ;aepZ!rUC(Na)zX-kh3EU(G%IKJepz8sRkK-HS7lYjaqM}XqKYHO@It{c zcic`V%cp>aJyunm009%3S5+_?;lBhJ{K5;qt>?;tOR6eM)2`noXPgZ%FXR^PL`jTz zmAN1{^axc?r&GV{PoWB8WN0&qWd;}Epi#i4-|LHq#({#(dd2l;UlBKK=DnnR|I!9cH z1><1Q52A<{BApnh3k^Z$vRp`F9~Ohb0QEyJ#u<#PL;}9Z9jm2cg-oY;7{%%xF4X&( zTxfP|0n}Ad7Eu(sOu5tP`bC8*mkQLvrd(By+N;VmoA!gC)A1m36@ zAOjbO0_`iwrh`F%4kDEx)#kWrz!U(gNfSe8=I~q3<`^|D`HFRg-GO}sWT-vOk(!aD zhSCXh;v)i-P(ie|P?>H~jLh4-s8GB=Ct>~*88uoViLUEeaB8AE#qM~&+fApk+37_| zA{HrWj-0c{&SfG(Ng%wLrqgb3U>peI;-7>qx{&AGL}5r5IWh$uY!xZnh5nL3T(%OS zJqDu)+sr7e>}^)91r}%tr6@|2oZs!GcqnL!g)^8-Qk1q$Gz`$zp*AW+1c4MpY+>6y zE}?LMq|h)9M}BX~g{E7^Qb(y1#D(6~gC>m{+n3Da-7m+xYs0P8?MoLdtVSXH!4s@d z+YqYDTp$W?7AZt?o$D4uPQy{G%(sYq`DAi1-rpJT-Z~!colN$2udb>K8<*=^D5-}i ziafYrW6>gkEKP@*L6#iKc%CmgbcWk&C*z&%jSE{}82lrU-Hlbaz#XNJbYPchor~HO zDvBe|mnhIfw4CZ08fB7Z-CjQoBQyrqpfM-oJqUs*+5=vOTWgd3>mVREvDL_5t3|dj zHx8rFcL1%}s!oyw1pwEhFx0@Y@ZI=e8C<;}isQ$7O*Ju4<*%Ac{qr#yMj>1zX_~XT z=nmZ&;^XZ?#c^C0Qh@N810LUv_Zt5EZ2L^RXW4B4l_VX{9|QsVOqORk8cbax5Z9G` zV=c>!9Gh!^`{%vpIgbkkFhw>wV*bhiF~8;{5VaSYiVVC;>#l+F2?()&%McT4O`%N zcp2cstuJxkk|zrz`Zs;1NoX9S{bIYZJtlFCr)`8>Ff(}JDDiFp2w6?qkGHQ+_HPZh zE-&_1!yk^C=PV0;HlGs^PjhOX@G&q9&y_^rwL?f zN|c>E%ZhHd7pEbzX-kU@q)d}UD@q!EnPnMXQyW-~#YQA?E#~ra%dXCx7G>RRTgF6hINPd9Eo zywxNSN*;*V4k%Y?N5cB-u!!R9H~-%?_s=HI)6-S6Z|;}}=0}`&%|m=P$MWwQ{+d}a z>+AZfhQESV%=>dje(Ri`x*z>5^#0sUKn=|!^919r2{3yg9-fH5`;@^W+Y(nw-2L4|FXJXe)pa=0@ zsJTt#T$D^ePjQQA_Yvxn1`*6)!wN$IGh2jP7bV;q^KGjwK?^^*vcJlsioXiwZJk!?5~PjR{a*!g4w17oES){|7_);_v_f literal 0 HcmV?d00001 diff --git a/winfragg.todo b/winfragg.todo new file mode 100644 index 0000000..595a3c5 --- /dev/null +++ b/winfragg.todo @@ -0,0 +1,28 @@ +{TODO : Releasing form/objects memory} +{TODO : Half-Life Server add ons} + + +{TODO : Filter UT} +{TODO : Sorting infos} + +{TODO : UT flood} + + + + + + +{TODO : Dispose prob} + + + +{TODO : Les try except logerror partout} +{TODO : Big Netoyage} + + + + + +{TODO : mémoire augmentante !!} + +