UINT CGIssuePetPlacardHandler::Execute( CGIssuePetPlacard* pPacket, Player* pPlayer )
{
__ENTER_FUNCTION

    GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ;
    Assert( pGamePlayer ) ;

    Obj_Human* pHuman = pGamePlayer->GetHuman() ;
    Assert( pHuman ) ;
    
    Scene* pScene = pHuman->getScene() ;
    if( pScene==NULL )
    {
        Assert(FALSE) ;
        return PACKET_EXE_ERROR ;
    }

    //检查线程执行资源是否正确
    Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ;

    Obj_Monster *pNpc = (Obj_Monster*)(pScene->GetObjManager()->GetObj(pPacket->GetNpcID()));
    if(pNpc != NULL)
    {
        PetPlacardSystem *pPetPlacardSystem = pNpc->GetPetPlacardSystem();
        if(pPetPlacardSystem == NULL)
        {
            pNpc->CreatePetPlacardSystem();
            pPetPlacardSystem = pNpc->GetPetPlacardSystem();
        }
        if(pPetPlacardSystem != NULL)
        {
            CHAR* pMessage = pPacket->GetMessage();
            BYTE nMessageSize = (BYTE)strlen( pMessage );
            if( nMessageSize >= PET_PLACARD_ITEM_MESSAGE_SIZE ) nMessageSize = PET_PLACARD_ITEM_MESSAGE_SIZE-1;
            pMessage[PET_PLACARD_ITEM_MESSAGE_SIZE-1] = 0;
            ReplaceIllegalString( pMessage, nMessageSize );

            ORESULT oResult = pPetPlacardSystem->IssuePlacard(pHuman, pPacket->GetGUID(), pMessage);
            if(OR_FAILED(oResult))
            {
                pHuman->SendOperateResultMsg(oResult);
            }
        }
    }

    return PACKET_EXE_CONTINUE ;

__LEAVE_FUNCTION

    return PACKET_EXE_ERROR ;
}
Ejemplo n.º 2
0
uint CGChatHandler::Execute( CGChat* pPacket, Player* pPlayer )
{
__ENTER_FUNCTION

	GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ;
	Assert( pGamePlayer != NULL ) ;
	if ( pGamePlayer == NULL )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGChatHandler: Error (pGamePlayer == NULL) " ) ;
		return PACKET_EXE_CONTINUE ;
	}

	Obj_Human* pHuman = pGamePlayer->GetHuman() ;
	Assert( pHuman != NULL ) ;
	if ( pHuman == NULL )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGChatHandler: Error (pHuman == NULL) " ) ;
		return PACKET_EXE_CONTINUE ;
	}

	Scene* pScene = pHuman->getScene() ;
	Assert( pScene != NULL ) ;
	if ( pScene == NULL )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGChatHandler: Error Obj = %d (pScene == NULL) ", pHuman->GetID() ) ;
		return PACKET_EXE_CONTINUE ;
	}

	//检查线程执行资源是否正确
	Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ;

	INT i ;
	BOOL bIsCanSay = TRUE ;
	BYTE bChatType = pPacket->GetChatType() ;
	//消耗判断
	for( i=0; i<g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeCount; i++ )
	{
		if( bIsCanSay==FALSE )
			break ;

		switch( g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeType[i] )
		{
		case CHAT_NEED_MP:
			{
				INT CurMP = pHuman->GetMP() ;
				INT NeedMP = g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeValue[i] ;
				if( CurMP<NeedMP )
					bIsCanSay = FALSE ;
			}
			break ;
		//case CHAT_NEED_VIGOR:
		//	{
		//		INT CurVigor = pHuman->GetVigor() ;
		//		INT NeedVigor = g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeValue[i] ;
		//		if( CurVigor<NeedVigor )
		//			bIsCanSay = FALSE ;
		//	}
		//	break ;
		//case CHAT_NEED_ENERGY:
		//	{
		//		INT CurEnergy = pHuman->GetEnergy() ;
		//		INT NeedEnergy = g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeValue[i] ;
		//		if( CurEnergy<NeedEnergy )
		//			bIsCanSay = FALSE ;
		//	}
		//	break ;
		default :
			break ;
		};
	}

	if( bIsCanSay == TRUE )//等级判断
	{
		if( pHuman->GetLevel() < g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_NeedLevel )
		{
			bIsCanSay = FALSE ;
		}
	}

	if( bIsCanSay == FALSE )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "CGChatHandler: Consume Error! GUID=%X ChatType=%d Contex=%s TarName=%s TeamID=%d ChannelID=%d GuildID=%d PID=%d", 
			pGamePlayer->m_HumanGUID, 
			pPacket->GetChatType(), 
			pPacket->GetContex(), 
			pPacket->GetTargetName(), 
			pPacket->GetTeamID(), 
			pPacket->GetChannelID(),
			pPacket->GetGuildID(),
			pGamePlayer->PlayerID()) ;

		return PACKET_EXE_CONTINUE ;
	}

	for( i=0; i<g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeCount; i++ )
	{
		switch( g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeType[i] )
		{
		case CHAT_NEED_MP:
			{
				INT CurMP = pHuman->GetMP() ;
				INT NeedMP = g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeValue[i] ;
				pHuman->SetMP( CurMP-NeedMP ) ;
			}
			break ;
		//case CHAT_NEED_VIGOR:
		//	{
		//		INT CurVigor = pHuman->GetVigor() ;
		//		INT NeedVigor = g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeValue[i] ;
		//		pHuman->SetVigor( CurVigor-NeedVigor ) ;
		//	}
		//	break ;
		//case CHAT_NEED_ENERGY:
		//	{
		//		INT CurEnergy = pHuman->GetEnergy() ;
		//		INT NeedEnergy = g_ChatConsumeTbl.m_ChatComsumeType[bChatType].m_ConsumeValue[i] ;
		//		pHuman->SetEnergy( CurEnergy-NeedEnergy ) ;
		//	}
		//	break ;
		default :
			break ;
		};
	}

	CHAR* pContex = pPacket->GetContex();
	BYTE nContexSize = pPacket->GetContexSize();
	if( nContexSize >= MAX_CHAT_SIZE ) nContexSize = MAX_CHAT_SIZE-1;
	pContex[MAX_CHAT_SIZE-1] = 0;
	ReplaceIllegalString( pPacket->GetContex(), nContexSize );

	switch( bChatType )
	{
	case CHAT_TYPE_NORMAL:
		{
			ObjID_t SourID = pHuman->GetID() ;
			ObjID_t DestID = INVALID_ID ;
			GCChat* pChatPacket = (GCChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GC_CHAT)) ;

			pChatPacket->SetChatType( pPacket->GetChatType() ) ;
			pChatPacket->SetContexSize( nContexSize ) ;
			pChatPacket->SetContex( pPacket->GetContex() ) ;
			pChatPacket->SetSourNameSize( (BYTE)(strlen(pHuman->GetName())) ) ;
			pChatPacket->SetSourName( pHuman->GetName() ) ;
			pChatPacket->SetSourID(pHuman->GetID()) ;
			pChatPacket->SetSourCamp(pHuman->GetCampData()->m_nCampID);

			pScene->GetChatPipe()->SendPacket( pChatPacket, SourID, DestID ) ;
		}
		break ;
	case CHAT_TYPE_TEAM:
		{
			GWChat* pChatPacket = (GWChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GW_CHAT)) ;

			pChatPacket->SetSourGUID( pGamePlayer->m_HumanGUID ) ;
			pChatPacket->SetChatType( pPacket->GetChatType() ) ;
			pChatPacket->SetContexSize( nContexSize ) ;
			pChatPacket->SetContex( pPacket->GetContex() ) ;
			pChatPacket->SetTeamID( pPacket->GetTeamID() ) ;

			g_pServerManager->SendPacket( pChatPacket, INVALID_ID ) ;
		}
		break ;
	case CHAT_TYPE_TELL:
		{
			GWChat* pChatPacket = (GWChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GW_CHAT)) ;

			pChatPacket->SetSourGUID( pGamePlayer->m_HumanGUID ) ;
			pChatPacket->SetChatType( pPacket->GetChatType() ) ;
			pChatPacket->SetContexSize( nContexSize ) ;
			pChatPacket->SetContex( pPacket->GetContex() ) ;
			pChatPacket->SetTargetName( pPacket->GetTargetName() ) ;
			pChatPacket->SetTargetSize( pPacket->GetTargetSize() ) ;

			g_pServerManager->SendPacket( pChatPacket, INVALID_ID ) ;
		}
		break ;
	case CHAT_TYPE_SCENE:
	case CHAT_TYPE_SYSTEM:
		{
			char sysNotifyMsg[MAX_CHAT_SIZE]={"系统:你消耗了一个道具!"};
			int nItemIndex=g_Config.m_ConfigInfo.m_nWorldChatItemIndex;
			int nBagIndex=INVALID_ID;
			BOOL bContiune=1;

			Item* pItem =NULL;
			if(INVALID_ID==nBagIndex)
			{
				nBagIndex = HumanItemLogic::GetItemPosByType(pHuman, nItemIndex);
				if(nBagIndex == -1)
				{
					memset(sysNotifyMsg,0,sizeof(sysNotifyMsg));
					strcpy(sysNotifyMsg,"系统:对不起!,你没有道具!");
					bContiune=0;

				}
			}
           
			if(bContiune)
			{
				pItem = HumanItemLogic::GetItem(pHuman, nBagIndex);
				if(NULL==pItem)
				{
					memset(sysNotifyMsg,0,sizeof(sysNotifyMsg));
					strcpy(sysNotifyMsg,"系统:对不起!,你没有道具!");
					bContiune=0;
				}

			}

			if(bContiune)
			{
				if(pItem->IsCosSelf())
				{
					if(pItem->GetLayedNum()<1)
					{
						memset(sysNotifyMsg,0,sizeof(sysNotifyMsg));
						strcpy(sysNotifyMsg,"系统:对不起!,你没有道具!");
						bContiune=0;

					}
					else
					{
						ItemContainer*	pContainer = HumanItemLogic::GetContainer(pHuman,nBagIndex);
						if(NULL==pContainer)
						{
							AssertEx(FALSE,"[Obj_Human::Skill_DepleteItem]: Can't find the specified container!!");
							return FALSE;
						}
						HumanItemLogic::DecItemLayCount(pHuman,nBagIndex,1);

					}
				
				}

			}
		
			//发送世界频道聊天

			if(bContiune)
			{
				GWChat* pChatPacket = (GWChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GW_CHAT)) ;
				pChatPacket->SetSourGUID( pGamePlayer->m_HumanGUID ) ;
				pChatPacket->SetChatType( pPacket->GetChatType() ) ;
				pChatPacket->SetContexSize( pPacket->GetContexSize() ) ;
				pChatPacket->SetContex( pPacket->GetContex() ) ;

				g_pServerManager->SendPacket( pChatPacket, INVALID_ID ) ;

			}
			
			/////提示信息;
        	ObjID_t SourID = pHuman->GetID() ;
			ObjID_t DestID = INVALID_ID ;
			GCChat* pChatPacketinfo = (GCChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GC_CHAT)) ;

			pChatPacketinfo->SetChatType( CHAT_TYPE_SYSTEM ) ;
			pChatPacketinfo->SetContexSize((BYTE)strlen(sysNotifyMsg)) ;
			pChatPacketinfo->SetContex( sysNotifyMsg ) ;
			pChatPacketinfo->SetSourNameSize( (BYTE)(strlen(pHuman->GetName())) ) ;
			pChatPacketinfo->SetSourName( pHuman->GetName() ) ;
			pChatPacketinfo->SetSourID(pHuman->GetID()) ;
			pChatPacketinfo->SetSourCamp(pHuman->GetCampData()->m_nCampID);

			pScene->GetChatPipe()->SendPacket( pChatPacketinfo, SourID, DestID ) ;


		
			
		}
		break ;
	case CHAT_TYPE_CHANNEL:
		{
			GWChat* pChatPacket = (GWChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GW_CHAT)) ;

			pChatPacket->SetSourGUID( pGamePlayer->m_HumanGUID ) ;
			pChatPacket->SetChatType( pPacket->GetChatType() ) ;
			pChatPacket->SetContexSize( nContexSize ) ;
			pChatPacket->SetContex( pPacket->GetContex() ) ;
			pChatPacket->SetChannelID( pPacket->GetChannelID() ) ;

			g_pServerManager->SendPacket( pChatPacket, INVALID_ID ) ;
		}
		break ;
	case CHAT_TYPE_GUILD:
		{
			GWChat* pChatPacket = (GWChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GW_CHAT)) ;

			pChatPacket->SetSourGUID( pGamePlayer->m_HumanGUID ) ;
			pChatPacket->SetChatType( pPacket->GetChatType() ) ;
			pChatPacket->SetContexSize( nContexSize ) ;
			pChatPacket->SetContex( pPacket->GetContex() ) ;
			pChatPacket->SetGuildID( pPacket->GetGuildID() ) ;

			g_pServerManager->SendPacket( pChatPacket, INVALID_ID ) ;
		}
		break ;
	case CHAT_TYPE_MENPAI:
		{
			GWChat* pChatPacket = (GWChat*)(g_pPacketFactoryManager->CreatePacket(PACKET_GW_CHAT)) ;

			pChatPacket->SetSourGUID( pGamePlayer->m_HumanGUID ) ;
			pChatPacket->SetChatType( pPacket->GetChatType() ) ;
			pChatPacket->SetContexSize( nContexSize ) ;
			pChatPacket->SetContex( pPacket->GetContex() ) ;
			pChatPacket->SetMenpaiID( pPacket->GetMenpaiID() ) ;

			g_pServerManager->SendPacket( pChatPacket, INVALID_ID ) ;
		}
		break ;
	default :
		{
			Assert( FALSE ) ;
		}
		break ;
	};

	g_pLog->FastSaveLog( LOG_FILE_12, "CGChatHandler: GUID=%X ChatType=%d Contex=%s TarName=%s TeamID=%d ChannelID=%d GuildID=%d PID=%d", 
		pGamePlayer->m_HumanGUID, 
		pPacket->GetChatType(), 
		pPacket->GetContex(), 
		pPacket->GetTargetName(), 
		pPacket->GetTeamID(), 
		pPacket->GetChannelID(),
		pPacket->GetGuildID(),
		pGamePlayer->PlayerID()) ;


	return PACKET_EXE_CONTINUE ;

__LEAVE_FUNCTION

	return PACKET_EXE_ERROR ;
}
uint CGBBSSychMessagesHandler::Execute( CGBBSSychMessages* pPacket, Player* pPlayer )
{
	__ENTER_FUNCTION

	GamePlayer* pGamePlayer = (GamePlayer*)pPlayer ;
	Assert( pGamePlayer ) ;

	Obj_Human* pHuman = pGamePlayer->GetHuman() ;
	Assert( pHuman ) ;

	Scene* pScene = pHuman->getScene() ;
	if( pScene==NULL )
	{
		Assert(FALSE) ;
		return PACKET_EXE_ERROR ;
	}
	//检查线程执行资源是否正确
	Assert( MyGetCurrentThreadID()==pScene->m_ThreadID ) ;

	ObjID_t	ObjID			=	pPacket->GetObjID();
	BYTE	Opt				=	pPacket->GetOpt();
	UINT	nID				=	pPacket->GetID();
	BYTE	nLength			=	pPacket->GetLength();
	CHAR*	m_MessageData	=	pPacket->GetMessage();

	if( nLength >= MAX_BBS_MESSAGE_LENGTH ) nLength = MAX_BBS_MESSAGE_LENGTH-1;
	m_MessageData[nLength] = 0;

	ReplaceIllegalString( m_MessageData, nLength );

	Obj_Human* pTargetHuman = pScene->GetHumanManager()->GetHuman( ObjID );
	if( pTargetHuman == NULL )
	{
		g_pLog->FastSaveLog( LOG_FILE_1, "ERROR: CGBBSApplyHandler::ObjID=%d, ObjId = %d"
			,pHuman->GetID(), ObjID) ;
		return PACKET_EXE_CONTINUE ;
	}

	if(pTargetHuman->m_StallBox.GetStallStatus() != ServerStallBox::STALL_OPEN)
	{
		GCStallError	Msg;
		Msg.SetID(STALL_MSG::ERR_CLOSE);
		pGamePlayer->SendPacket(&Msg);
		g_pLog->FastSaveLog( LOG_FILE_1, "ERROR: CGStallOpenHandler::ObjID=%d, ERR_CLOSE"
			,pHuman->GetID()) ;
		return PACKET_EXE_CONTINUE;
	}

	ServerBBS*	pBBS	=	pTargetHuman->m_StallBox.GetBBS();
	switch(Opt)
	{
		case CGBBSSychMessages::OPT_NEW_MESSAGE:
			{
				CHAR szDisplayName[MAX_BBS_MESSAGE_AUTHORLENGTH];
				sprintf(szDisplayName, "%s(%X)", pHuman->GetName(), (UINT)(pHuman->GetGUID()));
				UINT	NewID = pBBS->NewMessageID();
				if(pBBS->AddNewMessageByID( NewID, m_MessageData, nLength, szDisplayName ) == FALSE)
				{
					g_pLog->FastSaveLog( LOG_FILE_1, "ERROR: CGBBSSychMessagesHandler::ObjID=%d, NewID = %d"
					,pHuman->GetID(), NewID) ;
					return PACKET_EXE_CONTINUE;
				}
			}
			break;
		case CGBBSSychMessages::OPT_REPLY_MESSAGE:
			{
				if(pBBS->ReplyMessageByID(nID, m_MessageData, nLength) == FALSE)
				{
					g_pLog->FastSaveLog( LOG_FILE_1, "ERROR: CGBBSSychMessagesHandler::ObjID=%d, nID = %d"
						,pHuman->GetID(), nID) ;
					return PACKET_EXE_CONTINUE;
				}
			}
			break;
		case CGBBSSychMessages::OPT_DEL_MESSAGE:
			{
				//...
			}
			break;
		case CGBBSSychMessages::OPT_SET_TITLE:
			{
				if(pBBS->SetBBSTitle( m_MessageData, nLength) == FALSE)
				{
					g_pLog->FastSaveLog( LOG_FILE_1, "ERROR: CGBBSSychMessagesHandler::ObjID=%d"
						,pHuman->GetID()) ;
					return PACKET_EXE_CONTINUE;
				}
			}
			break;
		default:
			break;
	}

	//发送新的留言板给客户端
	MessageEntry_t* pEntry		= NULL;
	GCBBSMessages::_MESSAGE_T	MessageList[MAX_BBS_MESSAGE_NUM];
	UINT k						= 0;
	GCBBSMessages	MsgBBS;
	UINT	CurIndex = pBBS->GetFinalIndex();
	for(UINT i = 0; i<MAX_BBS_MESSAGE_NUM; i++)
	{
		pEntry = pBBS->GetMessageByIndex(CurIndex);
		if(pEntry)
		{
			MessageList[k].bHasReply		=	pEntry->bHasReply;
			MessageList[k].nID				=	pEntry->nID;
			MessageList[k].nHour			=	pEntry->nHour;
			MessageList[k].nMin				=	pEntry->nMin;
			MessageList[k].nMsgLength		=	pEntry->nMsgLength;
			MessageList[k].nReplyMsgLength	=	pEntry->nReplyMsgLength;
			MessageList[k].nReHour			=	pEntry->nReHour;
			MessageList[k].nReMin			=	pEntry->nReMin;

			memcpy(MessageList[k].AuthorName, pEntry->szAuthorName, MAX_BBS_MESSAGE_AUTHORLENGTH);
			memcpy(MessageList[k].szMessage, pEntry->szMessage, pEntry->nMsgLength);
			memcpy(MessageList[k].szReplyMessage, pEntry->szReplyMessage, pEntry->nReplyMsgLength);
			k++;
		}
		CurIndex++;
		if(CurIndex == MAX_BBS_MESSAGE_NUM)
			CurIndex = 0;

	}

	INT titleLength = 0;
	CHAR*	pszTitle = pBBS->GetBBSTitle(titleLength);

	MsgBBS.SetObjID(pTargetHuman->GetID());
	MsgBBS.SetSerial(pBBS->GetSerial());
	MsgBBS.SetTitleLength(titleLength);
	MsgBBS.SetTitle(pszTitle);
	MsgBBS.SetMessageNum(k);
	MsgBBS.SetMessageData(MessageList);

	pGamePlayer->SendPacket(&MsgBBS);
	g_pLog->FastSaveLog( LOG_FILE_1, "CGBBSSychMessagesHandler::ObjID=%d"
		,pHuman->GetID()) ;
	return PACKET_EXE_CONTINUE ;

	__LEAVE_FUNCTION

		return PACKET_EXE_ERROR ;
}