Example #1
0
    /// <summary>
    /// 作業領域を確保
    /// </summary>
    /// <param name="field_area_count"></param>
    private void _allocateWorkArea(int field_area_count)
    {
        for (int idx = 0; idx < m_WorkFormedSkills.Length; idx++)
        {
            m_ResultFormedSkills[idx] = new BattleSkillReq();
            m_WorkFormedSkills[idx]   = new BattleSkillReq();
        }

        m_WorkActiveSkillMembers        = new CharaOnce[BattleParam.m_PlayerParty.getPartyMemberMaxCount()];
        m_WorkIsAliveActiveSkillMembers = new bool[BattleParam.m_PlayerParty.getPartyMemberMaxCount()];

        m_WorkHandcardCostPerElement = new bool[(int)MasterDataDefineLabel.ElementType.MAX];

        m_WorkGeneralFieldCostInfo = new int[field_area_count, (int)MasterDataDefineLabel.ElementType.MAX];
        m_WorkMemberFieldCostInfo  = new int[BattleParam.m_PlayerParty.getPartyMemberMaxCount()][, ];
        for (int member_idx = 0; member_idx < m_WorkMemberFieldCostInfo.Length; member_idx++)
        {
            m_WorkMemberFieldCostInfo[member_idx] = new int[field_area_count, (int)MasterDataDefineLabel.ElementType.MAX];
        }

        m_IsBoosts = new bool[field_area_count];

        m_IsFulls = new bool[field_area_count];

        m_FilterTypes = new SkillRequestParam.SkillFilterType[BattleParam.m_PlayerParty.getPartyMemberMaxCount()];
    }
Example #2
0
    /// <summary>
    /// 常駐スキルの成立を判定
    /// </summary>
    private void _checkAlwaysSkill()
    {
        //常駐スキル
        for (int skill_idx = 0; skill_idx < m_OrderedSkillList.Length; skill_idx++)
        {
            MasterDataSkillActive current_skill_active = m_OrderedSkillList[skill_idx];

            if (current_skill_active.always == MasterDataDefineLabel.BoolType.ENABLE)
            {
                //復活スキル以外を判定
                if (current_skill_active.getResurrectInfo() == null)
                {
                    uint  current_skill_id   = current_skill_active.fix_id;
                    int[] current_skill_cost = current_skill_active.GetCostPerElement();
                    _checkActiveSkillFormingConditionSub(m_WorkGeneralFieldCostInfo, current_skill_cost, m_WorkHandcardCostPerElement, GlobalDefine.PartyCharaIndex.GENERAL, current_skill_id);
                }
            }
        }
        // 常駐回復スキルと同条件で成立する常駐復活スキルを追加
        int always_recov_skill_count = m_WorkFormedSkillsCount;

        for (int idx = 0; idx < always_recov_skill_count; idx++)
        {
            BattleSkillReq recov_skill_req = m_WorkFormedSkills[idx];
            if (m_IsBoosts[recov_skill_req.m_SkillParamFieldNum] != false)
            {
                for (int skill_idx = 0; skill_idx < m_OrderedSkillList.Length; skill_idx++)
                {
                    MasterDataSkillActive current_skill_active = m_OrderedSkillList[skill_idx];

                    if (current_skill_active.isAlwaysResurrectSkill())
                    {
                        MasterDataSkillActive recov_skill = BattleParam.m_MasterDataCache.useSkillActive(recov_skill_req.m_SkillParamSkillID);
                        if (current_skill_active.cost1 == recov_skill.cost1 &&
                            current_skill_active.cost2 == recov_skill.cost2 &&
                            current_skill_active.cost3 == recov_skill.cost3 &&
                            current_skill_active.cost4 == recov_skill.cost4 &&
                            current_skill_active.cost5 == recov_skill.cost5
                            )
                        {
                            if (m_WorkFormedSkillsCount < m_WorkFormedSkills.Length)
                            {
                                BattleSkillReq resurr_skill_req = m_WorkFormedSkills[m_WorkFormedSkillsCount];
                                resurr_skill_req.m_SkillReqState      = BattleSkillReq.State.REQUESTED;
                                resurr_skill_req.m_SkillParamCharaNum = recov_skill_req.m_SkillParamCharaNum;
                                resurr_skill_req.m_SkillParamFieldNum = recov_skill_req.m_SkillParamFieldNum;
                                resurr_skill_req.m_SkillParamSkillID  = current_skill_active.fix_id;

                                m_WorkFormedSkillsCount++;
                            }
                            break;
                        }
                    }
                }
            }
        }
    }
Example #3
0
    private void _checkActiveSkillFormingConditionSub(int[,] field_cost_per_element, int[] skill_cost_per_element, bool[] handcard_cost_per_element, GlobalDefine.PartyCharaIndex chara_index, uint skill_id)
    {
        for (int field_idx = 0; field_idx < m_IsFulls.Length; field_idx++)
        {
            while (true)    //ひとつのフィールドで同じスキルが複数回成立する可能性があるのでループ
            {
                // スキル発動条件成立チェック
                bool is_success = true;
                for (int element_idx = (int)MasterDataDefineLabel.ElementType.NONE + 1; element_idx < (int)MasterDataDefineLabel.ElementType.MAX; element_idx++)
                {
                    if (field_cost_per_element[field_idx, element_idx] < skill_cost_per_element[element_idx])
                    {
                        is_success = false;
                        break;
                    }
                }

                if (is_success)
                {
                    // 発動条件成立したスキルを登録
                    if (m_WorkFormedSkillsCount < m_WorkFormedSkills.Length)
                    {
                        BattleSkillReq skill_req = m_WorkFormedSkills[m_WorkFormedSkillsCount];
                        skill_req.m_SkillReqState      = BattleSkillReq.State.REQUESTED;
                        skill_req.m_SkillParamCharaNum = chara_index;
                        skill_req.m_SkillParamFieldNum = field_idx;
                        skill_req.m_SkillParamSkillID  = skill_id;

                        m_WorkFormedSkillsCount++;
                    }

                    // 場のカード消費
                    for (int element_idx = (int)MasterDataDefineLabel.ElementType.NONE + 1; element_idx < (int)MasterDataDefineLabel.ElementType.MAX; element_idx++)
                    {
                        field_cost_per_element[field_idx, element_idx] -= skill_cost_per_element[element_idx];
                    }
                }
                else
                {
                    // リーチチェック
                    if (m_IsFulls[field_idx] == false)
                    {
                        bool is_reach_success = true;
                        bool is_use_handcard  = false;
                        for (int element_idx = (int)MasterDataDefineLabel.ElementType.NONE + 1; element_idx < (int)MasterDataDefineLabel.ElementType.MAX; element_idx++)
                        {
                            if (handcard_cost_per_element[element_idx])
                            {
                                if (field_cost_per_element[field_idx, element_idx] + 1 < skill_cost_per_element[element_idx])
                                {
                                    is_reach_success = false;
                                    break;
                                }

                                if (field_cost_per_element[field_idx, element_idx] + 1 == skill_cost_per_element[element_idx])
                                {
                                    if (is_use_handcard)
                                    {
                                        // 手札を2枚以上使わないと成立しない場合はリーチではない.
                                        is_reach_success = false;
                                        break;
                                    }
                                    is_use_handcard = true;
                                }
                            }
                            else
                            {
                                if (field_cost_per_element[field_idx, element_idx] < skill_cost_per_element[element_idx])
                                {
                                    is_reach_success = false;
                                    break;
                                }
                            }
                        }

                        if (is_reach_success)
                        {
                            MasterDataDefineLabel.ElementType reach_element = MasterDataDefineLabel.ElementType.NONE;
                            for (int element_idx = (int)MasterDataDefineLabel.ElementType.NONE + 1; element_idx < (int)MasterDataDefineLabel.ElementType.MAX; element_idx++)
                            {
                                if (field_cost_per_element[field_idx, element_idx] < skill_cost_per_element[element_idx])
                                {
                                    reach_element = (MasterDataDefineLabel.ElementType)element_idx;
                                    break;
                                }
                            }

                            //################								addSkillReachInfo(field_idx, reach_element);
                            m_WorkReachInfos[m_WorkReachInfosCount].m_FieldIndex = field_idx;
                            m_WorkReachInfos[m_WorkReachInfosCount].m_Element    = reach_element;
                            m_WorkReachInfosCount++;
                        }
                    }

                    break;
                }
            }
        }
    }
Example #4
0
    public int setSkillInfos(BattleSkillReq[] skill_infos, int skill_info_count)
    {
        int ret_val = -1;

        if (skill_infos == null || skill_info_count == 0)
        {
            for (int field_idx = 0; field_idx < m_FieldAreaCount; field_idx++)
            {
                for (int skill_idx = 0; skill_idx < m_SkillCountMax; skill_idx++)
                {
                    m_SkillIDs[field_idx, skill_idx]     = 0;
                    m_SkillCasters[field_idx, skill_idx] = GlobalDefine.PartyCharaIndex.ERROR;
                }
                m_SkillCounts[field_idx] = 0;
            }

            m_ComboSoundIndex = 0;
        }
        else
        {
            // スキルの増減を調べる
            int appear_skill_count = 0;

            {
                bool[,] is_cheked = new bool[m_FieldAreaCount, m_SkillCountMax];

                for (int req_idx = 0; req_idx < skill_info_count; req_idx++)
                {
                    BattleSkillReq battle_skill_req = skill_infos[req_idx];
                    if (battle_skill_req != null && battle_skill_req.m_SkillReqState != BattleSkillReq.State.NONE && battle_skill_req.m_SkillParamSkillID != 0)
                    {
                        uint skill_id  = battle_skill_req.m_SkillParamSkillID;
                        int  field_idx = battle_skill_req.m_SkillParamFieldNum;
                        GlobalDefine.PartyCharaIndex caster_idx = battle_skill_req.m_SkillParamCharaNum;

                        bool is_exsit = false;
                        for (int idx = 0; idx < m_SkillCounts[field_idx]; idx++)
                        {
                            if (is_cheked[field_idx, idx] == false &&
                                m_SkillIDs[field_idx, idx] == skill_id &&
                                m_SkillCasters[field_idx, idx] == caster_idx
                                )
                            {
                                is_cheked[field_idx, idx] = true;
                                is_exsit = true;
                                break;
                            }
                        }

                        if (is_exsit == false)
                        {
                            m_WorkAppearSkillInfos[appear_skill_count].m_SkillID    = skill_id;
                            m_WorkAppearSkillInfos[appear_skill_count].m_FieldIndex = field_idx;
                            m_WorkAppearSkillInfos[appear_skill_count].m_Caster     = caster_idx;
                            appear_skill_count++;
                        }
                    }
                }
            }

            for (int field_idx = 0; field_idx < m_FieldAreaCount; field_idx++)
            {
                m_SkillCounts[field_idx] = 0;
            }

            skill_info_count = Mathf.Min(skill_info_count, skill_infos.Length);
            for (int idx = 0; idx < skill_info_count; idx++)
            {
                BattleSkillReq battle_skill_req = skill_infos[idx];
                if (battle_skill_req != null && battle_skill_req.m_SkillReqState != BattleSkillReq.State.NONE && battle_skill_req.m_SkillParamSkillID != 0)
                {
                    int field_idx = battle_skill_req.m_SkillParamFieldNum;

                    int skill_idx = m_SkillCounts[field_idx];
                    if (skill_idx < m_SkillCountMax)
                    {
                        m_SkillIDs[field_idx, skill_idx]     = battle_skill_req.m_SkillParamSkillID;
                        m_SkillCasters[field_idx, skill_idx] = battle_skill_req.m_SkillParamCharaNum;
                        m_SkillCounts[field_idx]++;
                    }
                }
            }

            if (appear_skill_count > 0)
            {
                SEID seID;

                switch (m_ComboSoundIndex)
                {
                case 0: seID = SEID.SE_SKILL_COMBO_00; break;

                case 1: seID = SEID.SE_SKILL_COMBO_01; break;

                case 2: seID = SEID.SE_SKILL_COMBO_02; break;

                case 3: seID = SEID.SE_SKILL_COMBO_03; break;

                case 4: seID = SEID.SE_SKILL_COMBO_04; break;

                case 5: seID = SEID.SE_SKILL_COMBO_05; break;

                case 6: seID = SEID.SE_SKILL_COMBO_06; break;

                case 7: seID = SEID.SE_SKILL_COMBO_07; break;

                case 8: seID = SEID.SE_SKILL_COMBO_08; break;

                default: seID = SEID.SE_SKILL_COMBO_MORE_THAN_08; break;
                }
                SoundUtil.PlaySE(seID);

                m_ComboSoundIndex++;
            }

            if (appear_skill_count > 0)
            {
                clearNewSkillElementInfo();

                for (int idx = 0; idx < appear_skill_count; idx++)
                {
                    int field_idx = m_WorkAppearSkillInfos[idx].m_FieldIndex;
                    GlobalDefine.PartyCharaIndex caster_idx = m_WorkAppearSkillInfos[idx].m_Caster;
                    if (caster_idx == GlobalDefine.PartyCharaIndex.GENERAL)
                    {
                        caster_idx = BattleParam.m_PlayerParty.getGeneralPartyMember();
                    }

                    if (m_NewSkillElements[field_idx, (int)caster_idx] == MasterDataDefineLabel.ElementType.NONE)
                    {
                        MasterDataSkillActive master_data_skill_active = BattleParam.m_MasterDataCache.useSkillActive(m_WorkAppearSkillInfos[idx].m_SkillID);
                        if (master_data_skill_active != null)
                        {
                            m_NewSkillElements[field_idx, (int)caster_idx] = master_data_skill_active.skill_element;
                        }
                    }
                }

                ret_val = m_WorkAppearSkillInfos[0].m_FieldIndex;
            }
        }

        return(ret_val);
    }