예제 #1
0
 public SkillTarget(SkillTargetContainer target_container, BattleSkill skill, ICreature target, int target_index)
 {
     this.target_container = target_container;
     this.Skill            = skill;
     m_TargetIndex         = target_index;
     m_Creature            = target as BattleCreature;
 }
예제 #2
0
파일: Battle.cs 프로젝트: tapenjoyGame/cry
 protected void OnSkill(BattleSkill skill)
 {
     if (skill.IsDefault == true)
     {
         return;
     }
 }
예제 #3
0
    public BattleVariableControl battle_variable_control;//戦闘をプレイするにあたって、重要な変数の管理

    /*
     * //保存事項------------
     * public int enchant1;
     * public int enchant2;
     *
     * //------------
     */

    public BattleRun1(Summary1 s1)
    {
        set1(s1);

        //    long time1 = m1.get_time();

        battle_flow1 = new BattleFlow1(s1);

        battle_bg   = new BattleBg(s1);
        battle_menu = new BattleMenu(s1);

        battle_member_group = new BattleMemberGroup(s1);
        battle_enemy_group  = new BattleEnemyGroup(s1);

        battle_member_group_attack_run = new BattleMemberGroupAttackRun(s1);
        battle_enemy_group_attack_run  = new BattleEnemyGroupAttackRun(s1);
        battle_enemy_skill_run         = new BattleEnemySkillRun(s1);

        battle_member_group_status_control = new BattleMemberGroupStatusControl(s1);
        battle_enchantment = new BattleEnchantment(s1);
        battle_skill       = new BattleSkill(s1);
        battle_mana        = new BattleMana(s1);



        battle_variable_control = new BattleVariableControl(s1);

        battle_message_window = new BattleMessageWindow(s1);

        //    m1.msbox((m1.get_time() - time1));
    }
예제 #4
0
    public bool DoAction(int index, bool is_skill, bool ignore_distance)
    {
        index = Math.Min(index, Skills.Count - 1);
        BattleSkill skill = Skills[index];

        return(DoAction(skill, is_skill, ignore_distance));
    }
    // 初始化战斗数据库
    private void initializeBattleObjects()
    {
        BattleSkill.InitializeBattleSkills();
        BattleStatus.InitializeBattleStatusList();

        BattleJob.InitializeBattleJobList();
        BattleActor.InitializeBattleActorList();
    }
    public static void InitializeBattleSkills()
    {
        battleSkillsList = new List <BattleSkill>();

        // 0 攻击
        BattleSkill attack = new BattleSkill(0, "攻击", new Texture2D(32, 32));

        attack.Setup(SkillAim.onlyEnemy, 0, 0, null);
        battleSkillsList.Add(attack);
    }
예제 #7
0
    //获取可用技能 这个函数必须在技能列表初始化之后调用否则会出现空指针
    public List <BattleSkill> GetUsableSkills(int level)
    {
        List <BattleSkill> result = new List <BattleSkill>();

        foreach (int skillId in jobSkillsList.Keys)
        {
            if (jobSkillsList[skillId] <= level)
            {
                result.Add(BattleSkill.GetBattleSkill(skillId));
            }
        }
        return(result);
    }
예제 #8
0
    public Buff(BattleCreature creature, BattleSkill skill, SkillInfo.Action action_info, int value, float duration, ISkillBuff parent)
        : base(duration)
    {
        Parent          = parent;
        m_Creature      = creature;
        Skill           = skill;
        this.ActionInfo = action_info;
        switch (action_info.actionType)
        {
        case eActionType.dot_damage:
        case eActionType.dot_damage_mana:
        case eActionType.dot_heal:
        case eActionType.dot_heal_mana:
            this.Value = Mathf.RoundToInt(value / duration);
            break;

        default:
            this.Value = value;
            break;
        }
        this.StartTime = m_Creature.PlaybackTime;

        eBuffColorType buff_color = eBuffColorType.None;

        if (action_info.actionType == eActionType.shield && action_info.value > 0)
        {
            AffectValue    = value;
            AffectValueMax = value;

            buff_color = eBuffColorType.Shield;
        }
        else
        {
            AffectValue    = 1;
            AffectValueMax = 1;
        }

        if (skill != null && skill.Creature != null && IsMainBuff == true && skill.Info.ShowIcon == true)
        {
            if (buff_color != eBuffColorType.Shield)
            {
                buff_color = creature.IsTeam == skill.Creature.IsTeam ? eBuffColorType.Buff : eBuffColorType.DeBuff;
            }

            BuffContainer.Alloc();
            BuffContainer.Asset.Init(Skill.Info.IconID, buff_color, Duration > 0f);
            BuffContainer.Asset.OnUpdate(0f, 1f);
        }
    }
예제 #9
0
        public void Fire(BattleSkill skill, eActionType fire_action, int fire_value)
        {
            SubActions.ForEach(a => a.Fire(skill, fire_action, fire_value));

            switch (actionType)
            {
            case eActionType.hp_drain:
                if (fire_action == eActionType.damage || fire_action == eActionType.dot_damage)
                {
                    int apply_value = -fire_value *GetValue(skill.Creature.GradePercent, skill.Level) / 10000;

                    skill.Creature.SetHeal(apply_value, fire_action == eActionType.dot_damage);
                    TextManager.Instance.PushHeal(skill.Creature, apply_value, fire_action == eActionType.dot_damage?eTextPushType.Dot : eTextPushType.Normal);
                }
                break;
            }
        }
    public void Init(BattleManager _manager, Battler _source, List <Battler> _targets, BattleSkill _skill)
    {
        manager = _manager;
        source  = _source;
        targets = _targets;
        //skill = _skill;

        effects = GetComponents <BattleEffect>().ToList();

        initalized = true;
    }
예제 #11
0
파일: Battle.cs 프로젝트: tapenjoyGame/cry
 void OnUseLeaderSkill(BattleSkill skill)
 {
     m_UILeaderSkill.SetDisable();
     m_SkillInfo.Init(skill.Info);
     m_SkillInfo.Show();
 }
예제 #12
0
 private void LoadSkill(JSONNode N)
 {
     string id = N[BattleConstants.ID];
     string name = N[BattleConstants.NAME];
     Dictionary<string, string> cost = this.GetDictionary((JSONClass)N.AsObject[BattleConstants.COST]);
     float damageRange = float.Parse(N[BattleConstants.DAMAGE_RANGE]);
     Dictionary<string, string> damage = this.GetDictionary((JSONClass)N.AsObject[BattleConstants.DAMAGE]);
     int damageCharacterMaximum = int.Parse(N[BattleConstants.DAMAGE_CHARACTER_MAXIMUM]);
     float healRange = float.Parse(N[BattleConstants.HEAL_RANGE]);
     Dictionary<string, string> heal = this.GetDictionary((JSONClass)N.AsObject[BattleConstants.HEAL]);
     int healCharacterMaximum = int.Parse(N[BattleConstants.HEAL_CHARACTER_MAXIMUM]);
     BattleSkill skill = new BattleSkill(id, name, cost
                                         , damageRange, damage, damageCharacterMaximum
                                         , healRange, heal, healCharacterMaximum);
     skills[id] = skill;
 }
예제 #13
0
 public void SetLeader(pe_UseLeaderSkillType condition, OnUseLeaderSkillDelegate callback)
 {
     UseLeaderSkillType = condition;
     OnUseLeaderSkill   = callback;
     LeaderSkill        = new BattleSkill(Info.TeamSkill, this, Level);
 }
예제 #14
0
파일: Battle.cs 프로젝트: tapenjoyGame/cry
 public void OnUseEnemyLeaderSkill(BattleSkill skill)
 {
     m_SkillEnemyInfo.Init(skill.Info);
     m_SkillEnemyInfo.Show();
 }
예제 #15
0
 public bool CanAction(BattleSkill skill = null)
 {
     return(BattleBase.Instance.IsBattleStart == true && BattleBase.Instance.IsBattleEnd == false && !IsDead && !IsWin && !IsStunned(skill) && !IsSlept(skill));
 }
