Архив (Баги, Читы, Эксплойты БЕЗ ХАЙДА) : Старые баги, читы для RFOnline. Так сказать - ставшие историей. Часть до сих пор работает.
25.02.2010, 19:25
#1
Алгоритм заточки талик(исходный код).
Случайно обнаружил исходники клиента, сервера и движка рф онлайн. Порывшись немножко, я нашёл часть кода, отвечающую за вставку и изъятие талик:
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
Переведи на русский плз :)
А вообще интересная тема) Может и будет чем то полезным)
25.02.2010, 19:38
#3
Дело в том, что большинство коментов коде написано на корейском по ходу, а корейский я, к сожалению, в школе не учил(
Нашёл код где берется инфа из item.edf:
RF Online Sourcecode\RF Client Side\RF_Client\datatable\citemdatamgr.cpp
Последний раз редактировалось Сruelbob; 25.02.2010 в 19:42 .
25.02.2010, 19:50
#4
Что это за язык хоть?
25.02.2010, 19:51
#5
ты чего? си++ конечно(смотри на расширения файлов)
25.02.2010, 20:13
#6
Лентяй!
OFFLINE
Регистрация: 28.03.2009
Сообщений: 333
Благодарностей:
919 всего
25.02.2010, 20:14
#7
Как я понял 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
Бессмертный чебурек
OFFLINE
Регистрация: 24.12.2008
Возраст: 37
Сообщений: 1,389
Благодарностей:
1,387 всего
реал написано на 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, 21:01
#9
Цитата:
Сообщение от
!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
Цитата:
Сообщение от
Сruelbob
ты думаешь m_byLevel это уровень шмотки?
а если я прав на счёт того, что m_byLevel это уровень персонажа, то чем больше уровень, тем больше i, тем меньше шанс заточки...
То бишь шанс заточки уменьшается обратно пропорционально лвлу?
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.