📄 umopsub.pas
字号:
unit uMopSub;
interface
uses
Classes, SysUtils, BasicObj, svClass, uAnsTick, AUtil32, DefType;
const
MOP_DROPITEM_MAX = 5;
MOP_HAVEITEM_MAX = 10;
MOP_WANTITEM_MAX = 5;
MOP_HAVEMAGIC_MAX = 5;
type
TMopHaveItemClass = class
private
BasicObject : TBasicObject;
DropItemArr : array [0..MOP_DROPITEM_MAX - 1] of TCheckItem;
HaveItemArr : array [0..MOP_HAVEITEM_MAX - 1] of TAtomItem;
WantItemArr : array [0..MOP_WANTITEM_MAX - 1] of String;
public
constructor Create (aBasicObject : TBasicObject);
destructor Destroy; override;
procedure Clear;
procedure DropItemClear;
procedure HaveItemClear;
procedure WantItemClear;
function DropItemCount : Integer;
function HaveItemCount : Integer;
function WantItemCount : Integer;
function DropItemFreeCount : Integer;
function HaveItemFreeCount : Integer;
function WantItemFreeCount : Integer;
function FindDropItem (aName : String) : Integer;
function AddDropItem (aName : String; aCount : Integer) : Boolean;
function DelDropItem (aName : String) : Boolean;
function FindHaveItem (aName : String) : Integer;
function AddHaveItem (aName : String; aCount, aColor : Integer) : Boolean;
function DelHaveItem (aName : String; aColor, aCount : Integer) : Boolean;
function FindWantItem (aName : String) : Integer;
function AddWantItem (aName : String) : Boolean;
function DelWantItem (aName : String) : Boolean;
procedure DropItemGround;
end;
TMopHaveMagicClass = class
private
BasicObject : TBasicObject;
UsedTickArr : array [0..MAGICSPECIAL_LAST - 1] of Integer;
HaveMagicPos : array [0..MAGICSPECIAL_LAST - 1] of Byte;
HaveMagicArr : array [0..MOP_HAVEMAGIC_MAX - 1] of TMagicParamData;
HaveMagicData : array [0..MOP_HAVEMAGIC_MAX - 1] of TMagicData;
public
constructor Create (aBasicObject : TBasicObject);
destructor Destroy; override;
procedure Clear;
procedure Init (aMagicStr : String);
function isHaveHideMagic : Boolean;
function isHaveSameMagic : Boolean;
function isHaveHealMagic : Boolean;
function isHaveSwapMagic : Boolean;
function isHaveEatMagic : Boolean;
function isHaveKillMagic : Boolean;
function isHavePickMagic : Boolean;
function RunHaveSameMagic (aPercent : Integer; var aSubData : TSubData) : Boolean;
function RunHaveHealMagic (aName : String; aPercent : Integer; var aSubData : TSubData) : Boolean;
function RunHaveSwapMagic (aPercent : Integer; var aSubData : TSubData) : Boolean;
function RunHaveEatMagic (aPercent : Integer; aHaveItemClass : TMopHaveItemClass; var aSubData : TSubData) : Boolean;
function RunHavePickMagic (aPercent : Integer; aName : String) : Boolean;
function RunHaveHideMagic (aPercent : Integer) : Boolean;
end;
implementation
uses
uMonster;
// TMopHaveItemClass
constructor TMopHaveItemClass.Create (aBasicObject : TBasicObject);
begin
BasicObject := aBasicObject;
Clear;
end;
destructor TMopHaveItemClass.Destroy;
begin
inherited Destroy;
end;
procedure TMopHaveItemClass.Clear;
begin
DropItemClear;
HaveItemClear;
WantItemClear;
end;
procedure TMopHaveItemClass.DropItemClear;
var
i : Integer;
begin
for i := 0 to MOP_DROPITEM_MAX - 1 do begin
FillChar (DropItemArr [i], SizeOf (TCheckItem), 0);
end;
end;
procedure TMopHaveItemClass.HaveItemClear;
var
i : Integer;
begin
for i := 0 to MOP_HAVEITEM_MAX - 1 do begin
FillChar (HaveItemArr [i], SizeOf (TAtomItem), 0);
end;
end;
procedure TMopHaveItemClass.WantItemClear;
var
i : Integer;
begin
for i := 0 to MOP_WANTITEM_MAX - 1 do begin
WantItemArr [i] := '';
end;
end;
function TMopHaveItemClass.DropItemCount : Integer;
var
i, iCount : Integer;
begin
iCount := 0;
for i := 0 to MOP_DROPITEM_MAX - 1 do begin
if DropItemArr[i].rName <> '' then begin
Inc (iCount);
end;
end;
Result := iCount;
end;
function TMopHaveItemClass.HaveItemCount : Integer;
var
i, iCount : Integer;
begin
iCount := 0;
for i := 0 to MOP_HAVEITEM_MAX - 1 do begin
if HaveItemArr [i].rItemName <> '' then begin
Inc (iCount);
end;
end;
Result := iCount;
end;
function TMopHaveItemClass.WantItemCount : Integer;
var
i, iCount : Integer;
begin
iCount := 0;
for i := 0 to MOP_WANTITEM_MAX - 1 do begin
if WantItemArr [i] <> '' then begin
Inc (iCount);
end;
end;
Result := iCount;
end;
function TMopHaveItemClass.DropItemFreeCount : Integer;
begin
Result := MOP_DROPITEM_MAX - DropItemCount;
end;
function TMopHaveItemClass.HaveItemFreeCount : Integer;
begin
Result := MOP_HAVEITEM_MAX - HaveItemCount;
end;
function TMopHaveItemClass.WantItemFreeCount : Integer;
begin
Result := MOP_WANTITEM_MAX - WantItemCount;
end;
function TMopHaveItemClass.FindDropItem (aName : String) : Integer;
var
i, iCount : Integer;
begin
iCount := 0;
for i := 0 to MOP_DROPITEM_MAX - 1 do begin
if DropItemArr[i].rName = aName then begin
Inc (iCount);
end;
end;
Result := iCount;
end;
function TMopHaveItemClass.AddDropItem (aName : String; aCount : Integer) : Boolean;
var
i : Integer;
begin
Result := false;
for i := 0 to MOP_DROPITEM_MAX - 1 do begin
if DropItemArr [i].rName = '' then begin
DropItemArr [i].rName := aName;
DropItemArr [i].rCount := aCount;
Result := true;
exit;
end;
end;
end;
function TMopHaveItemClass.DelDropItem (aName : String) : Boolean;
var
i : Integer;
begin
Result := false;
for i := 0 to MOP_DROPITEM_MAX - 1 do begin
if DropItemArr [i].rName = aName then begin
DropItemArr [i].rName := '';
DropItemArr [i].rCount := 0;
Result := true;
exit;
end;
end;
end;
function TMopHaveItemClass.FindHaveItem (aName : String) : Integer;
var
i, iCount : Integer;
begin
iCount := 0;
for i := 0 to MOP_HAVEITEM_MAX - 1 do begin
if HaveItemArr [i].rItemName = aName then begin
Inc (iCount);
end;
end;
Result := iCount;
end;
function TMopHaveItemClass.AddHaveItem (aName : String; aCount, aColor : Integer) : Boolean;
var
i : Integer;
begin
Result := false;
for i := 0 to MOP_HAVEITEM_MAX - 1 do begin
if HaveItemArr [i].rItemName = '' then begin
HaveItemArr [i].rItemName := aName;
HaveItemArr [i].rItemCount := aCount;
HaveItemArr [i].rColor := aColor;
Result := true;
exit;
end;
end;
end;
function TMopHaveItemClass.DelHaveItem (aName : String; aColor, aCount : Integer) : Boolean;
var
i, iCount : Integer;
begin
Result := false;
for i := 0 to MOP_HAVEITEM_MAX - 1 do begin
if HaveItemArr [i].rItemName = aName then begin
if HaveItemArr [i].rItemCount > 0 then begin
if (aColor < 0) or (HaveItemArr [i].rColor = aColor) then begin
HaveItemArr [i].rItemCount := HaveItemArr [i].rItemCount - aCount;
if HaveItemArr [i].rItemCount <= 0 then begin
HaveItemArr [i].rItemName := '';
HaveItemArr [i].rItemCount := 0;
HaveItemArr [i].rColor := 0;
end;
Result := true;
exit;
end;
end;
end;
end;
end;
function TMopHaveItemClass.FindWantItem (aName : String) : Integer;
var
i, iCount : Integer;
begin
iCount := 0;
for i := 0 to MOP_WANTITEM_MAX - 1 do begin
if WantItemArr [i] = aName then begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -