Логотип игрового форума RF-Cheats.ru    
Новости онлайн игр Обход античитов Чёрный рынок Реклама и привилегии Разработка читов ИИ и читы

Регистрация Бан-лист Сообщество ПОПУЛЯРНОЕ
Вернуться   RF-Cheats.ru - форум читеров и ботоводов > > > >

Архив (Баги, Читы, Эксплойты БЕЗ ХАЙДА)

: Старые баги, читы для RFOnline. Так сказать - ставшие историей. Часть до сих пор работает.
Читы и обход фроста для RF Online без хайдаБоты и читы для Perfect World бесплатно без хайдаМоды и читы для World of Tanks (WoT) бесплатно без хайдаМоды и читы для Armored Warfare бесплатно без хайдаБоты и читы для DOTA 2 бесплатно без хайдаБоты и читы для Black Desert Online бесплатно без хайдаЧиты на ArcheAge бесплатно без хайдаЧиты для Warface бесплатно без хайдаВзлом ВКонтакте и ОдноклассниковСписок разделов со всеми играмиЧиты для онлайн игр




Ответ
 
Сделать тему важной Опции темы
Старый 25.02.2010, 19:25   #1
Сruelbob
Гость
Аватар для Сruelbob
Сообщений: n/a
Благодарностей:
0 всего

Алгоритм заточки талик(исходный код).


Случайно обнаружил исходники клиента, сервера и движка рф онлайн. Порывшись немножко, я нашёл часть кода, отвечающую за вставку и изъятие талик:
PHP код:
void
CNormalItem
::InsertTalik( BYTE pi_byTalikDTIndex )
{
    if( 
m_byLevel < MAX_ITEM_LEVEL )
    {
        
InsertTalik( static_cast< INGOT_DATA * >( _GetItemDataMgr()->GetData( IEPT_INGOT, pi_byTalikDTIndex + 20 ) ) );
    }
}

void
CNormalItem
::InsertTalik( INGOT_DATA * pi_pTalikData )
{
    if( 
pi_pTalikData )
    {
        if( 
m_byLevel < MAX_ITEM_LEVEL )
        {
            ++
m_byLevel;
            
m_listTalik***91;m_byLevel-1***93; = pi_pTalikData;
            
ApplyUpgradeEffect( m_listTalik***91;m_byLevel-1***93;, TRUE );
        }
    }
}

void
CNormalItem
::InsertTalikFromServerFlag( DWORD pi_dwServerFlag )
{
    if( !
IsUpgradable() )
        return;

    if( 
pi_dwServerFlag == ID_INVALID )
    {
        
m_byMaxSocketNum = 0;
        return;
    }

    
BYTE pi_byTalikDTIndex, i;

    
m_byMaxSocketNum = pi_dwServerFlag >> 28;
    for( 
i = 0; i < m_byMaxSocketNum; ++i )
    {
        
pi_byTalikDTIndex = ( pi_dwServerFlag >> ( i * 4 ) ) & 0x0000000F;
        if( 
pi_byTalikDTIndex != 0xF )
            
InsertTalik( pi_byTalikDTIndex );
    }
}

void
CNormalItem
::ExtractTalik( void )
{
    if( 
m_byLevel > 0 )
    {
        
ApplyUpgradeEffect( m_listTalik***91;m_byLevel-1***93;, FALSE );
        
m_listTalik***91;m_byLevel-1***93; = NULL;
        --
m_byLevel;
    }
}

void
CNormalItem
::ExtractAllTalik( void )
{
    if( 
m_byLevel > 0 )
    {
        for( 
int i = m_byLevel - 1; i >= 0; --i )
        {
            
ApplyUpgradeEffect( m_listTalik***91;i***93;, FALSE );
            
m_listTalik***91;i***93; = NULL;
        }

        
m_byLevel = 0;
    }
}

INGOT_DATA *
CNormalItem::GetTalik( BYTE pi_bySocketNo )
{
    if( ( 
pi_bySocketNo >= m_byLevel ) || ( pi_bySocketNo >= MAX_ITEM_LEVEL ) )
        return 
NULL;

    return 
m_listTalik***91;pi_bySocketNo***93;;
}

DWORD
CNormalItem
::IsEnableInsertJewel( DWORD pi_dwJewelDTIndex )
{
    
BYTE byItemKind = GetItemKind();
    
BYTE byWeaponCategoryID = GetWeaponCategoryID();

    if( !( ( 
byItemKind > IEPT_FACE ) && ( byItemKind <= IEPT_SHIELD ) ) )
        return 
0;

    
INGOT_DATA * pJewelData = static_cast< INGOT_DATA * >( _GetItemDataMgr()->GetData( IEPT_INGOT, pi_dwJewelDTIndex ) );
    if( !
pJewelData )
        return 
0;

    
// ѕЖАМЕЫАМ №«±вАП °жїм
    
if( byItemKind == IEPT_WEAPON )
    {
        
// ±ЩБў №«±в
        
if( ( byWeaponCategoryID == IWCT_KNIFE ) || ( byWeaponCategoryID == IWCT_SWORD ) ||
            ( 
byWeaponCategoryID == IWCT_AXE ) || ( byWeaponCategoryID == IWCT_MACE ) ||
            ( 
byWeaponCategoryID == IWCT_SPEAR ) || ( byWeaponCategoryID == IWCT_STAFF ) )
        {
            if( 
pJewelData->GetUpgradeInsertLimitNum( IEPT_WEAPON - 1 ) <= 0 )
                return 
1;
        }
        
// їш°Её® №«±в
        
else if( ( byWeaponCategoryID == IWCT_BOW ) || ( byWeaponCategoryID == IWCT_FIREARM ) ||
                 ( 
byWeaponCategoryID == IWCT_LUANCHER ) || ( byWeaponCategoryID == IWCT_THROW ) )
        {
            if( 
pJewelData->GetUpgradeInsertLimitNum( 7 ) <= 0 )
                return 
1;
        }

        
// №«±вїЎґВ ±¤ИЦ, Б¤И*, јцИЈ, ЅЕідАЗ Е»ёЇ БЯ їАБч ЗПіЄёёА» »зїлЗТ јц АЦґЩ. ( DT Index 27 ~ 30 )
        
if( ( pi_dwJewelDTIndex >= 27 ) && ( pi_dwJewelDTIndex <= 30 ) )
        {
            for( 
int i = 0; i < m_byLevel; ++i )
            {
                if( !
m_listTalik***91;i***93; )
                    continue;
                if( ( 
m_listTalik***91;i***93;->GetDTIndex() >= 27 ) && ( m_listTalik***91;i***93;->GetDTIndex() <= 30 ) )
                    return 
2;
            }
        }
    }
    
// ѕЖАМЕЫАМ ѕЖёУАП °жїм
    
else
    {
        if( 
pJewelData->GetUpgradeInsertLimitNum( byItemKind - 1 ) <= 0 )
            return 
1;
    }

    return 
3;
}

//============================================================================//
//                                  Boundary                                  //
//============================================================================//

void
CNormalItem
::ApplyUpgradeEffect( INGOT_DATA * pi_pTalik, BOOL pi_bIsAdd )
{
    
BYTE byTalikNum = GetSameTalikNum( pi_pTalik );
    if( 
byTalikNum <= 0 )
        return;

    if( !
pi_bIsAdd )
        --
byTalikNum;

    
BYTE    byEffectType    = pi_pTalik->byUpgradeEffectType;
    
float    fEffectConstant    = pi_pTalik->fUpgradeEffectConstant***91; byTalikNum - 1 ***93;;

    
// Е»ёЇАЗ АМЖеЖ® Аыїл
    
switch( byEffectType )
    {
        case 
0 :
            break;

        case 
1 :            // ёрµз°ш°Э·ВUP 1
            
if( byTalikNum <= 0 )    m_clUpgradeEffect.m_fStrikingPower = 0;
            else                    
m_clUpgradeEffect.m_fStrikingPower = fEffectConstant;
            break;

        case 
2 :            // °Ў°ЭЗПґВ_µҐ№МБцАЗ_µҐАМЕНЗКµе_ЖЫјѕЖ®°ЄёёЕ*А»_HP·О_Инјц 2
        
case 3 :            // °Ў°ЭЗПґВ_µҐ№МБцАЗ_µҐАМЕНЗКµе_ЖЫјѕЖ®°ЄёёЕ*А»_FP·О_Инјц 3
            
break;

        case 
4 :            // °Ў°ЭґзЗПґВ_ґл»уА»_stunЅГЕґ(µҐАМЕНЗКµе_ЖЫјѕЖ®°ЄёёЕ*АЗ_И®·ь·О_1ГКµїѕИ) 4 => ѕЖАМЕЫАМ ѕЖґС ДіёЇЕНїЎ АыїлµЗ№З·О +1Ає ЗПБц ѕКґВґЩ.
            
if( byTalikNum <= 0 )    m_clUpgradeEffect.m_fStunProb = 0;
            else                    
m_clUpgradeEffect.m_fStunProb = fEffectConstant;
            break;

        case 
5 :            // »зБ¤°Её®UP 5
            
if( byTalikNum <= 0 )    m_clUpgradeEffect.m_byAttackRange = 0;
            else                    
m_clUpgradeEffect.m_byAttackRange = fEffectConstant;
            break;

        case 
6 :            // №жѕо·ВUP 6
            
if( byTalikNum <= 0 )    m_clUpgradeEffect.m_fDefencePower = 1;
            else                    
m_clUpgradeEffect.m_fDefencePower = 1 + fEffectConstant;
            break;

        case 
7 :            // µҐАМЕНЗКµе_ЖЫјѕЖ®°ЄёёЕ*АЗ_БцјУЗЗЗШєёБ¶ЅГ°Ј_ґЬГа 7
            
break;

        case 
8 :            // ДіёЇЕНАЗ_єТі»јє°ЄїЎ_µҐАМЕНЗКµе_°ЄёёЕ*АЗ_єТі»јєБх°Ў 8
        
case 9 :            // ДіёЇЕНАЗ_єТі»јє°ЄїЎ_µҐАМЕНЗКµе_°ЄёёЕ*АЗ_№°і»јєБх°Ў 9
        
case 10 :            // ДіёЇЕНАЗ_єТі»јє°ЄїЎ_µҐАМЕНЗКµе_°ЄёёЕ*АЗ_Илі»јєБх°Ў 9
        
case 11 :            // ДіёЇЕНАЗ_єТі»јє°ЄїЎ_µҐАМЕНЗКµе_°ЄёёЕ*АЗ_№Щ¶чі»јєБх°Ў 9
            // №«±вАП °жїмґВ јУјє єЇИ*, №жѕо±ёАП °жїмґВ і»јє Бх°ЎАУ.
            
if( IsEqualItemKind( IEPT_WEAPON ) )
            {
                if( 
byTalikNum <= 0 )    m_clUpgradeEffect.m_byAttackAttribute = 0xFF;
                else                    
m_clUpgradeEffect.m_byAttackAttribute = byEffectType-8;
            }
            else
            {                
                if( 
byTalikNum <= 0 )    m_clUpgradeEffect.m_byResist***91;byEffectType-8***93; = 0;
                else                    
m_clUpgradeEffect.m_byResist***91;byEffectType-8***93; = fEffectConstant;
            }
            break;

        case 
12 :            // µҐАМЕНЗКµе_ЖЫјѕЖ®°ЄёёЕ*АЗ_HPИёє№·®_Бх°Ў 12
            
break;

        case 
13 :            // µҐАМЕНЗКµе_ЖЫјѕЖ®°ЄёёЕ*АЗ_ИёЗЗАІ_Бх°Ў 13 => ѕЖАМЕЫАМ ѕЖґС ДіёЇЕНїЎ АыїлµЗ№З·О +1Ає ЗПБц ѕКґВґЩ.
            
if( byTalikNum <= 0 )    m_clUpgradeEffect.m_fAvoidProb = 0;
            else                    
m_clUpgradeEffect.m_fAvoidProb = fEffectConstant;
            break;

        case 
14 :            // °ЎАе_ГЦ±ЩїЎ_»рАФЗС_Е»ёЇ_іЇ·Б№цёІ 14
            
break;
    }
}

// µїАПЗС Е»ёЇАМ АЦґВБцё¦ ГјЕ©ЗШј*, °іјцё¦ °ЎБ®їВґЩ.
BYTE
CNormalItem
::GetSameTalikNum( INGOT_DATA * pi_pTalik )
{
    if( !
pi_pTalik )
        return 
0;
    if( !
IsUpgradable() )
        return 
0;
    
    
BYTE byTalikNum = 0;
    for( 
int i = 0; i < m_byLevel; ++i )
    {
        if( !
m_listTalik***91;i***93; )
            continue;

        if( 
m_listTalik***91;i***93;->dwDTIndex == pi_pTalik->dwDTIndex )
            ++
byTalikNum;
    }

    return 
byTalikNum;
} 
Предлагаю разобраться в нем!
Вот исходники:
http://narod.ru/disk/14922351000/RF_...tefan.rar.html
Данный код находится здесь:
RF Online Sourcecode\RF Client Side\RF_Client\item\citemdata.cpp

Добавлено через 6 минут
Нашёл что-то про "m_byLevel" в "RF Online Sourcecode\RF Client Side\RF_Client\datafile.cpp"

Последний раз редактировалось Сruelbob; 25.02.2010 в 19:32. Причина: Добавлено сообщение
 
Ответить с цитированием
Сказали спасибо:
Рома2012 (30.04.2012), matan (26.02.2010), MeGo3aDroT (25.02.2010), Недоступно (25.02.2010), Недоступно (25.02.2010)


Старый 25.02.2010, 19:35   #2
Nikolaz
Гость
Аватар для Nikolaz
Сообщений: n/a
Благодарностей:
0 всего

Переведи на русский плз :)
А вообще интересная тема) Может и будет чем то полезным)
 
Ответить с цитированием
Сказали спасибо:
Рома2012 (30.04.2012)
Старый 25.02.2010, 19:38   #3
Сruelbob
Гость
Аватар для Сruelbob
Сообщений: n/a
Благодарностей:
0 всего

Дело в том, что большинство коментов коде написано на корейском по ходу, а корейский я, к сожалению, в школе не учил(
Нашёл код где берется инфа из item.edf:
RF Online Sourcecode\RF Client Side\RF_Client\datatable\citemdatamgr.cpp

Последний раз редактировалось Сruelbob; 25.02.2010 в 19:42.
 
Ответить с цитированием
Сказали спасибо:
Недоступно (25.02.2010)
Старый 25.02.2010, 19:50   #4
Nikolaz
Гость
Аватар для Nikolaz
Сообщений: n/a
Благодарностей:
0 всего

Что это за язык хоть?
 
Ответить с цитированием
Старый 25.02.2010, 19:51   #5
Сruelbob
Гость
Аватар для Сruelbob
Сообщений: n/a
Благодарностей:
0 всего

ты чего? си++ конечно(смотри на расширения файлов)
 
Ответить с цитированием
Сказали спасибо:
Недоступно (25.02.2010)
Старый 25.02.2010, 20:13   #6
Vishtar
Лентяй!
Аватар для Vishtar
OFFLINE
Регистрация: 28.03.2009
Сообщений: 333
Благодарностей:
919 всего
Мнения: + 10050
Репутация: 2534

Цитата:
на корейском по ходу
Символы!
 
Ответить с цитированием
Старый 25.02.2010, 20:14   #7
Сruelbob
Гость
Аватар для Сruelbob
Сообщений: n/a
Благодарностей:
0 всего

Как я понял m_byLevel это уровень персонажа, так как эта переменная идёт в перечислении параметров персонажа(могу ошибаться) здесь \RF Online Sourcecode\RF Client Side\RF_Client\network\protocol\characterdb.h
Так же в этом файле прописаны такие параметры как максимальный уровень персонажа, анимуса, сколько персонажей может быть созджано на одного юзера и много других вещей, но не забываем что это исходный код клиента... щас буду с сервером разбераться, ведь всё таки там происходит заточка...

Добавлено через 7 минут
Цитата:
Сообщение от <Витёк> Посмотреть сообщение
Символы!
что ты хотел сказать этой фразой?

На стороне сервера сразу попался на глаза файл:
RF Online Sourcecode\RF Server Side\RF_Server\table\itemupgradetable.h

Последний раз редактировалось Сruelbob; 25.02.2010 в 20:22. Причина: Добавлено сообщение
 
Ответить с цитированием
Старый 25.02.2010, 20:47   #8
!BleaK!
Бессмертный чебурек
Аватар для !BleaK!
OFFLINE
Регистрация: 24.12.2008
Возраст: 37
Сообщений: 1,389
Благодарностей:
1,387 всего
Мнения: + 19141
Репутация: 4709

реал написано на c++. Сейчас поковыряюсь в алгоритме. Скажу пару слов от себя.
PHP код:
if( !pi_pTalik )
        return 
0;
    if( !
IsUpgradable() )
        return 
0;
    
    
BYTE byTalikNum = 0;
    for( 
int i = 0; i < m_byLevel; ++i )
    {
        if( !
m_listTalik***91;i***93; )
            continue;

        if( 
m_listTalik***91;i***93;->dwDTIndex == pi_pTalik->dwDTIndex )
            ++
byTalikNum;
    }

    return 
byTalikNum; 
я там понял из этого куска. переменная ' i ' влияет на шанс заточки, типо чем выше он, тем больше шанс сломать шмот, '++i', я так понял чем выше лвл шмота, тем больше шанс его сломать.

Жду комментарий :3:

Последний раз редактировалось !BleaK!; 25.02.2010 в 20:58.
 
Ответить с цитированием
Сказали спасибо:
Недоступно (25.02.2010)
Старый 25.02.2010, 21:01   #9
Сruelbob
Гость
Аватар для Сruelbob
Сообщений: n/a
Благодарностей:
0 всего

Цитата:
Сообщение от !BleaK! Посмотреть сообщение
реал написано на c++. Сейчас поковыряюсь в алгоритме. Скажу пару слов от себя.
PHP код:
if( !pi_pTalik )
        return 
0;
    if( !
IsUpgradable() )
        return 
0;
    
    
BYTE byTalikNum = 0;
    for( 
int i = 0; i < m_byLevel; ++i )
    {
        if( !
m_listTalik***91;i***93; )
            continue;

        if( 
m_listTalik***91;i***93;->dwDTIndex == pi_pTalik->dwDTIndex )
            ++
byTalikNum;
    }

    return 
byTalikNum; 
я там понял из этого куска. переменная ' i ' влияет на шанс заточки, типо чем выше он, тем больше шанс сломать шмот, '++i', я так понял чем выше лвл шмота, тем больше шанс его сломать.

Жду комментарий :3:
ты думаешь m_byLevel это уровень шмотки?
а если я прав на счёт того, что m_byLevel это уровень персонажа, то чем больше уровень, тем больше i, тем меньше шанс заточки...
 
Ответить с цитированием
Сказали спасибо:
Недоступно (21.07.2011), Недоступно (25.02.2010)
Старый 25.02.2010, 21:17   #10
HaosMaster
Гость
Аватар для HaosMaster
Сообщений: n/a
Благодарностей:
0 всего

Цитата:
Сообщение от Сruelbob Посмотреть сообщение
ты думаешь m_byLevel это уровень шмотки?
а если я прав на счёт того, что m_byLevel это уровень персонажа, то чем больше уровень, тем больше i, тем меньше шанс заточки...
То бишь шанс заточки уменьшается обратно пропорционально лвлу?
 
Ответить с цитированием
Ответ



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Мир танков | Проект "Армата" | ArcheAge | Black Desert | РФ Онлайн | Айон | Майнкрафт | Браузерные игры
Элдер скролс | Р2 Онлайн | Реквием Онлайн | ПУБГ | Роял Квест | ГТА Санадреас | Контра | Дота 2
Мир кораблей | Лост Арк | Arma2 DayZ mod | The War Z | Карос: Начало | Tera Online
Читы для всех Онлайн-игр