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

📄 objnpc.pas

📁 乐都SQL版传奇全套代码,绝对可编译
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      GotoLable(User, sUPGRADEING, False);
      exit;
    end;
  end;
  if (User.m_UseItems[U_WEAPON].wIndex <> 0) and (User.m_nGold >=
    g_Config.nUpgradeWeaponPrice) and
    (User.CheckItems(g_Config.sBlackStone) <> nil) then
  begin
    User.DecGold(g_Config.nUpgradeWeaponPrice);
    //    if m_boCastle or g_Config.boGetAllNpcTax then UserCastle.IncRateGold(g_Config.nUpgradeWeaponPrice);
  //  if   g_Config.boGetAllNpcTax then
    begin
      if (m_Castle <> nil) and TUserCastle(m_Castle).IsMasterGuild(TGUild(user.m_MyGuild)) then
         Rebate:=TARIFF
      else
         Rebate:=0;
      if m_Castle <> nil then
      begin
        TUserCastle(m_Castle).IncRateGold(TARIFF,Rebate,g_Config.nUpgradeWeaponPrice);
      end
      else
      begin
        g_CastleManager.IncRateGold(TARIFF,Rebate,g_Config.nUpgradeWeaponPrice);
      end;
    end;
    User.GoldChanged();
    New(UpgradeInfo);
    UpgradeInfo.sUserName := User.m_sCharName;
    UpgradeInfo.UserItem := User.m_UseItems[U_WEAPON];
    StdItem := UserEngine.GetStdItem(User.m_UseItems[U_WEAPON].wIndex);

    //004A0B2F
    if StdItem.NeedIdentify = 1 then
      AddGameDataLog('25' + #9 +
        User.m_sMapName + #9 +
        IntToStr(User.m_nCurrX) + #9 +
        IntToStr(User.m_nCurrY) + #9 +
        User.m_sCharName + #9 +
        //UserEngine.GetStdItemName(User.m_UseItems[U_WEAPON].wIndex) + #9 +
        StdItem.Name + #9 +
        IntToStr(User.m_UseItems[U_WEAPON].MakeIndex) + #9 +
        '1' + #9 +
        '0');
    User.SendDelItems(@User.m_UseItems[U_WEAPON]);
    User.m_UseItems[U_WEAPON].wIndex := 0;
    User.RecalcAbilitys();
    User.FeatureChanged();
    User.SendMsg(User, RM_ABILITY, 0, 0, 0, 0, '');
    sub_4A0218(User.m_ItemList, UpgradeInfo.btDc, UpgradeInfo.btSc,
      UpgradeInfo.btMc, UpgradeInfo.btDura);
    UpgradeInfo.dtTime := Now();
    UpgradeInfo.dwGetBackTick := GetTickCount();
    m_UpgradeWeaponList.Add(UpgradeInfo);
    SaveUpgradingList();
    bo0D := True;
  end;
  if bo0D then
    GotoLable(User, sUPGRADEOK, False)
  else
    GotoLable(User, sUPGRADEFAIL, False);
end;

procedure TMerchant.GetBackupgWeapon(User: TPlayObject);    //004A0CB8
var
  i                                     : Integer;
  UpgradeInfo                           : pTUpgradeInfo;
  n10,  n18, n1C, n90               : Integer;
  UserItem                              : pTUserItem;
  StdItem                               : pTStdItem;
begin
  n18 := 0;
  UpgradeInfo := nil;
  if not User.IsEnoughBag then
  begin
    //    User.SysMsg('你的背包已经满了,无法再携带任何物品了!!!',0);
    GotoLable(User, sGETBACKUPGFULL, False);
    exit;
  end;
  for i := 0 to m_UpgradeWeaponList.Count - 1 do
  begin
    if pTUpgradeInfo(m_UpgradeWeaponList.Items[i]).sUserName = User.m_sCharName
      then
    begin
      n18 := 1;
      if ((GetTickCount -
        pTUpgradeInfo(m_UpgradeWeaponList.Items[i]).dwGetBackTick) >
        g_Config.dwUPgradeWeaponGetBackTime) or (User.m_btPermission >= 4) then
      begin
        UpgradeInfo := m_UpgradeWeaponList.Items[i];
        m_UpgradeWeaponList.Delete(i);
        SaveUpgradingList();
        n18 := 2;
        break;
      end;
    end;
  end;
  //004A0DC2
  if UpgradeInfo <> nil then
  begin
    case UpgradeInfo.btDura of                              //
      0..8:
        begin                                               //004A0DE5
          //       n14:=_MAX(3000,UpgradeInfo.UserItem.DuraMax shr 1);
          if UpgradeInfo.UserItem.DuraMax > 3000 then
          begin
            Dec(UpgradeInfo.UserItem.DuraMax, 3000);
          end
          else
          begin
            UpgradeInfo.UserItem.DuraMax := UpgradeInfo.UserItem.DuraMax shr 1;
          end;
          if UpgradeInfo.UserItem.Dura > UpgradeInfo.UserItem.DuraMax then
            UpgradeInfo.UserItem.Dura := UpgradeInfo.UserItem.DuraMax;
        end;
      9..15:
        begin                                               //004A0E41
          if Random(UpgradeInfo.btDura) < 6 then
          begin
            if UpgradeInfo.UserItem.DuraMax > 1000 then
              Dec(UpgradeInfo.UserItem.DuraMax, 1000);
            if UpgradeInfo.UserItem.Dura > UpgradeInfo.UserItem.DuraMax then
              UpgradeInfo.UserItem.Dura := UpgradeInfo.UserItem.DuraMax;
          end;

        end;
      18..255:
        begin
          case Random(UpgradeInfo.btDura - 18) of
            1..4: Inc(UpgradeInfo.UserItem.DuraMax, 1000);
            5..7: Inc(UpgradeInfo.UserItem.DuraMax, 2000);
            8..255: Inc(UpgradeInfo.UserItem.DuraMax, 4000)
          end;
        end;
    end;                                                    // case
    if (UpgradeInfo.btDc = UpgradeInfo.btMc) and (UpgradeInfo.btMc =
      UpgradeInfo.btSc) then
    begin
      n1C := Random(3);
    end
    else
    begin
      n1C := -1;
    end;
    if ((UpgradeInfo.btDc >= UpgradeInfo.btMc) and (UpgradeInfo.btDc >=
      UpgradeInfo.btSc)) or
      (n1C = 0) then
    begin
      n90 := _MIN(11, UpgradeInfo.btDc);
      n10 := _MIN(85, n90 shl 3 - n90 + 10 + UpgradeInfo.UserItem.btValue[3] -
        UpgradeInfo.UserItem.btValue[4] + User.m_nBodyLuckLevel);
      //      n10:=_MIN(85,n90 * 8 - n90 + 10 + UpgradeInfo.UserItem.btValue[3] - UpgradeInfo.UserItem.btValue[4] + User.m_nBodyLuckLevel);

      if Random(g_Config.nUpgradeWeaponDCRate) < n10 then
      begin //if Random(100) < n10 then begin
        UpgradeInfo.UserItem.btValue[10] := 10;

        if (n10 > 63) and (Random(g_Config.nUpgradeWeaponDCTwoPointRate) = 0)
          then //if (n10 > 63) and (Random(30) = 0) then
          UpgradeInfo.UserItem.btValue[10] := 11;

        if (n10 > 79) and (Random(g_Config.nUpgradeWeaponDCThreePointRate) = 0)
          then //if (n10 > 79) and (Random(200) = 0) then
          UpgradeInfo.UserItem.btValue[10] := 12;
      end
      else
        UpgradeInfo.UserItem.btValue[10] := 1;              //004A0F89
    end;

    if ((UpgradeInfo.btMc >= UpgradeInfo.btDc) and (UpgradeInfo.btMc >=
      UpgradeInfo.btSc)) or
      (n1C = 1) then
    begin
      n90 := _MIN(11, UpgradeInfo.btMc);
      n10 := _MIN(85, n90 shl 3 - n90 + 10 + UpgradeInfo.UserItem.btValue[3] -
        UpgradeInfo.UserItem.btValue[4] + User.m_nBodyLuckLevel);

      if Random(g_Config.nUpgradeWeaponMCRate) < n10 then
      begin //if Random(100) < n10 then begin
        UpgradeInfo.UserItem.btValue[10] := 20;

        if (n10 > 63) and (Random(g_Config.nUpgradeWeaponMCTwoPointRate) = 0)
          then //if (n10 > 63) and (Random(30) = 0) then
          UpgradeInfo.UserItem.btValue[10] := 21;

        if (n10 > 79) and (Random(g_Config.nUpgradeWeaponMCThreePointRate) = 0)
          then //if (n10 > 79) and (Random(200) = 0) then
          UpgradeInfo.UserItem.btValue[10] := 22;
      end
      else
        UpgradeInfo.UserItem.btValue[10] := 1;
    end;

    if ((UpgradeInfo.btSc >= UpgradeInfo.btMc) and (UpgradeInfo.btSc >=
      UpgradeInfo.btDc)) or
      (n1C = 2) then
    begin
      n90 := _MIN(11, UpgradeInfo.btMc);
      n10 := _MIN(85, n90 shl 3 - n90 + 10 + UpgradeInfo.UserItem.btValue[3] -
        UpgradeInfo.UserItem.btValue[4] + User.m_nBodyLuckLevel);

      if Random(g_Config.nUpgradeWeaponSCRate) < n10 then
      begin //if Random(100) < n10 then begin
        UpgradeInfo.UserItem.btValue[10] := 30;

        if (n10 > 63) and (Random(g_Config.nUpgradeWeaponSCTwoPointRate) = 0)
          then //if (n10 > 63) and (Random(30) = 0) then
          UpgradeInfo.UserItem.btValue[10] := 31;

        if (n10 > 79) and (Random(g_Config.nUpgradeWeaponSCThreePointRate) = 0)
          then //if (n10 > 79) and (Random(200) = 0) then
          UpgradeInfo.UserItem.btValue[10] := 32;
      end
      else
        UpgradeInfo.UserItem.btValue[10] := 1;
    end;
    New(UserItem);
    UserItem^ := UpgradeInfo.UserItem;
    DisPose(UpgradeInfo);
    StdItem := UserEngine.GetStdItem(UserItem.wIndex);
    //004A120E
    if StdItem.NeedIdentify = 1 then
      AddGameDataLog('24' + #9 +
        User.m_sMapName + #9 +
        IntToStr(User.m_nCurrX) + #9 +
        IntToStr(User.m_nCurrY) + #9 +
        User.m_sCharName + #9 +
        //UserEngine.GetStdItemName(UserItem.wIndex) + #9 +
        StdItem.Name + #9 +
        IntToStr(UserItem.MakeIndex) + #9 +
        '1' + #9 +
        '0');
    User.AddItemToBag(UserItem);
    User.SendAddItem(UserItem);
  end;
  case n18 of                                               //
    0: GotoLable(User, sGETBACKUPGFAIL, False);
    1: GotoLable(User, sGETBACKUPGING, False);
    2: GotoLable(User, sGETBACKUPGOK, False);
  end;                                                      // case

