Пример #1
0
        public void ApplyBuff(BattleStat stat, float factor, int duration)
        {
            var mod = new DurationBattleCharacterStatsMod(_stats.Get(), stat, factor, duration);

            _mods.Add(mod);
            _stats.Put(mod);
        }
    public TemporaryEffect(TemporaryEffect tempEffect)
    {
        continuousMods = new List <StatModContinuous>();
        discreteMods   = new List <StatModDiscrete>();

        name       = tempEffect.name;
        duration   = tempEffect.duration;
        stackLimit = tempEffect.stackLimit;
        stackCnt   = 1;
        ResetTimer();

        subject           = tempEffect.subject;
        subjectBattleStat = tempEffect.subjectBattleStat;

        foreach (StatModContinuous statMod in tempEffect.continuousMods)
        {
            continuousMods.Add(new StatModContinuous(statMod));
        }
        foreach (StatModDiscrete statMod in tempEffect.discreteMods)
        {
            discreteMods.Add(new StatModDiscrete(statMod));
        }

        //Debug.Log("StatType: " + continuousMods[0].StatType + ", Value: " + continuousMods[0].ModValue);
    }
Пример #3
0
    public AdventurerData(GameObject input) : base(input)
    {
        Adventurer inputAdventurer = input.GetComponent <Adventurer>();

        battleStat = inputAdventurer.GetBattleStat();

        if (inputAdventurer.GetEnemy() != null)
        {
            enemy = new CombatantPtr(inputAdventurer.GetEnemy());
        }
        if (inputAdventurer.curHuntingArea != null)
        {
            curHuntingArea = inputAdventurer.curHuntingArea.index;
        }

        //Debug.Log("name : " + inputAdventurer.name);
        if (inputAdventurer.GetSkills() != null)
        {
            skills = inputAdventurer.GetSkills().Keys.ToList();
        }

        temporaryEffects = new Dictionary <string, TemporaryEffectData>();
        Dictionary <string, TemporaryEffect> tempEffectsOrigin = inputAdventurer.GetTemporaryEffects();

        if (tempEffectsOrigin != null)
        {
            foreach (string key in tempEffectsOrigin.Keys.ToList())
            {
                temporaryEffects.Add(key, new TemporaryEffectData(tempEffectsOrigin[key]));
            }
        }
        //if (!isActive && stat == null)
        //    Debug.Log("stat is null");
    }
Пример #4
0
 public DurationBattleCharacterStatsMod(IBattleCharacterStats baseStats, BattleStat stat, float factor, int duration)
 {
     _base   = baseStats;
     _stat   = stat;
     _factor = factor;
     _remainingTurnsActive = duration;
 }
Пример #5
0
        private int GetStat(BattleStat stat)
        {
            var statName = stat.ToString();

            return(statName.MatchesOneOf <Extrinsic>() || statName.MatchesOneOf <Intrinsic>()
                ? _stats.Get()[stat]
                : this.GetPropertyValue <int>(statName).Value);
        }
Пример #6
0
        public int GetStat(BattleStat stat)
        {
            if (stat == BattleStat.None)
            {
                return(0);
            }

            return(_stats[stat]);
        }
Пример #7
0
    private void OnEnable()
    {
        //GameManager.Instance.ChooseSpAdv(0);
        pBattleStat = GameManager.Instance.GetPlayerSpAdv().GetComponent <SpecialAdventurer>().GetBattleStat(); // 배틀스탯 받기
        HideContent();

        //SetPrice(100 + " G");
        //SetSelectedItemCondition(ItemCondition.None);
    }
Пример #8
0
        public void ApplyBuff(BattleStat stat, float factor, int duration)
        {
            if (stat == BattleStat.None)
            {
                return;
            }

            _stats.ApplyBuff(stat, factor, duration);
            _log.Write($"{Name} has {stat} increased by {factor:0.0}x for {duration} turns.");
        }
Пример #9
0
    // 몬스터에서 받아서 초기화.
    public void InitMonster(Monster sample)
    {
        monsterNum = sample.monsterNum;
        canWander  = sample.canWander;

        battleStat = new BattleStat(sample.battleStat);
        rewardStat = new RewardStat(sample.rewardStat);

        //SetDamageText(Instantiate(sample.damageText));
        SetAttackEffect(Instantiate(sample.attackEffect));
        SetDefaultEffects();

        skills           = new Dictionary <string, Skill>();
        temporaryEffects = new Dictionary <string, TemporaryEffect>();
    }
Пример #10
0
    public virtual void OnEnable()
    {
        gameObject.layer = LayerMask.NameToLayer("Monster");

        died    = false;
        current = new BattleStat();
        LoadLevel(level);

        executor = GetComponent <MovementExecutor>();
        if (executor != null)
        {
            executor.enabled = true;
            GetComponent <FramesAnimator>().enabled = true;
        }
    }
Пример #11
0
    public void InitAdventurer(BattleStat battleStat, RewardStat rewardStat) //
    {
        // 이동가능한 타일인지 확인할 delegate 설정.
        pathFinder.SetValidateTile(ValidateNextTile);
        //SetPathFindEventAdventurer();

        this.battleStat = new BattleStat(battleStat);
        this.rewardStat = new RewardStat(rewardStat);
        //stat 초기화
        this.stat = gameObject.AddComponent <Stat>();
        //pathfinder 초기화 // delegate 그대로

        skills           = new Dictionary <string, Skill>();
        temporaryEffects = new Dictionary <string, TemporaryEffect>();
    }
Пример #12
0
    // Use this for initialization

    #region 수정!
    // 몬스터 초기화
    public void InitMonster(int monsterNum, BattleStat battleStat, RewardStat rewardStat, bool canWanderIn = true)
    {
        // 이동가능한 타일인지 확인할 delegate 설정.
        pathFinder.SetValidateTile(ValidateNextTile);
        //SetPathFindEventMonster();

        this.monsterNum = monsterNum;
        this.battleStat = new BattleStat(battleStat);
        this.rewardStat = new RewardStat(rewardStat);
        this.canWander  = canWanderIn;
        //stat 초기화
        //pathfinder 초기화 // delegate 그대로
        SetDefaultEffects();
        skills           = new Dictionary <string, Skill>();
        temporaryEffects = new Dictionary <string, TemporaryEffect>();
    }
Пример #13
0
    public virtual void OnEnable()
    {
        gameObject.layer = LayerMask.NameToLayer("Monster");

        died    = false;
        getHit  = false;
        current = new BattleStat();
        LoadLevel(level);

        executor = GetComponent <MovementExecutor>();
        if (executor != null)
        {
            executor.enabled = true;
            GetComponent <FramesAnimator>().enabled = true;
        }
        LeanTween.scale(gameObject, new Vector3(10f, 10f), 3f).setLoopPingPong();
    }
Пример #14
0
    GameObject LoadMonsterFromJson(string monsterSet, int monsterNum)
    {
        GameObject monster = (GameObject)Instantiate(Resources.Load("MonsterPrefabs/" + monsterSet + "/" + monsterNum));

        //monster.SetActive(false);
        monster.transform.position = new Vector3(5000.0f, 5000.0f, 5000.0f);

        #region 몬스터 스탯 로드
        BattleStat tempBattleStat = new BattleStat();

        //Debug.Log("num : " + sample1Num + ", " + sample2Num);
        //Debug.Log("level : " + monsterJson[monsterSet][sample1Num]["level"]);
        tempBattleStat.Level                = monsterJson[monsterSet][monsterNum]["level"].AsInt;
        tempBattleStat.BaseHealthMax        = monsterJson[monsterSet][monsterNum]["hp"].AsFloat;
        tempBattleStat.BaseDefence          = monsterJson[monsterSet][monsterNum]["def"].AsFloat;
        tempBattleStat.BaseAvoid            = monsterJson[monsterSet][monsterNum]["avoid"].AsFloat;
        tempBattleStat.BaseAttack           = monsterJson[monsterSet][monsterNum]["atk"].AsFloat;
        tempBattleStat.BaseAttackSpeed      = monsterJson[monsterSet][monsterNum]["atkspeed"].AsFloat;
        tempBattleStat.BaseCriticalChance   = monsterJson[monsterSet][monsterNum]["critical"].AsFloat;
        tempBattleStat.BaseCriticalDamage   = monsterJson[monsterSet][monsterNum]["atkcritical"].AsFloat;
        tempBattleStat.BasePenetrationFixed = monsterJson[monsterSet][monsterNum]["penetration"].AsFloat;
        tempBattleStat.BaseMoveSpeed        = monsterJson[monsterSet][monsterNum]["movespeed"].AsFloat;
        tempBattleStat.BaseAttackRange      = monsterJson[monsterSet][monsterNum]["range"].AsInt;

        RewardStat tempRewardStat = new RewardStat();
        tempRewardStat.Exp  = monsterJson[monsterSet][monsterNum]["exp"].AsInt;
        tempRewardStat.Gold = monsterJson[monsterSet][monsterNum]["gold"].AsInt;
        #endregion

        Monster monsterComp = monster.GetComponent <Monster>();
        if (monsterSet == "Boss")
        {
            monsterComp.InitMonster(monsterNum, tempBattleStat, tempRewardStat, false);
        }
        else
        {
            monsterComp.InitMonster(monsterNum, tempBattleStat, tempRewardStat);
        }
        SetMonsterDefaultEffects(monsterComp);

        return(monster);
    }
Пример #15
0
    private void SetBattleStat(BattleStat input)
    {
        BaseHealthMax        = input.BaseHealthMax;
        BaseDefence          = input.BaseDefence;
        BaseAvoid            = input.BaseAvoid;
        BaseAttack           = input.BaseAttack;
        BaseAttackSpeed      = input.BaseAttackSpeed;
        BaseCriticalChance   = input.BaseCriticalChance;
        BaseCriticalDamage   = input.BaseCriticalDamage;
        BasePenetrationFixed = input.BasePenetrationFixed;
        BaseMoveSpeed        = input.BaseMoveSpeed;
        BaseAttackRange      = input.BaseAttackRange;
        BaseShield           = input.BaseShield;

        battleStatContinuous[StatType.Health].BaseValue = HealthMax;

        // TODO 수정요망
        NextExp = input.NextExp;
        level   = input.level;
    }
Пример #16
0
    public void InitAdventurer(StatData statIn, BattleStat battleStat, RewardStat rewardStat) //
    {
        // 이동가능한 타일인지 확인할 delegate 설정.
        pathFinder.SetValidateTile(ValidateNextTile);
        //SetPathFindEventAdventurer();

        this.battleStat = new BattleStat(battleStat);
        this.rewardStat = new RewardStat(rewardStat);
        //stat 초기화
        this.stat = gameObject.AddComponent <Stat>();
        stat.InitStat(statIn, this);
        if (statIn == null)
        {
            Debug.Log("[InitAdv] stat is null");
        }
        //pathfinder 초기화 // delegate 그대로

        skills           = new Dictionary <string, Skill>();
        temporaryEffects = new Dictionary <string, TemporaryEffect>();
    }
Пример #17
0
    public void UpdateBattleStat()
    {
        if (!(curCharacter is Adventurer))
        {
            return;
        }
        Adventurer adv = (Adventurer)curCharacter;
        BattleStat bs  = adv.GetBattleStat();

        characterLevelText.text          = bs.Level.ToString();
        characterHealthText.text         = bs.Health.ToString("F0") + " / " + bs.HealthMax.ToString("F0");
        characterAttackText.text         = bs.Attack.ToString("F0");
        characterAttackSpeedText.text    = bs.AttackSpeed.ToString("F0");
        characterDefenseText.text        = bs.Defence.ToString("F0");
        characterPenetrationText.text    = bs.PenetrationFixed.ToString("F0") + " / " + bs.PenetrationMult.ToString("F0");
        characterCriticalChanceText.text = bs.CriticalChance.ToString("F0");
        characterCriticalAttackText.text = bs.CriticalDamage.ToString("F0");
        characterAvoidText.text          = bs.BaseAvoid.ToString("F0");
        characterAttackRangeText.text    = bs.Range.ToString("F0");
    }
Пример #18
0
    public BattleStat(BattleStat input)
    {
        battleStatContinuous.Add(StatType.HealthMax, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.Defence, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.Avoid, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.Attack, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.AttackSpeed, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.CriticalChance, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.CriticalDamage, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.PenetrationFixed, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.PenetrationMult, new StatBaseContinuous());
        battleStatContinuous.Add(StatType.MoveSpeed, new StatBaseContinuous());
        battleStatDiscrete.Add(StatType.AttackRange, new StatBaseDiscrete());

        battleStatContinuous.Add(StatType.Shield, new StatBaseContinuous());

        battleStatContinuous.Add(StatType.Health, new StatBaseContinuous());

        //Debug.Log("input Range : "+input.BaseAttackRange);
        //Debug.Log("input MaxHP : " + input.BaseHealthMax);

        BaseHealthMax        = input.BaseHealthMax;
        BaseDefence          = input.BaseDefence;
        BaseAvoid            = input.BaseAvoid;
        BaseAttack           = input.BaseAttack;
        BaseAttackSpeed      = input.BaseAttackSpeed;
        BaseCriticalChance   = input.BaseCriticalChance;
        BaseCriticalDamage   = input.BaseCriticalDamage;
        BasePenetrationFixed = input.BasePenetrationFixed;
        BaseMoveSpeed        = input.BaseMoveSpeed;
        BaseAttackRange      = input.BaseAttackRange;

        battleStatContinuous[StatType.Health].BaseValue = HealthMax;

        // TODO 수정요망
        curExp    = 0;
        NextExp   = input.NextExp;
        level     = input.level;
        ownerType = input.ownerType;
    }
Пример #19
0
    public MonsterData(GameObject input) : base(input)
    {
        Monster inputMonster = input.GetComponent <Monster>();

        index      = inputMonster.index;
        monsterNum = inputMonster.monsterNum;

        battleStat = inputMonster.GetBattleStat();

        if (inputMonster.GetEnemy() != null)
        {
            enemy = new CombatantPtr(inputMonster.GetEnemy());
        }

        skills           = inputMonster.GetSkills().Keys.ToList();
        temporaryEffects = new Dictionary <string, TemporaryEffectData>();
        Dictionary <string, TemporaryEffect> tempEffectsOrigin = inputMonster.GetTemporaryEffects();

        foreach (string key in tempEffectsOrigin.Keys.ToList())
        {
            temporaryEffects.Add(key, new TemporaryEffectData(tempEffectsOrigin[key]));
        }
    }
Пример #20
0
    public override void OnAttack(float actualDamage, bool isCrit, bool isDodged)
    {
        BattleStat myBattleStat = owner.GetBattleStat();

        if (!isDodged && actualDamage != 0)
        {
            targets.Clear();
            SetEnemy();
            targets.Add(enemy);

            attackCnt++;
            if (attackCnt % INVOKE_PERIOD == 0)
            {
                AdditionalAttack(targets, myBattleStat.HealthMax * ATTACK_RATE, 0, 1.0f, false);
                float healed = myBattleStat.Heal(myBattleStat.HealthMax * HEAL_RATE);
                if (healed > 1)
                {
                    owner.DisplayHeal(healed);
                }
                DisplaySkillEffect();
            }
        }
    }
Пример #21
0
 public int this[BattleStat stat] => _base[stat].StatMultiplyBy(FactorFor(stat));
 //Skill uniqueSkill;
 public void InitSpecialAdventurer(StatData stat, BattleStat battleStat, RewardStat rewardStat, string name)
 {
     base.InitAdventurer(stat, battleStat, rewardStat);
     AddSkill(name);
     //SetPathFindEventSpecialAdventurer();
 }
Пример #23
0
 public DurationBuffEffect(BattleStat stat, float factor, int duration)
 {
     _stat     = stat;
     _factor   = factor;
     _duration = duration;
 }
Пример #24
0
 public void SetOwner(SpecialAdventurer spAdv)
 {
     owner           = spAdv;
     ownerBattleStat = spAdv.GetBattleStat();
 }
Пример #25
0
 public void SetBattleStat(BattleStat battleStat)
 {
 }
Пример #26
0
 public int this[BattleStat stat] => GetStat(stat.ToString());
Пример #27
0
 protected void SetMyBattleStat()
 {
     myBattleStat = owner.GetBattleStat();
 }
Пример #28
0
 public override void InitSkill()
 {
     //SetNameAndExplanation("반발력", "방어력이 35% 증가합니다. 공격을 받을 때마다, 방어력의 20%만큼의 피해를 공격자에게 줍니다.");
     myBattleStat   = owner.GetBattleStat();
     defenceStatMod = new StatModContinuous(StatType.Defence, ModType.Mult, DEF_BONUS_RATE);
 }
Пример #29
0
 private float FactorFor(BattleStat stat)
 {
     return(_remainingTurnsActive > 0 && stat == _stat
         ? _factor
         : 1.0f);
 }
Пример #30
0
 public int this[BattleStat stat] => GetStat(stat);