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

📄 objnpc.pas

📁 翎风世界..传奇服务端..DELPHI源代码 包括DBServer,LogDataServer,LoginGate,LoginSrv,M2Server等..内容齐全.
💻 PAS
📖 第 1 页 / 共 5 页
字号:
          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 + -