public void CheckExecutableServerCommands(int endSubTick, LogicArrayList <LogicCommand> commands) { for (int i = 0; i < commands.Size(); i++) { LogicCommand command = commands[i]; if (command.IsServerCommand()) { if (this.m_logicGameMode.GetState() != 1) { commands.Remove(i--); continue; } LogicServerCommand serverCommand = (LogicServerCommand)command; LogicServerCommand bufferedServerCommand = null; for (int j = 0; j < this.m_bufferedServerCommands.Size(); j++) { LogicServerCommand tmp = this.m_bufferedServerCommands[j]; if (tmp.GetId() == serverCommand.GetId()) { bufferedServerCommand = tmp; } } if (bufferedServerCommand == null || bufferedServerCommand.GetCommandType() != serverCommand.GetCommandType() || bufferedServerCommand.GetExecuteSubTick() != -1 && bufferedServerCommand.GetExecuteSubTick() >= this.m_logicGameMode.GetLevel().GetLogicTime().GetTick()) { commands.Remove(i--); continue; } bufferedServerCommand.SetExecuteSubTick(serverCommand.GetExecuteSubTick()); commands[i] = bufferedServerCommand; } } }
private static void OnHomeStateCallbackMessageReceived(GameStateCallbackMessage message) { if (GameAvatarManager.TryGet(message.AccountId, out GameAvatar gameDocument)) { gameDocument.LogicClientAvatar = message.LogicClientAvatar; if (message.HomeJSON != null) { for (int i = 0; i < message.ExecutedServerCommands.Size(); i++) { LogicServerCommand serverCommand = message.ExecutedServerCommands[i]; for (int j = 0; j < gameDocument.ServerCommands.Size(); j++) { if (gameDocument.ServerCommands[j].GetId() == serverCommand.GetId()) { gameDocument.ServerCommands.Remove(j); break; } } } gameDocument.LogicClientHome.GetCompressibleHomeJSON().Set(message.HomeJSON); gameDocument.LogicClientHome.SetShieldDurationSeconds(message.RemainingShieldTime); gameDocument.LogicClientHome.SetGuardDurationSeconds(message.RemainingGuardTime); gameDocument.LogicClientHome.SetPersonalBreakSeconds(message.NextPersonalBreakTime); gameDocument.SaveTime = message.SaveTime; } if (gameDocument.LogicClientAvatar.IsInAlliance() && message.AvatarChanges.Size() != 0) { ServerMessageManager.SendMessage(new AllianceAvatarChangesMessage { AccountId = gameDocument.LogicClientAvatar.GetAllianceId(), MemberId = gameDocument.LogicClientAvatar.GetId(), AvatarChanges = message.AvatarChanges }, 11); } GameSession currentSession = gameDocument.CurrentSession; if (currentSession != null) { DateTime utc = DateTime.UtcNow; if (utc.Subtract(currentSession.LastDbSave).TotalSeconds > 2) { GameAvatarManager.Save(gameDocument); currentSession.LastDbSave = utc; } if (message.SessionId != currentSession.Id) { currentSession.SendPiranhaMessage(new OutOfSyncMessage(), 1); currentSession.SendMessage(new StopSessionMessage { Reason = 1 }, 1); return; } if (message.AvatarChanges.Size() != 0) { for (int i = 0; i < message.AvatarChanges.Size(); i++) { if (message.AvatarChanges[i].GetAvatarChangeType() == AvatarChangeType.ALLIANCE_JOINED) { currentSession.BindAllianceServer(); } } } } else { GameAvatarManager.Save(gameDocument); } } }