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); }
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); }