📄 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;
Label1: TLabel;
Label3: TLabel;
EditTotalGold: TSpinEdit;
EditTodayIncome: TSpinEdit;
Label7: TLabel;
EditTechLevel: TSpinEdit;
Label8: TLabel;
EditPower: TSpinEdit;
TabSheet3: TTabSheet;
GroupBox5: TGroupBox;
ListViewGuard: TListView;
ButtonRefresh: TButton;
TabSheet4: TTabSheet;
Button3: TButton;
Button1: TButton;
Button2: TButton;
ListViewWar: TListView;
ButtonCastleSave: TButton;
GroupBox4: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
EditCastleName: TEdit;
EditCastleGuild: TEdit;
EditCastleHome: TEdit;
EditCastleHomex: TEdit;
EditCastleHuang: TEdit;
EditCastleMiDao: TEdit;
UpDown1: TUpDown;
UpDown2: TUpDown;
EditCastleHomey: TEdit;
procedure ListViewCastleClick(Sender: TObject);
procedure ButtonRefreshClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ButtonCastleSaveClick(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.Button1Click(Sender: TObject);
var
info:pTAttackerInfo;
i:integer;
begin
if ListViewCastle.Selected=nil then exit;
New(Info);
formcastleAttackedit.CheckBox1.Checked:=False;//还原申请所有行会
FormCastleAttackEdit.Open(info,False);
if formcastleAttackedit.CheckBox1.Checked then
Begin
CurCastle.m_AttackWarList.Clear;//如果是申请所有行会先删除所有申请的列表
for i:=0 to formcastleAttackedit.ListBox1.Items.Count-1 do //循环加入所有行会
begin
Info^.sGuildName:= formcastleAttackedit.ListBox1.Items.Strings[i];
Info^.AttackDate:=formcastleAttackedit.DateTimePicker1.Date;
CurCastle.m_AttackWarList.Add(Info); //加入到攻城列表
RefCastleInfo;
New(Info);
end
End
else
if info.sGuildName<>'' then
begin
CurCastle.m_AttackWarList.Add(Info); //加入到攻城列表
RefCastleInfo;
end;
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.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;
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;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -