Esempio n. 1
0
    // @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));
    }
Esempio n. 2
0
 // @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);
 }
Esempio n. 3
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);
        }
    }