📄 objnpc.pas
字号:
m_boMakeDrug: Boolean;
m_boPrices: Boolean;
m_boStorage: Boolean;
m_boGetback: Boolean;
m_boUpgradenow: Boolean;
m_boGetBackupgnow: Boolean;
m_boRepair: Boolean;
m_boS_repair: Boolean;
m_boSendmsg: Boolean;
m_boGetMarry: Boolean;
m_boGetMaster: Boolean;
m_boUseItemName: Boolean;
private
procedure ClearExpreUpgradeListData();
function GetItemPrice(nIndex: Integer): Integer;
function GetUserPrice(PlayObject: TPlayObject; nPrice: Integer): Integer;
function CheckItemType(nStdMode: Integer): Boolean;
procedure CheckItemPrice(nIndex: Integer);
function GetRefillList(nIndex: Integer): TList;
procedure AddItemPrice(nIndex, nPrice: Integer);
function GetUserItemPrice(UserItem: pTUserItem): Integer;
function GetSellItemPrice(nPrice: Integer): Integer;
function AddItemToGoodsList(UserItem: pTUserItem): Boolean;
procedure GetBackupgWeapon(User: TPlayObject);
procedure UpgradeWapon(User: TPlayObject);
procedure ChangeUseItemName(PlayObject: TPlayObject; sLabel, sItemName: string);
procedure SaveUpgradingList;
procedure GetMarry(PlayObject: TPlayObject; sDearName: string);
procedure GetMaster(PlayObject: TPlayObject; sMasterName: string);
public
constructor Create(); override;
destructor Destroy; override;
function Operate(ProcessMsg: pTProcessMessage): Boolean; override;
procedure Run; override;
procedure UserSelect(PlayObject: TPlayObject; sData: string); override;
procedure LoadNPCData();
procedure SaveNPCData();
procedure LoadUpgradeList();
procedure RefillGoods();
procedure LoadNpcScript();
procedure Click(PlayObject: TPlayObject); override;
procedure ClearScript(); override;
procedure ClearData();
procedure GetVariableText(PlayObject: TPlayObject; var sMsg: string; sVariable: string); override; //FFE9
procedure ClientBuyItem(PlayObject: TPlayObject; sItemName: string; nInt: Integer);
procedure ClientGetDetailGoodsList(PlayObject: TPlayObject; sItemName: string; nInt: Integer);
procedure ClientQuerySellPrice(PlayObject: TPlayObject; UserItem: pTUserItem);
function ClientSellItem(PlayObject: TPlayObject; UserItem: pTUserItem): Boolean;
procedure ClientMakeDrugItem(PlayObject: TPlayObject; sItemName: string);
procedure ClientQueryRepairCost(PlayObject: TPlayObject; UserItem: pTUserItem);
function ClientRepairItem(PlayObject: TPlayObject; UserItem: pTUserItem): Boolean;
procedure SendCustemMsg(PlayObject: TPlayObject; sMsg: string); override;
end;
TGuildOfficial = class(TNormNpc) //0x568
private
function ReQuestBuildGuild(PlayObject: TPlayObject;
sGuildName: string): Integer;
function ReQuestGuildWar(PlayObject: TPlayObject;
sGuildName: string): Integer;
procedure DoNate(PlayObject: TPlayObject);
procedure ReQuestCastleWar(PlayObject: TPlayObject; sIndex: string);
public
constructor Create(); override;
destructor Destroy; override;
procedure GetVariableText(PlayObject: TPlayObject; var sMsg: string; sVariable: string); override; //FFE9
procedure Run; override; //FFFB
procedure Click(PlayObject: TPlayObject); override; //FFEB
procedure UserSelect(PlayObject: TPlayObject; sData: string); override; //FFEA
procedure SendCustemMsg(PlayObject: TPlayObject; sMsg: string); override;
end;
TTrainer = class(TNormNpc) //0x574
n564: Integer;
m_dw568: LongWord;
n56C: Integer;
n570: Integer;
private
public
constructor Create(); override;
destructor Destroy; override;
function Operate(ProcessMsg: pTProcessMessage): Boolean; override; //FFFC
procedure Run; override;
end;
// TCastleManager = class(TMerchant)
TCastleOfficial = class(TMerchant)
private
procedure HireArcher(sIndex: string; PlayObject: TPlayObject);
procedure HireGuard(sIndex: string; PlayObject: TPlayObject);
procedure RepairDoor(PlayObject: TPlayObject);
procedure RepairWallNow(nWallIndex: Integer; PlayObject: TPlayObject);
public
constructor Create(); override;
destructor Destroy; override;
procedure Click(PlayObject: TPlayObject); override; //FFEB
procedure UserSelect(PlayObject: TPlayObject; sData: string); override; //FFEA
procedure GetVariableText(PlayObject: TPlayObject; var sMsg: string; sVariable: string); override; //FFE9
procedure SendCustemMsg(PlayObject: TPlayObject; sMsg: string); override;
end;
implementation
uses Castle, M2Share, HUtil32, LocalDB, Envir, Guild, EDcode, ObjMon2,
Event, ItmUnit;
procedure TCastleOfficial.Click(PlayObject: TPlayObject); //004A4588
begin
if m_Castle = nil then
begin
PlayObject.SysMsg('NPC不属于城堡!!!', c_Red, t_Hint);
Exit;
end;
if TUserCastle(m_Castle).IsMasterGuild(TGUild(PlayObject.m_MyGuild)) or (PlayObject.m_btPermission >= 3) then
inherited;
end;
procedure TCastleOfficial.GetVariableText(PlayObject: TPlayObject;
var sMsg: string; sVariable: string);
var
i: Integer;
sText: string;
CastleDoor: TCastleDoor;
List: TStringList;
begin
inherited;
if m_Castle = nil then
begin
sMsg := '????';
Exit;
end;
if sVariable = '$CASTLEGOLD' then
begin
sText := IntToStr(TUserCastle(m_Castle).m_nTotalGold);
sMsg := sub_49ADB8(sMsg, '<$CASTLEGOLD>', sText);
end else
if sVariable = '$TODAYINCOME' then
begin
sText := IntToStr(TUserCastle(m_Castle).m_nTodayIncome);
sMsg := sub_49ADB8(sMsg, '<$TODAYINCOME>', sText);
end else
if sVariable = '$CASTLEDOORSTATE' then
begin
CastleDoor := TCastleDoor(TUserCastle(m_Castle).m_MainDoor.BaseObject);
if CastleDoor.m_boDeath then sText := 'destroyed'
else if CastleDoor.m_boOpened then sText := 'opened'
else sText := 'closed';
sMsg := sub_49ADB8(sMsg, '<$CASTLEDOORSTATE>', sText);
end else
if sVariable = '$REPAIRDOORGOLD' then
begin
sText := IntToStr(g_Config.nRepairDoorPrice);
sMsg := sub_49ADB8(sMsg, '<$REPAIRDOORGOLD>', sText);
end else
if sVariable = '$REPAIRWALLGOLD' then
begin
sText := IntToStr(g_Config.nRepairWallPrice);
sMsg := sub_49ADB8(sMsg, '<$REPAIRWALLGOLD>', sText);
end else
if sVariable = '$GUARDFEE' then
begin
sText := IntToStr(g_Config.nHireGuardPrice);
sMsg := sub_49ADB8(sMsg, '<$GUARDFEE>', sText);
end else
if sVariable = '$ARCHERFEE' then
begin
sText := IntToStr(g_Config.nHireArcherPrice);
sMsg := sub_49ADB8(sMsg, '<$ARCHERFEE>', sText);
end else
if sVariable = '$GUARDRULE' then
begin
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 := '你没有权利使用...';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -