Skip to content

CoreGameEventCollection

Contains a set of results from CorePlatform.GetGameEventCollection() and related functions. Depending on how many events are available, results may be separated into multiple pages. The .hasMoreResults property may be checked to determine whether more events are available. Those results may be retrieved using the :GetMoreResults() function.

Properties

Property Name Return Type Description Tags
hasMoreResults boolean Returns true if there are more events available to be requested. Read-Only

Functions

Function Name Return Type Description Tags
GetResults() Array<CoreGameEvent> Returns the list of events contained in this set of results. This may return an empty table. None
GetMoreResults() CoreGameEventCollection Requests the next set of results for this list of events and returns a new collection containing those results. Returns nil if the hasMoreResults property is false. This function may yield until a result is available, and may raise an error if an error occurs retrieving the information. None

Examples

Example using:

GetResults

In this example, we listen for the Game.roundStartEvent. At the start of each round we clear all equipment on players and give them one equipment to play with. Usually they will get a default equipment, that is the basis of this game. However, there is a special equipment that only appears during Game Events. This is given as the primary equipment instead of the default one, if there is an active Game Event with a Reference Name that matches what we are looking for.

local NORMAL_EQUIPMENT = script:GetCustomProperty("NormalEquipment")
local EVENT_EQUIPMENT = script:GetCustomProperty("EventEquipment")
local GAME_ID = script:GetCustomProperty("GameID")
local EVENT_REF_NAME = script:GetCustomProperty("EventRefName")

function IsEventActive(refName)
    local collection = CorePlatform.GetGameEventsForGame(GAME_ID)
    for i, eventData in ipairs(collection:GetResults()) do
        if eventData.state == CoreGameEventState.ACTIVE
        and eventData.referenceName == EVENT_REF_NAME then
            return true
        end
    end
    return false
end

function RemoveAllEquipment(player)
    for _, equipment in pairs(player:GetEquipment()) do
        if Object.IsValid(equipment) then
            equipment:Destroy()
        end
    end
end

function OnRoundStart()
    local useEventEquipment = IsEventActive(EVENT_REF_NAME)

    for _, player in ipairs(Game.GetPlayers()) do
        RemoveAllEquipment(player)

        local equipment = nil
        if useEventEquipment then
            equipment = World.SpawnAsset(EVENT_EQUIPMENT)
        else
            equipment = World.SpawnAsset(NORMAL_EQUIPMENT)
        end
        equipment:Equip(player)
    end
end

Game.roundStartEvent:Connect(OnRoundStart)

See also: Game.roundStartEvent | CorePlatform.GetGameEventsForGame | CoreGameEvent.state | CoreGameEventState | Player.GetEquipment | Equipment.Equip | World.SpawnAsset | CoreObject.Destroy | Object.IsValid


Example using:

GetResults

GetMoreResults

hasMoreResults

In this example we look at all the events for a given game. The status of each one is printed to the Event Log. Events can be Active or Scheduled, in which case they have a remaining time or upcoming time, respectively. Events can also be in a "Canceled" state, but we ignore those. The advantages of using countdowns to express the end of an event (or wait for an upcoming one) are to build anticipation in the eyes of players, but also to avoid any complications with time zones for players around the world.

local GAME_ID = "a3040c7ff0ca4a148d98191c701afe9a"

local collection = CorePlatform.GetGameEventsForGame(GAME_ID)

function PrintCollection()
    local gameEvents = collection:GetResults()
    for i, eventData in ipairs(gameEvents) do
        if eventData.state == CoreGameEventState.ACTIVE then
            local eventEnd = eventData:GetEndDateTime()
            local time = eventEnd.secondsSinceEpoch - DateTime.CurrentTime().secondsSinceEpoch
            print(eventData.name.." is active. Ends in "..time.." seconds")

        elseif eventData.state == CoreGameEventState.SCHEDULED then
            local eventStart = eventData:GetStartDateTime()
            local time = eventStart.secondsSinceEpoch - DateTime.CurrentTime().secondsSinceEpoch
            print(eventData.name.." is scheduled. Starts in "..time.." seconds")
        end
    end
end

function NextPage()
    if collection and collection.hasMoreResults then
        collection = collection:GetMoreResults()
    end
end

PrintCollection()

See also: CorePlatform.GetGameEventsForGame | CoreGameEvent.state | CoreGameEventState | DateTime.CurrentTime


Learn More

CorePlatform.GetGameEventCollection()


Last update: November 16, 2021