public override void LevelUp(int levels)
    {
        for (int l = levels; l > 0; l--)
        {
            if (NTGBattleDataController.CanPlayerLevelUp(level))
            {
                exp -= expCap;

                for (int i = passives.Count - 1; i >= 0; i--)
                {
                    var pBehaviour = (NTGBattlePassiveSkillBehaviour)passives[i];

                    pBehaviour.Notify(NTGBattlePassive.Event.LevelUp, null);
                }
                foreach (var pSkill in pSkills)
                {
                    pSkill.Notify(NTGBattlePassive.Event.LevelUp, null);
                }

                NTGBattleDataController.GrowPlayerMemberAttrs(ref baseAttrs, roleId);
                ApplyBaseAttrs();

                level++;
                skillPoint++;
            }
        }
    }
    public void AddEquip(string equipId)
    {
        var equip = NTGBattleDataController.GetBattleMemberEquip(Convert.ToInt32(equipId));

        equips.Add(equip);

        AddAttrs(equip.Attrs);

        var skillList = new ArrayList();

        for (int i = 0; i < pSkills.Length; i++)
        {
            skillList.Add(pSkills[i]);
        }

        for (int i = 0; i < equip.Skills.Length; i++)
        {
            var skill = mainController.AddPlayerSkill(this, equip.Skills[i].Resource);
            skill.Init(equip.Skills[i], new float[0], new string[0]);
            (skill as NTGBattlePassiveSkillController).Respawn();
            skillList.Add(skill);
        }

        pSkills = new NTGBattlePassiveSkillController[skillList.Count];
        skillList.CopyTo(pSkills);
    }
Esempio n. 3
0
 public void Upgrade()
 {
     if (level == 0)
     {
         level = 1;
     }
     else
     {
         Load(NTGBattleDataController.GetBattleMemberSkill(nextLevel));
     }
 }
    private IEnumerator doReviveCountDown()
    {
        reviveCountDown = NTGBattleDataController.GetPlayerReviveDuration(level);
        if (id == mainController.localId)
        {
            mainController.uiController.StartPlayerReviveCountdown(reviveCountDown);
        }
        while (reviveCountDown > 0)
        {
            reviveCountDown -= Time.deltaTime;
            yield return(null);
        }
        viewController.Kill();

        Respawn();
    }
Esempio n. 5
0
    public override void Respawn()
    {
        base.Respawn();

        sc = skillController as UTGBattlePassiveSkillControllerR60100080;

        transform.parent        = owner.transform;
        transform.localPosition = Vector3.zero;
        transform.localRotation = Quaternion.identity;

        unitBuff = new NTGBattleUnitController.UnitBuff {
            icon = skillController.icon, desc = NTGBattleDataController.GetSkillDesc(skillController.id), ratio = 0f
        };
        owner.unitBuffs.Add(unitBuff);

        FXEA();
        FXEB();
    }
    public NTGBattleUnitController SmartTarget(NTGBattleSkillController skill)
    {
        NTGBattleUnitController target = null;
        var units = viewController.unitsInView;

        float topScore = -1;
        NTGBattleUnitController lowPlayer   = null;
        NTGBattleUnitController lowBuilding = null;
        NTGBattleUnitController lowMob      = null;

        float lowPlayerHpPer   = 1.0f;
        float lowBuildingHpPer = 1.0f;
        float lowMobHpPer      = 1.0f;

        float lowPlayerScore   = NTGBattleDataController.GetConfig("skill_player_hp");
        float lowBuildingScore = NTGBattleDataController.GetConfig("skill_building_hp");
        float lowMobScore      = NTGBattleDataController.GetConfig("skill_mob_hp");

        if (skill.type != NTGBattleSkillType.Attack)
        {
            lowPlayerScore   = NTGBattleDataController.GetConfig("atk_player_hp");
            lowBuildingScore = NTGBattleDataController.GetConfig("atk_building_hp");
            lowMobScore      = NTGBattleDataController.GetConfig("atk_mob_hp");
        }

        for (int i = 0; i < units.Count; i++)
        {
            var unit = (NTGBattleUnitController)units[i];

            if (!unit.Lockable(group))
            {
                continue;
            }

            if ((skill.mask & unit.mask) == 0)
            {
                continue;
            }

            if (unit.group == group)
            {
                continue;
            }

            var sqrDist = (unit.transform.position - transform.position).sqrMagnitude;
            if (skill.reqTarget != 2 && sqrDist > skill.sqrRange)
            {
                continue;
            }

            float hpPercent = unit.hp / unit.hpMax;
            if (unit is NTGBattlePlayerController)
            {
                if (hpPercent < lowPlayerHpPer)
                {
                    lowPlayer      = unit;
                    lowPlayerHpPer = hpPercent;
                }
            }
            else if (unit is NTGBattleMobController && (unit as NTGBattleMobController).type == 3)
            {
                if (hpPercent < lowBuildingHpPer)
                {
                    lowBuilding      = unit;
                    lowBuildingHpPer = hpPercent;
                }
            }
            else
            {
                if (hpPercent < lowMobHpPer)
                {
                    lowMob      = unit;
                    lowMobHpPer = hpPercent;
                }
            }
        }

        float sqrTopDist = float.MaxValue;

        for (int i = 0; i < units.Count; i++)
        {
            var unit = (NTGBattleUnitController)units[i];

            if (!unit.Lockable(group))
            {
                continue;
            }

            if ((skill.mask & unit.mask) == 0)
            {
                continue;
            }

            if (unit.group == group)
            {
                continue;
            }

            var sqrDist = (unit.transform.position - transform.position).sqrMagnitude;
            if (skill.reqTarget != 2 && sqrDist > skill.sqrRange)
            {
                continue;
            }

            float score = 0;
            if (skill.type == NTGBattleSkillType.Attack)
            {
                if (unit is NTGBattlePlayerController)
                {
                    score = NTGBattleDataController.GetConfig("atk_player");
                }
                else if (unit is NTGBattleMobController && (unit as NTGBattleMobController).type == 3)
                {
                    score = NTGBattleDataController.GetConfig("atk_building");
                }
                else
                {
                    score = NTGBattleDataController.GetConfig("atk_mob");
                }
            }
            else
            {
                if (unit is NTGBattlePlayerController)
                {
                    score = NTGBattleDataController.GetConfig("skill_player");
                }
                else if (unit is NTGBattleMobController && (unit as NTGBattleMobController).type == 3)
                {
                    score = NTGBattleDataController.GetConfig("skill_building");
                }
                else
                {
                    score = NTGBattleDataController.GetConfig("skill_mob");
                }
            }

            if (sqrDist > skill.sqrRange)
            {
                if (skill.type == NTGBattleSkillType.Attack)
                {
                    score -= NTGBattleDataController.GetConfig("atk_move") * ((float)Math.Sqrt(sqrDist) - skill.range);
                }
                else
                {
                    score -= NTGBattleDataController.GetConfig("skill_move") * ((float)Math.Sqrt(sqrDist) - skill.range);
                }
            }

            if (unit == lowPlayer)
            {
                score += lowPlayerScore;
            }
            else if (unit == lowBuilding)
            {
                score += lowBuildingScore;
            }
            else if (unit == lowMob)
            {
                score += lowMobScore;
            }

            if (score > topScore || (score == topScore && sqrDist < sqrTopDist))
            {
                target     = unit;
                topScore   = score;
                sqrTopDist = sqrDist;
            }
        }

        return(target);
    }
    public override void Kill(NTGBattleUnitController killer)
    {
        if (alive)
        {
            base.Kill(killer);

            unitAnimator.SetBool("dead", true);
            mainController.NotifyPlayerKill(this);

            if (voiceController != null)
            {
                voiceController.Kill(killer);
            }

            var givecoinGrade = 0;
            if (killSteak.Count > 0 && deathSteak.Count > 0)
            {
                Debug.LogError("Player KillSteak and DeathSteak Can not Both Has Value! " + id);
            }
            if (killSteak.Count > 0)
            {
                givecoinGrade = killSteak.Count;
            }
            else if (deathSteak.Count > 0)
            {
                givecoinGrade = -deathSteak.Count;
            }


            killSteak.Clear();
            deathSteak.Enqueue(new DeathRecord()
            {
                time = Time.time, killer = killer
            });

            HitRecord lastPlayerHit            = null;
            NTGBattleUnitController lastHitter = killer;
            ArrayList assistSet = new ArrayList();
            while (hitRecords.Count > 0)
            {
                var hitRecord = hitRecords.Dequeue() as HitRecord;
                if (hitRecord.hitType == NTGBattleSkillBehaviour.EffectType.HpRecover || hitRecord.hitType == NTGBattleSkillBehaviour.EffectType.MpRecover)
                {
                    continue;
                }

                var a = hitRecord.shooter as NTGBattlePlayerController;
                if (a != null)
                {
                    if (!assistSet.Contains(a))
                    {
                        a.statistic.assist++;
                        assistSet.Add(a);
                    }
                    lastPlayerHit = hitRecord;
                }
                lastHitter = hitRecord.shooter;
            }

            if (lastPlayerHit != null && Time.time - lastPlayerHit.time < mainController.configX)
            {
                var k = lastPlayerHit.shooter as NTGBattlePlayerController;
                k.statistic.assist--;
                assistSet.Remove(k);
                k.statistic.kill++;
                k.deathSteak.Clear();
                k.killSteak.Enqueue(new KillRecord()
                {
                    time = Time.time, victim = this
                });
                if (k.killSteak.Count > k.statistic.maxKillSteak)
                {
                    k.statistic.maxKillSteak = k.killSteak.Count;
                }
                lastHitter = k;

                for (int i = k.passives.Count - 1; i >= 0; i--)
                {
                    var pBehaviour = (NTGBattlePassiveSkillBehaviour)k.passives[i];
                    pBehaviour.Notify(NTGBattlePassive.Event.Kill, new NTGBattlePassive.EventKillParam()
                    {
                        victim = this
                    });
                }

                foreach (var pSkill in k.pSkills)
                {
                    pSkill.Notify(NTGBattlePassive.Event.Kill, new NTGBattlePassive.EventKillParam {
                        victim = this
                    });
                }
            }

            mainController.uiController.ShowPlayerKillMessage(lastHitter, this, new KillRecord()
            {
                time = Time.time, victim = this
            });

            var giveexpPlayers = new ArrayList();
            foreach (NTGBattleUnitController unit in mainController.battleUnits)
            {
                if (unit is NTGBattlePlayerController && unit.group != group && (transform.position - unit.transform.position).sqrMagnitude < rewardRange * rewardRange)
                {
                    giveexpPlayers.Add(unit);
                }
            }
            foreach (NTGBattleUnitController assist in assistSet)
            {
                if (!giveexpPlayers.Contains(assist))
                {
                    giveexpPlayers.Add(assist);
                }

                for (int i = assist.passives.Count - 1; i >= 0; i--)
                {
                    var pBehaviour = (NTGBattlePassiveSkillBehaviour)assist.passives[i];
                    pBehaviour.Notify(NTGBattlePassive.Event.Assist, new NTGBattlePassive.EventAssistParam()
                    {
                        victim = this
                    });
                }

                foreach (var pSkill in assist.pSkills)
                {
                    pSkill.Notify(NTGBattlePassive.Event.Assist, new NTGBattlePassive.EventAssistParam {
                        victim = this
                    });
                }
            }
            var giveexp = NTGBattleDataController.GetPlayerGiveExp(level) / giveexpPlayers.Count;
            foreach (NTGBattlePlayerController player in giveexpPlayers)
            {
                player.AddExp(giveexp);

                if (mainController.firstBlood && player == lastHitter)
                {
                    player.AddExp(mainController.sceneInfo.FirstBloodExp);
                }
            }

            var lastPlayerHitter = lastHitter as NTGBattlePlayerController;
            if (lastPlayerHitter != null)
            {
                var givecoin = NTGBattleDataController.GetPlayerGiveCoin(givecoinGrade);

                if (mainController.firstBlood)
                {
                    lastPlayerHitter.AddCoin(mainController.sceneInfo.FirstBloodCoin + givecoin);
                    mainController.uiController.ShowUnitCoin(this, lastPlayerHitter, mainController.sceneInfo.FirstBloodCoin + givecoin);
                }
                else
                {
                    lastPlayerHitter.AddCoin(givecoin);
                    mainController.uiController.ShowUnitCoin(this, lastPlayerHitter, givecoin);
                }
                if (lastPlayerHitter == mainController.uiController.localPlayerController)
                {
                    PlayFXOnce(UnitFX.Coin);
                }

                assistSet.Remove(lastPlayerHitter);
                if (assistSet.Count > 0)
                {
                    givecoin *= mainController.configYPlayer / assistSet.Count;
                    foreach (NTGBattlePlayerController assist in assistSet)
                    {
                        assist.AddCoin(givecoin);
                        mainController.uiController.ShowUnitCoin(this, assist, givecoin);
                    }
                }
            }

            if (mainController.firstBlood)
            {
                mainController.firstBlood = false;
            }

            if (navAgent.enabled)
            {
                navAgent.ResetPath();
                navAgent.enabled = false;
            }

            mainController.uiController.HideUnitUI(this, false);
            mainController.uiController.MiniMapDestory(this);

            AddPassive("Revive");
        }
    }