diff --git a/Habitica/build.gradle b/Habitica/build.gradle index fb6220375..af3059756 100644 --- a/Habitica/build.gradle +++ b/Habitica/build.gradle @@ -149,7 +149,7 @@ android { buildConfigField "String", "TESTING_LEVEL", "\"production\"" resConfigs "en", "bg", "de", "en-rGB", "es", "fr", "hr-rHR", "in", "it", "iw", "ja", "ko", "lt", "nl", "pl", "pt-rBR", "pt-rPT", "ru", "tr", "zh", "zh-rTW" - versionCode 2940 + versionCode 2943 versionName "3.2.3" } diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 398def0a2..f3423f17f 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -1152,4 +1152,6 @@ Go to Survey Habitica player survey Fill out this 5 minute survey to help us grow and receive an achievement! + You must purchase the previous items in this sequence to unlock + You caused damage to the boss 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 0b0fcef7f..c669ad5ab 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 @@ -125,19 +125,20 @@ class UserRepositoryImpl(localRepository: UserLocalRepository, apiClient: ApiCli override fun useSkill(key: String, target: String?, taskId: String): Flowable { return zipWithLiveUser(apiClient.useSkill(key, target ?: "", taskId)) { skillResponse, user -> - mergeUser(user, skillResponse.user) + skillResponse.user?.let { mergeUser(user, it) } skillResponse } } override fun useSkill(key: String, target: String?): Flowable { return zipWithLiveUser(apiClient.useSkill(key, target ?: "")) { response, user -> - response.hpDiff = response.user.stats?.hp ?: 0 - (user.stats?.hp ?: 0.0) - response.expDiff = response.user.stats?.exp ?: 0 - (user.stats?.exp ?: 0.0) - response.goldDiff = response.user.stats?.gp ?: 0 - (user.stats?.gp ?: 0.0) - mergeUser(user, response.user) - response - } + response.hpDiff = response.user?.stats?.hp ?: 0 - (user.stats?.hp ?: 0.0) + response.expDiff = response.user?.stats?.exp ?: 0 - (user.stats?.exp ?: 0.0) + response.goldDiff = response.user?.stats?.gp ?: 0 - (user.stats?.gp ?: 0.0) + response.damage = (response.user?.party?.quest?.progress?.up ?: 0.0f) - (user.party?.quest?.progress?.up ?: 0.0f) + response.user?.let { mergeUser(user, it) } + response + } } override fun changeClass(): Flowable = apiClient.changeClass().flatMap { retrieveUser(withTasks = false, forced = true) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/SkillResponse.java b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/SkillResponse.java deleted file mode 100644 index 8b3cd4c47..000000000 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/SkillResponse.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.habitrpg.android.habitica.models.responses; - -import com.habitrpg.android.habitica.models.tasks.Task; -import com.habitrpg.android.habitica.models.user.User; - -import java.util.List; - -public class SkillResponse { - - public User user; - public List partyMembers; - public Task task; - - public double expDiff; - public double hpDiff; - public double goldDiff; - -} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/SkillResponse.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/SkillResponse.kt new file mode 100644 index 000000000..bd35edcd1 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/models/responses/SkillResponse.kt @@ -0,0 +1,13 @@ +package com.habitrpg.android.habitica.models.responses + +import com.habitrpg.android.habitica.models.tasks.Task +import com.habitrpg.android.habitica.models.user.User + +class SkillResponse { + var user: User? = null + var task: Task? = null + var expDiff = 0.0 + var hpDiff = 0.0 + var goldDiff = 0.0 + var damage = 0.0f +} \ No newline at end of file diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt index 906894033..f19168cad 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/skills/SkillsFragment.kt @@ -110,7 +110,7 @@ class SkillsFragment : BaseMainFragment() { } private fun displaySkillResult(usedSkill: Skill?, response: SkillResponse) { - adapter?.mana = response.user.stats?.mp ?: 0.0 + adapter?.mana = response.user?.stats?.mp ?: 0.0 val activity = activity ?: return if ("special" == usedSkill?.habitClass) { showSnackbar(activity.snackbarContainer, context?.getString(R.string.used_skill_without_mana, usedSkill.text), HabiticaSnackbar.SnackbarDisplayType.BLUE) @@ -123,6 +123,15 @@ class SkillsFragment : BaseMainFragment() { HabiticaSnackbar.SnackbarDisplayType.BLUE) } } + if (response.damage > 0) { + context?.let { + showSnackbar(activity.snackbarContainer, null, + context?.getString(R.string.caused_damage), + BitmapDrawable(resources, HabiticaIconsHelper.imageOfDamage()), + ContextCompat.getColor(it, R.color.green_10), "+" + response.damage, + HabiticaSnackbar.SnackbarDisplayType.SUCCESS) + } + } compositeSubscription.add(userRepository.retrieveUser(false).subscribe({ }, RxErrorHandler.handleEmptyError())) } diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt index 89c97d367..bb8673e31 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/views/shops/PurchaseDialog.kt @@ -2,6 +2,7 @@ package com.habitrpg.android.habitica.ui.views.shops import android.content.Context import android.graphics.drawable.BitmapDrawable +import android.util.Log import android.view.LayoutInflater import android.view.View import android.widget.ImageView @@ -170,6 +171,7 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop @OptIn(ExperimentalTime::class) private fun setLimitedTextView() { + if (user == null) return if (shopItem.habitClass != null && shopItem.habitClass != "special" && user?.stats?.habitClass != shopItem.habitClass) { limitedTextView.text = context.getString(R.string.class_equipment_shop_dialog) limitedTextView.visibility = View.VISIBLE @@ -193,9 +195,10 @@ class PurchaseDialog(context: Context, component: UserComponent?, val item: Shop buyLabel.text = context.getString(R.string.locked) limitedTextView.visibility = View.GONE if (shopItem.isTypeGear && shopItem.key.last().toString().toIntOrNull() != null) { - val previousKey = "${shopItem.key.dropLast(1)}${shopItem.key.last().toString().toIntOrNull()}" - if (user?.items?.gear?.owned?.find { it.key == previousKey} == null) { + val previousKey = "${shopItem.key.dropLast(1)}${(shopItem.key.last().toString().toIntOrNull() ?: 1) - 1}" + if (user?.items?.gear?.owned?.find { it.key == previousKey}?.owned != true) { limitedTextView.visibility = View.VISIBLE + limitedTextView.text = context.getString(R.string.locked_equipment_shop_dialog) limitedTextView.background = ContextCompat.getColor(context, R.color.offset_background).toDrawable() limitedTextView.setTextColor(ContextCompat.getColor(context, R.color.text_secondary)) }