📄 extramagic.cpp
字号:
// ExtraMagic.cpp: implementation of the CExtraMagic class.
//
//////////////////////////////////////////////////////////////////////
#include "..\stdafx.h"
#include "ExtraMagic.h"
#include "..\HigherLayers\OP_Magic.h"
#include "..\HigherLayers\OP_Battle.h"
int PRAY_RECOVER_DIVINE_TIME = 0 ; // 030520 kyo
///////////////////////////////////////////////////////////////////////////////
// Static Variable
///////////////////////////////////////////////////////////////////////////////
static POINT s_aPlace[8][5] =
{
{{ 0, -5}, {-3, -5}, { 3, -5}, {-5, -5}, { 5, -5}},
{{-3, -3}, {-4, 0}, { 0, -4}, {-6, 3}, { 3, -6}},
{{-5, 0}, {-5, 3}, {-5, -3}, {-5, 5}, {-5, -5}},
{{-2, 2}, { 0, 4}, {-4, 0}, { 2, 6}, {-6, -2}},
{{ 0, 5}, {-3, 5}, { 3, 5}, {-5, 5}, { 5, 5}},
{{ 3, 3}, { 4, 0}, { 0, 4}, { 6, -3}, {-3, 6}},
{{ 5, 0}, { 5, 3}, { 5, -3}, { 5, 5}, { 5, -5}},
{{ 3, -3}, { 0, -4}, { 4, 0}, {-3, -6}, { 6, 3}}
};
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CExtraMagic::CExtraMagic()
{
}
CExtraMagic::~CExtraMagic()
{
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
bool CExtraMagic::Bind()
{
Resist(PHASING, &CExtraMagic::Phasing);
Resist(TELEPORT, &CExtraMagic::Teleport);
Resist(MEMORIZING_LOCATION, &CExtraMagic::MemorizingLocation);
Resist(TOWN_PORTAL, &CExtraMagic::TownPortal);
Resist(MULTI_PORT, &CExtraMagic::MultiPort);
Resist(VAMPIRE_DODGE, &CExtraMagic::VampireDodge);
Resist(LOW_MONSTER_RECALL, &CExtraMagic::LowMonsterRecall);
Resist(MIDDLE_MONSTER_RECALL, &CExtraMagic::MiddleMonsterRecall);
Resist(SUMMONING_SKELETON, &CExtraMagic::SummoningSkeleton);
Resist(SUMMONING_UNDEAD, &CExtraMagic::SummoningUndead);
Resist(RECALL_FOLLOW, &CExtraMagic::RecallFollow);
Resist(MAGICAL_TRAP, &CExtraMagic::MagicalTrap);
Resist(MAGIC_DETECT, &CExtraMagic::MagicDetect);
Resist(ANTHEM, &CExtraMagic::Anthem);
Resist(INFLUENCE_DIVINE, &CExtraMagic::InfluenceDivine);
Resist(VOICE_SOUL, &CExtraMagic::VoiceSoul);
Resist(APPRECIATE, &CExtraMagic::Appreciate);
Resist(PRAY, &CExtraMagic::Pray); // 030415 kyo
return true;
}
bool CExtraMagic::Phasing()
{ // [64]厘家捞悼 : 烙狼利栏肺 困摹啊 鉴埃利栏肺 捞悼
int nCount = 0;
do
{
m_nX = (m_pCaster->X>>5);
m_nY = (m_pCaster->Y>>5);
// 困摹 掘扁
GetArea(m_nX, m_nY);
//< CSD-030930
if (m_nX < 0)
{
return false;
}
if (m_nY < 0)
{
return false;
}
//> CSD-030930
if (++nCount > MAX_COUNT)
{ // 10雀 捞惑 矫档矫 角菩沁促搁 付过捞 角菩茄 巴栏肺 埃林
return false;
}
}
while (!::IsMovable(m_nX, m_nY));
::TransArea(PT_PHASING, m_pCaster, m_nX, m_nY);
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::Teleport()
{ // [66]鉴埃捞悼 : 急琶茄 厘家肺 鉴埃利栏肺 捞悼
if (::IsMovable(m_nX, m_nY) == false)
{ // 捞悼阑 且 荐 绝绰 镑捞扼搁
return false;
}
::TransArea(PT_TELEPORT, m_pCaster, m_nX, m_nY);
// 矫傈磊狼 版氰摹 拌魂
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::MemorizingLocation()
{ // [65]捞悼厘家扁撅 : 瞒盔捞悼捞唱 汗荐瞒盔栏肺 捞悼瞪 厘家(甘捞抚, 谅钎蔼)甫 扁撅矫糯
if (::IsMovable(m_nX, m_nY) == false)
{ // 捞悼阑 且 荐 绝绰 镑捞扼搁
return false;
}
// 捞悼且 厘家俊 措茄 沥焊(甘捞抚, 困摹) 汲沥
const int nPort = ::MapPort(m_pCaster->MapName);
m_pCaster->SetTransMap(nPort, m_nX, m_nY);
// 矫傈磊狼 版氰摹 拌魂
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::TownPortal()
{ // [68]瞒盔捞悼 : 磊扁磊脚阑 扁撅等 厘家(甘捞抚, 谅钎蔼)肺 捞悼
if (!m_pCaster->IsTransMap())
{ // 扁撅等 捞悼 厘家 沥焊啊 绝促搁
return false;
}
::TransMap(m_pCaster);
// 矫傈磊狼 版氰摹 拌魂
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::MultiPort()
{ // [67]汗荐瞒盔捞悼 : 老沥 康开俊 乐绰 荤恩甸阑 扁撅等 厘家(甘捞抚, 谅钎蔼)肺 捞悼
if (m_pCaster->IsTransMap() == false)
{ // 扁撅等 捞悼 厘家 沥焊啊 绝促搁 角菩
return false;
}
::TransMap(m_pCaster);
// 矫傈磊狼 版氰摹 拌魂
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::VampireDodge()
{ // [91]轨颇捞绢 雀乔
int nCount = 0;
do
{
m_nX = (m_pCaster->X>>5);
m_nY = (m_pCaster->Y>>5);
// 困摹 掘扁
GetArea(m_nX, m_nY);
// 10雀 捞惑 矫档矫 角菩沁促搁 付过捞 角菩茄 巴栏肺 埃林
if (++nCount > MAX_COUNT)
{
return false;
}
}
while (!::IsMovable(m_nX, m_nY));
::TransArea(PT_DODGE, m_pCaster, m_nX, m_nY);
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::LowMonsterRecall()
{ // [55]历鞭 阁胶磐 家券
if (m_pCaster->m_xSummon.IsExist() == true)
{ // 家券等 阁胶磐啊 乐促搁
m_pCaster->m_xSummon.Remove(KillMonster);
}
int nCreate = 0;
switch (rand()%3)
{
case 0: nCreate = 14; break; // 扼捞沫胶酚
case 1: nCreate = 47; break; // 档付轨牢埃
case 2: nCreate = 42; break; // 公瘤唱
default: nCreate = -1; break;
}
if (::SummonMonster(m_pCaster, nCreate, m_nX, m_nY) == false)
{ // 家券俊 角菩沁促搁
return false;
}
// 矫傈磊狼 版氰摹 拌魂
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::MiddleMonsterRecall()
{ // [58]吝鞭 阁胶磐 家券
if (m_pCaster->m_xSummon.IsExist() == true)
{ // 家券等 阁胶磐啊 乐促搁
m_pCaster->m_xSummon.Remove(KillMonster);
}
int nCreate = 0;
switch (rand()%2)
{
case 0: nCreate = 34; break; // 宏风靛
case 1: nCreate = 38; break; // 胶沛榜方
default: nCreate = -1; break;
}
if (::SummonMonster(m_pCaster, nCreate, m_nX, m_nY) == false)
{ // 家券俊 角菩沁促搁
return false;
}
// 矫傈磊狼 版氰摹 拌魂
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -