⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objnpc.pas

📁 原版翎风(LF)引擎(M2)源码(Delphi)
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    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 + -