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

📄 itmunit.pas

📁 传世源码可编译的,功能齐全.是学习的好模版,会DELPHI的朋友们也可以自己修改,弄个自己的引擎.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit ItmUnit;

interface
uses
  Windows,Classes,SysUtils,Grobal2;
type
  TItemUnit = class
  private
    function GetRandomRange(nCount, nRate: Integer): Integer;
  public
    m_ItemNameList        :TGList;
    m_BagItemPoslist      :TGList;
    constructor Create();
    destructor Destroy; override;
    procedure GetItemAddValue(UserItem:pTUserItem;var StdItem:TStdItem);
    procedure GetItemAddValue2(UserItem:pTUserItem;var StdItem:TOStdItem);


    procedure RandomUpgradeWeapon(UserItem:pTUserItem);
    procedure RandomUpgradeDress(UserItem:pTUserItem);
    procedure RandomUpgrade19(UserItem:pTUserItem);
    procedure RandomUpgrade202124(UserItem:pTUserItem);
    procedure RandomUpgrade26(UserItem:pTUserItem);
    procedure RandomUpgrade22(UserItem:pTUserItem);
    procedure RandomUpgrade23(UserItem:pTUserItem);
    procedure RandomUpgradeHelMet(UserItem:pTUserItem);
    procedure UnknowHelmet(UserItem:pTUserItem);
    procedure UnknowRing(UserItem:pTUserItem);
    procedure UnknowNecklace(UserItem:pTUserItem);
    function LoadCustomItemName():Boolean;
    function SaveCustomItemName():Boolean;
    function AddCustomItemName(nMakeIndex,nItemIndex:Integer;sItemName:String):Boolean;
    function DelCustomItemName(nMakeIndex,nItemIndex:Integer):Boolean;
    function GetCustomItemName(nMakeIndex,nItemIndex:Integer):String;
    procedure Lock();
    procedure UnLock();
  end;
implementation

uses HUtil32, M2Share;

{ TItemUnit }

constructor TItemUnit.Create;
begin
  m_ItemNameList:=TGList.Create;
end;

destructor TItemUnit.Destroy;
var
  I: Integer;
begin
  for I := 0 to m_ItemNameList.Count - 1 do begin
    Dispose(pTItemName(m_ItemNameList.Items[I]));
  end;
  m_ItemNameList.Free;
  inherited;
end;

function TItemUnit.GetRandomRange(nCount, nRate:Integer):Integer; //00494794
var
  I: Integer;
begin
  Result:=0;
  for I := 0 to nCount - 1 do
    if Random(nRate)= 0 then Inc(Result);
end;
procedure TItemUnit.RandomUpgradeWeapon(UserItem: pTUserItem); //00494794
var
  nC,n10,n14:Integer;
begin
  nC:=GetRandomRange(g_Config.nWeaponDCAddValueMaxLimit{12},g_Config.nWeaponDCAddValueRate{15});
  if Random(15) = 0 then UserItem.btValue[0]:=nC + 1;

  nC:=GetRandomRange(12,15);
  if Random(20) = 0 then begin
    n14:=(nC + 1) div 3;
    if n14 > 0 then begin
      if Random(3) <> 0 then begin
        UserItem.btValue[6]:=n14;
      end else begin
        UserItem.btValue[6]:=n14 + 10;
      end;
    end;
  end;

  nC:=GetRandomRange(12,15);
  if Random(15) = 0 then UserItem.btValue[1]:=nC + 1;
  nC:=GetRandomRange(12,15);
  if Random(15) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(12,15);
  if Random(24) = 0 then begin
    UserItem.btValue[5]:=nC div 2 + 1;
  end;
  nC:=GetRandomRange(12,12);
  if Random(3) < 2 then begin
    n10:=(nC + 1) * 2000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;
  nC:=GetRandomRange(12,15);
  if Random(10) = 0 then begin
    UserItem.btValue[7]:=nC div 2 + 1;
  end;    
end;

procedure TItemUnit.RandomUpgradeDress(UserItem: pTUserItem); //00494958
var
  nC,n10:Integer;
begin
  nC:=GetRandomRange(6,15);
  if Random(30) = 0 then UserItem.btValue[0]:=nC + 1;
  nC:=GetRandomRange(6,15);
  if Random(30) = 0 then UserItem.btValue[1]:=nC + 1;

  nC:=GetRandomRange(g_Config.nDressDCAddValueMaxLimit{6},g_Config.nDressDCAddValueRate{20});
  if Random(g_Config.nDressDCAddRate{40}) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(g_Config.nDressMCAddValueMaxLimit{6},g_Config.nDressMCAddValueRate{20});
  if Random(g_Config.nDressMCAddRate{40}) = 0 then UserItem.btValue[3]:=nC + 1;
  nC:=GetRandomRange(g_Config.nDressSCAddValueMaxLimit{6},g_Config.nDressSCAddValueRate{20});
  if Random(g_Config.nDressSCAddRate{40}) = 0 then UserItem.btValue[4]:=nC + 1;
  
  nC:=GetRandomRange(6,10);
  if Random(8) < 6 then begin
    n10:=(nC + 1) * 2000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;
end;

procedure TItemUnit.RandomUpgrade202124(UserItem: pTUserItem);//00494AB0
var
  nC,n10:Integer;
begin
  nC:=GetRandomRange(6,30);
  if Random(60) = 0 then UserItem.btValue[0]:=nC + 1;
  nC:=GetRandomRange(6,30);
  if Random(60) = 0 then UserItem.btValue[1]:=nC + 1;
  nC:=GetRandomRange(g_Config.nNeckLace202124DCAddValueMaxLimit{6},g_Config.nNeckLace202124DCAddValueRate{20});
  if Random(g_Config.nNeckLace202124DCAddRate{30}) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(g_Config.nNeckLace202124MCAddValueMaxLimit{6},g_Config.nNeckLace202124MCAddValueRate{20});
  if Random(g_Config.nNeckLace202124MCAddRate{30}) = 0 then UserItem.btValue[3]:=nC + 1;
  nC:=GetRandomRange(g_Config.nNeckLace202124SCAddValueMaxLimit{6},g_Config.nNeckLace202124SCAddValueRate{20});
  if Random(g_Config.nNeckLace202124SCAddRate{30}) = 0 then UserItem.btValue[4]:=nC + 1;
  nC:=GetRandomRange(6,12);
  if Random(20) < 15 then begin
    n10:=(nC + 1) * 1000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;

end;

procedure TItemUnit.RandomUpgrade26(UserItem: pTUserItem); //00494C08
var
  nC,n10:Integer;
begin
  nC:=GetRandomRange(6,20);
  if Random(20) = 0 then UserItem.btValue[0]:=nC + 1;
  nC:=GetRandomRange(6,20);
  if Random(20) = 0 then UserItem.btValue[1]:=nC + 1;
  nC:=GetRandomRange(g_Config.nArmRing26DCAddValueMaxLimit{6},g_Config.nArmRing26DCAddValueRate{20});
  if Random(g_Config.nArmRing26DCAddRate{30}) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(g_Config.nArmRing26MCAddValueMaxLimit{6},g_Config.nArmRing26MCAddValueRate{20});
  if Random(g_Config.nArmRing26MCAddRate{30}) = 0 then UserItem.btValue[3]:=nC + 1;
  nC:=GetRandomRange(g_Config.nArmRing26SCAddValueMaxLimit{6},g_Config.nArmRing26SCAddValueRate{20});
  if Random(g_Config.nArmRing26SCAddRate{30}) = 0 then UserItem.btValue[4]:=nC + 1;
  nC:=GetRandomRange(6,12);
  if Random(20) < 15 then begin
    n10:=(nC + 1) * 1000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;

end;

procedure TItemUnit.RandomUpgrade19(UserItem: pTUserItem); //00494D60
var
  nC,n10:Integer;
