📄 objnpc.pas
字号:
end;
procedure TMerchant.RefillGoods; //0049F950
procedure RefillItems(var List: TMyList; sItemName: string; nInt: Integer);
//0049F824
var
i : Integer;
UserItem : pTUserItem;
begin
if List = nil then
begin
List := TMyList.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: TMyList; 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 : TMyList;
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 (Goods=nil) or (Goods.sLabel<>'') then Continue;
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 := TMyList(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: TMyList; var btDc: Byte; var btSc: Byte; var
btMc:
Byte; var btDura: Byte);
var
i, ii : Integer;
DuraList : TMyList;
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 := TMyList.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
nDura := nDura + Integer(DuraList.Items[i]);
Inc(nItemCount);
if nItemCount >= 5 then
break;
end;
btDura := ROUND(_MIN(5, nItemCount) + _MIN(5, nItemCount) * ((nDura /
nItemCount) / 5.0));
btDc := nDcMin div 5 + nDcMax div 3;
btSc := nScMin div 5 + nScMax div 3;
btMc := nMcMin div 5 + nMcMax div 3;
if DelItemList <> nil then
User.SendMsg(self, RM_SENDDELITEMLIST, 0, Integer(DelItemList), 0, 0, '');
if DuraList <> nil then
DuraList.Free;
end;
var
i : Integer;
bo0D : Boolean;
UpgradeInfo : pTUpgradeInfo;
StdItem : pTStdItem;
Rebate : Integer;
begin
bo0D := False;
for i := 0 to m_UpgradeWeaponList.Count - 1 do
begin
UpgradeInfo := m_UpgradeWeaponList.Items[i];
if UpgradeInfo.sUserName = User.m_sCharName then
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -