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

📄 guild.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    g_GuildManager[DbIndex mod 2].Query.close;
    g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
    g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
    g_GuildManager[DbIndex mod 2].Query.ExecSQL;
  finally
  End;
end;

destructor TGUild.Destroy;                                  //00497C08
var
  i                                     : Integer;
begin
  NoticeList.Free;
  m_GuildWarList.Free;
  GuildAllList.Free;
  ClearRank();
  m_RankList.Free;
  TeamFightDeadList.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 m_GuildWarList.Count - 1 do
  begin
    if pTWarGuild(m_GuildWarList.Objects[i]).Guild = Guild then
    begin
      Result := True;
      break;
    end;
  end;                                                      // for
end;



procedure TGUild.RefMemberName;                             //00498F60
var
  i, ii                                 : Integer;
  GuildRank                             : pTGuildRank;
  BaseObject                            : TBaseObject;
begin
  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
      BaseObject := TBaseObject(GuildRank.MemberList.Objects[ii]);
      if BaseObject <> nil then
        BaseObject.RefShowName;
    end;
  end;
end;




procedure TGUild.SendGuildMsg(sMsg: string);                //00498FF0
var
  i                                     : Integer;
  ii                                    : Integer;
  GuildRank                             : pTGuildRank;
  BaseObject                            : TBaseObject;
  nCheckCode                            : Integer;
begin
  nCheckCode := 0;
  try
    if g_Config.boShowPreFixMsg then
      sMsg := g_Config.sGuildMsgPreFix + sMsg;
    //if RankList = nil then exit;
    nCheckCode := 1;
    for i := 0 to m_RankList.Count - 1 do
    begin
      GuildRank := m_RankList.Items[i];
      nCheckCode := 2;
      //if GuildRank.MemberList = nil then Continue;
      for ii := 0 to GuildRank.MemberList.Count - 1 do
      begin
        nCheckCode := 3;
        BaseObject := TBaseObject(GuildRank.MemberList.Objects[ii]);
        if BaseObject = nil then
          Continue;
        nCheckCode := 4;
        if BaseObject.m_boBanGuildChat then
        begin
          nCheckCode := 5;
          BaseObject.SendMsg(BaseObject, RM_GUILDMESSAGE, 0,
            g_Config.btGuildMsgFColor, g_Config.btGuildMsgBColor, 0, sMsg);
          nCheckCode := 6;
        end;
      end;
    end;
    (*
    TGuild.SendGuildMsg CheckCode: 5 GuildName = 〖統治〗 Msg = 〖行会〗釢fěη﹖: 换的玩撒
  2004-12-2 15:45:48 Access violation at address 0041FD64 in module 'M2Server.exe'. Read of address 00000008
    *);
  except
    on E: Exception do
    begin
      MainOutMessage('[Exceptiion] TGuild.SendGuildMsg CheckCode: ' +
        IntToStr(nCheckCode) + ' GuildName = ' + sGuildName + ' Msg = ' + sMsg);
          {$IF SHowErr = 1}
           MainOutMessage(E.Message);
          {$IFEND}
    end;
  end;
end;

function TGUild.SetGuildInfo(sChief: string): Boolean;      //00498984
var
  GuildRank                             : pTGuildRank;
  i                                     : Integer;
  sqlStr                                : String;
begin
  if m_RankList.Count = 0 then
  begin
    New(GuildRank);
    GuildRank.nRankNo := 1;
    GuildRank.sRankName := g_Config.sGuildChief;
    GuildRank.MemberList := TStringList.Create;
    GuildRank.MemberList.Add(sChief);
    m_RankList.Add(GuildRank);

    saveRank;
     Sqlstr:='Insert into D_GuildMember (charname,GuildName,GuildRankID) values('+''''+sChief+''''+','+''''+sGuildName+''''+',1)';
  try
     g_GuildManager[DbIndex mod 2].Query.close;
     g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
      g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
      g_GuildManager[DbIndex mod 2].Query.ExecSQL;

  finally
  End;
  end;
  Result := True;
end;

function TGUild.GetRankName(PlayObject: TPlayObject; var nRankNo: Integer):
  string;                                                   //004987F0
var
  i, ii                                 : Integer;
  GuildRank                             : pTGuildRank;
begin
  Result := '';
  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] = PlayObject.m_sCharName then
      begin
        GuildRank.MemberList.Objects[ii] := PlayObject;
        nRankNo := GuildRank.nRankNo;
        Result := GuildRank.sRankName;
        //PlayObject.RefShowName();
        PlayObject.SendMsg(PlayObject, RM_CHANGEGUILDNAME, 0, 0, 0, 0, '');
        exit;
      end;
    end;                                                    // for
  end;
end;


function TGUild.GetChiefName: string;                       //00498928
var
  GuildRank                             : pTGuildRank;
begin
  Result := '';
  if m_RankList.Count <= 0 then
    exit;
  GuildRank := m_RankList.Items[0];
  if GuildRank.MemberList.Count <= 0 then
    exit;
  Result := GuildRank.MemberList.Strings[0];
end;

procedure TGUild.CheckSaveGuildFile();
begin
  if boChanged and ((GetTickCount - dwSaveTick) > 30 * 1000) then
  begin
    boChanged := False;
    SaveGuildInfoFile();
  end;
end;

procedure TGUild.DelHumanObj(PlayObject: TPlayObject);      //00498ECC
var
  i, ii                                 : Integer;
  GuildRank                             : pTGuildRank;
begin
  CheckSaveGuildFile();
  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 TPlayObject(GuildRank.MemberList.Objects[ii]) = PlayObject then
      begin
        GuildRank.MemberList.Objects[ii] := nil;
        exit;
      end;
    end;
  end;
end;

procedure TGUild.TeamFightWhoDead(sName: string);           //00499EC8
var
  i, n10                                : Integer;
begin
  if not boTeamFight then
    exit;
  for i := 0 to TeamFightDeadList.Count - 1 do
  begin
    if TeamFightDeadList.Strings[i] = sName then
    begin
      n10 := Integer(TeamFightDeadList.Objects[i]);
      TeamFightDeadList.Objects[i] := TObject(MakeLong(LoWord(n10) + 1,
        HiWord(n10)));
    end;
  end;
end;

procedure TGUild.TeamFightWhoWinPoint(sName: string; nPoint: Integer); //00499DE4
var
  i, n14                                : Integer;
begin
  if not boTeamFight then
    exit;
  Inc(m_nContestPoint, nPoint);
  for i := 0 to TeamFightDeadList.Count - 1 do
  begin
    if TeamFightDeadList.Strings[i] = sName then
    begin
      n14 := Integer(TeamFightDeadList.Objects[i]);
      TeamFightDeadList.Objects[i] := TObject(MakeLong(LoWord(n14), HiWord(n14)
        + nPoint));
    end;
  end;
end;

procedure TGUild.UpdateGuildFile();
begin
  boChanged := True;
  dwSaveTick := GetTickCount();
  SaveGuildInfoFile();
end;

procedure TGUild.BackupGuildFile;                           //00498AFC
var
  i, ii                                 : Integer;
  PlayObject                            : TPlayObject;
  GuildRank                             : pTGuildRank;
begin

  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
      PlayObject := TPlayObject(GuildRank.MemberList.Objects[ii]);
      if PlayObject <> nil then
      begin
        PlayObject.m_MyGuild := nil;
        PlayObject.RefRankInfo(0, '');
        PlayObject.RefShowName();                           //10/31
      end;
    end;
    GuildRank.MemberList.Free;
    DisPose(GuildRank);
  end;
  m_RankList.Clear;
  NoticeList.Clear;
  for i := 0 to m_GuildWarList.Count - 1 do
  begin
    DisPose(pTWarGuild(m_GuildWarList.Objects[i]));
  end;
  m_GuildWarList.Clear;
  GuildAllList.Clear;
  SaveGuildInfoFile();
end;

function TGUild.AddMember(PlayObject: TPlayObject): Boolean; //00498CA8
var
  i                                     : Integer;
  GuildRank                             : pTGuildRank;
  GuildRank18                           : pTGuildRank;
  SqlStr:String;
begin
  Result := False;
  if IsFull then Exit;
  GuildRank18 := nil;
  for i := 0 to m_RankList.Count - 1 do
  begin
    GuildRank := m_RankList.Items[i];
    if GuildRank.nRankNo = 99 then
    begin
      GuildRank18 := GuildRank;
      break;
    end;
  end;
  if GuildRank18 = nil then
  begin
    New(GuildRank18);
    GuildRank18.nRankNo := 99;
    GuildRank18.sRankName := g_Config.sGuildMemberRank;
    GuildRank18.MemberList := TStringList.Create;
    m_RankList.Add(GuildRank18);
  end;
  GuildRank18.MemberList.AddObject(PlayObject.m_sCharName, TObject(PlayObject));
  Sqlstr:='Insert into D_GuildMember (charname,GuildName,GuildRankID) values('+''''+PlayObject.m_sCharName+''''+','+''''+sGuildName+''''+','+Inttostr(GuildRank18.nRankNo)+')';
  try
      g_GuildManager[DbIndex mod 2].Query.close;
      g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
      g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
      g_GuildManager[DbIndex mod 2].Query.ExecSQL;

  finally
  End;
  Result := True;
end;

function TGUild.DelMember(sHumName: string): Boolean;       //00498DCC
var
  i, ii                                 : Integer;
  GuildRank                             : pTGuildRank;
  SqlStr:String;
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] = sHumName then
      begin
        GuildRank.MemberList.Delete(ii);
        Result := True;
        break;
      end;
    end;
    if Result then
      break;
  end;
  if Result then
  Begin
   Sqlstr:='Delete FROM D_GuildMember where (charname='+''''+sHumName+''''+')'  ;
  try
      g_GuildManager[DbIndex mod 2].Query.close;
      g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
      g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
      g_GuildManager[DbIndex mod 2].Query.ExecSQL;

  finally
  End;

  End;  

end;

function TGUild.CancelGuld(sHumName: string): Boolean;      //00498A50
var
  GuildRank                             : pTGuildRank;
begin
  Result := False;
  if m_RankList.Count <> 1 then
    exit;
  GuildRank := m_RankList.Items[0];
  if GuildRank.MemberList.Count <> 1 then
    exit;
  if GuildRank.MemberList.Strings[0] = sHumName then
  begin
    BackupGuildFile();
    Result := True;
  end;
end;

function TGUild.UpdateRank(sRankData: string): Integer;     //00499140

  procedure ClearRankList(var RankList: TmyList);             //004990DC
  var
    i                                   : Integer;
    GuildRank                           : pTGuildRank;
  begin
    for i := 0 to RankList.Count - 1 do
    begin
      GuildRank := RankList.Items[i];
      GuildRank.MemberList.Free;
      DisPose(GuildRank);
    end;
    RankList.Free;
  end;
var
  i                                     : Integer;
  ii                                    : Integer;
  III                                   : Integer;
  GuildRankList                         : TMyList;
  GuildRank                             : pTGuildRank;
  NewGuildRank                          : pTGuildRank;
  sRankInfo                             : string;
  sRankNo                               : string;
  sRankName                             : string;
  sMemberName                           : string;
  n28                                   : Integer;
  n2C                                   : Integer;
  n30                                   : Integer;
  boCheckChange                         : Boolean;
  PlayObject                            : TPlayObject;
begin
  Result := -1;
  GuildRankList := TMyList.create;
  GuildRank := nil;
  while (True) do
  begin
    if sRankData = '' then
      break;
    sRankData := GetValidStr3(sRankData, sRankInfo, [#$0D]);
    sRankInfo := Trim(sRankInfo);
    if sRankInfo = '' then
      Continue;
    if sRankInfo[1] = '#' then
    begin                                                   //取得职称的名称
      sRankInfo := Copy(sRankInfo, 2, length(sRankInfo) - 1);
      sRankInfo := GetValidStr3(sRankInfo, sRankNo, [' ', '<']);
      sRankInfo := GetValidStr3(sRankInfo, sRankName, ['<', '>']);
      if length(sRankName) > 15 then //Jacky 限制职倍的长度
        sRankName := _Copy(sRankName, 1, 7);
      if GuildRank <> nil then
      begin
        GuildRankList.Add(GuildRank);
      end;
      New(GuildRank);
      if GuildRank<>nil then
      Begin
          GuildRank.nRankNo := Str_ToInt(sRankNo, 99);
          GuildRank.sRankName := Trim(sRankName);
          GuildRank.MemberList := TStringList.Create;
      ENd;
      Continue;
    end;

    if GuildRank = nil then
      Continue;
    i := 0;
    while (True) do
    begin //将成员名称加入职称表里

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -