【登录】 【注册】
进入此贴详细完整版>> 【源码编辑】阻止崩溃包中华游戏网 > 飞飞研究所

主题:【源码编辑】阻止崩溃包
作者:烛天丶
时间:2013-08-21 22:41

这个代码的用途是,没有添加的话,出现下列情况,服务端直接崩溃。用了的话最多客户端掉线。3 K9 P7 r; k4 `3 i3 `- W
服务端地图崩溃4 }5 X; c, m, `0 X, {1 u4 h
worldserver/DPServer.cpp% U- f8 z4 m& f; Y
找到

       ar >> dwData >> objid >> nPart;
       if( nPart >= MAX_HUMAN_PARTS )  
              return;. P! I  T2 [, @
后面添加
       CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
       //Crash packet
       if ( nPart > 30 || dwData < 0 || nPart < -1)   {
                     Error( "CDPSrvr::OnDoUseItem : Crash Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d]",
                                          pUser->m_idPlayer, pUser->GetName(), dwData, objid, nPart );
              return;
       }
然后注释掉下面一行,像这样
//CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );

贸易崩溃
找到
       ar >> cTab >> nId >> nNum >> dwItemId;
       if( cTab >= MAX_VENDOR_INVENTORY_TAB || nNum < 1 )
              return;
下面添加
       CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
       //CRASH
       if( cTab < 0 || nId < 0 || nNum > 9999 || dwItemId < 0 ) {
              Error( "CDPSrvr::OnBuyItem : Crash Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d,%d]",
                                          pUser->m_idPlayer, pUser->GetName(), cTab, nId, nNum, dwItemId );
              return;
       }
然后注释掉下面一行,像这样' a& z1 E3 p8 P7 G
//CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );

个人身上物品导致的崩溃
找到
              ar >> nPocket1 >> nItem >> nNum >> nPocket2;

              if( nPocket1 == nPocket2 )
                     return;
下面添加
              if( nNum <= 0 ) {
                     Error( "CDPSrvr::OnMoveItemOnPocket : Dupe Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d,%d]",
                                          pUser->m_idPlayer, pUser->GetName(), nPocket1, nItem, nNum, nPocket2 );
                     return;
              }
& Y& O! y& w+ Z1 T4 ^
              //CRASH
              if( nItem < 0 || nPocket2 > 2 || nPocket1 < -1 || nPocket1 > 52 ) {
                     Error( "CDPSrvr::OnMoveItemOnPocket : Crash Try -> [Player ID: %07d], [Player Name: %s], [Packet used: %d,%d,%d,%d]",
                                          pUser->m_idPlayer, pUser->GetName(), nPocket1, nItem, nNum, nPocket2 );
                     return;
              }
然后重新编译源码,并不是所有的崩溃都可以避免,这里只是避免部分错误导致的崩溃。导致服务端的崩溃的可能性很多,还有模型导致的崩溃,还有技能,物品等等,太多了。

1楼:clxas2000(2013-08-22 00:14)

来看看啊
2楼:1009334066(2013-08-22 01:25)

楼主你太有才了![懒人回复]
3楼:开心小龙(2013-08-22 06:21)

楼主你太有才了!
4楼:风中的邂逅(2013-08-22 06:40)

楼主 你很强大 强大哦
5楼:j黑羽翼(2013-08-22 06:53)

这个怎么用
6楼:孤独灬寂寞(2013-08-22 11:15)

完全的  头昏了····
7楼:lansky、(2013-08-22 23:43)

额。楼上有刷帖子的嫌疑

进入此贴详细完整版>> 【源码编辑】阻止崩溃包 返回顶部


COPYRIGHT © 2006-2024 中华游戏网 cnyouw.cn. ALL RIGHTS RESERVED. SITEMAP