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; }
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; }
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; }
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; }
//--------------------------------------------------------------------------- // 函数: 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; }
//--------------------------------------------------------------------------- // 函数: 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; }
//--------------------------------------------------------------------------- // 函数: 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; }
//--------------------------------------------------------------------------- // 函数: 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; }
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; }
//--------------------------------------------------------------------------- // 函数: 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; }
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; }
//--------------------------------------------------------------------------- // 函数: 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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; } }
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; }