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

📄 guild.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      if sRankInfo = '' then
        break;
      sRankInfo := GetValidStr3(sRankInfo, sMemberName, [' ', ',']);
      if sMemberName <> '' then
        GuildRank.MemberList.Add(sMemberName);
      Inc(i);
      if i >= 10 then
        break;
    end;
  end;

  if GuildRank <> nil then
  begin
    GuildRankList.Add(GuildRank);
  end;

  //0049931F  校验成员列表是否有改变,如果未修改则退出
  if m_RankList.Count = GuildRankList.Count then
  begin
    boCheckChange := True;
    for i := 0 to m_RankList.Count - 1 do
    begin
      GuildRank := m_RankList.Items[i];
      NewGuildRank := GuildRankList.Items[i];
      if (GuildRank.nRankNo = NewGuildRank.nRankNo) and
        (GuildRank.sRankName = NewGuildRank.sRankName) and
        (GuildRank.MemberList.Count = NewGuildRank.MemberList.Count) then
      begin
        for ii := 0 to GuildRank.MemberList.Count - 1 do
        begin
          if GuildRank.MemberList.Strings[ii] <>
            NewGuildRank.MemberList.Strings[ii] then
          begin
            boCheckChange := False; //如果有改变则将其置为FALSE
            break;
          end;
        end;
      end
      else
      begin
        boCheckChange := False;
        break;
      end;
    end;
    if boCheckChange then
    begin
      Result := -1;                                         //$FFFFFFFF
      ClearRankList(GuildRankList);
      exit;
    end;
  end;

  //0049943D 检查行会掌门职业是否为空
  Result := -2;                                             //$FFFFFFFE
  if (GuildRankList.Count > 0) then
  begin
    GuildRank := GuildRankList.Items[0];
    if GuildRank.nRankNo = 1 then
    begin
      if GuildRank.sRankName <> '' then
      begin
        Result := 0;
      end
      else
      begin
        Result := -3;                                       //$FFFFFFFD
      end;
    end;
  end;

  //检查行会掌门人是否在线(???)
  if Result = 0 then
  begin                                                     //0049947A
    GuildRank := GuildRankList.Items[0];
    if GuildRank.MemberList.Count <= 2 then
    begin
      n28 := GuildRank.MemberList.Count;
      for i := 0 to GuildRank.MemberList.Count - 1 do
      begin
        if UserEngine.GetPlayObject(GuildRank.MemberList.Strings[i]) = nil then
        begin
          Dec(n28);
          break;
        end;
      end;
      if n28 <= 0 then
        Result := -5;                                       //$FFFFFFFB
    end
    else
    begin
      Result := -4;                                         //$FFFFFFFC
    end;
  end;


  if Result = 0 then
  begin                                                     //00499517
    n2C := 0;
    n30 := 0;
    for i := 0 to m_RankList.Count - 1 do
    begin
      GuildRank := m_RankList.Items[i];
      boCheckChange := True;
      for ii := 0 to GuildRank.MemberList.Count - 1 do
      begin
        boCheckChange := False;
        sMemberName := GuildRank.MemberList.Strings[ii];
        Inc(n2C);
        for III := 0 to GuildRankList.Count - 1 do
        begin                                               //搜索新列表
          NewGuildRank := GuildRankList.Items[III];
          for n28 := 0 to NewGuildRank.MemberList.Count - 1 do
          begin
            if NewGuildRank.MemberList.Strings[n28] = sMemberName then
            begin
              boCheckChange := True;
              break;
            end;
          end;
          if boCheckChange then
            break;
        end;

        if not boCheckChange then
        begin //原列表中的人物名称是否在新的列表中
          Result := -6;                                     //$FFFFFFFA
          break;
        end;
      end;
      if not boCheckChange then
        break;
    end;

    //00499640
    for i := 0 to GuildRankList.Count - 1 do
    begin
      GuildRank := GuildRankList.Items[i];
      boCheckChange := True;
      for ii := 0 to GuildRank.MemberList.Count - 1 do
      begin
        boCheckChange := False;
        sMemberName := GuildRank.MemberList.Strings[ii];
        Inc(n30);
        for III := 0 to GuildRankList.Count - 1 do
        begin
          NewGuildRank := GuildRankList.Items[III];
          for n28 := 0 to NewGuildRank.MemberList.Count - 1 do
          begin
            if NewGuildRank.MemberList.Strings[n28] = sMemberName then
            begin
              boCheckChange := True;
              break;
            end;
          end;
          if boCheckChange then
            break;
        end;
        if not boCheckChange then
        begin
          Result := -6;                                     //$FFFFFFFA
          break;
        end;
      end;
      if not boCheckChange then
        break;
    end;
    if (Result = 0) and (n2C <> n30) then
    begin
      Result := -6;
    end;
  end;                                                      //0049976A

  if Result = 0 then
  begin //检查职位号是否重复及非法
    for i := 0 to GuildRankList.Count - 1 do
    begin
      n28 := pTGuildRank(GuildRankList.Items[i]).nRankNo;
      for III := i + 1 to GuildRankList.Count - 1 do
      begin
        if (pTGuildRank(GuildRankList.Items[III]).nRankNo = n28) or (n28 <= 0)
          or (n28 > 99) then
        begin
          Result := -7;                                     //$FFFFFFF9
          break;
        end;
      end;
      if Result <> 0 then
        break;
    end;
  end;                                                      //004997E9

  if Result = 0 then
  begin
    ClearRankList(m_RankList);
    m_RankList := GuildRankList;
    //更新在线人物职位表
    for i := 0 to m_RankList.Count - 1 do
    begin
      GuildRank := m_RankList.Items[i];
      for III := 0 to GuildRank.MemberList.Count - 1 do
      begin
        PlayObject :=
          UserEngine.GetPlayObject(GuildRank.MemberList.Strings[III]);
        if PlayObject <> nil then
        begin
          GuildRank.MemberList.Objects[III] := TObject(PlayObject);
          PlayObject.RefRankInfo(GuildRank.nRankNo, GuildRank.sRankName);
          PlayObject.RefShowName();                         //10/31
        end;
      end;
    end;
    UpdateGuildFile();
  end
  else
  begin                                                     //004998C3
    ClearRankList(GuildRankList);
  end;
end;

function TGUild.IsNotWarGuild(Guild: TGUild): Boolean;      //00499C98
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
      exit;
    end;
  end;
  Result := True;
end;

function TGUild.AllyGuild(Guild: TGUild): Boolean;          //00499C2C
var
  i                                     : Integer;
begin
  Result := False;
  for i := 0 to GuildAllList.Count - 1 do
  begin
    if GuildAllList.Objects[i] = Guild then
    begin
      exit;
    end;
  end;
  GuildAllList.AddObject(Guild.sGuildName, Guild);
  UpdateCommite(Guild,0,'0',True);
  Result := True;
end;

function TGUild.AddWarGuild(Guild: TGUild): pTWarGuild;
var
  i                                     : Integer;
  WarGuild                              : pTWarGuild;
begin
  Result := nil;
  if Guild <> nil then
  begin
    if not IsAllyGuild(Guild) then
    begin
      WarGuild := nil;
      for i := 0 to m_GuildWarList.Count - 1 do
      begin
        if pTWarGuild(m_GuildWarList.Objects[i]).Guild = Guild then
        begin
          WarGuild := pTWarGuild(m_GuildWarList.Objects[i]);
          WarGuild.dwWarTick := GetTickCount();
          WarGuild.dwWarTime := g_Config.dwGuildWarTime {10800000};
          SendGuildMsg('***' + Guild.sGuildName + '行会战争将持续三个小时。');
          break;
        end;
      end;
      if WarGuild = nil then
      begin
        New(WarGuild);
        if WarGuild<>nil then
        Begin
          WarGuild.Guild := Guild;
          WarGuild.dwWarTick := GetTickCount();
          WarGuild.dwWarTime := g_Config.dwGuildWarTime {10800000};
          m_GuildWarList.AddObject(Guild.sGuildName, TObject(WarGuild));
          SendGuildMsg('***' + Guild.sGuildName + '行会战争开始(三个小时)');
        End;
      end;
      Result := WarGuild;
    end;
  end;
  RefMemberName();
  if WarGuild<>nil then
    UpdateCommite(TGUild(WarGuild.Guild),1,Inttostr(WarGuild.dwWarTime),True);
//  UpdateGuildFile();

end;

procedure TGUild.sub_499B4C(Guild: TGUild);                 //00499B4C
begin
  SendGuildMsg('***' + Guild.sGuildName + '行会战争结束');
end;

function TGUild.GetMemberCount: Integer;
var
  i                                     : Integer;
  GuildRank                             : pTGuildRank;
begin
  Result := 0;
  for i := 0 to m_RankList.Count - 1 do
  begin
    GuildRank := m_RankList.Items[i];
    Inc(Result, GuildRank.MemberList.Count);
  end;
end;

function TGUild.GetMemgerIsFull: Boolean;
begin
  Result := False;
  if GetMemberCount >= g_Config.nGuildMemberMaxLimit then
  begin
    Result := True;
  end;
end;

procedure TGUild.StartTeamFight;
begin
  m_nContestPoint := 0;
  boTeamFight := True;
  TeamFightDeadList.Clear;
end;

procedure TGUild.EndTeamFight;
begin
  boTeamFight := False;
end;

procedure TGUild.AddTeamFightMember(sHumanName: string);
begin
  TeamFightDeadList.Add(sHumanName);
end;


procedure TGUild.SetAuraePoint(nPoint: Integer);
begin
  m_nAurae := nPoint;
  boChanged := True;
end;

procedure TGUild.SetBuildPoint(nPoint: Integer);
begin
  m_nBuildPoint := nPoint;
  boChanged := True;
end;

procedure TGUild.SetFlourishPoint(nPoint: Integer);
begin
  m_nFlourishing := nPoint;
  boChanged := True;
end;

procedure TGUild.SetStabilityPoint(nPoint: Integer);
begin
  m_nStability := nPoint;
  boChanged := True;
end;

procedure TGUild.SetChiefItemCount(nPoint: Integer);
begin
  m_nChiefItemCount := nPoint;
  boChanged := True;
end;

procedure TGUild.saveRank;
var
   i             : integer;
   GuildRank     : pTGuildRank;
   GuildRankName : String;
   SqlStr        : String;
begin
    GuildRankName:='';
    for i:=0 to m_RankList.Count-1 do
    Begin
      GuildRank :=  m_RankList.Items[i];
      if GuildRank<>nil then
      Begin
        GuildRankName:=GuildRankName+'#'+GuildRank.sRankName+'/'+Inttostr(GuildRank.nRankNo)+'!';
      End;
    End;
    try
      SqlStr:='UpDate   D_Guild set GuildRankName='+''''+GuildRankName+''''+' where GuildName='+''''+sGuildName+'''';
      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;

procedure TGUild.SaveGuildInfoFile;
var
   i,ii          : integer;
   GuildRank     : pTGuildRank;
   GuildRankName : String;
   SqlStr        : String;
   charname      : String;
   randid        : Integer;
begin
    GuildRankName:='';
    for i:=0 to m_RankList.Count-1 do
    Begin
      GuildRank :=  m_RankList.Items[i];
      if GuildRank<>nil then
      Begin
        GuildRankName:=GuildRankName+'#'+GuildRank.sRankName+'/'+Inttostr(GuildRank.nRankNo)+'!';
      End;
    End;
    try
      SqlStr:='UpDate   D_Guild set Buildpoint=:d1,Aurae=:d2,Stability=:d3,Flourishing=:d4,chiefItemCount=:d5,Notice=:d6,GuildRankName=:d7 where GuildName=:d8';
      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.Parameters.ParamByName('d1').Value:=nBuildPoint;
      g_GuildManager[dbindex mod 2].Query.Parameters.ParamByName('d2').Value:=nAurae;
      g_GuildManager[dbindex mod 2].Query.Parameters.ParamByName('d3').Value:=nStability;
      g_GuildManager[dbindex mod 2].Query.Parameters.ParamByName('d4').Value:=nFlourishing;
      g_GuildManager[dbindex mod 2].Query.Parameters.ParamByName('d5').Value:=nchiefItemCount;
      g_GuildManager[dbindex mod 2].Query.Parameters.ParamByName('d6').Value:=NoticeList.Text;
      g_GuildManager[dbindex mod 2].Query.Parameters.ParamByName('d7').Value:=GuildRankName;
      g_GuildManager[dbindex mod 2].Query.Parameters.ParamByName('d8').Value:= sGuildName;

      g_GuildManager[dbindex mod 2].Query.ExecSQL;

   finally
   End;
   for i := 0 to m_RankList.Count - 1 do
   begin
     GuildRank := m_RankList.Items[i];
     if GuildRank=nil then Continue;
     if GuildRank.MemberList=nil then Continue;
     randid :=Guildrank.nRankNo;
     for ii := 0 to GuildRank.MemberList.Count - 1 do
     begin
       charname:=GuildRank.MemberList[ii];
       g_GuildManager[dbindex mod 2].Query.close;
       g_GuildManager[dbindex mod 2].Query.SQL.Clear;
       g_GuildManager[dbindex mod 2].Query.SQL.Add('Select * from D_GuildMember where (charname='+''''+charname+''''+')');
       g_GuildManager[dbindex mod 2].Query.Active:=True;
       if g_GuildManager[dbindex mod 2].Query.RecordCount=0 then
           g_GuildManager[dbindex mod 2].Query.Append
       else
          g_GuildManager[dbindex mod 2].Query.Edit;

       g_GuildManager[dbindex mod 2].Query.FieldByName('CharName').AsString:=charname;
       g_GuildManager[dbindex mod 2].Query.FieldByName('GuildName').AsString:=sGuildName;
       g_GuildManager[dbindex mod 2].Query.FieldByName('GuildRankId').AsInteger:=randid;
       g_GuildManager[dbindex mod 2].Query.Post;



     end;
   end;
end;


procedure TGUild.UpdateCommite(Guild: TGUild; nType: Integer;stime:String;
  IsAdd: Boolean);
var
  sqlstr : string;
begin
  if Guild=nil then exit;
  if isadd then
  Begin

    SqlStr:='Insert into D_Guild_COMMUNITY (GuildName,GuildNameof,nType,ntime) values ('+''''+sGuildName+''''+','+''''+Guild.sGuildName+''''+','+inttostr(ntype)+','+stime+')';
  End
  else
    Sqlstr:='Delete FROM  D_Guild_COMMUNITY where (GuildName='+''''+sGuildName+''''+') and (GuildNameof='+''''+Guild.sGuildName+''''+')';
  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.

⌨️ 快捷键说明

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