Итак, благодаря одному из участников форума(а конкретнее Airsimer, за что ему большое спасибо) мне в руки попались исходники сервера RF Online Giga3. Скажу сразу - версия старая, серверов на ее основе сейчас практически нет и современная ситуация может сильно отличаться от описанной. Тем более, исходники неполные и в рабочий сервер скомпилировать их мне не удалось.
Но зато появилась возможность посмотреть и выяснить давно мучавший меня вопрос, а именно - алгоритм работы Великого Корейского Рандома, вокруг которого ходило много мифов и легенд и сломано немало копий в спорах. И хотя версия устарела, не думаю, что принцип работы Giga3 будет сильно отличаться от современных версий.
Хочу сразу разочаровать любителей рецептов типа "убить флема в новолуние, забрать лут и выкинуть перед Героем помахав рукой - 100% точка!" - таких алгоритмов в исходниках мне обнаружить не удалось. Конечно, тут могут возразить - "а как же точатся на +7, я сам видел!". Точатся. Но не обычным способом, а с помощью одного финта, о котором я расскажу ниже.
Итак, главный вывод, который я вынес из просмотра исходников - Корейский Рандом существует!
Именно так - основная функция, с помощью которой оценивается успешная заточка и последствия неуспешной - стандартная функция С rand(). Вообще по стандарту эта функция возвращает случайное число типа float в промежутке от 0 до 1. Единственное, что влияет на ее значение - так называемое начальное значение, задаваемое функцией srand(). Так вот, начальное значение этой функции является текущее время, вернее, его преобразованное числовое значение
Код:
srand((unsigned)time(NULL));
Но это знание ничего нам не дает, кроме того, что рецепты типа "точись в полночь!" не так уж и необоснованы.
Идем дальше.
За заточку предмета отвечает функция pc_UpgradeItem, находящаяся в файле player.cpp. Рассмотрим ее подробнее.
С самого начала идут многочисленные проверки на соответствие предметов, слотов, таликов, камней и прочей. Кстати, все несоотвествия логируются по умолчанию, так что пакетчики - будьте осторожны!
Дальше начинается самое интересное.
1. Устанавливается рейт на основании использованных камней. Рейты каждого камня берутся из базы и суммируются. Рейт без камня - 0,125.
Код:
for(int i = 0; i < upgrade_jewel_num; i++)
{
if(!pJewelFld[i])
fRate += 0.125;
else
fRate += pJewelFld[i];
}
2. Далее вычисляется рейт вещи в зависимости от ее уровня
конструкция не совсем ясна, но насколько я понял, вычисляемый левел - количество УЖЕ вставленных таликов - каждый бит переменной dwLvBit соответствует вставленному талику. Левелов всего 7, что вполне естественно. Похоже, от типа вставленных таликов зависимости нет.
Небольшое дополнение - рейт вещи вычисляется на основании вставленных таликов + учитывается вставляемый талик. Т.е. при расчете вещь считается уже проталеной, поэтому далее в конструкциях switch - case есть число 7.
3. Вычисляется общий, базовый рейт
Код:
dwTotalRate = s_dwItemUpgSucRate[byLv]*fRate/upgrade_jewel_num)*1000;
значение s_dwItemUpgSucRate зависит от левела и является массивом
s_dwItemUpgSucRate[] = {100, 75, 50, 25, 10, 5, 1};
Опять же, зависит от рейта вещи и заново вычисляемого рандома.
После этого выполняются необходимые действия - уничтожение вещи, таликов или помещение в слот успешно модифицированного оружия.
Ниже расположена ссылка на исходный код программы, которая реализует описанный алгоритм. Можете сами попробовать ее скомпилировать и поэкспериментировать с различными комбинациями - вставленными таликами и камнями.
Да, насчет точки +7. В исходнике имеется следующая конструкция:
эта переменная при установке ее в значение true дает 100% шанс создания и модификации предмета.
переменная является параметром чара и устанавливается владельцем базы. возможно, GM имеют такой флаг и без проблем делают пухи +7. Обычным методом заточить на +7 очень маловероятно.
Любые дополнения и исправления к статье приветствуются. Все вопросы в ПМ либо тут.
Модераторам - если я ошибся с разделом, просьба переместить сообщение в необходимый раздел.
Просьба не писать мне в ЛС по поводу того, что что-то не работает/выложить тему из подполья/рассказать о последних багах, читах, глюках. Не отвечу! Задавайте конкретные вопросы. Чем смогу - тем помогу. И в теме указывайте суть вопроса, а то смотреть вообще не буду - удалю и все.
__________________
Предоставляю услуги Гаранта/Проверяющего. Все подробности здесь.
Связь только через ПМ. В теме писать "Гарант/Проверка".
__________________
заставить рандом работать на себя можно... вы сами посмотрите: если при рандоме изменить пару значений, которые изменяют колво вставленных таликов и ту которую хочешь вставить то точить пухи можно легко... допустим все сгорело, но дамаг (скажем если пуху точить) останется... ибо параметры пухи уже изменены изменены
А можно тогда узнать примерный ход действий для замены кол-ва таликов.. Я просто не знаю.. Может реально есть. Пакет там какой-нить или еще чего. Заточкой я еще пока не занимался.
Просьба не писать мне в ЛС по поводу того, что что-то не работает/выложить тему из подполья/рассказать о последних багах, читах, глюках. Не отвечу! Задавайте конкретные вопросы. Чем смогу - тем помогу. И в теме указывайте суть вопроса, а то смотреть вообще не буду - удалю и все.
__________________
Предоставляю услуги Гаранта/Проверяющего. Все подробности здесь.
Связь только через ПМ. В теме писать "Гарант/Проверка".
__________________
ИМХО, данные по пухе берутся из базы сервера по твоему инвентарю. А в пакете на запрос по заточке скорее всего (хз, просто я их еще не разбирал) передается просто ид итемов... отсюда можно предположить, что ты не поменяешь стандартными способами (все, что угодно, кроме взлома БД РФ)...
Просьба не писать мне в ЛС по поводу того, что что-то не работает/выложить тему из подполья/рассказать о последних багах, читах, глюках. Не отвечу! Задавайте конкретные вопросы. Чем смогу - тем помогу. И в теме указывайте суть вопроса, а то смотреть вообще не буду - удалю и все.
__________________
Предоставляю услуги Гаранта/Проверяющего. Все подробности здесь.
Связь только через ПМ. В теме писать "Гарант/Проверка".
__________________
Там совсем другие причины. Вот цитата с какого форума:
Как выяснилось недавно скорость атаки оружия не проверяеться сервером в определенных пределах
тоесть до максимально возможного значения с учетом шмоток оружия бафав
из этого следует что можно легко поставить даже на ББ шмот атаку такую как будто ты в дисте
выше числом поставить можно но получим холостой удар
проверено на русофе реально убиваем одного и тогоже монстра раза в 1.5-2 быстрей обычного
Просьба не писать мне в ЛС по поводу того, что что-то не работает/выложить тему из подполья/рассказать о последних багах, читах, глюках. Не отвечу! Задавайте конкретные вопросы. Чем смогу - тем помогу. И в теме указывайте суть вопроса, а то смотреть вообще не буду - удалю и все.
__________________
Предоставляю услуги Гаранта/Проверяющего. Все подробности здесь.
Связь только через ПМ. В теме писать "Гарант/Проверка".
__________________
Просьба не писать мне в ЛС по поводу того, что что-то не работает/выложить тему из подполья/рассказать о последних багах, читах, глюках. Не отвечу! Задавайте конкретные вопросы. Чем смогу - тем помогу. И в теме указывайте суть вопроса, а то смотреть вообще не буду - удалю и все.
__________________
Предоставляю услуги Гаранта/Проверяющего. Все подробности здесь.
Связь только через ПМ. В теме писать "Гарант/Проверка".
__________________
Я по базе смотрел Не знаю если это число приходит клиенту.
Незаточенный предмет 7 слотов - 2147483647 , 6 - 1879048191 и т.д.
Когда точится, отнимается определенно число, в зависимости от талика и "уровню" заточки. Например первая заточка на игнор отнимет 15. Вторая на игнор 240. и т.д.
Просьба не писать мне в ЛС по поводу того, что что-то не работает/выложить тему из подполья/рассказать о последних багах, читах, глюках. Не отвечу! Задавайте конкретные вопросы. Чем смогу - тем помогу. И в теме указывайте суть вопроса, а то смотреть вообще не буду - удалю и все.
__________________
Предоставляю услуги Гаранта/Проверяющего. Все подробности здесь.
Связь только через ПМ. В теме писать "Гарант/Проверка".
__________________
Просьба не писать мне в ЛС по поводу того, что что-то не работает/выложить тему из подполья/рассказать о последних багах, читах, глюках. Не отвечу! Задавайте конкретные вопросы. Чем смогу - тем помогу. И в теме указывайте суть вопроса, а то смотреть вообще не буду - удалю и все.
__________________
Предоставляю услуги Гаранта/Проверяющего. Все подробности здесь.
Связь только через ПМ. В теме писать "Гарант/Проверка".
__________________
люди! идея! есть такая прога cheat engine вы ее тут уже выкладывали. так вот там есть опция Unrandomizer. т.е. он убирает рандом ведь да? так вот если эту весч заюзать? ммм?