📄 guild.pas
字号:
unit Guild;
interface
uses
Windows, SysUtils, Classes, IniFiles, ObjBase;
type
TGuildRank = record
nRankNo: Integer;
sRankName: string;
MemberList: TStringList;
end;
pTGuildRank = ^TGuildRank;
TWarGuild = record
Guild: TObject;
dwWarTick: LongWord;
dwWarTime: LongWord;
end;
pTWarGuild = ^TWarGuild;
TGUild = class
sGuildName: string;
NoticeList: TStringList;
GuildWarList: TStringList;
GuildAllList: TStringList;
m_RankList: TList; // 职位列表
nContestPoint: Integer;
boTeamFight: Boolean;
// MatchPoint :Integer;
TeamFightDeadList: TStringList;
m_boEnableAuthAlly: Boolean;
dwSaveTick: LongWord;
boChanged: Boolean;
m_DynamicVarList: TList;
private
m_Config: TIniFile;
m_nBuildPoint: Integer; //建筑度
m_nAurae: Integer; //人气度
m_nStability: Integer; //安定度
m_nFlourishing: Integer; //繁荣度
m_nChiefItemCount: Integer; //行会领取装备数量
function SetGuildInfo(sChief: string): Boolean;
procedure ClearRank();
procedure SaveGuildFile(sFileName: string);
procedure SaveGuildConfig(sFileName: string);
function GetMemberCount(): Integer;
function GetMemgerIsFull(): Boolean;
procedure SetAuraePoint(nPoint: Integer);
procedure SetBuildPoint(nPoint: Integer);
procedure SetStabilityPoint(nPoint: Integer);
procedure SetFlourishPoint(nPoint: Integer);
procedure SetChiefItemCount(nPoint: Integer);
public
constructor Create(sName: string);
destructor Destroy; override;
procedure SaveGuildInfoFile();
function LoadGuild(): Boolean;
function LoadGuildFile(sGuildFileName: string): Boolean;
function LoadGuildConfig(sGuildFileName: string): Boolean;
procedure UpdateGuildFile;
procedure CheckSaveGuildFile;
function IsMember(sName: string): Boolean;
function IsAllyGuild(Guild: TGUild): Boolean;
function IsWarGuild(Guild: TGUild): Boolean;
function DelAllyGuild(Guild: TGUild): Boolean;
procedure TeamFightWhoDead(sName: string);
procedure TeamFightWhoWinPoint(sName: string; nPoint: Integer);
procedure SendGuildMsg(sMsg: string);
procedure RefMemberName();
function GetRankName(PlayObject: TPlayObject; var nRankNo: Integer): string;
function DelMember(sHumName: string): Boolean;
function UpdateRank(sRankData: string): Integer;
function CancelGuld(sHumName: string): Boolean;
function IsNotWarGuild(Guild: TGUild): Boolean;
function AllyGuild(Guild: TGUild): Boolean;
function AddMember(PlayObject: TPlayObject): Boolean;
procedure DelHumanObj(PlayObject: TPlayObject);
function GetChiefName(): string;
procedure BackupGuildFile();
procedure sub_499B4C(Guild: TGUild);
function AddWarGuild(Guild: TGUild): pTWarGuild;
procedure StartTeamFight();
procedure EndTeamFight();
procedure AddTeamFightMember(sHumanName: string);
property Count: Integer read GetMemberCount;
property IsFull: Boolean read GetMemgerIsFull;
property nBuildPoint: Integer read m_nBuildPoint write SetBuildPoint;
property nAurae: Integer read m_nAurae write SetAuraePoint;
property nStability: Integer read m_nStability write SetStabilityPoint;
property nFlourishing: Integer read m_nFlourishing write SetFlourishPoint;
property nChiefItemCount: Integer read m_nChiefItemCount write SetChiefItemCount;
end;
TGuildManager = class
GuildList: TList;
private
public
constructor Create();
destructor Destroy; override;
procedure LoadGuildInfo();
procedure SaveGuildList();
function MemberOfGuild(sName: string): TGUild;
function AddGuild(sGuildName, sChief: string): Boolean;
function FindGuild(sGuildName: string): TGUild;
function DELGUILD(sGuildName: string): Boolean;
procedure ClearGuildInf();
procedure Run();
end;
implementation
uses M2Share, HUtil32, Grobal2;
{ TGuildManager }
function TGuildManager.AddGuild(sGuildName, sChief: string): Boolean;
var
Guild: TGUild;
begin
Result := False;
if CheckGuildName(sGuildName) and (FindGuild(sGuildName) = nil) then begin
Guild := TGUild.Create(sGuildName);
Guild.SetGuildInfo(sChief);
GuildList.Add(Guild);
SaveGuildList();
Result := True;
end;
end;
function TGuildManager.DELGUILD(sGuildName: string): Boolean;
var
I: Integer;
Guild: TGUild;
begin
Result := False;
for I := 0 to GuildList.Count - 1 do begin
Guild := TGUild(GuildList.Items[I]);
if CompareText(Guild.sGuildName, sGuildName) = 0 then begin
if Guild.m_RankList.Count > 1 then Break;
Guild.BackupGuildFile();
GuildList.Delete(I);
SaveGuildList();
Result := True;
Break;
end;
end;
end;
procedure TGuildManager.ClearGuildInf;
var
I: Integer;
begin
for I := 0 to GuildList.Count - 1 do begin
TGUild(GuildList.Items[I]).Free;
end;
GuildList.Clear;
end;
constructor TGuildManager.Create;
begin
GuildList := TList.Create;
end;
destructor TGuildManager.Destroy;
begin
GuildList.Free;
inherited;
end;
function TGuildManager.FindGuild(sGuildName: string): TGUild;
var
I: Integer;
begin
Result := nil;
for I := 0 to GuildList.Count - 1 do begin
if TGUild(GuildList.Items[I]).sGuildName = sGuildName then begin
Result := TGUild(GuildList.Items[I]);
Break;
end;
end;
end;
procedure TGuildManager.LoadGuildInfo;
var
LoadList: TStringList;
Guild: TGUild;
sGuildName: string;
I: Integer;
begin
if FileExists(g_Config.sGuildFile) then begin
LoadList := TStringList.Create;
LoadList.LoadFromFile(g_Config.sGuildFile);
for I := 0 to LoadList.Count - 1 do begin
sGuildName := Trim(LoadList.Strings[I]);
if sGuildName <> '' then begin
Guild := TGUild.Create(sGuildName);
GuildList.Add(Guild);
end;
end;
LoadList.Free;
for I := GuildList.Count - 1 downto 0 do begin
Guild := GuildList.Items[I];
if not Guild.LoadGuild() then begin
MainOutMessage(Guild.sGuildName + ' 读取出错!!!');
Guild.Free;
GuildList.Delete(I);
SaveGuildList();
end;
end;
MainOutMessage('已读取 ' + IntToStr(GuildList.Count) + '个行会信息...');
end else begin
MainOutMessage('行会信息文件未找到!!!');
end;
end;
function TGuildManager.MemberOfGuild(sName: string): TGUild;
var
I: Integer;
begin
Result := nil;
for I := 0 to GuildList.Count - 1 do begin
if TGUild(GuildList.Items[I]).IsMember(sName) then begin
Result := TGUild(GuildList.Items[I]);
Break;
end;
end;
end;
procedure TGuildManager.SaveGuildList;
var
I: Integer;
SaveList: TStringList;
begin
if nServerIndex <> 0 then Exit;
SaveList := TStringList.Create;
for I := 0 to GuildList.Count - 1 do begin
SaveList.Add(TGUild(GuildList.Items[I]).sGuildName);
end; // for
try
SaveList.SaveToFile(g_Config.sGuildFile);
except
MainOutMessage('行会信息保存失败!!!');
end;
SaveList.Free;
end;
procedure TGuildManager.Run;
var
I: Integer;
II: Integer;
Guild: TGUild;
boChanged: Boolean;
WarGuild: pTWarGuild;
begin
for I := 0 to GuildList.Count - 1 do begin
Guild := TGUild(GuildList.Items[I]);
boChanged := False;
for II := Guild.GuildWarList.Count - 1 downto 0 do begin
WarGuild := pTWarGuild(Guild.GuildWarList.Objects[II]);
if (GetTickCount - WarGuild.dwWarTick) > WarGuild.dwWarTime then begin
Guild.sub_499B4C(TGUild(WarGuild.Guild));
Guild.GuildWarList.Delete(II);
Dispose(WarGuild);
boChanged := True;
end;
end;
if boChanged then begin
Guild.UpdateGuildFile();
end;
Guild.CheckSaveGuildFile;
end;
end;
{ TGuild }
procedure TGUild.ClearRank;
var
I: Integer;
GuildRank: pTGuildRank;
begin
for I := 0 to m_RankList.Count - 1 do begin
GuildRank := m_RankList.Items[I];
GuildRank.MemberList.Free;
Dispose(GuildRank);
end; // for
m_RankList.Clear;
end;
constructor TGUild.Create(sName: string);
var
sFileName: string;
begin
sGuildName := sName;
NoticeList := TStringList.Create;
GuildWarList := TStringList.Create;
GuildAllList := TStringList.Create;
m_RankList := TList.Create;
TeamFightDeadList := TStringList.Create;
dwSaveTick := 0;
boChanged := False;
nContestPoint := 0;
boTeamFight := False;
m_boEnableAuthAlly := False;
sFileName := g_Config.sGuildDir + sName + '.ini';
m_Config := TIniFile.Create(sFileName);
if not FileExists(sFileName) then begin
m_Config.WriteString('Guild', 'GuildName', sName);
end;
m_nBuildPoint := 0;
m_nAurae := 0;
m_nStability := 0;
m_nFlourishing := 0;
m_nChiefItemCount := 0;
m_DynamicVarList := TList.Create;
end;
function TGUild.DelAllyGuild(Guild: TGUild): Boolean;
var
I: Integer;
AllyGuild: TGUild;
begin
Result := False;
for I := 0 to GuildAllList.Count - 1 do begin
AllyGuild := TGUild(GuildAllList.Objects[I]);
if AllyGuild = Guild then begin
GuildAllList.Delete(I);
Result := True;
Break;
end;
end; // for
SaveGuildInfoFile();
end;
destructor TGUild.Destroy;
var
I: Integer;
begin
NoticeList.Free;
GuildWarList.Free;
GuildAllList.Free;
ClearRank();
m_RankList.Free;
TeamFightDeadList.Free;
m_Config.Free;
for I := 0 to m_DynamicVarList.Count - 1 do begin
Dispose(pTDynamicVar(m_DynamicVarList.Items[I]));
end;
m_DynamicVarList.Free;
inherited;
end;
function TGUild.IsAllyGuild(Guild: TGUild): Boolean;
var
I: Integer;
AllyGuild: TGUild;
begin
Result := False;
for I := 0 to GuildAllList.Count - 1 do begin
AllyGuild := TGUild(GuildAllList.Objects[I]);
if AllyGuild = Guild then begin
Result := True;
Break;
end;
end;
end;
function TGUild.IsMember(sName: string): Boolean;
var
I, II: Integer;
GuildRank: pTGuildRank;
begin
Result := False;
for I := 0 to m_RankList.Count - 1 do begin
GuildRank := m_RankList.Items[I];
for II := 0 to GuildRank.MemberList.Count - 1 do begin
if GuildRank.MemberList.Strings[II] = sName then begin
Result := True;
Exit;
end;
end;
end;
end;
function TGUild.IsWarGuild(Guild: TGUild): Boolean;
var
I: Integer;
begin
Result := False;
for I := 0 to GuildWarList.Count - 1 do begin
if pTWarGuild(GuildWarList.Objects[I]).Guild = Guild then begin
Result := True;
Break;
end;
end; // for
end;
function TGUild.LoadGuild(): Boolean;
var
sFileName: string;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -