public static float RatioCoefficient(float fValue, SkillEnum.SkillKind skillKind, CharHandler srcCharHandler, CharHandler aimCharHandler) { bool bSameSide = srcCharHandler.m_CharData.m_eSide == aimCharHandler.m_CharData.m_eSide; switch (skillKind) { case SkillEnum.SkillKind.Soul: fValue *= 1 + srcCharHandler.m_CharData.SoulSkillAtkRatio - (bSameSide ? 0 : aimCharHandler.m_CharData.SoulSkillDefRatio); //(1 + 攻方魂技提升 - 防方魂技免伤) break; case SkillEnum.SkillKind.Magic: fValue *= 1 + srcCharHandler.m_CharData.MagicSkillAtkRatio - (bSameSide ? 0 : aimCharHandler.m_CharData.MagicSkillDefRatio); //(1 + 攻方法术提升 - 防方法术免伤) break; default: fValue *= 1 + srcCharHandler.m_CharData.ForceSkillAtkRatio - (bSameSide ? 0 : aimCharHandler.m_CharData.ForceSkillDefRatio); //(1 + 攻方武功提升 - 防方武功免伤) //计算暴击格挡 float criticalRatio = srcCharHandler.m_CharData.CriticalRatio; float blockRatio = bSameSide ? 0 : aimCharHandler.m_CharData.BlockRatio; if (criticalRatio + blockRatio > 1) { criticalRatio = criticalRatio / (criticalRatio + blockRatio); blockRatio = 1 - criticalRatio; } float rand = Random.Range(0f, 1f); if (rand < criticalRatio) { fValue *= 2; //暴击 HUDTextMgr.GetInst().NewText(string.Format(ConfigData.GetHUDText("21"), fValue), aimCharHandler, HUDTextMgr.HUDTextType.NormalHit); //"暴击{0:N0}" } else if (rand - criticalRatio < blockRatio) { fValue = 0; //格挡 HUDTextMgr.GetInst().NewText(ConfigData.GetHUDText("22"), aimCharHandler, HUDTextMgr.HUDTextType.BUFF); //"格挡" } break; } return(fValue); }
private void SetSkillKind(string condition) { switch (m_iSkillIndex) { case 1: m_eSkillKind = SkillEnum.SkillKind.Soul; m_iNeedMP = int.Parse(condition); break; case 2: case 3: m_eSkillKind = SkillEnum.SkillKind.Force; m_iCDTime = int.Parse(condition); break; case 4: case 5: m_eSkillKind = SkillEnum.SkillKind.Magic; string[] triggerTime = condition.Split('|'); m_eTriggerType = (SkillEnum.TriggerType)Enum.Parse(typeof(SkillEnum.TriggerType), triggerTime[0]); m_iTriggerParam = triggerTime.Length > 1 ? int.Parse(triggerTime[1]) : 0; break; } }