📄 objnpc.pas
字号:
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
{
if m_boCastle then begin
if UserCastle.IsMasterGuild(TGuild(PlayObject.m_MyGuild)) then begin
n14:=_MAX(60,ROUND(m_nPriceRate * 8.0000000000000000001e-1));//80%
Result:=ROUND(nPrice / 1.0e2 * n14); //100
end else begin
Result:=ROUND(nPrice / 1.0e2 * m_nPriceRate);
end;
end else begin
Result:=ROUND(nPrice / 1.0e2 * m_nPriceRate);
end;
}
if m_boCastle then begin
// if UserCastle.IsMasterGuild(TGuild(PlayObject.m_MyGuild)) then begin
if (m_Castle <> nil) and TUserCastle(m_Castle).IsMasterGuild(TGuild(PlayObject.m_MyGuild)) then begin
n14:=_MAX(60,ROUND(m_nPriceRate * (g_Config.nCastleMemberPriceRate / 100)));//80%
Result:=ROUND(nPrice / 100 * n14); //100
end else begin
Result:=ROUND(nPrice / 100 * m_nPriceRate);
end;
end else begin
Result:=ROUND(nPrice / 100 * m_nPriceRate);
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:TItem;
List14:TList;
sUserItemName:String;
begin
sSendMsg:='';
n10:=0;
for I := 0 to m_GoodsList.Count - 1 do begin
List14:=TList(m_GoodsList.Items[i]);
UserItem:=List14.Items[0];
StdItem:=UserEngine.GetStdItem(UserItem.wIndex);
if StdItem <> nil then begin
//取自定义物品名称
sName:=GetItemName(UserItem);
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:TPlayObject); //004A1570
begin
User.SendMsg(Self,RM_SENDUSERREPAIR,0,Integer(Self),0,0,'');
end;
procedure MakeDurg(User:TPlayObject); //004A16A0
var
I:Integer;
List14:TList;
UserItem:pTUserItem;
StdItem:TItem;
sSendMsg:String;
nSubMenu:Integer;
nPrice:Integer;
nStock:Integer;
begin
sSendMsg:='';
for I := 0 to m_GoodsList.Count - 1 do begin
List14:=TList(m_GoodsList.Items[i]);
//if List14.Count <= 0 then Continue; //0807 增加,防止在制药物品列表为空时出错
UserItem:=List14.Items[0];
StdItem:=UserEngine.GetStdItem(UserItem.wIndex);
if StdItem <> nil then begin
sSendMsg:=sSendMsg + StdItem.Name + '/' + IntToStr(0) + '/' + IntToStr(g_Config.nMakeDurgPrice) + '/' + IntToStr(1) + '/';
end;
end;
if sSendMsg <> '' then
User.SendMsg(Self,RM_USERMAKEDRUGITEMLIST,0,Integer(Self),0,0,sSendMsg);
end;
procedure ItemPrices(User:TPlayObject); //
begin
end;
procedure Storage(User:TPlayObject); //004A1648
begin
User.SendMsg(Self,RM_USERSTORAGEITEM,0,Integer(Self),0,0,'');
end;
procedure GetBack(User:TPlayObject); //004A1674
begin
User.SendMsg(Self,RM_USERGETBACKITEM,0,Integer(Self),0,0,'');
end;
var
sLabel,s18,sMsg:String;
boCanJmp:Boolean;
ResourceString
sExceptionMsg = '[Exception] TMerchant::UserSelect... Data: %s';
begin //004A1820
inherited;
if not (ClassNameIs(TMerchant.ClassName)) then exit; //如果类名不是 TMerchant 则不执行以下处理函数
try
// PlayObject.m_nScriptGotoCount:=0;
// if not m_boCastle or not UserCastle.m_boUnderWar then begin
if not m_boCastle or not ((m_Castle <> nil) and TUserCastle(m_Castle).m_boUnderWar) then begin
if not PlayObject.m_boDeath and (sData <> '') and (sData[1] = '@') then begin
sMsg:=GetValidStr3(sData, sLabel, [#13]);
s18:='';
PlayObject.m_sScriptLable:=sData;
boCanJmp:= PlayObject.LableIsCanJmp(sLabel);
if CompareText(sLabel,sSL_SENDMSG) = 0 then begin
if sMsg = '' then exit;
end;
GotoLable(PlayObject,sLabel,not boCanJmp);
if not boCanJmp then exit;
if CompareText(sLabel,sSL_SENDMSG) = 0 then begin
if m_boSendmsg then SendCustemMsg(PlayObject,sMsg);
end else
if CompareText(sLabel,sSUPERREPAIR) = 0 then begin
if m_boS_repair then SuperRepairItem(PlayObject);
end else
if CompareText(sLabel,sBUY) = 0 then begin
if m_boBuy then BuyItem(PlayObject,0);
end else
if CompareText(sLabel,sSELL) = 0 then begin
if m_boSell then SellItem(PlayObject);
end else
if CompareText(sLabel,sREPAIR) = 0 then begin
if m_boRepair then RepairItem(PlayObject);
end else
if CompareText(sLabel,sMAKEDURG) = 0 then begin
if m_boMakeDrug then MakeDurg(PlayObject);
end else
if CompareText(sLabel,sPRICES) = 0 then begin
if m_boPrices then ItemPrices(PlayObject);
end else
if CompareText(sLabel,sSTORAGE) = 0 then begin
if m_boStorage then Storage(PlayObject);
end else
if CompareText(sLabel,sGETBACK) = 0 then begin
if m_boGetback then GetBack(PlayObject);
end else
if CompareText(sLabel,sUPGRADENOW) = 0 then begin
if m_boUpgradenow then UpgradeWapon(PlayObject);
end else
if CompareText(sLabel,sGETBACKUPGNOW) = 0 then begin
if m_boGetBackupgnow then GetBackupgWeapon(PlayObject);
end else
if CompareText(sLabel,sGETMARRY) = 0 then begin
if m_boGetMarry then GetBackupgWeapon(PlayObject);
end else
if CompareText(sLabel,sGETMASTER) = 0 then begin
if m_boGetMaster then GetBackupgWeapon(PlayObject);
end else
if CompareLStr(sLabel,sUSEITEMNAME,Length(sUSEITEMNAME)) then begin
if m_boUseItemName then ChangeUseItemName(PlayObject,sLabel,sMsg);
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;//004A1A3E
end;//004A187E
except
MainOutMessage(format(sExceptionMsg,[sData]));
end;
end;
procedure TMerchant.Run(); //004A2ECC
var
nCheckCode:Integer;
ResourceString
sExceptionMsg1 = '[Exception] TMerchant::Run... Code = %d';
sExceptionMsg2 = '[Exception] TMerchant::Run -> Move Code = %d';
begin
nCheckCode:=0;
try
if (GetTickCount - dwRefillGoodsT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -