📄 objnpc.pas
字号:
sText := '无效';
sMsg := sub_49ADB8(sMsg, '<$GUARDRULE>', sText);
end;
end;
procedure TCastleOfficial.UserSelect(PlayObject: TPlayObject; sData: string);
var
s18, s20, sMsg, sLabel : string;
boCanJmp : Boolean;
resourcestring
sExceptionMsg =
'[Exception] TCastleManager::UserSelect... ';
begin
inherited;
try
// PlayObject.m_nScriptGotoCount:=0;
if m_Castle = nil then
begin
PlayObject.SysMsg('NPC不属于城堡!!!', c_Red, t_Hint);
exit;
end;
if (sData <> '') and (sData[1] = '@') then
begin
sMsg := GetValidStr3(sData, sLabel, [#13]);
s18 := '';
PlayObject.m_sScriptLable := sData;
if TUserCastle(m_Castle).IsMasterGuild(TGUild(PlayObject.m_MyGuild)) and
(PlayObject.IsGuildMaster) then
begin
boCanJmp := PlayObject.LableIsCanJmp(sLabel);
if CompareText(sLabel, sSL_SENDMSG) = 0 then
begin
if sMsg = '' then
exit;
end;
GotoLable(PlayObject, sLabel, not boCanJmp);
//GotoLable(PlayObject,sLabel,not PlayObject.LableIsCanJmp(sLabel));
if not boCanJmp then
exit;
if CompareText(sLabel, sSL_SENDMSG) = 0 then
begin
SendCustemMsg(PlayObject, sMsg);
PlayObject.SendMsg(self, RM_MENU_OK, 0, Integer(self), 0, 0, s18);
end
else if CompareText(sLabel, sCASTLENAME) = 0 then
begin
sMsg := Trim(sMsg);
if sMsg <> '' then
begin
TUserCastle(m_Castle).m_sName := sMsg;
TUserCastle(m_Castle).Save;
TUserCastle(m_Castle).m_MasterGuild.RefMemberName;
s18 := '城堡名称更改成功...';
end
else
begin
s18 := '城堡名称更改失败!!!';
end;
PlayObject.SendMsg(self, RM_MENU_OK, 0, Integer(self), 0, 0, s18);
end
else if CompareText(sLabel, sWITHDRAWAL) = 0 then
begin
case TUserCastle(m_Castle).WithDrawalGolds(PlayObject, Str_ToInt(sMsg,
0)) of
-4: s18 := '输入的金币数不正确!!!';
-3: s18 := '您无法携带更多的东西了。';
-2: s18 := '该城内没有这么多金币.';
-1: s18 := '只有行会 ' + TUserCastle(m_Castle).m_sOwnGuild +
' 的掌门人才能使用!!!';
1: GotoLable(PlayObject, sMAIN, False);
end;
PlayObject.SendMsg(self, RM_MENU_OK, 0, Integer(self), 0, 0, s18);
end
else if CompareText(sLabel, sRECEIPTS) = 0 then
begin
case TUserCastle(m_Castle).ReceiptGolds(PlayObject, Str_ToInt(sMsg, 0))
of
-4: s18 := '输入的金币数不正确!!!';
-3: s18 := '你已经达到在城内存放货物的限制了。';
-2: s18 := '你没有那么多金币.';
-1: s18 := '只有行会 ' + TUserCastle(m_Castle).m_sOwnGuild +
' 的掌门人才能使用!!!';
1: GotoLable(PlayObject, sMAIN, False);
end;
PlayObject.SendMsg(self, RM_MENU_OK, 0, Integer(self), 0, 0, s18);
end
else if CompareText(sLabel, sOPENMAINDOOR) = 0 then
begin
TUserCastle(m_Castle).MainDoorControl(False);
end
else if CompareText(sLabel, sCLOSEMAINDOOR) = 0 then
begin
TUserCastle(m_Castle).MainDoorControl(True);
end
else if CompareText(sLabel, sREPAIRDOORNOW) = 0 then
begin
RepairDoor(PlayObject);
GotoLable(PlayObject, sMAIN, False);
end
else if CompareText(sLabel, sREPAIRWALLNOW1) = 0 then
begin
RepairWallNow(1, PlayObject);
GotoLable(PlayObject, sMAIN, False);
end
else if CompareText(sLabel, sREPAIRWALLNOW2) = 0 then
begin
RepairWallNow(2, PlayObject);
GotoLable(PlayObject, sMAIN, False);
end
else if CompareText(sLabel, sREPAIRWALLNOW3) = 0 then
begin
RepairWallNow(3, PlayObject);
GotoLable(PlayObject, sMAIN, False);
end
else if CompareLStr(sLabel, sHIREGUARDNOW, length(sHIREGUARDNOW)) then
begin
s20 := Copy(sLabel, length(sHIREGUARDNOW) + 1, length(sLabel));
HireGuard(s20, PlayObject);
PlayObject.SendMsg(self, RM_MENU_OK, 0, Integer(self), 0, 0, '');
//GotoLable(PlayObject,sHIREGUARDOK,False);
end
else if CompareLStr(sLabel, sHIREARCHERNOW, length(sHIREARCHERNOW)) then
begin
s20 := Copy(sLabel, length(sHIREARCHERNOW) + 1, length(sLabel));
HireArcher(s20, PlayObject);
PlayObject.SendMsg(self, RM_MENU_OK, 0, Integer(self), 0, 0, '');
end
else if CompareText(sLabel, sEXIT) = 0 then
begin
PlayObject.SendMsg(self, RM_MERCHANTDLGCLOSE, 0, Integer(self), 0, 0,
'');
end
else if CompareText(sLabel, sBACK) = 0 then
begin
if PlayObject.m_sScriptGoBackLable = '' then
PlayObject.m_sScriptGoBackLable := sMAIN;
GotoLable(PlayObject, PlayObject.m_sScriptGoBackLable, False);
end;
end
else
begin
s18 := '你没有权利使用';
PlayObject.SendMsg(self, RM_MENU_OK, 0, Integer(self), 0, 0, s18);
end;
end;
except
MainOutMessage(sExceptionMsg);
end;
// inherited;
end;
procedure TCastleOfficial.HireGuard(sIndex: string; PlayObject: TPlayObject);
//004A413C
var
n10 : Integer;
ObjUnit : pTObjUnit;
begin
if m_Castle = nil then
begin
PlayObject.SysMsg('NPC不属于城堡!!!', c_Red, t_Hint);
exit;
end;
if TUserCastle(m_Castle).m_nTotalGold >= g_Config.nHireGuardPrice then
begin
n10 := Str_ToInt(sIndex, 0) - 1;
if n10 <= MAXCALSTEGUARD then
begin
if TUserCastle(m_Castle).m_Guard[n10].BaseObject = nil then
begin
if not TUserCastle(m_Castle).m_boUnderWar then
begin
ObjUnit := @TUserCastle(m_Castle).m_Guard[n10];
ObjUnit.BaseObject :=
UserEngine.RegenMonsterByName(TUserCastle(m_Castle).m_sMapName,
ObjUnit.nX,
ObjUnit.nY,
ObjUnit.sName);
if ObjUnit.BaseObject <> nil then
begin
Dec(TUserCastle(m_Castle).m_nTotalGold, g_Config.nHireGuardPrice);
ObjUnit.BaseObject.m_Castle := TUserCastle(m_Castle);
PlayObject.SysMsg('雇佣成功.', c_Green, t_Hint);
end;
end
else
begin
PlayObject.SysMsg('现在无法雇佣!!!', c_Red, t_Hint);
end;
end
else
PlayObject.SysMsg('早已雇佣!!!.', c_Green, t_Hint);
end
else
begin
PlayObject.SysMsg('指令错误!!!', c_Red, t_Hint);
end;
end
else
begin
PlayObject.SysMsg('城内资金不足!!!', c_Red, t_Hint);
end;
end;
procedure TCastleOfficial.HireArcher(sIndex: string; PlayObject: TPlayObject);
//004A433C
var
n10 : Integer;
ObjUnit : pTObjUnit;
begin
if m_Castle = nil then
begin
PlayObject.SysMsg('NPC不属于城堡!!!', c_Red, t_Hint);
exit;
end;
if TUserCastle(m_Castle).m_nTotalGold >= g_Config.nHireArcherPrice then
begin
n10 := Str_ToInt(sIndex, 0) - 1;
if n10 <= MAXCASTLEARCHER then
begin
if TUserCastle(m_Castle).m_Archer[n10].BaseObject = nil then
begin
if not TUserCastle(m_Castle).m_boUnderWar then
begin
ObjUnit := @TUserCastle(m_Castle).m_Archer[n10];
ObjUnit.BaseObject :=
UserEngine.RegenMonsterByName(TUserCastle(m_Castle).m_sMapName,
ObjUnit.nX,
ObjUnit.nY,
ObjUnit.sName);
if ObjUnit.BaseObject <> nil then
begin
Dec(TUserCastle(m_Castle).m_nTotalGold, g_Config.nHireArcherPrice);
ObjUnit.BaseObject.m_Castle := TUserCastle(m_Castle);
if ObjUnit.BaseObject.m_btRaceServer=112 then
Begin
TGuardUnit(ObjUnit.BaseObject).m_nX550 := ObjUnit.nX;
TGuardUnit(ObjUnit.BaseObject).m_nY554 := ObjUnit.nY;
TGuardUnit(ObjUnit.BaseObject).m_nDirection := 3;
End;
PlayObject.SysMsg('雇佣成功.', c_Green, t_Hint);
end;
end
else
begin
PlayObject.SysMsg('现在无法雇佣!!!', c_Red, t_Hint);
end;
end
else
begin
PlayObject.SysMsg('早已雇佣!!!', c_Red, t_Hint);
end;
end
else
begin
PlayObject.SysMsg('指令错误!!!', c_Red, t_Hint);
end;
end
else
begin
PlayObject.SysMsg('城内资金不足!!!', c_Red, t_Hint);
end;
end;
{ TMerchant }
procedure TMerchant.AddItemPrice(nIndex: Integer; nPrice: Integer); //0049F2AC
var
ItemPrice : pTItemPrice;
begin
New(ItemPrice);
ItemPrice.wIndex := nIndex;
ItemPrice.nPrice := nPrice;
m_ItemPriceList.Add(ItemPrice);
FrmDB.SaveGoodPriceRecord(self, m_sScript + '-' + m_sMapName);
end;
procedure TMerchant.CheckItemPrice(nIndex: Integer); //0049F1BC
var
i : Integer;
ItemPrice : pTItemPrice;
n10 : Integer;
StdItem : pTStdItem;
begin
for i := 0 to m_ItemPriceList.Count - 1 do
begin
ItemPrice := m_ItemPriceList.Items[i];
if ItemPrice.wIndex = nIndex then
begin
n10 := ItemPrice.nPrice;
if ROUND(n10 * 1.1) > n10 then
begin
n10 := ROUND(n10 * 1.1);
end
else
Inc(n10);
exit;
end;
end;
StdItem := UserEngine.GetStdItem(nIndex);
if StdItem <> nil then
begin
AddItemPrice(nIndex, ROUND(StdItem.Price * 1.1));
end;
end;
function TMerchant.GetRefillList(nIndex: Integer): TMyList; //0049F118
var
i : Integer;
List : TMyList;
begin
Result := nil;
if nIndex <= 0 then
exit;
for i := 0 to m_GoodsList.Count - 1 do
begin
List := TMyList(m_GoodsList.Items[i]);
if List.Count > 0 then
begin
if pTUserItem(List.Items[0]).wIndex = nIndex then
begin
Result := List;
break;
end;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -