📄 castle.pas
字号:
end;
function TUserCastle.ReceiptGolds(PlayObject: TPlayObject; nGold: Integer):
Integer; //00490864
begin
Result := -1;
if nGold <= 0 then
begin
Result := -4;
exit;
end;
if (m_MasterGuild = PlayObject.m_MyGuild) and (PlayObject.m_nGuildRankNo = 1)
and (nGold > 0) then
begin
if (nGold <= PlayObject.m_nGold) then
begin
if (m_nTotalGold + nGold) <= g_Config.nCastleGoldMax then
begin
Dec(PlayObject.m_nGold, nGold);
Inc(m_nTotalGold, nGold);
if g_boGameLogGold then
AddGameDataLog('23' + #9 +
PlayObject.m_sMapName + #9 +
IntToStr(PlayObject.m_nCurrX) + #9 +
IntToStr(PlayObject.m_nCurrY) + #9 +
PlayObject.m_sCharName + #9 +
sSTRING_GOLDNAME + #9 +
IntToStr(nGold) + #9 +
'1' + #9 +
'0');
PlayObject.GoldChanged;
Result := 1;
end
else
Result := -3;
end
else
Result := -2;
end;
end;
procedure TUserCastle.MainDoorControl(boClose: Boolean); //00490460
begin
if (m_MainDoor.BaseObject <> nil) and not m_MainDoor.BaseObject.m_boGhost then
begin
if boClose then
begin
if TCastleDoor(m_MainDoor.BaseObject).m_boOpened then
TCastleDoor(m_MainDoor.BaseObject).Close;
end
else
begin
if not TCastleDoor(m_MainDoor.BaseObject).m_boOpened then
TCastleDoor(m_MainDoor.BaseObject).Open;
end;
end;
end;
function TUserCastle.RepairDoor(): Boolean; //00490A70
var
CastleDoor : pTObjUnit;
begin
Result := False;
CastleDoor := @m_MainDoor;
if (CastleDoor.BaseObject = nil) or
(m_boUnderWar) or
(CastleDoor.BaseObject.m_WAbil.HP >= CastleDoor.BaseObject.m_WAbil.MaxHP)
then
begin
exit;
end;
if not CastleDoor.BaseObject.m_boDeath then
begin
if (GetTickCount - CastleDoor.BaseObject.m_dwStruckTick) > 60 * 1000 then
begin
CastleDoor.BaseObject.m_WAbil.HP := CastleDoor.BaseObject.m_WAbil.MaxHP;
TCastleDoor(CastleDoor.BaseObject).RefStatus();
Result := True;
end;
end
else
begin
if (GetTickCount - CastleDoor.BaseObject.m_dwStruckTick) > 60 * 1000 then
begin
CastleDoor.BaseObject.m_WAbil.HP := CastleDoor.BaseObject.m_WAbil.MaxHP;
CastleDoor.BaseObject.m_boDeath := False;
TCastleDoor(CastleDoor.BaseObject).m_boOpened := False;
TCastleDoor(CastleDoor.BaseObject).RefStatus();
Result := True;
end;
end;
end;
function TUserCastle.RepairWall(nWallIndex: Integer): Boolean; //00490B78
var
Wall : TBaseObject;
begin
Result := False;
Wall := nil;
case nWallIndex of
1: Wall := m_LeftWall.BaseObject;
2: Wall := m_CenterWall.BaseObject;
3: Wall := m_RightWall.BaseObject;
end;
if (Wall = nil) or
(m_boUnderWar) or
(Wall.m_WAbil.HP >= Wall.m_WAbil.MaxHP) then
begin
exit;
end;
if not Wall.m_boDeath then
begin
if (GetTickCount - Wall.m_dwStruckTick) > 60 * 1000 then
begin
Wall.m_WAbil.HP := Wall.m_WAbil.MaxHP;
TWallStructure(Wall).RefStatus();
Result := True;
end;
end
else
begin
if (GetTickCount - Wall.m_dwStruckTick) > 60 * 1000 then
begin
Wall.m_WAbil.HP := Wall.m_WAbil.MaxHP;
Wall.m_boDeath := False;
TWallStructure(Wall).RefStatus();
Result := True;
end;
end;
end;
function TUserCastle.AddAttackerInfo(Guild: TGUild): Boolean; //00490CD8
var
AttackerInfo, ainfo : pTAttackerInfo;
i : Integer;
begin
Result := False;
if InAttackerList(Guild) then
exit;
//2005-10-12
// if m_AttackWarList.Count > 1 then
// exit;
New(AttackerInfo);
AttackerInfo.AttackDate := AddDateTimeOfDay(Date,
g_Config.nStartCastleWarDays);
AttackerInfo.sGuildName := Guild.sGuildName;
AttackerInfo.Guild := Guild;
//2005-10-09修改
{ for i := 0 to m_AttackWarList.Count - 1 do
begin
ainfo := pTAttackerInfo(m_AttackWarList[i]);
if ainfo.AttackDate >= AttackerInfo.AttackDate then
AttackerInfo.AttackDate := AddDateTimeOfDay(ainfo.AttackDate, 2);
end;
}
m_AttackWarList.Add(AttackerInfo);
WarDateIndex := m_AttackWarList.Count - 1;
SaveAttackSabukWall();
UserEngine.SendServerGroupMsg(SS_212, nServerIndex, '');
Result := True;
end;
function TUserCastle.InAttackerList(Guild: TGUild): Boolean; //00490C84
var
i : Integer;
begin
Result := False;
for i := 0 to m_AttackWarList.Count - 1 do
begin
if pTAttackerInfo(m_AttackWarList.Items[i]).Guild = Guild then
begin
Result := True;
break;
end;
end;
end;
function TUserCastle.m_nChiefItemCount: Integer;
begin
end;
procedure TUserCastle.SetPower(nPower: Integer);
begin
m_nPower := nPower;
end;
procedure TUserCastle.SetTechLevel(nLevel: Integer);
begin
m_nTechLevel := nLevel;
end;
{ TCastleManager }
constructor TCastleManager.Create;
begin
m_CastleList := TMyList.create;
InitializeCriticalSection(CriticalSection);
end;
destructor TCastleManager.Destroy;
var
i : Integer;
UserCastle : TUserCastle;
begin
for i := 0 to m_CastleList.Count - 1 do
begin
UserCastle := TUserCastle(m_CastleList.Items[i]);
UserCastle.Save;
UserCastle.Free;
end;
m_CastleList.Free;
DeleteCriticalSection(CriticalSection);
inherited;
end;
function TCastleManager.Find(sCASTLENAME: string): TUserCastle;
var
i : Integer;
Castle : TUserCastle;
begin
Result := nil;
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
if CompareText(Castle.m_sName, sCASTLENAME) = 0 then
begin
Result := Castle;
break;
end;
end;
end;
//取得角色所在座标的城堡
function TCastleManager.InCastleWarArea(
BaseObject: TBaseObject): TUserCastle;
var
i : Integer;
Castle : TUserCastle;
begin
Result := nil;
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
if Castle.InCastleWarArea(BaseObject.m_PEnvir, BaseObject.m_nCurrX,
BaseObject.m_nCurrY) then
begin
Result := Castle;
break;
end;
end;
end;
function TCastleManager.InCastleWarArea(Envir: TEnvirnoment; nX,
nY: Integer): TUserCastle;
var
i : Integer;
Castle : TUserCastle;
begin
Result := nil;
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
if Castle.InCastleWarArea(Envir, nX, nY) then
begin
Result := Castle;
break;
end;
end;
end;
procedure TCastleManager.Initialize;
var
i : Integer;
Castle : TUserCastle;
begin
try
Lock;
if m_CastleList.Count <= 0 then
begin
Castle := TUserCastle.Create(0);
m_CastleList.Add(Castle);
Castle.Initialize;
Castle.m_sConfigIndex:=0;
Castle.m_EnvirList.Add('0151');
Castle.m_EnvirList.Add('0152');
Castle.m_EnvirList.Add('0153');
Castle.m_EnvirList.Add('0154');
Castle.m_EnvirList.Add('0155');
Castle.m_EnvirList.Add('0156');
for i := 0 to Castle.m_EnvirList.Count - 1 do
begin
Castle.m_EnvirList.Objects[i] :=
g_MapManager.FindMap(Castle.m_EnvirList.Strings[i]);
end;
Save();
exit;
end;
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
Castle.Initialize;
end;
finally
UnLock;
end;
end;
//城堡皇宫所在地图
function TCastleManager.IsCastlePalaceEnvir(Envir: TEnvirnoment): TUserCastle;
var
i : Integer;
Castle : TUserCastle;
begin
Result := nil;
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
if Castle.m_MapPalace = Envir then
begin
Result := Castle;
break;
end;
end;
end;
//城堡所在地图
function TCastleManager.IsCastleEnvir(Envir: TEnvirnoment): TUserCastle;
var
i : Integer;
Castle : TUserCastle;
begin
Result := nil;
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
if Castle.m_MapCastle = Envir then
begin
Result := Castle;
break;
end;
end;
end;
function TCastleManager.IsCastleMember(
BaseObject: TBaseObject): TUserCastle;
var
i : Integer;
Castle : TUserCastle;
begin
Result := nil;
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
if Castle.IsMember(BaseObject) then
begin
Result := Castle;
break;
end;
end;
end;
procedure TCastleManager.Run;
var
i : Integer;
UserCastle : TUserCastle;
begin
Lock;
try
for i := 0 to m_CastleList.Count - 1 do
begin
UserCastle := TUserCastle(m_CastleList.Items[i]);
UserCastle.Run;
end;
finally
UnLock;
end;
end;
procedure TCastleManager.GetCastleGoldInfo(List: TStringList);
var
i : Integer;
Castle : TUserCastle;
begin
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
List.Add(format(g_sGameCommandSbkGoldShowMsg, [Castle.m_sName,
Castle.m_nTotalGold, Castle.m_nTodayIncome]));
end;
end;
procedure TCastleManager.Save;
var
i : Integer;
Castle : TUserCastle;
begin
SaveCastleList();
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
Castle.Save;
end;
end;
procedure TCastleManager.LoadCastleList;
var
Index : Integer;
Castle : TUserCastle;
sCastleDir : string;
i : Integer;
begin
DataModule_mir200[0].LoadCastleList(self);
end;
procedure TCastleManager.SaveCastleList;
begin
end;
function TCastleManager.GetCastle(nIndex: Integer): TUserCastle;
begin
Result := nil;
if (nIndex >= 0) and (nIndex < m_CastleList.Count) then
Result := TUserCastle(m_CastleList.Items[nIndex]);
end;
procedure TCastleManager.GetCastleNameList(List: TStringList);
var
i : Integer;
Castle : TUserCastle;
begin
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
List.Add(Castle.m_sName);
end;
end;
procedure TCastleManager.IncRateGold(Tariff,ReBate,nGold: Integer);
var
i : Integer;
Castle : TUserCastle;
begin
Lock;
try
for i := 0 to m_CastleList.Count - 1 do
begin
Castle := TUserCastle(m_CastleList.Items[i]);
Castle.IncRateGold(Tariff,ReBate,nGold);
end;
finally
UnLock;
end;
end;
procedure TCastleManager.Lock;
begin
EnterCriticalSection(CriticalSection);
end;
procedure TCastleManager.UnLock;
begin
LeaveCriticalSection(CriticalSection);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -