📄 itmunit.pas
字号:
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 + -