📄 extramagic.cpp
字号:
bool CExtraMagic::SummoningSkeleton()
{ // [88]胶奶饭沛欧 家券
if (m_pCaster->m_xSummon.Count() >= GetSummonMax(m_nIndex))
{ // 家券等 阁胶磐啊 乐促搁
return false;
}
if (::SummonMonster(m_pCaster, 49, 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_SUMMONING;
SendMagicResult();
return true;
}
bool CExtraMagic::SummoningUndead()
{ // [92]攫单靛 家券
if (m_pCaster->m_xSummon.Count() >= GetSummonMax(m_nIndex))
{ // 家券等 阁胶磐啊 乐促搁
return false;
}
if (!::IsMovable(m_nX, m_nY)) return false;
if (!::SummonMonster(m_pCaster, 81, m_nX, m_nY)) 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_SUMMONING;
SendMagicResult();
return true;
}
bool CExtraMagic::RecallFollow()
{ // [95]何窍 家券
/*
if (m_pCaster->m_xSummon.Count() >= GetSummonMax(m_nIndex))
{ // 家券等 阁胶磐啊 乐促搁
return false;
}
*/
//< CSD-030324
int nX = 0, nY = 0;
// 家券且 困摹 备窍扁
if (!GetRecallPlace(m_nX, m_nY, nX, nY))
{
return false;
}
const int nMonster = m_pCaster->GetFollow();
if (!::SummonMonster(m_pCaster, nMonster, nX, nY))
{
return false;
}
//> CSD-030324
// 矫傈磊狼 版氰摹 拌魂
::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_SUMMONING;
SendMagicResult();
return true;
}
bool CExtraMagic::MagicalTrap()
{ // [20]付过飘乏 : 瘤沥等 困摹俊 拳堪, 倔澜, 汗钦 付过 瓤苞甫 啊柳 担 汲摹
// 30檬(1 饭骇) ~ 150檬(99 饭骇)
const WORD wDuration = TRAP_TIME + ((m_pCaster->GetLevel()/5 - 5)*TRAP_TIME/10); // CSD-030806
const int nX = m_nX;
const int nY = m_nY;
// 担狼 辆幅 沥狼(0->X/1->+/2->汗钦)
switch (rand()%3)
{
case 0: // け屈 飘乏 (拳堪) - 单固瘤:版
{
::InsertTrap(nX, nY, 0, g_curr_time + wDuration);
::InsertTrap(nX + 1, nY, 0, g_curr_time + wDuration);
::InsertTrap(nX, nY + 1, 0, g_curr_time + wDuration);
::InsertTrap(nX + 1, nY + 1, 0, g_curr_time + wDuration);
break;
}
case 1: // +屈 飘乏 (倔澜) - 单固瘤:吝
{
::InsertTrap(nX, nY - 1, 1, g_curr_time + wDuration);
::InsertTrap(nX, nY, 1, g_curr_time + wDuration);
::InsertTrap(nX, nY + 1, 1, g_curr_time + wDuration);
::InsertTrap(nX - 1, nY, 1, g_curr_time + wDuration);
::InsertTrap(nX + 1, nY, 1, g_curr_time + wDuration);
break;
}
case 2: // け屈 飘乏 (汗钦眉) - 单固瘤:碍
{
::InsertTrap(nX, nY, 2, g_curr_time + wDuration);
::InsertTrap(nX + 1, nY, 2, g_curr_time + wDuration);
::InsertTrap(nX, nY + 1, 2, g_curr_time + wDuration);
::InsertTrap(nX + 1, nY + 1, 2, g_curr_time + wDuration);
break;
}
}
// 矫傈磊狼 版氰摹 拌魂
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT_T);
m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result_t.wDuration = wDuration;
m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::MagicDetect()
{ // [75]付过沤瘤 : 付过担 沤瘤
if (::SearchTrap(m_pCaster, 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::Anthem()
{ // [163]己啊 : 措惑狼 NK荐摹甫 皑家矫虐绊 措脚 版氰摹甫 临烙
if (::IsHeNK(m_pTarget, MapInfo[MapNumber].nation) <= 0)
{ // 泅犁乐绰 甘狼 NK 荐摹 八荤
return false;
}
//< CSD-030314 : 版氰摹 皑家
const bool bNK = (IsHeNK(m_pTarget, MapInfo[MapNumber].nation) > 0) ? true: false;
m_pTarget->DecExperience(bNK);
//> CSD-030314 : NK 荐摹 10 皑家
::InNK(m_pTarget, MapInfo[MapNumber].nation, -10);
// 矫傈磊狼 版氰摹 拌魂
::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::InfluenceDivine()
{ // [168]脚俊狼 皑拳 : 固搬沥
// 矫傈磊狼 版氰摹 拌魂
::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::VoiceSoul()
{ // [169]康去狼 家府 : 1盒俊辑 1盒30檬埃 蜡飞阑 焊绊 甸阑 荐 乐澜
const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
SkillMgr.SetCanViewGhost(m_pCaster, wPeriod);
::SendSkillResult(m_pCaster->GetServerID(), 1, m_pTarget->GetServerID(), 0, 0, wPeriod);
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT_T);
m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CExtraMagic::Appreciate()
{ // [167]官弗 柄崔澜 : 惑措规狼 wis甫 舅 荐 乐澜
// 惑措狼 葛电 沥焊(惑怕/瓷仿)甫 犬牢
::SendMagicCommand(m_pCaster, SET_INFORMATION, m_pTarget->GetServerID(), 0);
// 矫傈磊狼 版氰摹 拌魂
::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::Pray()
{ //< CSD-TW-030606 : [178]扁档 : 付唱甫 PRAY_RECOVER_DIVINE_TIME(5)檬 歹 弧府 盲款促. // 030415 kyo
const WORD wPeriod = CalcMaintain(); // 030521 kyo
m_pCaster->dwUpDivineMana = m_dwNow + wPeriod;
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex); // 矫傈磊狼 版氰摹 拌魂
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT_T);
m_packet.u.magic.server_magic_result_t.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result_t.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
m_packet.u.magic.server_magic_result_t.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
} //> CSD-TW-030606
///////////////////////////////////////////////////////////////////////////////
// Protected Method
///////////////////////////////////////////////////////////////////////////////
void CExtraMagic::GetArea(int& rX, int& rY)
{
const int nLeft = rX - 3;
const int nTop = rY - 2;
const int nRight = rX + 3;
const int nBottom = rY + 2;
RECT aArea[4] =
{
{nLeft - 5, nTop - 7, nLeft, nTop},
{nRight, nTop - 7, nRight + 5, nTop},
{nLeft - 5, nBottom, nLeft, nBottom + 7},
{nRight, nBottom, nRight + 5, nBottom + 7}
};
RECT rtRand = aArea[rand()%4];
rX = rtRand.left + rand()%5;
rY = rtRand.top + rand()%7;
}
bool CExtraMagic::GetRecallPlace(int nSrcX, int nSrcY, int& rDstX, int& rDstY)
{ //< CSD-030324 : 家券且 镑狼 困摹 备窍扁
const int nDir = m_pCaster->Direction;
int nX = nSrcX + s_aPlace[nDir][rand()%5].x;
int nY = nSrcY - s_aPlace[nDir][rand()%5].y;
if (::IsMovable(nX, nY))
{
rDstX = nX;
rDstY = nY;
return true;
}
// 家券窍绰 磊狼 林函阑 八祸
for (int i = DIRECTION_DOWN; i <= DIRECTION_RIGHTDOWN; ++i)
{
nX = nSrcX + s_aPlace[i][rand()%5].x;
nY = nSrcY - s_aPlace[i][rand()%5].y;
if (::IsMovable(nX, nY))
{
rDstX = nX;
rDstY = nY;
return true;
}
}
return false;
} //> CSD-030324
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -