public void Fall(HumanBase humanBase, bool drown = false) { Human human = humanBase as Human; if (ReplayRecorder.isPlaying || NetGame.isClient) { return; } if (passedLevel && ((currentLevelNumber >= 0 && currentLevelNumber < levels.Length) || workshopLevel != null || currentLevelType == WorkshopItemSource.EditorPick)) { if (ReplayRecorder.isRecording) { ReplayRecorder.Stop(); } else if (workshopLevel != null) { passedLevel = false; PlayerManager.SetSingle(); App.instance.PauseLeave(); GameSave.PassCheckpointWorkshop(workshopLevel.hash, 0); } else if (currentLevelType == WorkshopItemSource.EditorPick) { passedLevel = false; PlayerManager.SetSingle(); App.instance.PauseLeave(); if (NetGame.isLocal) { GameSave.StartFromBeginning(); } for (int i = 0; i < Human.all.Count; i++) { Human.all[i].ReleaseGrab(); } } else { StatsAndAchievements.PassLevel(levels[currentLevelNumber], human); for (int j = 0; j < Human.all.Count; j++) { Human.all[j].ReleaseGrab(); } StartCoroutine(PassLevel()); } } else { if (drown) { StatsAndAchievements.IncreaseDrownCount(human); } else { StatsAndAchievements.IncreaseFallCount(human); } Respawn(human, Vector3.zero); CheckpointRespawned(currentCheckpointNumber); } }