end;
//获得价格
function TMerchant.GetUserPrice(PlayObject: TPlayObject; nPrice: Integer):
  Integer;                                                  //0049F6E0
var
  n14                                   : Integer;
begin
 Result:=nPrice;
  if m_nPriceRate=0 then  m_nPriceRate:=100;

  if (Playobject=nil) then Exit;
   Result := ROUND(nPrice  * m_nPriceRate/ 100);
  if TARIFF in [1..255] then
     n14:=g_Config.tariff[TARIFF]
  else
     n14:=0;
  Inc(n14,100);
  //沙巴克税率
  Result := ROUND(Result* n14 / 100 );

  if g_CastleManager.IsCastleMember(PlayObject)<>nil then
  begin
    if TARIFF in [1..255] then
       n14:=g_Config.REBATE[TARIFF]
    else
       n14:=100;
    if n14=0 then n14:=100;
    //沙巴克成员折扣
    Result := ROUND(Result* n14 / 100 );
  End;
end;

procedure TMerchant.UserSelect(PlayObject: TPlayObject; sData: string);
//004A1820

  procedure SuperRepairItem(User: TPlayObject);             //004A159C
  begin
    User.SendMsg(self, RM_SENDUSERSREPAIR, 0, Integer(self), 0, 0, '');
  end;

  procedure BuyItem(User: TPlayObject; nInt: Integer);      //004A1378
  var
    i, n10, nStock, nPrice              : Integer;
    nSubMenu                            : ShortInt;
    sSENDMSG, sName                     : string;
    UserItem                            : pTUserItem;
    StdItem                             : pTStdItem;
    List14                              : TMyList;

  begin
    sSENDMSG := '';
    n10 := 0;
    for i := 0 to m_GoodsList.Count - 1 do
    begin
      List14 := TMyList(m_GoodsList.Items[i]);
      UserItem := List14.Items[0];
      StdItem := UserEngine.GetStdItem(UserItem.wIndex);
      if StdItem <> nil then
      begin
        //取自定义物品名称
        sName := '';
        if UserItem.btValue[13] = 1 then
          sName := ItemUnit.GetCustomItemName(UserItem.MakeIndex,
            UserItem.wIndex);
        if sName = '' then
          sName := StdItem.Name;

        nPrice := GetUserPrice(User, GetItemPrice(UserItem.wIndex));
        nStock := List14.Count;
        if (StdItem.StdMode <= 4) or
          (StdItem.StdMode = 42) or
          (StdItem.StdMode = 31) then
          nSubMenu := 0
        else
          nSubMenu := 1;
        sSENDMSG := sSENDMSG + sName + '/' + IntToStr(nSubMenu) + '/' +
          IntToStr(nPrice) + '/' + IntToStr(nStock) + '/';
        Inc(n10);
      end;
    end;                                                    // for
    User.SendMsg(self, RM_SENDGOODSLIST, 0, Integer(self), n10, 0, sSENDMSG);
  end;

  procedure SellItem(User: TPlayObject);                    //004A1544
  begin
    User.SendMsg(self, RM_SENDUSERSELL, 0, Integer(self), 0, 0, '');
  end;

  procedure RepairItem(User: TPlayObjec

⌨️ 快捷键说明

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