Jump to content
Korean Random
BMDer

WN8 (рейтинг): формула и обсуждение

Recommended Posts

10 минут назад, SEREGA_SF сказал:

@demon_g_-1985, для начала - изучи в школе значения слов. Затем изучи, внимательно изучи (а главное пойми хотя бы примерно), как всё это работает (wn8), и уж потом приходи возмущаться))

Тя в школе видимо не очень то любили, а тут умничать начал.

Share this post


Link to post

Short link
Share on other sites
2 минуты назад, demon_g_-1985 сказал:

Тя в школе видимо не очень то любили, а тут умничать начал.

 

А тебя в школе однозначно все обожали, судя по интеллектуальности постов. Наверно за то, что ты был тупее всех, и потому любому ученику легко было выделиться на твоем фоне.

  • Upvote 4
  • Downvote 2

Share this post


Link to post

Short link
Share on other sites

@demon_g_-1985, для особо "одаренных" :veryhappy: перевожу твою ересь:

13 часов назад, demon_g_-1985 сказал:

Верните старые фиктивные значения!

Верните старые фальшивые значения!

Может так до пацаненка дойдет...чему ж вас там сейчас обучают, что такую ахинею умудряетесь нести(( то ли учителя нихрена не преподают, то ли молодежь так оскудела разумом((

 

  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Смешно. Был "зеленым" - подняли планку "позеленения" до 1550. Ладно - проглотил пилюлю- из кожи вон лез , чтобы добраться до заветной цели ( а при 49К боев это полная жопа) - добрался - и- по прежнему желтый ( причем на всех сторонних сайтах ВН8 на 2 пункта выше).

Share this post


Link to post

Short link
Share on other sites
13 минут назад, Andrey046 сказал:

Смешно. Был "зеленым" - подняли планку "позеленения" до 1550. Ладно - проглотил пилюлю- из кожи вон лез , чтобы добраться до заветной цели ( а при 49К боев это полная жопа) - добрался - и- по прежнему желтый ( причем на всех сторонних сайтах ВН8 на 2 пункта выше).

 

Интересно, сколько лет тебе потребуется, чтобы сообразить, что расчет идёт динамически и планки плавают в зависимости от статистики серверов и их ни кто вручную не задает.

Edited by StranikS_Scan
  • Upvote 2
  • Downvote 2

Share this post


Link to post

Short link
Share on other sites

Когда Бирюзовый вн8 сделаете 3100 ?? а фиолетовый 4500 ! .все для 100 человек в рандоме .авхвахвхахва,2408 вн8 когда будет зеленый меняю на рейтинг от вг в хвм .удачи вам в своем рейтинге у людей по 30-40-50 к боев у них по 2300-2400 вн8 .но считаете уровень вн8 все растет и растет из за твинков и нуботвинков ,как же справедливо кто стока боев отыграл ...у Креспикса видел мод пак у него было 4200 на твп 10 и была бирюза интересно скока на ру сервере людей делают дамаг больше него .для кого этот тогда рейтинг для избранных с патентом Кислого когда ему суют в тиму норм челиков против ботов ...молодцы ребята...

Edited by 1eshii
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Привет! Быстренько накидал программу для расчета WN8.

Результат моих расчетов 1594, а в игре 1704. Почему?

Через WG API получил статку по своим танкам.

скачал свежую таблицу WN8 https://static.modxvm.com/wn8-data-exp/json/wn8exp.json

Все мои танки есть в таблице WN8

Мой ник: TT_u_k_a_4_u

#include <vector>
#include <string>
#include <exception>
#include "elements.h"
#include "reader.h"

float GetExpDmg(const json::Object& obj, unsigned tankID)
{
    const json::Array& data = obj["data"];
    for (json::Array::const_iterator it = data.Begin(); it != data.End(); it++) {
        const json::Object& item = *it;
        const json::Number& idn = item["IDNum"];
        unsigned IDNum = idn.Value();
        if (IDNum == tankID) {
            const json::Number& ex = item["expDamage"];
            return ex.Value();
        }
    }
    return 0.0;
}

float GetExpFrag(const json::Object& obj, unsigned tankID)
{
    const json::Array& data = obj["data"];
    for (json::Array::const_iterator it = data.Begin(); it != data.End(); it++) {
        const json::Object& item = *it;
        const json::Number& idn = item["IDNum"];
        unsigned IDNum = idn.Value();
        if (IDNum == tankID) {
            const json::Number& ex = item["expFrag"];
            return ex.Value();
        }
    }
    return 0.0;
}

float GetExpSpot(const json::Object& obj, unsigned tankID)
{
    const json::Array& data = obj["data"];
    for (json::Array::const_iterator it = data.Begin(); it != data.End(); it++) {
        const json::Object& item = *it;
        const json::Number& idn = item["IDNum"];
        unsigned IDNum = idn.Value();
        if (IDNum == tankID) {
            const json::Number& ex = item["expSpot"];
            return ex.Value();
        }
    }
    return 0.0;
}

float GetExpDef(const json::Object& obj, unsigned tankID)
{
    const json::Array& data = obj["data"];
    for (json::Array::const_iterator it = data.Begin(); it != data.End(); it++) {
        const json::Object& item = *it;
        const json::Number& idn = item["IDNum"];
        unsigned IDNum = idn.Value();
        if (IDNum == tankID) {
            const json::Number& ex = item["expDef"];
            return ex.Value();
        }
    }
    return 0.0;
}

float GetExpWin(const json::Object& obj, unsigned tankID)
{
    const json::Array& data = obj["data"];
    for (json::Array::const_iterator it = data.Begin(); it != data.End(); it++) {
        const json::Object& item = *it;
        const json::Number& idn = item["IDNum"];
        unsigned IDNum = idn.Value();
        if (IDNum == tankID) {
            const json::Number& ex = item["expWinRate"];
            return ex.Value();
        }
    }
    return 0.0;
}


int main(int argc, char* argv[])
{
    std::string wn8tablestr;
    FILE* f = fopen("wn8table.json", "rb");
    if (f) {
        char b[1025];
        size_t sz;
        while ((sz=fread(&b, 1, 1024, f)) != 0) {
            b[sz] = 0;
            wn8tablestr += b;  

        }
        fclose(f);
        f = nullptr;
    }
    json::Object wb8table;
    std::istringstream stream(wn8tablestr);
    json::Reader::Read(wb8table, stream);

    std::string usertanksStr;
    f = fopen("user_tanks.json", "rb");
    if (f) {
        char b[1025];
        size_t sz;
        while ((sz = fread(&b, 1, 1024, f)) != 0) {
            b[sz] = 0;
            usertanksStr += b;

        }
        fclose(f);
    }
    json::Object userTanks;
    std::istringstream stream2(usertanksStr);
    json::Reader::Read(userTanks, stream2);

    const char* userID = "24889739";
    json::Object& data = userTanks["data"];
    json::Array& tanks = data[userID];
    //1594
    float sumDmg = 0;
    float sumExpDmg = 0;
    float sumFrags = 0;
    float sumExpFrags = 0;
    float sumSpot = 0;
    float sumExpSpot = 0;
    float sumDef = 0;
    float sumExpDef = 0;
    float sumWin = 0;
    float sumExpWin = 0;

    for (json::Array::const_iterator it = tanks.Begin(); it != tanks.End(); it++) {
        const json::Object& item = *it;
        
        const json::Number& tid = item["tank_id"];
        unsigned tankID = tid.Value();
        const json::Object& all = item["all"];
        
        const json::Number& b = all["battles"];
        float battles = b.Value();
       
        const json::Number& dd = all["damage_dealt"];
        float dmg = dd.Value();
        float expDmg = GetExpDmg(wb8table, tankID);
        if (expDmg == 0) {
            printf("skip %u\n", tankID);
            continue;
        }
        const json::Number& f = all["frags"];
        float frags = f.Value();
        float expFrags = GetExpFrag(wb8table, tankID);

        const json::Number& s = all["spotted"];
        float spotted = s.Value();
        float expSpot = GetExpSpot(wb8table, tankID);

        const json::Number& dcp = all["dropped_capture_points"];
        float def = dcp.Value();
        float expDef = GetExpDef(wb8table, tankID);

        const json::Number& w = all["wins"];
        float win = w.Value();
        float expWin = GetExpWin(wb8table, tankID) / 100.0;

        sumDmg += dmg;
        sumExpDmg += battles * expDmg;

        sumFrags += frags;
        sumExpFrags += battles * expFrags;

        sumSpot += spotted;
        sumExpSpot += battles * expSpot;

        sumDef += def;
        sumExpDef += battles * expDef;

        sumWin += win;
        sumExpWin += battles * expWin;
    }
    float rDamage = sumDmg / sumExpDmg;
    float rFrag = sumFrags / sumExpFrags;
    float rSpot = sumSpot / sumExpSpot;
    float rDef = sumDef / sumExpDef;
    float rWin = sumWin / sumExpWin;

    float rWinc = std::max(0.0, (rWin - 0.71) / (1.0 - 0.071));
    float rDamagec = std::max(0.0, (rDamage - 0.22) / (1.0 - 0.22));
    float rFragc = std::max(0.0, std::min(rDamagec + 0.2, (rFrag - 0.12) / (1.0 - 0.12)));
    float rSpotc = std::max(0.0, std::min(rDamagec + 0.1, (rSpot - 0.38) / (1.0 - 0.38)));
    float rDefc  = std::max(0.0, std::min(rDamagec + 0.1, (rDef - 0.10) / (1.0 - 0.10)));

    float wn8 = 980.0 * rDamagec +
        210.0 * rDamagec * rFragc +
        155.0 * rFragc * rSpotc +
        75.0 * rDefc * rFragc +
        145.0 * std::min(1.8f, rWinc);

    printf("wn8: %.2f", wn8);
    getchar();
    return 0;
}

 

user_tanks.json

wn8table.json

Edited by jopatanki

Share this post


Link to post

Short link
Share on other sites
2 часа назад, jopatanki сказал:

Результат моих расчетов 1594, а в игре 1704. Почему?

Винрейт случаем нигде лишний раз на 100 не делишь? Там как раз в твоем случае около 100 баллов оно дает.

Share this post


Link to post

Short link
Share on other sites
11 часов назад, jopatanki сказал:

float expWin = GetExpWin(wb8table, tankID) / 100.0;

Серыч, наверно, про это.

Share this post


Link to post

Short link
Share on other sites

@sirmax ну короче нашёл косяк

float rWinc = std::max(0.0, (rWin - 0.71) / (1.0 - 0.071)) заменил на

 

float rWinc = std::max(0.0, (rWin - 0.71) / (1.0 - 0.71));

Теперь результат 1632. Все равно не сходится

@sirmax если убрать деление на 100 то получается 1474.

Share this post


Link to post

Short link
Share on other sites

У меня тут вопрос возник по какому принципу дали вн8 новым танкам ?? на 430у за 3400 дамага .1.2 фраг за бой дали всего 2200 вн8 . слов просто нет .а чего 1200 вн8 не дали ..

6565544334.JPG

Share this post


Link to post

Short link
Share on other sites
1 час назад, 1eshii сказал:

за бой дали всего

 

О чем это вы? WN8 не считается "за бой". Что правда не мешает каламбурить, но это проблемы тех кто пытается так что-то считать.

  • Downvote 1

Share this post


Link to post

Short link
Share on other sites
16 часов назад, StranikS_Scan сказал:

WN8 не считается "за бой".

 

19 часов назад, 1eshii сказал:

1.2 фраг за бой

Он о среднем показателе фрагов за бой, читай внимательнее

  • Downvote 1

Share this post


Link to post

Short link
Share on other sites
Только что, sech_92 сказал:

 

Он о среднем показателе фрагов за бой, читай внимательнее

 

В смысле? Он пишет  "на 430у за 3400 дамага .1.2 фраг за бой дали всего 2200 вн8", что именно внимательного тут нужно прочитать?

Share this post


Link to post

Short link
Share on other sites
5 минут назад, StranikS_Scan сказал:

что именно внимательного тут нужно прочитать?

Картинку прочитать, на которой видно, что это средние показатели за (аж целых!) пять боёв

Share this post


Link to post

Short link
Share on other sites
Только что, sech_92 сказал:

Картинку прочитать, на которой видно, что это средние показатели за (аж целых!) пять боёв

 

В смысле что 2200 это 2232?

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...