Esempio n. 1
0
int KCustomEquipInfo::LuaGetMagicAttrib(Lua_State* L)
{
	int nResult     = false;
	int nRelIndex   = 0;
    int nTable      = 0;

	Lua_NewTable(L);

	nTable = Lua_GetTopIndex(L);

	for(int i = 0; i < MAX_ITEM_MAGIC_COUNT; ++i)
	{
		KAttribInfo* pInfo = g_pSO3World->m_ItemManager.m_ItemLib.GetAttribInfo(nAttribIndex[i]);
		if (pInfo && pInfo->nAttribID != atInvalid)
		{
			++nRelIndex;

			Lua_PushNumber(L, nRelIndex);
			Lua_NewTable(L);
			int nAttrib = Lua_GetTopIndex(L);

			Lua_PushString(L, "nID");
			Lua_PushNumber(L, pInfo->nAttribID);
			Lua_SetTable(L, nAttrib);

			Lua_PushString(L, "nImportance");
			Lua_PushNumber(L, pInfo->nImportance);
			Lua_SetTable(L, nAttrib);

			for (int j = 0; j < MAX_ATTRIB_PARAM_NUM; ++j)
			{
				char szKey[16];
				sprintf(szKey, "%s%d", "Param", (j * 2));

				Lua_PushString(L, szKey);
				Lua_PushNumber(L, pInfo->Param[j].nMin);
				Lua_SetTable(L, nAttrib);

				sprintf(szKey, "%s%d", "Param", (j * 2 + 1));
				Lua_PushString(L, szKey);
				Lua_PushNumber(L, pInfo->Param[j].nMax);
				Lua_SetTable(L, nAttrib);
			}

			Lua_SetTable(L, nTable);
		}
	}

	nResult = true;
Exit0:
	if (!nResult) 
		Lua_PushNil(L);
	return 1;
}
Esempio n. 2
0
int KTeamClient::LuaGetTeamMemberList(Lua_State* L)
{
    int nResult     = 0;
    int nRetCode    = 0;
    int nToble      = 0;
    int nIndex      = 1;
    int nTopIndex   = 0;

    nTopIndex = Lua_GetTopIndex(L);
    // KGLOG_PROCESS_ERROR(nTopIndex == 0);

    Lua_NewTable(L);
    int nTable = Lua_GetTopIndex(L);

    for (int i = 0; i < m_nGroupNum; i++)
    {
        for (
            KTEAM_MEMBER_LIST::iterator it = m_TeamGroup[i].MemberList.begin();
            it != m_TeamGroup[i].MemberList.end(); ++it
        )
        {
            Lua_PushNumber(L, nIndex);
            Lua_PushNumber(L, it->dwMemberID);
            Lua_SetTable(L, nTable);

            nIndex++;
        }
    }

    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 3
0
int KSkillList::_LuaGetSkillKungfuList(Lua_State* L, DWORD dwSchollID)
{
	std::map<DWORD, DWORD> KungfuList;
	for (PLAYER_SKILL_LIST::iterator it = m_PlayerSkillList.begin(); it != m_PlayerSkillList.end(); ++it)
	{
		KSkill* pSkill = g_pSO3World->m_SkillManager.GetSkill_RAW(it->first, it->second.dwLevel);
		if(pSkill && 
			dwSchollID == pSkill->m_pBaseInfo->dwBelongSchool && 
			pSkill->m_pBaseInfo->dwBelongKungfu == 0)
		{
			KungfuList[it->first] = it->second.dwLevel;
		}
	}

	Lua_NewTable(L);
	int nTable = Lua_GetTopIndex(L);
	for (std::map<DWORD, DWORD>::iterator it = KungfuList.begin(); it != KungfuList.end(); ++it)
	{
		Lua_PushNumber(L, it->first);
		Lua_PushNumber(L, it->second);
		Lua_SetTable(L, nTable);
	}

	return 1;
}
Esempio n. 4
0
int KTeamClient::LuaGetGroupInfo(Lua_State* L)
{
    int nResult     = 0;
    int nTopIndex   = 0;
    int nTable      = 0;
    int nSubTable   = 0;
    int nTeamGroup  = 0;
    int nIndex      = 0;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 1);

    KGLOG_PROCESS_ERROR(m_dwTeamID != ERROR_ID);

    nTeamGroup = (int)Lua_ValueToNumber(L, 1);

    KGLOG_PROCESS_ERROR(nTeamGroup >= 0 && nTeamGroup < m_nGroupNum);

    Lua_NewTable(L);
    nTable = Lua_GetTopIndex(L);

    Lua_PushString(L, "dwFormationLeader");
    Lua_PushNumber(L, m_TeamGroup[nTeamGroup].dwFormationLeader);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "MemberList");
    Lua_NewTable(L);
    nSubTable = Lua_GetTopIndex(L);

    for (
        KTEAM_MEMBER_LIST::iterator it = m_TeamGroup[nTeamGroup].MemberList.begin();
        it != m_TeamGroup[nTeamGroup].MemberList.end(); ++it
    )
    {
        Lua_PushNumber(L, ++nIndex);
        Lua_PushNumber(L, it->dwMemberID);
        Lua_SetTable(L, nSubTable);
    }

    Lua_SetTable(L, nTable);

    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 5
0
//---------------------------------------------------------------------------
// 函数:	Lua_SetTable_CFunFromName
// 功能:	
// 参数:	Lua_State * L
// 参数:	int nIndex
// 参数:	const char * szMemberName
// 参数:	Lua_CFunction CFun
// 返回:	int 
//---------------------------------------------------------------------------
int Lua_SetTable_CFunFromName(Lua_State * L, int nIndex, const char * szMemberName, Lua_CFunction CFun)
{
	if (! Lua_IsTable(L, nIndex))
		return 0;
	Lua_PushString(L, szMemberName);
	Lua_PushCFunction(L, CFun);
	Lua_SetTable(L, nIndex);
	return 1;
}
Esempio n. 6
0
//---------------------------------------------------------------------------
// 函数:	Lua_SetTable_StringFromId
// 功能:	
// 参数:	Lua_State * L
// 参数:	int nIndex
// 参数:	int Id
// 参数:	const char * szString
// 返回:	int 
//---------------------------------------------------------------------------
int Lua_SetTable_StringFromId(Lua_State * L, int nIndex, int Id, const char * szString)
{
	if (! Lua_IsTable(L, nIndex))
		return 0;
	Lua_PushNumber(L, (double)Id);
	Lua_PushString(L, szString);
	Lua_SetTable(L, nIndex);
	return 1;
}
Esempio n. 7
0
//---------------------------------------------------------------------------
// 函数:	Lua_SetTable_IntFromId
// 功能:	
// 参数:	Lua_State * L
// 参数:	int nIndex
// 参数:	int Id
// 参数:	int nNumber
// 返回:	int 
//---------------------------------------------------------------------------
int Lua_SetTable_IntFromId(Lua_State * L, int nIndex, int Id, int nNumber)
{
	if (! Lua_IsTable(L, nIndex))
		return 0;
	Lua_PushNumber(L, (double) Id);
	Lua_PushNumber(L, (double) nNumber);
	Lua_SetTable(L, nIndex);
	return 1;
}
Esempio n. 8
0
//---------------------------------------------------------------------------
// 函数:	Lua_SetTable_CFunFromId
// 功能:	
// 参数:	Lua_State * L
// 参数:	int nIndex
// 参数:	int nId
// 参数:	Lua_CFunction CFun
// 返回:	int 
//---------------------------------------------------------------------------
int Lua_SetTable_CFunFromId(Lua_State * L, int nIndex, int nId, Lua_CFunction CFun)
{
	if (! Lua_IsTable(L, nIndex))
		return 0;
	Lua_PushNumber(L, nId);
	Lua_PushCFunction(L, CFun);
	Lua_SetTable(L, nIndex);
	return 1;
}
Esempio n. 9
0
int KItem::LuaGetTemporaryEnchantAttrib(Lua_State* L)
{
    int nFirst = true;
    int nResult = 0;
    int nIndex  = 1;

    KGLOG_PROCESS_ERROR(Lua_GetTopIndex(L) == 0);
    KG_PROCESS_ERROR(m_pTemporaryEnchant);
    KG_PROCESS_ERROR(m_pTemporaryEnchant->pAttribute);
    for (KAttribute* pAttribute = m_pTemporaryEnchant->pAttribute; pAttribute; pAttribute = pAttribute->pNext)
    {
        if (pAttribute->nKey != atInvalid)
        {
            if (nFirst)
            {
                Lua_NewTable(L);
                nFirst = false;
            }

            Lua_PushNumber(L, nIndex);
            nIndex++;
            Lua_NewTable(L);

            Lua_PushString(L, "nID");
            Lua_PushNumber(L, pAttribute->nKey);
            Lua_SetTable(L, -3);

            Lua_PushString(L, "nValue1");
            Lua_PushNumber(L, pAttribute->nValue1);
            Lua_SetTable(L, -3);

            Lua_PushString(L, "nValue2");
            Lua_PushNumber(L, pAttribute->nValue2);
            Lua_SetTable(L, -3);

            Lua_SetTable(L, -3);
        }
    }

    if (!nFirst)
        nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 10
0
//---------------------------------------------------------------------------
// 函数:	Lua_SetTable_StringFromName
// 功能:	
// 参数:	Lua_State * L
// 参数:	int nIndex
// 参数:	const char * szMemberName
// 参数:	char * szString
// 返回:	int 
//---------------------------------------------------------------------------
int Lua_SetTable_StringFromName(Lua_State * L ,int nIndex, const char * szMemberName, char * szString)
{
	
	if (! Lua_IsTable(L, nIndex))
		return 0;
	Lua_PushString(L, szMemberName);
	Lua_PushString(L, szString);
	Lua_SetTable(L, nIndex);
	return 1;
	
}
Esempio n. 11
0
int	KSkillList::_LuaGetAllSkillList(Lua_State* L)
{
	Lua_NewTable(L);
	for (PLAYER_SKILL_LIST::iterator it = m_PlayerSkillList.begin(); it != m_PlayerSkillList.end(); ++it)
	{
		Lua_PushNumber(L, it->first);
		Lua_PushNumber(L, it->second.dwLevel);
		Lua_SetTable(L, -3);
	}
	return 1;
}
Esempio n. 12
0
//---------------------------------------------------------------------------
// 函数:	Lua_SetTable_IntFromName
// 功能:	
// 参数:	Lua_State * L
// 参数:	int nIndex
// 参数:	const char * szMemberName
// 参数:	int Number
// 返回:	int 
//---------------------------------------------------------------------------
int Lua_SetTable_IntFromName(Lua_State * L, int nIndex, const char * szMemberName, int Number)
{

	if (! Lua_IsTable(L, nIndex))
		return 0;
	Lua_PushString(L, szMemberName);
	Lua_PushNumber(L, (double)Number);
	Lua_SetTable(L, nIndex);
	return 1;
	
}
Esempio n. 13
0
int KItem::LuaGetRequireAttrib(Lua_State* L)
{
    int nRelIndex = 0;

    assert(L);

    Lua_NewTable(L);
    int nTable = Lua_GetTopIndex(L);
    for (KAttribute* pAttribute = m_pRequireAttr; pAttribute; pAttribute = pAttribute->pNext)
    {
        if (pAttribute->nKey != atInvalid)
        {
            ++nRelIndex;

            Lua_PushNumber(L, nRelIndex);

            Lua_NewTable(L);
            int nAttrib = Lua_GetTopIndex(L);

            Lua_PushString(L, "nID");
            Lua_PushNumber(L, pAttribute->nKey);
            Lua_SetTable(L, nAttrib);

            Lua_PushString(L, "nValue1");
            Lua_PushNumber(L, pAttribute->nValue1);
            Lua_SetTable(L, nAttrib);

            Lua_PushString(L, "nValue2");
            Lua_PushNumber(L, pAttribute->nValue2);
            Lua_SetTable(L, nAttrib);

            Lua_SetTable(L, nTable);
        }
    }

    return 1;
}
Esempio n. 14
0
int KCustomEquipInfo::LuaGetRequireAttrib(Lua_State* L)
{
	int nRelIndex   = 0;
    int nTable      = 0;

	assert(L);

	Lua_NewTable(L);

	nTable = Lua_GetTopIndex(L);

	for(int i = 0; i < MAX_ITEM_REQUIRE_COUNT; ++i)
	{
		if (RequireAttrib[i].nAttribID != atInvalid)
		{
			++nRelIndex;

			Lua_PushNumber(L, nRelIndex);

			Lua_NewTable(L);
			int nAttrib = Lua_GetTopIndex(L);

			Lua_PushString(L, "nID");
			Lua_PushNumber(L, RequireAttrib[i].nAttribID);
			Lua_SetTable(L, nAttrib);

			Lua_PushString(L, "nValue");
			Lua_PushNumber(L, RequireAttrib[i].nValue);
			Lua_SetTable(L, nAttrib);

			Lua_SetTable(L, nTable);
		}
	}

	return 1;
}
Esempio n. 15
0
int LuaTimeToDate(Lua_State* L)
{
    int         nTopIndex   = 0;
    time_t      nTime       = 0;
    struct tm*  ptmTime     = NULL;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 1);

    nTime = (time_t)Lua_ValueToNumber(L, 1);
    ptmTime = localtime(&nTime);
    KGLOG_PROCESS_ERROR(ptmTime);

    Lua_NewTable(L);

    Lua_PushString(L, "year");
    Lua_PushNumber(L, ptmTime->tm_year + 1900);
    Lua_SetTable(L, -3);

    Lua_PushString(L, "month");
    Lua_PushNumber(L, ptmTime->tm_mon + 1);
    Lua_SetTable(L, -3);

    Lua_PushString(L, "day");
    Lua_PushNumber(L, ptmTime->tm_mday);
    Lua_SetTable(L, -3);

    Lua_PushString(L, "hour");
    Lua_PushNumber(L, ptmTime->tm_hour);
    Lua_SetTable(L, -3);

    Lua_PushString(L, "minute");
    Lua_PushNumber(L, ptmTime->tm_min);
    Lua_SetTable(L, -3);

    Lua_PushString(L, "second");
    Lua_PushNumber(L, ptmTime->tm_sec);
    Lua_SetTable(L, -3);

    Lua_PushString(L, "weekday");
    Lua_PushNumber(L, ptmTime->tm_wday);
    Lua_SetTable(L, -3);

    return 1;
Exit0:
    return 0;
}
Esempio n. 16
0
int LuaResetMap(Lua_State* L)
{
    int     nResult     = 0;
    BOOL    bRetCode    = false;
    int     nTopIndex   = 0;
    DWORD   dwPlayerID  = ERROR_ID;
    DWORD   dwMapID     = 0;
    int     nCopySN     = 0;
    int     i           = 1;
    std::vector<DWORD> vecFailedMap;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 3);
    
    dwPlayerID  = (DWORD)Lua_ValueToNumber(L, 1);
    dwMapID     = (DWORD)Lua_ValueToNumber(L, 2);
    nCopySN     = (int)Lua_ValueToNumber(L, 3);

    if (dwMapID == 0)
    {
        g_pSO3GameCenter->m_MapManager.ResetAllMap(dwPlayerID, vecFailedMap);
    }
    else
    {
        bRetCode = g_pSO3GameCenter->m_MapManager.ResetMap(dwPlayerID, dwMapID, nCopySN);
        if (!bRetCode)
        {
            vecFailedMap.push_back(dwMapID);
        }
    }
    
    Lua_NewTable(L);
    
    for (std::vector<DWORD>::iterator it = vecFailedMap.begin(); it != vecFailedMap.end(); ++it, ++i)
    {
        Lua_PushNumber(L, i);
        Lua_PushNumber(L, *it);
        Lua_SetTable(L, -3);
    }
    
    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 17
0
int LuaGetAccountRoleList(Lua_State* L)
{
    int         nRoleCount  = 0;
    int         nResult     = 0;
    int         nRetCode    = 0;
    int         nTopIndex   = 0;
    int         nTableIndex = 0;
    const char* pszAcc      = NULL;
    KAccount*   pAccount    = NULL;
    KRole*      pRole       = NULL;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 1);

    pszAcc = Lua_ValueToString(L, 1);
    KGLOG_PROCESS_ERROR(pszAcc);

    pAccount = g_pSO3GameCenter->m_RoleManager.GetAccount(pszAcc);
    KG_PROCESS_ERROR(pAccount);

    Lua_NewTable(L);
    nTableIndex = Lua_GetTopIndex(L);

    nRoleCount = (int)pAccount->vRoleList.size();

    for (int i = 0; i < nRoleCount; i++)
    {
        pRole = pAccount->vRoleList[i];

        assert(pRole);
        
        Lua_PushNumber(L, i + 1);
        nRetCode = pRole->LuaGetObj(L);
        KGLOG_PROCESS_ERROR(nRetCode);

        Lua_SetTable(L, nTableIndex);
    }

    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 18
0
int LuaGetMapList(Lua_State* L)
{
    int nIndex = 1;
    std::vector<DWORD> vecMapList;
    
    g_pSO3GameCenter->m_MapManager.GetMapList(vecMapList);

    Lua_NewTable(L);

    for (std::vector<DWORD>::iterator it = vecMapList.begin(); it != vecMapList.end(); ++it)
    {
        Lua_PushNumber(L, nIndex);
        Lua_PushNumber(L, *it);

        Lua_SetTable(L, -3);
        nIndex++;
    }
    
    return 1;
}
Esempio n. 19
0
int KTeamClient::LuaGetTeamMark(Lua_State *L)
{
    int         nResult = 0;

    KGLOG_PROCESS_ERROR(m_dwTeamID != ERROR_ID);

    lua_newtable(L);
    for (int i = 0; i < _countof(m_dwTeamMark); i++)
    {
        if (m_dwTeamMark[i] == 0)
            continue;

        Lua_PushNumber(L, m_dwTeamMark[i]);
        Lua_PushNumber(L, i + 1);	// 0 = Cancel, so MarkID begin with 1
        Lua_SetTable(L, -3);
    }

    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 20
0
int KSkillList::_LuaGetSkillSchoolList(Lua_State* L)
{
	std::map<DWORD, int> SchoolList;
	for (PLAYER_SKILL_LIST::iterator it = m_PlayerSkillList.begin(); it != m_PlayerSkillList.end(); ++it)
	{
		KSkill* pSkill = g_pSO3World->m_SkillManager.GetSkill_RAW(it->first, it->second.dwLevel);
		if(pSkill)
			SchoolList[pSkill->m_pBaseInfo->dwBelongSchool] = true;
	}

	Lua_NewTable(L);
	int nTable = Lua_GetTopIndex(L);
	int nIndex = 0;
	for (std::map<DWORD, int>::iterator it = SchoolList.begin(); it != SchoolList.end(); ++it)
	{
		++nIndex;
		Lua_PushNumber(L, nIndex);
		Lua_PushNumber(L, it->first);
		Lua_SetTable(L, nTable);
	}

	return 1;
}
Esempio n. 21
0
int LuaGetPlayerSavedCopys(Lua_State* L)
{
    int         nResult     = 0;
    BOOL        bRetCode    = false;
    int         nTopIndex   = 0;
    DWORD       dwMapID     = 0;
    DWORD       dwPlayerID  = 0;
    KMapInfo*   pMapInfo    = NULL;
    int         nIndex      = 0;
    std::vector<int> vecSavedCopys;
    
    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 2);
    
    dwMapID     = (DWORD)Lua_ValueToNumber(L, 1);
    dwPlayerID  = (DWORD)Lua_ValueToNumber(L, 2);
    
    pMapInfo = g_pSO3GameCenter->m_MapManager.GetMapInfo(dwMapID);
    KGLOG_PROCESS_ERROR(pMapInfo);

    bRetCode = pMapInfo->GetPlayerSavedCopys(dwPlayerID, vecSavedCopys);
    KGLOG_PROCESS_ERROR(bRetCode);
    
    Lua_NewTable(L);

    for (std::vector<int>::iterator it = vecSavedCopys.begin(); it != vecSavedCopys.end(); ++it)
    {
        Lua_PushNumber(L, ++nIndex);
        Lua_PushNumber(L, *it);

        Lua_SetTable(L, -3);
    }

    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 22
0
int LuaGetPQByTemplate(Lua_State* L)
{
    int     nResult         = 0;
    BOOL    bRetCode        = 0;
    DWORD   dwPQTemplateID  = ERROR_ID;
    int     nTopIndex       = 0;
    int     nIndex          = 0;
    FIND_PQID_BY_TEMPLATE   FindPQ;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 1);

    dwPQTemplateID = (DWORD)Lua_ValueToNumber(L, 1);

    FindPQ.m_dwTemplateID = dwPQTemplateID;
    FindPQ.m_PQIDVector.clear();

    bRetCode = g_pSO3GameCenter->m_PQCenter.Traverse(FindPQ);
    KG_PROCESS_ERROR(bRetCode);

    Lua_NewTable(L);

    for (
        std::vector<DWORD>::iterator it = FindPQ.m_PQIDVector.begin(), itEnd = FindPQ.m_PQIDVector.end(); 
        it != itEnd; 
        ++it
    )
    {
        Lua_PushNumber(L, ++nIndex);
        Lua_PushNumber(L, *it);

        Lua_SetTable(L, -3);
    }

Exit0:
    return 1;
}
Esempio n. 23
0
    int LuaGetHometownList(Lua_State* L)
    {
        const KUI_HOMETOWN_MAP_TABLE&   HometownList        = g_GatewayClient.GetHometownList();
        int                             nHometownMapCount   = (int)HometownList.size();

		Lua_NewTable(L);

		for (int nMap = 0; nMap < nHometownMapCount; ++nMap)
		{
            int nCopyCount = (int)HometownList[nMap].LoadFactorTable.size();
			
			Lua_PushNumber(L, nMap);
			Lua_NewTable(L);

			lua_pushliteral(L, "MapID");
			Lua_PushNumber(L, HometownList[nMap].dwMapID);
			Lua_SetTable(L, -3);

			lua_pushliteral(L, "Copy");
			Lua_NewTable(L);

            for (int nCopy = 0; nCopy < nCopyCount; ++nCopy)
            {
				Lua_PushNumber(L, nCopy + 1);
				Lua_NewTable(L);

				lua_pushliteral(L, "CopyIndex");
			    Lua_PushNumber(L, HometownList[nMap].LoadFactorTable[nCopy].dwCopyIndex);
			    Lua_SetTable(L, -3);

				lua_pushliteral(L, "LoadFactor");
				Lua_PushNumber(L, HometownList[nMap].LoadFactorTable[nCopy].nLoadFactor);
			    Lua_SetTable(L, -3);

				Lua_SetTable(L, -3); // nCopyCount
			}

			Lua_SetTable(L, -3); // Copy
			Lua_SetTable(L, -3); // nIndex
		}

        return 1;
    }
Esempio n. 24
0
int KItem::LuaGetBaseAttrib(Lua_State* L)
{
    int nRelIndex = 0;

    assert(L);

    Lua_NewTable(L);
    int nTable = Lua_GetTopIndex(L);

    for (KAttribute* pAttribute = m_pBaseAttr; pAttribute; pAttribute = pAttribute->pNext)
    {
        if (pAttribute->nKey != atInvalid)
        {
            if (pAttribute->nKey == atMeleeWeaponDamageRand || pAttribute->nKey == atRangeWeaponDamageRand)
                continue;

            ++nRelIndex;

            Lua_PushNumber(L, nRelIndex);

            Lua_NewTable(L);
            int nAttrib = Lua_GetTopIndex(L);

            Lua_PushString(L, "nID");
            Lua_PushNumber(L, pAttribute->nKey);
            Lua_SetTable(L, nAttrib);

            Lua_PushString(L, "nValue1");
            Lua_PushNumber(L, pAttribute->nValue1);
            Lua_SetTable(L, nAttrib);

            int nValue2 = pAttribute->nValue2;
            if (pAttribute->nKey == atMeleeWeaponDamageBase)
            {
                nValue2 = pAttribute->nValue1;
                for (KAttribute* pAttributeRand = m_pBaseAttr;
                        pAttributeRand; pAttributeRand = pAttributeRand->pNext)
                {
                    if (pAttributeRand->nKey == atMeleeWeaponDamageRand)
                    {
                        nValue2 += pAttributeRand->nValue1;
                    }
                }
            }

            if (pAttribute->nKey == atRangeWeaponDamageBase)
            {
                nValue2 = pAttribute->nValue1;
                for (KAttribute* pAttributeRand = m_pBaseAttr;
                        pAttributeRand; pAttributeRand = pAttributeRand->pNext)
                {
                    if (pAttributeRand->nKey == atRangeWeaponDamageRand)
                    {
                        nValue2 += pAttributeRand->nValue1;
                    }
                }
            }

            Lua_PushString(L, "nValue2");
            Lua_PushNumber(L, nValue2 );
            Lua_SetTable(L, nAttrib);

            Lua_SetTable(L, nTable);
        }
    }

    return 1;
}
Esempio n. 25
0
int LuaSelectOnlineRole(Lua_State* L)
{
    int     nResult         = 0;
    int     nRetCode        = 0;
    int     nTopIndex       = 0;
    int     nRequireCount   = 0;
    int     nRandIndex      = 0;
    int     nOnlineTotal    = 0;
    KRole*  pRole           = NULL;
    KFuncGetOnlineRoleTable Func;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 3);

    nRequireCount = (int)Lua_ValueToNumber(L, 1);
    KGLOG_PROCESS_ERROR(nRequireCount > 0);

    Func.m_nLevelLow  = (int)Lua_ValueToNumber(L, 2);
    Func.m_nLevelHigh = (int)Lua_ValueToNumber(L, 3);

    Func.m_vRoleTable.reserve(20000);
    g_pSO3GameCenter->m_RoleManager.Traverse(Func);

    nOnlineTotal = (int)Func.m_vRoleTable.size();

    Lua_NewTable(L);

    if (nRequireCount >= nOnlineTotal)
    {
        for (int i = 0; i < nOnlineTotal; i++)
        {
            pRole = Func.m_vRoleTable[i];
            assert(pRole);

            Lua_PushNumber(L, i + 1);
            pRole->LuaGetObj(L);
            
            Lua_SetTable(L, -3);
        }
    }
    else
    {
        for (int i = 0; i < nRequireCount; i++)
        {
            nRandIndex = g_Random(nOnlineTotal - i);
            
            pRole = Func.m_vRoleTable[nRandIndex];
            assert(pRole);

            Func.m_vRoleTable[nRandIndex] = Func.m_vRoleTable[nOnlineTotal - i - 1];

            Lua_PushNumber(L, i + 1);
            pRole->LuaGetObj(L);

            Lua_SetTable(L, -3);
        }
    }

    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 26
0
int KTeamClient::LuaGetMemberInfo(Lua_State* L)
{
    int                 nResult         = 0;
    int                 nTopIndex       = 0;
    int                 nTable          = 0;
    int                 nCurrentLife    = 0;
    int                 nCurrentMana    = 0;
    DWORD               dwMemberID      = 0;
    KTEAM_MEMBER_INFO*  pMemberInfo     = NULL;

    nTopIndex = Lua_GetTopIndex(L);
    KGLOG_PROCESS_ERROR(nTopIndex == 1);

    KGLOG_PROCESS_ERROR(m_dwTeamID != ERROR_ID);

    dwMemberID = (DWORD)Lua_ValueToNumber(L, 1);

    pMemberInfo = GetMemberInfo(dwMemberID);
    KGLOG_PROCESS_ERROR(pMemberInfo);

    Lua_NewTable(L);
    nTable = Lua_GetTopIndex(L);

    Lua_PushString(L, "szName");
    Lua_PushString(L, pMemberInfo->szRoleName);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nLevel");
    Lua_PushNumber(L, pMemberInfo->nLevel);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "bIsOnLine");
    Lua_PushBoolean(L, pMemberInfo->bOnlineFlag);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "bDeathFlag");
    Lua_PushBoolean(L, pMemberInfo->bDeathFlag);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nCamp");
    Lua_PushNumber(L, pMemberInfo->eCamp);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "dwForceID");
    Lua_PushNumber(L, pMemberInfo->dwForceID);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nMaxLife");
    Lua_PushNumber(L, pMemberInfo->nMaxLife);
    Lua_SetTable(L, nTable);

    nCurrentLife = pMemberInfo->nMaxLife * pMemberInfo->nLifePercent / UCHAR_MAX;
    Lua_PushString(L, "nCurrentLife");
    Lua_PushNumber(L, nCurrentLife);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nMaxMana");
    Lua_PushNumber(L, pMemberInfo->nMaxMana);
    Lua_SetTable(L, nTable);

    nCurrentMana = pMemberInfo->nMaxMana * pMemberInfo->nManaPercent / UCHAR_MAX;
    Lua_PushString(L, "nCurrentMana");
    Lua_PushNumber(L, nCurrentMana);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "dwMapID");
    Lua_PushNumber(L, pMemberInfo->dwMapID);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nMapCopyIndex");
    Lua_PushNumber(L, pMemberInfo->nMapCopyIndex);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nPosX");
    Lua_PushNumber(L, pMemberInfo->nPosX);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nPosY");
    Lua_PushNumber(L, pMemberInfo->nPosY);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nRoleType");
    Lua_PushNumber(L, pMemberInfo->nRoleType);
    Lua_SetTable(L, nTable);

    Lua_PushString(L, "nFormationCoefficient");
    Lua_PushNumber(L, pMemberInfo->nFormationCoefficient);
    Lua_SetTable(L, nTable);

    nResult = 1;
Exit0:
    return nResult;
}
Esempio n. 27
0
int KCustomEquipInfo::LuaGetSetAttrib(Lua_State* L)
{
	int         nResult         = 0;
	int         nSetEquipCount  = 0;
	int         nIndex          = 0;
	int         nEquipedNum     = 0;
    KSetInfo*   pSetInfo        = NULL;
    KPlayer*    pPlayer         = NULL;
    int         nTable          = 0;

	KG_PROCESS_ERROR(nSetID > 0);

	pSetInfo = g_pSO3World->m_ItemManager.m_ItemLib.GetSetInfo(nSetID);
	KGLOG_PROCESS_ERROR(pSetInfo);

	pPlayer = g_pSO3World->m_PlayerSet.GetObj(g_pSO3World->m_dwClientPlayerID);
	KGLOG_PROCESS_ERROR(pPlayer);

	Lua_PushNumber(L, pSetInfo->dwUiID);

	Lua_NewTable(L);

	nTable = Lua_GetTopIndex(L);

	for (int i = 0; i < MAX_SET_PART_NUM; ++i)
	{
		KCustomEquipInfo *pInfo = pSetInfo->pEquipList[i];
		if (pInfo)
		{
			++nSetEquipCount;
			Lua_PushNumber(L, nSetEquipCount);

			Lua_NewTable(L);
			int nAttrib = Lua_GetTopIndex(L);

			Lua_PushString(L, "nUiId");
			Lua_PushNumber(L, pInfo->nUiId);
			Lua_SetTable(L, nAttrib);

			Lua_PushString(L, "bEquiped");
			int nEquiped = pPlayer->IsEquiped(pInfo);
			if (nEquiped)
				++nEquipedNum;
			Lua_PushBoolean(L, nEquiped);
			Lua_SetTable(L, nAttrib);

			Lua_SetTable(L, nTable);
		}
	}

	Lua_PushNumber(L, nSetEquipCount);
	Lua_PushNumber(L, nEquipedNum);

	Lua_NewTable(L);
	nTable = Lua_GetTopIndex(L);
	nIndex = 0;

	for (int i = 1; i <= nSetEquipCount; ++i)
	{
		KAttribute Attribute;
		if (g_pSO3World->m_ItemManager.GetSetAttrib(Attribute, nUiId, i))
		{
			if (Attribute.nKey != atInvalid)
			{
				++nIndex;
				Lua_PushNumber(L, nIndex);

				Lua_NewTable(L);
				int nAttrib = Lua_GetTopIndex(L);

				Lua_PushString(L, "nID");
				Lua_PushNumber(L, Attribute.nKey);
				Lua_SetTable(L, nAttrib);

				Lua_PushString(L, "nCount");
				Lua_PushNumber(L, i);
				Lua_SetTable(L, nAttrib);

				Lua_PushString(L, "nValue1");
				Lua_PushNumber(L, Attribute.nValue1);
				Lua_SetTable(L, nAttrib);

				Lua_PushString(L, "nValue2");
				Lua_PushNumber(L, Attribute.nValue2);
				Lua_SetTable(L, nAttrib);

				Lua_PushString(L, "bEquiped");
				int nHave = false;
				if (nEquipedNum >= i)
					nHave = true;
				Lua_PushBoolean(L, nHave);
				Lua_SetTable(L, nAttrib);

				Lua_SetTable(L, nTable);
			}
		}
	}

	nResult = 5;
Exit0:
	return nResult;
}
Esempio n. 28
0
int KSystemScriptTable::LuaGetAllowableAdapterModes(Lua_State* L)
{
    struct KADAPTERMODE
    {
        UINT Width;
        UINT Height;
        UINT RefreshRates[32];   // ³¬³öºöÂÔºóÃæµÄ
    };

    HRESULT hr = E_FAIL;
    UINT uCount = 0;
    std::vector<KADAPTERMODE> AdapterModes;
    std::vector<D3DDISPLAYMODE> DisplayModes;

    ASSERT(L);

    uCount = g_pUI->m_p3DUI->GetAllowableAdapterModeCount();
    KGLOG_PROCESS_ERROR(uCount != 0);

    DisplayModes.resize(uCount);

    hr = g_pUI->m_p3DUI->GetAllowableAdapterMode(&DisplayModes[0], &uCount);
    KGLOG_COM_PROCESS_ERROR(hr);

    for (UINT uIndex = 0; uIndex < uCount; ++uIndex)
    {
        int nFind = false;
        D3DDISPLAYMODE& dm = DisplayModes[uIndex];

        for (UINT uAdapter = 0; uAdapter != AdapterModes.size(); ++uAdapter)
        {
            KADAPTERMODE& am = AdapterModes[uAdapter];

            if (dm.Width == am.Width && dm.Height == am.Height)
            {
                for (UINT uRefreshRateIndex = 0; uRefreshRateIndex != _countof(am.RefreshRates); ++uRefreshRateIndex)
                {
                    if (am.RefreshRates[uRefreshRateIndex] == 0)
                    {
                        am.RefreshRates[uRefreshRateIndex] = dm.RefreshRate;
                        break;
                    }
                }
                nFind = true;
                break;
            }
        }
        if (!nFind)
        {
            KADAPTERMODE Mode;

            memset(&Mode, 0, sizeof(Mode));

            Mode.Width = dm.Width;
            Mode.Height = dm.Height;
            Mode.RefreshRates[0] = dm.RefreshRate;

            AdapterModes.push_back(Mode);
        }
    }

    Lua_NewTable(L);

    for (size_t nIndex = 0; nIndex < AdapterModes.size(); ++nIndex)
    {
        KADAPTERMODE& am = AdapterModes[nIndex];

        Lua_PushNumber(L, nIndex + 1);

        Lua_NewTable(L);

        Lua_PushString(L, "nWidth");
        Lua_PushNumber(L, am.Width);
        Lua_SetTable(L, -3);

        Lua_PushString(L, "nHeight");
        Lua_PushNumber(L, am.Height);
        Lua_SetTable(L, -3);

        Lua_PushString(L, "aRefreshRate");
        Lua_NewTable(L);

        int nUsedRefreshRateIndex = 1;

        for (size_t nRefreshRateIndex = 0; nRefreshRateIndex < _countof(am.RefreshRates); ++nRefreshRateIndex)
        {
            UINT nRefreshRate = am.RefreshRates[nRefreshRateIndex];
            if (nRefreshRate != 0)
            {
                Lua_PushNumber(L, nUsedRefreshRateIndex++);
                Lua_PushNumber(L, nRefreshRate);
                Lua_SetTable(L, -3);
            }
        }
        Lua_SetTable(L, -3);

        Lua_SetTable(L, -3);
    }

    return 1;
Exit0:
    return 0;
}
Esempio n. 29
0
int KQuestInfo::LuaGetHortation(Lua_State* L)
{
	int nHave = false;
	int nTopIndex = Lua_GetTopIndex(L);

	Lua_NewTable(L);
	int nTable = Lua_GetTopIndex(L);

	if (nPresentMoney)
	{
		Lua_PushString(L, "money");
		Lua_PushNumber(L, nPresentMoney);
		Lua_SetTable(L, nTable);
		nHave = true;
	}

    if (wPresentSkill)
    {
        Lua_PushString(L, "skill");
        Lua_PushNumber(L, wPresentSkill);
        Lua_SetTable(L, nTable);
        nHave = true;
    }

	if (nPresentPrestige)
	{
		Lua_PushString(L, "prestige");
		Lua_PushNumber(L, nPresentPrestige);
		Lua_SetTable(L, nTable);
		nHave = true;
	}

	if (nPresentContribution)
	{
		Lua_PushString(L, "contribution");
		Lua_PushNumber(L, nPresentContribution);
		Lua_SetTable(L, nTable);
		nHave = true;
	}

    if (nPresentTrain)
    {
        Lua_PushString(L, "presenttrain");
        Lua_PushNumber(L, nPresentTrain);
        Lua_SetTable(L, nTable);
        nHave = true;
    }

	int nNotSet = true;
	int nRelIndex = 1;
	for (int i = 0; i < QUEST_PARAM_COUNT; ++i)
	{
		if (byAffectForceID[i] != 0 && nAffectForceValue[i] != 0)
		{
			if (nNotSet)
			{
				Lua_PushString(L, "reputation");
				Lua_NewTable(L);
				nHave = true;
				nNotSet = false;
			}

			Lua_PushNumber(L, nRelIndex);
			Lua_NewTable(L);
			++nRelIndex;

			Lua_PushString(L, "force");
			Lua_PushNumber(L, byAffectForceID[i]);
			Lua_SetTable(L, -3);

			Lua_PushString(L, "value");
			Lua_PushNumber(L, nAffectForceValue[i]);
			Lua_SetTable(L, -3);

			Lua_SetTable(L, -3);
		}
	}
	if (!nNotSet)
	{
		Lua_SetTable(L, nTable);
	}

	nNotSet = true;
	nRelIndex = 1;

    if (bHidePresent) 
    {   // 隐藏显示,为制定的道具图标暂时定为Type5,Index2931,Count1
        if (nNotSet)
        {
            Lua_PushString(L, "itemgroup1");
            Lua_NewTable(L);

            Lua_PushString(L, "all");
            Lua_PushBoolean(L, bPresentAll[0]);
            Lua_SetTable(L, -3);
            nHave = true;
            nNotSet = false;
        }

        Lua_PushNumber(L, nRelIndex);
        Lua_NewTable(L);
        ++nRelIndex;

        Lua_PushString(L, "selectindex");
        Lua_PushNumber(L, 0);
        Lua_SetTable(L, -3);

        Lua_PushString(L, "count");
        Lua_PushNumber(L, 1);
        Lua_SetTable(L, -3);

        Lua_PushString(L, "version");
        Lua_PushNumber(L, 0);
        Lua_SetTable(L, -3);

        Lua_PushString(L, "type");
        Lua_PushNumber(L, 5);
        Lua_SetTable(L, -3);

        Lua_PushString(L, "index");
        Lua_PushNumber(L, 2931);
        Lua_SetTable(L, -3);

        Lua_SetTable(L, -3);
    }
    else
    {
        for (int i = 0; i < QUEST_PARAM_COUNT; ++i)
        {
            if (wPresentItemAmount[i])
            {
                if (nNotSet)
                {
                    Lua_PushString(L, "itemgroup1");
                    Lua_NewTable(L);

                    Lua_PushString(L, "all");
                    Lua_PushBoolean(L, bPresentAll[0]);
                    Lua_SetTable(L, -3);
                    nHave = true;
                    nNotSet = false;
                }

                Lua_PushNumber(L, nRelIndex);
                Lua_NewTable(L);
                ++nRelIndex;

                Lua_PushString(L, "selectindex");
                Lua_PushNumber(L, i);
                Lua_SetTable(L, -3);

                Lua_PushString(L, "count");
                Lua_PushNumber(L, wPresentItemAmount[i]);
                Lua_SetTable(L, -3);

                Lua_PushString(L, "version");
                Lua_PushNumber(L, 0);
                Lua_SetTable(L, -3);

                Lua_PushString(L, "type");
                Lua_PushNumber(L, byPresentItemType[i]);
                Lua_SetTable(L, -3);

                Lua_PushString(L, "index");
                Lua_PushNumber(L, wPresentItemIndex[i]);
                Lua_SetTable(L, -3);

                Lua_SetTable(L, -3);
            }
        }
    }
	if (!nNotSet)
	{
		Lua_SetTable(L, nTable);
	}

	nNotSet = true;
	nRelIndex = 1;
	for (int i = QUEST_PARAM_COUNT; i < QUEST_PARAM_COUNT * 2; ++i)
	{
		if (wPresentItemAmount[i])
		{
			if (nNotSet)
			{
				Lua_PushString(L, "itemgroup2");
				Lua_NewTable(L);

				Lua_PushString(L, "all");
				Lua_PushBoolean(L, bPresentAll[1]);
				Lua_SetTable(L, -3);
				nHave = true;
				nNotSet = false;
			}

			Lua_PushNumber(L, nRelIndex);
			Lua_NewTable(L);
			++nRelIndex;

			Lua_PushString(L, "selectindex");
			Lua_PushNumber(L, i);
			Lua_SetTable(L, -3);

			Lua_PushString(L, "count");
			Lua_PushNumber(L, wPresentItemAmount[i]);
			Lua_SetTable(L, -3);

			Lua_PushString(L, "version");
			Lua_PushNumber(L, 0);
			Lua_SetTable(L, -3);

			Lua_PushString(L, "type");
			Lua_PushNumber(L, byPresentItemType[i]);
			Lua_SetTable(L, -3);

			Lua_PushString(L, "index");
			Lua_PushNumber(L, wPresentItemIndex[i]);
			Lua_SetTable(L, -3);

			Lua_SetTable(L, -3);
		}
	}
	if (!nNotSet)
	{
		Lua_SetTable(L, nTable);
	}

	if (nHave)
	{
		assert(nTopIndex + 1 == Lua_GetTopIndex(L));
		return 1;
	}
	else
	{
		Lua_SetTopIndex(L, nTopIndex);
		return 0;
	}
}
Esempio n. 30
0
int KSchemeScriptTable::LuaGWTextEncoder_Encode(Lua_State* L)
{
    BOOL bRetCode = FALSE;
    LPCSTR szStream = NULL;
    size_t nEncodedLength = 0;
    int nIndex = 1;
    KGWTextEncoder::KGWTextAtomList aEncodedAtom;
    std::string szEncode;
    unsigned int uCodePage = 0;

    ASSERT(L);

    ASSERT(g_pSO3UI && g_pSO3UI->m_pUI);
    uCodePage = g_pSO3UI->m_pUI->GetCodePage();

    bRetCode = Lua_GetTopIndex(L) == 1;
    KGLOG_PROCESS_ERROR(bRetCode);

    szStream = Lua_ValueToString(L, 1);
    KGLOG_PROCESS_ERROR(szStream);

    szEncode = szStream;

    TripSlashes(&szEncode[0]);

    {
        ATL::CA2W wszStream(szEncode.c_str(), uCodePage);

        size_t nStreamLength = wcslen(wszStream);

        bRetCode = KGWTextEncoder::GetSelf().Encode(wszStream, nStreamLength, aEncodedAtom, nEncodedLength);
        KGLOG_PROCESS_ERROR(bRetCode);
    }

    Lua_PushNumber(L, nEncodedLength);

    if (aEncodedAtom.size() > 0)
    {
        Lua_NewTable(L);

        KGWTextEncoder::KGWTextAtomList::const_iterator it = aEncodedAtom.begin();
        KGWTextEncoder::KGWTextAtomList::const_iterator ie = aEncodedAtom.end();
        for (; it != ie; ++it)
        {
            KGWTextAtom const& item = *it;
            LPCWSTR wszName = item.GetName();
            LPCWSTR wszContext = item.GetContext();

            Lua_PushNumber(L, nIndex);

            Lua_NewTable(L);

            if (wszName)
            {
                Lua_PushString(L, "name");
                Lua_PushString(L, ATL::CW2A(wszName, uCodePage));
                Lua_SetTable(L, -3);
            }
            if (wszContext)
            {
                Lua_PushString(L, "context");
                Lua_PushString(L, ATL::CW2A(wszContext, uCodePage));
                Lua_SetTable(L, -3);
            }

            size_t const nCount = item.GetAttributeCount();
            if (nCount > 0)
            {
                Lua_PushString(L, "attribute");

                Lua_NewTable(L);

                for (size_t nIndex = 0; nIndex < nCount; ++nIndex)
                {
                    LPCWSTR wszKey = item.GetAttributeKey(nIndex);
                    LPCWSTR wszValue = item.GetAttributeValue(nIndex);

                    ASSERT(wszKey && wszKey[0] != L'\0');

                    Lua_PushString(L, ATL::CW2A(wszKey, uCodePage));
                    Lua_PushString(L, wszValue ? ATL::CW2A(wszValue, uCodePage) : "");
                    Lua_SetTable(L, -3);
                }

                Lua_SetTable(L, -3);
            }

            Lua_SetTable(L, -3);

            ++nIndex;
        }
    }
    else
    {
        Lua_PushNil(L);
    }

    return 2;
Exit0:
    return 0;
}