📄 guild.pas
字号:
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;
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;
procedure ClearRankList(var RankList: TList);
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;
n3C: 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 > g_Config.nGuildMemberMaxLimit then Break; //限制成员数量
end;
end;
if GuildRank <> nil then begin
GuildRankList.Add(GuildRank);
end;
//校验成员列表是否有改变,如果未修改则退出
boCheckChange := False;
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;
ClearRankList(GuildRankList);
Exit;
end;
end;
//检查行会掌门职业是否为空
Result := -2;
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;
end;
end;
end;
//检查行会掌门人是否在线(???)
if Result = 0 then begin
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;
end else begin
Result := -4;
end;
end;
if Result = 0 then begin
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;
Break;
end;
end;
if not boCheckChange then Break;
end;
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;
Break;
end;
end;
if not boCheckChange then Break;
end;
{if (Result = 0) and (n2C <> n30) then begin
Result := -6;
end;}
end;
if Result = 0 then begin //检查掌门数量
n3C := 0;
for I := 0 to GuildRankList.Count - 1 do begin
n28 := pTGuildRank(GuildRankList.Items[I]).nRankNo;
if n28 = 1 then begin
Inc(n3C);
if n3C > 1 then begin
Result := -4;
Break;
end;
end;
end;
end;
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;
Break;
end;
end;
if Result <> 0 then Break;
end;
end;
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
ClearRankList(GuildRankList);
end;
end;
function TGUild.IsNotWarGuild(Guild: TGUild): Boolean;
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);
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 + -