Hallo wie der ein oder andere sicherlich gelesen hat bin ich dabei das Rebirth System zu fixxen
dabei bin ich nun auf ein problem gestoßen und zwar müssten die einträge alle richtig sein jedoch wird die Aktuelle Rebirth Count nicht in der DB gespeichert
Hier mal meine Einträge:
Obj.h
Code:
#ifdef __REBIRTH
public:
int m_nRebirthCount;
#endif //__REBIRTH
Obj.cpp
Code:
#ifdef __REBIRTH
m_nRebirthCount = 0;
#endif //__REBIRTH
#ifdef __REBIRTH
m_nRebirthCount = pMover->m_nRebirthCount;
#endif //__REBIRTH
DBManagerSave.cpp
Code:
#ifdef __REBIRTH
MAX_SAVEPARAM += 1; // m_nRebirthCount
#endif //__REBIRTH
#ifdef __REBIRTH
bOK[++j] = qry->BindParameter( ++i, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER, 0, 0, &pMover->m_nRebirthCount, 0, 0 );
#endif //__REBIRTH
DBManager.h
Code:
#ifdef __REBIRTH
, int nRebirthCount = 0
#endif //__REBIRTH
DBManager.cpp
Code:
#ifdef __REBIRTH
, int nRebirthCount
#endif //__REBIRTH
#ifdef __REBIRTH
sprintf( strCharacter, ",@im_nRebirthCount=%d", nRebirthCount );
strncat( qryCharacter, strCharacter, sizeof(strCharacter) );
#endif //__REBIRTH
DBManagerfun.cpp
Code:
#ifdef __REBIRTH
mover.m_nRebirthCount = qry->GetInt("m_nRebirthCount");
#endif //__REBIRTH
ObjSerializeOpt.cpp
Code:
#ifdef __REBIRTH
ar << m_nRebirthCount;
#endif //__REBIRTH
#ifdef __REBIRTH
ar >> m_nRebirthCount;
#endif //__REBIRTH
Mover.h
Code:
#ifdef __REBIRTH
public:
int m_nRebirthCount;
#endif //__REBIRTH
Mover.cpp
Code:
#ifdef __REBIRTH
m_nRebirthCount = 0;
#endif //__REBIRTH
#ifdef __REBIRTH
void CMover::InitLevelRebirth( int nJob, LONG nLevel, BOOL bGamma ){
#ifdef __WORLDSERVER
MoverProp* pProp = GetProp();
if( pProp ){
if( m_nRebirthCount >= MAX_REBIRTH_COUNT)
return;
if( nJob > 0 && nJob < MAX_LEGEND_HERO )
AddChangeJob( nJob );
else
return;
int nPoint = 0;
if( m_nJob == JOB_MERCENARY )
nPoint += 40;
else if( m_nJob == JOB_ACROBAT )
nPoint += 50;
else if( m_nJob == JOB_ASSIST )
nPoint += 60;
else if( m_nJob == JOB_MAGICIAN )
nPoint += 90;
else if( m_nJob == JOB_KNIGHT || m_nJob == JOB_BLADE )
nPoint += 120;
else if( m_nJob == JOB_JESTER || m_nJob == JOB_RANGER )
nPoint += 150;
else if( m_nJob == JOB_RINGMASTER )
nPoint += 160;
else if( m_nJob == JOB_BILLPOSTER || m_nJob == JOB_PSYCHIKEEPER )
nPoint += 180;
else if( m_nJob == JOB_ELEMENTOR )
nPoint += 390;
else if( nJob == JOB_LORDTEMPLER_HERO || nJob == JOB_STORMBLADE_HERO )
nPoint += 120;
else if( nJob == JOB_WINDLURKER_HERO || nJob == JOB_CRACKSHOOTER_HERO )
nPoint += 150;
else if( nJob == JOB_FLORIST_HERO )
nPoint += 160;
else if( nJob == JOB_FORCEMASTER_HERO || nJob == JOB_MENTALIST_HERO )
nPoint += 180;
else if( nJob == JOB_ELEMENTORLORD_HERO )
nPoint += 390;
AddSkillPoint( nPoint );
SetJobLevel( nLevel, nJob );
m_nLevel = nLevel;
m_nDeathLevel = nLevel;
#if __VER >= 10 //__LEGEND
if(IsMaster()){
int dwTmpSkLevel = 1;
if( nLevel > 59 && nLevel < 72 )
dwTmpSkLevel = 1;
else if( nLevel > 71 && nLevel < 84 )
dwTmpSkLevel = 2;
else if( nLevel > 83 && nLevel < 96 )
dwTmpSkLevel = 3;
else if( nLevel > 95 && nLevel < 108 )
dwTmpSkLevel = 4;
else if( nLevel > 107 && nLevel < 120 )
dwTmpSkLevel = 5;
for( int i = 0; i < MAX_SKILL_JOB; i++ ){
LPSKILL lpSkill = &(m_aJobSkill[i]);
if( lpSkill && lpSkill->dwSkill != NULL_ID ){
ItemProp* pSkillProp = prj.GetSkillProp( lpSkill->dwSkill );
if( pSkillProp == NULL )
continue;
if( pSkillProp->dwItemKind1 != JTYPE_MASTER)
continue;
lpSkill->dwLevel = dwTmpSkLevel;
}
}
}
#endif //__LEGEND
if( bGamma )
m_nExp1 = 0;
( (CUser*)this )->AddSetChangeJob( nJob );
g_UserMng.AddNearSetChangeJob( this, nJob, &((CUser*)this)->m_aJobSkill[MAX_JOB_SKILL] );
#if __VER >= 11 // __SYS_PLAYER_DATA
g_dpDBClient.SendUpdatePlayerData( (CUser*)this );
#else // __SYS_PLAYER_DATA
g_DPCoreClient.SendPartyMemberJob( (CUser*)this );
g_DPCoreClient.SendFriendChangeJob( (CUser*)this );
if( m_idGuild != 0 )
g_DPCoreClient.SendGuildChangeJobLevel( (CUser*)this );
#endif // __SYS_PLAYER_DATA
SetHitPoint( GetMaxHitPoint() );
SetManaPoint( GetMaxManaPoint() );
SetFatiguePoint( GetMaxFatiguePoint() );
m_nRebirthCount++;
if( nJob >= 1 && nJob <= 4 )
m_nRemainGP = 28;
if( nJob >= MAX_PROFESSIONAL && nJob < MAX_MASTER ){
if ( m_nRemainGP > 0)
m_nRemainGP = 0;
if (m_nRebirthCount == 1)
m_nRemainGP = 200;
else if (m_nRebirthCount == 2)
m_nRemainGP = 300;
else if (m_nRebirthCount == 3)
m_nRemainGP = 400;
else if (m_nRebirthCount == 4)
m_nRemainGP = 500;
else if (m_nRebirthCount >= 5)
m_nRemainGP = 600;
}
m_nStr = m_nSta = m_nDex = m_nInt = 50;
g_UserMng.AddSetLevel( this, (WORD)m_nLevel );
( (CUser*)this )->AddSetGrowthLearningPoint( m_nRemainGP );
( (CUser*)this )->AddSetExperience( GetExp1(), (WORD)m_nLevel, m_nSkillPoint, m_nSkillLevel, m_nRebirthCount );
( (CUser*)this )->AddSetState( m_nStr, m_nSta, m_nDex, m_nInt, m_nRemainGP );
#if __VER >= 13 // __HONORABLE_TITLE
((CUser*)this)->CheckHonorStat();
((CUser*)this)->AddHonorListAck();
g_UserMng.AddHonorTitleChange( this, m_nHonor);
#endif // __HONORABLE_TITLE
}
#endif // __WORLDSERVER
}
#endif //__REBIRTH
FuncTextCmd.cpp
Code:
#ifdef __REBIRTH
BOOL TextCmd_rebirth( CScanner& scanner )
{
#ifdef __WORLDSERVER
CUser *pUser;
pUser = (CUser*)scanner.dwValue;
if(pUser->m_nRebirthCount > MAX_REBIRTH_COUNT)
pUser->AddText("Du hast bereits die maximale anzahl von Rebirthes erreicht!");
else if(pUser->m_nLevel >= MAX_3RD_LEGEND_LEVEL && pUser->IsLegendHero())
pUser->InitLevelRebirth( pUser->m_nJob-16,60, false);
else
pUser->AddText("Du hast nicht das passende Level für einen Rebirth!");
#endif
return TRUE;
}
#endif //__REBIRTH
VersionCommon.h
Code:
#define MAX_REBIRTH_COUNT 5 //Default = 0
#define __REBIRTH //Standart Rebirth System
DB:
Spallte ist erstellt und auf 0 gesetzt und vom Typ int
Character_STR
Code:
, @im_nRebirthCount
, m_nRebirthCount
, m_nRebirthCount = @im_nRebirthCount
, @im_nRebirthCount int = 0
Hoffe jemand hat eine Idee was ich vergessen habe...