Beispiel #1
0
    public void CastSpell(SpellValues spell, CharacterValues caster, Tile currentMouseTile)
    {
        playerBehaviour.aControll.PlayAttack(caster);
        playerBehaviour.aControll.PlaySpell(spell);


        Tile casterTile = gridController.GetTile(caster.currentTile.x, caster.currentTile.z);
        Tile targetTile = currentMouseTile;
        //Tile temp1 = gridController.GetTile(caster.currentTile.x,caster.currentTile.z);
        //Tile temp2 = gridController.GetTile(target.currentTile.x,target.currentTile.z);
        List <Tile> targetsList = abilities.AreaType(currentSpell.mySpellAreaType);
        int         leach       = 0;

        foreach (var item in targetsList)
        {
            PlayerInfo      checker = item.CharCurrentlyOnTile;
            CharacterValues target  = null;
            if (checker)
            {
                target = checker.thisCharacter;
            }

            if (target)
            {
                int damageStuff  = 0;
                int healingIsFun = 0;

                if (spell.healsAlly == true)
                {
                    if (target.team == caster.team)
                    {
                        healingIsFun = TrueHealCalculator(spell.spellHealMax, spell.spellHealMin, target.healsReceived);
                    }
                    else
                    {
                        damageStuff = TrueDamageCalculator(spell.spellDamageMax, spell.spellDamageMin, caster.damageChange, target.armorChange, caster.damagePlus, target.armorPlus);
                    }
                }
                else if (spell.hurtsAlly == false)
                {
                    if (target.team != caster.team)
                    {
                        damageStuff = TrueDamageCalculator(spell.spellDamageMax, spell.spellDamageMin, caster.damageChange, target.armorChange, caster.damagePlus, target.armorPlus);
                    }
                }
                else
                {
                    damageStuff = TrueDamageCalculator(spell.spellDamageMax, spell.spellDamageMin, caster.damageChange, target.armorChange, caster.damagePlus, target.armorPlus);
                }
                leach = leach + damageStuff;
                GetHit(target, damageStuff);
                GetHealed(target, healingIsFun);
                if (spell.effect && spell.effectOnTarget == true && target != caster)
                {
                    sEffects.ApplyEffect(caster, spell.effect, target);
                    playerBehaviour.UpdateTabs();
                }
                if (spell.effect && spell.effectOnCaster == true && target == caster)
                {
                    sEffects.ApplyEffect(caster, spell.effect, target);
                    playerBehaviour.UpdateTabs();
                }
            }
        }
        if (spell.damageStealsHp == true)
        {
            StealHp(caster, leach);
        }
        if (spell.spellPull != 0)
        {
            //abilities.SpellPull(spell.mySpellPullType);
        }
        if (spell.spellPushback != 0)
        {
            //abilities.SpellPush(spell.mySpellPushType);
        }

        if (spell.moveCloserToTarget != 0)
        {
            //abilities.WalkTowardsTarget();
        }
        if (spell.moveAwayFromTarget != 0)
        {
            //abilities.MoveAwayFromTarget();
        }

        if (spell.teleportToTarget == true)
        {
            abilities.CasterTeleport(casterTile);
        }
        if (spell.chagePlaceWithTarget == true)
        {
            abilities.TeleportSwitch(casterTile, targetTile);
        }
        HandleCoolDownIncrease(spell);
        UpdateHpApMp();
    }