guild.pas
来自「原版翎风(LF)引擎(M2)源码(Delphi)」· PAS 代码 · 共 1,320 行 · 第 1/3 页
PAS
1,320 行
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; //0x04
NoticeList: TStringList; //0x08
GuildWarList: TStringList; //0x0C
GuildAllList: TStringList; //0x10
m_RankList: TList; //0x14 职位列表
nContestPoint: Integer; //0x18
boTeamFight: Boolean; //0x1C;
// MatchPoint :Integer;
TeamFightDeadList: TStringList; //0x20
m_boEnableAuthAlly: Boolean; //0x24
dwSaveTick: LongWord; //0x28
boChanged: Boolean; //0x2C;
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; //0x4
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; //0049A4A4
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; //0049A550
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; //0049A02C
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; //0049A36C
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; //0049A078
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;
//0049A408
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; //0049A260
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; //0049A61C
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; //00497C78
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); //00497B04
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; //00499CEC
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; //00497C08
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; //00499BD8
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; //00498714
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; //00499924
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; //00497CE4
var
sFileName: string;
begin
sFileName := sGuildName + '.txt';
Result := LoadGuildFile(sFileName);
LoadGuildConfig(sGuildName + '.ini');
end;
function TGUild.LoadGuildConfig(sGuildFileName: string): Boolean;
begin
m_nBuildPoint := m_Config.ReadInteger('Guild', 'BuildPoint', m_nBuildPoint);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?