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

📄 player_parameter.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include "stdafx.h"
#include "Player.h"
#include "ItemManager.h"
#include "SKillManager.h"
#include <SCSKillSlotContainer.h>
#include <PacketStruct_DG.h>
#include <PacketStruct_AG.h>
#include <SCSlotContainer.h>
#include <ItemInfoParser.h>
#include "CharacterFormula.h"
#include "Party.h"
#include "PartyManager.h"
#include "MissionManager.h"
#include "QuestManager.h"
#include "QuickManager.h"
#include "QuickStyleManager.h"
#include <SCItemSlotContainer.h>
#include <SCQuickSlotContainer.h>
#include <SCQuickStyleSlotContainer.h>
#include "WarehouseSlotContainer.h"
#include "GMList.h"
#include "GameServer.h"
#include "Map.h"
#include "StatusManager.h"
#include "GameGuildManager.h"
#include "GameGuild.h"


VOID Player::OnSetCharInfo()
{	
	// HP, MP 雀汗伏
	BASE_PLAYERINFO * pInfo = SCPlayer::GetCharInfo();
	int iRecoverHP = CalcHPRecover( GetCharType(), pInfo->m_sVitality, GetStatusManager()->GetCondition(), pInfo->m_LV);
	int iRecoverMP = CalcMPRecover( GetCharType(), pInfo->m_sSpirit, GetStatusManager()->GetCondition() );

	m_Attr.SetCharInfo( pInfo, iRecoverHP, iRecoverMP );
	m_Attr.Update();

	// HP/MP max check
	SetHP( GetHP() );
	SetMP( GetMP() );

	if( GetCharType() == eCHAR_BERSERKER || GetCharType() == eCHAR_SHADOW )
	{
		SetMP( 0 );
	}

	// 促澜 肪诀 版氰摹甫 历厘秦敌促.
	SetNextExp();	

	// 泅犁 版氰摹俊 嘎档废 饭骇阑 犁炼沥茄促.
	FixLevel();
}

VOID Player::SerializeSkillTotalInfo( SKILL_TOTAL_INFO & rSkillInfo, eSERIALIZE eType  )
{
	if( eType == SERIALIZE_LOAD )
	{
		rSkillInfo.m_Count = 0;
		SKILLSLOT * pSkillSlot = rSkillInfo.m_Slot;
		POSTYPE total = 0;
		for(POSTYPE i=0;i<MAX_SKILL_SLOT_NUM;++i)
		{
			if( !GetSkillManager()->IsEmpty(i))
			{
				pSkillSlot[total].m_SkillPos = i;
				GetSkillManager()->SerializeSkillStream(pSkillSlot[total].m_SkillPos, &pSkillSlot[total].m_Stream,SERIALIZE_LOAD);
				++total;
				++rSkillInfo.m_Count;
			}
		}
	}
	else if( eType == SERIALIZE_STORE )
	{
		SKILLSLOT * pSlot = rSkillInfo.m_Slot;
		POSTYPE start = 0;
		POSTYPE total = rSkillInfo.m_Count;
		ASSERT( GetSkillManager()->GetSkillSlotContainer()->GetSlotNum() == 0 );
		for(POSTYPE i=start;i<total;++i)
			GetSkillManager()->SerializeSkillStream(pSlot[i].m_SkillPos, &pSlot[i].m_Stream,SERIALIZE_STORE);
	}
}
VOID Player::SerializeQuickTotalInfo( QUICK_TOTAL_INFO & QuickInfo, eSERIALIZE eType )
{
	if( eType == SERIALIZE_LOAD )
	{
		QuickInfo.m_Count = 0;
		QUICKSLOT * pSlot = QuickInfo.m_Slot;
		POSTYPE total = 0;
		for(POSTYPE i=0;i<QUICK_TOTAL_INFO::MAX_SLOT_NUM;++i)
		{
			if( !GetQuickManager()->IsEmpty(i) )
			{
				pSlot[total].m_QuickPos = i;
				GetQuickManager()->SerializeQuickStream(pSlot[total].m_QuickPos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
				++total;
				++QuickInfo.m_Count;
			}
		}
	}
	else if( eType == SERIALIZE_STORE )
	{
		ASSERT( GetQuickManager()->GetQuickSlotContainer()->GetSlotNum() == 0 );
		QUICKSLOT * pSlot = QuickInfo.m_Slot;
		POSTYPE start = 0;
		POSTYPE total = QuickInfo.m_Count;
		ASSERT( QuickInfo.m_Count < QUICK_TOTAL_INFO::MAX_SLOT_NUM );
		for(POSTYPE i=start;i<total;++i)
			GetQuickManager()->SerializeQuickStream(pSlot[i].m_QuickPos, &pSlot[i].m_Stream,SERIALIZE_STORE);


		// 贸澜 Quick沥焊甫 罐疽阑 版快!
		// QuickContainer甫 iterate窍搁辑 厘馒芒, 牢亥配府芒狼 葛电 沥焊甫 SCItemSlot狼 QPos阑 悸泼茄促.
	}
}

VOID Player::SerializeStyleTotalInfo( STYLE_TOTAL_INFO & Info, eSERIALIZE eType )
{
	if( eType == SERIALIZE_LOAD )
	{
		Info.m_Count = 0;
		STYLESLOT * pSlot = Info.m_Slot;
		POSTYPE total = 0;
		for(POSTYPE i=0;i<STYLE_TOTAL_INFO::MAX_SLOT_NUM;++i)
		{
			if( !GetStyleManager()->IsEmpty(i) )
			{
				pSlot[total].m_StylePos = i;
				GetStyleManager()->SerializeStyleStream(pSlot[total].m_StylePos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
				++total;
				++Info.m_Count;
			}
		}
	}
	else if( eType == SERIALIZE_STORE )
	{
		ASSERT( GetStyleManager()->GetQuickStyleSlotContainer()->GetSlotNum() == 0 );
		STYLESLOT * pSlot = Info.m_Slot;
		POSTYPE start = 0;
		POSTYPE total = Info.m_Count;
		ASSERT( Info.m_Count <= STYLE_TOTAL_INFO::MAX_SLOT_NUM );
		for(POSTYPE i=start;i<total;++i)
			GetStyleManager()->SerializeStyleStream(pSlot[i].m_StylePos, &pSlot[i].m_Stream,SERIALIZE_STORE);
	}
}
/*
VOID Player::SerializeEquipItemInfo( EQUIP_ITEM_INFO & OUT ItemInfoOut )
{
	ItemInfoOut.m_Count = 0;
	ITEMSLOTEX * pSlot = ItemInfoOut.m_Slot;
	POSTYPE total = 0;
	for(POSTYPE i=0;i<MAX_EQUIPMENT_SLOT_NUM;++i)
	{
		if( !GetItemManager()->IsEmpty(SI_EQUIPMENT,i) )
		{
			pSlot[total].m_ItemPos = i;
			GetItemManager()->SerializeItemStream(SI_EQUIPMENT,pSlot[total].m_ItemPos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
			++total;
			++ItemInfoOut.m_Count;
		}
	}
}*/

POSTYPE Player::SerializeEquipItemBaseInfo( ITEMSLOT * OUT pSlotOut )
{
	POSTYPE total = 0;
	for(POSTYPE i=0;i<MAX_EQUIPMENT_SLOT_NUM;++i)
	{
		if( !GetItemManager()->IsEmpty(SI_EQUIPMENT,i) )
		{
			pSlotOut[total].m_ItemPos = i;
			GetItemManager()->SerializeItemStream(SI_EQUIPMENT, pSlotOut[total].m_ItemPos, &pSlotOut[total].m_Stream, SERIALIZE_LOAD);
			++total;
		}
	}
	return total;
}

VOID Player::SerializeInventoryTotalInfo( INVENTORY_TOTAL_INFO & ItemInfo, eSERIALIZE eType )
{
	if( eType == SERIALIZE_LOAD )
	{
		ItemInfo.m_InvenCount = 0;
		ItemInfo.m_TmpInvenCount = 0;

		ITEMSLOTEX * pSlot = ItemInfo.m_Slot;
		POSTYPE total = 0;
		for(POSTYPE i=0;i<MAX_INVENTORY_SLOT_NUM;++i)
		{
			if( !GetItemManager()->IsEmpty(SI_INVENTORY,i) )
			{
				pSlot[total].m_ItemPos = i;
				GetItemManager()->SerializeItemStream(SI_INVENTORY,pSlot[total].m_ItemPos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
				++total;
				++ItemInfo.m_InvenCount;
			}
		}

		for(POSTYPE i=0;i<MAX_TEMPINVENTORY_SLOT_NUM;++i)
		{
			if( !GetItemManager()->IsEmpty(SI_TEMPINVENTORY,i) )
			{
				pSlot[total].m_ItemPos = i;
				GetItemManager()->SerializeItemStream(SI_TEMPINVENTORY,pSlot[total].m_ItemPos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
				++total;
				++ItemInfo.m_TmpInvenCount;
			}
		}
	}
	else if( eType == SERIALIZE_STORE )
	{
		ASSERT( m_pItemManager->GetItemSlotContainer(SI_INVENTORY)->GetSlotNum() == 0 );
		ASSERT( m_pItemManager->GetItemSlotContainer(SI_TEMPINVENTORY)->GetSlotNum() == 0 );
		ITEMSLOTEX * pSlot = ItemInfo.m_Slot;
		POSTYPE start = 0;
		POSTYPE total = ItemInfo.m_InvenCount;
		for(POSTYPE i=start;i<total;++i)
			GetItemManager()->SerializeItemStream(SI_INVENTORY,pSlot[i].m_ItemPos, &pSlot[i].m_Stream,SERIALIZE_STORE);

		start = total;
		total += ItemInfo.m_TmpInvenCount;
		for(POSTYPE i=start;i<total;++i)
			GetItemManager()->SerializeItemStream(SI_TEMPINVENTORY,pSlot[i].m_ItemPos, &pSlot[i].m_Stream,SERIALIZE_STORE);

		GetItemManager()->UpdateAttrForEquipItem();
	}
}
VOID Player::SerializeItemTotalInfo( ITEM_TOTAL_INFO & ItemInfo, eSERIALIZE eType )
{
	if( eType == SERIALIZE_LOAD )
	{
		ItemInfo.m_EquipCount = 0;
		ItemInfo.m_InvenCount = 0;
		ItemInfo.m_TmpInvenCount = 0;

		ITEMSLOTEX * pSlot = ItemInfo.m_Slot;
		POSTYPE total = 0;
		for(POSTYPE i=0;i<MAX_EQUIPMENT_SLOT_NUM;++i)
		{
			if( !GetItemManager()->IsEmpty(SI_EQUIPMENT,i) )
			{
				pSlot[total].m_ItemPos = i;
				GetItemManager()->SerializeItemStream(SI_EQUIPMENT,pSlot[total].m_ItemPos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
				++total;
				++ItemInfo.m_EquipCount;
			}
		}

		for(POSTYPE i=0;i<MAX_INVENTORY_SLOT_NUM;++i)
		{
			if( !GetItemManager()->IsEmpty(SI_INVENTORY,i) )
			{
				pSlot[total].m_ItemPos = i;
				GetItemManager()->SerializeItemStream(SI_INVENTORY,pSlot[total].m_ItemPos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
				++total;
				++ItemInfo.m_InvenCount;
			}
		}

		for(POSTYPE i=0;i<MAX_TEMPINVENTORY_SLOT_NUM;++i)
		{
			if( !GetItemManager()->IsEmpty(SI_TEMPINVENTORY,i) )
			{
				pSlot[total].m_ItemPos = i;
				GetItemManager()->SerializeItemStream(SI_TEMPINVENTORY,pSlot[total].m_ItemPos, &pSlot[total].m_Stream, SERIALIZE_LOAD);
				++total;
				++ItemInfo.m_TmpInvenCount;
			}
		}
	}
	else if( eType == SERIALIZE_STORE )
	{
		ASSERT( m_pItemManager->GetItemSlotContainer(SI_EQUIPMENT)->GetSlotNum() == 0 );
		ASSERT( m_pItemManager->GetItemSlotContainer(SI_INVENTORY)->GetSlotNum() == 0 );
		ASSERT( m_pItemManager->GetItemSlotContainer(SI_TEMPINVENTORY)->GetSlotNum() == 0 );

		ITEMSLOTEX * pSlot = ItemInfo.m_Slot;
		POSTYPE start = 0;
		POSTYPE total = ItemInfo.m_EquipCount;
		for(POSTYPE i=start;i<total;++i)
			GetItemManager()->SerializeItemStream(SI_EQUIPMENT,pSlot[i].m_ItemPos, &pSlot[i].m_Stream,SERIALIZE_STORE);

		start = total;
		total += ItemInfo.m_InvenCount;
		for(POSTYPE i=start;i<total;++i)
			GetItemManager()->SerializeItemStream(SI_INVENTORY,pSlot[i].m_ItemPos, &pSlot[i].m_Stream,SERIALIZE_STORE);

		start = total;
		total += ItemInfo.m_TmpInvenCount;
		for(POSTYPE i=start;i<total;++i)
			GetItemManager()->SerializeItemStream(SI_TEMPINVENTORY,pSlot[i].m_ItemPos, &pSlot[i].m_Stream,SERIALIZE_STORE);

		GetItemManager()->UpdateAttrForEquipItem();
	}
}

VOID Player::GetPlayerRenderInfo( PLAYER_RENDER_INFO * OUT pRenderInfo )
{
	WzVector vec;
	GetPos(&vec);
	BASE_PLAYERINFO * pInfo = SCPlayer::GetCharInfo();

	pRenderInfo->m_dwObjectKey			= GetObjectKey();
	pRenderInfo->m_byClass				= pInfo->m_byClassCode;
	pRenderInfo->m_LV					= pInfo->m_LV;
	pRenderInfo->m_HP					= GetHP();
	pRenderInfo->m_MaxHP				= GetMaxHP();
	pRenderInfo->m_wAttSpeedRatio		= GetAttr().GetAttSpeedRatio();
	pRenderInfo->m_wMoveSpeedRatio		= GetAttr().GetMoveSpeedRatio();
	pRenderInfo->m_BehaveState			= GetBehave();
	pRenderInfo->m_fPos[0]				= vec.x;
	pRenderInfo->m_fPos[1]				= vec.y;
	pRenderInfo->m_fPos[2]				= vec.z;
	pRenderInfo->m_SelectStyleCode		= pInfo->m_wSelectStyleCode;
	strncpy((char*)&(pRenderInfo->m_lpszName), pInfo->m_tszCharName, MAX_CHARNAME_LENGTH);

	pRenderInfo->m_byHair				= pInfo->m_byHair;	// 赣府葛剧
	pRenderInfo->m_byHeight				= pInfo->m_byHeight;// 虐
	pRenderInfo->m_byFace				= pInfo->m_byFace;	// 倔奔葛剧

	pRenderInfo->m_byHelmetOption		= GetHelmetOption();// 捧备 可记

	// GM 殿鞭 悸泼
	GM_INFO *pGMInfo = GMList::Instance()->FindGM( GetUserID() );
	if( pGMInfo )	pRenderInfo->m_byGMGrade = pGMInfo->m_byGrade;
	else			pRenderInfo->m_byGMGrade = 0;

	// 泅犁 惑怕
	pRenderInfo->m_byCondition = GetStatusManager()->GetCondition();

	// PC规 蜡历
	pRenderInfo->m_byPCBangUser = GetReservedValue() > 0 ? 1 : 0;

	// STATE_INFO甫 盲款促.
	STATE_INFO *pStateInfo = (STATE_INFO*)( (BYTE*)pRenderInfo + sizeof(PLAYER_RENDER_INFO) );
	pRenderInfo->m_byCount = GetStatusManager()->GetAllStatusInfo( pStateInfo );
}

⌨️ 快捷键说明

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