www.pudn.com > woool12.rar > CastleManage.pas


unit CastleManage; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, ComCtrls, StdCtrls, Spin; 
 
type 
  TfrmCastleManage = class(TForm) 
    GroupBox1: TGroupBox; 
    ListViewCastle: TListView; 
    GroupBox2: TGroupBox; 
    PageControlCastle: TPageControl; 
    TabSheet1: TTabSheet; 
    TabSheet2: TTabSheet; 
    GroupBox3: TGroupBox; 
    Label2: TLabel; 
    EditOwenGuildName: TEdit; 
    GroupBox4: TGroupBox; 
    Label4: TLabel; 
    Label5: TLabel; 
    Label6: TLabel; 
    EditCastleName: TEdit; 
    EditCastleGuild: TEdit; 
    EditCastleHome: TEdit; 
    Label1: TLabel; 
    Label3: TLabel; 
    EditTotalGold: TSpinEdit; 
    EditTodayIncome: TSpinEdit; 
    Label7: TLabel; 
    EditTechLevel: TSpinEdit; 
    Label8: TLabel; 
    EditPower: TSpinEdit; 
    TabSheet3: TTabSheet; 
    GroupBox5: TGroupBox; 
    ListViewGuard: TListView; 
    ButtonRefresh: TButton; 
    Label9: TLabel; 
    EditCastleHomex: TEdit; 
    Label10: TLabel; 
    EditCastleHuang: TEdit; 
    Label11: TLabel; 
    EditCastleMiDao: TEdit; 
    TabSheet4: TTabSheet; 
    UpDown1: TUpDown; 
    UpDown2: TUpDown; 
    EditCastleHomey: TEdit; 
    ListViewWar: TListView; 
    ButtonCastleSave: TButton; 
    Button1: TButton; 
    Button2: TButton; 
    Button3: TButton; 
    procedure ListViewCastleClick(Sender: TObject); 
    procedure ButtonRefreshClick(Sender: TObject); 
    procedure EditCastleNameChange(Sender: TObject); 
    procedure ButtonCastleSaveClick(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    procedure Button3Click(Sender: TObject); 
  private 
    procedure RefCastleList; 
    procedure RefCastleInfo; 
    { Private declarations } 
  public 
    procedure Open(); 
    { Public declarations } 
  end; 
 
var 
  frmCastleManage   : TfrmCastleManage; 
 
implementation 
 
uses Castle, M2Share, CastleAttackEdit; 
 
{$R *.dfm} 
var 
  CurCastle         : TUserCastle; 
  boRefing          : Boolean; 
  { TfrmCastleManage } 
 
procedure TfrmCastleManage.Open; 
begin 
  RefCastleList(); 
  ShowModal; 
end; 
 
procedure TfrmCastleManage.RefCastleInfo; 
var 
  i, ii             : Integer; 
  ListItem          : TListItem; 
  ObjUnit           : pTObjUnit; 
begin 
  if CurCastle = nil then 
    exit; 
  boRefing := True; 
  if CurCastle.m_MasterGuild = nil then 
    EditOwenGuildName.Text := '' 
  else 
    EditOwenGuildName.Text := CurCastle.m_MasterGuild.sGuildName; 
  EditTotalGold.Value := CurCastle.m_nTotalGold; 
  EditTodayIncome.Value := CurCastle.m_nTodayIncome; 
  EditTechLevel.Value := CurCastle.m_nTechLevel; 
  EditPower.Value := CurCastle.m_nPower; 
 
  EditCastleName.Text:=CurCastle.m_sName; 
  EditCastleHome.Text:=CurCastle.m_sHomeMap; 
  EditCastleGuild.Text:=CurCastle.m_sOwnGuild; 
  EditCastleHuang.Text:=CurCastle.m_sPalaceMap; 
  EditCastleMiDao.Text:=CurCAstle.m_sSecretMap; 
  UpDown1.Position:=CurCastle.m_nPalaceDoorX; 
  UpDown2.Position:=CurCAstle.m_nPalaceDoorY; 
 
 
  ListViewWar.Clear; 
  if CurCastle.m_AttackWarList.Count>0 then 
  Begin 
     for i:=0 to  CurCastle.m_AttackWarList.Count-1 do 
     Begin 
        ListItem := ListVIewWar.Items.Add; 
        ListItem.Caption:=Inttostr(i); 
        ListItem.SubItems.Add(pTAttackerInfo(CurCastle.m_AttackWarList.Items[i]).sGuildName); 
        ListItem.SubItems.Add(Datetostr(pTAttackerInfo(CurCastle.m_AttackWarList.Items[i]).AttackDate)); 
     End; 
  End; 
 
 
  ListViewGuard.Clear; 
  ListItem := ListViewGuard.Items.Add; 
  ListItem.Caption := '0'; 
  if CurCastle.m_MainDoor.BaseObject <> nil then 
  begin 
    ListItem.SubItems.Add(CurCastle.m_MainDoor.BaseObject.m_sCharName); 
    ListItem.SubItems.Add(format('%d:%d', 
      [CurCastle.m_MainDoor.BaseObject.m_nCurrX, 
      CurCastle.m_MainDoor.BaseObject.m_nCurrY])); 
    ListItem.SubItems.Add(format('%d/%d', 
      [CurCastle.m_MainDoor.BaseObject.m_WAbil.HP, 
      CurCastle.m_MainDoor.BaseObject.m_WAbil.MaxHP])); 
    if CurCastle.m_MainDoor.BaseObject.m_boDeath then 
    begin 
      ListItem.SubItems.Add('Ëð»µ'); 
    end 
    else if (CurCastle.m_DoorStatus <> nil) and CurCastle.m_DoorStatus.boOpened 
      then 
    begin 
      ListItem.SubItems.Add('¿ªÆô'); 
    end 
    else 
    begin 
      ListItem.SubItems.Add('¹Ø±Õ'); 
    end; 
  end 
  else 
  begin 
    ListItem.SubItems.Add(CurCastle.m_MainDoor.sName); 
    ListItem.SubItems.Add(format('%d:%d', [CurCastle.m_MainDoor.nX, 
      CurCastle.m_MainDoor.nY])); 
    ListItem.SubItems.Add(format('%d/%d', [0, 0])); 
  end; 
 
  ListItem := ListViewGuard.Items.Add; 
  ListItem.Caption := '1'; 
  if CurCastle.m_LeftWall.BaseObject <> nil then 
  begin 
    ListItem.SubItems.Add(CurCastle.m_LeftWall.BaseObject.m_sCharName); 
    ListItem.SubItems.Add(format('%d:%d', 
      [CurCastle.m_LeftWall.BaseObject.m_nCurrX, 
      CurCastle.m_LeftWall.BaseObject.m_nCurrY])); 
    ListItem.SubItems.Add(format('%d/%d', 
      [CurCastle.m_LeftWall.BaseObject.m_WAbil.HP, 
      CurCastle.m_LeftWall.BaseObject.m_WAbil.MaxHP])); 
  end 
  else 
  begin 
    ListItem.SubItems.Add(CurCastle.m_LeftWall.sName); 
    ListItem.SubItems.Add(format('%d:%d', [CurCastle.m_LeftWall.nX, 
      CurCastle.m_LeftWall.nY])); 
    ListItem.SubItems.Add(format('%d/%d', [0, 0])); 
  end; 
 
  ListItem := ListViewGuard.Items.Add; 
  ListItem.Caption := '2'; 
  if CurCastle.m_CenterWall.BaseObject <> nil then 
  begin 
    ListItem.SubItems.Add(CurCastle.m_CenterWall.BaseObject.m_sCharName); 
    ListItem.SubItems.Add(format('%d:%d', 
      [CurCastle.m_CenterWall.BaseObject.m_nCurrX, 
      CurCastle.m_CenterWall.BaseObject.m_nCurrY])); 
    ListItem.SubItems.Add(format('%d/%d', 
      [CurCastle.m_CenterWall.BaseObject.m_WAbil.HP, 
      CurCastle.m_CenterWall.BaseObject.m_WAbil.MaxHP])); 
  end 
  else 
  begin 
    ListItem.SubItems.Add(CurCastle.m_CenterWall.sName); 
    ListItem.SubItems.Add(format('%d:%d', [CurCastle.m_CenterWall.nX, 
      CurCastle.m_CenterWall.nY])); 
    ListItem.SubItems.Add(format('%d/%d', [0, 0])); 
  end; 
 
  ListItem := ListViewGuard.Items.Add; 
  ListItem.Caption := '3'; 
  if CurCastle.m_RightWall.BaseObject <> nil then 
  begin 
    ListItem.SubItems.Add(CurCastle.m_RightWall.BaseObject.m_sCharName); 
    ListItem.SubItems.Add(format('%d:%d', 
      [CurCastle.m_RightWall.BaseObject.m_nCurrX, 
      CurCastle.m_RightWall.BaseObject.m_nCurrY])); 
    ListItem.SubItems.Add(format('%d/%d', 
      [CurCastle.m_RightWall.BaseObject.m_WAbil.HP, 
      CurCastle.m_RightWall.BaseObject.m_WAbil.MaxHP])); 
  end 
  else 
  begin 
    ListItem.SubItems.Add(CurCastle.m_RightWall.sName); 
    ListItem.SubItems.Add(format('%d:%d', [CurCastle.m_RightWall.nX, 
      CurCastle.m_RightWall.nY])); 
    ListItem.SubItems.Add(format('%d/%d', [0, 0])); 
  end; 
  for i := Low(CurCastle.m_Archer) to High(CurCastle.m_Archer) do 
  begin 
    ObjUnit := @CurCastle.m_Archer[i]; 
    ListItem := ListViewGuard.Items.Add; 
    ListItem.Caption := IntToStr(i + 4); 
    if ObjUnit.BaseObject <> nil then 
    begin 
      ListItem.SubItems.Add(ObjUnit.BaseObject.m_sCharName); 
      ListItem.SubItems.Add(format('%d:%d', [ObjUnit.BaseObject.m_nCurrX, 
        ObjUnit.BaseObject.m_nCurrY])); 
      ListItem.SubItems.Add(format('%d/%d', [ObjUnit.BaseObject.m_WAbil.HP, 
        ObjUnit.BaseObject.m_WAbil.MaxHP])); 
    end 
    else 
    begin 
      ListItem.SubItems.Add(ObjUnit.sName); 
      ListItem.SubItems.Add(format('%d:%d', [ObjUnit.nX, ObjUnit.nY])); 
      ListItem.SubItems.Add(format('%d/%d', [0, 0])); 
    end; 
  end; 
  for ii := Low(CurCastle.m_Guard) to High(CurCastle.m_Guard) do 
  begin 
    ObjUnit := @CurCastle.m_Guard[ii]; 
    ListItem := ListViewGuard.Items.Add; 
    ListItem.Caption := IntToStr(i + 4); 
    if ObjUnit.BaseObject <> nil then 
    begin 
      ListItem.SubItems.Add(ObjUnit.BaseObject.m_sCharName); 
      ListItem.SubItems.Add(format('%d:%d', [ObjUnit.BaseObject.m_nCurrX, 
        ObjUnit.BaseObject.m_nCurrY])); 
      ListItem.SubItems.Add(format('%d/%d', [ObjUnit.BaseObject.m_WAbil.HP, 
        ObjUnit.BaseObject.m_WAbil.MaxHP])); 
    end 
    else 
    begin 
      ListItem.SubItems.Add(ObjUnit.sName); 
      ListItem.SubItems.Add(format('%d:%d', [ObjUnit.nX, ObjUnit.nY])); 
      ListItem.SubItems.Add(format('%d/%d', [0, 0])); 
    end; 
  end; 
  boRefing := False; 
end; 
 
procedure TfrmCastleManage.RefCastleList; 
var 
  i                 : Integer; 
  UserCastle        : TUserCastle; 
  ListItem          : TListItem; 
begin 
  g_CastleManager.Lock; 
  try 
    for i := 0 to g_CastleManager.m_CastleList.Count - 1 do 
    begin 
      UserCastle := TUserCastle(g_CastleManager.m_CastleList.Items[i]); 
      ListItem := ListViewCastle.Items.Add; 
      ListItem.Caption := IntToStr(i); 
      ListItem.SubItems.AddObject(UserCastle.m_sConfigDir, UserCastle); 
      ListItem.SubItems.Add(UserCastle.m_sName) 
       
    end; 
  finally 
    g_CastleManager.UnLock; 
  end; 
end; 
 
procedure TfrmCastleManage.ListViewCastleClick(Sender: TObject); 
var 
  ListItem          : TListItem; 
begin 
  ListItem := ListViewCastle.Selected; 
  if ListItem = nil then 
    exit; 
  CurCastle := TUserCastle(ListItem.SubItems.Objects[0]); 
 
  RefCastleInfo(); 
end; 
 
procedure TfrmCastleManage.ButtonRefreshClick(Sender: TObject); 
begin 
  RefCastleInfo(); 
end; 
 
procedure TfrmCastleManage.EditCastleNameChange(Sender: TObject); 
begin 
   ButtonCastleSave.Enabled:=True; 
end; 
 
procedure TfrmCastleManage.ButtonCastleSaveClick(Sender: TObject); 
begin 
  if CurCastle = nil then 
    exit; 
 
 
  CurCastle.m_sName:= EditCastleName.Text ; 
  CurCastle.m_sHomeMap:= EditCastleHome.Text ; 
  CurCastle.m_sOwnGuild:= EditCastleGuild.Text ; 
  CurCastle.m_sPalaceMap:= EditCastleHuang.Text ; 
  CurCAstle.m_sSecretMap:=EditCastleMiDao.Text ; 
  CurCastle.m_nPalaceDoorX:= UpDown1.Position ; 
  CurCAstle.m_nPalaceDoorY:= UpDown2.Position; 
  ButtonCastleSave.Enabled:=True; 
 
end; 
 
procedure TfrmCastleManage.Button2Click(Sender: TObject); 
begin 
 if ListViewWar.ItemIndex>=0 then 
 Begin 
    FormCastleAttackEdit.Open(pTAttackerInfo(CurCastle.m_AttackWarList.Items[ListViewWar.ItemIndex]),True); 
    RefCastleInfo; 
 End; 
end; 
 
procedure TfrmCastleManage.Button1Click(Sender: TObject); 
var 
   info:pTAttackerInfo; 
begin 
    New(Info); 
    FormCastleAttackEdit.Open(info,False); 
    if info.sGuildName<>'' then 
        CurCastle.m_AttackWarList.Add(Info); 
    RefCastleInfo; 
 
end; 
 
procedure TfrmCastleManage.Button3Click(Sender: TObject); 
var 
   info:pTAttackerInfo; 
begin 
    if ListViewWar.ItemIndex>=0 then 
    Begin 
      Info:=pTAttackerInfo(CurCastle.m_AttackWarList.Items[ListViewWar.ItemIndex]); 
      DisPose(Info); 
      CurCastle.m_AttackWarList.Delete(ListViewWar.ItemIndex); 
      RefCastleInfo; 
    End; 
end; 
 
end.