diff --git a/webapp/controller/UserController.class.php b/webapp/controller/UserController.class.php index 9b2f2bc8..b01f6d82 100644 --- a/webapp/controller/UserController.class.php +++ b/webapp/controller/UserController.class.php @@ -680,6 +680,7 @@ class UserController extends BaseAuthedController { $mobaState = isset($userChartData["moba_state"]) ? $userChartData["moba_state"] : 0; if (!$userChartData || !$pvpState || !$mobaState){ $battlesDb = Battle::getBattleDataLimit(); + $number = count($battlesDb); $totalAlivePerPvp = 0; $totalKillsPerPvp = 0; $totalAssistPerPvp = 0; @@ -698,74 +699,89 @@ class UserController extends BaseAuthedController { $battleDataEx = json_decode($battle['battle_data'], true); $pvpDataInfoEx = isset($battleDataEx) ? getXVal($battleDataEx, 'data', array()) : array(); $gameTimes_pvp = getXVal($pvpDataInfoEx, 'total_battle_times', 0); - $aliveTimes_pvp = getXVal($pvpDataInfoEx, 'total_alive_time', 0); - $totalAlivePerPvp += $gameTimes_pvp > 0 ? intval($aliveTimes_pvp / $gameTimes_pvp) : 0; + $aliveTimes_pvp = getXVal($pvpDataInfoEx, 'total_alive_time', 0) / 1000; + $totalAlivePerPvp += $gameTimes_pvp > 0 ? ($aliveTimes_pvp / $gameTimes_pvp) : 0; $totalKills_pvp = getXVal($pvpDataInfoEx, 'total_kills_times', 0); - $totalKillsPerPvp += $gameTimes_pvp > 0 ? intval($totalKills_pvp / $gameTimes_pvp) : 0; + $totalKillsPerPvp += $gameTimes_pvp > 0 ? ($totalKills_pvp / $gameTimes_pvp) : 0; $totalAssist_pvp = getXVal($pvpDataInfoEx, 'total_assist_time', 0); - $totalAssistPerPvp += $gameTimes_pvp > 0 ? intval($totalAssist_pvp / $gameTimes_pvp) : 0; + $totalAssistPerPvp += $gameTimes_pvp > 0 ? ($totalAssist_pvp / $gameTimes_pvp) : 0; $totalDamage_pvp = getXVal($pvpDataInfoEx, 'total_damage_out', 0); - $totalDamagePerPvp += $gameTimes_pvp > 0 ? intval($totalDamage_pvp / $gameTimes_pvp) : 0; + $totalDamagePerPvp += $gameTimes_pvp > 0 ? ($totalDamage_pvp / $gameTimes_pvp) : 0; $totalRecoverHp_pvp = getXVal($pvpDataInfoEx, 'total_recover_hp', 0); - $totalRecoverHpPerPvp += $gameTimes_pvp > 0 ? intval($totalRecoverHp_pvp / $gameTimes_pvp) : 0; + $totalRecoverHpPerPvp += $gameTimes_pvp > 0 ? ($totalRecoverHp_pvp / $gameTimes_pvp) : 0; $totalGameTimesPvp += $gameTimes_pvp; $mobaDataInfoEx = isset($battleData) ? getXVal($battleDataEx, 'moba_data', array()) : array(); $gameTimes_moba = getXVal($mobaDataInfoEx, 'total_battle_times', 0); $totalLevel_moba = getXVal($mobaDataInfoEx, 'total_level', 0); - $totalLevelPerMoba += $gameTimes_moba > 0 ? intval($totalLevel_moba / $gameTimes_moba) : 0; + $totalLevelPerMoba += $gameTimes_moba > 0 ? ($totalLevel_moba / $gameTimes_moba) : 0; $totalKills_moba = getXVal($mobaDataInfoEx, 'total_kills_times', 0); - $totalKillsPerMoba += $gameTimes_moba > 0 ? intval($totalKills_moba / $gameTimes_moba) : 0; + $totalKillsPerMoba += $gameTimes_moba > 0 ? ($totalKills_moba / $gameTimes_moba) : 0; $totalAssist_moba = getXVal($mobaDataInfoEx, 'total_assist_time', 0); - $totalAssistPerMoba += $gameTimes_moba > 0 ? intval($totalAssist_moba / $gameTimes_moba) : 0; + $totalAssistPerMoba += $gameTimes_moba > 0 ? ($totalAssist_moba / $gameTimes_moba) : 0; $totalDamage_moba = getXVal($mobaDataInfoEx, 'total_damage_out', 0); - $totalDamagePerMoba += $gameTimes_moba > 0 ? intval($totalDamage_moba / $gameTimes_moba) : 0; + $totalDamagePerMoba += $gameTimes_moba > 0 ? ($totalDamage_moba / $gameTimes_moba) : 0; $totalRecoverHp_moba = getXVal($mobaDataInfoEx, 'total_recover_hp', 0); - $totalRecoverHpPerMoba += $gameTimes_moba > 0 ? intval($totalRecoverHp_moba / $gameTimes_moba) : 0; + $totalRecoverHpPerMoba += $gameTimes_moba > 0 ? ($totalRecoverHp_moba / $gameTimes_moba) : 0; $totalGameTimesMoba += $gameTimes_moba; } + $userChartData['pvp_server_data'] = array( - "pvp_alive_avg" => intval($totalAlivePerPvp / $totalBattleCount), - "pvp_kills_avg" => intval($totalKillsPerPvp / $totalBattleCount), - "pvp_assist_avg" => intval($totalAssistPerPvp / $totalBattleCount), - "pvp_damage_avg" => intval($totalDamagePerPvp / $totalBattleCount), - "pvp_recover_avg" => intval($totalRecoverHpPerPvp / $totalBattleCount), + "pvp_alive_avg" => round($totalAlivePerPvp / $number,2), + "pvp_kills_avg" => round($totalKillsPerPvp / $number,2), + "pvp_assist_avg" => round($totalAssistPerPvp / $number,2), + "pvp_damage_avg" => round($totalDamagePerPvp / $number,2), + "pvp_recover_avg" => round($totalRecoverHpPerPvp / $number,2), ); $userChartData["pvp_state"] = $totalGameTimesPvp > Battle::VALID_BATTLE_COUNT ? 1 :0; + if ($userChartData['pvp_server_data']['pvp_alive_avg'] == 0 || + $userChartData['pvp_server_data']['pvp_kills_avg'] == 0 || + $userChartData['pvp_server_data']['pvp_assist_avg'] == 0 || + $userChartData['pvp_server_data']['pvp_damage_avg'] == 0 || + $userChartData['pvp_server_data']['pvp_recover_avg'] == 0 ){ + $userChartData["pvp_state"] = 0; + } $userChartData['moba_server_data'] = array( - "moba_level_avg" => intval($totalLevelPerMoba / $totalBattleCount), - "moba_kills_avg" => intval($totalKillsPerMoba / $totalBattleCount), - "moba_assist_avg" => intval($totalAssistPerMoba / $totalBattleCount), - "moba_damage_avg" => intval($totalDamagePerMoba / $totalBattleCount), - "moba_recover_avg" => intval($totalRecoverHpPerMoba / $totalBattleCount), + "moba_level_avg" => round($totalLevelPerMoba / $number,2), + "moba_kills_avg" => round($totalKillsPerMoba / $number,2), + "moba_assist_avg" => round($totalAssistPerMoba / $number,2), + "moba_damage_avg" => round($totalDamagePerMoba / $number,2), + "moba_recover_avg" => round($totalRecoverHpPerMoba / $number,2), ); $userChartData["moba_state"] = $totalGameTimesMoba > Battle::VALID_BATTLE_COUNT ? 1 :0; + if ( $userChartData['moba_server_data']['moba_level_avg'] == 0 || + $userChartData['moba_server_data']['moba_kills_avg'] == 0 || + $userChartData['moba_server_data']['moba_assist_avg'] == 0 || + $userChartData['moba_server_data']['moba_damage_avg'] == 0 || + $userChartData['moba_server_data']['moba_recover_avg'] == 0 ){ + $userChartData["moba_state"] = 0; + } GlobalData::addUserChartData($userChartData); } $param = 0.95; $r = (2*$param-1) / (1-$param); if ($gameTimes >= Battle::VALID_GAME_TIMES){ // t=x/u r=(2s-1)/(1-s) - $t1 = intval($killsPer / $userChartData['pvp_server_data']['pvp_kills_avg']); + $t1 = $userChartData['pvp_server_data']['pvp_kills_avg']>0 ? intval($killsPer / $userChartData['pvp_server_data']['pvp_kills_avg']) :0; $pvpData['star_kills'] = round((pow($r,$t1) - 1) / (pow($r,$t1)+$r-2),2); - $t2 = intval($alivePer / $userChartData['pvp_server_data']['pvp_alive_avg']); + $t2 = $userChartData['pvp_server_data']['pvp_alive_avg']>0 ? intval($alivePer / $userChartData['pvp_server_data']['pvp_alive_avg']) :0; $pvpData['star_alive'] = round((pow($r,$t2) - 1) / (pow($r,$t2)+$r-2),2); - $t3 = intval($assistPer / $userChartData['pvp_server_data']['pvp_assist_avg']); + $t3 = $userChartData['pvp_server_data']['pvp_assist_avg']>0 ? intval($assistPer / $userChartData['pvp_server_data']['pvp_assist_avg']) :0; $pvpData['star_assist'] = round((pow($r,$t3) - 1) / (pow($r,$t3)+$r-2),2); - $t4 = intval($damagePer / $userChartData['pvp_server_data']['pvp_damage_avg']); + $t4 = $userChartData['pvp_server_data']['pvp_damage_avg']>0 ? intval($damagePer / $userChartData['pvp_server_data']['pvp_damage_avg']) :0; $pvpData['star_damage'] = round((pow($r,$t4) - 1) / (pow($r,$t4)+$r-2),2); - $t5 = intval($recoverHpPer / $userChartData['pvp_server_data']['pvp_recover_avg']); + $t5 = $userChartData['pvp_server_data']['pvp_recover_avg']>0 ? intval($recoverHpPer / $userChartData['pvp_server_data']['pvp_recover_avg']) :0; $pvpData['star_recover'] = round((pow($r,$t5) - 1) / (pow($r,$t5)+$r-2),2); } if ($gameTimesMoba >= Battle::VALID_GAME_TIMES){ - $t6 = intval($killsPerMoba / $userChartData['moba_server_data']['moba_kills_avg']); + $t6 = $userChartData['moba_server_data']['moba_kills_avg']>0 ? intval($killsPerMoba / $userChartData['moba_server_data']['moba_kills_avg']) :0; $mobaData['star_kills'] = round((pow($r,$t6) - 1) / (pow($r,$t6)+$r-2),2); - $t8 = intval($assistPerMoba / $userChartData['moba_server_data']['moba_assist_avg']); + $t8 = $userChartData['moba_server_data']['moba_assist_avg']>0 ? intval($assistPerMoba / $userChartData['moba_server_data']['moba_assist_avg']) :0; $mobaData['star_assist'] = round((pow($r,$t8) - 1) / (pow($r,$t8)+$r-2),2); - $t9 = intval($damagePerMoba / $userChartData['moba_server_data']['moba_damage_avg']); + $t9 = $userChartData['moba_server_data']['moba_damage_avg']>0 ? intval($damagePerMoba / $userChartData['moba_server_data']['moba_damage_avg']) :0; $mobaData['star_damage'] = round((pow($r,$t9) - 1) / (pow($r,$t9)+$r-2),2); - $t10 = intval($recoverHpPerMoba / $userChartData['moba_server_data']['moba_recover_avg']); + $t10 = $userChartData['moba_server_data']['moba_recover_avg']>0 ? intval($recoverHpPerMoba / $userChartData['moba_server_data']['moba_recover_avg']) :0; $mobaData['star_recover'] = round((pow($r,$t10) - 1) / (pow($r,$t10)+$r-2),2); $paramMeta = mt\Parameter::getListValue("radar_moba_level"); diff --git a/webapp/models/Battle.php b/webapp/models/Battle.php index 079268e0..22fd242b 100644 --- a/webapp/models/Battle.php +++ b/webapp/models/Battle.php @@ -8,7 +8,7 @@ use phpcommon\SqlHelper; class Battle extends BaseModel { const VALID_GAME_TIMES = 5; - const VALID_BATTLE_COUNT = 100; + const VALID_BATTLE_COUNT = 1000; public static function find($accountId){ $row = SqlHelper::ormSelectOne( diff --git a/webapp/mt/BattleReward.php b/webapp/mt/BattleReward.php new file mode 100644 index 00000000..58bf89f0 --- /dev/null +++ b/webapp/mt/BattleReward.php @@ -0,0 +1,69 @@ + 0){ + for ($i=1;$i<=count($meta);$i++){ + if ($exp >= $meta[count($meta)]['total_exp']){ + $exp = min($exp, $meta[count($meta)]['total_exp']); + $lv = $meta[count($meta)]['id']; + }else{ + if ($i= $meta[$i]['total_exp'] && + $exp < $meta[$i+1]['total_exp']) + { + $lv = $meta[$i]['id']; + } + } + + } + } + } + } + + public static function getCurrentSeason(){ + foreach (self::getMetaCommon() as $meta) { + if (myself()->_getNowTime() >= strtotime($meta['begin_time']) && + myself()->_getNowTime() <= strtotime($meta['end_time'])) { + return $meta; + } + } + return null; + } + + + protected static function getMetaList() + { + if (!self::$metaList) { + self::$metaList = getMetaTable('Battlepass@Battlepass.php'); + } + return self::$metaList; + } + + protected static function getMetaCommon() + { + if (!self::$metaCommon) { + self::$metaCommon = getMetaTable('BattlepassCommon@BattlepassCommon.php'); + } + return self::$metaCommon; + } + + + protected static $metaList; + protected static $metaCommon; + +} \ No newline at end of file diff --git a/webapp/mt/MapMode.php b/webapp/mt/MapMode.php new file mode 100644 index 00000000..e3b7e8ee --- /dev/null +++ b/webapp/mt/MapMode.php @@ -0,0 +1,34 @@ +