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

📄 itmunit.pas

📁 翎风世界..传奇服务端..DELPHI源代码 包括DBServer,LogDataServer,LoginGate,LoginSrv,M2Server等..内容齐全.
💻 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;

    //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;

⌨️ 快捷键说明

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