📄 objnpc.pas
字号:
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 + -