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

📄 itmunit.pas

📁 原版翎风(LF)引擎(M2)源码(Delphi)
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit ItmUnit;

interface
uses
  Windows, Classes, SysUtils, Grobal2, MudUtil, SDK;
type
  TItemUnit = class
  public
    m_ItemNameList: TGList;
    constructor Create();
    destructor Destroy; override;

    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;

  TItem = class
  public
    ItemType: Byte;
      Name: string[20];
    StdMode: Byte;
    Shape: Byte;
    Weight: Byte;
    AniCount: Byte;
    Source: ShortInt;
    Reserved: Byte;
    NeedIdentify: Byte;
    Looks: Word;
    DuraMax: dword;
    AC, AC2: Word;
    MAC, MAC2: Word;
    DC, DC2: Word;
    MC, MC2: Word;
    SC, SC2: Word;
    Need: dword;
    NeedLevel: dword;
    Price: UINT;
    stock: UINT;

    //New Fields
    Undead: ShortInt;
    Light: Boolean;
    Unique: Boolean;

  private
    function GetRandomRange(nCount, nRate: Integer): Integer;

  public
    constructor Create();
    destructor Destroy; override;

    procedure GetStandardItem(var StdItem: TStdItem);
    procedure GetItemAddValue(UserItem: pTUserItem; var StdItem: TStdItem);
    //function  GetCustomName(UserItem:pTUserItem):String;
    procedure ApplyItemParameters(var AddAbility: TAddAbility);
    procedure RandomUpgradeItem(UserItem: pTUserItem);
    procedure RandomUpgradeUnknownItem(UserItem: pTUserItem);
  end;

function GetItemName(UserItem: pTUserItem): string;

implementation

uses HUtil32, M2Share;





{ TItem }


constructor TItem.Create;
begin
  inherited;
end;

destructor TItem.Destroy;
begin
  inherited;
end;

function TItem.GetRandomRange(nCount, nRate: Integer): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := 0 to nCount - 1 do
    if Random(nRate) = 0 then Inc(Result);
end;



procedure TItem.GetStandardItem(var StdItem: TStdItem);
begin
  StdItem.Name := FilterShowName(Name);

  StdItem.StdMode := StdMode;
  StdItem.Shape := Shape;
  StdItem.Weight := Weight;
  StdItem.AniCount := AniCount;
  StdItem.Reserved := Reserved;
  StdItem.Source := Source;
  StdItem.NeedIdentify := NeedIdentify;
  StdItem.Looks := Looks;
  StdItem.DuraMax := DuraMax;
  StdItem.Need := Need;
  StdItem.NeedLevel := NeedLevel;
  StdItem.Price := Price;
end;

procedure TItem.GetItemAddValue(UserItem: pTUserItem; var StdItem: TStdItem);
begin
  case ItemType of
    ITEM_WEAPON:
      begin
        StdItem.DC := MakeLong(DC, DC2 + UserItem.btValue[0]);
        StdItem.MC := MakeLong(MC, MC2 + UserItem.btValue[1]);
        StdItem.SC := MakeLong(SC, SC2 + UserItem.btValue[2]);
        StdItem.AC := MakeLong(AC + UserItem.btValue[3], AC2 + UserItem.btValue[5]);
        StdItem.MAC := MakeLong(MAC + UserItem.btValue[4], MAC2 + UserItem.btValue[6]);
        if Byte(UserItem.btValue[7] - 1) < 10 then
        begin //Holy
          StdItem.Source := UserItem.btValue[7];
        end;
        if UserItem.btValue[10] <> 0 then
          StdItem.Reserved := StdItem.Reserved or 1;
      end;
    ITEM_ARMOR:
      begin
        StdItem.AC := MakeLong(AC, AC2 + UserItem.btValue[0]);
        StdItem.MAC := MakeLong(MAC, MAC2 + UserItem.btValue[1]);
        StdItem.DC := MakeLong(DC, DC2 + UserItem.btValue[2]);
        StdItem.MC := MakeLong(MC, MC2 + UserItem.btValue[3]);
        StdItem.SC := MakeLong(SC, SC2 + UserItem.btValue[4]);
      end;
    ITEM_ACCESSORY:
      begin
        StdItem.AC := MakeLong(AC, AC2 + UserItem.btValue[0]);
        StdItem.MAC := MakeLong(MAC, MAC2 + UserItem.btValue[1]);
        StdItem.DC := MakeLong(DC, DC2 + UserItem.btValue[2]);
        StdItem.MC := MakeLong(MC, MC2 + UserItem.btValue[3]);
        StdItem.SC := MakeLong(SC, SC2 + UserItem.btValue[4]);
        if UserItem.btValue[5] > 0 then
        begin
          StdItem.Need := UserItem.btValue[5];
        end;
        if UserItem.btValue[6] > 0 then
        begin
          StdItem.NeedLevel := UserItem.btValue[6];
        end;
      end;
  else
    begin
      StdItem.AC := 0;
      StdItem.MAC := 0;
      StdItem.DC := 0;
      StdItem.MC := 0;
      StdItem.SC := 0;
      StdItem.Source := 0;
      StdItem.Reserved := 0;
    end;
  end;
end;

{function TItem.GetCustomName(UserItem:pTUserItem):String;
begin
  if (UserItem<>nil) then begin
    if (UserItem.sCustomName<>'') then Result:=UserItem.sCustomName;
  end else
    Result := Name;
end;}

procedure TItem.RandomUpgradeItem(UserItem: pTUserItem);
var
  nUpgrade, nIncp, nVal: Integer;
