游戏乐悠悠网游开发网

 找回密码
 立即注册
查看: 1346|回复: 2
打印 上一主题 下一主题

傻瓜式的无限转生

[复制链接]
  • TA的每日心情
    开心
    2011-11-24 11:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    鲜花(3) 鸡蛋(0)
    跳转到指定楼层
    楼主
    发表于 2015-9-22 09:32:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 mythosdev 于 2015-9-22 09:36 编辑

    这个转生由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;
    }
    }
    ///////////////////////////////////////////////






    搜索
    int        AddGPPoint( int nAddGPPoint );///在Mover.h内
    这个函数
    在其上 添加
    //////////////////////////////////////
    int        GetGPPoint();
    ///////////////////////////////////////







    进入
    WORLDSERVER  下的 FunctionsInfo.h

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






    进入  _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;
    /////////////////////////////



    这样就构造了一个简单的查看GP点的函数  


    在进入\_Common\Mover.h文件中
    搜索
    void        ProcessBuff();
    这个函数
    在其上添加
    ////////////////////////
    BOOL        Equip();//这个函数是用来检查是否穿的有装备的
    ////////////////////////
    进入
    _Common\MoverSkill.cpp
    文件中
    搜索
    BOOL CMoverUseItemWarp( 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;
    }
    ////////////////////////////////////
  • 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来,发出来,进一步完善我的添加谢谢
  • TA的每日心情

    2024-1-16 11:00
  • 签到天数: 242 天

    [LV.8]以坛为家I

    鲜花(0) 鸡蛋(0)
    板凳
    发表于 2018-12-20 10:00:58 | 只看该作者
    资源甚好,感谢楼主。。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|Online Game Xingbarking Dev Team  

    GMT+8, 2024-5-5 22:07 , Processed in 0.193355 second(s), 35 queries .

    Powered by Discuz! X3.2 Licensed

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表