Модератор форума: Dimitro |
Форум TrinityCore [TrinityCore] Help Даётся exp за серых мобов (С++) |
Даётся exp за серых мобов |
Жизнь-то тут при чём?
Меня интересует выставление цвета левела я выставил щас просто Код inline uint32 GetGrayLevel(uint32 pl_level) { if (pl_level <= 5) return 0; else return pl_level - 9; } Думаю заработает Вот только вопрос - оффлайк ли это Я уже не помню - давно на оффе не был
Если помог, ставь плюсик в репу :)
Сообщение # 31 написано 17.02.2017 в 13:27
|
Код inline uint32 GetGrayLevel(uint32 pl_level) { if (pl_level <= 5) return 0; else return pl_level - 9; } |
например? Добавлено (17.02.2017, 13:40) если это так то мой код как раз является верным и полностью соотносится с действиями клиента (по крайней мере БК клиента)
Если помог, ставь плюсик в репу :)
Сообщение # 35 написано 17.02.2017 в 13:40
|
Код 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 лвл) - uint32 nLevelDiff = mob_level - pl_level;(6 - (-3) = 9 if (nLevelDiff > 4) = false (20 + nLevelDiff) = 20+9 = 29 , перебор |
Сообщение # 37 написано 17.02.2017 в 13:45
|
это откуда такой вывод?с 6 и выше GrayLevel будет высчитваться по формуле playerlevel - 9 и это правильно с точки зрения клиента который делает мобов серыми как раз при -9 if (nLevelDiff > 4) = false (20 + nLevelDiff) = 20+9 = 29 , перебор Ты сделаешь моба серым, но ты запорешь начисление опыта, а этот метод применяется во многих других, поэтому и пойдет цепочка |
ну тогда тут правильного решения тупо нет - по скольку изначальная формула тупо ошибочна
ошибка явно тут: Код 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; } Но как ни меняй - всё равно в каком-то уровне будет косяк
Если помог, ставь плюсик в репу :)
|
к сожалению нет
во-первых формула уже изначально предполагает ДРОБНЫЕ числа ну например pl_level - 5 - pl_level / 10; возьми 58 левел получаем левел моба 47,2 - это же ахинея далее клиент меняет разницу уровня от левела к левелу - тоесть если при 58 уровне он серыми делает мобв при -9 то при 38 левеле я проверил - там серыми они становятся при -8 - и кто его знает какая разница будет при других уровнях игрока
Если помог, ставь плюсик в репу :)
Сообщение # 41 написано 17.02.2017 в 13:55
|
Наблюдать то, как Вы работаете, верх блаженства.
Что-то пограничное между игрой в программистов и преждевременной деменцией. Ни один из вас даже не знает, как работает целочисленное деление в C++ или беззнаковая арифметика, но каждый считает, что готов серьезно редактировать довольно сложную серверную архитектуру, причем именно по-своему, продолжая складывать болты на объяснение допущенных ошибок. Фантастика.
Сообщение # 47 написано 17.02.2017 в 14:01
|
Сообщение # 49 написано 17.02.2017 в 14:05
|
хаять мы все умеем - только вот помощи конкретно от вас ноль
кидаетесь умными терминами про целочисленную арифметику а по сути - ноль я тоже могу щас пойти на гугл и почитать и про float и про int и про что угодно - решить проблему криво работающего кода это не поможет равно как и ваши псевдо советы Добавлено (17.02.2017, 14:07) ну получил я float и что??? этот код во-первых не мой, во вторых используется ВСЕМИ я подчёркиваю ВСЕМИ ядрами WOW (лично проверил от Мангоса до Скайфаера), в третьих проблема не в том что значение дробное а в том что ФОРМУЛА НЕ ВЕРНАЯ
Если помог, ставь плюсик в репу :)
Сообщение # 50 написано 17.02.2017 в 14:07
|
Сообщение # 51 написано 17.02.2017 в 14:07
|
Знаете что забавно? Скорее всего, если Вы соизволите это сделать, то решите проблему, с которой столкнулись =) Серьёзно? и как знание того что float это значение с плавающей точкой низкой точности поможет мне решить проблему изначально не верной формулы? а умник?
Если помог, ставь плюсик в репу :)
Сообщение # 52 написано 17.02.2017 в 14:09
|
Ошибка вот тут:
ВОТ ТУТ: Код 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) Я 58 левелом убиваю СЕРОГО моба 47 левела и эксп дают это значит клиент считает что за моба давать не должно а формула возвращает что должно значит формула ОШИБОЧНА
Если помог, ставь плюсик в репу :)
Сообщение # 56 написано 17.02.2017 в 14:13
|
Серьёзно? и как знание того что float это значение с плавающей точкой низкой точности поможет мне решить проблему изначально не верной формулы? а умник? А тем, Stormtrooper, что его нельзя получить, если все операнды в выражении представлены целочисленными типами. На то оно и целочисленное деление. Вы получите целую часть, а остаток будет опущен. Т.е. деление, например, 10 на 9 даст единицу. Я это описал еще в первом же своем ответе. Указал Вам, почему происходит то, что происходит, и предложил Вам предоставить мне еще несколько сниппетов, чтобы продолжить диагностику проблемы рассинхронизации цвета уровня с награждаемым опытом. Уверен, мы бы ее решили, не уйди Вы в высокие материи вместе с Вашим собеседником.
Сообщение # 57 написано 17.02.2017 в 14:13
|
А тем, Stormtrooper, что его нельзя получить, если все операнды в выражении представлены целочисленными типами. На то оно и целочисленное деление. Вы получите целую часть, а остаток будет опущен. Т.е. деление, например, 10 на 9 даст единицу. Я это описал еще в первом же своем ответе. Указал Вам, почему происходит то, что происходит, и предложил Вам предоставить мне еще несколько сниппетов, чтобы продолжить диагностику проблемы рассинхронизации цвета уровня с награждаемым опытом. Уверен, мы бы ее решили, не уйди Вы в высокие материи вместе с Вашим собеседником. Убейте меня кто-нибудь Вы мои сообщения вообще читаете? Я уже сто раз сказал - ФОРМУЛА НЕ ВЕРНА и даже написал в каких местах ДА ПЛЕВАТЬ МНЕ ЧТО ЧИСЛО ОКРУГЛЯЕТСЯ - оно ИЗНАЧАЛЬНО НЕ ВЕРНОЕ ПОЛНОСТЬЮ НЕ ВЕРНОЕ Возьмите и посчитайте на 58 левеле моб становится СЕРЫМ на 49 левеле! а эспа продолжает по формуле даваться до 47 левела!!!!! пофигу что значение в формуле 47,2 и пофигу что оно округлилось по 47 - оно должн быть 50 !!!!!!!!!!!!!!!!!!!!!!
Если помог, ставь плюсик в репу :)
Сообщение # 59 написано 17.02.2017 в 14:16
|
Убейте меня кто-нибудь Вы мои сообщения вообще читаете? Я уже сто раз сказал - ФОРМУЛА НЕ ВЕРНА и даже написал в каких местах ДА ПЛЕВАТЬ МНЕ ЧТО ЧИСЛО ОКРУГЛЯЕТСЯ - оно ИЗНАЧАЛЬНО НЕ ВЕРНОЕ ПОЛНОСТЬЮ НЕ ВЕРНОЕ Возьмите и посчитайте на 58 левеле моб становится СЕРЫМ на 49 левеле! а эспа продолжает по формуле даваться до 47 левела!!!!! пофигу что значение в формуле 47,2 и пофигу что оно округлилось по 47 - оно должн быть 50 !!!!!!!!!!!!!!!!!!!!!! Уверяю Вас, я все внимательно прочитал. Пропустил только один момент: как Вы определили, что за вывод цвета отвечает клиент? Не спорю, что это разумное предположение, но оно и останется предположением, пока не будет выяснено, где вызывается функция, возвращающая цвет, и куда уходит ее возвращаемое значение. Еще час назад я просил Вас это проверить. Знаете, зачем? Чтобы убедиться, что оно затем не улетает внутри какого-нибудь пакета на клиент. И если бы мы в этом убедились - изменили бы без всяких проблем формулу так, чтобы та возвращала серый уровень в соответствии с ожиданиями клиента. И да, опять же, посчитал. И результаты предоставил. Неужели нужно ссылку на пост прикреплять? |
| |||