Ejemplo n.º 1
0
    /// <summary>
    /// <para>向targetPosition使用技能.</para>
    /// 如果targetPosition为zero, 那么会根据技能索敌等情况, 自动确定目标点.
    /// </summary>
    public ErrorCode UseSkill(int resID, Vector3 targetPosition)
    {
        if (mSkillContainer == null)
        {
            return(ErrorCode.InvalidParam);
        }

        if (mScene == null || mScene.isSafeScene())
        {
            return(ErrorCode.NotBattleScene);
        }

        BattleUnitSkill skill = mSkillContainer.GetSkill(resID);

        if (skill == null)
        {
            return(ErrorCode.InvalidParam);
        }

        if (skill.IsRegularAttack)
        {
            // 使用武器技能时, 检查随机事件, 从而确定是否需要改变武器技能的ID.
            StartRegularSkillEventArg argument = new StartRegularSkillEventArg((uint)resID);
            ApplyRandEvent(null, RandEventTriggerType.OnStartRegularSkill, argument);
            if (resID != (int)argument.SkillResID &&
                (skill = mSkillContainer.GetSkill((int)argument.SkillResID)) == null)
            {
                return(ErrorCode.InvalidParam);
            }
        }

        // 检查技能基本信息.
        ErrorCode err = SkillUtilities.CheckSkillGeneralInfo(this, skill);

        if (err != ErrorCode.Succeeded)
        {
            ErrorHandler.Parse(err, "failed to CheckSkillGeneralInfo");
            return(err);
        }

        // 检查技能使用者的当前技能状态.
        if ((err = SkillUtilities.CheckUserSkillUsingState(mActionCenter, skill)) != ErrorCode.Succeeded)
        {
            ErrorHandler.Parse(err, "failed to CheckUserSkillUsingState");
            return(err);
        }

        // 无效的目标点, 重新确定目标点.
        if (targetPosition == Vector3.zero &&
            (!skill.skillRes.autoAim || (targetPosition = GetAimTargetPos()) == Vector3.zero))
        {
            targetPosition = Utility.MoveVector3Towards(GetPosition(), GetDirection(), 10f);
        }

        return(StartSkill(skill, targetPosition));
    }
Ejemplo n.º 2
0
    public override bool RunScript(RandEventArg argument)
    {
        StartRegularSkillEventArg regularSkillArg = argument as StartRegularSkillEventArg;
        Role            role        = mOwner as Role;
        int             weaponID    = role.GetMainWeaponID();
        WeaponTableItem weaponTable = (weaponID >= 0)
                        ? DataManager.WeaponTable[weaponID] as WeaponTableItem : null;

        //
        if (weaponTable == null)
        {
            return(ErrorHandler.Parse(ErrorCode.ConfigError, "武器ID[" + weaponID + "]不存在weapon.txt中, 加强buff将被移除"));
        }

        if (weaponTable.skill_2 < 0)
        {
            return(ErrorHandler.Parse(ErrorCode.ConfigError, "武器[" + weaponID + "]没有强化技能, 加强buff将被移除"));
        }

        regularSkillArg.SkillResID = (uint)weaponTable.skill_2;

        return(true);
    }