本文整理汇总了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;
//.........这里部分代码省略.........