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

📄 umopsub.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -