public static bool CalcDamage(Character attacker, Character defender, ActSkill skill, EDamageType type, float percent, int fixValue, bool ignoreDefense) { XDamage dmg = new XDamage(); dmg.AttackerName = attacker.Name; dmg.DefenderName = defender.Name; dmg.Skill = skill == null ? string.Empty : skill.Name; dmg.Type = (int)type; switch (type) { case EDamageType.TYPE_PHYSICS: dmg.Value = (int)(percent * attacker.CurrAttr.AP + fixValue); break; case EDamageType.TYPE_DARK: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.BAP) + fixValue); break; case EDamageType.TYPE_ICE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.IAP) + fixValue); break; case EDamageType.TYPE_LIGHT: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.LAP) + fixValue); break; case EDamageType.TYPE_FIRE: dmg.Value = (int)(percent * (attacker.CurrAttr.AP + attacker.CurrAttr.FAP) + fixValue); break; } dmg.Value = (int)(UnityEngine.Random.Range(0.80f, 0.95f) * dmg.Value); CalcDamage(attacker, defender, dmg, ignoreDefense); return(true); }
private void OnRefreshSkillItems() { foreach (var current in mSkillBtns) { ESkillPos pos = current.Key; ActSkill skill = CharacterManager.Main.Skill.GetSkill(pos); ItemSkill tab = current.Value; if (skill == null) { tab.maskSprite.gameObject.SetActive(true); tab.lockSprite.gameObject.SetActive(true); } else { tab.lockSprite.gameObject.SetActive(false); if (skill.IsCD()) { tab.maskSprite.gameObject.SetActive(true); tab.maskSprite.fillAmount = skill.GetLeftTime() / skill.CD; } else { tab.maskSprite.gameObject.SetActive(false); } } } }
public void Execute() { if (mCurrentSkill != null) { mCurrentSkill.Loop(); } if (mCurrentSkill != null && mCurrentSkill.Status == EActStatus.SUCCESS) { mCurrentSkill.Clear(); mCurrentSkill = null; } Dictionary <int, ActBuff> .Enumerator em = mBuffs.GetEnumerator(); while (em.MoveNext()) { ActBuff buff = em.Current.Value; buff.Loop(); if (buff.Status == EActStatus.SUCCESS) { mDeleteBuffs.Add(buff.ID); } } em.Dispose(); for (int i = 0; i < mDeleteBuffs.Count; i++) { mBuffs.Remove(mDeleteBuffs[i]); } mDeleteBuffs.Clear(); }
public void TryCastSkill(ESkillPos pos) { if (GTWorld.Main == null || GTWorld.Main.CacheTransform == null) { return; } ActSkill skill = GTWorld.Main.Skill.GetSkill(pos); if (skill == null) { return; } if (GTWorld.Main.Target != null && GTWorld.Main.Target.IsDead()) { CharacterHelper.ClearTarget(GTWorld.Main); } if (GTWorld.Main.Target == null) { Character target = GTWorld.Main.FindEnemyNearest(GTWorld.Main.Skill.WarnerDist); CharacterHelper.SetTarget(GTWorld.Main, target); } GTWorld.Main.PausedAI(true); Resp resp = GTWorld.Main.Command.Get <CommandUseSkill>().Update(skill.ID).Do(); CharacterHelper.CalcCharacterOperateError(resp); if (resp == Resp.TYPE_YES) { GTWorld.Main.UsePowerByCostType(skill.CostType, skill.CostNum); GTEventCenter.FireEvent(GTEventID.TYPE_UPDATE_AVATAR_HP); GTEventCenter.FireEvent(GTEventID.TYPE_UPDATE_AVATAR_MP); } GTWorld.Main.PausedAI(false); }
void LoadXml() { string pPath = string.Format("Text/Skill/{0}", 1); TextAsset asset = ZTResource.Instance.Load <TextAsset>(pPath); if (asset == null) { return; } XmlDocument doc = new XmlDocument(); doc.LoadXml(asset.text); if (doc.FirstChild == null) { return; } XmlNode child = doc.FirstChild.FirstChild; while (child != null) { if (child.Name.Equals("Skill")) { ActSkillData data = new ActSkillData(); data.Read(child as XmlElement); ActSkill skill = new ActSkill(data.Id, data); Skills.Add(skill); } child = child.NextSibling; } for (int i = 0; i < Skills.Count; i++) { Debug.LogError(Skills[i].Id); } }
public void StopCurrentSkill() { if (mCurrentSkill != null) { mCurrentSkill.Stop(); mCurrentSkill = null; } }
public void ExitCurrentSkill() { if (mCurrentSkill != null) { mCurrentSkill.Clear(); mCurrentSkill = null; } }
public ActSkill GetSkill(ESkillPos pos) { if (pos == ESkillPos.Skill_0) { return(mNormalAttacks.Count > mComboIndex ? mNormalAttacks[mComboIndex] : null); } else { ActSkill skill = null; mSkillAttacks.TryGetValue(pos, out skill); return(skill); } }
private void OnRefreshSkillIcons() { foreach (var current in mSkillBtns) { ESkillPos pos = current.Key; ActSkill skill = CharacterManager.Main.Skill.GetSkill(pos); ItemSkill tab = current.Value; if (skill != null) { DSkill db = ReadCfgSkill.GetDataById(skill.ID); if (db != null) { GTItemHelper.ShowTexture(tab.icon, db.Icon); } } } }
public ActSkill SelectSkillByEnemy(Character enemy) { foreach (var current in mSkillAttacks) { ActSkill s = current.Value; if (s.CastDist > 0 && s.IsCD() == false) { if (enemy != null) { if (GTTools.GetHorizontalDistance(mCharacter.Pos, enemy.Pos) < s.CastDist) { return(s); } } else { return(s); } } } return(GetSkill(ESkillPos.Skill_0)); }
public void UseSkillById(int id) { ActSkill skill = GetSkill(id); if (skill == null) { return; } if (skill.Pos == ESkillPos.Skill_0) { if (mComboIndex < mNormalAttacks.Count - 1) { mComboIndex++; } else { mComboIndex = 0; } } mCurrentSkill = skill; mCurrentSkill.Caster = mCharacter; }
public override ENST OnExecute() { Character aiOwner = this.AIOwner; if (aiOwner == null) { return(ENST.FAILURE); } ActSkill skill = aiOwner.Skill.SelectSkillByEnemy(aiOwner.Target); if (skill == null) { return(ENST.FAILURE); } if (aiOwner.Command.Get <CommandUseSkill>().Update(skill.ID).Do() == Resp.TYPE_YES) { return(ENST.SUCCESS); } else { return(ENST.FAILURE); } }
public CharacterSkill(Character c) { this.mCharacter = c; this.mContainer = new ActSkillSystem(); this.mContainer.ActorID = c.ID; this.mContainer.LoadDoc(); for (int i = 0; i < mContainer.Skills.Count; i++) { ActSkill skill = mContainer.Skills[i]; if (skill.Pos == ESkillPos.Skill_0) { mNormalAttacks.Add(skill); this.AttackDist = skill.CastDist; } else { mSkillAttacks[skill.Pos] = skill; } } if (c.IsMain) { WarnerDist = 100; } }
public void UseSkill(ESkillPos pos) { ActSkill skill = GetSkill(pos); //ActManager.Instance.Run(skill); }