Пример #1
0
    private bool createBattleRequest()
    {
        if (m_QuestBuild != null)
        {
            if (m_NextChainPartyIndex != 0)
            {
                //敵進化あり
                BattleParam.m_BattleRequest = new BattleReq();
                ServerDataDefine.PacketStructQuest2BuildBattle battle_param = InGameUtil.GetQuest2BuildBattle(m_QuestBuild, m_NextChainPartyIndex);

                BattleParam.m_BattleRequest.SetupBattleReq(0,
                                                           false,
                                                           m_NextChainTurnOffset,
                                                           false,
                                                           true,
                                                           m_QuestBuild,
                                                           battle_param);

                m_NextChainPartyIndex = BattleParam.m_BattleRequest.m_QuestBuildBattle.chain;
                m_NextChainTurnOffset = BattleParam.m_BattleRequest.m_QuestBuildBattle.chain_turn_offset;
            }
            else
            {
                m_QuestBuild = null;
                m_EnemyPartyIndex++;
            }
        }

        if (m_QuestBuild == null && m_EnemyPartyIndex < m_EnemyPartyIDs.Length)
        {
            TemplateList <ServerDataDefine.PacketStructQuest2BuildBattle> acQuestBuildBattle = new TemplateList <ServerDataDefine.PacketStructQuest2BuildBattle>();
            TemplateList <ServerDataDefine.PacketStructQuest2BuildDrop>   acQuestBuildDrop   = new TemplateList <ServerDataDefine.PacketStructQuest2BuildDrop>();
            acQuestBuildBattle.Alloc(64);

            MasterDataEnemyGroup enemy_group = BattleParam.m_MasterDataCache.useEnemyGroup((uint)m_EnemyPartyIDs[m_EnemyPartyIndex]);

            int battle_id = CreateQuestBuildBattle(0, ref acQuestBuildBattle, ref acQuestBuildDrop, enemy_group);

            // 敵情報.
            m_QuestBuild             = new ServerDataDefine.PacketStructQuest2Build();
            m_QuestBuild.list_drop   = acQuestBuildDrop.ToArray();
            m_QuestBuild.list_battle = acQuestBuildBattle.ToArray();

            // ヘイト情報付加
            for (int idx = 0; idx < m_QuestBuild.list_battle.Length; idx++)
            {
                ServerDataDefine.PacketStructQuest2BuildBattle battle_build = m_QuestBuild.list_battle[idx];
                if (battle_build != null)
                {
                    battle_build.hate = new ServerDataDefine.PacketStructQuest2Hate();
                    battle_build.hate.hate_initial       = 1000;
                    battle_build.hate.hate_given_damage1 = 1000;
                    battle_build.hate.hate_given_damage2 = 800;
                    battle_build.hate.hate_given_damage3 = 600;
                    battle_build.hate.hate_given_damage4 = 400;
                    battle_build.hate.hate_given_damage5 = 200;
                    battle_build.hate.hate_heal1         = 500;
                    battle_build.hate.hate_heal2         = 400;
                    battle_build.hate.hate_heal3         = 300;
                    battle_build.hate.hate_heal4         = 200;
                    battle_build.hate.hate_heal5         = 100;
                    battle_build.hate.hate_rate_fire     = 100;
                    battle_build.hate.hate_rate_water    = 100;
                    battle_build.hate.hate_rate_wind     = 100;
                    battle_build.hate.hate_rate_light    = 100;
                    battle_build.hate.hate_rate_dark     = 100;
                    battle_build.hate.hate_rate_naught   = 100;

                    battle_build.hate.hate_rate_race1  = 100;
                    battle_build.hate.hate_rate_race2  = 100;
                    battle_build.hate.hate_rate_race3  = 100;
                    battle_build.hate.hate_rate_race4  = 100;
                    battle_build.hate.hate_rate_race5  = 100;
                    battle_build.hate.hate_rate_race6  = 100;
                    battle_build.hate.hate_rate_race7  = 100;
                    battle_build.hate.hate_rate_race8  = 100;
                    battle_build.hate.hate_rate_race9  = 100;
                    battle_build.hate.hate_rate_race10 = 100;
                }
            }

            ServerDataDefine.PacketStructQuest2BuildBattle battle_param = InGameUtil.GetQuest2BuildBattle(m_QuestBuild, battle_id);

            BattleParam.m_BattleRequest = new BattleReq();
            BattleParam.m_BattleRequest.SetupBattleReq(0,
                                                       false,
                                                       0,
                                                       false,
                                                       false,
                                                       m_QuestBuild,
                                                       battle_param);

            m_NextChainPartyIndex = BattleParam.m_BattleRequest.m_QuestBuildBattle.chain;
            m_NextChainTurnOffset = BattleParam.m_BattleRequest.m_QuestBuildBattle.chain_turn_offset;
        }

        return(m_QuestBuild != null);
    }
Пример #2
0
    static private int CreateQuestBuildBattle(
        int nFloor
        , ref TemplateList <ServerDataDefine.PacketStructQuest2BuildBattle> rcBattleList
        , ref TemplateList <ServerDataDefine.PacketStructQuest2BuildDrop> rcDropList
        , MasterDataEnemyGroup cEnemyGroup)
    {
        if (cEnemyGroup == null)
        {
            return(0);
        }

        //----------------------------------------
        // グループに内包されるエネミー一覧を生成
        //----------------------------------------
        TemplateList <MasterDataParamEnemy> cEnemyList = new TemplateList <MasterDataParamEnemy>();
        MasterDataParamEnemy cEnemyData1 = BattleParam.m_MasterDataCache.useEnemyParam(cEnemyGroup.enemy_id_1);
        MasterDataParamEnemy cEnemyData2 = BattleParam.m_MasterDataCache.useEnemyParam(cEnemyGroup.enemy_id_2);
        MasterDataParamEnemy cEnemyData3 = BattleParam.m_MasterDataCache.useEnemyParam(cEnemyGroup.enemy_id_3);
        MasterDataParamEnemy cEnemyData4 = BattleParam.m_MasterDataCache.useEnemyParam(cEnemyGroup.enemy_id_4);
        MasterDataParamEnemy cEnemyData5 = BattleParam.m_MasterDataCache.useEnemyParam(cEnemyGroup.enemy_id_5);
        MasterDataParamEnemy cEnemyData6 = BattleParam.m_MasterDataCache.useEnemyParam(cEnemyGroup.enemy_id_6);
        MasterDataParamEnemy cEnemyData7 = BattleParam.m_MasterDataCache.useEnemyParam(cEnemyGroup.enemy_id_7);

        if (cEnemyData1 != null)
        {
            cEnemyList.Add(cEnemyData1);
        }
        if (cEnemyData2 != null)
        {
            cEnemyList.Add(cEnemyData2);
        }
        if (cEnemyData3 != null)
        {
            cEnemyList.Add(cEnemyData3);
        }
        if (cEnemyData4 != null)
        {
            cEnemyList.Add(cEnemyData4);
        }
        if (cEnemyData5 != null)
        {
            cEnemyList.Add(cEnemyData5);
        }
        if (cEnemyData6 != null)
        {
            cEnemyList.Add(cEnemyData6);
        }
        if (cEnemyData7 != null)
        {
            cEnemyList.Add(cEnemyData7);
        }


        //----------------------------------------
        // グループ内のエネミーリストから実際に出現するエネミーを並べる
        //----------------------------------------
        TemplateList <int> cEnemyFixAccessList = new TemplateList <int>();

        ServerDataDefine.PacketStructQuest2BuildBattle cBattle = new ServerDataDefine.PacketStructQuest2BuildBattle();
        if (cEnemyGroup.fix == MasterDataDefineLabel.BoolType.ENABLE)
        {
            //----------------------------------------
            // 完全固定で並べる場合
            //----------------------------------------
            cEnemyFixAccessList.Alloc(cEnemyList.m_BufferSize);
            for (int i = 0; i < cEnemyList.m_BufferSize; i++)
            {
                cEnemyFixAccessList.Add(i);
            }
        }
        else
        {
            //----------------------------------------
            // ランダムで並べる場合
            //----------------------------------------
            int nTotalEnemyCt = (int)RandManager.GetRand((uint)cEnemyGroup.num_min, (uint)cEnemyGroup.num_max);
            cEnemyFixAccessList.Alloc(nTotalEnemyCt);
            for (int i = 0; i < nTotalEnemyCt; i++)
            {
                int nEnemyListAccess = (int)RandManager.GetRand(0, (uint)cEnemyList.m_BufferSize);
                cEnemyFixAccessList.Add(nEnemyListAccess);
            }
        }

        //----------------------------------------
        // ドロップ判定
        //----------------------------------------
        cBattle.floor      = nFloor;
        cBattle.enemy_list = new uint[cEnemyFixAccessList.m_BufferSize];
        cBattle.drop_list  = new int[cEnemyFixAccessList.m_BufferSize];
        bool bDropFixed = false;

        for (int i = 0; i < cEnemyFixAccessList.m_BufferSize; i++)
        {
            //----------------------------------------
            // 基本情報入力
            //----------------------------------------
            cBattle.enemy_list[i] = cEnemyList[cEnemyFixAccessList[i]].fix_id;
            cBattle.drop_list[i]  = 0;

#if BUILD_TYPE_DEBUG
            Debug.Log("EnemyBattle - " + cEnemyList[cEnemyFixAccessList[i]].fix_id);
#endif
            //----------------------------------------
            // ドロップ判定
            //----------------------------------------
            if (bDropFixed == true)
            {
                continue;
            }
            MasterDataParamEnemy cEnemyFixParam = cEnemyList[cEnemyFixAccessList[i]];
            uint unDropRand = RandManager.GetRand(0, 10000);
            if (cEnemyFixParam.drop_unit_rate < unDropRand)
            {
                //----------------------------------------
                // ドロップ確定!
                // パラメータを保持しておく
                //----------------------------------------
                ServerDataDefine.PacketStructQuest2BuildDrop cDropData = new ServerDataDefine.PacketStructQuest2BuildDrop();
                cDropData.item_id = (int)cEnemyFixParam.drop_unit_id;
                if (cDropData.item_id == 0)
                {
                    cDropData.setKindType(ServerDataDefine.PacketStructQuest2BuildDrop.KindType.NONE);
                }
                else
                {
                    cDropData.setKindType(ServerDataDefine.PacketStructQuest2BuildDrop.KindType.UNIT);
                }
                cDropData.plus_hp   = 0;
                cDropData.plus_pow  = 0;
                cDropData.unique_id = (rcDropList.m_BufferSize + 1);
                cDropData.floor     = nFloor;

                rcDropList.Add(cDropData);

                cBattle.drop_list[i] = cDropData.unique_id;

                bDropFixed = true;
            }
        }

        //----------------------------------------
        // 戦闘連鎖があるなら連鎖も加味
        //----------------------------------------
        if (cEnemyGroup.chain_id > 0)
        {
            MasterDataEnemyGroup cChainEnemyGroup = BattleParam.m_MasterDataCache.useEnemyGroup(cEnemyGroup.chain_id);
            cBattle.chain = CreateQuestBuildBattle(nFloor, ref rcBattleList, ref rcDropList, cChainEnemyGroup);
        }

        //----------------------------------------
        // 情報を加算して管理番号を返す
        //----------------------------------------
        cBattle.unique_id = rcBattleList.m_BufferSize + 1;
        rcBattleList.Add(cBattle);


        return(cBattle.unique_id);
    }