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

📄 objnpc.~pas

📁 继续更新AFT源代码 现在解决了无法登陆游戏的问题 用0504的dbserver就可以登陆了 去掉了绿字广告 降低内存占用HOO 去掉了大量的验证问题
💻 ~PAS
📖 第 1 页 / 共 5 页
字号:
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):TList; //0049F118
var
  I: Integer;
  List:TList;
  UserItem:pTUserItem;
begin
  Result:=nil;
  if nIndex <= 0 then exit;
  for I := 0 to m_GoodsList.Count - 1 do begin
    List:=TList(m_GoodsList.Items[i]);
    if List.Count > 0 then begin


      UserItem:=List.Items[0];
      if UserItem=nil then begin   //==2006,8,3  B7抱错
        List.Delete(0);          //
        continue;                  //
      end;                         //

      if pTUserItem(List.Items[0]).wIndex = nIndex then begin
        Result:=List;
        Break;
      end;
    end;
  end;
end;

procedure TMerchant.RefillGoods;//0049F950
  procedure RefillItems(var List:TList;sItemName:String;nInt:Integer); //0049F824
  var
    I: Integer;
    UserItem:pTUserItem;
  begin
    if List = nil then begin
      List:=TList.Create;
      m_GoodsList.Add(List);
    end;
    for I := 0 to nInt - 1 do begin
      New(UserItem);
      if UserEngine.CopyToUserItemFromName(sItemName,UserItem) then begin
        List.Insert(0,UserItem);
      end else Dispose(UserItem);
    end;
  end;
  procedure DelReFillItem(var List:TList;nInt:Integer); //0049F8F8
  var
    I: Integer;
  begin
    for I := List.Count - 1 downto 0 do begin
      if nInt <= 0 then break;
      Dispose(pTUserItem(List.Items[i]));
      List.Delete(i);
      Dec(nInt);
    end;
  end;

var
  I,II: Integer;
  Goods:pTGoods;
  nIndex,nRefillCount:Integer;
  RefillList,RefillList20:TList;
  bo21:Boolean;
ResourceString
  sExceptionMsg = '[Exception] TMerchant::RefillGoods %s/%d:%d [%s] Code:%d';
begin //0049F950
  try
    for I := 0 to m_RefillGoodsList.Count - 1 do begin
      Goods:=m_RefillGoodsList.Items[i];
      if (GetTickCount - Goods.dwRefillTick) > Goods.dwRefillTime * 60 * 1000 then begin
        Goods.dwRefillTick:=GetTickCount();
        nIndex:=UserEngine.GetStdItemIdx(Goods.sItemName);
        if nIndex >= 0 then begin
          RefillList:=GetRefillList(nIndex);
          nRefillCount:=0;
          if RefillList <> nil then nRefillCount:=RefillList.Count;
          if Goods.nCount > nRefillCount then begin
            CheckItemPrice(nIndex);
            RefillItems(RefillList,Goods.sItemName,Goods.nCount - nRefillCount);
            FrmDB.SaveGoodRecord(Self,m_sScript + '-' + m_sMapName);
            FrmDB.SaveGoodPriceRecord(Self,m_sScript + '-' + m_sMapName);
          end;
          if Goods.nCount < nRefillCount then begin
            DelReFillItem(RefillList,nRefillCount - Goods.nCount);
            FrmDB.SaveGoodRecord(Self,m_sScript + '-' + m_sMapName);
            FrmDB.SaveGoodPriceRecord(Self,m_sScript + '-' + m_sMapName);
          end;
        end; //0049FB83
      end;
    end;
    for I := 0 to m_GoodsList.Count - 1 do begin
      RefillList20:=TList(m_GoodsList.Items[I]);
      if RefillList20.Count > 1000 then begin
        bo21:=False;
        for II := 0 to m_RefillGoodsList.Count - 1 do begin
          Goods:=m_RefillGoodsList.Items[II];
          nIndex:=UserEngine.GetStdItemIdx(Goods.sItemName);
          if pTItemPrice(RefillList20.Items[0]).wIndex = nIndex then begin
            bo21:=True;
            break;
          end;
        end;
        if not bo21 then begin
          DelReFillItem(RefillList20,RefillList20.Count - 1000);
        end else begin
          DelReFillItem(RefillList20,RefillList20.Count - 5000);
        end;
      end; //0049FC79
    end;
  except
    on e: Exception do
    MainOutMessage(format(sExceptionMsg,[m_sCharName,m_nCurrX,m_nCurrY,e.Message,nCheck]));
  end;
end;
function TMerchant.CheckItemType(nStdMode:Integer):Boolean; //0049F374
var
  I: Integer;
begin
  Result:=False;
  for I := 0 to m_ItemTypeList.Count - 1 do begin
    if Integer(m_ItemTypeList.Items[i]) = nStdMode then begin
      Result:=True;
      break;
    end;      
  end;
end;
function TMerchant.GetItemPrice(nIndex:Integer):Integer; //0049F374
var
  I: Integer;
  ItemPrice:pTItemPrice;
  StdItem:pTStdItem;
