private IEnumerator triggerTubeRace(PartyGameLobbyMmoItemTeamDefinition lobbyData, int templateId, int minutesBetweenLaunches, TubeRaceDefinition raceDefinition) { while (true) { yield return(new WaitForSeconds(minutesBetweenLaunches * 60 - lobbyData.LobbyLengthInSeconds)); PartygameLobbyMmoItem cpItem = new PartygameLobbyMmoItem { CreatorId = -1L, gameTemplateId = templateId, Id = new CPMMOItemId(generateMMOItemId(), CPMMOItemId.CPMMOItemParent.WORLD), playerData = "{\"Players\":[]}", timeStartedInSeconds = DateTime.UtcNow.GetTimeInSeconds(), timeToLive = lobbyData.LobbyLengthInSeconds }; processEvent(GameServerEvent.SERVER_ITEM_ADDED, cpItem); CPMMOItemPosition position = default(CPMMOItemPosition); position.Id = cpItem.Id; position.Position = lobbyData.LobbyLocation; processEvent(GameServerEvent.SERVER_ITEM_MOVED, position); TubeRaceWorldObject worldObject = new TubeRaceWorldObject(cpItem, processEvent, partyGameSessionManager, raceDefinition); worldObjects.Add(worldObject); yield return(new WaitForSeconds(lobbyData.LobbyLengthInSeconds)); worldObject.StartRace(); worldObjects.Remove(worldObject); processEvent(GameServerEvent.SERVER_ITEM_REMOVED, cpItem.Id); } }
public void StartSession() { PartyGameStartEventV2 partyGameStartEventV = default(PartyGameStartEventV2); partyGameStartEventV.sessionId = sessionId; partyGameStartEventV.templateId = cpItem.gameTemplateId; partyGameStartEventV.playerData = TubeRaceWorldObject.getPlayerData(userScores.Keys); processEvent(GameServerEvent.PARTY_GAME_START_V2, partyGameStartEventV); PartyGameMessageEvent partyGameMessageEvent = default(PartyGameMessageEvent); partyGameMessageEvent.sessionId = sessionId; partyGameMessageEvent.type = 10; partyGameMessageEvent.message = "{\"ModifierLayoutId\":" + UnityEngine.Random.Range(0, 3) + "}"; processEvent(GameServerEvent.PARTY_GAME_MESSAGE, partyGameMessageEvent); foreach (long key in userScores.Keys) { PlayerLocomotionStateEvent playerLocomotionStateEvent = default(PlayerLocomotionStateEvent); playerLocomotionStateEvent.SessionId = key; playerLocomotionStateEvent.State = LocomotionState.Racing; processEvent(GameServerEvent.USER_LOCO_STATE_CHANGED, playerLocomotionStateEvent); } timer.Start(); }