📄 playerinfo.cpp
字号:
{
_PKCHAOCHART_ *pPKChaoChartMap = ( _PKCHAOCHART_ *)it->second;
if( !pPKChaoChartMap ) continue;
if( m_nAlign <= pPKChaoChartMap->nMAXALIGN &&
m_nAlign >= pPKChaoChartMap->nMINALIGN )
{
m_pPKChao = pPKChaoChartMap;
}
}
if(m_pPKChao == NULL)
{
ErrorMsg( "(X) m_pPKChao Is NULL (%s) (%d)" ,m_strPlayerID , m_nAlign);
}
// --------------------------------------------------------------------------------
// Default Quest
// --------------------------------------------------------------------------------
if( ! SetActiveQuest( 0 ) )
{
ErrorMsg( "(X) NullQuest Create Error" );
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// 荤侩磊狼 QUEST单捞鸥甫 涝仿矫糯
//
////////////////////////////////////////////////////////////////////////////////////////
bool PlayerInfo::Init_Quest(_LPZW_QUESTLIST_REP pActiveQuest)
{
// --------------------------------------------------------------------------------
// 秦寸 QUEST甫 吝汗登绰 版快
// --------------------------------------------------------------------------------
CActiveQuest *pAtiveQuest = (CActiveQuest *)m_ActiveQuest.Find( pActiveQuest->dwQuestIndex );
if( pAtiveQuest ) return false;
// --------------------------------------------------------------------------------
// 秦寸 QUEST狼 粮犁咯何甫 魄沥
// --------------------------------------------------------------------------------
CQuest *pQuest = g_pQuestEngine->GetQuest( pActiveQuest->dwQuestIndex );
if( !pQuest ) return false;
pAtiveQuest = (CActiveQuest *)g_pServerMem->ActiveQuest_Pop();
pAtiveQuest->SetInit( pQuest, this, pActiveQuest);
m_ActiveQuest.Insert( pActiveQuest->dwQuestIndex , pAtiveQuest );
//
// 秦寸 颇萍涅胶飘 沥焊甫 涝仿矫糯
//
if( pAtiveQuest->GetType() == QUEST_PARTY )
{
m_dwPartyQuest = pActiveQuest->dwQuestIndex;
if( GetLocationMapType() == MAP_EVENT )
SetChannel( m_dwPartyHandle );
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// 2004.11.01 by kuma - 颇萍涅胶飘 沥焊 犬牢...
//
////////////////////////////////////////////////////////////////////////////////////////
int PlayerInfo::GetPartyQuestCount()
{
int nRet = 0;
MAP_VOIDPTR::iterator itEnd = m_ActiveQuest.End() ;
for ( MAP_VOIDPTR::iterator it = m_ActiveQuest.Begin(); it != itEnd ; it++)
{
CActiveQuest *pActiveQuest = (CActiveQuest *)it->second;
if ( pActiveQuest )
{
if( pActiveQuest->GetType() == QUEST_PARTY )
nRet++;
}
}
return nRet;
}
////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
void PlayerInfo::PartyQuestChannel_Init()
{
int _nPartyQuestNum = GetPartyQuestCount();
if ( _nPartyQuestNum > 0 )
{
if ( _nPartyQuestNum != 1 )
{
ErrorMsg( "PARTY QUEST NUMBER = %d", _nPartyQuestNum );
}
MAP_VOIDPTR::iterator itEnd = m_ActiveQuest.End() ;
for ( MAP_VOIDPTR::iterator it = m_ActiveQuest.Begin(); it != itEnd ; it++)
{
CActiveQuest *pActiveQuest = (CActiveQuest *)it->second;
if ( pActiveQuest )
{
if( pActiveQuest->GetType() == QUEST_PARTY )
{
m_dwPartyQuest = (int)(it->first);
if( GetLocationMapType() == MAP_EVENT )
SetChannel( m_dwPartyHandle );
return;
}
}
}
}
m_dwPartyQuest = 0;
SetChannel( 0 );
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
void PlayerInfo::SendToLobby(_LPZP_PLAYERBASE_REP pPlayerBase)
{
MatchClear() ;
m_dwMatchSEQ = 0 ;
m_nMapID = g_pMap->_LOBBY_.dwMapID ;
pPlayerBase->wX = g_pMap->_LOBBY_.StartPoint.x*100 + 50 ;
pPlayerBase->wY = g_pMap->_LOBBY_.StartPoint.y*100 + 50 ;
// 秦寸 Map Layer甫掘篮 -> Map Search肺 函版 矫糯
m_nMapLayer = 0;
for( int i=0; i < g_pMap->m_nMaxLayer; i ++ )
{
if( g_pMap->GetMapID( i ) == m_nMapID )
{
m_nMapLayer = i;
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////
// 酒捞袍阑 焊晨
//
////////////////////////////////////////////////////////////////////////////////////////
bool PlayerInfo::SendPVPPrize_Item()
{
// --------------------------------------------------------------------------------
// 秦寸 陛咀阑 岿靛 辑滚俊 焊晨
// --------------------------------------------------------------------------------
if( m_nPrizeMoney != 0 )
{
if( !GoldMinus( m_nPrizeMoney ) ) return false;
g_pServer->PacketSend_ChangeGold( m_pSocketFD );
}
_LPDBPACKET pWorldPacket = g_pServerMem->WorldPacket_Pop();
pWorldPacket->dwCommand = ZW_FIGHTZONEITEM_SAVE ;
pWorldPacket->pSocketFD = m_pSocketFD;
char * lpData = pWorldPacket->strPacket ;
_LPZW_FIGHTZONEITEM_SAVE lpPacket = (_LPZW_FIGHTZONEITEM_SAVE) lpData ;
lpData += sizeof( _ZW_FIGHTZONEITEM_SAVE ) ;
memset(lpPacket,0x0,sizeof(_ZW_FIGHTZONEITEM_SAVE)) ;
lpPacket->dwGold = m_nPrizeMoney ;
lpPacket->dwHandle = m_dwHandle ;
lpPacket->dwMatchSEQ = m_dwMatchSEQ ;
lpPacket->nTeam = m_nTeam ;
// --------------------------------------------------------------------------------
// 秦寸 拱前阑 岿靛 辑滚俊 焊晨
// --------------------------------------------------------------------------------
int nWearCheck = 0;
MAP_VOIDPTR::iterator itEnd = m_MapPrize.End();
for ( MAP_VOIDPTR::iterator it = m_MapPrize.Begin(); it != itEnd; it++)
{
CItem *pItem = (CItem *)it->second;
// 秦寸 Item厘馒 矫
if( pItem->IsWear() )
{
///////////////////////////////////////////////////////////
// 风凭 埃家拳 矫糯
///////////////////////////////////////////////////////////
#ifdef DEF_ITEMCOUNT_BADAJOA20041108
_ItemMove(pItem,WHERE_INVENTORY) ;
#endif
pItem->m_nWHERE = WHERE_INVENTORY; // 厘馒 酒捞袍阑 呕馒矫糯
int bReturn = Inventory_PutOffUpdate( pItem );
if( bReturn > nWearCheck ) nWearCheck = bReturn;
}
#ifdef DEF_ITEMCOUNT_BADAJOA20041108
_DeleteItem(pItem) ;
#endif
if( pItem->IsWorld() )
{
World_InvItemDelete( pItem->m_dwItemHandle );
}
m_MapInventory.Delete( pItem->m_dwItemHandle );
g_pServer->PacketSend_InventoryDelete( m_pSocketFD, pItem->m_dwItemHandle );
bool bOk = pItem->GetInventory( (_LP_PLAYERINVENTORY )lpData );
lpData += sizeof(_PLAYERINVENTORY) ;
++lpPacket->sCount ;
}
m_MapTrade.Clear(); // 背券 拱前 Clear矫糯
pWorldPacket->dwSize = sizeof(_ZW_FIGHTZONEITEM_SAVE) + lpPacket->sCount*sizeof(_PLAYERINVENTORY) ;
g_lpDBSock->bSend(pWorldPacket);
// --------------------------------------------------------------------------------
// 背券 Item阑 馒侩 窍绊 乐绰 版快
// --------------------------------------------------------------------------------
switch( nWearCheck )
{
// 牢亥俊 乐绰 ITEM背券 矫
case 0 : break;
// 厘馒 酒捞袍 荐摹父 函版 蹬绰 版快
case 1 : {
Set_CalcAllStat(); // 秦寸 荐摹甫 促矫 拌魂
g_pServer->PacketSend_ChangePlayerBase( m_pSocketFD ); // 包访 贸府狼 埃家拳 累诀
}
break;
// 厘馒 酒捞袍 葛剧 + 荐摹 函版 蹬绰 版快
case 2 : {
Set_CalcAllStat(); // 秦寸 荐摹甫 促矫 拌魂
g_pServer->PacketSend_ChangePlayerBase( m_pSocketFD ); // 包访 贸府狼 埃家拳 累诀
g_pServer->PacketSend_PlayerUpdate( m_pSocketFD ); // AOI郴狼 函版等 纳腐 沥焊甫 傈价 矫糯
}
break;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////////////
bool PlayerInfo::Check_PotionCount( DWORD dwItemIndex )
{
int _nCnt = 0;
void* pTempInventory[10000] = {0, };
int nCountInventory = m_MapInventory.CopyTmpList( pTempInventory );
for( int i= 0 ; i < nCountInventory ; ++i )
{
CItem * pItem = (CItem *)pTempInventory[i];
if( !pItem ) continue;
if ( pItem->m_nWHERE == WHERE_INVENTORY )
{
if ( pItem->m_nType == ITEMTYPE_POISON_HEALING ||
pItem->m_nType == ITEMTYPE_POISON_MANA ||
pItem->m_nType == ITEMTYPE_POISON_STAMINA
)
{
if ( pItem->m_dwItemIndex == dwItemIndex )
{
_nCnt += pItem->m_nCount;
if ( _nCnt >= MAX_POTION_COUNT )
return false;
}
}
}
}
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// WORD SERVER俊辑 罐篮 单捞鸥甫 涝仿 矫糯
//
// - 秦寸 酒捞袍阑 Setting矫糯
// - SERVER坷幅肺 牢窍咯 吝汗栏肺 酒捞袍阑 厘馒 茄 版快 牢亥栏肺 磊悼栏肺 颗辫
////////////////////////////////////////////////////////////////////////////////////////
bool PlayerInfo::Init_Inventory(_LP_PLAYERINVENTORY pInventory)
{
CItem *pItem = g_pMap->Pool_Item_Pop();
if( !pItem )
{
ErrorMsg( "(X) Init_Inventory Item is Null");
return false;
}
pItem->SetInventory( pInventory ); // Item Inventory 单捞鸥甫 流立牢仿 矫糯
#ifdef DEF_CHECK_QUESTDONE
// WORD SERVER俊辑 nCount啊 WORD肺 棱囚乐绢辑.. 夸何盒 趣矫唱 秦辑 荐沥
if ( pItem->m_nCount < 0 )
{
pItem->m_nCount = 0;
}
#endif
_BASE_ITEM_ *pBaseItem = (_BASE_ITEM_ *)g_Base.m_BaseItem.Find( pItem->m_dwItemIndex );
if ( pBaseItem )
{
bool bSlotTypeError = false;
if ( pBaseItem->nSLOTTYPE != pItem->m_nSlotType )
{
bSlotTypeError = true;
if ( m_nCharacterType == WARRIOR )
{
if ( ( pItem->m_nType == ITEMTYPE_WEAPON_ONEHANDSWORD ) ||
( pItem->m_nType == ITEMTYPE_WEAPON_ONEHANDAXE ) ) // 茄颊八, 茄颊 档尝
{
if ( ( pItem->m_nSlotType == SLOT_RIGHT ) ||
( pItem->m_nSlotType == SLOT_LEFT ) )
{
bSlotTypeError = false;
}
}
}
if ( pItem->m_nType == ITEMTYPE_DEFENSE_RING )
{
if ( ( pItem->m_nSlotType == SLOT_RINGLEFT ) ||
( pItem->m_nSlotType == SLOT_RINGRIGHT ) )
{
bSlotTypeError = false;
}
}
if ( ( bSlotTypeError ) && ( pItem->m_nType != ITEMTYPE_ELEMENTALSTONE ) )
{
ErrorMsg( "(X) INVEN_INVALIDSOCKET : %s - Item(%d) - Slot(%d)", m_strPlayerID, pItem->m_dwItemIndex, pItem->m_nSlotType );
//pItem->m_wX = 0;
//pItem->m_wY = 0;
pItem->m_nSlotType = pBaseItem->nSLOTTYPE;
}
}
}
#ifdef DEF_KUMA_GAMBLE
if ( pItem->m_nWHERE == WHERE_GAMBLEVIEW )
{
pItem->m_nWHERE = WHERE_INVENTORY;
pItem->m_wX = 0;
pItem->m_wY = 0;
m_nGambleState = GAMBLE_STATE_NONE;
m_pTmpGambleItem = NULL;
}
#endif
if ( pItem->m_dwOwnHandle )
{
if ( pItem->m_nType == ITEMTYPE_USER_MANTLE )
{
if ( ( pItem->m_dwOwnHandle != m_dwHandle ) &&
( pItem->m_nWHERE == WHERE_EQUIPMENT ) )
{
pItem->m_nWHERE = WHERE_INVENTORY;
pItem->m_wX = 0;
pItem->m_wY = 0;
}
}
else if ( pItem->m_nType == ITEMTYPE_GUILD_MANTLE )
{
if ( ( pItem->m_dwOwnHandle != m_dwGuildHandle ) &&
( pItem->m_nWHERE == WHERE_EQUIPMENT ) )
{
pItem->m_nWHERE = WHERE_INVENTORY;
pItem->m_wX = 0;
pItem->m_wY = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -