/// <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)); }
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); }