📄 guild.pas
字号:
//DB 都没搞懂 我要了也没用 王清 QQ286251099 2008.3.23
unit Guild;
interface
uses
Windows, SysUtils, Classes, IniFiles,ADODB, ObjBase,mylist;
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
m_GuildWarList: TStringList; //0x0C
GuildAllList: TStringList; //0x10
m_RankList: TMyList; //0x14 职位列表
m_nContestPoint: Integer; //0x18
boTeamFight: Boolean; //0x1C;
// MatchPoint :Integer;
TeamFightDeadList: TStringList; //0x20
m_boEnableAuthAlly: Boolean; //0x24
dwSaveTick: LongWord; //0x28
boChanged: Boolean; //0x2C;
m_DynamicVarList: TMyList;
DBIndex:Integer;
private
m_nBuildPoint: Integer; //建筑度
m_nAurae: Integer; //人气度
m_nStability: Integer; //安定度
m_nFlourishing: Integer; //繁荣度
m_nChiefItemCount: Integer; //行会领取装备数量
function SetGuildInfo(sChief: string): Boolean;
procedure ClearRank();
Procedure saveRank();
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();
Procedure UpdateCommite(Guild: TGUild;nType:Integer;stime:String;IsAdd: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: TMyList; //0x4
private
public
DBIndex:Integer;
Query: TADOQuery;
constructor Create();
destructor Destroy; override;
procedure LoadGuildInfo();
procedure AddGuildToSql(GuildName:String);
Procedure DelGuildToSql(GuildName:String);
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.DBIndex:=DBindex;
AddGuildToSql(sGuildName);
Guild.SetGuildInfo(sChief);
GuildList.Add(Guild);
Guild.RefMemberName;
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();
DelGuildToSql(sGuildName);
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 := TMyList.create;
Query := TADOQuery.Create(nil);
end;
destructor TGuildManager.Destroy;
begin
GuildList.Free;
Query.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 ,oGuild : TGUild;
sGuildName,charname : string;
i ,ii : Integer;
SqlStr : String;
str,RankNAme,sRankNO : String;
RankNo : Integer;
GuildWar : pTWarGuild;
GuildRank : pTGuildRank;
begin
SqlStr:='Select * from D_Guild';
try
Query.SQL.Clear;
Query.SQL.Add(SQLStr);
try
Query.Open;
for i:=0 to Query.RecordCount-1 do
Begin
sGuildName := Trim(Query.FieldByName('GuildName').AsString);
if sGuildName <> '' then
begin
Guild := TGUild.Create(sGuildName);
Guild.nBuildPoint:= Query.FieldByName('BuildPoint').AsInteger;
Guild.nAurae:=Query.FieldByName('Aurae').AsInteger;
Guild.nStability:=Query.FieldByName('Stability').AsInteger;
Guild.nFlourishing:=Query.FieldByName('Flourishing').AsInteger;
Guild.nChiefItemCount:=Query.FieldByName('ChiefItemCount').AsInteger;
Guild.NoticeList.Text:=Query.fieldbyName('Notice').AsString;
Guild.DBIndex:=DBIndex;
Str:=Query.fieldbyName('GuildRankName').AsString;
//读取职位信息
str:=ArrestStringEx(str,'#','!',RankNAme);
while RankName<>'' do
Begin
sRankNo := GetValidStr3(RankNAme, RankNAme, ['/']);
RankNo:=Str_ToInt(sRankNo, -1);
if RankNo>=0 then
begin
New(GuildRank);
GuildRank.nRankNo := RankNo;
GuildRank.sRankName := RankNAme;
GuildRank.MemberList := TStringList.Create;
Guild.m_RankList.Add(GuildRank);
end;
str:=ArrestStringEx(str,'#','!',RankName);
End;
GuildList.Add(Guild);
end;
Query.Next;
End;
finally
Query.Close;
end;
SqlStr:='Select * from D_Guild_COMMUNITY';
Query.SQL.Clear;
Query.SQL.Add(SQLStr);
Query.Open;
try
for i:=0 to Query.RecordCount-1 do
Begin
sGuildName := Trim(Query.FieldByName('GuildName').AsString);
if sGuildName <> '' then
Begin
Guild:=FindGuild(sGuildName);
sGuildName := Trim(Query.FieldByName('GuildNameof').AsString);
if Guild<>nil then
Begin
//联盟行会
if Query.FieldByName('nType').AsInteger=0 then
Begin
oGuild := FindGuild(sGuildName);
if oGuild <> nil then
Guild.GuildAllList.AddObject(sGuildName, oGuild);
End
else
Begin
//敌对行会
oGuild := FindGuild(sGuildName);
if oGuild <> nil then
Begin
New(GuildWar);
GuildWar.Guild :=oGuild;
GuildWar.dwWarTick:=GetTickCount();
GuildWar.dwWarTime:=Query.fieldByName('nTime').AsInteger;
Guild.m_GuildWarList.AddObject(TGUild(GuildWar.Guild).sGuildName,
TObject(GuildWar));
End;
End;
// for
End;
Query.Next;
End;
End
finally
QUery.Close;
End;
SqlStr:='Select * from D_GuildMember order by GuildName,id';
Query.SQL.Clear;
Query.SQL.Add(SQLStr);
Try
Query.Open;
Guild:=nil;
for i:=0 to Query.RecordCount-1 do
Begin
sGuildName := Trim(Query.FieldByName('GuildName').AsString);
CharName := Trim(Query.FieldByName('CharName').AsString);
RankNo:=Query.FieldByName('GuildRankID').AsInteger;
if charName<>'' then
Begin
if (Guild=nil) or(Guild.sGuildName<>sGuildName) then
Guild:=FindGuild(sGuildName);
if Guild<>nil then
Begin
for ii:=0 to Guild.m_RankList.Count-1 do
Begin
GuildRank:=pTGuildRank(Guild.m_RankList[ii]);
if (GuildRank<>nil)and(GuildRank.nRankNo=RankNo) then
Begin
GuildRank.MemberList.Add(charName);
Break;
End;
End;
End;
End;
Query.Next;
End;
Finally
Query.Close;
End;
finally
End;
end;
function TGuildManager.MemberOfGuild(sName: string): TGUild;
//0049A408
var
i : Integer;
Guild : TGUild;
begin
Result := nil;
for i := 0 to GuildList.Count - 1 do
begin
Guild:=TGUild(GuildList.Items[i]);
if (Guild<>nil)and Guild.IsMember(sName) then
begin
Result := Guild;
break;
end;
end;
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.m_GuildWarList.Count - 1 downto 0 do
begin
WarGuild := pTWarGuild(Guild.m_GuildWarList.Objects[ii]);
if (GetTickCount - WarGuild.dwWarTick) > WarGuild.dwWarTime then
begin
Guild.sub_499B4C(TGUild(WarGuild.Guild));
Guild.m_GuildWarList.Delete(ii);
Guild.UpdateCommite(TGUild(WarGuild.Guild),1,'0',False);
DisPose(WarGuild);
boChanged := True;
end;
end;
if boChanged then
begin
Guild.UpdateGuildFile();
end;
Guild.CheckSaveGuildFile;
end;
end;
procedure TGuildManager.AddGuildToSql(GuildName: String);
var
sqlstr:String;
begin
try
SqlStr:='Insert into D_Guild (GuildName) values ('+''''+GuildName+''''+')';
Query.SQL.Clear;
Query.SQL.Add(SQLStr);
Query.ExecSQL;
finally
End;
end;
procedure TGuildManager.DelGuildToSql(GuildName: String);
var
sqlstr:String;
begin
try
SqlStr:='Delete FROM D_Guild where GuildName='+''''+GuildName+'''';
Query.SQL.Clear;
Query.SQL.Add(SQLStr);
Query.ExecSQL;
SqlStr:='Delete FROM D_GuildMember where GuildName='+''''+GuildName+'''';
Query.SQL.Clear;
Query.SQL.Add(SQLStr);
Query.ExecSQL;
SqlStr:='Delete FROM D_Guild_COMMUNITY where (GuildName='+''''+GuildName+''''+') or (GuildNameof='+''''+GuildName+''''+')';
Query.SQL.Clear;
Query.SQL.Add(SQLStr);
Query.ExecSQL;
finally
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;
m_GuildWarList := TStringList.Create;
GuildAllList := TStringList.Create;
m_RankList := TMyList.create;
TeamFightDeadList := TStringList.Create;
dwSaveTick := 0;
boChanged := False;
m_nContestPoint := 0;
boTeamFight := False;
m_boEnableAuthAlly := False;
m_nBuildPoint := 0;
m_nAurae := 0;
m_nStability := 0;
m_nFlourishing := 0;
m_nChiefItemCount := 0;
m_DynamicVarList := TMyList.create;
end;
function TGUild.DelAllyGuild(Guild: TGUild): Boolean; //00499CEC
var
i : Integer;
AllyGuild : TGUild;
SqlStr : String;
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
try
SqlStr:='Delete FROM D_Guild_COMMUNITY where (GuildNameof='+''''+Guild.sGuildName+''''+')and(GuildName='+''''+ sGuildName+''''+')';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -