⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guild.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 3 页
字号:

//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 + -