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

📄 umopsub.pas

📁 千年源代码,只缺少控件,可以做二次开发用,好不容易得来的
💻 PAS
📖 第 1 页 / 共 2 页
字号:
         Inc (iCount);
      end;
   end;

   Result := iCount;
end;

function TMopHaveItemClass.AddWantItem (aName : String) : Boolean;
var
   i : Integer;
begin
   Result := false;
   for i := 0 to MOP_WANTITEM_MAX - 1 do begin
      if WantItemArr [i] = '' then begin
         WantItemArr [i] := aName;
         Result := true;
         exit;
      end;
   end;
end;

function TMopHaveItemClass.DelWantItem (aName : String) : Boolean;
var
   i : Integer;
begin
   Result := false;
   for i := 0 to MOP_WANTITEM_MAX - 1 do begin
      if WantItemArr [i] = aName then begin
         WantItemArr [i] := '';
         Result := true;
         exit;
      end;
   end;
end;

procedure TMopHaveItemClass.DropItemGround;
var
   i : Integer;
   MopName : String;
   ItemData : TItemData;
   SubData : TSubData;
   CheckItem : TCheckItem;
begin
   MopName := StrPas (@BasicObject.BasicData.Name);
   BasicObject.BasicData.nx := BasicObject.BasicData.x;
   BasicObject.BasicData.ny := BasicObject.BasicData.y;

   for i := 0 to MOP_DROPITEM_MAX - 1 do begin
      if DropItemArr[i].rName <> '' then begin
         if ItemClass.GetCheckItemData (MopName, DropItemArr [i], ItemData) = false then continue;
         ItemData.rOwnerName[0] := 0;
         SubData.ItemData := ItemData;
         SubData.ServerId := BasicObject.Manager.ServerId;
         BasicObject.Phone.SendMessage (MANAGERPHONE, FM_ADDITEM, BasicObject.BasicData, SubData);
      end;
   end;
   for i := 0 to MOP_HAVEITEM_MAX - 1 do begin
      if HaveItemArr[i].rItemName <> '' then begin
         if Random (2) = 1 then begin
            CheckItem.rName := HaveItemArr[i].rItemName;
            if ItemClass.GetCheckItemData (MopName, CheckItem, ItemData) = false then continue;
            ItemData.rCount := HaveItemArr[i].rItemCount;
            ItemData.rColor := HaveItemArr[i].rColor;
            ItemData.rOwnerName[0] := 0;
            SubData.ItemData := ItemData;
            SubData.ServerId := BasicObject.Manager.ServerId;
            BasicObject.Phone.SendMessage (MANAGERPHONE, FM_ADDITEM, BasicObject.BasicData, SubData);
         end;
      end;
   end;
   HaveItemClear;
end;

// TMopHaveMagicClass
constructor TMopHaveMagicClass.Create (aBasicObject : TBasicObject);
begin
   BasicObject := aBasicObject;

   FillChar (UsedTickArr, SizeOf (UsedTickArr), 0);
   FillChar (HaveMagicPos, SizeOf (HaveMagicPos), 0);
   FillChar (HaveMagicArr, SizeOf (HaveMagicArr), 0);
   FillChar (HaveMagicData, SizeOf (HaveMagicData), 0);
end;

destructor TMopHaveMagicClass.Destroy;
begin
   inherited Destroy;
end;

procedure TMopHaveMagicClass.Clear;
begin
end;

procedure TMopHaveMagicClass.Init (aMagicStr : String);
var
   i : Integer;
   iName : String;
   Str, rdStr : String;
begin
   iName := StrPas (@BasicObject.BasicData.Name);

   FillChar (UsedTickArr, SizeOf (UsedTickArr), 0);
   FillChar (HaveMagicPos, SizeOf (HaveMagicPos), 0);
   FillChar (HaveMagicArr, SizeOf (HaveMagicArr), 0);
   FillChar (HaveMagicData, SizeOf (HaveMagicData), 0);

   Str := aMagicStr;
   for i := 0 to MOP_HAVEMAGIC_MAX - 1 do begin
      Str := GetValidStr3 (Str, rdStr, ':');
      if rdStr = '' then break;
      if MagicParamClass.GetMagicParamData (iName, rdStr, HaveMagicArr [i]) = true then begin
         MagicClass.GetMagicData (HaveMagicArr [i].MagicName, HaveMagicData [i], 9999);
         if HaveMagicData [i].rMagicType = MAGICTYPE_SPECIAL then begin
            HaveMagicPos [HaveMagicData [i].rFunction] := i + 1;
         end;
      end;
   end;
end;

function TMopHaveMagicClass.isHaveHideMagic : Boolean;
begin
   Result := false;
   if HaveMagicPos [MAGICSPECIAL_HIDE] > 0 then Result := true;
end;

function TMopHaveMagicClass.isHaveSameMagic : Boolean;
begin
   Result := false;
   if HaveMagicPos [MAGICSPECIAL_SAME] > 0 then Result := true;
end;

function TMopHaveMagicClass.isHaveHealMagic : Boolean;
begin
   Result := false;
   if HaveMagicPos [MAGICSPECIAL_HEAL] > 0 then Result := true;
end;

function TMopHaveMagicClass.isHaveSwapMagic : Boolean;
begin
   Result := false;
   if HaveMagicPos [MAGICSPECIAL_SWAP] > 0 then Result := true;
end;

function TMopHaveMagicClass.isHaveEatMagic : Boolean;
begin
   Result := false;
   if HaveMagicPos [MAGICSPECIAL_EAT] > 0 then Result := true;
end;

function TMopHaveMagicClass.isHaveKillMagic : Boolean;
begin
   Result := false;
   if HaveMagicPos [MAGICSPECIAL_KILL] > 0 then Result := true;
