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))
}