예제 #16
0
    static public ISkillBuff DoBuff(SkillInfo.Action buff_action, BattleCreature creature, BattleCreature target_creature, BattleSkill skill, int target_index, ISkillBuff parent)
    {
        switch (buff_action.actionType)
        {
        case eActionType.stun:
        case eActionType.hidden:
        case eActionType.sleep:
        {
            if (target_creature.InvokeImmune(eImmuneType.cc, skill.Creature.Info.AttackType, skill.Level) == true)
            {
                return(null);
            }

            int value = skill.GetValueWithTargetIndex(buff_action, target_index, -(target_creature.Level - skill.Level) * GameConfig.Get <int>("stun_level_decrease"));
            if (BattleBase.Instance.Rand.NextRange(1, 10000) > value)
            {
                TextManager.Instance.PushMessage(target_creature, Localization.Get("Miss"), eBuffColorType.Immune, eTextPushType.Normal);
                return(null);
            }

            float duration = skill.GetDuration(buff_action, target_index);
            Buff  buff     = new Buff(target_creature, skill, buff_action, value, duration, parent);
            if (duration == 0f)
            {
                buff.DoAction();
            }
            else if (duration > 0f || duration == -1f)
            {
                target_creature.AddBuff(buff, skill.Info.CanStack);
                TextManager.Instance.PushMessage(target_creature, Localization.Get(buff_action.actionType.ToString()), eBuffColorType.Stun, eTextPushType.Normal);
            }
            else
            {
                Debug.LogErrorFormat("duration is invalid : {0}", buff_action.SkillInfo.Name);
            }
            return(buff);
        }

        case eActionType.ignore_defense_damage:
        case eActionType.ignore_defense_damaged:
        case eActionType.worldboss:
        case eActionType.shield:
        case eActionType.immune:
        case eActionType.provoke:
        case eActionType.buff:
        case eActionType.buff_percent:
        {
            int value = skill.GetValueWithTargetIndex(buff_action, target_index, 0);

            float duration = skill.GetDuration(buff_action, target_index);

            Buff buff = new Buff(target_creature, skill, buff_action, value, duration, parent);
            if (duration == 0f)
            {
                buff.DoAction();
            }
            else if (duration > 0f || duration == -1f)
            {
                target_creature.AddBuff(buff, skill.Info.CanStack);
            }
            else
            {
                Debug.LogErrorFormat("duration is invalid : {0}", buff_action.SkillInfo.Name);
            }
            target_creature.SetWait();

            if (buff_action.statType == eStatType.AttackSpeed && duration > 0f)
            {
                buff.Duration *= (1f + value * 0.0001f);
            }

            return(buff);
        }

        case eActionType.debuff:
        case eActionType.debuff_percent:
        {
            eImmuneType immune_type = eImmuneType.debuff;
            switch (buff_action.actionType)
            {
            default:
                if (target_creature.InvokeImmune(immune_type, skill.Creature.Info.AttackType, skill.Level) == true)
                {
                    return(null);
                }
                break;
            }

            int value = -skill.GetValueWithTargetIndex(buff_action, target_index, 0);

            float duration = skill.GetDuration(buff_action, target_index);

            Buff buff = new Buff(target_creature, skill, buff_action, value, duration, parent);
            if (duration == 0f)
            {
                buff.DoAction();
            }
            else if (duration > 0f || duration == -1f)
            {
                target_creature.AddBuff(buff, skill.Info.CanStack);
            }
            else
            {
                Debug.LogErrorFormat("duration is invalid : {0}", buff_action.SkillInfo.Name);
            }

            target_creature.SetWait();

            if (buff_action.statType == eStatType.AttackSpeed && duration > 0f)
            {
                buff.Duration *= (1f - value * 0.0001f);
            }

            return(buff);
        }

        case eActionType.dot_damage:
        {
            int value = -skill.GetValueWithTargetIndex(buff_action, target_index, creature.GetDamageValue());

            value = Mathf.RoundToInt(value * (1f + (creature.GetValue(eStatType.IncreaseDamagePercent) - creature.GetValue(eStatType.DecreaseDamagePercent)) * 0.0001f));

            float duration = skill.GetDuration(buff_action, target_index);

            Buff buff = new Buff(target_creature, skill, buff_action, value, duration, parent);
            if (duration == 0f)
            {
                buff.DoAction();
            }
            else if (duration > 0f || duration == -1f)
            {
                target_creature.AddBuff(buff, skill.Info.CanStack);
            }
            else
            {
                Debug.LogErrorFormat("duration is invalid : {0}", buff_action.SkillInfo.Name);
            }

            target_creature.SetWait();

            return(buff);
        }

        case eActionType.dot_damage_mana:
        {
            int value = -skill.GetValueWithTargetIndex(buff_action, target_index, 0);

            float decrease = (10000 - (target_creature.Level - skill.Level) * GameConfig.Get <int>("mana_level_decrease")) * 0.0001f;
            value = Mathf.RoundToInt(value * (1f + (creature.GetValue(eStatType.IncreaseDamagePercent) - creature.GetValue(eStatType.DecreaseDamagePercent)) * 0.0001f + decrease));

            float duration = skill.GetDuration(buff_action, target_index);

            Buff buff = new Buff(target_creature, skill, buff_action, value, duration, parent);
            if (duration == 0f)
            {
                buff.DoAction();
            }
            else if (duration > 0f || duration == -1f)
            {
                target_creature.AddBuff(buff, skill.Info.CanStack);
            }
            else
            {
                Debug.LogErrorFormat("duration is invalid : {0}", buff_action.SkillInfo.Name);
            }

            target_creature.SetWait();
            return(buff);
        }

        case eActionType.dot_heal:
        {
            int value = skill.GetValueWithTargetIndex(buff_action, target_index, creature.GetDamageValue());
            value = Mathf.RoundToInt(value * (1f + creature.GetValue(eStatType.IncreaseDamagePercent) * 0.0001f));

            float duration = skill.GetDuration(buff_action, target_index);

            Buff buff = new Buff(target_creature, skill, buff_action, value, duration, parent);
            if (duration == 0f)
            {
                buff.DoAction();
            }
            else if (duration > 0f || duration == -1f)
            {
                target_creature.AddBuff(buff, skill.Info.CanStack);
            }
            else
            {
                Debug.LogErrorFormat("duration is invalid : {0}", buff_action.SkillInfo.Name);
            }
            target_creature.SetWait();

            return(buff);
        }

        case eActionType.dot_heal_mana:
        {
            int   value    = skill.GetValueWithTargetIndex(buff_action, target_index, 0);
            float decrease = (10000 - (target_creature.Level - skill.Level) * GameConfig.Get <int>("mana_level_decrease")) * 0.0001f;
            value = Mathf.RoundToInt(value * (1f + creature.GetValue(eStatType.IncreaseDamagePercent) * 0.0001f) * decrease);

            float duration = skill.GetDuration(buff_action, target_index);

            Buff buff = new Buff(target_creature, skill, buff_action, value, duration, parent);
            if (duration == 0f)
            {
                buff.DoAction();
            }
            else if (duration > 0f || duration == -1f)
            {
                target_creature.AddBuff(buff, skill.Info.CanStack);
            }
            else
            {
                Debug.LogErrorFormat("duration is invalid : {0}", buff_action.SkillInfo.Name);
            }
            target_creature.SetWait();

            return(buff);
        }
        }
        return(null);
    }
예제 #17
0
 public bool IsSlept(BattleSkill skill = null)
 {
     return(Buffs.Any(b => b.IsFinish == false && b.ActionInfo.actionType == eActionType.sleep && b.Skill != skill));
 }
예제 #18
0
 public bool IsStunned(BattleSkill skill = null)
 {
     return(Buffs.Any(b => b.IsFinish == false && (b.ActionInfo.actionType == eActionType.stun || b.ActionInfo.actionType == eActionType.hidden) && b.Skill != skill));
 }
예제 #19
0
    public bool DoAction(BattleSkill skill, bool is_skill, bool ignore_distance)
    {
        if (CanAction() == false)
        {
            return(false);
        }

        if (is_skill == true)
        {
            if (Stat.IsMPFull == false)
            {
                return(false);
            }
        }

        SkillTargetContainer target = skill.GetTargets(ignore_distance, skill.Info.MoveTarget);

        if (target == null)
        {
            return(false);
        }

        CancelAction(false);

        float           delay  = skill.IsDefault == false ? BattleConfig.Instance.SkillDelay : 0f;
        CharacterAction action = Character.DoAction(delay, skill.Info.ActionName, target, skill.IsDefault == false, (ConfigData.Instance.UseBattleEffect == true && skill.IsDefault == false)?BattleBase.LightingScaleValue:Scale - 1f, skill.Duration);

        if (is_skill == true || skill.Info.Type == eSkillType.leader_active)
        {
            if (skill.Info.Type == eSkillType.leader_active)
            {
                BattleBase.Instance.AddLightingTargets(IsTeam, target.targets, this);
            }
            else
            {
                BattleBase.Instance.PlayParticle(Character.transform, BattleBase.Instance.m_SkillCasting);

                float slow_time = action.FirstActionTime;

                if (slow_time > 0f)
                {
                    BattleBase.Instance.AddLighting(this, slow_time + delay, action.Data.Effect.ScaleTime == 0f ? 0f : action.Data.Effect.ScaleTime + delay, action.Data.Effect.JumpScale);
                    BattleBase.Instance.AddLightingTargets(IsTeam, target.targets, this);

                    PlayTargetEffect(IsTeam, target.targets, skill.Info.MoveTarget == eMoveTarget.Character || skill.Info.Actions[0].check_distance == false);
                }
                else
                {
                    Debug.LogErrorFormat("SetLightingTime Error : {0}, {1}, {2}", Info.Name, skill.Info.Name, slow_time);
                }
            }
        }

        if (skill.Info.Type != eSkillType.leader_active)
        {
            AttackNextTime += action.Length;
        }

        m_UseSkill = is_skill;
        if (Stat.IsMPFull == true && is_skill == true)
        {
            Stat.MP = 0;
            Battle.Instance.CheckManaFill(this);
        }
        else
        {
            AddMP(eMPFillType.Action, 1f);
        }

        if (skill.IsDefault == false && skill.IsLeaderActive == false)
        {
            SkillName.Show(skill.Info.Name, ConfigData.Instance.UseBattleEffect ? (1f + BattleBase.LightingScaleValue * 0.3f):Scale);
        }

        return(true);
    }
예제 #20
0
 public void AddSkill(BattleSkill skill)
 {
     this.skills.Add(skill);
 }
예제 #21
0
    public BattleCreature(MapCreatureInfo map_creature_info, CharacterContainer character_container, float attack_next_time, GameObject hpBarPrefab, GameObject skillPrefab)
    {
        MapStageDifficulty stage_info = Network.BattleStageInfo;

        IsTeam      = false;
        Info        = map_creature_info.CreatureInfo;
        SkinName    = map_creature_info.SkinName;
        MapCreature = map_creature_info;

        Grade        = map_creature_info.Grade;
        Level        = map_creature_info.Level;
        GradePercent = map_creature_info.GradePercent;
        Enchant      = map_creature_info.Enchant;

        if (map_creature_info.UseLeaderSkillType != pe_UseLeaderSkillType.Manual && Info.TeamSkill != null)
        {
            SetLeader(map_creature_info.UseLeaderSkillType, BattleStage.Instance.OnUseEnemyLeaderSkill);
        }

        switch (map_creature_info.CreatureType)
        {
        case eMapCreatureType.Elite:
            Scale = 1.2f;
            break;

        case eMapCreatureType.Boss:
            Scale = 1.4f;

            if (stage_info.MapInfo.MapType == "boss")
            {
                Level        = Boss.CalculateLevel(Level, stage_info);
                Grade        = Boss.CalculateGrade(Level);
                Enchant      = Boss.CalculateEnchant(Level);
                GradePercent = CreatureInfoManager.Instance.Grades[Grade].enchants[Enchant].stat_percent * GameConfig.Get <float>("boss_grade_percent");
            }
            Battle.Instance.m_BossHP.Init(this);

            break;

        case eMapCreatureType.WorldBoss:
            Scale = 2.5f;
            BattleWorldboss.Instance.m_BossHP.Init(this, true);
            IgnoreTween = true;
            TextOffset  = -20f;
//                IsShowText = false;
            break;
        }
        Stat = new CreatureStat(map_creature_info.GetStat(Level, GradePercent, Enchant));

        AutoSkillIndex = map_creature_info.AutoSkillIndex;
        InitCommon(character_container, attack_next_time, hpBarPrefab, skillPrefab);

        if (map_creature_info.CreatureType == eMapCreatureType.WorldBoss)
        {
            HPBar.gameObject.SetActive(false);
        }

        foreach (SkillInfo skill_info in Info.Skills)
        {
            if (skill_info.Type != eSkillType.active)
            {
                continue;
            }
            Skills.Add(new BattleSkill(skill_info, this, map_creature_info.Level));
        }

        if (map_creature_info.PassiveInfos.Count > 0)
        {
            foreach (var passive_info in map_creature_info.PassiveInfos)
            {
                bool first        = true;
                var  battle_skill = new BattleSkill(passive_info.SkillInfo, this, map_creature_info.Level);
                foreach (var action in passive_info.SkillInfo.Actions)
                {
                    ISkillBuff buff = SkillTarget.DoBuff(action, this, this, battle_skill, 0, null);
                    if (first == true && string.IsNullOrEmpty(passive_info.SkillInfo.ActionName) == false)
                    {
                        first = false;
                        var comp = AssetManager.GetCharacterPrefab("PassiveEtc_" + passive_info.SkillInfo.ActionName).GetComponent <CharacterActionBuffComponent>();
//                         comp.data.InitEffect();
                        CharacterActionBuff new_action = comp.data.CreateAction(comp, PlaybackTime, Character, 999f, false, 1f);
                        buff.Action = new_action;
                    }
                }
            }
            var buff_worldboss = Buffs.Find(b => b.ActionInfo.actionType == eActionType.worldboss);
            if (buff_worldboss != null)
            {
                Stat.HP = Stat.MaxHP = buff_worldboss.ActionInfo.value;
            }
            else
            {
                Stat.HP = Stat.MaxHP = Stat.Stat.MaxHP;
            }
            Stat.MP = Stat.Stat.ManaInit;
        }
    }