📄 gplayer.cc
字号:
//}
return GTS_NULL;
}
BOOL GPlayer::GetCurTaskPiece(GTask*& pTask,GTaskPiece*& pPiece,EGTaskStates& state, GNpc* pNpc)
{
U32 n;
//EGTaskStates state;
GTaskState* pState;
//从玩家任务状态,获取任务状态对话
//pGPlayer->GetTaskState(pTask);
for(GTaskStateMapIt it=m_arTaskStates.begin(); it != m_arTaskStates.end(); it++)
{
pState = (*it).second;
if(!pState)
continue;
if(pState->IsFinished())
continue;
pTask = (GTask*)pState->GetTask();
if(pTask == NULL)
continue;
//是否为本Npc拥有的任务
//if(pNpc && pNpc->ExistTask(pTask) || !pNpc)
if(!pNpc || pTask->IsOwnerNpc(pNpc))
{
if(pState->GetFitPiece(pPiece, state,U32(-1)))
return TRUE;
}//if
}//for
laFailed:
{
pTask = NULL;
pPiece = NULL;
state = GTS_NULL;
}
return FALSE;
}
BOOL GPlayer::IsFitToNpc(GTask* pTask,GNpc* pNpc)
{
GTaskState* pState;
if(!pTask)
return FALSE;
pState = GetTaskStatePtr(pTask->GetID());
if(!pState)
return FALSE;
return pState->IsFitToNpc(pNpc);
}
BOOL GPlayer::IsTaskFinished(GTaskBase* pBase)
{
U32 n;
GTaskState* pState;
GTask* pTask;
if(!pBase)
return FALSE;
//任务片段处理
if(pBase->IsTaskPiece())
{
GTaskPiece* pPiece = static_cast<GTaskPiece*>(pBase);
if(pPiece)
{
pTask = pPiece->GetOwnerTask();
if(pTask)
{
pState = GetTaskStatePtr(pTask->GetID());
if(!pState)
return FALSE;
return pState->IsTaskFinished(pPiece->GetIndex());
}
}
return FALSE;
}
//整体任务处理
else if(pBase->IsTask())
{
GTask* pTask = static_cast<GTask*>(pBase);
if(pTask)
{
pState = GetTaskStatePtr(pTask->GetID());
if(!pState)
return FALSE;
return pState->IsTaskFinished(-1);
}
}
return FALSE;
}
BOOL GPlayer::IsTaskRunning(GTask* pTask)
{
GTaskState* pState;
EGTaskStates state;
if(!pTask)
return FALSE;
pState = GetTaskStatePtr(pTask->GetID());
if(!pState)
return FALSE;
state = pState->GetState();
return state >= GTS_RUNNING && state < GTS_FINISHED;
}
BOOL GPlayer::IsAllPieceFinished(GTask* pTask)
{
GTaskState* pState;
if(!pTask)
return FALSE;
pState = GetTaskStatePtr(pTask->GetID());
if(!pState)
return FALSE;
return pState->IsAllPieceFinished();
}
void GPlayer::AddTaskState(GTaskState* pTaskState)
{
U32 dwID;
if(!pTaskState || !pTaskState->GetTask())
return;
dwID = pTaskState->GetTask()->GetID();
m_arTaskStates[dwID] = pTaskState;
}
GTaskState* GPlayer::InsertTaskState(GTask* pTask,EGTaskStates state, GNpc* pNpc)
{
GTaskState *pState;
U32 dwID;
if(!pTask)
return NULL;
dwID = pTask->GetID();
//确认任务状态
GTaskStateMapIt it = m_arTaskStates.find(dwID);
if(it == m_arTaskStates.end() || it->second == NULL)
{
pState = g_pRPGDataMan->NewTaskState();
m_arTaskStates[dwID] = pState;
pState->SetTaskState(pTask,state, pNpc);
pState->InitPieceStates(pTask->GetTaskPieceSize());
}
else
pState = it->second;
return pState;
}
void GPlayer::SetMoveTo(Point3F& pt,BOOL bPressDown)
{
AIPlayer* pPlayer = dynamic_cast<AIPlayer*>( GetGameBase() );
if(pPlayer)
{
pPlayer->setMoveTo(pt,false,bPressDown);
}
}
bool GPlayer::PlayMotion(StringTableEntry pIconTag)
{
GGoods* pGoods;
char iconTag[256];
dSprintf(iconTag,256,"%s%s",PRE_MOTION,pIconTag);
STE pIconLabel = StringTable->lookup(iconTag);
if(pIconLabel)
{
for(U32 n=ACTION_MOTION_INDEX; n<ACTION_MOTION_INDEX+ACTION_MOTION_AMOUNT; n++)
{
pGoods = m_arActions[n];
if(pGoods == NULL)
continue;
//Con::printf(pGoods->GetIconLabel());
if(pGoods->GetIconLabel() == pIconLabel)
{
return Parent::PlayMotion(pIconTag);
}
}//for
}//if
#ifdef TGE_RPGCLIENT
#endif
RPGChat::OutputTipF(TIP_MOTION_NONE, pIconTag);
return false;
}
//
//
//U32 GPlayer::AddGoodsToBag(GGoods* pGGoods,GGoodsArray*& pOwnerAdd)
//{
// //按任务、普通等物品类别,分别加到各槽中
// U32 nAdd = m_arBagGoods.AddGoods(pGGoods);
// if(nAdd == -1)
// {
// pOwnerAdd = NULL;
// return -1;
// }
//
// pOwnerAdd = &m_arBagGoods;
// return nAdd;
//}
//
//U32 GPlayer::ApplyGoodsToEquip(GGoods* pGGoods, U32 nBagIndex, GGoodsArray*& pOwnerAdd)
//{
// U32 slot;
// GGoods* pGEquip;
//
// if(pGGoods == NULL || !pGGoods->IsGoodsType(GGT_EQUIP) )
// return -1;
//
// // 1.取得装备类型,确定装备槽
// slot = pGGoods->GetSubType();
// if(slot >= EQUIP_SLOTNUM)
// return -1;
//
// // 2.卸下装备槽装备、并且放在背包中(通常在要待装备位置)
// pGEquip = m_arEquipments[slot];
// m_arBagGoods[nBagIndex] = pGEquip;
//
// // 3.把待装备装在槽中
// m_arEquipments[slot] = pGGoods;
//
// pOwnerAdd = &m_arEquipments;
// return slot;
//}
//----------------------------------------------------------------------------
void GPlayer::ProcessTick(const Move* pMove)
{
Parent::ProcessTick(pMove);
}
void GPlayer::InterpolateTick(F32 delta)
{
Parent::InterpolateTick(delta);
}
void GPlayer::AdvanceTime(F32 fTime)
{
Parent::AdvanceTime(fTime);
}
//U32 GPlayer::GetPacketDataChecksum(GameConnection*)
//{
// return 0;
//}
//void GPlayer::WritePacketData(GameConnection*, BitStream*)
//{
//}
//
//void GPlayer::ReadPacketData(GameConnection*, BitStream*)
//{
//}
U32 GPlayer::packUpdate(NetConnection *conn, U32 mask, BitStream *stream)
{
return Parent::packUpdate(conn, mask, stream);
// Check the mask for the ScaleMask; if it's true, pass that in.
//if (stream->writeFlag( mask & ScaleMask ) ) {
// mathWrite( *stream, Parent::getScale() );
//}
//if (stream->writeFlag((mask & DataBlockMask) && m_pDataBlock != NULL)) {
// stream->writeRangedU32(m_pDataBlock->getId(),
// DataBlockObjectIdFirst,
// DataBlockObjectIdLast);
//}
// cafTODO: ControlMask
return 0;
}
void GPlayer::unpackUpdate(NetConnection *con, BitStream *stream)
{
Parent::unpackUpdate(con, stream);
//if (stream->readFlag()) {
// VectorF scale;
// mathRead( *stream, &scale );
// setScale( scale );
//}
//if (stream->readFlag()) {
// RPGBaseData* dptr = 0;
// SimObjectId id = stream->readRangedU32(DataBlockObjectIdFirst,
// DataBlockObjectIdLast);
// if (!Sim::findObject(id,dptr) || !SetDataBlock(dptr))
// con->setLastError("Invalid packet GPlayer::unpackUpdate()");
//}
}
//----------------------------------------------------------------------------
//ConsoleMethod( GPlayer, GetDataBlock, S32, 2, 2, "()"
// "Return the datablock this GPlayer is using.")
//{
// return object->GetDataBlock()? object->GetDataBlock()->getId(): 0;
//}
void GPlayer::initPersistFields()
{
Parent::initPersistFields();
addField("mapIDName", TypeCaseString, Offset(m_dataPlayer.pMapIDName, GPlayer));
}
void GPlayer::consoleInit()
{
Parent::consoleInit();
// Con::addVariable("GPlayer::boundingBox", TypeBool, &gShowBoundingBox);
}
ConsoleMethod( GPlayer, LoadPCSelectorPlayerDatablock, bool , 3, 3, "Object.LoadPCSelectorPlayerDatablock(nIndex)")
{
//Player* pPlayer = dynamic_cast<Player*>(Sim::findObject(argv[3]));
return object->LoadPCSelectorPlayerDatablock(dAtoi(argv[2]));
}
#ifdef TGE_RPGCLIENT
///////////////////////////////////////////////////////////////////////
///@name UI界面更新接口
///@{
#define GPLAYER_TOUI_ConsoleMethod(NAME,FNAME)\
ConsoleMethod( GPlayer, EquipsToUI##NAME, void , 3, 3, "Object.EquipsToUI"##FNAME##"(uiBag)")\
{\
GuiCellArrayControl* pUIBag;\
if(Sim::findObject(argv[2], pUIBag))\
object->EquipsToUI##NAME(pUIBag);\
}
//ConsoleMethod( GPlayer, EquipsToUIEquipSlotArming, void , 3, 3, "Object.EquipsToUIEquipSlotArming(uiBag)")
//{
// GuiCellArrayControl* pUIBag;
// if(Sim::findObject(argv[2], pUIBag))
// object->EquipsToUIEquipSlotLeft(pUIBag);
//}
//gGPlayer.EquipsToUIEquipSlotArming("PlayUIBagArming");
//gGPlayer.EquipsToUIEquipSlotAdorn("PlayUIBagAdorn");
//gGPlayer.EquipsToUIBagGrid(0,"PlayUIBagGrid0");
GPLAYER_TOUI_ConsoleMethod(EquipSlotArming,"EquipSlotArming");
GPLAYER_TOUI_ConsoleMethod(EquipSlotAdorn,"EquipSlotAdorn");
ConsoleMethod( GPlayer, EquipsToUIBagGrid, void , 4, 4, "Object.EquipsToUIEquipSlotArming(uiBag,nIndex)")
{
GuiCellArrayControl* pUIBag;
char szUIName[128];
dSprintf(szUIName, 128, "%s%s",argv[2], argv[3]);
if(Sim::findObject(szUIName, pUIBag))
object->EquipsToUIBagGrid(pUIBag);
}
ConsoleMethod( GPlayer, SetMoveTo, void , 4, 4, "Object.SetMoveTo(pt, bPressDown)")
{
Point3F v( 0.0f, 0.0f, 0.0f );
dSscanf( argv[2], "%g %g %g", &v.x, &v.y, &v.z );
bool bPressDown = dAtob(argv[3]);
object->SetMoveTo( v, bPressDown);
}
//由PlayUi::onWake调用
ConsoleMethod(GPlayer,OnPlayerEnteredWorld,void,2,2,"OnPlayerEnteredWorld()")
{
object->OnPlayerEnteredWorld();
}
/// @}
#endif
//ConsoleMethod( GPlayer, AttachTSDatablock, bool , 3, 3, "Object.AttachTSDatablock(gameBaseData)")
//{
// PlayerData* pPlayerData = dynamic_cast<PlayerData*>(Sim::getDataBlockGroup()->findObject(argv[2]));
//
// return object->AttachTSDatablock(pPlayerData);
//}
};//namespace RPG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -