📄 player_parameter.cpp
字号:
#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 + -