MaxWatson Posted March 25, 2023 Share Posted March 25, 2023 Всем привет! На форме есть тема в которой рассказывается о формуле WN8 Там используются вот такие переменные: expDmg - ожидаемый нанесенный урон, expSpot - ожидаемое количество обнаруженных, expFrag - ожидаемое количество уничтоженных, expDef - ожидаемое количество очков защиты, expWinRate - ожидаемое количество побед. И дана ссылка на таблицу ожидаемых значений. Все огонь. Если я правильно понимаю, то эта таблица работает для каждого танка. Вот пример из этой таблицы: {"IDNum":49,"expDef":0.905,"expFrag":0.887,"expSpot":1.573,"expDamage":1121.611,"expWinRate":51.585},{"IDNum":81,"expDef":1.303,"expFrag":1.662,"expSpot":0.927,"expDamage":222.675,"expWinRate":57.593}, .. Мой вопрос: Как посчитать ожидаемые значения для аккаунта в целом? Чтобы посчитать общий WN8 для аккаунта. @ Quote Link to comment Short link Share on other sites More sharing options...
yepev Posted March 25, 2023 Share Posted March 25, 2023 @MaxWatson ожидаемых значений для аккаунта не существует, на то они и ожидаемые)) Нужно по формуле WN8 подставить статистику аккаунта и актуальные ожидаемые значения, так и получится WN8 аккаунта. @ Quote Link to comment Short link Share on other sites More sharing options...
MaxWatson Posted March 25, 2023 Author Share Posted March 25, 2023 Только что, yepev сказал: @MaxWatson ожидаемых значений для аккаунта не существует, на то они и ожидаемые)) Нужно по формуле WN8 подставить статистику аккаунта и актуальные ожидаемые значения, так и получится WN8 аккаунта. Подставить статистику аккаунта - Это понятно как сделать и где их поулчить Актуальные ожидаемые значения - Вот это как сделать? И как получить? @ Quote Link to comment Short link Share on other sites More sharing options...
yepev Posted March 25, 2023 Share Posted March 25, 2023 (edited) 1 минуту назад, MaxWatson сказал: Актуальные ожидаемые значения - Вот это как сделать? И как получить? Так вот же они: https://modxvm.com/ru/таблица-ожидаемых-значений-wn8/ Edited March 25, 2023 by yepev @ Quote Link to comment Short link Share on other sites More sharing options...
MaxWatson Posted March 25, 2023 Author Share Posted March 25, 2023 (edited) 6 минут назад, yepev сказал: Так вот же они: https://modxvm.com/ru/таблица-ожидаемых-значений-wn8/ Окей, но это большая таблица с танками. Как мне подставить их в формулу для подсчета wn8 для всего аккаунта? Или мне нужно сперва посчитать WN8 ко всем танкам на аккаунте, потом это сложить и разделить на количество боев? $sumWM8 = 22 000; $batles = 15 000; $accountWN8 = $sumWM8 / $batles Вот так это получается? Edited March 25, 2023 by MaxWatson @ Quote Link to comment Short link Share on other sites More sharing options...
yepev Posted March 25, 2023 Share Posted March 25, 2023 3 часа назад, MaxWatson сказал: Как мне подставить их в формулу для подсчета wn8 для всего аккаунта? В этой теме всё расписано по шагам: 3 часа назад, MaxWatson сказал: На форме есть тема в которой рассказывается о формуле WN8 @ Quote Link to comment Short link Share on other sites More sharing options...
MaxWatson Posted March 26, 2023 Author Share Posted March 26, 2023 14 часов назад, yepev сказал: В этой теме всё расписано по шагам: Да это я знаю, можно было и не повторять. Все-таки WN8 для аккаунта в целом - это среднее значение. Которое является суммой всех wn8 по танкам, деленных на количество танков. @ Quote Link to comment Short link Share on other sites More sharing options...
yepev Posted March 26, 2023 Share Posted March 26, 2023 /** * Calculate account WN8. * * @return int * * @throws Exception */ public function calculate(): int { // If WN8 was not calculated yet if (is_null($this->wn8)) { // Get account_id $account_id = $this->account_id; // Get summary values $summary = $this->api->get('wot/account/info', [ 'fields' => 'statistics.all.battles,statistics.all.frags,statistics.all.damage_dealt,statistics.all.dropped_capture_points,statistics.all.spotted,statistics.all.wins', 'account_id' => $account_id ])->$account_id->statistics->all; // Get tanks values $tanks = $this->api->get('wot/account/tanks', ['fields' => 'tank_id,statistics.battles', 'account_id' => $account_id])->$account_id; // If this account has no tanks data skip calculation and return 0 if (empty($tanks)) { $this->wn8 = 0; return $this->wn8; } // WN8 expected calculation $expectedTankValues = $this->getExpectedTankValues(); $expDAMAGE = $expFRAGS = $expSPOT = $expDEF = $expWIN = 0; // Tanks missing in expected tank values but existing in account $missing = array(); // Calculated account expected values foreach ($tanks AS $tank) { // Tank exists in expected tank values if (array_key_exists($tank->tank_id, $expectedTankValues)) { // Expected values for current tank $expected = $expectedTankValues[$tank->tank_id]; // Battles on current tank $tank_battles = $tank->statistics->battles; // Calculate expected values for current tank $expDAMAGE += $expected->expDamage * $tank_battles; $expSPOT += $expected->expSpot * $tank_battles; $expFRAGS += $expected->expFrag * $tank_battles; $expDEF += $expected->expDef * $tank_battles; $expWIN += 0.01 * $expected->expWinRate * $tank_battles; // Tank missing in expected tank values so add it to the list } else { $missing [] = $tank->tank_id; } } // User want accurate calculation if ($this->accurate_calculation && !empty($missing)) { // Get missing tanks stats from API server $missing_tanks = $this->api->get('wot/tanks/stats', ['tank_id' => implode(',', $missing), 'fields' => 'tank_id,all.battles,all.frags,all.damage_dealt,all.dropped_capture_points,all.spotted,all.wins', 'account_id' => $account_id])->$account_id; // Reduce account summary data foreach ($missing_tanks AS $tank) { $summary->damage_dealt -= $tank->all->damage_dealt; $summary->spotted -= $tank->all->spotted; $summary->frags -= $tank->all->frags; $summary->dropped_capture_points -= $tank->all->dropped_capture_points; $summary->wins -= $tank->all->wins; } } // If there are missing tanks and searching for info is set to TRUE, get those values if (!empty($missing) && $this->search_missing_tanks) { $this->missing_tanks = $this->api->get('wot/encyclopedia/tankinfo', ['tank_id' => implode(',', $missing), 'fields' => 'localized_name']); } // Calculate WN8 $rDAMAGE = $summary->damage_dealt / $expDAMAGE; $rSPOT = $summary->spotted / $expSPOT; $rFRAG = $summary->frags / $expFRAGS; $rDEF = $summary->dropped_capture_points / $expDEF; $rWIN = $summary->wins / $expWIN; $rWINc = max(0, ($rWIN - 0.71) / (1 - 0.71)); $rDAMAGEc = max(0, ($rDAMAGE - 0.22) / (1 - 0.22)); $rFRAGc = max(0, min($rDAMAGEc + 0.2, ($rFRAG - 0.12) / (1 - 0.12))); $rSPOTc = max(0, min($rDAMAGEc + 0.1, ($rSPOT - 0.38) / (1 - 0.38))); $rDEFc = max(0, min($rDAMAGEc + 0.1, ($rDEF - 0.10) / (1 - 0.10))); $wn8 = 980 * $rDAMAGEc + 210 * $rDAMAGEc * $rFRAGc + 155 * $rFRAGc * $rSPOTc + 75 * $rDEFc * $rFRAGc + 145 * MIN(1.8, $rWINc); // Ok we have WN8, store it $this->wn8 = round($wn8, 2); } // Return our mighty number return $this->wn8; } Отсюда 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Kurzdor Posted March 30, 2023 Share Posted March 30, 2023 @yepev о, спасибо за наводочку. Себе забрал) @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted March 30, 2023 Share Posted March 30, 2023 3 часа назад, Kurzdor сказал: @yepev о, спасибо за наводочку. Себе забрал) тыц и тыц и тыц 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Kurzdor Posted March 30, 2023 Share Posted March 30, 2023 @StranikS_Scan само собой знаем) Всё ровно спасибо тоже) @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.