protected override void beforeAttack() { if (this.Target.transform == GameManager.gameMain.GetBoss() && this.healPoint.CurValue<this.healPoint.MaxValue/2) { Skillbase heroPower = this.passiveSkill.Find((sk) => { return sk.SkillId == Skill.HeroPower; }); if (heroPower != null ) heroPower.Cast(this); } }
protected override void InitialSkill() { base.InitialSkill(); if (skills.Find((sk) => { return sk.SkillId == Skill.IceImpact; }) == null) { this.skills.Add(Skillbase.CreateSKill(Skill.IceImpact,this)); } this.passiveSkill.Add(Skillbase.CreateSKill(Skill.HeroPower,this)); this.chara.ShowHUDText("I Learn " + Skill.HeroPower.ToString(), Color.blue, 1f); }
public void OnSkillCast(Skillbase skill, Attacker caster) { lock (locker) { if (caster == this) { if (skill.selfBuff.Count > 0) { if (!this.selfBuffTime.ContainsKey(skill)) { foreach (var item in skill.selfBuff) { this.AddAttrBuff(item.attr, item.value); item.nextTick = Time.time + item.tickInterval; item.curTick = 0; } } this.selfBuffTime[skill] = Time.time + skill.Time; } if (skill.Healing > 0) { this.healPoint.AddValue((int)skill.Healing); this.chara.OnDamage((int)skill.Healing); } } else { if (skill.targetBuff.Count > 0) { if (!this.enemyBuffTime.ContainsKey(skill)) { foreach (var item in skill.targetBuff) { this.AddAttrBuff(item.attr, item.value); item.nextTick = Time.time + item.tickInterval; item.curTick = 0; } } this.enemyBuffTime[skill] = Time.time + skill.Time; } if (skill.Damage > 0) { this.healPoint.AddValue(-(int)skill.Damage); this.chara.OnDamage(-(int)skill.Damage); if (this.healPoint.CurValue <= 0) { caster.EnemyKill(this); this.chara.OnDead(); } } } } }
public IEnumerator Attack() { while (attacking) { if (attackCooldown > Time.time) { yield return(new WaitForSeconds(0.03f)); continue; } attackCooldown = Time.time + 200f / this.speed.MaxValue; beforeAttack(); this.chara.DoAttack(); bool doAttack = true; if (this.skills.Count > 0 && Random.Range(0, 100) < 20) { int castSkId = Random.Range(0, this.skills.Count); Skillbase castSkill = this.skills[castSkId]; if (castSkill.Cast(this)) { this.manaPoint.Exp += 1; this.chara.OnSkillCast(castSkill); doAttack = false; } } if (doAttack) { int floatDmg = Random.Range(this.luck.MaxValue / -5, this.luck.MaxValue / 5); int atk = this.attack.MaxValue + floatDmg; this.attack.Exp += (floatDmg > 0)?1:0; this.luck.Exp += (floatDmg == this.luck.MaxValue / 5 ? -1 : floatDmg == (this.luck.MaxValue / 5 - 1) ? 1 : 0); this.Target.OnAttack(this, this.attack.MaxValue, this.luck.MaxValue); } yield return(new WaitForSeconds(200f / this.speed.MaxValue)); } }
protected virtual void InitialSkill() { int skillCount = (int)Skill.Count; int newSkillCount = Mathf.Min(talentPoint / 20, 4); for (int i = 0; i < newSkillCount; i++) { int sk = Random.Range(0, skillCount); Skillbase skB = skills.Find((s) => { return((int)s.SkillId == sk); }); if (skB != null) { skB.AddExp(20); continue; } else { this.skills.Add(Skillbase.CreateSKill((Skill)sk, this)); } talentPoint -= 20; this.chara.ShowHUDText("I Learn " + ((Skill)sk).ToString(), Color.white, 1f); //Debug.Log(this.MonsterName + " learned skill : " + ((Skill)sk).ToString()); } }
public void OnSkillCast(Skillbase skill) { this.ShowHUDText(skill.Name, skill.Healing > 0 ? Color.green : skill.Damage > 0 ? Color.red : Color.blue, 1f); }
private void LevelUp() { int soulBonus = Random.Range(30, 50); this.SoulPoint += soulBonus; this.talentPoint += soulBonus; this.expPoint.AddValue(-this.expPoint.MaxValue); this.Level += 1; this.transform.localScale = initialSCale * (1 + 0.03f * Level); //this.chara.AttackRange += 0.5f; this.expPoint.AddMaxValue((int)(this.expPoint.MaxValue * Random.Range(5, 20) / 100f)); Dictionary <CharacterAttri, float> attrs = new Dictionary <CharacterAttri, float>(); attrs.Add(this.healPoint, 10); attrs.Add(this.manaPoint, 10); attrs.Add(this.attack, 0.3f); attrs.Add(this.deffence, 0.3f); if (speed.MaxValue <= 300) { attrs.Add(this.speed, 0.2f); } if (luck.MaxValue <= 50) { attrs.Add(this.luck, 0.05f); } if (mind.MaxValue <= 100) { attrs.Add(this.mind, 0.05f); } int attrCount = attrs.Count; for (int i = 0; i < attrCount; i++) { CharacterAttri attr = attrs.Keys.ToArray()[Random.Range(0, attrs.Count)]; int upgradeValue = Random.Range(0, talentPoint / 5); attr.AddMaxValue((int)Mathf.Ceil(upgradeValue * attrs[attr])); talentPoint -= upgradeValue; attrs.Remove(attr); } this.healPoint.AddValue(this.healPoint.MaxValue / 2); this.manaPoint.AddValue(this.healPoint.MaxValue / 2); int skillCount = this.skills.Count; for (int j = 0; j < skillCount; j++) { Skillbase sk = skills[Random.Range(0, this.skills.Count)]; int skillExp = Random.Range(0, talentPoint); sk.AddExp(skillExp); talentPoint -= skillExp; } int newSkillCount = talentPoint / 25; for (int i = 0; i < newSkillCount; i++) { int sk = Random.Range(0, skillCount); if (skills.Exists((s) => { return((int)s.SkillId == sk); })) { skills[sk].AddExp(50); talentPoint -= 25; continue; } this.skills.Add(Skillbase.CreateSKill((Skill)sk, this)); talentPoint -= 25; this.chara.ShowHUDText("I Learn " + ((Skill)sk).ToString(), Color.white, 1f); //Debug.Log(this.MonsterName + " learned skill : " + ((Skill)sk).ToString()); } if (Level >= 30) { Revolation(); } }
public static Skillbase CreateSKill(Skill skill, Attacker owner) { Skillbase sk = new Skillbase(skill, owner); switch (skill) { case Skill.Strong: sk.Name = skill.ToString(); sk.Cost = 30; sk.selfBuff.Add(new buff() { attr = AttrType.MaxHp, value = 100f }); sk.selfBuff.Add(new buff() { attr = AttrType.MaxHpRatio, value = 0.2f }); sk.Time = 30f; sk.CoolDown = 45f; sk.SkillType = SkillType.Self; sk.icon = "32px/Elements_Life"; sk.iconColor = Color.green; break; case Skill.Wise: sk.Name = skill.ToString(); sk.Cost = 30; sk.selfBuff.Add(new buff() { attr = AttrType.MaxMp, value = 100f }); sk.selfBuff.Add(new buff() { attr = AttrType.MaxMpRatio, value = 0.2f }); sk.Time = 30f; sk.CoolDown = 45f; sk.SkillType = SkillType.Self; sk.icon = "32px/Weapons_Staff"; sk.iconColor = Color.blue; break; case Skill.Power: sk.Name = skill.ToString(); sk.Cost = 25; sk.selfBuff.Add(new buff() { attr = AttrType.AtkRatio, value = 0.25f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Self; sk.icon = "32px/Weapons_Sword"; sk.iconColor = Color.white; break; case Skill.Protect: sk.Name = skill.ToString(); sk.Cost = 25; sk.selfBuff.Add(new buff() { attr = AttrType.Def, value = 10f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Self; sk.icon = "32px/Equipment_Shield"; sk.iconColor = Color.white; break; case Skill.Agile: sk.Name = skill.ToString(); sk.Cost = 25; sk.selfBuff.Add(new buff() { attr = AttrType.SpdRatio, value = 0.1f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Self; sk.icon = "32px/Equipment_Boots"; sk.iconColor = Color.blue; break; case Skill.Bless: sk.Name = skill.ToString(); sk.Cost = 25; sk.selfBuff.Add(new buff() { attr = AttrType.LukRatio, value = 0.2f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Self; sk.icon = "32px/Rewards_Star"; sk.iconColor = Color.yellow; break; case Skill.Touch: sk.Name = skill.ToString(); sk.Cost = 25; sk.selfBuff.Add(new buff() { attr = AttrType.MdRatio, value = 0.2f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Self; sk.icon = "32px/Elements_Ground"; sk.iconColor = Color.yellow; break; case Skill.Smash: sk.Name = skill.ToString(); sk.Cost = 15; sk.Damage = 350; sk.targetBuff.Add(new buff() { attr = AttrType.Def, value = -50f }); sk.selfBuff.Add(new buff() { attr = AttrType.Atk, value = 50f }); sk.Time = 10f; sk.CoolDown = 20f; sk.SkillType = SkillType.Both; sk.icon = "32px/Tools_Hammer"; sk.iconColor = Color.red; break; case Skill.IceImpact: sk.Name = skill.ToString(); sk.Cost = 15; sk.Damage = 100; sk.targetBuff.Add(new buff() { attr = AttrType.SpdRatio, value = -0.5f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Target; sk.icon = "32px/Elements_Ice"; sk.iconColor = Color.blue; break; case Skill.Heal: sk.Name = skill.ToString(); sk.Cost = 50; sk.Healing = 250; sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Self; sk.icon = "32px/Elements_Water"; sk.iconColor = Color.blue; break; case Skill.HeroPower: sk.Name = skill.ToString(); sk.Cost = 0; sk.Healing = 1500; sk.selfBuff.Add(new buff() { attr = AttrType.MaxHp, value = 500 }); sk.selfBuff.Add(new buff() { attr = AttrType.MaxMp, value = 200 }); sk.selfBuff.Add(new buff() { attr = AttrType.Atk, value = 100 }); sk.selfBuff.Add(new buff() { attr = AttrType.Def, value = 100 }); sk.selfBuff.Add(new buff() { attr = AttrType.Luk, value = 30 }); sk.selfBuff.Add(new buff() { attr = AttrType.Md, value = 100 }); sk.selfBuff.Add(new buff() { attr = AttrType.Spd, value = 50 }); sk.selfBuff.Add(new buff() { attr = AttrType.MaxHpRatio, value = .2f }); sk.selfBuff.Add(new buff() { attr = AttrType.MaxMpRatio, value = .2f }); sk.selfBuff.Add(new buff() { attr = AttrType.AtkRatio, value = .5f }); sk.selfBuff.Add(new buff() { attr = AttrType.DefRatio, value = .5f }); sk.selfBuff.Add(new buff() { attr = AttrType.SpdRatio, value = .2f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Self; sk.icon = "32px/Modifiers_LevelUp"; sk.iconColor = Color.yellow; break; case Skill.PoisonAttack: sk.Name = skill.ToString(); sk.Cost = 0; sk.Damage = 150; sk.targetBuff.Add(new buff() { attr = AttrType.Def, value = -1f, tickInterval = 3f }); sk.targetBuff.Add(new buff() { attr = AttrType.CurHp, value = -50, tickInterval = 1f }); sk.targetBuff.Add(new buff() { attr = AttrType.Atk, value = -2, tickInterval = 3f }); sk.targetBuff.Add(new buff() { attr = AttrType.Spd, value = -2, tickInterval = 3f }); sk.Time = 15f; sk.CoolDown = 30f; sk.SkillType = SkillType.Target; sk.icon = "32px/Elements_Death"; sk.iconColor = Color.green; break; default: break; } return(sk); }