📄 gplayer.cc
字号:
//GPlayer.cc
/*/////////////////////////////////////////////////////////////////
李亦
liease@163.com 4040719
2006-7-18
/*/////////////////////////////////////////////////////////////////
#include "rpg/gobjects/GPlayer.h"
#include "rpg/RPGSetting.h"
#include "rpg/RPGChat.h"
#include "rpg/core/tIDDictionary.h"
#include "rpg/gobjects/GNpc.h"
#include "rpg/gobjects/GScene.h"
#include "rpg/gobjects/GTaskState.h"
#include "rpg/gobjects/GTask.h"
#include "rpg/RPGDataMan.h"
#ifdef TGE_RPGCLIENT
#include "game/aiPlayer.h"
#include "gui/containers/guiCellArrayCtrl.h"
#include "gui/controls/guiCellButtonCtrl.h"
#endif
namespace RPG
{
GPlayer* g_pGPlayer = NULL;
IMPLEMENT_CO_NETOBJECT_V1(GPlayer);
GPlayer::GPlayer()
//:m_arTaskStates(HASHSIZE)
{
m_dwRPGTypes |= GOT_PLAYER;
m_arEquipments.SetArrayType(GGAR_EQUIPARMING);
m_arActions.SetArrayType(GGAR_ACTIONBASE);
m_arKeyCells.SetArrayType(GGAR_FUNCKEYBAR);
ClearData(PCS_ALL);
//std::allocator<GPlayer> a;a.
}
GPlayer::~GPlayer()
{
}
//----------------------------------------------------------------------------
//bool GPlayer::onAdd()
//{
// if (!Parent::onAdd())
// return false;
// return true;
//}
//
//
//void GPlayer::onRemove()
//{
// Parent::onRemove();
//}
//bool GPlayer::OnNewDataBlock(RPGBaseData* dptr)
//{
// return true;
//}
//
//bool GPlayer::OnNewGameBase(GameBase* dptr)
//{
// return true;
//}
//void GPlayer::inspectPostApply()
//{
// Parent::inspectPostApply();
// GSetMaskBits(ExtendedInfoMask);
//}
//void tagGPlayer::ResetData()
//{
// Parent::ResetData();
//
// nLeftSP = 0;
//
//}
void GPlayer::ClearData(U32 dwState)
{
U32 n;
//装备槽
if(dwState & PCS_EQUIPMENTS)
{
m_arEquipments.setSize(EQUIP_SLOTNUM);
for(n = 0; n < EQUIP_SLOTNUM; n++)
m_arEquipments[n] = NULL;
}
//背包槽
if(dwState & PCS_BAGGOODS)
{
m_arBagGoods.setSize(BAG_SLOTNUM);
for(n = 0; n < BAG_SLOTNUM; n++)
m_arBagGoods[n] = NULL;
}
//技能槽
if(dwState & PCS_SKILLS)
{
m_arSkills.setSize(SKILL_SLOTNUM);
for(n = 0; n < SKILL_SLOTNUM; n++)
m_arSkills[n] = NULL;
}
if(dwState & PCS_ACTIONS)
{
m_arActions.setSize(ACTION_AMOUNT);
for(n = 0; n < ACTION_AMOUNT; n++)
m_arActions[n] = NULL;
}
if(dwState & PCS_KEYCELLS)
{
m_arKeyCells.setSize(KEY_CELL_AMOUNT);
for(n = 0; n < KEY_CELL_AMOUNT; n++)
m_arKeyCells[n] = NULL;
}
}
void GPlayer::SetCharacter(EGCareer career,EGClan clan,EGZone zone,U32 dwLevel)
{
Parent::SetCharacter( career, clan, zone, dwLevel);
m_dataPlayer.nLeftSP = dwLevel * RPG_UPGRADESP;
}
#ifdef TGE_RPGCLIENT
void GPlayer::OnPlayerEnteredWorld()
{
//输出欢迎信息
RPGChat::OutputTipF(TIP_WELCOME, GetCharName(),
g_pRPGSetting ? g_pRPGSetting->GetGameName() : "本系统");
//先调用.输出入手任务
OutputEntryTask();
//后调用
if(g_pGScene)
g_pGScene->UpdateAllTaskNpc(this);
}
void GPlayer::OutputEntryTask()
{
GTask* pTask;//,GTaskPiece*& pPiece,EGTaskStates& nState,
GNpc* pNpc;
GTaskState* pState;
for(GTaskStateMapIt it=m_arTaskStates.begin(); it!= m_arTaskStates.end(); it++)
{
pState = it->second;
if(!pState)
continue;
if(!pState->IsValid())
continue;
pState->UpdateToNpcState();
pTask = (GTask*)pState->GetTask();
if(!pTask || !pTask->IsTypeEntry())
continue;
pNpc = (GNpc*)pState->GetNpc();
if(pNpc)
RPGChat::OutputTipF(TIP_ENTRY_TASK,
pNpc->GetCharName(),
pNpc->GetXInt(),
pNpc->GetYInt(),
pTask->GetTaskName());
else
RPGChat::OutputTipF(TIP_ENTRY_TASK2, pTask->GetTaskName());
}//for
}
bool GPlayer::LoadPCSelectorPlayerDatablock(int nIndex)
{
if(nIndex < 0 || nIndex >= RPG_PC_MAX)
return false;
StringTableEntry sTSName = GetTSName();
StringTableEntry sPathTitle = GetPathTitle();
CSTR sShapeFile = avar("models/chars/%s/%s.dts",sPathTitle,sTSName);
Con::evaluatef("datablock PlayerData(PCSelectorPlayerDatablock%d){\nshapeFile = \"%s\";\n};",
nIndex,
sShapeFile);
SimDataBlock *pDBlock = dynamic_cast<SimDataBlock*>
(Sim::getDataBlockGroup()->findObject(avar("PCSelectorPlayerDatablock%d",nIndex)));
if(pDBlock)
{
char errorBuf[256];
return pDBlock->preload(false,errorBuf);
}
return false;//AttachTSDatablock(dynamic_cast<PlayerData*>(pDBlock));
}
void GPlayer::EquipsToUIGrid(Vector<GGoods*>& arGoods,GuiCellArrayControl* pUI,U32 nBase,U32 nAmout)
{
if(pUI == NULL)
return;
GGoods* pGoods;
U32 n;
U32 nMax;
pUI->initCells(nAmout);
Vector<StringTableEntry>& arCellNames = pUI->GetCellNames();
Vector<GuiCellButtonCtrl*>& arBtns = pUI->GetCellBtns();
/////////////////////////////////////////////////////////////
//设置图标
nMax = nBase + nAmout;
for(n=nBase; n< nMax; n++)
{
pGoods = arGoods[n];
if(pGoods == NULL)
{
arCellNames[n] = StringTable->getBlank();
}
else
{
arCellNames[n] = pGoods->GetIconLabel();
}
}//for
pUI->createCells();
////////////////////////////////////////////////////////////////
//更新提示信息
//for(n=nBase; n< nMax; n++)
//{
// if(arBtns[n] == NULL)
// continue;
// pGoods = arGoods[n];
// if(pGoods == NULL)
// {
// arBtns[n]->setTipText(NULL);
// }
// else
// {
// arBtns[n]->setTipText(pGoods->GetDesc());
// }
//}//for
}
#endif
BOOL GPlayer::SetTaskTo(GTask* pTask,GNpc* pNpc,EGTaskStates nState,U32 nPieceIndex)
{
GTaskState *pState;
if(!pNpc)
return FALSE;
pState = InsertTaskState(pTask, nState, pNpc);
if(!pState)
return FALSE;
if(!pTask->GetTaskPieceSize())
{
if(nState >= GTS_FINISHED)
{
if(pTask->CanRepeat())
nState = GTS_FREE;
}
pState->SetState(nState);
pState->SetCurPiece(NULL,GTS_NULL);
return TRUE;
}
if(nPieceIndex == -1)
{
//准备下一任务片段状态
if(nState >= GTS_FINISHED)
{
pState->ExecuteAllPiecePossible(pNpc,this,-1,FALSE);
//pState->SetPieceState(0,GTS_FREE);
if(pTask->CanRepeat())
nState = GTS_FREE;
}
pState->SetState(nState);
}
else
{
pState->SetPieceState(nPieceIndex,nState);
if(nState >= GTS_FINISHED)
pState->ExecuteAllPiecePossible(pNpc,this,nPieceIndex+1, FALSE);
//pState->SetPieceState(nPieceIndex+1,GTS_FREE);
}
return TRUE;
}
//BOOL GPlayer::GoalTask(GTask* pTask,GNpc* pNpc,U32 nPieceIndex)
//{
// GTaskState *pState;
//
// if(!pNpc)
// return FALSE;
//
// pState = InsertTaskState(pTask);
// if(!pState)
// return FALSE;
//
// //第一次接受任务状态
// if(nPieceIndex == -1)
// {
// pState->SetPieceState(0,GTS_COMMITTED);
// }
// //接受
// else
// {
// pState->SetPieceState(nPieceIndex,GTS_COMMITTED);
// }
//
// return TRUE;
//}
BOOL GPlayer::GetFitTask(GTask*& pTask,GTaskPiece*& pPiece,EGTaskStates& nState,GNpc* pToNpc)
{
GTaskState* pState;
if(!pToNpc)
return FALSE;
for(GTaskStateMapIt it=m_arTaskStates.begin(); it!= m_arTaskStates.end(); it++)
{
pState = it->second;
if(!pState)
continue;
//if(!pState->IsValid())
if(pState->IsFinished())
continue;
if(pState->GetFitPiece(pPiece, nState, pToNpc) )
{
pTask = (GTask*)pState->GetTask();
if(pPiece)
nState = pPiece->UpdateTaskState(this, pToNpc, nState);
else
nState = pTask->UpdateTaskState(this, pToNpc, nState);
return TRUE;
}
}//for
return FALSE;
}
EGTaskStates GPlayer::GetTaskState(U32 dwID)
{
EGTaskStates nState;
GTaskPiece* pPiece;
GTask* pTask;
GTaskState* pState;
//if(n >= m_arTaskStates.size())
// return GTS_NULL;
GTaskStateMapIt it = m_arTaskStates.find(dwID);
if(it == m_arTaskStates.end())
return GTS_NULL;
pState = (*it).second;
if(!pState)
return GTS_NULL;
//GTASKSTATE& taskState = m_arTaskStates[dwID];
pTask = (GTask*)pState->GetTask();
if(!pTask)
return GTS_NULL;
nState = pTask->UpdateTaskState(this,NULL, pState->GetState());
pState->SetTaskState(nState);
//taskState.nState = nState;
if(nState >= GTS_FINISHED)
return nState;
if(pState->GetFitPiece(pPiece,nState,(U32)-1))
{
if(nState != GTS_NULL)
return nState;
}
//pPiece = pState->pTaskPiece;
//if(pPiece)
//{
// nState = pPiece->UpdateTaskState(pState->nPieceState, this);
// taskState.nPieceState = nState;
// if(nState >= GTS_FINISHED)
// return nState;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -