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

📄 guild.pas

📁 传奇2...飘飘M2的源码.曾经是传奇"龙"版用得最好的M2程序.完整M2源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  end;
  GuildRank18.MemberList.AddObject(PlayObject.m_sCharName,TObject(PlayObject));
  UpdateGuildFile();
  Result:=True;
end;

function TGuild.DelMember(sHumName: String): Boolean;//00498DCC
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] = sHumName then begin
        GuildRank.MemberList.Delete(II);
        Result:=True;
        break;
      end;
    end;
    if Result then break;
  end;
  if Result then UpdateGuildFile;

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:TList);//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 :TList;
  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 := TList.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) > 30 then //Jacky 限制职倍的长度
        sRankName:=Copy(sRankName,1,30);
      if GuildRank <> nil then begin
        GuildRankList.Add(GuildRank);
      end;
      New(GuildRank);
      GuildRank.nRankNo    := Str_ToInt(sRankNo,99);
      GuildRank.sRankName  := Trim(sRankName);
      GuildRank.MemberList := TStringList.Create;
      Continue;
    end;
    
    if GuildRank = nil then Continue;
    I:=0;
    while (True) do begin //将成员名称加入职称表里
      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 GuildWarList.Count - 1 do begin
    if pTWarGuild(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);
  SaveGuildInfoFile();
  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 GuildWarList.Count - 1 do begin
        if pTWarGuild(GuildWarList.Objects[I]).Guild = Guild then begin
          WarGuild:=pTWarGuild(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);
        WarGuild.Guild:=Guild;
        WarGuild.dwWarTick:=GetTickCount();
        WarGuild.dwWarTime:=g_Config.dwGuildWarTime{10800000};
        GuildWarList.AddObject(Guild.sGuildName,TObject(WarGuild));
        SendGuildMsg('***' + Guild.sGuildName + '行会战争开始(三个小时)');
      end;
      Result:=WarGuild;
    end;
  end;
  RefMemberName();
  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
  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;

end.

⌨️ 快捷键说明

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