www.pudn.com > M2Engine.rar > HumanInfo.pas
unit HumanInfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ObjBase, StdCtrls, Spin, ComCtrls, ExtCtrls, Grids;
type
TfrmHumanInfo = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
EditName: TEdit;
EditMap: TEdit;
EditXY: TEdit;
EditAccount: TEdit;
EditIPaddr: TEdit;
EditLogonTime: TEdit;
EditLogonLong: TEdit;
GroupBox2: TGroupBox;
Label12: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
EditLevel: TSpinEdit;
EditGold: TSpinEdit;
EditPKPoint: TSpinEdit;
EditExp: TSpinEdit;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
TabSheet6: TTabSheet;
GroupBox3: TGroupBox;
Label11: TLabel;
EditAC: TEdit;
Label13: TLabel;
EditMAC: TEdit;
Label14: TLabel;
EditDC: TEdit;
EditMC: TEdit;
Label15: TLabel;
EditSC: TEdit;
Label16: TLabel;
EditHP: TEdit;
Label17: TLabel;
Label18: TLabel;
EditMP: TEdit;
Timer: TTimer;
GroupBox4: TGroupBox;
CheckBoxMonitor: TCheckBox;
GroupBox5: TGroupBox;
EditHumanStatus: TEdit;
GroupBox6: TGroupBox;
CheckBoxGameMaster: TCheckBox;
CheckBoxSuperMan: TCheckBox;
CheckBoxObserver: TCheckBox;
ButtonKick: TButton;
GroupBox7: TGroupBox;
GroupBox9: TGroupBox;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
EditGameGold: TSpinEdit;
EditGamePoint: TSpinEdit;
EditCreditPoint: TSpinEdit;
EditBonusPoint: TSpinEdit;
Label19: TLabel;
EditEditBonusPointUsed: TSpinEdit;
ButtonSave: TButton;
GridUserItem: TStringGrid;
GroupBox8: TGroupBox;
GridBagItem: TStringGrid;
GroupBox10: TGroupBox;
GridStorageItem: TStringGrid;
GroupBox11: TGroupBox;
Label20: TLabel;
EditSayMsg: TEdit;
Label21: TLabel;
EditMaxExp: TSpinEdit;
procedure TimerTimer(Sender: TObject);
procedure CheckBoxMonitorClick(Sender: TObject);
procedure ButtonKickClick(Sender: TObject);
procedure ButtonSaveClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure RefHumanInfo();
{ Private declarations }
public
PlayObject: TPlayObject;
procedure Open();
{ Public declarations }
end;
var
frmHumanInfo: TfrmHumanInfo;
implementation
uses UsrEngn, M2Share, Grobal2;
{$R *.dfm}
var
boRefHuman: Boolean = False;
{ TfrmHumanInfo }
procedure TfrmHumanInfo.FormCreate(Sender: TObject);
begin
GridUserItem.Cells[0, 0] := '装备位置';
GridUserItem.Cells[1, 0] := '装备名称';
GridUserItem.Cells[2, 0] := '系列号';
GridUserItem.Cells[3, 0] := '持久';
GridUserItem.Cells[4, 0] := '攻';
GridUserItem.Cells[5, 0] := '魔';
GridUserItem.Cells[6, 0] := '道';
GridUserItem.Cells[7, 0] := '防';
GridUserItem.Cells[8, 0] := '魔防';
GridUserItem.Cells[9, 0] := '附加属性';
GridUserItem.Cells[0, 1] := '衣服';
GridUserItem.Cells[0, 2] := '武器';
GridUserItem.Cells[0, 3] := '照明物';
GridUserItem.Cells[0, 4] := '项链';
GridUserItem.Cells[0, 5] := '头盔';
GridUserItem.Cells[0, 6] := '左手镯';
GridUserItem.Cells[0, 7] := '右手镯';
GridUserItem.Cells[0, 8] := '左戒指';
GridUserItem.Cells[0, 9] := '右戒指';
GridUserItem.Cells[0, 10] := '物品';
GridUserItem.Cells[0, 11] := '腰带';
GridUserItem.Cells[0, 12] := '鞋子';
GridUserItem.Cells[0, 13] := '宝石';
GridBagItem.Cells[0, 0] := '序号';
GridBagItem.Cells[1, 0] := '装备名称';
GridBagItem.Cells[2, 0] := '系列号';
GridBagItem.Cells[3, 0] := '持久';
GridBagItem.Cells[4, 0] := '攻';
GridBagItem.Cells[5, 0] := '魔';
GridBagItem.Cells[6, 0] := '道';
GridBagItem.Cells[7, 0] := '防';
GridBagItem.Cells[8, 0] := '魔防';
GridBagItem.Cells[9, 0] := '附加属性';
GridStorageItem.Cells[0, 0] := '序号';
GridStorageItem.Cells[1, 0] := '装备名称';
GridStorageItem.Cells[2, 0] := '系列号';
GridStorageItem.Cells[3, 0] := '持久';
GridStorageItem.Cells[4, 0] := '攻';
GridStorageItem.Cells[5, 0] := '魔';
GridStorageItem.Cells[6, 0] := '道';
GridStorageItem.Cells[7, 0] := '防';
GridStorageItem.Cells[8, 0] := '魔防';
GridStorageItem.Cells[9, 0] := '附加属性';
PageControl1.ActivePageIndex := 0;
end;
procedure TfrmHumanInfo.Open;
begin
RefHumanInfo();
ButtonKick.Enabled := True;
Timer.Enabled := True;
ShowModal;
CheckBoxMonitor.Checked := False;
Timer.Enabled := False;
end;
procedure TfrmHumanInfo.RefHumanInfo;
var
i: Integer;
nTotleUsePoint: Integer;
StdItem: pTStdItem;
Item: TStdItem;
UserItem: pTUserItem;
begin
if (PlayObject = nil) then begin
Exit;
end;
if PlayObject.m_boNotOnlineAddExp then EditSayMsg.Enabled := True else EditSayMsg.Enabled := False;
EditSayMsg.Text := PlayObject.m_sAutoSendMsg;
EditName.Text := PlayObject.m_sCharName;
EditMap.Text := PlayObject.m_sMapName + '(' + PlayObject.m_PEnvir.sMapDesc + ')';
EditXY.Text := IntToStr(PlayObject.m_nCurrX) + ':' + IntToStr(PlayObject.m_nCurrY);
EditAccount.Text := PlayObject.m_sUserID;
EditIPaddr.Text := PlayObject.m_sIPaddr;
EditLogonTime.Text := DateTimeToStr(PlayObject.m_dLogonTime);
EditLogonLong.Text := IntToStr((GetTickCount - PlayObject.m_dwLogonTick) div (60 * 1000)) + ' 分钟';
EditLevel.Value := PlayObject.m_Abil.Level;
EditGold.Value := PlayObject.m_nGold;
EditPKPoint.Value := PlayObject.m_nPkPoint;
EditExp.Value := PlayObject.m_Abil.Exp;
EditMaxExp.Value := PlayObject.m_Abil.MaxExp;
EditAC.Text := IntToStr(LoWord(PlayObject.m_WAbil.AC)) + '/' + IntToStr(HiWord(PlayObject.m_WAbil.AC));
EditMAC.Text := IntToStr(LoWord(PlayObject.m_WAbil.MAC)) + '/' + IntToStr(HiWord(PlayObject.m_WAbil.MAC));
EditDC.Text := IntToStr(LoWord(PlayObject.m_WAbil.DC)) + '/' + IntToStr(HiWord(PlayObject.m_WAbil.DC));
EditMC.Text := IntToStr(LoWord(PlayObject.m_WAbil.MC)) + '/' + IntToStr(HiWord(PlayObject.m_WAbil.MC));
EditSC.Text := IntToStr(LoWord(PlayObject.m_WAbil.SC)) + '/' + IntToStr(HiWord(PlayObject.m_WAbil.SC));
EditHP.Text := IntToStr(PlayObject.m_WAbil.HP) + '/' + IntToStr(PlayObject.m_WAbil.MaxHP);
EditMP.Text := IntToStr(PlayObject.m_WAbil.MP) + '/' + IntToStr(PlayObject.m_WAbil.MaxMP);
EditGameGold.Value := PlayObject.m_nGameGold;
EditGamePoint.Value := PlayObject.m_nGamePoint;
EditCreditPoint.Value := PlayObject.m_btCreditPoint;
EditBonusPoint.Value := PlayObject.m_nBonusPoint;
nTotleUsePoint := PlayObject.m_BonusAbil.DC +
PlayObject.m_BonusAbil.MC +
PlayObject.m_BonusAbil.SC +
PlayObject.m_BonusAbil.AC +
PlayObject.m_BonusAbil.MAC +
PlayObject.m_BonusAbil.HP +
PlayObject.m_BonusAbil.MP +
PlayObject.m_BonusAbil.Hit +
PlayObject.m_BonusAbil.Speed +
PlayObject.m_BonusAbil.X2;
EditEditBonusPointUsed.Value := nTotleUsePoint;
CheckBoxGameMaster.Checked := PlayObject.m_boAdminMode;
CheckBoxSuperMan.Checked := PlayObject.m_boSuperMan;
CheckBoxObserver.Checked := PlayObject.m_boObMode;
if PlayObject.m_boDeath then begin
EditHumanStatus.Text := '死亡';
end else
if PlayObject.m_boGhost then begin
EditHumanStatus.Text := '下线';
PlayObject := nil;
end else EditHumanStatus.Text := '在线';
for i := Low(PlayObject.m_UseItems) to High(PlayObject.m_UseItems) do begin
UserItem := @PlayObject.m_UseItems[i];
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem = nil then begin
GridUserItem.Cells[1, i + 1] := '';
GridUserItem.Cells[2, i + 1] := '';
GridUserItem.Cells[3, i + 1] := '';
GridUserItem.Cells[4, i + 1] := '';
GridUserItem.Cells[5, i + 1] := '';
GridUserItem.Cells[6, i + 1] := '';
GridUserItem.Cells[7, i + 1] := '';
GridUserItem.Cells[8, i + 1] := '';
GridUserItem.Cells[9, i + 1] := '';
Continue;
end;
Item := StdItem^;
ItemUnit.GetItemAddValue(UserItem, Item);
GridUserItem.Cells[1, i + 1] := Item.Name;
GridUserItem.Cells[2, i + 1] := IntToStr(UserItem.MakeIndex);
GridUserItem.Cells[3, i + 1] := format('%d/%d', [UserItem.Dura, UserItem.DuraMax]);
GridUserItem.Cells[4, i + 1] := format('%d/%d', [LoWord(Item.DC), HiWord(Item.DC)]);
GridUserItem.Cells[5, i + 1] := format('%d/%d', [LoWord(Item.MC), HiWord(Item.MC)]);
GridUserItem.Cells[6, i + 1] := format('%d/%d', [LoWord(Item.SC), HiWord(Item.SC)]);
GridUserItem.Cells[7, i + 1] := format('%d/%d', [LoWord(Item.AC), HiWord(Item.AC)]);
GridUserItem.Cells[8, i + 1] := format('%d/%d', [LoWord(Item.MAC), HiWord(Item.MAC)]);
GridUserItem.Cells[9, i + 1] := format('%d/%d/%d/%d/%d/%d/%d', [UserItem.btValue[0],
UserItem.btValue[1],
UserItem.btValue[2],
UserItem.btValue[3],
UserItem.btValue[4],
UserItem.btValue[5],
UserItem.btValue[6]]);
end;
if PlayObject.m_ItemList.Count <= 0 then GridBagItem.RowCount := 2
else GridBagItem.RowCount := PlayObject.m_ItemList.Count + 1;
for i := 0 to PlayObject.m_ItemList.Count - 1 do begin
UserItem := PlayObject.m_ItemList.Items[i];
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem = nil then begin
GridBagItem.Cells[1, i + 1] := '';
GridBagItem.Cells[2, i + 1] := '';
GridBagItem.Cells[3, i + 1] := '';
GridBagItem.Cells[4, i + 1] := '';
GridBagItem.Cells[5, i + 1] := '';
GridBagItem.Cells[6, i + 1] := '';
GridBagItem.Cells[7, i + 1] := '';
GridBagItem.Cells[8, i + 1] := '';
GridBagItem.Cells[9, i + 1] := '';
Continue;
end;
Item := StdItem^;
ItemUnit.GetItemAddValue(UserItem, Item);
GridBagItem.Cells[0, i + 1] := IntToStr(i);
GridBagItem.Cells[1, i + 1] := Item.Name;
GridBagItem.Cells[2, i + 1] := IntToStr(UserItem.MakeIndex);
GridBagItem.Cells[3, i + 1] := format('%d/%d', [UserItem.Dura, UserItem.DuraMax]);
GridBagItem.Cells[4, i + 1] := format('%d/%d', [LoWord(Item.DC), HiWord(Item.DC)]);
GridBagItem.Cells[5, i + 1] := format('%d/%d', [LoWord(Item.MC), HiWord(Item.MC)]);
GridBagItem.Cells[6, i + 1] := format('%d/%d', [LoWord(Item.SC), HiWord(Item.SC)]);
GridBagItem.Cells[7, i + 1] := format('%d/%d', [LoWord(Item.AC), HiWord(Item.AC)]);
GridBagItem.Cells[8, i + 1] := format('%d/%d', [LoWord(Item.MAC), HiWord(Item.MAC)]);
GridBagItem.Cells[9, i + 1] := format('%d/%d/%d/%d/%d/%d/%d', [UserItem.btValue[0],
UserItem.btValue[1],
UserItem.btValue[2],
UserItem.btValue[3],
UserItem.btValue[4],
UserItem.btValue[5],
UserItem.btValue[6]]);
end;
if PlayObject.m_StorageItemList.Count <= 0 then GridStorageItem.RowCount := 2
else GridStorageItem.RowCount := PlayObject.m_StorageItemList.Count + 1;
for i := 0 to PlayObject.m_StorageItemList.Count - 1 do begin
UserItem := PlayObject.m_StorageItemList.Items[i];
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem = nil then begin
GridStorageItem.Cells[1, i + 1] := '';
GridStorageItem.Cells[2, i + 1] := '';
GridStorageItem.Cells[3, i + 1] := '';
GridStorageItem.Cells[4, i + 1] := '';
GridStorageItem.Cells[5, i + 1] := '';
GridStorageItem.Cells[6, i + 1] := '';
GridStorageItem.Cells[7, i + 1] := '';
GridStorageItem.Cells[8, i + 1] := '';
GridStorageItem.Cells[9, i + 1] := '';
Continue;
end;
Item := StdItem^;
ItemUnit.GetItemAddValue(UserItem, Item);
GridStorageItem.Cells[0, i + 1] := IntToStr(i);
GridStorageItem.Cells[1, i + 1] := Item.Name;
GridStorageItem.Cells[2, i + 1] := IntToStr(UserItem.MakeIndex);
GridStorageItem.Cells[3, i + 1] := format('%d/%d', [UserItem.Dura, UserItem.DuraMax]);
GridStorageItem.Cells[4, i + 1] := format('%d/%d', [LoWord(Item.DC), HiWord(Item.DC)]);
GridStorageItem.Cells[5, i + 1] := format('%d/%d', [LoWord(Item.MC), HiWord(Item.MC)]);
GridStorageItem.Cells[6, i + 1] := format('%d/%d', [LoWord(Item.SC), HiWord(Item.SC)]);
GridStorageItem.Cells[7, i + 1] := format('%d/%d', [LoWord(Item.AC), HiWord(Item.AC)]);
GridStorageItem.Cells[8, i + 1] := format('%d/%d', [LoWord(Item.MAC), HiWord(Item.MAC)]);
GridStorageItem.Cells[9, i + 1] := format('%d/%d/%d/%d/%d/%d/%d', [UserItem.btValue[0],
UserItem.btValue[1],
UserItem.btValue[2],
UserItem.btValue[3],
UserItem.btValue[4],
UserItem.btValue[5],
UserItem.btValue[6]]);
end;
end;
procedure TfrmHumanInfo.TimerTimer(Sender: TObject);
begin
if PlayObject = nil then Exit;
if PlayObject.m_boGhost then begin
EditHumanStatus.Text := '下线';
PlayObject := nil;
Exit;
end;
if boRefHuman then RefHumanInfo();
end;
procedure TfrmHumanInfo.CheckBoxMonitorClick(Sender: TObject);
begin
boRefHuman := CheckBoxMonitor.Checked;
ButtonSave.Enabled := not boRefHuman;
end;
procedure TfrmHumanInfo.ButtonKickClick(Sender: TObject);
begin
if PlayObject = nil then Exit;
PlayObject.m_boEmergencyClose := True;
PlayObject.m_boNotOnlineAddExp := False;
ButtonKick.Enabled := False;
end;
procedure TfrmHumanInfo.ButtonSaveClick(Sender: TObject);
var
nLevel: Integer;
nGold: Integer;
nPKPOINT: Integer;
nGameGold: Integer;
nGamePoint: Integer;
nCreditPoint: Integer;
nBonusPoint: Integer;
boGameMaster: Boolean;
boObServer: Boolean;
boSuperman: Boolean;
sAutoSendMsg: string;
begin
if PlayObject = nil then Exit;
sAutoSendMsg := Trim(EditSayMsg.Text);
nLevel := EditLevel.Value;
nGold := EditGold.Value;
nPKPOINT := EditPKPoint.Value;
nGameGold := EditGameGold.Value;
nGamePoint := EditGamePoint.Value;
nCreditPoint := EditCreditPoint.Value;
nBonusPoint := EditBonusPoint.Value;
boGameMaster := CheckBoxGameMaster.Checked;
boObServer := CheckBoxObserver.Checked;
boSuperman := CheckBoxSuperMan.Checked;
if (nLevel < 0) or (nLevel > High(Word)) or (nGold < 0) or (nGold > 200000000) or (nPKPOINT < 0) or
(nPKPOINT > 2000000) or (nCreditPoint < 0) or (nCreditPoint > High(Byte)) or (nBonusPoint < 0) or (nBonusPoint > 20000000) then begin
MessageBox(Handle, '输入数据不正确!!!', '错误信息', MB_OK);
Exit;
end;
PlayObject.m_sAutoSendMsg := sAutoSendMsg;
PlayObject.m_Abil.Level := nLevel;
PlayObject.m_nGold := nGold;
PlayObject.m_nPkPoint := nPKPOINT;
PlayObject.m_nGameGold := nGameGold;
PlayObject.m_nGamePoint := nGamePoint;
PlayObject.m_btCreditPoint := nCreditPoint;
PlayObject.m_nBonusPoint := nBonusPoint;
PlayObject.m_boAdminMode := boGameMaster;
PlayObject.m_boObMode := boObServer;
PlayObject.m_boSuperMan := boSuperman;
PlayObject.RecalcAbilitys;
PlayObject.GoldChanged;
MessageBox(Handle, '人物数据已保存。', '提示信息', MB_OK);
end;
end.