当前位置: 首页>>代码示例>>C++>>正文


C++ UnitBase::can_beattacked方法代码示例

本文整理汇总了C++中UnitBase::can_beattacked方法的典型用法代码示例。如果您正苦于以下问题:C++ UnitBase::can_beattacked方法的具体用法?C++ UnitBase::can_beattacked怎么用?C++ UnitBase::can_beattacked使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在UnitBase的用法示例。


在下文中一共展示了UnitBase::can_beattacked方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: skill_used

void Player::skill_used( int skid, S_INT_64 targetid, CHRSTATE_TYPE_ENUM st)
{
	USE_PROTOCOL_NAMESPACE;

	S_INT_8 ret =0;
	//1.检查当前状态
	if( cur_state_->get_statetype() != st)
	{
		if( action_selector_.goto_state( st) == 0)
			ret =4;
	}

	//2.检查技能是否合法
	SkillRuntime* sr =0;
	SkillDesc* pdesc =0;
	if( ret == 0)
	{
		sr =myskills_.get_skillruntime( skid);
		//技能是否可用
		if( sr == 0)
			ret =1;
		else
		{
			pdesc =sr->get_skilldesc();
			if( !pdesc->driving_)
			{
				//是否是主动技能
				ret =6;
			}
			else if( !cur_state_->is_skillinstate( skid))
			{
				//技能是否存在于当前状态的技能列表中
				ret =5;
			}
			else
			{
				//检查cooldown时间
				if( !sr->is_cooldown())
					ret =2;
			}
		}
	}

	//3.检查目标是否有效
	if( ret == 0 && pdesc->singleattack_)
	{
		if( this->fight_target_obj_ == 0 || fight_target_obj_->get_uuid() != targetid)
		{
			UnitBase* pTarget =CONTENTSERVICE_INS->get_onlineentity( targetid);
			if( pTarget == 0 || pTarget == this)
			{
				ret =3;
			}
			else
			{
				//目标是否能被攻击
				if( !pTarget->can_beattacked( this))
				{
					ret =3;
				}
				else
				{
					//设置战斗对象
					this->set_fighttargetobj( pTarget);
				}
			}
		}
	}

	//4.执行脚本
	if( ret == 0)
	{
		app::script::ScriptContext& context =CONTENTSERVICE_INS->get_scriptcontext();
		try{
			ret =luabind::call_function<char>( context.get_luastate(), "skill_use", pdesc->skillidsn_.c_str(), this, sr->get_runtimedata());
		}
		catch( ...){
			lua_pop( context.get_luastate(), 1);
			ret =-1;
		}
	}

	if( ret == 0)
	{
		//是否是瞬发技能
		if( !sr->is_immediate())
			myskills_.set_curskill( sr);

		//设置最后执行时间
		sr->update_lastruntime();

		//通知其他人触发技能
	}

	Pro_SkillUsed_ack* ack =PROTOCOL_NEW Pro_SkillUsed_ack();
	PRO_UUID_FILL( ack, this->global_index_, this->uuid_);
	ack->skillid_ =skid;
	ack->curstate_ =cur_state_->get_statetype();
	ack->target_unit_ =( fight_target_obj_?fight_target_obj_->get_uuid():NO_INITVALUE);
	ack->ret_ =ret;
//.........这里部分代码省略.........
开发者ID:roseboych,项目名称:mmorpg-xfw,代码行数:101,代码来源:Player_Skill.cpp


注:本文中的UnitBase::can_beattacked方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。