• Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: Dimitro  
Форум » TrinityCore » [TrinityCore] Help » Даётся exp за серых мобов (С++)
Даётся exp за серых мобов
Stormtrooper
Командир
Жизнь-то тут при чём?
Меня интересует выставление цвета левела
я выставил щас просто

Код
inline uint32 GetGrayLevel(uint32 pl_level)
{
    if (pl_level <= 5)
        return 0;
    else
        return pl_level - 9;
}


Думаю заработает
Вот только вопрос - оффлайк ли это
Я уже не помню - давно на оффе не был
Если помог, ставь плюсик в репу :)

Сообщение # 31 написано 17.02.2017 в 13:27
grasicco
Сержант
Я еще раз говорю, что возможно цвет жизнец = цвет левела
Сообщение # 32 написано 17.02.2017 в 13:29
Stormtrooper
Командир
ни разу
цвет жизней меняется в зависимости от агрессивности моба + от того кто его атаковал + от возможности лутать - что проистекает из того кто атаковал
Если помог, ставь плюсик в репу :)

Сообщение # 33 написано 17.02.2017 в 13:30
grasicco
Сержант

Код
inline uint32 GetGrayLevel(uint32 pl_level)
{
    if (pl_level <= 5)
        return 0;
    else
        return pl_level - 9;
}
в таком виде тебя ждет целая чепочка радостей, и еще, чуечка мне говорит, что вы ставление цвета лвл - за клиентом игры.
Сообщение # 34 отредактировано grasicco - Пятница, 17.02.2017, 13:34
Stormtrooper
Командир
Цитата grasicco ()
в таком виде тебя ждет целая чепочка радостей,

например?

Добавлено (17.02.2017, 13:40)
---------------------------------------------

Цитата grasicco ()
и еще, чуечка мне говорит, что вы ставление цвета лвл - за клиентом игры.

если это так то мой код как раз является верным и полностью соотносится с действиями клиента (по крайней мере БК клиента)
Если помог, ставь плюсик в репу :)

Сообщение # 35 написано 17.02.2017 в 13:40
grasicco
Сержант
Цитата Stormtrooper ()
например?

Код
const uint32 nBaseExp = content == CONTENT_1_60 ? 45 : 235;
    if (mob_level >= pl_level)
    {
        uint32 nLevelDiff = mob_level - pl_level;
        if (nLevelDiff > 4)
            nLevelDiff = 4;
        return ((pl_level * 5 + nBaseExp) * (20 + nLevelDiff) / 10 + 1) / 2;
с 6 по N лвл ты не зайдешь в блок, поскольку условие будет лож, а будешь получить опыт по другой формуле, если хочешь, могу помочь настроить тут все, но вечером
Конкретно в цифрах(скажем бьешь моба 6 лвл) - uint32 nLevelDiff = mob_level - pl_level;(6 - (-3)  = 9
if (nLevelDiff > 4) = false
(20 + nLevelDiff) = 20+9 = 29 , перебор
Сообщение # 36 отредактировано grasicco - Пятница, 17.02.2017, 13:46
Stormtrooper
Командир
Цитата grasicco ()
с 6 по N лвл ты не зайдешь в блок,

это откуда такой вывод?
с 6 и выше GrayLevel будет высчитваться по формуле playerlevel - 9 и это правильно с точки зрения клиента который делает мобов серыми как раз при -9
Если помог, ставь плюсик в репу :)

Сообщение # 37 написано 17.02.2017 в 13:45
grasicco
Сержант
Цитата Stormtrooper ()
это откуда такой вывод?с 6 и выше GrayLevel будет высчитваться по формуле playerlevel - 9 и это правильно с точки зрения клиента который делает мобов серыми как раз при -9
Конкретно в цифрах(скажем бьешь моба 6 лвл) - uint32 nLevelDiff = mob_level - pl_level;(6 - (-3)  = 9
if (nLevelDiff > 4) = false
(20 + nLevelDiff) = 20+9 = 29 , перебор
Ты сделаешь моба серым, но ты запорешь начисление опыта, а этот метод применяется во многих других, поэтому и пойдет цепочка
Сообщение # 38 отредактировано grasicco - Пятница, 17.02.2017, 13:48
Stormtrooper
Командир
ну тогда тут правильного решения тупо нет - по скольку изначальная формула тупо ошибочна
ошибка явно тут:


Код
inline uint32 GetGrayLevel(uint32 pl_level)
{
    if (pl_level <= 5)
        return 0;
    else if (pl_level <= 39)
        return pl_level - 5 - pl_level / 10;
    else if (pl_level <= 59)
        return pl_level - 1 - pl_level / 5;
    else
        return pl_level - 9;
}

Но как ни меняй - всё равно в каком-то уровне будет косяк
Если помог, ставь плюсик в репу :)

Сообщение # 39 отредактировано Stormtrooper - Пятница, 17.02.2017, 13:49
grasicco
Сержант
Все решаемо друг мой) и не сложно
Сообщение # 40 написано 17.02.2017 в 13:52
Stormtrooper
Командир
к сожалению нет
во-первых формула уже изначально предполагает ДРОБНЫЕ числа
ну например
pl_level - 5 - pl_level / 10;
возьми 58 левел
получаем левел моба 47,2 - это же ахинея
далее
клиент меняет разницу уровня от левела к левелу - тоесть если при 58 уровне он серыми делает мобв при -9 то при 38 левеле я проверил - там серыми они становятся при -8 - и кто его знает какая разница будет при других уровнях игрока
Если помог, ставь плюсик в репу :)

Сообщение # 41 написано 17.02.2017 в 13:55
grasicco
Сержант
А запилить отдельный метож близзард запрещает?
Сообщение # 42 написано 17.02.2017 в 13:56
Stormtrooper
Командир
оооо ну да зашибись лёгкое решение
гораздо проще отследить разницу на каждом уровне и тупо вписать жёсткую проверку без формул
Если помог, ставь плюсик в репу :)

Сообщение # 43 отредактировано Stormtrooper - Пятница, 17.02.2017, 13:59
grasicco
Сержант
5 минут времени, может меньше
Сообщение # 44 написано 17.02.2017 в 13:59
Stormtrooper
Командир
5 минут это если ЗНАТЬ что ты делаешь
я например не знаю что вообще надо написать и где чтобы оно стало правильным
даже приблизительно не представляю
Если помог, ставь плюсик в репу :)

Сообщение # 45 написано 17.02.2017 в 14:00
grasicco
Сержант
Я же тебе предлогал помощ, но ты промолчал
Сообщение # 46 написано 17.02.2017 в 14:01
p620
Маршал
Наблюдать то, как Вы работаете, верх блаженства.
Что-то пограничное между игрой в программистов и преждевременной деменцией.
Ни один из вас даже не знает, как работает целочисленное деление в C++ или беззнаковая арифметика, но каждый считает, что готов серьезно редактировать довольно сложную серверную архитектуру, причем именно по-своему, продолжая складывать болты на объяснение допущенных ошибок. Фантастика.
Сообщение # 47 написано 17.02.2017 в 14:01
grasicco
Сержант
Кресты не округляют целочисленное.11.6=11 Тс нужны не умники, а помощь
Сообщение # 48 отредактировано grasicco - Пятница, 17.02.2017, 14:04
p620
Маршал
Цитата grasicco ()
Кресты не округляют целочисленное.

Что-что еще раз? Не Вы ли чуть раньше там вычислили пример с десятичной дробью? И раз ТС нужна помощь, что же Вы ему не помогли, когда он несколькими сообщениями выше поделил одно целое на другое и получил float?
Сообщение # 49 написано 17.02.2017 в 14:05
Stormtrooper
Командир
хаять мы все умеем - только вот помощи конкретно от вас ноль
кидаетесь умными терминами про целочисленную арифметику а по сути - ноль
я тоже могу щас пойти на гугл и почитать и про float и про int и про что угодно - решить проблему криво работающего кода это не поможет равно как и ваши псевдо советы

Добавлено (17.02.2017, 14:07)
---------------------------------------------

Цитата p620 ()
поделил одно целое на другое и получил float?

ну получил я float и что??? этот код во-первых не мой, во вторых используется ВСЕМИ я подчёркиваю ВСЕМИ ядрами WOW (лично проверил от Мангоса до Скайфаера), в третьих проблема не в том что значение дробное а в том что ФОРМУЛА НЕ ВЕРНАЯ
Если помог, ставь плюсик в репу :)

Сообщение # 50 написано 17.02.2017 в 14:07
p620
Маршал
Цитата Stormtrooper ()
я тоже могу щас пойти на гугл и почитать и про float и про int и про что угодно - решить проблему криво работающего кода это не поможет равно как и ваши псевдо советы

Знаете что забавно? Скорее всего, если Вы соизволите это сделать, то решите проблему, с которой столкнулись =)
Сообщение # 51 написано 17.02.2017 в 14:07
Stormtrooper
Командир
Цитата p620 ()
Знаете что забавно? Скорее всего, если Вы соизволите это сделать, то решите проблему, с которой столкнулись =)

Серьёзно? и как знание того что float это значение с плавающей точкой низкой точности поможет мне решить проблему изначально не верной формулы? а умник?
Если помог, ставь плюсик в репу :)

Сообщение # 52 написано 17.02.2017 в 14:09
grasicco
Сержант
Ну знаете ли, господа хорошие, проблема конкретной темы - решена, все начисляется правильно, порекомендовал не менять метод тупо его обрезанием, и уж критики по поводу деления мне точно не нужна.
Сообщение # 53 написано 17.02.2017 в 14:09
Stormtrooper
Командир
Проблема не решена
Формула не верная и как её сделать верной я не представляю
Если помог, ставь плюсик в репу :)

Сообщение # 54 написано 17.02.2017 в 14:10
grasicco
Сержант
Убей 40 моба, и если за неда дадут эксп, вот тогда не решена
Сообщение # 55 написано 17.02.2017 в 14:11
Stormtrooper
Командир
Ошибка вот тут:

ВОТ ТУТ:

Код
inline uint32 GetGrayLevel(uint32 pl_level)
{
    if (pl_level <= 5)
        return 0;
    else if (pl_level <= 39)
        return pl_level - 5 - pl_level / 10; <------------- вот тут при разных уровнях игрока получаются не верные значения не совпадающие с клиентом
    else if (pl_level <= 59)
        return pl_level - 1 - pl_level / 5; <------------- и вот тут при разных уровнях игрока получаются не верные значения не совпадающие с клиентом
    else
        return pl_level - 9;
}


Какие формулы будут возвращать результаты совпадающие с клиентом я не представляю

Добавлено (17.02.2017, 14:13)
---------------------------------------------

Цитата grasicco ()
Убей 40 моба, и если за неда дадут эксп, вот тогда не решена

Я 58 левелом убиваю СЕРОГО моба 47 левела и эксп дают
это значит клиент считает что за моба давать не должно а формула возвращает что должно
значит формула ОШИБОЧНА
Если помог, ставь плюсик в репу :)

Сообщение # 56 написано 17.02.2017 в 14:13
p620
Маршал
Цитата Stormtrooper ()
Серьёзно? и как знание того что float это значение с плавающей точкой низкой точности поможет мне решить проблему изначально не верной формулы? а умник?

А тем, Stormtrooper, что его нельзя получить, если все операнды в выражении представлены целочисленными типами. На то оно и целочисленное деление. Вы получите целую часть, а остаток будет опущен. Т.е. деление, например, 10 на 9 даст единицу. Я это описал еще в первом же своем ответе. Указал Вам, почему происходит то, что происходит, и предложил Вам предоставить мне еще несколько сниппетов, чтобы продолжить диагностику проблемы рассинхронизации цвета уровня с награждаемым опытом. Уверен, мы бы ее решили, не уйди Вы в высокие материи вместе с Вашим собеседником.
Сообщение # 57 написано 17.02.2017 в 14:13
grasicco
Сержант
А их и никто не знает, кроме тех, кто рассчитывал ее.
Сообщение # 58 написано 17.02.2017 в 14:14
Stormtrooper
Командир
Цитата p620 ()
А тем, Stormtrooper, что его нельзя получить, если все операнды в выражении представлены целочисленными типами. На то оно и целочисленное деление. Вы получите целую часть, а остаток будет опущен. Т.е. деление, например, 10 на 9 даст единицу. Я это описал еще в первом же своем ответе. Указал Вам, почему происходит то, что происходит, и предложил Вам предоставить мне еще несколько сниппетов, чтобы продолжить диагностику проблемы рассинхронизации цвета уровня с награждаемым опытом. Уверен, мы бы ее решили, не уйди Вы в высокие материи вместе с Вашим собеседником.

Убейте меня кто-нибудь
Вы мои сообщения вообще читаете?
Я уже сто раз сказал - ФОРМУЛА НЕ ВЕРНА и даже написал в каких местах
ДА ПЛЕВАТЬ МНЕ ЧТО ЧИСЛО ОКРУГЛЯЕТСЯ - оно ИЗНАЧАЛЬНО НЕ ВЕРНОЕ
ПОЛНОСТЬЮ НЕ ВЕРНОЕ
Возьмите и посчитайте
на 58 левеле моб становится СЕРЫМ на 49 левеле! а эспа продолжает по формуле даваться до 47 левела!!!!! пофигу что значение в формуле 47,2 и пофигу что оно округлилось по 47 - оно должн быть 50 !!!!!!!!!!!!!!!!!!!!!!
Если помог, ставь плюсик в репу :)

Сообщение # 59 написано 17.02.2017 в 14:16
p620
Маршал
Цитата Stormtrooper ()
Убейте меня кто-нибудь
Вы мои сообщения вообще читаете?
Я уже сто раз сказал - ФОРМУЛА НЕ ВЕРНА и даже написал в каких местах
ДА ПЛЕВАТЬ МНЕ ЧТО ЧИСЛО ОКРУГЛЯЕТСЯ - оно ИЗНАЧАЛЬНО НЕ ВЕРНОЕ
ПОЛНОСТЬЮ НЕ ВЕРНОЕ
Возьмите и посчитайте
на 58 левеле моб становится СЕРЫМ на 49 левеле! а эспа продолжает по формуле даваться до 47 левела!!!!! пофигу что значение в формуле 47,2 и пофигу что оно округлилось по 47 - оно должн быть 50 !!!!!!!!!!!!!!!!!!!!!!

Уверяю Вас, я все внимательно прочитал. Пропустил только один момент: как Вы определили, что за вывод цвета отвечает клиент? Не спорю, что это разумное предположение, но оно и останется предположением, пока не будет выяснено, где вызывается функция, возвращающая цвет, и куда уходит ее возвращаемое значение. Еще час назад я просил Вас это проверить. Знаете, зачем? Чтобы убедиться, что оно затем не улетает внутри какого-нибудь пакета на клиент. И если бы мы в этом убедились - изменили бы без всяких проблем формулу так, чтобы та возвращала серый уровень в соответствии с ожиданиями клиента. И да, опять же, посчитал. И результаты предоставил. Неужели нужно ссылку на пост прикреплять?
Сообщение # 60 отредактировано p620 - Пятница, 17.02.2017, 14:24
Форум » TrinityCore » [TrinityCore] Help » Даётся exp за серых мобов (С++)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: