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

📄 objnpc.~pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
    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,m_bocallboard);
        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);
            TGuardUnit(ObjUnit.BaseObject).m_nX550:=ObjUnit.nX;
            TGuardUnit(ObjUnit.BaseObject).m_nY554:=ObjUnit.nY;
            TGuardUnit(ObjUnit.BaseObject).m_nDirection:=3;
            PlayObject.SysMsg('雇佣成功.',c_Green,t_Hint);
          end;

        end else begin
          PlayObject.SysMsg('现在无法雇佣!!!',c_Red,t_Hint);
        end;
      end
    end else begin
      PlayObject.SysMsg('指令错误!!!',c_Red,t_Hint);
    end;
  end else begin
    PlayObject.SysMsg('城内资金不足!!!',c_Red,t_Hint);
  end;
  {
  if UserCastle.m_nTotalGold >= g_Config.nHireGuardPrice then begin
    n10:=Str_ToInt(sIndex,0) - 1;
    if n10 <= MAXCALSTEGUARD then begin
      if UserCastle.m_Guard[n10].BaseObject = nil then begin
        if not UserCastle.m_boUnderWar then begin
          ObjUnit:=@UserCastle.m_Guard[n10];
          ObjUnit.BaseObject:=UserEngine.RegenMonsterByName(UserCastle.m_sMapName,
                                                          ObjUnit.nX,
                                                          ObjUnit.nY,
                                                          ObjUnit.sName);
          if ObjUnit.BaseObject <> nil then begin
            Dec(UserCastle.m_nTotalGold,g_Config.nHireGuardPrice);
            ObjUnit.BaseObject.m_Castle:=UserCastle;
            TGuardUnit(ObjUnit.BaseObject).m_nX550:=ObjUnit.nX;
            TGuardUnit(ObjUnit.BaseObject).m_nY554:=ObjUnit.nY;
            TGuardUnit(ObjUnit.BaseObject).m_n558:=3;
            PlayObject.SysMsg('雇佣成功.',c_Green,t_Hint);
          end;

        end else begin
          PlayObject.SysMsg('现在无法雇佣!!!',c_Red,t_Hint);
        end;
      end
    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);
            TGuardUnit(ObjUnit.BaseObject).m_nX550:=ObjUnit.nX;
            TGuardUnit(ObjUnit.BaseObject).m_nY554:=ObjUnit.nY;
            TGuardUnit(ObjUnit.BaseObject).m_nDirection:=3;
            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;
  {
  if UserCastle.m_nTotalGold >= g_Config.nHireArcherPrice then begin
    n10:=Str_ToInt(sIndex,0) - 1;
    if n10 <= MAXCASTLEARCHER then begin
      if UserCastle.m_Archer[n10].BaseObject = nil then begin
        if not UserCastle.m_boUnderWar then begin
          ObjUnit:=@UserCastle.m_Archer[n10];
          ObjUnit.BaseObject:=UserEngine.RegenMonsterByName(UserCastle.m_sMapName,
                                                          ObjUnit.nX,
                                                          ObjUnit.nY,
                                                          ObjUnit.sName);
          if ObjUnit.BaseObject <> nil then begin
            Dec(UserCastle.m_nTotalGold,g_Config.nHireArcherPrice);
            ObjUnit.BaseObject.m_Castle:=UserCastle;
            TGuardUnit(ObjUnit.BaseObject).m_nX550:=ObjUnit.nX;
            TGuardUnit(ObjUnit.BaseObject).m_nY554:=ObjUnit.nY;
            TGuardUnit(ObjUnit.BaseObject).m_n558:=3;
            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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -