NFGUID NFCHeroModule::ActiviteHero(const NFGUID & self, const string & strID)
{
	NFGUID id = AddHero(self, strID);
	if (!id.IsNull())
	{
		ActiviteHero(self, id);
	}

	return id;
}
int KScene::LuaAddHero(Lua_State* L)
{
    int     nResult         = 0;
    BOOL    bRetCode        = false;
    int     nTopIndex       = 0;
    DWORD   dwTemplateID    = ERROR_ID;
    int     nLevel          = 0;
    int     nSide           = 0;
    int     nAIType         = 0;
    KHero*  pHero           = NULL;
    int     nX              = 0;
    int     nY              = 0;
    int     nZ              = 0;
    int     nPos            = -1;
    int     nFaceDir        = csdInvalid;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 4 || nTopIndex == 7 || nTopIndex == 8);

    dwTemplateID    = (DWORD)Lua_ValueToNumber(L, 1);
    nLevel          = (int)Lua_ValueToNumber(L, 2);
    nSide           = (int)Lua_ValueToNumber(L, 3);
    nAIType         = (int)Lua_ValueToNumber(L, 4);

    if (nTopIndex == 7 || nTopIndex == 8)
    {
        nX = (int)Lua_ValueToNumber(L, 5);
        nY = (int)Lua_ValueToNumber(L, 6);
        nZ = (int)Lua_ValueToNumber(L, 7);
    }

    if (nTopIndex == 8)
        nFaceDir = (int)Lua_ValueToNumber(L, 8);

    bRetCode = GetFreePos(nSide, nPos);
    KGLOG_PROCESS_ERROR(bRetCode);

    pHero = AddHero(dwTemplateID, nLevel, nSide, nPos, nFaceDir);
    KGLOG_PROCESS_ERROR(pHero);

    pHero->SetPosition(nX, nY, nZ);

    if (nAIType != 0)
        pHero->m_AIData.nAIType = nAIType;
    
    pHero->m_bAiMode = true;
    pHero->SetUpAVM();

    g_PlayerServer.DoBroadcastNewHero(pHero, ERROR_ID);

    nResult = pHero->LuaGetObj(L);
Exit0:
    return nResult;
}