Пример #1
0
int jass_get(lua_State* L)
{
    const char* name = lua_tostring(L, 2);

    jass::func_value const* nf = jass::jass_func(name);
    if (nf && nf->is_valid())
    {
        if (!lua::allow_yield(L))
        {
            if ((0 == strcmp(name, "TriggerSleepAction"))
                    || (0 == strcmp(name, "TriggerWaitForSound"))
                    || (0 == strcmp(name, "TriggerSyncReady"))
                    || (0 == strcmp(name, "SyncSelections")))
            {
                lua_pushstring(L, name);
                lua_pushcclosure(L, jass_call_null_function, 1);
                return 1;
            }
        }

        lua_pushinteger(L, (uint32_t)(uintptr_t)nf);
        lua_pushcclosure(L, jass_call_closure, 1);
        return 1;
    }

    if (!is_gaming())
    {
        lua_pushnil(L);
        return 1;
    }

    jass::global_variable gv(name);
    if (gv.is_vaild())
    {
        if (!gv.is_array())
        {
            jass_get_global_variable(L, gv.type(), gv);
            return 1;
        }
        else
        {
            switch (gv.type())
            {
            case jass::OPCODE_VARIABLE_INTEGER_ARRAY:
            case jass::OPCODE_VARIABLE_REAL_ARRAY:
            case jass::OPCODE_VARIABLE_STRING_ARRAY:
            case jass::OPCODE_VARIABLE_HANDLE_ARRAY:
            case jass::OPCODE_VARIABLE_BOOLEAN_ARRAY:
                return jarray_create(L, (uintptr_t)gv.ptr());
            default:
                lua_pushnil(L);
                return 1;
            }
        }
    }

    lua_pushnil(L);
    return 1;
}
Пример #2
0
	int jarray_index(lua_State* L)
	{
		lua::state* ls = (lua::state*)L;
		jass::global_variable gv = jarray_value(ls);
		int32_t index = ls->checkinteger(2);
	
		if (!gv.array_vaild(index))
		{
			ls->pushnil();
			return 1;
		}
	
		jass_get_global_variable(ls, jass::opcode_type_remove_array(gv.type()), gv[index]);
		return 1;
	}