예제 #1
0
 void CreateConsumedAttribute()
 {
     conAttributes = new ConsumedAttribute[(int)ConsumedAttributeName.Count];
     for (int i = 0; i < conAttributes.Length; i++)
     {
         conAttributes[i] = new ConsumedAttribute((ConsumedAttributeName)i, GetConsumedAttributeModifier((ConsumedAttributeName)i));
     }
 }
예제 #2
0
    public override void OnBuff(BaseCharacterBehavior character, BaseCharacterBehavior caster, bool stackable = false, float updateValue = 0)
    {
        if (stackable)
        {
            stack++;
            valueOverLayer.Add(updateValue);
        }
        else
        {
            stack = 1;
            if (updateValue != 0)
            {
                valueOverLayer[0] = updateValue;
            }
        }
        this.caster = caster;
        ConsumedAttribute conAttr = character.status.GetConsumedAttrubute(this.attr3);
        int addMount = (int)(type == BuffType.Absolute ? valueOverLayer[stack - 1] : conAttr.baseValue * valueOverLayer[stack - 1]);

        conAttr.buffedValue += addMount;
        if (addMount != 0)
        {
            character.buffHt.SetText(conAttr.name.ToString() + (addMount > 0 ? " +  " : " ") + addMount);
        }

        switch (attr3)
        {
        case ConsumedAttributeName.Health:
            character.Heal(addMount, caster);
            character.Heal(onceValue, caster);
            if (addMount + onceValue < 0)
            {
                caster.CurrentMakeDamage += -(addMount + onceValue);
            }
            break;

        case ConsumedAttributeName.Mana:
            character.ManaRecover(addMount);
            character.ManaRecover(onceValue);
            break;

        case ConsumedAttributeName.Energy:
            character.EnergyRecover(addMount);
            character.EnergyRecover(onceValue);
            break;

        default:
            break;
        }


        if (ofTimeValue != 0)
        {
            this.status = character.status;
            timer       = Time.time;
        }
    }
예제 #3
0
    protected virtual void Awake()
    {
        myTransform   = transform;
        buildPosition = transform.position;
        hp            = new ConsumedAttribute(ConsumedAttributeName.Health, MaxHealth, 0, 0, 50, new AttributeModifier(), MaxHealth);
        GetComponent <Damagable>().damageHandler += Build_damageHandler;
        this.tag = Tags.Build;
        GameObject go;
        var        hudTextPoint = myTransform.Find("BuffHUDTextPoint");

        if (hudTextPoint != null)
        {
            go = hudTextPoint.gameObject;
        }
        else
        {
            go = new GameObject("BuffHUDTextPoint");
            go.transform.parent   = myTransform;
            go.transform.position = myTransform.position
                                    + new Vector3(0, .1f, 0);
            hudTextPoint = go.transform;
        }
        ht = (GameObject.Instantiate(
                  ResourceLoader.UIPrefabs.GetHurtText(),
                  go.transform.position, Quaternion.identity) as GameObject)
             .GetComponent <HurtText>();

        ht.InitailHUDText(hudTextPoint);

        var bloodPoint = myTransform.Find("BloodPoint");

        if (bloodPoint != null)
        {
            go = bloodPoint.gameObject;
        }
        else
        {
            go = new GameObject("BloodPoint");
            go.transform.parent   = myTransform;
            go.transform.position = myTransform.position
                                    + new Vector3(0, .5f, 0);
        }
        GameObject bb = GameObject.Instantiate(ResourceLoader.UIPrefabs.GetBuildBlood(), go.transform.position, Quaternion.identity) as GameObject;

        buildBlood = bb.GetComponent <BuildBlood>();
        buildBlood.InitialWithTarget(go.transform, this);
        if (myTransform.Find("DestroyFire") != null)
        {
            destroyFire = myTransform.Find("DestroyFire").gameObject;
        }
        SetNPCType(type);
    }
예제 #4
0
    public override void OnDeBuff(BaseCharacterBehavior character)
    {
        ConsumedAttribute conAttr = character.status.GetConsumedAttrubute(this.attr3);

        foreach (float value in valueOverLayer)
        {
            int addMount = (int)(type == BuffType.Absolute ? value: conAttr.baseValue * value) * -1;
            conAttr.buffedValue += addMount * stack;
            if (addMount != 0)
            {
                character.buffHt.SetText(conAttr.name.ToString() + (addMount > 0 ? " + " : " ") + addMount);
            }
        }
    }
    //Combat
    public void Heal(float mount, BaseCharacterBehavior source)
    {
        if (IsDead)
        {
            return;
        }
        if (mount == 0)
        {
            return;
        }
        ConsumedAttribute health = status.GetConsumedAttrubute(ConsumedAttributeName.Health);

        if (health.LossValue == 0)
        {
            return;
        }
        mount *= status.GetStaticAttribute(StaticAttributeName.HealTakeFix).AdjustedValue;
        source.CurrentMakeHealing += mount;
        if (health.LossValue < mount)
        {
            mount = health.LossValue;
        }
        health.CurValue += mount;
        if (healingColloctEnable)
        {
            HealingCounterInDelta += mount;
        }
        else
        {
            healingColloctEnable = true;
            ht.SetText((int)mount);
        }
        if (health.CurValue <= 0)
        {
            Dead();
        }
        else
        {
            //保留event("GetHeal");
        }
    }
    public void Damage(DamageType type, IDamageMaker damageMaker, BaseCharacterBehavior source, bool triggerEvent)
    {
        if (IsDead)
        {
            return;
        }
        bool  isCritical;
        float additionHit;
        float mount = damageMaker.GetCurDamage(type, out isCritical, out additionHit);

        if (mount == 0)
        {
            return;
        }
        float damage = 0;

        if (type == DamageType.Nature)
        {
            damage = mount;
        }
        else
        {
            //Calculate hit
            float dodge    = status.GetSecondaryAttrubute(SecondaryAttributeName.Dodge).AdjustedValue;
            int   dodgeRnd = Random.Range(0, 1000);
            if (type != DamageType.Magic && dodgeRnd < dodge)
            {
                //Miss
                if (dodge > additionHit)
                {
                    ht.SetText("Miss!!");
                    return;
                }
            }
            float deffence = 0;
            switch (type)
            {
            case DamageType.Physical:
                deffence = status.GetSecondaryAttrubute(SecondaryAttributeName.PhysicalDeffence)
                           .AdjustedValue;
                break;

            case DamageType.Skill:
                deffence = status.GetSecondaryAttrubute(SecondaryAttributeName.SkillDeffence)
                           .AdjustedValue;
                break;

            case DamageType.Magic:
                deffence = status.GetSecondaryAttrubute(SecondaryAttributeName.MagicalDeffence)
                           .AdjustedValue;
                break;
            }
            //def 300 => 1-300/600 => .5f, def 1000=>1- 1000/1300=> .23f
            damage  = mount * (1 - deffence / (deffence + 300));
            damage *= status.GetStaticAttribute(StaticAttributeName.DamageTakeFix).AdjustedValue;
        }
        CurrentTakeDamage        += damage;
        source.CurrentMakeDamage += damage;
        ConsumedAttribute health = status.GetConsumedAttrubute(ConsumedAttributeName.Health);

        health.CurValue -= damage >= 1 ? damage : 1;
        if (isCritical)
        {
            ht.SetText((int)damage * -1, true);
        }
        else
        {
            if (damageColloctEnable)
            {
                DamageCounterInDelta += damage;
            }
            else
            {
                damageColloctEnable = true;
                ht.SetText((int)damage * -1);
            }
        }

        if (health.CurValue <= 0)
        {
            Dead();
        }
        else
        {
            if (triggerEvent && OnDamaged != null)
            {
                OnDamaged(mount, type, damage, this, source);
            }
        }
    }