private void UpdateEffectTargetPos(SImpactEffect pImpactEffect) { if (pImpactEffect == null) { return; } if (pImpactEffect.IsLineEffect()) { uint uEffect = pImpactEffect.GetEffect(); if (uEffect != 0 && m_Character.GetRenderInterface() != null && pImpactEffect.GetCreatorID() != MacroDefine.INVALID_ID) { CObject_Character pCreator = (CObject_Character)(CObjectManager.Instance.FindServerObject((int)pImpactEffect.GetCreatorID())); if (pCreator != null) { Vector3 fvPos = Vector3.zero; if (pCreator.GetRenderInterface() != null && pImpactEffect.GetCreatorLocator().Length > 0) { pCreator.GetRenderInterface().GetLocator(pImpactEffect.GetCreatorLocator(), ref fvPos); } else { fvPos = pCreator.GetPosition(); } m_Character.GetRenderInterface().SetEffectExtraTransformInfos(uEffect, ref fvPos); } } } }
public void LockNearestTargetToHit() { CObject_Character pNearestTarget = LockNearestEnemy(); //下边为挂机增加自动攻击 if (AutoReleaseSkill.Instance.isAutoSkill()) { if (AutoReleaseSkill.Instance.CanUseNextSkill()) { CObject_Character target = mMainTarget as CObject_Character; if (target != null && !target.CannotBeAttack()) { mNearestTargetOLD = target; } if (mNearestTargetOLD == null || mNearestTargetOLD.IsDie()) { mNearestTargetOLD = pNearestTarget; } bool needSend = false; if (mNeedWaitSkillSend) { uint curTime = GameProcedure.s_pTimeSystem.GetTimeNow(); if (curTime - mWaitSkillSend >= 1000) { needSend = true; mWaitSkillSend = curTime; } } else { needSend = true; } if (needSend) { tActionItem suitAbleItem = AutoReleaseSkill.Instance.getSuitAbleSkill(mNearestTargetOLD); if (suitAbleItem == null) { suitAbleItem = CActionSystem.Instance.GetDefaultAction(); } CActionItem_Skill curSkill = suitAbleItem as CActionItem_Skill; mNeedWaitSkillSend = !curSkill.AutoKeepOn(); Vector3 fvMouseHitPlan = Vector3.zero; if (mNearestTargetOLD != null) { fvMouseHitPlan = mNearestTargetOLD.GetPosition(); } CursorMng.Instance.MouseCommand_Set(false, mNearestTargetOLD, fvMouseHitPlan, suitAbleItem); GameProcedure.s_pGameInterface.AutoHitState = 1; CursorMng.Instance.MouseCommand_Active(CursorMng.Instance.MouseCommand_GetLeft()); GameProcedure.s_pGameInterface.AutoHitState = 0; } } else { AutoReleaseSkill.Instance.waitNextSkill(); } } else { CObject_Character target = mMainTarget as CObject_Character; if (target != pNearestTarget) { if (target != null && !target.CannotBeAttack()) { mNearestTargetOLD = target; } } if (mNearestTargetOLD != pNearestTarget && (mNearestTargetOLD == null || mNearestTargetOLD.IsDie())) { mNearestTargetOLD = pNearestTarget; Vector3 fvMouseHitPlan = Vector3.zero; bool needSend = false; if (mNeedWaitSkillSend) { uint curTime = GameProcedure.s_pTimeSystem.GetTimeNow(); if (curTime - mWaitSkillSend >= 1000) { needSend = true; mWaitSkillSend = curTime; } } else { needSend = true; } if (needSend) { tActionItem suitAbleItem = null; if (AutoReleaseSkill.Instance.isAutoSkill()) { if (AutoReleaseSkill.Instance.CanUseNextSkill()) { suitAbleItem = AutoReleaseSkill.Instance.getSuitAbleSkill(pNearestTarget); } else { AutoReleaseSkill.Instance.waitNextSkill(); } } if (suitAbleItem == null) { suitAbleItem = CActionSystem.Instance.GetDefaultAction(); } CActionItem_Skill curSkill = suitAbleItem as CActionItem_Skill; mNeedWaitSkillSend = !curSkill.AutoKeepOn(); if (mNearestTargetOLD != null) { fvMouseHitPlan = mNearestTargetOLD.GetPosition(); } CursorMng.Instance.MouseCommand_Set(false, mNearestTargetOLD, fvMouseHitPlan, suitAbleItem); GameProcedure.s_pGameInterface.AutoHitState = 1; CursorMng.Instance.MouseCommand_Active(CursorMng.Instance.MouseCommand_GetLeft()); GameProcedure.s_pGameInterface.AutoHitState = 0; } //if (suitAbleItem == null) //{ // suitAbleItem = CActionSystem.Instance.GetDefaultAction(); //} //CursorMng.Instance.MouseCommand_Set(false, pNearestTarget, fvMouseHitPlan, suitAbleItem); //// CAI_MySelf aiSelf = (CAI_MySelf)(CObjectManager.Instance.getPlayerMySelf().CharacterLogic_GetAI()); //// if (aiSelf.GetMySelfAI() == ENUM_MYSELF_AI.MYSELF_AI_GUAJI) ////无需判定,一定是挂机状态 //{ // GameProcedure.s_pGameInterface.AutoHitState = 1; //} //CursorMng.Instance.MouseCommand_Active(CursorMng.Instance.MouseCommand_GetLeft()); //GameProcedure.s_pGameInterface.AutoHitState = 0; //mNearestTargetOLD = pNearestTarget; } } }
public void Update() { if (!execute_) { return; } if (targetID_ == MacroDefine.INVALID_ID) { return; } if (CObjectManager.Instance.getPlayerMySelf().IsAutoFight()) { return; } CObject_Character pChar = CObjectManager.Instance.FindServerObject(targetID_) as CObject_Character; if (pChar == null || pChar.IsDie()) { enterFightStat_ = false; waitSendSkillTime_ = 0; return; } if (!enterFightStat_) { return; } if (pChar.CannotBeAttack()) { return; } if (!canUseNextSkill_) { waitNextSkill(); return; } bool needSend = false; if (needWaitSendSkill_) { uint curTime = GameProcedure.s_pTimeSystem.GetTimeNow(); if (curTime - waitSendSkillTime_ >= MIN_ACTION_TIME) { needSend = true; waitSendSkillTime_ = curTime; } } else { needSend = true; } if (needSend) { tActionItem curSkill = getSuitAbleSkill(pChar); if (curSkill == null) { curSkill = CActionSystem.Instance.GetDefaultAction(); } CActionItem_Skill skill = curSkill as CActionItem_Skill; needWaitSendSkill_ = !skill.AutoKeepOn(); Vector3 fvMouseHitPlan = pChar.GetPosition(); CursorMng.Instance.MouseCommand_Set(false, pChar, fvMouseHitPlan, curSkill); CursorMng.Instance.MouseCommand_Active(CursorMng.Instance.MouseCommand_GetLeft()); } }
bool CanUseSkill(CActionItem skillItem, CObject_Character target) { if (skillItem == null) { return(false); } if (target == null) { return(false); } if (target.IsDie()) { return(false); } switch (skillItem.GetType()) { case ACTION_OPTYPE.AOT_SKILL: { SCLIENT_SKILL pSkill = skillItem.GetImpl() as SCLIENT_SKILL; if (pSkill == null) { break; } Vector3 avatarPos = CObjectManager.Instance.getPlayerMySelf().GetPosition(); Vector3 avatarPosOnPlane = new Vector3(avatarPos.x, 0, avatarPos.z); Vector3 targetPos = new Vector3(-1, 0, -1); int ServerID = -1; targetPos = new Vector3(target.GetPosition().x, 0, target.GetPosition().z); ServerID = target.ServerID; Vector3 PosOnPlane = new Vector3(targetPos.x, 0, targetPos.z); float dir = Vector3.Angle(avatarPosOnPlane, PosOnPlane); OPERATE_RESULT result = pSkill.IsCanUse(CObjectManager.Instance.getPlayerMySelf().ID, pSkill.m_nLevel, ServerID, targetPos.x, targetPos.z, dir); if (result == OPERATE_RESULT.OR_OK) { return(true); } } break; case ACTION_OPTYPE.AOT_PET_SKILL: { PET_SKILL pPetSkill = skillItem.GetImpl() as PET_SKILL; if (pPetSkill == null) { break; } if (Interface.Pet.Instance.IsFighting(pPetSkill.m_nPetNum)) { return(true); } } break; } return(false); }