VOID StdImpact059_T::SendLayerChangeMsg( OWN_IMPACT& rImp, Obj_Character& rMe ) const { __ENTER_FUNCTION //通知客户端层数改变 // Info Other Impact //通知其它客户端效果生效 Scene * pScene = rMe.getScene(); if(NULL==pScene||FALSE==rMe.IsActiveObj()) { return; } GCCharBuff Msg2Other; Msg2Other.SetReceiverID(rImp.GetCasterObjID()); Msg2Other.SetSenderID(rImp.GetCasterObjID()); Msg2Other.SetEnable(TRUE); Msg2Other.SetSN(rImp.GetSN()); Msg2Other.SetBuffID(Impact_GetImpactID(rImp)); Msg2Other.SetSenderLogicCount(rImp.GetCasterLogicCount()); Msg2Other.SetSkillID( rImp.GetSkillID() ); Msg2Other.SetLayerCount( rImp.GetLayerCount() ); // 设置技能效果的持续时间 20100531 BLL Msg2Other.SetContinuance( rImp.GetContinuance() ); if(INVALID_ID!=Impact_GetImpactID(rImp)) { pScene->BroadCast(&Msg2Other, &rMe, TRUE); } __LEAVE_FUNCTION }
BOOL CommonSkill001_T::OnCancel(Obj_Character& rMe) const { __ENTER_FUNCTION SkillInfo_T& rSkillInfo = rMe.GetSkillInfo(); TargetingAndDepletingParams_T& rParams = rMe.GetTargetingAndDepletingParams(); Obj_Character* pTar = (Obj_Character*)(GetTargetObj(rMe)); if(NULL==pTar) { rParams.SetErrCode(OR_INVALID_TARGET); return FALSE; } if(NULL==pTar || FALSE==pTar->IsAlive() || FALSE == pTar->IsActiveObj() || Obj::OBJ_TYPE_PET != pTar->GetObjType()) { rParams.SetErrCode(OR_INVALID_TARGET); return FALSE; } GCManipulatePetRet msg; msg.SetGUID(((Obj_Human*)&rMe)->GetGUIDOfCallUpPet()); msg.SetFightingFlag(FALSE); msg.SetManipulateRet(GCManipulatePetRet::MANIPULATEPET_RET_CALLUPFALID); ((Obj_Human*)&rMe)->GetPlayer()->SendPacket(&msg); // 减少该宠物身上的捕获玩家数 ((Obj_Horse*)pTar)->DelCapturer(rMe.GetID()); return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL CommonSkill001_T::EffectOnUnitOnce(Obj_Character& rMe, Obj_Character& rTar, BOOL bCriticalFlag) const { __ENTER_FUNCTION SkillInfo_T& rSkillInfo = rMe.GetSkillInfo(); TargetingAndDepletingParams_T& rParams = rMe.GetTargetingAndDepletingParams(); if(FALSE==rTar.IsAlive() || FALSE == rTar.IsActiveObj() || Obj::OBJ_TYPE_HORSE != rTar.GetObjType()) { rParams.SetErrCode(OR_INVALID_TARGET); return FALSE; } if(Obj::OBJ_TYPE_HUMAN != rMe.GetObjType()) { rParams.SetErrCode(OR_U_CANNT_DO_THIS_RIGHT_NOW); return FALSE; } {// Test code INT nDataIndex = Skill_GetSkillInfoDescriptorValueByIndex(rSkillInfo, 0); g_ImpactCore.SendImpactToUnit(rTar, nDataIndex, rMe.GetID(), 500); } PET_LOG_PARAM PetLogParam; BOOL bRet = ((Obj_Human*)&rMe)->CaptureHorse(&PetLogParam,rTar.GetID()); GCManipulatePetRet msg; if(bRet) { msg.SetManipulateRet(GCManipulatePetRet::MANIPULATEPET_RET_CAPTURESUCC); ((Obj_Human*)&rMe)->GetPlayer()->SendPacket(&msg); // 向正在捕获的其它玩家发送失败消息 ((Obj_Horse&)rTar).SendCaptureFailedToOthers(rMe.GetID()); // 清空宠物身上所有的玩家数 ((Obj_Horse&)rTar).DelCapturer(rMe.GetID()); HorseManager* pHorseMgr = rMe.getScene()->GetHorseManager(); if (pHorseMgr) { pHorseMgr->RemoveHorse(rTar.GetID()); } PetLogParam.OPType = PET_OP_CATCH; SavePetLog(&PetLogParam); } else { // 减少该宠物身上的捕获玩家数 ((Obj_Horse&)rTar).DelCapturer(rMe.GetID()); msg.SetManipulateRet(GCManipulatePetRet::MANIPULATEPET_RET_CAPTUREFALID); ((Obj_Human*)&rMe)->GetPlayer()->SendPacket(&msg); } return TRUE; __LEAVE_FUNCTION return FALSE; }
BOOL SkillCore_T::ActiveSkillNow(Obj_Character& rMe) const { __ENTER_FUNCTION SkillInfo_T& rSkillInfo = rMe.GetSkillInfo(); TargetingAndDepletingParams_T& rParams = rMe.GetTargetingAndDepletingParams(); if(FALSE==rMe.IsAlive()||FALSE==rMe.IsActiveObj()) { rParams.SetErrCode(OR_DIE); return FALSE; } rSkillInfo.Init(); if(FALSE==InstanceSkill(rSkillInfo, rMe, rParams.GetActivatedSkill(), rParams.GetSkillLevel())) { rParams.SetErrCode(OR_INVALID_SKILL); rParams.SetErrParam(rParams.GetActivatedSkill()); return FALSE; } //refix skill instance rMe.RefixSkill(rSkillInfo); //perform checking INT nLogicID = rSkillInfo.GetLogicID(); SkillLogic_T const* pLogic = g_SkillLogicList.GetLogicById(nLogicID); if(NULL==pLogic) { rParams.SetErrCode(OR_INVALID_SKILL); rParams.SetErrParam(rParams.GetActivatedSkill()); return FALSE; } if(TRUE == pLogic->IsPassive()) { AssertEx(FALSE,"[SkillCore_T::HeartBeat]: Found passive Skill!!!Data error!!"); rParams.SetErrCode(OR_ERROR); return FALSE; } if(TRUE == pLogic->CancelSkillEffect(rMe)) { rParams.SetErrCode(OR_OK); return TRUE; } //Prefix end if(FALSE==rMe.Skill_IsSkillCooldowned(rParams.GetActivatedSkill())&& FALSE==rParams.GetIgnoreConditionCheckFlag()) { rParams.SetErrCode(OR_COOL_DOWNING); return FALSE; } if(TRUE == rSkillInfo.GetMustUseWeaponFlag()) { if(Obj::OBJ_TYPE_HUMAN==rMe.GetObjType()) { Obj_Human* pHuman = (Obj_Human*)&rMe; Item* pItem=HumanItemLogic::GetEquip(pHuman, HEQUIP_WEAPON); if(NULL==pItem) { rParams.SetErrCode(OR_NEED_A_WEAPON); return FALSE; } else if(TRUE==pItem->IsEmpty()) { rParams.SetErrCode(OR_NEED_A_WEAPON); return FALSE; } } } if(FALSE==rParams.GetIgnoreConditionCheckFlag()) { if(FALSE == pLogic->IsConditionSatisfied(rMe)) { return FALSE; } if(FALSE==pLogic->SpecificOperationOnSkillStart(rMe)) { return FALSE; } } switch (rSkillInfo.GetSkillType()) { case SKILL_INSTANT_LAUNCHING: pLogic->StartLaunching(rMe); break; case SKILL_NEED_CHARGING: pLogic->StartCharging(rMe); break; case SKILL_NEED_CHANNELING: pLogic->StartChanneling(rMe); break; default: AssertEx(FALSE,"[SkillCore_T::ActiveSkillNow]: Try to active a un-active skill!"); break; } return TRUE; __LEAVE_FUNCTION return FALSE ; }