end;

function TMopHaveMagicClass.isHavePickMagic : Boolean;
begin
   Result := false;
   if HaveMagicPos [MAGICSPECIAL_PICK] > 0 then Result := true;
end;

function TMopHaveMagicClass.RunHaveSameMagic (aPercent : Integer; var aSubData : TSubData) : Boolean;
var
   ArrPos : Integer;
begin
   Result := false;

   ArrPos := HaveMagicPos [MAGICSPECIAL_SAME] - 1;
   if ArrPos < 0 then exit;
   if UsedTickArr [MAGICSPECIAL_SAME] <> 0 then exit;

   if aPercent <= HaveMagicArr[ArrPos].NumberParam[0] then begin
      UsedTickArr [MAGICSPECIAL_SAME] := mmAnsTick;
      aSubData.HitData.ToHit := HaveMagicArr [ArrPos].NumberParam[1];
      Result := true;
   end;
end;

function TMopHaveMagicClass.RunHaveHealMagic (aName : String; aPercent : Integer; var aSubData : TSubData) : Boolean;
var
   i, ArrPos : Integer;
   boFlag : Boolean;
begin
   Result := false;

   ArrPos := HaveMagicPos [MAGICSPECIAL_HEAL] - 1;
   if ArrPos < 0 then exit;
   if mmAnsTick < UsedTickArr [MAGICSPECIAL_HEAL] + HaveMagicArr[ArrPos].NumberParam [2] then exit;

   boFlag := false;
   for i := 0 to 5 - 1 do begin
      if aName = HaveMagicArr [ArrPos].NameParam [i] then begin
         boFlag := true;
         break;
      end;
   end;
   if boFlag = false then exit;

   if aPercent <= HaveMagicArr [ArrPos].NumberParam [0] then begin
      UsedTickArr [MAGICSPECIAL_HEAL] := mmAnsTick;
      aSubData.HitData.ToHit := HaveMagicArr [ArrPos].NumberParam [1];
      Result := true;
   end;
end;

function TMopHaveMagicClass.RunHaveSwapMagic (aPercent : Integer; var aSubData : TSubData) : Boolean;
var
   ArrPos : Integer;
begin
   Result := false;

   ArrPos := HaveMagicPos [MAGICSPECIAL_SWAP] - 1;
   if ArrPos < 0 then exit;

   if aPercent <= HaveMagicArr[ArrPos].NumberParam[0] then begin
      UsedTickArr [MAGICSPECIAL_SWAP] := mmAnsTick;
      StrPCopy (@aSubData.SubName, HaveMagicArr[ArrPos].NameParam [0]);
      Result := true;
   end;
end;

function TMopHaveMagicClass.RunHaveEatMagic (aPercent : Integer; aHaveItemClass : TMopHaveItemClass; var aSubData : TSubData) : Boolean;
var
   i : Integer;
   ArrPos : Integer;
begin
   Result := false;

   ArrPos := HaveMagicPos [MAGICSPECIAL_EAT] - 1;
   if ArrPos < 0 then exit;

   if mmAnsTick < UsedTickArr [MAGICSPECIAL_EAT] + HaveMagicArr [ArrPos].NumberParam [2] then exit;

   if aPercent > HaveMagicArr[ArrPos].NumberParam [0] then exit;
   if aHaveItemClass.FindHaveItem (HaveMagicArr[ArrPos].NameParam [0]) > 0 then begin
      aHaveItemClass.DelHaveItem (HaveMagicArr [ArrPos].NameParam [0], -1, 1);
      StrPCopy (@aSubData.ItemData.rName, HaveMagicArr[ArrPos].NameParam [0]);
      aSubData.HitData.ToHit := HaveMagicArr[ArrPos].NumberParam [1];
      UsedTickArr [MAGICSPECIAL_EAT] := mmAnsTick;
      Result := true;
      exit;
   end;
end;

function TMopHaveMagicClass.RunHavePickMagic (aPercent : Integer; aName : String) : Boolean;
var
   i : Integer;
   ArrPos : Integer;
   boFlag : Boolean;
begin
   Result := false;

   ArrPos := HaveMagicPos [MAGICSPECIAL_PICK] - 1;
   if ArrPos < 0 then exit;

   if aPercent > HaveMagicArr [ArrPos].NumberParam [0] then exit;

   boFlag := false;
   if HaveMagicArr [ArrPos].NameParam [0] <> '' then begin
      for i := 0 to 5 - 1 do begin
         if aName = HaveMagicArr [ArrPos].NameParam [i] then begin
            boFlag := true;
            break;
         end;
      end;
   end else begin
      boFlag := true;
   end;

   if boflag = true then begin
      UsedTickArr [MAGICSPECIAL_PICK] := mmAnsTick;
      Result := true;
   end;
end;

function TMopHaveMagicClass.RunHaveHideMagic (aPercent : Integer) : Boolean;
var
   i : Integer;
   ArrPos : Integer;
   boFlag : Boolean;
begin
   Result := false;

   ArrPos := HaveMagicPos [MAGICSPECIAL_HIDE] - 1;
   if ArrPos < 0 then exit;

   if HaveMagicArr [ArrPos].NumberParam [2] > 0 then begin
      if mmAnsTick < UsedTickArr [MAGICSPECIAL_HIDE] + HaveMagicArr [ArrPos].NumberParam [1] then exit;
   end;

   if aPercent < HaveMagicArr [ArrPos].NumberParam [0] then exit;
   if aPercent > HaveMagicArr [ArrPos].NumberParam [1] then exit;

   UsedTickArr [MAGICSPECIAL_HIDE] := mmAnsTick;
   
   Result := true;
end;

end.

⌨️ 快捷键说明

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