public void OnEventRaised(byte eventCode, object content, int senderID) { bool isMaster = PhotonNetwork.isMasterClient; bool isMine = photonView.isMine; switch (eventCode) { case (byte)EventCodes.CTOS_ClientInput: if (!isMaster) { break; } var msg = (NetInputMessage)content; msg.PhotonPlayerId = senderID; msg.Time = Time.time; Server_ReceiveInput(msg, senderID); break; case (byte)EventCodes.STOC_ClientInputAcknowledge: var stateMsg = (NetStateMessage)content; var photonPlayer = PhotonUtils.GetPlayerById(stateMsg.PhotonPlayerId); if (photonPlayer == null) { break; } var photonPlayerTransform = PhotonUtils.GetPhotonPlayerTransform(photonPlayer); if (photonPlayerTransform == null) { break; } bool isMyAck = PhotonNetwork.player.ID == stateMsg.PhotonPlayerId; if (isMyAck) { photonPlayerTransform.position = stateMsg.Position; // Server Reconciliation if (Conciliation) { int j = 0; while (j < _inputBuffer.Count) { var input = _inputBuffer[j]; if (input.TickNr <= stateMsg.LastTick) { _inputBuffer.Remove(input); } else { ApplyInput(new List <Inputs> { input }, transform); j++; } } } PositionBuffer.Push(stateMsg.Position.x, stateMsg.Position.y, Syncer.ServerDelta(Time.deltaTime)); } else { // Entity Interpolation if (Interpolation) { Player p = photonPlayerTransform.GetComponent <Player>(); p.Client_SyncServer(); p.PositionBuffer.Push(stateMsg.Position.x, stateMsg.Position.y, p.Syncer.ServerDelta(Time.deltaTime)); } else { photonPlayerTransform.position = stateMsg.Position; } } break; default: Debug.LogErrorFormat("Unknown event code {0} from {1}", eventCode, senderID); break; } }