⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ainpc.cpp

📁 网络游戏魔域的服务端与客户端完整源代码 包括详细的说明文档与开发日志
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	// 算幻兽的等级加成
	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 + -