begin
  case ItemType of
    ITEM_WEAPON:
      begin
        nUpgrade := GetRandomRange(g_Config.nWeaponDCAddValueMaxLimit {12}, g_Config.nWeaponDCAddValueRate {15});
        if Random(15) = 0 then UserItem.btValue[0] := nUpgrade + 1;

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

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

        nUpgrade := GetRandomRange(g_Config.nDressDCAddValueMaxLimit {6}, g_Config.nDressDCAddValueRate {20});
        if Random(g_Config.nDressDCAddRate {40}) = 0 then UserItem.btValue[2] := nUpgrade + 1;
        nUpgrade := GetRandomRange(g_Config.nDressMCAddValueMaxLimit {6}, g_Config.nDressMCAddValueRate {20});
        if Random(g_Config.nDressMCAddRate {40}) = 0 then UserItem.btValue[3] := nUpgrade + 1;
        nUpgrade := GetRandomRange(g_Config.nDressSCAddValueMaxLimit {6}, g_Config.nDressSCAddValueRate {20});
        if Random(g_Config.nDressSCAddRate {40}) = 0 then UserItem.btValue[4] := nUpgrade + 1;

        nUpgrade := GetRandomRange(6, 10);
        if Random(8) < 6 then
        begin
          nVal := (nUpgrade + 1) * 2000;
          UserItem.DuraMax := _MIN(65000, UserItem.DuraMax + nVal);
          UserItem.Dura := _MIN(65000, UserItem.Dura + nVal);
        end;
      end;
    ITEM_ACCESSORY:
      begin
        case StdMode of
          20, 21, 24:
            begin
              nUpgrade := GetRandomRange(6, 30);
              if Random(60) = 0 then UserItem.btValue[0] := nUpgrade + 1;
              nUpgrade := GetRandomRange(6, 30);
              if Random(60) = 0 then UserItem.btValue[1] := nUpgrade + 1;
              nUpgrade := GetRandomRange(g_Config.nNeckLace202124DCAddValueMaxLimit {6}, g_Config.nNeckLace202124DCAddValueRate {20});
              if Random(g_Config.nNeckLace202124DCAddRate {30}) = 0 then UserItem.btValue[2] := nUpgrade + 1;
              nUpgrade := GetRandomRange(g_Config.nNeckLace202124MCAddValueMaxLimit {6}, g_Config.nNeckLace202124MCAddValueRate {20});
              if Random(g_Config.nNeckLace202124MCAddRate {30}) = 0 then UserItem.btValue[3] := nUpgrade + 1;
              nUpgrade := GetRandomRange(g_Config.nNeckLace202124SCAddValueMaxLimit {6}, g_Config.nNeckLace202124SCAddValueRate {20});
              if Random(g_Config.nNeckLace202124SCAddRate {30}) = 0 then UserItem.btValue[4] := nUpgrade + 1;
              nUpgrade := GetRandomRange(6, 12);
              if Random(20) < 15 then
              begin
                nVal := (nUpgrade + 1) * 1000;
                UserItem.DuraMax := _MIN(65000, UserItem.DuraMax + nVal);
                UserItem.Dura := _MIN(65000, UserItem.Dura + nVal);
              end;
            end;
          26:
            begin
              nUpgrade := GetRandomRange(6, 20);
              if Random(20) = 0 then UserItem.btValue[0] := nUpgrade + 1;
              nUpgrade := GetRandomRange(6, 20);
              if Random(20) = 0 then UserItem.btValue[1] := nUpgrade + 1;
              nUpgrade := GetRandomRange(g_Config.nArmRing26DCAddValueMaxLimit {6}, g_Config.nArmRing26DCAddValueRate {20});
              if Random(g_Config.nArmRing26DCAddRate {30}) = 0 then UserItem.btValue[2] := nUpgrade + 1;
              nUpgrade := GetRandomRange(g_Config.nArmRing26MCAddValueMaxLimit {6}, g_Config.nArmRing26MCAddValueRate {20});
              if Random(g_Config.nArmRing26MCAddRate {30}) = 0 then UserItem.btValue[3] := nUpgrade + 1;
              nUpgrade := GetRandomRange(g_Config.nArmRing26SCAddValueMaxLimit {6}, g_Config.nArmRing26SCAddValueRate {20});
              if Random(g_Config.nArmRing26SCAddRate {30}) = 0 then UserItem.btValue[4] := nUpgrade + 1;
              nUpgrade := GetRandomRange(6, 12);
              if Random(20) < 15 then
              begin
                nVal := (nUpgrade + 1) * 1000;
                UserItem.DuraMax := _MIN(65000, UserItem.DuraMax + nVal);
                UserItem.Dura := _MIN(65000, UserItem.Dura + nVal);
              end;
            end;
          19:
            begin
              nUpgrade := GetRandomRange(6, 20);
              if Random(40) = 0 then UserItem.btValue[0] := nUpgrade + 1;
              nUpgrade := GetRandomRange(6, 20);
              if Random(40) = 0 then UserItem.btValue[1] := nUpgrade + 1;

              nUpgrade := GetRandomRange(g_Config.nNeckLace19DCAddValueMaxLimit {6}, g_Config.nNeckLace19DCAddValueRate {20});
              if Random(g_Config.nNeckLace19DCAddRate {30}) = 0 then UserItem.btValue[2] := nUpgrade + 1;
              nUpgrade := GetRandomRange(g_Config.nNeckLace19MCAddValueMaxLimit {6}, g_Config.nNeckLace19MCAddValueRate {20});
              if Random(g_Config.nNeckLace19MCAddRate {30}) = 0 then UserItem.btValue[3] := nUpgrade + 1;

⌨️ 快捷键说明

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