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