From e9ba66ee72df3f800c340e8ab53d314e8a2966e3 Mon Sep 17 00:00:00 2001
From: Arkerthan <arkerthan@gmail.com>
Date: Thu, 3 Jun 2021 18:58:38 +0200
Subject: [PATCH] show settings for all smart accessories in slave card

---
 devTools/types/FC/data.d.ts     |  7 ++-
 js/003-data/slaveSummaryData.js | 90 ++++++++++++++++++---------------
 src/js/slaveSummaryHelpers.js   | 32 ++++++++----
 src/js/slaveSummaryWidgets.js   |  4 +-
 4 files changed, 79 insertions(+), 54 deletions(-)

diff --git a/devTools/types/FC/data.d.ts b/devTools/types/FC/data.d.ts
index eee7fbaa16b..8d955b0f96f 100644
--- a/devTools/types/FC/data.d.ts
+++ b/devTools/types/FC/data.d.ts
@@ -64,7 +64,7 @@ declare namespace FC {
 		}
 
 		namespace SlaveSummary {
-			interface SmartPiercing {
+			interface SmartVibrator {
 				setting: {
 					off: string,
 					submissive: string,
@@ -85,6 +85,11 @@ declare namespace FC {
 					women: string,
 					"anti-men": string,
 					"anti-women": string,
+				},
+				system: {
+					"piercing": string,
+					"bullet": string,
+					"vibe": string
 				}
 			}
 		}
diff --git a/js/003-data/slaveSummaryData.js b/js/003-data/slaveSummaryData.js
index c0933de54d9..ea484cc1712 100644
--- a/js/003-data/slaveSummaryData.js
+++ b/js/003-data/slaveSummaryData.js
@@ -561,27 +561,32 @@ App.Data.SlaveSummary = {
 			3: {desc: "Bad accent.", style: "red"},
 			4: {desc: "No language skills.", style: "red"},
 		},
-		smartPiercing: {
+		smartVibrator: {
 			setting: {
-				"off": "SP off.",
-				"submissive": "SP: submissive.",
-				"lesbian": "SP: lesbian.",
-				"oral": "SP: oral.",
-				"humiliation": "SP: humiliation.",
-				"anal": "SP: anal.",
-				"boobs": "SP: breasts.",
-				"sadist": "SP: sadism.",
-				"masochist": "SP: masochism.",
-				"dom": "SP: dominance.",
-				"pregnancy": "SP: pregnancy.",
-				"vanilla": "SP: vanilla.",
-				"all": "SP: all.",
-				"none": "SP: none.",
-				"monitoring": "SP: monitoring.",
-				"men": "SP: men.",
-				"women": "SP: women.",
-				"anti-men": "SP: anti men.",
-				"anti-women": "SP: anti women.",
+				"off": " off.",
+				"submissive": " submissive.",
+				"lesbian": " lesbian.",
+				"oral": " oral.",
+				"humiliation": " humiliation.",
+				"anal": " anal.",
+				"boobs": " breasts.",
+				"sadist": " sadism.",
+				"masochist": " masochism.",
+				"dom": " dominance.",
+				"pregnancy": " pregnancy.",
+				"vanilla": " vanilla.",
+				"all": " all.",
+				"none": " none.",
+				"monitoring": " monitoring.",
+				"men": " men.",
+				"women": " women.",
+				"anti-men": " anti men.",
+				"anti-women": " anti women.",
+			},
+			system: {
+				"piercing": "SP",
+				"bullet": "SB",
+				"vibe": "SV"
 			}
 		},
 		skills: {
@@ -1328,27 +1333,32 @@ App.Data.SlaveSummary = {
 			"fair": "Fair",
 			"pale": "Pale"
 		},
-		smartPiercing: {
+		smartVibrator: {
 			setting: {
-				"off": "SP-",
-				"submissive": "SP:sub",
-				"lesbian": "SP:les",
-				"oral": "SP:oral",
-				"humiliation": "SP:humil",
-				"anal": "SP:anal",
-				"boobs": "SP:boobs",
-				"sadist": "SP:sade",
-				"masochist": "SP:pain",
-				"dom": "SP:dom",
-				"pregnancy": "SP:pregnancy",
-				"vanilla": "SP:vanilla",
-				"all": "SP:all",
-				"none": "SP:none",
-				"monitoring": "SP:monitoring",
-				"men": "SP:men",
-				"women": "SP:women",
-				"anti-men": "SP:anti-men",
-				"anti-women": "SP:anti-women",
+				"off": "-",
+				"submissive": "sub",
+				"lesbian": "les",
+				"oral": "oral",
+				"humiliation": "humil",
+				"anal": "anal",
+				"boobs": "boobs",
+				"sadist": "sade",
+				"masochist": "pain",
+				"dom": "dom",
+				"pregnancy": "pregnancy",
+				"vanilla": "vanilla",
+				"all": "all",
+				"none": "none",
+				"monitoring": "monitoring",
+				"men": "men",
+				"women": "women",
+				"anti-men": "anti-men",
+				"anti-women": "anti-women",
+			},
+			system: {
+				"piercing": "SP",
+				"bullet": "SB",
+				"vibe": "SV"
 			}
 		},
 		skills: {
diff --git a/src/js/slaveSummaryHelpers.js b/src/js/slaveSummaryHelpers.js
index 6d40b9534dc..3b4c2d9e8ab 100644
--- a/src/js/slaveSummaryHelpers.js
+++ b/src/js/slaveSummaryHelpers.js
@@ -465,37 +465,47 @@ App.UI.SlaveSummaryImpl = function() {
 
 		/**
 		 * @param {App.Entity.SlaveState} slave
-		 * @param {FC.Data.SlaveSummary.SmartPiercing} spData
+		 * @param {FC.Data.SlaveSummary.SmartVibrator} spData
 		 * @returns {string}
 		 */
 		function smartFetishStr(slave, spData) {
+			/** @type {string} */
+			let value;
+			if (slave.clitPiercing === 3) {
+				value = spData.system.piercing;
+			} else if (slave.dickAccessory === "smart bullet vibrator") {
+				value = spData.system.bullet;
+			} else {
+				value = spData.system.vibe;
+			}
+			value += ":";
 			if (slave.fetishKnown === 1) {
 				if (slave.clitSetting === "off") {
-					return spData.setting.off;
+					return value + spData.setting.off;
 				} else if ((slave.energy <= 95) && (slave.clitSetting === "all")) {
-					return spData.setting.all;
+					return value + spData.setting.all;
 				} else if ((slave.energy > 5) && (slave.clitSetting === "none")) {
-					return spData.setting.none;
+					return value + spData.setting.none;
 				} else if (((slave.fetish !== "none") && (slave.clitSetting === "vanilla"))) {
-					return spData.setting.vanilla;
+					return value + spData.setting.vanilla;
 				} else if (slave.fetishStrength <= 95 || slave.fetish !== slave.clitSetting) {
-					const s = spData.setting[slave.clitSetting];
+					const s = value + spData.setting[slave.clitSetting];
 					if (s) {
 						return s;
 					}
 				}
 				if (!["anti-men", "anti-women", "men", "women"].includes(slave.clitSetting)) {
-					return spData.setting.monitoring;
+					return value + spData.setting.monitoring;
 				}
 			} else {
-				return spData.setting[slave.clitSetting];
+				return value + spData.setting[slave.clitSetting];
 			}
 			return null;
 		}
 
 		/**
 		 * @param {App.Entity.SlaveState} slave
-		 * @param {FC.Data.SlaveSummary.SmartPiercing} spData
+		 * @param {FC.Data.SlaveSummary.SmartVibrator} spData
 		 * @returns {string}
 		 */
 		function smartAttractionStr(slave, spData) {
@@ -1300,7 +1310,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @returns {void}
 		 */
 		function short_smart_piercing(slave, c) {
-			const s = smartFetishStr(slave, data.short.smartPiercing) || smartAttractionStr(slave, data.short.smartPiercing);
+			const s = smartFetishStr(slave, data.short.smartVibrator) || smartAttractionStr(slave, data.short.smartVibrator);
 			if (s) {
 				makeSpan(c, s);
 			}
@@ -1389,7 +1399,7 @@ App.UI.SlaveSummaryImpl = function() {
 		 * @returns {void}
 		 */
 		function long_smart_piercing(slave, c) {
-			const s = smartFetishStr(slave, data.long.smartPiercing) || smartAttractionStr(slave, data.long.smartPiercing);
+			const s = smartFetishStr(slave, data.long.smartVibrator) || smartAttractionStr(slave, data.long.smartVibrator);
 			if (s) {
 				makeSpan(c, s);
 			}
diff --git a/src/js/slaveSummaryWidgets.js b/src/js/slaveSummaryWidgets.js
index 99398330f52..26ba008a702 100644
--- a/src/js/slaveSummaryWidgets.js
+++ b/src/js/slaveSummaryWidgets.js
@@ -298,7 +298,7 @@ App.UI.SlaveSummaryRenderers = function() {
 					b.attraction(slave, c);
 				}
 			}
-			if (slave.clitPiercing === 3) {
+			if (slave.clitPiercing === 3 || dildoVibeLevel(slave) > 1 || slave.dickAccessory === "smart bullet vibrator") {
 				b.smart_piercing(slave, c);
 			}
 			b.behavior_flaw(slave, c);
@@ -692,7 +692,7 @@ App.UI.SlaveSummaryRenderers = function() {
 					b.attraction(slave, c);
 				}
 			}
-			if (slave.clitPiercing === 3) {
+			if (slave.clitPiercing === 3 || dildoVibeLevel(slave) > 1 || slave.dickAccessory === "smart bullet vibrator") {
 				b.smart_piercing(slave, c);
 			}
 			b.behavior_flaw(slave, c);
-- 
GitLab