📄 magic.pas
字号:
if (TargeTBaseObject <> nil) and (TargeTBaseObject.m_boDeath) and (UserMagic.MagicInfo.wMagicId <> SKILL_57) and (UserMagic.MagicInfo.wMagicId <> SKILL_54) and (UserMagic.MagicInfo.wMagicId < 100) then TargeTBaseObject := nil;
boTrain := False;
boSpellFail := False;
boSpellFire := True;
nPower := 0;
if PlayObject.m_btRaceServer = RC_PLAYOBJECT then begin
if (TPlayObject(PlayObject).m_nSoftVersionDateEx = 0) and (TPlayObject(PlayObject).m_dwClientTick = 0) and (UserMagic.MagicInfo.wMagicId > 40) then Exit;
end;
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 //疾光电影
if MagMakeQuickLighting(PlayObject,
UserMagic,
nTargetX,
nTargetY,
TargeTBaseObject) then boTrain := True;
end;
SKILL_LIGHTENING {11}: begin //雷电术
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 //幽灵盾
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 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 //诱惑之光
if PlayObject.IsProperTarget(TargeTBaseObject) then begin
if MagTamming(PlayObject, TargeTBaseObject, nTargetX, nTargetY, UserMagic.btLevel) then
boTrain := True;
end;
end;
SKILL_SPACEMOVE {21}: begin //瞬息移动
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 //火墙
nPower := PlayObject.GetAttackPower(GetPower(MPow(UserMagic)) + LoWord(PlayObject.m_WAbil.MC),
SmallInt(HiWord(PlayObject.m_WAbil.MC) - LoWord(PlayObject.m_WAbil.MC)) + 1);
nDelayTime := GetPower(10) + (Word(GetRPow(PlayObject.m_WAbil.MC)) shr 1);
//2006-11-12 火墙威力和时间的倍数
nPowerRate := Round(nPower * (g_Config.nFirePowerRate / 100));
nDelayTimeRate := Round(nDelayTime * (g_Config.nFireDelayTimeRate / 100));
if MagMakeFireCross(PlayObject, nPowerRate,
nDelayTimeRate,
nTargetX,
nTargetY) > 0 then
boTrain := True;
end;
SKILL_FIREBOOM {23}: begin //爆裂火焰
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 //地狱雷光
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 //群体治疗术
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 + PlayObject.m_WAbil.Level, nTargetX, nTargetY) then boTrain := True;
end;
SKILL_SINSU {30}: begin
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 //魔法盾
if PlayObject.MagBubbleDefenceUp(UserMagic.btLevel, GetPower(GetRPow(PlayObject.m_WAbil.MC) + 15)) then
boTrain := True;
end;
SKILL_KILLUNDEAD {32}: begin //圣言术
if PlayObject.IsProperTarget(TargeTBaseObject) then begin
if MagTurnUndead(PlayObject, TargeTBaseObject, nTargetX, nTargetY, UserMagic.btLevel) then
boTrain := True;
end;
end;
SKILL_SNOWWIND {33}: begin //冰咆哮
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 PlayObject.m_btRaceServer = RC_PLAYOBJECT then begin
if GetTickCount - TPlayObject(PlayObject).m_dwDedingUseTick > g_Config.nDedingUseTime * 1000 then begin
TPlayObject(PlayObject).m_dwDedingUseTick := GetTickCount;
if MagGroupDeDing(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then
boTrain := True;
end;
end else begin
if (TargeTBaseObject <> nil) and MagGroupDeDing(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then
boTrain := True;
end;
end;
SKILL_41: begin //狮子吼
if MagGroupMb(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then
boTrain := True;
end;
SKILL_42: begin //狂风斩
if MagHbFireBall(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then boTrain := True;
end;
SKILL_43: begin //破空剑
if MagHbFireBall(PlayObject, UserMagic, nTargetX, nTargetY, TargeTBaseObject) then boTrain := True;
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;
end;
SKILL_47: begin //火龙气焰
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_48: begin //气功波
if MagPushArround(PlayObject, UserMagic.btLevel) > 0 then boTrain := True;
end;
SKILL_49: begin //净化术
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -