本文整理汇总了C++中CMoveShape::UpdateAttribute方法的典型用法代码示例。如果您正苦于以下问题:C++ CMoveShape::UpdateAttribute方法的具体用法?C++ CMoveShape::UpdateAttribute怎么用?C++ CMoveShape::UpdateAttribute使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CMoveShape
的用法示例。
在下文中一共展示了CMoveShape::UpdateAttribute方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ChangeAttr
double CScript::ChangeAttr(const char* CmdStr, char* retStr)
{
OBJECT_TYPE type;
CGUID id;
double value = 0;
double ret = INVILID_VALUE;
int param = GetIntParam(CmdStr, 0);
if(param != ERROR_CODE && param != INVILID_VALUE)
{
type = (OBJECT_TYPE)param;
char* pIdName = GetStringParam(CmdStr, 1);
if(NULL == pIdName) return ret;
id = GetVariableList()->GetGuidValue(pIdName);
if(id == NULL_GUID)
id = GetGeneralVariableList()->GetGuidValue(pIdName);
if(id == NULL_GUID)
id = ((CPlayer*)p_SrcShape)->GetVariableList()->GetGuidValue(pIdName);
CMoveShape* shape = GetGame()->FindShape(type, id);
char* name = GetStringParam(CmdStr, 2);
if(name)
{
value = GetIntParam(CmdStr, 3);
if(value != ERROR_CODE && value != INVILID_VALUE)
{
if(NULL == shape) // 默认id=0时,直接调用SrcShape的SetAttr接口
{
CShape* cShape = GetSrcShape();
if(cShape)
{
((CMoveShape*)cShape)->ChangeAttribute(string(name), value);
((CMoveShape*)cShape)->UpdateAttribute();
ret = 1;
}
}
else
{
shape->ChangeAttribute(string(name), value);
shape->UpdateAttribute();
ret = 1;
}
}
}
M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN );
M_FREE( name, sizeof(char)*MAX_VAR_LEN );
}
else // 参数是字符串
{
AddErrorLogText(CStringReading::LoadString(IDS_GS_FUNCTION, STR_GS_FUNCTION_CHANGEATTRFIRSTVARISSTRING));
}
return ret;
}
示例2: SetAttrInt
double CScript::SetAttrInt(const char* CmdStr, char* retStr)
{
OBJECT_TYPE type;
CGUID id;
double value = 0;
if(!GetSrcShape()) return -1.0f;
int param = GetIntParam(CmdStr, 0);
if(param != ERROR_CODE && param != INVILID_VALUE)
{
type = (OBJECT_TYPE)param;
char* pIdName = GetStringParam(CmdStr, 1);
if(!pIdName) return -1.0f;
id = GetScriptGuidValue((CMoveShape*)GetSrcShape(), pIdName);
CMoveShape* shape = NULL;
char* name = GetStringParam(CmdStr, 2);
if(!name)
{
M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN );
return -1.0f;
}
value = GetIntParam(CmdStr, 3);
if(value == ERROR_CODE || value == INVILID_VALUE)
{
M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN );
M_FREE( name, sizeof(char)*MAX_VAR_LEN );
return -1.0f;
}
if(NULL_GUID == id) // 默认id=0时,直接调用SrcShape的SetAttr接口
{
shape = (CMoveShape*)GetSrcShape();
}
else
{
shape = GetGame()->FindShape(type, id);
}
if(shape)
{
if(CVariableList::VAR_NOT_FOUND == SetScriptVarValue(shape, name, 0, value))
{
shape->SetAttribute(name, value);
shape->UpdateAttribute();
}
}
M_FREE( pIdName, sizeof(char)*MAX_VAR_LEN );
M_FREE( name, sizeof(char)*MAX_VAR_LEN );
}
else // 参数是字符串
{
AddErrorLogText(CStringReading::LoadString(IDS_GS_FUNCTION, STR_GS_FUNCTION_SETATTRFIRSTVARISSTRING));
}
return -1.0f;
}
示例3: SetPKValue
void CPKSys::SetPKValue(CMoveShape *pAttacker,CMoveShape *pBeenAttacker,int nAddSub)
{
//主动攻击(包含使用减益技能)本国白名玩家,每次攻击将增加20点PK值,因此方法获得的PK值上限为20,若PK值已经达到或超过20,则不会再因此方法而增加。
if (pAttacker==NULL || pBeenAttacker==NULL)
{
return;
}
if (pAttacker->GetType()==TYPE_MONSTER)
{
return;
}
if (pBeenAttacker->GetType()==TYPE_MONSTER)
{
if (((CMonster*)pBeenAttacker)->GetNpcType()!=NT_Guard)
{
return;
}
}
CMoveShape* pAtker = pAttacker;
CMoveShape* pDefer = pBeenAttacker;
if( TYPE_PET == pAtker->GetType() )
{
pAtker = pAtker->GetHost();
}
if( TYPE_PET == pDefer->GetType() )
{
pDefer = pDefer->GetHost();
}
if( NULL == pAtker || NULL == pDefer )
{
//PutoutLog("Pet", LT_ERROR, "...");
return;
}
// [8/24/2009 chenxianj]
//////////////////////////////////////////////////////////////////////////
//竞技区域不进行pk值设定
CServerRegion* pRegion = dynamic_cast<CServerRegion*>( pAttacker->GetFather() );
if( !pRegion )
{
return;
}
CRegion::eSecurity eSecurityType = pRegion->GetSecurity(pAttacker->GetTileX(),pAttacker->GetTileY());
if (eSecurityType==CRegion::SECURTIY_FIGHT)
{
return;
}
//////////////////////////////////////////////////////////////////////////
long lNum = pAtker->GetPkValue() + GlobalSetup::GetSetup()->dwPkCountPerAttack;
//攻击本阵营PK值为0的角色(白名角色)/攻击本国或本阵营PK值大于0小于等于20的角色(紫名角色)
if (nAddSub==2 &&
IsSameCamp(pAtker,pDefer)&&
(pDefer->GetPkValue()>=0 && pDefer->GetPkValue()<=20 )&&
(pAtker->GetPkValue()<20))
{
if (lNum>20)
{
lNum = 20;
}
pAtker->SetPkValue(lNum);
}
//对紫名、红名玩家释放增益技能,每次使用增益技能将增加20点PK值,因此方法获得的PK值上限为20,若PK值已经达到或超过20,则PK值不会再因此方法增加
else if (nAddSub==1 && (pDefer->GetPkValue()>0) && (pAtker->GetPkValue()<20) && pAtker!=pDefer)
{
if (lNum>20)
{
lNum = 20;
}
pAtker->SetPkValue(lNum);
}
else if (nAddSub==2 && !IsSameCamp(pAtker,pDefer) && pDefer->GetPVPValue()==0 && pDefer->GetPkValue()<=20 && pAtker->GetPVPValue()<20)
{
if(pRegion->GetStrongPointFlag()==false) // 未开启据点战标志
{
//攻击非本阵营恶名值为0且PK值小于等于20的角色
long lNum = pAtker->GetPVPValue() + GlobalSetup::GetSetup()->dwPkCountPerAttack;
if( lNum > (long) GlobalSetup::GetSetup()->dwPkCountPerAttack)
{
lNum = GlobalSetup::GetSetup()->dwPkCountPerAttack;
}
pAtker->SetAttribute("PVPValue",lNum);
pAtker->UpdateAttribute();
}
}
else if (nAddSub==1 && pDefer->GetPVPValue()>0 && pAtker->GetPVPValue()<20 && pAtker!=pDefer)
{
if(pRegion->GetStrongPointFlag()==false) // 未开启据点战标志
{
//对已有恶名值的角色使用增益技能&& !IsSameCamp(pAtker,pDefer)
//.........这里部分代码省略.........