bool NFCSceneAOIModule::CreateSceneNPC(const int nSceneID, const int nGroupID, const NFDataList& argList)
{
	NF_SHARE_PTR<NFCSceneInfo> pSceneInfo = GetElement(nSceneID);
	if (!pSceneInfo)
	{
		return false;
	}

	//prepare monster for player
	//create monster before the player enter the scene, then we can send monster's data by one message pack
	//if you create monster after player enter scene, then send monster's data one by one
	NF_SHARE_PTR<SceneSeedResource> pResource = pSceneInfo->mtSceneResourceConfig.First();
	for (; pResource; pResource = pSceneInfo->mtSceneResourceConfig.Next())
	{
		int nWeight = m_pKernelModule->Random(0, 100);
		if (nWeight <= pResource->nWeight)
		{
			const std::string& strClassName = m_pElementModule->GetPropertyString(pResource->strConfigID, NFrame::IObject::ClassName());

			NFDataList arg;
			arg << NFrame::IObject::Position() << pResource->vSeedPos;
			arg << NFrame::NPC::SeedID() << pResource->strSeedID;
			arg.Append(argList);

			m_pKernelModule->CreateObject(NFGUID(), nSceneID, nGroupID, strClassName, pResource->strConfigID, arg);
		}
	}

	return false;
}
Beispiel #2
0
bool NFCRecord::QueryRow(const int nRow, NFDataList& varList)
{
    if (!ValidRow(nRow))
    {
        return false;
    }

    if (!IsUsed(nRow))
    {
        return false;
    }

    varList.Clear();
    for (int i = 0; i < GetCols(); ++i)
    {
        NF_SHARE_PTR<NFData>& pVar = mtRecordVec.at(GetPos(nRow, i));
        if (pVar)
        {
            varList.Append(*pVar);
        }
        else
        {
            switch (GetColType(i))
            {
                case TDATA_INT:
                    varList.Add(NFINT64(0));
                    break;

                case TDATA_FLOAT:
                    varList.Add(0.0f);
                    break;

                case TDATA_STRING:
                    varList.Add(NULL_STR.c_str());
                    break;

                case TDATA_OBJECT:
                    varList.Add(NFGUID());
                    break;

				case TDATA_VECTOR2:
					varList.Add(NFVector2());
					break;

				case TDATA_VECTOR3:
					varList.Add(NFVector3());
					break;
                default:
                    return false;
                    break;
            }
        }
    }

    if (varList.GetCount() != GetCols())
    {
        return false;
    }

    return true;
}