begin
  nC:=GetRandomRange(6,20);
  if Random(40) = 0 then UserItem.btValue[0]:=nC + 1;
  nC:=GetRandomRange(6,20);
  if Random(40) = 0 then UserItem.btValue[1]:=nC + 1;

  nC:=GetRandomRange(g_Config.nNeckLace19DCAddValueMaxLimit{6},g_Config.nNeckLace19DCAddValueRate{20});
  if Random(g_Config.nNeckLace19DCAddRate{30}) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(g_Config.nNeckLace19MCAddValueMaxLimit{6},g_Config.nNeckLace19MCAddValueRate{20});
  if Random(g_Config.nNeckLace19MCAddRate{30}) = 0 then UserItem.btValue[3]:=nC + 1;
  nC:=GetRandomRange(g_Config.nNeckLace19SCAddValueMaxLimit{6},g_Config.nNeckLace19SCAddValueRate{20});
  if Random(g_Config.nNeckLace19SCAddRate{30}) = 0 then UserItem.btValue[4]:=nC + 1;
  nC:=GetRandomRange(6,10);
  if Random(4) < 3 then begin
    n10:=(nC + 1) * 1000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;

end;

procedure TItemUnit.RandomUpgrade22(UserItem: pTUserItem);//00494EB8
var
  nC,n10:Integer;
begin
  nC:=GetRandomRange(g_Config.nRing22DCAddValueMaxLimit{6},g_Config.nRing22DCAddValueRate{20});
  if Random(g_Config.nRing22DCAddRate{30}) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(g_Config.nRing22MCAddValueMaxLimit{6},g_Config.nRing22MCAddValueRate{20});
  if Random(g_Config.nRing22MCAddRate{30}) = 0 then UserItem.btValue[3]:=nC + 1;
  nC:=GetRandomRange(g_Config.nRing22SCAddValueMaxLimit{6},g_Config.nRing22SCAddValueRate{20});
  if Random(g_Config.nRing22SCAddRate{30}) = 0 then UserItem.btValue[4]:=nC + 1;
  nC:=GetRandomRange(6,12);
  if Random(4) < 3 then begin
    n10:=(nC + 1) * 1000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;

end;

procedure TItemUnit.RandomUpgrade23(UserItem: pTUserItem);//00494FB8
var
  nC,n10:Integer;
begin
  nC:=GetRandomRange(6,20);
  if Random(40) = 0 then UserItem.btValue[0]:=nC + 1;
  nC:=GetRandomRange(6,20);
  if Random(40) = 0 then UserItem.btValue[1]:=nC + 1;
  nC:=GetRandomRange(g_Config.nRing23DCAddValueMaxLimit{6},g_Config.nRing23DCAddValueRate{20});
  if Random(g_Config.nRing23DCAddRate{30}) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(g_Config.nRing23MCAddValueMaxLimit{6},g_Config.nRing23MCAddValueRate{20});
  if Random(g_Config.nRing23MCAddRate{30}) = 0 then UserItem.btValue[3]:=nC + 1;
  nC:=GetRandomRange(g_Config.nRing23SCAddValueMaxLimit{6},g_Config.nRing23SCAddValueRate{20});
  if Random(g_Config.nRing23SCAddRate{30}) = 0 then UserItem.btValue[4]:=nC + 1;
  nC:=GetRandomRange(6,12);
  if Random(4) < 3 then begin
    n10:=(nC + 1) * 1000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;

end;

procedure TItemUnit.RandomUpgradeHelMet(UserItem: pTUserItem);//00495110
var
  nC,n10:Integer;
begin
  nC:=GetRandomRange(6,20);
  if Random(40) = 0 then UserItem.btValue[0]:=nC + 1;
  nC:=GetRandomRange(6,20);
  if Random(30) = 0 then UserItem.btValue[1]:=nC + 1;
  nC:=GetRandomRange(g_Config.nHelMetDCAddValueMaxLimit{6},g_Config.nHelMetDCAddValueRate{20});
  if Random(g_Config.nHelMetDCAddRate{30}) = 0 then UserItem.btValue[2]:=nC + 1;
  nC:=GetRandomRange(g_Config.nHelMetMCAddValueMaxLimit{6},g_Config.nHelMetMCAddValueRate{20});
  if Random(g_Config.nHelMetMCAddRate{30}) = 0 then UserItem.btValue[3]:=nC + 1;
  nC:=GetRandomRange(g_Config.nHelMetSCAddValueMaxLimit{6},g_Config.nHelMetSCAddValueRate{20});
  if Random(g_Config.nHelMetSCAddRate{30}) = 0 then UserItem.btValue[4]:=nC + 1;
  nC:=GetRandomRange(6,12);
  if Random(4) < 3 then begin
    n10:=(nC + 1) * 1000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + n10);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + n10);
  end;

end;

procedure TItemUnit.UnknowHelmet(UserItem: pTUserItem);//00495268 神秘头盔
var
  nC,nRandPoint,n14:Integer;
begin
  nRandPoint:={GetRandomRange(4,3) + GetRandomRange(4,8) + }GetRandomRange(g_Config.nUnknowHelMetACAddValueMaxLimit{4},g_Config.nUnknowHelMetACAddRate{20});
  if nRandPoint > 0 then  UserItem.btValue[0]:=nRandPoint;
  n14:=nRandPoint;
  nRandPoint:={GetRandomRange(4,3) + GetRandomRange(4,8) + }GetRandomRange(g_Config.nUnknowHelMetMACAddValueMaxLimit{4},g_Config.nUnknowHelMetMACAddRate{20});
  if nRandPoint > 0 then  UserItem.btValue[1]:=nRandPoint;
  Inc(n14,nRandPoint);
  nRandPoint:={GetRandomRange(3,15) + }GetRandomRange(g_Config.nUnknowHelMetDCAddValueMaxLimit{3},g_Config.nUnknowHelMetDCAddRate{30});
  if nRandPoint > 0 then  UserItem.btValue[2]:=nRandPoint;
  Inc(n14,nRandPoint);
  nRandPoint:={GetRandomRange(3,15) + }GetRandomRange(g_Config.nUnknowHelMetMCAddValueMaxLimit{3},g_Config.nUnknowHelMetMCAddRate{30});
  if nRandPoint > 0 then  UserItem.btValue[3]:=nRandPoint;
  Inc(n14,nRandPoint);
  nRandPoint:={GetRandomRange(3,15) + }GetRandomRange(g_Config.nUnknowHelMetSCAddValueMaxLimit{3},g_Config.nUnknowHelMetSCAddRate{30});
  if nRandPoint > 0 then  UserItem.btValue[4]:=nRandPoint;
  Inc(n14,nRandPoint);
  nRandPoint:=GetRandomRange(6,30);
  if nRandPoint > 0 then begin
    nC:=(nRandPoint + 1) * 1000;
    UserItem.DuraMax:=_MIN(65000,UserItem.DuraMax + nC);
    UserItem.Dura:=_MIN(65000,UserItem.Dura + nC);
  end;
  if Random(30) = 0 then UserItem.btValue[7]:=1;
  UserItem.btValue[8]:=1;
  if n14 >= 3 then begin
    if UserItem.btValue[0] >= 5 then begin
      UserItem.btValue[5]:=1;
      UserItem.btValue[6]:=UserItem.btValue[0] * 3 + 25;
      exit;
    end;
    if UserItem.btValue[2] >= 2 then begin
      UserItem.btValue[5]:=1;
      UserItem.btValue[6]:=UserItem.btValue[2] * 4 + 35;
      exit;
    end;
    if UserItem.btValue[3] >= 2 then begin
      UserItem.btValue[5]:=2;
      UserItem.btValue[6]:=UserItem.btValue[3] * 2 + 18;
      exit;
    end;
    if UserItem.btValue[4] >= 2 then begin
      UserItem.btValue[5]:=3;
      UserItem.btValue[6]:=UserItem.btValue[4] * 2 + 18;
      exit;
    end;
    UserItem.btValue[6]:=n14 * 2 + 18;
  end;

end;

procedure TItemUnit.UnknowRing(UserItem: pTUserItem);//00495500 神秘戒指
var
  nC,n10,n14:Integer;
begin
  n10:={GetRandomRange(4,3) + GetRandomRange(4,8) + }GetRandomRange(g_Config.nUnknowRingACAddValueMaxLimit{6},g_Config.nUnknowRingACAddRate{20});
  if n10 > 0 then  UserItem.btValue[0]:=n10;
  n14:=n10;
  n10:={GetRandomRange(4,3) + GetRandomRange(4,8) + }GetRandomRange(g_Config.nUnknowRingMACAddValueMaxLimit{6},g_Config.nUnknowRingMACAddRate{20});
  if n10 > 0 then  UserItem.btValue[1]:=n10;
  Inc(n14,n10);

⌨️ 快捷键说明

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