// @describe 统一的攻击判定(包括主角对怪物\宠物对怪物\怪物对主角\怪物对宠物)aa // @param[in] kAttacker 攻击者aa // @param[in] kSkillInfo 攻击技能属性表aa // @param[in] kStrikeCenter 攻击中心aa // @param[in] iHitPointIndex // @param[in,out] kCallback 攻击回调aa public virtual int DoSDAttack(sdActorInterface kAttacker, Hashtable kSkillAction, Vector3 kStrikeCenter, int iHitPointIndex, sdAttackCB kCallback) { int iStrikeType = (int)kSkillAction["byAoeAreaType"]; int iStrikeAngle = (int)kSkillAction["nAoeAreaData"]; float fStrikeDistance = (float)kSkillAction["nAoeArea"] * 0.001f; //int iStrikeCenterType = (int)kSkillAction["byAoeCenterType"]; int iStrikeCenterOffset = 0; // if (kSkillAction.ContainsKey("nAoeCenterData")) { iStrikeCenterOffset = (int)kSkillAction["nAoeCenterData"]; } Vector3 vFixedCenter = kStrikeCenter + kAttacker.GetDirection() * (float)iStrikeCenterOffset * 0.001f; return(DoSDAttack(kAttacker, kSkillAction, iStrikeType, vFixedCenter, fStrikeDistance, iStrikeAngle, iHitPointIndex, kCallback)); }
// @describe 统一的攻击判定(包括主角对怪物\宠物对怪物\怪物对主角\怪物对宠物)aa // @param[in] kAttacker 攻击者aa // @param[in] kSkillInfo 攻击技能属性表aa // @param[in] iStrikeType 攻击类型aa // @param[in] kStrikeCenter 攻击中心aa // @param[in] fStrikeDisance 攻击范围aa // @param[in] iStrikeAngle 攻击角度(用于扇形区域)aa // @param[in] iHitPointIndex // @param[in,out] kCallback 攻击回调aa public virtual int DoSDAttack(sdActorInterface kAttacker, Hashtable kSkillAction, int iStrikeType, Vector3 kStrikeCenter, float fStrikeDistance, int iStrikeAngle, int iHitPointIndex, sdAttackCB kCallback) { return(0); }
// @describe 统一的攻击判定aa public override int DoSDAttack(sdActorInterface kAttacker, Hashtable kSkillInfo, int iStrikeType, Vector3 kStrikeCenter, float fStrikeDistance, int iStrikeAngle, int iHitPointIndex, sdAttackCB kCallback) { int nRet = 0; if (tuiTuLogic == null) { return(nRet); } if (gameLevel == null) { return(nRet); } if (kAttacker == null) { return(nRet); } if (kSkillInfo == null) { return(nRet); } HeaderProto.ESkillObjType objType = (HeaderProto.ESkillObjType)kSkillInfo["byTargetType"]; List <sdActorInterface> kTargetList = gameLevel.actorMgr.FindActor( kAttacker, objType, kStrikeCenter, kAttacker.GetDirection(), iStrikeType, iStrikeAngle, fStrikeDistance, true); if (kTargetList == null) { return(nRet); } // AOE技能最大攻击目标aa if (kSkillInfo.ContainsKey("wAoeAimNum")) { int nMaxTarget = (int)kSkillInfo["wAoeAimNum"]; if (kTargetList.Count > nMaxTarget) { kTargetList.RemoveRange(nMaxTarget, kTargetList.Count - nMaxTarget); } } // 技能特效aa HeaderProto.ESkillEffect skilleffect = HeaderProto.ESkillEffect.SKILL_EFFECT_DAMAGE_HP; if (kSkillInfo.ContainsKey("bySkillEffect")) { skilleffect = (HeaderProto.ESkillEffect)(kSkillInfo["bySkillEffect"]); } // 判定伤害aa if (kCallback != null) { return(kCallback.OnHit(kAttacker, kTargetList, iHitPointIndex, null, skilleffect)); } else { sdBattleSystem kBattleSystem = sdGameLevel.instance.battleSystem; kTargetList.ForEach(delegate(sdActorInterface kActor) { DamageResult dr = kBattleSystem.testHurt( kAttacker, kSkillInfo, kActor, iHitPointIndex, skilleffect ); if (Bubble.IsHurtOther(dr.bubbleType)) { ++nRet; } }); return(nRet); } }