📄 guild.pas
字号:
end; // for
end;
function TGuild.LoadGuild(): Boolean;//00497CE4
var
sFileName:String;
begin
sFileName:=sGuildName + '.txt';
Result:=LoadGuildFile(sFileName);
LoadGuildConfig(sGuildName + '.ini');
end;
function TGuild.LoadGuildConfig(sGuildFileName: String): Boolean;
begin
m_nBuildPoint:=m_Config.ReadInteger('Guild','BuildPoint',m_nBuildPoint);
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -