📄 ainpc.cpp
字号:
// 算幻兽的等级加成
if (this->IsEudemon() && m_pEudemonItem)
{
int nDef = m_pEudemonItem->GetEudemonLevel() * (m_pEudemonItem->GetInt(ITEMDATA_DEFENSE_) * m_pEudemonItem->GetInt(ITEMDATA_GROWTH) + m_pEudemonItem->GetAddition(ITEMADDITIONDATA_DEFENSE)*100) / 10000;
dwDef = nDef;
}
return dwDef;
}
//////////////////////////////////////////////////////////////////////
DWORD CMonster::GetDex()
{
float fDex = 0.0f;
// 算装备的coding here...
fDex = fDex + this->GetDexterity();
// 因为需要保留2位小数点,乘100
return __max(0, fDex*100.0f);
}
//////////////////////////////////////////////////////////////////////
DWORD CMonster::GetMagicDef()
{
int nDef = m_pType->GetInt(NPCTYPEDATA_MAGIC_DEF);
// 算幻兽的等级加成
if (this->IsEudemon() && m_pEudemonItem)
{
int nMgcDef = m_pEudemonItem->GetEudemonLevel() * (m_pEudemonItem->GetInt(ITEMDATA_MAGICDEF_) * m_pEudemonItem->GetInt(ITEMDATA_GROWTH) + m_pEudemonItem->GetAddition(ITEMADDITIONDATA_MAGICDEF)*100) / 10000;
nDef = nMgcDef;
}
nDef = __min(90, nDef);
nDef = __max(0, nDef);
return nDef;
}
//////////////////////////////////////////////////////////////////////
DWORD CMonster::GetInterAtkRate()
{
int nRate = GetIntervalAtkRate();
// 攻击速度也要算幻兽的属性影响
if (this->IsEudemon() && m_pEudemonItem)
{
int nAtkSpeed = m_pEudemonItem->GetInt(ITEMDATA_ATKSPEED) * m_pEudemonItem->GetInt(ITEMDATA_GROWTH) / 10000;
nRate = ::CutTrail(0, AdjustData(nRate, nAtkSpeed));
}
IStatus* pStatus = QueryStatus(STATUS_ATKSPEED);
if (pStatus)
nRate = ::CutTrail(0, AdjustData(nRate, pStatus->GetPower()));
return nRate;
}
/////////////////////////////////////////////////////////////////////////////
void CMonster::SetStatus(int nStatus, bool bSynchro)
{
I64 i64OldEffect = m_i64Effect;
switch (nStatus)
{
case STATUS_ADJUST_DODGE:
{
m_i64Effect |= STATUS_ADJUST_DODGE;
}
break;
case STATUS_ADJUST_XP:
{
m_i64Effect |= STATUS_ADJUST_XP;
}
break;
case STATUS_ADJUST_DROPMONEY:
{
m_i64Effect |= STATUS_ADJUST_DROPMONEY;
}
break;
case STATUS_NORMAL:
{
m_dwStatus = nStatus;
m_i64Effect = KEEPEFFECT_NORMAL;
}
break;
case STATUS_DIE:
{
m_dwStatus = nStatus;
m_i64Effect = KEEPEFFECT_DIE;
ClearAllStatus();
}
break;
case STATUS_CRIME:
{
m_i64Effect |= KEEPEFFECT_CRIME;
}
break;
case STATUS_SYNCRIME:
{
m_i64Effect |= KEEPEFFECT_SYNCRIME;
}
break;
case STATUS_POISON:
{
m_i64Effect |= KEEPEFFECT_POISON;
}
break;
case STATUS_DISAPPEARING:
{
m_i64Effect |= KEEPEFFECT_DISAPPEARING;
}
break;
case STATUS_DEFENCE1:
{
m_i64Effect &= ~(KEEPEFFECT_DEFENCE2 | KEEPEFFECT_DEFENCE3);
m_i64Effect |= KEEPEFFECT_DEFENCE1;
}
break;
case STATUS_DEFENCE2:
{
m_i64Effect &= ~(KEEPEFFECT_DEFENCE1 | KEEPEFFECT_DEFENCE3);
m_i64Effect |= KEEPEFFECT_DEFENCE2;
}
break;
case STATUS_DEFENCE3:
{
m_i64Effect &= ~(KEEPEFFECT_DEFENCE1 | KEEPEFFECT_DEFENCE2);
m_i64Effect |= KEEPEFFECT_DEFENCE3;
}
break;
case STATUS_FREEZE:
{
m_i64Effect |= KEEPEFFECT_FREEZE;
}
break;
case STATUS_SMOKE:
{
m_i64Effect |= KEEPEFFECT_SMOKE;
}
break;
case STATUS_DARKNESS:
{
m_i64Effect |= KEEPEFFECT_DARKNESS;
}
break;
case STATUS_PALSY:
{
m_i64Effect |= KEEPEFFECT_PALSY;
}
break;
case STATUS_ATTACK:
{
m_i64Effect |= KEEPEFFECT_ATTACK;
}
break;
case STATUS_MAGICDEFENCE:
{
m_i64Effect |= KEEPEFFECT_MAGICDEFENCE;
}
break;
case STATUS_REFLECT:
{
m_i64Effect |= KEEPEFFECT_REFLECT;
}
break;
case STATUS_REFLECTMAGIC:
{
m_i64Effect |= KEEPEFFECT_REFLECTMAGIC;
}
break;
case STATUS_MAGICDAMAGE:
{
m_i64Effect |= KEEPEFFECT_MAGICDAMAGE;
}
break;
case STATUS_ATKSPEED:
{
m_i64Effect |= KEEPEFFECT_ATKSPEED;
}
break;
case STATUS_SLOWDOWN1:
{
m_i64Effect |= KEEPEFFECT_SLOWDOWN1;
}
break;
case STATUS_SLOWDOWN2:
{
m_i64Effect |= KEEPEFFECT_SLOWDOWN2;
}
break;
case STATUS_MAXLIFE:
{
m_i64Effect |= KEEPEFFECT_MAXLIFE;
}
break;
case STATUS_HIDDEN:
{
m_i64Effect |= KEEPEFFECT_HIDDEN;
}
break;
case STATUS_ADD_EXP:
{
m_i64Effect |= KEEPEFFECT_ADD_EXP;
}
break;
case STATUS_ADJUST_EXP:
{
m_i64Effect |= KEEPEFFECT_ADJUST_EXP;
}
break;
// 以下是结界系统相关的状态 ================
case STATUS_TEAMHEALTH:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ALL;
m_i64Effect |= KEEPEFFECT_TEAM_HEALTH;
}
break;
case STATUS_TEAMATTACK:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ALL;
m_i64Effect |= KEEPEFFECT_TEAM_ATTACK;
}
break;
case STATUS_TEAMDEFENCE:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ALL;
m_i64Effect |= KEEPEFFECT_TEAM_DEFENCE;
}
break;
case STATUS_TEAMSPEED:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ALL;
m_i64Effect |= KEEPEFFECT_TEAM_SPEED;
}
break;
case STATUS_TEAMEXP:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ALL;
m_i64Effect |= KEEPEFFECT_TEAM_EXP;
}
break;
case STATUS_TEAMSPIRIT:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ALL;
m_i64Effect |= KEEPEFFECT_TEAM_SPIRIT;
}
break;
case STATUS_TEAMCLEAN:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ALL;
m_i64Effect |= KEEPEFFECT_TEAM_CLEAN;
}
break;
// 以上是结界系统相关状态 ===============
case STATUS_HEAL:
{
m_i64Effect |= KEEPEFFECT_HEAL;
}
break;
case STATUS_FAINT:
{
m_i64Effect |= KEEPEFFECT_FAINT;
}
break;
case STATUS_TRUCULENCE:
{
m_i64Effect |= KEEPEFFECT_TRUCULENCE;
}
break;
case STATUS_DAMAGE:
{
m_i64Effect |= KEEPEFFECT_DAMAGE;
}
break;
case STATUS_ATKER_DAMAGE:
{
m_i64Effect |= KEEPEFFECT_ATKER_DAMAGE;
}
break;
case STATUS_CONFUSION:
{
m_i64Effect |= KEEPEFFECT_CONFUSION;
}
break;
case STATUS_FRENZY:
{
m_i64Effect |= KEEPEFFECT_FRENZY;
}
break;
case STATUS_EXTRA_POWER:
{
m_i64Effect |= KEEPEFFECT_EXTRA_POWER;
}
break;
case STATUS_SORB_REFLECT:
{
m_i64Effect |= KEEPEFFECT_SORB_REFLECT;
m_tSorbReflect.Startup(SORB_REFLECT_SECS);
m_nTotalDamage = 0;
}
break;
case STATUS_FRENZY2:
{
m_i64Effect |= KEEPEFFECT_FRENZY2;
m_nKillNum = 0;
}
break;
case STATUS_LOCK:
break;
case STATUS_SUPER_MATK:
break;
default:
::LogSave("Invalid status: [%u]", nStatus);
// ASSERT(!"switch status");
}
if (STATUS_FREEZE == nStatus || STATUS_FAINT == nStatus)
{
this->ClrAttackTarget(); // 停止自动战斗
}
if(bSynchro && i64OldEffect != m_i64Effect)
{
CMsgUserAttrib msg;
if (msg.Create(GetID(), _USERATTRIB_KEEPEFFECT, m_i64Effect))
{
if (STATUS_MAXLIFE == nStatus)
{
msg.Append(_USERATTRIB_MAXLIFE, this->GetMaxLife());
msg.Append(_USERATTRIB_LIFE, this->GetLife());
}
BroadcastRoomMsg(&msg, INCLUDE_SELF);
}
}
}
/////////////////////////////////////////////////////////////////////////////
void CMonster::ClsStatus(int nStatus, bool bSynchro)
{
I64 i64OldEffect = m_i64Effect;
switch (nStatus)
{
case STATUS_ADJUST_DODGE:
{
m_i64Effect &= ~ STATUS_ADJUST_DODGE;
}
break;
case STATUS_ADJUST_XP:
{
m_i64Effect &= ~ STATUS_ADJUST_XP;
}
break;
case STATUS_ADJUST_DROPMONEY:
{
m_i64Effect &= ~ STATUS_ADJUST_DROPMONEY;
}
break;
case STATUS_NORMAL:
{
ASSERT(!"STATUS_NORMAL");
}
break;
case STATUS_DIE:
{
m_dwStatus = nStatus;
m_i64Effect &= ~KEEPEFFECT_DIE;
}
break;
case STATUS_CRIME:
{
m_i64Effect &= ~KEEPEFFECT_CRIME;
}
break;
case STATUS_SYNCRIME:
{
m_i64Effect &= ~KEEPEFFECT_SYNCRIME;
}
break;
case STATUS_POISON:
{
m_i64Effect &= ~KEEPEFFECT_POISON;
}
break;
case STATUS_DEFENCE1:
{
m_i64Effect &= ~KEEPEFFECT_DEFENCE1;
}
break;
case STATUS_DEFENCE2:
{
m_i64Effect &= ~KEEPEFFECT_DEFENCE2;
}
break;
case STATUS_DEFENCE3:
{
m_i64Effect &= ~KEEPEFFECT_DEFENCE3;
}
break;
case STATUS_FREEZE:
{
m_i64Effect &= ~KEEPEFFECT_FREEZE;
}
break;
case STATUS_SMOKE:
{
m_i64Effect &= ~KEEPEFFECT_SMOKE;
}
break;
case STATUS_DARKNESS:
{
m_i64Effect &= ~KEEPEFFECT_DARKNESS;
}
break;
case STATUS_PALSY:
{
m_i64Effect &= ~KEEPEFFECT_PALSY;
}
break;
case STATUS_ATTACK:
{
m_i64Effect &= ~KEEPEFFECT_ATTACK;
}
break;
case STATUS_MAGICDEFENCE:
{
m_i64Effect &= ~KEEPEFFECT_MAGICDEFENCE;
}
break;
case STATUS_REFLECT:
{
m_i64Effect &= ~KEEPEFFECT_REFLECT;
}
break;
case STATUS_REFLECTMAGIC:
{
m_i64Effect &= ~KEEPEFFECT_REFLECTMAGIC;
}
break;
case STATUS_MAGICDAMAGE:
{
m_i64Effect &= ~KEEPEFFECT_MAGICDAMAGE;
}
break;
case STATUS_ATKSPEED:
{
m_i64Effect &= ~KEEPEFFECT_ATKSPEED;
}
break;
case STATUS_SLOWDOWN1:
{
m_i64Effect &= ~KEEPEFFECT_SLOWDOWN1;
}
break;
case STATUS_SLOWDOWN2:
{
m_i64Effect &= ~KEEPEFFECT_SLOWDOWN2;
}
break;
case STATUS_MAXLIFE:
{
m_i64Effect &= ~KEEPEFFECT_MAXLIFE;
}
break;
case STATUS_HIDDEN:
{
m_i64Effect &= ~KEEPEFFECT_HIDDEN;
}
break;
case STATUS_ADD_EXP:
{
m_i64Effect &= ~KEEPEFFECT_ADD_EXP;
}
break;
case STATUS_ADJUST_EXP:
{
m_i64Effect &= ~KEEPEFFECT_ADJUST_EXP;
}
break;
// 以下是结界系统相关的状态 ================
case STATUS_TEAMHEALTH:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_HEALTH;
}
break;
case STATUS_TEAMATTACK:
{
m_i64Effect &= ~KEEPEFFECT_TEAM_ATTACK;
}
break;
case STATUS_TEAMDEFENCE:
{
m_i64E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -