Esempio n. 1
0
 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);
     }
 }
Esempio n. 2
0
    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);
    }
Esempio n. 3
0
 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();
                 }
             }
         }
     }
 }
Esempio n. 4
0
    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));
        }
    }
Esempio n. 5
0
    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());
        }
    }
Esempio n. 6
0
 public void OnSkillCast(Skillbase skill)
 {
     this.ShowHUDText(skill.Name, skill.Healing > 0 ? Color.green : skill.Damage > 0 ? Color.red : Color.blue, 1f);
 }
Esempio n. 7
0
    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();
        }
    }
Esempio n. 8
0
    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);
    }