📄 cursingmagic.cpp
字号:
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// NK俊 拌魂
::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
// 搬苞蔼阑 措惑磊俊霸 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 CCursingMagic::AuthorityLostSight()
{ // [177] 矫仿惑角狼 鼻瓷 : 矫具甫 2鸥老肺 良塞
const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
if (IsReturn(m_pTarget))
{
m_pCaster->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
// 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
::SendMagicCommand(m_pCaster, SET_LOSTSIGHT, 0, wPeriod);
// 搬苞蔼阑 措惑磊俊霸 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_idCaster;
m_packet.u.magic.server_magic_result_t.wDuration = wPeriod;
m_packet.u.magic.server_magic_result_t.nState = m_pCaster->GetState();
m_packet.u.magic.server_magic_result_t.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
m_pTarget->ApplyCurse(4, CON_DARKNESS, m_dwNow + wPeriod);
if (m_pTarget->IsNpc())
{ // NPC 棺 阁胶磐狼 矫具惑角 瓤苞 楷免窃荐 龋免
::NPCLostSight(m_pTarget, m_dwNow + wPeriod);
}
else
{ // 矫具惑角 惑怕甫 努扼捞攫飘肺 傈价
::SendMagicCommand(m_pTarget, SET_LOSTSIGHT, 0, wPeriod);
}
// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
// NK俊 拌魂
::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
// 搬苞蔼阑 措惑磊俊霸 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 CCursingMagic::DiseaseInduce()
{ //< CSD-031007 : [16]龙捍蜡惯 : Health(硅绊悄 沥档) 皑家
if (m_pTarget->IsNpc())
{
return true;
}
if (IsReturn(m_pTarget))
{
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT);
m_packet.u.magic.server_magic_result.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result.idTarget = m_idCaster;
m_packet.u.magic.server_magic_result.nState = m_pCaster->GetState();
m_packet.u.magic.server_magic_result.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
if (m_pTarget->DecHungry(m_pTarget->HungryMax/2) > 0)
{
m_pTarget->SendCharInfoBasic(SP, m_pTarget->Hungry);
// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
::AddCasterEXP(m_pCaster, m_pTarget, 2, 0, m_nIndex);
}
// NK俊 拌魂
::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
// 搬苞蔼阑 措惑磊俊霸 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;
} //> CSD-031007
bool CCursingMagic::VampireTouch()
{ // [17]轨颇捞绢狼 颊辨 : 措惑磊狼 HP甫 哗狙酒 矫傈磊狼 HP俊 歹窃(措惑磊啊 磷瘤绰 臼澜)
const int nDiff = m_pCaster->GetLevel() - m_pTarget->GetLevel(); // CSD-030806
// HP甫 哗狙阑 % 拌魂
int nPercent = (35 + nDiff) + m_pCaster->Skill[TACTICS_Magery]/4;
if (nPercent > 80) nPercent = 80;
if (nPercent < 10) nPercent = 10;
if (IsReturn(m_pTarget))
{
const int nTemp = m_pTarget->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
const int nMinus = m_pCaster->DecLife(nTemp, 1); // 角力 HP甫 哗疽绰 樊
const int nPlus = m_pTarget->IncLife(nMinus); // 角力 HP甫 歹窍绰 樊
::SendCharacterCondition(m_pTarget, nPlus);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT_H);
m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result_h.idTarget = m_idCaster;
m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
m_packet.u.magic.server_magic_result_h.nState = m_pCaster->GetState();
m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
const int nTemp = m_pCaster->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
const int nMinus = m_pTarget->DecLife(nTemp, 1); // 角力 HP甫 哗疽绰 樊
const int nPlus = m_pCaster->IncLife(nMinus); // 角力 HP甫 歹窍绰 樊
::SendCharacterCondition(m_pCaster, nPlus);
// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
::AddCasterEXP(m_pCaster, m_pTarget, 2, 1, abs(nMinus));
// NK俊 拌魂
::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT_H);
m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result_h.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
m_packet.u.magic.server_magic_result_h.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CCursingMagic::LifeDrain()
{ // [190]积疙仿 呕秒 : 措惑磊狼 HP甫 哗狙酒 矫傈磊狼 HP俊 歹窃(饭骇俊 蝶弗 眉仿摹 软荐樊 瞒殿 利侩
const int nDiff = m_pCaster->GetLevel() - m_pTarget->GetLevel(); // CSD-030806
// HP甫 哗狙阑 % 拌魂
int nPercent = (50 + nDiff) + m_pCaster->Skill[TACTICS_Orison]/3;
if (nPercent > 90) nPercent = 90;
if (nPercent < 10) nPercent = 10;
if (IsReturn(m_pTarget))
{
const int nTemp = m_pTarget->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
const int nMinus = m_pCaster->DecLife(nTemp, 1); // 角力 HP甫 哗疽绰 樊
const int nPlus = m_pTarget->IncLife(nMinus); // 角力 HP甫 歹窍绰 樊
::SendCharacterCondition(m_pTarget, nPlus);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT_H);
m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result_h.idTarget = m_idCaster;
m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
m_packet.u.magic.server_magic_result_h.nState = m_pCaster->GetState();
m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
const int nTemp = m_pCaster->GetPureLife()*nPercent/100; // Hp甫 哗疽绰 樊
const int nMinus = m_pTarget->DecLife(nTemp, 1); // 角力 HP甫 哗疽绰 樊
const int nPlus = m_pCaster->IncLife(nMinus); // 角力 HP甫 歹窍绰 樊
::SendCharacterCondition(m_pCaster, nPlus);
// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷瘤 臼篮 版快
::AddCasterEXP(m_pCaster, m_pTarget, 2, 1, abs(nMinus));
// NK俊 拌魂
::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
// 搬苞蔼阑 措惑磊俊霸 Packet栏肺 焊郴扁
InitMagicResult(CMD_MAGIC_RESULT_H);
m_packet.u.magic.server_magic_result_h.nMagic = m_nIndex;
m_packet.u.magic.server_magic_result_h.idTarget = m_idTarget;
m_packet.u.magic.server_magic_result_h.nLife = -nMinus;
m_packet.u.magic.server_magic_result_h.nState = m_pTarget->GetState();
m_packet.u.magic.server_magic_result_h.nResult = HIT_AND_NOTDEAD;
SendMagicResult();
return true;
}
bool CCursingMagic::Gazer()
{ // [109]30%狼 犬伏肺 脚狼 历林(付过荤侩阂啊)甫 角青茄促
if( rand()%2 == 0 ) // 030514 kyo 50%犬伏
{
return false;
}
const WORD wPeriod = CalcPeriod(); // 蜡瘤矫埃 拌魂
m_pTarget->dwDontCasting = m_dwNow + wPeriod;
m_pTarget->ApplyCurse(1, CON_CURSE, m_dwNow + wPeriod);
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;
}
///////////////////////////////////////////////////////////////////////////////
// Protected Method
///////////////////////////////////////////////////////////////////////////////
bool CCursingMagic::CheckDeath(int nDamage)
{ //< CSD-TW-030627
if (IsReturn(m_pCaster)) return false;
// Life 皑家
const int nLife = m_pTarget->DecLife(nDamage);
if (nLife > 0)
{
::SendCharacterCondition(m_pTarget, -nLife);
}
if (m_pTarget->IsDead())
{
if (m_pCaster->IsPlayer() && m_pTarget->IsPlayer())
{
::KillWho(m_pTarget, m_pCaster);
}
if (m_pTarget->IsNpc())
{
m_pTarget->m_xSummon.Remove(KillMonster);
}
::killCharacter(m_pCaster, m_pTarget);
// 矫傈磊狼 版氰摹 拌魂 : 傍拜付过栏肺 埃林秦辑 磷篮 版快
::AddCasterEXP(m_pCaster, m_pTarget, 1, 1, abs(nDamage));
// NK俊 拌魂
::CheckNK(m_idCaster, m_idTarget, NK_TYPE_NO_KILL_);
// 搬苞蔼阑 措惑磊俊霸 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 = CON_DEATH;
m_packet.u.magic.server_magic_result.nResult = HIT_AND_DEAD;
SendMagicResult();
return true;
}
return false;
} //> CSD-TW-030627
void CCursingMagic::CheckStun(CHARLIST* pTarget)
{
if (pTarget->IsCurse(1, g_curr_time))
{
pTarget->ClearCurse(1);
}
}
void CCursingMagic::CheckSlow(CHARLIST* pTarget)
{
if (pTarget->IsCurse(2, g_curr_time))
{
pTarget->ClearCurse(2);
}
}
void CCursingMagic::CheckPoison(CHARLIST* pTarget)
{
if (pTarget->IsCurse(3, g_curr_time))
{
pTarget->ClearCurse(3);
}
}
void CCursingMagic::CheckBlind(CHARLIST* pTarget)
{
if (pTarget->IsCurse(4, g_curr_time))
{
pTarget->ClearCurse(4);
}
}
void CCursingMagic::CheckFreeze(CHARLIST* pTarget)
{
if (pTarget->IsCurse(6, g_curr_time))
{
pTarget->ClearCurse(6);
}
}
///////////////////////////////////////////////////////////////////////////////
// Private Method
///////////////////////////////////////////////////////////////////////////////
bool CCursingMagic::IsReturn(CHARLIST* pTarget) const
{
return (pTarget->IsPlayer() && pTarget->IsReturn()) ? true:false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -