TA的每日心情 | 开心 2011-11-24 11:37 |
---|
签到天数: 1 天 [LV.1]初来乍到 鲜花( 3) 鸡蛋( 0)
|
沙发
楼主 |
发表于 2015-9-22 09:56:38
|
只看该作者
进入_Common\Mover.h中
搜索
void RemoveDebufBuffs();
在其上添加,也可以在 BOOL Equip();上添加
///////////////////////////////
void RemoveDebufBuffs(BOOL SW);
///////////////////////////////
进入_Common\moverbuff.cpp中
搜索
void CMover::RemoveDebufBuffs()
在其上添加
///////////////////////////
void CMover::RemoveDebufBuffs(BOOL SW)/////删除所有状态
{
if( SW = TRUE )
{
RemoveAllBuff();
}else
{
m_buffs.RemoveBuffs( RBF_DEBUF );
}
}
///////////////////////////
好了,在后台程序中已经完了所需函数的创造
我们开始实现如何转生
///////////////////////////////
进入WORLDDIALOG\NpcScript.h中 注意中WORLDDIALOG
搜索void AddGPPoint( int nAddGPPoint );
在其上添加
///////////////////////
int GetGPPoint();
////////////////////
进入WORLDDIALOG\FunctionsInfo.h中
搜索typedef int (WINAPI *PFAddGPPoint)( NPCDIALOG_INFO* pInfo , int nAddGPPoint );
在其上添加
////////////////////////////////////////
typedef int (WINAPI *PFGetGPPoint)( NPCDIALOG_INFO* pInfo );
/////////////////////////////////////////
在struct Functions最下面添加
////////////////////////////
PFGetGPPoint GetGPPoint;
////////////////////////////
进入WORLDDIALOG\NpcScriptHelper.cpp中
搜索void CNpcScript::AddGPPoint( int nAddGPPoint )
在其上添加
////////////////////////
int CNpcScript::GetGPPoint()
{
Functions* pTable = m_pInfo->GetFunctions();
return pTable->GetGPPoint( m_pInfo );
}
////////////////////////
这里就能进行转生NPC的实现了,这里也可以自己设置
随便的一个NPC
比如
mafl_juria///也就是帕里的仓库 NPC
搜索void CNpcScript::mafl_juria_5()
在其内添加
/////////////////////////
if( GetPlayerLvl() == 80 && GetGPPoint() != 0)
{
int GP = GetGPPoint();
int i = 1000;
i = i-GP;
if( GetGPPoint()<=1000 )
{
if(GetGPPoint()>=900)
{
AddGPPoint(i);
}else
{
(int)GP = GP-300;//316为零点 多了为负 少了为正 每次增加定义的(n-316)*2
AddGPPoint(GP);
SetLevel(1);
}
}else
{
AddKey( 10 );
}
}
////////////////////////
这样就实现了,当你80级了就去帕里点击仓库与其对话就OK了
当然还有一些问题.就是素质卷的问题
有二种解决方法
一、是不用
二、当然现有的资源是不能浪费的所以只能去修改素质卷的控制函数
这里只举例子
这个例子是 素质重置卷轴
搜索void CMover::ReState()
覆盖
/////////////////////////////
void CMover::ReState()
{
#ifdef __WORLDSERVER
int GP = GetGPPoint();
m_nStr = m_nSta = m_nDex = m_nInt = 15;
m_nRemainGP = 0;
int nLevelFor = m_nLevel;
if( m_nLevel < m_nDeathLevel )
nLevelFor = m_nDeathLevel;
#if __VER >= 10 // __LEGEND // 9瞒 傈铰矫胶袍 Neuz, World, Trans
for( int i = 1 ; i < nLevelFor ; i++ )
{
m_nRemainGP += prj.m_aExpCharacter[ i + 1 ].dwLPPoint;
if( ( IsMaster() || IsHero() ) && i > 59 )
m_nRemainGP++;
if( IsHero() && i == MAX_LEVEL)
m_nRemainGP+=12;
}
#else //__LEGEND // 9瞒 傈铰矫胶袍 Neuz, World, Trans
for( int i = 1 ; i < nLevelFor ; i++ )
m_nRemainGP += prj.m_aExpCharacter[ i + 1 ].dwLPPoint;
#endif //__LEGEND // 9瞒 傈铰矫胶袍 Neuz, World, Trans
if( m_nRemainGP < GP )
{
m_nRemainGP = GP;
}
SetHitPoint( GetMaxHitPoint() );
SetManaPoint( GetMaxManaPoint() );
SetFatiguePoint( GetMaxFatiguePoint() );
((CUser*)this)->AddSetState( m_nStr, m_nSta, m_nDex, m_nInt, m_nRemainGP );
// ((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
}
/////////////////////////////
我自测没bug,希望有人找出BUG来,发出来,进一步完善我的添加谢谢
|
|