CoreGameEvent
Metadata about a creator-defined event for a game on the Core platform.
Properties
| Property Name | Return Type | Description | Tags | 
|---|---|---|---|
| id | string | The ID of the event. | Read-Only | 
| gameId | string | The ID of the game this event belongs to. | Read-Only | 
| name | string | The display name of the event. | Read-Only | 
| referenceName | string | The reference name of the event. | Read-Only | 
| description | string | The description of the event. | Read-Only | 
| state | CoreGameEventState | The current state of the event (active, scheduled, etc). | Read-Only | 
| registeredPlayerCount | integer | The number of players currently registered for this event. | Read-Only | 
Functions
| Function Name | Return Type | Description | Tags | 
|---|---|---|---|
| GetTags() | Array<string> | Returns a list of the tags selected when this event was published. | None | 
| GetStartDateTime() | CoreDateTime | Returns the start date and time of the event. | None | 
| GetEndDateTime() | CoreDateTime | Returns the end date and time of the event. | None | 
Examples
Example using:
id
name
description
In this example, a client script controls a UI that prompts players to join (RSVP) an upcoming game event. In case the player has already registered for the event, then the UI does not show. The UI is populated with information about the event, such as name and description. Also, the RSVP Button must be given the game event's id in order to connect correctly with the platform service. The UI becomes hidden when the RSVP or Close buttons are clicked.
local GAME_ID = "a3040c7ff0ca4a148d98191c701afe9a"
local UI_ROOT = script:GetCustomProperty("UIContainer"):WaitForObject()
local CLOSE_BUTTON = script:GetCustomProperty("UIButton"):WaitForObject()
local UI_EVENT_NAME = script:GetCustomProperty("UITextBox"):WaitForObject()
local UI_EVENT_DESCRIPTION = script:GetCustomProperty("UITextBox_1"):WaitForObject()
local RSVP_BUTTON = script:GetCustomProperty("UIEventRSVPButton"):WaitForObject()
local player = Game.GetLocalPlayer()
function ShowUI()
    UI_ROOT.visibility = Visibility.INHERIT
end
function HideUI()
    UI_ROOT.visibility = Visibility.FORCE_OFF
end
function UpdateContents(eventData)
    UI_EVENT_NAME.text = eventData.name
    UI_EVENT_DESCRIPTION.text = eventData.description
    RSVP_BUTTON.eventId = eventData.id
end
function EvaluateUpcomingEvent()
    local collection = CorePlatform.GetGameEventsForGame(GAME_ID)
    for i, eventData in ipairs(collection:GetResults()) do
        if eventData.state == CoreGameEventState.SCHEDULED
        and not CorePlatform.IsPlayerRegisteredForGameEvent(player, eventData) then
            UpdateContents(eventData)
            ShowUI()
            return
        end
    end
end
CLOSE_BUTTON.clickedEvent:Connect(HideUI)
RSVP_BUTTON.clickedEvent:Connect(HideUI)
EvaluateUpcomingEvent()
See also: UIEventRSVPButton.eventId | CoreGameEventCollection.GetResults | CorePlatform.GetGameEventsForGame | CoreGameEventState | UIButton.clickedEvent | UIText.text | CoreObject.GetCustomProperty
Example using:
referenceName
state
In this example, an event is setup with the Reference Name double_xp. Whenever a player gains XP, we check for active events to see if one matches the Reference Name we are looking for and add extra XP. By using this approach, additional events can be setup in the future with the same Reference Name, without the need for any code changes.
local GAME_ID = "a3040c7ff0ca4a148d98191c701afe9a"
local 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 == refName then
            return true
        end
    end
    return false
end
local function IsDoubleXPActive()
    return IsEventActive("double_xp")
end
local function OnResourceChanged(player, resourceName, newValue)
    if resourceName == "xp" then
        if not locked and player.serverUserData.lastXP ~= nil and IsDoubleXPActive() then
            local delta = newValue - player.serverUserData.lastXP
            if delta > 0 then
                locked = true -- Lock the logic, so it doesn't go into a loop
                player:AddResource(resourceName, delta) -- Double the amount by adding it again
                locked = false -- Release the lock
            end
        end
        player.serverUserData.lastXP = player:GetResource(resourceName)
    end
end
local function ConnectReourceChanged(player)
    player.resourceChangedEvent:Connect(OnResourceChanged)
end
Game.playerJoinedEvent:Connect(ConnectReourceChanged)
See also: CorePlatform.GetGameEventsForGame | CoreGameEventCollection.GetResults | CoreGameEventState | Player.AddResource | Game.playerJoinedEvent
Example using:
state
registeredPlayerCount
GetEndDateTime
GetStartDateTime
GetTags
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"
function PrintTags(eventData)
    local tags = ""
    for _, tag in pairs(eventData:GetTags()) do
        tags = tags .. tag .. ","
    end
    print("  Tags = " .. tags)
end
local collection = CorePlatform.GetGameEventsForGame(GAME_ID)
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")
        print("  Registered players: " .. eventData.registeredPlayerCount)
        PrintTags(eventData)
    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")
        print("  Registered players: " .. eventData.registeredPlayerCount)
        PrintTags(eventData)
    end
end
See also: CorePlatform.GetGameEventsForGame | CoreGameEventCollection.GetResults | CoreGameEventState | DateTime.CurrentTime
Learn More
CorePlatform.GetGameEventsForGame()