sm

立即登录 | 账号注册

积分: 0 |用户组: 游客

搜索
服务器租用 传奇3一条龙 支付平台源码 无法下载点击此处反馈
查看: 2003|回复: 29

[传奇源码] Gom引擎全套源码传奇引擎GOM源代码首发

[复制链接]

826

主题

36

回帖

23万

积分

霸王教主

积分
235297
发表于 2023-8-11 00:54:55 | 显示全部楼层 |阅读模式
作为传奇私服业内最火爆的引擎,Gameofmir引擎(简称Gom引擎)凭借着自身的特色和稳定一直稳居私服引擎榜首。

占据了传奇私服引擎界90%的市场份额,自从2015年11月8日GOM引擎停止更新之后,私服引擎市场的运营者称“Gom之后 再无引擎”可见GOM引擎在私服运营者心中的地位如此之高!

在网络上也有很多源码高手,一直在寻找或者花高价几万几十万几百万寻找GOM引擎源码,可是一直都没有源码放出。

今天就把GOM引擎的源码放出来,让各位喜欢传奇引擎源码的朋友做研究,本引擎源码为Gom商业引擎无错版,今日免费放出,

也希望各位传奇引擎源码爱好者不要再花钱买一些垃圾,也不要被一些打着GOM引擎源码旗号的骗子欺骗,本源码的下载只能做单机研究,如做商业用途产生的一切纠纷,本站不担任何责任!

此源码为商业全套包括注册机源码等,喜欢的就下载吧,语言是采用Delphi的

login的工作原理 我似乎搞清楚了

客户端发送登陆信息到logingate


logingate 处理包 过滤包 过滤IP


在发送给 loginsrv

loginsrv发送信息给logingate


logingate处理数据 然后发送给客户端

iplist.txt 绿色通道 不添加到禁止地址 不过滤cc攻击
IMG_1485(20230604-023008).JPG IMG_1486(20230604-023013).JPG
  1. unit FState;

  2. interface

  3. uses
  4.   Windows, Messages, SysUtils, StrUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   DWinCtl, StdCtrls, Textures, Grids, Grobal2, ClFunc, HUtil32, Actor,
  6.   MapUnit, SoundUtil, ComCtrls, EncryptUnit, Share, Wzl, ExtCtrls, RzPanel,DXDraws;

  7. const
  8.   BOTTOMBOARD800 = 371; //主操作介面图形号
  9.   BOTTOMBOARD1024 = 2; //主操作介面图形号
  10.   VIEWCHATLINE = 9;
  11.   MAXSTATEPAGE = 4;
  12.   MAXHEROSTATEPAGE = 4;
  13.   LISTLINEHEIGHT = 13;
  14.   MAXMENU = 10;

  15.   AdjustAbilHints: array[0..8] of string = (
  16.     '攻击力',
  17.     '魔法(魔法师)',
  18.     '道术(道士)',
  19.     '防御',
  20.     '魔法防御',
  21.     '生命值',
  22.     '魔法值',
  23.     '准确',
  24.     '敏捷'
  25.     );

  26. type
  27.   TSpotDlgMode = (dmSell, dmRepair, dmStorage, dmSellOff, dmChange);

  28.   TClickPoint = record
  29.     rc: TRect;
  30.     rstr: string;
  31.   end;
  32.   pTClickPoint = ^TClickPoint;
  33.   TDiceInfo = record
  34.     nDicePoint: Integer;
  35.     nPlayPoint: Integer; //当前骰子点数
  36.     nX: Integer;
  37.     nY: Integer;
  38.     n67C: Integer;
  39.     n680: Integer;
  40.     dwPlayTick: LongWord;
  41.   end;
  42.   pTDiceInfo = ^TDiceInfo;

  43.   TNpcLabel = class(TDLabel)
  44.   private
  45.     m_nColorPosition: Integer;
  46.   public
  47.     m_dwChgColorTick: LongWord;
  48.     m_ColorList: TList;
  49.     m_nRecogId: Integer;
  50.     constructor Create(AOwner: TComponent); override;
  51.     destructor Destroy; override;
  52.     procedure Process; override;
  53.     procedure AddColor(btColor: Byte);
  54.   end;

  55.   TEffectTick = record
  56.     nIndex: Integer;
  57.     dwDrawTick: LongWord;
  58.   end;
  59.   pTEffectTick = ^TEffectTick;

  60.   TItemLabel = class(TDButton)

  61.   private
  62.     FClientItem: TClientItem;
  63.     FClickTimeTick: LongWord;
  64.     FEffectTick: array[0..2] of TEffectTick;
  65.     FGetClientItem: Boolean;
  66.   public
  67.     constructor Create(AOwner: TComponent); override;
  68.     destructor Destroy; override;
  69.     procedure DirectPaint(dsurface: TTexture); override;
  70.     procedure Process; override;
  71.   published
  72.     property ClientItem: TClientItem read FClientItem write FClientItem;
  73.     property ClickTimeTick: LongWord read FClickTimeTick write FClickTimeTick;
  74.     property GetClientItem: Boolean read FGetClientItem write FGetClientItem;
  75.   end;


  76.   TFrmDlg = class(TForm)
  77.     DBackground: TDWindow;
  78.     DStateWin: TDWindow;
  79.     DItemBag: TDWindow;
  80.     DBottom: TDWindow;
  81.     DPrevState: TDButton;
  82.     DCloseState: TDButton;
  83.     DLogIn: TDWindow;
  84.     DNewAccount: TDWindow;
  85.     DSelectChr: TDWindow;
  86.     DscSelect1: TDButton;
  87.     DscSelect2: TDButton;
  88.     DscStart: TDButton;
  89.     DscNewChr: TDButton;
  90.     DscEraseChr: TDButton;
  91.     DscCredits: TDButton;
  92.     DscExit: TDButton;
  93.     DCreateChr: TDWindow;
  94.     DccWarrior: TDButton;
  95.     DccWizzard: TDButton;
  96.     DccMonk: TDButton;
  97.     DccReserved: TDButton;
  98.     DccMale: TDButton;
  99.     DccFemale: TDButton;
  100.     DccLeftHair: TDButton;
  101.     DccRightHair: TDButton;
  102.     DccOk: TDButton;
  103.     DccClose: TDButton;
  104.     DMsgDlg: TDWindow;
  105.     DNextState: TDButton;
  106.     DSWNecklace: TDButton;
  107.     DSWLight: TDButton;
  108.     DSWArmRingR: TDButton;
  109.     DSWArmRingL: TDButton;
  110.     DSWRingR: TDButton;
  111.     DSWRingL: TDButton;
  112.     DSWWeapon: TDButton;
  113.     DSWDress: TDButton;
  114.     DSWHelmet: TDButton;
  115.     DBelt2: TDButton;
  116.     DBelt3: TDButton;
  117.     DBelt4: TDButton;
  118.     DBelt5: TDButton;
  119.     DBelt6: TDButton;
  120.     DChgPw: TDWindow;
  121.     DChgpwOk: TDButton;
  122.     DChgpwCancel: TDButton;
  123.     DMenuDlg: TDWindow;
  124.     DMenuPrev: TDButton;
  125.     DMenuNext: TDButton;
  126.     DMenuBuy: TDButton;
  127.     DMenuClose: TDButton;
  128.     DSellDlg: TDWindow;
  129.     DStMag1: TDButton;
  130.     DStMag2: TDButton;
  131.     DStMag3: TDButton;
  132.     DStMag4: TDButton;
  133.     DStMag5: TDButton;
  134.     DKeySelDlg: TDWindow;
  135.     DKsIcon: TDButton;
  136.     DKsF1: TDButton;
  137.     DKsF2: TDButton;
  138.     DKsF3: TDButton;
  139.     DKsF4: TDButton;
  140.     DKsNone: TDButton;
  141.     DKsOk: TDButton;
  142.     DBotGroup: TDButton;
  143.     DBotTrade: TDButton;
  144.     DBotMiniMap: TDButton;
  145.     DGroupDlg: TDWindow;
  146.     DGrpAllowGroup: TDButton;
  147.     DGrpDlgClose: TDButton;
  148.     DGrpCreate: TDButton;
  149.     DGrpAddMem: TDButton;
  150.     DGrpDelMem: TDButton;
  151.     DBotLogout: TDButton;
  152.     DBotExit: TDButton;
  153.     DBotGuild: TDButton;
  154.     DStPageUp: TDButton;
  155.     DStPageDown: TDButton;
  156.     DDealRemoteDlg: TDWindow;
  157.     DDealDlg: TDWindow;
  158.     DDRGrid: TDGrid;
  159.     DDGrid: TDGrid;
  160.     DDealOk: TDButton;
  161.     DDealClose: TDButton;
  162.     DDGold: TDButton;
  163.     DDRGold: TDButton;
  164.     DSelServerDlg: TDWindow;
  165.     DUserState1: TDWindow;
  166.     DCloseUS1: TDButton;
  167.     DWeaponUS1: TDButton;
  168.     DHelmetUS1: TDButton;
  169.     DNecklaceUS1: TDButton;
  170.     DDressUS1: TDButton;
  171.     DLightUS1: TDButton;
  172.     DArmringRUS1: TDButton;
  173.     DRingRUS1: TDButton;
  174.     DArmringLUS1: TDButton;
  175.     DRingLUS1: TDButton;
  176.     DGuildDlg: TDWindow;
  177.     DGDHome: TDButton;
  178.     DGDList: TDButton;
  179.     DGDChat: TDButton;
  180.     DGDAddMem: TDButton;
  181.     DGDDelMem: TDButton;
  182.     DGDEditNotice: TDButton;
  183.     DGDEditGrade: TDButton;
  184.     DGDAlly: TDButton;
  185.     DGDBreakAlly: TDButton;
  186.     DGDWar: TDButton;
  187.     DGDCancelWar: TDButton;
  188.     DGDUp: TDButton;
  189.     DGDDown: TDButton;
  190.     DGDClose: TDButton;
  191.     DGuildEditNotice: TDWindow;
  192.     DGEClose: TDButton;
  193.     DGEOk: TDButton;
  194.     DAdjustAbility: TDWindow;
  195.     DPlusDC: TDButton;
  196.     DPlusMC: TDButton;
  197.     DPlusSC: TDButton;
  198.     DPlusAC: TDButton;
  199.     DPlusMAC: TDButton;
  200.     DPlusHP: TDButton;
  201.     DPlusMP: TDButton;
  202.     DPlusHit: TDButton;
  203.     DPlusSpeed: TDButton;
  204.     DMinusDC: TDButton;
  205.     DMinusMC: TDButton;
  206.     DMinusSC: TDButton;
  207.     DMinusAC: TDButton;
  208.     DMinusMAC: TDButton;
  209.     DMinusMP: TDButton;
  210.     DMinusHP: TDButton;
  211.     DMinusHit: TDButton;
  212.     DMinusSpeed: TDButton;
  213.     DAdjustAbilClose: TDButton;
  214.     DAdjustAbilOk: TDButton;
  215.     DBotPlusAbil: TDButton;
  216.     DKsF5: TDButton;
  217.     DKsF6: TDButton;
  218.     DKsF7: TDButton;
  219.     DKsF8: TDButton;
  220.     DKsConF1: TDButton;
  221.     DKsConF2: TDButton;
  222.     DKsConF3: TDButton;
  223.     DKsConF4: TDButton;
  224.     DKsConF8: TDButton;
  225.     DKsConF7: TDButton;
  226.     DKsConF6: TDButton;
  227.     DKsConF5: TDButton;
  228.     DSWCharm: TDButton;
  229.     DSWBoots: TDButton;
  230.     DSWBelt: TDButton;
  231.     DSWBujuk: TDButton;
  232.     DBujukUS1: TDButton;
  233.     DBeltUS1: TDButton;
  234.     DBootsUS1: TDButton;
  235.     DCharmUS1: TDButton;
  236.     DBotMemo: TDButton;
  237.     DFriendDlg: TDWindow;
  238.     DFrdFriend: TDButton;
  239.     DFrdBlackList: TDButton;
  240.     DFrdClose: TDButton;
  241.     DFrdPgUp: TDButton;
  242.     DFrdPgDn: TDButton;
  243.     DMailListDlg: TDWindow;
  244.     DMailListClose: TDButton;
  245.     DMailListPgUp: TDButton;
  246.     DMailListPgDn: TDButton;
  247.     DMailDlg: TDWindow;
  248.     DBlockListDlg: TDWindow;
  249.     DBLPgUp: TDButton;
  250.     DBlockListClose: TDButton;
  251.     DBLPgDn: TDButton;
  252.     DMemo: TDWindow;
  253.     DMemoClose: TDButton;
  254.     DConfigDlgClose: TDButton;
  255.     DFrdAdd: TDButton;
  256.     DFrdDel: TDButton;
  257.     DFrdMemo: TDButton;
  258.     DFrdMail: TDButton;
  259.     DFrdWhisper: TDButton;
  260.     DMLReply: TDButton;
  261.     DMLRead: TDButton;
  262.     DMLLock: TDButton;
  263.     DMLDel: TDButton;
  264.     DMLBlock: TDButton;
  265.     DBLDel: TDButton;
  266.     DBLAdd: TDButton;
  267.     DMemoB2: TDButton;
  268.     DMemoB1: TDButton;
  269.     DChgGamePwd: TDWindow;
  270.     DChgGamePwdClose: TDButton;
  271.     DButton2: TDButton;
  272.     DButton1: TDButton;
  273.     DShopExit: TDButton;
  274.     DButtonFriend: TDButton;
  275.     DButtonHeroBag: TDButton;
  276.     DButFunc1: TDButton;
  277.     DButFunc2: TDButton;
  278.     DButFunc3: TDButton;
  279.     DButFunc4: TDButton;
  280.     DButFunc5: TDButton;
  281.     DHeroStateWin: TDWindow;
  282.     DCloseHeroState: TDButton;
  283.     DPrevHeroState: TDButton;
  284.     DNextHeroState: TDButton;
  285.     DHeroSWWeapon: TDButton;
  286.     DHeroSWHelmet: TDButton;
  287.     DHeroSWArmRingR: TDButton;
  288.     DHeroSWRingR: TDButton;
  289.     DHeroSWDress: TDButton;
  290.     DHeroSWNecklace: TDButton;
  291.     DHeroSWLight: TDButton;
  292.     DHeroSWArmRingL: TDButton;
  293.     DHeroSWRingL: TDButton;
  294.     DHeroStMag1: TDButton;
  295.     DHeroStMag2: TDButton;
  296.     DHeroStMag3: TDButton;
  297.     DHeroStMag4: TDButton;
  298.     DHeroStMag5: TDButton;
  299.     DHeroStPageUp: TDButton;
  300.     DHeroStPageDown: TDButton;
  301.     DHeroSWCharm: TDButton;
  302.     DHeroSWBoots: TDButton;
  303.     DHeroSWBelt: TDButton;
  304.     DHeroSWBujuk: TDButton;
  305.     DButtonDuel: TDButton;
  306.     DHeroItemBag: TDWindow;
  307.     DHeroHealthStateWin: TDWindow;
  308.     DShop: TDWindow;
  309.     DMiniMap: TDWindow;
  310.     DUpgrade: TDWindow;
  311.     DItemBox: TDWindow;
  312.     DUserSellOff: TDWindow;
  313.     DBoxItems: TDWindow;
  314.     DBook: TDWindow;
  315.     DFindChr: TDWindow;
  316.     DStoreDlg: TDWindow;
  317.     DUserStore: TDWindow;
  318.     DStoreMsgDlg: TDWindow;
  319.     DEditStore: TDEdit;
  320.     DGStore: TDGrid;
  321.     DStoreName: TDButton;
  322.     DStoreClose: TDButton;
  323.     DStoreOpen: TDButton;
  324.     DStoreCancel: TDButton;
  325.     DStoreMsgDlgOk: TDButton;
  326.     EdStoreDlgEdit: TDEdit;
  327.     DStoreMsgDlgCancel: TDButton;
  328.     DEditUserStore: TDEdit;
  329.     DGUserStore: TDGrid;
  330.     DUserStoreBuy: TDButton;
  331.     DUserStoreClose: TDButton;
  332.     DJewelry: TDButton;
  333.     DMedicine: TDButton;
  334.     DEnhance: TDButton;
  335.     Dfriend: TDButton;
  336.     DLimit: TDButton;
  337.     DShopIntroduce: TDButton;
  338.     DShopItemGrid: TDGrid;
  339.     DSuperShopItemGrid: TDGrid;
  340.     DPrevShop: TDButton;
  341.     DNextShop: TDButton;
  342.     DShopBuy: TDButton;
  343.     DShopFree: TDButton;
  344.     DShopClose: TDButton;
  345.     DNewAccountClose: TDButton;
  346.     DNewAccountCancel: TDButton;
  347.     DNewAccountOk: TDButton;
  348.     DLoginClose: TDButton;
  349.     DLoginChgPw: TDButton;
  350.     DLoginNew: TDButton;
  351.     DLoginOk: TDButton;
  352.     DCloseUpgrade: TDButton;
  353.     DStartUpgrade: TDButton;
  354.     DUpgradeItem3: TDButton;
  355.     DUpgradeItem2: TDButton;
  356.     DUpgradeItem1: TDButton;
  357.     DSellClose: TDButton;
  358.     DCloseSell: TDButton;
  359.     DNextSell: TDButton;
  360.     DSellItem: TDButton;
  361.     DRefreshSell: TDButton;
  362.     DBuySellItem: TDButton;
  363.     DPrevSell: TDButton;
  364.     DSearchSellOff: TDButton;
  365.     EdSearch: TDEdit;
  366.     DItemLock: TDButton;
  367.     DBookPage: TDButton;
  368.     DBookClose: TDButton;
  369.     DBookPrevPage: TDButton;
  370.     DBookNextPage: TDButton;
  371.     DFindChrNext: TDButton;
  372.     DFindChrPrior: TDButton;
  373.     DFindChrClose: TDButton;
  374.     DFindOK: TDButton;
  375.     DSServer2: TDButton;
  376.     DSServer1: TDButton;
  377.     DSSrvClose: TDButton;
  378.     DEngServer1: TDButton;
  379.     DSServer4: TDButton;
  380.     DSServer3: TDButton;
  381.     DSServer6: TDButton;
  382.     DSServer5: TDButton;
  383.     EdDlgEdit: TDEdit;
  384.     DMsgDlgOk: TDButton;
  385.     DMsgDlgYes: TDButton;
  386.     DMsgDlgCancel: TDButton;
  387.     DMsgDlgNo: TDButton;
  388.     DSellDlgSpot: TDButton;
  389.     DSellDlgClose: TDButton;
  390.     DSellDlgOk: TDButton;
  391.     DCloseHeroBag: TDButton;
  392.     DItemGrid: TDGrid;
  393.     DGold: TDButton;
  394.     DOpenUpgrade: TDButton;
  395.     DCloseBag: TDButton;
  396.     EdId: TDEdit;
  397.     EdPasswd: TDEdit;
  398.     DBoxItemGrid: TDGrid;
  399.     DGetBoxItemFlash: TDButton;
  400.     DHeroItemGrid: TDGrid;
  401.     DWDuel: TDWindow;
  402.     DDuelClose: TDButton;
  403.     DDDuelGold: TDButton;
  404.     DDDuelGrid: TDGrid;
  405.     DDRDuelGrid: TDGrid;
  406.     DDRDuelGold: TDButton;
  407.     DDuelCancel: TDButton;
  408.     DDuelOK: TDButton;
  409.     DBelt1: TDButton;
  410.     EdChat: TDEdit;
  411.     DVoice: TDButton;
  412.     DPlayTool: TDButton;
  413.     DOnHouser: TDButton;
  414.     DMyState: TDButton;
  415.     DMyMagic: TDButton;
  416.     DMyBag: TDButton;
  417.     DHelp: TDButton;
  418.     DFirDragon: TDButton;
  419.     DButtonShop: TDButton;
  420.     DButtonReCallHero: TDButton;
  421.     DRanking: TDButton;
  422.     DButtonOption2: TDButton;
  423.     DButtonOption1: TDButton;
  424.     DButtonMP: TDButton;
  425.     DButtonHP: TDButton;
  426.     DButtonHeroState: TDButton;
  427.     DMapTitle: TDWindow;
  428.     DMerchantDlg: TDWindow;
  429.     DMerchantDlgClose: TDButton;
  430.     DWRandomCode: TDWindow;
  431.     DBRandomCodeOK: TDButton;
  432.     DBRandomCodeChg: TDButton;
  433.     DEditRandomCode: TDEdit;
  434.     DButton4: TDButton;
  435.     DRankingDlg: TDWindow;
  436.     DBotCharRanking: TDButton;
  437.     DBotHeroRanking: TDButton;
  438.     DBotMasterRanking: TDButton;
  439.     DBotActorRanking: TDButton;
  440.     DBotWarriorRanking: TDButton;
  441.     DBotWizzardRanking: TDButton;
  442.     DBotMonkRanking: TDButton;
  443.     DBotHeroActorRanking: TDButton;
  444.     DBotHeroWarriorRanking: TDButton;
  445.     DBotHeroWizzardRanking: TDButton;
  446.     DBotHeroMonkRanking: TDButton;
  447.     DBotRankingHome: TDButton;
  448.     DBotRankingUp: TDButton;
  449.     DBotRankingDown: TDButton;
  450.     DBotRankingLast: TDButton;
  451.     DBotRankingSelf: TDButton;
  452.     DBotRankingClose: TDButton;
  453.     DHeroStMag6: TDButton;
  454.     DStMag6: TDButton;
  455.     DMainMenu: TDPopupMenu;
  456.     DMenuBook: TDPopupMenu;
  457.     DMagicMenu: TDPopupMenu;
  458.     DChatDlg: TDWindow;
  459.     DMemoChat: TDMemo;
  460.     DScrollChat: TDScroll;
  461.     DEdChat: TDWindow;
  462.     DShowChat: TDButton;
  463.     DConfigDlg: TDPageControl;
  464.     DWindowTab1: TDWindow;
  465.     DWindowTab2: TDWindow;
  466.     DWindowTab3: TDWindow;
  467.     DWindowTab4: TDWindow;
  468.     DWindowTab5: TDWindow;
  469.     DWindowTab6: TDWindow;
  470.     DWindowTab7: TDWindow;
  471.     DWindowTab8: TDWindow;
  472.     DMemoTab1: TDMemo;
  473.     DScrollTab1: TDScroll;
  474.     DMemoTab2: TDMemo;
  475.     DScrollTab2: TDScroll;
  476.     DButtonTab1: TDButton;
  477.     DButtonTab2: TDButton;
  478.     DButtonTab3: TDButton;
  479.     DButtonTab4: TDButton;
  480.     DButtonTab5: TDButton;
  481.     DButtonTab6: TDButton;
  482.     DButtonTab7: TDButton;
  483.     DButtonTab8: TDButton;
  484.     DMemoTab3: TDMemo;
  485.     DScrollTab3: TDScroll;
  486.     DMemoTab4: TDMemo;
  487.     DScrollTab4: TDScroll;
  488.     DMemoTab5: TDMemo;
  489.     DScrollTab5: TDScroll;
  490.     DMemoTab6: TDMemo;
  491.     DScrollTab6: TDScroll;
  492.     DMemoTab7: TDMemo;
  493.     DScrollTab7: TDScroll;
  494.     DMemoTab8: TDMemo;
  495.     DScrollTab8: TDScroll;
  496.     DCheckBoxShowActorLable: TDCheckBox;
  497.     DCheckBoxHideBlueLable: TDCheckBox;
  498.     DCheckBoxShowNumberLable: TDCheckBox;
  499.     DCheckBoxShowJobAndLevel: TDCheckBox;
  500.     DCheckBoxShowUserName: TDCheckBox;
  501.     DCheckBoxShowMonName: TDCheckBox;
  502.     DCheckBoxShowItemName: TDCheckBox;
  503.     DCheckBoxShowMoveNumberLable: TDCheckBox;
  504.     DCheckBoxShowGreenHint: TDCheckBox;
  505.     DCheckBoxMusic: TDCheckBox;
  506.     DCheckBoxItemHint: TDCheckBox;
  507.     DCheckBoxMagicLock: TDCheckBox;
  508.     DCheckBoxOrderItem: TDCheckBox;
  509.     DCheckBoxOnlyShowCharName: TDCheckBox;
  510.     DCheckBoxCloseGroup: TDCheckBox;
  511.     DCheckBoxItemDuraHint: TDCheckBox;
  512.     DLabelItemName: TDLabel;
  513.     DLabelItemHint: TDLabel;
  514.     DLabelPickUpItem: TDLabel;
  515.     DLabelShowItemName: TDLabel;
  516.     DEditSearchItem: TDEdit;
  517.     DComboboxItemType: TDCombobox;
  518.     DCheckBoxPickUpItemAll: TDCheckBox;
  519.     DLabelOption: TDLabel;
  520.     DLabelBookItem: TDLabel;
  521.     DComboboxBookIndex: TDCombobox;
  522.     DCheckBoxBook: TDCheckBox;
  523.     DLabelBookHP: TDLabel;
  524.     DEditBookHP: TDEdit;
  525.     DCheckBoxClose: TDCheckBox;
  526.     DLabelCloseHP: TDLabel;
  527.     DEditCloseHP: TDEdit;
  528.     DLabelClose: TDLabel;
  529.     DEditBookTime: TDEdit;
  530.     DLabelBookTime: TDLabel;
  531.     DEditCloseTime: TDEdit;
  532.     DLabelCloseTime: TDLabel;
  533.     DLabelBookItemType: TDLabel;
  534.     DLabel1: TDLabel;
  535.     DLabel2: TDLabel;
  536.     DLabel3: TDLabel;
  537.     DLabel10: TDLabel;
  538.     DCheckBoxLongHit: TDCheckBox;
  539.     DCheckBoxWideHit: TDCheckBox;
  540.     DCheckBoxFireHit: TDCheckBox;
  541.     DCheckBoxSWideHit: TDCheckBox;
  542.     DCheckBoxCrsHit: TDCheckBox;
  543.     DCheckBoxKtHit: TDCheckBox;
  544.     DCheckBoxShield: TDCheckBox;
  545.     DCheckBoxSign: TDCheckBox;
  546.     DCheckBoxPoison: TDCheckBox;
  547.     DCheckBoxWjzq: TDCheckBox;
  548.     DCheckBoxAutoUseMagic: TDCheckBox;
  549.     DEditAutoUseMagicTime: TDEdit;
  550.     DComboboxAutoUseMagic: TDCombobox;
  551.     DComboboxPoison: TDCombobox;
  552.     DCheckBoxAutoHideSelf: TDCheckBox;
  553.     DLabel11: TDLabel;
  554.     DLabelKeyOriginal: TDLabel;
  555.     DLabelKeyChange: TDLabel;
  556.     DLabelKey1: TDLabel;
  557.     DLabelKey2: TDLabel;
  558.     DLabelKey3: TDLabel;
  559.     DLabelKey4: TDLabel;
  560.     DLabelKey5: TDLabel;
  561.     DLabelKey6: TDLabel;
  562.     DLabelKey7: TDLabel;
  563.     DLabelHeroCallHero1: TDLabel;
  564.     DLabelHeroSetTarget1: TDLabel;
  565.     DLabelHeroUnionHit1: TDLabel;
  566.     DLabelHeroSetAttackState1: TDLabel;
  567.     DLabelHeroSetGuard1: TDLabel;
  568.     DLabelSwitchAttackMode1: TDLabel;
  569.     DLabelSwitchMiniMap1: TDLabel;
  570.     DLabelSwitchMiniMap: TDLabel;
  571.     DLabelSwitchAttackMode: TDLabel;
  572.     DLabelHeroSetGuard: TDLabel;
  573.     DLabelHeroSetAttackState: TDLabel;
  574.     DLabelHeroUnionHit: TDLabel;
  575.     DLabelHeroSetTarget: TDLabel;
  576.     DLabelHeroCallHero: TDLabel;
  577.     DLabelKeyMemo: TDLabel;
  578.     DCheckBoxUseKey: TDCheckBox;
  579.     DCheckBoxNotNeedShift: TDCheckBox;
  580.     DMenuPoison: TDPopupMenu;
  581.     DMenuItemType: TDPopupMenu;
  582.     DCategorizeSys: TDButton;
  583.     DCategorizeGroup: TDButton;
  584.     DCategorizeGuild: TDButton;
  585.     DCategorizePrivate: TDButton;
  586.     DButOther: TDButton;
  587.     DCheckBoxPok: TDCheckBox;
  588.     DCheckBoxStruckShield: TDCheckBox;
  589.     DCheckBoxSmartPosLongHit: TDCheckBox;
  590.     DCheckBoxSmartWalkLongHit: TDCheckBox;
  591.     DCheckBoxAutoHorse: TDCheckBox;
  592.     DCheckBoxGuaji: TDCheckBox;
  593.     DLabelGuajiQunti: TDLabel;
  594.     DComboboxGuajiQunti: TDCombobox;
  595.     DLabelGuajiGeti: TDLabel;
  596.     DComboboxGuajiGeti: TDCombobox;
  597.     DLabelGuaJiStart: TDLabel;
  598.     DMerchantBigDlg: TDWindow;
  599.     DMerchantBigDlgClose: TDButton;
  600.     DLabelSerieSkill1: TDLabel;
  601.     DLabelKey0: TDLabel;
  602.     DLabelSerieSkill: TDLabel;
  603.     DSerieMagic1: TDButton;
  604.     DLabel12: TDLabel;
  605.     DSerieMagic2: TDButton;
  606.     DSerieMagic3: TDButton;
  607.     DSerieMagic4: TDButton;
  608.     DSerieMagic5: TDButton;
  609.     DSerieMagic6: TDButton;
  610.     DSerieMagic7: TDButton;
  611.     DSerieMagic8: TDButton;
  612.     DSerieMagicMenu: TDPopupMenu;
  613.     DEditSerieMagic: TDButton;
  614.     DCheckBoxCompareItem: TDCheckBox;
  615.     DEditAdjustIncrement: TDEdit;
  616.     DLabelAdjustIncrement: TDLabel;
  617.     DEditHumHPPercent1: TDEdit;
  618.     DCheckBoxHumHP1: TDCheckBox;
  619.     DEditHumHPTime1: TDEdit;
  620.     DCheckBoxHumMP1: TDCheckBox;
  621.     DEditHumMPPercent1: TDEdit;
  622.     DEditHumMPTime1: TDEdit;
  623.     DLabelHumHP1: TDLabel;
  624.     DLabelHumMP1: TDLabel;
  625.     DLabelHeroLogOutTime: TDLabel;
  626.     DEditHeroLogOutTime: TDEdit;
  627.     DEditHeroLogOutHP: TDEdit;
  628.     DLabelHeroLogOutHP: TDLabel;
  629.     DCheckBoxHeroLogOut: TDCheckBox;
  630.     DLabelHeroLogOut: TDLabel;
  631.     DComboboxHumHP1: TDCombobox;
  632.     DMenuHumItem: TDPopupMenu;
  633.     DComboboxHumMP1: TDCombobox;
  634.     DCheckBoxHumHP2: TDCheckBox;
  635.     DCheckBoxHumMP2: TDCheckBox;
  636.     DEditHumHPPercent2: TDEdit;
  637.     DEditHumMPPercent2: TDEdit;
  638.     DComboboxHumHP2: TDCombobox;
  639.     DComboboxHumMP2: TDCombobox;
  640.     DEditHumHPTime2: TDEdit;
  641.     DEditHumMPTime2: TDEdit;
  642.     DLabelHumHP2: TDLabel;
  643.     DLabelHumMP2: TDLabel;
  644.     DCheckBoxHeroHP2: TDCheckBox;
  645.     DCheckBoxHeroMP2: TDCheckBox;
  646.     DEditHeroHPPercent2: TDEdit;
  647.     DEditHeroMPPercent2: TDEdit;
  648.     DComboboxHeroHP2: TDCombobox;
  649.     DComboboxHeroMP2: TDCombobox;
  650.     DEditHeroHPTime2: TDEdit;
  651.     DEditHeroMPTime2: TDEdit;
  652.     DLabelHeroHP2: TDLabel;
  653.     DLabelHeroMP2: TDLabel;
  654.     DLabelHeroMP1: TDLabel;
  655.     DLabelHeroHP1: TDLabel;
  656.     DEditHeroHPTime1: TDEdit;
  657.     DEditHeroMPTime1: TDEdit;
  658.     DComboboxHeroHP1: TDCombobox;
  659.     DComboboxHeroMP1: TDCombobox;
  660.     DEditHeroHPPercent1: TDEdit;
  661.     DEditHeroMPPercent1: TDEdit;
  662.     DCheckBoxHeroHP1: TDCheckBox;
  663.     DCheckBoxHeroMP1: TDCheckBox;
  664.     DMenuHeroItem: TDPopupMenu;
  665.     DSPage1: TDButton;
  666.     DSPage2: TDButton;
  667.     DSPage3: TDButton;
  668.     DSPage4: TDButton;

  669.     procedure DBottomInRealArea(Sender: TObject; X, Y: Integer;
  670.       var IsRealArea: Boolean);
  671.     procedure DBottomDirectPaint(Sender: TObject;
  672.       dsurface: TTexture);
  673.     procedure DMyStateDirectPaint(Sender: TObject;
  674.       dsurface: TTexture);
  675.     procedure DSoundClick();
  676.     procedure DItemBagDirectPaint(Sender: TObject;
  677.       dsurface: TTexture);
  678.     procedure DStateWinDirectPaint(Sender: TObject;
  679.       dsurface: TTexture);
  680.     procedure FormCreate(Sender: TObject);
  681.     procedure DPrevStateDirectPaint(Sender: TObject;
  682.       dsurface: TTexture);
  683.     procedure DLoginNewDirectPaint(Sender: TObject;
  684.       dsurface: TTexture);
  685.     procedure DscSelect1DirectPaint(Sender: TObject;
  686.       dsurface: TTexture);
  687.     procedure DccCloseDirectPaint(Sender: TObject;
  688.       dsurface: TTexture);
  689.     procedure DItemGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  690.       Shift: TShiftState);
  691.     procedure DItemGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  692.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  693.     procedure DItemGridDblClick(Sender: TObject);
  694.     procedure DMsgDlgOkDirectPaint(Sender: TObject;
  695.       dsurface: TTexture);
  696.     procedure DMsgDlgDirectPaint(Sender: TObject;
  697.       dsurface: TTexture);
  698.     procedure DMsgDlgKeyDown(Sender: TObject; var Key: Word;
  699.       Shift: TShiftState);
  700.     procedure DCloseBagDirectPaint(Sender: TObject;
  701.       dsurface: TTexture);
  702.     procedure DBackgroundBackgroundClick(Sender: TObject);
  703.     procedure DItemGridGridMouseMove(Sender: TObject; ACol, ARow: Integer;
  704.       Shift: TShiftState);
  705.     procedure DBelt1DirectPaint(Sender: TObject;
  706.       dsurface: TTexture);
  707.     procedure FormDestroy(Sender: TObject);
  708.     procedure DBelt1DblClick(Sender: TObject);
  709.     procedure DLoginCloseClick(Sender: TObject; X, Y: Integer);
  710.     procedure DLoginOkClick(Sender: TObject; X, Y: Integer);
  711.     procedure DLoginNewClick(Sender: TObject; X, Y: Integer);
  712.     procedure DLoginChgPwClick(Sender: TObject; X, Y: Integer);
  713.     procedure DNewAccountOkClick(Sender: TObject; X, Y: Integer);
  714.     procedure DNewAccountCloseClick(Sender: TObject; X, Y: Integer);
  715.     procedure DccCloseClick(Sender: TObject; X, Y: Integer);
  716.     procedure DChgpwOkClick(Sender: TObject; X, Y: Integer);
  717.     procedure DscSelect1Click(Sender: TObject; X, Y: Integer);
  718.     procedure DCloseStateClick(Sender: TObject; X, Y: Integer);
  719.     procedure DPrevStateClick(Sender: TObject; X, Y: Integer);
  720.     procedure DNextStateClick(Sender: TObject; X, Y: Integer);
  721.     procedure DSWWeaponClick(Sender: TObject; X, Y: Integer);
  722.     procedure DMsgDlgOkClick(Sender: TObject; X, Y: Integer);
  723.     procedure DCloseBagClick(Sender: TObject; X, Y: Integer);
  724.     procedure DBelt1Click(Sender: TObject; X, Y: Integer);
  725.     procedure DMyStateClick(Sender: TObject; X, Y: Integer);
  726.     procedure DStateWinClick(Sender: TObject; X, Y: Integer);
  727.     procedure DSWWeaponMouseMove(Sender: TObject; Shift: TShiftState; X,
  728.       Y: Integer);
  729.     procedure DBelt1MouseMove(Sender: TObject; Shift: TShiftState; X,
  730.       Y: Integer);
  731.     procedure DMerchantDlgDirectPaint(Sender: TObject;
  732.       dsurface: TTexture);
  733.     procedure DMerchantDlgCloseClick(Sender: TObject; X, Y: Integer);
  734.     procedure DMerchantDlgMouseUp(Sender: TObject; Button: TMouseButton;
  735.       Shift: TShiftState; X, Y: Integer);
  736.     procedure DMenuCloseClick(Sender: TObject; X, Y: Integer);
  737.     procedure DMenuDlgDirectPaint(Sender: TObject;
  738.       dsurface: TTexture);
  739.     procedure DMenuDlgClick(Sender: TObject; X, Y: Integer);
  740.     procedure DSellDlgDirectPaint(Sender: TObject;
  741.       dsurface: TTexture);
  742.     procedure DSellDlgCloseClick(Sender: TObject; X, Y: Integer);
  743.     procedure DSellDlgSpotClick(Sender: TObject; X, Y: Integer);
  744.     procedure DSellDlgSpotDirectPaint(Sender: TObject;
  745.       dsurface: TTexture);
  746.     procedure DSellDlgSpotMouseMove(Sender: TObject; Shift: TShiftState; X,
  747.       Y: Integer);
  748.     procedure DSellDlgOkClick(Sender: TObject; X, Y: Integer);
  749.     procedure DMenuBuyClick(Sender: TObject; X, Y: Integer);
  750.     procedure DMenuPrevClick(Sender: TObject; X, Y: Integer);
  751.     procedure DMenuNextClick(Sender: TObject; X, Y: Integer);
  752.     procedure DGoldClick(Sender: TObject; X, Y: Integer);
  753.     procedure DSWLightDirectPaint(Sender: TObject;
  754.       dsurface: TTexture);
  755.     procedure DBackgroundMouseDown(Sender: TObject; Button: TMouseButton;
  756.       Shift: TShiftState; X, Y: Integer);
  757.     procedure DStateWinMouseMove(Sender: TObject; Shift: TShiftState; X,
  758.       Y: Integer);
  759.     procedure DLoginNewClickSound(Sender: TObject;
  760.       Clicksound: TClickSound);
  761.     procedure DStMag1DirectPaint(Sender: TObject;
  762.       dsurface: TTexture);
  763.     procedure DStMag1Click(Sender: TObject; X, Y: Integer);
  764.     procedure DKsIconDirectPaint(Sender: TObject;
  765.       dsurface: TTexture);
  766.     procedure DKsF1DirectPaint(Sender: TObject;
  767.       dsurface: TTexture);
  768.     procedure DKsOkClick(Sender: TObject; X, Y: Integer);
  769.     procedure DKsF1Click(Sender: TObject; X, Y: Integer);
  770.     procedure DKeySelDlgDirectPaint(Sender: TObject;
  771.       dsurface: TTexture);
  772.     procedure DBotGroupDirectPaint(Sender: TObject;
  773.       dsurface: TTexture);
  774.     procedure DGrpAllowGroupDirectPaint(Sender: TObject;
  775.       dsurface: TTexture);
  776.     procedure DGrpDlgCloseClick(Sender: TObject; X, Y: Integer);
  777.     procedure DBotGroupClick(Sender: TObject; X, Y: Integer);
  778.     procedure DGrpAllowGroupClick(Sender: TObject; X, Y: Integer);
  779.     procedure DGrpCreateClick(Sender: TObject; X, Y: Integer);
  780.     procedure DGroupDlgDirectPaint(Sender: TObject;
  781.       dsurface: TTexture);
  782.     procedure DGrpAddMemClick(Sender: TObject; X, Y: Integer);
  783.     procedure DGrpDelMemClick(Sender: TObject; X, Y: Integer);
  784.     procedure DBotLogoutClick(Sender: TObject; X, Y: Integer);
  785.     procedure DBotExitClick(Sender: TObject; X, Y: Integer);
  786.     procedure DStPageUpClick(Sender: TObject; X, Y: Integer);
  787.     procedure DBottomMouseDown(Sender: TObject; Button: TMouseButton;
  788.       Shift: TShiftState; X, Y: Integer);
  789.     procedure DDealOkClick(Sender: TObject; X, Y: Integer);
  790.     procedure DDealCloseClick(Sender: TObject; X, Y: Integer);
  791.     procedure DBotTradeClick(Sender: TObject; X, Y: Integer);
  792.     procedure DDealRemoteDlgDirectPaint(Sender: TObject;
  793.       dsurface: TTexture);
  794.     procedure DDealDlgDirectPaint(Sender: TObject;
  795.       dsurface: TTexture);
  796.     procedure DDGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  797.       Shift: TShiftState);
  798.     procedure DDGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  799.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  800.     procedure DDGridGridMouseMove(Sender: TObject; ACol, ARow: Integer;
  801.       Shift: TShiftState);
  802.     procedure DDRGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  803.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  804.     procedure DDRGridGridMouseMove(Sender: TObject; ACol, ARow: Integer;
  805.       Shift: TShiftState);
  806.     procedure DDGoldClick(Sender: TObject; X, Y: Integer);
  807.     procedure DSServer1Click(Sender: TObject; X, Y: Integer);
  808.     procedure DSSrvCloseClick(Sender: TObject; X, Y: Integer);
  809.     procedure DBotMiniMapClick(Sender: TObject; X, Y: Integer);
  810.     procedure DMenuDlgMouseMove(Sender: TObject; Shift: TShiftState; X,
  811.       Y: Integer);
  812.     procedure DUserState1DirectPaint(Sender: TObject;
  813.       dsurface: TTexture);
  814.     procedure DUserState1MouseMove(Sender: TObject; Shift: TShiftState; X,
  815.       Y: Integer);
  816.     procedure DWeaponUS1MouseMove(Sender: TObject; Shift: TShiftState; X,
  817.       Y: Integer);
  818.     procedure DCloseUS1Click(Sender: TObject; X, Y: Integer);
  819.     procedure DNecklaceUS1DirectPaint(Sender: TObject;
  820.       dsurface: TTexture);
  821.     procedure DBotGuildClick(Sender: TObject; X, Y: Integer);
  822.     procedure DGuildDlgDirectPaint(Sender: TObject;
  823.       dsurface: TTexture);
  824.     procedure DGDUpClick(Sender: TObject; X, Y: Integer);
  825.     procedure DGDDownClick(Sender: TObject; X, Y: Integer);
  826.     procedure DGDCloseClick(Sender: TObject; X, Y: Integer);
  827.     procedure DGDHomeClick(Sender: TObject; X, Y: Integer);
  828.     procedure DGDListClick(Sender: TObject; X, Y: Integer);
  829.     procedure DGDAddMemClick(Sender: TObject; X, Y: Integer);
  830.     procedure DGDDelMemClick(Sender: TObject; X, Y: Integer);
  831.     procedure DGDEditNoticeClick(Sender: TObject; X, Y: Integer);
  832.     procedure DGDEditGradeClick(Sender: TObject; X, Y: Integer);
  833.     procedure DGECloseClick(Sender: TObject; X, Y: Integer);
  834.     procedure DGEOkClick(Sender: TObject; X, Y: Integer);
  835.     procedure DGuildEditNoticeDirectPaint(Sender: TObject;
  836.       dsurface: TTexture);
  837.     procedure DGDChatClick(Sender: TObject; X, Y: Integer);
  838.     procedure DGoldDirectPaint(Sender: TObject;
  839.       dsurface: TTexture);
  840.     procedure DNewAccountDirectPaint(Sender: TObject;
  841.       dsurface: TTexture);
  842.     procedure DAdjustAbilCloseClick(Sender: TObject; X, Y: Integer);
  843.     procedure DAdjustAbilityDirectPaint(Sender: TObject;
  844.       dsurface: TTexture);
  845.     procedure DBotPlusAbilClick(Sender: TObject; X, Y: Integer);
  846.     procedure DPlusDCClick(Sender: TObject; X, Y: Integer);
  847.     procedure DMinusDCClick(Sender: TObject; X, Y: Integer);
  848.     procedure DAdjustAbilOkClick(Sender: TObject; X, Y: Integer);
  849.     procedure DBotPlusAbilDirectPaint(Sender: TObject;
  850.       dsurface: TTexture);
  851.     procedure DAdjustAbilityMouseMove(Sender: TObject; Shift: TShiftState;
  852.       X, Y: Integer);
  853.     procedure DUserState1MouseDown(Sender: TObject; Button: TMouseButton;
  854.       Shift: TShiftState; X, Y: Integer);
  855.     procedure DEngServer1Click(Sender: TObject; X, Y: Integer);
  856.     procedure DGDAllyClick(Sender: TObject; X, Y: Integer);
  857.     procedure DGDBreakAllyClick(Sender: TObject; X, Y: Integer);
  858.     procedure DSelServerDlgDirectPaint(Sender: TObject;
  859.       dsurface: TTexture);
  860.     procedure DBotMouseMove(Sender: TObject; Shift: TShiftState; X,
  861.       Y: Integer);
  862.     procedure DChgGamePwdCloseClick(Sender: TObject; X, Y: Integer);
  863.     procedure DChgGamePwdDirectPaint(Sender: TObject;
  864.       dsurface: TTexture);
  865.     procedure DButtonShopDirectPaint(Sender: TObject;
  866.       dsurface: TTexture);
  867.     procedure DShopDirectPaint(Sender: TObject;
  868.       dsurface: TTexture);
  869.     procedure DJewelryDirectPaint(Sender: TObject;
  870.       dsurface: TTexture);
  871.     procedure DShopExitClick(Sender: TObject; X, Y: Integer);
  872.     procedure DJewelryClick(Sender: TObject; X, Y: Integer);
  873.     procedure DMedicineClick(Sender: TObject; X, Y: Integer);
  874.     procedure DEnhanceClick(Sender: TObject; X, Y: Integer);
  875.     procedure DfriendClick(Sender: TObject; X, Y: Integer);
  876.     procedure DLimitClick(Sender: TObject; X, Y: Integer);
  877.     procedure DBottomMouseMove(Sender: TObject; Shift: TShiftState; X,
  878.       Y: Integer);
  879.     procedure DShopIntroduceDirectPaint(Sender: TObject;
  880.       dsurface: TTexture);
  881.     procedure DPrevShopClick(Sender: TObject; X, Y: Integer);
  882.     procedure DNextShopClick(Sender: TObject; X, Y: Integer);
  883.     procedure DShopBuyClick(Sender: TObject; X, Y: Integer);
  884.     procedure DButtonReCallHeroDirectPaint(Sender: TObject;
  885.       dsurface: TTexture);
  886.     procedure DButFunc1DirectPaint(Sender: TObject;
  887.       dsurface: TTexture);
  888.     procedure DButFunc1Click(Sender: TObject; X, Y: Integer);

  889.     procedure DHeroHealthStateWinDirectPaint(Sender: TObject;
  890.       dsurface: TTexture);
  891.     procedure DHeroStateWinDirectPaint(Sender: TObject;
  892.       dsurface: TTexture);
  893.     procedure DCloseHeroStateDirectPaint(Sender: TObject;
  894.       dsurface: TTexture);
  895.     procedure DHeroSWLightDirectPaint(Sender: TObject;
  896.       dsurface: TTexture);
  897.     procedure DHeroSWWeaponMouseMove(Sender: TObject; Shift: TShiftState;
  898.       X, Y: Integer);
  899.     procedure DHeroSWWeaponClick(Sender: TObject; X, Y: Integer);
  900.     procedure DHeroItemBagDirectPaint(Sender: TObject;
  901.       dsurface: TTexture);
  902.     procedure DCloseHeroBagClick(Sender: TObject; X, Y: Integer);
  903.     procedure DHeroItemGridDblClick(Sender: TObject);
  904.     procedure DHeroItemGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  905.       Shift: TShiftState);
  906.     procedure DHeroItemGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  907.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  908.     procedure DHeroItemGridGridMouseMove(Sender: TObject; ACol,
  909.       ARow: Integer; Shift: TShiftState);
  910.     procedure DButtonReCallHeroClick(Sender: TObject; X, Y: Integer);
  911.     procedure DButtonHeroStateClick(Sender: TObject; X, Y: Integer);
  912.     procedure DButtonHeroBagClick(Sender: TObject; X, Y: Integer);
  913.     procedure DCloseHeroStateClick(Sender: TObject; X, Y: Integer);
  914.     procedure DCloseHeroBagDirectPaint(Sender: TObject;
  915.       dsurface: TTexture);
  916.     procedure DPrevHeroStateClick(Sender: TObject; X, Y: Integer);
  917.     procedure DNextHeroStateClick(Sender: TObject; X, Y: Integer);
  918.     procedure DHeroStMag1DirectPaint(Sender: TObject;
  919.       dsurface: TTexture);
  920.     procedure DHeroStPageUpClick(Sender: TObject; X, Y: Integer);
  921.     procedure DHeroStateWinMouseMove(Sender: TObject; Shift: TShiftState;
  922.       X, Y: Integer);
  923.     procedure DHeroHealthStateWinClick(Sender: TObject; X, Y: Integer);
  924.     procedure DFirDragonDirectPaint(Sender: TObject;
  925.       dsurface: TTexture);
  926.     procedure DSearchSellOffDirectPaint(Sender: TObject;
  927.       dsurface: TTexture);
  928.     procedure DUserSellOffDirectPaint(Sender: TObject;
  929.       dsurface: TTexture);
  930.     procedure DPrevSellDirectPaint(Sender: TObject;
  931.       dsurface: TTexture);
  932.     procedure DBuySellItemDirectPaint(Sender: TObject;
  933.       dsurface: TTexture);
  934.     procedure DCloseSellClick(Sender: TObject; X, Y: Integer);
  935.     procedure DUserSellOffClick(Sender: TObject; X, Y: Integer);
  936.     procedure DPrevSellClick(Sender: TObject; X, Y: Integer);
  937.     procedure DRefreshSellClick(Sender: TObject; X, Y: Integer);
  938.     procedure DNextSellClick(Sender: TObject; X, Y: Integer);
  939.     procedure DSearchSellOffClick(Sender: TObject; X, Y: Integer);
  940.     procedure DBuySellItemClick(Sender: TObject; X, Y: Integer);
  941.     procedure DPrevSellMouseMove(Sender: TObject; Shift: TShiftState; X,
  942.       Y: Integer);
  943.     procedure DUserSellOffMouseDown(Sender: TObject; Button: TMouseButton;
  944.       Shift: TShiftState; X, Y: Integer);
  945.     procedure DBoxItemGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  946.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  947.     procedure DBoxItemsDirectPaint(Sender: TObject;
  948.       dsurface: TTexture);
  949.     procedure DItemBoxDirectPaint(Sender: TObject;
  950.       dsurface: TTexture);
  951.     procedure DBoxItemGridDblClick(Sender: TObject);
  952.     procedure DBoxItemGridGridMouseMove(Sender: TObject; ACol,
  953.       ARow: Integer; Shift: TShiftState);
  954.     procedure DOnHouserClick(Sender: TObject; X, Y: Integer);
  955.     procedure DHelpClick(Sender: TObject; X, Y: Integer);
  956.     procedure DBoxItemsMouseMove(Sender: TObject; Shift: TShiftState; X,
  957.       Y: Integer);
  958.     procedure DUserSellOffMouseMove(Sender: TObject; Shift: TShiftState; X,
  959.       Y: Integer);
  960.     procedure DBookCloseDirectPaint(Sender: TObject;
  961.       dsurface: TTexture);
  962.     procedure DBookPageDirectPaint(Sender: TObject;
  963.       dsurface: TTexture);
  964.     procedure DBookPrevPageClick(Sender: TObject; X, Y: Integer);
  965.     procedure DBookNextPageClick(Sender: TObject; X, Y: Integer);
  966.     procedure DBookNextPageDirectPaint(Sender: TObject;
  967.       dsurface: TTexture);
  968.     procedure DBookDirectPaint(Sender: TObject;
  969.       dsurface: TTexture);
  970.     procedure DBookCloseClick(Sender: TObject; X, Y: Integer);
  971.     procedure DFindOKDirectPaint(Sender: TObject;
  972.       dsurface: TTexture);
  973.     procedure DFindChrCloseClick(Sender: TObject; X, Y: Integer);
  974.     procedure DFindChrClick(Sender: TObject; X, Y: Integer);
  975.     procedure DFindChrDirectPaint(Sender: TObject;
  976.       dsurface: TTexture);
  977.     procedure DFindOKClick(Sender: TObject; X, Y: Integer);
  978.     procedure DBookNextPageInRealArea(Sender: TObject; X, Y: Integer;
  979.       var IsRealArea: Boolean);
  980.     procedure DOpenUpgradeClick(Sender: TObject; X, Y: Integer);
  981.     procedure DCloseUpgradeClick(Sender: TObject; X, Y: Integer);
  982.     procedure DUpgradeItem1MouseMove(Sender: TObject; Shift: TShiftState;
  983.       X, Y: Integer);
  984.     procedure DUpgradeItem1Click(Sender: TObject; X, Y: Integer);
  985.     procedure DUpgradeItem1DirectPaint(Sender: TObject;
  986.       dsurface: TTexture);
  987.     procedure DUpgradeMouseMove(Sender: TObject; Shift: TShiftState; X,
  988.       Y: Integer);
  989.     procedure DItemBagMouseMove(Sender: TObject; Shift: TShiftState; X,
  990.       Y: Integer);
  991.     procedure DOpenUpgradeMouseMove(Sender: TObject; Shift: TShiftState; X,
  992.       Y: Integer);
  993.     procedure DStartUpgradeClick(Sender: TObject; X, Y: Integer);
  994.     procedure DStartUpgradeMouseMove(Sender: TObject; Shift: TShiftState;
  995.       X, Y: Integer);
  996.     procedure DButtonDuelClick(Sender: TObject; X, Y: Integer);
  997.     procedure DDRDuelGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  998.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  999.     procedure DDDuelGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  1000.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  1001.     procedure DWDuelDirectPaint(Sender: TObject;
  1002.       dsurface: TTexture);
  1003.     procedure DDRDuelGridGridMouseMove(Sender: TObject; ACol, ARow: Integer;
  1004.       Shift: TShiftState);
  1005.     procedure DDDuelGridGridMouseMove(Sender: TObject; ACol, ARow: Integer;
  1006.       Shift: TShiftState);
  1007.     procedure DDDuelGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  1008.       Shift: TShiftState);
  1009.     procedure DDDuelGoldClick(Sender: TObject; X, Y: Integer);
  1010.     procedure DDuelCloseClick(Sender: TObject; X, Y: Integer);
  1011.     procedure DWDuelMouseMove(Sender: TObject; Shift: TShiftState; X,
  1012.       Y: Integer);
  1013.     procedure DItemBoxDblClick(Sender: TObject);
  1014.     procedure DItemBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
  1015.       Y: Integer);
  1016.     procedure DGetBoxItemFlashDirectPaint(Sender: TObject;
  1017.       dsurface: TTexture);
  1018.     procedure DHeroItemBagMouseMove(Sender: TObject; Shift: TShiftState; X,
  1019.       Y: Integer);

  1020.     procedure DShopItemGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  1021.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  1022.     procedure DSuperShopItemGridGridPaint(Sender: TObject; ACol,
  1023.       ARow: Integer; Rect: TRect; State: TGridDrawState;
  1024.       dsurface: TTexture);
  1025.     procedure DShopItemGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  1026.       Shift: TShiftState);
  1027.     procedure DSuperShopItemGridGridSelect(Sender: TObject; ACol,
  1028.       ARow: Integer; Shift: TShiftState);
  1029.     procedure DShopItemGridGridMouseMove(Sender: TObject; ACol,
  1030.       ARow: Integer; Shift: TShiftState);
  1031.     procedure DHumManSortMouseMove(Sender: TObject; Shift: TShiftState; X,
  1032.       Y: Integer);
  1033.     procedure DShopMouseMove(Sender: TObject; Shift: TShiftState; X,
  1034.       Y: Integer);
  1035.     procedure DMiniMapDirectPaint(Sender: TObject;
  1036.       dsurface: TTexture);
  1037.     procedure DMiniMapMouseMove(Sender: TObject; Shift: TShiftState; X,
  1038.       Y: Integer);
  1039.     procedure DHeroHealthStateWinMouseMove(Sender: TObject;
  1040.       Shift: TShiftState; X, Y: Integer);
  1041.     procedure DMiniMapMouseDown(Sender: TObject; Button: TMouseButton;
  1042.       Shift: TShiftState; X, Y: Integer);
  1043.     procedure DMapTitleDirectPaint(Sender: TObject;
  1044.       dsurface: TTexture);
  1045.     procedure DButtonOption1Click(Sender: TObject; X, Y: Integer);
  1046.     procedure DEdChatClick(Sender: TObject; X, Y: Integer);
  1047.     procedure DButtonOption1MouseMove(Sender: TObject; Shift: TShiftState;
  1048.       X, Y: Integer);
  1049.     procedure DButtonOption2Click(Sender: TObject; X, Y: Integer);
  1050.     procedure DPlayToolClick(Sender: TObject; X, Y: Integer);
  1051.     procedure DCategorizeSysClick(Sender: TObject; X, Y: Integer);
  1052.     procedure DCategorizeSysDirectPaint(Sender: TObject;
  1053.       dsurface: TTexture);
  1054.     procedure DShowChatClick(Sender: TObject; X, Y: Integer);
  1055.     procedure DEdChatDirectPaint(Sender: TObject;
  1056.       dsurface: TTexture);
  1057.     procedure DEdChatInRealArea(Sender: TObject; X, Y: Integer;
  1058.       var IsRealArea: Boolean);
  1059.     procedure DShowChatMouseMove(Sender: TObject; Shift: TShiftState; X,
  1060.       Y: Integer);
  1061.     procedure DEdChatMouseMove(Sender: TObject; Shift: TShiftState; X,
  1062.       Y: Integer);
  1063.     procedure DListBoxMouseDown(Sender: TObject; Button: TMouseButton;
  1064.       Shift: TShiftState; X, Y: Integer);

  1065.     procedure DButtonShopClick(Sender: TObject; X, Y: Integer);
  1066.     procedure DDuelOKClick(Sender: TObject; X, Y: Integer);
  1067.     procedure DDDuelGoldMouseMove(Sender: TObject; Shift: TShiftState; X,
  1068.       Y: Integer);
  1069.     procedure EdSearchKeyPress(Sender: TObject; var Key: Char);
  1070.     procedure DStoreOpenDirectPaint(Sender: TObject;
  1071.       dsurface: TTexture);
  1072.     procedure DStoreCloseClick(Sender: TObject; X, Y: Integer);
  1073.     procedure DStoreMsgDlgOkClick(Sender: TObject; X, Y: Integer);
  1074.     procedure DStoreMsgDlgDirectPaint(Sender: TObject;
  1075.       dsurface: TTexture);
  1076.     procedure EdStoreDlgEditKeyPress(Sender: TObject; var Key: Char);
  1077.     procedure DStoreDlgClick(Sender: TObject; X, Y: Integer);
  1078.     procedure DUserStoreClick(Sender: TObject; X, Y: Integer);
  1079.     procedure DUserStoreCloseClick(Sender: TObject; X, Y: Integer);
  1080.     procedure DGStoreGridPaint(Sender: TObject; ACol, ARow: Integer;
  1081.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  1082.     procedure DGStoreGridMouseMove(Sender: TObject; ACol, ARow: Integer;
  1083.       Shift: TShiftState);
  1084.     procedure DGStoreGridSelect(Sender: TObject; ACol, ARow: Integer;
  1085.       Shift: TShiftState);
  1086.     procedure DGUserStoreGridMouseMove(Sender: TObject; ACol,
  1087.       ARow: Integer; Shift: TShiftState);
  1088.     procedure DGUserStoreGridPaint(Sender: TObject; ACol, ARow: Integer;
  1089.       Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  1090.     procedure DStoreDlgMouseMove(Sender: TObject; Shift: TShiftState; X,
  1091.       Y: Integer);
  1092.     procedure DUserStoreMouseMove(Sender: TObject; Shift: TShiftState; X,
  1093.       Y: Integer);
  1094.     procedure DStoreDlgDirectPaint(Sender: TObject;
  1095.       dsurface: TTexture);
  1096.     procedure DUserStoreDirectPaint(Sender: TObject;
  1097.       dsurface: TTexture);
  1098.     procedure DStoreOpenClick(Sender: TObject; X, Y: Integer);
  1099.     procedure DStoreCancelClick(Sender: TObject; X, Y: Integer);
  1100.     procedure DGUserStoreGridSelect(Sender: TObject; ACol, ARow: Integer;
  1101.       Shift: TShiftState);
  1102.     procedure DUserStoreBuyClick(Sender: TObject; X, Y: Integer);
  1103.     procedure DStoreMsgDlgClick(Sender: TObject; X, Y: Integer);
  1104.     procedure DMainMenuClick(Sender: TObject; X, Y: Integer);
  1105.     procedure EdIdKeyPress(Sender: TObject; var Key: Char);
  1106.     procedure EdPasswdKeyPress(Sender: TObject; var Key: Char);
  1107.     procedure EdChatKeyPress(Sender: TObject; var Key: Char);
  1108.     procedure EdDlgEditKeyPress(Sender: TObject; var Key: Char);
  1109.     procedure EdChatMouseMove(Sender: TObject; Shift: TShiftState; X,
  1110.       Y: Integer);
  1111.     procedure DGetBoxItemFlashMouseMove(Sender: TObject;
  1112.       Shift: TShiftState; X, Y: Integer);
  1113.     procedure DGetBoxItemMouseMove(Sender: TObject; Shift: TShiftState; X,
  1114.       Y: Integer);
  1115.     procedure DGetBoxItemFlashClick(Sender: TObject; X, Y: Integer);
  1116.     procedure DWRandomCodeDirectPaint(Sender: TObject;
  1117.       dsurface: TTexture);
  1118.     procedure DBRandomCodeOKClick(Sender: TObject; X, Y: Integer);
  1119.     procedure DBRandomCodeChgClick(Sender: TObject; X, Y: Integer);
  1120.     procedure DSWWeaponDblClick(Sender: TObject);
  1121.     procedure EdChatMouseDown(Sender: TObject; Button: TMouseButton;
  1122.       Shift: TShiftState; X, Y: Integer);
  1123.     procedure DMerchantDlgInRealArea(Sender: TObject; X, Y: Integer;
  1124.       var IsRealArea: Boolean);
  1125.     procedure DAdjustAbilOkDirectPaint(Sender: TObject;
  1126.       dsurface: TTexture);
  1127.     procedure DPlusSCDirectPaint(Sender: TObject;
  1128.       dsurface: TTexture);
  1129.     procedure DMinusSCDirectPaint(Sender: TObject;
  1130.       dsurface: TTexture);
  1131.     procedure DMerchantDlgMouseMove(Sender: TObject; Shift: TShiftState; X,
  1132.       Y: Integer);
  1133.     procedure DBotCharRankingDirectPaint(Sender: TObject;
  1134.       dsurface: TTexture);
  1135.     procedure DRankingDlgDirectPaint(Sender: TObject;
  1136.       dsurface: TTexture);
  1137.     procedure DHeroStMag1Click(Sender: TObject; X, Y: Integer);
  1138.     procedure DBotActorRankingDirectPaint(Sender: TObject;
  1139.       dsurface: TTexture);
  1140.     procedure DRankingDlgMouseDown(Sender: TObject; Button: TMouseButton;
  1141.       Shift: TShiftState; X, Y: Integer);
  1142.     procedure DBotCharRankingClick(Sender: TObject; X, Y: Integer);
  1143.     procedure DBotActorRankingClick(Sender: TObject; X, Y: Integer);
  1144.     procedure DBotRankingCloseClick(Sender: TObject; X, Y: Integer);
  1145.     procedure DBotRankingHomeClick(Sender: TObject; X, Y: Integer);
  1146.     procedure DBotRankingUpClick(Sender: TObject; X, Y: Integer);
  1147.     procedure DBotRankingDownClick(Sender: TObject; X, Y: Integer);
  1148.     procedure DBotRankingLastClick(Sender: TObject; X, Y: Integer);
  1149.     procedure DBotRankingSelfClick(Sender: TObject; X, Y: Integer);
  1150.     procedure DRankingClick(Sender: TObject; X, Y: Integer);
  1151.     procedure DScrollScrollDirectPaint(Sender: TObject; dsurface: TTexture);
  1152.     procedure DScrollCenterScrollDirectPaint(Sender: TObject; dsurface: TTexture);


  1153.     procedure DMemoChatClick(Sender: TObject; X, Y: Integer);
  1154.     procedure DChatDlgClick(Sender: TObject; X, Y: Integer);
  1155.     procedure DMemoChatMouseDown(Sender: TObject; Button: TMouseButton;
  1156.       Shift: TShiftState; X, Y: Integer);
  1157.     procedure DButtonTab1DirectPaint(Sender: TObject; dsurface: TTexture);
  1158.     procedure DButtonTab1Click(Sender: TObject; X, Y: Integer);
  1159.     procedure DEditSearchItemDirectPaint(Sender: TObject;
  1160.       dsurface: TTexture);
  1161.     procedure DConfigDlgCloseClick(Sender: TObject; X, Y: Integer);
  1162.     procedure DBookPageInRealArea(Sender: TObject; X, Y: Integer;
  1163.       var IsRealArea: Boolean);
  1164.     procedure DLabelHeroCallHeroDirectPaint(Sender: TObject;
  1165.       dsurface: TTexture);
  1166.     procedure DLabelHeroCallHeroKeyDown(Sender: TObject; var Key: Word;
  1167.       Shift: TShiftState);
  1168.     procedure DLabelHeroCallHeroMouseDown(Sender: TObject;
  1169.       Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  1170.     procedure DMemoChatMouseMove(Sender: TObject; Shift: TShiftState; X,
  1171.       Y: Integer);
  1172.     procedure DMemoChatDirectPaint(Sender: TObject; dsurface: TTexture);
  1173.     procedure DComboboxItemTypeChange(Sender: TObject);
  1174.     procedure DLabelOptionClick(Sender: TObject; X, Y: Integer);
  1175.     procedure DCheckBoxShowActorLableClick(Sender: TObject; X, Y: Integer);
  1176.     procedure DEditSpecialHPChange(Sender: TObject);
  1177.     procedure DComboboxBookIndexChange(Sender: TObject);
  1178.     procedure DComboboxAutoUseMagicChange(Sender: TObject);
  1179.     procedure DComboboxPoisonChange(Sender: TObject);
  1180.     procedure DConfigDlgMouseMove(Sender: TObject; Shift: TShiftState; X,
  1181.       Y: Integer);
  1182.     procedure DEdChatMouseDown(Sender: TObject; Button: TMouseButton;
  1183.       Shift: TShiftState; X, Y: Integer);
  1184.     procedure DConfigDlgKeyDown(Sender: TObject; var Key: Word;
  1185.       Shift: TShiftState);
  1186.     procedure DCheckBoxMusicClick(Sender: TObject; X, Y: Integer);
  1187.     procedure DscStartInRealArea(Sender: TObject; X, Y: Integer;
  1188.       var IsRealArea: Boolean);
  1189.     procedure DEditSearchItemChange(Sender: TObject);
  1190.     procedure DChatDlgDirectPaint(Sender: TObject; dsurface: TTexture);
  1191.     procedure EdSearchDirectPaint(Sender: TObject; dsurface: TTexture);
  1192.     procedure DItemLockClick(Sender: TObject; X, Y: Integer);
  1193.     procedure DMerchantBigDlgCloseClick(Sender: TObject; X, Y: Integer);
  1194.     procedure DSerieMagic1DirectPaint(Sender: TObject; dsurface: TTexture);
  1195.     procedure DSerieMagic1MouseDown(Sender: TObject; Button: TMouseButton;
  1196.       Shift: TShiftState; X, Y: Integer);
  1197.     procedure DSerieMagicMenuClick(Sender: TObject; X, Y: Integer);
  1198.     procedure DEditSerieMagicClick(Sender: TObject; X, Y: Integer);
  1199.     procedure DSerieMagic1MouseMove(Sender: TObject; Shift: TShiftState; X,
  1200.       Y: Integer);
  1201.     procedure DComboboxBookIndexPopup(Sender: TObject);
  1202.     procedure DEditRandomCodeKeyPress(Sender: TObject; var Key: Char);
  1203.     procedure DEditAdjustIncrementChange(Sender: TObject);
  1204.     procedure DComboboxHeroHP1Change(Sender: TObject);
  1205.     procedure DComboboxHeroMP1Change(Sender: TObject);
  1206.     procedure DComboboxHeroHP2Change(Sender: TObject);
  1207.     procedure DComboboxHeroMP2Change(Sender: TObject);
  1208.     procedure DComboboxHumHP1Change(Sender: TObject);
  1209.     procedure DComboboxHumMP1Change(Sender: TObject);
  1210.     procedure DComboboxHumHP2Change(Sender: TObject);
  1211.     procedure DComboboxHumMP2Change(Sender: TObject);
  1212.     procedure DSPage1MouseDown(Sender: TObject; Button: TMouseButton;
  1213.       Shift: TShiftState; X, Y: Integer);
  1214.     procedure DSPage2MouseDown(Sender: TObject; Button: TMouseButton;
  1215.       Shift: TShiftState; X, Y: Integer);
  1216.     procedure DSPage3MouseDown(Sender: TObject; Button: TMouseButton;
  1217.       Shift: TShiftState; X, Y: Integer);
  1218.     procedure DSPage4MouseDown(Sender: TObject; Button: TMouseButton;
  1219.       Shift: TShiftState; X, Y: Integer);
  1220.   private
  1221.     DlgTemp: TList;
  1222.     magcur, magtop: Integer;
  1223.     Heromagcur, Heromagtop: Integer;
  1224.     //EdDlgEdit: TEdit;
  1225.     Memo: TMemo;

  1226.     ViewDlgEdit: Boolean;
  1227.     msglx, msgly: Integer;
  1228.     MenuTop: Integer;

  1229.     MagKeyIcon, MagKeyCurKey: Integer;
  1230.     MagKeyMagName: string;
  1231.     MagicPage: Integer;

  1232.     AbilPage: Integer;

  1233.     HeroMagicPage: Integer;
  1234.     BlinkTime: LongWord;
  1235.     BlinkCount: Integer;
  1236.     GameOptionPage: Integer;

  1237.     //UseNpcLabel: Boolean;

  1238.     m_btSelectShop: Byte;

  1239.     PlayerFullScreen: Boolean;

  1240.     RankingPage: Integer;
  1241.     RankingSelectLine: Integer;

  1242.     ChatDlgLeft: Integer;
  1243.     procedure HideAllControls;
  1244.     procedure RestoreHideControls;
  1245.     procedure PageChanged;
  1246.     procedure HeroPageChanged;
  1247.     procedure DealItemReturnBag(mitem: TClientItem);
  1248.     procedure DealZeroGold;

  1249.     procedure SuperShopItemPrev;
  1250.     procedure SuperShopItemNext;

  1251.     procedure ChgShopSelButton(nType: Integer);
  1252.     procedure DuelItemReturnBag(mitem: TClientItem);

  1253.     procedure NpcLabelClick(Sender: TObject; X, Y: Integer);
  1254.     procedure CharMove(X: Integer);

  1255.     procedure RankingPageChanged(Sender: TObject);

  1256.     procedure DItemLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  1257.     procedure DItemLabelClick(Sender: TObject; X, Y: Integer);


  1258.   public
  1259.     StatePage: Integer;
  1260.     HeroStatePage: Integer;
  1261.     ShopTabPage: Integer;
  1262.     ShopPage: array[0..5] of Integer;
  1263.     ShopPageCount: Integer;
  1264.     SortStatePage: Integer;
  1265.     PlayJobSortStatePage: Integer;
  1266.     HeroJobSortStatePage: Integer;
  1267.     SortPage: Integer;
  1268.     SortPageCount: Integer;
  1269.     MsgText: string;
  1270.     DialogSize: Integer;
  1271.     {
  1272.     m_n66C:Integer;
  1273.     m_n688:Integer;
  1274.     m_n6A4:Integer;
  1275.     m_n6A8:Integer;
  1276.     }
  1277. //    m_Dicea:array[0..35] of Integer;

  1278.     m_nDiceCount: Integer;
  1279.     m_boPlayDice: Boolean;
  1280.     m_Dice: array[0..9] of TDiceInfo;

  1281.     MerchantName: string;
  1282.     MerchantFace: Integer;
  1283.     MDlgStr: string;
  1284.     MDlgPoints: TList;
  1285.     RequireAddPoints: Boolean;
  1286.     SelectMenuStr: string;
  1287.     LastestClickTime: LongWord;
  1288.     SpotDlgMode: TSpotDlgMode;

  1289.     MenuList: TList; //list of PTClientGoods
  1290.     menuindex: Integer;
  1291.     SellItemIndex: Integer;
  1292.     MoveSellItemIndex: Integer;
  1293.     CurDetailItem: string;
  1294.     MenuTopLine: Integer;
  1295.     BoDetailMenu: Boolean;
  1296.     BoStorageMenu: Boolean;
  1297.     BoNoDisplayMaxDura: Boolean;
  1298.     BoMakeDrugMenu: Boolean;
  1299.     NAHelps: TStringList;
  1300.     NewAccountTitle: string;

  1301.     DlgEditText: string;
  1302.     StoreDlgEditText: string;
  1303.     UserState1: TUserStateInfo;

  1304.     Guild: string;
  1305.     GuildFlag: string;
  1306.     GuildCommanderMode: Boolean;
  1307.     GuildStrs: TStringList;
  1308.     GuildStrs2: TStringList;
  1309.     GuildNotice: TStringList;
  1310.     GuildMembers: TStringList;
  1311.     GuildTopLine: Integer;
  1312.     GuildEditHint: string;
  1313.     GuildChats: TStringList;
  1314.     BoGuildChat: Boolean;

  1315.     HintList: TStringList;

  1316.     SelItemLabel: TDLabel;
  1317.     Initialized: Boolean;
  1318.     EdChatVisible: Boolean;
  1319.     //procedure Paint; override;

  1320.     procedure DDCheckBoxHintClick(Sender: TObject; X, Y: Integer);
  1321.     procedure DDCheckBoxPickupClick(Sender: TObject; X, Y: Integer);
  1322.     procedure DDCheckBoxShowNameClick(Sender: TObject; X, Y: Integer);

  1323.     procedure Initialize;
  1324.     procedure OpenMyStatus;
  1325.     procedure OpenUserState(UserState: TUserStateInfo);
  1326.     procedure OpenItemBag;
  1327.     procedure ViewBottomBox(Value: Boolean);
  1328.     procedure CancelItemMoving;
  1329.     procedure DropMovingItem;
  1330.     procedure OpenAdjustAbility;

  1331.     procedure ShowSelectServerDlg;
  1332.     function DMessageDlg(msgstr: string; DlgButtons: TMsgDlgButtons): TModalResult;


  1333.     procedure DNpcLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  1334.     procedure GetMerchantSayLabel(sData: string; nRecogID: Integer);
  1335.     procedure ShowMDlg(face: Integer; mname, msgstr: string);
  1336.     procedure ShowGuildDlg;
  1337.     procedure ShowGuildEditNotice;
  1338.     procedure ShowGuildEditGrade;

  1339.     procedure ResetMenuDlg;
  1340.     procedure ShowShopMenuDlg;
  1341.     procedure ShowShopSellDlg;
  1342.     procedure CloseDSellDlg;
  1343.     procedure CloseMDlg;
  1344.     procedure CloseBigMDlg;
  1345.     procedure ToggleShowGroupDlg;
  1346.     procedure OpenDealDlg;
  1347.     procedure CloseDealDlg;

  1348.     procedure OpenFriendDlg;

  1349.     procedure SoldOutGoods(itemserverindex: Integer);
  1350.     procedure DelStorageItem(itemserverindex: Integer);

  1351.     procedure GetMouseItemInfo(Actor: TActor; MouseItem: pTClientItem; var iname, line1, line2, line3: string; var useable: Boolean);

  1352.     procedure SetMagicKeyDlg(icon: Integer; magname: string; var curkey: Word);
  1353.     procedure AddGuildChat(Str: string);

  1354.     procedure OpenShopDlg;
  1355.     procedure OpenHeroHealthState;
  1356.     procedure CloseHeroAllWindows;
  1357.     procedure DOptionClick();

  1358.     procedure OpenSellOffDlg;
  1359.     procedure CloseSellOffDlg;

  1360.     procedure OpenStoreDlg;
  1361.     procedure CloseStoreDlg;

  1362.     procedure OpenUserStoreDlg;
  1363.     procedure CloseUserStoreDlg;

  1364.     procedure SetBookType(nType: Integer);
  1365.     procedure OpenDuelDlg;
  1366.     procedure CloseDuelDlg;
  1367.     procedure SetButVisible(Value: Boolean);
  1368.     procedure SetInputVisible(Value: Boolean);
  1369.     procedure SetChatVisible(Value: Boolean);

  1370.     function DStoreMessageDlg(): TModalResult;

  1371.     procedure ShowRandomDlg;
  1372.     procedure CloseRandomDlg;

  1373.     function AddMemoChat(Str: string; FColor, BColor: Integer): string;
  1374.     procedure SetConfigDlg();
  1375.   end;


  1376. var
  1377.   FrmDlg: TFrmDlg;

  1378. implementation

  1379. uses
  1380.   ClMain, MShare;

  1381. {$R *.DFM}

  1382. function GetAddPoint(AddPoint: TValue): Boolean;
  1383. begin
  1384.   Result := (AddPoint[3] > 0) or (AddPoint[4] > 0) or (AddPoint[5] > 0) or (AddPoint[6] > 0) or
  1385.     (AddPoint[7] > 0) or (AddPoint[8] > 0) or (AddPoint[9] > 0) or (AddPoint[10] > 0) or (AddPoint[11] > 0) or (AddPoint[12] > 0) or (AddPoint[13] > 0);
  1386. end;

  1387. constructor TNpcLabel.Create(AOwner: TComponent);
  1388. begin
  1389.   inherited Create(AOwner);
  1390.   m_nColorPosition := -1;
  1391.   m_nRecogId := -1;
  1392.   //m_sClickString := '';
  1393.   m_ColorList := TList.Create;
  1394. end;

  1395. destructor TNpcLabel.Destroy;
  1396. begin
  1397.   m_ColorList.Free;
  1398.   inherited;
  1399. end;

  1400. procedure TNpcLabel.AddColor(btColor: Byte);
  1401. begin
  1402.   m_ColorList.Add(Pointer(btColor));
  1403. end;

  1404. procedure TNpcLabel.Process;
  1405. begin
  1406.   inherited;
  1407.   if GetTickCount - m_dwChgColorTick > 500 then begin
  1408.     m_dwChgColorTick := GetTickCount;
  1409.     if m_ColorList.Count > 0 then begin
  1410.       if (m_nColorPosition >= 0) and (m_nColorPosition < m_ColorList.Count) then begin
  1411.         UpColor := GetRGB(Integer(m_ColorList.Items[m_nColorPosition]));
  1412.         Inc(m_nColorPosition);
  1413.       end else begin
  1414.         m_nColorPosition := 0;
  1415.       end;
  1416.     end;
  1417.   end;
  1418. end;

  1419. constructor TItemLabel.Create(AOwner: TComponent);
  1420. begin
  1421.   inherited Create(AOwner);
  1422.   FillChar(FClientItem, SizeOf(TClientItem), #0);
  1423.   FClientItem.s.Name := '';
  1424.   FClickTimeTick := GetTickCount;
  1425.   FGetClientItem := True;
  1426. end;

  1427. destructor TItemLabel.Destroy;
  1428. begin
  1429.   inherited;
  1430. end;

  1431. procedure TItemLabel.DirectPaint(dsurface: TTexture);
  1432. var
  1433.   d: TTexture;
  1434. begin
  1435.   inherited DirectPaint(dsurface);
  1436.   {if (FClientItem.s.Name <> '') then begin
  1437.     if (FClientItem.s.AddValue[12] in [1, 3]) or (GetAddPoint(FClientItem.s.AddPoint)) then begin
  1438.       if GetTickCount - FEffectTick[0].dwDrawTick >= 200 then begin
  1439.         FEffectTick[0].dwDrawTick := GetTickCount;
  1440.         if FEffectTick[0].nIndex <= 0 then FEffectTick[0].nIndex := 260 - 1;
  1441.         Inc(FEffectTick[0].nIndex);
  1442.         if FEffectTick[0].nIndex > 265 then FEffectTick[0].nIndex := 260;
  1443.       end;
  1444.       d := g_WMain2Images.Images[FEffectTick[0].nIndex];
  1445.       if d <> nil then begin
  1446.         DrawBlend(dsurface, SurfaceX(Left) - Width div 2, SurfaceY(Top) - Height div 2, d);
  1447.       end;
  1448.     end;

  1449.     if FClientItem.s.AddValue[12] >= 2 then begin
  1450.       if GetTickCount - FEffectTick[1].dwDrawTick >= 200 then begin
  1451.         FEffectTick[1].dwDrawTick := GetTickCount;
  1452.         if FEffectTick[1].nIndex <= 0 then FEffectTick[1].nIndex := 600 - 1;
  1453.         Inc(FEffectTick[1].nIndex);
  1454.         if FEffectTick[1].nIndex > 617 then FEffectTick[1].nIndex := 600;
  1455.       end;
  1456.       d := g_WMain3Images.Images[FEffectTick[1].nIndex];
  1457.       if d <> nil then begin
  1458.         DrawBlend(dsurface, SurfaceX(Left) - Width div 2, SurfaceY(Top) - Height div 2, d);
  1459.       end;
  1460.     end;
  1461.   end;}
  1462. end;

  1463. procedure TItemLabel.Process;
  1464. begin

  1465. end;

  1466. procedure TFrmDlg.NpcLabelClick(Sender: TObject; X, Y: Integer);
  1467. var
  1468.   sMsg, Str, sClickString: string;
  1469.   nCode: Integer;
  1470. begin
  1471.   //ShowMessage('TFrmDlg.NpcLabelClick:' + m_sClickString);
  1472.   //ShowMessage('TFrmDlg.NpcLabelClick:' + TNpcLabel(Sender).m_sClickString);
  1473.   nCode := 0;
  1474.   try
  1475.     if GetTickCount < LastestClickTime then Exit;
  1476.     LastestClickTime := GetTickCount + 3000;
  1477.     nCode := 1;
  1478.     sClickString := TNpcLabel(Sender).Text;
  1479.     nCode := 2;
  1480.     PlaySound(s_glass_button_click);
  1481.     if Pos('@http://', sClickString) > 0 then begin
  1482.       sMsg := Copy(sClickString, 2, Length(sClickString) - 1);
  1483.       g_sCurMerchantSay := '';
  1484.       g_nDownWorkCount := 0;
  1485.       g_nDownWorkCountMax := 0;
  1486.       g_sMerchantReadAddr := Trim(sMsg);
  1487.       CloseMDlg;
  1488.       ShowMDlg(g_nCurMerchantFace, g_sCurMerchantName, '正在读取数据,请稍候...');
  1489.       frmMain.HTTPGetString.URL := g_sMerchantReadAddr;
  1490.       frmMain.HTTPGetString.GetString;
  1491.     end else
  1492.       if Pos('@rmst://', sClickString) > 0 then begin
  1493.       sMsg := Copy(sClickString, 9, Length(sClickString) - 8);
  1494.       sMsg := GetValidStr3(sMsg, Str, ['|']);
  1495.       if (sMsg <> '') and (Str <> '') then begin
  1496.         g_boStartPlayMedia := False;
  1497.         g_nWaiteTime := 0;
  1498.         g_sSongName := Str;
  1499.         g_sDownSongAddr := sMsg;

  1500.           MediaStartPlay(g_sDownSongAddr, False, True);

  1501.       end;

  1502.     end else
  1503.       if Pos('@Media://', sClickString) > 0 then begin
  1504.       sMsg := Copy(sClickString, 10, Length(sClickString) - 9);
  1505.       MediaStartPlay(sMsg, True, True);
  1506.     end else begin
  1507.       nCode := 3;
  1508.       frmMain.SendMerchantDlgSelect(g_nCurMerchant {TNpcLabel(Sender).m_nRecogId}, sClickString);
  1509.       nCode := 4;
  1510.     end;

  1511.   except
  1512.     //Showmessage('TFrmDlg.NpcLabelClick Fail:'+IntToStr(nCode));
  1513.   end;
  1514. end;

  1515. procedure TFrmDlg.FormCreate(Sender: TObject);
  1516. begin
  1517.   Initialized := False;
  1518.   StatePage := 0;
  1519.   HeroStatePage := 0;
  1520.   //ShopPage := 0;
  1521.   SafeFillChar(ShopPage, SizeOf(ShopPage), 0);
  1522.   ShopPageCount := 0;
  1523.   ShopTabPage := 0;
  1524.   SortStatePage := 0;
  1525.   SortPage := 0;
  1526.   SortPageCount := 0;
  1527.   PlayJobSortStatePage := 0;
  1528.   HeroJobSortStatePage := 0;
  1529.   DlgTemp := TList.Create;
  1530.   DialogSize := 1;
  1531.   m_nDiceCount := 0;
  1532.   m_boPlayDice := False;
  1533.   magcur := 0;
  1534.   magtop := 0;
  1535.   Heromagcur := 0;
  1536.   Heromagtop := 0;
  1537.   MDlgPoints := TList.Create;
  1538.   SelectMenuStr := '';
  1539.   MenuList := TList.Create;
  1540.   menuindex := -1;
  1541.   SellItemIndex := -1;
  1542.   MoveSellItemIndex := -1;
  1543.   MenuTopLine := 0;
  1544.   BoDetailMenu := False;
  1545.   BoStorageMenu := False;
  1546.   BoNoDisplayMaxDura := False;
  1547.   BoMakeDrugMenu := False;
  1548.   MagicPage := 0;
  1549.   AbilPage := 0;
  1550.   HeroMagicPage := 0;
  1551.   NAHelps := TStringList.Create;
  1552.   BlinkTime := GetTickCount;
  1553.   BlinkCount := 0;
  1554.   GameOptionPage := 0;
  1555.   g_SellDlgItem.s.Name := '';
  1556.   Guild := '';
  1557.   GuildFlag := '';
  1558.   GuildCommanderMode := False;
  1559.   GuildStrs := TStringList.Create;
  1560.   GuildStrs2 := TStringList.Create;
  1561.   GuildNotice := TStringList.Create;
  1562.   GuildMembers := TStringList.Create;
  1563.   GuildChats := TStringList.Create;
  1564.   HintList := TStringList.Create;

  1565.   PlayerFullScreen := False;

  1566.   RankingSelectLine := -1;
  1567.   ChatDlgLeft := 0;
  1568. { EdDlgEdit := TEdit.Create(frmMain.Owner);
  1569.   with EdDlgEdit do begin
  1570.     Parent := frmMain;
  1571.     Color := clblack;
  1572.     Font.Color := clWhite;
  1573.     Font.Size := 10;
  1574.     MaxLength := 200;
  1575.     Height := 16;
  1576.     Ctl3D := False;
  1577.     BorderStyle := bsSingle;
  1578.     Visible := False;
  1579.   end;  }

  1580.   Memo := TMemo.Create(frmMain.Owner);
  1581.   with Memo do begin
  1582.     Parent := frmMain;
  1583.     Color := clblack;
  1584.     Font.Color := clWhite;
  1585.     Font.Size := 10;
  1586.     Ctl3D := False;
  1587.     BorderStyle := bsSingle; {OnKeyPress := EdDlgEditKeyPress;}
  1588.     Visible := False;//不显示
  1589.   end;
  1590.   //UseNpcLabel := True;
  1591.   SelItemLabel := nil;
  1592. end;

  1593. procedure TFrmDlg.FormDestroy(Sender: TObject);
  1594. var
  1595.   I: Integer;
  1596. begin
  1597.   DlgTemp.Free;
  1598.   MDlgPoints.Free;
  1599.   MenuList.Free;
  1600.   NAHelps.Free;
  1601.   GuildStrs.Free;
  1602.   GuildStrs2.Free;
  1603.   GuildNotice.Free;
  1604.   GuildMembers.Free;
  1605.   GuildChats.Free;
  1606.   HintList.Free;
  1607. end;

  1608. {procedure TFrmDlg.Paint;
  1609. begin
  1610.   //if csDesigning in ComponentState then begin
  1611.     inherited;
  1612.   //end;
  1613. end;   }

  1614. procedure TFrmDlg.HideAllControls;//隐藏所有控件
  1615. var
  1616.   I: Integer;
  1617.   c: TControl;
  1618. begin
  1619.   DlgTemp.Clear;
  1620.   with frmMain do
  1621.     for I := 0 to ControlCount - 1 do begin
  1622.       c := Controls[I];
  1623.       if c is TEdit then
  1624.         if (c.Visible) and (c <> EdDlgEdit) then begin
  1625.           DlgTemp.Add(c);
  1626.           c.Visible := False;
  1627.         end;
  1628.     end;
  1629. end;

  1630. procedure TFrmDlg.RestoreHideControls;//还原控件
  1631. var
  1632.   I: Integer;
  1633.   c: TControl;
  1634. begin
  1635.   for I := 0 to DlgTemp.Count - 1 do begin
  1636.     TControl(DlgTemp[I]).Visible := True;
  1637.   end;
  1638. end;

  1639. procedure TFrmDlg.SetBookType(nType: Integer);//读取书
  1640. var
  1641.   d: TTexture;
  1642. begin
  1643.   DBook.Visible := False;//不显示
  1644.   g_nBookType := nType;//页码
  1645.   g_nBookPage := 0;

  1646.   d := nil;
  1647.   if g_nBookType = 0 then begin
  1648.     d := g_WUIBImages.Images[0];
  1649.     if d <> nil then begin
  1650.       DBook.SetImgIndex(g_WUIBImages, 0);
  1651.       DBook.Left := (SCREENWIDTH - d.Width) div 2;
  1652.       DBook.Top := (SCREENHEIGHT - d.Height) div 2 - 90;
  1653.     end;
  1654.   end else begin
  1655.     d := g_WBookImages.Images[g_nBookType + 6];
  1656.     if d <> nil then begin
  1657.       DBook.SetImgIndex(g_WBookImages, g_nBookType + 6);
  1658.       DBook.Left := (SCREENWIDTH - d.Width) div 2;
  1659.       DBook.Top := (SCREENHEIGHT - d.Height) div 2 - 90;
  1660.     end;
  1661.   end;

  1662.   d := g_WUIBImages.Images[1];
  1663.   if d <> nil then begin
  1664.     if g_nBookType = 0 then begin
  1665.       DBookClose.Left := DBook.Width - d.Width - 3;
  1666.       DBookClose.Top := 0;
  1667.     end else begin
  1668.       DBookClose.Left := DBook.Width - d.Width;
  1669.       DBookClose.Top := 0;
  1670.     end;
  1671.   end;

  1672.   if g_nBookPage = 4 then begin
  1673.     d := g_WBookImages.Images[5];
  1674.     if d <> nil then begin
  1675.       DBookNextPage.SetImgIndex(g_WUIBImages, 5);
  1676.       DBookNextPage.Left := 470 - d.Width;
  1677.       DBookNextPage.Top := 318;
  1678.     end;
  1679.   end else begin
  1680.     d := g_WUIBImages.Images[3];
  1681.     if d <> nil then begin
  1682.       DBookNextPage.SetImgIndex(g_WUIBImages, 3);
  1683.       DBookNextPage.Left := 470 - d.Width;
  1684.       DBookNextPage.Top := 318;
  1685.     end;
  1686.   end;

  1687.   case nType of
  1688.     0: begin
  1689.         DBookPrevPage.Visible := False;
  1690.         DBookNextPage.Visible := True;
  1691.         DBookPage.Visible := True;
  1692.       end;
  1693.   else begin
  1694.       DBookPrevPage.Visible := False;
  1695.       DBookNextPage.Visible := False;
  1696.       DBookPage.Visible := False;
  1697.     end;
  1698.   end;
  1699.   DBook.Visible := True;//显示
  1700. end;

  1701. procedure TFrmDlg.Initialize;//初始化
  1702. var
  1703.   d: TTexture;

  1704.   I, II, nIndex: Integer;
  1705.   ItemList: TStringList;
  1706.   DLabel: TDLabel;
  1707.   sText: string;
  1708. begin
  1709.   if csDesigning in ComponentState then Exit;
  1710.   if Initialized then Exit;//是否初始化过

  1711.   DComboboxGuajiQunti.Items.Clear;
  1712.   DComboboxGuajiGeti.Items.Clear;
  1713.   DComboboxAutoUseMagic.Items.Clear;
  1714.   DSerieMagicMenu.Clear;

  1715.   DWinMan.ClearAll; //清理所有
  1716.   //初始化背景
  1717.   DBackground.Left := 0;
  1718.   DBackground.Top := 0;
  1719.   DBackground.Width := SCREENWIDTH;
  1720.   DBackground.Height := SCREENHEIGHT;
  1721.   DBackground.Background := True;

  1722.   DWinMan.AddDControl(DBackground, True);
  1723.   DWinMan.AddDControl(DMainMenu, False);


  1724. {-------------------------------------------------------------------------------}
  1725.   if g_ConfigClient.btMainInterface in [0, 2] then begin //仿盛大
  1726. //{$IF SWH = SWH800}
  1727.     d := g_WMain3Images.Images[BOTTOMBOARD800];
  1728. //{$ELSEIF SWH = SWH1024}
  1729.    // d := g_WMain3Images.Images[BOTTOMBOARD800];
  1730. //{$IFEND}
  1731.     if d <> nil then begin
  1732.       DBottom.Left := (SCREENWIDTH - d.Width) div 2;
  1733.       DBottom.Top := SCREENHEIGHT - d.Height;
  1734.       DBottom.SetImgIndex(g_WMain3Images, 371);
  1735.     end;
  1736. {-------------------------------------------------------------------------------}

  1737.    //底部状态栏的4个快捷按钮
  1738.     DMyState.SetImgIndex(g_WMainImages, 8);
  1739.     DMyState.Left := DBottom.Width div 2 + (DBottom.Width div 2 - (400 - 243)) {643};
  1740.     DMyState.Top := 61;
  1741.     DMyBag.SetImgIndex(g_WMainImages, 9);
  1742.     DMyBag.Left := DBottom.Width div 2 + (DBottom.Width div 2 - (400 - 282)) {682};
  1743.     DMyBag.Top := 41;
  1744.     DMyMagic.SetImgIndex(g_WMainImages, 10);
  1745.     DMyMagic.Left := DBottom.Width div 2 + (DBottom.Width div 2 - (400 - 322)) {722};
  1746.     DMyMagic.Top := 21;
  1747.     DVoice.SetImgIndex(g_WMainImages, 11);
  1748.     DVoice.Left := DBottom.Width div 2 + (DBottom.Width div 2 - (400 - 364)) {764};
  1749.     DVoice.Top := 11;

  1750.   {-----------------------------商铺按钮(Mars)----------------------}
  1751.     DButtonShop.SetImgIndex(g_WMain3Images, 297);
  1752.     DButtonShop.Left := DBottom.Width - 45;
  1753.     DButtonShop.Top := 204;

  1754.   {-----------------------------英雄按钮(Mars)----------------------}
  1755.     DButtonReCallHero.SetImgIndex(g_WMain3Images, 372);
  1756.     DButtonReCallHero.Left := 638;
  1757.     DButtonReCallHero.Top := 107;

  1758.     DButtonHeroState.SetImgIndex(g_WMain3Images, 373);
  1759.     DButtonHeroState.Left := DButtonReCallHero.Left + DButtonReCallHero.Width + 6;
  1760.     DButtonHeroState.Top := 107;

  1761.     DButtonHeroBag.SetImgIndex(g_WMain3Images, 374);
  1762.     DButtonHeroBag.Left := DButtonHeroState.Left + DButtonHeroState.Width + 6 + 1;
  1763.     DButtonHeroBag.Top := 107; ;

  1764.     d := g_WMain3Images.Images[410];
  1765.     if d <> nil then begin
  1766.       DFirDragon.Left := DBottom.Width - 197;
  1767.       DFirDragon.Top := 86;
  1768.       DFirDragon.SetImgIndex(g_WMain3Images, 410);
  1769.       DFirDragon.Visible := False;
  1770.     end;

  1771.   //底部状态栏的小地图、交易、行会、组按钮
  1772.     DBotMiniMap.SetImgIndex(g_WMainImages, 130);
  1773.     DBotMiniMap.Left := 219;
  1774.     DBotMiniMap.Top := 104;
  1775.     DBotTrade.SetImgIndex(g_WMainImages, 132);
  1776.     DBotTrade.Left := 219 + 30; //560 - 30;
  1777.     DBotTrade.Top := 104;
  1778.     DBotGuild.SetImgIndex(g_WMainImages, 134);
  1779.     DBotGuild.Left := 219 + 30 * 2;
  1780.     DBotGuild.Top := 104;
  1781.     DBotGroup.SetImgIndex(g_WMainImages, 128);
  1782.     DBotGroup.Left := 219 + 30 * 3;
  1783.     DBotGroup.Top := 104;
  1784.     DButtonFriend.SetImgIndex(g_WMain3Images, 34); //关系系统
  1785.     DButtonFriend.Left := 219 + 30 * 4;
  1786.     DButtonFriend.Top := 104;
  1787.     DButtonDuel.SetImgIndex(g_WMain3Images, 36); //挑战
  1788.     DButtonDuel.Left := 219 + 30 * 5;
  1789.     DButtonDuel.Top := 104;
  1790.     DRanking.SetImgIndex(g_WMain3Images, 460); //人物排行
  1791.     DRanking.Left := 219 + 30 * 6;
  1792.     DRanking.Top := 104;

  1793.     DOnHouser.SetImgIndex(g_WCqFirImages, 58); //骑马
  1794.     DOnHouser.Left := 219 + 30 * 7;
  1795.     DOnHouser.Top := 104;

  1796.     DHelp.SetImgIndex(g_WCqFirImages, 56); //帮助
  1797.     DHelp.Left := 219 + 30 * 8;
  1798.     DHelp.Top := 104;

  1799.     DBotPlusAbil.SetImgIndex(g_WMainImages, 218);
  1800.     DBotPlusAbil.Left := 219 + 30 * 9;
  1801.     DBotPlusAbil.Top := 104;

  1802.     DBotMemo.SetImgIndex(g_WMainImages, 532);
  1803.     DBotMemo.Left := 753;
  1804.     DBotMemo.Top := 204;

  1805.     DBotExit.SetImgIndex(g_WMainImages, 138);
  1806.     DBotExit.Left := 560;
  1807.     DBotExit.Top := 104;

  1808.     DBotLogout.SetImgIndex(g_WMainImages, 136);
  1809.     DBotLogout.Left := 560 - 30;
  1810.     DBotLogout.Top := 104;

  1811.     DButFunc1.SetImgIndex(g_WMain3Images, 280);
  1812.     DButFunc1.Left := 176;
  1813.     DButFunc1.Top := 120;

  1814.     DButFunc2.SetImgIndex(g_WMain3Images, 282);
  1815.     DButFunc2.Left := 176;
  1816.     DButFunc2.Top := DButFunc1.Top + 25;

  1817.     DButFunc3.SetImgIndex(g_WMain3Images, 284);
  1818.     DButFunc3.Left := 176;
  1819.     DButFunc3.Top := DButFunc1.Top + 25 * 2;

  1820.     DButFunc4.SetImgIndex(g_WMain3Images, 286);
  1821.     DButFunc4.Left := 176;
  1822.     DButFunc4.Top := DButFunc1.Top + 25 * 3;

  1823.     DButFunc5.SetImgIndex(g_WMain3Images, 288);
  1824.     DButFunc5.Left := 176;
  1825.     DButFunc5.Top := DButFunc1.Top + 25 * 4;
  1826.     DButFunc5.Downed := True; //是按钮处于摁住状态

  1827.   {-----------------------------------------------------------}

  1828.   //Belt 快捷栏
  1829.     DBelt1.Left := DBottom.Width div 2 - 115; //285;
  1830.     DBelt1.Width := 32;
  1831.     DBelt1.Top := 59;
  1832.     DBelt1.Height := 29;

  1833.     DBelt2.Left := DBelt1.Left + 43; //328;
  1834.     DBelt2.Width := 32;
  1835.     DBelt2.Top := 59;
  1836.     DBelt2.Height := 29;

  1837.     DBelt3.Left := DBelt2.Left + 43; //371;
  1838.     DBelt3.Width := 32;
  1839.     DBelt3.Top := 59;
  1840.     DBelt3.Height := 29;

  1841.     DBelt4.Left := DBelt3.Left + 43; //415;
  1842.     DBelt4.Width := 32;
  1843.     DBelt4.Top := 59;
  1844.     DBelt4.Height := 29;

  1845.     DBelt5.Left := DBelt4.Left + 43; //459;
  1846.     DBelt5.Width := 32;
  1847.     DBelt5.Top := 59;
  1848.     DBelt5.Height := 29;

  1849.     DBelt6.Left := DBelt5.Left + 43; //503;
  1850.     DBelt6.Width := 32;
  1851.     DBelt6.Top := 59;
  1852.     DBelt6.Height := 29;

  1853.   {-----------------------------------------------------------}
  1854.   //英雄
  1855.     d := g_WMain3Images.Images[385];
  1856.     if d <> nil then begin
  1857.       DHeroHealthStateWin.SetImgIndex(g_WMain3Images, 385);
  1858.       DHeroHealthStateWin.Left := 5;
  1859.       DHeroHealthStateWin.Top := 5;
  1860.     end;


  1861.     DPlayTool.Visible := False;
  1862.     DButtonOption1.Visible := False;
  1863.     DButtonOption2.Visible := False;
  1864.     DButOther.Visible := False;
  1865.     DMapTitle.Visible := False;
  1866.     DCategorizeSys.Visible := False;
  1867.     DCategorizeGuild.Visible := False;
  1868.     DCategorizeGroup.Visible := False;
  1869.     DCategorizePrivate.Visible := False;
  1870.     DShowChat.Visible := False;

  1871. {-------------------------------------------------------------------------------}

  1872.     DChatDlg.Left := 208;
  1873.     DChatDlg.Top := 120; //SCREENHEIGHT - 251 + 118;
  1874.     DChatDlg.Width := 388;
  1875.     DChatDlg.Height := 126;
  1876.     DChatDlg.DParent := DBottom;
  1877.     DChatDlg.Floating := False;

  1878.     DMemoChat.Left := 0;
  1879.     DMemoChat.Top := 0;
  1880.     DMemoChat.Width := 388;
  1881.     DMemoChat.Height := 12 * 9;
  1882.     DMemoChat.SpareSize := DMemoChat.Height - 12 * 2;

  1883.     EdChat.Left := 0;
  1884.     EdChat.Top := 12 * 9 + 4;
  1885.     EdChat.Width := 388;
  1886.     EdChat.Height := 16;
  1887.     EdChat.DParent := DChatDlg;
  1888.     EdChat.Visible := False;
  1889.     EdChat.Text := '';
  1890.     EdChat.SelTextFontColor := clWhite;


  1891.     DScrollChat.SetImgIndex(g_WMain2Images, 291);
  1892.     DScrollChat.LeftButton.SetImgIndex(g_WMain2Images, 292);
  1893.     DScrollChat.RightButton.SetImgIndex(g_WMain2Images, 294);
  1894.     DScrollChat.CenterButton.SetImgIndex(g_WMain2Images, 581);

  1895.     DScrollChat.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  1896.     DScrollChat.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  1897.     DScrollChat.CenterButton.OnDirectPaint := nil;
  1898.     DScrollChat.Left := DMemoChat.Width;
  1899.     DScrollChat.Top := -90;
  1900.     DScrollChat.Increment := 12;
  1901.     DScrollChat.LeftButton.Left := 1;
  1902.     DScrollChat.LeftButton.Top := 1;
  1903.     DScrollChat.RightButton.Left := 1;
  1904.     DScrollChat.RightButton.Top := DScrollChat.Height - DScrollChat.RightButton.Height - 1;
  1905.     DScrollChat.CenterButton.Left := 1;
  1906.     DScrollChat.CenterButton.Top := DScrollChat.LeftButton.Top + DScrollChat.LeftButton.Height;



  1907.     DScrollChat.Left := 0;
  1908.     DScrollChat.Top := 0;
  1909.     DScrollChat.Width := 0;
  1910.     DScrollChat.Height := 0;

  1911.     DScrollChat.VisibleScroll := False;

  1912.     DShowChat.Visible := False;
  1913.   end else begin
  1914.     d := g_WCqFirImages.Images[65];
  1915.     if d <> nil then begin
  1916.       DBottom.Left := (SCREENWIDTH - d.Width) div 2;
  1917.       DBottom.Top := SCREENHEIGHT - d.Height;
  1918.       DBottom.SetImgIndex(g_WCqFirImages, 65);
  1919.     end;
  1920.   {-----------------------------------------------------------}

  1921.    //底部状态栏的4个快捷按钮

  1922.     DMyState.SetImgIndex(g_WCqFirImages, 67); //状态
  1923.     DMyState.Left := 440;
  1924.     DMyState.Top := 3;

  1925.     DMyBag.SetImgIndex(g_WCqFirImages, 66); //包裹
  1926.     DMyBag.Left := 440 + 36;
  1927.     DMyBag.Top := 3;

  1928.     DMyMagic.SetImgIndex(g_WCqFirImages, 68); //魔法
  1929.     DMyMagic.Left := 440 + 36 * 2;
  1930.     DMyMagic.Top := 3;


  1931.     DHelp.SetImgIndex(g_WCqFirImages, 69); //摆摊
  1932.     DHelp.Left := 440 + 36 * 3;
  1933.     DHelp.Top := 3;
  1934.     DHelp.OnDirectPaint := DMyStateDirectPaint;
  1935.     DHelp.ClickCount := csGlass;

  1936.     DButtonReCallHero.SetImgIndex(g_WCqFirImages, 70); //英雄
  1937.     DButtonReCallHero.Left := 440 + 36 * 4;
  1938.     DButtonReCallHero.Top := 3;
  1939.     DButtonReCallHero.ClickCount := csGlass;

  1940.     DButtonShop.Left := 440 + 36 * 5; //607              //商铺
  1941.     DButtonShop.Top := 3;
  1942.     DButtonShop.SetImgIndex(g_WCqFirImages, 71);
  1943.     DButtonShop.ClickCount := csGlass;

  1944.     DPlayTool.SetImgIndex(g_WCqFirImages, 72); //影音
  1945.     DPlayTool.Left := 440 + 36 * 6;
  1946.     DPlayTool.Top := 3;



  1947.     DBotLogout.SetImgIndex(g_WCqFirImages, 127);
  1948.     DBotLogout.Left := 766;
  1949.     DBotLogout.Top := 3;
  1950.     DBotLogout.OnDirectPaint := DMyStateDirectPaint;

  1951.     DBotExit.SetImgIndex(g_WCqFirImages, 128);
  1952.     DBotExit.Left := 766;
  1953.     DBotExit.Top := 21;
  1954.     DBotExit.OnDirectPaint := DMyStateDirectPaint;

  1955.   //英雄
  1956.     d := g_WCqFirImages.Images[129];
  1957.     if d <> nil then begin
  1958.       DHeroHealthStateWin.SetImgIndex(g_WCqFirImages, 129);
  1959.       DHeroHealthStateWin.Left := 5;
  1960.       DHeroHealthStateWin.Top := 5;
  1961.     end;


  1962.     DButtonHeroBag.DParent := DHeroHealthStateWin;
  1963.     DButtonHeroState.DParent := DHeroHealthStateWin;

  1964.     DButtonHeroBag.SetImgIndex(g_WCqFirImages, 134);
  1965.     DButtonHeroBag.Left := 59;
  1966.     DButtonHeroBag.Top := 44;

  1967.     DButtonHeroState.SetImgIndex(g_WCqFirImages, 135);
  1968.     DButtonHeroState.Left := 59 + 22;
  1969.     DButtonHeroState.Top := 45;



  1970.     DFirDragon.Visible := False;
  1971.     DButtonDuel.Visible := False;


  1972.     DBotMiniMap.DParent := DBackground;
  1973.     DOnHouser.DParent := DBackground;
  1974.     DBotTrade.DParent := DBackground;
  1975.     DBotGuild.DParent := DBackground;
  1976.     DBotPlusAbil.DParent := DBackground;
  1977.     DButtonFriend.DParent := DBackground;
  1978.     DRanking.DParent := DBackground;
  1979.     DVoice.DParent := DBackground;
  1980.     DVoice.OnDirectPaint := DBotGroupDirectPaint;

  1981.     DBotGroup.DParent := DBackground;


  1982.   //底部状态栏的小地图、交易、行会、组按钮
  1983.     DBotMiniMap.SetImgIndex(g_WCqFirImages, 76);
  1984.     DBotMiniMap.Left := DBottom.Width - 23 * 9 - 3 * 8 + DBottom.Left;
  1985.     DBotMiniMap.Top := SCREENHEIGHT - 58;


  1986.     DBotTrade.SetImgIndex(g_WCqFirImages, 80);
  1987.     DBotTrade.Left := DBottom.Width - 23 * 8 - 3 * 7 + DBottom.Left;
  1988.     DBotTrade.Top := SCREENHEIGHT - 58;

  1989.     DBotGuild.SetImgIndex(g_WCqFirImages, 82);
  1990.     DBotGuild.Left := DBottom.Width - 23 * 7 - 3 * 6 + DBottom.Left;
  1991.     DBotGuild.Top := SCREENHEIGHT - 58;

  1992.     DBotGroup.SetImgIndex(g_WCqFirImages, 143);
  1993.     DBotGroup.Left := DBottom.Width - 23 * 6 - 3 * 5 + DBottom.Left;
  1994.     DBotGroup.Top := SCREENHEIGHT - 58;

  1995.     DOnHouser.SetImgIndex(g_WCqFirImages, 78); //骑马
  1996.     DOnHouser.Left := DBottom.Width - 23 * 5 - 3 * 4 + DBottom.Left;
  1997.     DOnHouser.Top := SCREENHEIGHT - 58;

  1998.     DButtonFriend.SetImgIndex(g_WCqFirImages, 86); //关系系统
  1999.     DButtonFriend.Left := DBottom.Width - 23 * 4 - 3 * 3 + DBottom.Left;
  2000.     DButtonFriend.Top := SCREENHEIGHT - 58;

  2001.     DRanking.SetImgIndex(g_WCqFirImages, 88); //人物排行
  2002.     DRanking.Left := DBottom.Width - 23 * 3 - 3 * 2 + DBottom.Left;
  2003.     DRanking.Top := SCREENHEIGHT - 58;

  2004.     DVoice.SetImgIndex(g_WCqFirImages, 90);
  2005.     DVoice.Left := DBottom.Width - 23 * 2 - 3 + DBottom.Left;
  2006.     DVoice.Top := SCREENHEIGHT - 58;

  2007.     DButOther.SetImgIndex(g_WCqFirImages, 92);
  2008.     DButOther.Left := DBottom.Width - 23 * 1 + DBottom.Left;
  2009.     DButOther.Top := SCREENHEIGHT - 58;

  2010.     DBotPlusAbil.SetImgIndex(g_WCqFirImages, 84);
  2011.     DBotPlusAbil.Left := DBottom.Width - 23 * 10 - 3 * 9 + DBottom.Left;
  2012.     DBotPlusAbil.Top := SCREENHEIGHT - 58;

  2013.     SetButVisible(False);


  2014.     DMapTitle.SetImgIndex(g_WCqFirImages, 126);
  2015.     DMapTitle.Left := SCREENWIDTH - 139;
  2016.     DMapTitle.Top := 0;
  2017.     DMapTitle.Height := 17;

  2018.     DButFunc1.Visible := False;
  2019.     DButFunc2.Visible := False;
  2020.     DButFunc3.Visible := False;
  2021.     DButFunc4.Visible := False;

  2022.     DButFunc5.DParent := DEdChat;

  2023.     DButFunc5.SetImgIndex(g_WCqFirImages, 94);
  2024.     DButFunc5.Left := 3;
  2025.     DButFunc5.Top := 2;

  2026.     DButFunc5.Downed := True; //是按钮处于摁住状态

  2027.     DCategorizeSys.SetImgIndex(g_WCqFirImages, 106);
  2028.     DCategorizeSys.Left := 150;
  2029.     DCategorizeSys.Top := 520;

  2030.     DCategorizeGuild.SetImgIndex(g_WCqFirImages, 108);
  2031.     DCategorizeGuild.Left := 150 + 36;
  2032.     DCategorizeGuild.Top := 520;

  2033.     DCategorizeGroup.SetImgIndex(g_WCqFirImages, 110);
  2034.     DCategorizeGroup.Left := 150 + 36 * 2;
  2035.     DCategorizeGroup.Top := 520;

  2036.     DCategorizePrivate.SetImgIndex(g_WCqFirImages, 112);
  2037.     DCategorizePrivate.Left := 150 + 36 * 3;
  2038.     DCategorizePrivate.Top := 520;



  2039.     DShowChat.SetImgIndex(g_WCqFirImages, 145);
  2040.     DShowChat.Left := 373;
  2041.     DShowChat.Top := 2;



  2042.   //Belt 快捷栏
  2043.     DBelt1.Left := 224;
  2044.     DBelt1.Width := 30;
  2045.     DBelt1.Top := 4;
  2046.     DBelt1.Height := 30;

  2047.     DBelt2.Left := 224 + 36;
  2048.     DBelt2.Width := 30;
  2049.     DBelt2.Top := 4;
  2050.     DBelt2.Height := 30;

  2051.     DBelt3.Left := 224 + 36 * 2;
  2052.     DBelt3.Width := 30;
  2053.     DBelt3.Top := 4;
  2054.     DBelt3.Height := 30;

  2055.     DBelt4.Left := 224 + 36 * 3;
  2056.     DBelt4.Width := 30;
  2057.     DBelt4.Top := 4;
  2058.     DBelt4.Height := 30;

  2059.     DBelt5.Left := 224 + 36 * 4;
  2060.     DBelt5.Width := 30;
  2061.     DBelt5.Top := 4;
  2062.     DBelt5.Height := 30;

  2063.     DBelt6.Left := 224 + 36 * 5;
  2064.     DBelt6.Width := 30;
  2065.     DBelt6.Top := 4;
  2066.     DBelt6.Height := 30;

  2067.      {
  2068.   //Belt 快捷栏
  2069.     DBelt1.Left := 172;
  2070.     DBelt1.Width := 30;
  2071.     DBelt1.Top := 10;
  2072.     DBelt1.Height := 29;

  2073.     DBelt2.Left := DBelt1.Left + 37;
  2074.     DBelt2.Width := 30;
  2075.     DBelt2.Top := 10;
  2076.     DBelt2.Height := 29;

  2077.     DBelt3.Left := DBelt2.Left + 37;
  2078.     DBelt3.Width := 30;
  2079.     DBelt3.Top := 10;
  2080.     DBelt3.Height := 29;

  2081.     DBelt4.Left := DBelt3.Left + 37;
  2082.     DBelt4.Width := 30;
  2083.     DBelt4.Top := 10;
  2084.     DBelt4.Height := 29;

  2085.     DBelt5.Left := DBelt4.Left + 37;
  2086.     DBelt5.Width := 30;
  2087.     DBelt5.Top := 10;
  2088.     DBelt5.Height := 29;

  2089.     DBelt6.Left := DBelt5.Left + 37;
  2090.     DBelt6.Width := 30;
  2091.     DBelt6.Top := 10;
  2092.     DBelt6.Height := 29;
  2093.       }

  2094.     DButtonOption1.SetImgIndex(g_WCqFirImages, 115);
  2095.     DButtonOption1.Left := DBelt6.Left + 36 + 1;
  2096.     DButtonOption1.Top := 10;

  2097.     DButtonOption2.SetImgIndex(g_WCqFirImages, 117);
  2098.     DButtonOption2.Left := DBelt6.Left + 36 + 1;
  2099.     DButtonOption2.Top := 10 + 18;

  2100.     DButtonOption1.Visible := False;
  2101.     DButtonOption2.Visible := False;

  2102.     DMyState.OnDirectPaint := DButtonShopDirectPaint;
  2103.     DMyBag.OnDirectPaint := DButtonShopDirectPaint;
  2104.     DMyMagic.OnDirectPaint := DButtonShopDirectPaint;
  2105.     DPlayTool.OnDirectPaint := DButtonShopDirectPaint;
  2106.     DHelp.OnDirectPaint := DButtonShopDirectPaint;
  2107.     DButtonReCallHero.OnDirectPaint := DButtonShopDirectPaint;


  2108.     DEdChat.SetImgIndex(g_WCqFirImages, 123);
  2109.     DEdChat.Floating := False;
  2110.     DEdChat.Left := DBottom.Left;
  2111.     DEdChat.Top := SCREENHEIGHT - DEdChat.Height - DBottom.Height;
  2112.     DEdChat.DParent := DBackground;

  2113.     EdChat.Left := 20;
  2114.     EdChat.Top := 3;
  2115.     EdChat.Width := 349;
  2116.     EdChat.Height := 14;
  2117.     EdChat.DParent := DEdChat;
  2118.     EdChat.Visible := False;
  2119.     EdChat.Text := '';
  2120.     EdChat.SelTextColor := $00DC802C;
  2121.     EdChat.SelTextFontColor := clWhite;


  2122.     DChatDlg.Height := 12 * 9 + 2;
  2123.     DChatDlg.Width := DEdChat.Width;
  2124.     DChatDlg.Left := DBottom.Left;
  2125.     DChatDlg.Top := SCREENHEIGHT - DChatDlg.Height - DEdChat.Height - DBottom.Height; //SCREENHEIGHT - 251 + 118;

  2126.     DChatDlg.DParent := DBackground;
  2127.     DChatDlg.Floating := False;
  2128.     DChatDlg.Visible := False;

  2129.     DMemoChat.Left := 2;
  2130.     DMemoChat.Top := 2;
  2131.     DMemoChat.Width := DChatDlg.Width - 18;
  2132.     DMemoChat.Height := 12 * 9;
  2133.     DMemoChat.SpareSize := DMemoChat.Height - 12;
  2134.     //DMemoChat.Border:=True;

  2135.     {DScrollChat.SetImgIndex(g_WMain2Images, 291);
  2136.     DScrollChat.LeftButton.SetImgIndex(g_WMain2Images, 292);
  2137.     DScrollChat.RightButton.SetImgIndex(g_WMain2Images, 294);
  2138.     DScrollChat.CenterButton.SetImgIndex(g_WMain2Images, 581);}

  2139.     DScrollChat.SetImgIndex(g_WCqFirImages, 124);
  2140.     DScrollChat.LeftButton.SetImgIndex(g_WCqFirImages, 119);
  2141.     DScrollChat.RightButton.SetImgIndex(g_WCqFirImages, 121);
  2142.     DScrollChat.CenterButton.SetImgIndex(g_WCqFirImages, 118);

  2143.     DScrollChat.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  2144.     DScrollChat.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  2145.     DScrollChat.OnDirectPaint := DScrollCenterScrollDirectPaint;
  2146.     DScrollChat.Left := DMemoChat.Width + 1;
  2147.     DScrollChat.Top := 0;
  2148.     DScrollChat.Height := DChatDlg.Height;

  2149.     DScrollChat.Increment := 12;
  2150.     DScrollChat.LeftButton.Left := (DScrollChat.Width - DScrollChat.LeftButton.Width) div 2;
  2151.     DScrollChat.LeftButton.Top := 1;
  2152.     DScrollChat.RightButton.Left := (DScrollChat.Width - DScrollChat.RightButton.Width) div 2;
  2153.     DScrollChat.RightButton.Top := DScrollChat.Height - DScrollChat.RightButton.Height - 1;
  2154.     DScrollChat.CenterButton.Left := (DScrollChat.Width - DScrollChat.CenterButton.Width) div 2;
  2155.     DScrollChat.CenterButton.Top := DScrollChat.LeftButton.Top + DScrollChat.LeftButton.Height;

  2156.    { DMemoChat.Left := DScrollChat.Width + 1;
  2157.     DMemoChat.Top := 0;
  2158.     DMemoChat.Width := DChatDlg.Width - 18;
  2159.     DMemoChat.Height := 12 * 9;  }


  2160.     SetInputVisible(False);
  2161.     SetChatVisible(False);
  2162.   end;


  2163.   {-----------------------------------------------------------}
  2164.   d := g_WMainImages.Images[360];
  2165.   if d <> nil then begin
  2166.     DMsgDlg.SetImgIndex(g_WMainImages, 360);
  2167.     DMsgDlg.Left := (SCREENWIDTH - d.Width) div 2;
  2168.     DMsgDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  2169.   end;
  2170.   DMsgDlgOk.SetImgIndex(g_WMainImages, 361);
  2171.   DMsgDlgYes.SetImgIndex(g_WMainImages, 363);
  2172.   DMsgDlgCancel.SetImgIndex(g_WMainImages, 365);
  2173.   DMsgDlgNo.SetImgIndex(g_WMainImages, 367);
  2174.   DMsgDlgOk.Top := 126;
  2175.   DMsgDlgYes.Top := 126;
  2176.   DMsgDlgCancel.Top := 126;
  2177.   DMsgDlgNo.Top := 126;

  2178.   with EdDlgEdit do begin
  2179.     Text := '';
  2180.     Width := DMsgDlg.Width - 70;
  2181.     Left := (DMsgDlg.Width - Width) div 2;
  2182.     Top := (DMsgDlg.Height - Height) div 2 - 10;
  2183.   end;

  2184.   {-----------------------------------------------------------}
  2185.   {d := g_WCqFirImages.Images[49];
  2186.   if d <> nil then begin
  2187.     DIntro.SetImgIndex(g_WCqFirImages, 49);
  2188.     DIntro.Left := (SCREENWIDTH - d.Width) div 2;
  2189.     DIntro.Top := (SCREENHEIGHT - d.Height) div 2;
  2190.     DIntro.Width := d.Width;
  2191.     DIntro.Height := d.Height;
  2192.   end;}


  2193.   d := g_WMainImages.Images[60];
  2194.   if d <> nil then begin
  2195.     DLogIn.SetImgIndex(g_WMainImages, 60);
  2196.     DLogIn.Left := (SCREENWIDTH - d.Width) div 2;
  2197.     DLogIn.Top := (SCREENHEIGHT - d.Height) div 2;
  2198.     DLogIn.Width := d.Width;
  2199.     DLogIn.Height := d.Height;
  2200.   end;
  2201.   DLoginNew.SetImgIndex(g_WMainImages, 61);
  2202.   DLoginNew.Left := 24;
  2203.   DLoginNew.Top := 207;
  2204.   DLoginOk.SetImgIndex(g_WMainImages, 62);
  2205.   DLoginOk.Left := 171;
  2206.   DLoginOk.Top := 165;
  2207.   DLoginChgPw.SetImgIndex(g_WMainImages, 53);
  2208.   DLoginChgPw.Left := 111 + 18;
  2209.   DLoginChgPw.Top := 207;
  2210.   DLoginClose.SetImgIndex(g_WMainImages, 64);
  2211.   DLoginClose.Left := 252;
  2212.   DLoginClose.Top := 28;

  2213.   EdId.Left := 96;
  2214.   EdId.Top := 83;
  2215.   EdId.Width := 137;
  2216.   EdId.Text := '';

  2217.   EdPasswd.Left := 96;
  2218.   EdPasswd.Top := 115;
  2219.   EdPasswd.Width := 137;
  2220.   EdPasswd.Text := '';
  2221.   {-----------------------------------------------------------}
  2222.   //服务器选择窗口
  2223.   d := g_WMainImages.Images[256]; //81];
  2224.   if d <> nil then begin
  2225.     DSelServerDlg.SetImgIndex(g_WMainImages, 256);
  2226.     DSelServerDlg.Left := (SCREENWIDTH - d.Width) div 2;
  2227.     DSelServerDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  2228.   end;
  2229.   DSSrvClose.SetImgIndex(g_WMainImages, 64);
  2230.   DSSrvClose.Left := 245;
  2231.   DSSrvClose.Top := 31;
  2232.     {
  2233.           DEngServer1.SetImgIndex (g_WMainImages, 257);
  2234.           DEngServer1.Left := 65;
  2235.           DEngServer1.Top  := 204;
  2236.     }

  2237.   DSServer1.SetImgIndex(g_WMain3Images, 2);
  2238.   DSServer1.Left := 65;
  2239.   DSServer1.Top := 100;

  2240.   DSServer2.SetImgIndex(g_WMain3Images, 2);
  2241.   DSServer2.Left := 65;
  2242.   DSServer2.Top := 145;

  2243.   DSServer3.SetImgIndex(g_WMain3Images, 2);
  2244.   DSServer3.Left := 65;
  2245.   DSServer3.Top := 190;

  2246.   DSServer4.SetImgIndex(g_WMain3Images, 2);
  2247.   DSServer4.Left := 65;
  2248.   DSServer4.Top := 235;

  2249.   DSServer5.SetImgIndex(g_WMain3Images, 2);
  2250.   DSServer5.Left := 65;
  2251.   DSServer5.Top := 280;

  2252.   DSServer6.SetImgIndex(g_WMain3Images, 2);
  2253.   DSServer6.Left := 65;
  2254.   DSServer6.Top := 325;

  2255.   DEngServer1.Visible := False;
  2256.   DSServer1.Visible := False;
  2257.   DSServer2.Visible := False;
  2258.   DSServer3.Visible := False;
  2259.   DSServer4.Visible := False;
  2260.   DSServer5.Visible := False;
  2261.   DSServer6.Visible := False;

  2262.   {-----------------------------------------------------------}
  2263.   {Res := TResourceStream.Create(HInstance, 'NewAccount', PChar('bmp'));
  2264.   Bitmap:= TBitmap.Create;
  2265.   Bitmap.LoadFromStream(Res);
  2266.   Res.Free;
  2267.   g_WMainImages.SetCachedSurface(63, Res); }
  2268.   //登录窗口
  2269.   d := g_WMainImages.Images[63];
  2270.   if d <> nil then begin
  2271.     DNewAccount.SetImgIndex(g_WMainImages, 63);
  2272.     DNewAccount.Left := (SCREENWIDTH - d.Width) div 2;
  2273.     DNewAccount.Top := (SCREENHEIGHT - d.Height) div 2;
  2274.   end;

  2275.   {d := g_WCqFirImages.Images[0];
  2276.   if d <> nil then begin
  2277.     DNewAccount.SetImgIndex(g_WCqFirImages, 0);
  2278.     DNewAccount.Left := (SCREENWIDTH - d.Width) div 2;
  2279.     DNewAccount.Top := (SCREENHEIGHT - d.Height) div 2;
  2280.   end;}

  2281.   DNewAccountOk.SetImgIndex(g_WMainImages, 62);
  2282.   DNewAccountOk.Left := 160;
  2283.   DNewAccountOk.Top := 417;
  2284.   DNewAccountCancel.SetImgIndex(g_WMainImages, 52);
  2285.   DNewAccountCancel.Left := 448;
  2286.   DNewAccountCancel.Top := 419;
  2287.   DNewAccountClose.SetImgIndex(g_WMainImages, 64);
  2288.   DNewAccountClose.Left := 587;
  2289.   DNewAccountClose.Top := 33;

  2290.   {-----------------------------------------------------------}

  2291.   //修改密码窗口
  2292.   d := g_WMainImages.Images[50];
  2293.   if d <> nil then begin
  2294.     DChgPw.SetImgIndex(g_WMainImages, 50);
  2295.     DChgPw.Left := (SCREENWIDTH - d.Width) div 2;
  2296.     DChgPw.Top := (SCREENHEIGHT - d.Height) div 2;
  2297.   end;
  2298.   DChgpwOk.SetImgIndex(g_WMainImages, 62);
  2299.   DChgpwOk.Left := 182;
  2300.   DChgpwOk.Top := 252;
  2301.   DChgpwCancel.SetImgIndex(g_WMainImages, 52);
  2302.   DChgpwCancel.Left := 277;
  2303.   DChgpwCancel.Top := 251;

  2304.   {-----------------------------------------------------------}

  2305.   //选择角色窗口
  2306.   DSelectChr.Left := 0;
  2307.   DSelectChr.Top := 0;
  2308.   DSelectChr.Width := SCREENWIDTH;
  2309.   DSelectChr.Height := SCREENHEIGHT;
  2310.   DscSelect1.SetImgIndex(g_WMainImages, 66);
  2311.   DscSelect2.SetImgIndex(g_WMainImages, 67);
  2312.   DscStart.SetImgIndex(g_WMain2Images, 481);
  2313.   DscNewChr.SetImgIndex(g_WMainImages, 69);
  2314.   DscEraseChr.SetImgIndex(g_WMainImages, 70);
  2315.   //DscCredits.SetImgIndex(g_WMainImages, 71);
  2316.   DscCredits.SetImgIndex(g_WMain3Images, 405);
  2317.   DscExit.SetImgIndex(g_WMainImages, 72);

  2318.   DscSelect1.Left := (SCREENWIDTH - 800) div 2 + 134 - 1 {134};
  2319.   DscSelect1.Top := (SCREENHEIGHT - 600) div 2 + 454 - 1 {454};
  2320.   DscSelect2.Left := (SCREENWIDTH - 800) div 2 + 685 {685};
  2321.   DscSelect2.Top := (SCREENHEIGHT - 600) div 2 + 454 {454};
  2322.   DscStart.Left := (SCREENWIDTH - 800) div 2 + 385 - 12 {385};
  2323.   DscStart.Top := (SCREENHEIGHT - 600) div 2 + 456 - 4 {456};
  2324.   DscNewChr.Left := (SCREENWIDTH - 800) div 2 + 348 {348};
  2325.   DscNewChr.Top := (SCREENHEIGHT - 600) div 2 + 486 {486};
  2326.   DscEraseChr.Left := (SCREENWIDTH - 800) div 2 + 347 {347};
  2327.   DscEraseChr.Top := (SCREENHEIGHT - 600) div 2 + 506 {506};
  2328.   DscCredits.Left := (SCREENWIDTH - 800) div 2 + 346 {362};
  2329.   DscCredits.Top := (SCREENHEIGHT - 600) div 2 + 527 {527};
  2330.   DscExit.Left := (SCREENWIDTH - 800) div 2 + 379 {379};
  2331.   DscExit.Top := (SCREENHEIGHT - 600) div 2 + 547 {547};

  2332.   {-----------------------------------------------------------}

  2333.   //创建角色窗口
  2334.   d := g_WMainImages.Images[73];
  2335.   if d <> nil then begin
  2336.     DCreateChr.SetImgIndex(g_WMainImages, 73);
  2337.     DCreateChr.Left := (SCREENWIDTH - d.Width) div 2;
  2338.     DCreateChr.Top := (SCREENHEIGHT - d.Height) div 2;
  2339.   end;
  2340.   DccWarrior.SetImgIndex(g_WMainImages, 74);
  2341.   DccWizzard.SetImgIndex(g_WMainImages, 75);
  2342.   DccMonk.SetImgIndex(g_WMainImages, 76);
  2343.   //DccReserved.SetImgIndex (g_WMainImages.Images[76], TRUE);
  2344.   DccMale.SetImgIndex(g_WMainImages, 77);
  2345.   DccFemale.SetImgIndex(g_WMainImages, 78);
  2346.   DccLeftHair.SetImgIndex(g_WMainImages, 79);
  2347.   DccRightHair.SetImgIndex(g_WMainImages, 80);
  2348.   DccOk.SetImgIndex(g_WMainImages, 62);
  2349.   DccClose.SetImgIndex(g_WMainImages, 64);
  2350.   DccWarrior.Left := 48;
  2351.   DccWarrior.Top := 157;
  2352.   DccWizzard.Left := 93;
  2353.   DccWizzard.Top := 157;
  2354.   DccMonk.Left := 138;
  2355.   DccMonk.Top := 157;
  2356.   //DccReserved.Left := 183;
  2357.   //DccReserved.Top := 157;
  2358.   DccMale.Left := 93;
  2359.   DccMale.Top := 231;
  2360.   DccFemale.Left := 138;
  2361.   DccFemale.Top := 231;
  2362.   DccLeftHair.Left := 76;
  2363.   DccLeftHair.Top := 308;
  2364.   DccRightHair.Left := 170;
  2365.   DccRightHair.Top := 308;
  2366.   DccOk.Left := 104;
  2367.   DccOk.Top := 361;
  2368.   DccClose.Left := 248;
  2369.   DccClose.Top := 31;


  2370.   {-----------------------------------------------------------}
  2371.   d := g_WMainImages.Images[50]; //修改密码窗口
  2372.   if d <> nil then begin
  2373.     DChgGamePwd.SetImgIndex(g_WMainImages, 689);
  2374.     DChgGamePwd.Left := (SCREENWIDTH - d.Width) div 2;
  2375.     DChgGamePwd.Top := (SCREENHEIGHT - d.Height) div 2;
  2376.   end;
  2377.   DChgGamePwdClose.Left := 291; // 399;
  2378.   DChgGamePwdClose.Top := 8;
  2379.   DChgGamePwdClose.SetImgIndex(g_WMainImages, 64);

  2380.   //人物状态窗口
  2381.     d := g_WMainImages.Images[806]; //惑怕  370
  2382.     if d <> nil then begin
  2383.       DStateWin.SetImgIndex(g_WMainImages, 806);
  2384.       DStateWin.Left := SCREENWIDTH - d.Width;
  2385.       DStateWin.Top := 0;
  2386.     end;

  2387.   DSWNecklace.Left := 38 + 130;
  2388.   DSWNecklace.Top := 52 + 35;
  2389.   DSWNecklace.Width := 34;
  2390.   DSWNecklace.Height := 31;
  2391.   DSWHelmet.Left := 38 + 77;
  2392.   DSWHelmet.Top := 52 + 41;
  2393.   DSWHelmet.Width := 18;
  2394.   DSWHelmet.Height := 18;
  2395.   DSWLight.Left := 38 + 130;
  2396.   DSWLight.Top := 52 + 73;
  2397.   DSWLight.Width := 34;
  2398.   DSWLight.Height := 31;
  2399.   DSWArmRingR.Left := 38 + 4;
  2400.   DSWArmRingR.Top := 52 + 124;
  2401.   DSWArmRingR.Width := 34;
  2402.   DSWArmRingR.Height := 31;
  2403.   DSWArmRingL.Left := 38 + 130;
  2404.   DSWArmRingL.Top := 52 + 124;
  2405.   DSWArmRingL.Width := 34;
  2406.   DSWArmRingL.Height := 31;
  2407.   DSWRingR.Left := 38 + 4;
  2408.   DSWRingR.Top := 52 + 163;
  2409.   DSWRingR.Width := 34;
  2410.   DSWRingR.Height := 31;
  2411.   DSWRingL.Left := 38 + 130;
  2412.   DSWRingL.Top := 52 + 163;
  2413.   DSWRingL.Width := 34;
  2414.   DSWRingL.Height := 31;
  2415.   DSWWeapon.Left := 38 + 9;
  2416.   DSWWeapon.Top := 52 + 28;
  2417.   DSWWeapon.Width := 47;
  2418.   DSWWeapon.Height := 87;
  2419.   DSWDress.Left := 38 + 58;
  2420.   DSWDress.Top := 52 + 70;
  2421.   DSWDress.Width := 53;
  2422.   DSWDress.Height := 112;

  2423.   DSWBujuk.Left := 42;
  2424.   DSWBujuk.Top := 254;
  2425.   DSWBujuk.Width := 34;
  2426.   DSWBujuk.Height := 31;

  2427.   DSWBelt.Left := 84;
  2428.   DSWBelt.Top := 254;
  2429.   DSWBelt.Width := 34;
  2430.   DSWBelt.Height := 31;

  2431.   DSWBoots.Left := 126;
  2432.   DSWBoots.Top := 254;
  2433.   DSWBoots.Width := 34;
  2434.   DSWBoots.Height := 31;

  2435.   DSWCharm.Left := 168;
  2436.   DSWCharm.Top := 254;
  2437.   DSWCharm.Width := 34;
  2438.   DSWCharm.Height := 31;

  2439.   DStMag1.Left := 38 + 8;
  2440.   DStMag1.Top := 52 + 7;
  2441.   DStMag1.Width := 31;
  2442.   DStMag1.Height := 33;

  2443.   DStMag2.Left := 38 + 8;
  2444.   DStMag2.Top := 52 + 44;
  2445.   DStMag2.Width := 31;
  2446.   DStMag2.Height := 33;

  2447.   DStMag3.Left := 38 + 8;
  2448.   DStMag3.Top := 52 + 82;
  2449.   DStMag3.Width := 31;
  2450.   DStMag3.Height := 33;

  2451.   DStMag4.Left := 38 + 8;
  2452.   DStMag4.Top := 52 + 119;
  2453.   DStMag4.Width := 31;
  2454.   DStMag4.Height := 33;

  2455.   DStMag5.Left := 38 + 8;
  2456.   DStMag5.Top := 52 + 156;
  2457.   DStMag5.Width := 31;
  2458.   DStMag5.Height := 33;

  2459.   DStMag6.Left := 38 + 8;
  2460.   DStMag6.Top := 52 + 195;
  2461.   DStMag6.Width := 31;
  2462.   DStMag6.Height := 33;


  2463.   DStPageUp.SetImgIndex(g_WMainImages, 398);
  2464.   DStPageDown.SetImgIndex(g_WMainImages, 396);
  2465.   DStPageUp.Left := 213;
  2466.   DStPageUp.Top := 113;
  2467.   DStPageDown.Left := 213;
  2468.   DStPageDown.Top := 143;

  2469.   DCloseState.SetImgIndex(g_WMainImages, 371);
  2470.   DCloseState.Left := 8;
  2471.   DCloseState.Top := 39;
  2472.   DPrevState.SetImgIndex(g_WMainImages, 373);
  2473.   DNextState.SetImgIndex(g_WMainImages, 372);
  2474.   DPrevState.Left := 7;
  2475.   DPrevState.Top := 128;
  2476.   DNextState.Left := 7;
  2477.   DNextState.Top := 187;

  2478.   //新的导航
  2479.   //装备
  2480.   DSPage1.Left := 6;
  2481.   DSPage1.Top := 61;
  2482.   DSPage1.Width := 20;
  2483.   DSPage1.Height := 40;
  2484.   //状态
  2485.   DSPage2.Left := 6;
  2486.   DSPage2.Top := 106;
  2487.   DSPage2.Width := 20;
  2488.   DSPage2.Height := 40;
  2489.   //属性
  2490.   DSPage3.Left := 6;
  2491.   DSPage3.Top := 152;
  2492.   DSPage3.Width := 20;
  2493.   DSPage3.Height := 40;
  2494.   //技能
  2495.   DSPage4.Left := 6;
  2496.   DSPage4.Top := 197;
  2497.   DSPage4.Width := 20;
  2498.   DSPage4.Height := 40;


  2499.   {-----------------------------------------------------------}

  2500.   //英雄状态窗口
  2501.   d := g_WMain3Images.Images[384];
  2502.   if d <> nil then begin
  2503.     DHeroStateWin.SetImgIndex(g_WMain3Images, 384);
  2504.     DHeroStateWin.Left := SCREENWIDTH - d.Width;
  2505.     DHeroStateWin.Top := 0;
  2506.   end;

  2507.   DHeroSWNecklace.Left := 38 + 130;
  2508.   DHeroSWNecklace.Top := 52 + 35;
  2509.   DHeroSWNecklace.Width := 34;
  2510.   DHeroSWNecklace.Height := 31;
  2511.   DHeroSWHelmet.Left := 38 + 77;
  2512.   DHeroSWHelmet.Top := 52 + 41;
  2513.   DHeroSWHelmet.Width := 18;
  2514.   DHeroSWHelmet.Height := 18;
  2515.   DHeroSWLight.Left := 38 + 130;
  2516.   DHeroSWLight.Top := 52 + 73;
  2517.   DHeroSWLight.Width := 34;
  2518.   DHeroSWLight.Height := 31;
  2519.   DHeroSWArmRingR.Left := 38 + 4;
  2520.   DHeroSWArmRingR.Top := 52 + 124;
  2521.   DHeroSWArmRingR.Width := 34;
  2522.   DHeroSWArmRingR.Height := 31;
  2523.   DHeroSWArmRingL.Left := 38 + 130;
  2524.   DHeroSWArmRingL.Top := 52 + 124;
  2525.   DHeroSWArmRingL.Width := 34;
  2526.   DHeroSWArmRingL.Height := 31;
  2527.   DHeroSWRingR.Left := 38 + 4;
  2528.   DHeroSWRingR.Top := 52 + 163;
  2529.   DHeroSWRingR.Width := 34;
  2530.   DHeroSWRingR.Height := 31;
  2531.   DHeroSWRingL.Left := 38 + 130;
  2532.   DHeroSWRingL.Top := 52 + 163;
  2533.   DHeroSWRingL.Width := 34;
  2534.   DHeroSWRingL.Height := 31;
  2535.   DHeroSWWeapon.Left := 38 + 9;
  2536.   DHeroSWWeapon.Top := 52 + 28;
  2537.   DHeroSWWeapon.Width := 47;
  2538.   DHeroSWWeapon.Height := 87;
  2539.   DHeroSWDress.Left := 38 + 58;
  2540.   DHeroSWDress.Top := 52 + 70;
  2541.   DHeroSWDress.Width := 53;
  2542.   DHeroSWDress.Height := 112;

  2543.   DHeroSWBujuk.Left := 42;
  2544.   DHeroSWBujuk.Top := 254;
  2545.   DHeroSWBujuk.Width := 34;
  2546.   DHeroSWBujuk.Height := 31;

  2547.   DHeroSWBelt.Left := 84;
  2548.   DHeroSWBelt.Top := 254;
  2549.   DHeroSWBelt.Width := 34;
  2550.   DHeroSWBelt.Height := 31;

  2551.   DHeroSWBoots.Left := 126;
  2552.   DHeroSWBoots.Top := 254;
  2553.   DHeroSWBoots.Width := 34;
  2554.   DHeroSWBoots.Height := 31;

  2555.   DHeroSWCharm.Left := 168;
  2556.   DHeroSWCharm.Top := 254;
  2557.   DHeroSWCharm.Width := 34;
  2558.   DHeroSWCharm.Height := 31;

  2559.   DHeroStMag1.Left := 38 + 8;
  2560.   DHeroStMag1.Top := 52 + 7;
  2561.   DHeroStMag1.Width := 31;
  2562.   DHeroStMag1.Height := 33;

  2563.   DHeroStMag2.Left := 38 + 8;
  2564.   DHeroStMag2.Top := 52 + 44;
  2565.   DHeroStMag2.Width := 31;
  2566.   DHeroStMag2.Height := 33;

  2567.   DHeroStMag3.Left := 38 + 8;
  2568.   DHeroStMag3.Top := 52 + 82;
  2569.   DHeroStMag3.Width := 31;
  2570.   DHeroStMag3.Height := 33;

  2571.   DHeroStMag4.Left := 38 + 8;
  2572.   DHeroStMag4.Top := 52 + 119;
  2573.   DHeroStMag4.Width := 31;
  2574.   DHeroStMag4.Height := 33;

  2575.   DHeroStMag5.Left := 38 + 8;
  2576.   DHeroStMag5.Top := 52 + 156;
  2577.   DHeroStMag5.Width := 31;
  2578.   DHeroStMag5.Height := 33;

  2579.   DHeroStMag6.Left := 38 + 8;
  2580.   DHeroStMag6.Top := 52 + 195;
  2581.   DHeroStMag6.Width := 31;
  2582.   DHeroStMag6.Height := 33;


  2583.   DHeroStPageUp.SetImgIndex(g_WMainImages, 398);
  2584.   DHeroStPageDown.SetImgIndex(g_WMainImages, 396);
  2585.   DHeroStPageUp.Left := 213;
  2586.   DHeroStPageUp.Top := 113;
  2587.   DHeroStPageDown.Left := 213;
  2588.   DHeroStPageDown.Top := 143;

  2589.   DCloseHeroState.SetImgIndex(g_WMainImages, 371);
  2590.   DCloseHeroState.Left := 8;
  2591.   DCloseHeroState.Top := 39;

  2592.   DPrevHeroState.SetImgIndex(g_WMainImages, 373);
  2593.   DNextHeroState.SetImgIndex(g_WMainImages, 372);
  2594.   DPrevHeroState.Left := 7;
  2595.   DPrevHeroState.Top := 128;
  2596.   DNextHeroState.Left := 7;
  2597.   DNextHeroState.Top := 187;

  2598.   {-----------------------------------------------------------}

  2599.   //人物状态窗口(查看别人信息)
  2600.   {d := g_WMain3Images.Images[207]; //惑怕  370
  2601.   if d <> nil then begin
  2602.     DUserState1.SetImgIndex(g_WMain3Images, 207);
  2603.     DUserState1.Left := SCREENWIDTH - d.Width - d.Width;
  2604.     DUserState1.Top := 0;
  2605.   end;
  2606.   }
  2607.   d := g_WUIBImages.Images[10]; //惑怕  370
  2608.   if d <> nil then begin
  2609.     DUserState1.SetImgIndex(g_WUIBImages, 10);
  2610.     DUserState1.Left := SCREENWIDTH - d.Width - d.Width;
  2611.     DUserState1.Top := 0;
  2612.   end else begin
  2613.     d := g_WMain3Images.Images[207]; //惑怕  370
  2614.     if d <> nil then begin
  2615.       DUserState1.SetImgIndex(g_WMain3Images, 207);
  2616.       DUserState1.Left := SCREENWIDTH - d.Width - d.Width;
  2617.       DUserState1.Top := 0;
  2618.     end;
  2619.   end;

  2620.   DNecklaceUS1.Left := 38 + 130;
  2621.   DNecklaceUS1.Top := 52 + 35;
  2622.   DNecklaceUS1.Width := 34;
  2623.   DNecklaceUS1.Height := 31;

  2624.   DHelmetUS1.Left := 38 + 77;
  2625.   DHelmetUS1.Top := 52 + 41;
  2626.   DHelmetUS1.Width := 18;
  2627.   DHelmetUS1.Height := 18;

  2628.   DLightUS1.Left := 38 + 130;
  2629.   DLightUS1.Top := 52 + 73;
  2630.   DLightUS1.Width := 34;
  2631.   DLightUS1.Height := 31;

  2632.   DArmringRUS1.Left := 38 + 4;
  2633.   DArmringRUS1.Top := 52 + 124;
  2634.   DArmringRUS1.Width := 34;
  2635.   DArmringRUS1.Height := 31;

  2636.   DArmringLUS1.Left := 38 + 130;
  2637.   DArmringLUS1.Top := 52 + 124;
  2638.   DArmringLUS1.Width := 34;
  2639.   DArmringLUS1.Height := 31;

  2640.   DRingRUS1.Left := 38 + 4;
  2641.   DRingRUS1.Top := 52 + 163;
  2642.   DRingRUS1.Width := 34;
  2643.   DRingRUS1.Height := 31;

  2644.   DRingLUS1.Left := 38 + 130;
  2645.   DRingLUS1.Top := 52 + 163;
  2646.   DRingLUS1.Width := 34;
  2647.   DRingLUS1.Height := 31;

  2648.   DWeaponUS1.Left := 38 + 9;
  2649.   DWeaponUS1.Top := 52 + 28;
  2650.   DWeaponUS1.Width := 47;
  2651.   DWeaponUS1.Height := 87;

  2652.   DDressUS1.Left := 38 + 58;
  2653.   DDressUS1.Top := 52 + 70;
  2654.   DDressUS1.Width := 53;
  2655.   DDressUS1.Height := 112;

  2656.   DBujukUS1.Left := 42;
  2657.   DBujukUS1.Top := 254;
  2658.   DBujukUS1.Width := 34;
  2659.   DBujukUS1.Height := 31;

  2660.   DBeltUS1.Left := 84;
  2661.   DBeltUS1.Top := 254;
  2662.   DBeltUS1.Width := 34;
  2663.   DBeltUS1.Height := 31;

  2664.   DBootsUS1.Left := 126;
  2665.   DBootsUS1.Top := 254;
  2666.   DBootsUS1.Width := 34;
  2667.   DBootsUS1.Height := 31;

  2668.   DCharmUS1.Left := 168;
  2669.   DCharmUS1.Top := 254;
  2670.   DCharmUS1.Width := 34;
  2671.   DCharmUS1.Height := 31;

  2672.   DCloseUS1.SetImgIndex(g_WMainImages, 371);
  2673.   DCloseUS1.Left := 8;
  2674.   DCloseUS1.Top := 39;

  2675.   {-------------------------------------------------------------}

  2676.    //物品包裹栏
  2677.   d := g_WMain2Images.Images[180];
  2678.   if (d = nil) or ((d <> nil) and (d.Width < 100)) then begin
  2679.     DItemBag.SetImgIndex(g_WMain3Images, 6);
  2680.   end else begin
  2681.     DItemBag.SetImgIndex(g_WMain2Images, 180)
  2682.   end;

  2683.   DItemBag.Left := 0;
  2684.   DItemBag.Top := 80;

  2685.   DItemGrid.Left := 29;
  2686.   DItemGrid.Top := 41;
  2687.   DItemGrid.Width := 286;
  2688.   DItemGrid.Height := 162;

  2689.   DOpenUpgrade.SetImgIndex(g_WMain2Images, 183);
  2690.   DOpenUpgrade.Left := 300 - 1;
  2691.   DOpenUpgrade.Top := 212;

  2692.   DUpgrade.SetImgIndex(g_WMain3Images, 462);
  2693.   DUpgrade.Left := 352;
  2694.   DUpgrade.Top := 83;

  2695.   DCloseUpgrade.SetImgIndex(g_WMainImages, 371);
  2696.   DCloseUpgrade.Left := 231; //248 - 16 - 1;
  2697.   DCloseUpgrade.Top := 0;

  2698.   DUpgradeItem1.Left := 101;
  2699.   DUpgradeItem1.Top := 33;
  2700.   DUpgradeItem1.Width := 36;
  2701.   DUpgradeItem1.Height := 36;

  2702.   DUpgradeItem2.Left := 40;
  2703.   DUpgradeItem2.Top := 110;
  2704.   DUpgradeItem2.Width := 36;
  2705.   DUpgradeItem2.Height := 36;

  2706.   DUpgradeItem3.Left := 160;
  2707.   DUpgradeItem3.Top := 112;
  2708.   DUpgradeItem3.Width := 36;
  2709.   DUpgradeItem3.Height := 36;

  2710.   d := g_WMain3Images.Images[463];
  2711.   if d <> nil then begin
  2712.     DStartUpgrade.SetImgIndex(g_WMain3Images, 463);
  2713.     DStartUpgrade.Left := (248 - 18 - d.Width) div 2 + 2;
  2714.     DStartUpgrade.Top := 212 - 37;
  2715.   end;
  2716.   {-------------------------------------------------------------}

  2717.    //英雄物品包裹栏

  2718.   d := g_WUIBImages.Images[14];

  2719.   if d <> nil then begin
  2720.     DHeroItemBag.SetImgIndex(g_WUIBImages, 14);
  2721.     DHeroItemBag.Left := SCREENWIDTH - d.Width;
  2722.     DHeroItemBag.Top := 0;
  2723.     DHeroItemBag.Width := d.Width;
  2724.     DHeroItemBag.Height := d.Height;
  2725.   end else begin
  2726.     d := g_WMain3Images.Images[375 + 4];
  2727.     if d <> nil then begin
  2728.       DHeroItemBag.SetImgIndex(g_WMain3Images, 375 + 4);
  2729.       DHeroItemBag.Left := SCREENWIDTH - d.Width;
  2730.       DHeroItemBag.Top := 0;
  2731.       DHeroItemBag.Width := d.Width;
  2732.       DHeroItemBag.Height := d.Height;
  2733.     end;
  2734.   end;
  2735.   {DHeroItemBag.Left := SCREENWIDTH - d.Width;
  2736.   DHeroItemBag.Top := 0;}
  2737.   {DHeroItemBag.SetImgIndex(g_WMain3Images, 375);
  2738.   DHeroItemBag.Left := SCREENWIDTH - 10 - DHeroItemBag.Width;
  2739.   DHeroItemBag.Top := 10;}

  2740.   DHeroItemGrid.Left := 15;
  2741.   DHeroItemGrid.Top := 15;

  2742.   DHeroItemGrid.Width := 228 - 50;
  2743.   DHeroItemGrid.Height := 32 * 2;

  2744.   DCloseHeroBag.SetImgIndex(g_WMainImages, 371);
  2745.   //DCloseHeroBag.Downed := True; //??
  2746.   DCloseHeroBag.Left := 228 - 20;
  2747.   DCloseHeroBag.Top := DHeroItemBag.Top;
  2748.   {DCloseHeroBag.Width := 14;
  2749.   DCloseHeroBag.Height := 20;}

  2750.   //黄金、修理物品、关闭包裹按钮
  2751.   DGold.SetImgIndex(g_WMainImages, 29);
  2752.   DGold.Left := 18;
  2753.   DGold.Top := 218;

  2754.   {DRepairItem.SetImgIndex(g_WMainImages, 26);
  2755.   DRepairItem.Left := 254;
  2756.   DRepairItem.Top := 183;
  2757.   DRepairItem.Width := 48;
  2758.   DRepairItem.Height := 22; }
  2759.   DCloseBag.SetImgIndex(g_WMainImages, 371);
  2760.   DCloseBag.Downed := True; //??
  2761.   DCloseBag.Left := 336;
  2762.   DCloseBag.Top := 59;
  2763.   DCloseBag.Width := 14;
  2764.   DCloseBag.Height := 20;


  2765. {  d := g_WUIBImages.Images[11]; //惑怕  370
  2766.   if d <> nil then begin
  2767.     DStateWin.SetImgIndex(g_WUIBImages, 11);
  2768.     DStateWin.Left := SCREENWIDTH - d.Width;
  2769.     DStateWin.Top := 0;
  2770.   end else
  2771.   d := g_WUIBImages.Images[10]; //惑怕  370
  2772.   if d <> nil then begin
  2773.     DStateWin.SetImgIndex(g_WUIBImages, 10);
  2774.     DStateWin.Left := SCREENWIDTH - d.Width;
  2775.     DStateWin.Top := 0;
  2776.   end else begin
  2777.   //人物状态窗口
  2778.     d := g_WMain3Images.Images[207]; //惑怕  370
  2779.     if d <> nil then begin
  2780.       DStateWin.SetImgIndex(g_WMain3Images, 207);
  2781.       DStateWin.Left := SCREENWIDTH - d.Width;
  2782.       DStateWin.Top := 0;
  2783.     end;
  2784.   end;  }

  2785. { d := g_WUIBImages.Images[10]; //惑怕  370
  2786.   if d <> nil then begin
  2787.     DStateWin.SetImgIndex(g_WUIBImages, 10);
  2788.     DStateWin.Left := SCREENWIDTH - d.Width;
  2789.     DStateWin.Top := 0;
  2790.   end else begin
  2791.     d := g_WMain3Images.Images[207]; //惑怕
  2792.     if d <> nil then begin
  2793.       DStateWin.SetImgIndex(g_WMain3Images, 207);
  2794.       DStateWin.Left := SCREENWIDTH - d.Width;
  2795.       DStateWin.Top := 0;
  2796.     end;
  2797.   end; }
  2798.   {-----------------------------------------------------------}

  2799.   //商人对话框
  2800.   d := g_WMainImages.Images[384];
  2801.   if d <> nil then begin
  2802.     DMerchantDlg.Left := 0;
  2803.     DMerchantDlg.Top := 0;
  2804.     DMerchantDlg.SetImgIndex(g_WMainImages, 384);
  2805.   end;
  2806.   DMerchantDlgClose.Left := 399;
  2807.   DMerchantDlgClose.Top := 1;
  2808.   DMerchantDlgClose.SetImgIndex(g_WMainImages, 64);

  2809. //NPC大对话框
  2810.   d := g_WCqFirImages.Images[0];
  2811.   if d <> nil then begin
  2812.     DMerchantBigDlg.Left := 0;
  2813.     DMerchantBigDlg.Top := 0;
  2814.     DMerchantBigDlg.SetImgIndex(g_WCqFirImages, 0);
  2815.   end;
  2816.   DMerchantBigDlgClose.Left := 551;
  2817.   DMerchantBigDlgClose.Top := 1;
  2818.   DMerchantBigDlgClose.SetImgIndex(g_WMainImages, 64);

  2819.   {-----------------------------------------------------------}
  2820.   //菜单对话框
  2821.   d := g_WMainImages.Images[385];
  2822.   if d <> nil then begin
  2823.     DMenuDlg.Left := 138;
  2824.     DMenuDlg.Top := 163;
  2825.     DMenuDlg.SetImgIndex(g_WMainImages, 385);
  2826.   end;
  2827.   DMenuPrev.Left := 43;
  2828.   DMenuPrev.Top := 175;
  2829.   DMenuPrev.SetImgIndex(g_WMainImages, 388);
  2830.   DMenuNext.Left := 90;
  2831.   DMenuNext.Top := 175;
  2832.   DMenuNext.SetImgIndex(g_WMainImages, 387);
  2833.   DMenuBuy.Left := 215;
  2834.   DMenuBuy.Top := 171;
  2835.   DMenuBuy.SetImgIndex(g_WMainImages, 386);
  2836.   DMenuClose.Left := 291;
  2837.   DMenuClose.Top := 0;
  2838.   DMenuClose.SetImgIndex(g_WMainImages, 64);

  2839.   {-----------------------------------------------------------}

  2840.   //出售
  2841.   d := g_WMainImages.Images[392];
  2842.   if d <> nil then begin
  2843.     DSellDlg.Left := 328;
  2844.     DSellDlg.Top := 163;
  2845.     DSellDlg.SetImgIndex(g_WMainImages, 392);
  2846.   end;
  2847.   DSellDlgOk.Left := 85;
  2848.   DSellDlgOk.Top := 150;
  2849.   DSellDlgOk.SetImgIndex(g_WMainImages, 393);
  2850.   DSellDlgClose.Left := 115;
  2851.   DSellDlgClose.Top := 0;
  2852.   DSellDlgClose.SetImgIndex(g_WMainImages, 64);
  2853.   DSellDlgSpot.Left := 27;
  2854.   DSellDlgSpot.Top := 67;
  2855.   DSellDlgSpot.Width := 61;
  2856.   DSellDlgSpot.Height := 52;

  2857.   {-----------------------------------------------------------}

  2858.   //设置魔法快捷对话框
  2859.   d := g_WMain3Images.Images[126];
  2860.   if d <> nil then begin
  2861.     DKeySelDlg.Left := (SCREENWIDTH - d.Width) div 2;
  2862.     DKeySelDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  2863.     DKeySelDlg.SetImgIndex(g_WMain3Images, 126);
  2864.   end;
  2865.   DKsIcon.Left := 51;
  2866.   DKsIcon.Top := 31;
  2867.   DKsF1.SetImgIndex(g_WMainImages, 232);
  2868.   DKsF1.Left := 25;
  2869.   DKsF1.Top := 78;
  2870.   DKsF2.SetImgIndex(g_WMainImages, 234);
  2871.   DKsF2.Left := 57;
  2872.   DKsF2.Top := 78;
  2873.   DKsF3.SetImgIndex(g_WMainImages, 236);
  2874.   DKsF3.Left := 89;
  2875.   DKsF3.Top := 78;
  2876.   DKsF4.SetImgIndex(g_WMainImages, 238);
  2877.   DKsF4.Left := 121;
  2878.   DKsF4.Top := 78;
  2879.   DKsF5.SetImgIndex(g_WMainImages, 240);
  2880.   DKsF5.Left := 160;
  2881.   DKsF5.Top := 78;
  2882.   DKsF6.SetImgIndex(g_WMainImages, 242);
  2883.   DKsF6.Left := 192;
  2884.   DKsF6.Top := 78;
  2885.   DKsF7.SetImgIndex(g_WMainImages, 244);
  2886.   DKsF7.Left := 224;
  2887.   DKsF7.Top := 78;
  2888.   DKsF8.SetImgIndex(g_WMainImages, 246);
  2889.   DKsF8.Left := 256;
  2890.   DKsF8.Top := 78;

  2891.   DKsConF1.SetImgIndex(g_WMain3Images, 132);
  2892.   DKsConF1.Left := 25;
  2893.   DKsConF1.Top := 120;
  2894.   DKsConF2.SetImgIndex(g_WMain3Images, 134);
  2895.   DKsConF2.Left := 57;
  2896.   DKsConF2.Top := 120;
  2897.   DKsConF3.SetImgIndex(g_WMain3Images, 136);
  2898.   DKsConF3.Left := 89;
  2899.   DKsConF3.Top := 120;
  2900.   DKsConF4.SetImgIndex(g_WMain3Images, 138);
  2901.   DKsConF4.Left := 121;
  2902.   DKsConF4.Top := 120;
  2903.   DKsConF5.SetImgIndex(g_WMain3Images, 140);
  2904.   DKsConF5.Left := 160;
  2905.   DKsConF5.Top := 120;
  2906.   DKsConF6.SetImgIndex(g_WMain3Images, 142);
  2907.   DKsConF6.Left := 192;
  2908.   DKsConF6.Top := 120;
  2909.   DKsConF7.SetImgIndex(g_WMain3Images, 144);
  2910.   DKsConF7.Left := 224;
  2911.   DKsConF7.Top := 120;
  2912.   DKsConF8.SetImgIndex(g_WMain3Images, 146);
  2913.   DKsConF8.Left := 256;
  2914.   DKsConF8.Top := 120;


  2915.   DKsNone.SetImgIndex(g_WMain3Images, 129);
  2916.   DKsNone.Left := 296;
  2917.   DKsNone.Top := 78;

  2918.   DKsOk.SetImgIndex(g_WMain3Images, 127);
  2919.   DKsOk.Left := 296;
  2920.   DKsOk.Top := 120;

  2921.   {d := g_WMainImages.Images[229];
  2922.   if d <> nil then begin
  2923.     DKeySelDlg.Left := (SCREENWIDTH - d.Width) div 2;
  2924.     DKeySelDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  2925.     DKeySelDlg.SetImgIndex(g_WMainImages, 229);
  2926.   end;
  2927.   DKsIcon.Left := 52; //DMagIcon...
  2928.   DKsIcon.Top := 29;
  2929.   DKsF1.SetImgIndex(g_WMainImages, 232);
  2930.   DKsF1.Left := 34;
  2931.   DKsF1.Top := 83;
  2932.   DKsF2.SetImgIndex(g_WMainImages, 234);
  2933.   DKsF2.Left := 66;
  2934.   DKsF2.Top := 83;
  2935.   DKsF3.SetImgIndex(g_WMainImages, 236);
  2936.   DKsF3.Left := 98;
  2937.   DKsF3.Top := 83;
  2938.   DKsF4.SetImgIndex(g_WMainImages, 238);
  2939.   DKsF4.Left := 130;
  2940.   DKsF4.Top := 83;
  2941.   DKsF5.SetImgIndex(g_WMainImages, 240);
  2942.   DKsF5.Left := 171;
  2943.   DKsF5.Top := 83;
  2944.   DKsF6.SetImgIndex(g_WMainImages, 242);
  2945.   DKsF6.Left := 203;
  2946.   DKsF6.Top := 83;
  2947.   DKsF7.SetImgIndex(g_WMainImages, 244);
  2948.   DKsF7.Left := 235;
  2949.   DKsF7.Top := 83;
  2950.   DKsF8.SetImgIndex(g_WMainImages, 246);
  2951.   DKsF8.Left := 267;
  2952.   DKsF8.Top := 83;

  2953.   DKsNone.SetImgIndex(g_WMainImages, 230);
  2954.   DKsNone.Left := 299;
  2955.   DKsNone.Top := 83;
  2956.   DKsOk.SetImgIndex(g_WMainImages, 62);
  2957.   DKsOk.Left := 222;
  2958.   DKsOk.Top := 131; }

  2959.   {-----------------------------------------------------------}
  2960.   //组对话框
  2961.   d := g_WMainImages.Images[120];
  2962.   if d <> nil then begin
  2963.     DGroupDlg.Left := (SCREENWIDTH - d.Width) div 2;
  2964.     DGroupDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  2965.     DGroupDlg.SetImgIndex(g_WMainImages, 120);
  2966.   end;
  2967.   DGrpDlgClose.SetImgIndex(g_WMainImages, 64);
  2968.   DGrpDlgClose.Left := 260;
  2969.   DGrpDlgClose.Top := 0;
  2970.   DGrpAllowGroup.SetImgIndex(g_WMainImages, 122);
  2971.   DGrpAllowGroup.Left := 20;
  2972.   DGrpAllowGroup.Top := 18;
  2973.   DGrpCreate.SetImgIndex(g_WMainImages, 123);
  2974.   DGrpCreate.Left := 21 + 1;
  2975.   DGrpCreate.Top := 202 + 1;
  2976.   DGrpAddMem.SetImgIndex(g_WMainImages, 124);
  2977.   DGrpAddMem.Left := 96 + 1;
  2978.   DGrpAddMem.Top := 202 + 1;
  2979.   DGrpDelMem.SetImgIndex(g_WMainImages, 125);
  2980.   DGrpDelMem.Left := 171 + 1;
  2981.   DGrpDelMem.Top := 202 + 1;

  2982.   {-----------------------------------------------------------}
  2983.   //交易对话框
  2984.   d := g_WMainImages.Images[389]; //卖出方
  2985.   if d <> nil then begin
  2986.     DDealDlg.Left := SCREENWIDTH - d.Width;
  2987.     DDealDlg.Top := 0;
  2988.     DDealDlg.SetImgIndex(g_WMainImages, 389);
  2989.   end;
  2990.   DDGrid.Left := 21;
  2991.   DDGrid.Top := 56;
  2992.   DDGrid.Width := 36 * 5;
  2993.   DDGrid.Height := 33 * 2;
  2994.   DDealOk.SetImgIndex(g_WMainImages, 391);
  2995.   DDealOk.Left := 155;
  2996.   DDealOk.Top := 193 - 65;
  2997.   DDealClose.SetImgIndex(g_WMainImages, 64);
  2998.   DDealClose.Left := 220;
  2999.   DDealClose.Top := 42;
  3000.   DDGold.SetImgIndex(g_WMainImages, 28);
  3001.   DDGold.Left := 11;
  3002.   DDGold.Top := 202 - 65;

  3003.   d := g_WMainImages.Images[390]; //买进方
  3004.   if d <> nil then begin
  3005.     DDealRemoteDlg.Left := DDealDlg.Left - d.Width;
  3006.     DDealRemoteDlg.Top := 0;
  3007.     DDealRemoteDlg.SetImgIndex(g_WMainImages, 390);
  3008.   end;
  3009.   DDRGrid.Left := 21;
  3010.   DDRGrid.Top := 56;
  3011.   DDRGrid.Width := 36 * 5;
  3012.   DDRGrid.Height := 33 * 2;
  3013.   DDRGold.SetImgIndex(g_WMainImages, 28);
  3014.   DDRGold.Left := 11;
  3015.   DDRGold.Top := 202 - 65;

  3016. //商铺
  3017.   {-----------------------------------------------------------}

  3018.   d := g_WMain3Images.Images[298];
  3019.   if d <> nil then begin
  3020.     DShop.Left := (SCREENWIDTH - d.Width) div 2;
  3021.     DShop.Top := 0 {(SCREENHEIGHT - d.Height) div 2};
  3022.     DShop.SetImgIndex(g_WMain3Images, 298);
  3023.   end;
  3024.   DJewelry.Left := 176;
  3025.   DJewelry.Top := 13;
  3026.   DJewelry.SetImgIndex(g_WMain3Images, 299); {首饰}

  3027.   DMedicine.Left := 234;
  3028.   DMedicine.Top := 13;
  3029.   DMedicine.SetImgIndex(g_WMain3Images, 300); {补给}

  3030.   DEnhance.Left := 292 + 1;
  3031.   DEnhance.Top := 13;
  3032.   DEnhance.SetImgIndex(g_WMain3Images, 301); {强化}

  3033.   Dfriend.Left := 350 - 1;
  3034.   Dfriend.Top := 13;
  3035.   Dfriend.SetImgIndex(g_WMain3Images, 302); {好友}

  3036.   DLimit.Left := 408 - 1;
  3037.   DLimit.Top := 13;
  3038.   DLimit.SetImgIndex(g_WMain3Images, 303); {限量}

  3039.   DShopExit.SetImgIndex(g_WMainImages, 64);
  3040.   DShopExit.Left := 600 + 6;
  3041.   DShopExit.Top := 5;


  3042.   DPrevShop.Left := 197;
  3043.   DPrevShop.Top := 349;
  3044.   DPrevShop.SetImgIndex(g_WMainImages, 388); {上一页}

  3045.   DNextShop.Left := 287;
  3046.   DNextShop.Top := 349;
  3047.   DNextShop.SetImgIndex(g_WMainImages, 387); {下一页}

  3048.   DShopBuy.Left := 328;
  3049.   DShopBuy.Top := 364;
  3050.   DShopBuy.SetImgIndex(g_WMain3Images, 304); {购买}

  3051.   DShopFree.Left := DShopBuy.Left + 58;
  3052.   DShopFree.Top := 364;
  3053.   DShopFree.SetImgIndex(g_WMain3Images, 305); {赠送}

  3054.   DShopClose.Left := DShopFree.Left + 58;
  3055.   DShopClose.Top := 364;
  3056.   DShopClose.SetImgIndex(g_WMain3Images, 306); {购买}


  3057.   DShopItemGrid.Left := 178;
  3058.   DShopItemGrid.Top := 58;
  3059.   DShopItemGrid.Width := 340;
  3060.   DShopItemGrid.Height := 270;

  3061.   DSuperShopItemGrid.Left := 517;
  3062.   DSuperShopItemGrid.Top := 65;
  3063.   DSuperShopItemGrid.Width := 90;
  3064.   DSuperShopItemGrid.Height := 65 * 5;

  3065.   DShopIntroduce.Left := 15;
  3066.   DShopIntroduce.Width := 150;
  3067.   DShopIntroduce.Top := 25;
  3068.   DShopIntroduce.Height := 180;

  3069.   {-----------------------------------------------------------}
  3070.   //排行

  3071.   d := g_WMain3Images.Images[420];
  3072.   if d <> nil then begin
  3073.     DRankingDlg.Left := (SCREENWIDTH - d.Width) div 2;
  3074.     DRankingDlg.Top := (SCREENHEIGHT - d.Height) div 2 - 80;
  3075.     DRankingDlg.SetImgIndex(g_WMain3Images, 420);
  3076.   end;
  3077.   DBotRankingClose.Left := 326;
  3078.   DBotRankingClose.Top := 46;
  3079.   DBotRankingClose.SetImgIndex(g_WMainImages, 64);


  3080.   DBotCharRanking.Left := 28;
  3081.   DBotCharRanking.Top := 61;
  3082.   DBotCharRanking.SetImgIndex(g_WMain3Images, 443);

  3083.   DBotHeroRanking.Left := 122;
  3084.   DBotHeroRanking.Top := 61;
  3085.   DBotHeroRanking.SetImgIndex(g_WMain3Images, 444);

  3086.   DBotMasterRanking.Left := 220;
  3087.   DBotMasterRanking.Top := 61;
  3088.   DBotMasterRanking.SetImgIndex(g_WMain3Images, 445);


  3089.   d := g_WMain3Images.Images[427];
  3090.   if d <> nil then begin
  3091.     DBotActorRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3092.     DBotActorRanking.Top := 92 + (248 - d.Height * 4) div 5;
  3093.     DBotActorRanking.SetImgIndex(g_WMain3Images, 427);
  3094.   end;

  3095.   d := g_WMain3Images.Images[431];
  3096.   if d <> nil then begin
  3097.     DBotWarriorRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3098.     DBotWarriorRanking.Top := 92 + d.Height + (248 - d.Height * 4) div 5 * 2;
  3099.     DBotWarriorRanking.SetImgIndex(g_WMain3Images, 431);
  3100.   end;

  3101.   d := g_WMain3Images.Images[433];
  3102.   if d <> nil then begin
  3103.     DBotWizzardRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3104.     DBotWizzardRanking.Top := 92 + d.Height * 2 + (248 - d.Height * 4) div 5 * 3;
  3105.     DBotWizzardRanking.SetImgIndex(g_WMain3Images, 433);
  3106.   end;

  3107.   d := g_WMain3Images.Images[435];
  3108.   if d <> nil then begin
  3109.     DBotMonkRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3110.     DBotMonkRanking.Top := 92 + d.Height * 3 + (248 - d.Height * 4) div 5 * 4;
  3111.     DBotMonkRanking.SetImgIndex(g_WMain3Images, 435);
  3112.   end;


  3113.   d := g_WMain3Images.Images[429];
  3114.   if d <> nil then begin
  3115.     DBotHeroActorRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3116.     DBotHeroActorRanking.Top := 92 + (248 - d.Height * 4) div 5;
  3117.     DBotHeroActorRanking.SetImgIndex(g_WMain3Images, 429);
  3118.   end;

  3119.   d := g_WMain3Images.Images[437];
  3120.   if d <> nil then begin
  3121.     DBotHeroWarriorRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3122.     DBotHeroWarriorRanking.Top := 92 + d.Height + (248 - d.Height * 4) div 5 * 2;
  3123.     DBotHeroWarriorRanking.SetImgIndex(g_WMain3Images, 437);
  3124.   end;

  3125.   d := g_WMain3Images.Images[439];
  3126.   if d <> nil then begin
  3127.     DBotHeroWizzardRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3128.     DBotHeroWizzardRanking.Top := 92 + d.Height * 2 + (248 - d.Height * 4) div 5 * 3;
  3129.     DBotHeroWizzardRanking.SetImgIndex(g_WMain3Images, 439);
  3130.   end;

  3131.   d := g_WMain3Images.Images[441];
  3132.   if d <> nil then begin
  3133.     DBotHeroMonkRanking.Left := (DRankingDlg.Width - d.Width) div 2;
  3134.     DBotHeroMonkRanking.Top := 92 + d.Height * 3 + (248 - d.Height * 4) div 5 * 4;
  3135.     DBotHeroMonkRanking.SetImgIndex(g_WMain3Images, 441);
  3136.   end;


  3137.   DBotRankingHome.Left := 22;
  3138.   DBotRankingHome.Top := 344;
  3139.   DBotRankingHome.SetImgIndex(g_WMain3Images, 450);

  3140.   DBotRankingUp.Left := 22 + 55;
  3141.   DBotRankingUp.Top := 344;
  3142.   DBotRankingUp.SetImgIndex(g_WMain3Images, 452);

  3143.   DBotRankingDown.Left := 22 + 55 * 2 - 3;
  3144.   DBotRankingDown.Top := 344;
  3145.   DBotRankingDown.SetImgIndex(g_WMain3Images, 454);

  3146.   DBotRankingLast.Left := 22 + 55 * 3 - 6;
  3147.   DBotRankingLast.Top := 344;
  3148.   DBotRankingLast.SetImgIndex(g_WMain3Images, 456);

  3149.   DBotRankingSelf.Left := 244;
  3150.   DBotRankingSelf.Top := 344;
  3151.   DBotRankingSelf.SetImgIndex(g_WMain3Images, 458);

  3152.   RankingPageChanged(DBotCharRanking);


  3153.   {-----------------------------------------------------------}
  3154.   //拍卖
  3155.   //d := g_WMain3Images.Images[176];
  3156.   //if d <> nil then begin
  3157.   DUserSellOff.Left := 0;
  3158.   DUserSellOff.Top := 0;
  3159.   DUserSellOff.SetImgIndex(g_WMain3Images, 176);
  3160. // end;

  3161.   EdSearch.Left := 12;
  3162.   EdSearch.Top := 328;
  3163.   EdSearch.Width := 136;
  3164.   EdSearch.Text := '';

  3165.   DSellClose.Left := 446;
  3166.   DSellClose.Top := 6;
  3167.   DSellClose.SetImgIndex(g_WMainImages, 64);

  3168.   DSellItem.Left := 224;
  3169.   DSellItem.Top := 262;

  3170.   DSearchSellOff.Left := 146;
  3171.   DSearchSellOff.Top := 325;
  3172.   DSearchSellOff.SetImgIndex(g_WMain3Images, 182);

  3173.   DBuySellItem.Left := 330;
  3174.   DBuySellItem.Top := 325;
  3175.   DBuySellItem.SetImgIndex(g_WMain3Images, 178);

  3176.   DCloseSell.Left := 397;
  3177.   DCloseSell.Top := 325;
  3178.   DCloseSell.SetImgIndex(g_WMain3Images, 180);

  3179.   DPrevSell.Left := 215;
  3180.   DPrevSell.Top := 355;
  3181.   DPrevSell.SetImgIndex(g_WMainImages, 388);

  3182.   DRefreshSell.Left := 259;
  3183.   DRefreshSell.Top := 356;
  3184.   DRefreshSell.SetImgIndex(g_WMain3Images, 177);

  3185.   DNextSell.Left := 302;
  3186.   DNextSell.Top := 355;
  3187.   DNextSell.SetImgIndex(g_WMainImages, 387);

  3188.   {
  3189.   d := g_WCqFirImages.Images[43];
  3190.   if d <> nil then begin
  3191.     DUserSellOff.Left := 0;
  3192.     DUserSellOff.Top := 0 ;
  3193.     DUserSellOff.SetImgIndex(g_WCqFirImages, 43);
  3194.   end;

  3195.   EdSearch.Left := 34;
  3196.   EdSearch.Top := 354;
  3197.   EdSearch.Width := 142;
  3198.   EdSearch.Text := '';

  3199.   DSellClose.Left := DUserSellOff.Width - 25;
  3200.   DSellClose.Top := 5;
  3201.   DSellClose.SetImgIndex(g_WCqFirImages, 55);

  3202.   DSellItem.Left := 392 - 145;
  3203.   DSellItem.Top := 312 - 15;

  3204.   DSearchSellOff.Left := 180;
  3205.   DSearchSellOff.Top := 353;
  3206.   DSearchSellOff.SetImgIndex(g_WCqFirImages, 49);

  3207.   DBuySellItem.Left := 346;
  3208.   DBuySellItem.Top := 353;
  3209.   DBuySellItem.SetImgIndex(g_WCqFirImages, 51);

  3210.   DCloseSell.Left := 416;
  3211.   DCloseSell.Top := 353;
  3212.   DCloseSell.SetImgIndex(g_WCqFirImages, 46);

  3213.   DPrevSell.Left := 198;
  3214.   DPrevSell.Top := 389;
  3215.   DPrevSell.SetImgIndex(g_WCqFirImages, 45);

  3216.   DRefreshSell.Left := 247;
  3217.   DRefreshSell.Top := 388;
  3218.   DRefreshSell.SetImgIndex(g_WCqFirImages, 48);

  3219.   DNextSell.Left := 302;
  3220.   DNextSell.Top := 388;
  3221.   DNextSell.SetImgIndex(g_WCqFirImages, 44);

  3222.   }
  3223.   {-----------------------------------------------------------}

  3224.   d := g_WMain3Images.Images[510];
  3225.   if d <> nil then begin
  3226.     DBoxItems.Left := (SCREENWIDTH - d.Width) div 2;
  3227.     DBoxItems.Top := (SCREENHEIGHT - d.Height) div 2;
  3228.     DBoxItems.SetImgIndex(g_WMain3Images, 510);
  3229.   end;

  3230.   DBoxItemGrid.Left := 22;
  3231.   DBoxItemGrid.Top := 16;
  3232.   DBoxItemGrid.ColWidth := 52;
  3233.   DBoxItemGrid.RowHeight := 48;
  3234.   DBoxItemGrid.Width := DBoxItemGrid.ColWidth * 3;
  3235.   DBoxItemGrid.Height := DBoxItemGrid.RowHeight * 3;

  3236.   {DBoxItemGrid.Width := DBoxItems.Width - 44;
  3237.   DBoxItemGrid.Height := DBoxItems.Height - 44 - 10;  }

  3238.   d := g_WMain3Images.Images[520];
  3239.   if d <> nil then begin
  3240.     DItemBox.Left := (SCREENWIDTH - d.Width) div 2;
  3241.     DItemBox.Top := (SCREENHEIGHT - d.Height) div 2 - 60;
  3242.     DItemBox.SetImgIndex(g_WMain3Images, 520);
  3243.   end;

  3244.   DItemLock.Left := 176;
  3245.   DItemLock.Top := 190;
  3246.   DItemLock.Width := 22;
  3247.   DItemLock.Height := 32;

  3248. { d := g_WMain3Images.Images[510];
  3249.   if d <> nil then begin
  3250.     DGetBoxItem.SetImgIndex(g_WMain3Images, 510);
  3251.     DGetBoxItem.Left := (DBoxItems.Width - d.Width) div 2;
  3252.     DGetBoxItem.Top := DBoxItems.Top - d.Height;
  3253.   end;  }

  3254.   {d := g_WMain3Images.Images[515];
  3255.   if d <> nil then begin
  3256.     DGetBoxItemFlash.Left := (DItemBox.Width - d.Width) div 2;
  3257.     DGetBoxItemFlash.Top := DItemBox.Height - 50 - 2;
  3258.   end;  }

  3259.   DGetBoxItemFlash.Left := (DBoxItems.Width - 20) div 2;
  3260.   DGetBoxItemFlash.Top := 180;
  3261.   DGetBoxItemFlash.Width := 20;
  3262.   DGetBoxItemFlash.Height := 15;

  3263.   d := g_WUIBImages.Images[0];
  3264.   if d <> nil then begin
  3265.     DBook.SetImgIndex(g_WUIBImages, 0);
  3266.     DBook.Left := (SCREENWIDTH - d.Width) div 2;
  3267.     DBook.Top := (SCREENHEIGHT - d.Height) div 2 - 90;
  3268.   end;

  3269.   d := g_WBookImages.Images[0];
  3270.   if d <> nil then begin
  3271.     DBookPage.SetImgIndex(g_WBookImages, 0);
  3272.     DBookPage.Left := (DBook.Width - d.Width) div 2;
  3273.     DBookPage.Top := (DBook.Height - d.Height) div 2;
  3274.   end;

  3275.   d := g_WUIBImages.Images[1];
  3276.   if d <> nil then begin
  3277.     DBookClose.SetImgIndex(g_WUIBImages, 1);
  3278.     DBookClose.Left := DBook.Width - d.Width - 3;
  3279.     DBookClose.Top := 0;
  3280.   end;

  3281.   d := g_WUIBImages.Images[5];
  3282.   if d <> nil then begin
  3283.     DBookPrevPage.SetImgIndex(g_WUIBImages, 5);
  3284.     DBookPrevPage.Left := 48;
  3285.     DBookPrevPage.Top := 318;
  3286.   end;

  3287.   d := g_WUIBImages.Images[3];
  3288.   if d <> nil then begin
  3289.     DBookNextPage.SetImgIndex(g_WUIBImages, 3);
  3290.     DBookNextPage.Left := 470 - d.Width;
  3291.     DBookNextPage.Top := 318;
  3292.   end;

  3293.   //行会
  3294.   d := g_WMainImages.Images[180];
  3295.   if d <> nil then begin
  3296.     DGuildDlg.Left := 0;
  3297.     DGuildDlg.Top := 0;
  3298.     DGuildDlg.SetImgIndex(g_WMainImages, 180);
  3299.   end;
  3300.   DGDClose.Left := 584;
  3301.   DGDClose.Top := 6;
  3302.   DGDClose.SetImgIndex(g_WMainImages, 64);
  3303.   DGDHome.Left := 13;
  3304.   DGDHome.Top := 411;
  3305.   DGDHome.SetImgIndex(g_WMainImages, 198);
  3306.   DGDList.Left := 13;
  3307.   DGDList.Top := 429;
  3308.   DGDList.SetImgIndex(g_WMainImages, 200);
  3309.   DGDChat.Left := 94;
  3310.   DGDChat.Top := 429;
  3311.   DGDChat.SetImgIndex(g_WMainImages, 190);
  3312.   DGDAddMem.Left := 243;
  3313.   DGDAddMem.Top := 411;
  3314.   DGDAddMem.SetImgIndex(g_WMainImages, 182);
  3315.   DGDDelMem.Left := 243;
  3316.   DGDDelMem.Top := 429;
  3317.   DGDDelMem.SetImgIndex(g_WMainImages, 192);
  3318.   DGDEditNotice.Left := 325;
  3319.   DGDEditNotice.Top := 411;
  3320.   DGDEditNotice.SetImgIndex(g_WMainImages, 196);
  3321.   DGDEditGrade.Left := 325;
  3322.   DGDEditGrade.Top := 429;
  3323.   DGDEditGrade.SetImgIndex(g_WMainImages, 194);
  3324.   DGDAlly.Left := 407;
  3325.   DGDAlly.Top := 411;
  3326.   DGDAlly.SetImgIndex(g_WMainImages, 184);
  3327.   DGDBreakAlly.Left := 407;
  3328.   DGDBreakAlly.Top := 429;
  3329.   DGDBreakAlly.SetImgIndex(g_WMainImages, 186);
  3330.   DGDWar.Left := 529;
  3331.   DGDWar.Top := 411;
  3332.   DGDWar.SetImgIndex(g_WMainImages, 202);
  3333.   DGDCancelWar.Left := 529;
  3334.   DGDCancelWar.Top := 429;
  3335.   DGDCancelWar.SetImgIndex(g_WMainImages, 188);

  3336.   DGDUp.Left := 595;
  3337.   DGDUp.Top := 239;
  3338.   DGDUp.SetImgIndex(g_WMainImages, 373);
  3339.   DGDDown.Left := 595;
  3340.   DGDDown.Top := 291;
  3341.   DGDDown.SetImgIndex(g_WMainImages, 372);

  3342.   //行会通告编辑框
  3343.   DGuildEditNotice.SetImgIndex(g_WMainImages, 204);
  3344.   DGEOk.SetImgIndex(g_WMainImages, 361);
  3345.   DGEOk.Left := 514;
  3346.   DGEOk.Top := 287;
  3347.   DGEClose.SetImgIndex(g_WMainImages, 64);
  3348.   DGEClose.Left := 584;
  3349.   DGEClose.Top := 6;


  3350.   {-----------------------------------------------------------}
  3351.   //属性调整对话框
  3352.   DAdjustAbility.SetImgIndex(g_WMainImages, 226);
  3353.   DAdjustAbilClose.SetImgIndex(g_WMainImages, 64);
  3354.   DAdjustAbilClose.Left := 316;
  3355.   DAdjustAbilClose.Top := 1;
  3356.   DAdjustAbilOk.SetImgIndex(g_WMainImages, 224);
  3357.   DAdjustAbilOk.Left := 220;
  3358.   DAdjustAbilOk.Top := 298;

  3359.   DPlusDC.SetImgIndex(g_WMainImages, 212);
  3360.   DPlusDC.Left := 217;
  3361.   DPlusDC.Top := 101;
  3362.   DPlusMC.SetImgIndex(g_WMainImages, 212);
  3363.   DPlusMC.Left := 217;
  3364.   DPlusMC.Top := 121;
  3365.   DPlusSC.SetImgIndex(g_WMainImages, 212);
  3366.   DPlusSC.Left := 217;
  3367.   DPlusSC.Top := 140;
  3368.   DPlusAC.SetImgIndex(g_WMainImages, 212);
  3369.   DPlusAC.Left := 217;
  3370.   DPlusAC.Top := 160;
  3371.   DPlusMAC.SetImgIndex(g_WMainImages, 212);
  3372.   DPlusMAC.Left := 217;
  3373.   DPlusMAC.Top := 181;
  3374.   DPlusHP.SetImgIndex(g_WMainImages, 212);
  3375.   DPlusHP.Left := 217;
  3376.   DPlusHP.Top := 201;
  3377.   DPlusMP.SetImgIndex(g_WMainImages, 212);
  3378.   DPlusMP.Left := 217;
  3379.   DPlusMP.Top := 220;
  3380.   DPlusHit.SetImgIndex(g_WMainImages, 212);
  3381.   DPlusHit.Left := 217;
  3382.   DPlusHit.Top := 240;
  3383.   DPlusSpeed.SetImgIndex(g_WMainImages, 212);
  3384.   DPlusSpeed.Left := 217;
  3385.   DPlusSpeed.Top := 261;

  3386.   DMinusDC.SetImgIndex(g_WMainImages, 214);
  3387.   DMinusDC.Left := 227 + 6;
  3388.   DMinusDC.Top := 101;
  3389.   DMinusMC.SetImgIndex(g_WMainImages, 214);
  3390.   DMinusMC.Left := 227 + 6;
  3391.   DMinusMC.Top := 121;
  3392.   DMinusSC.SetImgIndex(g_WMainImages, 214);
  3393.   DMinusSC.Left := 227 + 6;
  3394.   DMinusSC.Top := 140;
  3395.   DMinusAC.SetImgIndex(g_WMainImages, 214);
  3396.   DMinusAC.Left := 227 + 6;
  3397.   DMinusAC.Top := 160;
  3398.   DMinusMAC.SetImgIndex(g_WMainImages, 214);
  3399.   DMinusMAC.Left := 227 + 6;
  3400.   DMinusMAC.Top := 181;
  3401.   DMinusHP.SetImgIndex(g_WMainImages, 214);
  3402.   DMinusHP.Left := 227 + 6;
  3403.   DMinusHP.Top := 201;
  3404.   DMinusMP.SetImgIndex(g_WMainImages, 214);
  3405.   DMinusMP.Left := 227 + 6;
  3406.   DMinusMP.Top := 220;
  3407.   DMinusHit.SetImgIndex(g_WMainImages, 214);
  3408.   DMinusHit.Left := 227 + 6;
  3409.   DMinusHit.Top := 240;
  3410.   DMinusSpeed.SetImgIndex(g_WMainImages, 214);
  3411.   DMinusSpeed.Left := 227 + 6;
  3412.   DMinusSpeed.Top := 261;

  3413.   DEditAdjustIncrement.Left := 150;
  3414.   DEditAdjustIncrement.Top := 303;
  3415.   DEditAdjustIncrement.Width := 65;

  3416.   DLabelAdjustIncrement.Left := 34;
  3417.   DLabelAdjustIncrement.Top := 304;
  3418.   DLabelAdjustIncrement.Width := 116;
  3419.   DLabelAdjustIncrement.Height := 14;

  3420.   {d := g_WMain3Images.Images[34];
  3421.   if d <> nil then begin
  3422.     DFriendDlg.SetImgIndex(g_WMain3Images, 34);
  3423.     DFriendDlg.Left := 0;
  3424.     DFriendDlg.Top := 0;
  3425.   end;
  3426.   DFrdClose.SetImgIndex(g_WMainImages, 371);
  3427.   DFrdClose.Left := 247;
  3428.   DFrdClose.Top := 5;
  3429.   DFrdPgUp.SetImgIndex(g_WMainImages, 373);
  3430.   DFrdPgUp.Left := 259;
  3431.   DFrdPgUp.Top := 102;
  3432.   DFrdPgDn.SetImgIndex(g_WMainImages, 372);
  3433.   DFrdPgDn.Left := 259;
  3434.   DFrdPgDn.Top := 154;
  3435.   DFrdFriend.SetImgIndex(g_WMain3Images, 42);
  3436.   DFrdFriend.Left := 15;
  3437.   DFrdFriend.Top := 35;
  3438.   DFrdBlackList.SetImgIndex(g_WMainImages, 573);
  3439.   DFrdBlackList.Left := 130;
  3440.   DFrdBlackList.Top := 35;
  3441.   DFrdAdd.SetImgIndex(g_WMainImages, 554);
  3442.   DFrdAdd.Left := 90;
  3443.   DFrdAdd.Top := 233;
  3444.   DFrdDel.SetImgIndex(g_WMainImages, 556);
  3445.   DFrdDel.Left := 124;
  3446.   DFrdDel.Top := 233;
  3447.   DFrdMemo.SetImgIndex(g_WMainImages, 558);
  3448.   DFrdMemo.Left := 158;
  3449.   DFrdMemo.Top := 233;
  3450.   DFrdMail.SetImgIndex(g_WMainImages, 560);
  3451.   DFrdMail.Left := 192;
  3452.   DFrdMail.Top := 233;
  3453.   DFrdWhisper.SetImgIndex(g_WMainImages, 562);
  3454.   DFrdWhisper.Left := 226;
  3455.   DFrdWhisper.Top := 233;  }

  3456.   d := g_WMainImages.Images[536];
  3457.   if d <> nil then begin
  3458.     DMailListDlg.SetImgIndex(g_WMainImages, 536);
  3459.     DMailListDlg.Left := 512;
  3460.     DMailListDlg.Top := 0;
  3461.   end;
  3462.   DMailListClose.SetImgIndex(g_WMainImages, 371);
  3463.   DMailListClose.Left := 247;
  3464.   DMailListClose.Top := 5;
  3465.   DMailListPgUp.SetImgIndex(g_WMainImages, 373);
  3466.   DMailListPgUp.Left := 259;
  3467.   DMailListPgUp.Top := 102;
  3468.   DMailListPgDn.SetImgIndex(g_WMainImages, 372);
  3469.   DMailListPgDn.Left := 259;
  3470.   DMailListPgDn.Top := 154;
  3471.   DMLReply.SetImgIndex(g_WMainImages, 564);
  3472.   DMLReply.Left := 90;
  3473.   DMLReply.Top := 233;
  3474.   DMLRead.SetImgIndex(g_WMainImages, 566);
  3475.   DMLRead.Left := 124;
  3476.   DMLRead.Top := 233;
  3477.   DMLDel.SetImgIndex(g_WMainImages, 556);
  3478.   DMLDel.Left := 158;
  3479.   DMLDel.Top := 233;
  3480.   DMLLock.SetImgIndex(g_WMainImages, 568);
  3481.   DMLLock.Left := 192;
  3482.   DMLLock.Top := 233;
  3483.   DMLBlock.SetImgIndex(g_WMainImages, 570);
  3484.   DMLBlock.Left := 226;
  3485.   DMLBlock.Top := 233;

  3486.   d := g_WMainImages.Images[536];
  3487.   if d <> nil then begin
  3488.     DBlockListDlg.SetImgIndex(g_WMainImages, 536);
  3489.     DBlockListDlg.Left := 512;
  3490.     DBlockListDlg.Top := 0;
  3491.   end;
  3492.   DBlockListClose.SetImgIndex(g_WMainImages, 371);
  3493.   DBlockListClose.Left := 247;
  3494.   DBlockListClose.Top := 5;
  3495.   DBLPgUp.SetImgIndex(g_WMainImages, 373);
  3496.   DBLPgUp.Left := 259;
  3497.   DBLPgUp.Top := 102;
  3498.   DBLPgDn.SetImgIndex(g_WMainImages, 372);
  3499.   DBLPgDn.Left := 259;
  3500.   DBLPgDn.Top := 154;
  3501.   DBLAdd.SetImgIndex(g_WMainImages, 554);
  3502.   DBLAdd.Left := 192;
  3503.   DBLAdd.Top := 233;
  3504.   DBLDel.SetImgIndex(g_WMainImages, 556);
  3505.   DBLDel.Left := 226;
  3506.   DBLDel.Top := 233;

  3507.   d := g_WMainImages.Images[537];
  3508.   if d <> nil then begin
  3509.     DMemo.SetImgIndex(g_WMainImages, 537);
  3510.     DMemo.Left := 290;
  3511.     DMemo.Top := 0;
  3512.   end;
  3513.   DMemoClose.SetImgIndex(g_WMainImages, 371);
  3514.   DMemoClose.Left := 205;
  3515.   DMemoClose.Top := 1;
  3516.   DMemoB1.SetImgIndex(g_WMainImages, 544);
  3517.   DMemoB1.Left := 58;
  3518.   DMemoB1.Top := 114;
  3519.   DMemoB2.SetImgIndex(g_WMainImages, 538);
  3520.   DMemoB2.Left := 126;
  3521.   DMemoB2.Top := 114;

  3522.   DButtonHP.Left := 40;
  3523.   DButtonHP.Top := 91;
  3524.   DButtonHP.Width := 45;
  3525.   DButtonHP.Height := 90;

  3526.   DButtonMP.Left := 40 + 47;
  3527.   DButtonMP.Top := 91;
  3528.   DButtonMP.Width := 45;
  3529.   DButtonMP.Height := 90;
  3530.   {
  3531.      //背包物品窗口
  3532.      DItemBag.SetImgIndex (g_WMain3Images, 6);
  3533.      DItemBag.Left := 0;
  3534.      DItemBag.Top := 0;

  3535.      DItemGrid.Left := 29;
  3536.      DItemGrid.Top  := 41;
  3537.      DItemGrid.Width := 286;
  3538.      DItemGrid.Height := 162;

  3539.      DClosebag.Downed:=True;
  3540.      DCloseBag.Left := 336;
  3541.      DCloseBag.Top := 59;
  3542.      DCloseBag.Width := 14;
  3543.      DCloseBag.Height := 20;

  3544.      DGold.Left := 18;
  3545.      DGold.Top  := 218;
  3546.      d := g_WMain3Images.Images[207];  //惑怕
  3547.      if d <> nil then begin
  3548.         DStateWin.SetImgIndex (g_WMain3Images, 207);
  3549.         DStateWin.Left := SCREENWIDTH - d.Width;
  3550.         DStateWin.Top := 0;
  3551.      end;}

  3552.   d := g_WMain3Images.Images[406];
  3553.   if d <> nil then begin
  3554.     DFindChr.SetImgIndex(g_WMain3Images, 406);
  3555.     DFindChr.Left := (SCREENWIDTH - d.Width) div 2;
  3556.     DFindChr.Top := (SCREENHEIGHT - d.Height) div 2;
  3557.   end;

  3558.   DFindOK.SetImgIndex(g_WMain3Images, 407);
  3559.   DFindChrClose.SetImgIndex(g_WMainImages, 64);

  3560.   DFindOK.Left := 104;
  3561.   DFindOK.Top := 361;
  3562.   DFindChrClose.Left := 248;
  3563.   DFindChrClose.Top := 31;


  3564.   {-----------------------------------------------------------}
  3565.   //挑战对话框
  3566.   d := g_WMain3Images.Images[465]; //挑战方
  3567.   if d <> nil then begin
  3568.     DWDuel.Left := SCREENWIDTH - d.Width;
  3569.     DWDuel.Top := 0;
  3570.     DWDuel.SetImgIndex(g_WMain3Images, 465);
  3571.   end;
  3572.   DDDuelGrid.Left := 27;
  3573.   DDDuelGrid.Top := 156;
  3574.   DDDuelGrid.Width := 38 * 5;
  3575.   DDDuelGrid.Height := 33;

  3576.   DDDuelGold.SetImgIndex(g_WMainImages, 28);
  3577.   DDDuelGold.Left := 27;
  3578.   DDDuelGold.Top := 202 - 4;

  3579.   DDRDuelGrid.Left := 27;
  3580.   DDRDuelGrid.Top := 56;
  3581.   DDRDuelGrid.Width := 38 * 5;
  3582.   DDRDuelGrid.Height := 33;

  3583.   DDRDuelGold.SetImgIndex(g_WMainImages, 28);
  3584.   DDRDuelGold.Left := 27;
  3585.   DDRDuelGold.Top := 56 + 33 + 8;

  3586.   DDuelOK.SetImgIndex(g_WMain3Images, 463);
  3587.   DDuelOK.Left := 76 - 3;
  3588.   DDuelOK.Top := 250 - 20;

  3589.   DDuelCancel.SetImgIndex(g_WMain3Images, 466);
  3590.   DDuelCancel.Left := 128 - 6;
  3591.   DDuelCancel.Top := 250 - 19;

  3592.   DDuelClose.SetImgIndex(g_WMainImages, 64);
  3593.   DDuelClose.Left := 240;
  3594.   DDuelClose.Top := 0;


  3595.   DStoreDlg.SetImgIndex(g_WCqFirImages, 156);
  3596.   DStoreDlg.Left := (SCREENWIDTH - DStoreDlg.Width) div 2;
  3597.   DStoreDlg.Top := (SCREENHEIGHT - DStoreDlg.Height - 50) div 2;

  3598.   DGStore.Left := 20;
  3599.   DGStore.Top := 80;
  3600.   DGStore.Width := 41 * 5;
  3601.   DGStore.Height := 38 * 3;

  3602.   DStoreOpen.SetImgIndex(g_WCqFirImages, 165);
  3603.   DStoreOpen.Left := 95;
  3604.   DStoreOpen.Top := 208;

  3605.   DStoreCancel.SetImgIndex(g_WCqFirImages, 173);
  3606.   DStoreCancel.Left := 163;
  3607.   DStoreCancel.Top := 208;

  3608.   DStoreClose.SetImgIndex(g_WMainImages, 64);
  3609.   DStoreClose.Left := 245;
  3610.   DStoreClose.Top := 1;

  3611.   DStoreName.SetImgIndex(g_WCqFirImages, 171);
  3612.   DStoreName.Left := 16;
  3613.   DStoreName.Top := 52;

  3614.   DEditStore.Left := 25;
  3615.   DEditStore.Top := 306;
  3616.   DEditStore.Width := 190;
  3617.   DEditStore.Text := '';



  3618.   DUserStore.SetImgIndex(g_WCqFirImages, 163);
  3619.   DUserStore.Left := (SCREENWIDTH - DUserStore.Width) div 2;
  3620.   DUserStore.Top := (SCREENHEIGHT - DUserStore.Height - 50) div 2;

  3621.   DUserStoreClose.SetImgIndex(g_WMainImages, 64);
  3622.   DUserStoreClose.Left := 245;
  3623.   DUserStoreClose.Top := 1;

  3624.   DGUserStore.Left := 20;
  3625.   DGUserStore.Top := 52;
  3626.   DGUserStore.Width := 41 * 5;
  3627.   DGUserStore.Height := 38 * 3;


  3628.   DUserStoreBuy.SetImgIndex(g_WCqFirImages, 161);
  3629.   DUserStoreBuy.Left := 170;
  3630.   DUserStoreBuy.Top := 208;

  3631.   DEditUserStore.Left := 25;
  3632.   DEditUserStore.Top := 306;
  3633.   DEditUserStore.Width := 190;
  3634.   DEditUserStore.Text := '';




  3635.   DStoreMsgDlg.SetImgIndex(g_WCqFirImages, 157);
  3636.   DStoreMsgDlg.Left := (SCREENWIDTH - DUserStore.Width) div 2;
  3637.   DStoreMsgDlg.Top := (SCREENHEIGHT - DUserStore.Height - 50) div 2;

  3638.   DStoreMsgDlgOk.SetImgIndex(g_WCqFirImages, 169);
  3639.   DStoreMsgDlgOk.Left := 88;
  3640.   DStoreMsgDlgOk.Top := 97;

  3641.   DStoreMsgDlgCancel.SetImgIndex(g_WCqFirImages, 167);
  3642.   DStoreMsgDlgCancel.Left := 228;
  3643.   DStoreMsgDlgCancel.Top := 97;

  3644.   EdStoreDlgEdit.Left := 132;
  3645.   EdStoreDlgEdit.Top := 66;
  3646.   EdStoreDlgEdit.Width := 152;
  3647.   EdStoreDlgEdit.Text := '';



  3648.   //验证码窗口
  3649.   DWRandomCode.SetImgIndex(g_WMain3Images, 43);
  3650.   DWRandomCode.Left := (SCREENWIDTH - DWRandomCode.Width) div 2;
  3651.   DWRandomCode.Top := (SCREENHEIGHT - DWRandomCode.Height) div 2;

  3652.   DBRandomCodeOK.SetImgIndex(g_WCqFirImages, 183);
  3653.   DBRandomCodeOK.Left := 35;
  3654.   DBRandomCodeOK.Top := 112;

  3655.   DBRandomCodeChg.SetImgIndex(g_WCqFirImages, 185);
  3656.   DBRandomCodeChg.Left := 115;
  3657.   DBRandomCodeChg.Top := 112;

  3658.   DEditRandomCode.Left := 93;
  3659.   DEditRandomCode.Top := 9;
  3660.   DEditRandomCode.Width := 93;
  3661.   DEditRandomCode.Text := '';



  3662.    //配置窗口
  3663.   d := g_WMain2Images.Images[607];
  3664.   if d <> nil then begin
  3665.     DConfigDlg.SetImgIndex(g_WMain2Images, 607);
  3666.     DConfigDlg.Left := (SCREENWIDTH - d.Width) div 2;
  3667.     DConfigDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  3668.   end;
  3669.   DConfigDlgClose.Left := DConfigDlg.Width - 22;
  3670.   DConfigDlgClose.Top := 2;
  3671.   DConfigDlgClose.SetImgIndex(g_WMain2Images, 279);

  3672.   DButtonTab1.Left := 10;
  3673.   DButtonTab1.Top := 12;
  3674.   DButtonTab1.SetImgIndex(g_WMain2Images, 608);
  3675.   DButtonTab2.Left := 10 + 48;
  3676.   DButtonTab2.Top := 12;
  3677.   DButtonTab2.SetImgIndex(g_WMain2Images, 608);
  3678.   DButtonTab3.Left := 10 + 48 * 2;
  3679.   DButtonTab3.Top := 12;
  3680.   DButtonTab3.SetImgIndex(g_WMain2Images, 608);
  3681.   DButtonTab4.Left := 10 + 48 * 3;
  3682.   DButtonTab4.Top := 12;
  3683.   DButtonTab4.SetImgIndex(g_WMain2Images, 608);
  3684.   DButtonTab5.Left := 10 + 48 * 4;
  3685.   DButtonTab5.Top := 12;
  3686.   DButtonTab5.SetImgIndex(g_WMain2Images, 608);
  3687.   DButtonTab6.Left := 10 + 48 * 5;
  3688.   DButtonTab6.Top := 12;
  3689.   DButtonTab6.SetImgIndex(g_WMain2Images, 608);
  3690.   DButtonTab7.Left := 10 + 48 * 6;
  3691.   DButtonTab7.Top := 12;
  3692.   DButtonTab7.SetImgIndex(g_WMain2Images, 608);
  3693.   DButtonTab8.Left := 10 + 48 * 7;
  3694.   DButtonTab8.Top := 12;
  3695.   DButtonTab8.SetImgIndex(g_WMain2Images, 608);



  3696.   DConfigDlg.TabLeft := 14;
  3697.   DConfigDlg.TabTop := 36;
  3698.   DConfigDlg.TabWidth := 384;
  3699.   DConfigDlg.TabHeight := 206;


  3700.   DMemoTab1.Left := 20;
  3701.   DMemoTab1.Top := 20;
  3702.   DMemoTab1.Width := 384 - 16 - 20;
  3703.   DMemoTab1.Height := 208 - 20;

  3704.   DMemoTab2.Left := 12;
  3705.   DMemoTab2.Top := 24 + 4;
  3706.   DMemoTab2.Width := 384 - 16 - 18;
  3707.   DMemoTab2.Height := 206 - 14 - 24 - 10 - 6;


  3708.   DMemoTab3.Left := 10;
  3709.   DMemoTab3.Top := 10;
  3710.   DMemoTab3.Width := 384 - 16 - 10;
  3711.   DMemoTab3.Height := 208 - 10;

  3712.   DMemoTab4.Left := 10;
  3713.   DMemoTab4.Top := 10;
  3714.   DMemoTab4.Width := 384 - 16;
  3715.   DMemoTab4.Height := 208;

  3716.   DMemoTab5.Left := 0;
  3717.   DMemoTab5.Top := 0;
  3718.   DMemoTab5.Width := 384 - 16;
  3719.   DMemoTab5.Height := 208;

  3720.   DMemoTab6.Left := 0;
  3721.   DMemoTab6.Top := 0;
  3722.   DMemoTab6.Width := 384 - 16;
  3723.   DMemoTab6.Height := 208;

  3724.   DMemoTab7.Left := 0;
  3725.   DMemoTab7.Top := 0;
  3726.   DMemoTab7.Width := 384 - 16;
  3727.   DMemoTab7.Height := 208;

  3728.   DMemoTab8.Left := 1;
  3729.   DMemoTab8.Top := 10;
  3730.   DMemoTab8.Width := 384 - 18;
  3731.   DMemoTab8.Height := 208 - 10;

  3732.   //DScrollTab1.VisibleScroll:=False;
  3733.   DScrollTab1.SetImgIndex(g_WMain2Images, 291);
  3734.   DScrollTab1.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3735.   DScrollTab1.RightButton.SetImgIndex(g_WMain2Images, 294);
  3736.   DScrollTab1.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3737.   DScrollTab1.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3738.   DScrollTab1.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3739.   DScrollTab1.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3740.   DScrollTab1.Left := 384 - DScrollTab1.Width + 1;
  3741.   DScrollTab1.Top := 0;
  3742.   DScrollTab1.Height := 208;
  3743.   DScrollTab1.Increment := 12;
  3744.   DScrollTab1.LeftButton.Left := 1;
  3745.   DScrollTab1.LeftButton.Top := 1;
  3746.   DScrollTab1.RightButton.Left := 1;
  3747.   DScrollTab1.RightButton.Top := DScrollTab1.Height - DScrollTab1.RightButton.Height - 1;
  3748.   DScrollTab1.CenterButton.Left := 1;
  3749.   DScrollTab1.CenterButton.Top := DScrollTab1.LeftButton.Top + DScrollTab1.LeftButton.Height;

  3750.   DScrollTab2.SetImgIndex(g_WMain2Images, 291);
  3751.   DScrollTab2.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3752.   DScrollTab2.RightButton.SetImgIndex(g_WMain2Images, 294);
  3753.   DScrollTab2.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3754.   DScrollTab2.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3755.   DScrollTab2.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3756.   DScrollTab2.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3757.   DScrollTab2.Left := 384 - DScrollTab2.Width + 1;
  3758.   DScrollTab2.Top := 0;
  3759.   DScrollTab2.Height := 208;
  3760.   DScrollTab2.Increment := 17;
  3761.   DScrollTab2.LeftButton.Left := 1;
  3762.   DScrollTab2.LeftButton.Top := 1;
  3763.   DScrollTab2.RightButton.Left := 1;
  3764.   DScrollTab2.RightButton.Top := DScrollTab2.Height - DScrollTab2.RightButton.Height - 1;
  3765.   DScrollTab2.CenterButton.Left := 1;
  3766.   DScrollTab2.CenterButton.Top := DScrollTab2.LeftButton.Top + DScrollTab2.LeftButton.Height;

  3767.   DScrollTab3.SetImgIndex(g_WMain2Images, 291);
  3768.   DScrollTab3.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3769.   DScrollTab3.RightButton.SetImgIndex(g_WMain2Images, 294);
  3770.   DScrollTab3.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3771.   DScrollTab3.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3772.   DScrollTab3.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3773.   DScrollTab3.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3774.   DScrollTab3.Left := 384 - DScrollTab3.Width + 1;
  3775.   DScrollTab3.Top := 0;
  3776.   DScrollTab3.Height := 208;
  3777.   DScrollTab3.Increment := 12;
  3778.   DScrollTab3.LeftButton.Left := 1;
  3779.   DScrollTab3.LeftButton.Top := 1;
  3780.   DScrollTab3.RightButton.Left := 1;
  3781.   DScrollTab3.RightButton.Top := DScrollTab3.Height - DScrollTab3.RightButton.Height - 1;
  3782.   DScrollTab3.CenterButton.Left := 1;
  3783.   DScrollTab3.CenterButton.Top := DScrollTab3.LeftButton.Top + DScrollTab3.LeftButton.Height;


  3784.   DScrollTab4.SetImgIndex(g_WMain2Images, 291);
  3785.   DScrollTab4.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3786.   DScrollTab4.RightButton.SetImgIndex(g_WMain2Images, 294);
  3787.   DScrollTab4.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3788.   DScrollTab4.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3789.   DScrollTab4.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3790.   DScrollTab4.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3791.   DScrollTab4.Left := 384 - DScrollTab4.Width + 1;
  3792.   DScrollTab4.Top := 0;
  3793.   DScrollTab4.Height := 208;
  3794.   DScrollTab4.Increment := 12;
  3795.   DScrollTab4.LeftButton.Left := 1;
  3796.   DScrollTab4.LeftButton.Top := 1;
  3797.   DScrollTab4.RightButton.Left := 1;
  3798.   DScrollTab4.RightButton.Top := DScrollTab4.Height - DScrollTab4.RightButton.Height - 1;
  3799.   DScrollTab4.CenterButton.Left := 1;
  3800.   DScrollTab4.CenterButton.Top := DScrollTab4.LeftButton.Top + DScrollTab4.LeftButton.Height;

  3801.   DScrollTab5.SetImgIndex(g_WMain2Images, 291);
  3802.   DScrollTab5.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3803.   DScrollTab5.RightButton.SetImgIndex(g_WMain2Images, 294);
  3804.   DScrollTab5.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3805.   DScrollTab5.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3806.   DScrollTab5.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3807.   DScrollTab5.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3808.   DScrollTab5.Left := 384 - DScrollTab5.Width + 1;
  3809.   DScrollTab5.Top := 0;
  3810.   DScrollTab5.Height := 208;
  3811.   DScrollTab5.Increment := 12;
  3812.   DScrollTab5.LeftButton.Left := 1;
  3813.   DScrollTab5.LeftButton.Top := 1;
  3814.   DScrollTab5.RightButton.Left := 1;
  3815.   DScrollTab5.RightButton.Top := DScrollTab5.Height - DScrollTab5.RightButton.Height - 1;
  3816.   DScrollTab5.CenterButton.Left := 1;
  3817.   DScrollTab5.CenterButton.Top := DScrollTab5.LeftButton.Top + DScrollTab5.LeftButton.Height;

  3818.   DScrollTab6.SetImgIndex(g_WMain2Images, 291);
  3819.   DScrollTab6.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3820.   DScrollTab6.RightButton.SetImgIndex(g_WMain2Images, 294);
  3821.   DScrollTab6.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3822.   DScrollTab6.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3823.   DScrollTab6.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3824.   DScrollTab6.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3825.   DScrollTab6.Left := 384 - DScrollTab6.Width + 1;
  3826.   DScrollTab6.Top := 0;
  3827.   DScrollTab6.Height := 208;
  3828.   DScrollTab6.Increment := 12;
  3829.   DScrollTab6.LeftButton.Left := 1;
  3830.   DScrollTab6.LeftButton.Top := 1;
  3831.   DScrollTab6.RightButton.Left := 1;
  3832.   DScrollTab6.RightButton.Top := DScrollTab6.Height - DScrollTab6.RightButton.Height - 1;
  3833.   DScrollTab6.CenterButton.Left := 1;
  3834.   DScrollTab6.CenterButton.Top := DScrollTab6.LeftButton.Top + DScrollTab6.LeftButton.Height;

  3835.   DScrollTab7.SetImgIndex(g_WMain2Images, 291);
  3836.   DScrollTab7.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3837.   DScrollTab7.RightButton.SetImgIndex(g_WMain2Images, 294);
  3838.   DScrollTab7.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3839.   DScrollTab7.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3840.   DScrollTab7.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3841.   DScrollTab7.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3842.   DScrollTab7.Left := 384 - DScrollTab7.Width + 1;
  3843.   DScrollTab7.Top := 0;
  3844.   DScrollTab7.Height := 208;
  3845.   DScrollTab7.Increment := 12;
  3846.   DScrollTab7.LeftButton.Left := 1;
  3847.   DScrollTab7.LeftButton.Top := 1;
  3848.   DScrollTab7.RightButton.Left := 1;
  3849.   DScrollTab7.RightButton.Top := DScrollTab7.Height - DScrollTab7.RightButton.Height - 1;
  3850.   DScrollTab7.CenterButton.Left := 1;
  3851.   DScrollTab7.CenterButton.Top := DScrollTab7.LeftButton.Top + DScrollTab7.LeftButton.Height;

  3852.   DScrollTab8.SetImgIndex(g_WMain2Images, 291);
  3853.   DScrollTab8.LeftButton.SetImgIndex(g_WMain2Images, 292);
  3854.   DScrollTab8.RightButton.SetImgIndex(g_WMain2Images, 294);
  3855.   DScrollTab8.CenterButton.SetImgIndex(g_WMain2Images, 581);
  3856.   DScrollTab8.LeftButton.OnDirectPaint := DScrollScrollDirectPaint;
  3857.   DScrollTab8.RightButton.OnDirectPaint := DScrollScrollDirectPaint;
  3858.   DScrollTab8.OnDirectPaint := DScrollCenterScrollDirectPaint;
  3859.   DScrollTab8.Left := 384 - DScrollTab8.Width + 1;
  3860.   DScrollTab8.Top := 0;
  3861.   DScrollTab8.Height := 208;
  3862.   DScrollTab8.Increment := 12;
  3863.   DScrollTab8.LeftButton.Left := 1;
  3864.   DScrollTab8.LeftButton.Top := 1;
  3865.   DScrollTab8.RightButton.Left := 1;
  3866.   DScrollTab8.RightButton.Top := DScrollTab8.Height - DScrollTab8.RightButton.Height - 1;
  3867.   DScrollTab8.CenterButton.Left := 1;
  3868.   DScrollTab8.CenterButton.Top := DScrollTab8.LeftButton.Top + DScrollTab8.LeftButton.Height;

  3869. {----------------------DMemoTab1------------------------------}
  3870.   {DMemoTab1.PosX := 20;
  3871.   DMemoTab1.PosY := 20;  }


  3872.   DCheckBoxShowActorLable.SetImgIndex(g_WMain2Images, 228);
  3873.   DCheckBoxHideBlueLable.SetImgIndex(g_WMain2Images, 228);
  3874.   DCheckBoxShowNumberLable.SetImgIndex(g_WMain2Images, 228);
  3875.   DCheckBoxShowJobAndLevel.SetImgIndex(g_WMain2Images, 228);

  3876.   DCheckBoxShowUserName.SetImgIndex(g_WMain2Images, 228);
  3877.   DCheckBoxShowMonName.SetImgIndex(g_WMain2Images, 228);
  3878.   DCheckBoxShowItemName.SetImgIndex(g_WMain2Images, 228);
  3879.   DCheckBoxShowMoveNumberLable.SetImgIndex(g_WMain2Images, 228);


  3880.   DCheckBoxShowGreenHint.SetImgIndex(g_WMain2Images, 228);
  3881.   DCheckBoxMusic.SetImgIndex(g_WMain2Images, 228);
  3882.   DCheckBoxItemHint.SetImgIndex(g_WMain2Images, 228);
  3883.   DCheckBoxMagicLock.SetImgIndex(g_WMain2Images, 228);

  3884.   DCheckBoxOrderItem.SetImgIndex(g_WMain2Images, 228);
  3885.   DCheckBoxOnlyShowCharName.SetImgIndex(g_WMain2Images, 228);
  3886.   DCheckBoxCloseGroup.SetImgIndex(g_WMain2Images, 228);
  3887.   DCheckBoxItemDuraHint.SetImgIndex(g_WMain2Images, 228);

  3888.   DCheckBoxNotNeedShift.SetImgIndex(g_WMain2Images, 228);
  3889.   DCheckBoxAutoHorse.SetImgIndex(g_WMain2Images, 228);
  3890.   DCheckBoxCompareItem.SetImgIndex(g_WMain2Images, 228);

  3891.   DCheckBoxShowActorLable.Left := 0;
  3892.   DCheckBoxHideBlueLable.Left := 68 + 20;
  3893.   DCheckBoxShowNumberLable.Left := 68 * 2 + 20 * 2;
  3894.   DCheckBoxShowJobAndLevel.Left := 68 * 3 + 20 * 3;

  3895.   DCheckBoxShowActorLable.Top := 0;
  3896.   DCheckBoxHideBlueLable.Top := 0;
  3897.   DCheckBoxShowNumberLable.Top := 0;
  3898.   DCheckBoxShowJobAndLevel.Top := 0;


  3899.   DCheckBoxShowUserName.Left := 0;
  3900.   DCheckBoxShowMonName.Left := 68 + 20;
  3901.   DCheckBoxShowItemName.Left := 68 * 2 + 20 * 2;
  3902.   DCheckBoxShowMoveNumberLable.Left := 68 * 3 + 20 * 3;


  3903.   DCheckBoxShowUserName.Top := 30;
  3904.   DCheckBoxShowMonName.Top := 30;
  3905.   DCheckBoxShowItemName.Top := 30;
  3906.   DCheckBoxShowMoveNumberLable.Top := 30;




  3907.   DCheckBoxShowGreenHint.Left := 0;
  3908.   DCheckBoxMusic.Left := 68 + 20;
  3909.   DCheckBoxItemHint.Left := 68 * 2 + 20 * 2;
  3910.   DCheckBoxMagicLock.Left := 68 * 3 + 20 * 3;

  3911.   DCheckBoxShowGreenHint.Top := 30 * 2;
  3912.   DCheckBoxMusic.Top := 30 * 2;
  3913.   DCheckBoxItemHint.Top := 30 * 2;
  3914.   DCheckBoxMagicLock.Top := 30 * 2;



  3915.   DCheckBoxOrderItem.Left := 0;
  3916.   DCheckBoxOnlyShowCharName.Left := 68 + 20;
  3917.   DCheckBoxCloseGroup.Left := 68 * 2 + 20 * 2;
  3918.   DCheckBoxItemDuraHint.Left := 68 * 3 + 20 * 3;

  3919.   DCheckBoxOrderItem.Top := 30 * 3;
  3920.   DCheckBoxOnlyShowCharName.Top := 30 * 3;
  3921.   DCheckBoxCloseGroup.Top := 30 * 3;
  3922.   DCheckBoxItemDuraHint.Top := 30 * 3;

  3923.   DCheckBoxNotNeedShift.Left := 0;
  3924.   DCheckBoxNotNeedShift.Top := 30 * 4;

  3925.   DCheckBoxAutoHorse.Left := 68 + 20;
  3926.   DCheckBoxAutoHorse.Top := 30 * 4;

  3927.   DCheckBoxCompareItem.Left := 68 * 2 + 20 * 2;
  3928.   DCheckBoxCompareItem.Top := 30 * 4;

  3929.   ItemList := DMemoTab1.Add;
  3930.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowActorLable);
  3931.   DMemoTab1.AddSuItem(ItemList, DCheckBoxHideBlueLable);
  3932.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowNumberLable);
  3933.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowJobAndLevel);



  3934.   ItemList := DMemoTab1.Add;
  3935.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowUserName);
  3936.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowMonName);
  3937.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowItemName);
  3938.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowMoveNumberLable);


  3939.   ItemList := DMemoTab1.Add;
  3940.   DMemoTab1.AddSuItem(ItemList, DCheckBoxShowGreenHint);
  3941.   DMemoTab1.AddSuItem(ItemList, DCheckBoxMusic);
  3942.   DMemoTab1.AddSuItem(ItemList, DCheckBoxItemHint);
  3943.   DMemoTab1.AddSuItem(ItemList, DCheckBoxMagicLock);


  3944.   ItemList := DMemoTab1.Add;
  3945.   DMemoTab1.AddSuItem(ItemList, DCheckBoxOrderItem);
  3946.   DMemoTab1.AddSuItem(ItemList, DCheckBoxOnlyShowCharName);
  3947.   DMemoTab1.AddSuItem(ItemList, DCheckBoxCloseGroup);
  3948.   DMemoTab1.AddSuItem(ItemList, DCheckBoxItemDuraHint);

  3949.   ItemList := DMemoTab1.Add;
  3950.   DMemoTab1.AddSuItem(ItemList, DCheckBoxNotNeedShift);
  3951.   DMemoTab1.AddSuItem(ItemList, DCheckBoxAutoHorse);
  3952.   DMemoTab1.AddSuItem(ItemList, DCheckBoxCompareItem);
  3953.   //DebugOutStr('DCheckBoxShowActorLable:' + IntToStr(DCheckBoxShowActorLable.Height));

  3954. // DMemoTab1.ItemSize := 24;

  3955.   //DebugOutStr('DMemoTab1.Height:' + IntToStr(DMemoTab1.Height)+' DScrollTab1.Max:' + IntToStr(DScrollTab1.Max));




  3956. {----------------------DMemoTab2------------------------------}

  3957.   DLabelItemName.Left := 10;
  3958.   DLabelItemName.Top := 10;

  3959.   DLabelItemHint.Left := 147;
  3960.   DLabelItemHint.Top := 10;

  3961.   DLabelPickUpItem.Left := 220;
  3962.   DLabelPickUpItem.Top := 10;

  3963.   DLabelShowItemName.Left := 288;
  3964.   DLabelShowItemName.Top := 10;

  3965.   DComboboxItemType.Left := 10;
  3966.   DComboboxItemType.Top := 206 - 10 - 12;
  3967.   DMenuItemType.Width := DComboboxItemType.Width;


  3968.   DEditSearchItem.Left := 98;
  3969.   DEditSearchItem.Top := 206 - 10 - 12;
  3970.   DEditSearchItem.Width := 120;
  3971.   DEditSearchItem.Text := '';

  3972.   DLabelOption.Left := 230;
  3973.   DLabelOption.Top := 206 - 10 - 12 + 2;
  3974.   DLabelOption.Font.Style := [fsUnderline];

  3975.   DCheckBoxPickUpItemAll.Left := 290;
  3976.   DCheckBoxPickUpItemAll.Top := 206 - 10 - 12 + 2;
  3977.   DCheckBoxPickUpItemAll.SetImgIndex(g_WMain2Images, 228);



  3978.   //DMemoTab2.ItemSize := 24;


  3979. {----------------------DMemoTab3------------------------------}
  3980.   DCheckBoxHumHP1.SetImgIndex(g_WMain2Images, 228);
  3981.   DCheckBoxHumMP1.SetImgIndex(g_WMain2Images, 228);
  3982.   DCheckBoxHumHP2.SetImgIndex(g_WMain2Images, 228);
  3983.   DCheckBoxHumMP2.SetImgIndex(g_WMain2Images, 228);


  3984.   DCheckBoxHumHP1.Left := 8;
  3985.   DCheckBoxHumHP1.Top := 8;

  3986.   DCheckBoxHumMP1.Left := 8;
  3987.   DCheckBoxHumMP1.Top := 8 + 30 * 1;

  3988.   DCheckBoxHumHP2.Left := 8;
  3989.   DCheckBoxHumHP2.Top := 8 + 30 * 2;

  3990.   DCheckBoxHumMP2.Left := 8;
  3991.   DCheckBoxHumMP2.Top := 8 + 30 * 3;


  3992.   DEditHumHPPercent1.Left := 45;
  3993.   DEditHumHPPercent1.Top := 8 - 1;

  3994.   DEditHumMPPercent1.Left := 45;
  3995.   DEditHumMPPercent1.Top := 8 - 1 + 30 * 1;

  3996.   DEditHumHPPercent2.Left := 45;
  3997.   DEditHumHPPercent2.Top := 8 - 1 + 30 * 2;

  3998.   DEditHumMPPercent2.Left := 45;
  3999.   DEditHumMPPercent2.Top := 8 - 1 + 30 * 3;


  4000.   DEditHumHPPercent1.Width := 80;
  4001.   DEditHumMPPercent1.Width := 80;
  4002.   DEditHumHPPercent2.Width := 80;
  4003.   DEditHumMPPercent2.Width := 80;

  4004.   DEditHumHPPercent1.Text := '0';
  4005.   DEditHumMPPercent1.Text := '0';
  4006.   DEditHumHPPercent2.Text := '0';
  4007.   DEditHumMPPercent2.Text := '0';



  4008.   DComboboxHumHP1.Left := 140;
  4009.   DComboboxHumHP1.Top := 8;

  4010.   DComboboxHumMP1.Left := 140;
  4011.   DComboboxHumMP1.Top := 8 + 30 * 1;

  4012.   DComboboxHumHP2.Left := 140;
  4013.   DComboboxHumHP2.Top := 8 + 30 * 2;

  4014.   DComboboxHumMP2.Left := 140;
  4015.   DComboboxHumMP2.Top := 8 + 30 * 3;

  4016.   DComboboxHumHP1.Width := 100;
  4017.   DComboboxHumMP1.Width := 100;
  4018.   DComboboxHumHP2.Width := 100;
  4019.   DComboboxHumMP2.Width := 100;


  4020.   DEditHumHPTime1.Left := 250;
  4021.   DEditHumHPTime1.Top := 8 - 1;

  4022.   DEditHumMPTime1.Left := 250;
  4023.   DEditHumMPTime1.Top := 8 - 1 + 30 * 1;

  4024.   DEditHumHPTime2.Left := 250;
  4025.   DEditHumHPTime2.Top := 8 - 1 + 30 * 2;

  4026.   DEditHumMPTime2.Left := 250;
  4027.   DEditHumMPTime2.Top := 8 - 1 + 30 * 3;


  4028.   DEditHumHPTime1.Width := 46;
  4029.   DEditHumMPTime1.Width := 46;
  4030.   DEditHumHPTime2.Width := 46;
  4031.   DEditHumMPTime2.Width := 46;

  4032.   DEditHumHPTime1.Text := '0';
  4033.   DEditHumMPTime1.Text := '0';
  4034.   DEditHumHPTime2.Text := '0';
  4035.   DEditHumMPTime2.Text := '0';

  4036.   DLabelHumHP1.Left := 305;
  4037.   DLabelHumHP1.Top := 8 + 1;

  4038.   DLabelHumMP1.Left := 305;
  4039.   DLabelHumMP1.Top := 8 + 1 + 30 * 1;

  4040.   DLabelHumHP2.Left := 305;
  4041.   DLabelHumHP2.Top := 8 + 1 + 30 * 2;

  4042.   DLabelHumMP2.Left := 305;
  4043.   DLabelHumMP2.Top := 8 + 1 + 30 * 3;


  4044.   ItemList := DMemoTab3.Add;
  4045.   DMemoTab3.AddSuItem(ItemList, DCheckBoxHumHP1);
  4046.   DMemoTab3.AddSuItem(ItemList, DEditHumHPPercent1);
  4047.   DMemoTab3.AddSuItem(ItemList, DComboboxHumHP1);
  4048.   DMemoTab3.AddSuItem(ItemList, DEditHumHPTime1);
  4049.   DMemoTab3.AddSuItem(ItemList, DLabelHumHP1);

  4050.   ItemList := DMemoTab3.Add;
  4051.   DMemoTab3.AddSuItem(ItemList, DCheckBoxHumMP1);
  4052.   DMemoTab3.AddSuItem(ItemList, DEditHumMPPercent1);
  4053.   DMemoTab3.AddSuItem(ItemList, DComboboxHumMP1);
  4054.   DMemoTab3.AddSuItem(ItemList, DEditHumMPTime1);
  4055.   DMemoTab3.AddSuItem(ItemList, DLabelHumMP1);


  4056.   ItemList := DMemoTab3.Add;
  4057.   DMemoTab3.AddSuItem(ItemList, DCheckBoxHumHP2);
  4058.   DMemoTab3.AddSuItem(ItemList, DEditHumHPPercent2);
  4059.   DMemoTab3.AddSuItem(ItemList, DComboboxHumHP2);
  4060.   DMemoTab3.AddSuItem(ItemList, DEditHumHPTime2);
  4061.   DMemoTab3.AddSuItem(ItemList, DLabelHumHP2);

  4062.   ItemList := DMemoTab3.Add;
  4063.   DMemoTab3.AddSuItem(ItemList, DCheckBoxHumMP2);
  4064.   DMemoTab3.AddSuItem(ItemList, DEditHumMPPercent2);
  4065.   DMemoTab3.AddSuItem(ItemList, DComboboxHumMP2);
  4066.   DMemoTab3.AddSuItem(ItemList, DEditHumMPTime2);
  4067.   DMemoTab3.AddSuItem(ItemList, DLabelHumMP2);

  4068. {-----------------------------------------------------------}
  4069.   DLabelBookItem.Left := 8;
  4070.   DLabelBookItem.Top := 130;
  4071.   ItemList := DMemoTab3.Add;
  4072.   DMemoTab3.AddSuItem(ItemList, DLabelBookItem);

  4073.   DCheckBoxBook.SetImgIndex(g_WMain2Images, 228);
  4074.   DCheckBoxBook.Left := 8;
  4075.   DCheckBoxBook.Top := 130 + 30;


  4076.   DLabelBookHP.Left := 44;
  4077.   DLabelBookHP.Top := 130 + 30 + 1;


  4078.   DEditBookHP.Left := 58;
  4079.   DEditBookHP.Top := 130 + 30;
  4080.   DEditBookHP.Width := 46;
  4081.   DEditBookHP.Text := '0';

  4082.   DEditBookTime.Left := 118;
  4083.   DEditBookTime.Top := 130 + 30;
  4084.   DEditBookTime.Width := 20;
  4085.   DEditBookTime.Text := '0';


  4086.   DLabelBookTime.Left := 144;
  4087.   DLabelBookTime.Top := 130 + 30 + 2;



  4088.   DLabelBookItemType.Left := 144 + 30;
  4089.   DLabelBookItemType.Top := 130 + 30 + 1;

  4090.   DComboboxBookIndex.Left := 144 + 90;
  4091.   DComboboxBookIndex.Top := 130 + 30;
  4092.   DComboboxBookIndex.Width := 80;
  4093.   DMenuBook.Width := DComboboxBookIndex.Width;


  4094.   ItemList := DMemoTab3.Add;
  4095.   DMemoTab3.AddSuItem(ItemList, DCheckBoxBook);
  4096.   DMemoTab3.AddSuItem(ItemList, DLabelBookHP);
  4097.   DMemoTab3.AddSuItem(ItemList, DEditBookHP);
  4098.   DMemoTab3.AddSuItem(ItemList, DEditBookTime);
  4099.   DMemoTab3.AddSuItem(ItemList, DLabelBookTime);

  4100.   DMemoTab3.AddSuItem(ItemList, DLabelBookItemType);
  4101.   DMemoTab3.AddSuItem(ItemList, DComboboxBookIndex);



  4102. {-----------------------------------------------------------}
  4103.   DLabelClose.Left := 8;
  4104.   DLabelClose.Top := 130 + 30 * 2;
  4105.   ItemList := DMemoTab3.Add;
  4106.   DMemoTab3.AddSuItem(ItemList, DLabelClose);

  4107.   DCheckBoxClose.Left := 8;
  4108.   DCheckBoxClose.Top := 130 + 30 * 3;

  4109.   DCheckBoxClose.SetImgIndex(g_WMain2Images, 228);


  4110.   DLabelCloseHP.Left := 44;
  4111.   DLabelCloseHP.Top := 130 + 2 + 30 * 3;

  4112.   DEditCloseHP.Left := 58;
  4113.   DEditCloseHP.Top := 130 + 30 * 3;
  4114.   DEditCloseHP.Width := 46;
  4115.   DEditCloseHP.Text := '0';

  4116.   DEditCloseTime.Left := 118;
  4117.   DEditCloseTime.Top := 130 + 30 * 3;
  4118.   DEditCloseTime.Width := 20;
  4119.   DEditCloseTime.Text := '0';

  4120.   DLabelCloseTime.Left := 144;
  4121.   DLabelCloseTime.Top := 130 + 30 * 3 + 2;


  4122.   ItemList := DMemoTab3.Add;
  4123.   DMemoTab3.AddSuItem(ItemList, DCheckBoxClose);
  4124.   DMemoTab3.AddSuItem(ItemList, DLabelCloseHP);
  4125.   DMemoTab3.AddSuItem(ItemList, DEditCloseHP);
  4126.   DMemoTab3.AddSuItem(ItemList, DEditCloseTime);
  4127.   DMemoTab3.AddSuItem(ItemList, DLabelCloseTime);
  4128.   //DMemoTab3.ItemSize := 100;

  4129.   //DebugOutStr('DMemoTab3.Height:' + IntToStr(DMemoTab3.Height)+' DScrollTab3.Max:' + IntToStr(DScrollTab3.Max));
  4130. {----------------------DMemoTab4------------------------------}
  4131.   DCheckBoxHeroHP1.SetImgIndex(g_WMain2Images, 228);
  4132.   DCheckBoxHeroMP1.SetImgIndex(g_WMain2Images, 228);
  4133.   DCheckBoxHeroHP2.SetImgIndex(g_WMain2Images, 228);
  4134.   DCheckBoxHeroMP2.SetImgIndex(g_WMain2Images, 228);

  4135.   DCheckBoxHeroHP1.Left := 8;
  4136.   DCheckBoxHeroHP1.Top := 8;

  4137.   DCheckBoxHeroMP1.Left := 8;
  4138.   DCheckBoxHeroMP1.Top := 8 + 30 * 1;

  4139.   DCheckBoxHeroHP2.Left := 8;
  4140.   DCheckBoxHeroHP2.Top := 8 + 30 * 2;

  4141.   DCheckBoxHeroMP2.Left := 8;
  4142.   DCheckBoxHeroMP2.Top := 8 + 30 * 3;


  4143.   DEditHeroHPPercent1.Left := 45;
  4144.   DEditHeroHPPercent1.Top := 8 - 1;

  4145.   DEditHeroMPPercent1.Left := 45;
  4146.   DEditHeroMPPercent1.Top := 8 - 1 + 30 * 1;

  4147.   DEditHeroHPPercent2.Left := 45;
  4148.   DEditHeroHPPercent2.Top := 8 - 1 + 30 * 2;

  4149.   DEditHeroMPPercent2.Left := 45;
  4150.   DEditHeroMPPercent2.Top := 8 - 1 + 30 * 3;


  4151.   DEditHeroHPPercent1.Width := 80;
  4152.   DEditHeroMPPercent1.Width := 80;
  4153.   DEditHeroHPPercent2.Width := 80;
  4154.   DEditHeroMPPercent2.Width := 80;

  4155.   DEditHeroHPPercent1.Text := '0';
  4156.   DEditHeroMPPercent1.Text := '0';
  4157.   DEditHeroHPPercent2.Text := '0';
  4158.   DEditHeroMPPercent2.Text := '0';

  4159.   DComboboxHeroHP1.Left := 140;
  4160.   DComboboxHeroHP1.Top := 8;

  4161.   DComboboxHeroMP1.Left := 140;
  4162.   DComboboxHeroMP1.Top := 8 + 30 * 1;

  4163.   DComboboxHeroHP2.Left := 140;
  4164.   DComboboxHeroHP2.Top := 8 + 30 * 2;

  4165.   DComboboxHeroMP2.Left := 140;
  4166.   DComboboxHeroMP2.Top := 8 + 30 * 3;

  4167.   DComboboxHeroHP1.Width := 100;
  4168.   DComboboxHeroMP1.Width := 100;
  4169.   DComboboxHeroHP2.Width := 100;
  4170.   DComboboxHeroMP2.Width := 100;


  4171.   DEditHeroHPTime1.Left := 250;
  4172.   DEditHeroHPTime1.Top := 8 - 1;

  4173.   DEditHeroMPTime1.Left := 250;
  4174.   DEditHeroMPTime1.Top := 8 - 1 + 30 * 1;

  4175.   DEditHeroHPTime2.Left := 250;
  4176.   DEditHeroHPTime2.Top := 8 - 1 + 30 * 2;

  4177.   DEditHeroMPTime2.Left := 250;
  4178.   DEditHeroMPTime2.Top := 8 - 1 + 30 * 3;


  4179.   DEditHeroHPTime1.Width := 46;
  4180.   DEditHeroMPTime1.Width := 46;
  4181.   DEditHeroHPTime2.Width := 46;
  4182.   DEditHeroMPTime2.Width := 46;

  4183.   DEditHeroHPTime1.Text := '0';
  4184.   DEditHeroMPTime1.Text := '0';
  4185.   DEditHeroHPTime2.Text := '0';
  4186.   DEditHeroMPTime2.Text := '0';

  4187.   DLabelHeroHP1.Left := 305;
  4188.   DLabelHeroHP1.Top := 8 + 1;

  4189.   DLabelHeroMP1.Left := 305;
  4190.   DLabelHeroMP1.Top := 8 + 1 + 30 * 1;

  4191.   DLabelHeroHP2.Left := 305;
  4192.   DLabelHeroHP2.Top := 8 + 1 + 30 * 2;

  4193.   DLabelHeroMP2.Left := 305;
  4194.   DLabelHeroMP2.Top := 8 + 1 + 30 * 3;


  4195.   ItemList := DMemoTab4.Add;
  4196.   DMemoTab4.AddSuItem(ItemList, DCheckBoxHeroHP1);
  4197.   DMemoTab4.AddSuItem(ItemList, DEditHeroHPPercent1);
  4198.   DMemoTab4.AddSuItem(ItemList, DComboboxHeroHP1);
  4199.   DMemoTab4.AddSuItem(ItemList, DEditHeroHPTime1);
  4200.   DMemoTab4.AddSuItem(ItemList, DLabelHeroHP1);

  4201.   ItemList := DMemoTab4.Add;
  4202.   DMemoTab4.AddSuItem(ItemList, DCheckBoxHeroMP1);
  4203.   DMemoTab4.AddSuItem(ItemList, DEditHeroMPPercent1);
  4204.   DMemoTab4.AddSuItem(ItemList, DComboboxHeroMP1);
  4205.   DMemoTab4.AddSuItem(ItemList, DEditHeroMPTime1);
  4206.   DMemoTab4.AddSuItem(ItemList, DLabelHeroMP1);

  4207.   ItemList := DMemoTab4.Add;
  4208.   DMemoTab4.AddSuItem(ItemList, DCheckBoxHeroHP2);
  4209.   DMemoTab4.AddSuItem(ItemList, DEditHeroHPPercent2);
  4210.   DMemoTab4.AddSuItem(ItemList, DComboboxHeroHP2);
  4211.   DMemoTab4.AddSuItem(ItemList, DEditHeroHPTime2);
  4212.   DMemoTab4.AddSuItem(ItemList, DLabelHeroHP2);

  4213.   ItemList := DMemoTab4.Add;
  4214.   DMemoTab4.AddSuItem(ItemList, DCheckBoxHeroMP2);
  4215.   DMemoTab4.AddSuItem(ItemList, DEditHeroMPPercent2);
  4216.   DMemoTab4.AddSuItem(ItemList, DComboboxHeroMP2);
  4217.   DMemoTab4.AddSuItem(ItemList, DEditHeroMPTime2);
  4218.   DMemoTab4.AddSuItem(ItemList, DLabelHeroMP2);


  4219.   DLabelHeroLogOut.Left := 8;
  4220.   DLabelHeroLogOut.Top := 130;
  4221.   ItemList := DMemoTab4.Add;
  4222.   DMemoTab4.AddSuItem(ItemList, DLabelHeroLogOut);


  4223.   DCheckBoxHeroLogOut.Left := 8;
  4224.   DCheckBoxHeroLogOut.Top := 130 + 30;
  4225.   DCheckBoxHeroLogOut.SetImgIndex(g_WMain2Images, 228);


  4226.   DLabelHeroLogOutHP.Left := 44;
  4227.   DLabelHeroLogOutHP.Top := 130 + 30 + 1;

  4228.   DEditHeroLogOutHP.Left := 58;
  4229.   DEditHeroLogOutHP.Top := 130 + 30;
  4230.   DEditHeroLogOutHP.Width := 46;
  4231.   DEditHeroLogOutHP.Text := '0';

  4232.   DEditHeroLogOutTime.Left := 118;
  4233.   DEditHeroLogOutTime.Top := 130 + 30;
  4234.   DEditHeroLogOutTime.Width := 20;
  4235.   DEditHeroLogOutTime.Text := '0';

  4236.   DLabelHeroLogOutTime.Left := 144;
  4237.   DLabelHeroLogOutTime.Top := 130 + 30 + 2;


  4238.   ItemList := DMemoTab4.Add;
  4239.   DMemoTab4.AddSuItem(ItemList, DCheckBoxHeroLogOut);
  4240.   DMemoTab4.AddSuItem(ItemList, DLabelHeroLogOutHP);
  4241.   DMemoTab4.AddSuItem(ItemList, DEditHeroLogOutHP);
  4242.   DMemoTab4.AddSuItem(ItemList, DEditHeroLogOutTime);
  4243.   DMemoTab4.AddSuItem(ItemList, DLabelHeroLogOutTime);




  4244. {------------------------DMemoTab5---------------------------}


  4245.   DLabel1.Left := 10;
  4246.   DLabel1.Top := 10;

  4247.   DLabel3.Left := 130;
  4248.   DLabel3.Top := 10;

  4249.   DLabel10.Left := 252;
  4250.   DLabel10.Top := 10;

  4251.   ItemList := DMemoTab5.Add;
  4252.   DMemoTab5.AddSuItem(ItemList, DLabel1);

  4253.   DMemoTab5.AddSuItem(ItemList, DLabel3);
  4254.   DMemoTab5.AddSuItem(ItemList, DLabel10);

  4255.   DCheckBoxLongHit.SetImgIndex(g_WMain2Images, 228);
  4256.   DCheckBoxLongHit.Left := 22;
  4257.   DCheckBoxLongHit.Top := 36;
  4258.   DCheckBoxAutoHideSelf.SetImgIndex(g_WMain2Images, 228);
  4259.   DCheckBoxAutoHideSelf.Left := 140;
  4260.   DCheckBoxAutoHideSelf.Top := 36;
  4261.   DCheckBoxAutoUseMagic.SetImgIndex(g_WMain2Images, 228);
  4262.   DCheckBoxAutoUseMagic.Left := 252;
  4263.   DCheckBoxAutoUseMagic.Top := 36;

  4264.   DEditAutoUseMagicTime.Left := 326;
  4265.   DEditAutoUseMagicTime.Top := 36;
  4266.   DEditAutoUseMagicTime.Width := 22;
  4267.   DEditAutoUseMagicTime.Text := '0';
  4268.   DLabel11.Left := 352;
  4269.   DLabel11.Top := 38;
  4270.   ItemList := DMemoTab5.Add;
  4271.   DMemoTab5.AddSuItem(ItemList, DCheckBoxLongHit);
  4272.   DMemoTab5.AddSuItem(ItemList, DCheckBoxAutoHideSelf);
  4273.   DMemoTab5.AddSuItem(ItemList, DCheckBoxAutoUseMagic);
  4274.   DMemoTab5.AddSuItem(ItemList, DEditAutoUseMagicTime);
  4275.   DMemoTab5.AddSuItem(ItemList, DLabel11);





  4276.   DCheckBoxWideHit.SetImgIndex(g_WMain2Images, 228);
  4277.   DCheckBoxWideHit.Left := 22;
  4278.   DCheckBoxWideHit.Top := 36 + 24;
  4279.   DCheckBoxSign.SetImgIndex(g_WMain2Images, 228);
  4280.   DCheckBoxSign.Left := 140;
  4281.   DCheckBoxSign.Top := 36 + 24;

  4282.   DComboboxAutoUseMagic.Left := 252;
  4283.   DComboboxAutoUseMagic.Top := 36 + 24;
  4284.   DComboboxAutoUseMagic.Width := 100;
  4285.   DMagicMenu.Width := 100;

  4286.   ItemList := DMemoTab5.Add;
  4287.   DMemoTab5.AddSuItem(ItemList, DCheckBoxWideHit);
  4288.   DMemoTab5.AddSuItem(ItemList, DCheckBoxSign);
  4289.   DMemoTab5.AddSuItem(ItemList, DComboboxAutoUseMagic);

  4290. //======================================================
  4291.   DCheckBoxFireHit.SetImgIndex(g_WMain2Images, 228);
  4292.   DCheckBoxFireHit.Left := 22;
  4293.   DCheckBoxFireHit.Top := 36 + 24 * 2;

  4294.   DCheckBoxPoison.SetImgIndex(g_WMain2Images, 228);
  4295.   DCheckBoxPoison.Left := 140;
  4296.   DCheckBoxPoison.Top := 36 + 24 * 2;


  4297.   ItemList := DMemoTab5.Add;
  4298.   DMemoTab5.AddSuItem(ItemList, DCheckBoxFireHit);
  4299.   DMemoTab5.AddSuItem(ItemList, DCheckBoxPoison);

  4300. //======================================================
  4301.   DCheckBoxSWideHit.SetImgIndex(g_WMain2Images, 228);
  4302.   DCheckBoxSWideHit.Left := 22;
  4303.   DCheckBoxSWideHit.Top := 36 + 24 * 3;

  4304.   DComboboxPoison.Left := 140;
  4305.   DComboboxPoison.Top := 36 + 24 * 3;
  4306.   DComboboxPoison.Width := 80;

  4307.   DEditSerieMagic.Left := 252;
  4308.   DEditSerieMagic.Top := 36 + 24 * 3;
  4309.   DEditSerieMagic.SetImgIndex(g_WMainImages, 663);



  4310.   DMenuPoison.Width := 80;

  4311.   ItemList := DMemoTab5.Add;
  4312.   DMemoTab5.AddSuItem(ItemList, DCheckBoxSWideHit);
  4313.   DMemoTab5.AddSuItem(ItemList, DComboboxPoison);
  4314.   DMemoTab5.AddSuItem(ItemList, DEditSerieMagic);
  4315. //======================================================
  4316.   DCheckBoxCrsHit.SetImgIndex(g_WMain2Images, 228);
  4317.   DCheckBoxCrsHit.Left := 22;
  4318.   DCheckBoxCrsHit.Top := 36 + 24 * 4;


  4319.   DCheckBoxWjzq.SetImgIndex(g_WMain2Images, 228);
  4320.   DCheckBoxWjzq.Left := 140;
  4321.   DCheckBoxWjzq.Top := 36 + 24 * 4;




  4322.   ItemList := DMemoTab5.Add;
  4323.   DMemoTab5.AddSuItem(ItemList, DCheckBoxCrsHit);
  4324.   DMemoTab5.AddSuItem(ItemList, DCheckBoxWjzq);
  4325. //==============================================================================

  4326.   DCheckBoxKtHit.SetImgIndex(g_WMain2Images, 228);
  4327.   DCheckBoxKtHit.Left := 22;
  4328.   DCheckBoxKtHit.Top := 36 + 24 * 5;

  4329.   DLabel2.Left := 130;
  4330.   DLabel2.Top := 36 + 24 * 5;

  4331.   ItemList := DMemoTab5.Add;
  4332.   DMemoTab5.AddSuItem(ItemList, DCheckBoxKtHit);
  4333.   DMemoTab5.AddSuItem(ItemList, DLabel2);
  4334. //==============================================================================
  4335.   DCheckBoxPok.SetImgIndex(g_WMain2Images, 228);
  4336.   DCheckBoxPok.Left := 22;
  4337.   DCheckBoxPok.Top := 36 + 24 * 6;


  4338.   DCheckBoxShield.SetImgIndex(g_WMain2Images, 228);
  4339.   DCheckBoxShield.Left := 140;
  4340.   DCheckBoxShield.Top := 36 + 24 * 6;
  4341.   ItemList := DMemoTab5.Add;
  4342.   DMemoTab5.AddSuItem(ItemList, DCheckBoxPok);
  4343.   DMemoTab5.AddSuItem(ItemList, DCheckBoxShield);



  4344.   DCheckBoxSmartPosLongHit.SetImgIndex(g_WMain2Images, 228);
  4345.   DCheckBoxSmartPosLongHit.Left := 22;
  4346.   DCheckBoxSmartPosLongHit.Top := 36 + 24 * 7;

  4347.   DCheckBoxStruckShield.SetImgIndex(g_WMain2Images, 228);
  4348.   DCheckBoxStruckShield.Left := 140;
  4349.   DCheckBoxStruckShield.Top := 36 + 24 * 7;

  4350.   ItemList := DMemoTab5.Add;
  4351.   DMemoTab5.AddSuItem(ItemList, DCheckBoxSmartPosLongHit);
  4352.   DMemoTab5.AddSuItem(ItemList, DCheckBoxStruckShield);


  4353.   DCheckBoxSmartWalkLongHit.SetImgIndex(g_WMain2Images, 228);
  4354.   DCheckBoxSmartWalkLongHit.Left := 22;
  4355.   DCheckBoxSmartWalkLongHit.Top := 36 + 24 * 8;
  4356.   ItemList := DMemoTab5.Add;
  4357.   DMemoTab5.AddSuItem(ItemList, DCheckBoxSmartWalkLongHit);



  4358.   DLabel12.Left := 10;
  4359.   DLabel12.Top := 36 + 24 * 9;
  4360.   ItemList := DMemoTab5.Add;
  4361.   DMemoTab5.AddSuItem(ItemList, DLabel12);
  4362.   DMemoTab5.AddSuItem(ItemList, DSerieMagic1);
  4363.   DMemoTab5.AddSuItem(ItemList, DSerieMagic2);
  4364.   DMemoTab5.AddSuItem(ItemList, DSerieMagic3);
  4365.   DMemoTab5.AddSuItem(ItemList, DSerieMagic4);
  4366.   DMemoTab5.AddSuItem(ItemList, DSerieMagic5);
  4367.   DMemoTab5.AddSuItem(ItemList, DSerieMagic6);
  4368.   DMemoTab5.AddSuItem(ItemList, DSerieMagic7);
  4369.   DMemoTab5.AddSuItem(ItemList, DSerieMagic8);

  4370.   DSerieMagic1.Left := 22;
  4371.   DSerieMagic1.Top := 36 + 24 * 10;
  4372.   DSerieMagic1.Width := 36;
  4373.   DSerieMagic1.Height := 34;

  4374.   DSerieMagic2.Left := 22 + 42;
  4375.   DSerieMagic2.Top := 36 + 24 * 10;
  4376.   DSerieMagic2.Width := 36;
  4377.   DSerieMagic2.Height := 34;

  4378.   DSerieMagic3.Left := 22 + 42 * 2;
  4379.   DSerieMagic3.Top := 36 + 24 * 10;
  4380.   DSerieMagic3.Width := 36;
  4381.   DSerieMagic3.Height := 34;

  4382.   DSerieMagic4.Left := 22 + 42 * 3;
  4383.   DSerieMagic4.Top := 36 + 24 * 10;
  4384.   DSerieMagic4.Width := 36;
  4385.   DSerieMagic4.Height := 34;

  4386.   DSerieMagic5.Left := 22 + 42 * 4;
  4387.   DSerieMagic5.Top := 36 + 24 * 10;
  4388.   DSerieMagic5.Width := 36;
  4389.   DSerieMagic5.Height := 34;

  4390.   DSerieMagic6.Left := 22 + 42 * 5;
  4391.   DSerieMagic6.Top := 36 + 24 * 10;
  4392.   DSerieMagic6.Width := 36;
  4393.   DSerieMagic6.Height := 34;

  4394.   DSerieMagic7.Left := 22 + 42 * 6;
  4395.   DSerieMagic7.Top := 36 + 24 * 10;
  4396.   DSerieMagic7.Width := 36;
  4397.   DSerieMagic7.Height := 34;

  4398.   DSerieMagic8.Left := 22 + 42 * 7;
  4399.   DSerieMagic8.Top := 36 + 24 * 10;
  4400.   DSerieMagic8.Width := 36;
  4401.   DSerieMagic8.Height := 34;
  4402. {-----------------------DMemoTab6---------------------------}
  4403.   DCheckBoxUseKey.SetImgIndex(g_WMain2Images, 228);
  4404.   DCheckBoxUseKey.Left := 10;
  4405.   DCheckBoxUseKey.Top := 6;

  4406.   ItemList := DMemoTab6.Add;
  4407.   DMemoTab6.AddSuItem(ItemList, DCheckBoxUseKey);


  4408.   DLabelKeyMemo.Left := 12;
  4409.   DLabelKeyMemo.Top := 26;
  4410.   DLabelKeyOriginal.Left := 136;
  4411.   DLabelKeyOriginal.Top := 26;
  4412.   DLabelKeyChange.Left := 266;
  4413.   DLabelKeyChange.Top := 26;

  4414.   ItemList := DMemoTab6.Add;
  4415.   DMemoTab6.AddSuItem(ItemList, DLabelKeyMemo);
  4416.   DMemoTab6.AddSuItem(ItemList, DLabelKeyOriginal);
  4417.   DMemoTab6.AddSuItem(ItemList, DLabelKeyChange);


  4418.   DLabelKey0.Left := 12;
  4419.   DLabelKey0.Top := 48;
  4420.   DLabelKey1.Left := 12;
  4421.   DLabelKey1.Top := 48 + 22;
  4422.   DLabelKey2.Left := 12;
  4423.   DLabelKey2.Top := 48 + 22 * 2;
  4424.   DLabelKey3.Left := 12;
  4425.   DLabelKey3.Top := 48 + 22 * 3;
  4426.   DLabelKey4.Left := 12;
  4427.   DLabelKey4.Top := 48 + 22 * 4;
  4428.   DLabelKey5.Left := 12;
  4429.   DLabelKey5.Top := 48 + 22 * 5;
  4430.   DLabelKey6.Left := 12;
  4431.   DLabelKey6.Top := 48 + 22 * 6;
  4432.   DLabelKey7.Left := 12;
  4433.   DLabelKey7.Top := 48 + 22 * 7;



  4434.   DLabelSerieSkill1.Left := 102;
  4435.   DLabelSerieSkill1.Top := 48;
  4436.   DLabelSerieSkill1.Width := 128;

  4437.   DLabelHeroCallHero1.Left := 102;
  4438.   DLabelHeroCallHero1.Top := 48 + 22;
  4439.   DLabelHeroCallHero1.Width := 128;


  4440.   DLabelHeroSetTarget1.Left := 102;
  4441.   DLabelHeroSetTarget1.Top := 48 + 22 * 2;
  4442.   DLabelHeroSetTarget1.Width := 128;

  4443.   DLabelHeroUnionHit1.Left := 102;
  4444.   DLabelHeroUnionHit1.Top := 48 + 22 * 3;
  4445.   DLabelHeroUnionHit1.Width := 128;

  4446.   DLabelHeroSetAttackState1.Left := 102;
  4447.   DLabelHeroSetAttackState1.Top := 48 + 22 * 4;
  4448.   DLabelHeroSetAttackState1.Width := 128;

  4449.   DLabelHeroSetGuard1.Left := 102;
  4450.   DLabelHeroSetGuard1.Top := 48 + 22 * 5;
  4451.   DLabelHeroSetGuard1.Width := 128;


  4452.   DLabelSwitchAttackMode1.Left := 102;
  4453.   DLabelSwitchAttackMode1.Top := 48 + 22 * 6;
  4454.   DLabelSwitchAttackMode1.Width := 128;

  4455.   DLabelSwitchMiniMap1.Left := 102;
  4456.   DLabelSwitchMiniMap1.Top := 48 + 22 * 7;
  4457.   DLabelSwitchMiniMap1.Width := 128;



  4458.   DLabelSerieSkill.Left := 240 - 2;
  4459.   DLabelSerieSkill.Top := 48;
  4460.   DLabelSerieSkill.Width := 128;

  4461.   DLabelHeroCallHero.Left := 240 - 2;
  4462.   DLabelHeroCallHero.Top := 48 + 22;
  4463.   DLabelHeroCallHero.Width := 128;

  4464.   DLabelHeroSetTarget.Left := 240 - 2;
  4465.   DLabelHeroSetTarget.Top := 48 + 22 * 2;
  4466.   DLabelHeroSetTarget.Width := 128;

  4467.   DLabelHeroUnionHit.Left := 240 - 2;
  4468.   DLabelHeroUnionHit.Top := 48 + 22 * 3;
  4469.   DLabelHeroUnionHit.Width := 128;

  4470.   DLabelHeroSetAttackState.Left := 240 - 2;
  4471.   DLabelHeroSetAttackState.Top := 48 + 22 * 4;
  4472.   DLabelHeroSetAttackState.Width := 128;

  4473.   DLabelHeroSetGuard.Left := 240 - 2;
  4474.   DLabelHeroSetGuard.Top := 48 + 22 * 5;
  4475.   DLabelHeroSetGuard.Width := 128;


  4476.   DLabelSwitchAttackMode.Left := 240 - 2;
  4477.   DLabelSwitchAttackMode.Top := 48 + 22 * 6;
  4478.   DLabelSwitchAttackMode.Width := 128;

  4479.   DLabelSwitchMiniMap.Left := 240 - 2;
  4480.   DLabelSwitchMiniMap.Top := 48 + 22 * 7;
  4481.   DLabelSwitchMiniMap.Width := 128;


  4482.   ItemList := DMemoTab6.Add;
  4483.   DMemoTab6.AddSuItem(ItemList, DLabelKey0);
  4484.   DMemoTab6.AddSuItem(ItemList, DLabelSerieSkill1);
  4485.   DMemoTab6.AddSuItem(ItemList, DLabelSerieSkill);

  4486.   ItemList := DMemoTab6.Add;
  4487.   DMemoTab6.AddSuItem(ItemList, DLabelKey1);
  4488.   DMemoTab6.AddSuItem(ItemList, DLabelHeroCallHero1);
  4489.   DMemoTab6.AddSuItem(ItemList, DLabelHeroCallHero);

  4490.   ItemList := DMemoTab6.Add;
  4491.   DMemoTab6.AddSuItem(ItemList, DLabelKey2);
  4492.   DMemoTab6.AddSuItem(ItemList, DLabelHeroSetTarget1);
  4493.   DMemoTab6.AddSuItem(ItemList, DLabelHeroSetTarget);

  4494.   ItemList := DMemoTab6.Add;
  4495.   DMemoTab6.AddSuItem(ItemList, DLabelKey3);
  4496.   DMemoTab6.AddSuItem(ItemList, DLabelHeroUnionHit1);
  4497.   DMemoTab6.AddSuItem(ItemList, DLabelHeroUnionHit);

  4498.   ItemList := DMemoTab6.Add;
  4499.   DMemoTab6.AddSuItem(ItemList, DLabelKey4);
  4500.   DMemoTab6.AddSuItem(ItemList, DLabelHeroSetAttackState1);
  4501.   DMemoTab6.AddSuItem(ItemList, DLabelHeroSetAttackState);

  4502.   ItemList := DMemoTab6.Add;
  4503.   DMemoTab6.AddSuItem(ItemList, DLabelKey5);
  4504.   DMemoTab6.AddSuItem(ItemList, DLabelHeroSetGuard1);
  4505.   DMemoTab6.AddSuItem(ItemList, DLabelHeroSetGuard);


  4506.   ItemList := DMemoTab6.Add;
  4507.   DMemoTab6.AddSuItem(ItemList, DLabelKey6);
  4508.   DMemoTab6.AddSuItem(ItemList, DLabelSwitchAttackMode1);
  4509.   DMemoTab6.AddSuItem(ItemList, DLabelSwitchAttackMode);

  4510.   ItemList := DMemoTab6.Add;
  4511.   DMemoTab6.AddSuItem(ItemList, DLabelKey7);
  4512.   DMemoTab6.AddSuItem(ItemList, DLabelSwitchMiniMap1);
  4513.   DMemoTab6.AddSuItem(ItemList, DLabelSwitchMiniMap);



  4514. {-----------------------DMemoTab7---------------------------}
  4515.   DCheckBoxGuaji.SetImgIndex(g_WMain2Images, 228);
  4516.   DCheckBoxGuaji.Left := 10;
  4517.   DCheckBoxGuaji.Top := 6;

  4518.   DLabelGuaJiStart.Left := 120;
  4519.   DLabelGuaJiStart.Top := 7;
  4520.   //DLabelGuaJiStart.Canvas.Font.Style := [fsBold];

  4521.   ItemList := DMemoTab7.Add;
  4522.   DMemoTab7.AddSuItem(ItemList, DCheckBoxGuaji);
  4523.   DMemoTab7.AddSuItem(ItemList, DLabelGuaJiStart);


  4524.   ItemList := DMemoTab7.Add;
  4525.   DMemoTab7.AddSuItem(ItemList, DLabelGuajiQunti);
  4526.   DMemoTab7.AddSuItem(ItemList, DComboboxGuajiQunti);

  4527.   ItemList := DMemoTab7.Add;
  4528.   DMemoTab7.AddSuItem(ItemList, DLabelGuajiGeti);
  4529.   DMemoTab7.AddSuItem(ItemList, DComboboxGuajiGeti);


  4530.   DLabelGuajiQunti.Left := 12;
  4531.   DLabelGuajiQunti.Top := 38;

  4532.   DLabelGuajiGeti.Left := 12;
  4533.   DLabelGuajiGeti.Top := 38 + 28;

  4534.   DComboboxGuajiQunti.Left := 80;
  4535.   DComboboxGuajiQunti.Top := 36;
  4536.   DComboboxGuajiQunti.Width := 100;

  4537.   DComboboxGuajiGeti.Left := 80;
  4538.   DComboboxGuajiGeti.Top := 36 + 26;
  4539.   DComboboxGuajiGeti.Width := 100;

  4540. {-----------------------DMemoTab8---------------------------}


  4541.   if FileExists(EXPLAIN2FILE) then begin
  4542.     DMemoTab8.LoadFromFile(EXPLAIN2FILE);
  4543.     nIndex := 0;
  4544.     for I := 0 to DMemoTab8.Count - 1 do begin
  4545.       ItemList := TLines(DMemoTab8.Items[I]);
  4546.       sText := ItemList.Strings[0];
  4547.       if (Length(sText) <> Length(Trim(sText))) then begin
  4548.         for II := 0 to ItemList.Count - 1 do begin
  4549.           DLabel := TDLabel(ItemList.Objects[II]);
  4550.           DLabel.Canvas.Font.Style := [];
  4551.           DLabel.Canvas.Font.Color := clSilver;
  4552.           DLabel.Font.Assign(DLabel.Canvas.Font);
  4553.           DLabel.UpColor := clSilver;
  4554.           DLabel.HotColor := clSilver;
  4555.           DLabel.DownColor := clSilver;
  4556.           DLabel.Left := DLabel.Left + 6;
  4557.           //DLabel.Top := DLabel.Top + nIndex;
  4558.         end;
  4559.         //Showmessage('(sText = ''):'+sText);
  4560.       end else begin
  4561.         for II := 0 to ItemList.Count - 1 do begin
  4562.           DLabel := TDLabel(ItemList.Objects[II]);
  4563.           DLabel.Canvas.Font.Style := [fsBold];
  4564.           DLabel.Canvas.Font.Color := clWhite;
  4565.           DLabel.Font.Assign(DLabel.Canvas.Font);
  4566.           DLabel.UpColor := clWhite;
  4567.           DLabel.HotColor := clWhite;
  4568.           DLabel.DownColor := clWhite;
  4569.           //DLabel.Top := DLabel.Top + nIndex;
  4570.         end;
  4571.       end;
  4572.       //TLines(ItemList).GetHeight;
  4573.       //nIndex := nIndex + 4;
  4574.     end;
  4575.     //nIndex := DMemoTab8.MaxHeight;
  4576.   end;

  4577.   DMemoTab1.MaxHeight := DMemoTab1.MaxHeight + 24 * 5;
  4578.   //DMemoTab2.MaxHeight:=DMemoTab2.MaxHeight+24*4;
  4579.   DMemoTab3.MaxHeight := DMemoTab3.MaxHeight + 24 * 4;
  4580.   DMemoTab4.MaxHeight := DMemoTab4.MaxHeight + 24 * 4;
  4581.   DMemoTab5.MaxHeight := DMemoTab5.MaxHeight + 24 * 4;
  4582.   DMemoTab6.MaxHeight := DMemoTab6.MaxHeight + 24 * 4;
  4583.   DMemoTab7.MaxHeight := DMemoTab7.MaxHeight + 24 * 4;
  4584.   DMemoTab8.MaxHeight := DMemoTab8.MaxHeight + 24 * 4;
  4585.   DConfigDlg.ActivePage := 0;
  4586. {-----------------------------------------------------------}
  4587.   Initialized := True;
  4588. end;

  4589. function FastCharPos(const aSource: string; const C: Char; StartPos: Integer): Integer;
  4590. var
  4591.   L: Integer;
  4592. begin
  4593.   //If this assert failed, it is because you passed 0 for StartPos, lowest value is 1 !!
  4594.   Assert(StartPos > 0);

  4595.   Result := 0;
  4596.   L := Length(aSource);
  4597.   if L = 0 then exit;
  4598.   if StartPos > L then exit;
  4599.   Dec(StartPos);
  4600.   asm
  4601.       PUSH EDI                 //Preserve this register

  4602.       mov  EDI, aSource        //Point EDI at aSource
  4603.       add  EDI, StartPos
  4604.       mov  ECX, L              //Make a note of how many chars to search through
  4605.       sub  ECX, StartPos
  4606.       mov  AL,  C              //and which char we want
  4607.     @Loop:
  4608.       cmp  Al, [EDI]           //compare it against the SourceString
  4609.       jz   @Found
  4610.       inc  EDI
  4611.       dec  ECX
  4612.       jnz  @Loop
  4613.       jmp  @NotFound
  4614.     @Found:
  4615.       sub  EDI, aSource        //EDI has been incremented, so EDI-OrigAdress = Char pos !
  4616.       inc  EDI
  4617.       mov  Result,   EDI
  4618.     @NotFound:

  4619.       POP  EDI
  4620.   end;
  4621. end;

  4622. function TFrmDlg.AddMemoChat(Str: string; FColor, BColor: Integer): string;//添加聊天文字
  4623. var
  4624.   I, len, aline, n, nWidth: Integer;
  4625.   dline, temp: string;
  4626.   sData, sItemData, sUrl: string;

  4627.   //sTemp: string;
  4628.   sIdx: string;
  4629.   sName: string;
  4630.   sItemName: string;
  4631.   sLooks: string;
  4632.   sItemMakeIdex: string;
  4633.   nItemMakeIdex: Integer;
  4634.   nIdx: Integer;
  4635.   nLooks: Integer;
  4636.   DLabel: TDLabel;
  4637.   ItemLabel: TItemLabel;
  4638.   d: TTexture;
  4639.   nTop: Integer;
  4640.   ItemList: TStringList;
  4641.   nNextHeight: Integer;
  4642. //const
  4643.   //BOXWIDTH = (SCREENWIDTH div 2 - 214) * 2 {374}; //41 聊天框文字宽度
  4644. label AddText;
  4645. begin
  4646.   Result := '';

  4647.   AddText:
  4648.   nNextHeight := 0;
  4649.   nWidth := 0;
  4650.   len := Length(Str);
  4651.   temp := '';
  4652.   I := 1;
  4653.   nTop := DMemoChat.MaxHeight - DScrollChat.Position;
  4654.   ItemList := DMemoChat.Add;

  4655.   while True do begin
  4656.     if I > len then Break;
  4657.     if (Str[I] = '<') then begin
  4658.       //n := Pos('>', Str);
  4659.       n := FastCharPos(Str, '>', I);
  4660.       if (n > 0) then begin

  4661.         sItemData := Copy(Str, I + 1, n - I - 1);
  4662.         //DebugOutStr('Str:' + Str);
  4663.         //DebugOutStr('sItemData:' + sItemData + ' Length(Str) - n:' + IntToStr(Length(Str) - n));
  4664.         sItemData := GetValidStr3(sItemData, sIdx, ['|']);
  4665.         nIdx := StrToIntDef(sIdx, -1);
  4666.         nItemMakeIdex := 0;

  4667.         case nIdx of
  4668.           0: begin
  4669.               sItemData := GetValidStr3(sItemData, sName, ['|']);
  4670.               sItemData := GetValidStr3(sItemData, sItemName, ['|']);
  4671.               sItemData := GetValidStr3(sItemData, sItemMakeIdex, ['|']);
  4672.               sItemData := GetValidStr3(sItemData, sLooks, ['|']);
  4673.               nItemMakeIdex := StrToIntDef(sItemMakeIdex, 0);
  4674.               nLooks := StrToIntDef(sLooks, -1);
  4675.             end;
  4676.           1: begin
  4677.               sItemData := GetValidStr3(sItemData, sName, ['|']);
  4678.               sItemData := GetValidStr3(sItemData, sItemName, ['|']);
  4679.             end;
  4680.           2: begin
  4681.               sItemData := GetValidStr3(sItemData, sName, ['|']);
  4682.               sItemData := GetValidStr3(sItemData, sItemName, ['|']);
  4683.             end;
  4684.         end;

  4685.         if (nIdx in [0..2]) and (sName <> '') and (sItemName <> '') and (((nIdx = 0) and (nItemMakeIdex <> 0) and (nLooks <> -1)) or ((nIdx > 0) and (nItemMakeIdex = 0))) then begin

  4686.           if temp <> '' then begin

  4687.             DLabel := TDLabel.Create(DMemoChat);
  4688.             DLabel.Font.Assign(MainForm.Canvas.Font);
  4689.             DLabel.Font.Style := [];
  4690.             DLabel.Font.Color := FColor;

  4691.             DLabel.BoldFont := False;
  4692.             DLabel.DParent := DMemoChat;
  4693.             DLabel.UpColor := FColor;
  4694.             DLabel.HotColor := FColor;
  4695.             DLabel.DownColor := FColor;
  4696.             DLabel.DrawBackground := True;
  4697.             DLabel.BackgroundColor := BColor;
  4698.             //DLabel.OnClick := DItemLabelClick;
  4699.             DLabel.OnMouseMove := DItemLabelMouseMove;

  4700.             if BColor = clblack then
  4701.               DLabel.BackgroundColor := $00050505;
  4702.             DLabel.Caption := temp;
  4703.             DLabel.Left := TLines(ItemList).Width;
  4704.             DLabel.Top := nTop;
  4705.             if nNextHeight < DLabel.Height then
  4706.               nNextHeight := DLabel.Height;
  4707.             DMemoChat.AddSuItem(ItemList, DLabel);
  4708.             Result := Result + temp;

  4709.            //temp := '';
  4710.           end;

  4711.           if nIdx = 0 then begin
  4712.             d := g_WBagItemImages.Images[nLooks];
  4713.             if d <> nil then begin
  4714.               aline := nWidth + d.Width + ImageCanvas.TextWidth(temp);
  4715.             end else begin
  4716.               aline := nWidth + ImageCanvas.TextWidth(sItemName) + ImageCanvas.TextWidth(temp);
  4717.             end;
  4718.             if aline > DMemoChat.Width - 6 then begin
  4719.               Str := Copy(Str, I, Length(Str));
  4720.               //Str := Copy(Str, I, len - I + 1);
  4721.               temp := '';
  4722.               Break;
  4723.             end else begin
  4724.               Str := Copy(Str, n + 1, Length(Str));
  4725.               len := Length(Str);
  4726.               //DebugOutStr('Str:' + Str);
  4727.               //Str := Copy(Str, n + 1, len - n + 1);
  4728.               I := 0;

  4729.               if d <> nil then begin
  4730.                 ItemLabel := TItemLabel.Create(DMemoChat);
  4731.                 ItemLabel.DParent := DMemoChat;
  4732.                 ItemLabel.SetImgIndex(g_WBagItemImages, nLooks);
  4733.                 ItemLabel.Idx := nIdx;
  4734.                 ItemLabel.OnClick := DItemLabelClick;
  4735.                 ItemLabel.OnMouseMove := DItemLabelMouseMove;
  4736.                 ItemLabel.Caption := sItemName;
  4737.                 ItemLabel.TData := sName + '|' + sItemName + '|' + sItemMakeIdex;

  4738.                 ItemLabel.Left := TLines(ItemList).Width;
  4739.                 ItemLabel.Top := nTop;
  4740.                 if nNextHeight < ItemLabel.Height then
  4741.                   nNextHeight := ItemLabel.Height;
  4742.                 DMemoChat.AddSuItem(ItemList, ItemLabel);

  4743.                 Inc(nWidth, ItemLabel.Width);
  4744.               end else begin
  4745.                 DLabel := TDLabel.Create(DMemoChat);
  4746.                 DLabel.Idx := nIdx;
  4747.                 DLabel.Font.Assign(MainForm.Canvas.Font);
  4748.                 DLabel.Font.Style := [fsUnderline];
  4749.                 DLabel.Font.Color := FColor;

  4750.                 DLabel.BoldFont := False;
  4751.                 DLabel.DParent := DMemoChat;
  4752.                 DLabel.UpColor := FColor;
  4753.                 DLabel.HotColor := FColor;
  4754.                 DLabel.DownColor := FColor;
  4755.                 DLabel.DrawBackground := True;
  4756.                 DLabel.BackgroundColor := BColor;
  4757.                 DLabel.OnClick := DItemLabelClick;
  4758.                 DLabel.OnMouseMove := DItemLabelMouseMove;
  4759.                 if BColor = clblack then
  4760.                   DLabel.BackgroundColor := $00050505;
  4761.                 DLabel.Style := bsBase;
  4762.                 DLabel.Caption := sItemName;
  4763.                 DLabel.TData := sName + '|' + sItemName + '|' + sItemMakeIdex;
  4764.                 DLabel.Left := TLines(ItemList).Width;
  4765.                 DLabel.Top := nTop;
  4766.                 if nNextHeight < DLabel.Height then
  4767.                   nNextHeight := DLabel.Height;
  4768.                 DMemoChat.AddSuItem(ItemList, DLabel);
  4769.                 Inc(nWidth, DLabel.Width);
  4770.               end;
  4771.               temp := '';
  4772.               Result := Result + sItemName;
  4773.             end;
  4774.           end else begin //if nIdx = 0 then begin
  4775.             aline := nWidth + ImageCanvas.TextWidth(sName) + ImageCanvas.TextWidth(temp);
  4776.             if aline > DMemoChat.Width - 6 then begin
  4777.               Str := Copy(Str, I, Length(Str));
  4778.               temp := '';
  4779.               Break;
  4780.             end else begin
  4781.               Str := Copy(Str, n + 1, Length(Str));
  4782.               len := Length(Str);
  4783.               I := 0;

  4784.               DLabel := TDLabel.Create(DMemoChat);
  4785.               DLabel.Idx := nIdx;
  4786.               DLabel.Font.Assign(MainForm.Canvas.Font);
  4787.               DLabel.Font.Style := [fsUnderline];
  4788.               DLabel.Font.Color := FColor;

  4789.               DLabel.BoldFont := False;
  4790.               DLabel.DParent := DMemoChat;
  4791.               DLabel.UpColor := FColor;
  4792.               DLabel.HotColor := FColor;
  4793.               DLabel.DownColor := FColor;
  4794.               DLabel.DrawBackground := True;
  4795.               DLabel.BackgroundColor := BColor;
  4796.               DLabel.OnClick := DItemLabelClick;
  4797.               DLabel.OnMouseMove := DItemLabelMouseMove;
  4798.               if BColor = clblack then
  4799.                 DLabel.BackgroundColor := $00050505;
  4800.               DLabel.Style := bsBase;
  4801.               DLabel.Caption := sName;
  4802.               DLabel.TData := sItemName;
  4803.               DLabel.Left := TLines(ItemList).Width;
  4804.               DLabel.Top := nTop;
  4805.               if nNextHeight < DLabel.Height then
  4806.                 nNextHeight := DLabel.Height;

  4807.               DMemoChat.AddSuItem(ItemList, DLabel);
  4808.               Result := Result + sName;
  4809.               Inc(nWidth, DLabel.Width);
  4810.               temp := '';
  4811.             end;
  4812.           end;
  4813.         end else begin //if (nIdx in [0..2]) and (sName <> '')
  4814.           temp := temp + Str[I];
  4815.           //nWidth:=ImageCanvas.TextWidth(temp);
  4816.           aline := nWidth + ImageCanvas.TextWidth(temp);
  4817.           if aline > DMemoChat.Width - 6 then begin

  4818.             DLabel := TDLabel.Create(DMemoChat);
  4819.             DLabel.Font.Assign(MainForm.Canvas.Font);
  4820.             DLabel.Font.Color := FColor;
  4821.             DLabel.BoldFont := False;
  4822.             DLabel.DParent := DMemoChat;
  4823.             DLabel.UpColor := FColor;
  4824.             DLabel.HotColor := FColor;
  4825.             DLabel.DownColor := FColor;
  4826.             DLabel.DrawBackground := True;
  4827.             DLabel.BackgroundColor := BColor;
  4828.             DLabel.OnMouseMove := DItemLabelMouseMove;
  4829.             if BColor = clblack then
  4830.               DLabel.BackgroundColor := $00050505;
  4831.             DLabel.Caption := temp;

  4832.             DLabel.Left := TLines(ItemList).Width;
  4833.             DLabel.Top := nTop;
  4834.             if nNextHeight < DLabel.Height then
  4835.               nNextHeight := DLabel.Height;
  4836.             DMemoChat.AddSuItem(ItemList, DLabel);
  4837.             Result := Result + temp;

  4838.             Str := Copy(Str, I + 1, len - I);
  4839.             temp := '';
  4840.             Break;
  4841.           end;
  4842.         end;
  4843.       end else begin //if n > 0 then begin
  4844.         temp := temp + Str[I];
  4845.         aline := nWidth + ImageCanvas.TextWidth(temp);
  4846.         if aline > DMemoChat.Width - 6 then begin

  4847.           DLabel := TDLabel.Create(DMemoChat);
  4848.           DLabel.Font.Assign(MainForm.Canvas.Font);
  4849.           DLabel.Font.Color := FColor;
  4850.           DLabel.BoldFont := False;
  4851.           DLabel.DParent := DMemoChat;
  4852.           DLabel.UpColor := FColor;
  4853.           DLabel.HotColor := FColor;
  4854.           DLabel.DownColor := FColor;
  4855.           DLabel.DrawBackground := True;
  4856.           DLabel.BackgroundColor := BColor;
  4857.           DLabel.OnMouseMove := DItemLabelMouseMove;
  4858.           if BColor = clblack then
  4859.             DLabel.BackgroundColor := $00050505;
  4860.           DLabel.Caption := temp;

  4861.           DLabel.Left := TLines(ItemList).Width;
  4862.           DLabel.Top := nTop;
  4863.           if nNextHeight < DLabel.Height then
  4864.             nNextHeight := DLabel.Height;
  4865.           DMemoChat.AddSuItem(ItemList, DLabel);
  4866.           Result := Result + temp;

  4867.           Str := Copy(Str, I + 1, len - I);
  4868.           temp := '';
  4869.           Break;
  4870.         end;
  4871.       end;
  4872.     end else begin //if (Str[I] = '<') then begin
  4873.       if Byte(Str[I]) >= 128 then begin
  4874.         temp := temp + Str[I];
  4875.         Inc(I);
  4876.         if I <= len then begin
  4877.           temp := temp + Str[I];
  4878.         end else Break;
  4879.       end else begin
  4880.         temp := temp + Str[I];
  4881.       end;
  4882.       aline := nWidth + ImageCanvas.TextWidth(temp);
  4883.       if aline > DMemoChat.Width - 6 then begin

  4884.         DLabel := TDLabel.Create(DMemoChat);
  4885.         DLabel.Font.Assign(MainForm.Canvas.Font);
  4886.         DLabel.Font.Color := FColor;
  4887.         DLabel.BoldFont := False;
  4888.         DLabel.DParent := DMemoChat;
  4889.         DLabel.UpColor := FColor;
  4890.         DLabel.HotColor := FColor;
  4891.         DLabel.DownColor := FColor;
  4892.         DLabel.DrawBackground := True;
  4893.         DLabel.BackgroundColor := BColor;
  4894.         DLabel.OnMouseMove := DItemLabelMouseMove;
  4895.         if BColor = clblack then
  4896.           DLabel.BackgroundColor := $00050505;
  4897.         DLabel.Caption := temp;

  4898.         DLabel.Left := TLines(ItemList).Width;
  4899.         DLabel.Top := nTop;
  4900.         if nNextHeight < DLabel.Height then
  4901.           nNextHeight := DLabel.Height;

  4902.         //DebugOutStr('nTop0:' + IntToStr(nTop) + ' ' + temp);
  4903.         DMemoChat.AddSuItem(ItemList, DLabel);
  4904.         Result := Result + temp;
  4905.         Str := Copy(Str, I + 1, len - I);
  4906.         temp := '';
  4907.         Break;
  4908.       end;
  4909.     end;
  4910.     Inc(I);
  4911.   end;

  4912.   if temp <> '' then begin
  4913.     DLabel := TDLabel.Create(DMemoChat);
  4914.     DLabel.Font.Assign(MainForm.Canvas.Font);
  4915.     DLabel.Font.Color := FColor;
  4916.     DLabel.BoldFont := False;
  4917.     DLabel.DParent := DMemoChat;
  4918.     DLabel.UpColor := FColor;
  4919.     DLabel.HotColor := FColor;
  4920.     DLabel.DownColor := FColor;
  4921.     DLabel.DrawBackground := True;
  4922.     DLabel.BackgroundColor := BColor;
  4923.     DLabel.OnMouseMove := DItemLabelMouseMove;
  4924.     if BColor = clblack then
  4925.       DLabel.BackgroundColor := $00050505;
  4926.     DLabel.Caption := temp;

  4927.     DLabel.Left := TLines(ItemList).Width;
  4928.     DLabel.Top := nTop;
  4929.     //DebugOutStr('nTop1:' + IntToStr(nTop) + ' ' + temp);
  4930.     {DebugOutStr('DLabel SurfaceY:' + IntToStr(DLabel.SurfaceY(DLabel.Top)));
  4931.     DebugOutStr('DMemoChat:' + IntToStr(DMemoChat.SurfaceY(DMemoChat.Top) + DMemoChat.Height));}
  4932.     if nNextHeight < DLabel.Height then
  4933.       nNextHeight := DLabel.Height;

  4934.     DMemoChat.AddSuItem(ItemList, DLabel);
  4935.     Result := Result + temp;
  4936.     Str := '';
  4937.   end;

  4938.   if DMemoChat.Count >= 9 then begin
  4939.     while nNextHeight > 0 do begin
  4940.       DScrollChat.Next;
  4941.       Dec(nNextHeight, DScrollChat.Increment);
  4942.     end;
  4943.     nNextHeight := 0;
  4944.   end;
  4945. // DScrollChat.Position := DScrollChat.Position + nNextHeight;
  4946.   //DScrollChat.Next;
  4947.   while DMemoChat.Count > 200 do begin
  4948.    // DMemoChat.Clear;
  4949.     ItemList := DMemoChat.Items[0];
  4950.     DMemoChat.Delete(0);
  4951.     //DMemoChat.RefreshPos;

  4952.     for I := 0 to ItemList.Count - 1 do begin
  4953.       TDControl(ItemList.Objects[I]).Free;
  4954.     end;
  4955.     ItemList.Free;
  4956.     //DScrollChat.Next;
  4957.     //DScrollChat.Previous;
  4958.     //DebugOutStr('DMemoChat.Count > 200');
  4959.   end;


  4960.   if Str <> '' then begin
  4961.     Str := ' ' + Str;
  4962.     goto AddText;
  4963.   end;
  4964.   //DMemoChat.SpareSize:=DMemoChat.Height - 12;
  4965.   //DScrollChat.Max:=DMemoChat.MaxHeight+DMemoChat.SpareSize;

  4966. end;

  4967. //打开/关闭我的属性对话框

  4968. procedure TFrmDlg.OpenMyStatus;
  4969. begin
  4970.   DStateWin.Visible := not DStateWin.Visible;
  4971.   PageChanged;
  4972. end;
  4973. //显示玩加信息对话框

  4974. procedure TFrmDlg.OpenUserState(UserState: TUserStateInfo);
  4975. begin
  4976.   UserState1 := UserState;
  4977.   DUserState1.Visible := True;
  4978. end;

  4979. //显示/关闭物品对话框

  4980. procedure TFrmDlg.OpenItemBag;
  4981. begin
  4982.   DItemBag.Visible := not DItemBag.Visible;
  4983. end;

  4984. procedure TFrmDlg.SetChatVisible(Value: Boolean);
  4985. begin
  4986.   DChatDlg.Visible := Value;
  4987. end;

  4988. procedure TFrmDlg.SetInputVisible(Value: Boolean);
  4989. begin
  4990.   DEdChat.Visible := Value;
  4991.   if not Value then
  4992.     EdChat.Visible := Value;
  4993. end;


  4994. //底部状态框

  4995. procedure TFrmDlg.ViewBottomBox(Value: Boolean);
  4996. begin
  4997.   DBottom.Visible := Value;
  4998.   DChatDlg.Visible := Value;
  4999.   if g_ConfigClient.btMainInterface = 1 then begin
  5000.     SetButVisible(Value);
  5001.     DMapTitle.Visible := Value;
  5002.     SetInputVisible(Value);
  5003.     SetChatVisible(Value);

  5004.   end else begin

  5005.   end;
  5006.   if (DBottom.Visible) and (not g_boFullScreen) then begin
  5007.     frmMain.Caption := g_sServerName + ' - ' + g_sSelChrName;
  5008.     DBackground.SetFocus;
  5009.   end;
  5010. end;

  5011. // 取消物品移动

  5012. procedure TFrmDlg.CancelItemMoving;
  5013. var
  5014.   Idx, n: Integer;
  5015. begin
  5016.   //if (g_MovingItem.Owner = DHeroItemBag) or (g_MovingItem.Owner = DHeroStateWin) then Exit;
  5017.   if g_boItemMoving then begin
  5018.     g_boItemMoving := False;
  5019.     Idx := g_MovingItem.Index;
  5020.     if Idx < 0 then begin
  5021.       if (Idx <= -20) and (Idx > -30) then begin
  5022.         AddDealItem(g_MovingItem.Item);
  5023.       end else begin
  5024.         n := -(Idx + 1);
  5025.         if n in [0..12] then begin
  5026.           g_UseItems[n] := g_MovingItem.Item;
  5027.         end;
  5028.       end;
  5029.     end else
  5030.       if Idx in [0..MAXBAGITEM - 1] then begin
  5031.       if g_ItemArr[Idx].s.Name = '' then begin
  5032.         g_ItemArr[Idx] := g_MovingItem.Item;
  5033.       end else begin
  5034.         AddItemBag(g_MovingItem.Item);
  5035.       end;
  5036.     end;
  5037.     g_MovingItem.Item.s.Name := '';
  5038.   end;
  5039.   ArrangeItemBag;
  5040. end;

  5041. //把移动的物品放下

  5042. procedure TFrmDlg.DropMovingItem;
  5043. var
  5044.   Idx: Integer;
  5045. begin
  5046.   //if g_btItemMoving in [3, 4] then Exit;
  5047.   if g_boItemMoving then begin
  5048.     g_boItemMoving := False;
  5049.     if g_MovingItem.Item.s.Name <> '' then begin
  5050.       if (g_MovingItem.Owner = DHeroItemBag) then begin
  5051.         frmMain.SendHeroDropItem(g_MovingItem.Item.s.Name, g_MovingItem.Item.MakeIndex);
  5052.         AddDropItem(g_MovingItem.Item);
  5053.         g_MovingItem.Item.s.Name := '';
  5054.       end else
  5055.         if (g_MovingItem.Owner = DItemBag) then begin
  5056.         frmMain.SendDropItem(g_MovingItem.Item.s.Name, g_MovingItem.Item.MakeIndex);
  5057.         AddDropItem(g_MovingItem.Item);
  5058.         g_MovingItem.Item.s.Name := '';
  5059.       end;
  5060.     end;
  5061.   end;
  5062. end;
  5063. //打开属性调整对话框

  5064. procedure TFrmDlg.OpenAdjustAbility;
  5065. begin
  5066.   DAdjustAbility.Left := 0;
  5067.   DAdjustAbility.Top := 0;
  5068.   g_nSaveBonusPoint := g_nBonusPoint;
  5069.   FillChar(g_BonusAbilChg, SizeOf(TNakedAbility), #0);
  5070.   DAdjustAbility.Visible := True;
  5071. end;

  5072. procedure TFrmDlg.DBackgroundBackgroundClick(Sender: TObject);
  5073. var
  5074.   dropgold: Integer;
  5075.   valstr: string;
  5076. begin
  5077.   if g_boItemMoving then begin
  5078.     DBackground.WantReturn := True;
  5079.     if g_MovingItem.Item.s.Name = g_sGoldName {'金币'} then begin
  5080.       g_boItemMoving := False;
  5081.       g_MovingItem.Item.s.Name := '';
  5082.       DialogSize := 1;
  5083.       DMessageDlg('你想放下多少' + g_sGoldName + '数量?', [mbOk, mbAbort]);
  5084.       GetValidStrVal(DlgEditText, valstr, [' ']);
  5085.       dropgold := Str_ToInt(valstr, 0);
  5086.       frmMain.SendDropGold(dropgold);//发送丢掉金币
  5087.     end;
  5088.     if g_MovingItem.Index >= 0 then DropMovingItem;
  5089.   end;
  5090. end;

  5091. procedure TFrmDlg.DBackgroundMouseDown(Sender: TObject;
  5092.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  5093. begin
  5094.   if g_boItemMoving then begin
  5095.     DBackground.WantReturn := True;
  5096.   end;
  5097. end;

  5098. procedure TFrmDlg.DBottomMouseDown(Sender: TObject; Button: TMouseButton;
  5099.   Shift: TShiftState; X, Y: Integer);
  5100. begin

  5101. end;
  5102. {------------------------------------------------------------------------}
  5103. ////显示通用对话框

  5104. function TFrmDlg.DMessageDlg(msgstr: string; DlgButtons: TMsgDlgButtons): TModalResult;
  5105. const
  5106.   XBase = 324;
  5107. var
  5108.   I: Integer;
  5109.   lx, ly: Integer;
  5110.   d: TTexture;
  5111.   procedure ShowDice();
  5112.   var
  5113.     I: Integer;
  5114.     bo05: Boolean;
  5115.   begin
  5116.     if m_nDiceCount = 1 then begin
  5117.       if m_Dice[0].n67C < 20 then begin
  5118.         if GetTickCount - m_Dice[0].dwPlayTick > 100 then begin
  5119.           if m_Dice[0].n67C div 5 = 4 then begin
  5120.             m_Dice[0].nPlayPoint := Random(6) + 1;
  5121.           end else begin
  5122.             m_Dice[0].nPlayPoint := m_Dice[0].n67C div 5 + 8;
  5123.           end;
  5124.           m_Dice[0].dwPlayTick := GetTickCount();
  5125.           Inc(m_Dice[0].n67C);
  5126.         end;
  5127.         Exit;
  5128.       end;
  5129.       m_Dice[0].nPlayPoint := m_Dice[0].nDicePoint;
  5130.       if GetTickCount - m_Dice[0].dwPlayTick > 1500 then begin
  5131.         DMsgDlg.Visible := False;
  5132.       end;
  5133.       Exit;
  5134.     end;

  5135.     bo05 := True;
  5136.     for I := 0 to m_nDiceCount - 1 do begin
  5137.       if m_Dice[I].n67C < m_Dice[I].n680 then begin
  5138.         if GetTickCount - m_Dice[I].dwPlayTick > 100 then begin
  5139.           if m_Dice[I].n67C div 5 = 4 then begin
  5140.             m_Dice[I].nPlayPoint := Random(6) + 1;
  5141.           end else begin
  5142.             m_Dice[I].nPlayPoint := m_Dice[I].n67C div 5 + 8;
  5143.           end;
  5144.           m_Dice[I].dwPlayTick := GetTickCount();
  5145.           Inc(m_Dice[I].n67C);
  5146.         end;
  5147.         bo05 := False;
  5148.       end else begin
  5149.         m_Dice[I].nPlayPoint := m_Dice[I].nDicePoint;
  5150.         if GetTickCount - m_Dice[I].dwPlayTick < 2000 then begin
  5151.           bo05 := False;
  5152.         end;
  5153.       end;
  5154.     end; //for
  5155.     if bo05 then begin
  5156.       DMsgDlg.Visible := False;
  5157.     end;
  5158.   end;
  5159. begin
  5160.   lx := XBase;
  5161.   ly := 126;
  5162.   case DialogSize of
  5163.     0: {//小对话框} begin
  5164.         d := g_WMainImages.Images[381];
  5165.         if d <> nil then begin
  5166.           DMsgDlg.SetImgIndex(g_WMainImages, 381);
  5167.           DMsgDlg.Left := (SCREENWIDTH - d.Width) div 2;
  5168.           DMsgDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  5169.           msglx := 39;
  5170.           msgly := 38;
  5171.           lx := 90;
  5172.           ly := 36;
  5173.         end;
  5174.       end;
  5175.     1: {//大对话框(横)} begin
  5176.         d := g_WMainImages.Images[360];
  5177.         if d <> nil then begin
  5178.           DMsgDlg.SetImgIndex(g_WMainImages, 360);
  5179.           DMsgDlg.Left := (SCREENWIDTH - d.Width) div 2;
  5180.           DMsgDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  5181.           msglx := 39;
  5182.           msgly := 38;
  5183.           lx := XBase;
  5184.           ly := 126;
  5185.         end;
  5186.       end;
  5187.     2: {//大对话框(竖)} begin
  5188.         d := g_WMainImages.Images[380];
  5189.         if d <> nil then begin
  5190.           DMsgDlg.SetImgIndex(g_WMainImages, 380);
  5191.           DMsgDlg.Left := (SCREENWIDTH - d.Width) div 2;
  5192.           DMsgDlg.Top := (SCREENHEIGHT - d.Height) div 2;
  5193.           msglx := 23;
  5194.           msgly := 20;
  5195.           lx := 90;
  5196.           ly := 305;
  5197.         end;
  5198.       end;
  5199.   end;
  5200.   MsgText := msgstr;
  5201.   ViewDlgEdit := False; //编辑框不可见
  5202.   DMsgDlg.Floating := True; //允许鼠标移动
  5203.   DMsgDlgOk.Visible := False;
  5204.   DMsgDlgYes.Visible := False;
  5205.   DMsgDlgCancel.Visible := False;
  5206.   DMsgDlgNo.Visible := False;
  5207.   DMsgDlg.Left := (SCREENWIDTH - DMsgDlg.Width) div 2;
  5208.   DMsgDlg.Top := (SCREENHEIGHT - DMsgDlg.Height) div 2;

  5209.   for I := 0 to m_nDiceCount - 1 do begin
  5210.     m_Dice[I].n67C := 0;
  5211.     m_Dice[I].n680 := Random(m_nDiceCount + 2) * 5 + 10;
  5212.     m_Dice[I].nPlayPoint := 1;
  5213.     m_Dice[I].dwPlayTick := GetTickCount();
  5214.   end;

  5215.   if mbCancel in DlgButtons then begin
  5216.     DMsgDlgCancel.Left := lx;
  5217.     DMsgDlgCancel.Top := ly;
  5218.     DMsgDlgCancel.Visible := True;
  5219.     lx := lx - 110;
  5220.   end;
  5221.   if mbNo in DlgButtons then begin
  5222.     DMsgDlgNo.Left := lx;
  5223.     DMsgDlgNo.Top := ly;
  5224.     DMsgDlgNo.Visible := True;
  5225.     lx := lx - 110;
  5226.   end;
  5227.   if mbYes in DlgButtons then begin
  5228.     DMsgDlgYes.Left := lx;
  5229.     DMsgDlgYes.Top := ly;
  5230.     DMsgDlgYes.Visible := True;
  5231.     lx := lx - 110;
  5232.   end;
  5233.   if (mbOk in DlgButtons) or (lx = XBase) then begin
  5234.     DMsgDlgOk.Left := lx;
  5235.     DMsgDlgOk.Top := ly;
  5236.     DMsgDlgOk.Visible := True;
  5237.     lx := lx - 110;
  5238.   end;
  5239.   HideAllControls;
  5240.   DMsgDlg.ShowModal;
  5241.   if mbAbort in DlgButtons then begin
  5242.     ViewDlgEdit := True;
  5243.     DMsgDlg.Floating := False;
  5244.     with EdDlgEdit do begin
  5245.       Text := '';
  5246.       Width := DMsgDlg.Width - 70;
  5247.       {Left := (SCREENWIDTH - EdDlgEdit.Width) div 2;
  5248.       Top := (SCREENHEIGHT - EdDlgEdit.Height) div 2 - 10; }
  5249.       Left := (DMsgDlg.Width - Width) div 2;
  5250.       Top := (DMsgDlg.Height - Height) div 2 - 10;
  5251.       //SetFocus;
  5252.       //SetDFocus(EdDlgEdit);
  5253.     end;
  5254.   end;
  5255.   Result := mrOk;

  5256.   while True do begin
  5257.     if not DMsgDlg.Visible then Break;
  5258.     //FrmMain.DXTimerTimer (self, 0);
  5259.     frmMain.ProcOnIdle;
  5260.     Application.ProcessMessages;
  5261.     if m_nDiceCount > 0 then begin
  5262.       m_boPlayDice := True;
  5263.       for I := 0 to m_nDiceCount - 1 do begin
  5264.         m_Dice[I].nX := ((DMsgDlg.Width div 2 + 6) - ((m_nDiceCount * 32 + m_nDiceCount) div 2)) + (I * 32 + I);
  5265.         m_Dice[I].nY := DMsgDlg.Height div 2 - 14;
  5266.       end;
  5267.       ShowDice();
  5268.     end;
  5269.     if Application.Terminated then Exit;
  5270.     Sleep(1);
  5271.   end;

  5272.   EdDlgEdit.Visible := False;
  5273.   RestoreHideControls;
  5274.   DlgEditText := EdDlgEdit.Text;
  5275.   if EdChat.Visible then EdChat.SetFocus;

  5276.   ViewDlgEdit := False;
  5277.   Result := DMsgDlg.DialogResult;
  5278.   DialogSize := 1;
  5279.   m_nDiceCount := 0;
  5280.   m_boPlayDice := False;
  5281. end;

  5282. procedure TFrmDlg.DMsgDlgOkClick(Sender: TObject; X, Y: Integer);
  5283. begin
  5284.   if Sender = DMsgDlgOk then DMsgDlg.DialogResult := mrOk;
  5285.   if Sender = DMsgDlgYes then DMsgDlg.DialogResult := mrYes;
  5286.   if Sender = DMsgDlgCancel then DMsgDlg.DialogResult := mrCancel;
  5287.   if Sender = DMsgDlgNo then DMsgDlg.DialogResult := mrNo;
  5288.   DMsgDlg.Visible := False;
  5289. end;

  5290. procedure TFrmDlg.DMsgDlgKeyDown(Sender: TObject; var Key: Word;
  5291.   Shift: TShiftState);
  5292. begin
  5293.   if Key = 13 then begin
  5294.     if DMsgDlgOk.Visible and not (DMsgDlgYes.Visible or DMsgDlgCancel.Visible or DMsgDlgNo.Visible) then begin
  5295.       DMsgDlg.DialogResult := mrOk;
  5296.       DMsgDlg.Visible := False;
  5297.     end;
  5298.     if DMsgDlgYes.Visible and not (DMsgDlgOk.Visible or DMsgDlgCancel.Visible or DMsgDlgNo.Visible) then begin
  5299.       DMsgDlg.DialogResult := mrYes;
  5300.       DMsgDlg.Visible := False;
  5301.     end;
  5302.   end;
  5303.   if Key = 27 then begin
  5304.     if DMsgDlgCancel.Visible then begin
  5305.       DMsgDlg.DialogResult := mrCancel;
  5306.       DMsgDlg.Visible := False;
  5307.     end;
  5308.   end;
  5309. end;

  5310. procedure TFrmDlg.DMsgDlgOkDirectPaint(Sender: TObject;
  5311.   dsurface: TTexture);
  5312. var
  5313.   d: TTexture;
  5314.   tStr: string;
  5315.   OldColor: TColor;
  5316.   old: Integer;
  5317.   nStatus: Integer;
  5318.   OldFontStyle: TFontStyles;
  5319. begin
  5320.   try
  5321.     nStatus := -1;
  5322.     d := nil;
  5323.     with Sender as TDButton do begin
  5324.       if not Downed then begin
  5325.         if WLib <> nil then
  5326.           d := WLib.Images[FaceIndex]
  5327.       end else begin
  5328.         if WLib <> nil then
  5329.           d := WLib.Images[FaceIndex + 1];
  5330.       end;
  5331.       //if WLib = nil then Exit;
  5332.       if d <> nil then
  5333.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  5334.       if (Name = 'DSServer1') and (g_ServerList.Count >= 1) then begin
  5335.         tStr := g_ServerList.Strings[0];
  5336.         nStatus := Integer(g_ServerList.Objects[0]);
  5337.       end;
  5338.       if (Name = 'DSServer2') and (g_ServerList.Count >= 2) then begin
  5339.         tStr := g_ServerList.Strings[1];
  5340.         nStatus := Integer(g_ServerList.Objects[1]);
  5341.       end;
  5342.       if (Name = 'DSServer3') and (g_ServerList.Count >= 3) then begin
  5343.         tStr := g_ServerList.Strings[2];
  5344.         nStatus := Integer(g_ServerList.Objects[2]);
  5345.       end;
  5346.       if (Name = 'DSServer4') and (g_ServerList.Count >= 4) then begin
  5347.         tStr := g_ServerList.Strings[3];
  5348.         nStatus := Integer(g_ServerList.Objects[3]);
  5349.       end;
  5350.       if (Name = 'DSServer5') and (g_ServerList.Count >= 5) then begin
  5351.         tStr := g_ServerList.Strings[4];
  5352.         nStatus := Integer(g_ServerList.Objects[4]);
  5353.       end;
  5354.       if (Name = 'DSServer6') and (g_ServerList.Count >= 6) then begin
  5355.         tStr := g_ServerList.Strings[5];
  5356.         nStatus := Integer(g_ServerList.Objects[5]);
  5357.       end;
  5358.      case nStatus of    //服务器状态
  5359.        0: begin
  5360.          tStr:=tStr + '(维护)';
  5361.          Color:=clDkGray;
  5362.        end;
  5363.        1: begin
  5364.          tStr:=tStr + '(空闲)';
  5365.          Color:=clLime;
  5366.        end;
  5367.        2: begin
  5368.          tStr:=tStr + '(良好)';
  5369.          Color:=clGreen;
  5370.        end;
  5371.        3: begin
  5372.          tStr:=tStr + '(繁忙)';
  5373.          Color:=clMaroon;
  5374.        end;
  5375.        4: begin
  5376.          tStr:=tStr + '(满员)';
  5377.          Color:=clRed;
  5378.        end;
  5379.      end;
  5380.       if d <> nil then begin
  5381.         old := MainForm.Canvas.Font.Size;
  5382.         OldColor := MainForm.Canvas.Font.Color;
  5383.         OldFontStyle := MainForm.Canvas.Font.Style;

  5384.         MainForm.Canvas.Font.Size := 12;
  5385.         MainForm.Canvas.Font.Style := [fsBold];
  5386.         MainForm.Canvas.Font.Color := GetRGB(150) { clyellow};
  5387.         if TDButton(Sender).Downed then begin  //判断按钮是否按下
  5388.           dsurface.BoldTextOut(SurfaceX(Left + (d.Width - dsurface.TextWidth(tStr)) div 2) + 2, SurfaceY(Top + (d.Height - dsurface.TextHeight(tStr)) div 2) + 2, tStr, GetRGB(150));
  5389.         end else begin
  5390.           dsurface.BoldTextOut(SurfaceX(Left + (d.Width - dsurface.TextWidth(tStr)) div 2), SurfaceY(Top + (d.Height - dsurface.TextHeight(tStr)) div 2), tStr, GetRGB(150));
  5391.         end;
  5392.         MainForm.Canvas.Font.Style := OldFontStyle;
  5393.         MainForm.Canvas.Font.Size := old;
  5394.         MainForm.Canvas.Font.Color := OldColor;
  5395.       end;
  5396.     end;
  5397.   except
  5398.     on E: Exception do begin
  5399.       ShowMessage(E.message);
  5400.     end;
  5401.   end;
  5402. end;

  5403. procedure TFrmDlg.DMsgDlgDirectPaint(Sender: TObject;
  5404.   dsurface: TTexture);
  5405. var
  5406.   I: Integer;
  5407.   d: TTexture;
  5408.   ly: Integer;
  5409.   Str, sData: string;
  5410.   nX, nY: Integer;
  5411. begin
  5412.   d := nil;
  5413.   with Sender as TDWindow do begin
  5414.     if WLib <> nil then
  5415.       d := WLib.Images[FaceIndex];
  5416.     if d <> nil then
  5417.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  5418.     if m_boPlayDice then begin
  5419.       for I := 0 to m_nDiceCount - 1 do begin
  5420.         d := g_WBagItemImages.GetCachedImage(m_Dice[I].nPlayPoint + 376 - 1, nX, nY);
  5421.         if d <> nil then begin
  5422.           dsurface.Draw(SurfaceX(Left) + m_Dice[I].nX + nX - 14, SurfaceY(Top) + m_Dice[I].nY + nY + 38, d.ClientRect, d, True);
  5423.         end;
  5424.       end;
  5425.     end;

  5426.     ly := msgly;
  5427.     Str := MsgText;
  5428.     while True do begin
  5429.       if Str = '' then Break;
  5430.       Str := GetValidStr3(Str, sData, ['\']);
  5431.       if sData <> '' then
  5432.         dsurface.BoldTextOut(SurfaceX(Left + msglx), SurfaceY(Top + ly), sData, clWhite);
  5433.       ly := ly + 14;
  5434.     end;

  5435.   end;
  5436.   if ViewDlgEdit then begin
  5437.     if not EdDlgEdit.Visible then begin
  5438.       EdDlgEdit.Visible := True;
  5439.       EdDlgEdit.SetFocus;
  5440.       //SetDFocus(EdDlgEdit);
  5441.     end;
  5442.   end;
  5443. end;

  5444. {------------------------------------------------------------------------}

  5445. procedure TFrmDlg.DLoginNewDirectPaint(Sender: TObject;
  5446.   dsurface: TTexture);
  5447. var
  5448.   d: TTexture;
  5449. begin
  5450.   with Sender as TDButton do begin
  5451.     if TDButton(Sender).Downed then begin
  5452.       d := nil;
  5453.       if WLib <> nil then
  5454.         d := WLib.Images[FaceIndex];
  5455.       if d <> nil then
  5456.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  5457.     end;
  5458.   end;
  5459. end;

  5460. procedure TFrmDlg.DLoginNewClick(Sender: TObject; X, Y: Integer);
  5461. begin
  5462.   //frmMain.SendGetRandomCode;
  5463.   LoginScene.NewClick;
  5464. end;

  5465. procedure TFrmDlg.DLoginOkClick(Sender: TObject; X, Y: Integer);
  5466. begin
  5467.   LoginScene.OkClick;
  5468. end;

  5469. procedure TFrmDlg.DLoginCloseClick(Sender: TObject; X, Y: Integer);
  5470. begin
  5471.   frmMain.Close;
  5472. end;

  5473. procedure TFrmDlg.DLoginChgPwClick(Sender: TObject; X, Y: Integer);
  5474. begin
  5475.   LoginScene.ChgPwClick;
  5476. end;

  5477. procedure TFrmDlg.DLoginNewClickSound(Sender: TObject;
  5478.   Clicksound: TClickSound);
  5479. begin
  5480.   case Clicksound of
  5481.     csNorm: PlaySound(s_norm_button_click);
  5482.     csStone: PlaySound(s_rock_button_click);
  5483.     csGlass: PlaySound(s_glass_button_click);
  5484.   end;
  5485. end;

  5486. procedure TFrmDlg.ShowSelectServerDlg;
  5487. begin
  5488.   case g_ServerList.Count of  //如果有几个 显示几个服务器登陆框
  5489.     1: begin
  5490.         DSServer1.Visible := True;
  5491.         DSServer1.Top := 204;
  5492.         DSServer2.Visible := False;
  5493.         DSServer3.Visible := False;
  5494.         DSServer4.Visible := False;
  5495.         DSServer5.Visible := False;
  5496.         DSServer6.Visible := False;
  5497.       end;
  5498.     2: begin
  5499.         DSServer1.Visible := True;
  5500.         DSServer1.Top := 190;
  5501.         DSServer2.Visible := True;
  5502.         DSServer2.Top := 235;
  5503.         DSServer3.Visible := False;
  5504.         DSServer4.Visible := False;
  5505.         DSServer5.Visible := False;
  5506.         DSServer6.Visible := False;
  5507.       end;
  5508.     3: begin
  5509.         DSServer1.Visible := True;
  5510.         DSServer2.Visible := True;
  5511.         DSServer3.Visible := True;
  5512.         DSServer4.Visible := False;
  5513.         DSServer5.Visible := False;
  5514.         DSServer6.Visible := False;
  5515.       end;
  5516.     4: begin
  5517.         DSServer1.Visible := True;
  5518.         DSServer2.Visible := True;
  5519.         DSServer3.Visible := True;
  5520.         DSServer4.Visible := True;
  5521.         DSServer5.Visible := False;
  5522.         DSServer6.Visible := False;
  5523.       end;
  5524.     5: begin
  5525.         DSServer1.Visible := True;
  5526.         DSServer2.Visible := True;
  5527.         DSServer3.Visible := True;
  5528.         DSServer4.Visible := True;
  5529.         DSServer5.Visible := True;
  5530.         DSServer6.Visible := False;
  5531.       end;
  5532.     6: begin
  5533.         DSServer1.Visible := True;
  5534.         DSServer2.Visible := True;
  5535.         DSServer3.Visible := True;
  5536.         DSServer4.Visible := True;
  5537.         DSServer5.Visible := True;
  5538.         DSServer6.Visible := True;
  5539.       end;
  5540.   else begin
  5541.       DSServer1.Visible := True;
  5542.       DSServer2.Visible := True;
  5543.       DSServer3.Visible := True;
  5544.       DSServer4.Visible := True;
  5545.       DSServer5.Visible := True;
  5546.       DSServer6.Visible := True;
  5547.     end;
  5548.   end;
  5549.   DSelServerDlg.Visible := True;
  5550. end;

  5551. procedure TFrmDlg.DSelServerDlgDirectPaint(Sender: TObject;
  5552.   dsurface: TTexture);
  5553. var
  5554.   d: TTexture;
  5555. begin

  5556. end;

  5557. procedure TFrmDlg.DSServer1Click(Sender: TObject; X, Y: Integer);//选择服务器按钮
  5558. var
  5559.   svname: string;
  5560. begin
  5561.   svname := '';
  5562.   if Sender = DSServer1 then begin
  5563.     svname := g_ServerList.Strings[0];
  5564.     g_sServerMiniName := svname;
  5565.   end;
  5566.   if Sender = DSServer2 then begin
  5567.     svname := g_ServerList.Strings[1];
  5568.     g_sServerMiniName := svname;
  5569.   end;
  5570.   if Sender = DSServer3 then begin
  5571.     svname := g_ServerList.Strings[2];
  5572.     g_sServerMiniName := svname;
  5573.   end;
  5574.   if Sender = DSServer4 then begin
  5575.     svname := g_ServerList.Strings[3];
  5576.     g_sServerMiniName := svname;
  5577.   end;
  5578.   if Sender = DSServer5 then begin
  5579.     svname := g_ServerList.Strings[4];
  5580.     g_sServerMiniName := svname;
  5581.   end;
  5582.   if Sender = DSServer6 then begin
  5583.     svname := g_ServerList.Strings[5];
  5584.     g_sServerMiniName := svname;
  5585.   end;
  5586.   if svname <> '' then begin
  5587.     if BO_FOR_TEST then begin  //测试模式
  5588.       svname := 'MakeGM';
  5589.       g_sServerMiniName := 'MakeGM';
  5590.     end;
  5591.     frmMain.SendSelectServer(svname);//发送选择服务器
  5592.     DSelServerDlg.Visible := False; //隐藏服务器选择画面
  5593.     g_sServerName := svname;//服务器名称
  5594.     //Showmessage(svname);
  5595.   end;
  5596. end;

  5597. procedure TFrmDlg.DEngServer1Click(Sender: TObject; X, Y: Integer);
  5598. var
  5599.   svname: string;
  5600. begin
  5601.   svname := 'MakeGM';
  5602.   g_sServerMiniName := svname;

  5603.   if svname <> '' then begin
  5604.     frmMain.SendSelectServer(svname);
  5605.     DSelServerDlg.Visible := False;
  5606.     g_sServerName := svname;
  5607.   end;
  5608. end;


  5609. procedure TFrmDlg.DSSrvCloseClick(Sender: TObject; X, Y: Integer);
  5610. begin
  5611.   DSelServerDlg.Visible := False;
  5612.   frmMain.Close;
  5613. end;


  5614. {------------------------------------------------------------------------}


  5615. procedure TFrmDlg.DNewAccountOkClick(Sender: TObject; X, Y: Integer);
  5616. begin
  5617.   LoginScene.NewAccountOk;
  5618. end;

  5619. procedure TFrmDlg.DNewAccountCloseClick(Sender: TObject; X, Y: Integer);
  5620. begin
  5621.   LoginScene.NewAccountClose;
  5622. end;

  5623. procedure TFrmDlg.DNewAccountDirectPaint(Sender: TObject;
  5624.   dsurface: TTexture);
  5625. var
  5626.   d: TTexture;
  5627.   I: Integer;
  5628. begin
  5629.   with dsurface do begin
  5630.     with DNewAccount do begin
  5631.       d := nil;
  5632.       if WLib <> nil then
  5633.         d := WLib.Images[FaceIndex];
  5634.       if d <> nil then
  5635.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  5636.     end;

  5637.     for I := 0 to NAHelps.Count - 1 do begin
  5638.       TextOut((SCREENWIDTH div 2 - 320) + 386 + 10, (SCREENHEIGHT div 2 - 238) + 119 + 5 + I * 14, NAHelps[I], clSilver);
  5639.     end;

  5640.     //TextOut((SCREENWIDTH div 2 - 320) + 290, (SCREENHEIGHT div 2 - 238) + 119 + 5 + 6 * 14, g_sRandomCode, clLime);
  5641.     BoldTextOut(79 + 283, 64 + 57, NewAccountTitle);
  5642.   end;
  5643. end;



  5644. {------------------------------------------------------------------------}

  5645. procedure TFrmDlg.DChgpwOkClick(Sender: TObject; X, Y: Integer);
  5646. begin
  5647.   if Sender = DChgpwOk then LoginScene.ChgpwOk;
  5648.   if Sender = DChgpwCancel then LoginScene.ChgpwCancel;
  5649. end;




  5650. {------------------------------------------------------------------------}
  5651. //某腐磐 急琶


  5652. procedure TFrmDlg.DscSelect1DirectPaint(Sender: TObject;
  5653.   dsurface: TTexture);
  5654. var
  5655.   d: TTexture;
  5656. begin
  5657.   with Sender as TDButton do begin
  5658.     d := nil;
  5659.     if Downed then begin
  5660.       //WLib := g_WMain2Images;
  5661.       if Sender = DscSelect1 then d := g_WMainImages.Images[66];
  5662.       if Sender = DscSelect2 then d := g_WMainImages.Images[67];
  5663.       if Sender = DscStart then d := g_WMain2Images.Images[482];
  5664.       if Sender = DscNewChr then d := g_WMain2Images.Images[485];
  5665.       if Sender = DscEraseChr then d := g_WMain2Images.Images[486];
  5666.       if Sender = DscCredits then d := g_WMain2Images.Images[487];
  5667.       if Sender = DscExit then d := g_WMain2Images.Images[488];
  5668.     end else
  5669.       if MouseMoveing then begin
  5670.       //WLib := g_WMain2Images;
  5671.       if Sender = DscSelect1 then d := g_WMain2Images.Images[483];
  5672.       if Sender = DscSelect2 then d := g_WMain2Images.Images[484];
  5673.       if Sender = DscStart then d := g_WMain2Images.Images[481];
  5674.       if Sender = DscNewChr then d := g_WMainImages.Images[69];
  5675.       if Sender = DscEraseChr then d := g_WMainImages.Images[70];
  5676.       if Sender = DscCredits then d := g_WMain3Images.Images[405];
  5677.       if Sender = DscExit then d := g_WMainImages.Images[72];
  5678.     end else begin
  5679.       if Sender = DscSelect1 then WLib := nil;
  5680.       if Sender = DscSelect2 then WLib := nil;
  5681.       if Sender = DscStart then WLib := nil;
  5682.       if Sender = DscNewChr then WLib := nil;
  5683.       if Sender = DscEraseChr then WLib := nil;
  5684.       if Sender = DscCredits then WLib := nil;
  5685.       if Sender = DscExit then WLib := nil;

  5686.       //WLib := g_WMain2Images;
  5687.       {if Sender = DscSelect1 then d := g_WMain2Images.Images[484];
  5688.       if Sender = DscSelect2 then d := g_WMain2Images.Images[484];
  5689.       if Sender = DscStart then d := g_WMain2Images.Images[484];
  5690.       if Sender = DscNewChr then d := g_WMain2Images.Images[484];
  5691.       if Sender = DscEraseChr then d := g_WMain2Images.Images[484];
  5692.       if Sender = DscCredits then d := g_WMain2Images.Images[484];
  5693.       if Sender = DscExit then d := g_WMain2Images.Images[484];  }
  5694.     end;


  5695.     if (d = nil) and (WLib <> nil) then
  5696.       d := WLib.Images[FaceIndex];
  5697.     if d <> nil then
  5698.       dsurface.Draw(Left, Top, d.ClientRect, d, True);

  5699.     if (Sender = DscStart) and g_boReSelConnect then begin
  5700.       dsurface.FillRectAlpha(g_ClientRect, clblack, 150);
  5701.       if GetTickCount - g_dwReSelConnectTick > 100 then begin
  5702.         g_dwReSelConnectTick := GetTickCount;
  5703.         g_ClientRect.Top := g_ClientRect.Top + 1;
  5704.         if g_ClientRect.Top > g_ClientRect.Bottom then begin
  5705.           g_boReSelConnect := False;
  5706.           Enabled := True;
  5707.         end;
  5708.       end;
  5709.     end;

  5710.   end;
  5711. end;

  5712. procedure TFrmDlg.DscSelect1Click(Sender: TObject; X, Y: Integer);
  5713. begin
  5714.   if Sender = DscSelect1 then SelectChrScene.SelChrSelect1Click;
  5715.   if Sender = DscSelect2 then SelectChrScene.SelChrSelect2Click;
  5716.   if Sender = DscStart then SelectChrScene.SelChrStartClick;
  5717.   if Sender = DscNewChr then SelectChrScene.SelChrNewChrClick;
  5718.   if Sender = DscEraseChr then SelectChrScene.SelChrEraseChrClick;
  5719.   if Sender = DscCredits then SelectChrScene.SelChrQueryDelChrClick; //SelectChrScene.SelChrCreditsClick;
  5720.   if Sender = DscExit then SelectChrScene.SelChrExitClick;
  5721. end;

  5722. procedure TFrmDlg.DccCloseDirectPaint(Sender: TObject;
  5723.   dsurface: TTexture);
  5724. var
  5725.   d: TTexture;
  5726. begin
  5727.   with Sender as TDButton do begin
  5728.     if Downed then begin
  5729.       d := nil;
  5730.       if WLib <> nil then
  5731.         d := WLib.Images[FaceIndex];
  5732.       if d <> nil then
  5733.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  5734.     end else begin
  5735.       d := nil;
  5736.       if Sender = DccWarrior then begin
  5737.         with SelectChrScene do
  5738.           if (ChrArr[NewIndex].UserChr.job = 0) and (WLib <> nil) then d := WLib.Images[55];
  5739.       end;
  5740.       if Sender = DccWizzard then begin
  5741.         with SelectChrScene do
  5742.           if (ChrArr[NewIndex].UserChr.job = 1) and (WLib <> nil) then d := WLib.Images[56];
  5743.       end;
  5744.       if Sender = DccMonk then begin
  5745.         with SelectChrScene do
  5746.           if (ChrArr[NewIndex].UserChr.job = 2) and (WLib <> nil) then d := WLib.Images[57];
  5747.       end;
  5748.       if Sender = DccMale then begin
  5749.         with SelectChrScene do
  5750.           if (ChrArr[NewIndex].UserChr.sex = 0) and (WLib <> nil) then d := WLib.Images[58];
  5751.       end;
  5752.       if Sender = DccFemale then begin
  5753.         with SelectChrScene do
  5754.           if (ChrArr[NewIndex].UserChr.sex = 1) and (WLib <> nil) then d := WLib.Images[59];
  5755.       end;

  5756.       if d <> nil then
  5757.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  5758.     end;
  5759.   end;
  5760. end;

  5761. procedure TFrmDlg.DccCloseClick(Sender: TObject; X, Y: Integer);
  5762. begin
  5763.   if Sender = DccClose then SelectChrScene.SelChrNewClose;
  5764.   if Sender = DccWarrior then SelectChrScene.SelChrNewJob(0);
  5765.   if Sender = DccWizzard then SelectChrScene.SelChrNewJob(1);
  5766.   if Sender = DccMonk then SelectChrScene.SelChrNewJob(2);
  5767.   if Sender = DccReserved then SelectChrScene.SelChrNewJob(3);
  5768.   if Sender = DccMale then SelectChrScene.SelChrNewm_btSex(0);
  5769.   if Sender = DccFemale then SelectChrScene.SelChrNewm_btSex(1);
  5770.   if Sender = DccLeftHair then SelectChrScene.SelChrNewPrevHair;
  5771.   if Sender = DccRightHair then SelectChrScene.SelChrNewNextHair;
  5772.   if Sender = DccOk then SelectChrScene.SelChrNewOk;
  5773. end;


  5774. procedure TFrmDlg.DStateWinDirectPaint(Sender: TObject;
  5775.   dsurface: TTexture);
  5776. var
  5777.   I, L, m, pgidx, magline, bbx, bby, mmx, Idx, ax, ay, trainlv: Integer;
  5778.   pm: PTClientMagic;
  5779.   d: TTexture;
  5780.   hcolor, old, keyimg: Integer;
  5781.   iname, d1, d2, d3: string;
  5782.   useable: Boolean;
  5783.   c: TColor;
  5784. begin
  5785.   if g_MySelf = nil then Exit;
  5786.   with DStateWin do begin
  5787.     d := nil;
  5788.     if WLib <> nil then
  5789.       d := WLib.Images[FaceIndex];
  5790.     if d <> nil then
  5791.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  5792.     case StatePage of
  5793.       0: begin //人物界面
  5794.           pgidx := 29;
  5795.           if g_MySelf <> nil then
  5796.             if g_MySelf.m_btSex = 1 then pgidx := 30;
  5797.           bbx := Left + 38;
  5798.           bby := Top + 52;
  5799.           d := g_WMain3Images.Images[pgidx];
  5800.           if d <> nil then
  5801.             dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);
  5802.           bbx := bbx - 7;
  5803.           bby := bby + 44;
  5804.           if g_MySelf.m_btHair < 4 then begin
  5805.             Idx := 440 + g_MySelf.m_btHair;
  5806.           //idx := 440 + g_MySelf.m_btHair div 2;
  5807.           //if g_MySelf.m_btSex = 1 then idx := 480 + g_MySelf.m_btHair div 2;
  5808.             if Idx > 0 then begin
  5809.               d := g_WMainImages.GetCachedImage(Idx, ax, ay);
  5810.               if d <> nil then
  5811.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  5812.             end;
  5813.           end;

  5814.           if g_UseItems[U_DRESS].s.Name <> '' then begin
  5815.             Idx := g_UseItems[U_DRESS].s.looks; //渴 if Myself.m_btSex = 1 then idx := 80; //咯磊渴
  5816.             if Idx >= 0 then begin
  5817.               //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  5818.               d := GetWStateImg(Idx, ax, ay);
  5819.               if d <> nil then
  5820.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  5821.             end;
  5822.           end;
  5823.           if g_UseItems[U_WEAPON].s.Name <> '' then begin
  5824.             Idx := g_UseItems[U_WEAPON].s.looks;
  5825.             if Idx >= 0 then begin
  5826.               //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  5827.               d := GetWStateImg(Idx, ax, ay);
  5828.               if d <> nil then begin
  5829.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  5830.                 //d.SaveToFile('d.bmp');
  5831.               end;
  5832.               if (g_UseItems[U_WEAPON].s.Shape = 38) and (Idx = 1404) then begin
  5833.                 d := GetWStateImg(Idx - 1, ax, ay);
  5834.                 if d <> nil then
  5835.                   DrawBlend(dsurface, SurfaceX(bbx + ax), SurfaceY(bby + ay), d);
  5836.               end else
  5837.                 if (g_UseItems[U_WEAPON].s.Shape = 56) and (Idx = 1880) then begin
  5838.                 if (g_dwWeapon56Index[0] < 1890) or (g_dwWeapon56Index[0] > 1899) then
  5839.                   g_dwWeapon56Index[0] := 1890;
  5840.                 if GetTickCount - g_dwWeapon56Tick[0] > 100 then begin
  5841.                   g_dwWeapon56Tick[0] := GetTickCount;
  5842.                   g_dwWeapon56Index[0] := g_dwWeapon56Index[0] + 1;
  5843.                 end;
  5844.                 if (g_dwWeapon56Index[0] < 1890) or (g_dwWeapon56Index[0] > 1899) then
  5845.                   g_dwWeapon56Index[0] := 1890;

  5846.                 d := GetWStateImg(g_dwWeapon56Index[0], ax, ay);
  5847.                 if d <> nil then
  5848.                   DrawBlend(dsurface, SurfaceX(bbx + ax), SurfaceY(bby + ay), d);
  5849.               end;
  5850.             end;
  5851.           end;
  5852.           if g_UseItems[U_HELMET].s.Name <> '' then begin
  5853.             Idx := g_UseItems[U_HELMET].s.looks;
  5854.             if Idx >= 0 then begin
  5855.               //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  5856.               d := GetWStateImg(Idx, ax, ay);
  5857.               if d <> nil then
  5858.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  5859.             end;
  5860.           end;

  5861.           //左边按钮图片
  5862.           d := g_WMainImages.Images[792];
  5863.           if d <> nil then
  5864.           dsurface.Draw(Left+3, top+61, d.ClientRect, d, True);
  5865.           //左边字
  5866.           MainForm.Canvas.Font.Style:=[fsBold];
  5867.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 70,'装', clBlack, clBlack);
  5868.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 83,'备', clBlack, clBlack );
  5869.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 72,'装', clBlack, clBlack);
  5870.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 85,'备', clBlack, clBlack );
  5871.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 71,'装', $00A6E1EE, clBlack);
  5872.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 84,'备', $00A6E1EE, clBlack );

  5873.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 117,'状', clBlack , clBlack);
  5874.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 130,'态', clBlack, clBlack);
  5875.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 119,'状', clBlack, clBlack);
  5876.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 132,'态', clBlack, clBlack);
  5877.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 118,'状', $006C85AA , clBlack);
  5878.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 131,'态', $006C85AA , clBlack);

  5879.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 162, '属', clBlack , clBlack);
  5880.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 175,'性', clBlack , clBlack);
  5881.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 164, '属', clBlack , clBlack);
  5882.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 177,'性', clBlack , clBlack);
  5883.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 163, '属', $006C85AA , clBlack);
  5884.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 176,'性', $006C85AA , clBlack);

  5885.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 207,'技', clBlack, clBlack);
  5886.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 220,'能', clBlack , clBlack);
  5887.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 209,'技', clBlack , clBlack);
  5888.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 222,'能', clBlack , clBlack);
  5889.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 208,'技', $006C85AA , clBlack);
  5890.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 221,'能', $006C85AA , clBlack);

  5891.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 252,'待', clBlack , clBlack);
  5892.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 265,'出', clBlack , clBlack);
  5893.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 254,'待', clBlack , clBlack);
  5894.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 267,'出', clBlack , clBlack);
  5895.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 253,'待', $006C85AA , clBlack);
  5896.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 266,'出', $006C85AA , clBlack);
  5897.           MainForm.Canvas.Font.Style:=[];
  5898.         end;
  5899.       1: begin //状态
  5900.           //左边按钮图片
  5901.           d := g_WMainImages.Images[793];
  5902.           if d <> nil then
  5903.           dsurface.Draw(Left+3, top+61, d.ClientRect, d, True);
  5904.           //左边的字
  5905.           MainForm.Canvas.Font.Style:=[fsBold];
  5906.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 70,'装', clBlack, clBlack);
  5907.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 83,'备', clBlack, clBlack );
  5908.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 72,'装', clBlack, clBlack);
  5909.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 85,'备', clBlack, clBlack );
  5910.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 71,'装', $006C85AA, clBlack);
  5911.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 84,'备', $006C85AA, clBlack );

  5912.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 117,'状', clBlack , clBlack);
  5913.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 130,'态', clBlack, clBlack);
  5914.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 119,'状', clBlack, clBlack);
  5915.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 132,'态', clBlack, clBlack);
  5916.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 118,'状', $00A6E1EE , clBlack);
  5917.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 131,'态', $00A6E1EE , clBlack);

  5918.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 162, '属', clBlack , clBlack);
  5919.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 175,'性', clBlack , clBlack);
  5920.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 164, '属', clBlack , clBlack);
  5921.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 177,'性', clBlack , clBlack);
  5922.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 163, '属', $006C85AA , clBlack);
  5923.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 176,'性', $006C85AA , clBlack);

  5924.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 207,'技', clBlack, clBlack);
  5925.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 220,'能', clBlack , clBlack);
  5926.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 209,'技', clBlack , clBlack);
  5927.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 222,'能', clBlack , clBlack);
  5928.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 208,'技', $006C85AA , clBlack);
  5929.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 221,'能', $006C85AA , clBlack);

  5930.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 252,'待', clBlack , clBlack);
  5931.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 265,'出', clBlack , clBlack);
  5932.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 254,'待', clBlack , clBlack);
  5933.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 267,'出', clBlack , clBlack);
  5934.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 253,'待', $006C85AA , clBlack);
  5935.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 266,'出', $006C85AA , clBlack);
  5936.           MainForm.Canvas.Font.Style:=[];
  5937.           L := Left + 112; //66;
  5938.           m := Top + 99;
  5939.           with dsurface do begin
  5940.             TextOut(SurfaceX(L + 0), SurfaceY(m + 0), IntToStr(Loword(g_MySelf.m_Abil.AC)) + '-' + IntToStr(Hiword(g_MySelf.m_Abil.AC)));
  5941.             TextOut(SurfaceX(L + 0), SurfaceY(m + 20), IntToStr(Loword(g_MySelf.m_Abil.MAC)) + '-' + IntToStr(Hiword(g_MySelf.m_Abil.MAC)));
  5942.             TextOut(SurfaceX(L + 0), SurfaceY(m + 40), IntToStr(Loword(g_MySelf.m_Abil.DC)) + '-' + IntToStr(Hiword(g_MySelf.m_Abil.DC)));
  5943.             TextOut(SurfaceX(L + 0), SurfaceY(m + 60), IntToStr(Loword(g_MySelf.m_Abil.MC)) + '-' + IntToStr(Hiword(g_MySelf.m_Abil.MC)));
  5944.             TextOut(SurfaceX(L + 0), SurfaceY(m + 80), IntToStr(Loword(g_MySelf.m_Abil.SC)) + '-' + IntToStr(Hiword(g_MySelf.m_Abil.SC)));
  5945.             TextOut(SurfaceX(L + 0), SurfaceY(m + 100), IntToStr(g_MySelf.m_Abil.HP) + '/' + IntToStr(g_MySelf.m_Abil.MaxHP));
  5946.             TextOut(SurfaceX(L + 0), SurfaceY(m + 120), IntToStr(g_MySelf.m_Abil.MP) + '/' + IntToStr(g_MySelf.m_Abil.MaxMP));
  5947.           end;


  5948.         end;
  5949.       2: begin //属性
  5950.           //左边按钮图片
  5951.           d := g_WMainImages.Images[794];
  5952.           if d <> nil then
  5953.           dsurface.Draw(Left+3, top+61, d.ClientRect, d, True);
  5954.           //左边的字
  5955.           MainForm.Canvas.Font.Style:=[fsBold];
  5956.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 70,'装', clBlack, clBlack);
  5957.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 83,'备', clBlack, clBlack );
  5958.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 72,'装', clBlack, clBlack);
  5959.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 85,'备', clBlack, clBlack );
  5960.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 71,'装', $006C85AA, clBlack);
  5961.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 84,'备', $006C85AA, clBlack );

  5962.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 117,'状', clBlack , clBlack);
  5963.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 130,'态', clBlack, clBlack);
  5964.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 119,'状', clBlack, clBlack);
  5965.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 132,'态', clBlack, clBlack);
  5966.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 118,'状', $006C85AA , clBlack);
  5967.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 131,'态', $006C85AA , clBlack);

  5968.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 162, '属', clBlack , clBlack);
  5969.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 175,'性', clBlack , clBlack);
  5970.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 164, '属', clBlack , clBlack);
  5971.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 177,'性', clBlack , clBlack);
  5972.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 163, '属', $00A6E1EE , clBlack);
  5973.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 176,'性', $00A6E1EE , clBlack);

  5974.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 207,'技', clBlack, clBlack);
  5975.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 220,'能', clBlack , clBlack);
  5976.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 209,'技', clBlack , clBlack);
  5977.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 222,'能', clBlack , clBlack);
  5978.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 208,'技', $006C85AA , clBlack);
  5979.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 221,'能', $006C85AA , clBlack);

  5980.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 252,'待', clBlack , clBlack);
  5981.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 265,'出', clBlack , clBlack);
  5982.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 254,'待', clBlack , clBlack);
  5983.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 267,'出', clBlack , clBlack);
  5984.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 253,'待', $006C85AA , clBlack);
  5985.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 266,'出', $006C85AA , clBlack);
  5986.           MainForm.Canvas.Font.Style:=[];
  5987.           bbx := Left + 38;
  5988.           bby := Top + 52;
  5989.           d := g_WMain3Images.Images[32];
  5990.           if d <> nil then
  5991.             dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);

  5992.           bbx := bbx + 20;
  5993.           bby := bby + 10;

  5994.           if AbilPage = 0 then begin
  5995.             with dsurface do begin
  5996.               mmx := bbx + 85;
  5997.               TextOut(bbx, bby, '当前经验', clSilver);
  5998.             //TextOut(mmx, bby, FloatToStrFixFmt(100 * g_MySelf.m_Abil.Exp / g_MySelf.m_Abil.MaxExp, 3, 2) + '%');
  5999.               c := clSilver;
  6000.               TextOut(mmx, bby, IntToStr(g_MySelf.m_Abil.Exp), clSilver);
  6001.               bby := bby + 14;
  6002.               TextOut(bbx, bby, '升级经验', clSilver);
  6003.               TextOut(mmx, bby, IntToStr(g_MySelf.m_Abil.MaxExp), clSilver);

  6004.               TextOut(bbx, bby + 14 * 1, '背包重量', clSilver);
  6005.               if g_MySelf.m_Abil.Weight > g_MySelf.m_Abil.MaxWeight then
  6006.                 c := clRed
  6007.               else
  6008.                 c := clSilver;
  6009.               TextOut(mmx, bby + 14 * 1, IntToStr(g_MySelf.m_Abil.Weight) + '/' + IntToStr(g_MySelf.m_Abil.MaxWeight), c);

  6010.               TextOut(bbx, bby + 14 * 2, '负量', clSilver);
  6011.               if g_MySelf.m_Abil.WearWeight > g_MySelf.m_Abil.MaxWearWeight then
  6012.                 c := clRed
  6013.               else
  6014.                 c := clSilver;
  6015.               TextOut(mmx, bby + 14 * 2, IntToStr(g_MySelf.m_Abil.WearWeight) + '/' + IntToStr(g_MySelf.m_Abil.MaxWearWeight), c);


  6016.               TextOut(bbx, bby + 14 * 3, '腕力', clSilver);
  6017.               if g_MySelf.m_Abil.HandWeight > g_MySelf.m_Abil.MaxHandWeight then
  6018.                 c := clRed
  6019.               else
  6020.                 c := clSilver;
  6021.               TextOut(mmx, bby + 14 * 3, IntToStr(g_MySelf.m_Abil.HandWeight) + '/' + IntToStr(g_MySelf.m_Abil.MaxHandWeight), c);

  6022.               TextOut(bbx, bby + 14 * 4, '准确度', clSilver);
  6023.               TextOut(mmx, bby + 14 * 4, IntToStr(g_nMyHitPoint), clSilver);

  6024.               TextOut(bbx, bby + 14 * 5, '敏捷', clSilver);
  6025.               TextOut(mmx, bby + 14 * 5, IntToStr(g_nMySpeedPoint), clSilver);

  6026.               TextOut(bbx, bby + 14 * 6, '魔法躲避', clSilver);
  6027.               TextOut(mmx, bby + 14 * 6, '+' + IntToStr(g_nMyAntiMagic * 10) + '%', clSilver);

  6028.               TextOut(bbx, bby + 14 * 7, '毒物躲避', clSilver);
  6029.               TextOut(mmx, bby + 14 * 7, '+' + IntToStr(g_nMyAntiPoison * 10) + '%', clSilver);

  6030.               TextOut(bbx, bby + 14 * 8, '中毒恢复', clSilver);
  6031.               TextOut(mmx, bby + 14 * 8, '+' + IntToStr(g_nMyPoisonRecover * 10) + '%', clSilver);

  6032.               TextOut(bbx, bby + 14 * 9, '体力恢复', clSilver);
  6033.               TextOut(mmx, bby + 14 * 9, '+' + IntToStr(g_nMyHealthRecover * 10) + '%', clSilver);

  6034.               TextOut(bbx, bby + 14 * 10, '魔法恢复', clSilver);
  6035.               TextOut(mmx, bby + 14 * 10, '+' + IntToStr(g_nMySpellRecover * 10) + '%', clSilver);

  6036.               TextOut(bbx, bby + 14 * 11, g_sGameGoldName + '数量', clSilver);
  6037.               TextOut(mmx, bby + 14 * 11, IntToStr(g_MySelf.m_nGameGold), clSilver);

  6038.               TextOut(bbx, bby + 14 * 12, g_sGamePointName + '数量', clSilver);
  6039.               TextOut(mmx, bby + 14 * 12, IntToStr(g_MySelf.m_nGamePoint), clSilver);

  6040.               if {(g_ServerConfig.btShowClientItemStyle = 0) and}  g_ServerConfig.boAllowItemAddPoint then begin
  6041.                 TextOut(bbx, bby + 14 * 13, '移动加速', clSilver);
  6042.                 TextOut(mmx, bby + 14 * 13, '+' + IntToStr(g_MySelf.m_Abil.MoveSpeed) + '%', clSilver);

  6043.                 TextOut(bbx, bby + 14 * 14, '攻击加速', clSilver);
  6044.                 TextOut(mmx, bby + 14 * 14, '+' + IntToStr(g_MySelf.m_Abil.AttackSpeed) + '%', clSilver);
  6045.               end;

  6046.             end;
  6047.           end else begin
  6048.             mmx := bbx + 110;
  6049.             with dsurface do begin
  6050.               TextOut(bbx, bby, '物理伤害减少', clSilver);
  6051.               TextOut(mmx, bby, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[0]) + '%', clSilver);

  6052.               TextOut(bbx, bby + 14 * 1, '魔法伤害减少', clSilver);
  6053.               TextOut(mmx, bby + 14 * 1, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[1]) + '%', clSilver);

  6054.               TextOut(bbx, bby + 14 * 2, '忽视目标防御', clSilver);
  6055.               TextOut(mmx, bby + 14 * 2, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[2]) + '%', clSilver);

  6056.               TextOut(bbx, bby + 14 * 3, '所有伤害反射', clSilver);
  6057.               TextOut(mmx, bby + 14 * 3, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[3]) + '%', clSilver);

  6058.               TextOut(bbx, bby + 14 * 4, '增加攻击伤害', clSilver);
  6059.               TextOut(mmx, bby + 14 * 4, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[4]) + '%', clSilver);


  6060.               TextOut(bbx, bby + 14 * 5, '物理防御增强', clSilver);
  6061.               TextOut(mmx, bby + 14 * 5, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[5]) + '%', clSilver);

  6062.               TextOut(bbx, bby + 14 * 6, '魔法防御增强', clSilver);
  6063.               TextOut(mmx, bby + 14 * 6, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[6]) + '%', clSilver);

  6064.               TextOut(bbx, bby + 14 * 7, '物理攻击增强', clSilver);
  6065.               TextOut(mmx, bby + 14 * 7, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[7]) + '%', clSilver);

  6066.               TextOut(bbx, bby + 14 * 8, '魔法攻击增强', clSilver);
  6067.               TextOut(mmx, bby + 14 * 8, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[8]) + '%', clSilver);

  6068.               TextOut(bbx, bby + 14 * 9, '道术攻击增强', clSilver);
  6069.               TextOut(mmx, bby + 14 * 9, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[9]) + '%', clSilver);

  6070.               TextOut(bbx, bby + 14 * 10, '增加进入失明状态', clSilver);
  6071.               TextOut(mmx, bby + 14 * 10, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[10]) + '%', clSilver);

  6072.               TextOut(bbx, bby + 14 * 11, '增加进入混乱状态', clSilver);
  6073.               TextOut(mmx, bby + 14 * 11, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[11]) + '%', clSilver);

  6074.               TextOut(bbx, bby + 14 * 12, '减少进入失明状态', clSilver);
  6075.               TextOut(mmx, bby + 14 * 12, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[12]) + '%', clSilver);

  6076.               TextOut(bbx, bby + 14 * 13, '减少进入混乱状态', clSilver);
  6077.               TextOut(mmx, bby + 14 * 13, '+' + IntToStr(g_MySelf.m_Abil.AddPoint[13]) + '%', clSilver);
  6078.             end;
  6079.           end;
  6080.         end;
  6081.       3: begin //魔法
  6082.           //左边按钮图片
  6083.           d := g_WMainImages.Images[795];
  6084.           if d <> nil then
  6085.           dsurface.Draw(Left+3, top+61, d.ClientRect, d, True);
  6086.           //左边的字
  6087.           MainForm.Canvas.Font.Style:=[fsBold];
  6088.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 70,'装', clBlack, clBlack);
  6089.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 83,'备', clBlack, clBlack );
  6090.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 72,'装', clBlack, clBlack);
  6091.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 85,'备', clBlack, clBlack );
  6092.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 71,'装', $006C85AA, clBlack);
  6093.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 84,'备', $006C85AA, clBlack );

  6094.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 117,'状', clBlack , clBlack);
  6095.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 130,'态', clBlack, clBlack);
  6096.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 119,'状', clBlack, clBlack);
  6097.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 132,'态', clBlack, clBlack);
  6098.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 118,'状', $006C85AA , clBlack);
  6099.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 131,'态', $006C85AA , clBlack);

  6100.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 162, '属', clBlack , clBlack);
  6101.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 175,'性', clBlack , clBlack);
  6102.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 164, '属', clBlack , clBlack);
  6103.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 177,'性', clBlack , clBlack);
  6104.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 163, '属', $006C85AA , clBlack);
  6105.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 176,'性', $006C85AA , clBlack);

  6106.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 207,'技', clBlack, clBlack);
  6107.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 220,'能', clBlack , clBlack);
  6108.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 209,'技', clBlack , clBlack);
  6109.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 222,'能', clBlack , clBlack);
  6110.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 208,'技', $00A6E1EE , clBlack);
  6111.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 221,'能', $00A6E1EE , clBlack);

  6112.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 252,'待', clBlack , clBlack);
  6113.           dsurface.BoldTextOut(SurfaceX(Left) + 9, SurfaceY(Top) + 265,'出', clBlack , clBlack);
  6114.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 254,'待', clBlack , clBlack);
  6115.           dsurface.BoldTextOut(SurfaceX(Left) + 11, SurfaceY(Top) + 267,'出', clBlack , clBlack);
  6116.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 253,'待', $006C85AA , clBlack);
  6117.           dsurface.BoldTextOut(SurfaceX(Left) + 10, SurfaceY(Top) + 266,'出', $006C85AA , clBlack);
  6118.           MainForm.Canvas.Font.Style:=[];

  6119.           bbx := Left + 38;
  6120.           bby := Top + 52;
  6121.           d := g_WMain2Images.Images[743];
  6122.           if d <> nil then
  6123.             dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);

  6124.           magtop := MagicPage * 6;
  6125.           magline := _MIN(MagicPage * 6 + 6, g_MagicList.Count);
  6126.           for I := magtop to magline - 1 do begin
  6127.             pm := PTClientMagic(g_MagicList[I]);
  6128.             m := I - magtop;
  6129.             keyimg := 0;
  6130.             {case Byte(pm.Key) of
  6131.               Byte('E'): keyimg := 642;
  6132.               Byte('F'): keyimg := 643;
  6133.               Byte('G'): keyimg := 644;
  6134.               Byte('H'): keyimg := 645;
  6135.               Byte('I'): keyimg := 646;
  6136.               Byte('J'): keyimg := 647;
  6137.               Byte('K'): keyimg := 648;
  6138.               Byte('L'): keyimg := 649;


  6139.               Byte('1'): keyimg := 248;
  6140.               Byte('2'): keyimg := 249;
  6141.               Byte('3'): keyimg := 250;
  6142.               Byte('4'): keyimg := 251;
  6143.               Byte('5'): keyimg := 252;
  6144.               Byte('6'): keyimg := 253;
  6145.               Byte('7'): keyimg := 254;
  6146.               Byte('8'): keyimg := 255;


  6147.             end;}
  6148.             case Byte(pm.Key) of
  6149.               Byte('E'): keyimg := 148;
  6150.               Byte('F'): keyimg := 149;
  6151.               Byte('G'): keyimg := 150;
  6152.               Byte('H'): keyimg := 151;
  6153.               Byte('I'): keyimg := 152;
  6154.               Byte('J'): keyimg := 153;
  6155.               Byte('K'): keyimg := 154;
  6156.               Byte('L'): keyimg := 155;


  6157.               Byte('1'): keyimg := 156;
  6158.               Byte('2'): keyimg := 157;
  6159.               Byte('3'): keyimg := 158;
  6160.               Byte('4'): keyimg := 159;
  6161.               Byte('5'): keyimg := 160;
  6162.               Byte('6'): keyimg := 161;
  6163.               Byte('7'): keyimg := 162;
  6164.               Byte('8'): keyimg := 163;
  6165.             end;

  6166.             if keyimg > 0 then begin
  6167.               d := g_WMain3Images.Images[keyimg];
  6168.               if d <> nil then
  6169.                 dsurface.Draw(bbx + 145, bby + 8 + m * 37, d.ClientRect, d, True);
  6170.             end;
  6171.             d := g_WMainImages.Images[112]; //lv
  6172.             if d <> nil then
  6173.               dsurface.Draw(bbx + 48, bby + 8 + 15 + m * 37, d.ClientRect, d, True);
  6174.             d := g_WMainImages.Images[111]; //exp
  6175.             if d <> nil then
  6176.               dsurface.Draw(bbx + 48 + 26, bby + 8 + 15 + m * 37, d.ClientRect, d, True);
  6177.           end;

  6178.           with dsurface do begin
  6179.             c := clSilver;
  6180.             for I := magtop to magline - 1 do begin
  6181.               pm := PTClientMagic(g_MagicList[I]);
  6182.               m := I - magtop;
  6183.              {
  6184.               if not (pm.Level in [0..3]) then pm.Level := 0; //魔法最多3级
  6185.               TextOut(bbx + 48, bby + 8 + m * 37,
  6186.                 pm.Def.sMagicName);
  6187.               if pm.Level in [0..3] then trainlv := pm.Level
  6188.               else trainlv := 0;
  6189.               }
  6190.               if pm.Def.wMagicId in [31] then begin //if pm.Def.wMagicId in [13, 26, 31, 45] then begin
  6191.                 if not (pm.Level in [0..4]) then pm.Level := 0; //魔法最多3级
  6192.               end else begin
  6193.                 if not (pm.Level in [0..3]) then pm.Level := 0; //魔法最多3级
  6194.               end;
  6195.               TextOut(bbx + 48, bby + 8 + m * 37, pm.Def.sMagicName, c);

  6196.               if pm.Def.wMagicId in [31] then begin //if pm.Def.wMagicId in [13, 26, 31, 45] then begin
  6197.                 if pm.Level in [0..4] then begin
  6198.                   trainlv := pm.Level;
  6199.                   if trainlv >= 3 then trainlv := trainlv - 1;
  6200.                 end else trainlv := 0;
  6201.               end else begin
  6202.                 if pm.Level in [0..3] then trainlv := pm.Level
  6203.                 else trainlv := 0;
  6204.               end;

  6205.               TextOut(bbx + 48 + 16, bby + 8 + 15 + m * 37, IntToStr(pm.Level), c);
  6206.               if pm.Def.MaxTrain[trainlv] > 0 then begin
  6207.                 if trainlv < 3 then
  6208.                   TextOut(bbx + 48 + 46, bby + 8 + 15 + m * 37, IntToStr(pm.CurTrain) + '/' + IntToStr(pm.Def.MaxTrain[trainlv]), c)
  6209.                 else TextOut(bbx + 48 + 46, bby + 8 + 15 + m * 37, '-', c);
  6210.               end;
  6211.             end;
  6212.           end;
  6213.         end;
  6214.     end;

  6215.      //原为打开,本代码为显示人物身上所带物品信息,显示位置为人物下方
  6216.     if (g_ServerConfig.btShowClientItemStyle <> 0) then begin
  6217.       if g_MouseStateItem.s.Name <> '' then begin
  6218.         g_MouseItem := g_MouseStateItem;
  6219.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  6220.         if iname <> '' then begin
  6221.           if g_MouseItem.Dura = 0 then hcolor := clRed
  6222.           else hcolor := clWhite;
  6223.           with dsurface do begin
  6224.             old := MainForm.Canvas.Font.Size;
  6225.             MainForm.Canvas.Font.Size := 9;
  6226.             Font.Color := clyellow;
  6227.             bbx := SurfaceX(Left + 37);
  6228.             bby := SurfaceY(Top + 272 + 35);

  6229.             TextOut(bbx, bby, iname, clyellow); //2006-10-24 Mars修改
  6230.             TextOut(bbx + TextWidth(iname), bby, d1, hcolor);
  6231.             TextOut(bbx, bby + TextHeight('A') + 2, d2, hcolor);
  6232.             TextOut(bbx, bby + (TextHeight('A') + 2) * 2, d3, hcolor);

  6233.             if d2 <> '' then
  6234.               bby := bby + TextHeight('A') + 2;
  6235.             if d3 <> '' then
  6236.               bby := bby + TextHeight('A') + 2;

  6237.             bby := bby + TextHeight('A') + 2;

  6238.             for I := 0 to g_ExtractStringList.Count - 1 do begin
  6239.               TextOut(bbx, bby + (TextHeight('A') + 2) * I, g_ExtractStringList.Strings[I], hcolor);
  6240.             end;

  6241.             MainForm.Canvas.Font.Size := old;
  6242.           end;
  6243.         end;
  6244.         //g_MouseItem.s.Name := '';
  6245.       end;
  6246.     end;
  6247.      //玩家名称、行会
  6248.     with dsurface do begin
  6249.       TextOut(SurfaceX(Left + 122 - TextWidth(g_sSelChrName) div 2),
  6250.         SurfaceY(Top + 23), g_MySelf.m_sUserName, g_MySelf.m_nNameColor);
  6251.       if StatePage = 0 then begin
  6252.         TextOut(SurfaceX(Left + 45), SurfaceY(Top + 55),
  6253.           g_sGuildName + ' ' + g_sGuildRankName, clSilver);
  6254.       end;
  6255.     end;
  6256.   end;
  6257. end;

  6258. procedure TFrmDlg.DSWLightDirectPaint(Sender: TObject;
  6259.   dsurface: TTexture);
  6260. var
  6261.   Idx: Integer;
  6262.   d: TTexture;
  6263.   nWhere: Integer;
  6264. begin
  6265.   nWhere := -1;
  6266.   if StatePage = 0 then begin
  6267.     if Sender = DSWNecklace then nWhere := U_NECKLACE;
  6268.     if Sender = DSWLight then nWhere := U_RIGHTHAND;
  6269.     if Sender = DSWArmRingR then nWhere := U_ARMRINGR;
  6270.     if Sender = DSWArmRingL then nWhere := U_ARMRINGL;
  6271.     if Sender = DSWRingR then nWhere := U_RINGR;
  6272.     if Sender = DSWRingL then nWhere := U_RINGL;
  6273.     if Sender = DSWBujuk then nWhere := U_BUJUK;
  6274.     if Sender = DSWBelt then nWhere := U_BELT;
  6275.     if Sender = DSWBoots then nWhere := U_BOOTS;
  6276.     if Sender = DSWCharm then nWhere := U_CHARM;

  6277.     if nWhere >= 0 then begin
  6278.       if g_UseItems[nWhere].s.Name <> '' then begin
  6279.         Idx := g_UseItems[nWhere].s.looks;
  6280.         if Idx >= 0 then begin
  6281.           d := GetWStateImg(Idx);
  6282.           if d <> nil then
  6283.             with TDButton(Sender) do
  6284.               dsurface.Draw(SurfaceX(Left + (Width - d.Width) div 2),
  6285.                 SurfaceY(Top + (Height - d.Height) div 2),
  6286.                 d.ClientRect, d, True);

  6287.           if (g_UseItems[nWhere].s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_UseItems[nWhere].s.AddPoint))} then begin
  6288.             if GetTickCount - g_DrawUseItems[nWhere].dwDrawTick >= 200 then begin
  6289.               g_DrawUseItems[nWhere].dwDrawTick := GetTickCount;
  6290.               if g_DrawUseItems[nWhere].nIndex <= 0 then g_DrawUseItems[nWhere].nIndex := 260 - 1;
  6291.               Inc(g_DrawUseItems[nWhere].nIndex);
  6292.               if g_DrawUseItems[nWhere].nIndex > 265 then g_DrawUseItems[nWhere].nIndex := 260;
  6293.             end;
  6294.             d := g_WMain2Images.Images[g_DrawUseItems[nWhere].nIndex];
  6295.             if d <> nil then begin
  6296.               with TDButton(Sender) do
  6297.                 DrawBlend(dsurface, SurfaceX(Left + (Width - d.Width) div 2),
  6298.                   SurfaceY(Top + (Height - d.Height) div 2), d);
  6299.             end;
  6300.           end;

  6301.           if g_UseItems[nWhere].s.AddValue[12] >= 2 then begin
  6302.             if GetTickCount - g_DrawUseItems_[nWhere].dwDrawTick >= 200 then begin
  6303.               g_DrawUseItems_[nWhere].dwDrawTick := GetTickCount;
  6304.               if g_DrawUseItems_[nWhere].nIndex <= 0 then g_DrawUseItems_[nWhere].nIndex := 600 - 1;
  6305.               Inc(g_DrawUseItems_[nWhere].nIndex);
  6306.               if g_DrawUseItems_[nWhere].nIndex > 617 then g_DrawUseItems_[nWhere].nIndex := 600;
  6307.             end;
  6308.             d := g_WMain3Images.Images[g_DrawUseItems_[nWhere].nIndex];
  6309.             if d <> nil then begin
  6310.               with TDButton(Sender) do
  6311.                 DrawBlend(dsurface, SurfaceX(Left + (Width - d.Width) div 2),
  6312.                   SurfaceY(Top + (Height - d.Height) div 2), d);
  6313.             end;
  6314.           end;
  6315.         end;
  6316.       end;
  6317.     end;
  6318.   end;
  6319. end;

  6320. procedure TFrmDlg.DStateWinClick(Sender: TObject; X, Y: Integer);
  6321. begin
  6322.   if StatePage = 3 then begin
  6323.     X := DStateWin.LocalX(X) - DStateWin.Left;
  6324.     Y := DStateWin.LocalY(Y) - DStateWin.Top;
  6325.     if (X >= 33) and (X <= 33 + 166) and (Y >= 55) and (Y <= 55 + 37 * 5) then begin
  6326.       magcur := (Y - 55) div 37;
  6327.       if (magcur + magtop) >= g_MagicList.Count then
  6328.         magcur := (g_MagicList.Count - 1) - magtop;
  6329.     end;
  6330.   end;
  6331. end;

  6332. procedure TFrmDlg.DCloseStateClick(Sender: TObject; X, Y: Integer);
  6333. begin
  6334.   DStateWin.Visible := False;
  6335. end;

  6336. procedure TFrmDlg.DPrevStateDirectPaint(Sender: TObject;
  6337.   dsurface: TTexture);
  6338. var
  6339.   d: TTexture;
  6340. begin
  6341.   with Sender as TDButton do begin
  6342.     if TDButton(Sender).Downed then begin
  6343.       d := nil;
  6344.       if WLib <> nil then
  6345.         d := WLib.Images[FaceIndex];
  6346.       if d <> nil then
  6347.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  6348.     end;
  6349.   end;
  6350. end;

  6351. procedure TFrmDlg.PageChanged;
  6352. begin
  6353.   DScreen.ClearHint;
  6354.   case StatePage of
  6355.     0: begin
  6356.         DSWWeapon.Visible := True;
  6357.         DSWHelmet.Visible := True;
  6358.         DSWArmRingR.Visible := True;
  6359.         DSWRingR.Visible := True;
  6360.         DSWDress.Visible := True;
  6361.         DSWNecklace.Visible := True;
  6362.         DSWLight.Visible := True;
  6363.         DSWArmRingL.Visible := True;
  6364.         DSWRingL.Visible := True;
  6365.         DSWCharm.Visible := True;
  6366.         DSWBoots.Visible := True;
  6367.         DSWBelt.Visible := True;
  6368.         DSWBujuk.Visible := True;

  6369.         DStPageUp.Visible := False;
  6370.         DStPageDown.Visible := False;

  6371.         DStMag1.Visible := False; DStMag2.Visible := False;
  6372.         DStMag3.Visible := False; DStMag4.Visible := False;
  6373.         DStMag5.Visible := False; DStMag6.Visible := False;
  6374.         DStPageUp.Visible := False;
  6375.         DStPageDown.Visible := False;
  6376.       end;
  6377.     2: begin
  6378.         DSWWeapon.Visible := False;
  6379.         DSWHelmet.Visible := False;
  6380.         DSWArmRingR.Visible := False;
  6381.         DSWRingR.Visible := False;
  6382.         DSWDress.Visible := False;
  6383.         DSWNecklace.Visible := False;
  6384.         DSWLight.Visible := False;
  6385.         DSWArmRingL.Visible := False;
  6386.         DSWRingL.Visible := False;
  6387.         DSWCharm.Visible := False;
  6388.         DSWBoots.Visible := False;
  6389.         DSWBelt.Visible := False;
  6390.         DSWBujuk.Visible := False;

  6391.         DStMag1.Visible := False; DStMag2.Visible := False;
  6392.         DStMag3.Visible := False; DStMag4.Visible := False;
  6393.         DStMag5.Visible := False; DStMag6.Visible := False;
  6394.         DStPageUp.Visible := True;
  6395.         DStPageDown.Visible := True;
  6396.         AbilPage := 0;
  6397.       end;

  6398.     3: begin //魔法快捷键
  6399.         DSWWeapon.Visible := False;
  6400.         DSWHelmet.Visible := False;
  6401.         DSWArmRingR.Visible := False;
  6402.         DSWRingR.Visible := False;
  6403.         DSWDress.Visible := False;
  6404.         DSWNecklace.Visible := False;
  6405.         DSWLight.Visible := False;
  6406.         DSWArmRingL.Visible := False;
  6407.         DSWRingL.Visible := False;
  6408.         DSWCharm.Visible := False;
  6409.         DSWBoots.Visible := False;
  6410.         DSWBelt.Visible := False;
  6411.         DSWBujuk.Visible := False;

  6412.         DStMag1.Visible := True; DStMag2.Visible := True;
  6413.         DStMag3.Visible := True; DStMag4.Visible := True;
  6414.         DStMag5.Visible := True; DStMag6.Visible := True;

  6415.         DStPageUp.Visible := True;
  6416.         DStPageDown.Visible := True;
  6417.         MagicPage := 0;
  6418.       end;
  6419.   else begin
  6420.       DSWWeapon.Visible := False;
  6421.       DSWHelmet.Visible := False;
  6422.       DSWArmRingR.Visible := False;
  6423.       DSWRingR.Visible := False;
  6424.       DSWDress.Visible := False;
  6425.       DSWNecklace.Visible := False;
  6426.       DSWLight.Visible := False;
  6427.       DSWArmRingL.Visible := False;
  6428.       DSWRingL.Visible := False;
  6429.       DSWCharm.Visible := False;
  6430.       DSWBoots.Visible := False;
  6431.       DSWBelt.Visible := False;
  6432.       DSWBujuk.Visible := False;

  6433.       DStMag1.Visible := False; DStMag2.Visible := False;
  6434.       DStMag3.Visible := False; DStMag4.Visible := False;
  6435.       DStMag5.Visible := False; DStMag6.Visible := False;
  6436.       DStPageUp.Visible := False;
  6437.       DStPageDown.Visible := False;

  6438.     end;
  6439.   end;
  6440. end;

  6441. {procedure TFrmDlg.PageChanged;
  6442. begin
  6443.   DScreen.ClearHint;
  6444.   case StatePage of
  6445.     3: begin //魔法 惑怕芒
  6446.         DStMag1.Visible := True; DStMag2.Visible := True;
  6447.         DStMag3.Visible := True; DStMag4.Visible := True;
  6448.         DStMag5.Visible := True; DStMag6.Visible := True;
  6449.         DStPageUp.Visible := True;
  6450.         DStPageDown.Visible := True;
  6451.         MagicPage := 0;
  6452.       end;
  6453.   else begin
  6454.       DStMag1.Visible := False; DStMag2.Visible := False;
  6455.       DStMag3.Visible := False; DStMag4.Visible := False;
  6456.       DStMag5.Visible := False; DStMag6.Visible := False;
  6457.       DStPageUp.Visible := False;
  6458.       DStPageDown.Visible := False;
  6459.     end;
  6460.   end;
  6461. end;    }

  6462. procedure TFrmDlg.HeroPageChanged;
  6463. begin
  6464.   DScreen.ClearHint;
  6465.   case HeroStatePage of
  6466.     0: begin
  6467.         DHeroSWWeapon.Visible := True;
  6468.         DHeroSWHelmet.Visible := True;
  6469.         DHeroSWArmRingR.Visible := True;
  6470.         DHeroSWRingR.Visible := True;
  6471.         DHeroSWDress.Visible := True;
  6472.         DHeroSWNecklace.Visible := True;
  6473.         DHeroSWLight.Visible := True;
  6474.         DHeroSWArmRingL.Visible := True;
  6475.         DHeroSWRingL.Visible := True;
  6476.         DHeroSWCharm.Visible := True;
  6477.         DHeroSWBoots.Visible := True;
  6478.         DHeroSWBelt.Visible := True;
  6479.         DHeroSWBujuk.Visible := True;

  6480.         DHeroStPageUp.Visible := False;
  6481.         DHeroStPageDown.Visible := False;

  6482.         DHeroStMag1.Visible := False; DHeroStMag2.Visible := False;
  6483.         DHeroStMag3.Visible := False; DHeroStMag4.Visible := False;
  6484.         DHeroStMag5.Visible := False; DHeroStMag6.Visible := False;
  6485.         DHeroStPageUp.Visible := False;
  6486.         DHeroStPageDown.Visible := False;
  6487.       end;
  6488.     3: begin //魔法快捷键
  6489.         DHeroSWWeapon.Visible := False;
  6490.         DHeroSWHelmet.Visible := False;
  6491.         DHeroSWArmRingR.Visible := False;
  6492.         DHeroSWRingR.Visible := False;
  6493.         DHeroSWDress.Visible := False;
  6494.         DHeroSWNecklace.Visible := False;
  6495.         DHeroSWLight.Visible := False;
  6496.         DHeroSWArmRingL.Visible := False;
  6497.         DHeroSWRingL.Visible := False;
  6498.         DHeroSWCharm.Visible := False;
  6499.         DHeroSWBoots.Visible := False;
  6500.         DHeroSWBelt.Visible := False;
  6501.         DHeroSWBujuk.Visible := False;

  6502.         DHeroStMag1.Visible := True; DHeroStMag2.Visible := True;
  6503.         DHeroStMag3.Visible := True; DHeroStMag4.Visible := True;
  6504.         DHeroStMag5.Visible := True; DHeroStMag6.Visible := True;

  6505.         DHeroStPageUp.Visible := True;
  6506.         DHeroStPageDown.Visible := True;
  6507.         HeroMagicPage := 0;
  6508.       end;
  6509.   else begin
  6510.       DHeroSWWeapon.Visible := False;
  6511.       DHeroSWHelmet.Visible := False;
  6512.       DHeroSWArmRingR.Visible := False;
  6513.       DHeroSWRingR.Visible := False;
  6514.       DHeroSWDress.Visible := False;
  6515.       DHeroSWNecklace.Visible := False;
  6516.       DHeroSWLight.Visible := False;
  6517.       DHeroSWArmRingL.Visible := False;
  6518.       DHeroSWRingL.Visible := False;
  6519.       DHeroSWCharm.Visible := False;
  6520.       DHeroSWBoots.Visible := False;
  6521.       DHeroSWBelt.Visible := False;
  6522.       DHeroSWBujuk.Visible := False;

  6523.       DHeroStMag1.Visible := False; DHeroStMag2.Visible := False;
  6524.       DHeroStMag3.Visible := False; DHeroStMag4.Visible := False;
  6525.       DHeroStMag5.Visible := False; DHeroStMag6.Visible := False;
  6526.       DHeroStPageUp.Visible := False;
  6527.       DHeroStPageDown.Visible := False;
  6528.     end;
  6529.   end;
  6530. end;

  6531. procedure TFrmDlg.DPrevStateClick(Sender: TObject; X, Y: Integer);
  6532. begin
  6533.   Dec(StatePage);
  6534.   if StatePage < 0 then
  6535.     StatePage := MAXSTATEPAGE - 1;
  6536.   PageChanged;
  6537. end;

  6538. procedure TFrmDlg.DNextStateClick(Sender: TObject; X, Y: Integer);
  6539. begin
  6540.   Inc(StatePage);
  6541.   if StatePage > MAXSTATEPAGE - 1 then
  6542.     StatePage := 0;
  6543.   PageChanged;
  6544. end;

  6545. procedure TFrmDlg.DSWWeaponClick(Sender: TObject; X, Y: Integer);
  6546. var
  6547.   where, n, sel: Integer;
  6548.   flag, movcancel: Boolean;
  6549. begin
  6550.   if g_MySelf = nil then Exit;
  6551.   if StatePage <> 0 then Exit;
  6552.   //if (g_btItemMoving = 3) or (g_btItemMoving = 6) then Exit;
  6553.   if (g_MovingItem.Owner = DDealDlg) or (g_MovingItem.Owner = DHeroStateWin) then Exit;
  6554.   if g_boItemMoving then begin
  6555.     flag := False;
  6556.     movcancel := False;
  6557.     if (g_MovingItem.Index = -97) or (g_MovingItem.Index = -98) then Exit;
  6558.     if (g_MovingItem.Item.s.Name = '') or (g_WaitingUseItem.Item.s.Name <> '') then Exit;
  6559.     where := GetTakeOnPosition(g_MovingItem.Item.s.StdMode);
  6560.     if g_MovingItem.Index >= 0 then begin
  6561.       case where of
  6562.         U_DRESS: begin
  6563.             if Sender = DSWDress then begin
  6564.               if g_MySelf.m_btSex = 0 then
  6565.                 if g_MovingItem.Item.s.StdMode <> 10 then
  6566.                   Exit;
  6567.               if g_MySelf.m_btSex = 1 then
  6568.                 if g_MovingItem.Item.s.StdMode <> 11 then
  6569.                   Exit;
  6570.               flag := True;
  6571.             end;
  6572.           end;
  6573.         U_WEAPON: begin
  6574.             if Sender = DSWWeapon then begin
  6575.               flag := True;
  6576.             end;
  6577.           end;
  6578.         U_NECKLACE: begin
  6579.             if Sender = DSWNecklace then
  6580.               flag := True;
  6581.           end;
  6582.         U_RIGHTHAND: begin
  6583.             if Sender = DSWLight then
  6584.               flag := True;
  6585.           end;
  6586.         U_HELMET: begin
  6587.             if Sender = DSWHelmet then
  6588.               flag := True;
  6589.           end;
  6590.         U_RINGR, U_RINGL: begin
  6591.             if Sender = DSWRingL then begin
  6592.               where := U_RINGL;
  6593.               flag := True;
  6594.             end;
  6595.             if Sender = DSWRingR then begin
  6596.               where := U_RINGR;
  6597.               flag := True;
  6598.             end;
  6599.           end;
  6600.         U_ARMRINGR: begin
  6601.             if Sender = DSWArmRingL then begin
  6602.               where := U_ARMRINGL;
  6603.               flag := True;
  6604.             end;
  6605.             if Sender = DSWArmRingR then begin
  6606.               where := U_ARMRINGR;
  6607.               flag := True;
  6608.             end;
  6609.           end;
  6610.         U_ARMRINGL: begin //25
  6611.             if Sender = DSWArmRingL then begin
  6612.               where := U_ARMRINGL;
  6613.               flag := True;
  6614.             end;
  6615.           end;
  6616.         U_BUJUK: begin
  6617.             if Sender = DSWBujuk then begin
  6618.               where := U_BUJUK;
  6619.               flag := True;
  6620.             end;
  6621.             if Sender = DSWArmRingL then begin
  6622.               where := U_ARMRINGL;
  6623.               flag := True;
  6624.             end;
  6625.           end;
  6626.         U_BELT: begin
  6627.             if Sender = DSWBelt then begin
  6628.               where := U_BELT;
  6629.               flag := True;
  6630.             end;
  6631.           end;
  6632.         U_BOOTS: begin
  6633.             if Sender = DSWBoots then begin
  6634.               where := U_BOOTS;
  6635.               flag := True;
  6636.             end;
  6637.           end;
  6638.         U_CHARM: begin
  6639.             if Sender = DSWCharm then begin
  6640.               where := U_CHARM;
  6641.               flag := True;
  6642.             end;
  6643.           end;
  6644.       end;
  6645.     end else begin
  6646.       if (g_MovingItem.Owner = DStateWin) then begin
  6647.         n := -(g_MovingItem.Index + 1);
  6648.         if n in [0..12] then begin
  6649.           ItemClickSound(g_MovingItem.Item.s);
  6650.           g_UseItems[n] := g_MovingItem.Item;
  6651.           g_MovingItem.Item.s.Name := '';
  6652.           g_boItemMoving := False;
  6653.         end;
  6654.       end;
  6655.     end;
  6656.     if flag then begin
  6657.       if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DHeroItemBag) or (g_MovingItem.Owner = DUpgrade) then begin
  6658.         ItemClickSound(g_MovingItem.Item.s);
  6659.         g_WaitingUseItem := g_MovingItem;
  6660.         g_WaitingUseItem.Index := where;
  6661.         if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DUpgrade) then begin
  6662.           frmMain.SendTakeOnItem(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  6663.         end else
  6664.           if (g_MovingItem.Owner = DHeroItemBag) then begin
  6665.           frmMain.SendTakeOnItemFromHeroBag(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  6666.         end;
  6667.         g_MovingItem.Item.s.Name := '';
  6668.         g_boItemMoving := False;
  6669.       end;
  6670.     end;
  6671.   end else begin
  6672.     ClearMoveRect();
  6673.     flag := False;
  6674.     if (g_MovingItem.Item.s.Name <> '') or (g_WaitingUseItem.Item.s.Name <> '') then Exit;
  6675.     sel := -1;
  6676.     if Sender = DSWDress then sel := U_DRESS;
  6677.     if Sender = DSWWeapon then sel := U_WEAPON;
  6678.     if Sender = DSWHelmet then sel := U_HELMET;
  6679.     if Sender = DSWNecklace then sel := U_NECKLACE;
  6680.     if Sender = DSWLight then sel := U_RIGHTHAND;
  6681.     if Sender = DSWRingL then sel := U_RINGL;
  6682.     if Sender = DSWRingR then sel := U_RINGR;
  6683.     if Sender = DSWArmRingL then sel := U_ARMRINGL;
  6684.     if Sender = DSWArmRingR then sel := U_ARMRINGR;

  6685.     if Sender = DSWBujuk then sel := U_BUJUK;
  6686.     if Sender = DSWBelt then sel := U_BELT;
  6687.     if Sender = DSWBoots then sel := U_BOOTS;
  6688.     if Sender = DSWCharm then sel := U_CHARM;

  6689.     if sel >= 0 then begin
  6690.       if g_UseItems[sel].s.Name <> '' then begin
  6691.         ItemClickSound(g_UseItems[sel].s);
  6692.         g_MovingItem.Index := -(sel + 1);
  6693.         g_MovingItem.Item := g_UseItems[sel];
  6694.         g_UseItems[sel].s.Name := '';
  6695.         g_boItemMoving := True;
  6696.         g_MovingItem.Owner := DStateWin;
  6697.       end;
  6698.     end;
  6699.   end;
  6700. end;

  6701. procedure TFrmDlg.DSWWeaponMouseMove(Sender: TObject; Shift: TShiftState;
  6702.   X, Y: Integer);
  6703. var
  6704.   nLocalX, nLocalY: Integer;
  6705.   nHintX, nHintY: Integer;
  6706.   sel: Integer;
  6707.   iname, d1, d2, d3: string;
  6708.   useable: Boolean;
  6709.   hcolor: TColor;
  6710.   Butt: TDButton;
  6711. begin
  6712.   if StatePage <> 0 then Exit;
  6713.   DScreen.ClearHint;
  6714.   sel := -1;
  6715.   Butt := TDButton(Sender);
  6716.   if Sender = DSWDress then sel := U_DRESS;
  6717.   if Sender = DSWWeapon then sel := U_WEAPON;
  6718.   if Sender = DSWHelmet then sel := U_HELMET;
  6719.   if Sender = DSWNecklace then sel := U_NECKLACE;
  6720.   if Sender = DSWLight then sel := U_RIGHTHAND;
  6721.   if Sender = DSWRingL then sel := U_RINGL;
  6722.   if Sender = DSWRingR then sel := U_RINGR;
  6723.   if Sender = DSWArmRingL then sel := U_ARMRINGL;
  6724.   if Sender = DSWArmRingR then sel := U_ARMRINGR;
  6725.   {
  6726.   if Sender = DSWBujuk then sel := U_RINGL;
  6727.   if Sender = DSWBelt then sel := U_RINGR;
  6728.   if Sender = DSWBoots then sel := U_ARMRINGL;
  6729.   if Sender = DSWCharm then sel := U_ARMRINGR;
  6730.   }

  6731.   if Sender = DSWBujuk then sel := U_BUJUK;
  6732.   if Sender = DSWBelt then sel := U_BELT;
  6733.   if Sender = DSWBoots then sel := U_BOOTS;
  6734.   if Sender = DSWCharm then sel := U_CHARM;

  6735.   g_MoveRect := TDButton(Sender).ClientRect;
  6736.   g_MoveRect.Right := TDButton(Sender).ClientRect.Right + 2;
  6737.   if sel >= 0 then begin
  6738.     g_MouseStateItem := g_UseItems[sel];
  6739.       //原为注释掉 显示人物身上带的物品信息
  6740.     if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  6741.       g_MouseItem := g_UseItems[sel];

  6742.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  6743.       if HintList.Count > 0 then begin
  6744.         with Sender as TDButton do
  6745.           DScreen.ShowHint(SurfaceX(Left - 30),
  6746.             SurfaceY(Top + 50),
  6747.             HintList, False);
  6748.       end;
  6749.       g_MouseItem.s.Name := '';
  6750.     end;
  6751.   end else ClearMoveRect();
  6752. end;

  6753. procedure TFrmDlg.DStateWinMouseMove(Sender: TObject; Shift: TShiftState;
  6754.   X, Y: Integer);
  6755. begin
  6756.   DScreen.ClearHint;//清楚提示
  6757.   HintList.Clear;//清除提示
  6758.   g_MouseStateItem.s.Name := ''; //鼠标状态物品
  6759.   g_MouseHeroItem.s.Name := '';  //鼠标英雄物品
  6760. end;

  6761. procedure TFrmDlg.DStMag1DirectPaint(Sender: TObject;
  6762.   dsurface: TTexture);
  6763. var
  6764.   Idx, icon: Integer;
  6765.   d: TTexture;
  6766.   pm: PTClientMagic;
  6767. begin
  6768.   //DScreen.ClearHint;
  6769.   with Sender as TDButton do begin
  6770.     Idx := _MAX(tag + MagicPage * 6, 0);
  6771.     if Idx < g_MagicList.Count then begin
  6772.       pm := PTClientMagic(g_MagicList[Idx]);
  6773.       icon := pm.Def.btEffect * 2;
  6774.       if pm.Def.btEffect = 50 then icon := 84;
  6775.       //if pm.Def.btEffect = 51 then icon := 94;

  6776.       if pm.Def.btEffect = 70 then icon := 1 * 2;
  6777.       if pm.Def.btEffect = 71 then icon := 3 * 2;
  6778.       if pm.Def.btEffect = 72 then icon := 10 * 2;

  6779.       if pm.Level >= 4 then begin
  6780.         case pm.Def.wMagicId of
  6781.           13: icon := 140;
  6782.           26: icon := 142;
  6783.           31: icon := 104;
  6784.           45: icon := 144;
  6785.         end;
  6786.       end;

  6787.       if icon >= 0 then begin
  6788.         if not Downed then begin
  6789.           d := g_WMagIconImages.Images[icon];
  6790.           if d <> nil then
  6791.             dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  6792.         end else begin
  6793.           d := g_WMagIconImages.Images[icon + 1];
  6794.           if d <> nil then
  6795.             dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  6796.         end;
  6797.       end;
  6798.     end;
  6799.   end;
  6800. end;

  6801. procedure TFrmDlg.DStMag1Click(Sender: TObject; X, Y: Integer);
  6802. var
  6803.   I, Idx: Integer;
  6804.   selkey: Word;
  6805.   keych: Char;
  6806.   pm: PTClientMagic;
  6807. begin
  6808.   if StatePage = 3 then begin
  6809.     Idx := TDButton(Sender).tag + magtop;
  6810.     if (Idx >= 0) and (Idx < g_MagicList.Count) then begin
  6811.       pm := PTClientMagic(g_MagicList[Idx]);
  6812.       selkey := Word(pm.Key);
  6813.       SetMagicKeyDlg(pm.Def.btEffect * 2, pm.Def.sMagicName, selkey);
  6814.       keych := Char(selkey);
  6815.       for I := 0 to g_MagicList.Count - 1 do begin
  6816.         pm := PTClientMagic(g_MagicList[I]);
  6817.         if pm.Key = keych then begin
  6818.           pm.Key := #0;
  6819.           frmMain.SendMagicKeyChange(pm.Def.wMagicId, #0);
  6820.         end;
  6821.       end;
  6822.       pm := PTClientMagic(g_MagicList[Idx]);
  6823.       //if pm.Def.EffectType <> 0 then begin //八过篮 虐汲沥阑 给窃.
  6824.       pm.Key := keych;
  6825.       frmMain.SendMagicKeyChange(pm.Def.wMagicId, keych);
  6826.       //end;
  6827.     end;
  6828.   end;
  6829. end;

  6830. procedure TFrmDlg.DStPageUpClick(Sender: TObject; X, Y: Integer);
  6831. begin
  6832.   if StatePage = 2 then begin
  6833.     if Sender = DStPageUp then begin
  6834.       AbilPage := 0;
  6835.     end else begin
  6836.       AbilPage := 1;
  6837.     end;
  6838.   end else begin
  6839.     if Sender = DStPageUp then begin
  6840.       if MagicPage > 0 then
  6841.         Dec(MagicPage);
  6842.     end else begin
  6843.       if MagicPage < (g_MagicList.Count + 5) div 6 - 1 then
  6844.         Inc(MagicPage);
  6845.     end;
  6846.   end;
  6847. end;
  6848. {------------------------------------------------------------------------}

  6849. {------------------------------------------------------------------------}


  6850. procedure TFrmDlg.DBottomDirectPaint(Sender: TObject;
  6851.   dsurface: TTexture);
  6852. var
  6853.   d: TTexture;
  6854.   rc: TRect;
  6855.   btop, sx, sY, I, FColor, BColor: Integer;
  6856.   r: Real;
  6857.   Str: string;
  6858. begin
  6859.   if g_ConfigClient.btMainInterface in [0, 2] then begin
  6860. //{$IF SWH = SWH800}
  6861.     d := g_WMain3Images.Images[BOTTOMBOARD800];
  6862. //{$ELSEIF SWH = SWH1024}
  6863. //    d := g_WMain3Images.Images[BOTTOMBOARD800];
  6864. //{$IFEND}
  6865.     btop := 0;
  6866.     if d <> nil then begin
  6867.       dsurface.Draw(DBottom.Left, DBottom.Top, d.ClientRect, d, True);

  6868.       btop := SCREENHEIGHT - d.Height;
  6869.     end;
  6870.    { if d <> nil then begin
  6871.       with d.ClientRect do
  6872.         rc := Rect(Left, Top, Right, Top + 120);
  6873.       btop := SCREENHEIGHT - d.Height;

  6874.       dsurface.Draw(0,
  6875.         btop,
  6876.         rc,
  6877.         d, True);

  6878.       with d.ClientRect do
  6879.         rc := Rect(Left, Top + 120, Right, Bottom);
  6880.       dsurface.Draw(0,
  6881.         btop + 120,
  6882.         rc,
  6883.         d, False);
  6884.     end;  }

  6885.     d := nil;
  6886.     case g_nDayBright of
  6887.       0: d := g_WMainImages.Images[15]; //早上
  6888.       1: d := g_WMainImages.Images[12]; //白天
  6889.       2: d := g_WMainImages.Images[13]; //傍晚
  6890.       3: d := g_WMainImages.Images[14]; //晚上
  6891.     end;
  6892.     if d <> nil then
  6893.       dsurface.Draw(DBottom.Left + DBottom.Width div 2 + (DBottom.Width div 2 - (400 - 348)) {748}, 79 + DBottom.Top, d.ClientRect, d, False);

  6894.     if g_MyHero <> nil then begin
  6895.       if g_HeroUseItems[U_BUJUK].s.Name <> '' then begin
  6896.         if (g_HeroUseItems[U_BUJUK].s.StdMode = 25) and (g_HeroUseItems[U_BUJUK].s.Shape = 9) then begin
  6897.           DFirDragon.Visible := True;
  6898.         end else DFirDragon.Visible := False;
  6899.       end else DFirDragon.Visible := False;
  6900.     end else DFirDragon.Visible := False;

  6901.     if g_MySelf <> nil then begin
  6902.     //显示HP及MP 图形
  6903.       if (g_MySelf.m_Abil.MaxHP > 0) and (g_MySelf.m_Abil.MaxMP > 0) then begin
  6904.         if (g_MySelf.m_btJob = 0) and (g_MySelf.m_Abil.Level < 28) then begin //武士
  6905.           d := g_WMainImages.Images[5];
  6906.           if d <> nil then begin
  6907.             rc := d.ClientRect;
  6908.             rc.Right := d.ClientRect.Right - 2;
  6909.             dsurface.Draw(DBottom.Left + 38, btop + 90, rc, d, False);
  6910.           end;
  6911.           d := g_WMainImages.Images[6];
  6912.           if d <> nil then begin
  6913.             rc := d.ClientRect;
  6914.             rc.Right := d.ClientRect.Right - 2;
  6915.             rc.Top := Round(rc.Bottom / g_MySelf.m_Abil.MaxHP * (g_MySelf.m_Abil.MaxHP - g_MySelf.m_Abil.HP));
  6916.             dsurface.Draw(DBottom.Left + 38, btop + 90 + rc.Top, rc, d, False);
  6917.           end;
  6918.         end else begin
  6919.           d := g_WMainImages.Images[4];
  6920.           if d <> nil then begin
  6921.           //HP 图形
  6922.             rc := d.ClientRect;
  6923.             rc.Right := d.ClientRect.Right div 2 - 1;
  6924.             rc.Top := Round(rc.Bottom / g_MySelf.m_Abil.MaxHP * (g_MySelf.m_Abil.MaxHP - g_MySelf.m_Abil.HP));
  6925.             dsurface.Draw(DBottom.Left + 40, btop + 91 + rc.Top, rc, d, False);
  6926.           //MP 图形
  6927.             rc := d.ClientRect;
  6928.             rc.Left := d.ClientRect.Right div 2 + 1;
  6929.             rc.Right := d.ClientRect.Right - 1;
  6930.             rc.Top := Round(rc.Bottom / g_MySelf.m_Abil.MaxMP * (g_MySelf.m_Abil.MaxMP - g_MySelf.m_Abil.MP));
  6931.             dsurface.Draw(DBottom.Left + 40 + rc.Left, btop + 91 + rc.Top, rc, d, False);
  6932.           end;
  6933.         end;
  6934.       end;

  6935.     //等级
  6936.       with dsurface do begin
  6937.         PomiTextOut(dsurface, DBottom.Left + 660, SCREENHEIGHT - 104, IntToStr(g_MySelf.m_Abil.Level));
  6938.       end;
  6939.     //
  6940.       if (g_MySelf.m_Abil.MaxExp > 0) and (g_MySelf.m_Abil.MaxWeight > 0) then begin
  6941.         d := g_WMainImages.Images[7];
  6942.         if d <> nil then begin
  6943.         //经验条
  6944.           rc := d.ClientRect;
  6945.           if g_MySelf.m_Abil.Exp > 0 then r := g_MySelf.m_Abil.MaxExp / g_MySelf.m_Abil.Exp
  6946.           else r := 0;
  6947.           if r > 0 then rc.Right := Round(rc.Right / r)
  6948.           else rc.Right := 0;
  6949.         {
  6950.         dsurface.Draw (666, 527, rc, d, FALSE);
  6951.         PomiTextOut (dsurface, 660, 528, IntToStr(Myself.Abil.Exp));
  6952.         }
  6953.           dsurface.Draw(DBottom.Left + 666, SCREENHEIGHT - 73, rc, d, False);
  6954.         //PomiTextOut (dsurface, SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 260)){660}, SCREENHEIGHT - 72, FloatToStrFixFmt (100 * g_MySelf.m_Abil.Exp / g_MySelf.m_Abil.MaxExp, 3, 2) + '%');
  6955.         //PomiTextOut (dsurface, SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 260)){660}, SCREENHEIGHT - 57, IntToStr(g_MySelf.m_Abil.MaxExp));

  6956.         //背包重量条
  6957.           rc := d.ClientRect;
  6958.           if g_MySelf.m_Abil.Weight > 0 then r := g_MySelf.m_Abil.MaxWeight / g_MySelf.m_Abil.Weight
  6959.           else r := 0;
  6960.           if r > 0 then rc.Right := Round(rc.Right / r)
  6961.           else rc.Right := 0;
  6962.         {
  6963.         dsurface.Draw (666, 560, rc, d, FALSE);
  6964.         PomiTextOut (dsurface, 660, 561, IntToStr(Myself.Abil.Weight));
  6965.         }
  6966.           dsurface.Draw(DBottom.Left + 666, SCREENHEIGHT - 40, rc, d, False);
  6967.         //PomiTextOut (dsurface, SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 260)){660}, SCREENHEIGHT - 39, IntToStr(g_MySelf.m_Abil.Weight) + '/' + IntToStr(g_MySelf.m_Abil.MaxWeight));
  6968.         //PomiTextOut (dsurface, SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 260)){660}, SCREENHEIGHT - 24, IntToStr(g_MySelf.m_Abil.MaxWeight));
  6969.         end;
  6970.       end;
  6971.     //PomiTextOut (dsurface, SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 355)){755}, SCREENHEIGHT - 15, IntToStr(g_nMyHungryState));
  6972.     //饥饿程度
  6973.       if g_nMyHungryState in [1..4] then begin
  6974.         d := g_WMainImages.Images[16 + g_nMyHungryState - 1];
  6975.         if d <> nil then begin
  6976.           dsurface.Draw(DBottom.Left + 754, 553, d.ClientRect, d, True);
  6977.         end;
  6978.       end;
  6979.     end;

  6980.   end else begin
  6981.     d := g_WCqFirImages.Images[65];
  6982.     if d <> nil then begin
  6983.       dsurface.Draw(DBottom.Left, DBottom.Top, d.ClientRect, d, False);
  6984.       btop := SCREENHEIGHT - d.Height;
  6985.     end;

  6986.     {if d <> nil then begin
  6987.       with d.ClientRect do
  6988.         rc := Rect(Left, Top, Right, Top + 120);
  6989.       btop := SCREENHEIGHT - d.Height;
  6990.       dsurface.Draw(0,
  6991.         btop,
  6992.         rc,
  6993.         d, True);
  6994.       with d.ClientRect do
  6995.         rc := Rect(Left, Top + 120, Right, Bottom);
  6996.       dsurface.Draw(0,
  6997.         btop + 120,
  6998.         rc,
  6999.         d, False);
  7000.     end;}

  7001.     d := nil;
  7002.     {case g_nDayBright of
  7003.       0: d := g_WMainImages.Images[15]; //早上
  7004.       1: d := g_WMainImages.Images[12]; //白天
  7005.       2: d := g_WMainImages.Images[13]; //傍晚
  7006.       3: d := g_WMainImages.Images[14]; //晚上
  7007.     end;
  7008.     if d <> nil then
  7009.       dsurface.Draw(SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 348)), 79 + DBottom.Top, d.ClientRect, d, False);

  7010.     if g_MyHero <> nil then begin
  7011.       if g_HeroUseItems[U_BUJUK].s.Name <> '' then begin
  7012.         if (g_HeroUseItems[U_BUJUK].s.StdMode = 25) and (g_HeroUseItems[U_BUJUK].s.Shape = 9) then begin
  7013.           DFirDragon.Visible := True;
  7014.         end else DFirDragon.Visible := False;
  7015.       end else DFirDragon.Visible := False;
  7016.     end else DFirDragon.Visible := False;
  7017.     }


  7018.     if g_MySelf <> nil then begin
  7019.     //显示HP及MP 图形
  7020.       if (g_MySelf.m_Abil.MaxHP > 0) and (g_MySelf.m_Abil.MaxMP > 0) then begin
  7021.         if (g_MySelf.m_btJob = 0) and (g_MySelf.m_Abil.Level < 28) then begin //武士

  7022.           d := g_WCqFirImages.Images[74];
  7023.           if d <> nil then begin
  7024.             rc := d.ClientRect;
  7025.             rc.Right := Round(rc.Right / g_MySelf.m_Abil.MaxHP * g_MySelf.m_Abil.HP);
  7026.             dsurface.Draw(DBottom.Left + 3, btop, rc, d, False);
  7027.           end;
  7028.         end else begin
  7029.           d := g_WCqFirImages.Images[74];
  7030.           if d <> nil then begin
  7031.           //HP 图形
  7032.             rc := d.ClientRect;
  7033.             rc.Right := Round(rc.Right / g_MySelf.m_Abil.MaxHP * g_MySelf.m_Abil.HP);
  7034.             dsurface.Draw(DBottom.Left + 3, btop, rc, d, False);
  7035.           end;
  7036.           d := g_WCqFirImages.Images[73];
  7037.           if d <> nil then begin
  7038.           //MP 图形
  7039.             rc := d.ClientRect;
  7040.             rc.Right := Round(rc.Right / g_MySelf.m_Abil.MaxMP * g_MySelf.m_Abil.MP);
  7041.             dsurface.Draw(DBottom.Left + 3, btop + 3 + rc.Bottom, rc, d, False);
  7042.           end;
  7043.         end;
  7044.       end;
  7045.     //
  7046.       if (g_MySelf.m_Abil.MaxExp > 0) { and (g_MySelf.m_Abil.MaxWeight > 0)} then begin
  7047.         d := g_WCqFirImages.Images[75];
  7048.         if d <> nil then begin
  7049.         //经验条
  7050.           rc := d.ClientRect;
  7051.           {
  7052.           if g_MySelf.m_Abil.Exp > 0 then r := g_MySelf.m_Abil.MaxExp / g_MySelf.m_Abil.Exp
  7053.           else r := 0;
  7054.           if r > 0 then rc.Right := Round(rc.Right / r)
  7055.           else rc.Right := 0;
  7056.           }
  7057.           rc.Right := Round(rc.Right / g_MySelf.m_Abil.MaxExp * g_MySelf.m_Abil.Exp);


  7058.           //dsurface.Draw(DBottom.Left + 2, btop + 1, rc, d, False);
  7059.           dsurface.Draw(DBottom.Left + 2, SCREENHEIGHT - d.Height - 3, rc, d, False);
  7060.          {
  7061.         //背包重量条
  7062.           rc := d.ClientRect;
  7063.           if g_MySelf.m_Abil.Weight > 0 then r := g_MySelf.m_Abil.MaxWeight / g_MySelf.m_Abil.Weight
  7064.           else r := 0;
  7065.           if r > 0 then rc.Right := Round(rc.Right / r)
  7066.           else rc.Right := 0;
  7067.           dsurface.Draw(SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 266)), SCREENHEIGHT - 40, rc, d, False);
  7068.           }
  7069.         end;
  7070.       end;
  7071.     //等级
  7072.       //PomiTextOut(dsurface, 48, btop + 32, IntToStr(g_MySelf.m_Abil.Level));
  7073.       with dsurface do begin
  7074.         BoldTextOut(DBottom.Left + 174, btop + 3, IntToStr(g_MySelf.m_Abil.Level));
  7075.         BoldTextOut(DBottom.Left + 174, btop + 21, GetJobName(g_MySelf.m_btJob));

  7076.         if g_boShowWhiteHint then begin

  7077.           if g_MySelf.m_nGameGold > 10 then begin
  7078.             BoldTextOut(DBottom.Left + 720, SCREENHEIGHT - DBottom.Height + 4, IntToStr(g_MySelf.m_nGameGold));
  7079.           end else begin
  7080.             BoldTextOut(DBottom.Left + 720, SCREENHEIGHT - DBottom.Height + 4, IntToStr(g_MySelf.m_nGameGold), clRed);
  7081.           end;
  7082.           if g_MySelf.m_nGamePoint > 10 then begin
  7083.             BoldTextOut(DBottom.Left + 720, SCREENHEIGHT - DBottom.Height + 21, IntToStr(g_MySelf.m_nGamePoint));
  7084.           end else begin
  7085.             BoldTextOut(DBottom.Left + 720, SCREENHEIGHT - DBottom.Height + 21, IntToStr(g_MySelf.m_nGamePoint), clRed);
  7086.           end;

  7087.           //显示血
  7088.           Str := Format('%d/%d', [g_MySelf.m_Abil.HP, g_MySelf.m_Abil.MaxHP]);
  7089.           BoldTextOut(DBottom.Left + 2 + (140 - TextWidth(Str)) div 2, SCREENHEIGHT - DBottom.Height + 3, Str);

  7090.           //显示魔
  7091.           Str := Format('%d/%d', [g_MySelf.m_Abil.MP, g_MySelf.m_Abil.MaxMP]);
  7092.           BoldTextOut(DBottom.Left + 2 + (140 - TextWidth(Str)) div 2, SCREENHEIGHT - DBottom.Height + 21, Str);
  7093.         end;
  7094.       end;
  7095.     //PomiTextOut (dsurface, SCREENWIDTH div 2 + (SCREENWIDTH div 2 - (400 - 355)){755}, SCREENHEIGHT - 15, IntToStr(g_nMyHungryState));
  7096.     //饥饿程度
  7097.     end;
  7098.   end;
  7099. end;

  7100. {--------------------------------------------------------------}

  7101. procedure TFrmDlg.DBottomInRealArea(Sender: TObject; X, Y: Integer;
  7102.   var IsRealArea: Boolean);
  7103. var
  7104.   d: TTexture;
  7105. begin
  7106.   if g_ConfigClient.btMainInterface in [0, 2] then begin
  7107. //{$IF SWH = SWH800}
  7108.     d := g_WMain3Images.Images[BOTTOMBOARD800];
  7109. //{$ELSEIF SWH = SWH1024}
  7110. //    d := g_WMain3Images.Images[BOTTOMBOARD800];
  7111. //{$IFEND}
  7112.   end else begin
  7113.     d := g_WCqFirImages.Images[65];
  7114.   end;
  7115.   if d <> nil then begin
  7116.     if d.Pixels[X, Y] > 0 then IsRealArea := True
  7117.     else IsRealArea := False;
  7118.   end;
  7119. end;

  7120. procedure TFrmDlg.DMyStateDirectPaint(Sender: TObject;
  7121.   dsurface: TTexture);
  7122. var
  7123.   d: TDButton;
  7124.   dd: TTexture;
  7125. begin
  7126.   if Sender is TDButton then begin
  7127.     d := TDButton(Sender);
  7128.     if d.Downed then begin
  7129.       dd := nil;
  7130.       if d.WLib <> nil then
  7131.         dd := d.WLib.Images[d.FaceIndex];
  7132.       if dd <> nil then
  7133.         dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  7134.     end;
  7135.   end;
  7136. end;

  7137. procedure TFrmDlg.DBotGroupDirectPaint(Sender: TObject;
  7138.   dsurface: TTexture);
  7139. var
  7140.   d: TDButton;
  7141.   dd: TTexture;
  7142. begin
  7143.   if Sender is TDButton then begin
  7144.     d := TDButton(Sender);
  7145.     if d <> nil then begin
  7146.       if not d.Downed then begin
  7147.         dd := nil;
  7148.         if d.WLib <> nil then
  7149.           dd := d.WLib.Images[d.FaceIndex];
  7150.         if dd <> nil then
  7151.           dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  7152.       end else begin
  7153.         dd := nil;
  7154.         if d.WLib <> nil then
  7155.           dd := d.WLib.Images[d.FaceIndex + 1];
  7156.         if dd <> nil then
  7157.           dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  7158.       end;
  7159.     end;
  7160.   end;
  7161. end;

  7162. procedure TFrmDlg.DBotPlusAbilDirectPaint(Sender: TObject;
  7163.   dsurface: TTexture);
  7164. var
  7165.   d: TDButton;
  7166.   dd: TTexture;
  7167. begin
  7168.   if Sender is TDButton then begin
  7169.     dd := nil;
  7170.     d := TDButton(Sender);
  7171.     if g_ConfigClient.btMainInterface in [0, 2] then begin

  7172.       if g_nBonusPoint > 0 then begin
  7173.         case BlinkCount of
  7174.           0: dd := d.WLib.Images[218];
  7175.           1: dd := d.WLib.Images[219];
  7176.           2: dd := d.WLib.Images[220];
  7177.           3: dd := d.WLib.Images[221];
  7178.         end;
  7179.       end else begin
  7180.         dd := d.WLib.Images[222];
  7181.       end;
  7182.       if dd <> nil then
  7183.         dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);

  7184.       if GetTickCount - BlinkTime >= 40 then begin
  7185.         BlinkTime := GetTickCount;
  7186.         Inc(BlinkCount);
  7187.         if BlinkCount >= 3 then BlinkCount := 0;
  7188.       end;
  7189.     end else begin

  7190.       if not d.Downed then begin
  7191.         if ((BlinkCount mod 2 = 0) or DAdjustAbility.Visible) and (d.WLib <> nil) then dd := d.WLib.Images[150]
  7192.         else if (d.WLib <> nil) then dd := d.WLib.Images[151];
  7193.         if dd <> nil then
  7194.           dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  7195.       end else begin
  7196.         dd := nil;
  7197.         if d.WLib <> nil then
  7198.           dd := d.WLib.Images[d.FaceIndex + 1];
  7199.         if dd <> nil then
  7200.           dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  7201.       end;

  7202.       if GetTickCount - BlinkTime >= 500 then begin
  7203.         BlinkTime := GetTickCount;
  7204.         Inc(BlinkCount);
  7205.         if BlinkCount >= 10 then BlinkCount := 0;
  7206.       end;
  7207.     end;
  7208.   end;
  7209. end;

  7210. procedure TFrmDlg.DMyStateClick(Sender: TObject; X, Y: Integer);
  7211. begin
  7212.   if Sender = DMyState then begin
  7213.     StatePage := 0;
  7214.     OpenMyStatus;
  7215.   end;
  7216.   if Sender = DMyBag then OpenItemBag;
  7217.   if Sender = DMyMagic then begin
  7218.     StatePage := 3;
  7219.     OpenMyStatus;
  7220.   end;
  7221.   if Sender = DVoice then DSoundClick;
  7222. end;

  7223. procedure TFrmDlg.DSoundClick();
  7224. begin
  7225.   g_boSound := not g_boSound;
  7226.   if g_boSound then begin
  7227.     DScreen.AddChatBoardString('[打开声音]', clWhite, clblack);
  7228.   end else begin
  7229.     DScreen.AddChatBoardString('[关闭声音]', clWhite, clblack);
  7230.     MediaStopPlay('');
  7231.   end;
  7232. end;
  7233. procedure TFrmDlg.DSPage1MouseDown(Sender: TObject; Button: TMouseButton;
  7234.   Shift: TShiftState; X, Y: Integer);
  7235. begin
  7236.     StatePage := 0;
  7237.     PageChanged;
  7238. end;

  7239. procedure TFrmDlg.DSPage2MouseDown(Sender: TObject; Button: TMouseButton;
  7240.   Shift: TShiftState; X, Y: Integer);
  7241. begin
  7242.     StatePage := 1;
  7243.     PageChanged;
  7244. end;

  7245. procedure TFrmDlg.DSPage3MouseDown(Sender: TObject; Button: TMouseButton;
  7246.   Shift: TShiftState; X, Y: Integer);
  7247. begin
  7248.     StatePage := 2;
  7249.     PageChanged;
  7250. end;

  7251. procedure TFrmDlg.DSPage4MouseDown(Sender: TObject; Button: TMouseButton;
  7252.   Shift: TShiftState; X, Y: Integer);
  7253. begin
  7254.     StatePage := 3;
  7255.     PageChanged;
  7256. end;

  7257. {------------------------------------------------------------------------}

  7258. {------------------------------------------------------------------------}

  7259. procedure TFrmDlg.DBelt1DirectPaint(Sender: TObject;
  7260.   dsurface: TTexture);
  7261. var
  7262.   Idx: Integer;
  7263.   d: TTexture;
  7264. begin
  7265.   with Sender as TDButton do begin
  7266.     Idx := tag;
  7267.     if Idx in [0..5] then begin
  7268.       if g_ItemArr[Idx].s.Name <> '' then begin
  7269.         d := g_WBagItemImages.Images[g_ItemArr[Idx].s.looks];
  7270.         if d <> nil then
  7271.           dsurface.Draw(SurfaceX(Left + (Width - d.Width) div 2), SurfaceY(Top + (Height - d.Height) div 2), d.ClientRect, d, True);
  7272.       end;
  7273.     end;
  7274.     if g_ConfigClient.btMainInterface in [0, 2] then
  7275.       PomiTextOut(dsurface, SurfaceX(Left + 13), SurfaceY(Top + 19), IntToStr(Idx + 1));
  7276.   end;
  7277. end;

  7278. procedure TFrmDlg.DBelt1MouseMove(Sender: TObject; Shift: TShiftState; X,
  7279.   Y: Integer);
  7280. var
  7281.   Idx: Integer;
  7282.   iname, d1, d2, d3: string;
  7283.   useable: Boolean;
  7284. begin
  7285.   DScreen.ClearHint;
  7286.   Idx := TDButton(Sender).tag;
  7287.   if Idx in [0..5] then begin
  7288.     if g_ItemArr[Idx].s.Name <> '' then begin
  7289.       g_MouseItem := g_ItemArr[Idx];
  7290.       //原为注释掉 显示人物身上带的物品信息
  7291.       //
  7292.       if (g_ServerConfig.btShowClientItemStyle = 0) or (not DItemBag.Visible) then begin
  7293.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  7294.         if HintList.Count > 0 then begin
  7295.          //DScreen.AddChatBoardString('TFrmDlg.DBelt1MouseMove', clWhite, clPurple);
  7296.           with Sender as TDButton do
  7297.             DScreen.ShowHint(SurfaceX(Left - 30),
  7298.               SurfaceY(Top - HintList.Count * 14) - 20,
  7299.               HintList, False);
  7300.         end;
  7301.       end;
  7302.       //g_MouseItem.S.Name := '';
  7303.     end;
  7304.     g_MoveRect := TDButton(Sender).ClientRect;
  7305.     g_MoveRect.Right := g_MoveRect.Right + 2;
  7306.   end else ClearMoveRect();
  7307. end;

  7308. procedure TFrmDlg.DBelt1Click(Sender: TObject; X, Y: Integer);
  7309. var
  7310.   Idx: Integer;
  7311.   temp: TClientItem;
  7312. begin
  7313.   Idx := TDButton(Sender).tag;
  7314.   if Idx in [0..5] then begin
  7315.     if not g_boItemMoving then begin
  7316.       ClearMoveRect();
  7317.       if g_ItemArr[Idx].s.Name <> '' then begin
  7318.         ItemClickSound(g_ItemArr[Idx].s);
  7319.         g_boItemMoving := True;
  7320.         g_MovingItem.Index := Idx;
  7321.         g_MovingItem.Item := g_ItemArr[Idx];
  7322.         g_ItemArr[Idx].s.Name := '';
  7323.         g_MovingItem.Owner := DItemBag;
  7324.       end;
  7325.     end else begin
  7326.       if (g_MovingItem.Owner = DStateWin) or (g_MovingItem.Owner = DHeroStateWin) or (g_MovingItem.Owner = DHeroItemBag) or (g_MovingItem.Owner = DDealDlg) or (g_MovingItem.Owner = DUpgrade) then Exit;
  7327.       if (g_MovingItem.Index = -97) or (g_MovingItem.Index = -98) then Exit;
  7328.       if g_MovingItem.Item.s.StdMode <= 3 then begin //器记,澜侥,胶农费
  7329.         //ItemClickSound (MovingItem.Item.S.StdMode);
  7330.         if g_ItemArr[Idx].s.Name <> '' then begin
  7331.           temp := g_ItemArr[Idx];
  7332.           g_ItemArr[Idx] := g_MovingItem.Item;
  7333.           g_MovingItem.Index := Idx;
  7334.           g_MovingItem.Item := temp
  7335.         end else begin
  7336.           g_ItemArr[Idx] := g_MovingItem.Item;
  7337.           g_MovingItem.Item.s.Name := '';
  7338.           g_boItemMoving := False;
  7339.         end;
  7340.       end;
  7341.     end;
  7342.   end;
  7343. end;

  7344. procedure TFrmDlg.DBelt1DblClick(Sender: TObject);
  7345. var
  7346.   Idx: Integer;
  7347. begin
  7348.   Idx := TDButton(Sender).tag;
  7349.   if Idx in [0..5] then begin
  7350.     if g_ItemArr[Idx].s.Name <> '' then begin
  7351.       if (g_ItemArr[Idx].s.StdMode <= 4) or (g_ItemArr[Idx].s.StdMode = 31) then begin //荤侩且 荐 乐绰 酒捞袍
  7352.         frmMain.EatItem(Idx);
  7353.       end;
  7354.     end else begin
  7355.       if g_boItemMoving and (g_MovingItem.Index = Idx) and
  7356.         (g_MovingItem.Item.s.StdMode <= 4) or (g_MovingItem.Item.s.StdMode = 31)
  7357.         then begin
  7358.         frmMain.EatItem(-1);
  7359.       end;
  7360.     end;
  7361.   end;
  7362. end;

  7363. procedure TFrmDlg.GetMouseItemInfo(Actor: TActor; MouseItem: pTClientItem; var iname, line1, line2, line3: string; var useable: Boolean);
  7364.   function GetDuraStr(Dura, maxdura: Integer): string;
  7365.   begin
  7366.     if not BoNoDisplayMaxDura then
  7367.       Result := IntToStr(Round(Dura / 1000)) + '/' + IntToStr(Round(maxdura / 1000))
  7368.     else
  7369.       Result := IntToStr(Round(Dura / 1000));
  7370.   end;
  7371.   function GetDura100Str(Dura, maxdura: Integer): string;
  7372.   begin
  7373.     if not BoNoDisplayMaxDura then
  7374.       Result := IntToStr(Round(Dura / 100)) + '/' + IntToStr(Round(maxdura / 100))
  7375.     else
  7376.       Result := IntToStr(Round(Dura / 100));
  7377.   end;
  7378.   function GetMoveXY(Value: TValue): string;
  7379.   var
  7380.     TempRecord: TTempRecord;
  7381.   begin
  7382.     Move(Value, TempRecord, SizeOf(TTempRecord));
  7383.     Result := IntToStr(TempRecord.nX) + ':' + IntToStr(TempRecord.nY);
  7384.   end;
  7385.   procedure GetAtomStr(Value: TValue);
  7386.   begin
  7387.     if (not g_ServerConfig.boAllowItemAddValue) or (g_ServerConfig.btShowClientItemStyle <> 0) then Exit;
  7388.     if Value[4] > 0 then begin
  7389.       HintList.AddObject('攻击元素: ' + GetAtomTypeStr(Value[1]) + '+' + IntToStr(Value[4]), TObject(GetRGB(222)));
  7390.     end;
  7391.     if Value[5] > 0 then begin
  7392.       HintList.AddObject('强性元素: ' + GetAtomTypeStr(Value[2]) + '+' + IntToStr(Value[5]), TObject(GetRGB(222)));
  7393.     end;
  7394.     if Value[6] > 0 then begin
  7395.       HintList.AddObject('弱性元素: ' + GetAtomTypeStr(Value[3]) + '+' + IntToStr(Value[6]), TObject(GetRGB(254)));
  7396.     end;
  7397.   end;

  7398.   function GetStarsStr(nLevel: Byte): string;
  7399.   var
  7400.     I: Integer;
  7401.   begin
  7402.     Result := '';
  7403.     if nLevel <= 6 then begin
  7404.       for I := 0 to nLevel - 1 do begin
  7405.         Result := Result + '★';
  7406.       end;
  7407.     end;
  7408.   end;

  7409.   function GetStarsColor(nLevel: Byte): TColor;
  7410.   begin
  7411.     case nLevel of
  7412.       1: Result := clWhite;
  7413.       2: Result := clAqua;
  7414.       3: Result := clyellow;
  7415.       4: Result := clLime;
  7416.       5: Result := clPurple;
  7417.       6: Result := clFuchsia;
  7418.     end;
  7419.    { case nLevel of
  7420.       1: Result := clWhite;
  7421.       2: Result := clAqua;
  7422.       3: Result := clAqua;
  7423.       4: Result := clyellow;
  7424.       5: Result := clyellow;
  7425.       6: Result := clLime;
  7426.       7: Result := clLime;
  7427.       8: Result := clTeal;
  7428.       9: Result := clFuchsia;
  7429.       10: Result := clFuchsia;
  7430.     end; }
  7431.   end;
  7432. var
  7433.   sWgt, sTemp, sItemDesc: string;
  7434.   I, nLine: Integer;
  7435.   dwExp, dwMaxExp: LongWord;
  7436. begin
  7437.   HintList.Clear;
  7438.   iname := ''; line1 := ''; line2 := ''; line3 := '';
  7439.   useable := True;
  7440.   if (Actor = nil) or (MouseItem.s.Name = '') then Exit;

  7441.   if MouseItem.s.Name <> '' then begin
  7442.     HintList.AddObject({'★' + } MouseItem.s.Name, {TObject(clyellow)} TObject(MouseItem.s.AddValue[13]));
  7443.     if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  7444.       if g_ServerConfig.boAllowItemAddValue or g_ServerConfig.boAllowItemTime or g_ServerConfig.boAllowItemAddPoint then begin
  7445.         if MouseItem.s.AddValue[13] > 0 then begin
  7446.           sTemp := GetStarsStr(MouseItem.s.AddValue[13]);
  7447.           if sTemp <> '' then
  7448.             HintList.AddObject(sTemp, TObject(GetStarsColor(MouseItem.s.AddValue[13])));
  7449.         end;
  7450.       end;
  7451.     end;

  7452.     iname := MouseItem.s.Name + ' ';
  7453.     sWgt := '重量.';

  7454.     case MouseItem.s.StdMode of
  7455.       0: begin //药品
  7456.           if MouseItem.s.AC > 0 then begin
  7457.             HintList.AddObject('体力恢复: +' + IntToStr(MouseItem.s.AC) + 'HP', TObject(clWhite));
  7458.             line1 := '+' + IntToStr(MouseItem.s.AC) + 'HP ';
  7459.           end;
  7460.           if MouseItem.s.MAC > 0 then begin
  7461.             HintList.AddObject('魔法恢复: +' + IntToStr(MouseItem.s.MAC) + 'MP', TObject(clWhite));
  7462.             line1 := line1 + '+' + IntToStr(MouseItem.s.MAC) + 'MP';
  7463.           end;
  7464.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  7465.           line1 := line1 + ' 重量.' + IntToStr(MouseItem.s.Weight);
  7466.         end;
  7467.       1: begin
  7468.           case MouseItem.s.Shape of
  7469.             1, 2, 5, 6, 7: begin
  7470.                 HintList.AddObject('持续使用: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 小时', TObject(GetRGB(254)));
  7471.                 line2 := '持续使用 ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 小时';
  7472.               end;
  7473.             3, 4, 8, 9, 10: begin
  7474.                 HintList.AddObject('累积使用: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 小时', TObject(GetRGB(254)));
  7475.                 line2 := '累积使用 ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 小时';
  7476.               end;
  7477.           end;
  7478.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  7479.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  7480.         end;
  7481.       2: begin
  7482.           line1 := line1 + '重量. ' + IntToStr(MouseItem.s.Weight);
  7483.           case MouseItem.s.Shape of
  7484.             1: begin
  7485.                 line2 := '使用 ' + GetDura100Str(MouseItem.Dura, MouseItem.DuraMax) + ' 次';
  7486.                 HintList.AddObject('使用: ' + GetDura100Str(MouseItem.Dura, MouseItem.DuraMax) + ' 次', TObject(GetRGB(254)));
  7487.               end;
  7488.             2, 3: begin
  7489.                 line2 := '使用 ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 次';
  7490.                 HintList.AddObject('使用: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 次', TObject(GetRGB(254)));
  7491.               end;
  7492.           end;
  7493.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  7494.         end;
  7495.       3: begin
  7496.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  7497.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  7498.         end;
  7499.       8: begin
  7500.           line2 := '数量: ' + IntToStr(MouseItem.s.Need);
  7501.           HintList.AddObject('数量:' + IntToStr(MouseItem.s.Need), TObject(GetRGB(254)));
  7502.         end;
  7503.       4: begin
  7504.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  7505.           line1 := line1 + '重量. ' + IntToStr(MouseItem.s.Weight);
  7506.           line3 := '所需等级 ' + IntToStr(MouseItem.s.DuraMax);
  7507.           useable := False;
  7508.           case MouseItem.s.Shape of
  7509.             0: begin
  7510.                 line2 := '武士秘技';
  7511.                 if (Actor.m_btJob = 0) and (Actor.m_Abil.Level >= MouseItem.s.DuraMax) then
  7512.                   useable := True;
  7513.               end;
  7514.             1: begin
  7515.                 line2 := '法师秘技';
  7516.                 if (Actor.m_btJob = 1) and (Actor.m_Abil.Level >= MouseItem.s.DuraMax) then
  7517.                   useable := True;
  7518.               end;
  7519.             2: begin
  7520.                 line2 := '道士秘技';
  7521.                 if (Actor.m_btJob = 2) and (Actor.m_Abil.Level >= MouseItem.s.DuraMax) then
  7522.                   useable := True;
  7523.               end;
  7524.             99: begin
  7525.                 line2 := '通用秘技';
  7526.                 if Actor.m_Abil.Level >= MouseItem.s.DuraMax then
  7527.                   useable := True;
  7528.               end;
  7529.           end;
  7530.           if useable then begin
  7531.             HintList.AddObject('所需等级: ' + IntToStr(MouseItem.s.DuraMax), TObject(clWhite));
  7532.             HintList.AddObject(line2, TObject(clWhite));
  7533.           end else begin
  7534.             HintList.AddObject('所需等级: ' + IntToStr(MouseItem.s.DuraMax), TObject(clRed));
  7535.             HintList.AddObject(line2, TObject(clRed));
  7536.           end;
  7537.         end;
  7538.       5..6: {//武器} begin
  7539.           useable := False;
  7540.           if MouseItem.s.Reserved and $01 <> 0 then begin
  7541.             iname := '(*)' + iname;
  7542.             if HintList.Count > 0 then HintList.Delete(0);
  7543.             HintList.InsertObject(0, '★(*)' + MouseItem.s.Name, TObject(MouseItem.s.AddValue[13]));
  7544.           end;

  7545.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight) +
  7546.             ' 持久' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax);

  7547.           HintList.AddObject('持久: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax), TObject(GetRGB(254)));
  7548.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));

  7549.           if MouseItem.s.DC > 0 then begin
  7550.             line2 := '攻击力' + IntToStr(Loword(MouseItem.s.DC)) + '-' + IntToStr(Hiword(MouseItem.s.DC)) + ' ';
  7551.             HintList.AddObject('攻击: ' + IntToStr(Loword(MouseItem.s.DC)) + '-' + IntToStr(Hiword(MouseItem.s.DC)), TObject(clWhite));
  7552.           end;

  7553.           if MouseItem.s.MC > 0 then begin
  7554.             line2 := line2 + '魔法' + IntToStr(Loword(MouseItem.s.MC)) + '-' + IntToStr(Hiword(MouseItem.s.MC)) + ' ';
  7555.             HintList.AddObject('魔法: ' + IntToStr(Loword(MouseItem.s.MC)) + '-' + IntToStr(Hiword(MouseItem.s.MC)), TObject(clWhite));
  7556.           end;

  7557.           if MouseItem.s.SC > 0 then begin
  7558.             HintList.AddObject('道术: ' + IntToStr(Loword(MouseItem.s.SC)) + '-' + IntToStr(Hiword(MouseItem.s.SC)), TObject(clWhite));
  7559.             line2 := line2 + '道术' + IntToStr(Loword(MouseItem.s.SC)) + '-' + IntToStr(Hiword(MouseItem.s.SC)) + ' ';
  7560.           end;

  7561.           if (MouseItem.s.Source <= -1) and (MouseItem.s.Source >= -50) then begin
  7562.             line2 := line2 + '神圣 +' + IntToStr(-MouseItem.s.Source) + ' ';
  7563.             HintList.AddObject('神圣: +' + IntToStr(-MouseItem.s.Source), TObject(GetRGB(254)));
  7564.           end;
  7565.           if (MouseItem.s.Source <= -51) and (MouseItem.s.Source >= -100) then begin
  7566.             line2 := line2 + '神圣 -' + IntToStr(-MouseItem.s.Source - 50) + ' ';
  7567.             HintList.AddObject('神圣: -' + IntToStr(-MouseItem.s.Source - 50), TObject(GetRGB(254)));
  7568.           end;

  7569.           if Hiword(MouseItem.s.AC) > 0 then begin
  7570.             line3 := line3 + '准确+' + IntToStr(Hiword(MouseItem.s.AC)) + ' ';
  7571.             HintList.AddObject('准确: +' + IntToStr(Hiword(MouseItem.s.AC)), TObject(clWhite));
  7572.           end;

  7573.           if Hiword(MouseItem.s.MAC) > 0 then begin
  7574.             if Hiword(MouseItem.s.MAC) > 10 then begin
  7575.               line3 := line3 + '攻击速度 +' + IntToStr(Hiword(MouseItem.s.MAC) - 10) + ' ';
  7576.               HintList.AddObject('攻击速度: +' + IntToStr(Hiword(MouseItem.s.MAC) - 10), TObject(clWhite))
  7577.             end else begin
  7578.               line3 := line3 + '攻击速度 -' + IntToStr(Hiword(MouseItem.s.MAC)) + ' ';
  7579.               HintList.AddObject('攻击速度: -' + IntToStr(Hiword(MouseItem.s.MAC)), TObject(clWhite));
  7580.             end;
  7581.           end;

  7582.           if Loword(MouseItem.s.AC) > 0 then begin
  7583.             line3 := line3 + '幸运+' + IntToStr(Loword(MouseItem.s.AC)) + ' ';
  7584.             HintList.AddObject('幸运: +' + IntToStr(Loword(MouseItem.s.AC)), TObject(GetRGB(254)));
  7585.           end;
  7586.           if Loword(MouseItem.s.MAC) > 0 then begin
  7587.             HintList.AddObject('诅咒: +' + IntToStr(Loword(MouseItem.s.MAC)), TObject(GetRGB(254)));
  7588.             line3 := line3 + '诅咒+' + IntToStr(Loword(MouseItem.s.MAC)) + ' ';
  7589.           end;

  7590.           GetAtomStr(MouseItem.s.AddValue);

  7591.           case MouseItem.s.Need of
  7592.             0: begin
  7593.                 if Actor.m_Abil.Level >= MouseItem.s.NeedLevel then
  7594.                   useable := True;
  7595.                 sTemp := '所需等级: ' + IntToStr(MouseItem.s.NeedLevel);
  7596.                 line3 := line3 + sTemp;
  7597.               end;
  7598.             1: begin
  7599.                 if Hiword(Actor.m_Abil.DC) >= MouseItem.s.NeedLevel then
  7600.                   useable := True;
  7601.                 sTemp := '需要攻击力: ' + IntToStr(MouseItem.s.NeedLevel);
  7602.                 line3 := line3 + sTemp;
  7603.               end;
  7604.             2: begin
  7605.                 if Hiword(Actor.m_Abil.MC) >= MouseItem.s.NeedLevel then
  7606.                   useable := True;
  7607.                 sTemp := '所需魔法值: ' + IntToStr(MouseItem.s.NeedLevel);
  7608.                 line3 := line3 + sTemp;
  7609.               end;
  7610.             3: begin
  7611.                 if Hiword(Actor.m_Abil.SC) >= MouseItem.s.NeedLevel then
  7612.                   useable := True;
  7613.                 sTemp := '所需道术: ' + IntToStr(MouseItem.s.NeedLevel);
  7614.                 line3 := line3 + sTemp;
  7615.               end;
  7616.             4: begin
  7617.                 useable := True;
  7618.                 sTemp := '所需转生等级: ' + IntToStr(MouseItem.s.NeedLevel);
  7619.                 line3 := line3 + sTemp;
  7620.               end;
  7621.             40: begin
  7622.                 useable := True;
  7623.                 sTemp := '所需转生&等级: ' + IntToStr(MouseItem.s.NeedLevel);
  7624.                 line3 := line3 + sTemp;
  7625.               end;
  7626.             41: begin
  7627.                 useable := True;
  7628.                 sTemp := '所需转生&攻击力: ' + IntToStr(MouseItem.s.NeedLevel);
  7629.                 line3 := line3 + sTemp;
  7630.               end;
  7631.             42: begin
  7632.                 useable := True;
  7633.                 sTemp := '所需转生&魔法力: ' + IntToStr(MouseItem.s.NeedLevel);
  7634.                 line3 := line3 + sTemp;
  7635.               end;
  7636.             43: begin
  7637.                 useable := True;
  7638.                 sTemp := '所需转生&道术: ' + IntToStr(MouseItem.s.NeedLevel);
  7639.                 line3 := line3 + sTemp;
  7640.               end;
  7641.             44: begin
  7642.                 useable := True;
  7643.                 sTemp := '所需转生&声望点: ' + IntToStr(MouseItem.s.NeedLevel);
  7644.                 line3 := line3 + sTemp;
  7645.               end;
  7646.             5: begin
  7647.                 useable := True;
  7648.                 sTemp := '所需声望点: ' + IntToStr(MouseItem.s.NeedLevel);
  7649.                 line3 := line3 + sTemp;
  7650.               end;
  7651.             6: begin
  7652.                 useable := True;
  7653.                 sTemp := '行会成员专用';
  7654.                 line3 := line3 + sTemp;
  7655.               end;
  7656.             60: begin
  7657.                 useable := True;
  7658.                 sTemp := '行会掌门专用';
  7659.                 line3 := line3 + sTemp;
  7660.               end;
  7661.             7: begin
  7662.                 useable := True;
  7663.                 sTemp := '沙城成员专用';
  7664.                 line3 := line3 + sTemp;
  7665.               end;
  7666.             70: begin
  7667.                 useable := True;
  7668.                 sTemp := '沙城城主专用';
  7669.                 line3 := line3 + sTemp;
  7670.               end;
  7671.             8: begin
  7672.                 useable := True;
  7673.                 sTemp := '会员专用';
  7674.                 line3 := line3 + sTemp;
  7675.               end;
  7676.             81: begin
  7677.                 useable := True;
  7678.                 sTemp := '会员类型: =' + IntToStr(Loword(MouseItem.s.NeedLevel)) + '会员等级: >=' + IntToStr(Hiword(MouseItem.s.NeedLevel));
  7679.                 line3 := line3 + sTemp;
  7680.               end;
  7681.             82: begin
  7682.                 useable := True;
  7683.                 sTemp := '会员类型: >=' + IntToStr(Loword(MouseItem.s.NeedLevel)) + '会员等级: >=' + IntToStr(Hiword(MouseItem.s.NeedLevel));
  7684.                 line3 := line3 + sTemp;
  7685.               end;
  7686.           end;
  7687.           if useable then begin
  7688.             HintList.AddObject(sTemp, TObject(clWhite));
  7689.           end else begin
  7690.             HintList.AddObject(sTemp, TObject(clRed));
  7691.           end;
  7692.         end;
  7693.       7: begin
  7694.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  7695.           case MouseItem.s.Shape of
  7696.             0: begin
  7697.                 line2 := '使用 ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 次';
  7698.                 HintList.AddObject('使用:' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 次', TObject(GetRGB(254)));
  7699.               end;
  7700.             1: begin
  7701.                 line2 := 'HP ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 万';
  7702.                 HintList.AddObject('HP:' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 万', TObject(GetRGB(254)));
  7703.               end;
  7704.             2: begin
  7705.                 line2 := 'MP ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 万';
  7706.                 HintList.AddObject('MP:' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 万', TObject(GetRGB(254)));
  7707.               end;
  7708.             3: begin
  7709.                 line2 := 'HPMP ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 万';
  7710.                 HintList.AddObject('HPMP:' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 万', TObject(GetRGB(254)));
  7711.               end;
  7712.           end;
  7713.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  7714.         end;
  7715.       10, 11: {//男衣服, 女衣服} begin
  7716.           useable := False;
  7717.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight) +
  7718.             ' 持久' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax);

  7719.           HintList.AddObject('持久: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax), TObject(GetRGB(254)));
  7720.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));

  7721.           if MouseItem.s.AC > 0 then begin
  7722.             HintList.AddObject('防御: ' + IntToStr(Loword(MouseItem.s.AC)) + '-' + IntToStr(Hiword(MouseItem.s.AC)), TObject(clWhite));
  7723.             line2 := '防御' + IntToStr(Loword(MouseItem.s.AC)) + '-' + IntToStr(Hiword(MouseItem.s.AC)) + ' ';
  7724.           end;
  7725.           if MouseItem.s.MAC > 0 then begin
  7726.             HintList.AddObject('魔防: ' + IntToStr(Loword(MouseItem.s.MAC)) + '-' + IntToStr(Hiword(MouseItem.s.MAC)), TObject(clWhite));
  7727.             line2 := line2 + '魔防' + IntToStr(Loword(MouseItem.s.MAC)) + '-' + IntToStr(Hiword(MouseItem.s.MAC)) + ' ';
  7728.           end;
  7729.           if MouseItem.s.DC > 0 then begin
  7730.             HintList.AddObject('攻击: ' + IntToStr(Loword(MouseItem.s.DC)) + '-' + IntToStr(Hiword(MouseItem.s.DC)), TObject(clWhite));
  7731.             line2 := line2 + '攻击力' + IntToStr(Loword(MouseItem.s.DC)) + '-' + IntToStr(Hiword(MouseItem.s.DC)) + ' ';
  7732.           end;
  7733.           if MouseItem.s.MC > 0 then begin
  7734.             HintList.AddObject('魔法: ' + IntToStr(Loword(MouseItem.s.MC)) + '-' + IntToStr(Hiword(MouseItem.s.MC)), TObject(clWhite));
  7735.             line2 := line2 + '魔法' + IntToStr(Loword(MouseItem.s.MC)) + '-' + IntToStr(Hiword(MouseItem.s.MC)) + ' ';
  7736.           end;
  7737.           if MouseItem.s.SC > 0 then begin
  7738.             HintList.AddObject('道术: ' + IntToStr(Loword(MouseItem.s.SC)) + '-' + IntToStr(Hiword(MouseItem.s.SC)), TObject(clWhite));
  7739.             line2 := line2 + '道术' + IntToStr(Loword(MouseItem.s.SC)) + '-' + IntToStr(Hiword(MouseItem.s.SC));
  7740.           end;
  7741.           if LoByte(MouseItem.s.Source) > 0 then begin
  7742.             HintList.AddObject('幸运: +' + IntToStr(LoByte(MouseItem.s.Source)), TObject(GetRGB(254)));
  7743.             line3 := line3 + '幸运+' + IntToStr(LoByte(MouseItem.s.Source)) + ' ';
  7744.           end;
  7745.           if HiByte(MouseItem.s.Source) > 0 then begin
  7746.             HintList.AddObject('诅咒: +' + IntToStr(HiByte(MouseItem.s.Source)), TObject(GetRGB(254)));
  7747.             line3 := line3 + '诅咒+' + IntToStr(HiByte(MouseItem.s.Source)) + ' ';
  7748.           end;
  7749.           GetAtomStr(MouseItem.s.AddValue);

  7750.           case MouseItem.s.Need of
  7751.             0: begin
  7752.                 if Actor.m_Abil.Level >= MouseItem.s.NeedLevel then
  7753.                   useable := True;
  7754.                 sTemp := '所需等级: ' + IntToStr(MouseItem.s.NeedLevel);
  7755.                 line3 := line3 + sTemp;
  7756.               end;
  7757.             1: begin
  7758.                 if Hiword(Actor.m_Abil.DC) >= MouseItem.s.NeedLevel then
  7759.                   useable := True;
  7760.                 sTemp := '需要攻击力: ' + IntToStr(MouseItem.s.NeedLevel);
  7761.                 line3 := line3 + sTemp;
  7762.               end;
  7763.             2: begin
  7764.                 if Hiword(Actor.m_Abil.MC) >= MouseItem.s.NeedLevel then
  7765.                   useable := True;
  7766.                 sTemp := '所需魔法值: ' + IntToStr(MouseItem.s.NeedLevel);
  7767.                 line3 := line3 + sTemp;
  7768.               end;
  7769.             3: begin
  7770.                 if Hiword(Actor.m_Abil.SC) >= MouseItem.s.NeedLevel then
  7771.                   useable := True;
  7772.                 sTemp := '所需道术: ' + IntToStr(MouseItem.s.NeedLevel);
  7773.                 line3 := line3 + sTemp;
  7774.               end;
  7775.             4: begin
  7776.                 useable := True;
  7777.                 sTemp := '所需转生等级: ' + IntToStr(MouseItem.s.NeedLevel);
  7778.                 line3 := line3 + sTemp;
  7779.               end;
  7780.             40: begin
  7781.                 useable := True;
  7782.                 sTemp := '所需转生&等级: ' + IntToStr(MouseItem.s.NeedLevel);
  7783.                 line3 := line3 + sTemp;
  7784.               end;
  7785.             41: begin
  7786.                 useable := True;
  7787.                 sTemp := '所需转生&攻击力: ' + IntToStr(MouseItem.s.NeedLevel);
  7788.                 line3 := line3 + sTemp;
  7789.               end;
  7790.             42: begin
  7791.                 useable := True;
  7792.                 sTemp := '所需转生&魔法力: ' + IntToStr(MouseItem.s.NeedLevel);
  7793.                 line3 := line3 + sTemp;
  7794.               end;
  7795.             43: begin
  7796.                 useable := True;
  7797.                 sTemp := '所需转生&道术: ' + IntToStr(MouseItem.s.NeedLevel);
  7798.                 line3 := line3 + sTemp;
  7799.               end;
  7800.             44: begin
  7801.                 useable := True;
  7802.                 sTemp := '所需转生&声望点: ' + IntToStr(MouseItem.s.NeedLevel);
  7803.                 line3 := line3 + sTemp;
  7804.               end;
  7805.             5: begin
  7806.                 useable := True;
  7807.                 sTemp := '所需声望点: ' + IntToStr(MouseItem.s.NeedLevel);
  7808.                 line3 := line3 + sTemp;
  7809.               end;
  7810.             6: begin
  7811.                 useable := True;
  7812.                 sTemp := '行会成员专用';
  7813.                 line3 := line3 + sTemp;
  7814.               end;
  7815.             60: begin
  7816.                 useable := True;
  7817.                 sTemp := '行会掌门专用';
  7818.                 line3 := line3 + sTemp;
  7819.               end;
  7820.             7: begin
  7821.                 useable := True;
  7822.                 sTemp := '沙城成员专用';
  7823.                 line3 := line3 + sTemp;
  7824.               end;
  7825.             70: begin
  7826.                 useable := True;
  7827.                 sTemp := '沙城城主专用';
  7828.                 line3 := line3 + sTemp;
  7829.               end;
  7830.             8: begin
  7831.                 useable := True;
  7832.                 sTemp := '会员专用';
  7833.                 line3 := line3 + sTemp;
  7834.               end;
  7835.             81: begin
  7836.                 useable := True;
  7837.                 sTemp := '会员类型: =' + IntToStr(Loword(MouseItem.s.NeedLevel)) + '会员等级: >=' + IntToStr(Hiword(MouseItem.s.NeedLevel));
  7838.                 line3 := line3 + sTemp;
  7839.               end;
  7840.             82: begin
  7841.                 useable := True;
  7842.                 sTemp := '会员类型: >=' + IntToStr(Loword(MouseItem.s.NeedLevel)) + '会员等级: >=' + IntToStr(Hiword(MouseItem.s.NeedLevel));
  7843.                 line3 := line3 + sTemp;
  7844.               end;
  7845.           end;
  7846.           if useable then begin
  7847.             HintList.AddObject(sTemp, TObject(clWhite));
  7848.           end else begin
  7849.             HintList.AddObject(sTemp, TObject(clRed));
  7850.           end;
  7851.         end;
  7852.       15, //头盔,捧备
  7853.         19, 20, 21, //项链
  7854.         22, 23, //戒指
  7855.         24, 26, //手镯
  7856.         51,
  7857.         52, 62, //鞋
  7858.         53, 63,
  7859.         54, 64, 30: {//腰带} begin
  7860.           useable := False;
  7861.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight) +
  7862.             ' 持久' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax);

  7863.           HintList.AddObject('持久: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax), TObject(GetRGB(254)));
  7864.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));

  7865.           case MouseItem.s.StdMode of
  7866.             19, 53: {//项链} begin
  7867.                 if MouseItem.s.AC > 0 then begin
  7868.                   sTemp := '魔法躲避: +' + IntToStr(Hiword(MouseItem.s.AC)) + '0%';
  7869.                   line2 := line2 + sTemp + ' ';
  7870.                   HintList.AddObject(sTemp, TObject(clWhite));
  7871.                 end;
  7872.                 if Loword(MouseItem.s.MAC) > 0 then begin
  7873.                   sTemp := '诅咒: +' + IntToStr(Loword(MouseItem.s.MAC));
  7874.                   line2 := line2 + sTemp + ' ';
  7875.                   HintList.AddObject(sTemp, TObject(GetRGB(254)));
  7876.                 end;
  7877.                 if Hiword(MouseItem.s.MAC) > 0 then begin
  7878.                   sTemp := '幸运: +' + IntToStr(Hiword(MouseItem.s.MAC));
  7879.                   line2 := line2 + sTemp + ' ';
  7880.                   HintList.AddObject(sTemp, TObject(GetRGB(254)));
  7881.                 end;
  7882.               end;
  7883.             20, 24, 52: {//项链 及 手镯: MaxAC -> Hit,  MaxMac -> Speed} begin
  7884.                 if MouseItem.s.AC > 0 then begin
  7885.                   line2 := line2 + '准确+' + IntToStr(Hiword(MouseItem.s.AC)) + ' ';
  7886.                   HintList.AddObject('准确: +' + IntToStr(Hiword(MouseItem.s.AC)), TObject(clWhite));
  7887.                 end;
  7888.                 if MouseItem.s.MAC > 0 then begin
  7889.                   line2 := line2 + '敏捷+' + IntToStr(Hiword(MouseItem.s.MAC)) + ' ';
  7890.                   HintList.AddObject('敏捷: +' + IntToStr(Hiword(MouseItem.s.MAC)), TObject(clWhite));
  7891.                 end;
  7892.               end;
  7893.             21, 54: {//项链} begin
  7894.                 if Hiword(MouseItem.s.AC) > 0 then begin
  7895.                   HintList.AddObject('体力恢复: +' + IntToStr(Hiword(MouseItem.s.AC)) + '0%', TObject(clWhite));
  7896.                   line2 := line2 + '体力恢复+' + IntToStr(Hiword(MouseItem.s.AC)) + '0% ';
  7897.                 end;
  7898.                 if Hiword(MouseItem.s.MAC) > 0 then begin
  7899.                   HintList.AddObject('魔法恢复: +' + IntToStr(Hiword(MouseItem.s.MAC)) + '0%', TObject(clWhite));
  7900.                   line2 := line2 + '魔法恢复+' + IntToStr(Hiword(MouseItem.s.MAC)) + '0% ';
  7901.                 end;
  7902.                 if Loword(MouseItem.s.AC) > 0 then begin
  7903.                   HintList.AddObject('攻击速度: +' + IntToStr(Loword(MouseItem.s.AC)), TObject(clWhite));
  7904.                   line2 := line2 + '攻击速度+' + IntToStr(Loword(MouseItem.s.AC)) + ' ';
  7905.                 end;
  7906.                 if Loword(MouseItem.s.MAC) > 0 then begin
  7907.                   HintList.AddObject('攻击速度: -' + IntToStr(Loword(MouseItem.s.MAC)), TObject(clWhite));
  7908.                   line2 := line2 + '攻击速度-' + IntToStr(Loword(MouseItem.s.MAC)) + ' ';
  7909.                 end;
  7910.               end;
  7911.             23: {//戒指} begin
  7912.                 if Hiword(MouseItem.s.AC) > 0 then begin
  7913.                   HintList.AddObject('毒物躲避: +' + IntToStr(Hiword(MouseItem.s.AC)) + '0%', TObject(clWhite));
  7914.                   line2 := line2 + '毒物躲避+' + IntToStr(Hiword(MouseItem.s.AC)) + '0% ';
  7915.                 end;
  7916.                 if Hiword(MouseItem.s.MAC) > 0 then begin
  7917.                   HintList.AddObject('中毒恢复: +' + IntToStr(Hiword(MouseItem.s.MAC)) + '0%', TObject(clWhite));
  7918.                   line2 := line2 + '中毒恢复+' + IntToStr(Hiword(MouseItem.s.MAC)) + '0% ';
  7919.                 end;
  7920.                 if Loword(MouseItem.s.AC) > 0 then begin
  7921.                   HintList.AddObject('攻击速度: +' + IntToStr(Loword(MouseItem.s.AC)), TObject(clWhite));
  7922.                   line2 := line2 + '攻击速度+' + IntToStr(Loword(MouseItem.s.AC)) + ' ';
  7923.                 end;
  7924.                 if Loword(MouseItem.s.MAC) > 0 then begin
  7925.                   HintList.AddObject('攻击速度: -' + IntToStr(Loword(MouseItem.s.MAC)), TObject(clWhite));
  7926.                   line2 := line2 + '攻击速度-' + IntToStr(Loword(MouseItem.s.MAC)) + ' ';
  7927.                 end;
  7928.               end;
  7929.             62: {//Boots} begin
  7930.                 {if Hiword(MouseItem.S.AC) > 0 then
  7931.                   HintList.AddObject('防御: ' + IntToStr(Hiword(MouseItem.S.AC)), TObject(clWhite));
  7932.                 if Hiword(MouseItem.S.MAC) > 0 then
  7933.                   HintList.AddObject('魔防: ' + IntToStr(Hiword(MouseItem.S.MAC)), TObject(clWhite)); }
  7934.                 if MouseItem.s.AC > 0 then begin
  7935.                   HintList.AddObject('防御: ' + IntToStr(Loword(MouseItem.s.AC)) + '-' + IntToStr(Hiword(MouseItem.s.AC)), TObject(clWhite));
  7936.                   line2 := line2 + '防御' + IntToStr(Loword(MouseItem.s.AC)) + '-' + IntToStr(Hiword(MouseItem.s.AC)) + ' ';
  7937.                 end;
  7938.                 if MouseItem.s.MAC > 0 then begin
  7939.                   HintList.AddObject('魔防: ' + IntToStr(Loword(MouseItem.s.MAC)) + '-' + IntToStr(Hiword(MouseItem.s.MAC)), TObject(clWhite));
  7940.                   line2 := line2 + '魔防' + IntToStr(Loword(MouseItem.s.MAC)) + '-' + IntToStr(Hiword(MouseItem.s.MAC)) + ' ';
  7941.                 end;

  7942.                 //if Loword(MouseItem.S.MAC) > 0 then      //2008-3-3去掉鞋子的魔法恢复
  7943.                   //HintList.AddObject('魔法恢复: +' + IntToStr(Loword(MouseItem.S.MAC)), TObject(clWhite));
  7944.                 if MouseItem.s.AniCount * MouseItem.s.Weight > 0 then begin
  7945.                   HintList.AddObject('负重: +' + IntToStr(MouseItem.s.AniCount * MouseItem.s.Weight), TObject(clWhite));
  7946.                   line2 := line2 + '负重+' + IntToStr(MouseItem.s.AniCount * MouseItem.s.Weight) + ' ';
  7947.                 end;
  7948.               end;
  7949.             63: {//Charm} begin
  7950.                 if Loword(MouseItem.s.AC) > 0 then begin
  7951.                   HintList.AddObject('体力: +' + IntToStr(Loword(MouseItem.s.AC)), TObject(GetRGB(254)));
  7952.                   line2 := line2 + '体力+' + IntToStr(Loword(MouseItem.s.AC)) + ' ';
  7953.                 end;
  7954.                 if Hiword(MouseItem.s.AC) > 0 then begin
  7955.                   HintList.AddObject('魔法: +' + IntToStr(Hiword(MouseItem.s.AC)), TObject(GetRGB(254)));
  7956.                   line2 := line2 + '魔法+' + IntToStr(Hiword(MouseItem.s.AC)) + ' ';
  7957.                 end;
  7958.                 if Loword(MouseItem.s.MAC) > 0 then begin
  7959.                   HintList.AddObject('诅咒: +' + IntToStr(Loword(MouseItem.s.MAC)), TObject(GetRGB(254)));
  7960.                   line2 := line2 + '诅咒+' + IntToStr(Loword(MouseItem.s.MAC)) + ' ';
  7961.                 end;
  7962.                 if Hiword(MouseItem.s.MAC) > 0 then begin
  7963.                   HintList.AddObject('幸运: +' + IntToStr(Hiword(MouseItem.s.MAC)), TObject(GetRGB(254)));
  7964.                   line2 := line2 + '幸运+' + IntToStr(Hiword(MouseItem.s.MAC)) + ' ';
  7965.                 end;
  7966.               end;
  7967.           else begin
  7968.               if MouseItem.s.AC > 0 then begin
  7969.                 HintList.AddObject('防御: ' + IntToStr(Loword(MouseItem.s.AC)) + '-' + IntToStr(Hiword(MouseItem.s.AC)), TObject(clWhite));
  7970.                 line2 := line2 + '防御' + IntToStr(Loword(MouseItem.s.AC)) + '-' + IntToStr(Hiword(MouseItem.s.AC)) + ' ';
  7971.               end;
  7972.               if MouseItem.s.MAC > 0 then begin
  7973.                 HintList.AddObject('魔防: ' + IntToStr(Loword(MouseItem.s.MAC)) + '-' + IntToStr(Hiword(MouseItem.s.MAC)), TObject(clWhite));
  7974.                 line2 := line2 + '魔防' + IntToStr(Loword(MouseItem.s.MAC)) + '-' + IntToStr(Hiword(MouseItem.s.MAC)) + ' ';
  7975.               end;
  7976.             end;
  7977.           end;

  7978.           if MouseItem.s.DC > 0 then begin
  7979.             line2 := line2 + '攻击力' + IntToStr(Loword(MouseItem.s.DC)) + '-' + IntToStr(Hiword(MouseItem.s.DC)) + ' ';
  7980.             HintList.AddObject('攻击: ' + IntToStr(Loword(MouseItem.s.DC)) + '-' + IntToStr(Hiword(MouseItem.s.DC)), TObject(clWhite));
  7981.           end;
  7982.           if MouseItem.s.MC > 0 then begin
  7983.             line2 := line2 + '魔法' + IntToStr(Loword(MouseItem.s.MC)) + '-' + IntToStr(Hiword(MouseItem.s.MC)) + ' ';
  7984.             HintList.AddObject('魔法: ' + IntToStr(Loword(MouseItem.s.MC)) + '-' + IntToStr(Hiword(MouseItem.s.MC)), TObject(clWhite));
  7985.           end;
  7986.           if MouseItem.s.SC > 0 then begin
  7987.             line2 := line2 + '道术' + IntToStr(Loword(MouseItem.s.SC)) + '-' + IntToStr(Hiword(MouseItem.s.SC)) + ' ';
  7988.             HintList.AddObject('道术: ' + IntToStr(Loword(MouseItem.s.SC)) + '-' + IntToStr(Hiword(MouseItem.s.SC)), TObject(clWhite));
  7989.           end;
  7990.           if (MouseItem.s.Source <= -1) and (MouseItem.s.Source >= -50) then begin
  7991.             line2 := line2 + '神圣+' + IntToStr(-MouseItem.s.Source);
  7992.             HintList.AddObject('神圣: +' + IntToStr(-MouseItem.s.Source), TObject(GetRGB(254)));
  7993.           end;
  7994.           if (MouseItem.s.Source <= -51) and (MouseItem.s.Source >= -100) then begin
  7995.             line2 := line2 + '神圣-' + IntToStr(-MouseItem.s.Source - 50);
  7996.             HintList.AddObject('神圣: -' + IntToStr(-MouseItem.s.Source - 50), TObject(GetRGB(254)));
  7997.           end;

  7998.           GetAtomStr(MouseItem.s.AddValue);

  7999.           case MouseItem.s.Need of
  8000.             0: begin
  8001.                 if Actor.m_Abil.Level >= MouseItem.s.NeedLevel then
  8002.                   useable := True;
  8003.                 sTemp := '所需等级: ' + IntToStr(MouseItem.s.NeedLevel);
  8004.                 line3 := line3 + sTemp;
  8005.               end;
  8006.             1: begin
  8007.                 if Hiword(Actor.m_Abil.DC) >= MouseItem.s.NeedLevel then
  8008.                   useable := True;
  8009.                 sTemp := '需要攻击力: ' + IntToStr(MouseItem.s.NeedLevel);
  8010.                 line3 := line3 + sTemp;
  8011.               end;
  8012.             2: begin
  8013.                 if Hiword(Actor.m_Abil.MC) >= MouseItem.s.NeedLevel then
  8014.                   useable := True;
  8015.                 sTemp := '所需魔法值: ' + IntToStr(MouseItem.s.NeedLevel);
  8016.                 line3 := line3 + sTemp;
  8017.               end;
  8018.             3: begin
  8019.                 if Hiword(Actor.m_Abil.SC) >= MouseItem.s.NeedLevel then
  8020.                   useable := True;
  8021.                 sTemp := '所需道术: ' + IntToStr(MouseItem.s.NeedLevel);
  8022.                 line3 := line3 + sTemp;
  8023.               end;
  8024.             4: begin
  8025.                 useable := True;
  8026.                 sTemp := '所需转生等级: ' + IntToStr(MouseItem.s.NeedLevel);
  8027.                 line3 := line3 + sTemp;
  8028.               end;
  8029.             40: begin
  8030.                 useable := True;
  8031.                 sTemp := '所需转生&等级: ' + IntToStr(MouseItem.s.NeedLevel);
  8032.                 line3 := line3 + sTemp;
  8033.               end;
  8034.             41: begin
  8035.                 useable := True;
  8036.                 sTemp := '所需转生&攻击力: ' + IntToStr(MouseItem.s.NeedLevel);
  8037.                 line3 := line3 + sTemp;
  8038.               end;
  8039.             42: begin
  8040.                 useable := True;
  8041.                 sTemp := '所需转生&魔法力: ' + IntToStr(MouseItem.s.NeedLevel);
  8042.                 line3 := line3 + sTemp;
  8043.               end;
  8044.             43: begin
  8045.                 useable := True;
  8046.                 sTemp := '所需转生&道术: ' + IntToStr(MouseItem.s.NeedLevel);
  8047.                 line3 := line3 + sTemp;
  8048.               end;
  8049.             44: begin
  8050.                 useable := True;
  8051.                 sTemp := '所需转生&声望点: ' + IntToStr(MouseItem.s.NeedLevel);
  8052.                 line3 := line3 + sTemp;
  8053.               end;
  8054.             5: begin
  8055.                 useable := True;
  8056.                 sTemp := '所需声望点: ' + IntToStr(MouseItem.s.NeedLevel);
  8057.                 line3 := line3 + sTemp;
  8058.               end;
  8059.             6: begin
  8060.                 useable := True;
  8061.                 sTemp := '行会成员专用';
  8062.                 line3 := line3 + sTemp;
  8063.               end;
  8064.             60: begin
  8065.                 useable := True;
  8066.                 sTemp := '行会掌门专用';
  8067.                 line3 := line3 + sTemp;
  8068.               end;
  8069.             7: begin
  8070.                 useable := True;
  8071.                 sTemp := '沙城成员专用';
  8072.                 line3 := line3 + sTemp;
  8073.               end;
  8074.             70: begin
  8075.                 useable := True;
  8076.                 sTemp := '沙城城主专用';
  8077.                 line3 := line3 + sTemp;
  8078.               end;
  8079.             8: begin
  8080.                 useable := True;
  8081.                 sTemp := '会员专用';
  8082.                 line3 := line3 + sTemp;
  8083.               end;
  8084.             81: begin
  8085.                 useable := True;
  8086.                 sTemp := '会员类型: =' + IntToStr(Loword(MouseItem.s.NeedLevel)) + '会员等级: >=' + IntToStr(Hiword(MouseItem.s.NeedLevel));
  8087.                 line3 := line3 + sTemp;
  8088.               end;
  8089.             82: begin
  8090.                 useable := True;
  8091.                 sTemp := '会员类型: >=' + IntToStr(Loword(MouseItem.s.NeedLevel)) + '会员等级: >=' + IntToStr(Hiword(MouseItem.s.NeedLevel));
  8092.                 line3 := line3 + sTemp;
  8093.               end;
  8094.           end;
  8095.           if useable then begin
  8096.             HintList.AddObject(sTemp, TObject(clWhite));
  8097.           end else begin
  8098.             HintList.AddObject(sTemp, TObject(clRed));
  8099.           end;
  8100.         end;
  8101.       25: {//护身符及毒药} begin
  8102.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  8103.           case MouseItem.s.Shape of
  8104.             1, 2, 3, 4, 5, 6: begin
  8105.                 line2 := '数量 ' + GetDura100Str(MouseItem.Dura, MouseItem.DuraMax);
  8106.                 HintList.AddObject('数量: ' + GetDura100Str(MouseItem.Dura, MouseItem.DuraMax), TObject(GetRGB(254)));
  8107.               end;
  8108.             9: begin
  8109.                 line2 := Format('容量 %d/%d', [MouseItem.Dura, MouseItem.DuraMax]);
  8110.                 HintList.AddObject(Format('容量: %d/%d', [MouseItem.Dura, MouseItem.DuraMax]), TObject(GetRGB(254)));
  8111.               end;
  8112.           end;
  8113.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  8114.         end;
  8115.       (*30: {//照明物} begin
  8116.           HintList.AddObject('持久 : ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax), TObject(GETRGB(254)));
  8117.           HintList.AddObject('重量: ' + IntToStr(MouseItem.S.Weight), TObject(clWhite));
  8118.         end;*)
  8119.       40: {//肉} begin
  8120.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  8121.           if not g_MouseHeroItem.s.Shape in [13..16] then begin
  8122.             line1 := line1 + ' 品质' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax);
  8123.             HintList.AddObject('品质: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax), TObject(GetRGB(254)));
  8124.           end;
  8125.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  8126.         end;
  8127.       42: {//药材} begin
  8128.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight) + ' 距犁';
  8129.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  8130.           HintList.AddObject('距犁', TObject(GetRGB(254)));
  8131.         end;
  8132.       43: {//矿石} begin
  8133.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight) + ' 纯度' + IntToStr(Round(MouseItem.Dura / 1000));
  8134.           HintList.AddObject('纯度: ' + IntToStr(Round(MouseItem.Dura / 1000)), TObject(GetRGB(254)));
  8135.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  8136.         end;
  8137.       49: begin
  8138.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  8139.           line2 := Format('经验: %d/%d', [MouseItem.Dura * 10000, MouseItem.DuraMax * 10000]);
  8140.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  8141.           HintList.AddObject(Format('经验: %d/%d', [MouseItem.Dura * 10000, MouseItem.DuraMax * 10000]), TObject(GetRGB(254)));
  8142.           //dwExp := MouseItem.Dura * 10000;
  8143.           //dwMaxExp := MouseItem.DuraMax * 10000;
  8144.           //HintList.AddObject('经验: ' + IntToStr(dwExp) + '/' + IntToStr(dwMaxExp), TObject(GetRGB(254)));
  8145.         end; //
  8146.       31: begin
  8147.           if (MouseItem.s.AniCount <> 0) and (MouseItem.s.Shape = 1) then begin
  8148.             line2 := '使用 ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 次';
  8149.             HintList.AddObject('使用: ' + GetDuraStr(MouseItem.Dura, MouseItem.DuraMax) + ' 次', TObject(GetRGB(254)));
  8150.             {if MouseItem.s.AddValue[1] <> 0 then begin
  8151.               //line2 := '记忆传送: 地图:' + MouseItem.s.sDescr + ' 坐标:' + GetMoveXY(MouseItem.s.AddValue);
  8152.               //HintList.AddObject('记忆传送: 地图: ' + MouseItem.s.sDescr + ' 坐标:' + GetMoveXY(MouseItem.s.AddValue), TObject(GetRGB(254)));
  8153.               line2 := '坐标:' + GetMoveXY(MouseItem.s.AddValue);
  8154.               HintList.AddObject('坐标:' + GetMoveXY(MouseItem.s.AddValue), TObject(GetRGB(254)));
  8155.             end else begin
  8156.               HintList.AddObject('记忆传送: 未记忆', TObject(GetRGB(254)));
  8157.               line2 := '记忆传送: 未记忆';
  8158.             end;}
  8159.           end;
  8160.           line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  8161.           HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  8162.         end;
  8163.     else begin
  8164.         line1 := line1 + '重量.' + IntToStr(MouseItem.s.Weight);
  8165.         HintList.AddObject('重量: ' + IntToStr(MouseItem.s.Weight), TObject(clWhite));
  8166.       end;
  8167.     end;

  8168.     if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  8169.       if g_ServerConfig.boAllowItemAddPoint then begin
  8170.         if MouseItem.s.AddPoint[12] > 0 then HintList.AddObject('移动加速: ' + IntToStr(MouseItem.s.AddPoint[12]) + '%', TObject(GetRGB(68)));
  8171.         if MouseItem.s.AddPoint[13] > 0 then HintList.AddObject('攻击加速: ' + IntToStr(MouseItem.s.AddPoint[13]) + '%', TObject(GetRGB(68)));
  8172.       end;
  8173.     end;

  8174.     if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  8175.       if g_ServerConfig.boAllowItemAddPoint then begin
  8176.         case MouseItem.s.AddPoint[1] of
  8177.           1: HintList.AddObject('物理伤害减少: ' + IntToStr(MouseItem.s.AddPoint[2]) + '%', TObject(clFuchsia));
  8178.           2: HintList.AddObject('魔法伤害减少: ' + IntToStr(MouseItem.s.AddPoint[2]) + '%', TObject(clFuchsia));
  8179.           3: HintList.AddObject('忽视目标防御: ' + IntToStr(MouseItem.s.AddPoint[2]) + '%', TObject(clFuchsia));
  8180.           4: HintList.AddObject('所有伤害反射: ' + IntToStr(MouseItem.s.AddPoint[2]) + '%', TObject(clFuchsia));
  8181.           5: HintList.AddObject('增加攻击伤害: ' + IntToStr(MouseItem.s.AddPoint[2]) + '%', TObject(clFuchsia));
  8182.         end;
  8183.         if MouseItem.s.AddPoint[3] > 0 then HintList.AddObject('物理防御增强: ' + IntToStr(MouseItem.s.AddPoint[3]) + '%', TObject(GetRGB(180)));
  8184.         if MouseItem.s.AddPoint[4] > 0 then HintList.AddObject('魔法防御增强: ' + IntToStr(MouseItem.s.AddPoint[4]) + '%', TObject(GetRGB(180)));
  8185.         if MouseItem.s.AddPoint[5] > 0 then HintList.AddObject('物理攻击增强: ' + IntToStr(MouseItem.s.AddPoint[5]) + '%', TObject(GetRGB(180)));
  8186.         if MouseItem.s.AddPoint[6] > 0 then HintList.AddObject('魔法攻击增强: ' + IntToStr(MouseItem.s.AddPoint[6]) + '%', TObject(GetRGB(180)));
  8187.         if MouseItem.s.AddPoint[7] > 0 then HintList.AddObject('道术攻击增强: ' + IntToStr(MouseItem.s.AddPoint[7]) + '%', TObject(GetRGB(180)));
  8188.         if MouseItem.s.AddPoint[8] > 0 then HintList.AddObject('增加进入失明状态: ' + IntToStr(MouseItem.s.AddPoint[8]) + '%', TObject(GetRGB(180)));
  8189.         if MouseItem.s.AddPoint[9] > 0 then HintList.AddObject('增加进入混乱状态: ' + IntToStr(MouseItem.s.AddPoint[9]) + '%', TObject(GetRGB(180)));
  8190.         if MouseItem.s.AddPoint[10] > 0 then HintList.AddObject('减少进入失明状态: ' + IntToStr(MouseItem.s.AddPoint[10]) + '%', TObject(GetRGB(180)));
  8191.         if MouseItem.s.AddPoint[11] > 0 then HintList.AddObject('减少进入混乱状态: ' + IntToStr(MouseItem.s.AddPoint[11]) + '%', TObject(GetRGB(180)));
  8192.         //if MouseItem.s.AddPoint[12] > 0 then HintList.AddObject('移动加速: ' + IntToStr(MouseItem.s.AddPoint[12]) + '%', TObject(GetRGB(68)));
  8193.         //if MouseItem.s.AddPoint[13] > 0 then HintList.AddObject('攻击加速: ' + IntToStr(MouseItem.s.AddPoint[13]) + '%', TObject(GetRGB(68)));
  8194.       end;
  8195.       if g_ServerConfig.boAllowItemTime then begin
  8196.         if MouseItem.s.AddValue[0] = 1 then begin
  8197.           HintList.AddObject('到期时间: ' + DateToStr(MouseItem.s.MaxDate), TObject(clyellow));
  8198.         end else begin
  8199.           HintList.AddObject('到期时间: 永久使用', TObject(clyellow));
  8200.         end;

  8201.         {
  8202.         if MouseItem.s.sDescr <> '' then begin
  8203.           if (MouseItem.s.StdMode = 31) and (MouseItem.s.AniCount <> 0) and (MouseItem.s.Shape = 1) then Exit;
  8204.           nLine := 0;
  8205.           sTemp := '';
  8206.           sDescr := MouseItem.s.sDescr;
  8207.           while Pos('/', sDescr) > 0 do begin
  8208.             sDescr := GetValidStr3(sDescr, sTemp, ['/']);
  8209.             if nLine = 0 then begin
  8210.               HintList.AddObject('物品说明: ' + sTemp, TObject(clyellow));
  8211.               Inc(nLine);
  8212.             end else begin
  8213.               HintList.AddObject(sTemp, TObject(clyellow));
  8214.               Inc(nLine);
  8215.             end;
  8216.             sTemp := '';
  8217.           end;
  8218.           if sDescr <> '' then begin
  8219.             if nLine = 0 then begin
  8220.               HintList.AddObject('物品说明: ' + sDescr, TObject(clyellow));
  8221.               Inc(nLine);
  8222.             end else begin
  8223.               HintList.AddObject(sDescr, TObject(clyellow));
  8224.               Inc(nLine);
  8225.             end;
  8226.           end;
  8227.         end;
  8228.         }
  8229.       end;
  8230.     end;
  8231.     g_ExtractStringList.Clear;

  8232.     {if (MouseItem.s.StdMode = 31) and
  8233.       (MouseItem.s.AniCount <> 0) and
  8234.       (MouseItem.s.Shape = 1) then Exit; }

  8235.     sItemDesc := GetItemDesc(MouseItem.S.Name);
  8236.     if (sItemDesc <> '') then begin
  8237.       if Pos('\', sItemDesc) > 0 then begin
  8238.         ExtractStrings(['\'], [' '], PChar(sItemDesc), g_ExtractStringList);
  8239.         if g_ExtractStringList.Count > 0 then begin
  8240.           HintList.AddObject(g_ExtractStringList.Strings[0], TObject(clWhite)); //  TObject(clyellow));//
  8241.         end;
  8242.         for I := 1 to g_ExtractStringList.Count - 1 do begin
  8243.           HintList.AddObject(g_ExtractStringList.Strings[I], TObject(clWhite));
  8244.         end;
  8245.       end else begin
  8246.         g_ExtractStringList.Add(sItemDesc);
  8247.           //HintList.AddObject(sItemDesc, TObject(clyellow));
  8248.         HintList.AddObject(sItemDesc, TObject(clWhite));
  8249.       end;
  8250.     end;
  8251.   end;
  8252. end;

  8253. procedure TFrmDlg.DItemBagDirectPaint(Sender: TObject;
  8254.   dsurface: TTexture);
  8255. var
  8256.   d0, d1, d2, d3: string;
  8257.   I, n, nX, nY: Integer;
  8258.   useable: Boolean;
  8259.   d: TTexture;
  8260. begin
  8261.   if g_MySelf = nil then Exit;
  8262.   with DItemBag do begin
  8263.     d := nil;
  8264.     if WLib <> nil then
  8265.       d := WLib.Images[FaceIndex];
  8266.     if d <> nil then
  8267.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  8268.     if (g_ServerConfig.btShowClientItemStyle <> 0) then begin
  8269.       GetMouseItemInfo(g_MySelf, @g_MouseItem, d0, d1, d2, d3, useable);
  8270.       with dsurface do begin
  8271.         //nX := SurfaceX(Left + 71);

  8272.       //TextOut (SurfaceX(Left+64), SurfaceY(Top+185), GetGoldStr(g_MySelf.m_nGold));
  8273.         TextOut(SurfaceX(Left + 71), SurfaceY(Top + 212), GetGoldStr(g_MySelf.m_nGold));
  8274.       //盛大物品栏
  8275.         if d0 <> '' then begin
  8276.           n := TextWidth(d0);
  8277.           nX := SurfaceX(Left + 77);
  8278.           nY := SurfaceY(Top + 243);

  8279.           TextOut(nX, nY, d0, clyellow);
  8280.           TextOut(nX + n, nY, d1);
  8281.           TextOut(nX, nY + 14, d2);
  8282.           if not useable then
  8283.             TextOut(nX, nY + 14 * 2, d3, clRed)
  8284.           else
  8285.             TextOut(nX, nY + 14 * 2, d3);

  8286.           if d2 <> '' then
  8287.             nY := nY + 14;
  8288.           if d3 <> '' then
  8289.             nY := nY + 14;

  8290.           nY := nY + 14;
  8291.           for I := 0 to g_ExtractStringList.Count - 1 do begin
  8292.             TextOut(nX, nY + 14 * I, g_ExtractStringList.Strings[I]);
  8293.           end;

  8294.         end else begin
  8295.           TextOut(SurfaceX(Left + 71), SurfaceY(Top + 212), GetGoldStr(g_MySelf.m_nGold));
  8296.           TextOut(SurfaceX(Left + 77), SurfaceY(Top + 243), '左键双击可以装备');
  8297.           TextOut(SurfaceX(Left + 77), SurfaceY(Top + 243 + 14), 'ALT + R 键刷新包裹');
  8298.         end;
  8299.       end;
  8300.     end else begin
  8301.       with dsurface do begin
  8302.         TextOut(SurfaceX(Left + 71), SurfaceY(Top + 212), GetGoldStr(g_MySelf.m_nGold));
  8303.         TextOut(SurfaceX(Left + 77), SurfaceY(Top + 243), '左键双击可以装备');
  8304.         TextOut(SurfaceX(Left + 77), SurfaceY(Top + 243 + 14), 'ALT + R 键刷新包裹');
  8305.       end;
  8306.     end;
  8307.   end;
  8308. end;

  8309. procedure TFrmDlg.DCloseBagDirectPaint(Sender: TObject;
  8310.   dsurface: TTexture);
  8311. var
  8312.   d: TTexture;
  8313. begin
  8314.   with Sender as TDButton do begin
  8315.     if Downed then begin
  8316.       d := nil;
  8317.       if WLib <> nil then
  8318.         d := WLib.Images[FaceIndex];
  8319.       if d <> nil then
  8320.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  8321.         //DrawBlend(dsurface, SurfaceX(Left), SurfaceY(Top), d, 2);
  8322.     end;
  8323.   end;
  8324. end;

  8325. procedure TFrmDlg.DCloseBagClick(Sender: TObject; X, Y: Integer);
  8326. begin
  8327.   DItemBag.Visible := False;
  8328. end;

  8329. procedure TFrmDlg.DItemGridGridMouseMove(Sender: TObject; ACol,
  8330.   ARow: Integer; Shift: TShiftState);
  8331. var
  8332.   nIdx: Integer;
  8333.   temp: TClientItem;
  8334.   iname, d1, d2, d3: string;
  8335.   useable: Boolean;
  8336.   hcolor: TColor;
  8337.   nWhere: Integer;
  8338.   boShowMsg: Boolean;
  8339.   List: TStringList;
  8340. begin
  8341.   DScreen.ClearHint;
  8342.   boShowMsg := False;
  8343.   if ssRight in Shift then begin
  8344.     if g_boItemMoving then
  8345.       DItemGridGridSelect(Self, ACol, ARow, Shift);
  8346.   end else begin
  8347.     nIdx := ACol + ARow * DItemGrid.ColCount + 6;
  8348.     if nIdx in [6..MAXBAGITEM - 1] then begin
  8349.       g_MoveRect := DItemGrid.ClientRect;
  8350.       g_MoveRect.Right := g_MoveRect.Right - 2;
  8351.       g_MoveRect.Top := g_MoveRect.Top + 2;
  8352.       g_MouseItem := g_ItemArr[nIdx];
  8353.       if (g_MouseItem.s.Name <> '') then begin
  8354.         if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  8355.           nWhere := GetHumUseItemByBagItem(g_MouseItem.s.StdMode);
  8356.           if g_Config.boCompareItem and (nWhere >= 0) then begin

  8357.             List := TStringList.Create;
  8358.             try
  8359.               GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  8360.               List.AddStrings(HintList);

  8361.               GetMouseItemInfo(g_MySelf, @g_UseItems[nWhere], iname, d1, d2, d3, useable);
  8362.               if HintList.Count > 0 then begin
  8363.                 HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  8364.               end;
  8365.               with DItemGrid do
  8366.                 DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  8367.                   SurfaceY(Top + (ARow + 1) * RowHeight),
  8368.                   List, HintList, False);
  8369.               HintList.Clear;
  8370.             finally
  8371.               List.Free;
  8372.             end;
  8373.             g_MouseItem.s.Name := '';
  8374.           end else begin
  8375.             GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  8376.             with DItemGrid do
  8377.               DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  8378.                 SurfaceY(Top + (ARow + 1) * RowHeight),
  8379.                 HintList, False);
  8380.           end;
  8381.         end;
  8382.       end;
  8383.     end else begin
  8384.       ClearMoveRect();
  8385.       g_MouseItem.s.Name := '';
  8386.     end;
  8387.   end;
  8388. end;

  8389. procedure TFrmDlg.DItemGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  8390.   Shift: TShiftState);

  8391. var
  8392.   Idx, mi: Integer;
  8393.   temp: TClientItem;
  8394.   where: Integer;
  8395.   flag: Boolean;
  8396.   sData, sData1, sData2: string;
  8397. begin
  8398.   Idx := ACol + ARow * DItemGrid.ColCount + 6;
  8399.   if Idx in [6..MAXBAGITEM - 1] then begin
  8400.     if not g_boItemMoving then begin
  8401.       ClearMoveRect();
  8402.       {if (ssRight in Shift) then Showmessage('ssRight in Shift');
  8403.       if (ssShift in Shift) then Showmessage('ssShift in Shift');
  8404.       if (ssAlt in Shift) then Showmessage('ssAlt in Shift');
  8405.       if (ssCtrl in Shift) then Showmessage('ssCtrl in Shift');
  8406.       if (ssLeft in Shift) then Showmessage('ssLeft in Shift');}
  8407.       if (ssCtrl in Shift) then begin
  8408.         if g_ItemArr[Idx].s.Name <> '' then begin
  8409.           if not EdChat.Visible then begin
  8410.             SetInputVisible(g_ConfigClient.btMainInterface = 1);
  8411.             EdChat.Visible := True;
  8412.             EdChat.SetFocus;
  8413.           end;
  8414.           if EdChat.SelStart = Length(EdChat.Text) then begin
  8415.             EdChat.Text := EdChat.Text + '<0|' + g_MySelf.m_sUserName + '|' + g_ItemArr[Idx].s.Name + '|' + IntToStr(g_ItemArr[Idx].MakeIndex) + '|' + IntToStr(g_ItemArr[Idx].s.looks) + '>';
  8416.             EdChat.SelStart := Length(EdChat.Text);
  8417.           end else begin
  8418.             sData := Copy(EdChat.Text, 1, EdChat.SelStart);
  8419.             sData1 := Copy(EdChat.Text, EdChat.SelStart + 1, Length(EdChat.Text) - EdChat.SelStart);
  8420.             sData2 := '<0|' + g_MySelf.m_sUserName + '|' + g_ItemArr[Idx].s.Name + '|' + IntToStr(g_ItemArr[Idx].MakeIndex) + '|' + IntToStr(g_ItemArr[Idx].s.looks) + '>';
  8421.             EdChat.Text := sData + sData2 + sData1;
  8422.             EdChat.SelStart := Length(EdChat.Text) - Length(WideString(sData1));
  8423.           end;
  8424.           EdChat.SelLength := 0;
  8425.         end;
  8426.         Exit;
  8427.       end;

  8428.       if g_ItemArr[Idx].s.Name <> '' then begin
  8429.         g_dwMoveItemTick := GetTickCount;
  8430.         g_boItemMoving := True;
  8431.         g_MovingItem.Index := Idx;
  8432.         g_MovingItem.Item := g_ItemArr[Idx];
  8433.         g_MovingItem.Owner := DItemBag;
  8434.         g_ItemArr[Idx].s.Name := '';
  8435.       end;
  8436.       if g_boItemMoving and (g_MovingItem.Owner = DItemBag) and (g_WaitingUseItem.Item.s.Name = '') then begin
  8437.        { if mbRight = Button then begin //右键穿装备
  8438.           flag := False;
  8439.           where := GetTakeOnPosition(g_MovingItem.Item.s.StdMode);
  8440.           if g_MovingItem.Index >= 0 then begin
  8441.             case where of
  8442.               U_DRESS: begin
  8443.                   if g_MySelf.m_btSex = 0 then
  8444.                     if g_MovingItem.Item.s.StdMode <> 10 then
  8445.                       Exit;
  8446.                   if g_MySelf.m_btSex = 1 then
  8447.                     if g_MovingItem.Item.s.StdMode <> 11 then
  8448.                       Exit;
  8449.                   flag := True;
  8450.                 end;
  8451.               U_WEAPON: flag := True;
  8452.               U_NECKLACE: flag := True;
  8453.               U_RIGHTHAND: flag := True;
  8454.               U_HELMET: flag := True;
  8455.               U_RINGR, U_RINGL: flag := True;
  8456.               U_ARMRINGR, U_ARMRINGL: flag := True;
  8457.               U_BUJUK: flag := True;
  8458.               U_BELT: flag := True;
  8459.               U_BOOTS: flag := True;
  8460.               U_CHARM: flag := True;
  8461.             end;
  8462.             if flag then begin
  8463.               if where in [U_RINGR, U_RINGL] then begin
  8464.                 if g_UseItems[U_RINGR].s.Name = '' then where := U_RINGR;
  8465.                 if g_UseItems[U_RINGL].s.Name = '' then where := U_RINGL;
  8466.                 if (g_UseItems[U_RINGR].s.Name <> '') and (g_UseItems[U_RINGL].s.Name <> '') then begin
  8467.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_RINGR].s.Name then where := U_RINGR;
  8468.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_RINGL].s.Name then where := U_RINGL;
  8469.                 end;
  8470.               end;

  8471.               if where in [U_ARMRINGR, U_ARMRINGL] then begin
  8472.                 if g_UseItems[U_ARMRINGR].s.Name = '' then where := U_ARMRINGR;
  8473.                 if g_UseItems[U_ARMRINGL].s.Name = '' then where := U_ARMRINGL;
  8474.                 if (g_UseItems[U_ARMRINGR].s.Name <> '') and (g_UseItems[U_ARMRINGL].s.Name <> '') then begin
  8475.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_ARMRINGR].s.Name then where := U_ARMRINGR;
  8476.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_ARMRINGL].s.Name then where := U_ARMRINGL;
  8477.                 end;
  8478.               end;

  8479.               g_WaitingUseItem := g_MovingItem;
  8480.               g_WaitingUseItem.Index := where;
  8481.               frmMain.SendTakeOnItem(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  8482.               g_MovingItem.Item.s.Name := '';
  8483.               g_MovingItem.Owner := nil;
  8484.               g_boItemMoving := False;
  8485.             end else begin
  8486.               g_ItemArr[idx] := g_MovingItem.Item;
  8487.               g_MovingItem.Item.s.Name := '';
  8488.               g_MovingItem.Owner := nil;
  8489.               g_boItemMoving := False;
  8490.             end;
  8491.           end;
  8492.         end else begin }
  8493.         ItemClickSound(g_ItemArr[Idx].s);
  8494.        // end;
  8495.       end;
  8496.     end else begin

  8497.       mi := g_MovingItem.Index;
  8498.       if (mi = -97) or (mi = -98) then Exit;
  8499.       if (mi < 0) and (mi >= -13 {-9}) and ((g_MovingItem.Owner = DStateWin) or (g_MovingItem.Owner = DHeroStateWin)) then begin //-99:
  8500.         if g_MovingItem.Owner = DStateWin then begin
  8501.           frmMain.SendTakeOffItem(-(g_MovingItem.Index + 1), g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  8502.         end else
  8503.           if g_MovingItem.Owner = DHeroStateWin then begin
  8504.           frmMain.SendTakeOffItemToMasterBag(-(g_MovingItem.Index + 1), g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  8505.         end;
  8506.         g_WaitingUseItem := g_MovingItem;
  8507.         g_MovingItem.Item.s.Name := '';
  8508.         g_boItemMoving := False;
  8509.         g_MovingItem.Owner := nil;
  8510.         ArrangeItemBag;
  8511.         Exit;
  8512.       end;
  8513.       if (mi <= -20) and (mi > -30) then
  8514.         DealItemReturnBag(g_MovingItem.Item);

  8515.       if (mi <= -30) and (mi > -40) then
  8516.         DuelItemReturnBag(g_MovingItem.Item);

  8517.       if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DDealDlg) or (g_MovingItem.Owner = DUpgrade) or (g_MovingItem.Owner = DStoreDlg) then begin
  8518.         if (g_ItemArr[Idx].s.Name <> '') then begin
  8519.           temp := g_ItemArr[Idx];
  8520.           g_ItemArr[Idx] := g_MovingItem.Item;
  8521.           g_MovingItem.Index := Idx;
  8522.           g_MovingItem.Item := temp;
  8523.           g_MovingItem.Owner := DItemBag;
  8524.         end else begin
  8525.           g_ItemArr[Idx] := g_MovingItem.Item;
  8526.           g_MovingItem.Item.s.Name := '';
  8527.           g_boItemMoving := False;
  8528.           g_MovingItem.Owner := nil;
  8529.         end;
  8530.         ArrangeItemBag;
  8531.         Exit;
  8532.       end;
  8533.       if (g_MovingItem.Owner = DHeroStateWin) or (g_MovingItem.Owner = DHeroItemBag) then begin
  8534.         if g_MovingItem.Owner = DHeroStateWin then begin
  8535.           frmMain.SendTakeOffItemToMasterBag(-(g_MovingItem.Index + 1), g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  8536.         end else
  8537.           if g_MovingItem.Owner = DHeroItemBag then begin
  8538.           frmMain.SendItemToMasterBag((g_MovingItem.Index), g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  8539.         end;
  8540.         g_WaitingUseItem := g_MovingItem;
  8541.         g_MovingItem.Item.s.Name := '';
  8542.         g_boItemMoving := False;
  8543.         g_MovingItem.Owner := nil;
  8544.       end;
  8545.     end;
  8546.   end;
  8547.   ArrangeItemBag;
  8548. end;

  8549. procedure TFrmDlg.DItemGridDblClick(Sender: TObject);
  8550. var
  8551.   Idx, I: Integer;
  8552.   keyvalue: TKeyBoardState;
  8553.   cu: TClientItem;
  8554.   where: Integer;
  8555.   flag: Boolean;
  8556. begin
  8557.   Idx := DItemGrid.Col + DItemGrid.Row * DItemGrid.ColCount + 6;
  8558.   if Idx in [6..MAXBAGITEM - 1] then begin
  8559.     if g_ItemArr[Idx].s.Name <> '' then begin
  8560.       FillChar(keyvalue, SizeOf(TKeyBoardState), #0);
  8561.       GetKeyboardState(keyvalue);
  8562.       if keyvalue[VK_CONTROL] = $80 then begin
  8563.         cu := g_ItemArr[Idx];
  8564.         g_ItemArr[Idx].s.Name := '';
  8565.         AddItemBag(cu);
  8566.       end else
  8567.         if (g_ItemArr[Idx].s.StdMode <= 4) or (g_ItemArr[Idx].s.StdMode = 31) or ((g_ItemArr[Idx].s.StdMode = 49) {and (g_ItemArr[idx].Dura >= g_ItemArr[idx].DuraMax)}) then begin
  8568.         frmMain.EatItem(Idx);
  8569.       end else begin
  8570.         if (g_WaitingUseItem.Item.s.Name = '') then begin
  8571.           flag := False;
  8572.           where := GetTakeOnPosition(g_ItemArr[Idx].s.StdMode);
  8573.           case where of
  8574.             U_DRESS: begin
  8575.                 if g_MySelf.m_btSex = 0 then
  8576.                   if g_ItemArr[Idx].s.StdMode = 10 then
  8577.                     flag := True;
  8578.                 if g_MySelf.m_btSex = 1 then
  8579.                   if g_ItemArr[Idx].s.StdMode = 11 then
  8580.                     flag := True;
  8581.               end;
  8582.             U_WEAPON: flag := True;
  8583.             U_NECKLACE: flag := True;
  8584.             U_RIGHTHAND: flag := True;
  8585.             U_HELMET: flag := True;
  8586.             U_RINGR, U_RINGL: flag := True;
  8587.             U_ARMRINGR, U_ARMRINGL: flag := True;
  8588.             U_BUJUK: flag := True;
  8589.             U_BELT: flag := True;
  8590.             U_BOOTS: flag := True;
  8591.             U_CHARM: flag := True;
  8592.           end;
  8593.           if flag then begin
  8594.             if where in [U_RINGR, U_RINGL] then begin
  8595.               if g_UseItems[U_RINGR].s.Name = '' then where := U_RINGR;
  8596.               if g_UseItems[U_RINGL].s.Name = '' then where := U_RINGL;
  8597.               if (g_UseItems[U_RINGR].s.Name <> '') and (g_UseItems[U_RINGL].s.Name <> '') then begin
  8598.                 if g_ItemArr[Idx].s.Name <> g_UseItems[U_RINGR].s.Name then where := U_RINGR;
  8599.                 if g_ItemArr[Idx].s.Name <> g_UseItems[U_RINGL].s.Name then where := U_RINGL;
  8600.               end;
  8601.             end;

  8602.             if where in [U_ARMRINGR, U_ARMRINGL] then begin
  8603.               if g_UseItems[U_ARMRINGR].s.Name = '' then where := U_ARMRINGR;
  8604.               if g_UseItems[U_ARMRINGL].s.Name = '' then where := U_ARMRINGL;
  8605.               if (g_UseItems[U_ARMRINGR].s.Name <> '') and (g_UseItems[U_ARMRINGL].s.Name <> '') then begin
  8606.                 if g_ItemArr[Idx].s.Name <> g_UseItems[U_ARMRINGR].s.Name then where := U_ARMRINGR;
  8607.                 if g_ItemArr[Idx].s.Name <> g_UseItems[U_ARMRINGL].s.Name then where := U_ARMRINGL;
  8608.               end;
  8609.             end;
  8610.             g_WaitingUseItem.Index := where;
  8611.             g_WaitingUseItem.Item := g_ItemArr[Idx];
  8612.             g_ItemArr[Idx].s.Name := '';
  8613.             frmMain.SendTakeOnItem(where, g_WaitingUseItem.Item.MakeIndex, g_WaitingUseItem.Item.s.Name);
  8614.           end;
  8615.         end;
  8616.         {if not g_boItemMoving then begin
  8617.           if g_ItemArr[idx].S.Name <> '' then begin
  8618.             g_btItemMoving := 2;
  8619.             g_boItemMoving := True;
  8620.             g_MovingItem.Index := idx;
  8621.             g_MovingItem.Item := g_ItemArr[idx];
  8622.             g_ItemArr[idx].S.Name := '';
  8623.             ItemClickSound(g_ItemArr[idx].S);
  8624.           end;
  8625.         end; }
  8626.       end;
  8627.     end else begin
  8628.       if g_boItemMoving and (g_MovingItem.Item.s.Name <> '') then begin
  8629.         FillChar(keyvalue, SizeOf(TKeyBoardState), #0);
  8630.         GetKeyboardState(keyvalue);
  8631.         if keyvalue[VK_CONTROL] = $80 then begin
  8632.           cu := g_MovingItem.Item;
  8633.           g_MovingItem.Item.s.Name := '';
  8634.           g_boItemMoving := False;
  8635.           AddItemBag(cu);
  8636.         end else
  8637.           if (g_MovingItem.Index = Idx) and
  8638.           (g_MovingItem.Item.s.StdMode <= 4) or (g_ItemArr[Idx].s.StdMode = 31) or ((g_ItemArr[Idx].s.StdMode = 49) { and (g_ItemArr[idx].Dura >= g_ItemArr[idx].DuraMax)}) then begin
  8639.           frmMain.EatItem(-1);
  8640.         end else
  8641.           if (g_WaitingUseItem.Item.s.Name = '') then begin
  8642.           if g_MovingItem.Index >= 0 then begin
  8643.             flag := False;
  8644.             where := GetTakeOnPosition(g_MovingItem.Item.s.StdMode);
  8645.             case where of
  8646.               U_DRESS: begin
  8647.                   if g_MySelf.m_btSex = 0 then
  8648.                     if g_MovingItem.Item.s.StdMode = 10 then
  8649.                       flag := True;
  8650.                   if g_MySelf.m_btSex = 1 then
  8651.                     if g_MovingItem.Item.s.StdMode = 11 then
  8652.                       flag := True;
  8653.                 end;
  8654.               U_WEAPON: flag := True;
  8655.               U_NECKLACE: flag := True;
  8656.               U_RIGHTHAND: flag := True;
  8657.               U_HELMET: flag := True;
  8658.               U_RINGR, U_RINGL: flag := True;
  8659.               U_ARMRINGR, U_ARMRINGL: flag := True;
  8660.               U_BUJUK: flag := True;
  8661.               U_BELT: flag := True;
  8662.               U_BOOTS: flag := True;
  8663.               U_CHARM: flag := True;
  8664.             end;

  8665.             if flag then begin
  8666.               if where in [U_RINGR, U_RINGL] then begin
  8667.                 if g_UseItems[U_RINGR].s.Name = '' then where := U_RINGR;
  8668.                 if g_UseItems[U_RINGL].s.Name = '' then where := U_RINGL;
  8669.                 if (g_UseItems[U_RINGR].s.Name <> '') and (g_UseItems[U_RINGL].s.Name <> '') then begin
  8670.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_RINGR].s.Name then where := U_RINGR;
  8671.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_RINGL].s.Name then where := U_RINGL;
  8672.                 end;
  8673.               end;

  8674.               if where in [U_ARMRINGR, U_ARMRINGL] then begin
  8675.                 if g_UseItems[U_ARMRINGR].s.Name = '' then where := U_ARMRINGR;
  8676.                 if g_UseItems[U_ARMRINGL].s.Name = '' then where := U_ARMRINGL;
  8677.                 if (g_UseItems[U_ARMRINGR].s.Name <> '') and (g_UseItems[U_ARMRINGL].s.Name <> '') then begin
  8678.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_ARMRINGR].s.Name then where := U_ARMRINGR;
  8679.                   if g_MovingItem.Item.s.Name <> g_UseItems[U_ARMRINGL].s.Name then where := U_ARMRINGL;
  8680.                 end;
  8681.               end;

  8682.               g_WaitingUseItem := g_MovingItem;
  8683.               g_WaitingUseItem.Index := where;
  8684.               frmMain.SendTakeOnItem(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  8685.               g_MovingItem.Item.s.Name := '';
  8686.               g_MovingItem.Owner := nil;
  8687.               g_boItemMoving := False;
  8688.             end;
  8689.           end;
  8690.         end;
  8691.       end;
  8692.     end;
  8693.   end;
  8694. end;

  8695. procedure TFrmDlg.DItemGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  8696.   Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  8697. var
  8698.   nIdx: Integer;
  8699.   d: TTexture;
  8700. begin
  8701.   nIdx := ACol + ARow * DItemGrid.ColCount + 6;
  8702.   if nIdx in [6..MAXBAGITEM - 1] then begin
  8703.     if g_ItemArr[nIdx].s.Name <> '' then begin
  8704.       d := g_WBagItemImages.Images[g_ItemArr[nIdx].s.looks];

  8705.       if d <> nil then
  8706.         with DItemGrid do begin
  8707.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  8708.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  8709.             d.ClientRect,
  8710.             d, True);
  8711.         end;

  8712.       with DItemGrid do begin
  8713.         if (g_ItemArr[nIdx].s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_ItemArr[nIdx].s.AddPoint))} then begin
  8714.           if GetTickCount - g_DrawItemArr[nIdx].dwDrawTick >= 200 then begin
  8715.             g_DrawItemArr[nIdx].dwDrawTick := GetTickCount;
  8716.             if g_DrawItemArr[nIdx].nIndex <= 0 then g_DrawItemArr[nIdx].nIndex := 260 - 1;
  8717.             Inc(g_DrawItemArr[nIdx].nIndex);
  8718.             if g_DrawItemArr[nIdx].nIndex > 265 then g_DrawItemArr[nIdx].nIndex := 260;
  8719.           end;

  8720.           d := g_WMain2Images.Images[g_DrawItemArr[nIdx].nIndex];
  8721.           if d <> nil then begin
  8722.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  8723.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  8724.           end;
  8725.         end;

  8726.         if g_ItemArr[nIdx].s.AddValue[12] >= 2 then begin
  8727.           if GetTickCount - g_DrawItemArr_[nIdx].dwDrawTick >= 200 then begin
  8728.             g_DrawItemArr_[nIdx].dwDrawTick := GetTickCount;
  8729.             if g_DrawItemArr_[nIdx].nIndex <= 0 then g_DrawItemArr_[nIdx].nIndex := 600 - 1;
  8730.             Inc(g_DrawItemArr_[nIdx].nIndex);
  8731.             if g_DrawItemArr_[nIdx].nIndex > 617 then g_DrawItemArr_[nIdx].nIndex := 600;
  8732.           end;

  8733.           d := g_WMain3Images.Images[g_DrawItemArr_[nIdx].nIndex];
  8734.           if d <> nil then begin
  8735.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  8736.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  8737.           end;
  8738.         end;
  8739.       end;
  8740.     end;
  8741.   end;
  8742. end;

  8743. procedure TFrmDlg.DGoldClick(Sender: TObject; X, Y: Integer);
  8744. begin
  8745.   if g_MySelf = nil then Exit;
  8746.   if not g_boItemMoving then begin
  8747.     if g_MySelf.m_nGold > 0 then begin
  8748.       PlaySound(s_money);
  8749.       g_boItemMoving := True;
  8750.       g_MovingItem.Index := -98; //捣
  8751.       g_MovingItem.Item.s.Name := g_sGoldName {'金币'};
  8752.     end;
  8753.   end else begin
  8754.     if (g_MovingItem.Index = -97) or (g_MovingItem.Index = -98) then begin //捣父..
  8755.       g_boItemMoving := False;
  8756.       g_MovingItem.Item.s.Name := '';
  8757.       if g_MovingItem.Index = -97 then begin //背券芒俊辑 颗
  8758.         DealZeroGold;
  8759.       end;
  8760.     end;
  8761.   end;
  8762. end;






  8763. {------------------------------------------------------------------------}

  8764. //惑牢 措拳 芒

  8765. {------------------------------------------------------------------------}

  8766. procedure TFrmDlg.DNpcLabelMouseMove(Sender: TObject;
  8767.   Shift: TShiftState; X, Y: Integer);
  8768. var
  8769.   NpcLabel: TNpcLabel;
  8770. begin
  8771.   if Sender is TNpcLabel then begin
  8772.     NpcLabel := TNpcLabel(Sender);
  8773.     with NpcLabel do
  8774.       DScreen.ShowHintA(SurfaceX(Left + Width), SurfaceY(Top) + 16, Hint, clInfoText, True);
  8775.   end;
  8776. end;

  8777. procedure TFrmDlg.GetMerchantSayLabel(sData: string; nRecogID: Integer);
  8778.   function CreateLabel(nX, nY, nRecogID: Integer; FColor: TColor; sData: string; boClick: Boolean): TNpcLabel;
  8779.   var
  8780.     NpcLabel: TNpcLabel;
  8781.   begin
  8782.     NpcLabel := TNpcLabel.Create(Self);
  8783.     NpcLabel.Font.Assign(frmMain.Font);
  8784.     //NpcLabel.Parent := DMerchantDlg;
  8785.     //NpcLabel.Name := 'Label';
  8786.    { if Pos('|', sData) > 0 then begin
  8787.       NpcLabel.Caption := Copy(sData, 1, Pos('|', sData) - 1);
  8788.       NpcLabel.Hint := Copy(sData, Pos('|', sData) + 1, Length(sData));
  8789.       NpcLabel.OnMouseMove := DNpcLabelMouseMove;
  8790.     end else begin
  8791.       NpcLabel.Caption := sData;
  8792.     end; }
  8793.     NpcLabel.Caption := sData;
  8794.     NpcLabel.Left := nX;
  8795.     NpcLabel.Top := nY;
  8796.     NpcLabel.UpColor := FColor;
  8797.     NpcLabel.HotColor := FColor;
  8798.     NpcLabel.DownColor := FColor;
  8799.   //NPCLabel.Font.Size := 10;
  8800.     NpcLabel.m_nRecogId := nRecogID;
  8801.     if DMerchantBigDlg.Visible then
  8802.       NpcLabel.DParent := DMerchantBigDlg //DMerchantDlg;
  8803.     else
  8804.       NpcLabel.DParent := DMerchantDlg;
  8805.     {NpcLabel.Canvas.Font.Assign(DMerchantDlg.Canvas.Font);
  8806.     NpcLabel.Canvas.Brush.Assign(DMerchantDlg.Canvas.Brush);}
  8807.     NpcLabel.OnClick := nil;

  8808.     if boClick then begin
  8809.       NpcLabel.OnClick := NpcLabelClick;
  8810.       NpcLabel.Cursor := crHandPoint;
  8811.       NpcLabel.HotColor := GetRGB(69); //clPurple;//clGreen;//clBlue;//clRed; //clAqua;//clFuchsia;
  8812.       NpcLabel.DownColor := clLime;
  8813.     end;
  8814.     NpcLabel.EnableFocus := False;
  8815.     Result := NpcLabel;
  8816.   end;

  8817. var
  8818.   Str, data, fdata, cmdstr, cmdmsg, cmdparam: string;
  8819.   lx, ly, sx: Integer;
  8820.   drawcenter: Boolean;
  8821.   nLength: Integer;
  8822.   btColor: Byte;
  8823.   UseColor: TColor;
  8824.   sColor: string;
  8825.   sNPCName: string;
  8826.   TempList: TStringList;
  8827.   I: Integer;
  8828.   NpcLabel: TNpcLabel;
  8829.   NpcLabelCmd: TNpcLabel;
  8830.   nPos: Integer;
  8831.   nAddY: Integer;
  8832.   sHintString: string;
  8833. begin
  8834.   //DebugOutStr('TFrmDlg.GetMerchantSayLabel:'+INTTOSTR(gettickcount - dwtick));

  8835.   TempList := TStringList.Create;
  8836.   try
  8837.     Str := sData;
  8838.   //Str := GetValidStr3(Str, sNPCName, ['/']);
  8839.     UseColor := clRed;

  8840.     lx := 30;
  8841.     ly := 20;

  8842.     drawcenter := False;

  8843.     NpcLabel := nil;
  8844.     NpcLabelCmd := nil;
  8845.     while True do begin
  8846.       if Str = '' then Break;
  8847.       Str := GetValidStr3(Str, data, ['\']);
  8848.       if data <> '' then begin
  8849.         sx := 0;
  8850.         fdata := '';
  8851.         while (Pos('<', data) > 0) and (Pos('>', data) > 0) and (data <> '') do begin
  8852.           if data[1] <> '<' then begin
  8853.             data := '<' + GetValidStr3(data, fdata, ['<']);
  8854.           end;
  8855.           data := ArrestStringEx(data, '<', '>', cmdstr);
  8856.           if cmdstr <> '' then begin
  8857.             cmdparam := GetValidStr3(cmdstr, cmdstr, ['/']); //cmdparam :
  8858.           end else begin
  8859.             Continue;
  8860.           end;
  8861.           if fdata <> '' then begin
  8862.             NpcLabel := CreateLabel(lx + sx, ly, MerchantFace, clWhite, fdata, False);
  8863.             sx := sx + ImageCanvas.TextWidth(fdata);
  8864.           end;
  8865.           if (Length(cmdparam) > 0) and (cmdparam[1] <> '@') then begin
  8866.             nLength := CompareText(cmdparam, 'FCOLOR=');
  8867.             if (nLength > 0) and (Length(cmdparam) > Length('FCOLOR=')) then begin
  8868.               sColor := Copy(cmdparam, Length('FCOLOR=') + 1, nLength);
  8869.               btColor := Str_ToInt(sColor, 100);
  8870.               UseColor := GetRGB(btColor);
  8871.               cmdparam := '';
  8872.             end else
  8873.               nLength := CompareText(cmdparam, 'AUTOCOLOR='); //2007-2-28 Mars增加自动变色NPC字体
  8874.             if (nLength >= 0) and (Length(cmdparam) >= Length('AUTOCOLOR=')) then begin
  8875.               sColor := Copy(cmdparam, Length('AUTOCOLOR=') + 1, nLength);
  8876.               if Pos(',', sColor) > 0 then begin
  8877.                 TempList.Clear;
  8878.                 ExtractStrings([','], [], PChar(sColor), TempList);
  8879.               end;
  8880.               cmdparam := '';
  8881.             end else begin

  8882.             end;
  8883.           end;
  8884.           if (Length(cmdparam) > 0) and (cmdparam[1] = '@') then begin

  8885.             if Pos('|', cmdstr) > 0 then begin
  8886.               sHintString := Copy(cmdstr, Pos('|', cmdstr) + 1, Length(cmdstr));
  8887.               cmdstr := Copy(cmdstr, 1, Pos('|', cmdstr) - 1);

  8888.               if Pos('|', sHintString) > 0 then
  8889.                 for I := 1 to Length(sHintString) - 1 do begin
  8890.                   if sHintString[I] = '|' then sHintString[I] := '\';
  8891.                 end;
  8892.       //NpcLabel.OnMouseMove := DNpcLabelMouseMove;
  8893.             end else begin
  8894.               sHintString := ''
  8895.             end;

  8896.             NpcLabelCmd := CreateLabel(lx + sx, ly, MerchantFace, clyellow, cmdstr, True);
  8897.             NpcLabelCmd.Font.Style := NpcLabelCmd.Font.Style + [fsUnderline];
  8898.             if sHintString <> '' then begin
  8899.               NpcLabelCmd.OnMouseMove := DNpcLabelMouseMove;
  8900.               NpcLabelCmd.Hint := sHintString;
  8901.             end;
  8902.           end else begin
  8903.             if Pos('|', cmdstr) > 0 then begin
  8904.               sHintString := Copy(cmdstr, Pos('|', cmdstr) + 1, Length(cmdstr));
  8905.               cmdstr := Copy(cmdstr, 1, Pos('|', cmdstr) - 1);
  8906.               if Pos('|', sHintString) > 0 then
  8907.                 for I := 1 to Length(sHintString) - 1 do begin
  8908.                   if sHintString[I] = '|' then sHintString[I] := '\';
  8909.                 end;
  8910.       //NpcLabel.OnMouseMove := DNpcLabelMouseMove;
  8911.             end else begin
  8912.               sHintString := ''
  8913.             end;
  8914.             NpcLabelCmd := CreateLabel(lx + sx, ly, MerchantFace, UseColor, cmdstr, False);
  8915.             if sHintString <> '' then begin
  8916.               NpcLabelCmd.OnMouseMove := DNpcLabelMouseMove;
  8917.               NpcLabelCmd.Hint := sHintString;
  8918.             end;
  8919.             if TempList.Count > 0 then begin
  8920.               for I := 0 to TempList.Count - 1 do begin
  8921.                 NpcLabelCmd.AddColor(Str_ToInt(TempList.Strings[I], 100));
  8922.               end;
  8923.               TempList.Clear;
  8924.             end;
  8925.           end;
  8926.           sx := sx + ImageCanvas.TextWidth(cmdstr);
  8927.           NpcLabelCmd.Text := cmdparam;
  8928.         end; // while (Pos('<', data) > 0)
  8929.         if data <> '' then begin
  8930.           NpcLabel := CreateLabel(lx + sx, ly, MerchantFace, clWhite, data, False);
  8931.         end;
  8932.         Inc(ly, 16);
  8933.       end else Inc(ly, 16);
  8934.     end;
  8935.   finally
  8936.     TempList.Free;
  8937.   end;
  8938. end;

  8939. procedure TFrmDlg.ShowMDlg(face: Integer; mname, msgstr: string);
  8940. var
  8941.   I: Integer;
  8942.   c: TControl;
  8943. begin
  8944.   for I := DMerchantDlg.DControls.Count - 1 downto 0 do begin
  8945.     c := TControl(DMerchantDlg.DControls.Items[I]);
  8946.     if (c is TDLabel) or (c is TNpcLabel) then begin
  8947.       c.Free;
  8948.     end;
  8949.   end;

  8950.   for I := DMerchantBigDlg.DControls.Count - 1 downto 0 do begin
  8951.     c := TControl(DMerchantBigDlg.DControls.Items[I]);
  8952.     if (c is TDLabel) or (c is TNpcLabel) then begin
  8953.       c.Free;
  8954.     end;
  8955.   end;

  8956.   GetMerchantSayLabel(msgstr, g_nCurMerchant);

  8957.   DMerchantDlg.Left := 0;
  8958.   DMerchantDlg.Top := 0;

  8959.   DMerchantBigDlg.Left := 0;
  8960.   DMerchantBigDlg.Top := 0;

  8961.   MerchantFace := face;
  8962.   MerchantName := mname;
  8963.   MDlgStr := msgstr;
  8964.   DItemBag.Left := 475;
  8965.   DItemBag.Top := 80;

  8966.   if not DMerchantBigDlg.Visible then begin
  8967.     DMerchantDlg.Floating := True;
  8968.     try
  8969.       DMerchantDlg.Visible := True;
  8970.     finally
  8971.       DMerchantDlg.Floating := False;
  8972.     end;
  8973.   end;

  8974.   RequireAddPoints := True;
  8975.   LastestClickTime := GetTickCount;
  8976. end;

  8977. procedure TFrmDlg.ResetMenuDlg;
  8978. var
  8979.   I: Integer;
  8980. begin
  8981.   CloseDSellDlg;
  8982.   for I := 0 to g_MenuItemList.Count - 1 do
  8983.     Dispose(pTClientItem(g_MenuItemList[I]));
  8984.   g_MenuItemList.Clear;

  8985.   for I := 0 to MenuList.Count - 1 do
  8986.     Dispose(PTClientGoods(MenuList[I]));
  8987.   MenuList.Clear;

  8988.   //CurDetailItem := '';
  8989.   menuindex := -1;
  8990.   MenuTopLine := 0;
  8991.   BoDetailMenu := False;
  8992.   BoStorageMenu := False;
  8993.   BoMakeDrugMenu := False;

  8994.   DSellDlg.Visible := False;
  8995.   DMenuDlg.Visible := False;
  8996.   if EdChat.Visible then EdChat.SetFocus;
  8997. end;

  8998. procedure TFrmDlg.ShowShopMenuDlg;
  8999. begin
  9000.   menuindex := -1;

  9001.   if DMerchantBigDlg.Visible then begin
  9002.     DMerchantBigDlg.Left := 0;
  9003.     DMerchantBigDlg.Top := 0;
  9004.     DMerchantBigDlg.Floating := True;
  9005.     try
  9006.       DMerchantBigDlg.Visible := True;
  9007.     finally
  9008.       DMerchantBigDlg.Floating := False;
  9009.     end;
  9010.   end else begin
  9011.     DMerchantDlg.Left := 0;
  9012.     DMerchantDlg.Top := 0;
  9013.     DMerchantDlg.Floating := True;
  9014.     try
  9015.       DMerchantDlg.Visible := True;
  9016.     finally
  9017.       DMerchantDlg.Floating := False;
  9018.     end;
  9019.   end;
  9020.   DSellDlg.Visible := False;

  9021.   if DMerchantBigDlg.Visible then begin
  9022.     DMenuDlg.Top := 347;
  9023.   end else begin
  9024.     DMenuDlg.Top := 176;
  9025.   end;

  9026.   DMenuDlg.Left := 0;
  9027.   //DMenuDlg.Top := 176;
  9028.   DMenuDlg.Visible := True;
  9029.   MenuTop := 0;

  9030.   if DMerchantBigDlg.Visible then begin
  9031.     DItemBag.Left := 568;
  9032.   end else begin
  9033.     DItemBag.Left := 475;
  9034.   end;
  9035.   DItemBag.Top := 80;
  9036.   DItemBag.Visible := True;

  9037.   LastestClickTime := GetTickCount;
  9038. end;

  9039. procedure TFrmDlg.ShowShopSellDlg;
  9040. begin
  9041.   if DMerchantBigDlg.Visible then begin
  9042.     DSellDlg.Left := DMerchantBigDlg.Width - DSellDlg.Width;
  9043.     DSellDlg.Top := 347;
  9044.   end else begin
  9045.     DSellDlg.Left := 260;
  9046.     DSellDlg.Top := 176;
  9047.   end;
  9048.   DSellDlg.Visible := True;

  9049.   DMenuDlg.Visible := False;

  9050.   if DMerchantBigDlg.Visible then begin
  9051.     DItemBag.Left := 568;
  9052.   end else begin
  9053.     DItemBag.Left := 475;
  9054.   end;
  9055.   DItemBag.Top := 80;
  9056.   DItemBag.Visible := True;

  9057.   LastestClickTime := GetTickCount;
  9058.   g_sSellPriceStr := '';
  9059. end;

  9060. procedure TFrmDlg.CloseMDlg;
  9061. var
  9062.   I: Integer;
  9063. begin
  9064.   MDlgStr := '';
  9065.   DMerchantDlg.Visible := False;
  9066.   for I := 0 to MDlgPoints.Count - 1 do
  9067.     Dispose(pTClickPoint(MDlgPoints[I]));
  9068.   MDlgPoints.Clear;

  9069.   DItemBag.Left := 0;
  9070.   DItemBag.Top := 80;
  9071.   DMenuDlg.Visible := False;
  9072.   CloseDSellDlg;
  9073. end;

  9074. procedure TFrmDlg.CloseBigMDlg;
  9075. var
  9076.   I: Integer;
  9077. begin
  9078.   g_nCurMerchantFaceIdx := -1;
  9079.   MDlgStr := '';
  9080.   DMerchantBigDlg.Visible := False;
  9081.   for I := 0 to MDlgPoints.Count - 1 do
  9082.     Dispose(pTClickPoint(MDlgPoints[I]));
  9083.   MDlgPoints.Clear;

  9084.   DItemBag.Left := 0;
  9085.   DItemBag.Top := 80;
  9086.   DMenuDlg.Visible := False;
  9087.   CloseDSellDlg;
  9088. end;

  9089. procedure TFrmDlg.CloseDSellDlg;
  9090. begin
  9091.   DSellDlg.Visible := False;
  9092.   if g_SellDlgItem.s.Name <> '' then
  9093.     AddItemBag(g_SellDlgItem);
  9094.   g_SellDlgItem.s.Name := '';
  9095. end;

  9096. procedure TFrmDlg.DMerchantDlgDirectPaint(Sender: TObject;
  9097.   dsurface: TTexture);
  9098. var
  9099.   d: TTexture;
  9100. begin
  9101.   with Sender as TDWindow do begin
  9102.     d := nil;
  9103.     if WLib <> nil then
  9104.       d := WLib.Images[FaceIndex];
  9105.     if d <> nil then begin
  9106.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9107.       if (Sender = DMerchantBigDlg) and (g_nCurMerchantFaceIdx >= 0) then begin
  9108.         d := g_WNpcFaceImages.Images[g_nCurMerchantFaceIdx];
  9109.         if d <> nil then
  9110.           dsurface.Draw(SurfaceX(Left + Width - d.Width - 26), SurfaceY(Top + 8), d.ClientRect, d, True);
  9111.       end;
  9112.     end;
  9113.   end;
  9114. end;

  9115. procedure TFrmDlg.DMerchantDlgCloseClick(Sender: TObject; X, Y: Integer);
  9116. begin
  9117.   CloseMDlg;
  9118. end;

  9119. procedure TFrmDlg.DMenuDlgDirectPaint(Sender: TObject;
  9120.   dsurface: TTexture);
  9121.   function sx(X: Integer): Integer;
  9122.   begin
  9123.     Result := DMenuDlg.SurfaceX(DMenuDlg.Left + X);
  9124.   end;
  9125.   function sY(Y: Integer): Integer;
  9126.   begin
  9127.     Result := DMenuDlg.SurfaceY(DMenuDlg.Top + Y);
  9128.   end;
  9129. var
  9130.   I, lh, k, m, menuline: Integer;
  9131.   d: TTexture;
  9132.   pg: PTClientGoods;
  9133.   Str: string;
  9134.   c: TColor;
  9135. begin
  9136.   with dsurface do begin
  9137.     with DMenuDlg do begin
  9138.       d := nil;
  9139.       if DMenuDlg.WLib <> nil then
  9140.         d := DMenuDlg.WLib.Images[FaceIndex];
  9141.       if d <> nil then
  9142.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9143.     end;

  9144.     if not BoStorageMenu then begin
  9145.       TextOut(sx(19), sY(11), '物品列表');
  9146.       TextOut(sx(156), sY(11), '费用');
  9147.       TextOut(sx(245), sY(11), '持久.');
  9148.       lh := LISTLINEHEIGHT;
  9149.       menuline := _MIN(MAXMENU, MenuList.Count - MenuTop);
  9150.       //惑前 府胶飘
  9151.       for I := MenuTop to MenuTop + menuline - 1 do begin
  9152.         m := I - MenuTop;
  9153.         if I = menuindex then begin
  9154.           c := clRed;
  9155.           TextOut(sx(12), sY(32 + m * lh), Char(7), c);
  9156.         end else c := clWhite;
  9157.         pg := PTClientGoods(MenuList[I]);
  9158.         TextOut(sx(19), sY(32 + m * lh), pg.Name, c);
  9159.         if pg.SubMenu >= 1 then
  9160.           TextOut(sx(137), sY(32 + m * lh), #31, c);
  9161.         TextOut(sx(156), sY(32 + m * lh), IntToStr(pg.Price) + ' ' + g_sGoldName {金币'}, c);
  9162.         Str := '';
  9163.         if pg.Grade = -1 then Str := '-'
  9164.         else TextOut(sx(245), sY(32 + m * lh), IntToStr(pg.Grade), c);
  9165.         {else for k:=0 to pg.Grade-1 do
  9166.            str := str + '*';
  9167.         if Length(str) >= 4 then begin
  9168.            Font.Color := clYellow;
  9169.            TextOut (SX(245), SY(32 + m*lh), str);
  9170.         end else
  9171.            TextOut (SX(245), SY(32 + m*lh), str);}
  9172.       end;
  9173.     end else begin
  9174.       TextOut(sx(19), sY(11), '物品列表');
  9175.       TextOut(sx(156), sY(11), '持久');
  9176.       TextOut(sx(245), sY(11), '');
  9177.       lh := LISTLINEHEIGHT;
  9178.       menuline := _MIN(MAXMENU, MenuList.Count - MenuTop);
  9179.       //惑前 府胶飘
  9180.       for I := MenuTop to MenuTop + menuline - 1 do begin
  9181.         m := I - MenuTop;
  9182.         if I = menuindex then begin
  9183.           c := clRed;
  9184.           TextOut(sx(12), sY(32 + m * lh), Char(7), c);
  9185.         end else c := clWhite;
  9186.         pg := PTClientGoods(MenuList[I]);
  9187.         TextOut(sx(19), sY(32 + m * lh), pg.Name, c);
  9188.         if pg.SubMenu >= 1 then
  9189.           TextOut(sx(137), sY(32 + m * lh), #31, c);
  9190.         TextOut(sx(156), sY(32 + m * lh), IntToStr(pg.Stock) + '/' + IntToStr(pg.Grade), c);
  9191.       end;
  9192.     end;
  9193.   end;
  9194. end;

  9195. procedure TFrmDlg.DMenuDlgClick(Sender: TObject; X, Y: Integer);
  9196. var
  9197.   lx, ly, Idx: Integer;
  9198.   iname, d1, d2, d3: string;
  9199.   useable: Boolean;
  9200. begin
  9201.   DScreen.ClearHint;
  9202.   lx := DMenuDlg.LocalX(X) - DMenuDlg.Left;
  9203.   ly := DMenuDlg.LocalY(Y) - DMenuDlg.Top;
  9204.   if (lx >= 14) and (lx <= 279) and (ly >= 32) then begin
  9205.     Idx := (ly - 32) div LISTLINEHEIGHT + MenuTop;
  9206.     if Idx < MenuList.Count then begin
  9207.       PlaySound(s_glass_button_click);
  9208.       menuindex := Idx;
  9209.     end;
  9210.   end;

  9211.   if BoStorageMenu then begin
  9212.     if (menuindex >= 0) and (menuindex < g_SaveItemList.Count) then begin
  9213.       g_MouseItem := pTClientItem(g_SaveItemList[menuindex])^;
  9214.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  9215.       if HintList.Count > 0 then begin
  9216.         lx := 240;
  9217.         ly := 32 + (menuindex - MenuTop) * LISTLINEHEIGHT;
  9218.         with Sender as TDButton do
  9219.           DScreen.ShowHint(DMenuDlg.SurfaceX(Left + lx),
  9220.             DMenuDlg.SurfaceY(Top + ly),
  9221.             HintList, False);
  9222.       end;
  9223.       g_MouseItem.s.Name := '';
  9224.     end;
  9225.   end else begin
  9226.     if (menuindex >= 0) and (menuindex < g_MenuItemList.Count) and (PTClientGoods(MenuList[menuindex]).SubMenu = 0) then begin
  9227.       g_MouseItem := pTClientItem(g_MenuItemList[menuindex])^;
  9228.       BoNoDisplayMaxDura := True;
  9229.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  9230.       BoNoDisplayMaxDura := False;
  9231.       if HintList.Count > 0 then begin
  9232.         lx := 240;
  9233.         ly := 32 + (menuindex - MenuTop) * LISTLINEHEIGHT;
  9234.         with Sender as TDButton do
  9235.           DScreen.ShowHint(DMenuDlg.SurfaceX(Left + lx),
  9236.             DMenuDlg.SurfaceY(Top + ly),
  9237.             HintList, False);
  9238.       end;
  9239.       g_MouseItem.s.Name := '';
  9240.     end;
  9241.   end;
  9242. end;

  9243. procedure TFrmDlg.DMenuDlgMouseMove(Sender: TObject; Shift: TShiftState; X,
  9244.   Y: Integer);
  9245. begin
  9246.   with DMenuDlg do
  9247.     if (X < SurfaceX(Left + 10)) or (X > SurfaceX(Left + Width - 20)) or (Y < SurfaceY(Top + 30)) or (Y > SurfaceY(Top + Height - 50)) then begin
  9248.       DScreen.ClearHint;
  9249.     end;
  9250. end;

  9251. procedure TFrmDlg.DMenuBuyClick(Sender: TObject; X, Y: Integer);
  9252. var
  9253.   pg: PTClientGoods;
  9254. begin
  9255.   if GetTickCount < LastestClickTime then Exit; //努腐阑 磊林 给窍霸 力茄
  9256.   if (menuindex >= 0) and (menuindex < MenuList.Count) then begin
  9257.     pg := PTClientGoods(MenuList[menuindex]);
  9258.     LastestClickTime := GetTickCount + 5000;
  9259.     if pg.SubMenu > 0 then begin
  9260.       frmMain.SendGetDetailItem(g_nCurMerchant, 0, pg.Name);
  9261.       MenuTopLine := 0;
  9262.       CurDetailItem := pg.Name;
  9263.     end else begin
  9264.       if BoStorageMenu then begin
  9265.         frmMain.SendTakeBackStorageItem(g_nCurMerchant, pg.Price {MakeIndex}, pg.Name);
  9266.         Exit;
  9267.       end;
  9268.       if BoMakeDrugMenu then begin
  9269.         frmMain.SendMakeDrugItem(g_nCurMerchant, pg.Name);
  9270.         Exit;
  9271.       end;
  9272.       frmMain.SendBuyItem(g_nCurMerchant, pg.Stock, pg.Name)
  9273.     end;
  9274.   end;
  9275. end;

  9276. procedure TFrmDlg.DMenuPrevClick(Sender: TObject; X, Y: Integer);
  9277. begin
  9278.   if not BoDetailMenu then begin
  9279.     if MenuTop > 0 then Dec(MenuTop, MAXMENU - 1);
  9280.     if MenuTop < 0 then MenuTop := 0;
  9281.   end else begin
  9282.     if MenuTopLine > 0 then begin
  9283.       MenuTopLine := _MAX(0, MenuTopLine - 10);
  9284.       frmMain.SendGetDetailItem(g_nCurMerchant, MenuTopLine, CurDetailItem);
  9285.     end;
  9286.   end;
  9287. end;

  9288. procedure TFrmDlg.DMenuNextClick(Sender: TObject; X, Y: Integer);
  9289. begin
  9290.   if not BoDetailMenu then begin
  9291.     if MenuTop + MAXMENU < MenuList.Count then Inc(MenuTop, MAXMENU - 1);
  9292.   end else begin
  9293.     MenuTopLine := MenuTopLine + 10;
  9294.     frmMain.SendGetDetailItem(g_nCurMerchant, MenuTopLine, CurDetailItem);
  9295.   end;
  9296. end;

  9297. procedure TFrmDlg.SoldOutGoods(itemserverindex: Integer);
  9298. var
  9299.   I: Integer;
  9300.   pg: PTClientGoods;
  9301. begin
  9302.   for I := 0 to MenuList.Count - 1 do begin
  9303.     pg := PTClientGoods(MenuList[I]);
  9304.     if (pg.Grade >= 0) and (pg.Stock = itemserverindex) then begin
  9305.       Dispose(pg);
  9306.       MenuList.Delete(I);
  9307.       if I < g_MenuItemList.Count then g_MenuItemList.Delete(I);
  9308.       if menuindex > MenuList.Count - 1 then menuindex := MenuList.Count - 1;
  9309.       Break;
  9310.     end;
  9311.   end;
  9312. end;

  9313. procedure TFrmDlg.DelStorageItem(itemserverindex: Integer);
  9314. var
  9315.   I: Integer;
  9316.   pg: PTClientGoods;
  9317. begin
  9318.   for I := 0 to MenuList.Count - 1 do begin
  9319.     pg := PTClientGoods(MenuList[I]);
  9320.     if (pg.Price = itemserverindex) then begin //焊包格废牢版款 Price = ItemServerIndex烙.
  9321.       Dispose(pg);
  9322.       MenuList.Delete(I);
  9323.       if I < g_SaveItemList.Count then g_SaveItemList.Delete(I);
  9324.       if menuindex > MenuList.Count - 1 then menuindex := MenuList.Count - 1;
  9325.       Break;
  9326.     end;
  9327.   end;
  9328. end;

  9329. procedure TFrmDlg.DMenuCloseClick(Sender: TObject; X, Y: Integer);
  9330. begin
  9331.   DMenuDlg.Visible := False;
  9332. end;

  9333. procedure TFrmDlg.DMerchantDlgMouseUp(Sender: TObject;
  9334.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  9335. begin
  9336.   SelectMenuStr := '';
  9337. end;

  9338. procedure TFrmDlg.DSellDlgDirectPaint(Sender: TObject;
  9339.   dsurface: TTexture);
  9340. var
  9341.   d: TTexture;
  9342.   actionname: string;
  9343. begin
  9344.   with DSellDlg do begin
  9345.     d := nil;
  9346.     if DMenuDlg.WLib <> nil then
  9347.       d := DMenuDlg.WLib.Images[FaceIndex];
  9348.     if d <> nil then
  9349.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  9350.     with dsurface do begin
  9351.       actionname := '';
  9352.       case SpotDlgMode of
  9353.         dmSell: actionname := '出售: ';
  9354.         dmRepair: actionname := '修理: ';
  9355.         dmStorage: actionname := ' 保管物品';
  9356.         dmSellOff: actionname := '寄售物品: ';
  9357.         dmChange: actionname := '修改物品: ';
  9358.       end;
  9359.       if SpotDlgMode = dmSellOff then begin
  9360.         TextOut(SurfaceX(Left + 8), SurfaceY(Top + 6), actionname + g_sSellPriceStr + ' ' + g_sGameGoldName);
  9361.       end else begin
  9362.         TextOut(SurfaceX(Left + 8), SurfaceY(Top + 6), actionname + g_sSellPriceStr);
  9363.       end;
  9364.     end;
  9365.   end;
  9366. end;

  9367. procedure TFrmDlg.DSellDlgCloseClick(Sender: TObject; X, Y: Integer);
  9368. begin
  9369.   CloseDSellDlg;
  9370. end;

  9371. procedure TFrmDlg.DSellDlgSpotClick(Sender: TObject; X, Y: Integer);
  9372. var
  9373.   temp: TClientItem;
  9374.   sSellPriceStr: string;
  9375. begin
  9376.   g_sSellPriceStr := '';
  9377.   if not g_boItemMoving then begin
  9378.     if g_SellDlgItem.s.Name <> '' then begin
  9379.       ItemClickSound(g_SellDlgItem.s);
  9380.       g_boItemMoving := True;
  9381.       g_MovingItem.Index := -99; //sell
  9382.       g_MovingItem.Item := g_SellDlgItem;
  9383.       g_SellDlgItem.s.Name := '';
  9384.     end;
  9385.   end else begin
  9386.     if (g_MovingItem.Owner = DHeroItemBag) or (g_MovingItem.Owner = DHeroStateWin) then Exit;
  9387.     if (g_MovingItem.Index = -97) or (g_MovingItem.Index = -98) then Exit;
  9388.     if (g_MovingItem.Index >= 0) or (g_MovingItem.Index = -99) then begin
  9389.       ItemClickSound(g_MovingItem.Item.s);
  9390.       if g_SellDlgItem.s.Name <> '' then begin
  9391.         temp := g_SellDlgItem;
  9392.         g_SellDlgItem := g_MovingItem.Item;
  9393.         g_MovingItem.Index := -99; //sell
  9394.         g_MovingItem.Item := temp;
  9395.         if SpotDlgMode = dmChange then begin
  9396.           g_sSellPriceStr := g_SellDlgItem.s.Name;
  9397.           frmMain.SendChangeItem(g_nCurMerchant, g_SellDlgItem.MakeIndex, g_SellDlgItem.s.Name);
  9398.         end;
  9399.       end else begin
  9400.         g_SellDlgItem := g_MovingItem.Item;
  9401.         g_MovingItem.Item.s.Name := '';
  9402.         g_boItemMoving := False;
  9403.         if SpotDlgMode = dmSellOff then begin
  9404.           DMessageDlg('输入出售价格:', [mbOk, mbAbort]);
  9405.           g_sSellPriceStr := IntToStr(Str_ToInt(Trim(DlgEditText), -1));
  9406.           {if StrToInt(g_sSellPriceStr) < 0 then begin
  9407.             g_MovingItem.Item := g_SellDlgItem;
  9408.             g_SellDlgItem.S.Name := '';
  9409.             g_boItemMoving := True;
  9410.           end; }
  9411.         end else
  9412.           if SpotDlgMode = dmChange then begin
  9413.           g_sSellPriceStr := g_SellDlgItem.s.Name;
  9414.           frmMain.SendChangeItem(g_nCurMerchant, g_SellDlgItem.MakeIndex, g_SellDlgItem.s.Name);
  9415.         end;
  9416.       end;
  9417.       g_boQueryPrice := True;
  9418.       g_dwQueryPriceTime := GetTickCount;
  9419.     end;
  9420.   end;

  9421. end;

  9422. procedure TFrmDlg.DSellDlgSpotDirectPaint(Sender: TObject;
  9423.   dsurface: TTexture);
  9424. var
  9425.   d: TTexture;
  9426. begin
  9427.   if g_SellDlgItem.s.Name <> '' then begin
  9428.     d := g_WBagItemImages.Images[g_SellDlgItem.s.looks];
  9429.     if d <> nil then
  9430.       with DSellDlgSpot do
  9431.         dsurface.Draw(SurfaceX(Left + (Width - d.Width) div 2),
  9432.           SurfaceY(Top + (Height - d.Height) div 2),
  9433.           d.ClientRect,
  9434.           d, True);
  9435.   end;
  9436. end;

  9437. procedure TFrmDlg.DSellDlgSpotMouseMove(Sender: TObject;
  9438.   Shift: TShiftState; X, Y: Integer);
  9439. var
  9440.   iname, d1, d2, d3: string;
  9441.   useable: Boolean;
  9442. begin
  9443.   g_MouseItem := g_SellDlgItem;
  9444.   if g_MouseItem.s.Name <> '' then begin
  9445.     GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  9446.     if HintList.Count > 0 then begin
  9447.       with DSellDlgSpot do
  9448.         DScreen.ShowHint(SurfaceX(Left),
  9449.           SurfaceY(Top),
  9450.           HintList, False);
  9451.     end;
  9452.   end;
  9453. end;

  9454. procedure TFrmDlg.DSellDlgOkClick(Sender: TObject; X, Y: Integer);
  9455. begin
  9456.   if (g_SellDlgItem.s.Name = '') and (g_SellDlgItemSellWait.s.Name = '') then Exit;
  9457.   if GetTickCount < LastestClickTime then Exit;
  9458.   case SpotDlgMode of
  9459.     dmSell: frmMain.SendSellItem(g_nCurMerchant, g_SellDlgItem.MakeIndex, g_SellDlgItem.s.Name);
  9460.     dmRepair: frmMain.SendRepairItem(g_nCurMerchant, g_SellDlgItem.MakeIndex, g_SellDlgItem.s.Name);
  9461.     dmStorage: frmMain.SendStorageItem(g_nCurMerchant, g_SellDlgItem.MakeIndex, g_SellDlgItem.s.Name);
  9462.     dmSellOff: begin
  9463.         if StrToInt(g_sSellPriceStr) < 0 then Exit;
  9464.         frmMain.SendSellOffItem(g_nCurMerchant, g_SellDlgItem.MakeIndex, g_sSellPriceStr + '/' + g_SellDlgItem.s.Name);
  9465.       end;
  9466.     dmChange: frmMain.SendChangeItem(g_nCurMerchant, g_SellDlgItem.MakeIndex, g_SellDlgItem.s.Name);
  9467.   end;
  9468.   if SpotDlgMode <> dmChange then begin //DSellDlg.Visible := False;
  9469.     g_SellDlgItemSellWait := g_SellDlgItem;
  9470.     g_SellDlgItem.s.Name := '';
  9471.     g_sSellPriceStr := '';
  9472.   end;
  9473.   LastestClickTime := GetTickCount + 5000;
  9474. end;





  9475. {------------------------------------------------------------------------}

  9476. //魔法 虐 汲沥 芒 (促捞倔 肺弊)

  9477. {------------------------------------------------------------------------}


  9478. procedure TFrmDlg.SetMagicKeyDlg(icon: Integer; magname: string; var curkey: Word);
  9479. begin
  9480.   MagKeyIcon := icon;
  9481.   MagKeyMagName := magname;
  9482.   MagKeyCurKey := curkey;


  9483.   DKeySelDlg.Left := (SCREENWIDTH - DKeySelDlg.Width) div 2;
  9484.   DKeySelDlg.Top := (SCREENHEIGHT - DKeySelDlg.Height) div 2;
  9485.   HideAllControls;
  9486.   DKeySelDlg.ShowModal;

  9487.   while True do begin
  9488.     if not DKeySelDlg.Visible then Break;
  9489.     //FrmMain.DXTimerTimer (self, 0);
  9490.     frmMain.ProcOnIdle;
  9491.     Application.ProcessMessages;
  9492.     if Application.Terminated then Exit;
  9493.     Sleep(1);
  9494.   end;

  9495.   RestoreHideControls;
  9496.   curkey := MagKeyCurKey;
  9497. end;

  9498. procedure TFrmDlg.DKeySelDlgDirectPaint(Sender: TObject;
  9499.   dsurface: TTexture);
  9500. var
  9501.   d: TTexture;
  9502. begin
  9503.   with DKeySelDlg do begin
  9504.     d := nil;
  9505.     if WLib <> nil then
  9506.       d := WLib.Images[FaceIndex];
  9507.     if d <> nil then
  9508.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9509.     //魔法快捷键
  9510.     with dsurface do begin
  9511.       TextOut(SurfaceX(Left + 95), SurfaceY(Top + 38), MagKeyMagName + ' 快捷键', clSilver);
  9512.     end;
  9513.   end;
  9514. end;

  9515. procedure TFrmDlg.DKsIconDirectPaint(Sender: TObject;
  9516.   dsurface: TTexture);
  9517. var
  9518.   d: TTexture;
  9519. begin
  9520.   with DKsIcon do begin
  9521.     d := g_WMagIconImages.Images[MagKeyIcon];
  9522.     if d <> nil then
  9523.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9524.   end;
  9525. end;

  9526. procedure TFrmDlg.DKsF1DirectPaint(Sender: TObject;
  9527.   dsurface: TTexture);
  9528. var
  9529.   b: TDButton;
  9530.   d: TTexture;
  9531. begin
  9532.   b := nil;
  9533.   case MagKeyCurKey of
  9534.     Word('1'): b := DKsF1;
  9535.     Word('2'): b := DKsF2;
  9536.     Word('3'): b := DKsF3;
  9537.     Word('4'): b := DKsF4;
  9538.     Word('5'): b := DKsF5;
  9539.     Word('6'): b := DKsF6;
  9540.     Word('7'): b := DKsF7;
  9541.     Word('8'): b := DKsF8;
  9542.     Word('E'): b := DKsConF1;
  9543.     Word('F'): b := DKsConF2;
  9544.     Word('G'): b := DKsConF3;
  9545.     Word('H'): b := DKsConF4;
  9546.     Word('I'): b := DKsConF5;
  9547.     Word('J'): b := DKsConF6;
  9548.     Word('K'): b := DKsConF7;
  9549.     Word('L'): b := DKsConF8;
  9550.   else b := DKsNone;
  9551.   end;
  9552.   {case MagKeyCurKey of
  9553.     Word('1'): b := DKsF1;
  9554.     Word('2'): b := DKsF2;
  9555.     Word('3'): b := DKsF3;
  9556.     Word('4'): b := DKsF4;
  9557.     Word('5'): b := DKsF5;
  9558.     Word('6'): b := DKsF6;
  9559.     Word('7'): b := DKsF7;
  9560.     Word('8'): b := DKsF8;
  9561.   else b := DKsNone;
  9562.   end;}
  9563.   if b = Sender then begin
  9564.     with b do begin
  9565.       d := nil;
  9566.       if WLib <> nil then
  9567.         d := WLib.Images[FaceIndex + 1];
  9568.       if d <> nil then
  9569.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9570.     end;
  9571.   end;
  9572.   with Sender as TDButton do begin
  9573.     if Downed then begin
  9574.       d := nil;
  9575.       if WLib <> nil then
  9576.         d := WLib.Images[FaceIndex];
  9577.       if d <> nil then
  9578.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9579.     end;
  9580.   end;
  9581. end;

  9582. procedure TFrmDlg.DKsOkClick(Sender: TObject; X, Y: Integer);
  9583. begin
  9584.   DKeySelDlg.Visible := False;
  9585. end;

  9586. procedure TFrmDlg.DKsF1Click(Sender: TObject; X, Y: Integer);
  9587. begin
  9588.   if Sender = DKsF1 then MagKeyCurKey := Integer('1');
  9589.   if Sender = DKsF2 then MagKeyCurKey := Integer('2');
  9590.   if Sender = DKsF3 then MagKeyCurKey := Integer('3');
  9591.   if Sender = DKsF4 then MagKeyCurKey := Integer('4');
  9592.   if Sender = DKsF5 then MagKeyCurKey := Integer('5');
  9593.   if Sender = DKsF6 then MagKeyCurKey := Integer('6');
  9594.   if Sender = DKsF7 then MagKeyCurKey := Integer('7');
  9595.   if Sender = DKsF8 then MagKeyCurKey := Integer('8');
  9596.   if Sender = DKsConF1 then MagKeyCurKey := Integer('E');
  9597.   if Sender = DKsConF2 then MagKeyCurKey := Integer('F');
  9598.   if Sender = DKsConF3 then MagKeyCurKey := Integer('G');
  9599.   if Sender = DKsConF4 then MagKeyCurKey := Integer('H');
  9600.   if Sender = DKsConF5 then MagKeyCurKey := Integer('I');
  9601.   if Sender = DKsConF6 then MagKeyCurKey := Integer('J');
  9602.   if Sender = DKsConF7 then MagKeyCurKey := Integer('K');
  9603.   if Sender = DKsConF8 then MagKeyCurKey := Integer('L');
  9604.   if Sender = DKsNone then MagKeyCurKey := 0;
  9605. end;
  9606. {------------------------------------------------------------------------}

  9607. //扁夯芒狼 固聪 滚瓢

  9608. {------------------------------------------------------------------------}


  9609. procedure TFrmDlg.DBotMiniMapClick(Sender: TObject; X, Y: Integer);
  9610. begin
  9611.   if not g_boViewMiniMap then begin
  9612.     if GetTickCount > g_dwQueryMsgTick then begin
  9613.       g_dwQueryMsgTick := GetTickCount + 3000;
  9614.       frmMain.SendWantMiniMap;
  9615.       g_nViewMinMapLv := 1;
  9616.     end;
  9617.   end else begin
  9618.     if g_nViewMinMapLv >= 3 then begin
  9619.       g_nViewMinMapLv := 0;
  9620.       g_boViewMiniMap := False;
  9621.     end else Inc(g_nViewMinMapLv);
  9622.   end;
  9623.   DMiniMap.Visible := g_boViewMiniMap;
  9624.   if not DMiniMap.Visible then begin
  9625.     DMiniMap.Width := DMapTitle.Width;
  9626.     DMiniMap.Height := 120;
  9627.   end;
  9628. end;

  9629. procedure TFrmDlg.DBotTradeClick(Sender: TObject; X, Y: Integer);
  9630. begin
  9631.   if GetTickCount > g_dwQueryMsgTick then begin
  9632.     g_dwQueryMsgTick := GetTickCount + 3000;
  9633.     frmMain.SendDealTry;
  9634.   end;
  9635. end;

  9636. procedure TFrmDlg.DBotGuildClick(Sender: TObject; X, Y: Integer);
  9637. begin
  9638.   if DGuildDlg.Visible then begin
  9639.     DGuildDlg.Visible := False;
  9640.   end else
  9641.     if GetTickCount > g_dwQueryMsgTick then begin
  9642.     g_dwQueryMsgTick := GetTickCount + 3000;
  9643.     frmMain.SendGuildDlg;
  9644.   end;
  9645. end;

  9646. procedure TFrmDlg.DBotGroupClick(Sender: TObject; X, Y: Integer);
  9647. begin
  9648.   ToggleShowGroupDlg;
  9649. end;


  9650. {------------------------------------------------------------------------}

  9651. //弊缝 促捞倔肺弊

  9652. {------------------------------------------------------------------------}

  9653. procedure TFrmDlg.ToggleShowGroupDlg;
  9654. begin
  9655.   DGroupDlg.Visible := not DGroupDlg.Visible;
  9656. end;

  9657. procedure TFrmDlg.DGroupDlgDirectPaint(Sender: TObject;
  9658.   dsurface: TTexture);
  9659. var
  9660.   d: TTexture;
  9661.   lx, ly, n: Integer;
  9662. begin
  9663.   with DGroupDlg do begin
  9664.     d := nil;
  9665.     if WLib <> nil then
  9666.       d := WLib.Images[FaceIndex];
  9667.     if d <> nil then
  9668.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9669.     if g_GroupMembers.Count > 0 then begin
  9670.       with dsurface do begin
  9671.         lx := SurfaceX(28) + Left;
  9672.         ly := SurfaceY(80) + Top;
  9673.         TextOut(lx, ly, g_GroupMembers[0], clSilver);
  9674.         for n := 1 to g_GroupMembers.Count - 1 do begin
  9675.           lx := SurfaceX(28) + Left + ((n - 1) mod 2) * 100;
  9676.           ly := SurfaceY(80 + 16) + Top + ((n - 1) div 2) * 16;
  9677.           TextOut(lx, ly, g_GroupMembers[n], clSilver);
  9678.         end;
  9679.       end;
  9680.     end;
  9681.   end;
  9682. end;

  9683. procedure TFrmDlg.DGrpDlgCloseClick(Sender: TObject; X, Y: Integer);
  9684. begin
  9685.   DGroupDlg.Visible := False;
  9686. end;

  9687. procedure TFrmDlg.DGrpAllowGroupDirectPaint(Sender: TObject;
  9688.   dsurface: TTexture);
  9689. var
  9690.   d: TTexture;
  9691. begin
  9692.   with Sender as TDButton do begin
  9693.     if Downed then begin
  9694.       d := nil;
  9695.       if WLib <> nil then
  9696.         d := WLib.Images[FaceIndex - 1];
  9697.       if d <> nil then
  9698.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9699.     end else begin
  9700.       if g_boAllowGroup then begin
  9701.         d := nil;
  9702.         if WLib <> nil then
  9703.           d := WLib.Images[FaceIndex];
  9704.         if d <> nil then
  9705.           dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9706.       end;
  9707.     end;
  9708.   end;
  9709. end;

  9710. procedure TFrmDlg.DGrpAllowGroupClick(Sender: TObject; X, Y: Integer);
  9711. begin
  9712.   if GetTickCount > g_dwChangeGroupModeTick then begin
  9713.     g_boAllowGroup := not g_boAllowGroup;
  9714.     g_dwChangeGroupModeTick := GetTickCount + 5000; //timeout 5檬
  9715.     frmMain.SendGroupMode(g_boAllowGroup);
  9716.   end;
  9717. end;

  9718. procedure TFrmDlg.DGrpCreateClick(Sender: TObject; X, Y: Integer);
  9719. var
  9720.   who: string;
  9721. begin
  9722.   if (GetTickCount > g_dwChangeGroupModeTick) and (g_GroupMembers.Count = 0) then begin
  9723.     DialogSize := 1;
  9724.     DMessageDlg('输入想加入编组人物名称:', [mbOk, mbAbort]);
  9725.     who := Trim(DlgEditText);
  9726.     if who <> '' then begin
  9727.       g_dwChangeGroupModeTick := GetTickCount + 5000; //timeout 5檬
  9728.       frmMain.SendCreateGroup(Trim(DlgEditText));
  9729.     end;
  9730.   end;
  9731. end;

  9732. procedure TFrmDlg.DGrpAddMemClick(Sender: TObject; X, Y: Integer);
  9733. var
  9734.   who: string;
  9735. begin
  9736.   if (GetTickCount > g_dwChangeGroupModeTick) and (g_GroupMembers.Count > 0) then begin
  9737.     DialogSize := 1;
  9738.     DMessageDlg('输入想加入编组人物名称:', [mbOk, mbAbort]);
  9739.     who := Trim(DlgEditText);
  9740.     if who <> '' then begin
  9741.       g_dwChangeGroupModeTick := GetTickCount + 5000; //timeout 5檬
  9742.       frmMain.SendAddGroupMember(Trim(DlgEditText));
  9743.     end;
  9744.   end;
  9745. end;

  9746. procedure TFrmDlg.DGrpDelMemClick(Sender: TObject; X, Y: Integer);
  9747. var
  9748.   who: string;
  9749. begin
  9750.   if (GetTickCount > g_dwChangeGroupModeTick) and (g_GroupMembers.Count > 0) then begin
  9751.     DialogSize := 1;
  9752.     DMessageDlg('输入想退出编组人物名称:', [mbOk, mbAbort]);
  9753.     who := Trim(DlgEditText);
  9754.     if who <> '' then begin
  9755.       g_dwChangeGroupModeTick := GetTickCount + 5000; //timeout 5檬
  9756.       frmMain.SendDelGroupMember(Trim(DlgEditText));
  9757.     end;
  9758.   end;
  9759. end;

  9760. procedure TFrmDlg.DBotLogoutClick(Sender: TObject; X, Y: Integer);
  9761. begin
  9762.   //强行退出
  9763.   g_dwLatestStruckTick := GetTickCount() + 10001;
  9764.   g_dwLatestMagicTick := GetTickCount() + 10001;
  9765.   g_dwLatestHitTick := GetTickCount() + 10001;
  9766.   //
  9767.   if (GetTickCount - g_dwLatestStruckTick > 10000) and
  9768.     (GetTickCount - g_dwLatestMagicTick > 10000) and
  9769.     (GetTickCount - g_dwLatestHitTick > 10000) or
  9770.     (g_MySelf.m_boDeath) then begin
  9771.     frmMain.AppLogout;
  9772.   end else
  9773.     DScreen.AddChatBoardString('你在战斗当中不能退出游戏.', clyellow, clRed);
  9774. end;

  9775. procedure TFrmDlg.DBotExitClick(Sender: TObject; X, Y: Integer);
  9776. begin
  9777.   //强行退出
  9778.   g_dwLatestStruckTick := GetTickCount() + 10001;
  9779.   g_dwLatestMagicTick := GetTickCount() + 10001;
  9780.   g_dwLatestHitTick := GetTickCount() + 10001;
  9781.   //
  9782.   if (GetTickCount - g_dwLatestStruckTick > 10000) and
  9783.     (GetTickCount - g_dwLatestMagicTick > 10000) and
  9784.     (GetTickCount - g_dwLatestHitTick > 10000) or
  9785.     (g_MySelf.m_boDeath) then begin
  9786.     //frmMain.AppExit;
  9787.     frmMain.Close;
  9788.   end else
  9789.     DScreen.AddChatBoardString('你在战斗当中不能退出游戏.', clyellow, clRed);
  9790. end;

  9791. procedure TFrmDlg.DBotPlusAbilClick(Sender: TObject; X, Y: Integer);
  9792. begin
  9793.   if g_nBonusPoint > 0 then
  9794.     FrmDlg.OpenAdjustAbility;
  9795. end;


  9796. {------------------------------------------------------------------------}

  9797. //背券 促捞倔肺弊

  9798. {------------------------------------------------------------------------}


  9799. procedure TFrmDlg.OpenDealDlg;
  9800. var
  9801.   d: TTexture;
  9802. begin
  9803.   DDealRemoteDlg.Left := SCREENWIDTH - 236 - 100;
  9804.   DDealRemoteDlg.Top := 0;
  9805.   DDealDlg.Left := SCREENWIDTH - 236 - 100;
  9806.   DDealDlg.Top := DDealRemoteDlg.Height - 15;
  9807.   DItemBag.Left := 0; //475;
  9808.   DItemBag.Top := 80;
  9809.   DItemBag.Visible := True;
  9810.   DDealDlg.Visible := True;
  9811.   DDealRemoteDlg.Visible := True;

  9812.   SafeFillChar(g_DealItems, SizeOf(TClientItem) * 10, #0);
  9813.   SafeFillChar(g_DealRemoteItems, SizeOf(TClientItem) * 20, #0);
  9814.   g_nDealGold := 0;
  9815.   g_nDealRemoteGold := 0;
  9816.   g_boDealEnd := False;

  9817.   //酒捞袍 啊规俊 儡惑捞 乐绰瘤 八荤
  9818.   ArrangeItemBag;
  9819. end;

  9820. procedure TFrmDlg.CloseDealDlg;
  9821. begin
  9822.   DDealDlg.Visible := False;
  9823.   DDealRemoteDlg.Visible := False;

  9824.   //酒捞袍 啊规俊 儡惑捞 乐绰瘤 八荤
  9825.   ArrangeItemBag;
  9826. end;

  9827. procedure TFrmDlg.DDealOkClick(Sender: TObject; X, Y: Integer);
  9828. var
  9829.   mi: Integer;
  9830. begin
  9831.   if GetTickCount > g_dwDealActionTick then begin
  9832.     //CloseDealDlg;
  9833.     frmMain.SendDealEnd;
  9834.     g_dwDealActionTick := GetTickCount + 4000;
  9835.     g_boDealEnd := True;
  9836.     //掉 芒俊辑 付快胶肺 缠绊 乐绰 巴阑 掉芒栏肺 持绰促. 付快胶俊 巢绰 儡惑(汗荤)阑 绝矩促.
  9837.     if g_boItemMoving then begin
  9838.       mi := g_MovingItem.Index;
  9839.       if (mi <= -20) and (mi > -30) then begin //掉 芒俊辑 柯巴父
  9840.         AddDealItem(g_MovingItem.Item);
  9841.         g_boItemMoving := False;
  9842.         g_MovingItem.Item.s.Name := '';
  9843.       end;
  9844.     end;
  9845.   end;
  9846. end;

  9847. procedure TFrmDlg.DDealCloseClick(Sender: TObject; X, Y: Integer);
  9848. begin
  9849.   if GetTickCount > g_dwDealActionTick then begin
  9850.     CloseDealDlg;
  9851.     frmMain.SendCancelDeal;
  9852.   end;
  9853. end;

  9854. procedure TFrmDlg.DDealRemoteDlgDirectPaint(Sender: TObject;
  9855.   dsurface: TTexture);
  9856. var
  9857.   d: TTexture;
  9858. begin
  9859.   with DDealRemoteDlg do begin
  9860.     d := nil;
  9861.     if WLib <> nil then
  9862.       d := WLib.Images[FaceIndex];
  9863.     if d <> nil then
  9864.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9865.     with dsurface do begin
  9866.       TextOut(SurfaceX(Left + 64), SurfaceY(Top + 196 - 65), GetGoldStr(g_nDealRemoteGold));
  9867.       TextOut(SurfaceX(Left + 59 + (106 - TextWidth(g_sDealWho)) div 2), SurfaceY(Top + 3) + 3, g_sDealWho);
  9868.     end;
  9869.   end;
  9870. end;

  9871. procedure TFrmDlg.DDealDlgDirectPaint(Sender: TObject;
  9872.   dsurface: TTexture);
  9873. var
  9874.   d: TTexture;
  9875. begin
  9876.   with DDealDlg do begin
  9877.     d := nil;
  9878.     if WLib <> nil then
  9879.       d := WLib.Images[FaceIndex];
  9880.     if d <> nil then
  9881.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  9882.     with dsurface do begin
  9883.       TextOut(SurfaceX(Left + 64), SurfaceY(Top + 196 - 65), GetGoldStr(g_nDealGold));
  9884.       TextOut(SurfaceX(Left + 59 + (106 - TextWidth(g_sSelChrName)) div 2), SurfaceY(Top + 3) + 3, g_sSelChrName);
  9885.     end;
  9886.   end;
  9887. end;

  9888. procedure TFrmDlg.DealItemReturnBag(mitem: TClientItem);
  9889. begin
  9890.   if not g_boDealEnd then begin
  9891.     g_DealDlgItem := mitem;
  9892.     frmMain.SendDelDealItem(g_DealDlgItem);
  9893.     g_dwDealActionTick := GetTickCount + 4000;
  9894.   end;
  9895. end;

  9896. procedure TFrmDlg.DuelItemReturnBag(mitem: TClientItem);
  9897. begin
  9898.   if not g_boDuelEnd then begin
  9899.     g_DuelDlgItem := mitem;
  9900.     frmMain.SendDelDuelItem(g_DuelDlgItem);
  9901.     g_dwDuelActionTick := GetTickCount + 4000;
  9902.   end;
  9903. end;

  9904. procedure TFrmDlg.DDGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  9905.   Shift: TShiftState);
  9906. var
  9907.   temp: TClientItem;
  9908.   mi, Idx: Integer;
  9909. begin
  9910.   if not g_boDealEnd and (GetTickCount > g_dwDealActionTick) then begin
  9911.     if not g_boItemMoving then begin
  9912.       Idx := ACol + ARow * DDGrid.ColCount;
  9913.       if Idx in [0..9] then begin
  9914.         ClearMoveRect();
  9915.         if g_DealItems[Idx].s.Name <> '' then begin
  9916.           g_boItemMoving := True;
  9917.           g_MovingItem.Owner := DDealDlg;
  9918.           g_MovingItem.Index := -Idx - 20;
  9919.           g_MovingItem.Item := g_DealItems[Idx];
  9920.           g_DealItems[Idx].s.Name := '';
  9921.           ItemClickSound(g_MovingItem.Item.s);
  9922.         end;
  9923.       end;
  9924.     end else begin
  9925.       if (g_MovingItem.Owner = DHeroItemBag) or (g_MovingItem.Owner = DStateWin) or (g_MovingItem.Owner = DHeroStateWin) then Exit;
  9926.       mi := g_MovingItem.Index;
  9927.       if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DUpgrade) then begin
  9928.         if (mi >= 0) or (mi <= -20) and (mi > -30) then begin
  9929.           ItemClickSound(g_MovingItem.Item.s);
  9930.           g_boItemMoving := False;
  9931.           if mi >= 0 then begin
  9932.             g_DealDlgItem := g_MovingItem.Item;
  9933.             frmMain.SendAddDealItem(g_DealDlgItem);
  9934.             g_dwDealActionTick := GetTickCount + 4000;
  9935.           end else
  9936.             AddDealItem(g_MovingItem.Item);
  9937.           g_MovingItem.Item.s.Name := '';
  9938.           g_MovingItem.Owner := nil;
  9939.         end;
  9940.         if mi = -98 then DDGoldClick(Self, 0, 0);
  9941.       end;
  9942.     end;
  9943.     ArrangeItemBag;
  9944.   end;
  9945. end;

  9946. procedure TFrmDlg.DDGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  9947.   Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  9948. var
  9949.   nIdx: Integer;
  9950.   d: TTexture;
  9951. begin
  9952.   nIdx := ACol + ARow * DDGrid.ColCount;
  9953.   if nIdx in [0..9] then begin
  9954.     if g_DealItems[nIdx].s.Name <> '' then begin
  9955.       d := g_WBagItemImages.Images[g_DealItems[nIdx].s.looks];
  9956.       if d <> nil then
  9957.         with DDGrid do begin
  9958.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  9959.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  9960.             d.ClientRect,
  9961.             d, True);
  9962.         end;
  9963.       with DDGrid do begin
  9964.         if (g_DealItems[nIdx].s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_DealItems[nIdx].s.AddPoint))} then begin
  9965.           if GetTickCount - g_DrawDealItems[nIdx].dwDrawTick >= 200 then begin
  9966.             g_DrawDealItems[nIdx].dwDrawTick := GetTickCount;
  9967.             if g_DrawDealItems[nIdx].nIndex <= 0 then g_DrawDealItems[nIdx].nIndex := 260 - 1;
  9968.             Inc(g_DrawDealItems[nIdx].nIndex);
  9969.             if g_DrawDealItems[nIdx].nIndex > 265 then g_DrawDealItems[nIdx].nIndex := 260;
  9970.           end;
  9971.           d := g_WMain2Images.Images[g_DrawDealItems[nIdx].nIndex];
  9972.           if d <> nil then begin
  9973.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  9974.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  9975.           end;
  9976.         end;

  9977.         if g_DealItems[nIdx].s.AddValue[12] >= 2 then begin
  9978.           if GetTickCount - g_DrawDealItems_[nIdx].dwDrawTick >= 200 then begin
  9979.             g_DrawDealItems_[nIdx].dwDrawTick := GetTickCount;
  9980.             if g_DrawDealItems_[nIdx].nIndex <= 0 then g_DrawDealItems_[nIdx].nIndex := 600 - 1;
  9981.             Inc(g_DrawDealItems_[nIdx].nIndex);
  9982.             if g_DrawDealItems_[nIdx].nIndex > 617 then g_DrawDealItems_[nIdx].nIndex := 600;
  9983.           end;
  9984.           d := g_WMain3Images.Images[g_DrawDealItems_[nIdx].nIndex];
  9985.           if d <> nil then begin
  9986.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  9987.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  9988.           end;
  9989.         end;

  9990.       end;
  9991.     end;
  9992.   end;
  9993. end;

  9994. procedure TFrmDlg.DDGridGridMouseMove(Sender: TObject; ACol, ARow: Integer;
  9995.   Shift: TShiftState);
  9996. var
  9997.   nIdx: Integer;
  9998.   iname, d1, d2, d3: string;
  9999.   useable: Boolean;

  10000.   nWhere: Integer;
  10001.   List: TStringList;
  10002. begin
  10003.   DScreen.ClearHint;
  10004.   nIdx := ACol + ARow * DDGrid.ColCount;
  10005.   if nIdx in [0..9] then begin
  10006.     g_MoveRect := DDGrid.ClientRect;
  10007.     g_MouseItem := g_DealItems[nIdx];

  10008.     if g_MouseItem.s.Name <> '' then begin
  10009.       nWhere := GetHumUseItemByBagItem(g_MouseItem.s.StdMode);
  10010.       if g_Config.boCompareItem and (nWhere >= 0) then begin

  10011.         List := TStringList.Create;
  10012.         try
  10013.           GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10014.           List.AddStrings(HintList);

  10015.           GetMouseItemInfo(g_MySelf, @g_UseItems[nWhere], iname, d1, d2, d3, useable);
  10016.           if HintList.Count > 0 then begin
  10017.             HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  10018.           end;
  10019.           with DDGrid do
  10020.             DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  10021.               SurfaceY(Top + (ARow + 1) * RowHeight),
  10022.               List, HintList, False);
  10023.           HintList.Clear;
  10024.         finally
  10025.           List.Free;
  10026.         end;
  10027.         g_MouseItem.s.Name := '';
  10028.       end else begin
  10029.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10030.         with DDGrid do
  10031.           DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  10032.             SurfaceY(Top + (ARow + 1) * RowHeight),
  10033.             HintList, False);
  10034.       end;

  10035.     end;

  10036.     {if g_MouseItem.s.Name <> '' then begin
  10037.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10038.       with DDGrid do
  10039.         DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  10040.           SurfaceY(Top + (ARow + 1) * RowHeight),
  10041.           HintList, False);
  10042.     end;}
  10043.   end;
  10044. end;

  10045. procedure TFrmDlg.DDRGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  10046.   Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  10047. var
  10048.   nIdx: Integer;
  10049.   d: TTexture;
  10050. begin
  10051.   nIdx := ACol + ARow * DDRGrid.ColCount;
  10052.   if nIdx in [0..19] then begin
  10053.     if g_DealRemoteItems[nIdx].s.Name <> '' then begin
  10054.       d := g_WBagItemImages.Images[g_DealRemoteItems[nIdx].s.looks];
  10055.       if d <> nil then
  10056.         with DDRGrid do begin
  10057.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  10058.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  10059.             d.ClientRect,
  10060.             d, True);
  10061.         end;
  10062.       with DDRGrid do begin
  10063.         if (g_DealRemoteItems[nIdx].s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_DealRemoteItems[nIdx].s.AddPoint))} then begin
  10064.           if GetTickCount - g_DrawDealRemoteItems[nIdx].dwDrawTick >= 200 then begin
  10065.             g_DrawDealRemoteItems[nIdx].dwDrawTick := GetTickCount;
  10066.             if g_DrawDealRemoteItems[nIdx].nIndex <= 0 then g_DrawDealRemoteItems[nIdx].nIndex := 260 - 1;
  10067.             Inc(g_DrawDealRemoteItems[nIdx].nIndex);
  10068.             if g_DrawDealRemoteItems[nIdx].nIndex > 265 then g_DrawDealRemoteItems[nIdx].nIndex := 260;
  10069.           end;
  10070.           d := g_WMain2Images.Images[g_DrawDealRemoteItems[nIdx].nIndex];
  10071.           if d <> nil then begin
  10072.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  10073.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  10074.           end;
  10075.         end;

  10076.         if g_DealRemoteItems[nIdx].s.AddValue[12] >= 2 then begin
  10077.           if GetTickCount - g_DrawDealRemoteItems_[nIdx].dwDrawTick >= 200 then begin
  10078.             g_DrawDealRemoteItems_[nIdx].dwDrawTick := GetTickCount;
  10079.             if g_DrawDealRemoteItems_[nIdx].nIndex <= 0 then g_DrawDealRemoteItems_[nIdx].nIndex := 600 - 1;
  10080.             Inc(g_DrawDealRemoteItems_[nIdx].nIndex);
  10081.             if g_DrawDealRemoteItems_[nIdx].nIndex > 617 then g_DrawDealRemoteItems_[nIdx].nIndex := 600;
  10082.           end;
  10083.           d := g_WMain3Images.Images[g_DrawDealRemoteItems_[nIdx].nIndex];
  10084.           if d <> nil then begin
  10085.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  10086.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  10087.           end;
  10088.         end;
  10089.       end;
  10090.     end;
  10091.   end;
  10092. end;

  10093. procedure TFrmDlg.DDRGridGridMouseMove(Sender: TObject; ACol,
  10094.   ARow: Integer; Shift: TShiftState);
  10095. var
  10096.   nIdx: Integer;
  10097.   iname, d1, d2, d3: string;
  10098.   useable: Boolean;

  10099.   nWhere: Integer;
  10100.   List: TStringList;
  10101. begin
  10102.   DScreen.ClearHint;
  10103.   nIdx := ACol + ARow * DDRGrid.ColCount;
  10104.   if nIdx in [0..19] then begin
  10105.     g_MouseItem := g_DealRemoteItems[nIdx];

  10106.     if g_MouseItem.s.Name <> '' then begin
  10107.       nWhere := GetHumUseItemByBagItem(g_MouseItem.s.StdMode);
  10108.       if g_Config.boCompareItem and (nWhere >= 0) then begin

  10109.         List := TStringList.Create;
  10110.         try
  10111.           GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10112.           List.AddStrings(HintList);

  10113.           GetMouseItemInfo(g_MySelf, @g_UseItems[nWhere], iname, d1, d2, d3, useable);
  10114.           if HintList.Count > 0 then begin
  10115.             HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  10116.           end;
  10117.           with DDRGrid do
  10118.             DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  10119.               SurfaceY(Top + (ARow + 1) * RowHeight),
  10120.               List, HintList, False);
  10121.           HintList.Clear;
  10122.         finally
  10123.           List.Free;
  10124.         end;
  10125.         g_MouseItem.s.Name := '';
  10126.       end else begin
  10127.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10128.         with DDRGrid do
  10129.           DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  10130.             SurfaceY(Top + (ARow + 1) * RowHeight),
  10131.             HintList, False);
  10132.       end;

  10133.     end;
  10134.     {if g_MouseItem.s.Name <> '' then begin
  10135.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10136.       with DDRGrid do
  10137.         DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  10138.           SurfaceY(Top + (ARow + 1) * RowHeight),
  10139.           HintList, False);
  10140.     end;}
  10141.   end;
  10142. end;

  10143. procedure TFrmDlg.DealZeroGold;
  10144. begin
  10145.   if not g_boDealEnd and (g_nDealGold > 0) then begin
  10146.     g_dwDealActionTick := GetTickCount + 4000;
  10147.     frmMain.SendChangeDealGold(0);
  10148.   end;
  10149. end;

  10150. procedure TFrmDlg.DDGoldClick(Sender: TObject; X, Y: Integer);
  10151. var
  10152.   DGold: Integer;
  10153.   valstr: string;
  10154. begin
  10155.   if g_MySelf = nil then Exit;
  10156.   if not g_boDealEnd and (GetTickCount > g_dwDealActionTick) then begin
  10157.     if not g_boItemMoving then begin
  10158.       if g_nDealGold > 0 then begin
  10159.         PlaySound(s_money);
  10160.         g_boItemMoving := True;
  10161.         g_MovingItem.Index := -97; //背券 芒俊辑狼 捣
  10162.         g_MovingItem.Item.s.Name := g_sGoldName {'金币'};
  10163.       end;
  10164.     end else begin
  10165.       if (g_MovingItem.Index = -97) or (g_MovingItem.Index = -98) then begin //捣父..
  10166.         if (g_MovingItem.Index = -98) then begin //啊规芒俊辑 柯 捣
  10167.           if g_MovingItem.Item.s.Name = g_sGoldName {'金币'} then begin
  10168.             //倔付甫 滚副 扒瘤 拱绢夯促.
  10169.             DialogSize := 1;
  10170.             g_boItemMoving := False;
  10171.             g_MovingItem.Item.s.Name := '';
  10172.             DMessageDlg('请输入要' + g_sGoldName + '数量:', [mbOk, mbAbort]);
  10173.             GetValidStrVal(DlgEditText, valstr, [' ']);
  10174.             DGold := Str_ToInt(valstr, 0);
  10175.             if (DGold <= (g_nDealGold + g_MySelf.m_nGold)) and (DGold > 0) then begin
  10176.               frmMain.SendChangeDealGold(DGold);
  10177.               g_dwDealActionTick := GetTickCount + 4000;
  10178.             end else
  10179.               DGold := 0;
  10180.           end;
  10181.         end;
  10182.         g_boItemMoving := False;
  10183.         g_MovingItem.Item.s.Name := '';
  10184.       end;
  10185.     end;
  10186.   end;
  10187. end;



  10188. {--------------------------------------------------------------}


  10189. procedure TFrmDlg.DUserState1DirectPaint(Sender: TObject;
  10190.   dsurface: TTexture);
  10191. var
  10192.   I, L, m, pgidx, bbx, bby, Idx, ax, ay: Integer;
  10193.   sex, hair: Byte;
  10194.   d: TTexture;
  10195.   hcolor, keyimg, old: Integer;
  10196.   iname, d1, d2, d3: string;
  10197.   useable: Boolean;
  10198. begin
  10199.   with DUserState1 do begin
  10200.     d := nil;
  10201.     if WLib <> nil then
  10202.       d := WLib.Images[FaceIndex];
  10203.     if d <> nil then
  10204.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  10205.     sex := DRESSfeature(UserState1.feature) mod 2;
  10206.     hair := HAIRfeature(UserState1.feature); //?
  10207.     hair := (hair - sex) div 2;
  10208.     if sex = 1 then pgidx := 30 //377 Mars 修改
  10209.     else pgidx := 29; //376 Mars 修改
  10210.     bbx := Left + 38;
  10211.     bby := Top + 52;
  10212.     d := g_WMain3Images.Images[pgidx]; //Mars 修改
  10213.     if d <> nil then
  10214.       dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);
  10215.     bbx := bbx - 7;
  10216.     bby := bby + 44;
  10217.     Idx := 440 + hair;
  10218.     //显示发型
  10219.    // idx := 440 + hair div 2;
  10220.     Idx := 440 + hair;
  10221.     //if sex = 1 then idx := 480 + hair div 2;
  10222.     if Idx > 0 then begin
  10223.       d := g_WMainImages.GetCachedImage(Idx, ax, ay);
  10224.       if d <> nil then
  10225.         dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  10226.     end;
  10227.     if UserState1.UseItems[U_DRESS].s.Name <> '' then begin
  10228.       Idx := UserState1.UseItems[U_DRESS].s.looks;
  10229.       if Idx >= 0 then begin
  10230.         //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  10231.         d := GetWStateImg(Idx, ax, ay);
  10232.         if d <> nil then
  10233.           dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  10234.       end;
  10235.     end;
  10236.     if UserState1.UseItems[U_WEAPON].s.Name <> '' then begin
  10237.       Idx := UserState1.UseItems[U_WEAPON].s.looks;
  10238.       if Idx >= 0 then begin
  10239.         //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  10240.         d := GetWStateImg(Idx, ax, ay);
  10241.         if d <> nil then
  10242.           dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);

  10243.         if (UserState1.UseItems[U_WEAPON].s.Shape = 38) and (Idx = 1404) then begin
  10244.           d := GetWStateImg(Idx - 1, ax, ay);
  10245.           if d <> nil then
  10246.             DrawBlend(dsurface, SurfaceX(bbx + ax), SurfaceY(bby + ay), d);
  10247.         end else
  10248.           if (UserState1.UseItems[U_WEAPON].s.Shape = 56) and (Idx = 1880) then begin
  10249.           if (g_dwWeapon56Index[2] < 1890) or (g_dwWeapon56Index[2] > 1899) then
  10250.             g_dwWeapon56Index[2] := 1890;
  10251.           if GetTickCount - g_dwWeapon56Tick[2] > 100 then begin
  10252.             g_dwWeapon56Tick[2] := GetTickCount;
  10253.             g_dwWeapon56Index[2] := g_dwWeapon56Index[2] + 1;
  10254.           end;
  10255.           if (g_dwWeapon56Index[2] < 1890) or (g_dwWeapon56Index[2] > 1899) then
  10256.             g_dwWeapon56Index[2] := 1890;

  10257.           d := GetWStateImg(g_dwWeapon56Index[2], ax, ay);
  10258.           if d <> nil then
  10259.             DrawBlend(dsurface, SurfaceX(bbx + ax), SurfaceY(bby + ay), d);
  10260.         end;
  10261.       end;
  10262.     end;
  10263.     if UserState1.UseItems[U_HELMET].s.Name <> '' then begin
  10264.       Idx := UserState1.UseItems[U_HELMET].s.looks;
  10265.       if Idx >= 0 then begin
  10266.         //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  10267.         d := GetWStateImg(Idx, ax, ay);
  10268.         if d <> nil then
  10269.           dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  10270.       end;
  10271.     end;

  10272.     //原为打开,本代码为显示人物身上所带物品信息,显示位置为人物下方
  10273.     if (g_ServerConfig.btShowClientItemStyle <> 0) then begin
  10274.       if g_MouseUserStateItem.s.Name <> '' then begin
  10275.         g_MouseItem := g_MouseUserStateItem;
  10276.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10277.         if iname <> '' then begin
  10278.           if g_MouseItem.Dura = 0 then hcolor := clRed
  10279.           else hcolor := clWhite;
  10280.           with dsurface do begin
  10281.             old := MainForm.Canvas.Font.Size;
  10282.             MainForm.Canvas.Font.Size := 9;
  10283.             bbx := SurfaceX(Left + 37);
  10284.             bby := SurfaceY(Top + 272 + 35);
  10285.             TextOut(bbx, bby, iname, clyellow); //2006-10-24 Mars修改
  10286.             TextOut(bbx + TextWidth(iname), bby, d1, hcolor);
  10287.             TextOut(bbx, bby + TextHeight('A') + 2, d2, hcolor);
  10288.             TextOut(bbx, bby + (TextHeight('A') + 2) * 2, d3, hcolor);

  10289.             if d2 <> '' then
  10290.               bby := bby + TextHeight('A') + 2;
  10291.             if d3 <> '' then
  10292.               bby := bby + TextHeight('A') + 2;

  10293.             bby := bby + TextHeight('A') + 2;
  10294.             for I := 0 to g_ExtractStringList.Count - 1 do begin
  10295.               TextOut(bbx, bby + (TextHeight('A') + 2) * I, g_ExtractStringList.Strings[I], hcolor);
  10296.             end;
  10297.             MainForm.Canvas.Font.Size := old;
  10298.           end;
  10299.         end;
  10300.         g_MouseItem.s.Name := '';
  10301.       end;
  10302.     end;

  10303.     with dsurface do begin
  10304.       TextOut(SurfaceX(Left + 122 - TextWidth(UserState1.UserName) div 2),
  10305.         SurfaceY(Top + 23), UserState1.UserName, UserState1.NameColor);
  10306.       TextOut(SurfaceX(Left + 45), SurfaceY(Top + 58),
  10307.         UserState1.GuildName + ' ' + UserState1.GuildRankName, clSilver);
  10308.     end;
  10309.   end;
  10310. end;

  10311. procedure TFrmDlg.DUserState1MouseDown(Sender: TObject;
  10312.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  10313. begin
  10314.   X := DUserState1.LocalX(X) - DUserState1.Left;
  10315.   Y := DUserState1.LocalY(Y) - DUserState1.Top;
  10316.   if (X > 42) and (X < 201) and (Y > 54) and (Y < 71) then begin
  10317.     //DScreen.AddSysMsg (IntToStr(X) + ' ' + IntToStr(Y) + ' ' + UserState1.GuildName);
  10318.     if UserState1.GuildName <> '' then begin
  10319.       SetInputVisible(g_ConfigClient.btMainInterface = 1);
  10320.       EdChat.Visible := True;
  10321.       EdChat.SetFocus;
  10322.       SetImeMode(EdChat.Handle, LocalLanguage);
  10323.       EdChat.Text := UserState1.GuildName;
  10324.       EdChat.SelStart := Length(EdChat.Text);
  10325.       EdChat.SelLength := 0;
  10326.     end;
  10327.   end;
  10328. end;

  10329. procedure TFrmDlg.DUserState1MouseMove(Sender: TObject; Shift: TShiftState;
  10330.   X, Y: Integer);
  10331. begin
  10332.   DScreen.ClearHint;
  10333.   g_MouseUserStateItem.s.Name := '';
  10334.   g_MouseItem.s.Name := '';
  10335.   HintList.Clear;
  10336. end;

  10337. procedure TFrmDlg.DWeaponUS1MouseMove(Sender: TObject; Shift: TShiftState;
  10338.   X, Y: Integer);
  10339. var
  10340.   sel: Integer;
  10341.   iname, d1, d2, d3: string;
  10342.   useable: Boolean;
  10343. begin
  10344.   sel := -1;
  10345.   if Sender = DDressUS1 then sel := U_DRESS;
  10346.   if Sender = DWeaponUS1 then sel := U_WEAPON;
  10347.   if Sender = DHelmetUS1 then sel := U_HELMET;
  10348.   if Sender = DNecklaceUS1 then sel := U_NECKLACE;
  10349.   if Sender = DLightUS1 then sel := U_RIGHTHAND;
  10350.   if Sender = DRingLUS1 then sel := U_RINGL;
  10351.   if Sender = DRingRUS1 then sel := U_RINGR;
  10352.   if Sender = DArmringLUS1 then sel := U_ARMRINGL;
  10353.   if Sender = DArmringRUS1 then sel := U_ARMRINGR;
  10354.   if Sender = DBujukUS1 then sel := U_BUJUK;
  10355.   if Sender = DBeltUS1 then sel := U_BELT;
  10356.   if Sender = DBootsUS1 then sel := U_BOOTS;
  10357.   if Sender = DCharmUS1 then sel := U_CHARM;

  10358.   if sel >= 0 then begin
  10359.     g_MouseUserStateItem := UserState1.UseItems[sel];
  10360.     if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  10361.       g_MouseItem := UserState1.UseItems[sel];
  10362.     //原为注释掉 显示人物身上带的物品信息
  10363.     //GetMouseItemInfo(HintList);
  10364.    { with Sender as TDButton do
  10365.       DScreen.ShowHint(SurfaceX(Left - 30), SurfaceY(Top + 50), HintList, False);
  10366.     }
  10367.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  10368.       if HintList.Count > 0 then begin
  10369.         with Sender as TDButton do
  10370.           DScreen.ShowHint(SurfaceX(Left - 30),
  10371.             SurfaceY(Top + 50),
  10372.             HintList, False);
  10373.       end;
  10374.       g_MouseItem.s.Name := '';
  10375.     end;
  10376.   end;
  10377. end;

  10378. procedure TFrmDlg.DCloseUS1Click(Sender: TObject; X, Y: Integer);
  10379. begin
  10380.   DUserState1.Visible := False;
  10381. end;

  10382. procedure TFrmDlg.DNecklaceUS1DirectPaint(Sender: TObject;
  10383.   dsurface: TTexture);
  10384. var
  10385.   Idx: Integer;
  10386.   d: TTexture;
  10387.   nWhere: Integer;
  10388. begin
  10389.   nWhere := -1;
  10390.   if Sender = DNecklaceUS1 then nWhere := U_NECKLACE;
  10391.   if Sender = DLightUS1 then nWhere := U_RIGHTHAND;
  10392.   if Sender = DArmringRUS1 then nWhere := U_ARMRINGR;
  10393.   if Sender = DArmringLUS1 then nWhere := U_ARMRINGL;
  10394.   if Sender = DRingRUS1 then nWhere := U_RINGR;
  10395.   if Sender = DRingLUS1 then nWhere := U_RINGL;
  10396.   if Sender = DBujukUS1 then nWhere := U_BUJUK;
  10397.   if Sender = DBeltUS1 then nWhere := U_BELT;
  10398.   if Sender = DBootsUS1 then nWhere := U_BOOTS;
  10399.   if Sender = DCharmUS1 then nWhere := U_CHARM;

  10400.   if nWhere >= 0 then begin
  10401.     if UserState1.UseItems[nWhere].s.Name <> '' then begin
  10402.       Idx := UserState1.UseItems[nWhere].s.looks;
  10403.       if Idx >= 0 then begin
  10404.         d := GetWStateImg(Idx);
  10405.         if d <> nil then
  10406.           with TDButton(Sender) do
  10407.             dsurface.Draw(SurfaceX(Left + (Width - d.Width) div 2),
  10408.               SurfaceY(Top + (Height - d.Height) div 2),
  10409.               d.ClientRect, d, True);

  10410.         if (UserState1.UseItems[nWhere].s.AddValue[12] in [1, 3]) {or (GetAddPoint(UserState1.UseItems[nWhere].s.AddPoint))} then begin
  10411.           if GetTickCount - g_DrawUseItems1[nWhere].dwDrawTick >= 200 then begin
  10412.             g_DrawUseItems1[nWhere].dwDrawTick := GetTickCount;
  10413.             if g_DrawUseItems1[nWhere].nIndex <= 0 then g_DrawUseItems1[nWhere].nIndex := 260 - 1;
  10414.             Inc(g_DrawUseItems1[nWhere].nIndex);
  10415.             if g_DrawUseItems1[nWhere].nIndex > 265 then g_DrawUseItems1[nWhere].nIndex := 260;
  10416.           end;
  10417.           d := g_WMain2Images.Images[g_DrawUseItems1[nWhere].nIndex];
  10418.           if d <> nil then begin
  10419.             with TDButton(Sender) do
  10420.               DrawBlend(dsurface, SurfaceX(Left + (Width - d.Width) div 2),
  10421.                 SurfaceY(Top + (Height - d.Height) div 2), d);
  10422.           end;
  10423.         end;

  10424.         if UserState1.UseItems[nWhere].s.AddValue[12] >= 2 then begin
  10425.           if GetTickCount - g_DrawUseItems1_[nWhere].dwDrawTick >= 200 then begin
  10426.             g_DrawUseItems1_[nWhere].dwDrawTick := GetTickCount;
  10427.             if g_DrawUseItems1_[nWhere].nIndex <= 0 then g_DrawUseItems1_[nWhere].nIndex := 600 - 1;
  10428.             Inc(g_DrawUseItems1_[nWhere].nIndex);
  10429.             if g_DrawUseItems1_[nWhere].nIndex > 617 then g_DrawUseItems1_[nWhere].nIndex := 600;
  10430.           end;
  10431.           d := g_WMain3Images.Images[g_DrawUseItems1_[nWhere].nIndex];
  10432.           if d <> nil then begin
  10433.             with TDButton(Sender) do
  10434.               DrawBlend(dsurface, SurfaceX(Left + (Width - d.Width) div 2),
  10435.                 SurfaceY(Top + (Height - d.Height) div 2), d);
  10436.           end;
  10437.         end;
  10438.       end;
  10439.     end;
  10440.   end;
  10441. end;

  10442. procedure TFrmDlg.ShowGuildDlg;
  10443. begin
  10444.   DGuildDlg.Visible := True; //not DGuildDlg.Visible;
  10445.   DGuildDlg.Top := -3;
  10446.   DGuildDlg.Left := 0;
  10447.   if DGuildDlg.Visible then begin
  10448.     if GuildCommanderMode then begin
  10449.       DGDAddMem.Visible := True;
  10450.       DGDDelMem.Visible := True;
  10451.       DGDEditNotice.Visible := True;
  10452.       DGDEditGrade.Visible := True;
  10453.       DGDAlly.Visible := True;
  10454.       DGDBreakAlly.Visible := True;
  10455.       DGDWar.Visible := True;
  10456.       DGDCancelWar.Visible := True;
  10457.     end else begin
  10458.       DGDAddMem.Visible := False;
  10459.       DGDDelMem.Visible := False;
  10460.       DGDEditNotice.Visible := False;
  10461.       DGDEditGrade.Visible := False;
  10462.       DGDAlly.Visible := False;
  10463.       DGDBreakAlly.Visible := False;
  10464.       DGDWar.Visible := False;
  10465.       DGDCancelWar.Visible := False;
  10466.     end;
  10467.   end;
  10468.   GuildTopLine := 0;
  10469. end;

  10470. procedure TFrmDlg.ShowGuildEditNotice;
  10471. var
  10472.   d: TTexture;
  10473.   I: Integer;
  10474.   sData: string;
  10475. begin
  10476.   with DGuildEditNotice do begin
  10477.     d := nil;
  10478.     if WLib <> nil then
  10479.       d := WLib.Images[FaceIndex];
  10480.     if d <> nil then begin
  10481.       Left := (SCREENWIDTH - d.Width) div 2;
  10482.       Top := (SCREENHEIGHT - d.Height) div 2;
  10483.     end;
  10484.     HideAllControls;
  10485.     DGuildEditNotice.ShowModal;

  10486.     Memo.Left := SurfaceX(Left + 16);
  10487.     Memo.Top := SurfaceY(Top + 36);
  10488.     Memo.Width := 571;
  10489.     Memo.Height := 246;
  10490.     Memo.Lines.Assign(GuildNotice);
  10491.     Memo.Visible := True;

  10492.     while True do begin
  10493.       if not DGuildEditNotice.Visible then Break;
  10494.       frmMain.ProcOnIdle;
  10495.       Application.ProcessMessages;
  10496.       if Application.Terminated then Exit;
  10497.       Sleep(1);
  10498.     end;

  10499.     DGuildEditNotice.Visible := False;
  10500.     RestoreHideControls;

  10501.     if DMsgDlg.DialogResult = mrOk then begin
  10502.       sData := '';
  10503.       for I := 0 to Memo.Lines.Count - 1 do begin
  10504.         if Memo.Lines[I] = '' then
  10505.           sData := sData + Memo.Lines[I] + ' '#13
  10506.         else sData := sData + Memo.Lines[I] + #13;
  10507.       end;
  10508.       if Length(sData) > 4000 then begin
  10509.         sData := Copy(sData, 1, 4000);
  10510.         DMessageDlg('公告内容超过限制大小,公告内容将被截短!', [mbOk]);
  10511.       end;
  10512.       frmMain.SendGuildUpdateNotice(sData);
  10513.     end;
  10514.   end;
  10515. end;

  10516. procedure TFrmDlg.ShowGuildEditGrade;
  10517. var
  10518.   d: TTexture;
  10519.   sData: string;
  10520.   I: Integer;
  10521. begin
  10522.   if GuildMembers.Count <= 0 then begin
  10523.     DMessageDlg('请先打开成员列表。', [mbOk]);
  10524.     Exit;
  10525.   end;

  10526.   with DGuildEditNotice do begin
  10527.     d := nil;
  10528.     if WLib <> nil then
  10529.       d := WLib.Images[FaceIndex];
  10530.     if d <> nil then begin
  10531.       Left := (SCREENWIDTH - d.Width) div 2;
  10532.       Top := (SCREENHEIGHT - d.Height) div 2;
  10533.     end;
  10534.     HideAllControls;
  10535.     DGuildEditNotice.ShowModal;

  10536.     Memo.Left := SurfaceX(Left + 16);
  10537.     Memo.Top := SurfaceY(Top + 36);
  10538.     Memo.Width := 571;
  10539.     Memo.Height := 246;
  10540.     Memo.Lines.Assign(GuildMembers);
  10541.     Memo.Visible := True;

  10542.     while True do begin
  10543.       if not DGuildEditNotice.Visible then Break;
  10544.       frmMain.ProcOnIdle;
  10545.       Application.ProcessMessages;
  10546.       if Application.Terminated then Exit;
  10547.       Sleep(1);
  10548.     end;

  10549.     DGuildEditNotice.Visible := False;
  10550.     RestoreHideControls;

  10551.     if DMsgDlg.DialogResult = mrOk then begin
  10552.       //GuildMembers.Assign (Memo.Lines);
  10553.       sData := '';
  10554.       for I := 0 to Memo.Lines.Count - 1 do begin
  10555.         sData := sData + Memo.Lines[I] + #13;
  10556.       end;
  10557.       if Length(sData) > 5000 then begin
  10558.         sData := Copy(sData, 1, 5000);
  10559.         DMessageDlg('内容超过限制大小,内容将被截短!', [mbOk]);
  10560.       end;
  10561.       frmMain.SendGuildUpdateGrade(sData);
  10562.     end;
  10563.   end;
  10564. end;

  10565. procedure TFrmDlg.DGuildDlgDirectPaint(Sender: TObject;
  10566.   dsurface: TTexture);
  10567. var
  10568.   d: TTexture;
  10569.   I, n, bx, by: Integer;
  10570.   c: TColor;
  10571. begin
  10572.   with DGuildDlg do begin
  10573.     d := nil;
  10574.     if WLib <> nil then
  10575.       d := WLib.Images[FaceIndex];
  10576.     if d <> nil then
  10577.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  10578.     with dsurface do begin
  10579.       c := clWhite;
  10580.       TextOut(Left + 320, Top + 13, Guild, c);
  10581.       bx := Left + 24;
  10582.       by := Top + 41;
  10583.       for I := GuildTopLine to GuildStrs.Count - 1 do begin
  10584.         n := I - GuildTopLine;
  10585.         if n * 14 > 356 then Break;
  10586.         if Integer(GuildStrs.Objects[I]) <> 0 then c := TColor(GuildStrs.Objects[I])
  10587.         else begin
  10588.           if BoGuildChat then c := GetRGB(2)
  10589.           else c := clSilver;
  10590.         end;
  10591.         TextOut(bx, by + n * 14, GuildStrs[I], c);
  10592.       end;
  10593.     end;
  10594.   end;
  10595. end;

  10596. procedure TFrmDlg.DGDUpClick(Sender: TObject; X, Y: Integer);
  10597. begin
  10598.   if GuildTopLine > 0 then Dec(GuildTopLine, 3);
  10599.   if GuildTopLine < 0 then GuildTopLine := 0;
  10600. end;

  10601. procedure TFrmDlg.DGDDownClick(Sender: TObject; X, Y: Integer);
  10602. begin
  10603.   if GuildTopLine + 12 < GuildStrs.Count then Inc(GuildTopLine, 3);
  10604. end;

  10605. procedure TFrmDlg.DGDCloseClick(Sender: TObject; X, Y: Integer);
  10606. begin
  10607.   DGuildDlg.Visible := False;
  10608.   BoGuildChat := False;
  10609. end;

  10610. procedure TFrmDlg.DGDHomeClick(Sender: TObject; X, Y: Integer);
  10611. begin
  10612.   if GetTickCount > g_dwQueryMsgTick then begin
  10613.     g_dwQueryMsgTick := GetTickCount + 3000;
  10614.     frmMain.SendGuildHome;
  10615.     BoGuildChat := False;
  10616.   end;
  10617. end;

  10618. procedure TFrmDlg.DGDListClick(Sender: TObject; X, Y: Integer);
  10619. begin
  10620.   if GetTickCount > g_dwQueryMsgTick then begin
  10621.     g_dwQueryMsgTick := GetTickCount + 3000;
  10622.     frmMain.SendGuildMemberList;
  10623.     BoGuildChat := False;
  10624.   end;
  10625. end;

  10626. procedure TFrmDlg.DGDAddMemClick(Sender: TObject; X, Y: Integer);
  10627. begin
  10628.   DMessageDlg('请输入想加入' + Guild + '的人物名称:', [mbOk, mbAbort]);
  10629.   if DlgEditText <> '' then
  10630.     frmMain.SendGuildAddMem(DlgEditText);
  10631. end;

  10632. procedure TFrmDlg.DGDDelMemClick(Sender: TObject; X, Y: Integer);
  10633. begin
  10634.   DMessageDlg('请输入想要开除的人物名称:', [mbOk, mbAbort]);
  10635.   if DlgEditText <> '' then
  10636.     frmMain.SendGuildDelMem(DlgEditText);
  10637. end;

  10638. procedure TFrmDlg.DGDEditNoticeClick(Sender: TObject; X, Y: Integer);
  10639. begin
  10640.   GuildEditHint := '[修改行会公告内容。]';
  10641.   ShowGuildEditNotice;
  10642. end;

  10643. procedure TFrmDlg.DGDEditGradeClick(Sender: TObject; X, Y: Integer);
  10644. begin
  10645.   GuildEditHint := '[修改行会成员的等级和职位。 # 警告 : 不能增加行会成员/删除行会成员。]';
  10646.   ShowGuildEditGrade;
  10647. end;

  10648. procedure TFrmDlg.DGDAllyClick(Sender: TObject; X, Y: Integer);
  10649. begin
  10650.   if mrOk = DMessageDlg('对方结盟行会必需在 [允许结盟]状态下。\' +
  10651.     '而且二个行会的掌门必须面对面。\' +
  10652.     '是否确认行会结盟?', [mbOk, mbCancel])
  10653.     then
  10654.     frmMain.SendSay('@联盟');
  10655. end;

  10656. procedure TFrmDlg.DGDBreakAllyClick(Sender: TObject; X, Y: Integer);
  10657. begin
  10658.   DMessageDlg('请输入您想取消结盟的行会的名字:', [mbOk, mbAbort]);
  10659.   if DlgEditText <> '' then
  10660.     frmMain.SendSay('@取消联盟 ' + DlgEditText);
  10661. end;



  10662. procedure TFrmDlg.DGuildEditNoticeDirectPaint(Sender: TObject;
  10663.   dsurface: TTexture);
  10664. var
  10665.   d: TTexture;
  10666. begin
  10667.   with DGuildEditNotice do begin
  10668.     d := nil;
  10669.     if WLib <> nil then
  10670.       d := WLib.Images[FaceIndex];
  10671.     if d <> nil then
  10672.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  10673.     with dsurface do begin
  10674.       TextOut(Left + 18, Top + 291, GuildEditHint, clSilver);
  10675.     end;
  10676.   end;
  10677. end;

  10678. procedure TFrmDlg.DGECloseClick(Sender: TObject; X, Y: Integer);
  10679. begin
  10680.   DGuildEditNotice.Visible := False;
  10681.   Memo.Visible := False;
  10682.   DMsgDlg.DialogResult := mrCancel;
  10683. end;

  10684. procedure TFrmDlg.DGEOkClick(Sender: TObject; X, Y: Integer);
  10685. begin
  10686.   DGECloseClick(Self, 0, 0);
  10687.   DMsgDlg.DialogResult := mrOk;
  10688. end;

  10689. procedure TFrmDlg.AddGuildChat(Str: string);
  10690. var
  10691.   I: Integer;
  10692. begin
  10693.   GuildChats.Add(Str);
  10694.   if GuildChats.Count > 500 then begin
  10695.     for I := 0 to 100 do GuildChats.Delete(0);
  10696.   end;
  10697.   if BoGuildChat then
  10698.     GuildStrs.Assign(GuildChats);
  10699. end;

  10700. procedure TFrmDlg.DGDChatClick(Sender: TObject; X, Y: Integer);
  10701. begin
  10702.   BoGuildChat := not BoGuildChat;
  10703.   if BoGuildChat then begin
  10704.     GuildStrs2.Assign(GuildStrs);
  10705.     GuildStrs.Assign(GuildChats);
  10706.   end else
  10707.     GuildStrs.Assign(GuildStrs2);
  10708. end;

  10709. procedure TFrmDlg.DGoldDirectPaint(Sender: TObject;
  10710.   dsurface: TTexture);
  10711. var
  10712.   d: TTexture;
  10713. begin
  10714.   if g_MySelf = nil then Exit;
  10715.   with DGold do begin
  10716.     d := nil;
  10717.     if WLib <> nil then
  10718.       d := WLib.Images[FaceIndex];
  10719.     if d <> nil then
  10720.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  10721.   end;
  10722. end;


  10723. {--------------------------------------------------------------}
  10724. //瓷仿摹 炼沥 芒

  10725. procedure TFrmDlg.DAdjustAbilCloseClick(Sender: TObject; X, Y: Integer);
  10726. begin
  10727.   DAdjustAbility.Visible := False;
  10728.   g_nBonusPoint := g_nSaveBonusPoint;
  10729. end;

  10730. procedure TFrmDlg.DAdjustAbilityDirectPaint(Sender: TObject;
  10731.   dsurface: TTexture);
  10732.   procedure AdjustAb(abil: Word; Val: Word; var lov, hiv: Word);
  10733.   var
  10734.     Lo, Hi: Byte;
  10735.     I: Integer;
  10736.   begin
  10737.     Lo := LoByte(abil);
  10738.     Hi := HiByte(abil);
  10739.     lov := 0; hiv := 0;
  10740.     for I := 1 to Val do begin
  10741.       if Lo + 1 < Hi then begin
  10742.         Inc(Lo); Inc(lov);
  10743.       end else begin
  10744.         Inc(Hi); Inc(hiv); end;
  10745.     end;
  10746.   end;
  10747. var
  10748.   d: TTexture;
  10749.   L, m, adc, amc, asc, aac, amac: Integer;
  10750.   ldc, lmc, lsc, lac, lmac, hdc, hmc, hsc, hac, hmac: Word;
  10751.   c: TColor;
  10752. begin
  10753.   if g_MySelf = nil then Exit;
  10754.   with dsurface do begin
  10755.     with DAdjustAbility do begin
  10756.       d := nil;
  10757.       if DMenuDlg.WLib <> nil then
  10758.         d := DMenuDlg.WLib.Images[FaceIndex];
  10759.       if d <> nil then
  10760.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  10761.     end;
  10762.     L := DAdjustAbility.SurfaceX(DAdjustAbility.Left) + 36;
  10763.     m := DAdjustAbility.SurfaceY(DAdjustAbility.Top) + 22;

  10764.     TextOut(L, m, '你当前还有剩余部份属性点未分配。', clSilver);
  10765.     TextOut(L, m + 14, '请根据自己的意向,调整自己的属性值。', clSilver);
  10766.     TextOut(L, m + 14 * 2, '些属性点数,下不可以重新分配。', clSilver);
  10767.     TextOut(L, m + 14 * 3, '在分配时要小心选择。', clSilver);

  10768.     L := DAdjustAbility.SurfaceX(DAdjustAbility.Left) + 100; //66;
  10769.     m := DAdjustAbility.SurfaceY(DAdjustAbility.Top) + 101;

  10770.     {
  10771.     adc := (g_BonusAbil.DC + g_BonusAbilChg.DC) div g_BonusTick.DC;
  10772.     amc := (g_BonusAbil.MC + g_BonusAbilChg.MC) div g_BonusTick.MC;
  10773.     asc := (g_BonusAbil.SC + g_BonusAbilChg.SC) div g_BonusTick.SC;
  10774.     aac := (g_BonusAbil.AC + g_BonusAbilChg.AC) div g_BonusTick.AC;
  10775.     amac := (g_BonusAbil.MAC + g_BonusAbilChg.MAC) div g_BonusTick.MAC;
  10776.     }

  10777.     if g_BonusTick.HP = 0 then g_BonusTick.HP := 1;
  10778.     if g_BonusTick.MP = 0 then g_BonusTick.MP := 1;

  10779.     if g_BonusTick.DC = 0 then g_BonusTick.DC := 1;
  10780.     if g_BonusTick.MC = 0 then g_BonusTick.MC := 1;
  10781.     if g_BonusTick.SC = 0 then g_BonusTick.SC := 1;
  10782.     if g_BonusTick.AC = 0 then g_BonusTick.AC := 1;
  10783.     if g_BonusTick.MAC = 0 then g_BonusTick.MAC := 1;

  10784.     adc := (g_BonusAbilChg.DC) div g_BonusTick.DC;
  10785.     amc := (g_BonusAbilChg.MC) div g_BonusTick.MC;
  10786.     asc := (g_BonusAbilChg.SC) div g_BonusTick.SC;
  10787.     aac := (g_BonusAbilChg.AC) div g_BonusTick.AC;
  10788.     amac := (g_BonusAbilChg.MAC) div g_BonusTick.MAC;

  10789.     AdjustAb(g_NakedAbil.DC, adc, ldc, hdc);
  10790.     AdjustAb(g_NakedAbil.MC, amc, lmc, hmc);
  10791.     AdjustAb(g_NakedAbil.SC, asc, lsc, hsc);
  10792.     AdjustAb(g_NakedAbil.AC, aac, lac, hac);
  10793.     AdjustAb(g_NakedAbil.MAC, amac, lmac, hmac);
  10794.     //lac  := 0;  hac := aac;
  10795.     //lmac := 0;  hmac := amac;

  10796.     TextOut(L + 0, m + 0, IntToStr(_MIN(High(Word), Loword(g_MySelf.m_Abil.DC) + ldc)) + '-' + IntToStr(_MIN(High(Word), Hiword(g_MySelf.m_Abil.DC) + hdc)));
  10797.     TextOut(L + 0, m + 20, IntToStr(_MIN(High(Word), Loword(g_MySelf.m_Abil.MC) + lmc)) + '-' + IntToStr(_MIN(High(Word), Hiword(g_MySelf.m_Abil.MC) + hmc)));
  10798.     TextOut(L + 0, m + 40, IntToStr(_MIN(High(Word), Loword(g_MySelf.m_Abil.SC) + lsc)) + '-' + IntToStr(_MIN(High(Word), Hiword(g_MySelf.m_Abil.SC) + hsc)));
  10799.     TextOut(L + 0, m + 60, IntToStr(_MIN(High(Word), Loword(g_MySelf.m_Abil.AC) + lac)) + '-' + IntToStr(_MIN(High(Word), Hiword(g_MySelf.m_Abil.AC) + hac)));
  10800.     TextOut(L + 0, m + 80, IntToStr(_MIN(High(Word), Loword(g_MySelf.m_Abil.MAC) + lmac)) + '-' + IntToStr(_MIN(High(Word), Hiword(g_MySelf.m_Abil.MAC) + hmac)));

  10801.     //m_WAbil.MaxHP := MinLong(g_ServerConfig.nMaxLevel, g_MySelf.m_Abil.MaxHP + (g_BonusAbil.HP + g_BonusAbilChg.HP) div g_BonusTick.HP);
  10802.     //m_WAbil.MaxMP := MinLong(g_ServerConfig.nMaxLevel, g_MySelf.m_Abil.MaxMP + (g_BonusAbil.MP + g_BonusAbilChg.MP) div g_BonusTick.MP);

  10803.     //TextOut(L + 0, m + 100, IntToStr(g_MySelf.m_Abil.MaxHP + (g_BonusAbil.HP + g_BonusAbilChg.HP) div g_BonusTick.HP));
  10804.     //TextOut(L + 0, m + 120, IntToStr(g_MySelf.m_Abil.MaxMP + (g_BonusAbil.MP + g_BonusAbilChg.MP) div g_BonusTick.MP));

  10805.     TextOut(L + 0, m + 100, IntToStr(MinLong(g_ServerConfig.nMaxLevel, g_MySelf.m_Abil.MaxHP + (g_BonusAbil.HP + g_BonusAbilChg.HP) div g_BonusTick.HP)));
  10806.     TextOut(L + 0, m + 120, IntToStr(MinLong(g_ServerConfig.nMaxLevel, g_MySelf.m_Abil.MaxMP + (g_BonusAbil.MP + g_BonusAbilChg.MP) div g_BonusTick.MP)));


  10807.     TextOut(L + 0, m + 140, IntToStr(g_nMyHitPoint + (g_BonusAbil.Hit + g_BonusAbilChg.Hit) div g_BonusTick.Hit));
  10808.     TextOut(L + 0, m + 160, IntToStr(g_nMySpeedPoint + (g_BonusAbil.Speed + g_BonusAbilChg.Speed) div g_BonusTick.Speed));

  10809.     TextOut(L + 0, m + 180, IntToStr(g_nBonusPoint), clyellow);

  10810.     c := clWhite;
  10811.     L := DAdjustAbility.SurfaceX(DAdjustAbility.Left) + 155; //66;
  10812.     m := DAdjustAbility.SurfaceY(DAdjustAbility.Top) + 101;

  10813.     if g_BonusAbilChg.DC > 0 then c := clWhite
  10814.     else c := clSilver;
  10815.     TextOut(L + 0, m + 0, IntToStr(g_BonusAbilChg.DC + g_BonusAbil.DC) + '/' + IntToStr(g_BonusTick.DC), c);

  10816.     if g_BonusAbilChg.MC > 0 then c := clWhite
  10817.     else c := clSilver;
  10818.     TextOut(L + 0, m + 20, IntToStr(g_BonusAbilChg.MC + g_BonusAbil.MC) + '/' + IntToStr(g_BonusTick.MC), c);

  10819.     if g_BonusAbilChg.SC > 0 then c := clWhite
  10820.     else c := clSilver;
  10821.     TextOut(L + 0, m + 40, IntToStr(g_BonusAbilChg.SC + g_BonusAbil.SC) + '/' + IntToStr(g_BonusTick.SC), c);

  10822.     if g_BonusAbilChg.AC > 0 then c := clWhite
  10823.     else c := clSilver;
  10824.     TextOut(L + 0, m + 60, IntToStr(g_BonusAbilChg.AC + g_BonusAbil.AC) + '/' + IntToStr(g_BonusTick.AC), c);

  10825.     if g_BonusAbilChg.MAC > 0 then c := clWhite
  10826.     else c := clSilver;
  10827.     TextOut(L + 0, m + 80, IntToStr(g_BonusAbilChg.MAC + g_BonusAbil.MAC) + '/' + IntToStr(g_BonusTick.MAC), c);

  10828.     if g_BonusAbilChg.HP > 0 then c := clWhite
  10829.     else c := clSilver;
  10830.     TextOut(L + 0, m + 100, IntToStr(MinLong(g_ServerConfig.nMaxLevel, g_BonusAbilChg.HP + g_BonusAbil.HP)) + '/' + IntToStr(g_BonusTick.HP), c);

  10831.     if g_BonusAbilChg.MP > 0 then c := clWhite
  10832.     else c := clSilver;
  10833.     TextOut(L + 0, m + 120, IntToStr(MinLong(g_ServerConfig.nMaxLevel, g_BonusAbilChg.MP + g_BonusAbil.MP)) + '/' + IntToStr(g_BonusTick.MP), c);

  10834.     if g_BonusAbilChg.Hit > 0 then c := clWhite
  10835.     else c := clSilver;
  10836.     TextOut(L + 0, m + 140, IntToStr(g_BonusAbilChg.Hit + g_BonusAbil.Hit) + '/' + IntToStr(g_BonusTick.Hit), c);

  10837.     if g_BonusAbilChg.Speed > 0 then c := clWhite
  10838.     else c := clSilver;
  10839.     TextOut(L + 0, m + 160, IntToStr(g_BonusAbilChg.Speed + g_BonusAbil.Speed) + '/' + IntToStr(g_BonusTick.Speed), c);
  10840.   end;

  10841. end;

  10842. procedure TFrmDlg.DPlusDCClick(Sender: TObject; X, Y: Integer);
  10843. var
  10844.   incp, nValue: Integer;
  10845. begin
  10846.   //if g_MySelf = nil then Exit;
  10847.   incp := Str_ToInt(DEditAdjustIncrement.Text, -1);
  10848.   if incp <= 0 then incp := 1;
  10849.   if incp > g_nBonusPoint then incp := g_nBonusPoint;

  10850.   if g_nBonusPoint > 0 then begin
  10851.    { if IsKeyPressed(VK_CONTROL) and (g_nBonusPoint > 10) then incp := 10
  10852.     else incp := 1;
  10853.     }
  10854.     if Sender = DPlusDC then begin
  10855.       if g_BonusAbilChg.DC + g_BonusAbil.DC < High(Word) then begin
  10856.         if g_BonusAbilChg.DC + g_BonusAbil.DC + incp <= High(Word) then begin
  10857.           Inc(g_BonusAbilChg.DC, incp);
  10858.           Dec(g_nBonusPoint, incp);
  10859.         end else begin
  10860.           nValue := _MIN(High(Word) - g_BonusAbilChg.DC - g_BonusAbil.DC, 0);
  10861.           Inc(g_BonusAbilChg.DC, nValue);
  10862.           Dec(g_nBonusPoint, nValue);
  10863.         end;
  10864.       end;
  10865.     end else
  10866.       if Sender = DPlusMC then begin
  10867.       if g_BonusAbilChg.MC + g_BonusAbil.MC < High(Word) then begin
  10868.         if g_BonusAbilChg.MC + g_BonusAbil.MC + incp <= High(Word) then begin
  10869.           Inc(g_BonusAbilChg.MC, incp);
  10870.           Dec(g_nBonusPoint, incp);
  10871.         end else begin
  10872.           nValue := _MIN(High(Word) - g_BonusAbilChg.MC - g_BonusAbil.MC, 0);
  10873.           Inc(g_BonusAbilChg.MC, nValue);
  10874.           Dec(g_nBonusPoint, nValue);
  10875.         end;
  10876.       end
  10877.     end else
  10878.       if Sender = DPlusSC then begin
  10879.       if g_BonusAbilChg.SC + g_BonusAbil.SC < High(Word) then begin
  10880.         if g_BonusAbilChg.SC + g_BonusAbil.SC + incp <= High(Word) then begin
  10881.           Inc(g_BonusAbilChg.SC, incp);
  10882.           Dec(g_nBonusPoint, incp);
  10883.         end else begin
  10884.           nValue := _MIN(High(Word) - g_BonusAbilChg.SC - g_BonusAbil.SC, 0);
  10885.           Inc(g_BonusAbilChg.SC, nValue);
  10886.           Dec(g_nBonusPoint, nValue);
  10887.         end;
  10888.       end;
  10889.     end else
  10890.       if Sender = DPlusAC then begin
  10891.       if g_BonusAbilChg.AC + g_BonusAbil.AC < High(Word) then begin
  10892.         if g_BonusAbilChg.AC + g_BonusAbil.AC + incp <= High(Word) then begin
  10893.           Inc(g_BonusAbilChg.AC, incp);
  10894.           Dec(g_nBonusPoint, incp);
  10895.         end else begin
  10896.           nValue := _MIN(High(Word) - g_BonusAbilChg.AC - g_BonusAbil.AC, 0);
  10897.           Inc(g_BonusAbilChg.AC, nValue);
  10898.           Dec(g_nBonusPoint, nValue);
  10899.         end;
  10900.       end;
  10901.     end else
  10902.       if Sender = DPlusMAC then begin
  10903.       if g_BonusAbilChg.MAC + g_BonusAbil.MAC < High(Word) then begin
  10904.         if g_BonusAbilChg.MAC + g_BonusAbil.MAC + incp <= High(Word) then begin
  10905.           Inc(g_BonusAbilChg.MAC, incp);
  10906.           Dec(g_nBonusPoint, incp);
  10907.         end else begin
  10908.           nValue := _MIN(High(Word) - g_BonusAbilChg.MAC - g_BonusAbil.MAC, 0);
  10909.           Inc(g_BonusAbilChg.MAC, nValue);
  10910.           Dec(g_nBonusPoint, nValue);
  10911.         end;
  10912.       end;
  10913.     end else
  10914.       if Sender = DPlusHP then begin
  10915.       if g_BonusAbilChg.HP + g_BonusAbil.HP < High(Word) then begin
  10916.         if g_BonusAbilChg.HP + g_BonusAbil.HP + incp <= High(Word) then begin
  10917.           Inc(g_BonusAbilChg.HP, incp);
  10918.           Dec(g_nBonusPoint, incp);
  10919.         end else begin
  10920.           nValue := _MIN(High(Word) - g_BonusAbilChg.HP - g_BonusAbil.HP, 0);
  10921.           Inc(g_BonusAbilChg.HP, nValue);
  10922.           Dec(g_nBonusPoint, nValue);
  10923.         end;
  10924.       end;
  10925.     end else
  10926.       if Sender = DPlusMP then begin
  10927.       if g_BonusAbilChg.MP + g_BonusAbil.MP < High(Word) then begin
  10928.         if g_BonusAbilChg.MP + g_BonusAbil.MP + incp <= High(Word) then begin
  10929.           Inc(g_BonusAbilChg.MP, incp);
  10930.           Dec(g_nBonusPoint, incp);
  10931.         end else begin
  10932.           nValue := _MIN(High(Word) - g_BonusAbilChg.MP - g_BonusAbil.MP, 0);
  10933.           Inc(g_BonusAbilChg.MP, nValue);
  10934.           Dec(g_nBonusPoint, nValue);
  10935.         end;
  10936.       end;
  10937.     end else
  10938.       if Sender = DPlusHit then begin
  10939.       if g_BonusAbilChg.Hit + g_BonusAbil.Hit < High(Word) then begin
  10940.         if g_BonusAbilChg.Hit + g_BonusAbil.Hit + incp <= High(Word) then begin
  10941.           Inc(g_BonusAbilChg.Hit, incp);
  10942.           Dec(g_nBonusPoint, incp);
  10943.         end else begin
  10944.           nValue := _MIN(High(Word) - g_BonusAbilChg.Hit - g_BonusAbil.Hit, 0);
  10945.           Inc(g_BonusAbilChg.Hit, nValue);
  10946.           Dec(g_nBonusPoint, nValue);
  10947.         end;
  10948.       end;
  10949.     end else
  10950.       if Sender = DPlusSpeed then begin
  10951.       if g_BonusAbilChg.Speed + g_BonusAbil.Speed < High(Word) then begin
  10952.         if g_BonusAbilChg.Speed + g_BonusAbil.Speed + incp <= High(Word) then begin
  10953.           Inc(g_BonusAbilChg.Speed, incp);
  10954.           Dec(g_nBonusPoint, incp);
  10955.         end else begin
  10956.           nValue := _MIN(High(Word) - g_BonusAbilChg.Speed - g_BonusAbil.Speed, 0);
  10957.           Inc(g_BonusAbilChg.Speed, nValue);
  10958.           Dec(g_nBonusPoint, nValue);
  10959.         end;
  10960.       end;
  10961.     end;
  10962.   end;
  10963. end;

  10964. procedure TFrmDlg.DMinusDCClick(Sender: TObject; X, Y: Integer);
  10965. var
  10966.   decp: Integer;
  10967. begin
  10968. { if IsKeyPressed(VK_CONTROL) and (g_nBonusPoint - 10 > 0) then decp := 10
  10969.   else decp := 1;
  10970.   }
  10971.   decp := Str_ToInt(DEditAdjustIncrement.Text, -1);
  10972.   if decp <= 0 then decp := 1;

  10973.   if Sender = DMinusDC then begin
  10974.     if decp > g_BonusAbilChg.DC then decp := g_BonusAbilChg.DC;
  10975.     if g_BonusAbilChg.DC >= decp then begin
  10976.       Dec(g_BonusAbilChg.DC, decp);
  10977.       Inc(g_nBonusPoint, decp);
  10978.     end;
  10979.   end else
  10980.     if Sender = DMinusMC then begin
  10981.     if decp > g_BonusAbilChg.MC then decp := g_BonusAbilChg.MC;
  10982.     if g_BonusAbilChg.MC >= decp then begin
  10983.       Dec(g_BonusAbilChg.MC, decp);
  10984.       Inc(g_nBonusPoint, decp);
  10985.     end;
  10986.   end else
  10987.     if Sender = DMinusSC then begin
  10988.     if decp > g_BonusAbilChg.SC then decp := g_BonusAbilChg.SC;
  10989.     if g_BonusAbilChg.SC >= decp then begin
  10990.       Dec(g_BonusAbilChg.SC, decp);
  10991.       Inc(g_nBonusPoint, decp);
  10992.     end;
  10993.   end else
  10994.     if Sender = DMinusAC then begin
  10995.     if decp > g_BonusAbilChg.AC then decp := g_BonusAbilChg.AC;
  10996.     if g_BonusAbilChg.AC >= decp then begin
  10997.       Dec(g_BonusAbilChg.AC, decp);
  10998.       Inc(g_nBonusPoint, decp);
  10999.     end;
  11000.   end else
  11001.     if Sender = DMinusMAC then begin
  11002.     if decp > g_BonusAbilChg.MAC then decp := g_BonusAbilChg.MAC;
  11003.     if g_BonusAbilChg.MAC >= decp then begin
  11004.       Dec(g_BonusAbilChg.MAC, decp);
  11005.       Inc(g_nBonusPoint, decp);
  11006.     end;
  11007.   end else
  11008.     if Sender = DMinusHP then begin
  11009.     if decp > g_BonusAbilChg.HP then decp := g_BonusAbilChg.HP;
  11010.     if g_BonusAbilChg.HP >= decp then begin
  11011.       Dec(g_BonusAbilChg.HP, decp);
  11012.       Inc(g_nBonusPoint, decp);
  11013.     end;
  11014.   end else
  11015.     if Sender = DMinusMP then begin
  11016.     if decp > g_BonusAbilChg.MP then decp := g_BonusAbilChg.MP;
  11017.     if g_BonusAbilChg.MP >= decp then begin
  11018.       Dec(g_BonusAbilChg.MP, decp);
  11019.       Inc(g_nBonusPoint, decp);
  11020.     end;
  11021.   end else
  11022.     if Sender = DMinusHit then begin
  11023.     if decp > g_BonusAbilChg.Hit then decp := g_BonusAbilChg.Hit;
  11024.     if g_BonusAbilChg.Hit >= decp then begin
  11025.       Dec(g_BonusAbilChg.Hit, decp);
  11026.       Inc(g_nBonusPoint, decp);
  11027.     end;
  11028.   end else
  11029.     if Sender = DMinusSpeed then begin
  11030.     if decp > g_BonusAbilChg.Speed then decp := g_BonusAbilChg.Speed;
  11031.     if g_BonusAbilChg.Speed >= decp then begin
  11032.       Dec(g_BonusAbilChg.Speed, decp);
  11033.       Inc(g_nBonusPoint, decp);
  11034.     end;
  11035.   end;
  11036. end;

  11037. procedure TFrmDlg.DAdjustAbilOkClick(Sender: TObject; X, Y: Integer);
  11038. begin
  11039.   frmMain.SendAdjustBonus(g_nBonusPoint, g_BonusAbilChg);
  11040.   DAdjustAbility.Visible := False;
  11041. end;

  11042. procedure TFrmDlg.DAdjustAbilityMouseMove(Sender: TObject;
  11043.   Shift: TShiftState; X, Y: Integer);
  11044. var
  11045.   I, lx, ly: Integer;
  11046.   flag: Boolean;
  11047. begin
  11048.   with DAdjustAbility do begin
  11049.     lx := LocalX(X - Left);
  11050.     ly := LocalY(Y - Top);
  11051.     flag := False;
  11052.     if (lx >= 50) and (lx < 150) then
  11053.       for I := 0 to 8 do begin //DC,MC,SC..狼 腮飘啊 唱坷霸 茄促.
  11054.         if (ly >= 98 + I * 20) and (ly < 98 + (I + 1) * 20) then begin
  11055.           DScreen.ShowHint(SurfaceX(Left) + lx + 10,
  11056.             SurfaceY(Top) + ly + 5,
  11057.             AdjustAbilHints[I],
  11058.             clWhite,
  11059.             False);
  11060.           flag := True;
  11061.           Break;
  11062.         end;
  11063.       end;
  11064.     if not flag then
  11065.       DScreen.ClearHint;
  11066.   end;
  11067. end;

  11068. procedure TFrmDlg.DBotMouseMove(Sender: TObject; Shift: TShiftState;
  11069.   X, Y: Integer);
  11070. var
  11071.   nLocalX, nLocalY: Integer;
  11072.   nHintX, nHintY: Integer;
  11073.   Butt: TDButton;
  11074.   sMsg: string;
  11075. begin
  11076.   DScreen.ClearHint;
  11077.   Butt := TDButton(Sender);
  11078.   nHintX := Butt.SurfaceX(Butt.Left);
  11079.   if g_ConfigClient.btMainInterface in [0, 2] then begin
  11080.     nHintY := DBottom.Top + Butt.Top - 20;
  11081.   end else begin
  11082.     nHintY := DBottom.Top + Butt.Top - 25;
  11083.     if (Sender = DBotMiniMap) or (Sender = DOnHouser) or (Sender = DBotTrade)
  11084.       or (Sender = DBotGuild) or (Sender = DButtonFriend) or (Sender = DRanking)
  11085.       or (Sender = DVoice) or (Sender = DBotGroup) or (Sender = DButOther) then
  11086.       nHintY := DBottom.SurfaceY(Butt.Top) - 25;
  11087.     if (Sender = DButtonHeroState) or (Sender = DButtonHeroBag) then
  11088.       nHintY := DBottom.SurfaceY(Butt.Top) + 30;
  11089.   end;
  11090.   if Sender = DBotMiniMap then sMsg := '小地图(Tab)';
  11091.   if Sender = DBotTrade then sMsg := '交易(T)';
  11092.   if Sender = DBotGuild then sMsg := '行会(G)';
  11093.   if Sender = DBotGroup then sMsg := '编组(P)';
  11094.   if Sender = DBotPlusAbil then sMsg := '属性(M)';
  11095.   if Sender = DBotLogout then sMsg := '退出角色Alt-X';
  11096.   if Sender = DBotExit then sMsg := '退出游戏Alt-Q';
  11097.   if Sender = DMyState then sMsg := '状态(F10)';
  11098.   if Sender = DMyBag then sMsg := '包裹(F9)';
  11099.   if Sender = DMyMagic then sMsg := '技能(F11)';
  11100.   if Sender = DVoice then sMsg := '声效';
  11101.   if Sender = DButtonShop then sMsg := '商铺';
  11102.   if Sender = DButtonFriend then sMsg := '关系系统';
  11103.   if (Sender = DButtonDuel) or (Sender = DButOther) then sMsg := '挑战';
  11104.   if Sender = DRanking then sMsg := '人物排行';
  11105.   if Sender = DButtonReCallHero then sMsg := '召唤英雄';
  11106.   if Sender = DButtonHeroState then sMsg := '英雄状态信息';
  11107.   if Sender = DButtonHeroBag then sMsg := '英雄包裹';

  11108.   //if (g_MySelf.m_btHorse > 0) and (g_NewStatus > sNone) then Exit;
  11109.   if Sender = DOnHouser then sMsg := '骑马(CTRL+M)';
  11110.   if Sender = DHelp then sMsg := '摆摊';
  11111.   if Sender = DPlayTool then sMsg := '影音播放器(Alt + P)';

  11112.   DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite {clYellow}, False);
  11113.   if g_ConfigClient.btMainInterface in [0, 2] then begin
  11114.     nHintX := Butt.Left - 100;
  11115.     nHintY := DBottom.Top + Butt.Top;
  11116.   end else begin
  11117.     nHintX := Butt.SurfaceX(Butt.Left);
  11118.     nHintY := Butt.SurfaceY(Butt.Top) - 20;
  11119.   end;

  11120.   if Sender = DButFunc1 then begin
  11121.     if DButFunc1.Downed then sMsg := '允许所有公聊信息' else sMsg := '拒绝所有公聊信息';
  11122.     DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite {clYellow}, False);
  11123.   end;
  11124.   if Sender = DButFunc2 then begin
  11125.     if DButFunc2.Downed then sMsg := '允许所有喊话信息' else sMsg := '拒绝所有喊话信息';
  11126.     DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite {clYellow}, False);
  11127.   end;
  11128.   if Sender = DButFunc3 then begin
  11129.     if DButFunc3.Downed then sMsg := '允许所有私聊信息' else sMsg := '拒绝所有私聊信息';
  11130.     DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite {clYellow}, False);
  11131.   end;
  11132.   if Sender = DButFunc4 then begin
  11133.     if DButFunc4.Downed then sMsg := '允许行会聊天信息' else sMsg := '拒绝行会聊天信息';
  11134.     DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite {clYellow}, False);
  11135.   end;
  11136.   if Sender = DButFunc5 then begin
  11137.     sMsg := '自动喊话开关';
  11138.     DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite {clYellow}, False);
  11139.   end;
  11140.   {nLocalX := Butt.LocalX(X - Butt.Left);
  11141.   nLocalY := Butt.LocalY(Y - Butt.Top);
  11142.   nHintX := Butt.SurfaceX(Butt.Left) + DBottom.SurfaceX(DBottom.Left) + nLocalX;
  11143.   nHintY := Butt.SurfaceY(Butt.Top) + DBottom.SurfaceY(DBottom.Top) + nLocalY; }
  11144. end;

  11145. procedure TFrmDlg.SetButVisible(Value: Boolean);
  11146. begin
  11147.   DBotMiniMap.Visible := Value;
  11148.   DOnHouser.Visible := Value;
  11149.   DBotTrade.Visible := Value;
  11150.   DBotGuild.Visible := Value;
  11151.   DButtonFriend.Visible := Value;
  11152.   DRanking.Visible := Value;
  11153.   DVoice.Visible := Value;
  11154.   DButOther.Visible := Value;
  11155.   if (g_ConfigClient.btMainInterface = 1) then
  11156.     DBotPlusAbil.Visible := (g_nBonusPoint > 0) and Value;
  11157.   DBotGroup.Visible := Value;
  11158. end;


  11159. procedure TFrmDlg.OpenFriendDlg();
  11160. begin

  11161. end;

  11162. procedure TFrmDlg.DChgGamePwdCloseClick(Sender: TObject; X, Y: Integer);
  11163. begin
  11164.   DChgGamePwd.Visible := False;
  11165. end;

  11166. procedure TFrmDlg.DChgGamePwdDirectPaint(Sender: TObject;
  11167.   dsurface: TTexture);
  11168. var
  11169.   d: TTexture;
  11170.   lx, ly, sx: Integer;
  11171. begin
  11172.   with Sender as TDWindow do begin
  11173.     d := nil;
  11174.     if WLib <> nil then
  11175.       d := WLib.Images[FaceIndex];
  11176.     if d <> nil then
  11177.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  11178.     with dsurface do begin
  11179.       BoldTextOut(SurfaceX(Left + 15), SurfaceY(Top + 13), g_sGameGoldName);

  11180.       MainForm.Canvas.Font.Style := MainForm.Canvas.Font.Style + [fsUnderline];
  11181.       BoldTextOut(SurfaceX(Left + 12), SurfaceY(Top + 190), g_sGamePointName);
  11182.       MainForm.Canvas.Font.Style := MainForm.Canvas.Font.Style - [fsUnderline];
  11183.     end;
  11184.   end;
  11185. end;

  11186. procedure TFrmDlg.DButtonShopDirectPaint(Sender: TObject;
  11187.   dsurface: TTexture);
  11188. var
  11189.   d: TDButton;
  11190.   dd: TTexture;
  11191. begin
  11192.   if Sender is TDButton then begin
  11193.     d := TDButton(Sender);
  11194.     //d.DrawQuad(dsurface, Bounds(d.SurfaceX(d.Left), d.SurfaceY(d.Top), d.Width, d.Height), clRed, False, 150);
  11195.     if d.Downed then begin
  11196.       dd := nil;
  11197.       if d.WLib <> nil then
  11198.         dd := d.WLib.Images[d.FaceIndex];
  11199.       if dd <> nil then
  11200.         dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, g_ConfigClient.btMainInterface in [0, 2]);
  11201.     end;
  11202.   end;
  11203. end;

  11204. procedure TFrmDlg.DShopDirectPaint(Sender: TObject;
  11205.   dsurface: TTexture);
  11206. var
  11207.   d: TTexture;
  11208.   iname, d1, d2, d3: string;
  11209.   useable: Boolean;
  11210.   I, old, nIndex, n: Integer;
  11211.   sMemo: string;
  11212.   TempList: TStringList;
  11213.   StringArray: array[0..9] of string[24];
  11214.   c: TColor;
  11215. begin
  11216.   with DShop do begin
  11217.     d := nil;
  11218.     if WLib <> nil then
  11219.       d := WLib.Images[FaceIndex];
  11220.     if d <> nil then
  11221.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  11222.   end;
  11223.   if g_MouseShopItems.ShopItem.StdItem.Name <> '' then begin
  11224.     sMemo := g_MouseShopItems.ShopItem.sMemo2;
  11225.     if sMemo = '' then begin
  11226.       g_MouseItem.s := g_MouseShopItems.ShopItem.StdItem;
  11227.       g_MouseItem.DuraMax := g_MouseItem.s.DuraMax;
  11228.       g_MouseItem.Dura := g_MouseItem.s.DuraMax;
  11229.       {TempList := TStringList.Create;
  11230.       GetMouseItemInfo(TempList);
  11231.       }
  11232.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  11233.       TempList := HintList;
  11234.       g_MouseItem.s.Name := '';
  11235.       if TempList.Count > 0 then begin
  11236.         with dsurface do begin
  11237.           old := MainForm.Canvas.Font.Size;
  11238.           MainForm.Canvas.Font.Size := 9;
  11239.           nIndex := 0;
  11240.           n := 1;
  11241.           if TempList.Count >= 5 then begin
  11242.             TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) - TextHeight('A')), TempList.Strings[0], clyellow);
  11243.             for I := 1 to TempList.Count - 2 do begin
  11244.               if nIndex = 0 then begin
  11245.                 TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) * n), TempList.Strings[I], TColor(TempList.Objects[I]));
  11246.                 Inc(nIndex);
  11247.               end else begin
  11248.                 TextOut(DShop.SurfaceX(DShop.Left + 20) + TextWidth('A') + TextWidth(TempList.Strings[I - 1]), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) * n), TempList.Strings[I], TColor(TempList.Objects[I]));
  11249.                 nIndex := 0;
  11250.                 Inc(n);
  11251.               end
  11252.             end;
  11253.             if nIndex <> 0 then Inc(n);
  11254.             TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) * n), TempList.Strings[TempList.Count - 1], TColor(TempList.Objects[TempList.Count - 1]));
  11255.           end else begin
  11256.             for I := 0 to TempList.Count - 1 do begin
  11257.               if I = 0 then c := clyellow
  11258.               else c := TColor(TempList.Objects[I]);
  11259.               TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) * n - TextHeight('A')), TempList.Strings[I], c);
  11260.               Inc(n);
  11261.             end;
  11262.           end;
  11263.           MainForm.Canvas.Font.Size := old;
  11264.         end;
  11265.       end;
  11266.       //TempList.Free;
  11267.     end else begin
  11268.       nIndex := 0;
  11269.       SafeFillChar(StringArray, SizeOf(StringArray), #0);
  11270.       TempList := TStringList.Create;
  11271.       ExtractStrings(['\'], [], PChar(sMemo), TempList);
  11272.       for nIndex := 0 to TempList.Count - 1 do begin
  11273.         if nIndex > 9 then Break;
  11274.         StringArray[nIndex] := TempList.Strings[nIndex];
  11275.       end;
  11276.       TempList.Free;

  11277.       with dsurface do begin
  11278.         old := MainForm.Canvas.Font.Size;
  11279.         MainForm.Canvas.Font.Size := 9;
  11280.         c := clyellow;
  11281.         TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150), '★' + g_MouseShopItems.ShopItem.StdItem.Name, c);
  11282.         c := clWhite;
  11283.         n := 0;
  11284.         for nIndex := Low(StringArray) to High(StringArray) do begin
  11285.           if StringArray[nIndex] <> '' then begin
  11286.             if n = 0 then
  11287.               TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + TextHeight('A') + 2), StringArray[nIndex], c);
  11288.             if n > 0 then
  11289.               TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) * n) + TextHeight('A'), StringArray[nIndex], c);
  11290.             Inc(n);
  11291.           end;
  11292.         end;
  11293.         Inc(n);
  11294.         c := clyellow;
  11295.         if g_MouseShopItems.ShopItem.StdItem.AddValue[0] = 0 then begin
  11296.           TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) * n), '到期时间: 永久使用', c);
  11297.         end else begin
  11298.           TextOut(DShop.SurfaceX(DShop.Left + 20), DShop.SurfaceY(DShop.Top + DShop.Height - 150 + (TextHeight('A') + 2) * n), '到期时间: ' + DateToStr(g_MouseShopItems.ShopItem.StdItem.MaxDate), c);
  11299.         end;
  11300.         MainForm.Canvas.Font.Size := old;
  11301.       end;
  11302.     end;
  11303.   end;
  11304. end;

  11305. procedure TFrmDlg.DJewelryDirectPaint(Sender: TObject;
  11306.   dsurface: TTexture);
  11307. var
  11308.   d: TDButton;
  11309.   dd: TTexture;
  11310. begin
  11311.   if Sender is TDButton then begin
  11312.     d := TDButton(Sender);
  11313.     if d.Downed then begin
  11314.       dd := nil;
  11315.       if d.WLib <> nil then
  11316.         dd := d.WLib.Images[d.FaceIndex];
  11317.       if dd <> nil then
  11318.         dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  11319.     end;
  11320.   end;
  11321. end;

  11322. procedure TFrmDlg.DShopExitClick(Sender: TObject; X, Y: Integer);
  11323. begin
  11324.   DShop.Visible := False;
  11325. end;

  11326. procedure TFrmDlg.ChgShopSelButton(nType: Integer);
  11327. begin
  11328.   case nType of
  11329.     0: begin
  11330.         DJewelry.Downed := True;
  11331.         DMedicine.Downed := False;
  11332.         DEnhance.Downed := False;
  11333.         Dfriend.Downed := False;
  11334.         DLimit.Downed := False;
  11335.       end;
  11336.     1: begin
  11337.         DJewelry.Downed := False;
  11338.         DMedicine.Downed := True;
  11339.         DEnhance.Downed := False;
  11340.         Dfriend.Downed := False;
  11341.         DLimit.Downed := False;
  11342.       end;
  11343.     2: begin
  11344.         DJewelry.Downed := False;
  11345.         DMedicine.Downed := False;
  11346.         DEnhance.Downed := True;
  11347.         Dfriend.Downed := False;
  11348.         DLimit.Downed := False;
  11349.       end;
  11350.     3: begin
  11351.         DJewelry.Downed := False;
  11352.         DMedicine.Downed := False;
  11353.         DEnhance.Downed := False;
  11354.         Dfriend.Downed := True;
  11355.         DLimit.Downed := False;
  11356.       end;
  11357.     4: begin
  11358.         DJewelry.Downed := False;
  11359.         DMedicine.Downed := False;
  11360.         DEnhance.Downed := False;
  11361.         Dfriend.Downed := False;
  11362.         DLimit.Downed := True;
  11363.       end;
  11364.   end;
  11365. end;

  11366. procedure TFrmDlg.DJewelryClick(Sender: TObject; X, Y: Integer);
  11367. begin
  11368.   ShopTabPage := 0;
  11369.   g_MouseShopItems.ShopItem.StdItem.Name := '';
  11370.   g_MouseShopItems.nPicturePosition := -1;
  11371.   g_MouseShopItems.dwPlaySpeedTick := GetTickCount;
  11372.   ChgShopSelButton(ShopTabPage);
  11373.   if g_ShopItems[ShopTabPage, 0].StdItem.Name = '' then begin
  11374.     frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  11375.   end;
  11376. end;

  11377. procedure TFrmDlg.DMedicineClick(Sender: TObject; X, Y: Integer);
  11378. begin
  11379.   ShopTabPage := 1;
  11380.   g_MouseShopItems.ShopItem.StdItem.Name := '';
  11381.   g_MouseShopItems.nPicturePosition := -1;
  11382.   g_MouseShopItems.dwPlaySpeedTick := GetTickCount;
  11383.   ChgShopSelButton(ShopTabPage);
  11384.   if g_ShopItems[ShopTabPage, 0].StdItem.Name = '' then begin
  11385.     frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  11386.   end;
  11387. end;

  11388. procedure TFrmDlg.DEnhanceClick(Sender: TObject; X, Y: Integer);
  11389. begin
  11390.   ShopTabPage := 2;
  11391.   g_MouseShopItems.ShopItem.StdItem.Name := '';
  11392.   g_MouseShopItems.nPicturePosition := -1;
  11393.   g_MouseShopItems.dwPlaySpeedTick := GetTickCount;
  11394.   ChgShopSelButton(ShopTabPage);
  11395.   if g_ShopItems[ShopTabPage, 0].StdItem.Name = '' then begin
  11396.     frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  11397.   end;
  11398. end;

  11399. procedure TFrmDlg.DfriendClick(Sender: TObject; X, Y: Integer);
  11400. begin
  11401.   ShopTabPage := 3;
  11402.   g_MouseShopItems.ShopItem.StdItem.Name := '';
  11403.   g_MouseShopItems.nPicturePosition := -1;
  11404.   g_MouseShopItems.dwPlaySpeedTick := GetTickCount;
  11405.   ChgShopSelButton(ShopTabPage);
  11406.   if g_ShopItems[ShopTabPage, 0].StdItem.Name = '' then begin
  11407.     frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  11408.   end;
  11409. end;

  11410. procedure TFrmDlg.DLimitClick(Sender: TObject; X, Y: Integer);
  11411. begin
  11412.   ShopTabPage := 4;
  11413.   g_MouseShopItems.ShopItem.StdItem.Name := '';
  11414.   g_MouseShopItems.nPicturePosition := -1;
  11415.   g_MouseShopItems.dwPlaySpeedTick := GetTickCount;
  11416.   ChgShopSelButton(ShopTabPage);
  11417.   if g_ShopItems[ShopTabPage, 0].StdItem.Name = '' then begin
  11418.     frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  11419.   end;
  11420. end;

  11421. procedure TFrmDlg.DBottomMouseMove(Sender: TObject; Shift: TShiftState; X,
  11422.   Y: Integer);
  11423. var
  11424.   sStr: string;
  11425. begin
  11426.   if g_ConfigClient.btMainInterface in [0, 2] then begin
  11427.     if (X >= DBottom.Left + 666) and (Y >= SCREENHEIGHT - 73) and
  11428.       (X <= DBottom.Left + 730) and (Y <= SCREENHEIGHT - 73 + 13) then begin
  11429.       if g_MySelf.m_Abil.MaxExp > 0 then begin
  11430.         sStr := '当前经验' + FloatToStrFixFmt(100 * g_MySelf.m_Abil.Exp / g_MySelf.m_Abil.MaxExp, 3, 2) + '%\';
  11431.         DScreen.ShowHint(DBottom.Left + 666, SCREENHEIGHT - 73 + 13, sStr, clWhite, False);
  11432.       end;
  11433.     end else
  11434.       if (X >= DBottom.Left + 666) and (X <= DBottom.Left + 730) and
  11435.       (Y >= SCREENHEIGHT - 40) and (Y <= SCREENHEIGHT - 40 + 13) then begin
  11436.       sStr := '包裹负重' + IntToStr(g_MySelf.m_Abil.Weight) + '/' + IntToStr(g_MySelf.m_Abil.MaxWeight);
  11437.       DScreen.ShowHint(DBottom.Left + 666, SCREENHEIGHT - 40 + 13, sStr, clWhite, False);
  11438.     end else begin
  11439.       DScreen.ClearHint;
  11440.     end;
  11441.   end else begin
  11442.     if (Y >= SCREENHEIGHT - 8) and (Y <= SCREENHEIGHT) then begin
  11443.       if EdChat.Visible then begin
  11444.         if (X >= EdChat.SurfaceX(EdChat.Left)) and (X <= EdChat.SurfaceX(EdChat.Left) + EdChat.Width) then begin
  11445.           DScreen.ClearHint;
  11446.           Exit;
  11447.         end;
  11448.       end;
  11449.       if g_MySelf.m_Abil.MaxExp > 0 then begin
  11450.         sStr := '当前经验' + FloatToStrFixFmt(100 * g_MySelf.m_Abil.Exp / g_MySelf.m_Abil.MaxExp, 3, 2) + '%\';
  11451.         DScreen.ShowHint(X, SCREENHEIGHT, sStr, clWhite, True);
  11452.       end;
  11453.     end else
  11454.       DScreen.ClearHint;
  11455.   end;
  11456. end;

  11457. procedure TFrmDlg.OpenShopDlg;
  11458. begin
  11459.   if not DShop.Visible then begin
  11460.     DShop.Visible := True;
  11461.   end;
  11462. end;

  11463. procedure TFrmDlg.DShopIntroduceDirectPaint(Sender: TObject;
  11464.   dsurface: TTexture);
  11465. var
  11466.   nIdx: Integer;
  11467.   d: TTexture;
  11468. begin
  11469.   nIdx := -1;
  11470.   if g_MouseShopItems.ShopItem.StdItem.Name <> '' then begin
  11471.     if g_MouseShopItems.ShopItem.nBeginIdx = g_MouseShopItems.ShopItem.nEndIdx then begin
  11472.       nIdx := g_MouseShopItems.ShopItem.nBeginIdx;
  11473.     end else
  11474.       if g_MouseShopItems.ShopItem.nBeginIdx < g_MouseShopItems.ShopItem.nEndIdx then begin
  11475.       if g_MouseShopItems.nPicturePosition >= 0 then begin
  11476.         if GetTickCount > g_MouseShopItems.dwPlaySpeedTick then begin
  11477.           g_MouseShopItems.dwPlaySpeedTick := GetTickCount + 400;
  11478.           Inc(g_MouseShopItems.nPicturePosition);
  11479.         end;
  11480.         if g_MouseShopItems.nPicturePosition > g_MouseShopItems.ShopItem.nEndIdx then
  11481.           g_MouseShopItems.nPicturePosition := g_MouseShopItems.ShopItem.nBeginIdx;
  11482.         nIdx := g_MouseShopItems.nPicturePosition;
  11483.       end else begin
  11484.         g_MouseShopItems.nPicturePosition := g_MouseShopItems.ShopItem.nBeginIdx;
  11485.         nIdx := g_MouseShopItems.nPicturePosition;
  11486.         g_MouseShopItems.dwPlaySpeedTick := GetTickCount + 400;
  11487.       end;
  11488.     end;
  11489.   end;
  11490.   if nIdx = -1 then nIdx := 380;
  11491.   d := g_WEffectImg.Images[nIdx];
  11492.   if d <> nil then
  11493.     dsurface.Draw(DShopIntroduce.SurfaceX(DShopIntroduce.Left + (DShopIntroduce.Width - d.Width) div 2),
  11494.       DShopIntroduce.SurfaceY(DShopIntroduce.Top + (DShopIntroduce.Height - d.Height) div 2),
  11495.       d.ClientRect, d, True);
  11496. end;

  11497. procedure TFrmDlg.SuperShopItemPrev;
  11498. begin
  11499.   if ShopPage[5] > 0 then begin
  11500.     Dec(ShopPage[5]);
  11501.     g_MouseShopItems.ShopItem.StdItem.Name := '';
  11502.     g_MouseShopItems.nPicturePosition := -1;
  11503.     frmMain.SendShopDlg(ShopPage[5], 5, 5);
  11504.   end;
  11505. end;

  11506. procedure TFrmDlg.SuperShopItemNext;
  11507. begin
  11508.   if ShopPage[5] < ShopPageCount then begin
  11509.     Inc(ShopPage[5]);
  11510.     g_MouseShopItems.ShopItem.StdItem.Name := '';
  11511.     g_MouseShopItems.nPicturePosition := -1;
  11512.     frmMain.SendShopDlg(ShopPage[5], 5, 5);
  11513.   end;
  11514. end;

  11515. procedure TFrmDlg.DPrevShopClick(Sender: TObject; X, Y: Integer);
  11516. begin
  11517.   if GetTickCount > g_dwQueryMsgTick then begin
  11518.     g_dwQueryMsgTick := GetTickCount + 1000;
  11519.     SuperShopItemPrev;
  11520.     if ShopPage[ShopTabPage] > 0 then begin
  11521.       Dec(ShopPage[ShopTabPage]);
  11522.       if ShopPage[ShopTabPage] < 0 then ShopPage[ShopTabPage] := 0;
  11523.       g_MouseShopItems.ShopItem.StdItem.Name := '';
  11524.       g_MouseShopItems.nPicturePosition := -1;
  11525.       frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  11526.     end;
  11527.   end;
  11528. end;

  11529. procedure TFrmDlg.DNextShopClick(Sender: TObject; X, Y: Integer);
  11530. begin
  11531.   if GetTickCount > g_dwQueryMsgTick then begin
  11532.     g_dwQueryMsgTick := GetTickCount + 1000;
  11533.     SuperShopItemNext;
  11534.     if ShopPage[ShopTabPage] < ShopPageCount then begin
  11535.       Inc(ShopPage[ShopTabPage]);
  11536.       g_MouseShopItems.ShopItem.StdItem.Name := '';
  11537.       g_MouseShopItems.nPicturePosition := -1;
  11538.       frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  11539.     end;
  11540.   end;
  11541. end;

  11542. procedure TFrmDlg.DShopBuyClick(Sender: TObject; X, Y: Integer);
  11543. begin
  11544.   if g_MouseShopItems.ShopItem.StdItem.Name <> '' then begin
  11545.     if mrOk = DMessageDlg('是否确实购买 ' + g_MouseShopItems.ShopItem.StdItem.Name + ' ?', [mbOk, mbCancel]) then begin
  11546.       frmMain.SendBuyShopItem(g_MouseShopItems.ShopItem.StdItem.Name, g_MouseShopItems.ShopItem.btItemType);
  11547.     end;
  11548.   end;
  11549. end;

  11550. procedure TFrmDlg.DButtonReCallHeroDirectPaint(Sender: TObject;
  11551.   dsurface: TTexture);
  11552. var
  11553.   d: TDButton;
  11554.   dd: TTexture;
  11555. begin
  11556.   if Sender is TDButton then begin
  11557.     d := TDButton(Sender);
  11558.     if d.Downed then begin
  11559.       dd := d.WLib.Images[d.FaceIndex];
  11560.       if dd <> nil then
  11561.         dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  11562.     end;
  11563.   end;
  11564. end;

  11565. procedure TFrmDlg.DButFunc1DirectPaint(Sender: TObject;
  11566.   dsurface: TTexture);
  11567. var
  11568.   d: TDButton;
  11569.   dd: TTexture;
  11570. begin
  11571.   if Sender is TDButton then begin
  11572.     d := TDButton(Sender);
  11573.     if d.Downed then begin
  11574.       dd := d.WLib.Images[d.FaceIndex + 1];
  11575.     end else begin
  11576.       dd := d.WLib.Images[d.FaceIndex];
  11577.     end;
  11578.     if dd <> nil then
  11579.       dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, True);
  11580.   end;
  11581. end;

  11582. procedure TFrmDlg.DButFunc1Click(Sender: TObject; X, Y: Integer);
  11583. var
  11584.   d: TDButton;
  11585.   sMsg: string;
  11586. begin
  11587. { if Sender is TDButton then begin
  11588.     d := TDButton(Sender);
  11589.     if d <> nil then begin
  11590.       if d.Downed then begin
  11591.         Dec(d.FaceIndex)
  11592.       end else begin
  11593.         Inc(d.FaceIndex);
  11594.       end;
  11595.     end;
  11596.   end; }
  11597.   if Sender = DButFunc1 then begin
  11598.     g_boShowGroupMsg := not DButFunc1.Downed;
  11599.     if g_boShowGroupMsg then begin
  11600.       sMsg := '允许接受公聊信息';
  11601.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(255));
  11602.     end else begin
  11603.       sMsg := '拒绝接受公聊信息';
  11604.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(0));
  11605.     end;
  11606.   end else
  11607.     if Sender = DButFunc2 then begin
  11608.     g_boShowHearMsg := not DButFunc2.Downed;
  11609.     if g_boShowHearMsg then begin
  11610.       sMsg := '允许接受(黄色字体)喊话';
  11611.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(255));
  11612.     end else begin
  11613.       sMsg := '拒绝接受(黄色字体)喊话';
  11614.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(0));
  11615.     end;
  11616.   end else
  11617.     if Sender = DButFunc3 then begin
  11618.     g_boShowWhisperMsg := not DButFunc3.Downed;
  11619.     if g_boShowWhisperMsg then begin
  11620.       sMsg := '允许接受私聊信息';
  11621.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(255));
  11622.     end else begin
  11623.       sMsg := '拒绝接受私聊信息';
  11624.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(0));
  11625.     end;
  11626.   end else
  11627.     if Sender = DButFunc4 then begin
  11628.     g_boShowGuildMsg := not DButFunc4.Downed;
  11629.     if g_boShowGuildMsg then begin
  11630.       sMsg := '允许接受行会喊话信息';
  11631.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(255));
  11632.     end else begin
  11633.       sMsg := '拒绝接受行会喊话信息';
  11634.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(0));
  11635.     end;
  11636.   end else
  11637.     if Sender = DButFunc5 then begin
  11638.     g_boAutoShowHearMsg := not DButFunc5.Downed;
  11639.     if g_boAutoShowHearMsg then begin
  11640.       sMsg := '启用了自动喊话功能,聊天框中内容已记录为喊话内容';
  11641.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(255));
  11642.       g_dwAutoShowMsgTick := GetTickCount;
  11643.       g_sAutoShowMsg := EdChat.Text;
  11644.     end else begin
  11645.       sMsg := '自动喊话功能已关闭';
  11646.       DScreen.AddChatBoardString(sMsg, GetRGB(222), GetRGB(255));
  11647.     end;
  11648.   end;
  11649. end;

  11650. procedure TFrmDlg.DHeroHealthStateWinDirectPaint(Sender: TObject;
  11651.   dsurface: TTexture);
  11652. var
  11653.   d: TTexture;
  11654.   old: Integer;
  11655.   rc: TRect;
  11656.   OldColor: TColor;
  11657.   Idx: Integer;
  11658. begin
  11659.   if g_MyHero = nil then Exit;
  11660.   {case g_MyHero.m_btSex of
  11661.     0: begin
  11662.         if g_ConfigClient.btMainInterface in [0, 2] then begin
  11663.           case g_MyHero.m_btJob of
  11664.             0: idx := 365;
  11665.             1: idx := 366;
  11666.             2: idx := 367;
  11667.           end;
  11668.         end else begin
  11669.           case g_MyHero.m_btJob of
  11670.             0: idx := 136;
  11671.             1: idx := 137;
  11672.             2: idx := 138;
  11673.           end;
  11674.         end;
  11675.       end;
  11676.     1: begin
  11677.         if g_ConfigClient.btMainInterface in [0, 2] then begin
  11678.           case g_MyHero.m_btJob of
  11679.             0: idx := 368;
  11680.             1: idx := 369;
  11681.             2: idx := 370;
  11682.           end;
  11683.         end else begin
  11684.           case g_MyHero.m_btJob of
  11685.             0: idx := 139;
  11686.             1: idx := 140;
  11687.             2: idx := 141;
  11688.           end;
  11689.         end;
  11690.       end;
  11691.   end;
  11692.   d := nil;
  11693.   with DHeroHealthStateWin do begin
  11694.     if idx > 0 then begin
  11695.       if g_ConfigClient.btMainInterface in [0, 2] then begin
  11696.         d := g_WMain3Images.Images[idx];
  11697.         if d <> nil then begin
  11698.           if g_MyHero.m_boDeath then begin
  11699.             g_ImgMixSurface.SetSize(d.Width, d.Height);
  11700.             g_ImgMixSurface.Fill(0);
  11701.             g_ImgMixSurface.Draw(0, 0, d.ClientRect, d, False);
  11702.             DrawEffect(0, 0, g_ImgMixSurface, d, ceGrayScale);
  11703.             d := g_ImgMixSurface;
  11704.           end;

  11705.           dsurface.Draw(SurfaceX(Left) + 16,
  11706.             SurfaceY(Top) + 16,
  11707.             d.ClientRect, d, True);
  11708.         end;
  11709.       end else begin
  11710.         d := g_WCqFirImages.Images[idx];
  11711.         if d <> nil then begin
  11712.           if g_MyHero.m_boDeath then begin
  11713.             g_ImgMixSurface.SetSize(d.Width, d.Height);
  11714.             g_ImgMixSurface.Fill(0);
  11715.             g_ImgMixSurface.Draw(0, 0, d.ClientRect, d, False);
  11716.             DrawEffect(0, 0, g_ImgMixSurface, d, ceGrayScale);
  11717.             d := g_ImgMixSurface;
  11718.           end;
  11719.           //dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  11720.           dsurface.Draw(SurfaceX(Left) + 6,
  11721.             SurfaceY(Top) + 8,
  11722.             d.ClientRect, d, True);
  11723.         end;
  11724.       end;
  11725.     end;
  11726.     if g_ConfigClient.btMainInterface in [0, 2] then begin
  11727.     //显示英雄等级     clBtnFace
  11728.       with dsurface do begin
  11729.         TextOut(SurfaceX(Left) + 2, SurfaceY(Top) + 56, IntToStr(g_MyHero.m_Abil.Level), g_MyHero.m_nNameColor);
  11730.       end;
  11731.     end;
  11732.   end;  }

  11733.   if g_ConfigClient.btMainInterface in [0, 2] then begin

  11734.     with DHeroHealthStateWin do begin
  11735.       d := nil;
  11736.       if WLib <> nil then
  11737.         d := WLib.Images[FaceIndex];
  11738.       if d <> nil then
  11739.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  11740.       Idx := -1;
  11741.       case g_MyHero.m_btSex of
  11742.         0:
  11743.           case g_MyHero.m_btJob of
  11744.             0: Idx := 365;
  11745.             1: Idx := 366;
  11746.             2: Idx := 367;
  11747.           end;
  11748.         1:
  11749.           case g_MyHero.m_btJob of
  11750.             0: Idx := 368;
  11751.             1: Idx := 369;
  11752.             2: Idx := 370;
  11753.           end;
  11754.       end;
  11755.       if Idx > 0 then begin
  11756.         d := g_WMain3Images.Images[Idx];
  11757.         if d <> nil then begin
  11758.           if g_MyHero.m_boDeath then begin
  11759.             g_ImgMixSurface.SetSize(d.Width, d.Height);
  11760.             g_ImgMixSurface.Fill(0);
  11761.             g_ImgMixSurface.Draw(0, 0, d.ClientRect, d, False);
  11762.             DrawEffect(0, 0, g_ImgMixSurface, d, ceGrayScale);
  11763.             d := g_ImgMixSurface;
  11764.           end;
  11765.           dsurface.Draw(SurfaceX(Left) + 16, SurfaceY(Top) + 16, d.ClientRect, d, True);
  11766.         end;
  11767.       end;

  11768.       d := g_WMain3Images.Images[386]; //显示英雄HP
  11769.       if d <> nil then begin
  11770.         rc := d.ClientRect;
  11771.         if g_MyHero.m_Abil.MaxHP > 0 then
  11772.           rc.Right := Round((rc.Right - rc.Left) / g_MyHero.m_Abil.MaxHP * g_MyHero.m_Abil.HP);
  11773.         dsurface.Draw(Left + 75, Top + 25, rc, d, False);
  11774.       end;

  11775.       d := g_WMain3Images.Images[387]; //显示英雄MP
  11776.       if d <> nil then begin
  11777.         rc := d.ClientRect;
  11778.         if g_MyHero.m_Abil.MaxMP > 0 then
  11779.           rc.Right := Round((rc.Right - rc.Left) / g_MyHero.m_Abil.MaxMP * g_MyHero.m_Abil.MP);
  11780.         dsurface.Draw(Left + 80, Top + 38, rc, d, False);
  11781.       end;

  11782.       d := g_WMain3Images.Images[388]; //显示英雄EXP
  11783.       if d <> nil then begin
  11784.         rc := d.ClientRect;
  11785.         if g_MyHero.m_Abil.MaxExp > 0 then
  11786.           rc.Right := Round((rc.Right - rc.Left) / g_MyHero.m_Abil.MaxExp * g_MyHero.m_Abil.Exp);
  11787.         dsurface.Draw(Left + 80, Top + 50, rc, d, False);
  11788.       end;

  11789.     //显示英雄名称
  11790.       with dsurface do begin
  11791.         old := MainForm.Canvas.Font.Size;
  11792.         MainForm.Canvas.Font.Size := 9;

  11793.         TextOut(Left + 80, Top + 6, g_MyHero.m_sUserName, g_MyHero.m_nNameColor);

  11794.     //显示英雄等级     clBtnFace
  11795.         TextOut(SurfaceX(Left) + 2, SurfaceY(Top) + 60, IntToStr(g_MyHero.m_Abil.Level), g_MyHero.m_nNameColor);
  11796.         MainForm.Canvas.Font.Size := old;
  11797.       end;
  11798.     end;

  11799.   end else begin

  11800.     with DHeroHealthStateWin do begin
  11801.       d := nil;
  11802.       if WLib <> nil then
  11803.         d := WLib.Images[FaceIndex];
  11804.       if d <> nil then
  11805.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  11806.       Idx := -1;
  11807.       case g_MyHero.m_btSex of
  11808.         0:
  11809.           case g_MyHero.m_btJob of
  11810.             0: Idx := 136;
  11811.             1: Idx := 137;
  11812.             2: Idx := 138;
  11813.           end;
  11814.         1:
  11815.           case g_MyHero.m_btJob of
  11816.             0: Idx := 139;
  11817.             1: Idx := 140;
  11818.             2: Idx := 141;
  11819.           end;
  11820.       end;
  11821.       if Idx > 0 then begin
  11822.         d := g_WCqFirImages.Images[Idx];
  11823.         if d <> nil then begin
  11824.           if g_MyHero.m_boDeath then begin
  11825.             g_ImgMixSurface.SetSize(d.Width, d.Height);
  11826.             g_ImgMixSurface.Fill(0);
  11827.             g_ImgMixSurface.Draw(0, 0, d.ClientRect, d, False);
  11828.             DrawEffect(0, 0, g_ImgMixSurface, d, ceGrayScale);
  11829.             d := g_ImgMixSurface;
  11830.           end;
  11831.           dsurface.Draw(SurfaceX(Left) + 8, SurfaceY(Top) + 10, d.ClientRect, d, True);
  11832.         end;
  11833.       end;

  11834.       if g_HeroUseItems[U_BUJUK].s.Name <> '' then begin
  11835.         if (g_HeroUseItems[U_BUJUK].s.StdMode = 25) and (g_HeroUseItems[U_BUJUK].s.Shape = 9) then begin

  11836.           if g_MyHero.m_nAngryValue >= g_MyHero.m_nMaxAngryValue then begin
  11837.             if GetTickCount - g_dwFirDragonTick > 500 then begin
  11838.               g_dwFirDragonTick := GetTickCount;
  11839.               Inc(g_nFirDragon);
  11840.               if g_nFirDragon > 1 then g_nFirDragon := 0;
  11841.             end;
  11842.             if g_nFirDragon > 0 then
  11843.               d := g_WCqFirImages.Images[130]
  11844.             else d := g_WCqFirImages.Images[149];
  11845.           end else begin
  11846.             d := g_WCqFirImages.Images[130]; //显示怒槽
  11847.           end;

  11848.           if d <> nil then begin
  11849.             rc := d.ClientRect;
  11850.             if g_MyHero.m_nMaxAngryValue > 0 then
  11851.               rc.Right := Round((rc.Right - rc.Left) / g_MyHero.m_nMaxAngryValue * g_MyHero.m_nAngryValue);
  11852.             dsurface.Draw(Left + 56, Top + 32, rc, d, False);
  11853.           end;
  11854.         end;
  11855.       end;

  11856.       d := g_WCqFirImages.Images[131]; //显示英雄HP
  11857.       if d <> nil then begin
  11858.         rc := d.ClientRect;
  11859.         if g_MyHero.m_Abil.MaxHP > 0 then
  11860.           rc.Right := Round((rc.Right - rc.Left) / g_MyHero.m_Abil.MaxHP * g_MyHero.m_Abil.HP);
  11861.         dsurface.Draw(Left + 103, Top + 47, rc, d, False);
  11862.       end;

  11863.       d := g_WCqFirImages.Images[132]; //显示英雄MP
  11864.       if d <> nil then begin
  11865.         rc := d.ClientRect;
  11866.         if g_MyHero.m_Abil.MaxMP > 0 then
  11867.           rc.Right := Round((rc.Right - rc.Left) / g_MyHero.m_Abil.MaxMP * g_MyHero.m_Abil.MP);
  11868.         dsurface.Draw(Left + 106, Top + 57, rc, d, False);
  11869.       end;

  11870.       d := g_WCqFirImages.Images[133]; //显示英雄EXP
  11871.       if d <> nil then begin
  11872.         rc := d.ClientRect;
  11873.         if g_MyHero.m_Abil.MaxExp > 0 then
  11874.           rc.Right := Round((rc.Right - rc.Left) / g_MyHero.m_Abil.MaxExp * g_MyHero.m_Abil.Exp);
  11875.         dsurface.Draw(Left + 103, Top + 66, rc, d, False);
  11876.       end;

  11877.     //显示英雄名称
  11878.       with dsurface do begin
  11879.         TextOut(Left + 62 + (88 - TextWidth(g_MyHero.m_sUserName)) div 2, Top + 6 + 12, g_MyHero.m_sUserName, g_MyHero.m_nNameColor);
  11880.         TextOut(Left + 148 + (44 - TextWidth(IntToStr(g_MyHero.m_Abil.Level))) div 2, Top + 6 + 12, IntToStr(g_MyHero.m_Abil.Level), g_MyHero.m_nNameColor);
  11881.       end;
  11882.     end;
  11883.   end;
  11884. end;

  11885. procedure TFrmDlg.DHeroStateWinDirectPaint(Sender: TObject;
  11886.   dsurface: TTexture);
  11887. var
  11888.   I, L, m, pgidx, magline, bbx, bby, mmx, Idx, ax, ay, trainlv: Integer;
  11889.   pm: PTClientMagic;
  11890.   d: TTexture;
  11891.   hcolor, old, keyimg: Integer;
  11892.   iname, d1, d2, d3: string;
  11893.   useable: Boolean;

  11894. begin
  11895.   if g_MyHero = nil then Exit;
  11896.   with DHeroStateWin do begin
  11897.     d := nil;
  11898.     if WLib <> nil then
  11899.       d := WLib.Images[FaceIndex];
  11900.     if d <> nil then
  11901.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  11902.     case HeroStatePage of
  11903.       0: begin
  11904.           pgidx := 380;
  11905.           if g_MyHero <> nil then
  11906.             if g_MyHero.m_btSex = 1 then pgidx := 381;
  11907.           bbx := Left + 38;
  11908.           bby := Top + 52;
  11909.           d := g_WMain3Images.Images[pgidx];
  11910.           if d <> nil then
  11911.             dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);

  11912.           bbx := bbx - 7;
  11913.           bby := bby + 44;
  11914.           if g_MyHero.m_btHair < 4 then begin
  11915.             Idx := 440 + g_MyHero.m_btHair;
  11916.           //显示发型
  11917.             if Idx > 0 then begin
  11918.               d := g_WMainImages.GetCachedImage(Idx, ax, ay);
  11919.               if d <> nil then
  11920.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  11921.             end;
  11922.           end;
  11923.           if g_HeroUseItems[U_DRESS].s.Name <> '' then begin
  11924.             Idx := g_HeroUseItems[U_DRESS].s.looks;
  11925.             if Idx >= 0 then begin
  11926.               //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  11927.               d := GetWStateImg(Idx, ax, ay);
  11928.               if d <> nil then
  11929.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  11930.             end;
  11931.           end;
  11932.           if g_HeroUseItems[U_WEAPON].s.Name <> '' then begin
  11933.             Idx := g_HeroUseItems[U_WEAPON].s.looks;
  11934.             if Idx >= 0 then begin
  11935.               //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  11936.               d := GetWStateImg(Idx, ax, ay);
  11937.               if d <> nil then
  11938.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);

  11939.               if (g_HeroUseItems[U_WEAPON].s.Shape = 38) and (Idx = 1404) then begin
  11940.                 d := GetWStateImg(Idx - 1, ax, ay);
  11941.                 if d <> nil then
  11942.                   DrawBlend(dsurface, SurfaceX(bbx + ax), SurfaceY(bby + ay), d);
  11943.               end else
  11944.                 if (g_HeroUseItems[U_WEAPON].s.Shape = 56) and (Idx = 1880) then begin
  11945.                 if (g_dwWeapon56Index[1] < 1890) or (g_dwWeapon56Index[1] > 1899) then
  11946.                   g_dwWeapon56Index[1] := 1890;
  11947.                 if GetTickCount - g_dwWeapon56Tick[1] > 100 then begin
  11948.                   g_dwWeapon56Tick[1] := GetTickCount;
  11949.                   g_dwWeapon56Index[1] := g_dwWeapon56Index[1] + 1;
  11950.                 end;
  11951.                 if (g_dwWeapon56Index[1] < 1890) or (g_dwWeapon56Index[1] > 1899) then
  11952.                   g_dwWeapon56Index[1] := 1890;

  11953.                 d := GetWStateImg(g_dwWeapon56Index[1], ax, ay);
  11954.                 if d <> nil then
  11955.                   DrawBlend(dsurface, SurfaceX(bbx + ax), SurfaceY(bby + ay), d);
  11956.               end;

  11957.             end;
  11958.           end;
  11959.           if g_HeroUseItems[U_HELMET].s.Name <> '' then begin
  11960.             Idx := g_HeroUseItems[U_HELMET].s.looks;
  11961.             if Idx >= 0 then begin
  11962.               //d := FrmMain.WStateItem.GetCachedImage (idx, ax, ay);
  11963.               d := GetWStateImg(Idx, ax, ay);
  11964.               if d <> nil then
  11965.                 dsurface.Draw(SurfaceX(bbx + ax), SurfaceY(bby + ay), d.ClientRect, d, True);
  11966.             end;
  11967.           end;
  11968.         end;
  11969.       1: begin
  11970.           L := Left + 112; //66;
  11971.           m := Top + 99;
  11972.           bbx := Left + 38;
  11973.           bby := Top + 52;
  11974.           //d := g_WMain3Images.Images[383];
  11975.           d := g_WUIBImages.Images[9];
  11976.           if d = nil then d := g_WMain3Images.Images[383];

  11977.           if d <> nil then
  11978.             dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);
  11979.           with dsurface do begin
  11980.             TextOut(SurfaceX(L + 0), SurfaceY(m + 0), IntToStr(Loword(g_MyHero.m_Abil.AC)) + '-' + IntToStr(Hiword(g_MyHero.m_Abil.AC)));
  11981.             TextOut(SurfaceX(L + 0), SurfaceY(m + 20), IntToStr(Loword(g_MyHero.m_Abil.MAC)) + '-' + IntToStr(Hiword(g_MyHero.m_Abil.MAC)));
  11982.             TextOut(SurfaceX(L + 0), SurfaceY(m + 40), IntToStr(Loword(g_MyHero.m_Abil.DC)) + '-' + IntToStr(Hiword(g_MyHero.m_Abil.DC)));
  11983.             TextOut(SurfaceX(L + 0), SurfaceY(m + 60), IntToStr(Loword(g_MyHero.m_Abil.MC)) + '-' + IntToStr(Hiword(g_MyHero.m_Abil.MC)));
  11984.             TextOut(SurfaceX(L + 0), SurfaceY(m + 80), IntToStr(Loword(g_MyHero.m_Abil.SC)) + '-' + IntToStr(Hiword(g_MyHero.m_Abil.SC)));
  11985.             TextOut(SurfaceX(L + 0), SurfaceY(m + 100), IntToStr(g_MyHero.m_Abil.HP) + '/' + IntToStr(g_MyHero.m_Abil.MaxHP));
  11986.             TextOut(SurfaceX(L + 0), SurfaceY(m + 120), IntToStr(g_MyHero.m_Abil.MP) + '/' + IntToStr(g_MyHero.m_Abil.MaxMP));
  11987.           end;
  11988.         end;
  11989.       2: begin
  11990.           bbx := Left + 38;
  11991.           bby := Top + 52;
  11992.           d := g_WMain3Images.Images[32];
  11993.           if d <> nil then
  11994.             dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);

  11995.           bbx := bbx + 20;
  11996.           bby := bby + 10;
  11997.           with dsurface do begin
  11998.             mmx := bbx + 85;
  11999.             hcolor := clSilver;
  12000.             TextOut(bbx, bby, '当前经验', hcolor);
  12001.             //TextOut(mmx, bby, FloatToStrFixFmt(100 * g_MyHero.m_Abil.Exp / g_MyHero.m_Abil.MaxExp, 3, 2) + '%');

  12002.             TextOut(mmx, bby, IntToStr(g_MyHero.m_Abil.Exp), hcolor);
  12003.             bby := bby + 14;
  12004.             TextOut(bbx, bby, '升级经验', hcolor);
  12005.             TextOut(mmx, bby, IntToStr(g_MyHero.m_Abil.MaxExp), hcolor);

  12006.             TextOut(bbx, bby + 14 * 1, '背包重量', hcolor);
  12007.             if g_MyHero.m_Abil.Weight > g_MyHero.m_Abil.MaxWeight then
  12008.               hcolor := clRed;
  12009.             TextOut(mmx, bby + 14 * 1, IntToStr(g_MyHero.m_Abil.Weight) + '/' + IntToStr(g_MyHero.m_Abil.MaxWeight), hcolor);

  12010.             hcolor := clSilver;
  12011.             TextOut(bbx, bby + 14 * 2, '负重', hcolor);
  12012.             if g_MyHero.m_Abil.WearWeight > g_MyHero.m_Abil.MaxWearWeight then
  12013.               hcolor := clRed;
  12014.             TextOut(mmx, bby + 14 * 2, IntToStr(g_MyHero.m_Abil.WearWeight) + '/' + IntToStr(g_MyHero.m_Abil.MaxWearWeight), hcolor);

  12015.             hcolor := clSilver;
  12016.             TextOut(bbx, bby + 14 * 3, '腕力', hcolor);
  12017.             if g_MyHero.m_Abil.HandWeight > g_MyHero.m_Abil.MaxHandWeight then
  12018.               hcolor := clRed;
  12019.             TextOut(mmx, bby + 14 * 3, IntToStr(g_MyHero.m_Abil.HandWeight) + '/' + IntToStr(g_MyHero.m_Abil.MaxHandWeight), hcolor);

  12020.             hcolor := clSilver;
  12021.             TextOut(bbx, bby + 14 * 4, '准确度', hcolor);
  12022.             TextOut(mmx, bby + 14 * 4, IntToStr(g_nMyHeroHitPoint), hcolor);

  12023.             TextOut(bbx, bby + 14 * 5, '敏捷', hcolor);
  12024.             TextOut(mmx, bby + 14 * 5, IntToStr(g_nMyHeroSpeedPoint), hcolor);

  12025.             TextOut(bbx, bby + 14 * 6, '魔法躲避', hcolor);
  12026.             TextOut(mmx, bby + 14 * 6, '+' + IntToStr(g_nMyHeroAntiMagic * 10) + '%', hcolor);

  12027.             TextOut(bbx, bby + 14 * 7, '毒物躲避', hcolor);
  12028.             TextOut(mmx, bby + 14 * 7, '+' + IntToStr(g_nMyHeroAntiPoison * 10) + '%', hcolor);

  12029.             TextOut(bbx, bby + 14 * 8, '中毒恢复', hcolor);
  12030.             TextOut(mmx, bby + 14 * 8, '+' + IntToStr(g_nMyHeroPoisonRecover * 10) + '%', hcolor);

  12031.             TextOut(bbx, bby + 14 * 9, '体力恢复', hcolor);
  12032.             TextOut(mmx, bby + 14 * 9, '+' + IntToStr(g_nMyHeroHealthRecover * 10) + '%', hcolor);

  12033.             TextOut(bbx, bby + 14 * 10, '魔法恢复', hcolor);
  12034.             TextOut(mmx, bby + 14 * 10, '+' + IntToStr(g_nMyHeroSpellRecover * 10) + '%', hcolor);
  12035.           end;
  12036.         end;
  12037.       3: begin //魔法
  12038.           bbx := Left + 38;
  12039.           bby := Top + 52;
  12040.           d := g_WMain2Images.Images[751];
  12041.           if d <> nil then
  12042.             dsurface.Draw(SurfaceX(bbx), SurfaceY(bby), d.ClientRect, d, False);
  12043.           Heromagtop := HeroMagicPage * 6;
  12044.           magline := _MIN(HeroMagicPage * 6 + 6, g_HeroMagicList.Count);
  12045.           for I := Heromagtop to magline - 1 do begin
  12046.             pm := PTClientMagic(g_HeroMagicList[I]);
  12047.             m := I - Heromagtop;
  12048.             keyimg := 0;
  12049.             case Byte(pm.Key) of
  12050.               Byte('1'): keyimg := 248;
  12051.               Byte('2'): keyimg := 249;
  12052.               Byte('3'): keyimg := 250;
  12053.               Byte('4'): keyimg := 251;
  12054.               Byte('5'): keyimg := 252;
  12055.               Byte('6'): keyimg := 253;
  12056.               Byte('7'): keyimg := 254;
  12057.               Byte('8'): keyimg := 255;
  12058.             end;
  12059.             if keyimg > 0 then begin
  12060.               d := g_WMainImages.Images[keyimg];
  12061.               if d <> nil then
  12062.                 dsurface.Draw(bbx + 145, bby + 8 + m * 37, d.ClientRect, d, True);
  12063.             end;
  12064.             d := g_WMainImages.Images[112]; //lv
  12065.             if d <> nil then
  12066.               dsurface.Draw(bbx + 48, bby + 8 + 15 + m * 37, d.ClientRect, d, True);
  12067.             d := g_WMainImages.Images[111]; //exp
  12068.             if d <> nil then
  12069.               dsurface.Draw(bbx + 48 + 26, bby + 8 + 15 + m * 37, d.ClientRect, d, True);
  12070.           end;

  12071.           with dsurface do begin
  12072.             for I := Heromagtop to magline - 1 do begin
  12073.               pm := PTClientMagic(g_HeroMagicList[I]);
  12074.               m := I - Heromagtop;

  12075.               hcolor := clWhite;
  12076.               if Ord(pm.Key) = 0 then hcolor := clGray;

  12077.               if pm.Def.wMagicId in [13, 26, 31, 45] then begin
  12078.                 if not (pm.Level in [0..4]) then pm.Level := 0; //魔法最多4级
  12079.               end else begin
  12080.                 if not (pm.Level in [0..3]) then pm.Level := 0; //魔法最多3级
  12081.               end;
  12082.               TextOut(bbx + 48, bby + 8 + m * 37, pm.Def.sMagicName, hcolor);

  12083.               if pm.Def.wMagicId in [13, 26, 31, 45] then begin
  12084.                 if pm.Level in [0..4] then begin
  12085.                   trainlv := pm.Level;
  12086.                   if trainlv >= 3 then trainlv := trainlv - 1;
  12087.                 end else trainlv := 0;
  12088.               end else begin
  12089.                 if pm.Level in [0..3] then trainlv := pm.Level
  12090.                 else trainlv := 0;
  12091.               end;

  12092.               TextOut(bbx + 48 + 16, bby + 8 + 15 + m * 37, IntToStr(pm.Level), hcolor);
  12093.               if pm.Def.MaxTrain[trainlv] > 0 then begin
  12094.                { if pm.Def.wMagicId in [13, 26, 45] then begin
  12095.                   if trainlv < 4 then
  12096.                     TextOut(bbx + 48 + 46, bby + 8 + 15 + m * 37, IntToStr(pm.CurTrain) + '/' + IntToStr(pm.Def.MaxTrain[trainlv]))
  12097.                   else TextOut(bbx + 48 + 46, bby + 8 + 15 + m * 37, '-');
  12098.                 end else begin }
  12099.                 if trainlv < 3 then
  12100.                   TextOut(bbx + 48 + 46, bby + 8 + 15 + m * 37, IntToStr(pm.CurTrain) + '/' + IntToStr(pm.Def.MaxTrain[trainlv]), hcolor)
  12101.                 else TextOut(bbx + 48 + 46, bby + 8 + 15 + m * 37, '-', hcolor);
  12102.                 //end;
  12103.               end;
  12104.             end;
  12105.           end;
  12106.         end;
  12107.     end;
  12108.     if (g_ServerConfig.btShowClientItemStyle <> 0) then begin
  12109.       if g_MouseHeroStateItem.s.Name <> '' then begin
  12110.         g_MouseHeroItem := g_MouseHeroStateItem;
  12111.         GetMouseItemInfo(g_MyHero, @g_MouseHeroItem, iname, d1, d2, d3, useable);
  12112.         if iname <> '' then begin
  12113.           if g_MouseHeroItem.Dura = 0 then hcolor := clRed
  12114.           else hcolor := clWhite;
  12115.           with dsurface do begin
  12116.             bbx := SurfaceX(Left + 37);
  12117.             bby := SurfaceY(Top + 272 + 35);
  12118.             TextOut(bbx, bby, iname, clyellow);
  12119.             TextOut(bbx + TextWidth(iname), bby, d1, hcolor);
  12120.             TextOut(bbx, bby + TextHeight('A') + 2, d2, hcolor);
  12121.             TextOut(bbx, bby + (TextHeight('A') + 2) * 2, d3, hcolor);
  12122.             if d2 <> '' then
  12123.               bby := bby + TextHeight('A') + 2;
  12124.             if d3 <> '' then
  12125.               bby := bby + TextHeight('A') + 2;

  12126.             bby := bby + TextHeight('A') + 2;
  12127.             for I := 0 to g_ExtractStringList.Count - 1 do begin
  12128.               TextOut(bbx, bby + (TextHeight('A') + 2) * I, g_ExtractStringList.Strings[I], hcolor);
  12129.             end;
  12130.           end;
  12131.         end;
  12132.         g_MouseHeroItem.s.Name := '';
  12133.       end;
  12134.     end;
  12135.      //玩家名称、行会
  12136.     if HeroStatePage = 0 then begin
  12137.       dsurface.TextOut(SurfaceX(Left + (Width - dsurface.TextWidth(g_MyHero.m_sUserName)) div 2),
  12138.         SurfaceY(Top + 60), g_MyHero.m_sUserName, g_MyHero.m_nNameColor);
  12139.     end;
  12140.   end;
  12141. end;

  12142. procedure TFrmDlg.DCloseHeroStateDirectPaint(Sender: TObject;
  12143.   dsurface: TTexture);
  12144. var
  12145.   d: TTexture;
  12146. begin
  12147.   with Sender as TDButton do begin
  12148.     if TDButton(Sender).Downed then begin
  12149.       d := nil;
  12150.       if WLib <> nil then
  12151.         d := WLib.Images[FaceIndex];
  12152.       if d <> nil then
  12153.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  12154.     end;
  12155.   end;
  12156. end;

  12157. procedure TFrmDlg.DHeroSWLightDirectPaint(Sender: TObject;
  12158.   dsurface: TTexture);
  12159. var
  12160.   Idx: Integer;
  12161.   d: TTexture;
  12162.   nWhere: Integer;
  12163. begin
  12164.   if g_MyHero = nil then Exit;
  12165.   nWhere := -1;
  12166.   if HeroStatePage = 0 then begin
  12167.     if Sender = DHeroSWNecklace then nWhere := U_NECKLACE;
  12168.     if Sender = DHeroSWLight then nWhere := U_RIGHTHAND;
  12169.     if Sender = DHeroSWArmRingR then nWhere := U_ARMRINGR;
  12170.     if Sender = DHeroSWArmRingL then nWhere := U_ARMRINGL;
  12171.     if Sender = DHeroSWRingR then nWhere := U_RINGR;
  12172.     if Sender = DHeroSWRingL then nWhere := U_RINGL;
  12173.     if Sender = DHeroSWBujuk then nWhere := U_BUJUK;
  12174.     if Sender = DHeroSWBelt then nWhere := U_BELT;
  12175.     if Sender = DHeroSWBoots then nWhere := U_BOOTS;
  12176.     if Sender = DHeroSWCharm then nWhere := U_CHARM;

  12177.     if nWhere >= 0 then begin
  12178.       if g_HeroUseItems[nWhere].s.Name <> '' then begin
  12179.         Idx := g_HeroUseItems[nWhere].s.looks;
  12180.         if Idx >= 0 then begin
  12181.           d := GetWStateImg(Idx);
  12182.           if d <> nil then
  12183.             with TDButton(Sender) do
  12184.               dsurface.Draw(SurfaceX(Left + (Width - d.Width) div 2),
  12185.                 SurfaceY(Top + (Height - d.Height) div 2),
  12186.                 d.ClientRect, d, True);

  12187.           if (g_HeroUseItems[nWhere].s.AddValue[12] in [1, 3]) { or (GetAddPoint(g_HeroUseItems[nWhere].s.AddPoint))} then begin
  12188.             if GetTickCount - g_DrawHeroUseItems[nWhere].dwDrawTick >= 200 then begin
  12189.               g_DrawHeroUseItems[nWhere].dwDrawTick := GetTickCount;
  12190.               if g_DrawHeroUseItems[nWhere].nIndex <= 0 then g_DrawHeroUseItems[nWhere].nIndex := 260 - 1;
  12191.               Inc(g_DrawHeroUseItems[nWhere].nIndex);
  12192.               if g_DrawHeroUseItems[nWhere].nIndex > 265 then g_DrawHeroUseItems[nWhere].nIndex := 260;
  12193.             end;
  12194.             d := g_WMain2Images.Images[g_DrawHeroUseItems[nWhere].nIndex];
  12195.             if d <> nil then begin
  12196.               with TDButton(Sender) do
  12197.                 DrawBlend(dsurface, SurfaceX(Left + (Width - d.Width) div 2),
  12198.                   SurfaceY(Top + (Height - d.Height) div 2), d);
  12199.             end;
  12200.           end;

  12201.           if g_HeroUseItems[nWhere].s.AddValue[12] >= 2 then begin
  12202.             if GetTickCount - g_DrawHeroUseItems_[nWhere].dwDrawTick >= 200 then begin
  12203.               g_DrawHeroUseItems_[nWhere].dwDrawTick := GetTickCount;
  12204.               if g_DrawHeroUseItems_[nWhere].nIndex <= 0 then g_DrawHeroUseItems_[nWhere].nIndex := 600 - 1;
  12205.               Inc(g_DrawHeroUseItems_[nWhere].nIndex);
  12206.               if g_DrawHeroUseItems_[nWhere].nIndex > 617 then g_DrawHeroUseItems_[nWhere].nIndex := 600;
  12207.             end;
  12208.             d := g_WMain3Images.Images[g_DrawHeroUseItems_[nWhere].nIndex];
  12209.             if d <> nil then begin
  12210.               with TDButton(Sender) do
  12211.                 DrawBlend(dsurface, SurfaceX(Left + (Width - d.Width) div 2),
  12212.                   SurfaceY(Top + (Height - d.Height) div 2), d);
  12213.             end;
  12214.           end;
  12215.         end;
  12216.       end;
  12217.     end;
  12218.   end;
  12219. end;

  12220. procedure TFrmDlg.DHeroSWWeaponMouseMove(Sender: TObject;
  12221.   Shift: TShiftState; X, Y: Integer);
  12222. var
  12223.   nLocalX, nLocalY: Integer;
  12224.   nHintX, nHintY: Integer;
  12225.   sel: Integer;
  12226.   iname, d1, d2, d3: string;
  12227.   useable: Boolean;
  12228.   hcolor: TColor;
  12229.   Butt: TDButton;
  12230. begin
  12231.   if HeroStatePage <> 0 then Exit;
  12232.   DScreen.ClearHint;
  12233.   sel := -1;
  12234.   Butt := TDButton(Sender);
  12235.   if Sender = DHeroSWDress then sel := U_DRESS;
  12236.   if Sender = DHeroSWWeapon then sel := U_WEAPON;
  12237.   if Sender = DHeroSWHelmet then sel := U_HELMET;
  12238.   if Sender = DHeroSWNecklace then sel := U_NECKLACE;
  12239.   if Sender = DHeroSWLight then sel := U_RIGHTHAND;
  12240.   if Sender = DHeroSWRingL then sel := U_RINGL;
  12241.   if Sender = DHeroSWRingR then sel := U_RINGR;
  12242.   if Sender = DHeroSWArmRingL then sel := U_ARMRINGL;
  12243.   if Sender = DHeroSWArmRingR then sel := U_ARMRINGR;

  12244.   if Sender = DHeroSWBujuk then sel := U_BUJUK;
  12245.   if Sender = DHeroSWBelt then sel := U_BELT;
  12246.   if Sender = DHeroSWBoots then sel := U_BOOTS;
  12247.   if Sender = DHeroSWCharm then sel := U_CHARM;

  12248.   g_MoveRect := TDButton(Sender).ClientRect;
  12249.   g_MoveRect.Right := g_MoveRect.Right + 4;

  12250.   if sel >= 0 then begin
  12251.     g_MouseHeroStateItem := g_HeroUseItems[sel];
  12252.       //原为注释掉 显示人物身上带的物品信息
  12253.     if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  12254.       g_MouseHeroItem := g_HeroUseItems[sel];
  12255.       GetMouseItemInfo(g_MyHero, @g_MouseHeroItem, iname, d1, d2, d3, useable);
  12256.       if HintList.Count > 0 then begin
  12257.         with Sender as TDButton do
  12258.           DScreen.ShowHint(SurfaceX(Left - 30),
  12259.             SurfaceY(Top + 50),
  12260.             HintList, False);
  12261.       end;
  12262.       g_MouseHeroItem.s.Name := '';
  12263.     end;
  12264.   end else ClearMoveRect();
  12265. end;

  12266. procedure TFrmDlg.DHeroSWWeaponClick(Sender: TObject; X, Y: Integer);
  12267. var
  12268.   where, n, sel: Integer;
  12269.   flag, movcancel: Boolean;
  12270. begin
  12271.   if g_MyHero = nil then Exit;
  12272.   if HeroStatePage <> 0 then Exit;
  12273.   if (g_MovingItem.Owner = DStateWin) then Exit;
  12274.   if g_boItemMoving then begin
  12275.     flag := False;
  12276.     movcancel := False;
  12277.     if (g_MovingItem.Index = -97) or (g_MovingItem.Index = -98) then Exit;
  12278.     if (g_MovingItem.Owner = DDealDlg) then Exit;
  12279.     if (g_MovingItem.Item.s.Name = '') or (g_WaitingUseItem.Item.s.Name <> '') then Exit;
  12280.     where := GetTakeOnPosition(g_MovingItem.Item.s.StdMode);
  12281.     if g_MovingItem.Index >= 0 then begin
  12282.       case where of
  12283.         U_DRESS: begin
  12284.             if Sender = DHeroSWDress then begin
  12285.               if g_MyHero.m_btSex = 0 then
  12286.                 if g_MovingItem.Item.s.StdMode <> 10 then
  12287.                   Exit;
  12288.               if g_MyHero.m_btSex = 1 then
  12289.                 if g_MovingItem.Item.s.StdMode <> 11 then
  12290.                   Exit;
  12291.               flag := True;
  12292.             end;
  12293.           end;
  12294.         U_WEAPON: begin
  12295.             if Sender = DHeroSWWeapon then begin
  12296.               flag := True;
  12297.             end;
  12298.           end;
  12299.         U_NECKLACE: begin
  12300.             if Sender = DHeroSWNecklace then
  12301.               flag := True;
  12302.           end;
  12303.         U_RIGHTHAND: begin
  12304.             if Sender = DHeroSWLight then
  12305.               flag := True;
  12306.           end;
  12307.         U_HELMET: begin
  12308.             if Sender = DHeroSWHelmet then
  12309.               flag := True;
  12310.           end;
  12311.         U_RINGR, U_RINGL: begin
  12312.             if Sender = DHeroSWRingL then begin
  12313.               where := U_RINGL;
  12314.               flag := True;
  12315.             end;
  12316.             if Sender = DHeroSWRingR then begin
  12317.               where := U_RINGR;
  12318.               flag := True;
  12319.             end;
  12320.           end;
  12321.         U_ARMRINGR: begin
  12322.             if Sender = DHeroSWArmRingL then begin
  12323.               where := U_ARMRINGL;
  12324.               flag := True;
  12325.             end;
  12326.             if Sender = DHeroSWArmRingR then begin
  12327.               where := U_ARMRINGR;
  12328.               flag := True;
  12329.             end;
  12330.           end;
  12331.         U_ARMRINGL: begin
  12332.             if Sender = DHeroSWArmRingL then begin
  12333.               where := U_ARMRINGL;
  12334.               flag := True;
  12335.             end;
  12336.           end;
  12337.         U_BUJUK: begin
  12338.             if Sender = DHeroSWBujuk then begin
  12339.               where := U_BUJUK;
  12340.               flag := True;
  12341.             end;
  12342.             if Sender = DHeroSWArmRingL then begin
  12343.               where := U_ARMRINGL;
  12344.               flag := True;
  12345.             end;
  12346.           end;
  12347.         U_BELT: begin
  12348.             if Sender = DHeroSWBelt then begin
  12349.               where := U_BELT;
  12350.               flag := True;
  12351.             end;
  12352.           end;
  12353.         U_BOOTS: begin
  12354.             if Sender = DHeroSWBoots then begin
  12355.               where := U_BOOTS;
  12356.               flag := True;
  12357.             end;
  12358.           end;
  12359.         U_CHARM: begin
  12360.             if Sender = DHeroSWCharm then begin
  12361.               where := U_CHARM;
  12362.               flag := True;
  12363.             end;
  12364.           end;
  12365.       end;
  12366.     end else begin
  12367.       if (g_MovingItem.Owner = DHeroStateWin) then begin
  12368.         n := -(g_MovingItem.Index + 1);
  12369.         if n in [0..12] then begin
  12370.           ItemClickSound(g_MovingItem.Item.s);
  12371.           g_HeroUseItems[n] := g_MovingItem.Item;
  12372.           g_MovingItem.Item.s.Name := '';
  12373.           g_MovingItem.Owner := nil;
  12374.           g_boItemMoving := False;
  12375.         end;
  12376.       end;
  12377.     end;
  12378.     if flag then begin
  12379.       if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DUpgrade) or (g_MovingItem.Owner = DHeroItemBag) then begin
  12380.         ItemClickSound(g_MovingItem.Item.s);
  12381.         g_WaitingUseItem := g_MovingItem;
  12382.         g_WaitingUseItem.Index := where;
  12383.         if (g_MovingItem.Owner = DUpgrade) or (g_MovingItem.Owner = DItemBag) then begin
  12384.           frmMain.SendTakeOnItemFromMasterBag(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12385.         end else
  12386.           if (g_MovingItem.Owner = DHeroItemBag) then begin
  12387.           frmMain.SendHeroTakeOnItem(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12388.         end;
  12389.         g_MovingItem.Item.s.Name := '';
  12390.         g_MovingItem.Owner := nil;
  12391.         g_boItemMoving := False;
  12392.       end;
  12393.     end else begin
  12394.       if (Sender = DHeroSWBujuk) and (g_MovingItem.Owner = DHeroItemBag) then begin
  12395.         if (g_HeroUseItems[U_BUJUK].s.Name <> '') and (g_HeroUseItems[U_BUJUK].s.StdMode = 25) and (g_HeroUseItems[U_BUJUK].s.Shape = 9) then begin
  12396.           if g_MovingItem.Item.s.StdMode = 42 then begin
  12397.             ItemClickSound(g_MovingItem.Item.s);
  12398.             g_WaitingUseItem := g_MovingItem;
  12399.             g_WaitingUseItem.Index := U_BUJUK;
  12400.             if (g_MovingItem.Owner = DItemBag) then begin
  12401.               frmMain.SendRepairFirDragon(2, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12402.             end else
  12403.               if (g_MovingItem.Owner = DHeroItemBag) then begin
  12404.               frmMain.SendRepairFirDragon(4, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12405.             end;
  12406.             g_MovingItem.Item.s.Name := '';
  12407.             g_boItemMoving := False;
  12408.             g_MovingItem.Owner := nil;
  12409.           end;
  12410.         end;
  12411.       end;
  12412.     end;
  12413.   end else begin
  12414.     ClearMoveRect();
  12415.     flag := False;
  12416.     if (g_MovingItem.Item.s.Name <> '') or (g_WaitingUseItem.Item.s.Name <> '') then Exit;
  12417.     sel := -1;
  12418.     if Sender = DHeroSWDress then sel := U_DRESS;
  12419.     if Sender = DHeroSWWeapon then sel := U_WEAPON;
  12420.     if Sender = DHeroSWHelmet then sel := U_HELMET;
  12421.     if Sender = DHeroSWNecklace then sel := U_NECKLACE;
  12422.     if Sender = DHeroSWLight then sel := U_RIGHTHAND;
  12423.     if Sender = DHeroSWRingL then sel := U_RINGL;
  12424.     if Sender = DHeroSWRingR then sel := U_RINGR;
  12425.     if Sender = DHeroSWArmRingL then sel := U_ARMRINGL;
  12426.     if Sender = DHeroSWArmRingR then sel := U_ARMRINGR;

  12427.     if Sender = DHeroSWBujuk then sel := U_BUJUK;
  12428.     if Sender = DHeroSWBelt then sel := U_BELT;
  12429.     if Sender = DHeroSWBoots then sel := U_BOOTS;
  12430.     if Sender = DHeroSWCharm then sel := U_CHARM;

  12431.     if sel >= 0 then begin
  12432.       if g_HeroUseItems[sel].s.Name <> '' then begin
  12433.         ItemClickSound(g_HeroUseItems[sel].s);
  12434.         g_MovingItem.Index := -(sel + 1);
  12435.         g_MovingItem.Item := g_HeroUseItems[sel];
  12436.         g_HeroUseItems[sel].s.Name := '';
  12437.         g_boItemMoving := True;
  12438.         g_MovingItem.Owner := DHeroStateWin;
  12439.       end;
  12440.     end;
  12441.   end;
  12442. end;

  12443. procedure TFrmDlg.DHeroItemBagDirectPaint(Sender: TObject;
  12444.   dsurface: TTexture);
  12445. var
  12446.   d0, d1, d2, d3: string;
  12447.   I, n, nX, nY: Integer;
  12448.   useable: Boolean;
  12449.   d: TTexture;
  12450.   nFaceIndex: Integer;
  12451. begin
  12452.   if g_MyHero = nil then Exit;
  12453.   with DHeroItemBag do begin
  12454.     d := nil;
  12455.     nFaceIndex := 375;
  12456.     case g_MyHero.m_nBagCount of
  12457.       10: nFaceIndex := 375;
  12458.       20: nFaceIndex := 376;
  12459.       30: nFaceIndex := 377;
  12460.       35: nFaceIndex := 378;
  12461.       40: nFaceIndex := 379;
  12462.     end;

  12463.     if FaceIndex <> nFaceIndex then begin
  12464.       SetImgIndex(g_WMain3Images, nFaceIndex);
  12465.     end;

  12466.     if WLib <> nil then
  12467.       d := WLib.Images[nFaceIndex];
  12468.     if d <> nil then begin
  12469.       //if Height <> d.Height then begin
  12470.      { Height := d.Height;
  12471.       Width := d.Width;
  12472.       DHeroItemGrid.RowCount := 2;
  12473.       DHeroItemGrid.Height := DHeroItemGrid.RowHeight * 2;}
  12474.       case g_MyHero.m_nBagCount of
  12475.         10: begin
  12476.             DHeroItemGrid.RowCount := 2;
  12477.             DHeroItemGrid.Height := DHeroItemGrid.RowHeight * 2;
  12478.           end;
  12479.         20: begin
  12480.             DHeroItemGrid.RowCount := 4;
  12481.             DHeroItemGrid.Height := DHeroItemGrid.RowHeight * 4;
  12482.           end;
  12483.         30: begin
  12484.             DHeroItemGrid.RowCount := 6;
  12485.             DHeroItemGrid.Height := DHeroItemGrid.RowHeight * 6;
  12486.           end;
  12487.         35: begin
  12488.             DHeroItemGrid.RowCount := 7;
  12489.             DHeroItemGrid.Height := DHeroItemGrid.RowHeight * 7;
  12490.           end;
  12491.         40: begin
  12492.             DHeroItemGrid.RowCount := 8;
  12493.             DHeroItemGrid.Height := DHeroItemGrid.RowHeight * 8;
  12494.           end;
  12495.       end;
  12496.       //end;
  12497.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  12498.     end;

  12499.     if (g_ServerConfig.btShowClientItemStyle <> 0) then begin
  12500.       GetMouseItemInfo(g_MyHero, @g_MouseHeroItem, d0, d1, d2, d3, useable);
  12501.       with dsurface do begin
  12502.       //英雄包裹装备信息
  12503.         if d0 <> '' then begin
  12504.           n := TextWidth(d0);

  12505.           nX := DHeroItemGrid.SurfaceX(DHeroItemGrid.Left) - 2;
  12506.           nY := DHeroItemGrid.SurfaceY(DHeroItemGrid.Top + DHeroItemGrid.Height + 24);

  12507.           TextOut(nX, nY, d0, clyellow);
  12508.           TextOut(nX + n, nY, d1);
  12509.           TextOut(nX, nY + 14, d2);
  12510.           if not useable then
  12511.             TextOut(nX, nY + 14 * 2, d3, clRed)
  12512.           else
  12513.             TextOut(nX, nY + 14 * 2, d3);
  12514.           if d2 <> '' then
  12515.             nY := nY + 14;
  12516.           if d3 <> '' then
  12517.             nY := nY + 14;

  12518.           nY := nY + 14;
  12519.           for I := 0 to g_ExtractStringList.Count - 1 do begin
  12520.             TextOut(nX, nY + 14 * I, g_ExtractStringList.Strings[I]);
  12521.           end;

  12522.         end else begin
  12523.           TextOut(DHeroItemGrid.SurfaceX(DHeroItemGrid.Left) - 2, DHeroItemGrid.SurfaceY(DHeroItemGrid.Top + DHeroItemGrid.Height + 24), '左键双击可以装备');
  12524.           TextOut(DHeroItemGrid.SurfaceX(DHeroItemGrid.Left) - 2, DHeroItemGrid.SurfaceY(DHeroItemGrid.Top + DHeroItemGrid.Height + 24 + 14), 'ALT + R 键刷新包裹');
  12525.           //TextOut(DHeroItemGrid.SurfaceX(DHeroItemGrid.Left) - 2, DHeroItemGrid.SurfaceY(DHeroItemGrid.Top + DHeroItemGrid.Height + 24 + 14 * 2), 'CTRL + B 英雄挂机');
  12526.         end;
  12527.       end;
  12528.     end else begin
  12529.       with dsurface do begin
  12530.         TextOut(DHeroItemGrid.SurfaceX(DHeroItemGrid.Left) - 2, DHeroItemGrid.SurfaceY(DHeroItemGrid.Top + DHeroItemGrid.Height + 24), '左键双击可以装备');
  12531.         TextOut(DHeroItemGrid.SurfaceX(DHeroItemGrid.Left) - 2, DHeroItemGrid.SurfaceY(DHeroItemGrid.Top + DHeroItemGrid.Height + 24 + 14), 'ALT + R 键刷新包裹');
  12532.         //TextOut(DHeroItemGrid.SurfaceX(DHeroItemGrid.Left) - 2, DHeroItemGrid.SurfaceY(DHeroItemGrid.Top + DHeroItemGrid.Height + 24 + 14 * 2), 'CTRL + B 英雄挂机');
  12533.       end;
  12534.     end;
  12535.   end;
  12536. end;

  12537. procedure TFrmDlg.DCloseHeroBagClick(Sender: TObject; X, Y: Integer);
  12538. begin
  12539.   DHeroItemBag.Visible := False;
  12540. end;

  12541. procedure TFrmDlg.DHeroItemGridDblClick(Sender: TObject);
  12542. var
  12543.   Idx, I, where: Integer;
  12544.   keyvalue: TKeyBoardState;
  12545.   cu: TClientItem;
  12546.   flag: Boolean;
  12547. begin
  12548.   Idx := DHeroItemGrid.Col + DHeroItemGrid.Row * DHeroItemGrid.ColCount;
  12549.   if Idx in [0..MAXHEROBAGITEM - 1] then begin
  12550.     if g_HeroItemArr[Idx].s.Name <> '' then begin
  12551.       FillChar(keyvalue, SizeOf(TKeyBoardState), #0);
  12552.       GetKeyboardState(keyvalue);
  12553.       if keyvalue[VK_CONTROL] = $80 then begin
  12554.         cu := g_HeroItemArr[Idx];
  12555.         g_HeroItemArr[Idx].s.Name := '';
  12556.         AddHeroItemBag(cu);
  12557.       end else
  12558.         if (g_HeroItemArr[Idx].s.StdMode <= 4) or (g_HeroItemArr[Idx].s.StdMode = 31) then begin
  12559.         frmMain.HeroEatItem(Idx);
  12560.       end else begin
  12561.         if (g_WaitingUseItem.Item.s.Name = '') then begin
  12562.           flag := False;
  12563.           where := GetTakeOnPosition(g_HeroItemArr[Idx].s.StdMode);
  12564.           case where of
  12565.             U_DRESS: begin
  12566.                 if g_MyHero.m_btSex = 0 then
  12567.                   if g_HeroItemArr[Idx].s.StdMode = 10 then
  12568.                     flag := True;
  12569.                 if g_MyHero.m_btSex = 1 then
  12570.                   if g_HeroItemArr[Idx].s.StdMode = 11 then
  12571.                     flag := True;
  12572.               end;
  12573.             U_WEAPON: flag := True;
  12574.             U_NECKLACE: flag := True;
  12575.             U_RIGHTHAND: flag := True;
  12576.             U_HELMET: flag := True;
  12577.             U_RINGR, U_RINGL: flag := True;
  12578.             U_ARMRINGR, U_ARMRINGL: flag := True;
  12579.             U_BUJUK: flag := True;
  12580.             U_BELT: flag := True;
  12581.             U_BOOTS: flag := True;
  12582.             U_CHARM: flag := True;
  12583.           end;
  12584.           if flag then begin
  12585.             if where in [U_RINGR, U_RINGL] then begin
  12586.               if g_HeroUseItems[U_RINGR].s.Name = '' then where := U_RINGR;
  12587.               if g_HeroUseItems[U_RINGL].s.Name = '' then where := U_RINGL;
  12588.               if (g_HeroUseItems[U_RINGR].s.Name <> '') and (g_HeroUseItems[U_RINGL].s.Name <> '') then begin
  12589.                 if g_HeroItemArr[Idx].s.Name <> g_HeroUseItems[U_RINGR].s.Name then where := U_RINGR;
  12590.                 if g_HeroItemArr[Idx].s.Name <> g_HeroUseItems[U_RINGL].s.Name then where := U_RINGL;
  12591.               end;
  12592.             end;

  12593.             if where in [U_ARMRINGR, U_ARMRINGL] then begin
  12594.               if g_HeroUseItems[U_ARMRINGR].s.Name = '' then where := U_ARMRINGR;
  12595.               if g_HeroUseItems[U_ARMRINGL].s.Name = '' then where := U_ARMRINGL;
  12596.               if (g_HeroUseItems[U_ARMRINGR].s.Name <> '') and (g_HeroUseItems[U_ARMRINGL].s.Name <> '') then begin
  12597.                 if g_HeroItemArr[Idx].s.Name <> g_HeroUseItems[U_ARMRINGR].s.Name then where := U_ARMRINGR;
  12598.                 if g_HeroItemArr[Idx].s.Name <> g_HeroUseItems[U_ARMRINGL].s.Name then where := U_ARMRINGL;
  12599.               end;
  12600.             end;
  12601.             g_WaitingUseItem.Index := where;
  12602.             g_WaitingUseItem.Item := g_HeroItemArr[Idx];
  12603.             g_HeroItemArr[Idx].s.Name := '';
  12604.             frmMain.SendHeroTakeOnItem(where, g_WaitingUseItem.Item.MakeIndex, g_WaitingUseItem.Item.s.Name);
  12605.           end;
  12606.         end;
  12607.       end;
  12608.     end else begin
  12609.       if g_boItemMoving and (g_MovingItem.Item.s.Name <> '') then begin
  12610.         FillChar(keyvalue, SizeOf(TKeyBoardState), #0);
  12611.         GetKeyboardState(keyvalue);
  12612.         if keyvalue[VK_CONTROL] = $80 then begin
  12613.           cu := g_MovingItem.Item;
  12614.           g_MovingItem.Item.s.Name := '';
  12615.           g_boItemMoving := False;
  12616.           AddHeroItemBag(cu);
  12617.         end else
  12618.           if (g_MovingItem.Index = Idx) and
  12619.           (g_MovingItem.Item.s.StdMode <= 4) or (g_HeroItemArr[Idx].s.StdMode = 31)
  12620.           then begin
  12621.           frmMain.HeroEatItem(-1);
  12622.         end else
  12623.           if (g_WaitingUseItem.Item.s.Name = '') then begin
  12624.           if g_MovingItem.Index >= 0 then begin
  12625.             flag := False;
  12626.             where := GetTakeOnPosition(g_MovingItem.Item.s.StdMode);
  12627.             case where of
  12628.               U_DRESS: begin
  12629.                   if g_MyHero.m_btSex = 0 then
  12630.                     if g_MovingItem.Item.s.StdMode = 10 then
  12631.                       flag := True;
  12632.                   if g_MyHero.m_btSex = 1 then
  12633.                     if g_MovingItem.Item.s.StdMode = 11 then
  12634.                       flag := True;
  12635.                 end;
  12636.               U_WEAPON: flag := True;
  12637.               U_NECKLACE: flag := True;
  12638.               U_RIGHTHAND: flag := True;
  12639.               U_HELMET: flag := True;
  12640.               U_RINGR, U_RINGL: flag := True;
  12641.               U_ARMRINGR, U_ARMRINGL: flag := True;
  12642.               U_BUJUK: flag := True;
  12643.               U_BELT: flag := True;
  12644.               U_BOOTS: flag := True;
  12645.               U_CHARM: flag := True;
  12646.             end;

  12647.             if flag then begin
  12648.               if where in [U_RINGR, U_RINGL] then begin
  12649.                 if g_HeroUseItems[U_RINGR].s.Name = '' then where := U_RINGR;
  12650.                 if g_HeroUseItems[U_RINGL].s.Name = '' then where := U_RINGL;
  12651.                 if (g_HeroUseItems[U_RINGR].s.Name <> '') and (g_HeroUseItems[U_RINGL].s.Name <> '') then begin
  12652.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_RINGR].s.Name then where := U_RINGR;
  12653.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_RINGL].s.Name then where := U_RINGL;
  12654.                 end;
  12655.               end;

  12656.               if where in [U_ARMRINGR, U_ARMRINGL] then begin
  12657.                 if g_HeroUseItems[U_ARMRINGR].s.Name = '' then where := U_ARMRINGR;
  12658.                 if g_HeroUseItems[U_ARMRINGL].s.Name = '' then where := U_ARMRINGL;
  12659.                 if (g_HeroUseItems[U_ARMRINGR].s.Name <> '') and (g_HeroUseItems[U_ARMRINGL].s.Name <> '') then begin
  12660.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_ARMRINGR].s.Name then where := U_ARMRINGR;
  12661.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_ARMRINGL].s.Name then where := U_ARMRINGL;
  12662.                 end;
  12663.               end;

  12664.               g_WaitingUseItem := g_MovingItem;
  12665.               g_WaitingUseItem.Index := where;
  12666.               frmMain.SendHeroTakeOnItem(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12667.               g_MovingItem.Item.s.Name := '';
  12668.               g_MovingItem.Owner := nil;
  12669.               g_boItemMoving := False;
  12670.             end;
  12671.           end;
  12672.         end;
  12673.       end;
  12674.     end;
  12675.   end;
  12676.   ArrangeHeroItemBag;
  12677. end;

  12678. procedure TFrmDlg.DHeroItemGridGridSelect(Sender: TObject; ACol,
  12679.   ARow: Integer; Shift: TShiftState);
  12680. var
  12681.   Idx, mi: Integer;
  12682.   temp: TClientItem;
  12683.   where: Integer;
  12684.   flag: Boolean;
  12685. begin
  12686.   if g_MyHero = nil then Exit;
  12687.   //if g_btItemMoving = 5 then Exit;
  12688.   Idx := ACol + ARow * DHeroItemGrid.ColCount;
  12689.   if Idx in [0..MAXHEROBAGITEM - 1] then begin
  12690.     if not g_boItemMoving then begin
  12691.       ClearMoveRect();
  12692.       if g_HeroItemArr[Idx].s.Name <> '' then begin
  12693.         g_boItemMoving := True;
  12694.         g_MovingItem.Owner := DHeroItemBag;
  12695.         g_MovingItem.Index := Idx;
  12696.         g_MovingItem.Item := g_HeroItemArr[Idx];
  12697.         g_HeroItemArr[Idx].s.Name := '';
  12698.         ItemClickSound(g_HeroItemArr[Idx].s);
  12699.       end;
  12700.      { if g_boItemMoving and (g_MovingItem.Owner = DHeroItemBag) and (g_WaitingUseItem.Item.s.Name = '') then begin
  12701.         if mbRight = Button then begin //右键穿装备
  12702.           flag := False;
  12703.           where := GetTakeOnPosition(g_MovingItem.Item.s.StdMode);
  12704.           if g_MovingItem.Index >= 0 then begin
  12705.             case where of
  12706.               U_DRESS: begin
  12707.                   if g_MyHero.m_btSex = 0 then
  12708.                     if g_MovingItem.Item.s.StdMode <> 10 then
  12709.                       Exit;
  12710.                   if g_MyHero.m_btSex = 1 then
  12711.                     if g_MovingItem.Item.s.StdMode <> 11 then
  12712.                       Exit;
  12713.                   flag := True;
  12714.                 end;
  12715.               U_WEAPON: flag := True;
  12716.               U_NECKLACE: flag := True;
  12717.               U_RIGHTHAND: flag := True;
  12718.               U_HELMET: flag := True;
  12719.               U_RINGR, U_RINGL: flag := True;
  12720.               U_ARMRINGR, U_ARMRINGL: flag := True;
  12721.               U_BUJUK: flag := True;
  12722.               U_BELT: flag := True;
  12723.               U_BOOTS: flag := True;
  12724.               U_CHARM: flag := True;
  12725.             end;
  12726.             if flag then begin
  12727.               if where in [U_RINGR, U_RINGL] then begin
  12728.                 if g_HeroUseItems[U_RINGR].s.Name = '' then where := U_RINGR;
  12729.                 if g_HeroUseItems[U_RINGL].s.Name = '' then where := U_RINGL;
  12730.                 if (g_HeroUseItems[U_RINGR].s.Name <> '') and (g_HeroUseItems[U_RINGL].s.Name <> '') then begin
  12731.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_RINGR].s.Name then where := U_RINGR;
  12732.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_RINGL].s.Name then where := U_RINGL;
  12733.                 end;
  12734.               end;

  12735.               if where in [U_ARMRINGR, U_ARMRINGL] then begin
  12736.                 if g_HeroUseItems[U_ARMRINGR].s.Name = '' then where := U_ARMRINGR;
  12737.                 if g_HeroUseItems[U_ARMRINGL].s.Name = '' then where := U_ARMRINGL;
  12738.                 if (g_HeroUseItems[U_ARMRINGR].s.Name <> '') and (g_HeroUseItems[U_ARMRINGL].s.Name <> '') then begin
  12739.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_ARMRINGR].s.Name then where := U_ARMRINGR;
  12740.                   if g_MovingItem.Item.s.Name <> g_HeroUseItems[U_ARMRINGL].s.Name then where := U_ARMRINGL;
  12741.                 end;
  12742.               end;

  12743.               g_WaitingUseItem := g_MovingItem;
  12744.               g_WaitingUseItem.Index := where;
  12745.               frmMain.SendHeroTakeOnItem(where, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12746.               g_MovingItem.Item.s.Name := '';
  12747.               g_boItemMoving := False;
  12748.             end else begin
  12749.               g_HeroItemArr[idx] := g_MovingItem.Item;
  12750.               g_MovingItem.Item.s.Name := '';
  12751.               g_boItemMoving := False;
  12752.             end;
  12753.           end;
  12754.         end else begin
  12755.           ItemClickSound(g_HeroItemArr[idx].s);
  12756.         end;
  12757.       end;}
  12758.     end else begin
  12759.       //ItemClickSound (MovingItem.Item.S.StdMode);
  12760.       mi := g_MovingItem.Index;
  12761.       if (g_MovingItem.Owner = DDealDlg) or (g_MovingItem.Owner = DUpgrade) then Exit;
  12762.       if (mi = -97) or (mi = -98) then Exit;
  12763.       if (mi < 0) and (mi >= -13 {-9}) and ((g_MovingItem.Owner = DHeroStateWin) or (g_MovingItem.Owner = DStateWin)) then begin //-99: 脱装备
  12764.         if (g_MovingItem.Owner = DStateWin) then begin
  12765.           frmMain.SendTakeOffItemToHeroBag(-(g_MovingItem.Index + 1), g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12766.         end else
  12767.           if (g_MovingItem.Owner = DHeroStateWin) then begin
  12768.           frmMain.SendHeroTakeOffItem(-(g_MovingItem.Index + 1), g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12769.         end;
  12770.         g_WaitingUseItem := g_MovingItem;
  12771.         g_MovingItem.Item.s.Name := '';
  12772.         g_boItemMoving := False;
  12773.         ArrangeHeroItemBag;
  12774.         Exit;
  12775.       end;

  12776.       if (g_MovingItem.Owner = DHeroItemBag) then begin //英雄包裹装备交换
  12777.         if (g_HeroItemArr[Idx].s.Name <> '') then begin
  12778.           temp := g_HeroItemArr[Idx];
  12779.           g_HeroItemArr[Idx] := g_MovingItem.Item;
  12780.           g_MovingItem.Index := Idx;
  12781.           g_MovingItem.Item := temp;
  12782.         end else begin
  12783.           g_boItemMoving := False;
  12784.           g_HeroItemArr[Idx] := g_MovingItem.Item;
  12785.           g_MovingItem.Item.s.Name := '';
  12786.           g_MovingItem.Owner := nil;
  12787.         end;
  12788.         ArrangeHeroItemBag;
  12789.         Exit;
  12790.       end;

  12791.       if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DUpgrade) then begin //英雄和主人包裹装备交换
  12792.         frmMain.SendItemToHeroBag((g_MovingItem.Index), g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  12793.         g_boItemMoving := False;
  12794.         g_WaitingUseItem := g_MovingItem;
  12795.         g_MovingItem.Item.s.Name := '';
  12796.         ArrangeHeroItemBag;
  12797.         Exit;
  12798.       end;
  12799.     end;
  12800.   end;
  12801.   ArrangeHeroItemBag;
  12802. end;

  12803. procedure TFrmDlg.DHeroItemGridGridPaint(Sender: TObject; ACol,
  12804.   ARow: Integer; Rect: TRect; State: TGridDrawState;
  12805.   dsurface: TTexture);
  12806. var
  12807.   nIdx: Integer;
  12808.   d: TTexture;
  12809. begin
  12810.   if g_MyHero = nil then Exit;
  12811.   nIdx := ACol + ARow * DHeroItemGrid.ColCount;
  12812.   if nIdx in [0..MAXHEROBAGITEM - 1] then begin
  12813.     if g_HeroItemArr[nIdx].s.Name <> '' then begin
  12814.       d := g_WBagItemImages.Images[g_HeroItemArr[nIdx].s.looks];
  12815.       if d <> nil then
  12816.         with DHeroItemGrid do begin
  12817.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  12818.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  12819.             d.ClientRect,
  12820.             d, True);
  12821.         end;

  12822.       with DHeroItemGrid do begin
  12823.         if (g_HeroItemArr[nIdx].s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_HeroItemArr[nIdx].s.AddPoint))} then begin
  12824.           if GetTickCount - g_DrawHeroItemArr[nIdx].dwDrawTick >= 200 then begin
  12825.             g_DrawHeroItemArr[nIdx].dwDrawTick := GetTickCount;
  12826.             if g_DrawHeroItemArr[nIdx].nIndex <= 0 then g_DrawHeroItemArr[nIdx].nIndex := 260 - 1;
  12827.             Inc(g_DrawHeroItemArr[nIdx].nIndex);
  12828.             if g_DrawHeroItemArr[nIdx].nIndex > 265 then g_DrawHeroItemArr[nIdx].nIndex := 260;
  12829.           end;
  12830.           d := g_WMain2Images.Images[g_DrawHeroItemArr[nIdx].nIndex];
  12831.           if d <> nil then begin
  12832.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  12833.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  12834.           end;
  12835.         end;

  12836.         if g_HeroItemArr[nIdx].s.AddValue[12] >= 2 then begin
  12837.           if GetTickCount - g_DrawHeroItemArr_[nIdx].dwDrawTick >= 200 then begin
  12838.             g_DrawHeroItemArr_[nIdx].dwDrawTick := GetTickCount;
  12839.             if g_DrawHeroItemArr_[nIdx].nIndex <= 0 then g_DrawHeroItemArr_[nIdx].nIndex := 600 - 1;
  12840.             Inc(g_DrawHeroItemArr_[nIdx].nIndex);
  12841.             if g_DrawHeroItemArr_[nIdx].nIndex > 617 then g_DrawHeroItemArr_[nIdx].nIndex := 600;
  12842.           end;
  12843.           d := g_WMain3Images.Images[g_DrawHeroItemArr_[nIdx].nIndex];
  12844.           if d <> nil then begin
  12845.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  12846.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  12847.           end;
  12848.         end;
  12849.       end;
  12850.     end;
  12851.   end;
  12852. end;

  12853. procedure TFrmDlg.DHeroItemGridGridMouseMove(Sender: TObject; ACol,
  12854.   ARow: Integer; Shift: TShiftState);
  12855. var
  12856.   nIdx: Integer;
  12857.   temp: TClientItem;
  12858.   iname, d1, d2, d3: string;
  12859.   useable: Boolean;
  12860.   hcolor: TColor;
  12861.   nWhere: Byte;
  12862.   boShowMsg: Boolean;
  12863.   List: TStringList;
  12864. begin
  12865.   DScreen.ClearHint;
  12866.   boShowMsg := False;
  12867.   if ssRight in Shift then begin
  12868.     if g_boItemMoving then
  12869.       DHeroItemGridGridSelect(Self, ACol, ARow, Shift);
  12870.   end else begin
  12871.     nIdx := ACol + ARow * DHeroItemGrid.ColCount;
  12872.     if nIdx in [0..MAXHEROBAGITEM - 1] then begin
  12873.       g_MoveRect := DHeroItemGrid.ClientRect;
  12874.      {g_MoveRect.Right := g_MoveRect.Right - 4;
  12875.       g_MoveRect.Top := g_MoveRect.Top + 2;}

  12876.       g_MouseHeroItem := g_HeroItemArr[nIdx];
  12877.       if (g_MouseHeroItem.s.Name <> '') then begin
  12878.         if (g_ServerConfig.btShowClientItemStyle = 0) then begin
  12879.           nWhere := GetHeroUseItemByBagItem(g_MouseHeroItem.s.StdMode);
  12880.           if g_Config.boCompareItem and (nWhere >= 0) then begin

  12881.             List := TStringList.Create;
  12882.             try
  12883.               GetMouseItemInfo(g_MyHero, @g_MouseHeroItem, iname, d1, d2, d3, useable);
  12884.               List.AddStrings(HintList);

  12885.               GetMouseItemInfo(g_MyHero, @g_HeroUseItems[nWhere], iname, d1, d2, d3, useable);
  12886.               if HintList.Count > 0 then begin
  12887.                 HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  12888.               end;
  12889.               with DHeroItemGrid do
  12890.                 DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  12891.                   SurfaceY(Top + (ARow + 1) * RowHeight),
  12892.                   List, HintList, False);
  12893.               HintList.Clear;
  12894.             finally
  12895.               List.Free;
  12896.             end;
  12897.             g_MouseHeroItem.s.Name := '';
  12898.           end else begin
  12899.             GetMouseItemInfo(g_MyHero, @g_MouseHeroItem, iname, d1, d2, d3, useable);
  12900.             if HintList.Count > 0 then begin
  12901.               with DHeroItemGrid do
  12902.                 DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  12903.                   SurfaceY(Top + (ARow + 1) * RowHeight),
  12904.                   HintList, False);
  12905.             end;
  12906.           end;

  12907.           {GetMouseItemInfo(g_MyHero, @g_MouseHeroItem, iname, d1, d2, d3, useable);
  12908.           if (HintList.Count > 0) then begin
  12909.             with DHeroItemGrid do
  12910.               DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  12911.                 SurfaceY(Top + (ARow + 1) * RowHeight),
  12912.                 HintList, False);
  12913.           end;}
  12914.         end;
  12915.       end;
  12916.     end else ClearMoveRect();
  12917.   end;
  12918. end;

  12919. procedure TFrmDlg.DButtonReCallHeroClick(Sender: TObject; X, Y: Integer);
  12920. begin
  12921.   if g_MyHero = nil then begin
  12922.     if GetTickCount - g_dwRecallHeroTick > 500 then begin
  12923.       g_dwRecallHeroTick := GetTickCount;
  12924.       frmMain.SendClientMessage(CM_HEROLOGON, 0, 0, 0, 0);
  12925.     end;
  12926.   end else begin
  12927.     frmMain.SendClientMessage(CM_HEROLOGOUT, g_MyHero.m_nRecogId, 0, 0, 0);
  12928.   end;
  12929. end;

  12930. procedure TFrmDlg.DButtonHeroStateClick(Sender: TObject; X, Y: Integer);
  12931. begin
  12932.   if g_MyHero = nil then Exit;
  12933.   DHeroStateWin.Visible := not DHeroStateWin.Visible;
  12934. end;

  12935. procedure TFrmDlg.DButtonHeroBagClick(Sender: TObject; X, Y: Integer);
  12936. begin
  12937.   if g_MyHero = nil then Exit;
  12938.   DHeroItemBag.Visible := not DHeroItemBag.Visible;
  12939.   //DBoxItemGrid.Visible := DHeroItemBag.Visible;
  12940. end;

  12941. procedure TFrmDlg.OpenHeroHealthState;
  12942. begin
  12943.   if not DHeroHealthStateWin.Visible then
  12944.     DHeroHealthStateWin.Visible := True;
  12945.   if DMerchantDlg.Visible then begin
  12946.     DMerchantDlg.Floating := True;
  12947.     try
  12948.       DMerchantDlg.Visible := True;
  12949.     finally
  12950.       DMerchantDlg.Floating := False;
  12951.     end;
  12952.   end;
  12953. end;

  12954. procedure TFrmDlg.CloseHeroAllWindows;
  12955. begin
  12956.   DHeroHealthStateWin.Visible := False;
  12957.   DHeroItemBag.Visible := False;
  12958.   DHeroStateWin.Visible := False;
  12959. end;

  12960. procedure TFrmDlg.DCloseHeroStateClick(Sender: TObject; X, Y: Integer);
  12961. begin
  12962.   DHeroStateWin.Visible := False;
  12963. end;

  12964. procedure TFrmDlg.DCloseHeroBagDirectPaint(Sender: TObject;
  12965.   dsurface: TTexture);
  12966. var
  12967.   d: TTexture;
  12968. begin
  12969.   with DCloseHeroBag do begin
  12970.     if Downed then begin
  12971.       d := nil;
  12972.       if WLib <> nil then
  12973.         d := WLib.Images[FaceIndex];
  12974.       if d <> nil then
  12975.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  12976.     end;
  12977.   end;
  12978. end;

  12979. procedure TFrmDlg.DPrevHeroStateClick(Sender: TObject; X, Y: Integer);
  12980. begin
  12981.   Dec(HeroStatePage);
  12982.   if HeroStatePage < 0 then
  12983.     HeroStatePage := MAXHEROSTATEPAGE - 1;
  12984.   HeroPageChanged;
  12985. end;

  12986. procedure TFrmDlg.DNextHeroStateClick(Sender: TObject; X, Y: Integer);
  12987. begin
  12988.   Inc(HeroStatePage);
  12989.   if HeroStatePage > MAXHEROSTATEPAGE - 1 then
  12990.     HeroStatePage := 0;
  12991.   HeroPageChanged;
  12992. end;

  12993. procedure TFrmDlg.DHeroStMag1DirectPaint(Sender: TObject;
  12994.   dsurface: TTexture);
  12995. var
  12996.   Idx, icon: Integer;
  12997.   d: TTexture;
  12998.   pm: PTClientMagic;
  12999. begin
  13000.   if g_MyHero = nil then Exit;
  13001.   with Sender as TDButton do begin
  13002.     Idx := _MAX(tag + HeroMagicPage * 6, 0);
  13003.     if Idx < g_HeroMagicList.Count then begin
  13004.       pm := PTClientMagic(g_HeroMagicList[Idx]);
  13005.       icon := pm.Def.btEffect * 2;
  13006.      { if pm.Level >= 4 then begin
  13007.         case pm.Def.wMagicId of
  13008.           13: icon := 140;
  13009.           26: icon := 142;
  13010.           31: icon := 104;
  13011.           45: icon := 144;
  13012.         end;
  13013.       end;
  13014.       }
  13015.       if pm.Def.btEffect = 50 then icon := 84;
  13016.       //if pm.Def.btEffect = 51 then icon := 94;

  13017.       if pm.Def.btEffect = 70 then icon := 1 * 2;
  13018.       if pm.Def.btEffect = 71 then icon := 3 * 2;
  13019.       if pm.Def.btEffect = 72 then icon := 10 * 2;

  13020.       if pm.Level >= 4 then begin
  13021.         case pm.Def.wMagicId of
  13022.           13: icon := 140;
  13023.           26: icon := 142;
  13024.           31: icon := 104;
  13025.           45: icon := 144;
  13026.         end;
  13027.       end;

  13028.       if icon >= 0 then begin
  13029.         if not Downed then begin
  13030.           d := g_WMagIconImages.Images[icon];

  13031.           if (Ord(pm.Key) = 0) and (d <> nil) then begin
  13032.             g_ImgMixSurface.SetSize(d.Width, d.Height);
  13033.             g_ImgMixSurface.Fill(0);
  13034.             g_ImgMixSurface.Draw(0, 0, d.ClientRect, d, False);
  13035.             DrawEffect(0, 0, g_ImgMixSurface, d, ceGrayScale);
  13036.             d := g_ImgMixSurface;
  13037.           end;

  13038.           if d <> nil then
  13039.             dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13040.         end else begin
  13041.           d := g_WMagIconImages.Images[icon + 1];

  13042.           if (Ord(pm.Key) = 0) and (d <> nil) then begin
  13043.             g_ImgMixSurface.SetSize(d.Width, d.Height);
  13044.             g_ImgMixSurface.Fill(0);
  13045.             g_ImgMixSurface.Draw(0, 0, d.ClientRect, d, False);
  13046.             DrawEffect(0, 0, g_ImgMixSurface, d, ceGrayScale);
  13047.             d := g_ImgMixSurface;
  13048.           end;

  13049.           if d <> nil then
  13050.             dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13051.         end;
  13052.       end;
  13053.     end;
  13054.   end;
  13055. end;

  13056. procedure TFrmDlg.DHeroStPageUpClick(Sender: TObject; X, Y: Integer);
  13057. begin
  13058.   if Sender = DHeroStPageUp then begin
  13059.     if HeroMagicPage > 0 then
  13060.       Dec(HeroMagicPage);
  13061.   end else begin
  13062.     if HeroMagicPage < (g_HeroMagicList.Count + 5) div 6 - 1 then
  13063.       Inc(HeroMagicPage);
  13064.   end;
  13065. end;

  13066. procedure TFrmDlg.DOptionClick();
  13067. var
  13068.   I: Integer;
  13069. begin
  13070.   DConfigDlg.Visible := not DConfigDlg.Visible;
  13071.   if DConfigDlg.Visible then begin
  13072.     DComboboxBookIndex.Items.Clear;
  13073.     for I := Low(g_ItemArr) to High(g_ItemArr) do begin
  13074.       if g_ItemArr[I].s.Name <> '' then
  13075.         DComboboxBookIndex.Items.Add(g_ItemArr[I].s.Name);
  13076.     end;
  13077.     if g_Config.sRenewBookNowBookItem <> '' then begin
  13078.       if (g_Config.nRenewBookNowBookIndex >= 0) and (g_Config.nRenewBookNowBookIndex < DComboboxBookIndex.Items.Count) then begin
  13079.         if g_Config.sRenewBookNowBookItem = DComboboxBookIndex.Items.Strings[g_Config.nRenewBookNowBookIndex] then Exit;
  13080.       end;
  13081.       g_Config.nRenewBookNowBookIndex := -1;
  13082.       DComboboxBookIndex.ItemIndex := -1;
  13083.       for I := 0 to DComboboxBookIndex.Items.Count - 1 do begin
  13084.         if CompareText(g_Config.sRenewBookNowBookItem, DComboboxBookIndex.Items.Strings[I]) = 0 then begin
  13085.           g_Config.nRenewBookNowBookIndex := I;
  13086.           DComboboxBookIndex.ItemIndex := I;
  13087.           Break;
  13088.         end;
  13089.       end;
  13090.       SaveUserConfig();
  13091.     end;
  13092.     DComboboxBookIndex.Text := g_Config.sRenewBookNowBookItem;
  13093.   end;
  13094. end;

  13095. procedure TFrmDlg.DHeroStateWinMouseMove(Sender: TObject;
  13096.   Shift: TShiftState; X, Y: Integer);
  13097. begin
  13098.   DScreen.ClearHint;
  13099.   HintList.Clear;
  13100.   g_MouseHeroStateItem.s.Name := '';
  13101.   g_MouseHeroItem.s.Name := '';
  13102.   g_MouseItem.s.Name := '';
  13103. end;

  13104. procedure TFrmDlg.DHeroHealthStateWinClick(Sender: TObject; X, Y: Integer);
  13105. begin
  13106.   if ((g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DUpgrade)) and (g_MovingItem.Item.s.Name <> '') then begin
  13107.     g_boItemMoving := False;
  13108.     g_WaitingUseItem := g_MovingItem;
  13109.     frmMain.SendItemToHeroBag(g_MovingItem.Index, g_MovingItem.Item.MakeIndex, g_MovingItem.Item.s.Name);
  13110.     ItemClickSound(g_MovingItem.Item.s);
  13111.     g_MovingItem.Item.s.Name := '';
  13112.     g_MovingItem.Owner := nil;
  13113.   end;
  13114. end;

  13115. procedure TFrmDlg.DFirDragonDirectPaint(Sender: TObject;
  13116.   dsurface: TTexture);
  13117. var
  13118.   d: TTexture;
  13119.   rc: TRect;
  13120. begin
  13121.   with DFirDragon do begin
  13122.     d := nil;
  13123.     if WLib <> nil then
  13124.       d := WLib.Images[FaceIndex];
  13125.     if d <> nil then
  13126.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  13127.     d := nil;
  13128.     if g_MyHero <> nil then begin
  13129.       if g_HeroUseItems[U_BUJUK].s.Name <> '' then begin
  13130.         if (g_HeroUseItems[U_BUJUK].s.StdMode = 25) and (g_HeroUseItems[U_BUJUK].s.Shape = 9) then begin
  13131.           if g_MyHero.m_nAngryValue >= g_MyHero.m_nMaxAngryValue then begin
  13132.             if GetTickCount - g_dwFirDragonTick > 500 then begin
  13133.               g_dwFirDragonTick := GetTickCount;
  13134.               Inc(g_nFirDragon);
  13135.               if g_nFirDragon > 1 then g_nFirDragon := 0;
  13136.             end;
  13137.             d := g_WMain3Images.Images[411 + g_nFirDragon];
  13138.           end else begin
  13139.             d := g_WMain3Images.Images[411];
  13140.           end;
  13141.           if g_MyHero.m_nMaxAngryValue > 0 then begin
  13142.             if d <> nil then begin
  13143.           //火龙之心
  13144.               rc := d.ClientRect;
  13145.               rc.Top := Round(rc.Bottom / g_MyHero.m_nMaxAngryValue * (g_MyHero.m_nMaxAngryValue - g_MyHero.m_nAngryValue));

  13146.               dsurface.Draw(SurfaceX(Left) + 2, SurfaceY(Top) + rc.Top + 20 {SCREENHEIGHT - d.Height}, rc, d, True);
  13147.             //DebugOutStr('dsurface.Draw');
  13148.             end;
  13149.           end;
  13150.         end;
  13151.       end;
  13152.     end;
  13153.   end;
  13154. end;

  13155. procedure TFrmDlg.OpenSellOffDlg;
  13156. begin
  13157.   SellItemIndex := -1;
  13158.   MoveSellItemIndex := -1;
  13159.   DUserSellOff.Visible := True;
  13160.   EdSearch.SetFocus;
  13161. end;

  13162. procedure TFrmDlg.CloseSellOffDlg;
  13163. begin
  13164.   DUserSellOff.Visible := False;
  13165.   ReleaseDFocus;
  13166.   if EdChat.Visible then EdChat.SetFocus;
  13167. end;

  13168. procedure TFrmDlg.OpenStoreDlg;
  13169. begin
  13170.   if not g_MySelf.m_boStartStore then begin
  13171.     DItemBag.Left := SCREENWIDTH - DItemBag.Width - 40; //475;
  13172.     DItemBag.Top := 20;
  13173.     DItemBag.Visible := True;

  13174.     DStoreDlg.Left := DItemBag.Left - DStoreDlg.Width - 30;
  13175.     DStoreDlg.Top := 45;
  13176.   end;
  13177.   DStoreDlg.Visible := True;
  13178.   DEditStore.SetFocus;
  13179. end;

  13180. procedure TFrmDlg.CloseStoreDlg;
  13181. var
  13182.   I: Integer;
  13183. begin
  13184.   if (g_MySelf <> nil) and (not g_MySelf.m_boStartStore) and (not g_boStartStoreing) then begin
  13185.     for I := 0 to 14 do begin
  13186.       if g_StoreItems[I].Item.s.Name <> '' then begin
  13187.         AddItemBag(g_StoreItems[I].Item);
  13188.       end;
  13189.       g_StoreItems[I].Item.s.Name := '';
  13190.     end;
  13191.   end;
  13192.   DItemBag.Left := 0;
  13193.   DItemBag.Top := 80;

  13194.   DStoreDlg.Visible := False;
  13195.   ReleaseDFocus;
  13196.   if EdChat.Visible then EdChat.SetFocus;
  13197. end;

  13198. procedure TFrmDlg.OpenUserStoreDlg;
  13199. begin
  13200.   g_SelectStoreItem.Item.s.Name := '';
  13201.   DUserStore.Visible := True;
  13202.   DEditUserStore.SetFocus;
  13203. end;

  13204. procedure TFrmDlg.CloseUserStoreDlg;
  13205. begin
  13206.   g_SelectStoreItem.Item.s.Name := '';
  13207.   DUserStore.Visible := False;
  13208.   ReleaseDFocus;
  13209.   if EdChat.Visible then EdChat.SetFocus;
  13210. end;

  13211. procedure TFrmDlg.DSearchSellOffDirectPaint(Sender: TObject;
  13212.   dsurface: TTexture);
  13213. var
  13214.   d: TTexture;
  13215. begin
  13216.   with Sender as TDButton do begin
  13217.     if TDButton(Sender).Downed then begin
  13218.       d := nil;
  13219.       if WLib <> nil then
  13220.         d := WLib.Images[FaceIndex + 1];
  13221.       if d <> nil then
  13222.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13223.     end else begin
  13224.       d := nil;
  13225.       if WLib <> nil then
  13226.         d := WLib.Images[FaceIndex];
  13227.       if d <> nil then
  13228.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13229.     end;
  13230.   end;
  13231. end;

  13232. procedure TFrmDlg.DUserSellOffDirectPaint(Sender: TObject;
  13233.   dsurface: TTexture);
  13234. var
  13235.   d: TTexture;
  13236.   I: Integer;
  13237.   //lh: Integer;
  13238.   nPrice: Integer;
  13239.   sPage: string;
  13240.   sName: string;
  13241.   sPrice: string;
  13242.   sCharName: string;
  13243.   nX1, nX2, nX3: Integer;
  13244.   nIndex, nX, nY: Integer;
  13245.   hcolor, keyimg, old: Integer;
  13246.   iname, d1, d2, d3: string;
  13247.   useable: Boolean;
  13248.   TempList: TStringList;
  13249. begin
  13250.   with DUserSellOff do begin
  13251.     d := WLib.Images[FaceIndex];
  13252.     if d <> nil then
  13253.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13254.     //Font.Color := clWhite;
  13255.     case g_nSellItemType of
  13256.       0: sName := '所有物品';
  13257.       1: sName := '所有衣服';
  13258.       2: sName := '所有武器';
  13259.       3: sName := '所有首饰';
  13260.       4: sName := '所有宝石';
  13261.       5: sName := '其他物品';
  13262.       6: sName := '我的物品';
  13263.       7: sName := '取款';
  13264.       8: sName := '查询物品';
  13265.     end;

  13266.     with dsurface do begin
  13267.       TextOut(SurfaceX(Left) + 222 - TextWidth(sName) div 2, SurfaceY(Top) + 14, sName);

  13268.       if g_nSellItemPageCount = 0 then begin
  13269.         sPage := Format('%d/%d', [g_nSellItemPage, g_nSellItemPageCount]);
  13270.       end else begin
  13271.         sPage := Format('%d/%d', [g_nSellItemPage + 1, g_nSellItemPageCount]);
  13272.       end;

  13273.       TextOut(SurfaceX(Left) + 410 - TextWidth(sPage) div 2, SurfaceY(Top) + 14, sPage);
  13274.       TextOut(SurfaceX(Left) + 73 - TextWidth('AA'), SurfaceY(Top) + 45, '物品');
  13275.       TextOut(SurfaceX(Left) + 233 - TextWidth('AA'), SurfaceY(Top) + 45, '价格');

  13276.       if g_nSellItemType in [6, 7] then begin
  13277.         TextOut(SurfaceX(Left) + 394 - TextWidth('AA'), SurfaceY(Top) + 45, '状态');
  13278.       end else begin
  13279.         TextOut(SurfaceX(Left) + 394 - TextWidth('AA'), SurfaceY(Top) + 45, '卖家');
  13280.       end;
  13281.     end;


  13282.     nX1 := SurfaceX(Left) + 28;
  13283.     nX2 := SurfaceX(Left) + 195;
  13284.     nX3 := SurfaceX(Left) + 343;
  13285.     nY := SurfaceY(Top) + 69;

  13286.     nIndex := 1;
  13287.     sName := '';
  13288.     sPrice := '';
  13289.     for I := Low(g_SellItems) to High(g_SellItems) do begin
  13290.       with dsurface do begin
  13291.         if (g_SellItems[I].sCharName <> '') and (g_SellItems[I].SellItem.s.Name <> '') then begin
  13292.           sName := '';
  13293.           sPrice := '';
  13294.           nPrice := g_SellItems[I].SellItem.s.Price;
  13295.           if nIndex = SellItemIndex then begin
  13296.             g_MouseSellItems := g_SellItems[I];
  13297.             hcolor := clRed;
  13298.           end else begin
  13299.             if nPrice < 0 then hcolor := clLime
  13300.             else hcolor := clWhite;
  13301.           end;

  13302.           if I = MoveSellItemIndex then hcolor := GetRGB(253) {clyellow};

  13303.           sName := g_SellItems[I].SellItem.s.Name;
  13304.           sPrice := IntToStr(abs(nPrice));
  13305.           if g_nSellItemType = 6 then begin
  13306.             sCharName := '未售出';
  13307.           end else
  13308.             if g_nSellItemType = 7 then begin
  13309.             sCharName := '已售出';
  13310.           end else begin
  13311.             sCharName := g_SellItems[I].sCharName;
  13312.           end;

  13313.           TextOut(nX1, nY, sName, hcolor);
  13314.           TextOut(nX2, nY, sPrice, hcolor);
  13315.           TextOut(nX3, nY, sCharName, hcolor);
  13316.           Inc(nY, 19);
  13317.           Inc(nIndex);
  13318.         end;
  13319.       end;
  13320.     end;
  13321.     if (g_MouseSellItems.sCharName <> '') and (g_MouseSellItems.SellItem.s.Name <> '') then begin
  13322.       d := g_WBagItemImages.Images[g_MouseSellItems.SellItem.s.looks];
  13323.       if d <> nil then
  13324.         dsurface.Draw(SurfaceX(DSellItem.Left), SurfaceY(DSellItem.Top), d.ClientRect, d, True);
  13325.       with dsurface do begin
  13326.         sName := '寄售日期:' + DateTimeToStr(g_MouseSellItems.dSellDateTime);
  13327.         TextOut(SurfaceX(Left) + 19, SurfaceY(Top) + 274, sName);
  13328.       end;
  13329.       with dsurface do begin
  13330.         g_MouseItem := g_MouseSellItems.SellItem;
  13331.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);

  13332.         nX := SurfaceX(DSellItem.Left) + 36;
  13333.         nY := SurfaceY(DSellItem.Top) + 2;

  13334.         TempList := HintList;
  13335.         if TempList.Count > 0 then begin
  13336.           with dsurface do begin
  13337.             TextOut(nX, nY, TempList.Strings[0], clyellow);
  13338.            { for I := 1 to TempList.Count - 1 do begin
  13339.               TextOut(nX, nY + TextHeight('A') * I, TempList.Strings[I], TColor(TempList.Objects[I]));
  13340.             end;   }
  13341.             if TempList.Count > 1 then begin
  13342.               TextOut(nX, nY + TextHeight('A') + 2, TempList.Strings[1], TColor(TempList.Objects[1]));
  13343.             end;
  13344.             if TempList.Count > 2 then begin
  13345.               TextOut(nX, nY + (TextHeight('A') + 2) * 2, TempList.Strings[TempList.Count - 1], TColor(TempList.Objects[TempList.Count - 1]));
  13346.             end;
  13347.           end;
  13348.         end;
  13349.         g_MouseItem.s.Name := '';
  13350.       end;
  13351.     end;
  13352.   end;
  13353. end;

  13354. procedure TFrmDlg.DPrevSellDirectPaint(Sender: TObject;
  13355.   dsurface: TTexture);
  13356. var
  13357.   d: TTexture;
  13358. begin
  13359.   with Sender as TDButton do begin
  13360.     if TDButton(Sender).Downed then begin
  13361.       d := WLib.Images[FaceIndex];
  13362.       if d <> nil then
  13363.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13364.     end;
  13365.   end;
  13366. end;

  13367. procedure TFrmDlg.DBuySellItemDirectPaint(Sender: TObject;
  13368.   dsurface: TTexture);
  13369. var
  13370.   d: TTexture;
  13371. begin
  13372.   with Sender as TDButton do begin
  13373.     if TDButton(Sender).Downed then begin
  13374.       d := WLib.Images[FaceIndex + 1];
  13375.       if d <> nil then
  13376.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13377.     end else begin
  13378.       d := WLib.Images[FaceIndex];
  13379.       if d <> nil then
  13380.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13381.     end;
  13382.   end;
  13383. end;

  13384. procedure TFrmDlg.DCloseSellClick(Sender: TObject; X, Y: Integer);
  13385. begin
  13386.   CloseSellOffDlg;
  13387. end;

  13388. procedure TFrmDlg.DUserSellOffClick(Sender: TObject; X, Y: Integer);
  13389. var
  13390.   lx, ly, Idx: Integer;
  13391. begin
  13392.   lx := X;
  13393.   ly := Y;
  13394.   if (lx >= 12) and (lx <= 455) and (ly >= 69) then begin
  13395.     Idx := (ly - 69) div 19 + 1;
  13396.     if Idx in [Low(g_SellItems)..High(g_SellItems)] then begin
  13397.       SellItemIndex := Idx;
  13398.       //g_MouseSellItems := g_SellItems[SellItemIndex];
  13399.       //Move(g_SellItems[SellItemIndex], g_MouseSellItems, SizeOf(TClientSellItem));
  13400.       //g_MouseItem := g_SellItems[SellItemIndex].SellItem;
  13401.       PlaySound(s_glass_button_click);
  13402.     end else begin
  13403.       SellItemIndex := -1;
  13404.       g_MouseSellItems.sCharName := '';
  13405.       g_MouseSellItems.SellItem.s.Name := '';
  13406.     end;
  13407.   end;
  13408. end;

  13409. procedure TFrmDlg.DPrevSellClick(Sender: TObject; X, Y: Integer);
  13410. begin
  13411.   if g_nSellItemPage > 0 then begin
  13412.     Dec(g_nSellItemPage);
  13413.     frmMain.SendQuerySellItems(g_nSellItemType, g_nSellItemPage, g_sSellItem);
  13414.   end;
  13415. end;

  13416. procedure TFrmDlg.DRefreshSellClick(Sender: TObject; X, Y: Integer);
  13417. begin
  13418.   frmMain.SendQuerySellItems(g_nSellItemType, g_nSellItemPage, g_sSellItem);
  13419. end;

  13420. procedure TFrmDlg.DNextSellClick(Sender: TObject; X, Y: Integer);
  13421. begin
  13422.   if g_nSellItemPage + 1 < g_nSellItemPageCount then begin
  13423.     Inc(g_nSellItemPage);
  13424.     frmMain.SendQuerySellItems(g_nSellItemType, g_nSellItemPage, g_sSellItem);
  13425.   end;
  13426. end;

  13427. procedure TFrmDlg.DSearchSellOffClick(Sender: TObject; X, Y: Integer);
  13428. begin
  13429.   g_sSellItem := Trim(EdSearch.Text);
  13430.   g_nSellItemType := 8;
  13431.   if g_sSellItem <> '' then begin
  13432.     frmMain.SendQuerySellItems(g_nSellItemType, g_nSellItemPage, g_sSellItem);
  13433.   end else begin
  13434.     g_nSellItemType := 0;
  13435.     frmMain.SendQuerySellItems(g_nSellItemType, g_nSellItemPage, g_sSellItem);
  13436.   end;
  13437. end;

  13438. procedure TFrmDlg.DBuySellItemClick(Sender: TObject; X, Y: Integer);
  13439. var
  13440.   sHintString: string;
  13441. begin
  13442.   if (g_MouseSellItems.sCharName <> '') and (g_MouseSellItems.SellItem.s.Name <> '') then begin
  13443.     if g_nSellItemType = 6 then begin
  13444.       sHintString := '你是否要取回 ' + g_MouseSellItems.SellItem.s.Name + ' ?';
  13445.     end else
  13446.       if g_nSellItemType = 7 then begin
  13447.       sHintString := '你是否要取回 ' + g_MouseSellItems.SellItem.s.Name + ' 的寄售款?';
  13448.     end else begin
  13449.       sHintString := '你是否确认购买 ' + g_MouseSellItems.SellItem.s.Name + ' ?';
  13450.     end;
  13451.     if mrOk = FrmDlg.DMessageDlg(sHintString, [mbOk, mbCancel]) then begin
  13452.       if g_nSellItemType = 7 then begin
  13453.         frmMain.SendGetSellItemGold(g_MouseSellItems.SellItem.MakeIndex, g_MouseSellItems.SellItem.s.Name);
  13454.         Exit;
  13455.       end;
  13456.       frmMain.SendBuySellItem(g_MouseSellItems.SellItem.MakeIndex, g_MouseSellItems.SellItem.s.Name);
  13457.     end;
  13458.   end;
  13459. end;

  13460. procedure TFrmDlg.DPrevSellMouseMove(Sender: TObject; Shift: TShiftState;
  13461.   X, Y: Integer);
  13462. var
  13463.   nLocalX, nLocalY: Integer;
  13464.   nHintX, nHintY: Integer;
  13465.   Butt: TDButton;
  13466.   sMsg: string;
  13467. begin
  13468.   Butt := TDButton(Sender);
  13469.   nHintX := Butt.Left;
  13470.   nHintY := DUserSellOff.Top + DUserSellOff.Height;
  13471.   if Sender = DPrevSell then sMsg := '上一页';
  13472.   if Sender = DRefreshSell then sMsg := '刷新';
  13473.   if Sender = DNextSell then sMsg := '下一页';
  13474.   DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite, False);
  13475. end;

  13476. procedure TFrmDlg.DUserSellOffMouseDown(Sender: TObject;
  13477.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  13478. begin
  13479.   DScreen.ClearHint;
  13480. end;

  13481. procedure TFrmDlg.DBoxItemGridGridPaint(Sender: TObject; ACol,
  13482.   ARow: Integer; Rect: TRect; State: TGridDrawState;
  13483.   dsurface: TTexture);
  13484.   function GetNextIndex(nIndex: Integer): Integer;
  13485.   begin
  13486.     case nIndex of
  13487.       0: Result := 1;
  13488.       1: Result := 2;
  13489.       2: Result := 5;
  13490.       3: Result := 0;
  13491.       5: Result := 8;
  13492.       6: Result := 3;
  13493.       7: Result := 6;
  13494.       8: Result := 7;
  13495.     else Result := 0;
  13496.     end;
  13497.   end;
  13498. var
  13499.   d: TTexture;
  13500.   nX, nY: Integer;
  13501.   nRandomBoxItem: Integer;
  13502.   nnIndex, nIndex: Integer;
  13503. begin
  13504.   nIndex := ACol + ARow * DBoxItemGrid.ColCount;
  13505.   if nIndex in [Low(g_BoxItems)..(High(g_BoxItems))] then begin
  13506.     if g_BoxItems[nIndex].s.Name <> '' then begin
  13507.       with DBoxItemGrid do begin
  13508.         if nIndex = 4 then begin //中间格的处理
  13509.           if g_boGetBoxItem then begin //开启转动
  13510.             d := g_WMain3Images.Images[513];
  13511.             if d <> nil then
  13512.               dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13513.                 SurfaceY(Rect.Top + (RowHeight - d.Height - 20) div 2 + 1) + 10,
  13514.                 d.ClientRect,
  13515.                 d, True);
  13516.           end else begin
  13517.             d := g_WMain3Images.Images[514];
  13518.             if d <> nil then begin
  13519.               dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13520.                 SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13521.                 d.ClientRect,
  13522.                 d, True);
  13523.             end;
  13524.             if GetTickCount - g_dwBoxFlashTick > 500 then begin //发光闪烁
  13525.               g_dwBoxFlashTick := GetTickCount;
  13526.               if g_nBoxFlashIdx <> 600 then g_nBoxFlashIdx := 600
  13527.               else Inc(g_nBoxFlashIdx);
  13528.             end;
  13529.             d := g_WMain3Images.Images[g_nBoxFlashIdx];
  13530.             if d <> nil then
  13531.               dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13532.                 SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13533.                 d.ClientRect,
  13534.                 d, True);
  13535.           end;
  13536.         end else begin
  13537.           if g_boGetBoxItem then begin //开启转动
  13538.             if (nIndex = g_btSelBoxItemIndex) and (g_nBoxTrunCount = g_btSelBoxItemIndex) and g_boOpenItemBox then begin //转动结束
  13539.               g_boSelItemOK := True;
  13540.               if GetTickCount - g_dwBoxFlashTick > 500 then begin //发光闪烁
  13541.                 g_dwBoxFlashTick := GetTickCount;
  13542.                 nnIndex := (602 + (g_btBoxType - 1) * 2);
  13543.                 if g_nBoxFlashIdx <> nnIndex then g_nBoxFlashIdx := nnIndex
  13544.                 else Inc(g_nBoxFlashIdx);
  13545.               end;
  13546.               d := g_WMain3Images.Images[514];
  13547.               if d <> nil then begin
  13548.                 dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13549.                   SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13550.                   d.ClientRect,
  13551.                   d, True);
  13552.               end;
  13553.               d := g_WMain3Images.Images[g_nBoxFlashIdx];
  13554.               if d <> nil then
  13555.                 dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13556.                   SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13557.                   d.ClientRect,
  13558.                   d, True);
  13559.             end else begin
  13560.               if not g_boSelItemOK then begin
  13561.                 if (g_nChgCount > 9) and (g_dwChgSpeed < 1200) then begin //转完三圈后开始减速
  13562.                   Inc(g_dwChgSpeed, 120); //调整旋转速度
  13563.                   g_nChgCount := 5;
  13564.                 end;
  13565.                 if (g_boOpenItemBox and (g_nBoxTrunCount <> g_btSelBoxItemIndex)) or (not g_boOpenItemBox) then begin
  13566.                   if GetTickCount - g_dwRandomBoxItemTick > g_dwChgSpeed then begin
  13567.                     g_dwRandomBoxItemTick := GetTickCount;
  13568.                     g_nBoxTrunCount := GetNextIndex(g_nBoxTrunCount);
  13569.                     Inc(g_nChgCount);
  13570.                     PlaySound(s_Flashbox);
  13571.                   end;
  13572.                 end;
  13573.                 nnIndex := 602 + (g_btBoxType - 1) * 2;
  13574.                 if nIndex = g_nBoxTrunCount then begin
  13575.                   d := g_WMain3Images.Images[514];
  13576.                   if d <> nil then begin
  13577.                     dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13578.                       SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13579.                       d.ClientRect,
  13580.                       d, True);
  13581.                   end;
  13582.                   d := g_WMain3Images.Images[nnIndex];
  13583.                   if d <> nil then
  13584.                     dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13585.                       SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13586.                       d.ClientRect,
  13587.                       d, True);
  13588.                 end else begin
  13589.                   d := g_WMain3Images.Images[514];
  13590.                   if d <> nil then
  13591.                     dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13592.                       SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13593.                       d.ClientRect,
  13594.                       d, True);
  13595.                 end;
  13596.               end else begin
  13597.                 d := g_WMain3Images.Images[514];
  13598.                 if d <> nil then
  13599.                   dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13600.                     SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13601.                     d.ClientRect,
  13602.                     d, True);
  13603.               end;
  13604.             end;
  13605.           end else begin
  13606.             d := g_WMain3Images.Images[514];
  13607.             if d <> nil then
  13608.               dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13609.                 SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13610.                 d.ClientRect,
  13611.                 d, True);
  13612.           end;
  13613.         end;
  13614.         d := g_WBagItemImages.Images[g_BoxItems[nIndex].s.looks];
  13615.         if d <> nil then
  13616.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  13617.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  13618.             d.ClientRect,
  13619.             d, True);
  13620.       end;
  13621.     end;
  13622.   end;
  13623. end;

  13624. procedure TFrmDlg.DBoxItemsDirectPaint(Sender: TObject;
  13625.   dsurface: TTexture);
  13626. var
  13627.   d: TTexture;
  13628.   sMsg: string;
  13629. begin
  13630.   with DBoxItems do begin
  13631.     d := nil;
  13632.     if WLib <> nil then
  13633.       d := WLib.Images[FaceIndex];
  13634.     if d <> nil then
  13635.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);

  13636.     if g_boGetBoxItemMouseMove then begin
  13637.       sMsg := '启动乾坤挪移换取一件圈外宝物';
  13638.       with dsurface do begin
  13639.         TextOut(SurfaceX(Left) + 16, SurfaceY(Top) + 160, sMsg);
  13640.       end;
  13641.     end;
  13642.   end;
  13643. end;

  13644. procedure TFrmDlg.DItemBoxDirectPaint(Sender: TObject;
  13645.   dsurface: TTexture);
  13646. var
  13647.   d, d1: TTexture;
  13648.   nIndex: Integer;
  13649. begin
  13650.   if g_btBoxType > 0 then begin
  13651.     with DItemBox do begin
  13652.       if g_boShowItemBox and (not g_boOpenItemBox) then begin
  13653.         d := g_WMain3Images.Images[520 + (g_btBoxType - 1) * 20];
  13654.         if d <> nil then
  13655.           dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13656.       end else
  13657.         if g_boShowItemBox and g_boOpenItemBox then begin
  13658.         if g_nBoxIndex < 7 then begin
  13659.           if GetTickCount - g_dwOpenBoxTick > 300 then begin
  13660.             g_dwOpenBoxTick := GetTickCount;
  13661.             Inc(g_nBoxIndex);
  13662.           end;
  13663.           nIndex := 520 + (g_btBoxType - 1) * 20 + g_nBoxIndex;
  13664.           if g_nBoxIndex < 4 then begin
  13665.             d := g_WMain3Images.Images[nIndex];
  13666.             if d <> nil then
  13667.               dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13668.           end else begin
  13669.             d := g_WMain3Images.Images[nIndex];
  13670.             d1 := g_WMain3Images.Images[nIndex + 7];
  13671.             if d <> nil then
  13672.               dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13673.             if d1 <> nil then
  13674.               DrawBlend(dsurface, Left, Top, d1);
  13675.           end;
  13676.         end else begin
  13677.          //g_boBoxItemsVisible := True;
  13678.           DItemBox.Visible := False;
  13679.           DBoxItems.Visible := True;
  13680.           //DBoxItemGrid.Visible := DBoxItems.Visible;
  13681.         end;
  13682.       end;
  13683.     end;
  13684.   end;
  13685. end;

  13686. procedure TFrmDlg.DBoxItemGridDblClick(Sender: TObject);
  13687. var
  13688.   Idx: Integer;
  13689. begin
  13690.   Idx := DBoxItemGrid.Col + DBoxItemGrid.Row * DBoxItemGrid.ColCount;
  13691.   //Showmessage(IntToStr(idx));
  13692.   if (Idx in [Low(g_BoxItems)..(High(g_BoxItems))]) and (Idx = g_btSelBoxItemIndex) then begin
  13693.     //Showmessage('frmMain.SendClientMessage');
  13694.     frmMain.SendClientMessage(CM_GETSELBOXITEM, Idx, 0, 0, 0);
  13695.     DBoxItems.Visible := False;
  13696.   end;
  13697. end;

  13698. procedure TFrmDlg.DBoxItemGridGridMouseMove(Sender: TObject; ACol,
  13699.   ARow: Integer; Shift: TShiftState);
  13700. var
  13701.   Index: Integer;
  13702.   iname, d1, d2, d3: string;
  13703.   useable: Boolean;

  13704.   nWhere: Integer;
  13705.   List: TStringList;
  13706. begin
  13707.   g_boGetBoxItemMouseMove := False;
  13708.   Index := ACol + ARow * DBoxItemGrid.ColCount;
  13709.   if Index in [0..8] then begin
  13710.     g_MouseItem := g_BoxItems[Index];
  13711.     if g_MouseItem.s.Name <> '' then begin
  13712.       nWhere := GetHumUseItemByBagItem(g_MouseItem.s.StdMode);
  13713.       if g_Config.boCompareItem and (nWhere >= 0) then begin

  13714.         List := TStringList.Create;
  13715.         try
  13716.           GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  13717.           List.AddStrings(HintList);

  13718.           GetMouseItemInfo(g_MySelf, @g_UseItems[nWhere], iname, d1, d2, d3, useable);
  13719.           if HintList.Count > 0 then begin
  13720.             HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  13721.           end;
  13722.           with DBoxItemGrid do
  13723.             DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  13724.               SurfaceY(Top + (ARow + 1) * RowHeight),
  13725.               List, HintList, False);
  13726.           HintList.Clear;
  13727.         finally
  13728.           List.Free;
  13729.         end;
  13730.         g_MouseItem.s.Name := '';
  13731.       end else begin
  13732.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  13733.         with DBoxItemGrid do
  13734.           DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  13735.             SurfaceY(Top + (ARow + 1) * RowHeight),
  13736.             HintList, False);
  13737.       end;

  13738.     end;

  13739.     {GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  13740.     if HintList.Count > 0 then begin
  13741.       with DBoxItemGrid do
  13742.         DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  13743.           SurfaceY(Top + (ARow + 1) * RowHeight),
  13744.           HintList, False);
  13745.     end; }
  13746.     g_MouseItem.s.Name := '';
  13747.   end;
  13748. end;

  13749. procedure TFrmDlg.DOnHouserClick(Sender: TObject; X, Y: Integer);
  13750. begin
  13751.   frmMain.SendOnHorse();
  13752. end;

  13753. procedure TFrmDlg.DHelpClick(Sender: TObject; X, Y: Integer);
  13754. begin
  13755.   if (g_MySelf = nil) then Exit;
  13756.   if DStoreDlg.Visible then begin
  13757.     CloseStoreDlg;
  13758.   end else begin
  13759.     OpenStoreDlg;
  13760.   end;
  13761. end;

  13762. procedure TFrmDlg.DBoxItemsMouseMove(Sender: TObject; Shift: TShiftState;
  13763.   X, Y: Integer);
  13764. begin
  13765.   g_boGetBoxItemMouseMove := False;
  13766.   DScreen.ClearHint;
  13767. end;

  13768. procedure TFrmDlg.DUserSellOffMouseMove(Sender: TObject;
  13769.   Shift: TShiftState; X, Y: Integer);
  13770. var
  13771.   lx, ly, Idx: Integer;
  13772.   iname, d1, d2, d3: string;
  13773.   useable: Boolean;
  13774. begin
  13775.   //lx := DUserSellOff.LocalX(X) - DUserSellOff.Left;
  13776.   //ly := DUserSellOff.LocalY(Y) - DUserSellOff.Top - DUserSellOff.SurfaceY(97);
  13777.   lx := X;
  13778.   ly := Y;
  13779.   if (lx >= 12) and (lx <= 455) and (ly >= 69) then begin
  13780.     Idx := (ly - 69) div 19 + 1;
  13781.     if Idx in [Low(g_SellItems)..High(g_SellItems)] then begin
  13782.       MoveSellItemIndex := Idx;
  13783.       g_MouseItem := g_SellItems[Idx].SellItem;
  13784.       with DUserSellOff do begin
  13785.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  13786.         if HintList.Count > 0 then begin
  13787.           DScreen.ShowHint(SurfaceX(lx),
  13788.             SurfaceY(ly) + ImageCanvas.TextHeight('A') * 8,
  13789.             HintList, False);
  13790.         end;
  13791.       end;
  13792.       g_MouseItem.s.Name := '';
  13793.       Exit;
  13794.     end;
  13795.   end;
  13796.   DScreen.ClearHint;
  13797.   MoveSellItemIndex := -1;
  13798. end;

  13799. procedure TFrmDlg.DBookCloseDirectPaint(Sender: TObject;
  13800.   dsurface: TTexture);
  13801. var
  13802.   d: TTexture;
  13803. begin
  13804.   with Sender as TDButton do begin
  13805.     d := nil;
  13806.     if TDButton(Sender).Downed then begin
  13807.       if WLib <> nil then
  13808.         d := WLib.Images[FaceIndex + 1];
  13809.     end else begin
  13810.       if WLib <> nil then
  13811.         d := WLib.Images[FaceIndex];
  13812.     end;
  13813.     if d <> nil then
  13814.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13815.   end;
  13816. end;

  13817. procedure TFrmDlg.DBookPageDirectPaint(Sender: TObject;
  13818.   dsurface: TTexture);
  13819. var
  13820.   d: TTexture;
  13821. begin
  13822.   with DBookPage do begin
  13823.     if g_nBookType > 0 then begin
  13824.       d := nil;
  13825.       if WLib <> nil then
  13826.         d := WLib.Images[FaceIndex];
  13827.       if d <> nil then
  13828.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13829.     end else begin
  13830.       d := nil;
  13831.       if WLib <> nil then
  13832.         d := WLib.Images[FaceIndex + g_nBookPage];
  13833.       if d <> nil then
  13834.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13835.     end;
  13836.   end;
  13837. end;

  13838. procedure TFrmDlg.DBookPrevPageClick(Sender: TObject; X, Y: Integer);
  13839. var
  13840.   d: TTexture;
  13841. begin
  13842.   if g_nBookPage > 0 then begin
  13843.     Dec(g_nBookPage);
  13844.   end else begin
  13845.     DBookPrevPage.Visible := False;
  13846.   end;
  13847.   if g_nBookPage = 0 then DBookPrevPage.Visible := False;
  13848.   d := g_WUIBImages.Images[3];
  13849.   if d <> nil then begin
  13850.     DBookNextPage.SetImgIndex(g_WUIBImages, 3);
  13851.     DBookNextPage.Left := 470 - d.Width;
  13852.     DBookNextPage.Top := 318;
  13853.   end;
  13854. end;

  13855. procedure TFrmDlg.DBookNextPageClick(Sender: TObject; X, Y: Integer);
  13856. var
  13857.   d: TTexture;
  13858. begin
  13859.   if g_nBookPage < 5 then begin
  13860.     Inc(g_nBookPage);
  13861.     DBookPrevPage.Visible := True;
  13862.   end;

  13863.   if g_nBookPage = 5 then begin
  13864.     DBook.Visible := False;
  13865.     g_nBookPage := 0;
  13866.     frmMain.SendMerchantDlgSelect(g_nCurMerchant, '@GotoVillage');
  13867.     Exit;
  13868.   end;

  13869.   if g_nBookPage = 4 then begin
  13870.     d := g_WBookImages.Images[5];
  13871.     if d <> nil then begin
  13872.       DBookNextPage.SetImgIndex(g_WUIBImages, 5);
  13873.       DBookNextPage.Left := 470 - d.Width;
  13874.       DBookNextPage.Top := 318;
  13875.     end;
  13876.   end else begin
  13877.     d := g_WUIBImages.Images[3];
  13878.     if d <> nil then begin
  13879.       DBookNextPage.SetImgIndex(g_WUIBImages, 3);
  13880.       DBookNextPage.Left := 470 - d.Width;
  13881.       DBookNextPage.Top := 318;
  13882.     end;
  13883.   end;
  13884. end;

  13885. procedure TFrmDlg.DBookNextPageDirectPaint(Sender: TObject;
  13886.   dsurface: TTexture);
  13887. var
  13888.   d: TTexture;
  13889. begin
  13890.   with Sender as TDButton do begin
  13891.     d := nil;
  13892.     if TDButton(Sender).Downed then begin
  13893.       if g_nBookPage = 4 then begin
  13894.         d := g_WBookImages.Images[5 + 1];
  13895.       end else begin
  13896.         d := g_WUIBImages.Images[3 + 1];
  13897.       end;
  13898.     end else begin
  13899.       if g_nBookPage = 4 then begin
  13900.         d := g_WBookImages.Images[5];
  13901.       end else begin
  13902.         d := g_WUIBImages.Images[3];
  13903.       end;
  13904.     end;
  13905.     if d <> nil then begin
  13906.     {  Height := d.Height;
  13907.       Width := d.Width;        }
  13908.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13909.     end;
  13910.   end;
  13911. end;

  13912. procedure TFrmDlg.DBookDirectPaint(Sender: TObject;
  13913.   dsurface: TTexture);
  13914. var
  13915.   d: TTexture;
  13916. begin
  13917.   with DBook do begin
  13918.     d := nil;
  13919.     if g_nBookType = 0 then begin
  13920.       d := g_WUIBImages.Images[0];
  13921.     end else begin
  13922.       d := g_WBookImages.Images[g_nBookType + 6];
  13923.     end;
  13924.     if d <> nil then begin
  13925.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13926.     end;
  13927.   end;
  13928. end;

  13929. procedure TFrmDlg.DBookCloseClick(Sender: TObject; X, Y: Integer);
  13930. begin
  13931.   DBook.Visible := False;
  13932. end;

  13933. procedure TFrmDlg.DFindOKDirectPaint(Sender: TObject;
  13934.   dsurface: TTexture);
  13935. var
  13936.   d: TTexture;
  13937. begin
  13938.   with Sender as TDButton do begin
  13939.     d := nil;
  13940.     if Downed then begin
  13941.       if WLib <> nil then
  13942.         d := WLib.Images[FaceIndex + 1];
  13943.     end else begin
  13944.       if WLib <> nil then
  13945.         d := WLib.Images[FaceIndex];
  13946.     end;
  13947.     if d <> nil then
  13948.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13949.   end;
  13950. end;

  13951. procedure TFrmDlg.DFindChrCloseClick(Sender: TObject; X, Y: Integer);
  13952. begin
  13953.   DFindChr.Visible := False;
  13954. end;

  13955. procedure TFrmDlg.DFindChrClick(Sender: TObject; X, Y: Integer);
  13956. var
  13957.   lx, ly, Idx: Integer;
  13958. begin
  13959.   lx := DFindChr.LocalX(X) - DFindChr.Left;
  13960.   ly := DFindChr.LocalY(Y) - DFindChr.SurfaceY(140);
  13961.   if (lx >= 35) and (lx < DFindChr.Width - 40) and
  13962.     (ly > 0) and (ly < DFindChr.Height - 140) then begin
  13963.     Idx := ly div (LISTLINEHEIGHT + 9);
  13964.     with SelectChrScene do begin
  13965.       if Idx in [Low(DelCharArray)..High(DelCharArray)] then begin
  13966.         SelDelChar := Idx;
  13967.       end;
  13968.     end;
  13969.   end;
  13970. end;

  13971. procedure TFrmDlg.DFindChrDirectPaint(Sender: TObject;
  13972.   dsurface: TTexture);
  13973. var
  13974.   I, fy: Integer;
  13975.   d: TTexture;
  13976. begin
  13977.   with DFindChr do begin
  13978.     d := nil;
  13979.     if WLib <> nil then
  13980.       d := WLib.Images[FaceIndex];
  13981.     if d <> nil then
  13982.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  13983.     with SelectChrScene do begin
  13984.       fy := 0;
  13985.       DelChrCount := 0;

  13986.       with dsurface do begin
  13987.         for I := Low(DelCharArray) to High(DelCharArray) do begin
  13988.           if DelCharArray[I].sChrName <> '' then begin
  13989.             if I = SelDelChar then begin
  13990.               BoldTextOut(DFindChr.Left + 30, 140 + fy, '√' + DelCharArray[I].sChrName, clRed);
  13991.               BoldTextOut(DFindChr.Left + 125, 140 + fy, IntToStr(DelCharArray[I].wLevel), clRed);
  13992.               BoldTextOut(DFindChr.Left + 168, 140 + fy, GetJobName(DelCharArray[I].btJob), clRed);
  13993.               BoldTextOut(DFindChr.Left + 218, 140 + fy, GetSexName(DelCharArray[I].btSex), clRed);
  13994.             end else begin
  13995.               BoldTextOut(DFindChr.Left + 30, 140 + fy, DelCharArray[I].sChrName);
  13996.               BoldTextOut(DFindChr.Left + 125, 140 + fy, IntToStr(DelCharArray[I].wLevel));
  13997.               BoldTextOut(DFindChr.Left + 168, 140 + fy, GetJobName(DelCharArray[I].btJob));
  13998.               BoldTextOut(DFindChr.Left + 218, 140 + fy, GetSexName(DelCharArray[I].btSex));
  13999.             end;
  14000.             Inc(fy, TextHeight('A') + 9);
  14001.             Inc(DelChrCount);
  14002.           end;
  14003.         end;
  14004.       end;
  14005.     end;
  14006.   end;
  14007. end;

  14008. procedure TFrmDlg.DFindOKClick(Sender: TObject; X, Y: Integer);
  14009. begin
  14010.   SelectChrScene.SelChrRestoreChrClick;
  14011. end;

  14012. procedure TFrmDlg.DBookNextPageInRealArea(Sender: TObject; X, Y: Integer;
  14013.   var IsRealArea: Boolean);
  14014. begin
  14015.   IsRealArea := True;
  14016. end;

  14017. procedure TFrmDlg.DOpenUpgradeClick(Sender: TObject; X, Y: Integer);
  14018. begin
  14019.   DUpgrade.Visible := not DUpgrade.Visible;
  14020. end;

  14021. procedure TFrmDlg.DCloseUpgradeClick(Sender: TObject; X, Y: Integer);
  14022. var
  14023.   I: Integer;
  14024. begin
  14025.   for I := 0 to 2 do begin
  14026.     if g_UpgradeItems[I].s.Name <> '' then begin
  14027.       AddItemBag(g_UpgradeItems[I]);
  14028.       g_UpgradeItems[I].s.Name := '';
  14029.     end;
  14030.   end;
  14031.   DUpgrade.Visible := False;
  14032. end;

  14033. procedure TFrmDlg.DUpgradeItem1MouseMove(Sender: TObject;
  14034.   Shift: TShiftState; X, Y: Integer);
  14035. var
  14036.   Idx: Integer;
  14037.   iname, d1, d2, d3: string;
  14038.   useable: Boolean;
  14039. begin
  14040.   DScreen.ClearHint;
  14041.   if g_boItemMoving then begin
  14042.     if Sender = DUpgradeItem1 then
  14043.       g_MoveRect := DUpgradeItem1.ClientRect;
  14044.     if Sender = DUpgradeItem2 then
  14045.       g_MoveRect := DUpgradeItem2.ClientRect;
  14046.     if Sender = DUpgradeItem3 then
  14047.       g_MoveRect := DUpgradeItem3.ClientRect;
  14048.   end;
  14049.   if Sender = DUpgradeItem1 then Idx := 0;
  14050.   if Sender = DUpgradeItem2 then Idx := 1;
  14051.   if Sender = DUpgradeItem3 then Idx := 2;
  14052.   if Idx in [0..2] then begin
  14053.     g_MouseItem := g_UpgradeItems[Idx];
  14054.     if g_MouseItem.s.Name <> '' then begin
  14055.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  14056.       with Sender as TDButton do
  14057.         DScreen.ShowHint(SurfaceX(Left - 30),
  14058.           SurfaceY(Top + 50),
  14059.           HintList, False);
  14060.     end;
  14061.   end;
  14062. end;

  14063. procedure TFrmDlg.DUpgradeItem1Click(Sender: TObject; X, Y: Integer);
  14064. var
  14065.   Idx: Integer;
  14066.   temp: TClientItem;
  14067. begin
  14068.   if (g_UpgradeItemsWait[0].s.Name <> '') or (g_UpgradeItemsWait[1].s.Name <> '') or (g_UpgradeItemsWait[2].s.Name <> '') then Exit;
  14069.   if Sender = DUpgradeItem1 then Idx := 0;
  14070.   if Sender = DUpgradeItem2 then Idx := 1;
  14071.   if Sender = DUpgradeItem3 then Idx := 2;
  14072.   if Idx in [0..2] then begin
  14073.     if not g_boItemMoving then begin
  14074.       ClearMoveRect();
  14075.       if g_UpgradeItems[Idx].s.Name <> '' then begin
  14076.         g_MovingItem.Owner := DUpgrade;
  14077.         g_boItemMoving := True;
  14078.         //g_MovingItem.Index := idx;
  14079.         g_MovingItem.Item := g_UpgradeItems[Idx];
  14080.         g_UpgradeItems[Idx].s.Name := '';
  14081.         ItemClickSound(g_MovingItem.Item.s);
  14082.       end;
  14083.     end else begin
  14084.       if (g_MovingItem.Index < 0) or (g_MovingItem.Owner = DDealDlg) or (g_MovingItem.Owner = DHeroItemBag) or (g_MovingItem.Owner = DStateWin) or (g_MovingItem.Owner = DHeroStateWin) then Exit;
  14085.       if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DUpgrade) then begin
  14086.         if (g_UpgradeItems[Idx].s.Name <> '') then begin
  14087.           temp := g_UpgradeItems[Idx];
  14088.           g_UpgradeItems[Idx] := g_MovingItem.Item;
  14089.         //g_MovingItem.Index := idx;
  14090.           g_MovingItem.Item := temp;
  14091.           g_MovingItem.Owner := DUpgrade;
  14092.         end else begin
  14093.           g_UpgradeItems[Idx] := g_MovingItem.Item;
  14094.           g_MovingItem.Item.s.Name := '';
  14095.           g_boItemMoving := False;
  14096.           g_MovingItem.Owner := nil;
  14097.         end;
  14098.       end;
  14099.     end;
  14100.   end;
  14101. end;

  14102. procedure TFrmDlg.DUpgradeItem1DirectPaint(Sender: TObject;
  14103.   dsurface: TTexture);
  14104. var
  14105.   Idx: Integer;
  14106.   d: TTexture;
  14107. begin
  14108.   if Sender = DUpgradeItem1 then begin
  14109.     if g_UpgradeItems[0].s.Name <> '' then begin
  14110.       Idx := g_UpgradeItems[0].s.looks;
  14111.       if Idx >= 0 then begin
  14112.         d := g_WBagItemImages.Images[Idx];
  14113.         if d <> nil then
  14114.           dsurface.Draw(DUpgradeItem1.SurfaceX(DUpgradeItem1.Left + (DUpgradeItem1.Width - d.Width) div 2),
  14115.             DUpgradeItem1.SurfaceY(DUpgradeItem1.Top + (DUpgradeItem1.Height - d.Height) div 2),
  14116.             d.ClientRect, d, True);
  14117.       end;
  14118.     end;
  14119.   end;

  14120.   if Sender = DUpgradeItem2 then begin
  14121.     if g_UpgradeItems[1].s.Name <> '' then begin
  14122.       Idx := g_UpgradeItems[1].s.looks;
  14123.       if Idx >= 0 then begin
  14124.         d := g_WBagItemImages.Images[Idx];
  14125.         if d <> nil then
  14126.           dsurface.Draw(DUpgradeItem2.SurfaceX(DUpgradeItem2.Left + (DUpgradeItem2.Width - d.Width) div 2),
  14127.             DUpgradeItem2.SurfaceY(DUpgradeItem2.Top + (DUpgradeItem2.Height - d.Height) div 2),
  14128.             d.ClientRect, d, True);
  14129.       end;
  14130.     end;
  14131.   end;

  14132.   if Sender = DUpgradeItem3 then begin
  14133.     if g_UpgradeItems[2].s.Name <> '' then begin
  14134.       Idx := g_UpgradeItems[2].s.looks;
  14135.       if Idx >= 0 then begin
  14136.         d := g_WBagItemImages.Images[Idx];
  14137.         if d <> nil then
  14138.           dsurface.Draw(DUpgradeItem3.SurfaceX(DUpgradeItem3.Left + (DUpgradeItem3.Width - d.Width) div 2),
  14139.             DUpgradeItem3.SurfaceY(DUpgradeItem3.Top + (DUpgradeItem3.Height - d.Height) div 2),
  14140.             d.ClientRect, d, True);
  14141.       end;
  14142.     end;
  14143.   end;
  14144. end;

  14145. procedure TFrmDlg.DUpgradeMouseMove(Sender: TObject; Shift: TShiftState; X,
  14146.   Y: Integer);
  14147. begin
  14148.   DScreen.ClearHint;
  14149. end;

  14150. procedure TFrmDlg.DItemBagMouseMove(Sender: TObject; Shift: TShiftState; X,
  14151.   Y: Integer);
  14152. begin
  14153.   g_MouseItem.s.Name := '';
  14154.   g_MouseHeroItem.s.Name := '';
  14155.   HintList.Clear;
  14156.   DScreen.ClearHint;
  14157. end;

  14158. procedure TFrmDlg.DOpenUpgradeMouseMove(Sender: TObject;
  14159.   Shift: TShiftState; X, Y: Integer);
  14160. var
  14161.   nHintX, nHintY: Integer;
  14162. begin
  14163.   nHintX := DOpenUpgrade.SurfaceX(DOpenUpgrade.Left);
  14164.   nHintY := DOpenUpgrade.SurfaceY(DOpenUpgrade.Top);
  14165.   DScreen.ShowHint(nHintX, nHintY, '装备升级', clWhite, True);
  14166. end;

  14167. procedure TFrmDlg.DStartUpgradeClick(Sender: TObject; X, Y: Integer);
  14168. var
  14169.   I: Integer;
  14170.   UpgradeItemIndexs: TUpgradeItemIndexs;
  14171. begin
  14172.   if (g_UpgradeItemsWait[0].s.Name <> '') or (g_UpgradeItemsWait[1].s.Name <> '') or (g_UpgradeItemsWait[2].s.Name <> '') then begin
  14173.     if GetTickCount - g_dwUpgradeItemsWaitTick >= 1000 * 5 then begin
  14174.       g_UpgradeItemsWait[0].s.Name := '';
  14175.       g_UpgradeItemsWait[1].s.Name := '';
  14176.       g_UpgradeItemsWait[2].s.Name := '';
  14177.     end;
  14178.   end;
  14179.   if (g_UpgradeItemsWait[0].s.Name <> '') or (g_UpgradeItemsWait[1].s.Name <> '') or (g_UpgradeItemsWait[2].s.Name <> '') then Exit;
  14180.   if (g_UpgradeItems[0].s.Name = '') or (g_UpgradeItems[1].s.Name = '') or (g_UpgradeItems[2].s.Name = '') then Exit;
  14181.   g_dwUpgradeItemsWaitTick := GetTickCount;
  14182.   g_UpgradeItemsWait := g_UpgradeItems;

  14183.   g_UpgradeItems[0].s.Name := '';
  14184.   g_UpgradeItems[1].s.Name := '';
  14185.   g_UpgradeItems[2].s.Name := '';
  14186.   for I := 0 to 2 do
  14187.     UpgradeItemIndexs[I] := g_UpgradeItemsWait[I].MakeIndex;
  14188.   frmMain.SendUpgradeItem(UpgradeItemIndexs);
  14189. end;

  14190. procedure TFrmDlg.DStartUpgradeMouseMove(Sender: TObject;
  14191.   Shift: TShiftState; X, Y: Integer);
  14192. var
  14193.   nHintX, nHintY: Integer;
  14194. begin
  14195.   nHintX := DStartUpgrade.SurfaceX(DStartUpgrade.Left);
  14196.   nHintY := DStartUpgrade.SurfaceY(DStartUpgrade.Top);
  14197.   DScreen.ShowHint(nHintX, nHintY, '开始升级装备', clWhite, True);
  14198. end;

  14199. procedure TFrmDlg.DButtonDuelClick(Sender: TObject; X, Y: Integer);
  14200. begin
  14201.   if GetTickCount > g_dwQueryMsgTick then begin
  14202.     g_dwQueryMsgTick := GetTickCount + 3000;
  14203.     frmMain.SendDuelTry;
  14204.   end;
  14205. end;

  14206. procedure TFrmDlg.DDRDuelGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  14207.   Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  14208. var
  14209.   nIdx: Integer;
  14210.   d: TTexture;
  14211. begin
  14212.   nIdx := ACol + ARow * DDRDuelGrid.ColCount;
  14213.   if nIdx in [0..4] then begin
  14214.     if g_DuelRemoteItems[nIdx].s.Name <> '' then begin
  14215.       d := g_WBagItemImages.Images[g_DuelRemoteItems[nIdx].s.looks];
  14216.       if d <> nil then
  14217.         with DDRDuelGrid do begin
  14218.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  14219.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  14220.             d.ClientRect,
  14221.             d, True);
  14222.         end;
  14223.       with DDRDuelGrid do begin
  14224.         if (g_DuelRemoteItems[nIdx].s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_DuelRemoteItems[nIdx].s.AddPoint))} then begin
  14225.           if GetTickCount - g_DrawDuelRemoteItems[nIdx].dwDrawTick >= 200 then begin
  14226.             g_DrawDuelRemoteItems[nIdx].dwDrawTick := GetTickCount;
  14227.             if g_DrawDuelRemoteItems[nIdx].nIndex <= 0 then g_DrawDuelRemoteItems[nIdx].nIndex := 260 - 1;
  14228.             Inc(g_DrawDuelRemoteItems[nIdx].nIndex);
  14229.             if g_DrawDuelRemoteItems[nIdx].nIndex > 265 then g_DrawDuelRemoteItems[nIdx].nIndex := 260;
  14230.           end;
  14231.           d := g_WMain2Images.Images[g_DrawDuelRemoteItems[nIdx].nIndex];
  14232.           if d <> nil then begin
  14233.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  14234.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  14235.           end;
  14236.         end;

  14237.         if g_DuelRemoteItems[nIdx].s.AddValue[12] >= 2 then begin
  14238.           if GetTickCount - g_DrawDuelRemoteItems_[nIdx].dwDrawTick >= 200 then begin
  14239.             g_DrawDuelRemoteItems_[nIdx].dwDrawTick := GetTickCount;
  14240.             if g_DrawDuelRemoteItems_[nIdx].nIndex <= 0 then g_DrawDuelRemoteItems_[nIdx].nIndex := 600 - 1;
  14241.             Inc(g_DrawDuelRemoteItems_[nIdx].nIndex);
  14242.             if g_DrawDuelRemoteItems_[nIdx].nIndex > 617 then g_DrawDuelRemoteItems_[nIdx].nIndex := 600;
  14243.           end;
  14244.           d := g_WMain3Images.Images[g_DrawDuelRemoteItems_[nIdx].nIndex];
  14245.           if d <> nil then begin
  14246.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  14247.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  14248.           end;
  14249.         end;
  14250.       end;
  14251.     end;
  14252.   end;
  14253. end;

  14254. procedure TFrmDlg.DDDuelGridGridPaint(Sender: TObject; ACol, ARow: Integer;
  14255.   Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  14256. var
  14257.   nIdx: Integer;
  14258.   d: TTexture;
  14259. begin
  14260.   nIdx := ACol + ARow * DDDuelGrid.ColCount;
  14261.   if nIdx in [0..4] then begin
  14262.     if g_DuelItems[nIdx].s.Name <> '' then begin
  14263.       d := g_WBagItemImages.Images[g_DuelItems[nIdx].s.looks];
  14264.       if d <> nil then
  14265.         with DDDuelGrid do begin
  14266.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  14267.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  14268.             d.ClientRect,
  14269.             d, True);
  14270.         end;

  14271.       with DDDuelGrid do begin
  14272.         if (g_DuelItems[nIdx].s.AddValue[12] in [1, 3]) { or (GetAddPoint(g_DuelItems[nIdx].s.AddPoint))} then begin
  14273.           if GetTickCount - g_DrawDuelItems[nIdx].dwDrawTick >= 200 then begin
  14274.             g_DrawDuelItems[nIdx].dwDrawTick := GetTickCount;
  14275.             if g_DrawDuelItems[nIdx].nIndex <= 0 then g_DrawDuelItems[nIdx].nIndex := 260 - 1;
  14276.             Inc(g_DrawDuelItems[nIdx].nIndex);
  14277.             if g_DrawDuelItems[nIdx].nIndex > 265 then g_DrawDuelItems[nIdx].nIndex := 260;
  14278.           end;
  14279.           d := g_WMain2Images.Images[g_DrawDuelItems[nIdx].nIndex];
  14280.           if d <> nil then begin
  14281.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  14282.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  14283.           end;
  14284.         end;

  14285.         if g_DuelItems[nIdx].s.AddValue[12] >= 2 then begin
  14286.           if GetTickCount - g_DrawDuelItems_[nIdx].dwDrawTick >= 200 then begin
  14287.             g_DrawDuelItems_[nIdx].dwDrawTick := GetTickCount;
  14288.             if g_DrawDuelItems_[nIdx].nIndex <= 0 then g_DrawDuelItems_[nIdx].nIndex := 600 - 1;
  14289.             Inc(g_DrawDuelItems_[nIdx].nIndex);
  14290.             if g_DrawDuelItems_[nIdx].nIndex > 617 then g_DrawDuelItems_[nIdx].nIndex := 600;
  14291.           end;
  14292.           d := g_WMain3Images.Images[g_DrawDuelItems_[nIdx].nIndex];
  14293.           if d <> nil then begin
  14294.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  14295.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  14296.           end;
  14297.         end;
  14298.       end;
  14299.     end;
  14300.   end;
  14301. end;

  14302. procedure TFrmDlg.DWDuelDirectPaint(Sender: TObject;
  14303.   dsurface: TTexture);
  14304. var
  14305.   d: TTexture;
  14306. begin
  14307.   with DWDuel do begin
  14308.     d := nil;
  14309.     if WLib <> nil then
  14310.       d := WLib.Images[FaceIndex];
  14311.     if d <> nil then
  14312.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  14313.     with dsurface do begin
  14314.       TextOut(SurfaceX(Left + 83), SurfaceY(Top + 101), GetGoldStr(g_nDuelRemoteGold));
  14315.       TextOut(SurfaceX(Left + 27 + (90 - TextWidth(g_sDuelWho)) div 2), SurfaceY(Top + 32) + 3, g_sDuelWho);

  14316.       TextOut(SurfaceX(Left + 83), SurfaceY(Top + 202), GetGoldStr(g_nDuelGold));
  14317.       TextOut(SurfaceX(Left + 27 + (90 - TextWidth(g_sSelChrName)) div 2), SurfaceY(Top + 134) + 3, g_sSelChrName);
  14318.     end;
  14319.   end;
  14320. end;

  14321. procedure TFrmDlg.DDRDuelGridGridMouseMove(Sender: TObject; ACol,
  14322.   ARow: Integer; Shift: TShiftState);
  14323. var
  14324.   nIdx: Integer;
  14325.   iname, d1, d2, d3: string;
  14326.   useable: Boolean;

  14327.   nWhere: Integer;
  14328.   List: TStringList;
  14329. begin
  14330.   DScreen.ClearHint;
  14331.   nIdx := ACol + ARow * DDRDuelGrid.ColCount;
  14332.   if nIdx in [0..4] then begin
  14333.     g_MouseItem := g_DuelRemoteItems[nIdx];
  14334.     if g_MouseItem.s.Name <> '' then begin

  14335.       nWhere := GetHumUseItemByBagItem(g_MouseItem.s.StdMode);
  14336.       if g_Config.boCompareItem and (nWhere >= 0) then begin

  14337.         List := TStringList.Create;
  14338.         try
  14339.           GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  14340.           List.AddStrings(HintList);

  14341.           GetMouseItemInfo(g_MySelf, @g_UseItems[nWhere], iname, d1, d2, d3, useable);
  14342.           if HintList.Count > 0 then begin
  14343.             HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  14344.           end;
  14345.           with DDRDuelGrid do
  14346.             DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  14347.               SurfaceY(Top + (ARow + 1) * RowHeight),
  14348.               List, HintList, False);
  14349.           HintList.Clear;
  14350.         finally
  14351.           List.Free;
  14352.         end;
  14353.         g_MouseItem.s.Name := '';
  14354.       end else begin
  14355.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  14356.         with DDRDuelGrid do
  14357.           DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  14358.             SurfaceY(Top + (ARow + 1) * RowHeight),
  14359.             HintList, False);
  14360.       end;
  14361.       {GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  14362.       with DDRDuelGrid do
  14363.         DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  14364.           SurfaceY(Top + (ARow + 1) * RowHeight),
  14365.           HintList, False);}
  14366.     end;
  14367.   end;
  14368. end;

  14369. procedure TFrmDlg.DDDuelGridGridMouseMove(Sender: TObject; ACol,
  14370.   ARow: Integer; Shift: TShiftState);
  14371. var
  14372.   nIdx: Integer;
  14373.   iname, d1, d2, d3: string;
  14374.   useable: Boolean;

  14375.   nWhere: Integer;
  14376.   List: TStringList;
  14377. begin
  14378.   DScreen.ClearHint;
  14379.   nIdx := ACol + ARow * DDDuelGrid.ColCount;
  14380.   if nIdx in [0..4] then begin
  14381.     g_MoveRect := DDDuelGrid.ClientRect;
  14382.     g_MouseItem := g_DuelItems[nIdx];
  14383.     if g_MouseItem.s.Name <> '' then begin
  14384.       nWhere := GetHumUseItemByBagItem(g_MouseItem.s.StdMode);
  14385.       if g_Config.boCompareItem and (nWhere >= 0) then begin

  14386.         List := TStringList.Create;
  14387.         try
  14388.           GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  14389.           List.AddStrings(HintList);

  14390.           GetMouseItemInfo(g_MySelf, @g_UseItems[nWhere], iname, d1, d2, d3, useable);
  14391.           if HintList.Count > 0 then begin
  14392.             HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  14393.           end;
  14394.           with DDDuelGrid do
  14395.             DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  14396.               SurfaceY(Top + (ARow + 1) * RowHeight),
  14397.               List, HintList, False);
  14398.           HintList.Clear;
  14399.         finally
  14400.           List.Free;
  14401.         end;
  14402.         g_MouseItem.s.Name := '';
  14403.       end else begin
  14404.         GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  14405.         with DDDuelGrid do
  14406.           DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  14407.             SurfaceY(Top + (ARow + 1) * RowHeight),
  14408.             HintList, False);
  14409.       end;

  14410.       {GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  14411.       with DDDuelGrid do
  14412.         DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  14413.           SurfaceY(Top + (ARow + 1) * RowHeight),
  14414.           HintList, False);
  14415.           }
  14416.     end else DScreen.ClearHint;
  14417.   end else DScreen.ClearHint;
  14418. end;

  14419. procedure TFrmDlg.DDDuelGridGridSelect(Sender: TObject; ACol, ARow: Integer;
  14420.   Shift: TShiftState);
  14421. var
  14422.   temp: TClientItem;
  14423.   mi, nIdx: Integer;
  14424. begin
  14425.   //if mbLeft = Button then begin
  14426.   if not g_boDuelEnd and (GetTickCount > g_dwDuelActionTick) then begin
  14427.     if not g_boItemMoving then begin
  14428.       nIdx := ACol + ARow * DDDuelGrid.ColCount;
  14429.       if nIdx in [0..4] then begin
  14430.         ClearMoveRect();
  14431.         if g_DuelItems[nIdx].s.Name <> '' then begin
  14432.           g_boItemMoving := True;
  14433.           g_MovingItem.Owner := DWDuel;
  14434.           g_MovingItem.Index := -nIdx - 30;
  14435.           g_MovingItem.Item := g_DuelItems[nIdx];
  14436.           g_DuelItems[nIdx].s.Name := '';
  14437.           ItemClickSound(g_MovingItem.Item.s);
  14438.         end;
  14439.       end;
  14440.     end else begin
  14441.       if (g_MovingItem.Owner = DHeroItemBag) or (g_MovingItem.Owner = DDealDlg) or (g_MovingItem.Owner = DHeroStateWin) or (g_MovingItem.Owner = DStateWin) then Exit;
  14442.       mi := g_MovingItem.Index;
  14443.       if (mi >= 0) or (mi <= -30) and (mi > -40) then begin
  14444.         ItemClickSound(g_MovingItem.Item.s);
  14445.         g_boItemMoving := False;
  14446.         if mi >= 0 then begin
  14447.           g_DuelDlgItem := g_MovingItem.Item;
  14448.           frmMain.SendAddDuelItem(g_DuelDlgItem);
  14449.           g_dwDuelActionTick := GetTickCount + 4000;
  14450.         end else
  14451.           AddDuelItem(g_MovingItem.Item);
  14452.         g_MovingItem.Item.s.Name := '';
  14453.         g_MovingItem.Owner := nil;
  14454.       end;
  14455.       if mi = -98 then DDDuelGoldClick(Self, 0, 0);
  14456.     end;
  14457.     ArrangeItemBag;
  14458.   end;
  14459.   //end;
  14460. end;

  14461. procedure TFrmDlg.DDDuelGoldClick(Sender: TObject; X, Y: Integer);
  14462. var
  14463.   DGold: Integer;
  14464.   valstr: string;
  14465. begin
  14466.   if g_MySelf = nil then Exit;
  14467.   if not g_boDuelEnd and (GetTickCount > g_dwDuelActionTick) then begin
  14468.     if not g_boItemMoving then begin
  14469.       DialogSize := 1;
  14470.       DMessageDlg('请输入要' + g_sGameGoldName + '数量:', [mbOk, mbAbort]);
  14471.       GetValidStrVal(DlgEditText, valstr, [' ']);
  14472.       DGold := Str_ToInt(valstr, 0);
  14473.       if (DGold <= (g_nDuelGold + g_MySelf.m_nGameGold)) and (DGold > 0) then begin
  14474.         frmMain.SendChangeDuelGold(DGold);
  14475.               //DScreen.AddChatBoardString('frmMain.SendChangeDuelGold(DGold): ' + IntToStr(DGold), clWhite, clPurple);
  14476.         g_dwDuelActionTick := GetTickCount + 4000;
  14477.       end else begin
  14478.         DMessageDlg('你的元宝不足 ' + IntToStr(DGold) + ' !', [mbOk]);
  14479.         DGold := 0;
  14480.       end;
  14481.     end;
  14482.   end;
  14483. end;
  14484. (*var
  14485.   DGold: Integer;
  14486.   valstr: string;
  14487. begin
  14488.   if g_MySelf = nil then Exit;
  14489.   if not g_boDuelEnd and (GetTickCount > g_dwDuelActionTick) then begin
  14490.     if not g_boItemMoving then begin
  14491.       if g_nDuelGold > 0 then begin
  14492.         PlaySound(s_money);
  14493.         g_boItemMoving := True;
  14494.         g_MovingItem.Index := -97;
  14495.         g_MovingItem.Item.s.Name := g_sGoldName {'金币'};
  14496.       end;
  14497.     end else begin
  14498.       if (g_MovingItem.Index = -97) or (g_MovingItem.Index = -98) then begin
  14499.         if (g_MovingItem.Index = -98) then begin
  14500.           if g_MovingItem.Item.s.Name = g_sGoldName {'金币'} then begin

  14501.             DialogSize := 1;
  14502.             g_boItemMoving := False;
  14503.             g_MovingItem.Item.s.Name := '';
  14504.             DMessageDlg('请输入要' + g_sGameGoldName + '数量:', [mbOk, mbAbort]);
  14505.             GetValidStrVal(DlgEditText, valstr, [' ']);
  14506.             DGold := Str_ToInt(valstr, 0);
  14507.             if (DGold <= (g_nDuelGold + g_MySelf.m_nGameGold)) and (DGold > 0) then begin
  14508.               frmMain.SendChangeDuelGold(DGold);
  14509.               //DScreen.AddChatBoardString('frmMain.SendChangeDuelGold(DGold): ' + IntToStr(DGold), clWhite, clPurple);
  14510.               g_dwDuelActionTick := GetTickCount + 4000;
  14511.             end else DGold := 0;
  14512.           end;
  14513.         end;
  14514.         g_boItemMoving := False;
  14515.         g_MovingItem.Item.s.Name := '';
  14516.       end;
  14517.     end;
  14518.   end;
  14519. end;*)

  14520. procedure TFrmDlg.DDuelCloseClick(Sender: TObject; X, Y: Integer);
  14521. begin
  14522.   if GetTickCount > g_dwDuelActionTick then begin
  14523.     CloseDuelDlg;
  14524.     frmMain.SendCancelDuel;
  14525.   end;
  14526. end;

  14527. procedure TFrmDlg.OpenDuelDlg;
  14528. var
  14529.   d: TTexture;
  14530. begin
  14531.   //DWDuel.Left := SCREENWIDTH - 236 - 100;
  14532.   DItemBag.Left := 0;
  14533.   DItemBag.Top := 80;
  14534.   DItemBag.Visible := True;

  14535.   DWDuel.Visible := True;

  14536.   SafeFillChar(g_DuelItems, SizeOf(TClientItem) * 5, #0);
  14537.   SafeFillChar(g_DuelRemoteItems, SizeOf(TClientItem) * 5, #0);
  14538.   g_nDuelGold := 0;
  14539.   g_nDuelRemoteGold := 0;
  14540.   g_boDuelEnd := False;
  14541.   ArrangeItemBag;
  14542. end;

  14543. procedure TFrmDlg.CloseDuelDlg;
  14544. begin
  14545.   DWDuel.Visible := False;
  14546.   ArrangeItemBag;
  14547. end;

  14548. procedure TFrmDlg.DWDuelMouseMove(Sender: TObject; Shift: TShiftState;
  14549.   X, Y: Integer);
  14550. begin
  14551.   DScreen.ClearHint;
  14552. end;

  14553. procedure TFrmDlg.DItemBoxDblClick(Sender: TObject);
  14554. begin
  14555.   if g_boShowItemBox and (not g_boOpenItemBox) and (g_btBoxType > 0) and (not g_boGetBoxItemOK) then begin
  14556.     frmMain.SendClientMessage(CM_GETBACKITEMBOX, 0, 0, 0, 0);
  14557.   end;
  14558. end;

  14559. procedure TFrmDlg.DItemLockClick(Sender: TObject; X, Y: Integer);
  14560. begin
  14561.   if g_boShowItemBox and (not g_boOpenItemBox) and (g_btBoxType > 0) and (not g_boGetBoxItemOK) then begin
  14562.     if (g_nBoxIndex <= 0) and (FrmDlg.DItemBox.Visible) and g_boItemMoving and (g_MovingItem.Owner = DItemBag) and (g_MovingItem.Item.s.Name <> '') and
  14563.       (g_MovingItem.Item.s.StdMode = 40) and (g_MovingItem.Item.s.Shape in [13..16]) then begin
  14564.       if (g_OpenBoxingItem.s.Name <> '') and (GetTickCount - g_dwOpenBoxTime > 5 * 1000) then begin
  14565.         g_OpenBoxingItem.s.Name := '';
  14566.       end;
  14567.       if g_OpenBoxingItem.s.Name = '' then begin
  14568.         g_boItemMoving := False;
  14569.         g_OpenBoxingItem := g_MovingItem.Item;
  14570.         g_MovingItem.Item.s.Name := '';
  14571.         g_MovingItem.Owner := nil;
  14572.         g_dwOpenBoxTime := GetTickCount;
  14573.         frmMain.SendOpenBox(g_OpenBoxingItem.s.Name, g_OpenBoxingItem.MakeIndex);
  14574.       end;
  14575.     end;
  14576.   end;
  14577. end;

  14578. procedure TFrmDlg.DItemBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
  14579.   Y: Integer);
  14580. begin
  14581.   if g_boShowItemBox and (not g_boOpenItemBox) and (g_btBoxType > 0) and (not g_boGetBoxItemOK) then begin
  14582.     DScreen.ShowHint(X, Y, '双击收回宝箱', clWhite, True);
  14583.   end else DScreen.ClearHint;
  14584. end;

  14585. procedure TFrmDlg.DGetBoxItemFlashDirectPaint(Sender: TObject;
  14586.   dsurface: TTexture);
  14587. var
  14588.   d: TTexture;
  14589. begin
  14590.   if g_boGetBoxItemMouseMove then begin
  14591.     if GetTickCount - g_dwShowGetBoxItemButtonTick > 200 then begin
  14592.       g_dwShowGetBoxItemButtonTick := GetTickCount;
  14593.       Inc(g_nBoxButtonIndex);
  14594.     end;
  14595.     if (g_nBoxButtonIndex < 515) or (g_nBoxButtonIndex > 518) then g_nBoxButtonIndex := 515;

  14596.     d := g_WMain3Images.Images[g_nBoxButtonIndex];
  14597.     if d <> nil then
  14598.       DrawBlend(dsurface, DBoxItems.SurfaceX(DBoxItems.Left) + 68, DBoxItems.SurfaceY(Top) + 160 + 120, d);
  14599.   end;
  14600. end;

  14601. procedure TFrmDlg.DHeroItemBagMouseMove(Sender: TObject;
  14602.   Shift: TShiftState; X, Y: Integer);
  14603. begin
  14604.   HintList.Clear;
  14605.   DScreen.ClearHint;
  14606.   g_MouseHeroItem.s.Name := '';
  14607.   g_MouseItem.s.Name := '';
  14608. end;

  14609. procedure TFrmDlg.DShopItemGridGridPaint(Sender: TObject; ACol,
  14610.   ARow: Integer; Rect: TRect; State: TGridDrawState;
  14611.   dsurface: TTexture);
  14612. var
  14613.   nIdx: Integer;
  14614.   d: TTexture;
  14615.   hcolor: TColor;
  14616.   old: Integer;
  14617.   sMemo1: string;
  14618. begin
  14619.   nIdx := ACol + ARow * DShopItemGrid.ColCount;
  14620.   if nIdx in [0..10 - 1] then begin
  14621.     if g_ShopItems[ShopTabPage, nIdx].StdItem.Name <> '' then begin
  14622.       d := g_WBagItemImages.Images[g_ShopItems[ShopTabPage, nIdx].StdItem.looks];
  14623.       if d <> nil then
  14624.         with DShopItemGrid do begin
  14625.           dsurface.Draw(SurfaceX(Rect.Left + 10 + (32 - d.Width) div 2 - 1),
  14626.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  14627.             d.ClientRect,
  14628.             d, True);
  14629.         end;

  14630.       if (m_btSelectShop = 0) and (gdSelected in State) and (g_MouseShopItems.ShopItem.StdItem.Name <> '') then hcolor := clRed else hcolor := clWhite;

  14631.       with dsurface do begin
  14632.         TextOut(DShopItemGrid.SurfaceX(Rect.Left + 8 + 36 + 8), DShopItemGrid.SurfaceY(Rect.Top + 10), g_ShopItems[ShopTabPage, nIdx].StdItem.Name, clyellow);
  14633.         sMemo1 := g_ShopItems[ShopTabPage, nIdx].sMemo1;
  14634.         if sMemo1 <> '' then begin
  14635.           TextOut(DShopItemGrid.SurfaceX(Rect.Left + 8 + 36 + 8), DShopItemGrid.SurfaceY(Rect.Top + 10 + TextHeight('A')), sMemo1, hcolor);
  14636.         end;
  14637.         TextOut(DShopItemGrid.SurfaceX(Rect.Left + 8 + 36 + 8), DShopItemGrid.SurfaceY(Rect.Top + 10 + TextHeight('A') * 2), IntToStr(g_ShopItems[ShopTabPage, nIdx].StdItem.Price) + ' ' + g_sGameGoldName, hcolor);
  14638.       end;

  14639.     end;
  14640.   end;
  14641. end;

  14642. procedure TFrmDlg.DSuperShopItemGridGridPaint(Sender: TObject; ACol,
  14643.   ARow: Integer; Rect: TRect; State: TGridDrawState;
  14644.   dsurface: TTexture);
  14645. var
  14646.   nIdx: Integer;
  14647.   d: TTexture;
  14648.   hcolor: TColor;
  14649.   old: Integer;
  14650. begin
  14651.   nIdx := ACol + ARow * DSuperShopItemGrid.ColCount;
  14652.   if nIdx in [0..5 - 1] then begin
  14653.     if g_SuperShopItems[nIdx].StdItem.Name <> '' then begin
  14654.       d := g_WBagItemImages.Images[g_SuperShopItems[nIdx].StdItem.looks];
  14655.       if d <> nil then
  14656.         with DSuperShopItemGrid do begin
  14657.           dsurface.Draw(SurfaceX(Rect.Left + 39 + (42 - d.Width) div 2 - 1),
  14658.             SurfaceY(Rect.Top + (32 - d.Height) div 2 + 1),
  14659.             d.ClientRect,
  14660.             d, True);
  14661.         end;
  14662.       if (m_btSelectShop = 1) and (gdSelected in State) and (g_MouseShopItems.ShopItem.StdItem.Name <> '') then hcolor := clRed else hcolor := clWhite;

  14663.       with dsurface do begin
  14664.         TextOut(DSuperShopItemGrid.SurfaceX(Rect.Left + 1), DSuperShopItemGrid.SurfaceY(Rect.Top + 36), g_SuperShopItems[nIdx].StdItem.Name, clLime);
  14665.         TextOut(DSuperShopItemGrid.SurfaceX(Rect.Left + 1), DSuperShopItemGrid.SurfaceY(Rect.Top + 36 + TextHeight('A')), IntToStr(g_SuperShopItems[nIdx].StdItem.Price) + ' ' + g_sGameGoldName, hcolor);
  14666.       end;
  14667.     end;
  14668.   end;
  14669. end;

  14670. procedure TFrmDlg.DShopItemGridGridSelect(Sender: TObject; ACol,
  14671.   ARow: Integer; Shift: TShiftState);
  14672. var
  14673.   Idx: Integer;
  14674. begin
  14675.   Idx := ACol + ARow * DShopItemGrid.ColCount;
  14676.   if (ShopTabPage >= 0) and (ShopTabPage <= 4) and (Idx in [0..9]) then begin
  14677.     m_btSelectShop := 0;
  14678.     g_MouseShopItems.nPicturePosition := -1;
  14679.     g_MouseShopItems.ShopItem := g_ShopItems[ShopTabPage, Idx];
  14680.     PlaySound(s_norm_button_click);
  14681.   end;
  14682. end;

  14683. procedure TFrmDlg.DSuperShopItemGridGridSelect(Sender: TObject; ACol,
  14684.   ARow: Integer; Shift: TShiftState);
  14685. var
  14686.   Idx: Integer;
  14687. begin
  14688.   Idx := ACol + ARow * DSuperShopItemGrid.ColCount;
  14689.   if (Idx in [0..4]) then begin
  14690.     m_btSelectShop := 1;
  14691.     g_MouseShopItems.nPicturePosition := -1;
  14692.     g_MouseShopItems.ShopItem := g_SuperShopItems[Idx];
  14693.     PlaySound(s_norm_button_click);
  14694.   end;
  14695. end;

  14696. procedure TFrmDlg.DShopItemGridGridMouseMove(Sender: TObject; ACol,
  14697.   ARow: Integer; Shift: TShiftState);
  14698. var
  14699.   Idx: Integer;
  14700. begin
  14701.   {idx := ACol + ARow * DShopItemGrid.ColCount;
  14702.   if (ShopTabPage >= 0) and (ShopTabPage <= 4) and (idx in [0..9]) then begin
  14703.     with DShopItemGrid do begin
  14704.       g_MoveRect.Left := SurfaceX(Left + ACol * ColWidth);
  14705.       g_MoveRect.Top := SurfaceY(Top + ARow * RowHeight);
  14706.       g_MoveRect.Right := g_MoveRect.Left + ColWidth;
  14707.       g_MoveRect.Bottom := g_MoveRect.Top + RowHeight;
  14708.     end;
  14709.   end;}
  14710. end;

  14711. procedure TFrmDlg.DHumManSortMouseMove(Sender: TObject; Shift: TShiftState;
  14712.   X, Y: Integer);
  14713. begin
  14714.   DScreen.ClearHint;
  14715. end;

  14716. procedure TFrmDlg.DShopMouseMove(Sender: TObject; Shift: TShiftState; X,
  14717.   Y: Integer);
  14718. begin
  14719.   DScreen.ClearHint;
  14720. end;

  14721. procedure TFrmDlg.DMiniMapDirectPaint(Sender: TObject;
  14722.   dsurface: TTexture);
  14723. var
  14724.   d, dd: TTexture;
  14725.   v: Boolean;
  14726.   mx, my, nX, nY, I: Integer;
  14727.   rc: TRect;
  14728.   Actor: TActor;
  14729.   X, Y: Integer;
  14730.   btColor: Byte;
  14731.   Color: TColor;
  14732.   sText: string;

  14733.   MapDescInfo: pTMapDescInfo;
  14734.   DescList: TList;

  14735.   nMinX, nMinY, nMaxX, nMaxY: Integer;

  14736.   OldColor: TColor;
  14737.   old: Integer;
  14738.   nStatus: Integer;
  14739.   OldFontStyle: TFontStyles;
  14740.   CartInfo: pTCartInfo;
  14741. begin
  14742.   if g_MySelf = nil then Exit;
  14743.   if g_nMiniMapIndex < 0 then Exit; //g_nViewMinMapLv=1 局部地图 2全景地图 3全景大地图

  14744.   d := nil;
  14745.   dd := nil;
  14746.   case g_nMiniMapIndex of
  14747.     300: d := g_WMiniMapImages.Images[0];
  14748.     105, 301: d := g_WMiniMapImages.Images[1];
  14749.     302: d := g_WMiniMapImages.Images[2];
  14750.     303: d := g_WMiniMapImages.Images[3];
  14751.     305: d := g_WMiniMapImages.Images[4];
  14752.     306..318: d := g_WMiniMapImages.Images[g_nMiniMapIndex - 301];
  14753.     320..323: d := g_WMiniMapImages.Images[g_nMiniMapIndex - 302];
  14754.   end;

  14755.   if d = nil then
  14756.     d := g_WMMapImages.Images[g_nMiniMapIndex];

  14757.   if d = nil then Exit;

  14758.   if (not LegendMap.StartFind) and (Length(LegendMap.Path) > 0) then begin
  14759.     dd := TTexture.Create;
  14760.     dd.SetSize(d.Width, d.Height);
  14761.     dd.Draw(0, 0, d, False);
  14762.     d := dd;
  14763.     for X := 0 to Length(LegendMap.Path) - 1 do begin
  14764.       ActorXYToMapXY(LegendMap.Path[X].X, LegendMap.Path[X].Y, mx, my);
  14765.       dd.Pixels[mx, my] := clRed;
  14766.       dd.Pixels[mx + 1, my] := clRed;
  14767.       dd.Pixels[mx - 1, my] := clRed;
  14768.       dd.Pixels[mx, my + 1] := clRed;
  14769.       dd.Pixels[mx, my - 1] := clRed;
  14770.     end;
  14771.   end;

  14772.   g_nMapWidth := d.Width;
  14773.   g_nMapHeight := d.Height;
  14774.   if g_nViewMinMapLv <= 2 then begin
  14775.     DMiniMap.Floating := False;
  14776.     if g_nViewMinMapLv = 1 then begin

  14777.       ActorXYToMapXY(g_MySelf.m_nCurrX, g_MySelf.m_nCurrY, mx, my);

  14778.       rc.Left := _MAX(0, mx - 60);
  14779.       rc.Top := _MAX(0, my - 60);
  14780.       rc.Right := _MIN(d.ClientRect.Right, rc.Left + 120);
  14781.       rc.Bottom := _MIN(d.ClientRect.Bottom, rc.Top + 120);

  14782.       if g_ConfigClient.btMainInterface in [0, 2] then begin
  14783.         DMiniMap.Top := 0;
  14784.       end else begin
  14785.         DMiniMap.Top := DMapTitle.Height;
  14786.       end;

  14787.       DMiniMap.Width := rc.Right - rc.Left;
  14788.       DMiniMap.Height := rc.Bottom - rc.Top;
  14789.       DMiniMap.Left := SCREENWIDTH - DMiniMap.Width;

  14790.       if g_boShowMiniMapXY then begin
  14791.         mx := (g_nMinMapX - DMiniMap.Left + rc.Left);
  14792.         if g_ConfigClient.btMainInterface in [0, 2] then begin
  14793.           my := g_nMinMapY + rc.Top;
  14794.         end else begin
  14795.           my := g_nMinMapY - DMapTitle.Height + rc.Top;
  14796.         end;
  14797.         MapXYToActorXY(mx, my, mx, my);

  14798.         sText := IntToStr(mx) + ':' + IntToStr(my);
  14799.         g_nMinMapMoveX := mx;
  14800.         g_nMinMapMoveY := my;
  14801.       end;
  14802.       dsurface.Draw(DMiniMap.SurfaceX(DMiniMap.Left), DMiniMap.SurfaceY(DMiniMap.Top), rc, d, False);
  14803.     end else begin //全景地图
  14804.       rc.Left := SCREENWIDTH - 200;
  14805.       rc.Top := 0;
  14806.       rc.Right := rc.Left + 200;
  14807.       rc.Bottom := 200;

  14808.       if g_ConfigClient.btMainInterface in [0, 2] then begin
  14809.         DMiniMap.Top := 0;
  14810.       end else begin
  14811.         DMiniMap.Top := DMapTitle.Height;
  14812.         rc.Top := DMapTitle.Height;
  14813.         rc.Bottom := rc.Top + rc.Bottom;
  14814.       end;

  14815.       DMiniMap.Width := 200;
  14816.       DMiniMap.Height := 200;
  14817.       DMiniMap.Left := SCREENWIDTH - DMiniMap.Width;

  14818.       if g_boShowMiniMapXY then begin
  14819.         ScreenToMap(d.Width, DMiniMap.Width, g_nMinMapX - DMiniMap.Left, mx);
  14820.         ScreenToMap(d.Height, DMiniMap.Height, g_nMinMapY - DMiniMap.Top, my);

  14821.         MapXYToActorXY(mx, my, mx, my);
  14822.         sText := IntToStr(mx) + ':' + IntToStr(my);
  14823.         g_nMinMapMoveX := mx;
  14824.         g_nMinMapMoveY := my;
  14825.       end;

  14826.       dsurface.StretchDraw(rc, d.ClientRect, d, False);
  14827.     end;

  14828.     if g_nViewMinMapLv = 1 then begin
  14829.       ActorXYToMapXY(g_MySelf.m_nCurrX, g_MySelf.m_nCurrY, mx, my);
  14830.       mx := mx - rc.Left;
  14831.       my := my - rc.Top;
  14832.     end else begin
  14833.       ActorXYToMapXY(g_MySelf.m_nCurrX, g_MySelf.m_nCurrY, mx, my);
  14834.       MapToScreen(d.Width, DMiniMap.Width, mx, mx);
  14835.       MapToScreen(d.Height, DMiniMap.Height, my, my);
  14836.     end;

  14837.     dsurface.FrameRect(Bounds(DMiniMap.Left + mx - 3, DMiniMap.Top + my - 3, 3, 3), clLime);
  14838.     dsurface.FrameRect(Bounds(DMiniMap.Left + mx - 2, DMiniMap.Top + my - 2, 2, 2), clLime);

  14839.     for nX := g_MySelf.m_nCurrX - 12 to g_MySelf.m_nCurrX + 12 do begin
  14840.       for nY := g_MySelf.m_nCurrY - 12 to g_MySelf.m_nCurrY + 12 do begin
  14841.         Actor := PlayScene.FindActorXY(nX, nY);
  14842.         if (Actor <> nil) and (Actor <> g_MySelf) and (not Actor.m_boDeath) then begin
  14843.           if g_nViewMinMapLv = 1 then begin
  14844.             ActorXYToMapXY(Actor.m_nCurrX, Actor.m_nCurrY, mx, my);
  14845.             mx := mx - rc.Left;
  14846.             my := my - rc.Top;
  14847.           end else begin
  14848.             ActorXYToMapXY(Actor.m_nCurrX, Actor.m_nCurrY, mx, my);
  14849.             MapToScreen(d.Width, DMiniMap.Width, mx, mx);
  14850.             MapToScreen(d.Height, DMiniMap.Height, my, my);
  14851.           end;

  14852.           case Actor.m_btRace of
  14853.             0, 50: btColor := 250; //clLime;
  14854.             // btColor := 255;
  14855.           else btColor := 249; //clRed;
  14856.           end;

  14857.           {
  14858.           case Actor.m_btRace of
  14859.             50, 45, 12: btColor := 250; //clLime;
  14860.             0: btColor := 255;
  14861.           else btColor := 249; //clRed;
  14862.           end;
  14863.           }

  14864.           if (g_MyHero <> nil) and (g_MyHero = Actor) then
  14865.             btColor := 251;

  14866.           for X := -1 to 1 do
  14867.             for Y := -1 to 1 do
  14868.               dsurface.Pixels[DMiniMap.Left + mx + X, DMiniMap.Top + my + Y] := GetRGB(btColor);
  14869.         end;
  14870.       end;
  14871.     end;

  14872.     if g_boShowMiniMapXY and (sText <> '') then begin
  14873.       with dsurface do begin
  14874.         BoldTextOut(DMiniMap.Left + (DMiniMap.Width - TextWidth(sText)) - 1, DMiniMap.Top + DMiniMap.Height - TextWidth('A') * 2, sText);
  14875.       end;
  14876.     end;
  14877.   end else begin
  14878.     DMiniMap.Floating := True;
  14879.     DMiniMap.Top := 40;
  14880.     DMiniMap.Left := 60;
  14881.     DMiniMap.Width := SCREENWIDTH - 120;
  14882.     DMiniMap.Height := SCREENHEIGHT - 220;

  14883.     with DMiniMap do
  14884.       dsurface.StretchDraw(Bounds(SurfaceX(Left), SurfaceY(Top), Width, Height), d.ClientRect, d, False);

  14885.     ActorXYToMapXY(g_MySelf.m_nCurrX, g_MySelf.m_nCurrY, mx, my);


  14886.     MapToScreen(g_nMapWidth, DMiniMap.Width, mx, mx);
  14887.     MapToScreen(g_nMapHeight, DMiniMap.Height, my, my);
  14888.     mx := DMiniMap.Left + mx;
  14889.     my := DMiniMap.Top + my;

  14890.     for X := -3 to 3 do
  14891.       for Y := -3 to 3 do
  14892.         dsurface.Pixels[mx + X, my + Y] := clLime;

  14893.     sText := IntToStr(g_MySelf.m_nCurrX) + ':' + IntToStr(g_MySelf.m_nCurrY);
  14894.     dsurface.BoldTextOut(mx + 10, my - 3, sText);

  14895.    { if (not LegendMap.StartFind) then begin
  14896.       for X := 0 to Length(LegendMap.Path) - 1 do begin

  14897.         ActorXYToMapXY(LegendMap.Path[X].X, LegendMap.Path[X].Y, mx, my);
  14898.         MapToScreen(g_nMapWidth, DMiniMap.Width, mx, mx);
  14899.         MapToScreen(g_nMapHeight, DMiniMap.Height, my, my);
  14900.         mx := DMiniMap.Left + mx;
  14901.         my := DMiniMap.Top + my;

  14902.         dsurface.Pixels[mx, my] := clRed;
  14903.       end;
  14904.     end;   }

  14905.     for X := -3 to 3 do
  14906.       for Y := -3 to 3 do
  14907.         dsurface.Pixels[g_nScreenMoveX + X, g_nScreenMoveY + Y] := clRed;

  14908.     sText := IntToStr(g_nMapMoveX) + ':' + IntToStr(g_nMapMoveY);
  14909.     dsurface.BoldTextOut(g_nScreenMoveX + 15, g_nScreenMoveY - 3, sText);
  14910.   end;

  14911.   if g_MapDesc.Get(g_sMapTitle, g_nViewMinMapLv >= 2, DescList) and (DescList.Count > 0) then begin
  14912.     if g_nViewMinMapLv = 1 then begin
  14913.       MapXYToActorXY(rc.Left, rc.Top, nMinX, nMinY);
  14914.       MapXYToActorXY(rc.Right, rc.Bottom, nMaxX, nMaxY);
  14915.       for I := 0 to DescList.Count - 1 do begin
  14916.         MapDescInfo := DescList[I];
  14917.         if (MapDescInfo.nX >= nMinX) and (MapDescInfo.nX <= nMaxX) and (MapDescInfo.nY >= nMinY) and (MapDescInfo.nY <= nMaxY) then begin
  14918.           ActorXYToMapXY(MapDescInfo.nX, MapDescInfo.nY, mx, my);
  14919.           mx := mx - rc.Left;
  14920.           my := my - rc.Top;
  14921.           sText := MapDescInfo.sDescName;
  14922.           dsurface.BoldTextOut(DMiniMap.Left + mx - dsurface.TextWidth(sText) div 2, DMiniMap.Top + my, sText, MapDescInfo.FColor);
  14923.         end;
  14924.       end;
  14925.     end else begin
  14926.       for I := 0 to DescList.Count - 1 do begin
  14927.         MapDescInfo := DescList[I];
  14928.         ActorXYToMapXY(MapDescInfo.nX, MapDescInfo.nY, mx, my);
  14929.         MapToScreen(d.Width, DMiniMap.Width, mx, mx);
  14930.         MapToScreen(d.Height, DMiniMap.Height, my, my);
  14931.         sText := MapDescInfo.sDescName;
  14932.         dsurface.BoldTextOut(DMiniMap.Left + mx - dsurface.TextWidth(sText) div 2, DMiniMap.Top + my, sText, MapDescInfo.FColor);
  14933.       end;
  14934.     end;
  14935.   end;

  14936. //==============================================================================
  14937.   if g_nViewMinMapLv > 1 then begin //显示镖车信息
  14938.     old := MainForm.Canvas.Font.Size;
  14939.     OldColor := MainForm.Canvas.Font.Color;
  14940.     OldFontStyle := MainForm.Canvas.Font.Style;

  14941.     MainForm.Canvas.Font.Size := 12;
  14942.     MainForm.Canvas.Font.Style := [fsBold];
  14943.     MainForm.Canvas.Font.Color := clWhite;
  14944.     g_CartInfoList.Lock;
  14945.     try
  14946.       for I := 0 to g_CartInfoList.Count - 1 do begin
  14947.         CartInfo := g_CartInfoList.Items[I];
  14948.         sText := CartInfo.sCharName;
  14949.         Actor := PlayScene.FindActor(CartInfo.nRecogId);
  14950.         if Actor = nil then begin
  14951.           nX := CartInfo.nX;
  14952.           nY := CartInfo.nY;
  14953.         end else begin
  14954.           nX := Actor.m_nCurrX;
  14955.           nY := Actor.m_nCurrY;
  14956.         end;
  14957.         if g_nViewMinMapLv = 1 then begin
  14958.           ActorXYToMapXY(nX, nY, mx, my);
  14959.           mx := mx - rc.Left;
  14960.           my := my - rc.Top;
  14961.         end else begin
  14962.           ActorXYToMapXY(nX, nY, mx, my);
  14963.           MapToScreen(d.Width, DMiniMap.Width, mx, mx);
  14964.           MapToScreen(d.Height, DMiniMap.Height, my, my);
  14965.         end;

  14966.         if { (Actor = nil) or }(g_nViewMinMapLv > 1) then begin
  14967.           if (g_nViewMinMapLv = 3) then begin
  14968.             for X := 2 to 10 do
  14969.               dsurface.FrameRect(Bounds(DMiniMap.Left + mx - X, DMiniMap.Top + my - X, X, X), clFuchsia);
  14970.           end else
  14971.             if (g_nViewMinMapLv = 2) then begin
  14972.             for X := 2 to 6 do
  14973.               dsurface.FrameRect(Bounds(DMiniMap.Left + mx - X, DMiniMap.Top + my - X, X, X), clFuchsia);
  14974.           end;
  14975.         end;
  14976.         dsurface.BoldTextOut(DMiniMap.Left + mx - dsurface.TextWidth(sText) div 2, DMiniMap.Top + my, sText, clWhite);
  14977.       end;
  14978.     finally
  14979.       g_CartInfoList.UnLock;
  14980.     end;
  14981.     MainForm.Canvas.Font.Style := OldFontStyle;
  14982.     MainForm.Canvas.Font.Size := old;
  14983.     MainForm.Canvas.Font.Color := OldColor;
  14984.   end;
  14985. //==============================================================================


  14986.   if dd <> nil then dd.Free;
  14987. end;

  14988. procedure TFrmDlg.DMiniMapMouseMove(Sender: TObject; Shift: TShiftState; X,
  14989.   Y: Integer);
  14990. var
  14991.   nX, nY: Integer;
  14992.   Button: TMouseButton;
  14993. begin
  14994.   if g_nViewMinMapLv > 2 then begin
  14995.     g_nOScreenMoveX := X;
  14996.     g_nOScreenMoveY := Y;

  14997.     //if (g_nScreenMoveX <> g_nOScreenMoveX) or (g_nScreenMoveY <> g_nOScreenMoveY) or (Length(LegendMap.Path) <= 0) then begin
  14998.     g_nScreenMoveX := X;
  14999.     g_nScreenMoveY := Y;
  15000.     nX := X - DMiniMap.Left;
  15001.     nY := Y - DMiniMap.Top;
  15002.     nX := Round(nX * g_nMapWidth / DMiniMap.Width);
  15003.     nY := Round(nY * g_nMapHeight / DMiniMap.Height);
  15004.     nX := nX * 32 div 48;
  15005.     nY := nY * 32 div 32;
  15006.     g_nMapMoveX := nX;
  15007.     g_nMapMoveY := nY;

  15008.     if g_GuaJi.Started or (g_NewStatus <> sNone) then Exit;
  15009.     if (ssLeft in Shift) or (ssRight in Shift) then Exit;

  15010.     if {LegendMap.StartFind and }(LegendMap.FindX = g_nMapMoveX) and (LegendMap.FindY = g_nMapMoveY) then Exit;

  15011.     if (Length(LegendMap.Path) > 0) and
  15012.       (LegendMap.Path[Length(LegendMap.Path) - 1].X = g_nMapMoveX) and
  15013.     (LegendMap.Path[Length(LegendMap.Path) - 1].Y = g_nMapMoveY) then Exit;

  15014.     if (g_MySelf <> nil) and ((LegendMap.EndX < 0) or (LegendMap.EndY < 0)) then begin
  15015.       if GetTickCount - g_dwFindPathTick > 500 then begin
  15016.           //DScreen.AddChatBoardString(Format('(%d:%d) LoadAllOk:%s', [nX, nY, BoolToStr(Map.m_boLoadAllOk)]), clRed, clWhite);
  15017.         if Map.NewCanMove(nX, nY) then
  15018.           LegendMap.Find(g_MySelf.m_nCurrX, g_MySelf.m_nCurrY, nX, nY);
  15019.         g_dwFindPathTick := GetTickCount;
  15020.       end;
  15021.     end;
  15022.     Exit;
  15023.   end;
  15024.   if ssRight in Shift then begin
  15025.     frmMain.DXDrawMouseMove_(mbRight, Shift, X, Y);
  15026.   end else begin
  15027.     g_boShowMiniMapXY := True;
  15028.     g_nMinMapX := X;
  15029.     g_nMinMapY := Y;
  15030.   end;
  15031. end;

  15032. procedure TFrmDlg.DHeroHealthStateWinMouseMove(Sender: TObject;
  15033.   Shift: TShiftState; X, Y: Integer);
  15034. var
  15035.   sStr: string;
  15036. begin
  15037.   if g_MyHero = nil then Exit;
  15038.   if g_ConfigClient.btMainInterface in [0, 2] then begin
  15039.     if g_MyHero.m_Abil.MaxExp > 0 then begin
  15040.       sStr := '体力值: ' + IntToStr(g_MyHero.m_Abil.HP) + '/' + IntToStr(g_MyHero.m_Abil.MaxHP) + '\' +
  15041.         '魔法值: ' + IntToStr(g_MyHero.m_Abil.MP) + '/' + IntToStr(g_MyHero.m_Abil.MaxMP) + '\' +
  15042.         '经验值: ' + FloatToStrFixFmt(100 * g_MyHero.m_Abil.Exp / g_MyHero.m_Abil.MaxExp, 3, 2) + '%\';

  15043.       with DHeroHealthStateWin do
  15044.         DScreen.ShowHint(Left + Width, 25, sStr, clWhite, False);
  15045.     end;
  15046.   end else begin
  15047.     if g_MyHero.m_Abil.MaxExp > 0 then begin
  15048.       sStr := '体力值: ' + IntToStr(g_MyHero.m_Abil.HP) + '/' + IntToStr(g_MyHero.m_Abil.MaxHP) + '\' +
  15049.         '魔法值: ' + IntToStr(g_MyHero.m_Abil.MP) + '/' + IntToStr(g_MyHero.m_Abil.MaxMP) + '\' +
  15050.         '经验值: ' + FloatToStrFixFmt(100 * g_MyHero.m_Abil.Exp / g_MyHero.m_Abil.MaxExp, 3, 2) + '%\';

  15051.       with DHeroHealthStateWin do
  15052.         DScreen.ShowHint(Left + Width, Top + 32, sStr, clWhite, False);
  15053.     end;
  15054.   end;
  15055. end;

  15056. procedure TFrmDlg.DMiniMapMouseDown(Sender: TObject; Button: TMouseButton;
  15057.   Shift: TShiftState; X, Y: Integer);
  15058. var
  15059.   pt: TPoint;
  15060. begin
  15061.   if g_GuaJi.Started or (g_NewStatus <> sNone) then Exit;
  15062.   if Button = mbLeft then begin
  15063.     if g_nViewMinMapLv >= 3 then begin
  15064.       if (Length(LegendMap.Path) > 0) and (LegendMap.EndX < 0) and (LegendMap.EndY < 0) and (not LegendMap.StartFind) then begin
  15065.         //LegendMap.Path := LegendMap.WalkToRun(LegendMap.Path);
  15066.         LegendMap.BeginX := g_MySelf.m_nCurrX;
  15067.         LegendMap.BeginY := g_MySelf.m_nCurrY;
  15068.         LegendMap.EndX := LegendMap.Path[Length(LegendMap.Path) - 1].X;
  15069.         LegendMap.EndY := LegendMap.Path[Length(LegendMap.Path) - 1].Y;
  15070.         DScreen.AddChatBoardString(Format('自动移动至坐标(%d:%d),点击鼠标任意键停止...', [LegendMap.EndX, LegendMap.EndY]), GetRGB(154), clWhite);
  15071.         Exit;
  15072.       end;
  15073.     end;
  15074.     if g_nViewMinMapLv >= 3 then g_nViewMinMapLv := 1
  15075.     else Inc(g_nViewMinMapLv);
  15076.   end else begin
  15077.     GetCursorPos(pt);
  15078.     pt := frmMain.ScreenToClient(pt);
  15079.     frmMain.DXDrawMouseDown_(Button, Shift, pt.X, pt.Y);
  15080.   end;
  15081. end;

  15082. procedure TFrmDlg.DMapTitleDirectPaint(Sender: TObject;
  15083.   dsurface: TTexture);
  15084. var
  15085.   d: TTexture;
  15086.   lx, ly, sx: Integer;
  15087.   Str: string;
  15088.   rc: TRect;
  15089. begin
  15090.   with Sender as TDWindow do begin
  15091.     d := nil;
  15092.     if WLib <> nil then
  15093.       d := WLib.Images[FaceIndex];
  15094.     if d <> nil then begin
  15095.       if DMiniMap.Visible then begin
  15096.         if g_nViewMinMapLv <= 2 then begin
  15097.           rc := Bounds(SCREENWIDTH - DMiniMap.Width, Top, DMiniMap.Width, Height);
  15098.         end else begin
  15099.           rc := DMapTitle.ClientRect;
  15100.         end;
  15101.         dsurface.StretchDraw(rc, d.ClientRect, d, True);
  15102.       end else begin
  15103.         //Left := SCREENWIDTH - Width;
  15104.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  15105.       end;
  15106.       if g_MySelf = nil then Exit;

  15107.       Str := g_sMapTitle + ' ' + IntToStr(g_MySelf.m_nCurrX) + ':' + IntToStr(g_MySelf.m_nCurrY);
  15108.       with dsurface do begin
  15109.         if DMiniMap.Visible then begin
  15110.           if g_nViewMinMapLv <= 2 then begin
  15111.             BoldTextOut(SurfaceX(rc.Left + (DMiniMap.Width - TextWidth(Str)) div 2), SurfaceY(Top + (17 - TextHeight('A')) div 2), Str);
  15112.           end else begin
  15113.             BoldTextOut(SurfaceX(rc.Left + (DMapTitle.Width - TextWidth(Str)) div 2), SurfaceY(Top + (17 - TextHeight('A')) div 2), Str);
  15114.           end;
  15115.         end else begin
  15116.           BoldTextOut(SurfaceX(Left + (139 - TextWidth(Str)) div 2), SurfaceY(Top + (17 - TextHeight('A')) div 2), Str);
  15117.         end;
  15118.       end;
  15119.     end;
  15120.   end;
  15121. end;

  15122. procedure TFrmDlg.DButtonOption1Click(Sender: TObject; X, Y: Integer);
  15123. begin
  15124.   if DEdChat.Visible then begin
  15125.     SetChatVisible(False);
  15126.     SetInputVisible(False);
  15127.   end else begin
  15128.     //SetChatVisible(True);
  15129.     SetInputVisible(True);
  15130.     SetChatVisible(True);
  15131.   end;
  15132. end;

  15133. procedure TFrmDlg.DEdChatClick(Sender: TObject; X, Y: Integer);
  15134. begin
  15135.   //PlayScene.EdChat.Visible := not PlayScene.EdChat.Visible;
  15136. end;

  15137. procedure TFrmDlg.DButtonOption1MouseMove(Sender: TObject;
  15138.   Shift: TShiftState; X, Y: Integer);
  15139. var
  15140.   nLocalX, nLocalY: Integer;
  15141.   nHintX, nHintY: Integer;
  15142.   Butt: TDButton;
  15143.   sMsg: string;
  15144. begin
  15145.   DScreen.ClearHint;
  15146.   Butt := TDButton(Sender);
  15147.   nHintX := Butt.Left;
  15148.   nHintY := Butt.SurfaceY(Butt.Top) - 25;
  15149.   if Sender = DButtonOption1 then sMsg := '显示/隐藏聊天栏';
  15150.   if Sender = DButtonOption2 then sMsg := '显示/隐藏控制按钮';
  15151.   DScreen.ShowHint(nHintX, nHintY, sMsg, clWhite {clYellow}, False);
  15152. end;

  15153. procedure TFrmDlg.DButtonOption2Click(Sender: TObject; X, Y: Integer);
  15154. begin
  15155.   if DBotMiniMap.Visible then
  15156.     SetButVisible(False)
  15157.   else SetButVisible(True)
  15158. end;

  15159. procedure TFrmDlg.DPlayToolClick(Sender: TObject; X, Y: Integer);
  15160. begin
  15161.     MediaStartPlay('', True, False);
  15162. end;


  15163. procedure TFrmDlg.DCategorizeSysClick(Sender: TObject; X, Y: Integer);
  15164. var
  15165.   d: TDButton;
  15166. begin
  15167. { if Sender is TDButton then begin
  15168.     d := TDButton(Sender);
  15169.     if d <> DCategorizeSys then begin
  15170.       if DCategorizeSys.Downed then begin
  15171.         DCategorizeSys.Downed := False;
  15172.         Dec(DCategorizeSys.FaceIndex)
  15173.       end;
  15174.     end;
  15175.     if d <> DCategorizeGuild then begin
  15176.       if DCategorizeGuild.Downed then begin
  15177.         DCategorizeGuild.Downed := False;
  15178.         Dec(DCategorizeGuild.FaceIndex)
  15179.       end;
  15180.     end;
  15181.     if d <> DCategorizeGroup then begin
  15182.       if DCategorizeGroup.Downed then begin
  15183.         DCategorizeGroup.Downed := False;
  15184.         Dec(DCategorizeGroup.FaceIndex)
  15185.       end;
  15186.     end;
  15187.     if d <> DCategorizePrivate then begin
  15188.       if DCategorizePrivate.Downed then begin
  15189.         DCategorizePrivate.Downed := False;
  15190.         Dec(DCategorizePrivate.FaceIndex)
  15191.       end;
  15192.     end;
  15193.     if d <> nil then begin
  15194.       if d.Downed then begin
  15195.         d.Downed := False;
  15196.         Dec(d.FaceIndex)
  15197.       end else begin
  15198.         d.Downed := True;
  15199.         Inc(d.FaceIndex);
  15200.       end;
  15201.     end;
  15202.   end; }
  15203. end;

  15204. procedure TFrmDlg.DCategorizeSysDirectPaint(Sender: TObject;
  15205.   dsurface: TTexture);
  15206. var
  15207.   d: TDButton;
  15208.   dd: TTexture;
  15209. begin
  15210.   if Sender is TDButton then begin
  15211.     d := TDButton(Sender);
  15212.     dd := d.WLib.Images[d.FaceIndex];
  15213.     if dd <> nil then
  15214.       dsurface.Draw(d.SurfaceX(d.Left), d.SurfaceY(d.Top), dd.ClientRect, dd, False);
  15215.   end;
  15216. end;

  15217. procedure TFrmDlg.DShowChatClick(Sender: TObject; X, Y: Integer);
  15218. begin
  15219.   if DChatDlg.Visible then begin
  15220.     if DMemoChat.Height = 12 * 14 then begin
  15221.       DShowChat.SetImgIndex(g_WCqFirImages, 145);
  15222.       SetChatVisible(False);
  15223.     end else
  15224.       if DMemoChat.Height = 12 * 9 then begin
  15225.       DChatDlg.Height := 12 * 14 + 2;
  15226.       DMemoChat.Height := 12 * 14;
  15227.       DChatDlg.Top := SCREENHEIGHT - DChatDlg.Height - DEdChat.Height - DBottom.Height; //SCREENHEIGHT - 251 + 118;

  15228.       DScrollChat.Height := DChatDlg.Height;
  15229.       DScrollChat.RightButton.Top := DScrollChat.Height - DScrollChat.RightButton.Height - 1;

  15230.       DMemoChat.RefreshPos;

  15231.       DScrollChat.Max := DMemoChat.MaxHeight + (DMemoChat.Height - 12);

  15232.       DShowChat.SetImgIndex(g_WCqFirImages, 147);
  15233.       SetChatVisible(True);
  15234.     end
  15235.   end else begin
  15236.     DChatDlg.Height := 12 * 9 + 2;
  15237.     DMemoChat.Height := 12 * 9;
  15238.     DChatDlg.Top := SCREENHEIGHT - DChatDlg.Height - DEdChat.Height - DBottom.Height; //SCREENHEIGHT - 251 + 118;

  15239.     DScrollChat.Height := DChatDlg.Height;
  15240.     DScrollChat.RightButton.Top := DScrollChat.Height - DScrollChat.RightButton.Height - 1;

  15241.     DMemoChat.RefreshPos;

  15242.     DScrollChat.Max := DMemoChat.MaxHeight + (DMemoChat.Height - 12);


  15243.     DShowChat.SetImgIndex(g_WCqFirImages, 145);
  15244.     SetChatVisible(True);
  15245.   end;
  15246.   DMemoChat.SpareSize := DMemoChat.Height - 12;
  15247. end;

  15248. procedure TFrmDlg.DEdChatDirectPaint(Sender: TObject;
  15249.   dsurface: TTexture);
  15250. var
  15251.   d: TTexture;
  15252. begin
  15253.   with DEdChat do begin
  15254.     d := nil;
  15255.     if WLib <> nil then
  15256.       d := WLib.Images[FaceIndex];
  15257.     if d <> nil then
  15258.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, False);
  15259.   end;
  15260. end;

  15261. procedure TFrmDlg.DEdChatInRealArea(Sender: TObject; X, Y: Integer;
  15262.   var IsRealArea: Boolean);
  15263. begin
  15264.   //IsRealArea := False;
  15265. end;

  15266. procedure TFrmDlg.DShowChatMouseMove(Sender: TObject; Shift: TShiftState;
  15267.   X, Y: Integer);
  15268. var
  15269.   sMsg: string;
  15270. begin
  15271.   if (g_nShowChatMemoCount < 5) then begin
  15272.     if not DChatDlg.Visible then begin
  15273.       sMsg := '显示';
  15274.     end else begin
  15275.       if DMemoChat.Height = 12 * 9 then begin
  15276.         sMsg := '展开';
  15277.       end else begin
  15278.         sMsg := '隐藏';
  15279.       end;
  15280.     end;
  15281.     if (GetTickCount - g_dwShowChatMemoTick > 1000) then begin
  15282.       g_dwShowChatMemoTick := GetTickCount;
  15283.       Inc(g_nShowChatMemoCount);
  15284.     end else g_dwShowChatMemoTick := GetTickCount;
  15285.     DScreen.ShowHint(DShowChat.SurfaceX(DShowChat.Left), DShowChat.SurfaceY(DShowChat.Top) - 20, sMsg, clWhite {clYellow}, False);
  15286.   end;
  15287. end;

  15288. procedure TFrmDlg.CharMove(X: Integer);
  15289. begin
  15290.   if g_ConfigClient.btMainInterface in [0, 2] then Exit;
  15291.   if ChatDlgLeft > X then begin
  15292.     if DChatDlg.Left <= 0 then begin
  15293.       ChatDlgLeft := X;
  15294.       Exit;
  15295.     end;
  15296.     DChatDlg.Left := _MAX(DChatDlg.Left - (ChatDlgLeft - X), 0);
  15297.     DEdChat.Left := DChatDlg.Left;
  15298.   end else begin
  15299.     if DChatDlg.Left + DChatDlg.Width >= SCREENWIDTH then begin
  15300.       ChatDlgLeft := X;
  15301.       Exit;
  15302.     end;
  15303.     DChatDlg.Left := _MIN(DChatDlg.Left + (X - ChatDlgLeft), SCREENWIDTH - DChatDlg.Width);
  15304.     DEdChat.Left := DChatDlg.Left;
  15305.   end;
  15306.   ChatDlgLeft := X;
  15307.   //DEdChat.Top := SCREENHEIGHT - 20 - 44;
  15308.   {if DEdChat.Left + DEdChat.Width > SCREENWIDTH then begin //SCREENWIDTH - 23 * 9 - 3 * 8
  15309.     DEdChat.Left := SCREENWIDTH - DEdChat.Width;
  15310.   end;
  15311.   if DEdChat.Left < 0 then DEdChat.Left := 0;
  15312.   //PlayScene.EdChat.Top := 539;
  15313.   //PlayScene.EdChat.Left := DEdChat.Left + 21;
  15314.   DScroll.Left := DEdChat.Left;
  15315.   DListBox.Left := DScroll.Left + 15; }
  15316. end;

  15317. procedure TFrmDlg.DEdChatMouseMove(Sender: TObject; Shift: TShiftState; X,
  15318.   Y: Integer);
  15319. begin
  15320.   if ssLeft in Shift then CharMove(X);
  15321.   DScreen.ClearHint;
  15322.   if g_ConfigClient.btMainInterface <> 0 then begin
  15323.     if not EdChat.Visible then begin
  15324.       if (g_nShowEditChatCount < 5) then begin
  15325.         if (GetTickCount - g_dwShowEditChatTick > 1000) then begin
  15326.           g_dwShowEditChatTick := GetTickCount;
  15327.           Inc(g_nShowEditChatCount);
  15328.         end else g_dwShowEditChatTick := GetTickCount;
  15329.         DScreen.ShowHint(DEdChat.SurfaceX(X), DEdChat.SurfaceY(DEdChat.Top), '鼠标左键点击拖动,可以移动聊天框', clWhite {clYellow}, False);
  15330.       end;
  15331.     end;
  15332.   end;
  15333. end;

  15334. procedure TFrmDlg.DListBoxMouseDown(Sender: TObject; Button: TMouseButton;
  15335.   Shift: TShiftState; X, Y: Integer);
  15336. begin
  15337.   if Button = mbRight then
  15338.     frmMain.DXDrawMouseDown_(Button, Shift, X, Y);
  15339. end;

  15340. procedure TFrmDlg.DButtonShopClick(Sender: TObject; X, Y: Integer);
  15341. begin
  15342.   if not DShop.Visible then begin
  15343.     ChgShopSelButton(ShopTabPage);
  15344.     if g_ShopItems[ShopTabPage, 0].StdItem.Name = '' then begin
  15345.       if g_SuperShopItems[0].StdItem.Name = '' then begin
  15346.         frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 5);
  15347.       end else begin
  15348.         frmMain.SendShopDlg(ShopPage[ShopTabPage], ShopTabPage, 0);
  15349.       end;
  15350.     end;
  15351.     {if g_SuperShopItems[0].StdItem.Name = '' then begin
  15352.       frmMain.SendShopDlg(ShopPage[ShopTabPage], 5);
  15353.     end;  }
  15354.     OpenShopDlg;
  15355.   end else begin
  15356.     DShop.Visible := False;
  15357.   end;
  15358.   //Showmessage(TDButton(Sender).Name+' Left:'+IntToStr(TDButton(Sender).Left)+' Top:'+IntToStr(TDButton(Sender).Top));
  15359. end;

  15360. procedure TFrmDlg.DDuelOKClick(Sender: TObject; X, Y: Integer);
  15361. var
  15362.   mi: Integer;
  15363. begin
  15364.   if GetTickCount > g_dwDuelActionTick then begin
  15365.     //CloseDealDlg;
  15366.     frmMain.SendDuelEnd;
  15367.     g_dwDuelActionTick := GetTickCount + 4000;
  15368.     g_boDuelEnd := True;
  15369.     if g_boItemMoving then begin
  15370.       mi := g_MovingItem.Index;
  15371.       if (mi <= -30) and (mi > -40) then begin
  15372.         AddDuelItem(g_MovingItem.Item);
  15373.         g_boItemMoving := False;
  15374.         g_MovingItem.Item.s.Name := '';
  15375.       end;
  15376.     end;
  15377.   end;
  15378. end;

  15379. procedure TFrmDlg.DDDuelGoldMouseMove(Sender: TObject; Shift: TShiftState;
  15380.   X, Y: Integer);
  15381. begin
  15382.   DScreen.ShowHint(DDDuelGold.SurfaceX(DDDuelGold.Left),
  15383.     DDDuelGold.SurfaceY(DDDuelGold.Top) - 20, '单击增加元宝', clWhite {clYellow}, False);
  15384. end;

  15385. procedure TFrmDlg.EdSearchKeyPress(Sender: TObject; var Key: Char);
  15386. begin
  15387.   //if Length(EdSearch.Text) > 30 then EdSearch.Text := '';
  15388. end;

  15389. procedure TFrmDlg.DStoreOpenDirectPaint(Sender: TObject;
  15390.   dsurface: TTexture);
  15391. var
  15392.   d: TTexture;
  15393. begin
  15394.   d := nil;
  15395.   with Sender as TDButton do begin
  15396.     if not Downed then begin
  15397.       if WLib <> nil then
  15398.         d := WLib.Images[FaceIndex]
  15399.     end else begin
  15400.       if WLib <> nil then
  15401.         d := WLib.Images[FaceIndex + 1];
  15402.     end;
  15403.     if d <> nil then
  15404.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  15405.   end;
  15406. end;

  15407. procedure TFrmDlg.DStoreCloseClick(Sender: TObject; X, Y: Integer);
  15408. begin
  15409.   CloseStoreDlg;
  15410. end;

  15411. procedure TFrmDlg.DStoreMsgDlgOkClick(Sender: TObject; X, Y: Integer);
  15412. begin
  15413.   if Sender = DStoreMsgDlgOk then DStoreMsgDlg.DialogResult := mrOk;
  15414.   if Sender = DStoreMsgDlgCancel then DStoreMsgDlg.DialogResult := mrCancel;
  15415.   DStoreMsgDlg.Visible := False;
  15416. end;

  15417. function TFrmDlg.DStoreMessageDlg(): TModalResult;
  15418. const
  15419.   XBase = 324;
  15420. var
  15421.   I: Integer;
  15422.   lx, ly: Integer;
  15423.   d: TTexture;
  15424.   procedure ShowDice();
  15425.   var
  15426.     I: Integer;
  15427.     bo05: Boolean;
  15428.   begin
  15429.     if m_nDiceCount = 1 then begin
  15430.       if m_Dice[0].n67C < 20 then begin
  15431.         if GetTickCount - m_Dice[0].dwPlayTick > 100 then begin
  15432.           if m_Dice[0].n67C div 5 = 4 then begin
  15433.             m_Dice[0].nPlayPoint := Random(6) + 1;
  15434.           end else begin
  15435.             m_Dice[0].nPlayPoint := m_Dice[0].n67C div 5 + 8;
  15436.           end;
  15437.           m_Dice[0].dwPlayTick := GetTickCount();
  15438.           Inc(m_Dice[0].n67C);
  15439.         end;
  15440.         Exit;
  15441.       end;
  15442.       m_Dice[0].nPlayPoint := m_Dice[0].nDicePoint;
  15443.       if GetTickCount - m_Dice[0].dwPlayTick > 1500 then begin
  15444.         DStoreMsgDlg.Visible := False;
  15445.       end;
  15446.       Exit;
  15447.     end;

  15448.     bo05 := True;
  15449.     for I := 0 to m_nDiceCount - 1 do begin
  15450.       if m_Dice[I].n67C < m_Dice[I].n680 then begin
  15451.         if GetTickCount - m_Dice[I].dwPlayTick > 100 then begin
  15452.           if m_Dice[I].n67C div 5 = 4 then begin
  15453.             m_Dice[I].nPlayPoint := Random(6) + 1;
  15454.           end else begin
  15455.             m_Dice[I].nPlayPoint := m_Dice[I].n67C div 5 + 8;
  15456.           end;
  15457.           m_Dice[I].dwPlayTick := GetTickCount();
  15458.           Inc(m_Dice[I].n67C);
  15459.         end;
  15460.         bo05 := False;
  15461.       end else begin
  15462.         m_Dice[I].nPlayPoint := m_Dice[I].nDicePoint;
  15463.         if GetTickCount - m_Dice[I].dwPlayTick < 2000 then begin
  15464.           bo05 := False;
  15465.         end;
  15466.       end;
  15467.     end; //for
  15468.     if bo05 then begin
  15469.       DStoreMsgDlg.Visible := False;
  15470.     end;
  15471.   end;
  15472. begin
  15473.   //DStoreMsgDlg.Visible := True;
  15474.   for I := 0 to m_nDiceCount - 1 do begin
  15475.     m_Dice[I].n67C := 0;
  15476.     m_Dice[I].n680 := Random(m_nDiceCount + 2) * 5 + 10;
  15477.     m_Dice[I].nPlayPoint := 1;
  15478.     m_Dice[I].dwPlayTick := GetTickCount();
  15479.   end;

  15480.   DStoreMsgDlg.ShowModal;
  15481.   SetDFocus(EdStoreDlgEdit);
  15482.   Result := mrOk;

  15483.   while True do begin
  15484.     if not DStoreMsgDlg.Visible then Break;
  15485.     frmMain.ProcOnIdle;
  15486.     Application.ProcessMessages;
  15487.     if m_nDiceCount > 0 then begin
  15488.       m_boPlayDice := True;
  15489.       for I := 0 to m_nDiceCount - 1 do begin
  15490.         m_Dice[I].nX := ((DStoreMsgDlg.Width div 2 + 6) - ((m_nDiceCount * 32 + m_nDiceCount) div 2)) + (I * 32 + I);
  15491.         m_Dice[I].nY := DStoreMsgDlg.Height div 2 - 14;
  15492.       end;
  15493.       ShowDice();
  15494.     end;
  15495.     if Application.Terminated then Exit;
  15496.     Sleep(1);
  15497.   end;

  15498.   StoreDlgEditText := Trim(EdStoreDlgEdit.Text);
  15499.   if EdChat.Visible then EdChat.SetFocus;
  15500.   Result := DStoreMsgDlg.DialogResult;
  15501.   m_nDiceCount := 0;
  15502.   m_boPlayDice := False;
  15503. end;

  15504. procedure TFrmDlg.DStoreMsgDlgDirectPaint(Sender: TObject;
  15505.   dsurface: TTexture);
  15506. var
  15507.   I: Integer;
  15508.   nX, nY: Integer;
  15509.   d: TTexture;
  15510. begin
  15511.   d := nil;
  15512.   with Sender as TDWindow do begin
  15513.     if WLib <> nil then
  15514.       d := WLib.Images[FaceIndex];
  15515.     if d <> nil then
  15516.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  15517.     if m_boPlayDice then begin
  15518.       for I := 0 to m_nDiceCount - 1 do begin
  15519.         d := g_WBagItemImages.GetCachedImage(m_Dice[I].nPlayPoint + 376 - 1, nX, nY);
  15520.         if d <> nil then begin
  15521.           dsurface.Draw(SurfaceX(Left) + m_Dice[I].nX + nX - 14, SurfaceY(Top) + m_Dice[I].nY + nY + 38, d.ClientRect, d, True);
  15522.         end;
  15523.       end;
  15524.     end;
  15525.   end;
  15526. end;

  15527. procedure TFrmDlg.EdStoreDlgEditKeyPress(Sender: TObject; var Key: Char);
  15528. begin
  15529.   if Key = #13 then begin
  15530.     DStoreMsgDlgOkClick(DStoreMsgDlgOk, 0, 0);
  15531.   end;
  15532. end;

  15533. procedure TFrmDlg.DStoreDlgClick(Sender: TObject; X, Y: Integer);
  15534. begin
  15535.   ReleaseDFocus;
  15536. end;

  15537. procedure TFrmDlg.DUserStoreClick(Sender: TObject; X, Y: Integer);
  15538. begin
  15539.   ReleaseDFocus;
  15540. end;

  15541. procedure TFrmDlg.DUserStoreCloseClick(Sender: TObject; X, Y: Integer);
  15542. begin
  15543.   CloseUserStoreDlg;
  15544. end;

  15545. procedure TFrmDlg.DGStoreGridPaint(Sender: TObject; ACol, ARow: Integer;
  15546.   Rect: TRect; State: TGridDrawState; dsurface: TTexture);
  15547. var
  15548.   nIdx: Integer;
  15549.   d: TTexture;
  15550. begin
  15551.   nIdx := ACol + ARow * DGStore.ColCount;
  15552.   if nIdx in [0..15 - 1] then begin
  15553.     if g_StoreItems[nIdx].Item.s.Name <> '' then begin
  15554.       d := g_WBagItemImages.Images[g_StoreItems[nIdx].Item.s.looks];
  15555.       if d <> nil then
  15556.         with DGStore do begin
  15557.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  15558.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  15559.             d.ClientRect,
  15560.             d, True);
  15561.         end;

  15562.       with DGStore do begin
  15563.         if (g_StoreItems[nIdx].Item.s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_StoreItems[nIdx].Item.s.AddPoint))} then begin
  15564.           if GetTickCount - g_DrawStoreItems[nIdx].dwDrawTick >= 200 then begin
  15565.             g_DrawStoreItems[nIdx].dwDrawTick := GetTickCount;
  15566.             if g_DrawStoreItems[nIdx].nIndex <= 0 then g_DrawStoreItems[nIdx].nIndex := 260 - 1;
  15567.             Inc(g_DrawStoreItems[nIdx].nIndex);
  15568.             if g_DrawStoreItems[nIdx].nIndex > 265 then g_DrawStoreItems[nIdx].nIndex := 260;
  15569.           end;
  15570.           d := g_WMain2Images.Images[g_DrawItemArr[nIdx].nIndex];
  15571.           if d <> nil then begin
  15572.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  15573.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  15574.           end;
  15575.         end;

  15576.         if g_StoreItems[nIdx].Item.s.AddValue[12] >= 2 then begin
  15577.           if GetTickCount - g_DrawStoreItems_[nIdx].dwDrawTick >= 200 then begin
  15578.             g_DrawStoreItems_[nIdx].dwDrawTick := GetTickCount;
  15579.             if g_DrawStoreItems_[nIdx].nIndex <= 0 then g_DrawStoreItems_[nIdx].nIndex := 600 - 1;
  15580.             Inc(g_DrawStoreItems_[nIdx].nIndex);
  15581.             if g_DrawStoreItems_[nIdx].nIndex > 617 then g_DrawStoreItems_[nIdx].nIndex := 600;
  15582.           end;
  15583.           d := g_WMain3Images.Images[g_DrawStoreItems_[nIdx].nIndex];
  15584.           if d <> nil then begin
  15585.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  15586.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  15587.           end;
  15588.         end;
  15589.       end;

  15590.     end;
  15591.   end;
  15592. end;

  15593. procedure TFrmDlg.DGStoreGridMouseMove(Sender: TObject; ACol,
  15594.   ARow: Integer; Shift: TShiftState);
  15595. var
  15596.   Idx: Integer;
  15597.   Button: TMouseButton;
  15598.   iname, d1, d2, d3: string;
  15599.   useable: Boolean;

  15600.   nWhere: Integer;
  15601.   List: TStringList;
  15602. begin
  15603.   DScreen.ClearHint;
  15604.   if ssRight in Shift then begin
  15605.     if g_boItemMoving then
  15606.       DGStoreGridSelect(Self, ACol, ARow, Shift);
  15607.   end else begin
  15608.     Idx := ACol + ARow * DGStore.ColCount;
  15609.     if Idx in [0..15 - 1] then begin
  15610.       g_MoveRect := DGStore.ClientRect;
  15611.       g_MoveRect.Right := g_MoveRect.Right - 1;
  15612.       g_MoveRect.Top := g_MoveRect.Top + 2;
  15613.       g_MoveRect.Bottom := g_MoveRect.Bottom - 1;
  15614.       g_MouseItem := g_StoreItems[Idx].Item;
  15615.       if (g_MouseItem.s.Name <> '') then begin

  15616.         nWhere := GetHumUseItemByBagItem(g_MouseItem.s.StdMode);
  15617.         if g_Config.boCompareItem and (nWhere >= 0) then begin

  15618.           List := TStringList.Create;
  15619.           try
  15620.             GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  15621.             HintList.AddObject('售价: ' + IntToStr(g_MouseItem.s.Price) + ' ' + GetStorePriceName(g_StoreItems[Idx].btSellType), TObject(clLime));
  15622.             List.AddStrings(HintList);

  15623.             GetMouseItemInfo(g_MySelf, @g_UseItems[nWhere], iname, d1, d2, d3, useable);
  15624.             if HintList.Count > 0 then begin
  15625.               HintList.Strings[0] := GetUseItemName(nWhere) + ' ' + HintList.Strings[0];
  15626.             end;
  15627.             with DGStore do
  15628.               DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  15629.                 SurfaceY(Top + (ARow + 1) * RowHeight),
  15630.                 List, HintList, False);
  15631.             HintList.Clear;
  15632.           finally
  15633.             List.Free;
  15634.           end;
  15635.           g_MouseItem.s.Name := '';
  15636.         end else begin
  15637.           GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  15638.           with DGStore do
  15639.             DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  15640.               SurfaceY(Top + (ARow + 1) * RowHeight),
  15641.               HintList, False);
  15642.         end;

  15643.         {GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  15644.         HintList.AddObject('售价: ' + IntToStr(g_MouseItem.s.Price) + ' ' + GetStorePriceName(g_StoreItems[Idx].btSellType), TObject(clLime));
  15645.         with DGStore do
  15646.           DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  15647.             SurfaceY(Top + (ARow + 1) * RowHeight),
  15648.             HintList, False); }
  15649.       end;
  15650.     end else begin
  15651.       ClearMoveRect();
  15652.       g_MouseItem.s.Name := '';
  15653.     end;
  15654.   end;
  15655. end;

  15656. procedure TFrmDlg.DGStoreGridSelect(Sender: TObject; ACol, ARow: Integer;
  15657.   Shift: TShiftState);
  15658. var
  15659.   Idx, Price: Integer;
  15660. label InPutPrice;
  15661. begin
  15662.   if g_MySelf.m_boStartStore or g_boStartStoreing then Exit;
  15663.   Idx := ACol + ARow * DGStore.ColCount;
  15664.   if Idx in [0..15 - 1] then begin
  15665.     if not g_boItemMoving then begin
  15666.       ClearMoveRect();
  15667.       if g_StoreItems[Idx].Item.s.Name <> '' then begin
  15668.         g_boItemMoving := True;
  15669.         g_MovingItem.Index := Idx;
  15670.         g_MovingItem.Index2 := g_StoreItems[Idx].btSellType;
  15671.         g_MovingItem.Item := g_StoreItems[Idx].Item;
  15672.         g_MovingItem.Owner := DStoreDlg;
  15673.         ItemClickSound(g_StoreItems[Idx].Item.s);
  15674.         g_StoreItems[Idx].Item.s.Name := '';
  15675.       end;
  15676.     end else begin
  15677.       if (g_MovingItem.Owner = DItemBag) or (g_MovingItem.Owner = DStoreDlg) then begin
  15678.         if g_StoreItems[Idx].Item.s.Name = '' then begin
  15679.           if (g_MovingItem.Owner = DItemBag) then begin
  15680.             g_WaitingStoreItem := g_MovingItem;
  15681.             g_boItemMoving := False;
  15682.             g_MovingItem.Item.s.Name := '';
  15683.             g_MovingItem.Owner := nil;
  15684.             ClearMoveRect();
  15685.             InPutPrice:
  15686.             if DStoreMessageDlg = mrOk then begin
  15687.               Price := Str_ToInt(StoreDlgEditText, 0);
  15688.               if Price > 0 then begin
  15689.                 case DStoreMsgDlg.FaceIndex of
  15690.                   157: g_StoreItems[Idx].btSellType := 0;
  15691.                   158: g_StoreItems[Idx].btSellType := 1;
  15692.                   159: g_StoreItems[Idx].btSellType := 2;
  15693.                   160: g_StoreItems[Idx].btSellType := 3;
  15694.                 end;
  15695.                 g_StoreItems[Idx].Item := g_WaitingStoreItem.Item;
  15696.                 g_StoreItems[Idx].Item.s.Price := Price;
  15697.                 g_WaitingStoreItem.Item.s.Name := '';
  15698.                 g_boItemMoving := False;
  15699.                 g_WaitingStoreItem.Owner := nil;
  15700.               end else begin
  15701.                 goto InPutPrice;
  15702.                 Exit;
  15703.               end;
  15704.             end else begin
  15705.               AddItemBag(g_WaitingStoreItem.Item);
  15706.               g_WaitingStoreItem.Item.s.Name := '';
  15707.               g_boItemMoving := False;
  15708.               g_WaitingStoreItem.Owner := nil;
  15709.             end;
  15710.           end else begin
  15711.             g_StoreItems[Idx].Item := g_MovingItem.Item;
  15712.             g_StoreItems[Idx].btSellType := g_MovingItem.Index2;
  15713.             g_MovingItem.Item.s.Name := '';
  15714.             g_boItemMoving := False;
  15715.             g_MovingItem.Owner := nil;
  15716.           end;
  15717.         end;
  15718.       end;
  15719.     end;
  15720.   end;
  15721.   ArrangeItemBag;
  15722. end;

  15723. procedure TFrmDlg.DGUserStoreGridMouseMove(Sender: TObject; ACol,
  15724.   ARow: Integer; Shift: TShiftState);
  15725. var
  15726.   Idx: Integer;
  15727.   iname, d1, d2, d3: string;
  15728.   useable: Boolean;
  15729. begin
  15730.   DScreen.ClearHint;
  15731.   Idx := ACol + ARow * DGUserStore.ColCount;
  15732.   if Idx in [0..14] then begin
  15733.     g_MouseItem := g_StoreRemoteItems[Idx].Item;
  15734.     if g_MouseItem.s.Name <> '' then begin
  15735.       GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  15736.       HintList.AddObject('售价: ' + IntToStr(g_MouseItem.s.Price) + ' ' + GetStorePriceName(g_StoreRemoteItems[Idx].btSellType), TObject(clLime));
  15737.       with DGUserStore do
  15738.         DScreen.ShowHint(SurfaceX(Left + ACol * ColWidth),
  15739.           SurfaceY(Top + (ARow + 1) * RowHeight),
  15740.           HintList, False);
  15741.     end;
  15742.   end;
  15743. end;

  15744. procedure TFrmDlg.DGUserStoreGridPaint(Sender: TObject; ACol,
  15745.   ARow: Integer; Rect: TRect; State: TGridDrawState;
  15746.   dsurface: TTexture);
  15747. var
  15748.   nIdx: Integer;
  15749.   d: TTexture;
  15750. begin
  15751.   nIdx := ACol + ARow * DGUserStore.ColCount;
  15752.   if nIdx in [0..14] then begin
  15753.     if g_StoreRemoteItems[nIdx].Item.s.Name <> '' then begin
  15754.       d := g_WBagItemImages.Images[g_StoreRemoteItems[nIdx].Item.s.looks];
  15755.       if d <> nil then
  15756.         with DGUserStore do begin
  15757.           dsurface.Draw(SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  15758.             SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1),
  15759.             d.ClientRect,
  15760.             d, True);
  15761.         end;

  15762.       if (g_SelectStoreItem.Item.s.Name <> '') and (gdSelected in State) then begin
  15763.         dsurface.FillRectAlpha(g_MoveRect, clGreen, 150);
  15764.       end;

  15765.       with DGUserStore do begin
  15766.         if (g_StoreRemoteItems[nIdx].Item.s.AddValue[12] in [1, 3]) {or (GetAddPoint(g_StoreRemoteItems[nIdx].Item.s.AddPoint))} then begin
  15767.           if GetTickCount - g_DrawStoreRemoteItems[nIdx].dwDrawTick >= 200 then begin
  15768.             g_DrawStoreRemoteItems[nIdx].dwDrawTick := GetTickCount;
  15769.             if g_DrawStoreRemoteItems[nIdx].nIndex <= 0 then g_DrawStoreRemoteItems[nIdx].nIndex := 260 - 1;
  15770.             Inc(g_DrawStoreRemoteItems[nIdx].nIndex);
  15771.             if g_DrawStoreRemoteItems[nIdx].nIndex > 265 then g_DrawStoreRemoteItems[nIdx].nIndex := 260;
  15772.           end;
  15773.           d := g_WMain2Images.Images[g_DrawStoreRemoteItems[nIdx].nIndex];
  15774.           if d <> nil then begin
  15775.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  15776.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  15777.           end;
  15778.         end;

  15779.         if g_StoreRemoteItems[nIdx].Item.s.AddValue[12] >= 2 then begin
  15780.           if GetTickCount - g_DrawStoreRemoteItems_[nIdx].dwDrawTick >= 200 then begin
  15781.             g_DrawStoreRemoteItems_[nIdx].dwDrawTick := GetTickCount;
  15782.             if g_DrawStoreRemoteItems_[nIdx].nIndex <= 0 then g_DrawStoreRemoteItems_[nIdx].nIndex := 600 - 1;
  15783.             Inc(g_DrawStoreRemoteItems_[nIdx].nIndex);
  15784.             if g_DrawStoreRemoteItems_[nIdx].nIndex > 617 then g_DrawStoreRemoteItems_[nIdx].nIndex := 600;
  15785.           end;
  15786.           d := g_WMain3Images.Images[g_DrawStoreRemoteItems_[nIdx].nIndex];
  15787.           if d <> nil then begin
  15788.             DrawBlend(dsurface, SurfaceX(Rect.Left + (ColWidth - d.Width) div 2 - 1),
  15789.               SurfaceY(Rect.Top + (RowHeight - d.Height) div 2 + 1), d);
  15790.           end;
  15791.         end;
  15792.       end;
  15793.     end;

  15794.   end;
  15795. end;

  15796. procedure TFrmDlg.DStoreDlgMouseMove(Sender: TObject; Shift: TShiftState; X,
  15797.   Y: Integer);
  15798. begin
  15799.   DScreen.ClearHint;
  15800. end;

  15801. procedure TFrmDlg.DUserStoreMouseMove(Sender: TObject; Shift: TShiftState;
  15802.   X, Y: Integer);
  15803. begin
  15804.   DScreen.ClearHint;
  15805. end;

  15806. procedure TFrmDlg.DStoreDlgDirectPaint(Sender: TObject;
  15807.   dsurface: TTexture);
  15808. var
  15809.   d: TTexture;
  15810.   sStoreName: string;
  15811.   old: Integer;
  15812. begin
  15813.   with DStoreDlg do begin
  15814.     d := nil;
  15815.     if WLib <> nil then
  15816.       d := WLib.Images[FaceIndex];
  15817.     if d <> nil then
  15818.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  15819.     if g_MySelf.m_boStartStore then begin
  15820.       sStoreName := g_MySelf.m_sUserName + '的摊位';
  15821.       with dsurface do begin
  15822.         TextOut(SurfaceX(Left) + 86, SurfaceY(Top) + 56, sStoreName);
  15823.       end;
  15824.     end;
  15825.   end;
  15826. end;

  15827. procedure TFrmDlg.DUserStoreDirectPaint(Sender: TObject;
  15828.   dsurface: TTexture);
  15829. var
  15830.   d: TTexture;
  15831.   old: Integer;
  15832. begin
  15833.   with DUserStore do begin
  15834.     d := nil;
  15835.     if WLib <> nil then
  15836.       d := WLib.Images[FaceIndex];
  15837.     if d <> nil then
  15838.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  15839.     if g_sStoreMasterName <> '' then begin
  15840.       with dsurface do begin
  15841.         TextOut(SurfaceX(Left) + 50 + (140 - TextWidth(g_sStoreMasterName)) div 2, SurfaceY(Top) + 26, g_sStoreMasterName);
  15842.       end;
  15843.     end;
  15844.   end;
  15845. end;

  15846. procedure TFrmDlg.DStoreOpenClick(Sender: TObject; X, Y: Integer);
  15847. begin
  15848.   if (GetTickCount - g_dwStartStoreTick > 1000 * 5) and g_boStartStoreing then begin
  15849.     g_boStartStoreing := False;
  15850.   end;

  15851.   if g_MySelf.m_boStartStore or g_boStartStoreing then Exit;
  15852.   if g_boItemMoving then begin
  15853.     DMessageDlg('请先放下移动的物品!', [mbOk]);
  15854.     Exit;
  15855.   end;

  15856.   if GetTickCount - g_dwStartStoreTick > 1000 * 3 then begin
  15857.     g_dwStartStoreTick := GetTickCount;
  15858.     g_boStartStoreing := True;
  15859.     {g_TargetCret := nil;
  15860.     g_FocusCret := nil;
  15861.     g_MagicTarget := nil;  }
  15862.     frmMain.SendStartStore;
  15863.   end;
  15864. end;

  15865. procedure TFrmDlg.DStoreCancelClick(Sender: TObject; X, Y: Integer);
  15866. begin
  15867.   if not g_MySelf.m_boStartStore then Exit;
  15868.   if GetTickCount - g_dwStartStoreTick > 1000 * 3 then begin
  15869.     g_dwStartStoreTick := GetTickCount;
  15870.     frmMain.SendClientMessage(CM_STOPSTORE, g_MySelf.m_nRecogId, 0, 0, 0);
  15871.   end;
  15872. end;

  15873. procedure TFrmDlg.DGUserStoreGridSelect(Sender: TObject; ACol,
  15874.   ARow: Integer; Shift: TShiftState);
  15875. var
  15876.   Idx, Price: Integer;
  15877. begin
  15878.   ClearMoveRect();
  15879.   g_SelectStoreItem.Item.s.Name := '';
  15880.   Idx := ACol + ARow * DGUserStore.ColCount;
  15881.   if Idx in [0..15 - 1] then begin
  15882.     if g_StoreRemoteItems[Idx].Item.s.Name <> '' then begin
  15883.       with DGUserStore do begin
  15884.         g_MoveRect.Left := SurfaceX(Left) + ACol * ColWidth;
  15885.         g_MoveRect.Top := SurfaceY(Top) + ARow * RowHeight;
  15886.         g_MoveRect.Right := g_MoveRect.Left + ColWidth;
  15887.         g_MoveRect.Bottom := g_MoveRect.Top + RowHeight;
  15888.       end;
  15889.       {g_MoveRect := DGUserStore.ClientRect;
  15890.       g_MoveRect.Right := g_MoveRect.Right - 1;
  15891.       g_MoveRect.Top := g_MoveRect.Top + 2;
  15892.       g_MoveRect.Bottom := g_MoveRect.Bottom - 1; }
  15893.       g_SelectStoreItem := g_StoreRemoteItems[Idx];
  15894.     end;
  15895.   end;
  15896. end;

  15897. procedure TFrmDlg.DUserStoreBuyClick(Sender: TObject; X, Y: Integer);
  15898. begin
  15899.   if g_nStoreMasterRecogId = g_MySelf.m_nRecogId then Exit;
  15900.   if g_SelectStoreItem.Item.s.Name <> '' then begin
  15901.     if mrOk = DMessageDlg('是否确实购买' + g_sStoreMasterName + '的 ' + g_SelectStoreItem.Item.s.Name + ' ?', [mbOk, mbCancel]) then begin
  15902.       frmMain.SendBuyStoreItem(g_SelectStoreItem.Item.s.Name, g_SelectStoreItem.Item.MakeIndex, g_nStoreMasterRecogId);
  15903.     end;
  15904.   end;
  15905. end;

  15906. procedure TFrmDlg.DStoreMsgDlgClick(Sender: TObject; X, Y: Integer);
  15907. var
  15908.   nX, nY: Integer;
  15909. begin
  15910.   nX := X - DStoreMsgDlg.Left;
  15911.   nY := Y - DStoreMsgDlg.Top;
  15912.   if (nY >= 25) and (nY <= 45) then begin
  15913.     if (nX >= 22) and (nX <= 105) then DStoreMsgDlg.FaceIndex := 157;
  15914.     if (nX >= 106) and (nX <= 188) then DStoreMsgDlg.FaceIndex := 158;
  15915.     if (nX >= 189) and (nX <= 270) then DStoreMsgDlg.FaceIndex := 159;
  15916.     if (nX >= 271) and (nX <= 354) then DStoreMsgDlg.FaceIndex := 160;
  15917.   end;
  15918. end;

  15919. procedure TFrmDlg.DMainMenuClick(Sender: TObject; X, Y: Integer);
  15920. begin
  15921.   if DMainMenu.DControl <> nil then begin
  15922.     if DMainMenu.DControl is TDEdit then begin
  15923.       case DMainMenu.itemindex of
  15924.         0: TDEdit(DMainMenu.DControl).CutText;
  15925.         1: TDEdit(DMainMenu.DControl).CopyText;
  15926.         2: TDEdit(DMainMenu.DControl).PasteText;
  15927.         3: TDEdit(DMainMenu.DControl).DeleteText;
  15928.         5: TDEdit(DMainMenu.DControl).SelectAll;
  15929.       end;
  15930.     end;
  15931.   end;
  15932. end;

  15933. procedure TFrmDlg.EdIdKeyPress(Sender: TObject; var Key: Char);
  15934. begin
  15935.   if Key = #13 then begin
  15936.     Key := #0;
  15937.     LoginScene.m_sLoginId := LowerCase(EdId.Text);
  15938.     if LoginScene.m_sLoginId <> '' then begin
  15939.       EdPasswd.SetFocus;
  15940.       EdPasswd.SelectAll;
  15941.     end;
  15942.   end else
  15943.     if Key = #9 then begin //VK_TAB
  15944.     Key := #0;
  15945.     EdPasswd.SetFocus;
  15946.     EdPasswd.SelectAll;
  15947.   end;
  15948. end;

  15949. procedure TFrmDlg.EdPasswdKeyPress(Sender: TObject; var Key: Char);
  15950. begin
  15951.   if (Key = '~') or (Key = '''') then Key := '_';
  15952.   if Key = #13 then begin
  15953.     Key := #0;
  15954.     LoginScene.m_sLoginId := LowerCase(EdId.Text);
  15955.     LoginScene.m_sLoginPasswd := EdPasswd.Text;
  15956.     if (LoginScene.m_sLoginId <> '') and (LoginScene.m_sLoginPasswd <> '') then begin
  15957.       frmMain.SendLogin(LoginScene.m_sLoginId, LoginScene.m_sLoginPasswd);
  15958.       EdId.Text := '';
  15959.       EdPasswd.Text := '';
  15960.     end else
  15961.       if (EdId.Visible) and (EdId.Text = '') then EdId.SetFocus;
  15962.   end else
  15963.     if Key = #9 then begin
  15964.     Key := #0;
  15965.     EdId.SetFocus;
  15966.     EdId.SelectAll;
  15967.   end;
  15968. end;

  15969. procedure TFrmDlg.EdChatKeyPress(Sender: TObject; var Key: Char);
  15970. begin
  15971.   if DScreen.CurrentScene = PlayScene then begin
  15972.     if Key = #13 then begin
  15973.       frmMain.SendSay(EdChat.Text);
  15974.       EdChat.Text := '';
  15975.       EdChat.Visible := False;
  15976.       Key := #0;
  15977.     end;
  15978.     if Key = #27 then begin
  15979.       EdChat.Text := '';
  15980.       EdChat.Visible := False;
  15981.       Key := #0;
  15982.     end;
  15983.   end;
  15984. end;

  15985. procedure TFrmDlg.EdDlgEditKeyPress(Sender: TObject; var Key: Char);
  15986. begin
  15987.   if Key = #13 then begin
  15988.     if DMsgDlgOk.Visible then begin
  15989.       DMsgDlgOkClick(DMsgDlgOk, 0, 0);
  15990.     end else
  15991.       if DMsgDlgYes.Visible then begin
  15992.       DMsgDlgOkClick(DMsgDlgYes, 0, 0);
  15993.     end;
  15994.   end;
  15995. end;

  15996. procedure TFrmDlg.EdChatMouseMove(Sender: TObject; Shift: TShiftState; X,
  15997.   Y: Integer);
  15998. begin
  15999.   DScreen.ClearHint;
  16000. end;

  16001. procedure TFrmDlg.DGetBoxItemFlashMouseMove(Sender: TObject;
  16002.   Shift: TShiftState; X, Y: Integer);
  16003. begin
  16004.   g_boGetBoxItemMouseMove := not g_boGetBoxItem;
  16005. { if not g_boGetBoxItem then begin
  16006.     g_boGetBoxItemMouseMove := True;
  16007.     //DScreen.ShowHint(DGetBoxItem.SurfaceX(X), DGetBoxItem.SurfaceY(Y), '试试运气', clLime, False);
  16008.   end;}
  16009.   //Showmessage('TFrmDlg.DGetBoxItemFlashMouseMove');
  16010. end;

  16011. procedure TFrmDlg.DGetBoxItemMouseMove(Sender: TObject; Shift: TShiftState;
  16012.   X, Y: Integer);
  16013. begin
  16014.   g_boGetBoxItemMouseMove := True;
  16015. end;

  16016. procedure TFrmDlg.DGetBoxItemFlashClick(Sender: TObject; X, Y: Integer);
  16017. begin
  16018.   if g_boGetBoxItem then Exit;
  16019.   g_boGetBoxItem := True;
  16020.   PlaySound(s_SelectBoxFlash);
  16021.   frmMain.SendClientMessage(CM_GETSELBOXITEMNUM, 0, 0, 0, 0);
  16022. end;

  16023. procedure TFrmDlg.ShowRandomDlg;
  16024. begin
  16025.   DWRandomCode.Visible := True;
  16026.   DEditRandomCode.Visible := True;
  16027.   DEditRandomCode.Text := '';
  16028.   DEditRandomCode.SetFocus;
  16029. end;

  16030. procedure TFrmDlg.CloseRandomDlg;
  16031. begin
  16032.   DWRandomCode.Visible := False;
  16033.   DEditRandomCode.Visible := False;
  16034. end;

  16035. procedure TFrmDlg.DWRandomCodeDirectPaint(Sender: TObject;
  16036.   dsurface: TTexture);
  16037. var
  16038.   d: TTexture;
  16039.   rc: TRect;
  16040. begin
  16041.   with DWRandomCode do begin
  16042.     d := WLib.Images[FaceIndex];
  16043.     if d <> nil then
  16044.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16045.     rc := g_RandomSurface.ClientRect;
  16046.     rc.Top := rc.Top + 5;
  16047.     dsurface.Draw(SurfaceX(Left) + 40, SurfaceY(Top) + 45, rc, g_RandomSurface, True);
  16048.    // dsurface.StretchDraw(Bounds(SurfaceX(Left) + 35, SurfaceY(Top) + 48, 135, 42), g_RandomSurface.ClientRect, g_RandomSurface, True);
  16049.   end;
  16050. end;

  16051. procedure TFrmDlg.DBRandomCodeOKClick(Sender: TObject; X, Y: Integer);
  16052. var
  16053.   sRandomCode: string;
  16054. begin
  16055.   sRandomCode := Trim(DEditRandomCode.Text);
  16056.   if sRandomCode <> '' then begin
  16057.     frmMain.SendRandomCode(sRandomCode);
  16058.     CloseRandomDlg;
  16059.   end;
  16060. end;

  16061. procedure TFrmDlg.DBRandomCodeChgClick(Sender: TObject; X, Y: Integer);
  16062. begin
  16063.   frmMain.SendGetRandomBuffer();
  16064. end;

  16065. procedure TFrmDlg.DSWWeaponDblClick(Sender: TObject);
  16066. var
  16067.   where: Integer;
  16068. begin
  16069.   if g_MySelf = nil then Exit;
  16070.   if StatePage <> 0 then Exit;
  16071.   if g_boItemMoving or (g_WaitingUseItem.Item.s.Name <> '') then Exit;
  16072.   where := -1;
  16073.   if Sender = DSWDress then where := U_DRESS;
  16074.   if Sender = DSWWeapon then where := U_WEAPON;
  16075.   if Sender = DSWHelmet then where := U_HELMET;
  16076.   if Sender = DSWNecklace then where := U_NECKLACE;
  16077.   if Sender = DSWLight then where := U_RIGHTHAND;
  16078.   if Sender = DSWRingL then where := U_RINGL;
  16079.   if Sender = DSWRingR then where := U_RINGR;
  16080.   if Sender = DSWArmRingL then where := U_ARMRINGL;
  16081.   if Sender = DSWArmRingR then where := U_ARMRINGR;

  16082.   if Sender = DSWBujuk then where := U_BUJUK;
  16083.   if Sender = DSWBelt then where := U_BELT;
  16084.   if Sender = DSWBoots then where := U_BOOTS;
  16085.   if Sender = DSWCharm then where := U_CHARM;

  16086.   if where in [U_DRESS..U_CHARM] then begin
  16087.     if g_UseItems[where].s.Name <> '' then begin
  16088.       ItemClickSound(g_UseItems[where].s);
  16089.       g_WaitingUseItem.Item := g_UseItems[where];
  16090.       g_MovingItem.Index := -(where + 1);
  16091.       g_UseItems[where].s.Name := '';
  16092.       frmMain.SendTakeOffItem(-(g_WaitingUseItem.Index + 1), g_WaitingUseItem.Item.MakeIndex, g_WaitingUseItem.Item.s.Name);
  16093.       ArrangeItemBag;
  16094.     end;
  16095.   end;
  16096. end;

  16097. procedure TFrmDlg.EdChatMouseDown(Sender: TObject; Button: TMouseButton;
  16098.   Shift: TShiftState; X, Y: Integer);
  16099. begin
  16100.   //DScreen.AddChatBoardString('TFrmDlg.EdChatMouseDown', clyellow, clRed);
  16101. end;

  16102. procedure TFrmDlg.DMerchantDlgInRealArea(Sender: TObject; X, Y: Integer;
  16103.   var IsRealArea: Boolean);
  16104. var
  16105.   d: TTexture;
  16106. begin
  16107.   IsRealArea := True;
  16108.   with TDControl(Sender) do begin
  16109.     if WLib <> nil then begin
  16110.       d := WLib.Images[FaceIndex];
  16111.       if d <> nil then begin
  16112.         if d.Pixels[X, Y] = 0 then
  16113.           IsRealArea := False;
  16114.       end;
  16115.     end;
  16116.   end;
  16117. end;

  16118. procedure TFrmDlg.DAdjustAbilOkDirectPaint(Sender: TObject;
  16119.   dsurface: TTexture);
  16120. var
  16121.   d: TTexture;
  16122. begin
  16123.   with Sender as TDButton do begin
  16124.     if Downed then begin
  16125.       d := nil;
  16126.       if WLib <> nil then
  16127.         d := WLib.Images[FaceIndex + 1];
  16128.       if d <> nil then
  16129.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16130.     end else begin
  16131.       d := WLib.Images[FaceIndex];
  16132.       if d <> nil then
  16133.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16134.     end;
  16135.   end;
  16136. end;

  16137. procedure TFrmDlg.DPlusSCDirectPaint(Sender: TObject;
  16138.   dsurface: TTexture);
  16139. var
  16140.   d: TTexture;
  16141. begin
  16142.   with Sender as TDButton do begin
  16143.     if g_nBonusPoint > 0 then begin
  16144.       FaceIndex := 212;
  16145.     end else begin
  16146.       FaceIndex := 216;
  16147.     end;
  16148.     if Downed and (g_nBonusPoint > 0) then begin
  16149.       d := nil;
  16150.       if WLib <> nil then
  16151.         d := WLib.Images[FaceIndex + 1];
  16152.       if d <> nil then
  16153.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16154.     end else begin
  16155.       d := WLib.Images[FaceIndex];
  16156.       if d <> nil then
  16157.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16158.     end;
  16159.   end;
  16160. end;


  16161. procedure TFrmDlg.DMinusSCDirectPaint(Sender: TObject;
  16162.   dsurface: TTexture);
  16163. var
  16164.   d: TTexture;

  16165.   decp: Integer;
  16166.   boDec: Boolean;
  16167. begin
  16168.   boDec := False;
  16169.   with Sender as TDButton do begin
  16170.     if IsKeyPressed(VK_CONTROL) and (g_nBonusPoint - 10 > 0) then decp := 10
  16171.     else decp := 1;
  16172.     if Sender = DMinusDC then
  16173.       if g_BonusAbilChg.DC >= decp then begin
  16174.         boDec := True;
  16175.       end;
  16176.     if Sender = DMinusMC then
  16177.       if g_BonusAbilChg.MC >= decp then begin
  16178.         boDec := True;
  16179.       end;
  16180.     if Sender = DMinusSC then
  16181.       if g_BonusAbilChg.SC >= decp then begin
  16182.         boDec := True;
  16183.       end;
  16184.     if Sender = DMinusAC then
  16185.       if g_BonusAbilChg.AC >= decp then begin
  16186.         boDec := True;
  16187.       end;
  16188.     if Sender = DMinusMAC then
  16189.       if g_BonusAbilChg.MAC >= decp then begin
  16190.         boDec := True;
  16191.       end;
  16192.     if Sender = DMinusHP then
  16193.       if g_BonusAbilChg.HP >= decp then begin
  16194.         boDec := True;
  16195.       end;
  16196.     if Sender = DMinusMP then
  16197.       if g_BonusAbilChg.MP >= decp then begin
  16198.         boDec := True;
  16199.       end;
  16200.     if Sender = DMinusHit then
  16201.       if g_BonusAbilChg.Hit >= decp then begin
  16202.         boDec := True;
  16203.       end;
  16204.     if Sender = DMinusSpeed then
  16205.       if g_BonusAbilChg.Speed >= decp then begin
  16206.         boDec := True;
  16207.       end;

  16208.     if boDec then begin
  16209.       FaceIndex := 214;
  16210.     end else begin
  16211.       FaceIndex := 217;
  16212.     end;

  16213.     if Downed and (boDec) then begin
  16214.       d := nil;
  16215.       if WLib <> nil then
  16216.         d := WLib.Images[FaceIndex + 1];
  16217.       if d <> nil then
  16218.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16219.     end else begin
  16220.       d := WLib.Images[FaceIndex];
  16221.       if d <> nil then
  16222.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16223.     end;
  16224.   end;
  16225. end;


  16226. procedure TFrmDlg.DMerchantDlgMouseMove(Sender: TObject;
  16227.   Shift: TShiftState; X, Y: Integer);
  16228. begin
  16229.   DScreen.ClearHint;
  16230. end;

  16231. procedure TFrmDlg.DBotCharRankingDirectPaint(Sender: TObject;
  16232.   dsurface: TTexture);
  16233. var
  16234.   d: TTexture;
  16235. begin
  16236.   with Sender as TDButton do begin
  16237.     d := nil;
  16238.     if TDButton(Sender).Downed then begin
  16239.       if WLib <> nil then
  16240.         d := WLib.Images[FaceIndex];
  16241.       if d <> nil then
  16242.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16243.     end;
  16244.   end;
  16245. end;

  16246. procedure TFrmDlg.RankingPageChanged(Sender: TObject);
  16247. begin
  16248.   RankingPage := -1;
  16249.   if Sender = DBotCharRanking then begin
  16250.     DBotCharRanking.Downed := True;
  16251.     DBotHeroRanking.Downed := False;
  16252.     DBotMasterRanking.Downed := False;

  16253.     DBotHeroActorRanking.Visible := False;
  16254.     DBotHeroWarriorRanking.Visible := False;
  16255.     DBotHeroWizzardRanking.Visible := False;
  16256.     DBotHeroMonkRanking.Visible := False;
  16257.     DBotActorRanking.Visible := True;
  16258.     DBotWarriorRanking.Visible := True;
  16259.     DBotWizzardRanking.Visible := True;
  16260.     DBotMonkRanking.Visible := True;
  16261.     g_nRankingsTablePage := 0;

  16262.   end else
  16263.     if Sender = DBotHeroRanking then begin
  16264.     DBotCharRanking.Downed := False;
  16265.     DBotHeroRanking.Downed := True;
  16266.     DBotMasterRanking.Downed := False;

  16267.     DBotActorRanking.Visible := False;
  16268.     DBotWarriorRanking.Visible := False;
  16269.     DBotWizzardRanking.Visible := False;
  16270.     DBotMonkRanking.Visible := False;
  16271.     DBotHeroActorRanking.Visible := True;
  16272.     DBotHeroWarriorRanking.Visible := True;
  16273.     DBotHeroWizzardRanking.Visible := True;
  16274.     DBotHeroMonkRanking.Visible := True;
  16275.     g_nRankingsTablePage := 1;

  16276.   end else
  16277.     if Sender = DBotMasterRanking then begin
  16278.     DBotCharRanking.Downed := False;
  16279.     DBotHeroRanking.Downed := False;
  16280.     DBotMasterRanking.Downed := True;

  16281.     DBotActorRanking.Visible := False;
  16282.     DBotWarriorRanking.Visible := False;
  16283.     DBotWizzardRanking.Visible := False;
  16284.     DBotMonkRanking.Visible := False;

  16285.     DBotHeroActorRanking.Visible := False;
  16286.     DBotHeroWarriorRanking.Visible := False;
  16287.     DBotHeroWizzardRanking.Visible := False;
  16288.     DBotHeroMonkRanking.Visible := False;
  16289.     g_nRankingsTablePage := 2;

  16290.     RankingPage := 0;
  16291.     FillChar(g_UserMasterRankings, SizeOf(TUserMasterRanking) * 10, #0);
  16292.     frmMain.SendGetRanking(g_nRankingsTablePage, 0, 0);
  16293.   end;
  16294. end;

  16295. procedure TFrmDlg.DRankingDlgDirectPaint(Sender: TObject;
  16296.   dsurface: TTexture);
  16297. var
  16298.   d: TTexture;
  16299.   I, lx, ly, n, old: Integer;
  16300.   CColor: TColor;
  16301. begin
  16302.   with DRankingDlg do begin
  16303.     d := WLib.Images[FaceIndex];
  16304.     if d <> nil then
  16305.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16306.     if DBotCharRanking.Downed then begin
  16307.       if RankingPage >= 0 then begin
  16308.         d := g_WMain3Images.Images[423];
  16309.         if d <> nil then
  16310.           dsurface.Draw(SurfaceX(Left + 26), SurfaceY(Top + 91), d.ClientRect, d, True);
  16311.         n := 0;

  16312.         with dsurface do begin
  16313.           CColor := clWhite;
  16314.           for I := 0 to Length(g_UserLevelRankings) - 1 do begin
  16315.             if I = RankingSelectLine - 1 then CColor := clyellow else CColor := clWhite;
  16316.             if g_UserLevelRankings[I].sChrName <> '' then begin
  16317.               TextOut(SurfaceX(Left + 52), SurfaceY(Top + 118 + n), IntToStr(g_UserLevelRankings[I].nIndex), CColor);
  16318.               TextOut(SurfaceX(Left + 114), SurfaceY(Top + 118 + n), g_UserLevelRankings[I].sChrName, CColor);
  16319.               TextOut(SurfaceX(Left + 258), SurfaceY(Top + 118 + n), IntToStr(g_UserLevelRankings[I].nLevel), CColor);
  16320.               Inc(n, LISTLINEHEIGHT + 9);
  16321.             end;
  16322.           end;
  16323.         end;
  16324.       end;
  16325.     end else
  16326.       if DBotHeroRanking.Downed then begin
  16327.       if RankingPage >= 0 then begin
  16328.         d := g_WMain3Images.Images[424];
  16329.         if d <> nil then
  16330.           dsurface.Draw(SurfaceX(Left + 26), SurfaceY(Top + 91), d.ClientRect, d, True);
  16331.         n := 0;

  16332.         with dsurface do begin
  16333.           CColor := clWhite;
  16334.           for I := 0 to Length(g_HeroLevelRankings) - 1 do begin
  16335.             if I = RankingSelectLine - 1 then CColor := clyellow else CColor := clWhite;
  16336.             if g_HeroLevelRankings[I].sChrName <> '' then begin
  16337.               TextOut(SurfaceX(Left + 34), SurfaceY(Top + 118 + n), IntToStr(g_HeroLevelRankings[I].nIndex), CColor);
  16338.               TextOut(SurfaceX(Left + 69), SurfaceY(Top + 118 + n), g_HeroLevelRankings[I].sHeroName, CColor);
  16339.               TextOut(SurfaceX(Left + 165), SurfaceY(Top + 118 + n), g_HeroLevelRankings[I].sChrName, CColor);
  16340.               TextOut(SurfaceX(Left + 274), SurfaceY(Top + 118 + n), IntToStr(g_HeroLevelRankings[I].nLevel), CColor);
  16341.               Inc(n, LISTLINEHEIGHT + 9);
  16342.             end;
  16343.           end;
  16344.         end;
  16345.       end;
  16346.     end else
  16347.       if DBotMasterRanking.Downed then begin
  16348.       d := g_WMain3Images.Images[425];
  16349.       if d <> nil then
  16350.         dsurface.Draw(SurfaceX(Left + 26), SurfaceY(Top + 91), d.ClientRect, d, True);

  16351.       n := 0;
  16352.       with dsurface do begin
  16353.         CColor := clWhite;
  16354.         for I := 0 to Length(g_UserMasterRankings) - 1 do begin
  16355.           if I = RankingSelectLine - 1 then CColor := clyellow else CColor := clWhite;
  16356.           if g_UserMasterRankings[I].sChrName <> '' then begin
  16357.             TextOut(SurfaceX(Left + 52), SurfaceY(Top + 118 + n), IntToStr(g_UserMasterRankings[I].nIndex), CColor);
  16358.             TextOut(SurfaceX(Left + 114), SurfaceY(Top + 118 + n), g_UserMasterRankings[I].sChrName, CColor);
  16359.             TextOut(SurfaceX(Left + 258), SurfaceY(Top + 118 + n), IntToStr(g_UserMasterRankings[I].nMasterCount), CColor);
  16360.             Inc(n, LISTLINEHEIGHT + 9);
  16361.           end;
  16362.         end;
  16363.       end;
  16364.     end;
  16365.   end;
  16366. end;

  16367. procedure TFrmDlg.DHeroStMag1Click(Sender: TObject; X, Y: Integer);
  16368. var
  16369.   I, Idx: Integer;
  16370.   selkey: Word;
  16371.   keych: Char;
  16372.   pm: PTClientMagic;
  16373. begin
  16374.   if HeroStatePage = 3 then begin
  16375.     Idx := TDButton(Sender).tag + Heromagtop;
  16376.     if (Idx >= 0) and (Idx < g_HeroMagicList.Count) then begin
  16377.       pm := PTClientMagic(g_HeroMagicList[Idx]);
  16378.       if Ord(pm.Key) = VK_F1 then pm.Key := Chr(0) else pm.Key := Chr(VK_F1);
  16379.       frmMain.SendHeroMagicKeyChange(pm.Def.wMagicId);
  16380.       //ShowMessage(pm.Key);
  16381.     end;
  16382.   end;
  16383. end;

  16384. procedure TFrmDlg.DBotActorRankingDirectPaint(Sender: TObject;
  16385.   dsurface: TTexture);
  16386. var
  16387.   d: TTexture;
  16388. begin
  16389.   with Sender as TDButton do begin
  16390.     d := nil;
  16391.     if TDButton(Sender).Downed then begin
  16392.       if WLib <> nil then
  16393.         d := WLib.Images[FaceIndex + 1];
  16394.     end else begin
  16395.       if WLib <> nil then
  16396.         d := WLib.Images[FaceIndex];
  16397.     end;
  16398.     if d <> nil then
  16399.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16400.   end;
  16401. end;

  16402. procedure TFrmDlg.DRankingDlgMouseDown(Sender: TObject;
  16403.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  16404. var
  16405.   lx, ly, Idx: Integer;
  16406. begin
  16407.   lx := DRankingDlg.LocalX(X) - DRankingDlg.Left;
  16408.   ly := DRankingDlg.LocalY(Y) - DRankingDlg.Top - DRankingDlg.SurfaceY(97);
  16409.   if (lx >= 55) and (lx <= 300) and (ly >= 0) then begin
  16410.     Idx := ly div (LISTLINEHEIGHT + 9);
  16411.     if Idx <= 10 then begin
  16412.       PlaySound(s_glass_button_click);
  16413.       RankingSelectLine := Idx;

  16414.       if (Button = mbRight) and (RankingSelectLine > 0) then begin
  16415.         if DBotCharRanking.Downed then begin
  16416.           if RankingPage >= 0 then begin
  16417.             SetInputVisible(g_ConfigClient.btMainInterface = 1);
  16418.             EdChat.Visible := True;
  16419.             EdChat.SetFocus;
  16420.             EdChat.Text := '/' + g_UserLevelRankings[RankingSelectLine - 1].sChrName;
  16421.           end;
  16422.         end else
  16423.           if DBotHeroRanking.Downed then begin
  16424.           if RankingPage >= 0 then begin
  16425.             SetInputVisible(g_ConfigClient.btMainInterface = 1);
  16426.             EdChat.Visible := True;
  16427.             EdChat.SetFocus;
  16428.             EdChat.Text := '/' + g_HeroLevelRankings[RankingSelectLine - 1].sChrName;
  16429.           end;
  16430.         end else
  16431.           if DBotMasterRanking.Downed then begin
  16432.           SetInputVisible(g_ConfigClient.btMainInterface = 1);
  16433.           EdChat.Visible := True;
  16434.           EdChat.SetFocus;
  16435.           EdChat.Text := '/' + g_UserMasterRankings[RankingSelectLine - 1].sChrName;
  16436.         end;
  16437.       end;
  16438.     end;
  16439.   end;
  16440. end;

  16441. procedure TFrmDlg.DBotCharRankingClick(Sender: TObject; X, Y: Integer);
  16442. begin
  16443.   RankingPageChanged(Sender);
  16444. end;

  16445. procedure TFrmDlg.DBotActorRankingClick(Sender: TObject; X, Y: Integer);
  16446. begin
  16447.   RankingPage := TDButton(Sender).tag;

  16448.   DBotActorRanking.Visible := False;
  16449.   DBotWarriorRanking.Visible := False;
  16450.   DBotWizzardRanking.Visible := False;
  16451.   DBotMonkRanking.Visible := False;

  16452.   DBotHeroActorRanking.Visible := False;
  16453.   DBotHeroWarriorRanking.Visible := False;
  16454.   DBotHeroWizzardRanking.Visible := False;
  16455.   DBotHeroMonkRanking.Visible := False;

  16456.   SafeFillChar(g_UserLevelRankings, SizeOf(TUserLevelRanking) * 10, #0);
  16457.   SafeFillChar(g_HeroLevelRankings, SizeOf(THeroLevelRanking) * 10, #0);
  16458.   SafeFillChar(g_UserMasterRankings, SizeOf(TUserMasterRanking) * 10, #0);

  16459.   if RankingPage >= 0 then
  16460.     frmMain.SendGetRanking(g_nRankingsTablePage, RankingPage, 0);
  16461. end;

  16462. procedure TFrmDlg.DBotRankingCloseClick(Sender: TObject; X, Y: Integer);
  16463. begin
  16464.   DRankingDlg.Visible := False;
  16465. end;

  16466. procedure TFrmDlg.DBotRankingHomeClick(Sender: TObject; X, Y: Integer);
  16467. begin
  16468.   if (RankingPage >= 0) and (g_nRankingsPage > 0) and (g_nRankingsPageCount > 10) then
  16469.     frmMain.SendGetRanking(g_nRankingsTablePage, RankingPage, 0);
  16470. end;

  16471. procedure TFrmDlg.DBotRankingUpClick(Sender: TObject; X, Y: Integer);
  16472. begin
  16473.   if (RankingPage >= 0) and (g_nRankingsPage > 0) then
  16474.     frmMain.SendGetRanking(g_nRankingsTablePage, RankingPage, _MAX(g_nRankingsPage - 10, 0));
  16475. end;

  16476. procedure TFrmDlg.DBotRankingDownClick(Sender: TObject; X, Y: Integer);
  16477. begin
  16478.   if (RankingPage >= 0) and (g_nRankingsPage + 10 < g_nRankingsPageCount - 1) then
  16479.     frmMain.SendGetRanking(g_nRankingsTablePage, RankingPage, _MIN(g_nRankingsPage + 10, g_nRankingsPageCount - 1));
  16480. end;

  16481. procedure TFrmDlg.DBotRankingLastClick(Sender: TObject; X, Y: Integer);
  16482. begin
  16483.   if (RankingPage >= 0) and (g_nRankingsPageCount > 10) and (g_nRankingsPage < g_nRankingsPageCount - 10) then begin
  16484.     if g_nRankingsPageCount mod 10 = 0 then begin
  16485.       frmMain.SendGetRanking(g_nRankingsTablePage, RankingPage, _MIN(_MAX(g_nRankingsPageCount - 10, 0), g_nRankingsPageCount - 1));
  16486.     end else begin
  16487.       frmMain.SendGetRanking(g_nRankingsTablePage, RankingPage, _MIN(_MAX(g_nRankingsPageCount - g_nRankingsPageCount mod 10, 0), g_nRankingsPageCount - 1));
  16488.     end;
  16489.   end;
  16490. end;

  16491. procedure TFrmDlg.DBotRankingSelfClick(Sender: TObject; X, Y: Integer);
  16492. begin
  16493.   if RankingPage >= 0 then begin
  16494.     g_nRankingsPage := 0;
  16495.     g_nRankingsPageCount := 0;
  16496.     FillChar(g_UserLevelRankings, SizeOf(TUserLevelRanking) * 10, #0);
  16497.     FillChar(g_HeroLevelRankings, SizeOf(THeroLevelRanking) * 10, #0);
  16498.     FillChar(g_UserMasterRankings, SizeOf(TUserMasterRanking) * 10, #0);
  16499.     frmMain.SendGetMyRanking(g_nRankingsTablePage, RankingPage);
  16500.   end;
  16501. end;

  16502. procedure TFrmDlg.DRankingClick(Sender: TObject; X, Y: Integer);
  16503. begin
  16504.   DRankingDlg.Visible := not DRankingDlg.Visible;
  16505. end;

  16506. procedure TFrmDlg.DScrollScrollDirectPaint(Sender: TObject;
  16507.   dsurface: TTexture);
  16508. var
  16509.   d: TTexture;
  16510. begin
  16511.   d := nil;
  16512.   with Sender as TDButton do begin
  16513.     if not Downed then begin
  16514.       if WLib <> nil then
  16515.         d := WLib.Images[FaceIndex]
  16516.     end else begin
  16517.       if WLib <> nil then
  16518.         d := WLib.Images[FaceIndex + 1];
  16519.     end;
  16520.     if d <> nil then begin
  16521.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d);
  16522.     end;
  16523.   end;
  16524. end;

  16525. procedure TFrmDlg.DScrollCenterScrollDirectPaint(Sender: TObject;
  16526.   dsurface: TTexture);
  16527. var
  16528.   d: TTexture;
  16529. begin
  16530.   d := nil;
  16531.   with Sender as TDScroll do begin
  16532.     if VisibleScroll then begin
  16533.       if WLib <> nil then
  16534.         d := WLib.Images[FaceIndex];
  16535.       if d <> nil then begin
  16536.         dsurface.StretchDraw(Bounds(SurfaceX(Left), SurfaceY(Top), Width, Height), d, False);
  16537.       end;
  16538.     end;
  16539.   end;
  16540. end;

  16541. procedure TFrmDlg.DMemoChatClick(Sender: TObject; X, Y: Integer);
  16542.   function ExtractUserName(line: string): string;
  16543.   var
  16544.     uname: string;
  16545.   begin
  16546.     GetValidStr3(line, line, ['(', '!', '*', '/', ')']);
  16547.     GetValidStr3(line, uname, [' ', '=', ':']);
  16548.     if uname <> '' then
  16549.       if (uname[1] = '/') or (uname[1] = '(') or (uname[1] = ' ') or (uname[1] = '[') then
  16550.         uname := '';
  16551.     Result := uname;
  16552.   end;
  16553. begin
  16554. { Showmessage(IntToStr(DMemoChat.ItemIndex));
  16555.   if (DMemoChat.ItemIndex >= 0) and (DMemoChat.ItemIndex < DMemoChat.Count) then begin
  16556.     if not EdChat.Visible then begin
  16557.       SetInputVisible(g_ConfigClient.btMainInterface <> 0);
  16558.       EdChat.Visible := True;
  16559.       EdChat.SetFocus;
  16560.     end;
  16561.     EdChat.Text := '/' + ExtractUserName(DMemoChat.Strings[DMemoChat.ItemIndex]) + ' ';
  16562.     EdChat.SelStart := Length(EdChat.Text);
  16563.     EdChat.SelLength := 0;
  16564.     Showmessage(EdChat.Text);
  16565.   end else EdChat.Text := '';  }
  16566. end;


  16567. procedure TFrmDlg.DItemLabelClick(Sender: TObject; X, Y: Integer);
  16568. var
  16569.   sItemData: string;
  16570.   sName: string;
  16571.   sData: string;
  16572.   nIndex: Integer;
  16573.   ItemLabel: TItemLabel;
  16574. begin
  16575.   nIndex := TDControl(Sender).Idx;
  16576.   if (nIndex = 0) and (GetTickCount - g_dwLatestFindItemTick < 1000) then Exit;

  16577.   case nIndex of
  16578.     0: begin
  16579.         ItemLabel := TItemLabel(Sender);
  16580.         if ItemLabel.ClientItem.s.Name = '' then begin
  16581.           g_dwLatestFindItemTick := GetTickCount;
  16582.           frmMain.SendFindUserItem(Integer(ItemLabel), ItemLabel.TData);
  16583.         end;
  16584.       end;
  16585.     1: begin
  16586.         sItemData := TDLabel(Sender).TData;
  16587.         MediaStartPlay(Trim(sItemData), False, True);
  16588.       end;
  16589.     2: begin
  16590.         sItemData := TDLabel(Sender).TData;
  16591.         BrowserNavigate(Trim(sItemData));
  16592.       end;
  16593.   end;
  16594. end;

  16595. procedure TFrmDlg.DItemLabelMouseMove(Sender: TObject; Shift: TShiftState;
  16596.   X, Y: Integer);
  16597. var
  16598.   iname, d1, d2, d3: string;
  16599.   useable: Boolean;
  16600.   nIndex: Integer;
  16601.   d: TDControl;
  16602.   ItemLabel: TItemLabel;
  16603. begin
  16604.   d := TDControl(Sender);
  16605.   with d do begin
  16606.     case Idx of
  16607.       -1: DScreen.ClearHint;
  16608.       0: begin
  16609.           ItemLabel := TItemLabel(Sender);
  16610.           if (Trim(ItemLabel.ClientItem.s.Name) <> '') {and ItemLabel.GetClientItem} then begin
  16611.             g_MouseItem := ItemLabel.ClientItem;
  16612.             //Move(ClientItem,g_MouseItem,SizeOf(TClientItem));
  16613.             if g_MouseItem.s.Name <> '' then begin
  16614.               GetMouseItemInfo(g_MySelf, @g_MouseItem, iname, d1, d2, d3, useable);
  16615.               //HintList.Insert(0, Caption);
  16616.               if HintList.Count > 0 then begin
  16617.                 DScreen.ShowHint(SurfaceX(Left),
  16618.                   SurfaceY(Top),
  16619.                   HintList, True);
  16620.               end;
  16621.               g_MouseItem.s.Name := '';
  16622.             end;
  16623.           end else begin
  16624.             DScreen.ShowHintA(SurfaceX(Left + Width), SurfaceY(Top) + 16, '点击查询 ' + Caption + ' 的信息', clInfoText, True);
  16625.           end;
  16626.         end;
  16627.       1: DScreen.ShowHintA(SurfaceX(Left + Width), SurfaceY(Top) + 16, '点击播放 ' + Caption, clInfoText, True); //clWhite
  16628.       2: DScreen.ShowHintA(SurfaceX(Left + Width), SurfaceY(Top) + 16, '点击打开 ' + Caption, clInfoText, True);
  16629.     end;
  16630.   end;
  16631. end;

  16632. procedure TFrmDlg.DChatDlgClick(Sender: TObject; X, Y: Integer);
  16633. begin
  16634. //  Showmessage('TFrmDlg.DChatDlgClick:'+IntToStr(DMemoChat.ItemIndex));
  16635. end;

  16636. procedure TFrmDlg.DMemoChatMouseDown(Sender: TObject; Button: TMouseButton;
  16637.   Shift: TShiftState; X, Y: Integer);
  16638.   function ExtractUserName(line: string): string;
  16639.   var
  16640.     uname: string;
  16641.   begin
  16642.     GetValidStr3(line, line, ['(', '!', '*', '/', ')']);
  16643.     GetValidStr3(line, uname, [' ', '=', ':']);
  16644.     if uname <> '' then
  16645.       if (uname[1] = '/') or (uname[1] = '(') or (uname[1] = ' ') or (uname[1] = '[') then
  16646.         uname := '';
  16647.     Result := uname;
  16648.   end;
  16649. var
  16650.   pt: TPoint;
  16651. begin
  16652.   if Button = mbLeft then begin
  16653.   //Showmessage(IntToStr(DMemoChat.ItemIndex));
  16654.     if (DMemoChat.itemindex >= 0) and (DMemoChat.itemindex < DMemoChat.Count) then begin
  16655.       if not EdChat.Visible then begin
  16656.         SetInputVisible(g_ConfigClient.btMainInterface = 1);
  16657.         EdChat.Visible := True;
  16658.         EdChat.SetFocus;
  16659.       end;
  16660.       EdChat.Text := '/' + ExtractUserName(DMemoChat.Strings[DMemoChat.itemindex]) + ' ';
  16661.       EdChat.SelStart := Length(EdChat.Text);
  16662.       EdChat.SelLength := 0;
  16663.     //Self.AddMemoChat(DMemoChat.Strings[DMemoChat.ItemIndex] + ' ItemIndex:' + IntToStr(DMemoChat.ItemIndex), clWhite, clFuchsia);
  16664.     //Self.AddMemoChat('ItemIndex:' + IntToStr(DMemoChat.ItemIndex), clWhite, clFuchsia);
  16665.     //Showmessage(DMemoChat.Strings[DMemoChat.ItemIndex]);
  16666.     end else EdChat.Text := '';
  16667.   end else begin
  16668.     if g_ConfigClient.btMainInterface = 1 then begin
  16669.       GetCursorPos(pt);
  16670.       pt := frmMain.ScreenToClient(pt);
  16671.       frmMain.DXDrawMouseDown_(Button, Shift, pt.X, pt.Y);
  16672.     //DScreen.AddChatBoardString(Format('X:%d, Y:%d, SX:%d, SY:%d',[DMemoChat.SurfaceX(X), DMemoChat.SurfaceY(Y), pt.X, pt.Y]), clyellow, clRed);
  16673.     end;
  16674.   end;
  16675. end;

  16676. procedure TFrmDlg.DButtonTab1DirectPaint(Sender: TObject;
  16677.   dsurface: TTexture);
  16678. var
  16679.   d: TTexture;
  16680. begin
  16681.   with Sender as TDButton do begin
  16682.     if WLib <> nil then begin
  16683.       d := nil;
  16684.       if Downed then begin
  16685.         d := WLib.Images[FaceIndex + 1];
  16686.       end else begin
  16687.         d := WLib.Images[FaceIndex];
  16688.       end;
  16689.       if d <> nil then
  16690.         dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d.ClientRect, d, True);
  16691.     end;
  16692.   end;
  16693. end;

  16694. procedure TFrmDlg.DButtonTab1Click(Sender: TObject; X, Y: Integer);
  16695. begin
  16696.   DConfigDlg.ActivePage := TDButton(Sender).tag;
  16697. end;

  16698. procedure TFrmDlg.DEditSearchItemDirectPaint(Sender: TObject;
  16699.   dsurface: TTexture);
  16700. begin
  16701.   with Sender as TDEdit do
  16702.     if Text = '' then
  16703.       dsurface.TextOut(SurfaceX(Left), SurfaceY(Top) + (Height - dsurface.TextHeight('0')) div 2, '[输入物品关键字查找]', clGray);
  16704. end;

  16705. procedure TFrmDlg.DConfigDlgCloseClick(Sender: TObject; X, Y: Integer);
  16706. begin
  16707.   DOptionClick();
  16708. end;

  16709. procedure TFrmDlg.DBookPageInRealArea(Sender: TObject; X, Y: Integer;
  16710.   var IsRealArea: Boolean);
  16711. begin
  16712.   IsRealArea := True;
  16713. end;

  16714. procedure TFrmDlg.DLabelHeroCallHeroDirectPaint(Sender: TObject;
  16715.   dsurface: TTexture);
  16716. begin
  16717.   with TDLabel(Sender) do
  16718.     if Downed then begin
  16719.       dsurface.FrameRect(Bounds(SurfaceX(Left), SurfaceY(Top), Width, Height), $005894B8);
  16720.       dsurface.FrameRect(Bounds(SurfaceX(Left) + 1, SurfaceY(Top) + 1, Width - 2, Height - 2), $005894B8);
  16721.     end;
  16722. end;

  16723. procedure TFrmDlg.DLabelHeroCallHeroKeyDown(Sender: TObject; var Key: Word;
  16724.   Shift: TShiftState);
  16725. var
  16726.   nKey: Integer;
  16727.   sKey: string;
  16728. begin
  16729.   sKey := GetKeyDownStr(Key, Shift, nKey);
  16730.   if nKey > 0 then begin

  16731.     if (nKey = g_Config.nSerieSkill) then begin
  16732.       g_Config.nSerieSkill := 0;
  16733.       DLabelSerieSkill.Caption := '';
  16734.     end;

  16735.     if (nKey = g_Config.nHeroCallHero) then begin
  16736.       g_Config.nHeroCallHero := 0;
  16737.       DLabelHeroCallHero.Caption := '';
  16738.     end;

  16739.     if (nKey = g_Config.nHeroSetTarget) then begin
  16740.       g_Config.nHeroSetTarget := 0;
  16741.       DLabelHeroSetTarget.Caption := '';
  16742.     end;

  16743.     if (nKey = g_Config.nHeroUnionHit) then begin
  16744.       g_Config.nHeroUnionHit := 0;
  16745.       DLabelHeroUnionHit.Caption := '';
  16746.     end;

  16747.     if (nKey = g_Config.nHeroSetAttackState) then begin
  16748.       g_Config.nHeroSetAttackState := 0;
  16749.       DLabelHeroSetAttackState.Caption := '';
  16750.     end;

  16751.     if (nKey = g_Config.nHeroSetGuard) then begin
  16752.       g_Config.nHeroSetGuard := 0;
  16753.       DLabelHeroSetGuard.Caption := '';
  16754.     end;

  16755.     if (nKey = g_Config.nSwitchAttackMode) then begin
  16756.       g_Config.nSwitchAttackMode := 0;
  16757.       DLabelSwitchAttackMode.Caption := '';
  16758.     end;

  16759.     if (nKey = g_Config.nSwitchMiniMap) then begin
  16760.       g_Config.nSwitchMiniMap := 0;
  16761.       DLabelSwitchMiniMap.Caption := '';
  16762.     end;
  16763.   end;

  16764.   if Sender = DLabelSerieSkill then begin
  16765.     g_Config.nSerieSkill := nKey;
  16766.     DLabelSerieSkill.Caption := sKey;
  16767.   end;
  16768.   if Sender = DLabelHeroCallHero then begin
  16769.     g_Config.nHeroCallHero := nKey;
  16770.     DLabelHeroCallHero.Caption := sKey;
  16771.   end;
  16772.   if Sender = DLabelHeroSetTarget then begin
  16773.     g_Config.nHeroSetTarget := nKey;
  16774.     DLabelHeroSetTarget.Caption := sKey;
  16775.   end;
  16776.   if Sender = DLabelHeroUnionHit then begin
  16777.     g_Config.nHeroUnionHit := nKey;
  16778.     DLabelHeroUnionHit.Caption := sKey;
  16779.   end;
  16780.   if Sender = DLabelHeroSetAttackState then begin
  16781.     g_Config.nHeroSetAttackState := nKey;
  16782.     DLabelHeroSetAttackState.Caption := sKey;
  16783.   end;
  16784.   if Sender = DLabelHeroSetGuard then begin
  16785.     g_Config.nHeroSetGuard := nKey;
  16786.     DLabelHeroSetGuard.Caption := sKey;
  16787.   end;
  16788.   if Sender = DLabelSwitchAttackMode then begin
  16789.     g_Config.nSwitchAttackMode := nKey;
  16790.     DLabelSwitchAttackMode.Caption := sKey;
  16791.   end;
  16792.   if Sender = DLabelSwitchMiniMap then begin
  16793.     g_Config.nSwitchMiniMap := nKey;
  16794.     DLabelSwitchMiniMap.Caption := sKey;
  16795.   end;

  16796.   SaveUserConfig();
  16797. end;

  16798. procedure TFrmDlg.DLabelHeroCallHeroMouseDown(Sender: TObject;
  16799.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  16800. begin
  16801.   if Button = mbRight then begin
  16802.     if Sender = DLabelSerieSkill then begin
  16803.       g_Config.nSerieSkill := 0;
  16804.       DLabelSerieSkill.Caption := '';
  16805.     end;
  16806.     if Sender = DLabelHeroCallHero then begin
  16807.       g_Config.nHeroCallHero := 0;
  16808.       DLabelHeroCallHero.Caption := '';
  16809.     end;
  16810.     if Sender = DLabelHeroSetTarget then begin
  16811.       g_Config.nHeroSetTarget := 0;
  16812.       DLabelHeroSetTarget.Caption := '';
  16813.     end;
  16814.     if Sender = DLabelHeroUnionHit then begin
  16815.       g_Config.nHeroUnionHit := 0;
  16816.       DLabelHeroUnionHit.Caption := '';
  16817.     end;
  16818.     if Sender = DLabelHeroSetAttackState then begin
  16819.       g_Config.nHeroSetAttackState := 0;
  16820.       DLabelHeroSetAttackState.Caption := '';
  16821.     end;
  16822.     if Sender = DLabelHeroSetGuard then begin
  16823.       g_Config.nHeroSetGuard := 0;
  16824.       DLabelHeroSetGuard.Caption := '';
  16825.     end;
  16826.     if Sender = DLabelSwitchAttackMode then begin
  16827.       g_Config.nSwitchAttackMode := 0;
  16828.       DLabelSwitchAttackMode.Caption := '';
  16829.     end;
  16830.     if Sender = DLabelSwitchMiniMap then begin
  16831.       g_Config.nSwitchMiniMap := 0;
  16832.       DLabelSwitchMiniMap.Caption := '';
  16833.     end;
  16834.     SaveUserConfig();
  16835.   end;
  16836. end;

  16837. procedure TFrmDlg.SetConfigDlg();
  16838. var
  16839.   I, II: Integer;
  16840.   //DLabel: TDLabel;
  16841.   DCheckBox: TDCheckBox;
  16842.   ItemList: TStringList;
  16843.   ShowItem: pTShowItem;
  16844.   Shift: TShiftState;
  16845.   nKey: Integer;
  16846. begin
  16847.   if g_MySelf = nil then Exit;

  16848.   DCheckBoxShowActorLable.OnClick := nil;
  16849.   DCheckBoxHideBlueLable.OnClick := nil;
  16850.   DCheckBoxShowNumberLable.OnClick := nil;
  16851.   DCheckBoxShowJobAndLevel.OnClick := nil;
  16852.   DCheckBoxShowUserName.OnClick := nil;
  16853.   DCheckBoxShowMonName.OnClick := nil;
  16854.   DCheckBoxShowItemName.OnClick := nil;
  16855.   DCheckBoxShowMoveNumberLable.OnClick := nil;
  16856.   DCheckBoxShowGreenHint.OnClick := nil;
  16857.   DCheckBoxMagicLock.OnClick := nil;
  16858.   DCheckBoxOrderItem.OnClick := nil;
  16859.   DCheckBoxMagicLock.OnClick := nil;
  16860.   DCheckBoxCloseGroup.OnClick := nil;
  16861.   DCheckBoxItemDuraHint.OnClick := nil;
  16862.   DCheckBoxNotNeedShift.OnClick := nil;
  16863.   DCheckBoxAutoHorse.OnClick := nil;
  16864.   DCheckBoxPickUpItemAll.OnClick := nil;
  16865.   DCheckBoxOnlyShowCharName.OnClick := nil;
  16866.   DCheckBoxItemHint.OnClick := nil;

  16867.   DCheckBoxBook.OnClick := nil;
  16868.   DCheckBoxClose.OnClick := nil;

  16869.   DCheckBoxHeroLogOut.OnClick := nil;


  16870.   DCheckBoxLongHit.OnClick := nil;
  16871.   DCheckBoxWideHit.OnClick := nil;
  16872.   DCheckBoxFireHit.OnClick := nil;
  16873.   DCheckBoxSWideHit.OnClick := nil;
  16874.   DCheckBoxCrsHit.OnClick := nil;
  16875.   DCheckBoxKtHit.OnClick := nil;
  16876.   DCheckBoxPok.OnClick := nil;
  16877.   DCheckBoxShield.OnClick := nil;
  16878.   DCheckBoxWjzq.OnClick := nil;
  16879.   DCheckBoxSmartWalkLongHit.OnClick := nil;
  16880.   DCheckBoxSmartPosLongHit.OnClick := nil;
  16881.   DCheckBoxStruckShield.OnClick := nil;
  16882.   DCheckBoxAutoHideSelf.OnClick := nil;
  16883.   DCheckBoxAutoUseMagic.OnClick := nil;
  16884.   DCheckBoxUseKey.OnClick := nil;
  16885.   DCheckBoxSign.OnClick := nil;
  16886.   DCheckBoxPoison.OnClick := nil;
  16887.   DCheckBoxGuaji.OnClick := nil;


  16888.   DEditBookHP.OnChange := nil;
  16889.   DEditCloseHP.OnChange := nil;

  16890.   DEditHeroLogOutHP.OnChange := nil;
  16891.   DEditBookTime.OnChange := nil;
  16892.   DEditCloseTime.OnChange := nil;

  16893.   DEditHeroLogOutTime.OnChange := nil;

  16894.   DEditAutoUseMagicTime.OnChange := nil;



  16895.   DCheckBoxHumHP1.OnClick := nil;
  16896.   DCheckBoxHumMP1.OnClick := nil;
  16897.   DCheckBoxHumHP2.OnClick := nil;
  16898.   DCheckBoxHumMP2.OnClick := nil;

  16899.   DCheckBoxHeroHP1.OnClick := nil;
  16900.   DCheckBoxHeroMP1.OnClick := nil;
  16901.   DCheckBoxHeroHP2.OnClick := nil;
  16902.   DCheckBoxHeroMP2.OnClick := nil;


  16903.   DEditHumHPPercent1.OnChange := nil;
  16904.   DEditHumMPPercent1.OnChange := nil;
  16905.   DEditHumHPPercent2.OnChange := nil;
  16906.   DEditHumMPPercent2.OnChange := nil;

  16907.   DEditHeroHPPercent1.OnChange := nil;
  16908.   DEditHeroMPPercent1.OnChange := nil;
  16909.   DEditHeroHPPercent2.OnChange := nil;
  16910.   DEditHeroMPPercent2.OnChange := nil;

  16911.   DEditHumHPTime1.OnChange := nil;
  16912.   DEditHumMPTime1.OnChange := nil;
  16913.   DEditHumHPTime2.OnChange := nil;
  16914.   DEditHumMPTime2.OnChange := nil;

  16915.   DEditHeroHPTime1.OnChange := nil;
  16916.   DEditHeroMPTime1.OnChange := nil;
  16917.   DEditHeroHPTime2.OnChange := nil;
  16918.   DEditHeroMPTime2.OnChange := nil;

  16919.   DComboboxHumHP1.OnChange := nil;
  16920.   DComboboxHumMP1.OnChange := nil;
  16921.   DComboboxHumHP2.OnChange := nil;
  16922.   DComboboxHumMP2.OnChange := nil;

  16923.   DComboboxHeroHP1.OnChange := nil;
  16924.   DComboboxHeroMP1.OnChange := nil;
  16925.   DComboboxHeroHP2.OnChange := nil;
  16926.   DComboboxHeroMP2.OnChange := nil;




  16927.   DCheckBoxShowActorLable.Checked := g_Config.boShowActorLable;
  16928.   DCheckBoxHideBlueLable.Checked := g_Config.boHideBlueLable;
  16929.   DCheckBoxShowNumberLable.Checked := g_Config.boShowNumberLable;
  16930.   DCheckBoxShowJobAndLevel.Checked := g_Config.boShowJobAndLevel;
  16931.   DCheckBoxShowUserName.Checked := g_Config.boShowUserName;
  16932.   DCheckBoxShowMonName.Checked := g_Config.boShowMonName;
  16933.   DCheckBoxShowMoveNumberLable.Checked := g_Config.boShowMoveLable;
  16934.   DCheckBoxShowGreenHint.Checked := g_Config.boShowGreenHint;
  16935.   DCheckBoxMusic.Checked := g_Config.boBGSound;
  16936.   DCheckBoxMagicLock.Checked := g_Config.boMagicLock;
  16937.   DCheckBoxOrderItem.Checked := g_Config.boOrderItem;
  16938.   DCheckBoxMagicLock.Checked := g_Config.boMagicLock;
  16939.   DCheckBoxCloseGroup.Checked := g_Config.boCloseGroup;
  16940.   DCheckBoxItemDuraHint.Checked := g_Config.boDuraWarning;
  16941.   DCheckBoxNotNeedShift.Checked := g_Config.boNotNeedShift;
  16942.   DCheckBoxAutoHorse.Checked := g_Config.boAutoHorse;
  16943.   DCheckBoxCompareItem.Checked := g_Config.boCompareItem;

  16944.   DCheckBoxPickUpItemAll.Checked := g_Config.boPickUpItemAll;
  16945.   DCheckBoxShowItemName.Checked := g_Config.boShowItemName;
  16946.   DCheckBoxOnlyShowCharName.Checked := g_Config.boOnlyShowCharName;
  16947.   //DCheckBoxPickItem.Enabled := False;
  16948.   DCheckBoxItemHint.Checked := g_Config.boItemHint;


  16949.   DCheckBoxBook.Checked := g_Config.boRenewBookIsAuto;
  16950.   DCheckBoxClose.Checked := g_Config.boRenewCloseIsAuto;
  16951.   DCheckBoxHeroLogOut.Checked := g_Config.boRenewHeroLogOutIsAuto;



  16952.   DEditBookHP.Text := IntToStr(g_Config.nRenewBookPercent);
  16953.   DEditCloseHP.Text := IntToStr(g_Config.nRenewClosePercent);
  16954.   DEditHeroLogOutHP.Text := IntToStr(g_Config.nRenewHeroLogOutPercent);


  16955.   DEditBookTime.Text := IntToStr(g_Config.nRenewBookTime);
  16956.   DEditCloseTime.Text := IntToStr(g_Config.nRenewCloseTime);
  16957.   DEditHeroLogOutTime.Text := IntToStr(g_Config.nRenewHeroLogOutTime);



  16958.   DCheckBoxHumHP1.Checked := g_Config.boRenewHumHPIsAuto1;
  16959.   DCheckBoxHumMP1.Checked := g_Config.boRenewHumMPIsAuto1;
  16960.   DCheckBoxHumHP2.Checked := g_Config.boRenewHumHPIsAuto2;
  16961.   DCheckBoxHumMP2.Checked := g_Config.boRenewHumMPIsAuto2;

  16962.   DCheckBoxHeroHP1.Checked := g_Config.boRenewHeroHPIsAuto1;
  16963.   DCheckBoxHeroMP1.Checked := g_Config.boRenewHeroMPIsAuto1;
  16964.   DCheckBoxHeroHP2.Checked := g_Config.boRenewHeroHPIsAuto2;
  16965.   DCheckBoxHeroMP2.Checked := g_Config.boRenewHeroMPIsAuto2;


  16966.   DEditHumHPPercent1.Text := IntToStr(g_Config.nRenewHumHPPercent1);
  16967.   DEditHumMPPercent1.Text := IntToStr(g_Config.nRenewHumMPPercent1);
  16968.   DEditHumHPPercent2.Text := IntToStr(g_Config.nRenewHumHPPercent2);
  16969.   DEditHumMPPercent2.Text := IntToStr(g_Config.nRenewHumMPPercent2);

  16970.   DEditHeroHPPercent1.Text := IntToStr(g_Config.nRenewHeroHPPercent1);
  16971.   DEditHeroMPPercent1.Text := IntToStr(g_Config.nRenewHeroMPPercent1);
  16972.   DEditHeroHPPercent2.Text := IntToStr(g_Config.nRenewHeroHPPercent2);
  16973.   DEditHeroMPPercent2.Text := IntToStr(g_Config.nRenewHeroMPPercent2);

  16974.   DEditHumHPTime1.Text := IntToStr(g_Config.nRenewHumHPTime1);
  16975.   DEditHumMPTime1.Text := IntToStr(g_Config.nRenewHumMPTime1);
  16976.   DEditHumHPTime2.Text := IntToStr(g_Config.nRenewHumHPTime2);
  16977.   DEditHumMPTime2.Text := IntToStr(g_Config.nRenewHumMPTime2);

  16978.   DEditHeroHPTime1.Text := IntToStr(g_Config.nRenewHeroHPTime1);
  16979.   DEditHeroMPTime1.Text := IntToStr(g_Config.nRenewHeroMPTime1);
  16980.   DEditHeroHPTime2.Text := IntToStr(g_Config.nRenewHeroHPTime2);
  16981.   DEditHeroMPTime2.Text := IntToStr(g_Config.nRenewHeroMPTime2);


  16982.   DComboboxHumHP1.ItemIndex := g_Config.nRenewHumHPIndex1;
  16983.   DComboboxHumMP1.ItemIndex := g_Config.nRenewHumMPIndex1;
  16984.   DComboboxHumHP2.ItemIndex := g_Config.nRenewHumHPIndex2;
  16985.   DComboboxHumMP2.ItemIndex := g_Config.nRenewHumMPIndex2;

  16986.   DComboboxHeroHP1.ItemIndex := g_Config.nRenewHeroHPIndex1;
  16987.   DComboboxHeroMP1.ItemIndex := g_Config.nRenewHeroMPIndex1;
  16988.   DComboboxHeroHP2.ItemIndex := g_Config.nRenewHeroHPIndex2;
  16989.   DComboboxHeroMP2.ItemIndex := g_Config.nRenewHeroMPIndex2;



  16990.   DCheckBoxLongHit.Checked := g_Config.boSmartLongHit;
  16991.   DCheckBoxWideHit.Checked := g_Config.boSmartWideHit;
  16992.   DCheckBoxFireHit.Checked := g_Config.boSmartFireHit;
  16993.   DCheckBoxSWideHit.Checked := g_Config.boSmartSWordHit;
  16994.   DCheckBoxCrsHit.Checked := g_Config.boSmartCrsHit;
  16995.   DCheckBoxKtHit.Checked := g_Config.boSmartKaitHit;
  16996.   DCheckBoxPok.Checked := g_Config.boSmartPokHit;

  16997.   DCheckBoxShield.Checked := g_Config.boSmartShield;
  16998.   DCheckBoxWjzq.Checked := g_Config.boSmartWjzq;
  16999.   DCheckBoxStruckShield.Checked := g_Config.boStruckShield;
  17000.   DCheckBoxAutoHideSelf.Checked := g_Config.boAutoHideMode;


  17001.   DCheckBoxSmartWalkLongHit.Checked := g_Config.boSmartWalkLongHit;
  17002.   DCheckBoxSmartPosLongHit.Checked := g_Config.boSmartPosLongHit;

  17003.   DCheckBoxAutoUseMagic.Checked := g_Config.boAutoUseMagic;
  17004.   DEditAutoUseMagicTime.Text := IntToStr(g_Config.nAutoUseMagicTime);


  17005.   DCheckBoxSign.Checked := g_Config.boChangeSign;
  17006.   DCheckBoxPoison.Checked := g_Config.boChangePoison;
  17007.   DComboboxPoison.ItemIndex := g_Config.nPoisonIndex;

  17008.   DCheckBoxGuaji.Checked := g_Config.boGuaji;

  17009.   DCheckBoxUseKey.Checked := g_Config.boUseHotkey;
  17010.   DLabelSerieSkill.Idx := g_Config.nSerieSkill;
  17011.   DLabelHeroCallHero.Idx := g_Config.nHeroCallHero;
  17012.   DLabelHeroSetTarget.Idx := g_Config.nHeroSetTarget;
  17013.   DLabelHeroUnionHit.Idx := g_Config.nHeroUnionHit;
  17014.   DLabelHeroSetAttackState.Idx := g_Config.nHeroSetAttackState;
  17015.   DLabelHeroSetGuard.Idx := g_Config.nHeroSetGuard;
  17016.   DLabelSwitchAttackMode.Idx := g_Config.nSwitchAttackMode;
  17017.   DLabelSwitchMiniMap.Idx := g_Config.nSwitchMiniMap;

  17018.   DComboboxBookIndex.ItemIndex := g_Config.nRenewBookNowBookIndex;
  17019.   DComboboxBookIndex.Text := g_Config.sRenewBookNowBookItem;
  17020.   DComboboxAutoUseMagic.ItemIndex := g_Config.nAutoUseMagicIdx;

  17021.   nKey := GetInputKey(g_Config.nSerieSkill, Shift);
  17022.   DLabelSerieSkill.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17023.   nKey := GetInputKey(g_Config.nHeroCallHero, Shift);
  17024.   DLabelHeroCallHero.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17025.   nKey := GetInputKey(g_Config.nHeroSetTarget, Shift);
  17026.   DLabelHeroSetTarget.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17027.   nKey := GetInputKey(g_Config.nHeroUnionHit, Shift);
  17028.   DLabelHeroUnionHit.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17029.   nKey := GetInputKey(g_Config.nHeroSetAttackState, Shift);
  17030.   DLabelHeroSetAttackState.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17031.   nKey := GetInputKey(g_Config.nHeroSetGuard, Shift);
  17032.   DLabelHeroSetGuard.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17033.   nKey := GetInputKey(g_Config.nSwitchAttackMode, Shift);
  17034.   DLabelSwitchAttackMode.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17035.   nKey := GetInputKey(g_Config.nSwitchMiniMap, Shift);
  17036.   DLabelSwitchMiniMap.Caption := GetKeyDownStr(nKey, Shift, nKey);

  17037.   for I := 0 to DMemoTab2.Count - 1 do begin
  17038.     ItemList := DMemoTab2.Items[I];
  17039.     //for II := 1 to ItemList.Count - 1 do begin
  17040.     DCheckBox := TDCheckBox(ItemList.Objects[1]);
  17041.     DCheckBox.Checked := pTShowItem(DCheckBox.data).boHintMsg;

  17042.     DCheckBox := TDCheckBox(ItemList.Objects[2]);
  17043.     DCheckBox.Checked := pTShowItem(DCheckBox.data).boPickup;

  17044.     DCheckBox := TDCheckBox(ItemList.Objects[3]);
  17045.     DCheckBox.Checked := pTShowItem(DCheckBox.data).boShowName;
  17046.     //end;
  17047.   end;

  17048.   DCheckBoxShowActorLable.OnClick := DCheckBoxShowActorLableClick;
  17049.   DCheckBoxHideBlueLable.OnClick := DCheckBoxShowActorLableClick;
  17050.   DCheckBoxShowNumberLable.OnClick := DCheckBoxShowActorLableClick;
  17051.   DCheckBoxShowJobAndLevel.OnClick := DCheckBoxShowActorLableClick;
  17052.   DCheckBoxShowUserName.OnClick := DCheckBoxShowActorLableClick;
  17053.   DCheckBoxShowMonName.OnClick := DCheckBoxShowActorLableClick;
  17054.   DCheckBoxShowItemName.OnClick := DCheckBoxShowActorLableClick;
  17055.   DCheckBoxShowMoveNumberLable.OnClick := DCheckBoxShowActorLableClick;
  17056.   DCheckBoxShowGreenHint.OnClick := DCheckBoxShowActorLableClick;
  17057.   DCheckBoxMagicLock.OnClick := DCheckBoxShowActorLableClick;
  17058.   DCheckBoxOrderItem.OnClick := DCheckBoxShowActorLableClick;
  17059.   DCheckBoxMagicLock.OnClick := DCheckBoxShowActorLableClick;
  17060.   DCheckBoxCloseGroup.OnClick := DCheckBoxShowActorLableClick;
  17061.   DCheckBoxItemDuraHint.OnClick := DCheckBoxShowActorLableClick;
  17062.   DCheckBoxNotNeedShift.OnClick := DCheckBoxShowActorLableClick;
  17063.   DCheckBoxAutoHorse.OnClick := DCheckBoxShowActorLableClick;
  17064.   DCheckBoxPickUpItemAll.OnClick := DCheckBoxShowActorLableClick;
  17065.   DCheckBoxOnlyShowCharName.OnClick := DCheckBoxShowActorLableClick;
  17066.   DCheckBoxItemHint.OnClick := DCheckBoxShowActorLableClick;

  17067.   DCheckBoxBook.OnClick := DCheckBoxShowActorLableClick;
  17068.   DCheckBoxClose.OnClick := DCheckBoxShowActorLableClick;
  17069.   DCheckBoxHeroLogOut.OnClick := DCheckBoxShowActorLableClick;

  17070.   DCheckBoxLongHit.OnClick := DCheckBoxShowActorLableClick;
  17071.   DCheckBoxWideHit.OnClick := DCheckBoxShowActorLableClick;
  17072.   DCheckBoxFireHit.OnClick := DCheckBoxShowActorLableClick;
  17073.   DCheckBoxSWideHit.OnClick := DCheckBoxShowActorLableClick;
  17074.   DCheckBoxCrsHit.OnClick := DCheckBoxShowActorLableClick;
  17075.   DCheckBoxKtHit.OnClick := DCheckBoxShowActorLableClick;
  17076.   DCheckBoxPok.OnClick := DCheckBoxShowActorLableClick;
  17077.   DCheckBoxShield.OnClick := DCheckBoxShowActorLableClick;
  17078.   DCheckBoxWjzq.OnClick := DCheckBoxShowActorLableClick;
  17079.   DCheckBoxSmartWalkLongHit.OnClick := DCheckBoxShowActorLableClick;
  17080.   DCheckBoxSmartPosLongHit.OnClick := DCheckBoxShowActorLableClick;
  17081.   DCheckBoxStruckShield.OnClick := DCheckBoxShowActorLableClick;
  17082.   DCheckBoxAutoHideSelf.OnClick := DCheckBoxShowActorLableClick;
  17083.   DCheckBoxAutoUseMagic.OnClick := DCheckBoxShowActorLableClick;
  17084.   DCheckBoxUseKey.OnClick := DCheckBoxShowActorLableClick;
  17085.   DCheckBoxSign.OnClick := DCheckBoxShowActorLableClick;
  17086.   DCheckBoxPoison.OnClick := DCheckBoxShowActorLableClick;
  17087.   DCheckBoxGuaji.OnClick := DCheckBoxShowActorLableClick;


  17088.   DEditBookHP.OnChange := DEditSpecialHPChange;
  17089.   DEditCloseHP.OnChange := DEditSpecialHPChange;

  17090.   DEditHeroLogOutHP.OnChange := DEditSpecialHPChange;

  17091.   DEditBookTime.OnChange := DEditSpecialHPChange;
  17092.   DEditCloseTime.OnChange := DEditSpecialHPChange;

  17093.   DEditHeroLogOutTime.OnChange := DEditSpecialHPChange;

  17094.   DEditAutoUseMagicTime.OnChange := DEditSpecialHPChange;


  17095.   DCheckBoxHumHP1.OnClick := DCheckBoxShowActorLableClick;
  17096.   DCheckBoxHumMP1.OnClick := DCheckBoxShowActorLableClick;
  17097.   DCheckBoxHumHP2.OnClick := DCheckBoxShowActorLableClick;
  17098.   DCheckBoxHumMP2.OnClick := DCheckBoxShowActorLableClick;

  17099.   DCheckBoxHeroHP1.OnClick := DCheckBoxShowActorLableClick;
  17100.   DCheckBoxHeroMP1.OnClick := DCheckBoxShowActorLableClick;
  17101.   DCheckBoxHeroHP2.OnClick := DCheckBoxShowActorLableClick;
  17102.   DCheckBoxHeroMP2.OnClick := DCheckBoxShowActorLableClick;


  17103.   DEditHumHPPercent1.OnChange := DEditSpecialHPChange;
  17104.   DEditHumMPPercent1.OnChange := DEditSpecialHPChange;
  17105.   DEditHumHPPercent2.OnChange := DEditSpecialHPChange;
  17106.   DEditHumMPPercent2.OnChange := DEditSpecialHPChange;

  17107.   DEditHeroHPPercent1.OnChange := DEditSpecialHPChange;
  17108.   DEditHeroMPPercent1.OnChange := DEditSpecialHPChange;
  17109.   DEditHeroHPPercent2.OnChange := DEditSpecialHPChange;
  17110.   DEditHeroMPPercent2.OnChange := DEditSpecialHPChange;

  17111.   DEditHumHPTime1.OnChange := DEditSpecialHPChange;
  17112.   DEditHumMPTime1.OnChange := DEditSpecialHPChange;
  17113.   DEditHumHPTime2.OnChange := DEditSpecialHPChange;
  17114.   DEditHumMPTime2.OnChange := DEditSpecialHPChange;

  17115.   DEditHeroHPTime1.OnChange := DEditSpecialHPChange;
  17116.   DEditHeroMPTime1.OnChange := DEditSpecialHPChange;
  17117.   DEditHeroHPTime2.OnChange := DEditSpecialHPChange;
  17118.   DEditHeroMPTime2.OnChange := DEditSpecialHPChange;


  17119.   DComboboxHumHP1.OnChange := DComboboxHumHP1Change;
  17120.   DComboboxHumMP1.OnChange := DComboboxHumMP1Change;
  17121.   DComboboxHumHP2.OnChange := DComboboxHumHP2Change;
  17122.   DComboboxHumMP2.OnChange := DComboboxHumMP2Change;

  17123.   DComboboxHeroHP1.OnChange := DComboboxHeroHP1Change;
  17124.   DComboboxHeroMP1.OnChange := DComboboxHeroMP1Change;
  17125.   DComboboxHeroHP2.OnChange := DComboboxHeroHP2Change;
  17126.   DComboboxHeroMP2.OnChange := DComboboxHeroMP2Change;
  17127. end;

  17128. procedure TFrmDlg.DMemoChatMouseMove(Sender: TObject; Shift: TShiftState;
  17129.   X, Y: Integer);
  17130. var
  17131.   pt: TPoint;
  17132. begin
  17133.   if ssRight in Shift then begin
  17134.     GetCursorPos(pt);
  17135.     pt := frmMain.ScreenToClient(pt);
  17136.     frmMain.DXDrawMouseMove_(mbRight, Shift, pt.X, pt.Y);
  17137.   end else
  17138.     if (ssLeft in Shift) and (g_ConfigClient.btMainInterface = 1) then begin
  17139.     {DEdChat.Left:=DEdChat.SurfaceX(X);
  17140.     CharMove();}
  17141.   end;
  17142. end;

  17143. procedure TFrmDlg.DMemoChatDirectPaint(Sender: TObject;
  17144.   dsurface: TTexture);
  17145. begin
  17146.   if g_ConfigClient.btMainInterface = 1 then begin
  17147.     with TDControl(Sender) do
  17148.       dsurface.FillRectAlpha(Bounds(SurfaceX(Left), SurfaceY(Top), Width, Height), $00608490, 150); //$005894B8
  17149.   end;
  17150. end;

  17151. procedure TFrmDlg.DComboboxItemTypeChange(Sender: TObject);
  17152. var
  17153.   I, II, nTop: Integer;
  17154.   DLabel: TDLabel;
  17155.   DCheckBox: TDCheckBox;
  17156.   ItemList: TStringList;
  17157.   ShowItem: pTShowItem;
  17158.   ItemType: TItemType;
  17159. begin
  17160.   if DEditSearchItem.Text <> '' then Exit;
  17161.   if DComboboxItemType.ItemIndex <= 0 then begin
  17162.     ItemType := i_All;
  17163.   end else begin
  17164.     ItemType := TItemType(DComboboxItemType.ItemIndex - 1);
  17165.   end;
  17166.   nTop := 1;
  17167.   DScrollTab2.First;
  17168.   for I := 0 to DMemoTab2.Count - 1 do begin
  17169.     ItemList := DMemoTab2.Items[I];
  17170.     ShowItem := TLines(ItemList).data;
  17171.     if (ShowItem.ItemType = ItemType) or (ItemType = i_All) then begin
  17172.       DLabel := TDLabel(ItemList.Objects[0]);
  17173.       DLabel.Top := nTop;
  17174.       DLabel.Visible := True;

  17175.       DCheckBox := TDCheckBox(ItemList.Objects[1]);
  17176.       DCheckBox.Top := nTop;
  17177.       DCheckBox.Checked := pTShowItem(DCheckBox.data).boHintMsg;
  17178.       DCheckBox.Visible := True;

  17179.       DCheckBox := TDCheckBox(ItemList.Objects[2]);
  17180.       DCheckBox.Top := nTop;
  17181.       DCheckBox.Checked := pTShowItem(DCheckBox.data).boPickup;
  17182.       DCheckBox.Visible := True;

  17183.       DCheckBox := TDCheckBox(ItemList.Objects[3]);
  17184.       DCheckBox.Top := nTop;
  17185.       DCheckBox.Checked := pTShowItem(DCheckBox.data).boShowName;
  17186.       DCheckBox.Visible := True;

  17187.       TLines(ItemList).GetHeight;
  17188.       TLines(ItemList).Visible := True;
  17189.       Inc(nTop, 17);
  17190.     end else begin
  17191.       TLines(ItemList).Visible := False;
  17192.       for II := 0 to ItemList.Count - 1 do begin
  17193.         TDControl(ItemList.Objects[II]).Visible := False;
  17194.       end;
  17195.     end;
  17196.   end;

  17197.   DScrollTab2.Max := DMemoTab2.MaxHeight;
  17198. end;

  17199. procedure TFrmDlg.DLabelOptionClick(Sender: TObject; X, Y: Integer);
  17200. var
  17201.   I: Integer;
  17202.   DCheckBox: TDCheckBox;
  17203.   ItemList: TStringList;
  17204.   ShowItem: pTShowItem;
  17205. begin
  17206.   if mrOk = FrmDlg.DMessageDlg('你想恢复成系统默认设置吗 ?', [mbOk, mbCancel]) then begin
  17207.     g_ShowItemList.BackUp;
  17208.     for I := 0 to DMemoTab2.Count - 1 do begin
  17209.       ItemList := DMemoTab2.Items[I];

  17210.       DCheckBox := TDCheckBox(ItemList.Objects[1]);
  17211.       DCheckBox.Checked := pTShowItem(DCheckBox.data).boHintMsg;

  17212.       DCheckBox := TDCheckBox(ItemList.Objects[2]);
  17213.       DCheckBox.Checked := pTShowItem(DCheckBox.data).boPickup;

  17214.       DCheckBox := TDCheckBox(ItemList.Objects[3]);
  17215.       DCheckBox.Checked := pTShowItem(DCheckBox.data).boShowName;
  17216.     end;
  17217.     g_ShowItemList.SaveToFile;
  17218.   end;
  17219. end;

  17220. procedure TFrmDlg.DDCheckBoxHintClick(Sender: TObject; X, Y: Integer);
  17221. var
  17222.   DCheckBox: TDCheckBox;
  17223.   ShowItem: pTShowItem;
  17224. begin
  17225.   DCheckBox := TDCheckBox(Sender);
  17226.   ShowItem := DCheckBox.data;
  17227.   ShowItem.boHintMsg := DCheckBox.Checked;
  17228.   g_ShowItemList.SaveToFile;
  17229. end;

  17230. procedure TFrmDlg.DDCheckBoxPickupClick(Sender: TObject; X, Y: Integer);
  17231. var
  17232.   DCheckBox: TDCheckBox;
  17233.   ShowItem: pTShowItem;
  17234. begin
  17235.   DCheckBox := TDCheckBox(Sender);
  17236.   ShowItem := DCheckBox.data;
  17237.   ShowItem.boPickup := DCheckBox.Checked;
  17238.   g_ShowItemList.SaveToFile;
  17239. end;

  17240. procedure TFrmDlg.DDCheckBoxShowNameClick(Sender: TObject; X, Y: Integer);
  17241. var
  17242.   DCheckBox: TDCheckBox;
  17243.   ShowItem: pTShowItem;
  17244. begin
  17245.   DCheckBox := TDCheckBox(Sender);
  17246.   ShowItem := DCheckBox.data;
  17247.   ShowItem.boShowName := DCheckBox.Checked;
  17248.   g_ShowItemList.SaveToFile;
  17249. end;

  17250. procedure TFrmDlg.DCheckBoxShowActorLableClick(Sender: TObject; X,
  17251.   Y: Integer);
  17252. begin
  17253.   if (g_MySelf = nil) or (not g_boLoadUserConfig) then Exit;
  17254.   if Sender = DCheckBoxShowActorLable then
  17255.     g_Config.boShowActorLable := DCheckBoxShowActorLable.Checked;
  17256.   if Sender = DCheckBoxHideBlueLable then
  17257.     g_Config.boHideBlueLable := DCheckBoxHideBlueLable.Checked;
  17258.   if Sender = DCheckBoxShowNumberLable then
  17259.     g_Config.boShowNumberLable := DCheckBoxShowNumberLable.Checked;
  17260.   if Sender = DCheckBoxShowJobAndLevel then
  17261.     g_Config.boShowJobAndLevel := DCheckBoxShowJobAndLevel.Checked;
  17262.   if Sender = DCheckBoxShowUserName then
  17263.     g_Config.boShowUserName := DCheckBoxShowUserName.Checked;
  17264.   if Sender = DCheckBoxShowMonName then
  17265.     g_Config.boShowMonName := DCheckBoxShowMonName.Checked;
  17266.   if Sender = DCheckBoxShowItemName then
  17267.     g_Config.boShowItemName := DCheckBoxShowItemName.Checked;
  17268.   if Sender = DCheckBoxShowMoveNumberLable then
  17269.     g_Config.boShowMoveLable := DCheckBoxShowMoveNumberLable.Checked;
  17270.   if Sender = DCheckBoxShowGreenHint then
  17271.     g_Config.boShowGreenHint := DCheckBoxShowGreenHint.Checked;
  17272.   if Sender = DCheckBoxMagicLock then
  17273.     g_Config.boMagicLock := DCheckBoxMagicLock.Checked;
  17274.   if Sender = DCheckBoxOrderItem then
  17275.     g_Config.boOrderItem := DCheckBoxOrderItem.Checked;
  17276.   if Sender = DCheckBoxMagicLock then
  17277.     g_Config.boMagicLock := DCheckBoxMagicLock.Checked;
  17278.   if Sender = DCheckBoxCloseGroup then
  17279.     g_Config.boCloseGroup := DCheckBoxCloseGroup.Checked;
  17280.   if Sender = DCheckBoxItemDuraHint then
  17281.     g_Config.boDuraWarning := DCheckBoxItemDuraHint.Checked;
  17282.   if Sender = DCheckBoxNotNeedShift then
  17283.     g_Config.boNotNeedShift := DCheckBoxNotNeedShift.Checked;
  17284.   if Sender = DCheckBoxAutoHorse then
  17285.     g_Config.boAutoHorse := DCheckBoxAutoHorse.Checked;
  17286.   if Sender = DCheckBoxCompareItem then
  17287.     g_Config.boCompareItem := DCheckBoxCompareItem.Checked;


  17288.   if Sender = DCheckBoxPickUpItemAll then
  17289.     g_Config.boPickUpItemAll := DCheckBoxPickUpItemAll.Checked;
  17290.   if Sender = DCheckBoxOnlyShowCharName then
  17291.     g_Config.boOnlyShowCharName := DCheckBoxOnlyShowCharName.Checked;
  17292.   if Sender = DCheckBoxItemHint then
  17293.     g_Config.boItemHint := DCheckBoxItemHint.Checked;


  17294.   if Sender = DCheckBoxBook then
  17295.     g_Config.boRenewBookIsAuto := DCheckBoxBook.Checked;
  17296.   if Sender = DCheckBoxClose then
  17297.     g_Config.boRenewCloseIsAuto := DCheckBoxClose.Checked;

  17298.   if Sender = DCheckBoxHeroLogOut then
  17299.     g_Config.boRenewHeroLogOutIsAuto := DCheckBoxHeroLogOut.Checked;

  17300.   if Sender = DCheckBoxLongHit then
  17301.     g_Config.boSmartLongHit := DCheckBoxLongHit.Checked;
  17302.   if Sender = DCheckBoxWideHit then
  17303.     g_Config.boSmartWideHit := DCheckBoxWideHit.Checked;
  17304.   if Sender = DCheckBoxFireHit then
  17305.     g_Config.boSmartFireHit := DCheckBoxFireHit.Checked;
  17306.   if Sender = DCheckBoxSWideHit then
  17307.     g_Config.boSmartSWordHit := DCheckBoxSWideHit.Checked;
  17308.   if Sender = DCheckBoxCrsHit then
  17309.     g_Config.boSmartCrsHit := DCheckBoxCrsHit.Checked;
  17310.   if Sender = DCheckBoxKtHit then
  17311.     g_Config.boSmartKaitHit := DCheckBoxKtHit.Checked;
  17312.   if Sender = DCheckBoxPok then
  17313.     g_Config.boSmartPokHit := DCheckBoxPok.Checked;
  17314.   if Sender = DCheckBoxShield then
  17315.     g_Config.boSmartShield := DCheckBoxShield.Checked;
  17316.   if Sender = DCheckBoxWjzq then
  17317.     g_Config.boSmartWjzq := DCheckBoxWjzq.Checked;
  17318.   if Sender = DCheckBoxSmartWalkLongHit then
  17319.     g_Config.boSmartWalkLongHit := DCheckBoxSmartWalkLongHit.Checked;
  17320.   if Sender = DCheckBoxSmartPosLongHit then
  17321.     g_Config.boSmartPosLongHit := DCheckBoxSmartPosLongHit.Checked;

  17322.   if Sender = DCheckBoxStruckShield then
  17323.     g_Config.boStruckShield := DCheckBoxStruckShield.Checked;
  17324.   if Sender = DCheckBoxAutoHideSelf then
  17325.     g_Config.boAutoHideMode := DCheckBoxAutoHideSelf.Checked;
  17326.   if Sender = DCheckBoxAutoUseMagic then
  17327.     g_Config.boAutoUseMagic := DCheckBoxAutoUseMagic.Checked;

  17328.   if Sender = DCheckBoxUseKey then
  17329.     g_Config.boUseHotkey := DCheckBoxUseKey.Checked;

  17330.   if Sender = DCheckBoxSign then
  17331.     g_Config.boChangeSign := DCheckBoxSign.Checked;
  17332.   if Sender = DCheckBoxPoison then
  17333.     g_Config.boChangePoison := DCheckBoxPoison.Checked;

  17334.   if Sender = DCheckBoxGuaji then
  17335.     g_Config.boGuaji := DCheckBoxGuaji.Checked;

  17336.   if Sender = DCheckBoxHumHP1 then
  17337.     g_Config.boRenewHumHPIsAuto1 := DCheckBoxHumHP1.Checked;
  17338.   if Sender = DCheckBoxHumMP1 then
  17339.     g_Config.boRenewHumMPIsAuto1 := DCheckBoxHumMP1.Checked;
  17340.   if Sender = DCheckBoxHumHP2 then
  17341.     g_Config.boRenewHumHPIsAuto2 := DCheckBoxHumHP2.Checked;
  17342.   if Sender = DCheckBoxHumMP2 then
  17343.     g_Config.boRenewHumMPIsAuto2 := DCheckBoxHumMP2.Checked;
  17344.   if Sender = DCheckBoxHeroHP1 then
  17345.     g_Config.boRenewHeroHPIsAuto1 := DCheckBoxHeroHP1.Checked;
  17346.   if Sender = DCheckBoxHeroMP1 then
  17347.     g_Config.boRenewHeroMPIsAuto1 := DCheckBoxHeroMP1.Checked;
  17348.   if Sender = DCheckBoxHeroHP2 then
  17349.     g_Config.boRenewHeroHPIsAuto2 := DCheckBoxHeroHP2.Checked;
  17350.   if Sender = DCheckBoxHeroMP2 then
  17351.     g_Config.boRenewHeroMPIsAuto2 := DCheckBoxHeroMP2.Checked;


  17352.   if not g_Config.boGuaji then begin
  17353.     g_GuaJi.Stop;
  17354.   end;
  17355.   SaveUserConfig();
  17356. end;

  17357. procedure TFrmDlg.DEditSpecialHPChange(Sender: TObject);
  17358. begin
  17359.   if (g_MySelf = nil) or (not g_boLoadUserConfig) then Exit;

  17360.   if Sender = DEditBookHP then
  17361.     g_Config.nRenewBookPercent := Str_ToInt(Trim(DEditBookHP.Text), 0);
  17362.   if Sender = DEditCloseHP then
  17363.     g_Config.nRenewClosePercent := Str_ToInt(Trim(DEditCloseHP.Text), 0);
  17364.   if Sender = DEditHeroLogOutHP then
  17365.     g_Config.nRenewHeroLogOutPercent := Str_ToInt(Trim(DEditHeroLogOutHP.Text), 0);
  17366.   if Sender = DEditBookTime then
  17367.     g_Config.nRenewBookTime := Str_ToInt(Trim(DEditBookTime.Text), 0);
  17368.   if Sender = DEditCloseTime then
  17369.     g_Config.nRenewCloseTime := Str_ToInt(Trim(DEditCloseTime.Text), 0);

  17370.   if Sender = DEditHeroLogOutTime then
  17371.     g_Config.nRenewHeroLogOutTime := Str_ToInt(Trim(DEditHeroLogOutTime.Text), 0);

  17372.   if Sender = DEditAutoUseMagicTime then
  17373.     g_Config.nAutoUseMagicTime := _MAX(Str_ToInt(Trim(DEditAutoUseMagicTime.Text), 1), 1);

  17374.   if Sender = DEditHumHPPercent1 then
  17375.     g_Config.nRenewHumHPPercent1 := Str_ToInt(DEditHumHPPercent1.Text, 1);
  17376.   if Sender = DEditHumMPPercent1 then
  17377.     g_Config.nRenewHumMPPercent1 := Str_ToInt(DEditHumMPPercent1.Text, 1);
  17378.   if Sender = DEditHumHPPercent2 then
  17379.     g_Config.nRenewHumHPPercent2 := Str_ToInt(DEditHumHPPercent2.Text, 1);
  17380.   if Sender = DEditHumMPPercent2 then
  17381.     g_Config.nRenewHumMPPercent2 := Str_ToInt(DEditHumMPPercent2.Text, 1);

  17382.   if Sender = DEditHeroHPPercent1 then
  17383.     g_Config.nRenewHeroHPPercent1 := Str_ToInt(DEditHeroHPPercent1.Text, 1);
  17384.   if Sender = DEditHeroMPPercent1 then
  17385.     g_Config.nRenewHeroMPPercent1 := Str_ToInt(DEditHeroMPPercent1.Text, 1);
  17386.   if Sender = DEditHeroHPPercent2 then
  17387.     g_Config.nRenewHeroHPPercent2 := Str_ToInt(DEditHeroHPPercent2.Text, 1);
  17388.   if Sender = DEditHeroMPPercent2 then
  17389.     g_Config.nRenewHeroMPPercent2 := Str_ToInt(DEditHeroMPPercent2.Text, 1);
  17390.   if Sender = DEditHumHPTime1 then
  17391.     g_Config.nRenewHumHPTime1 := _MAX(Str_ToInt(DEditHumHPTime1.Text, 1), 100);
  17392.   if Sender = DEditHumMPTime1 then
  17393.     g_Config.nRenewHumMPTime1 := _MAX(Str_ToInt(DEditHumMPTime1.Text, 1), 100);
  17394.   if Sender = DEditHumHPTime2 then
  17395.     g_Config.nRenewHumHPTime2 := _MAX(Str_ToInt(DEditHumHPTime2.Text, 1), 100);
  17396.   if Sender = DEditHumMPTime2 then
  17397.     g_Config.nRenewHumMPTime2 := _MAX(Str_ToInt(DEditHumMPTime2.Text, 1), 100);
  17398.   if Sender = DEditHeroHPTime1 then
  17399.     g_Config.nRenewHeroHPTime1 := _MAX(Str_ToInt(DEditHeroHPTime1.Text, 1), 100);
  17400.   if Sender = DEditHeroMPTime1 then
  17401.     g_Config.nRenewHeroMPTime1 := _MAX(Str_ToInt(DEditHeroMPTime1.Text, 1), 100);
  17402.   if Sender = DEditHeroHPTime2 then
  17403.     g_Config.nRenewHeroHPTime2 := _MAX(Str_ToInt(DEditHeroHPTime2.Text, 1), 100);
  17404.   if Sender = DEditHeroMPTime2 then
  17405.     g_Config.nRenewHeroMPTime2 := _MAX(Str_ToInt(DEditHeroMPTime2.Text, 1), 100);

  17406.   SaveUserConfig();
  17407. end;

  17408. procedure TFrmDlg.DComboboxBookIndexChange(Sender: TObject);
  17409. begin
  17410.   if (g_MySelf = nil) or (not g_boLoadUserConfig) then Exit;
  17411.   g_Config.nRenewBookNowBookIndex := DComboboxBookIndex.ItemIndex;
  17412.   if (DComboboxBookIndex.ItemIndex >= 0) and (DComboboxBookIndex.ItemIndex < DComboboxBookIndex.Items.Count) then
  17413.     g_Config.sRenewBookNowBookItem := DComboboxBookIndex.Items.Strings[DComboboxBookIndex.ItemIndex];
  17414.   {else
  17415.     g_Config.sRenewBookNowBookItem := '';  }
  17416.   SaveUserConfig();
  17417. end;

  17418. procedure TFrmDlg.DComboboxAutoUseMagicChange(Sender: TObject);
  17419. begin
  17420.   if (g_MySelf = nil) or (not g_boLoadUserConfig) then Exit;
  17421.   g_Config.nAutoUseMagicIdx := DComboboxAutoUseMagic.ItemIndex;
  17422.   SaveUserConfig();
  17423. end;

  17424. procedure TFrmDlg.DComboboxPoisonChange(Sender: TObject);
  17425. begin
  17426.   if (g_MySelf = nil) or (not g_boLoadUserConfig) then Exit;
  17427.   g_Config.nPoisonIndex := DComboboxPoison.ItemIndex;
  17428.   SaveUserConfig();
  17429. end;

  17430. procedure TFrmDlg.DConfigDlgMouseMove(Sender: TObject; Shift: TShiftState;
  17431.   X, Y: Integer);
  17432. begin
  17433.   DScreen.ClearHint;
  17434. end;

  17435. procedure TFrmDlg.DEdChatMouseDown(Sender: TObject; Button: TMouseButton;
  17436.   Shift: TShiftState; X, Y: Integer);
  17437. begin
  17438.   ChatDlgLeft := X;
  17439. end;

  17440. procedure TFrmDlg.DConfigDlgKeyDown(Sender: TObject; var Key: Word;
  17441.   Shift: TShiftState);
  17442. begin
  17443.   case Key of
  17444.     VK_HOME, {VK_MULTIPLY,} VK_F12: begin
  17445.         DOptionClick();
  17446.         Key := 0;
  17447.       end;
  17448.   end;
  17449. end;

  17450. procedure TFrmDlg.DCheckBoxMusicClick(Sender: TObject; X, Y: Integer);
  17451. begin
  17452.   if (g_MySelf = nil) or (not g_boLoadUserConfig) then Exit;
  17453.   g_Config.boBGSound := DCheckBoxMusic.Checked;
  17454.   g_boBGSound := g_Config.boBGSound;
  17455.   PlayMapMusic(g_boBGSound);
  17456.   SaveUserConfig();
  17457. end;

  17458. procedure TFrmDlg.DscStartInRealArea(Sender: TObject; X, Y: Integer;
  17459.   var IsRealArea: Boolean);
  17460. begin
  17461.   IsRealArea := True;
  17462. end;

  17463. procedure TFrmDlg.DEditSearchItemChange(Sender: TObject);
  17464. var
  17465.   sText: string;

  17466.   I, II, nTop: Integer;
  17467.   DLabel: TDLabel;
  17468.   DCheckBox: TDCheckBox;
  17469.   ItemList: TStringList;
  17470. begin
  17471.   if (g_MySelf = nil) or (not g_boLoadUserConfig) then Exit;
  17472.   if DEditSearchItem.Text = '' then begin
  17473.     DComboboxItemTypeChange(Sender);
  17474.   end else begin
  17475.     sText := DEditSearchItem.Text;

  17476.     nTop := 1;
  17477.     DScrollTab2.First;
  17478.     for I := 0 to DMemoTab2.Count - 1 do begin
  17479.       ItemList := DMemoTab2.Items[I];
  17480.       if AnsiContainsText(sText, TLines(ItemList).Text) or AnsiContainsText(TLines(ItemList).Text, sText) then begin
  17481.         DLabel := TDLabel(ItemList.Objects[0]);
  17482.         DLabel.Top := nTop;
  17483.         DLabel.Visible := True;

  17484.         DCheckBox := TDCheckBox(ItemList.Objects[1]);
  17485.         DCheckBox.Top := nTop;
  17486.         //DCheckBox.Checked := pTShowItem(DCheckBox.Data).boHintMsg;
  17487.         DCheckBox.Visible := True;

  17488.         DCheckBox := TDCheckBox(ItemList.Objects[2]);
  17489.         DCheckBox.Top := nTop;
  17490.         //DCheckBox.Checked := pTShowItem(DCheckBox.Data).boPickup;
  17491.         DCheckBox.Visible := True;

  17492.         DCheckBox := TDCheckBox(ItemList.Objects[3]);
  17493.         DCheckBox.Top := nTop;
  17494.         //DCheckBox.Checked := pTShowItem(DCheckBox.Data).boShowName;
  17495.         DCheckBox.Visible := True;

  17496.         TLines(ItemList).GetHeight;
  17497.         TLines(ItemList).Visible := True;
  17498.         Inc(nTop, 17);
  17499.       end else begin
  17500.         TLines(ItemList).Visible := False;
  17501.         for II := 0 to ItemList.Count - 1 do begin
  17502.           TDControl(ItemList.Objects[II]).Visible := False;
  17503.         end;
  17504.       end;
  17505.     end;

  17506.     DScrollTab2.Max := DMemoTab2.MaxHeight;
  17507.   end;
  17508. end;

  17509. procedure TFrmDlg.DChatDlgDirectPaint(Sender: TObject; dsurface: TTexture);
  17510. begin
  17511.   if g_ConfigClient.btMainInterface = 1 then begin
  17512.     with TDControl(Sender) do begin
  17513.       dsurface.FillRect(Bounds(SurfaceX(Left), SurfaceY(Top), 2, Height), 11064552); //$00486FA8
  17514.       dsurface.FillRect(Bounds(SurfaceX(Left), SurfaceY(Top), Width - 16, 2), 11064552); //$00486FA8
  17515.     end;
  17516.   end;
  17517. end;

  17518. procedure TFrmDlg.EdSearchDirectPaint(Sender: TObject; dsurface: TTexture);
  17519. begin
  17520.   if EdSearch.Text = '' then
  17521.     with EdSearch do
  17522.       dsurface.TextOut(SurfaceX(Left) + 2, SurfaceY(Top) + 2, '[输入物品名称]', $005894B8);
  17523. end;


  17524. procedure TFrmDlg.DMerchantBigDlgCloseClick(Sender: TObject; X,
  17525.   Y: Integer);
  17526. begin
  17527.   CloseBigMDlg;
  17528. end;

  17529. procedure TFrmDlg.DSerieMagic1DirectPaint(Sender: TObject;
  17530.   dsurface: TTexture);
  17531. var
  17532.   d: TTexture;
  17533.   nFaceIndex: Integer;
  17534. begin
  17535.   with Sender as TDButton do begin
  17536.     d := g_WCqFirImages.Images[43];
  17537.     if d <> nil then
  17538.       dsurface.Draw(SurfaceX(Left), SurfaceY(Top), d);
  17539.     if g_SerieMagic[Tag].nMagicID >= 0 then begin
  17540.       if g_SerieMagic[Tag].nMagicID = 0 then begin
  17541.         nFaceIndex := 909;
  17542.       end else begin
  17543.         case g_SerieMagic[Tag].nMagicID of
  17544.           100: nFaceIndex := 952;
  17545.           101: nFaceIndex := 950;
  17546.           102: nFaceIndex := 956;
  17547.           103: nFaceIndex := 954;
  17548.           104: nFaceIndex := 944;
  17549.           105: nFaceIndex := 942;
  17550.           106: nFaceIndex := 946;
  17551.           107: nFaceIndex := 940;
  17552.           108: nFaceIndex := 934;
  17553.           109: nFaceIndex := 936;
  17554.           110: nFaceIndex := 932;
  17555.           111: nFaceIndex := 930;
  17556.         end;
  17557.       end;
  17558.       //nFaceIndex := (Tag + 930) + Tag * 2;
  17559.       if Downed then begin
  17560.         d := g_WMainImages.Images[nFaceIndex + 1];
  17561.       end else begin
  17562.         d := g_WMainImages.Images[nFaceIndex];
  17563.       end;
  17564.       if d <> nil then
  17565.         dsurface.Draw(SurfaceX(Left) + 3, SurfaceY(Top) + 2, d.ClientRect, d, True);
  17566.     end;
  17567.   end;
  17568. end;

  17569. procedure TFrmDlg.DSerieMagic1MouseDown(Sender: TObject;
  17570.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  17571. var
  17572.   D: TDButton;
  17573. begin
  17574.   if not (g_boSerieMagic or g_boSerieMagicing) then begin
  17575.     D := TDButton(Sender);
  17576.     if D.SurfaceX(D.Left) + DSerieMagicMenu.Width > SCREENWIDTH then
  17577.       DSerieMagicMenu.Left := D.SurfaceX(D.Left) - DSerieMagicMenu.Width
  17578.     else DSerieMagicMenu.Left := D.SurfaceX(D.Left);
  17579.     if D.SurfaceY(D.Top) + DSerieMagicMenu.Height > SCREENHEIGHT then
  17580.       DSerieMagicMenu.Top := D.SurfaceY(D.Top) - DSerieMagicMenu.Height
  17581.     else DSerieMagicMenu.Top := D.SurfaceY(D.Top) + D.Height;
  17582.     DSerieMagicMenu.Show(D);
  17583.     DScreen.ClearHint;
  17584.     HintList.Clear;
  17585.   end;
  17586. end;

  17587. procedure TFrmDlg.DSerieMagicMenuClick(Sender: TObject; X, Y: Integer);
  17588. var
  17589.   sMagicName: string;
  17590.   pcm: PTClientMagic;
  17591. begin
  17592.   if not (g_boSerieMagic or g_boSerieMagicing) then begin
  17593.     if DSerieMagicMenu.DControl <> nil then begin
  17594.       if DSerieMagicMenu.DControl is TDButton then begin
  17595.         with DSerieMagicMenu.DControl as TDButton do begin
  17596.           if (DSerieMagicMenu.ItemIndex = 0) then begin
  17597.             g_SerieMagic[Tag].Magic.Def.sMagicName := '';
  17598.             g_SerieMagic[Tag].Magic.Def.wMagicId := 0;
  17599.             g_SerieMagic[Tag].nMagicID := -1;
  17600.           end else
  17601.             if (DSerieMagicMenu.ItemIndex = 1) then begin
  17602.             g_SerieMagic[Tag].nMagicID := 0;
  17603.             g_SerieMagic[Tag].Magic.Def.sMagicName := '';
  17604.             g_SerieMagic[Tag].Magic.Def.wMagicId := 0;
  17605.           end else
  17606.             if (DSerieMagicMenu.ItemIndex - 3 >= 0) and (DSerieMagicMenu.ItemIndex - 3 < g_SerieMagicList.Count) then begin
  17607.             pcm := g_SerieMagicList.Items[DSerieMagicMenu.ItemIndex - 3];
  17608.             if pcm <> nil then begin
  17609.               g_SerieMagic[Tag].Magic := pcm^;
  17610.               g_SerieMagic[Tag].nMagicID := pcm.Def.wMagicId;
  17611.             end else begin
  17612.               g_SerieMagic[Tag].Magic.Def.sMagicName := '';
  17613.               g_SerieMagic[Tag].Magic.Def.wMagicId := 0;
  17614.             end;
  17615.           end;
  17616.         end;
  17617.       end;
  17618.     end;
  17619.   end;
  17620.   SaveUserConfig();
  17621. end;

  17622. procedure TFrmDlg.DSerieMagic1MouseMove(Sender: TObject;
  17623.   Shift: TShiftState; X, Y: Integer);
  17624. var
  17625.   sStr: string;
  17626. begin
  17627.   DScreen.ClearHint;
  17628.   HintList.Clear;
  17629.   if not DSerieMagicMenu.Visible then begin
  17630.     with Sender as TDButton do begin
  17631.       if g_SerieMagic[Tag].Magic.Def.sMagicName <> '' then begin
  17632.         sStr := g_SerieMagic[Tag].Magic.Def.sMagicName + '\';
  17633.         sStr := sStr + '等级:' + IntToStr(g_SerieMagic[Tag].Magic.Level) + '\';
  17634.         sStr := sStr + '经验:' + IntToStr(g_SerieMagic[Tag].Magic.CurTrain) + '/' + IntToStr(g_SerieMagic[Tag].Magic.Def.MaxTrain[g_SerieMagic[Tag].Magic.Level]);
  17635.         DScreen.ShowHint(SurfaceX(Left), SurfaceY(Top + Height), sStr, clWhite, False);
  17636.         {HintList.AddObject(g_SerieMagic[Tag].Magic.Def.sMagicName, TObject(0)); //TObject(clWhite)
  17637.         HintList.AddObject('等级:' + IntToStr(g_SerieMagic[Tag].Magic.Level), TObject(clWhite)); //TObject(clWhite)
  17638.         HintList.AddObject('经验:' + IntToStr(g_SerieMagic[Tag].Magic.CurTrain) + '/' + IntToStr(g_SerieMagic[Tag].Magic.Def.MaxTrain[g_SerieMagic[Tag].Magic.Level]), TObject(clWhite)); //TObject(clWhite)
  17639.         DScreen.ShowHintA(SurfaceX(Left),
  17640.           SurfaceY(Top + Height),
  17641.           HintList, False);
  17642.           }
  17643.       end;
  17644.     end;
  17645.   end;
  17646. end;

  17647. procedure TFrmDlg.DEditSerieMagicClick(Sender: TObject; X, Y: Integer);
  17648. begin
  17649.   DScrollTab5.Position := DScrollTab5.Max;
  17650. end;

  17651. procedure TFrmDlg.DComboboxBookIndexPopup(Sender: TObject);
  17652. var
  17653.   I: Integer;
  17654. begin
  17655.   DComboboxBookIndex.Items.Clear;
  17656.   for I := Low(g_ItemArr) to High(g_ItemArr) do begin
  17657.     if g_ItemArr[I].s.Name <> '' then
  17658.       DComboboxBookIndex.Items.Add(g_ItemArr[I].s.Name);
  17659.   end;
  17660.   if g_Config.sRenewBookNowBookItem <> '' then begin
  17661.     if (g_Config.nRenewBookNowBookIndex >= 0) and (g_Config.nRenewBookNowBookIndex < DComboboxBookIndex.Items.Count) then begin
  17662.       if g_Config.sRenewBookNowBookItem = DComboboxBookIndex.Items.Strings[g_Config.nRenewBookNowBookIndex] then Exit;
  17663.     end;
  17664.     g_Config.nRenewBookNowBookIndex := -1;
  17665.     DComboboxBookIndex.ItemIndex := -1;
  17666.     for I := 0 to DComboboxBookIndex.Items.Count - 1 do begin
  17667.       if g_Config.sRenewBookNowBookItem = DComboboxBookIndex.Items.Strings[I] then begin
  17668.         g_Config.nRenewBookNowBookIndex := I;
  17669.         DComboboxBookIndex.ItemIndex := I;
  17670.         Break;
  17671.       end;
  17672.     end;
  17673.     SaveUserConfig();
  17674.   end;
  17675.   DComboboxBookIndex.Text := g_Config.sRenewBookNowBookItem;
  17676. end;

  17677. procedure TFrmDlg.DEditRandomCodeKeyPress(Sender: TObject; var Key: Char);
  17678. var
  17679.   sRandomCode: string;
  17680. begin
  17681.   if Key = #13 then begin
  17682.     sRandomCode := Trim(DEditRandomCode.Text);
  17683.     if sRandomCode <> '' then begin
  17684.       frmMain.SendRandomCode(sRandomCode);
  17685.       CloseRandomDlg;
  17686.     end;
  17687.     Key := #0;
  17688.   end;
  17689. end;

  17690. procedure TFrmDlg.DEditAdjustIncrementChange(Sender: TObject);
  17691. begin
  17692.   if Str_ToInt(DEditAdjustIncrement.Text, -1) <= 0 then DEditAdjustIncrement.Text := '1';
  17693. end;

  17694. procedure TFrmDlg.DComboboxHeroHP1Change(Sender: TObject);
  17695. begin
  17696.   if (not g_boLoadUserConfig) then Exit;
  17697.   g_Config.nRenewHeroHPIndex1 := DComboboxHeroHP1.ItemIndex;
  17698.   SaveUserConfig();
  17699. end;

  17700. procedure TFrmDlg.DComboboxHeroMP1Change(Sender: TObject);
  17701. begin
  17702.   if (not g_boLoadUserConfig) then Exit;
  17703.   g_Config.nRenewHeroMPIndex1 := DComboboxHeroMP1.ItemIndex;
  17704.   SaveUserConfig();
  17705. end;

  17706. procedure TFrmDlg.DComboboxHeroHP2Change(Sender: TObject);
  17707. begin
  17708.   if (not g_boLoadUserConfig) then Exit;
  17709.   g_Config.nRenewHeroHPIndex2 := DComboboxHeroHP2.ItemIndex;
  17710.   SaveUserConfig();
  17711. end;

  17712. procedure TFrmDlg.DComboboxHeroMP2Change(Sender: TObject);
  17713. begin
  17714.   if (not g_boLoadUserConfig) then Exit;
  17715.   g_Config.nRenewHeroMPIndex2 := DComboboxHeroMP2.ItemIndex;
  17716.   SaveUserConfig();
  17717. end;

  17718. procedure TFrmDlg.DComboboxHumHP1Change(Sender: TObject);
  17719. begin
  17720.   if (not g_boLoadUserConfig) then Exit;
  17721.   g_Config.nRenewHumHPIndex1 := DComboboxHumHP1.ItemIndex;
  17722.   SaveUserConfig();
  17723. end;

  17724. procedure TFrmDlg.DComboboxHumMP1Change(Sender: TObject);
  17725. begin
  17726.   if (not g_boLoadUserConfig) then Exit;
  17727.   g_Config.nRenewHumMPIndex1 := DComboboxHumMP1.ItemIndex;
  17728.   SaveUserConfig();
  17729. end;

  17730. procedure TFrmDlg.DComboboxHumHP2Change(Sender: TObject);
  17731. begin
  17732.   if (not g_boLoadUserConfig) then Exit;
  17733.   g_Config.nRenewHumHPIndex2 := DComboboxHumHP2.ItemIndex;
  17734.   SaveUserConfig();
  17735. end;

  17736. procedure TFrmDlg.DComboboxHumMP2Change(Sender: TObject);
  17737. begin
  17738.   if (not g_boLoadUserConfig) then Exit;
  17739.   g_Config.nRenewHumMPIndex2 := DComboboxHumMP2.ItemIndex;
  17740.   SaveUserConfig();
  17741. end;

  17742. end.
复制代码

分享名称:传奇Gom引擎商业全套源码.rar
分享链接:http://pan.zxdll.cn:188/#s/9iw69IlQ
访问密码:
游客,如果您要查看本帖隐藏内容请回复






上一篇:C++传奇3EI3.0客户端 Mir3Ei ClientEx客户端源代码
下一篇:飘逸引擎Delphi传奇引擎全套源码+网关登陆器源代码
回复

使用道具 举报

0

主题

5

回帖

220

积分

旋风流星刀

积分
220
发表于 2023-8-12 11:26:48 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

19

回帖

257

积分

旋风流星刀

积分
257
发表于 2023-8-16 13:56:52 | 显示全部楼层
厉害啊我的哥!
回复 支持 反对

使用道具 举报

0

主题

6

回帖

208

积分

旋风流星刀

积分
208
发表于 2023-8-17 21:32:40 来自手机 | 显示全部楼层
真的吗太好了
回复 支持 反对

使用道具 举报

0

主题

6

回帖

208

积分

旋风流星刀

积分
208
发表于 2023-8-17 21:51:03 来自手机 | 显示全部楼层
看了下是烂大街那个
回复 支持 反对

使用道具 举报

1

主题

434

回帖

598

积分

旋风流星刀

积分
598
发表于 2023-8-22 15:55:41 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

24

回帖

82

积分

旋风流星刀

积分
82
发表于 2023-10-5 22:01:19 | 显示全部楼层
6666666666666
回复 支持 反对

使用道具 举报

0

主题

3

回帖

4

积分

旋风流星刀

积分
4
发表于 2023-10-8 12:55:38 | 显示全部楼层
000000gggggg
回复 支持 反对

使用道具 举报

0

主题

2

回帖

221

积分

旋风流星刀

积分
221
发表于 2023-10-11 13:33:17 | 显示全部楼层
真的假的?
回复

使用道具 举报

0

主题

18

回帖

103

积分

旋风流星刀

积分
103
发表于 2023-10-20 16:39:21 | 显示全部楼层
好像很牛逼
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|美林GM论坛 ( 蜀ICP备2020030293号-2 )|网站地图

禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.如遇版权问题,请及时QQ联系

GMT+8, 2024-4-27 18:55 , Processed in 0.530359 second(s), 95 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表