Beispiel #1
0
int CLuaFile::ProjectileFind(lua_State *L)
{
    lua_getglobal(L, "pLUA");
    CLuaFile *pSelf = (CLuaFile *)lua_touserdata(L, -1);
    lua_Debug Frame;
    lua_getstack(L, 1, &Frame);
    lua_getinfo(L, "nlSf", &Frame);

    if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3) || !lua_isnumber(L, 4))
        return 0;

    vec2 Pos = vec2(lua_tonumber(L, 1), lua_tonumber(L, 2));

    int Max = clamp((int)lua_tointeger(L, 4), 1, 256);
    int Num = 0;

    for (CProjectile *pPrj = (CProjectile *)pSelf->m_pServer->m_World.FindFirst(0); pPrj; pPrj = (CProjectile *)pPrj->TypeNext())
    {
		if(distance(pPrj->GetPos((pSelf->m_pServer->Server()->Tick()-pPrj->GetStartTick())/(float)pSelf->m_pServer->Server()->TickSpeed()), Pos) < lua_tonumber(L, 3)+pPrj->m_ProximityRadius)
		{
            lua_pushinteger(L, pPrj->GetID());
			Num++;
			if(Num == Max)
				break;
		}
    }
    return Num;
}