📄 magic.pas
字号:
end;
function GetPower13(nInt: Integer): Integer; //0049338C
var
d10: Double;
d18: Double;
begin
d10 := nInt / 3.0;
d18 := nInt - d10;
Result := ROUND(d18 / (UserMagic.MagicInfo.btTrainLv + 1) * (UserMagic.btLevel + 1) + d10 + (UserMagic.MagicInfo.btDefPower + Random(UserMagic.MagicInfo.btDefMaxPower - UserMagic.MagicInfo.btDefPower)));
end;
function GetRPow(wInt: Integer): Word;
begin
if HiWord(wInt) > LoWord(wInt) then begin
Result := Random(HiWord(wInt) - LoWord(wInt) + 1) + LoWord(wInt);
end else Result := LoWord(wInt);
end;
procedure sub_4934B4(PlayObject: TPlayObject);
begin
if PlayObject.m_UseItems[U_ARMRINGL].Dura < 100 then begin
PlayObject.m_UseItems[U_ARMRINGL].Dura := 0;
PlayObject.SendDelItems(@PlayObject.m_UseItems[U_ARMRINGL]);
PlayObject.m_UseItems[U_ARMRINGL].wIndex := 0;
end;
end;
begin
Result := False;
if IsWarrSkill(UserMagic.wMagIdx) then Exit;
if (abs(PlayObject.m_nCurrX - nTargetX) > g_Config.nMagicAttackRage) or (abs(PlayObject.m_nCurrY - nTargetY) > g_Config.nMagicAttackRage) then begin
Exit;
end;
PlayObject.SendRefMsg(RM_SPELL, UserMagic.MagicInfo.btEffect, nTargetX, nTargetY, UserMagic.MagicInfo.wMagicId, '');
if (TargeTBaseObject <> nil) and (TargeTBaseObject.m_boDeath) and (UserMagic.MagicInfo.wMagicId <> SKILL_57) and (UserMagic.MagicInfo.wMagicId < 100) then TargeTBaseObject := nil;
boTrain := False;
boSpellFail := False;
boSpellFire := True;
nPower := 0;
if (PlayObject.m_nSoftVersionDateEx = 0) and (PlayObject.m_dwClientTick = 0) and (UserMagic.MagicInfo.wMagicId > 40) then Exit;
case UserMagic.MagicInfo.wMagicId of //
SKILL_FIREBALL {1},
SKILL_FIREBALL2 {5}: begin //火球术 大火球
if MagMakeFireball(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_HEALLING {2}: begin
if MagTreatment(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_AMYOUNSUL {6}: begin //施毒术
if MagLightening(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject, boSpellFail) then
boTrain := True;
end;
SKILL_FIREWIND {8}: begin //抗拒火环 00493754
if MagPushArround(PlayObject, UserMagic.btLevel) > 0 then boTrain := True;
end;
SKILL_FIRE {9}: begin //地狱火 00493778
if MagMakeHellFire(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_SHOOTLIGHTEN {10}: begin //疾光电影 0049386A
if MagMakeQuickLighting(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_LIGHTENING {11}: begin //雷电术 0049395C
if MagMakeLighting(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_FIRECHARM {13},
SKILL_HANGMAJINBUB {14},
SKILL_DEJIWONHO {15},
SKILL_HOLYSHIELD {16},
SKILL_SKELLETON {17},
SKILL_CLOAK {18},
SKILL_BIGCLOAK {19},
SKILL_52, {52}
SKILL_57: begin //004940BC
boSpellFail := True;
if CheckAmulet(PlayObject, 1, 1, nAmuletIdx) then begin
UseAmulet(PlayObject, 1, 1, nAmuletIdx);
case UserMagic.MagicInfo.wMagicId of //
SKILL_FIRECHARM {13}: begin //灵魂火符 0049415F
if MagMakeFireCharm(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_HANGMAJINBUB {14}: begin //幽灵盾 00494277
nPower := PlayObject.GetAttackPower(GetPower13(60) + LoWord(PlayObject.m_WAbil.SC) * 10, SmallInt(HiWord(PlayObject.m_WAbil.SC) - LoWord(PlayObject.m_WAbil.SC)) + 1);
if PlayObject.MagMakeDefenceArea(nTargetX, nTargetY, 3, nPower, 1, True) > 0 then
boTrain := True;
end;
SKILL_DEJIWONHO {15}: begin //神圣战甲术 004942E5
nPower := PlayObject.GetAttackPower(GetPower13(60) + LoWord(PlayObject.m_WAbil.SC) * 10, SmallInt(HiWord(PlayObject.m_WAbil.SC) - LoWord(PlayObject.m_WAbil.SC)) + 1);
if PlayObject.MagMakeDefenceArea(nTargetX, nTargetY, 3, nPower, 0, True) > 0 then
boTrain := True;
end;
SKILL_HOLYSHIELD {16}: begin //捆魔咒 00494353
if MagMakeHolyCurtain(PlayObject, GetPower13(40) + GetRPow(PlayObject.m_WAbil.SC) * 3, nTargetX, nTargetY) > 0 then
boTrain := True;
end;
SKILL_SKELLETON {17}: begin //召唤骷髅 004943A2
if MagMakeSlave(PlayObject, UserMagic) then begin
boTrain := True;
end;
end;
SKILL_CLOAK {18}: begin //隐身术
if MagMakePrivateTransparent(PlayObject, GetPower13(30) + GetRPow(PlayObject.m_WAbil.SC) * 3) then
boTrain := True;
end;
SKILL_BIGCLOAK {19}: begin //集体隐身术
if MagMakeGroupTransparent(PlayObject, nTargetX, nTargetY, GetPower13(30) + GetRPow(PlayObject.m_WAbil.SC) * 3) then
boTrain := True;
end;
SKILL_52: begin //诅咒术
nPower := PlayObject.GetAttackPower(GetPower13(20) + LoWord(PlayObject.m_WAbil.SC) * 2, SmallInt(HiWord(PlayObject.m_WAbil.SC) - LoWord(PlayObject.m_WAbil.SC)) + 1);
if PlayObject.MagMakeAbilityArea(nTargetX, nTargetY, 3, nPower, 0, False) > 0 then
boTrain := True;
end;
SKILL_57: begin //复活术
if MagMakeLivePlayObject(PlayObject, UserMagic, TargeTBaseObject) then boTrain := True;
end;
end;
boSpellFail := False;
sub_4934B4(PlayObject);
end;
end;
SKILL_TAMMING {20}: begin //诱惑之光 00493A51
if PlayObject.IsProperTarget(TargeTBaseObject) then begin
if MagTamming(PlayObject, TargeTBaseObject, nTargetX, nTargetY, UserMagic.btLevel) then
boTrain := True;
end;
end;
SKILL_SPACEMOVE {21}: begin //瞬息移动 00493ADD
PlayObject.SendRefMsg(RM_MAGICFIRE, 0, MakeWord(UserMagic.MagicInfo.btEffectType, UserMagic.MagicInfo.btEffect), MakeLong(nTargetX, nTargetY), Integer(TargeTBaseObject), '');
boSpellFire := False;
if MagSaceMove(PlayObject, UserMagic.btLevel) then
boTrain := True;
end;
SKILL_EARTHFIRE {22}: begin //火墙 00493B40
if MagMakeFireCross(PlayObject,
PlayObject.GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),
SmallInt(HiWord(PlayObject.m_WAbil.MC) - LoWord(PlayObject.m_WAbil.MC)) + 1),
GetPower(10) + (Word(GetRPow(PlayObject.m_WAbil.MC)) shr 1),
nTargetX,
nTargetY) > 0 then
boTrain := True;
end;
SKILL_FIREBOOM {23}: begin //爆裂火焰 00493BD5
if MagBigExplosion(PlayObject,
PlayObject.GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC), SmallInt(HiWord(PlayObject.m_WAbil.MC) - LoWord(PlayObject.m_WAbil.MC)) + 1),
nTargetX,
nTargetY,
g_Config.nFireBoomRage {1}) then
boTrain := True;
end;
SKILL_LIGHTFLOWER {24}: begin //地狱雷光 00493CB1
if MagElecBlizzard(PlayObject, PlayObject.GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC), SmallInt(HiWord(PlayObject.m_WAbil.MC) - LoWord(PlayObject.m_WAbil.MC)) + 1)) then
boTrain := True;
end;
SKILL_SHOWHP {28}: begin
if (TargeTBaseObject <> nil) and not TargeTBaseObject.m_boShowHP then begin
if Random(6) <= (UserMagic.btLevel + 3) then begin
TargeTBaseObject.m_dwShowHPTick := GetTickCount();
TargeTBaseObject.m_dwShowHPInterval := GetPower13(GetRPow(PlayObject.m_WAbil.SC) * 2 + 30) * 1000;
TargeTBaseObject.SendDelayMsg(TargeTBaseObject, RM_DOOPENHEALTH, 0, 0, 0, 0, '', 1500);
//TargeTBaseObject.SendMsg(TargeTBaseObject, RM_DOOPENHEALTH, 0, 0, 0, 0, '');
boTrain := True;
end;
end;
end;
SKILL_BIGHEALLING {29}: begin //群体治疗术 00493E42
nPower := PlayObject.GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.SC) * 2,
SmallInt(HiWord(PlayObject.m_WAbil.SC) - LoWord(PlayObject.m_WAbil.SC)) * 2 + 1);
if MagBigHealing(PlayObject, nPower, nTargetX, nTargetY) then boTrain := True;
end;
SKILL_SINSU {30}: begin //00494476
boSpellFail := True;
if CheckAmulet(PlayObject, 5, 1, nAmuletIdx) then begin
UseAmulet(PlayObject, 5, 1, nAmuletIdx);
if MagMakeSinSuSlave(PlayObject, UserMagic) then begin
boTrain := True;
end;
boSpellFail := False;
end;
end;
SKILL_SHIELD {31}: begin //魔法盾 00493D15
if PlayObject.MagBubbleDefenceUp(UserMagic.btLevel, GetPower(GetRPow(PlayObject.m_WAbil.MC) + 15)) then
boTrain := True;
end;
SKILL_KILLUNDEAD {32}: begin //00493A97 圣言术
if PlayObject.IsProperTarget(TargeTBaseObject) then begin
if MagTurnUndead(PlayObject, TargeTBaseObject, nTargetX, nTargetY, UserMagic.btLevel) then
boTrain := True;
end;
end;
SKILL_SNOWWIND {33}: begin //00493C43 冰咆哮
if MagBigExplosion(PlayObject,
PlayObject.GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC), SmallInt(HiWord(PlayObject.m_WAbil.MC) - LoWord(PlayObject.m_WAbil.MC)) + 1),
nTargetX,
nTargetY,
g_Config.nSnowWindRange {1}) then
boTrain := True;
end;
SKILL_UNAMYOUNSUL {34}: begin //解毒术
if MagMakeUnTreatment(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_WINDTEBO {35}: if MagWindTebo(PlayObject, UserMagic) then boTrain := True;
//冰焰
SKILL_MABE {36}: begin
with PlayObject do begin
nPower := GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(m_WAbil.MC),
SmallInt(HiWord(m_WAbil.MC) - LoWord(m_WAbil.MC)) + 1);
end;
if MabMabe(PlayObject, TargeTBaseObject, nPower, UserMagic.btLevel, nTargetX, nTargetY) then
boTrain := True;
end;
SKILL_GROUPLIGHTENING {37 群体雷电术}: begin
if MagGroupLightening(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject, boSpellFire) then
boTrain := True;
end;
SKILL_GROUPAMYOUNSUL {38 群体施毒术}: begin
if MagGroupAmyounsul(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then
boTrain := True;
end;
SKILL_GROUPDEDING {39 地钉}: begin
if GetTickCount - PlayObject.m_dwDedingUseTick > g_Config.nDedingUseTime * 1000 then begin
PlayObject.m_dwDedingUseTick := GetTickCount;
if g_Config.boDedingAllowPK then begin
if MagGroupDeDing(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then
boTrain := True;
end else begin
if (TargeTBaseObject <> nil) and (TargeTBaseObject.m_btRaceServer <> RC_PLAYOBJECT) and MagGroupDeDing(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then
boTrain := True;
end;
end;
end;
SKILL_40: begin //双龙斩
end;
SKILL_41: begin //狮子吼
if MagGroupMb(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then
boTrain := True;
end;
SKILL_42: begin //狂风斩
end;
SKILL_43: begin //破空剑
end;
//法师
SKILL_44: begin //结冰掌
if MagHbFireBall(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then boTrain := True;
end;
SKILL_45: begin //灭天火
if MagMakeFireDay(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then boTrain := True;
end;
SKILL_46: begin //分身术
if MagMakeSelf(PlayObject, TargeTBaseObject, UserMagic) then begin
boTrain := True;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -