📄 guild.pas
字号:
g_GuildManager[DbIndex mod 2].Query.close;
g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
g_GuildManager[DbIndex mod 2].Query.ExecSQL;
finally
End;
end;
destructor TGUild.Destroy; //00497C08
var
i : Integer;
begin
NoticeList.Free;
m_GuildWarList.Free;
GuildAllList.Free;
ClearRank();
m_RankList.Free;
TeamFightDeadList.Free;
for i := 0 to m_DynamicVarList.Count - 1 do
begin
DisPose(pTDynamicVar(m_DynamicVarList.Items[i]));
end;
m_DynamicVarList.Free;
inherited;
end;
function TGUild.IsAllyGuild(Guild: TGUild): Boolean; //00499BD8
var
i : Integer;
AllyGuild : TGUild;
begin
Result := False;
for i := 0 to GuildAllList.Count - 1 do
begin
AllyGuild := TGUild(GuildAllList.Objects[i]);
if AllyGuild = Guild then
begin
Result := True;
break;
end;
end;
end;
function TGUild.IsMember(sName: string): Boolean; //00498714
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] = sName then
begin
Result := True;
exit;
end;
end;
end;
end;
function TGUild.IsWarGuild(Guild: TGUild): Boolean; //00499924
var
i : Integer;
begin
Result := False;
for i := 0 to m_GuildWarList.Count - 1 do
begin
if pTWarGuild(m_GuildWarList.Objects[i]).Guild = Guild then
begin
Result := True;
break;
end;
end; // for
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.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);
{$IF SHowErr = 1}
MainOutMessage(E.Message);
{$IFEND}
end;
end;
end;
function TGUild.SetGuildInfo(sChief: string): Boolean; //00498984
var
GuildRank : pTGuildRank;
i : Integer;
sqlStr : String;
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);
saveRank;
Sqlstr:='Insert into D_GuildMember (charname,GuildName,GuildRankID) values('+''''+sChief+''''+','+''''+sGuildName+''''+',1)';
try
g_GuildManager[DbIndex mod 2].Query.close;
g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
g_GuildManager[DbIndex mod 2].Query.ExecSQL;
finally
End;
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(m_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
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 m_GuildWarList.Count - 1 do
begin
DisPose(pTWarGuild(m_GuildWarList.Objects[i]));
end;
m_GuildWarList.Clear;
GuildAllList.Clear;
SaveGuildInfoFile();
end;
function TGUild.AddMember(PlayObject: TPlayObject): Boolean; //00498CA8
var
i : Integer;
GuildRank : pTGuildRank;
GuildRank18 : pTGuildRank;
SqlStr:String;
begin
Result := False;
if IsFull then Exit;
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));
Sqlstr:='Insert into D_GuildMember (charname,GuildName,GuildRankID) values('+''''+PlayObject.m_sCharName+''''+','+''''+sGuildName+''''+','+Inttostr(GuildRank18.nRankNo)+')';
try
g_GuildManager[DbIndex mod 2].Query.close;
g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
g_GuildManager[DbIndex mod 2].Query.ExecSQL;
finally
End;
Result := True;
end;
function TGUild.DelMember(sHumName: string): Boolean; //00498DCC
var
i, ii : Integer;
GuildRank : pTGuildRank;
SqlStr:String;
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
Begin
Sqlstr:='Delete FROM D_GuildMember where (charname='+''''+sHumName+''''+')' ;
try
g_GuildManager[DbIndex mod 2].Query.close;
g_GuildManager[DbIndex mod 2].Query.SQL.Clear;
g_GuildManager[DbIndex mod 2].Query.SQL.Add(SQLStr);
g_GuildManager[DbIndex mod 2].Query.ExecSQL;
finally
End;
End;
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: TmyList); //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 : TMyList;
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 := TMyList.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) > 15 then //Jacky 限制职倍的长度
sRankName := _Copy(sRankName, 1, 7);
if GuildRank <> nil then
begin
GuildRankList.Add(GuildRank);
end;
New(GuildRank);
if GuildRank<>nil then
Begin
GuildRank.nRankNo := Str_ToInt(sRankNo, 99);
GuildRank.sRankName := Trim(sRankName);
GuildRank.MemberList := TStringList.Create;
ENd;
Continue;
end;
if GuildRank = nil then
Continue;
i := 0;
while (True) do
begin //将成员名称加入职称表里
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -