Читы для RF Online (Чит Портал Rising Force Online) Баги,Хаки,Чит Программы rfhuck.ru.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Читы для RF Online (Чит Портал Rising Force Online) Баги,Хаки,Чит Программы rfhuck.ru. » Баги/читы/патчи » как узнать про заточку? удачно или нет?


как узнать про заточку? удачно или нет?

Сообщений 1 страница 8 из 8

1

Хочу сразу разочаровать любителей рецептов типа "убить флема в новолуние, забрать лут и выкинуть перед Героем помахав рукой - 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. Далее вычисляется рейт вещи в зависимости от ее уровня

Код:

BYTE GetItemUpgedLv(DWORD dwLvBit)
{
     BYTE byLv = 0;
     for(int g = 0; g < MAX_ITEM_LV; g++)
     {
         BYTE byTemp = (BYTE)((dwLvBit>>(g*4))&0x0000000F);
         if(byTemp == __NO_TALIK)
             break;
         byLv++;
     }
     return byLv;
}

конструкция не совсем ясна, но насколько я понял, вычисляемый левел - количество УЖЕ вставленных таликов - каждый бит переменной 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};

4. Берется рандом.
Код:

DWORD dwR1 = rand();
DWORD dwRand = (dwR1<<16)+rand();

5. Первая проверка - талик вставится или сгорит

Код:

dwTotalRate <= dwRand%100000

сравнивается базовый рейт и рандом.

6. если первая проверка прошла(базовый рейт меньше либо равен рандому) идет проверка - сгорят ли уже вставленные талики

Код:

switch(byLv)
             {
             case 5:
                 if(125 > ::rand()%1000)
                     bTalikBreak = true;
                 break;
             case 6:
                 if(250 > ::rand()%1000)
                     bTalikBreak = true;
                 break;
             case 7:
                 if(500 > ::rand()%1000)
                     bTalikBreak = true;
                 break;
             }

это зависит от рейта вещи, т.е. уже вставленных таликов и.... заново вычиляемого рандома.

7. Если талики не сгорают, то вычисляется поломка вещи

Код:

bool bItemBreak = false;
switch(byLv)
{
     case 5:
         if(125 > ::rand()%1000)
         bItemBreak = true;
         break;
     case 6:
         if(250 > ::rand()%1000)
         bItemBreak = true;
         break;
     case 7:
         if(500 > ::rand()%1000)
         bItemBreak = true;
             break;

Опять же, зависит от рейта вещи и заново вычисляемого рандома.

После этого выполняются необходимые действия - уничтожение вещи, таликов или помещение в слот успешно модифицированного оружия.

Ниже расположена ссылка на исходный код программы, которая реализует описанный алгоритм. Можете сами попробовать ее скомпилировать и поэкспериментировать с различными комбинациями - вставленными таликами и камнями.

Да, насчет точки +7. В исходнике имеется следующая конструкция:

Код:

if(m_bCheat_100SuccMake)
dwTotalRate = 0xFFFFFFFF;

эта переменная при установке ее в значение true дает 100% шанс создания и модификации предмета.
переменная является параметром чара и устанавливается владельцем базы. возможно, GM имеют такой флаг и без проблем делают пухи +7. Обычным методом заточить на +7 очень маловероятно.

Сам неразобрался мозгов не хватило и времени!

0

2

СТЫБРИЛ!!!!!!!!!!!!

0

3

нет блин сам писал!!!

nonsense написал(а):

Сам неразобрался мозгов не хватило и времени!

может ктото разберётся! я с пакетами не бумбум!

Отредактировано nonsense (2008-08-19 01:53:04)

0

4

я что-то не понял, это ты просо описал Рэндом или ты написал как его поменять на 100% заточку?

0

5

прошу его забанить, так как спёр пост и сам не втыкает в то, что там написано
если хочешь посты набить иди лучше флуди, но не кради самые известные посты

0

6

[ex]nonsense
Ты скоро в бане окажешься!
1) Ставь копирайты
2)

nonsense написал(а):

Ниже расположена ссылка на исходный код программы, которая реализует описанный алгоритм. Можете сами попробовать ее скомпилировать и поэкспериментировать с различными комбинациями - вставленными таликами и камнями.

Чтото не заметил ссылки. Видимо скопировал на быструю руку... И что нам этот бред дает? Опписание как ГМовская функция %god hand приписывается в базе данных? Если уж ты сломаешь серверную часть игры, то будет намного легче себе пуху нарисовать +7, чем изменять параметры заточки. И поскольку это твоя третья плюха - 2 дня отпуска тебе. [/ex]

0

7

neonco
я то может и непонял но другие поймут , насчёт флуда сам хочешь тупые посты писать и так и зарабатывать их я ясно написал  :

nonsense написал(а):

Сам неразобрался мозгов не хватило и времени!

так что молчи

+1

8

Ссылка кода расположена!

0


Вы здесь » Читы для RF Online (Чит Портал Rising Force Online) Баги,Хаки,Чит Программы rfhuck.ru. » Баги/читы/патчи » как узнать про заточку? удачно или нет?