guild.pas
来自「原版翎风(LF)引擎(M2)源码(Delphi)」· PAS 代码 · 共 1,320 行 · 第 1/3 页
PAS
1,320 行
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 + =
减小字号Ctrl + -
显示快捷键?