📄 objbase.pas
字号:
m_nHongMoSuite := 0;
m_db3B0 := 0;
FillChar(m_AddAbil, SizeOf(TAddAbility), #0);
m_MsgList := TList.Create;
m_VisibleHumanList := TList.Create;
LIst_3EC := TList.Create;
m_VisibleActors := TList.Create;
m_VisibleItems := TList.Create;
m_VisibleEvents := TList.Create;
m_ItemList := TList.Create;
m_DealItemList := TList.Create;
m_boIsVisibleActive := False;
m_nProcessRunCount := 0;
m_nDealGolds := 0;
m_MagicList := TList.Create;
m_StorageItemList := TList.Create;
FillChar(m_UseItems, SizeOf(THumanUseItems), 0);
m_MagicOneSwordSkill := nil;
m_MagicPowerHitSkill := nil;
m_MagicErgumSkill := nil;
m_MagicBanwolSkill := nil;
m_MagicRedBanwolSkill := nil;
m_MagicFireSwordSkill := nil;
m_MagicCrsSkill := nil;
m_Magic41Skill := nil;
m_MagicTwnHitSkill := nil;
m_Magic43Skill := nil;
m_GroupOwner := nil;
m_Castle := nil;
m_Master := nil;
n294 := 0;
m_btSlaveExpLevel := 0;
bt2A0 := 0;
m_GroupMembers := TStringList.Create;
m_boHearWhisper := True;
m_boBanShout := True;
m_boBanGuildChat := True;
m_boAllowDeal := True;
m_boAllowGroupReCall := False;
m_BlockWhisperList := TStringList.Create;
m_SlaveList := TList.Create;
FillChar(m_WAbil, SizeOf(TAbility), #0);
FillChar(m_QuestUnitOpen, SizeOf(TQuestUnit), #0);
FillChar(m_QuestUnit, SizeOf(TQuestUnit), #0);
m_Abil.Level := 1;
m_Abil.AC := 0;
m_Abil.MAC := 0;
m_Abil.DC := MakeLong(1, 4);
m_Abil.MC := MakeLong(1, 2);
m_Abil.SC := MakeLong(1, 2);
m_Abil.HP := 15;
m_Abil.MP := 15;
m_Abil.MaxHP := 15;
m_Abil.MaxMP := 15;
m_Abil.Exp := 0;
m_Abil.MaxExp := 50;
m_Abil.Weight := 0;
m_Abil.MaxWeight := 100;
m_boWantRefMsg := False;
m_boDealing := False;
m_DealCreat := nil;
m_MyGuild := nil;
m_nGuildRankNo := 0;
m_sGuildRankName := '';
m_sScriptLable := '';
m_boMission := False;
m_boHideMode := False;
m_boStoneMode := False;
m_boCoolEye := False;
m_boUserUnLockDurg := False;
m_boTransparent := False;
m_boAdminMode := False;
m_boObMode := False;
m_dwRunTick := GetTickCount + LongWord(Random(1500));
m_nRunTime := 250;
m_dwSearchTime := Random(2000) + 2000;
m_dwSearchTick := GetTickCount;
m_dwDecPkPointTick := GetTickCount;
m_DecLightItemDrugTick := GetTickCount();
m_dwPoisoningTick := GetTickCount;
m_dwVerifyTick := GetTickCount();
m_dwCheckRoyaltyTick := GetTickCount();
m_dwDecHungerPointTick := GetTickCount();
m_dwHPMPTick := GetTickCount();
m_dwShoutMsgTick := 0;
m_dwTeleportTick := 0;
m_dwProbeTick := 0;
m_dwMapMoveTick := GetTickCount();
m_dwMasterTick := 0;
m_nWalkSpeed := 1400;
m_nNextHitTime := 2000;
m_nWalkCount := 0;
m_dwWalkWaitTick := GetTickCount();
m_boWalkWaitLocked := False;
m_nHealthTick := 0;
m_nSpellTick := 0;
m_TargetCret := nil;
m_LastHiter := nil;
m_ExpHitter := nil;
m_SayMsgList := nil;
m_boDenyRefStatus := False;
m_btHorseType := 0;
m_btDressEffType := 0;
m_dwPKDieLostExp := 0;
m_nPKDieLostLevel := 0;
m_boAddToMaped := True;
m_boAutoChangeColor := False;
m_dwAutoChangeColorTick := GetTickCount();
m_nAutoChangeIdx := 0;
m_boFixColor := False;
m_nFixColorIdx := 0;
m_nFixStatus := -1;
m_boFastParalysis := False;
m_boNastyMode := False;
end;
destructor TBaseObject.Destroy; //004B80C0
var
i: Integer;
SendMessage: pTSendMessage;
nCheckCode: Integer;
resourcestring
sExceptionMsg = '[Exception] TBaseObject::Destroy Code: %d';
begin
nCheckCode := 0;
try
nCheckCode := 1;
for i := 0 to m_MsgList.Count - 1 do
begin
nCheckCode := 2;
SendMessage := m_MsgList.Items[i];
if (SendMessage.wIdent = RM_SENDDELITEMLIST) and (SendMessage.nParam1 <> 0) then
begin
nCheckCode := 3;
if TStringList(SendMessage.nParam1) <> nil then
begin
TStringList(SendMessage.nParam1).Free;
nCheckCode := 4;
end;
end;
if (SendMessage.wIdent = RM_10401) and (SendMessage.nParam1 <> 0) then
begin
nCheckCode := 5;
Dispose(pTSlaveInfo(SendMessage.nParam1));
end;
nCheckCode := 6;
if (SendMessage.Buff <> nil) then
begin
nCheckCode := 7;
FreeMem(SendMessage.Buff);
end;
Dispose(SendMessage);
nCheckCode := 8;
end; //004B81EE
nCheckCode := 9;
m_MsgList.Free;
nCheckCode := 10;
m_VisibleHumanList.Free;
nCheckCode := 11;
for i := 0 to LIst_3EC.Count - 1 do
begin
end; //004B8249
LIst_3EC.Free;
nCheckCode := 12;
for i := 0 to m_VisibleActors.Count - 1 do
begin
Dispose(pTVisibleBaseObject(m_VisibleActors.Items[i]));
end; //004B8296
nCheckCode := 13;
m_VisibleActors.Free;
nCheckCode := 14;
for i := 0 to m_VisibleItems.Count - 1 do
begin
Dispose(pTVisibleMapItem(m_VisibleItems.Items[i]));
end; //004B82E3
nCheckCode := 15;
m_VisibleItems.Free;
nCheckCode := 16;
m_VisibleEvents.Free;
nCheckCode := 17;
for i := 0 to m_ItemList.Count - 1 do
begin
Dispose(pTUserItem(m_ItemList.Items[i]));
end; //004B833E
nCheckCode := 18;
m_ItemList.Free;
nCheckCode := 19;
for i := 0 to m_DealItemList.Count - 1 do
begin
Dispose(pTUserItem(m_DealItemList.Items[i]));
end; //004B838B
m_DealItemList.Free;
nCheckCode := 20;
for i := 0 to m_MagicList.Count - 1 do
begin
Dispose(pTUserMagic(m_MagicList.Items[i]));
end; //004B83D8
m_MagicList.Free;
nCheckCode := 21;
for i := 0 to m_StorageItemList.Count - 1 do
begin
Dispose(pTUserItem(m_StorageItemList.Items[i]));
end; //004B8425
m_StorageItemList.Free;
nCheckCode := 22;
m_GroupMembers.Free;
nCheckCode := 23;
m_BlockWhisperList.Free;
nCheckCode := 24;
m_SlaveList.Free;
nCheckCode := 25;
except
on E: Exception do
begin
MainOutMessage(Format(sExceptionMsg, [nCheckCode]));
MainOutMessage(E.Message);
end;
end;
{
for I := 0 to CertCheck.Count - 1 do begin
if CertCheck.Items[I] = Self then begin
CertCheck.Delete(I);
break;
end;
end;
}
inherited;
end;
procedure TBaseObject.ChangePKStatus(boWarFlag: Boolean); //004B84C8
begin
if m_boInFreePKArea <> boWarFlag then
begin
m_boInFreePKArea := boWarFlag;
m_boNameColorChanged := True;
end;
end;
function TBaseObject.GetDropPosition(nOrgX, nOrgY, nRange: Integer; var nDX: Integer; var nDY: Integer): Boolean; //004C5238
var
i, ii, III: Integer;
nItemCount, n24, n28, n2C: Integer;
begin
n24 := 999;
Result := False;
n28 := 0; //09/10
n2C := 0; //09/10
for i := 1 to nRange do
begin
for ii := -i to i do
begin
for III := -i to i do
begin
nDX := nOrgX + III;
nDY := nOrgY + ii;
if m_PEnvir.GetItemEx(nDX, nDY, nItemCount) = nil then
begin
if m_PEnvir.bo2C then
begin
Result := True;
Break;
end;
end else
begin
if m_PEnvir.bo2C and (n24 > nItemCount) then
begin
n24 := nItemCount;
n28 := nDX;
n2C := nDY;
end;
end;
end;
if Result then Break;
end;
if Result then Break;
end;
if not Result then
begin
if n24 < 8 then
begin
nDX := n28;
nDY := n2C;
end else
begin
nDX := nOrgX;
nDY := nOrgY;
end;
end;
end;
//004C5478
function TBaseObject.DropItemDown(UserItem: pTUserItem; nScatterRange: Integer; boDieDrop: Boolean; ItemOfCreat, DropCreat: TBaseObject): Boolean;
var
dx, dy, idura: Integer;
MapItem, pr: pTMapItem;
StdItem: TItem;
logcap: string;
begin
Result := False;
StdItem := UserEngine.GetStdItem(UserItem.wIndex);
if StdItem <> nil then
begin
if StdItem.StdMode = 40 then
begin
idura := UserItem.Dura;
idura := idura - 2000;
if idura < 0 then idura := 0;
UserItem.Dura := idura;
end;
New(MapItem);
MapItem.UserItem := UserItem^;
MapItem.Name := GetItemName(UserItem); //取自定义物品
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -