Code:
struct LFGQueueStats
{
DWORD LfgDungeonsId;
DWORD myWait;
DWORD averageWait;
DWORD tankWait;
DWORD healerWait;
DWORD damageWait;
BYTE tankNeeds;
BYTE healerNeeds;
BYTE dpsNeeds;
BYTE pad0;
DWORD time;
DWORD queuedTime;
};
LFGQueueStats g_LfgQueueStats[4]; // @ .data:0116EA40 not rebased
signed int __cdecl Script_GetLFGQueueStats(int pLuaState)
{
signed int numRetArgs; // eax@2
int category; // eax@3
int zbCategory; // esi@3
int v4; // eax@4
LFGQueueStats *pLfgStats; // ebx@7
LfgDungeonsRec *pLfgDunRec; // eax@8
int instanceSubType; // ST3C_4@9
int queuedTime; // st7@9
// hasData, leaderNeeds, tankNeeds, healerNeeds, dpsNeeds, totalTanks, totalHealers, totalDPS, instanceType,
// instanceSubType, instanceName, averageWait, tankWait, healerWait, damageWait, myWait, queuedTime = GetLFGQueueStats(category);
if ( lua_isnumber(pLuaState, 1) )
{
category = lua_tointeger(pLuaState, 1);
zbCategory = category - 1;
if ( (category - 1) > 3 )
{
luaL_error(pLuaState, "Invalid category");
numRetArgs = 0;
}
else
{
v4 = sub_AA0AB0(category - 1);
pLfgStats = &g_LfgQueueStats[zbCategory];
if ( v4 && *(v4 + 40) && *(v4 + 42) && pLfgStats && pLfgStats->LfgDungeonsId )
{
lua_pushboolean(pLuaState, 1); // hasData
lua_pushnumber(pLuaState, 0.0); // leaderNeeds
lua_pushnumber(pLuaState, pLfgStats->tankNeeds);// tankNeeds
lua_pushnumber(pLuaState, pLfgStats->healerNeeds);// healerNeeds
lua_pushnumber(pLuaState, pLfgStats->dpsNeeds);// dpsNeeds
pLfgDunRec = LfgDungeonsDB::GetRow(&g_LfgDungeonsDB, pLfgStats->LfgDungeonsId);
if ( pLfgDunRec )
{
lua_pushnumber(pLuaState, pLfgDunRec->totalTanks);// totalTanks
lua_pushnumber(pLuaState, pLfgDunRec->totalHealers);// totalHealers
lua_pushnumber(pLuaState, pLfgDunRec->totalDPS);// totalDPS
lua_pushnumber(pLuaState, pLfgDunRec->instanceType);// instanceType
instanceSubType = LfgDungeonsDB::GetInstanceSubType(pLfgDunRec);
lua_pushnumber(pLuaState, instanceSubType);// instanceSubType
lua_pushstring(pLuaState, pLfgDunRec->instanceName);// instanceName
lua_pushnumber(pLuaState, pLfgStats->averageWait);// averageWait
lua_pushnumber(pLuaState, pLfgStats->tankWait);// tankWait
lua_pushnumber(pLuaState, pLfgStats->healerWait);// healerWait
lua_pushnumber(pLuaState, pLfgStats->damageWait);// damageWait
lua_pushnumber(pLuaState, pLfgStats->myWait);// myWait
queuedTime = pLfgStats->queuedTime;
if ( (pLfgStats->queuedTime & 0x80000000u) != 0 )
queuedTime = queuedTime + *&dword_D282A8;
lua_pushnumber(pLuaState, queuedTime * 0.001);// queuedTime
numRetArgs = 17;
}
else
{
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
lua_pushnil(pLuaState);
numRetArgs = 17;
}
}
else
{
numRetArgs = 0;
}
}
}
else
{
luaL_error(pLuaState, "Usage: GetLFGQueueStats(LE_LFG_CATEGORY)");
numRetArgs = 0;
}
return numRetArgs;
}