guild.pas
来自「原版翎风(LF)引擎(M2)源码(Delphi)」· PAS 代码 · 共 1,320 行 · 第 1/3 页
PAS
1,320 行
m_nAurae := m_Config.ReadInteger('Guild', 'Aurae', m_nAurae);
m_nStability := m_Config.ReadInteger('Guild', 'Stability', m_nStability);
m_nFlourishing := m_Config.ReadInteger('Guild', 'Flourishing', m_nFlourishing);
m_nChiefItemCount := m_Config.ReadInteger('Guild', 'ChiefItemCount', m_nChiefItemCount);
Result := True;
end;
function TGUild.LoadGuildFile(sGuildFileName: string): Boolean; //00497D58
var
i: Integer;
LoadList: TStringList;
s18, s1C, s20, s24, sFileName: string;
n28, n2C: Integer;
GuildWar: pTWarGuild;
GuildRank: pTGuildRank;
Guild: TGUild;
begin
Result := False;
GuildRank := nil;
sFileName := g_Config.sGuildDir + sGuildFileName;
if not FileExists(sFileName) then Exit;
ClearRank();
NoticeList.Clear;
for i := 0 to GuildWarList.Count - 1 do
begin
Dispose(pTWarGuild(GuildWarList.Objects[i]));
end; // for
GuildWarList.Clear;
GuildAllList.Clear;
n28 := 0;
n2C := 0;
s24 := '';
LoadList := TStringList.Create;
LoadList.LoadFromFile(sFileName);
for i := 0 to LoadList.Count - 1 do
begin
s18 := LoadList.Strings[i];
if (s18 = '') or (s18[1] = ';') then Continue;
if s18[1] <> '+' then
begin
if s18 = g_Config.sGuildNotice then n28 := 1;
if s18 = g_Config.sGuildWar then n28 := 2;
if s18 = g_Config.sGuildAll then n28 := 3;
if s18 = g_Config.sGuildMember then n28 := 4;
if s18[1] = '#' then
begin
s18 := Copy(s18, 2, Length(s18) - 1);
s18 := GetValidStr3(s18, s1C, [' ', ',']);
n2C := Str_ToInt(s1C, 0);
s24 := Trim(s18);
GuildRank := nil;
end;
Continue;
end; //00497F68
s18 := Copy(s18, 2, Length(s18) - 1);
case n28 of //
1: NoticeList.Add(s18);
2:
begin
while (s18 <> '') do
begin
s18 := GetValidStr3(s18, s1C, [' ', ',']);
if s1C = '' then Break;
New(GuildWar);
GuildWar.Guild := g_GuildManager.FindGuild(s1C);
if GuildWar.Guild <> nil then
begin
GuildWar.dwWarTick := GetTickCount();
GuildWar.dwWarTime := Str_ToInt(Trim(s20), 0);
GuildWarList.AddObject(TGUild(GuildWar.Guild).sGuildName, TObject(GuildWar));
end else
begin
Dispose(GuildWar);
end;
end;
end;
3:
begin
while (s18 <> '') do
begin
s18 := GetValidStr3(s18, s1C, [' ', ',']);
s18 := GetValidStr3(s18, s20, [' ', ',']);
if s1C = '' then Break;
Guild := g_GuildManager.FindGuild(s1C);
if Guild <> nil then GuildAllList.AddObject(s1C, Guild);
end;
end;
4:
begin
if (n2C > 0) and (s24 <> '') then
begin
if Length(s24) > 30 then //Jacky 限制职倍的长度
s24 := Copy(s24, 1, g_Config.nGuildRankNameLen {30});
if GuildRank = nil then
begin
New(GuildRank);
GuildRank.nRankNo := n2C;
GuildRank.sRankName := s24;
GuildRank.MemberList := TStringList.Create;
m_RankList.Add(GuildRank);
end;
while (s18 <> '') do
begin
s18 := GetValidStr3(s18, s1C, [' ', ',']);
if s1C = '' then Break;
GuildRank.MemberList.Add(s1C);
end;
end;
end;
end; // case
end;
LoadList.Free;
Result := True;
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.SaveGuildInfoFile; //004985EC
begin
if nServerIndex = 0 then
begin
SaveGuildFile(g_Config.sGuildDir + sGuildName + '.txt');
SaveGuildConfig(g_Config.sGuildDir + sGuildName + '.ini');
end else
begin
SaveGuildFile(g_Config.sGuildDir + sGuildName + '.' + IntToStr(nServerIndex));
end;
end;
procedure TGUild.SaveGuildConfig(sFileName: string);
begin
m_Config.WriteString('Guild', 'GuildName', sGuildName);
m_Config.WriteInteger('Guild', 'BuildPoint', m_nBuildPoint);
m_Config.WriteInteger('Guild', 'Aurae', m_nAurae);
m_Config.WriteInteger('Guild', 'Stability', m_nStability);
m_Config.WriteInteger('Guild', 'Flourishing', m_nFlourishing);
m_Config.WriteInteger('Guild', 'ChiefItemCount', m_nChiefItemCount);
end;
procedure TGUild.SaveGuildFile(sFileName: string);
var
SaveList: TStringList;
i, ii: Integer;
WarGuild: pTWarGuild;
GuildRank: pTGuildRank;
n14: Integer;
begin
SaveList := TStringList.Create;
SaveList.Add(g_Config.sGuildNotice);
for i := 0 to NoticeList.Count - 1 do
begin
SaveList.Add('+' + NoticeList.Strings[i]);
end;
SaveList.Add(' ');
SaveList.Add(g_Config.sGuildWar);
for i := 0 to GuildWarList.Count - 1 do
begin
WarGuild := pTWarGuild(GuildWarList.Objects[i]);
n14 := WarGuild.dwWarTime - (GetTickCount - WarGuild.dwWarTick);
if n14 <= 0 then Continue;
SaveList.Add('+' + GuildWarList.Strings[i] + ' ' + IntToStr(n14));
end;
SaveList.Add(' ');
SaveList.Add(g_Config.sGuildAll);
for i := 0 to GuildAllList.Count - 1 do
begin
SaveList.Add('+' + GuildAllList.Strings[i]);
end;
SaveList.Add(' ');
SaveList.Add(g_Config.sGuildMember);
for i := 0 to m_RankList.Count - 1 do
begin
GuildRank := m_RankList.Items[i];
SaveList.Add('#' + IntToStr(GuildRank.nRankNo) + ' ' + GuildRank.sRankName);
for ii := 0 to GuildRank.MemberList.Count - 1 do
begin
SaveList.Add('+' + GuildRank.MemberList.Strings[ii]);
end;
end;
try
SaveList.SaveToFile(sFileName);
except
MainOutMessage('保存行会信息失败!!! ' + sFileName);
end;
SaveList.Free;
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);
MainOutMessage(E.Message);
end;
end;
end;
function TGUild.SetGuildInfo(sChief: string): Boolean; //00498984
var
GuildRank: pTGuildRank;
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);
SaveGuildInfoFile();
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(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
if nServerIndex = 0 then
SaveGuildFile(g_Config.sGuildDir + sGuildName + '.' + IntToStr(GetTickCount) + '.bak');
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 GuildWarList.Count - 1 do
begin
Dispose(pTWarGuild(GuildWarList.Objects[i]));
end;
GuildWarList.Clear;
GuildAllList.Clear;
SaveGuildInfoFile();
end;
function TGUild.AddMember(PlayObject: TPlayObject): Boolean; //00498CA8
var
i: Integer;
GuildRank: pTGuildRank;
GuildRank18: pTGuildRank;
begin
Result := False;
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));
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];
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?