diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index e5c1880ef..78c648415 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -1459,6 +1459,7 @@
Subscribe to hold on with 1HP!
Your subscription gives you an extra chance at the Armoire!
You got a second chance with 1HP!
+ Your %s broke
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt
index f2eb0e363..fdd982bb7 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/api/ApiService.kt
@@ -182,7 +182,7 @@ interface ApiService {
suspend fun sleep(): HabitResponse
@POST("user/revive")
- suspend fun revive(): HabitResponse
+ suspend fun revive(): HabitResponse
@POST("user/class/cast/{skill}")
suspend fun useSkill(
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
index 5711c047c..ba331ff5d 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.kt
@@ -122,7 +122,7 @@ interface ApiClient {
suspend fun loginApple(authToken: String): UserAuthResponse?
suspend fun sleep(): Boolean?
- suspend fun revive(): User?
+ suspend fun revive(): Items?
suspend fun useSkill(skillName: String, targetType: String, targetId: String): SkillResponse?
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt
index 4714ba5ce..85372fe6f 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/UserRepository.kt
@@ -5,6 +5,7 @@ import com.habitrpg.android.habitica.models.QuestAchievement
import com.habitrpg.android.habitica.models.Skill
import com.habitrpg.android.habitica.models.TeamPlan
import com.habitrpg.android.habitica.models.inventory.Customization
+import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.models.responses.SkillResponse
import com.habitrpg.android.habitica.models.responses.UnlockResponse
import com.habitrpg.android.habitica.models.social.Group
@@ -26,7 +27,7 @@ interface UserRepository : BaseRepository {
suspend fun retrieveUser(withTasks: Boolean = false, forced: Boolean = false, overrideExisting: Boolean = false): User?
- suspend fun revive(): User?
+ suspend fun revive(): Equipment?
suspend fun resetTutorial(): User?
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
index 2f8bee3d3..752999001 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt
@@ -502,7 +502,7 @@ class ApiClientImpl(
override suspend fun sleep(): Boolean? = process { apiService.sleep() }
- override suspend fun revive(): User? = process { apiService.revive() }
+ override suspend fun revive(): Items? = process { apiService.revive() }
override suspend fun useSkill(skillName: String, targetType: String, targetId: String): SkillResponse? {
return process { apiService.useSkill(skillName, targetType, targetId) }
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
index 51d1e379c..4d491066b 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/UserRepositoryImpl.kt
@@ -9,11 +9,13 @@ import com.habitrpg.android.habitica.models.Achievement
import com.habitrpg.android.habitica.models.QuestAchievement
import com.habitrpg.android.habitica.models.TeamPlan
import com.habitrpg.android.habitica.models.inventory.Customization
+import com.habitrpg.android.habitica.models.inventory.Equipment
import com.habitrpg.android.habitica.models.responses.SkillResponse
import com.habitrpg.android.habitica.models.responses.UnlockResponse
import com.habitrpg.android.habitica.models.social.Group
import com.habitrpg.android.habitica.models.social.GroupMembership
import com.habitrpg.android.habitica.models.tasks.Task
+import com.habitrpg.android.habitica.models.user.OwnedItem
import com.habitrpg.android.habitica.models.user.Stats
import com.habitrpg.android.habitica.models.user.User
import com.habitrpg.android.habitica.models.user.UserQuestStatus
@@ -98,16 +100,17 @@ class UserRepositoryImpl(
}
}
- override suspend fun revive(): User? {
- val revivedUser = apiClient.revive()
+ override suspend fun revive(): Equipment? {
+ val items = apiClient.revive()
val currentUser = localRepository.getLiveUser(currentUserID)
- if (revivedUser != null && currentUser != null) {
- val brokenItem = currentUser.items?.gear?.owned?.firstOrNull { equipment ->
- revivedUser.items?.gear?.owned?.filter { it.key == equipment.key }?.size == 0
+ var brokenItem: Equipment? = null
+ if (items != null && currentUser != null) {
+ brokenItem = items.gear?.owned?.filter { it.owned == false }?.firstOrNull { equipment ->
+ currentUser.items?.gear?.owned?.firstOrNull { it.key == equipment.key && it.owned == true } != null
}
-
}
- return retrieveUser(false, true)
+ retrieveUser(false, true)
+ return brokenItem
}
override suspend fun resetTutorial(): User? {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
index 3f4e943ef..cb5bd1709 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/activities/DeathActivity.kt
@@ -31,6 +31,7 @@ import com.habitrpg.common.habitica.helpers.ExceptionHandler
import com.habitrpg.common.habitica.helpers.launchCatching
import com.plattysoft.leonids.ParticleSystem
import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.Calendar
@@ -143,9 +144,13 @@ class DeathActivity : BaseActivity(), SnackbarActivity {
}
lifecycleScope.launch(ExceptionHandler.coroutine()) {
userRepository.updateUser("stats.hp", 1)
- HabiticaSnackbar.showSnackbar(
- this@DeathActivity.snackbarContainer(), getString(R.string.subscriber_benefit_success_faint), HabiticaSnackbar.SnackbarDisplayType.SUCCESS, isSubscriberBenefit = true)
- delay(2000)
+ MainScope().launchCatching {
+ delay(1000)
+ (HabiticaBaseApplication.getInstance(this@DeathActivity)?.currentActivity?.get() as? SnackbarActivity)?.let {activity ->
+ HabiticaSnackbar.showSnackbar(
+ activity.snackbarContainer(), getString(R.string.subscriber_benefit_success_faint), HabiticaSnackbar.SnackbarDisplayType.SUCCESS, isSubscriberBenefit = true)
+ }
+ }
finish()
}
}
@@ -153,13 +158,20 @@ class DeathActivity : BaseActivity(), SnackbarActivity {
binding.restartButton.setOnClickListener {
binding.restartButton.isEnabled = false
lifecycleScope.launch(ExceptionHandler.coroutine()) {
- userRepository.revive()
- finish()
- delay(1000)
- (HabiticaBaseApplication.getInstance(this@DeathActivity)?.currentActivity as? SnackbarActivity)?.let {activity ->
- HabiticaSnackbar.showSnackbar(
- activity.snackbarContainer(), getString(R.string.subscriber_benefit_success_faint), HabiticaSnackbar.SnackbarDisplayType.SUCCESS, isSubscriberBenefit = true)
+ val brokenItem = userRepository.revive()
+ if (brokenItem != null) {
+ MainScope().launchCatching {
+ delay(500)
+ (HabiticaBaseApplication.getInstance(this@DeathActivity)?.currentActivity?.get() as? SnackbarActivity)?.let { activity ->
+ HabiticaSnackbar.showSnackbar(
+ activity.snackbarContainer(),
+ getString(R.string.revive_broken_equipment, brokenItem.text),
+ HabiticaSnackbar.SnackbarDisplayType.BLACK
+ )
+ }
+ }
}
+ finish()
}
}
startAnimating()