751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
阅读:2995回复:11

【源码编译】傻瓜式的无限转生

楼主#
更多 发布于:2014-03-23 08:19

这个转生由GP点控制
搜索
int   CMover::AddGPPoint( int nAddGPPoint )///在mover.cpp内
这个函数
在其上添加
//////////////////////////////////////////////////
int CMover::GetGPPoint()
{
 ASSERT( m_nRemainGP >= 0 );
 ///////////////////转生用此函数
 if(Equip())
 {
 RemoveDebufBuffs(TRUE);
 int NowGP = GetDex() + GetStr() + GetInt() + GetSta() - 60;
 m_nRemainGP += NowGP;
 return m_nRemainGP;
 }else
 {
 return 0;
 }
}
///////////////////////////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
沙发#
发布于:2014-03-23 08:22
搜索
int AddGPPoint( int nAddGPPoint );///在Mover.h内
这个函数
在其上 添加
//////////////////////////////////////
int GetGPPoint();
///////////////////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
板凳#
发布于:2014-03-23 08:24
进入
WORLDSERVER  下的 FunctionsInfo.h

typedef int (WINAPI *PFAddGPPoint)( NPCDIALOG_INFO* pInfo , int nAddGPPoint);  
其下加上
/////////////////////////////////
typedef int (WINAPI *PFGetGPPoint)( NPCDIALOG_INFO* pInfo );  
///////////////////////////////////
在struct Functions这个结构中最下面加上
///////////////////////////////////
PFGetGPPoint GetGPPoint;
///////////////////////////////////

751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
地板#
发布于:2014-03-23 08:28
进入  _Common下的 ScriptLib.cpp文件中
搜索
int APIENTRY AddGPPoint( NPCDIALOG_INFO* pInfo , int nAddGPPoint )  
在其上添加
//////////////////////////
int APIENTRY GetGPPoint( NPCDIALOG_INFO* pInfo )  
{
CUser* pUser = prj.GetUser( pInfo->GetPcId() );
return pUser->GetGPPoint();
}
/////////////////////////////
再搜索
void InitDialogFunctions()
这个函数
在其工作区最下面添加
//////////////////////////////
g_functions.GetGPPoint = GetGPPoint;
/////////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
4楼#
发布于:2014-03-23 08:30
这样就构造了一个简单的查看GP点的函数  
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
5楼#
发布于:2014-03-23 08:37
在进入\_Common\Mover.h文件中
搜索
void ProcessBuff();
这个函数
在其上添加
////////////////////////
BOOL Equip();//这个函数是用来检查是否穿的有装备的
////////////////////////
进入
_Common\MoverSkill.cpp
文件中
搜索
BOOL CMover:oUseItemWarp( ItemProp* pItemProp, CItemElem* pItemElem )
在其#ifdef __WORLDSERVER上添加
/////////////////////////////
BOOL CMover::Equip()//检查装备
{
for( DWORD dwParts = 0; dwParts < MAX_HUMAN_PARTS; dwParts++ )
{
CItemElem* pArmor = m_Inventory.GetEquip( dwParts );
if( pArmor )
{
return FALSE;
}

}
return TRUE;
}
////////////////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
6楼#
发布于:2014-03-23 08:44
进入_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 );
}
}
///////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
7楼#
发布于:2014-03-23 08:50
好了,在后台程序中已经完了所需函数的创造
我们开始实现如何转生
///////////////////////////////

进入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 );
}
////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
8楼#
发布于:2014-03-23 08:57
这里就能进行转生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 );
}
}
////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
9楼#
发布于:2014-03-23 09:03
这样就实现了,当你80级了就去帕里点击仓库与其对话就OK了
当然还有一些问题.就是素质卷的问题
有二种解决方法
一、是不用
二、当然现有的资源是不能浪费的所以只能去修改素质卷的控制函数
这里只举例子
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
10楼#
发布于:2014-03-23 09:10
这个例子是  素质重置卷轴
搜索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
}

/////////////////////////////
751743019
4级·生命之泉
4级·生命之泉
  • UID20114
  • 注册日期2011-12-21
  • 最后登录2014-07-26
  • 粉丝1
  • 关注0
  • 发帖数42
  • QQ
  • 铜币75枚
  • 威望0点
  • 银元188个
11楼#
发布于:2014-03-23 09:12
我自测没bug,希望有人找出BUG来,发出来,进一步完善我的添加谢谢
游客

返回顶部