begin
  Result:= -1;
  for I := 0 to m_ItemPriceList.Count - 1 do begin
    ItemPrice:=m_ItemPriceList.Items[i];
    if ItemPrice.wIndex = nIndex then begin
      Result:=ItemPrice.nPrice;
      break;
    end;
  end;    // for
  if Result < 0 then begin
    StdItem:=UserEngine.GetStdItem(nIndex);
    if StdItem <> nil then begin
      if CheckItemType(StdItem.StdMode) then
        Result:=StdItem.Price;
    end;
  end;    
end;
procedure TMerchant.SaveUpgradingList(); //0049FF84
begin
  try
    //FrmDB.SaveUpgradeWeaponRecord(m_sCharName,m_UpgradeWeaponList);
    FrmDB.SaveUpgradeWeaponRecord(m_sScript + '-' + m_sMapName,m_UpgradeWeaponList);
  except
    MainOutMessage('Failure in saving upgradinglist - ' + m_sCharName);
  end;
end;
procedure TMerchant.UpgradeWapon(User:TPlayObject); //004A0920
  procedure sub_4A0218(ItemList:TList;var btDc:Byte;var btSc:Byte;var btMc:Byte;var btDura:Byte);
  var
    I,II: Integer;
    DuraList:TList;
    UserItem:pTUserItem;
    StdItem:pTStdItem;
    StdItem80:TStdItem;
    DelItemList:TStringList;
    nDc,nSc,nMc,nDcMin,nDcMax,nScMin,nScMax,nMcMin,nMcMax,nDura,nItemCount:Integer;
  begin
    nDcMin:=0;
    nDcMax:=0;
    nScMin:=0;
    nScMax:=0;
    nMcMin:=0;
    nMcMax:=0;
    nDura:=0;
    nItemCount:=0;
    DelItemList:=nil;
    DuraList:=TList.Create;
    for I := ItemList.Count - 1 downto 0 do begin
      UserItem:=ItemList.Items[I];
      if UserEngine.GetStdItemName(UserItem.wIndex) = g_Config.sBlackStone then begin
        DuraList.Add(Pointer(ROUND(UserItem.Dura / 1.0e3)));
        if DelItemList = nil then DelItemList:=TStringList.Create;
        DelItemList.AddObject(g_Config.sBlackStone,TObject(UserItem.MakeIndex));
        DisPose(UserItem);
        ItemList.Delete(I);
      end else begin
        if IsUseItem(UserItem.wIndex) then begin
          StdItem:=UserEngine.GetStdItem(UserItem.wIndex);
          if StdItem <> nil then begin
            StdItem80:=StdItem^;
            ItemUnit.GetItemAddValue(UserItem,StdItem80);
            nDc:=0;
            nSc:=0;
            nMc:=0;
            case StdItem80.StdMode of
              19,20,21: begin //004A0421
                nDc:=HiWord(StdItem80.DC) + LoWord(StdItem80.DC);
                nSc:=HiWord(StdItem80.SC) + LoWord(StdItem80.SC);
                nMc:=HiWord(StdItem80.MC) + LoWord(StdItem80.MC);
              end;
              22,23: begin //004A046E
                nDc:=HiWord(StdItem80.DC) + LoWord(StdItem80.DC);
                nSc:=HiWord(StdItem80.SC) + LoWord(StdItem80.SC);
                nMc:=HiWord(StdItem80.MC) + LoWord(StdItem80.MC);
              end;
              24,26: begin
                nDc:=HiWord(StdItem80.DC) + LoWord(StdItem80.DC) + 1;
                nSc:=HiWord(StdItem80.SC) + LoWord(StdItem80.SC) + 1;
                nMc:=HiWord(StdItem80.MC) + LoWord(StdItem80.MC) + 1;
              end;
            end;
            if nDcMin < nDc then begin
              nDcMax:=nDcMin;
              nDcMin:=nDc;
            end else begin
              if nDcMax < nDc then nDcMax:=nDc;
            end;
            if nScMin < nSc then begin
              nScMax:=nScMin;
              nScMin:=nSc;
            end else begin
              if nScMax < nSc then nScMax:=nSc;
            end;
            if nMcMin < nMc then begin
              nMcMax:=nMcMin;
              nMcMin:=nMc;
            end else begin
              if nMcMax < nMc then nMcMax:=nMc;
            end;
            if DelItemList = nil then DelItemList:=TStringList.Create;
            DelItemList.AddObject(StdItem.Name,TObject(UserItem.MakeIndex));
            //004A06DB
            if StdItem.NeedIdentify = 1 then
            AddGameDataLog('26' +  #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');
            DisPose(UserItem);
            ItemList.Delete(I);
          end;
        end;
      end;
    end;    // for
    for I := 0 to DuraList.Count - 1 do begin
      for II := DuraList.Count -1 downto i + 1 do begin
        if Integer(DuraList.Items[II]) > Integer(DuraList.Items[II- 1]) then
          DuraList.Exchange(II,II-1);
      end;    // for
    end;    // for
    for I := 0 to DuraList.Count - 1 do begin

⌨️ 快捷键说明

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