⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mugongmanager.cpp

📁 墨香最新私服
💻 CPP
字号:
// MugongManager.cpp: implementation of the CMugongManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MugongManager.h"
#include "MapDBMsgParser.h"
#include "Player.h"
#include "UserTable.h"
#include "SkillManager_server.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMugongManager::CMugongManager()
{

}

CMugongManager::~CMugongManager()
{

}
void CMugongManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
	switch(Protocol)
	{
	case MP_MUGONG_MOVE_SYN:
		{
			MSG_MUGONG_MOVE_SYN * msg = (MSG_MUGONG_MOVE_SYN *)pMsg;
			CPlayer * pPlayer = (CPlayer *)g_pUserTable->FindUser(msg->dwObjectID);			
			if(!pPlayer) return;
			if(MoveMugong(pPlayer, msg->FromPos, msg->ToPos))
			{
				//努扼捞攫飘俊霸档 焊郴淋
				MSG_MUGONG_MOVE_ACK msg2;
				memcpy(&msg2, msg, sizeof(MSG_MUGONG_MOVE_SYN));
				msg2.Protocol = MP_MUGONG_MOVE_ACK;
				pPlayer->SendMsg(&msg2, sizeof(MSG_MUGONG_MOVE_ACK));
			}
			else
			{
				MSGBASE Msg;
				Msg.Category = MP_MUGONG;
				Msg.Protocol = MP_MUGONG_MOVE_NACK;
				pPlayer->SendMsg(&Msg, sizeof(Msg));
			}
		}
		break;
/*
			case MP_MUGONG_ADD_SYN:
				{
					MSG_MUGONG_ADD * msg = (MSG_MUGONG_ADD *)pMsg;
					CPlayer* pPlayer = (CPlayer *)g_pUserTable->FindUser(msg->dwObjectID);
					if(pPlayer == NULL)
						return;
					MUGONGMGR_OBJ->AddMugong(pPlayer, msg);
				}
				break;*/
	case MP_MUGONG_REM_SYN:
		{
			MSG_MUGONG_REM_SYN * msg = (MSG_MUGONG_REM_SYN *)pMsg;
			CPlayer* pPlayer = (CPlayer *)g_pUserTable->FindUser(msg->dwObjectID);
			if(pPlayer == NULL)
				return;
			if(RemMugong(pPlayer, msg->wMugongIdx, msg->TargetPos,eLog_MugongDiscard))
			{
				MSG_MUGONG_REM_ACK ToMsg;
				ToMsg.Category = MP_MUGONG;
				ToMsg.Protocol = MP_MUGONG_REM_ACK;
				ToMsg.dwObjectID = msg->dwObjectID;
				ToMsg.wMugongIdx = msg->wMugongIdx;
				ToMsg.TargetPos = msg->TargetPos;

				pPlayer->SendMsg(&ToMsg, sizeof(ToMsg));
			}
			else
			{
				MSGBASE Msg;
				Msg.Category = MP_MUGONG;
				Msg.Protocol = MP_MUGONG_REM_NACK;
				pPlayer->SendMsg(&Msg, sizeof(Msg));
			}
		}
		break;
	default:
		break;
	} 
}
BOOL CMugongManager::RemMugong(CPlayer * pPlayer, WORD wMugongIdx, POSTYPE TargetPos, BYTE bType)
{
	MUGONGBASE * pMugong = pPlayer->GetMugongBase(TargetPos);
	if(!pMugong || pMugong->wIconIdx != wMugongIdx)
		return FALSE;

	// db
	MugongDeleteToDB(pMugong->dwDBIdx);

	// Log 公傍 昏力
	InsertLogMugong( bType, pPlayer->GetID(), pMugong->wIconIdx, pMugong->dwDBIdx, pMugong->Sung, pMugong->ExpPoint );

	// 公傍沥焊 昏力
	memset(pMugong, 0, sizeof(MUGONGBASE));

	return TRUE;
}

BOOL CMugongManager::MoveMugong(CPlayer * pPlayer, POSTYPE FromPos, POSTYPE ToPos)
{	
	if(FromPos == ToPos)
		return FALSE;

	MUGONGBASE FromMugong = *pPlayer->GetMugongBase(FromPos);
	MUGONGBASE ToMugong = *pPlayer->GetMugongBase(ToPos);

	if( ToMugong.Position == 0 ) // 颗辨 磊府啊 厚绢 乐绰版快
	{
		FromMugong.Position = ToPos;
		pPlayer->SetMugongBase(FromPos, &ToMugong); // 扁粮 磊府 厚快扁
		pPlayer->SetMugongBase(FromMugong.Position, &FromMugong); // 货肺款 磊府俊 持扁

		MugongUpdateToDB(&FromMugong,"MOVE_NULL");
	}
	else
	{
		if( FromMugong.dwDBIdx == 0 )
			return FALSE;
		
		SWAPVALUE(FromMugong.Position, ToMugong.Position)
		ASSERT(FromMugong.Position);
		pPlayer->SetMugongBase(FromMugong.Position, &FromMugong);
		pPlayer->SetMugongBase(ToMugong.Position, &ToMugong);

		MugongMoveUpdateToDB(FromMugong.dwDBIdx, FromMugong.Position, ToMugong.dwDBIdx, ToMugong.Position, "MOVE_FROM");
	}

	//CharacterMugongUpdate(FromMugong);
	//CharacterMugongUpdate(ToMugong);

	return TRUE;
}

void CMugongManager::AddMugongDBResult(CPlayer * pPlayer, MUGONGBASE * pMugongBase)
{
	MSG_MUGONG_ADD_ACK msg;
	msg.Category = MP_MUGONG;
	msg.Protocol = MP_MUGONG_ADD_ACK;
	msg.dwObjectID = pPlayer->GetID();
	msg.MugongBase = *pMugongBase;

	pPlayer->SetMugongBase(pMugongBase->Position, pMugongBase);
	pPlayer->SendMsg(&msg, sizeof(MSG_MUGONG_ADD_ACK));

	// Log 公傍 裙垫..
	InsertLogMugong( eLog_MugongLearn, pPlayer->GetID(), pMugongBase->wIconIdx, pMugongBase->dwDBIdx, pMugongBase->Sung, pMugongBase->ExpPoint );
}
BOOL CMugongManager::AddMugong( CPlayer * pPlayer, WORD wMugongIdx, WORD ItemKind )
{
	// 吝汗 眉农
	if(pPlayer->GetMugongBaseByMugongIdx(wMugongIdx))
		return FALSE;
	
	// 飘府眉农
	CSkillInfo* pInfo = SKILLMGR->GetSkillInfo(wMugongIdx);
	if(pInfo->GetBeforeSkill())
	{
		if(pPlayer->GetMugongLevel(pInfo->GetBeforeSkill()) < 1)
			return FALSE;
	}

	// 后傍埃
	POSTYPE StartPos,EndPos;
	if(ItemKind == eMUGONG_ITEM_JINBUB)
	{
		StartPos = TP_JINBUB_START;
		EndPos = TP_JINBUB_END;
	}
	else
	{
		StartPos = TP_MUGONG_START;
		EndPos = TP_MUGONG_END;
	}

	POSTYPE ToPos = EndPos;
	MUGONGBASE* pMugong;
	for( POSTYPE n = StartPos ; n < EndPos ; ++n )
	{
		pMugong = pPlayer->GetMugongBase(n);
		if(pMugong->dwDBIdx == 0)
		{
			ToPos = n;
			break;
		}
	}
	if(ToPos == EndPos)
		return FALSE;

	BYTE weared = 0;
	switch(ConvAbsPos2MugongPos(ToPos))
	{
	case TP_MUGONG_START:
	case TP_JINBUB_START:
		weared = 1;
		break;
	}

	MUGONGBASE MugongBase;
	MugongBase.Position			= ToPos;
	MugongBase.dwDBIdx			= 9;
	MugongBase.ExpPoint			= 9;
	MugongBase.QuickPosition	= 9;
	MugongBase.Sung				= 9;
	MugongBase.wIconIdx			= wMugongIdx;

	pPlayer->SetMugongBase(MugongBase.Position, &MugongBase);

	ASSERTMSG(ToPos, "0锅 器瘤记俊 公傍阑 持栏妨 钦聪促.");
	//db
	MugongInsertToDB( pPlayer->GetID(), wMugongIdx, ToPos, weared );
	//CharacterMugongAdd(pPlayer->GetID(), wMugongIdx/*函券瞪公傍*/, ToPos, weared, 0);

	return TRUE;

/*
	BYTE weared;
	ITEMBASE* pItem;
	ITEM_INFO* pInfo;
	MSG_MUGONG_ADD_NACK Tomsg;
	CIconTable * pInventory = pPlayer->GetIconTable(msg->FromTableIdx);
	ITEMBASE item;

	MUGONGBASE * ToMugong = pPlayer->GetMugongBase(msg->ToAbsPosition);
	if(ToMugong->dwDBIdx != 0)
		goto SEND_MUGONG_ADD_NACK;

	// 捞固 公傍芒俊 粮犁窍绰 公傍牢啊?
	{
		pItem = pInventory->GetItemInfoAbs(msg->FromAbsPosition);
		if(pItem == NULL)
			goto SEND_MUGONG_ADD_NACK;
		if(pItem->dwDBIdx == 0)
			goto SEND_MUGONG_ADD_NACK;
		pInfo = ICONMNGR->GetItemInfo(pItem->wIconIdx);
		if(pPlayer->GetMugongBaseByMugongIdx(pInfo->MugongNum))
			goto SEND_MUGONG_ADD_NACK;
	}

	// 公傍氓 昏力
	if(pInventory->DeleteItemAbs(msg->FromAbsPosition, &item))
	{
		// DB俊辑 酒捞袍抛捞喉俊辑 昏力 窍绊, 公傍眠啊
		weared = 0;
		switch(ConvAbsPos2MugongPos(msg->ToAbsPosition))
		{
		case MUGONG_WEAREDPOSITION:
		case JINBUB_WEAREDPOSITION:
		case SIMBUB_WEAREDPOSITION:
			weared = 1;
			break;
		}
		ITEM_INFO * pMugongItem = ICONMNGR->GetItemInfo(item.wIconIdx);
		ASSERT(pMugongItem);
		CharacterMugongWear(msg->dwObjectID, item.dwDBIdx, pMugongItem->MugongNum, msg->ToAbsPosition, weared, item.Position);
		return TRUE;
	}

SEND_MUGONG_ADD_NACK:
	Tomsg.Category = MP_MUGONG;
	Tomsg.Protocol = MP_MUGONG_ADD_NACK;
	Tomsg.dwObjectID = pPlayer->GetID();
	pPlayer->SendMsg(&Tomsg,sizeof(MSG_MUGONG_ADD_NACK));

	return FALSE;*/

}
/*

void CMugongManager::AddMugongACK(CPlayer * pPlayer, MSG_MUGONG_ADD_ACK * msg)
{
	pPlayer->SetMugongBase(msg->mugong.Position, &msg->mugong);

	pPlayer->SendMsg(msg,sizeof(MSG_MUGONG_ADD_ACK));
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -