diff --git a/src/main/java/EventOuterClass.java b/src/main/java/EventOuterClass.java
index 18bb19d..8d9c037 100644
--- a/src/main/java/EventOuterClass.java
+++ b/src/main/java/EventOuterClass.java
@@ -869,6 +869,10 @@
* SET_POSTABLE_ITEM_BAND = 90;
*/
SET_POSTABLE_ITEM_BAND(90),
+ /**
+ * ABILITY_CLASS_UP = 91;
+ */
+ ABILITY_CLASS_UP(91),
UNRECOGNIZED(-1),
;
@@ -1237,6 +1241,10 @@
* SET_POSTABLE_ITEM_BAND = 90;
*/
public static final int SET_POSTABLE_ITEM_BAND_VALUE = 90;
+ /**
+ * ABILITY_CLASS_UP = 91;
+ */
+ public static final int ABILITY_CLASS_UP_VALUE = 91;
public final int getNumber() {
@@ -1352,6 +1360,7 @@
case 88: return SET_VALID_NET_MODE;
case 89: return SET_ALLOWED_POSTABLE_ITEMS;
case 90: return SET_POSTABLE_ITEM_BAND;
+ case 91: return ABILITY_CLASS_UP;
default: return null;
}
}
@@ -27481,7 +27490,7 @@
descriptor;
static {
java.lang.String[] descriptorData = {
- "\n\013Event.proto\"\2461\n\005Event\022\016\n\006millis\030\001 \001(\003\022" +
+ "\n\013Event.proto\"\2741\n\005Event\022\016\n\006millis\030\001 \001(\003\022" +
"\020\n\010avatarID\030\002 \001(\t\022\037\n\007eventID\030\003 \001(\0162\016.Eve" +
"nt.EventID\022\014\n\004text\030\004 \001(\t\022\014\n\004data\030\005 \003(\014\0221" +
"\n\017qwilightCallNet\030\006 \001(\0132\026.Event.Qwilight" +
@@ -27595,7 +27604,7 @@
"ghtPostItem\022\021\n\thandlerID\030\001 \001(\t\022\022\n\nposted" +
"Item\030\002 \001(\005\022\022\n\navatarName\030\003 \001(\t\022\014\n\004wait\030\004" +
" \001(\001\"5\n\017AvatarNetStatus\022\013\n\007Default\020\000\022\t\n\005" +
- "Clear\020\001\022\n\n\006Failed\020\002\"\304\r\n\007EventID\022\n\n\006LOG_I" +
+ "Clear\020\001\022\n\n\006Failed\020\002\"\332\r\n\007EventID\022\n\n\006LOG_I" +
"N\020\000\022\016\n\nNOT_LOG_IN\020\001\022\013\n\007WARNING\020\002\022\r\n\tSITE" +
"_YELL\020\003\022\017\n\013CALL_BUNDLE\020\004\022\022\n\016SAVE_AS_BUND" +
"LE\020\005\022\021\n\rSAVING_BUNDLE\020\006\022\017\n\013WIPE_BUNDLE\020\007" +
@@ -27638,8 +27647,8 @@
"T_FAVOR\020T\022\026\n\022SET_AUTO_SITE_HAND\020U\022\024\n\020SET" +
"_AVATAR_GROUP\020V\022\r\n\tPOST_ITEM\020W\022\026\n\022SET_VA" +
"LID_NET_MODE\020X\022\036\n\032SET_ALLOWED_POSTABLE_I" +
- "TEMS\020Y\022\032\n\026SET_POSTABLE_ITEM_BAND\020ZB\n\n\010fa" +
- "stTextb\006proto3"
+ "TEMS\020Y\022\032\n\026SET_POSTABLE_ITEM_BAND\020Z\022\024\n\020AB" +
+ "ILITY_CLASS_UP\020[B\n\n\010fastTextb\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
diff --git a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt
index 2d03c75..51f4a64 100644
--- a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt
+++ b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt
@@ -677,7 +677,10 @@
if (future.isSuccess) {
savingBundleIOs.remove(eventText)?.let { savingBundleIO ->
when (savingBundleIO.bundleVariety) {
- BundleIO.BundleVariety.DEFAULT_NOTE_FILE -> saveDefaultNote("")
+ BundleIO.BundleVariety.DEFAULT_NOTE_FILE -> saveDefaultNote(
+ ""
+ )
+
BundleIO.BundleVariety.DEFAULT_UI -> saveDefaultUI(false.toString())
else -> Unit
}
@@ -819,6 +822,16 @@
else -> 0.0
}
val lastAvatarLevel = DB.getAvatarLevels(it)[0]
+ val abilityClassVariety = when (inputMode) {
+ Component.InputMode.INPUT_MODE_5_1 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K
+ Component.InputMode.INPUT_MODE_7_1 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_7K
+ Component.InputMode.INPUT_MODE_9 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_9K
+ else -> null
+ }
+ val lastAbilityClassText =
+ if (abilityClassVariety != null) AbilityClassSystem.getText(
+ abilityClassVariety, lastAvatarAbility
+ ) else null
val comment = CommentOuterClass.Comment.parseFrom(commentFileContents)
val commentFileData = commentFileContents.toByteArray()
@@ -940,6 +953,25 @@
val to = avatarLevel
})
}
+
+ val abilityClassText =
+ if (abilityClassVariety != null) AbilityClassSystem.getText(
+ abilityClassVariety, avatarAbility
+ ) else null
+ if (lastAbilityClassText != abilityClassText) {
+ send(EventOuterClass.Event.EventID.ABILITY_CLASS_UP, abilityClassText)
+ if (SiteHandler.hasAvatar(this, SiteHandler.commentSiteID)) {
+ SiteHandler.putSiteYell(
+ SiteHandler.commentSiteID,
+ JSON.TwilightAbilitySiteYell(
+ it,
+ avatarName,
+ inputMode,
+ distanceAvatarAbility
+ )
+ )
+ }
+ }
}
}
}
diff --git a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt
index 88710f3..7572103 100644
--- a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt
+++ b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt
@@ -33,21 +33,64 @@
return drawings[drawings.size - 1]
}
- fun getAbilityClasses(abilityClassVariety: AbilityClassVariety, abilityClass: Double): Array {
+ fun getText(abilityClassVariety: AbilityClassVariety, abilityClass: Double): String {
+ val abilityClasses = abilityClasses[abilityClassVariety.value]
+ for (i in abilityClasses.indices) {
+ if (abilityClass >= abilityClasses[i]) {
+ when (i) {
+ 0 -> return "GRAND MASTERⅠ"
+ 1 -> return "GRAND MASTERⅡ"
+ 2 -> return "GRAND MASTERⅢ"
+ 3 -> return "GRAND MASTERⅣ"
+ 4 -> return "GRAND MASTERⅤ"
+ 5 -> return "MASTERⅠ"
+ 6 -> return "MASTERⅡ"
+ 7 -> return "MASTERⅢ"
+ 8 -> return "MASTERⅣ"
+ 9 -> return "MASTERⅤ"
+ 10 -> return "DIAMONDⅠ"
+ 11 -> return "DIAMONDⅡ"
+ 12 -> return "DIAMONDⅢ"
+ 13 -> return "DIAMONDⅣ"
+ 14 -> return "DIAMONDⅤ"
+ 15 -> return "PLATINUMⅠ"
+ 16 -> return "PLATINUMⅡ"
+ 17 -> return "PLATINUMⅢ"
+ 18 -> return "PLATINUMⅣ"
+ 19 -> return "PLATINUMⅤ"
+ 20 -> return "GOLDⅠ"
+ 21 -> return "GOLDⅡ"
+ 22 -> return "GOLDⅢ"
+ 23 -> return "GOLDⅣ"
+ 24 -> return "GOLDⅤ"
+ 25 -> return "SILVERⅠ"
+ 26 -> return "SILVERⅡ"
+ 27 -> return "SILVERⅢ"
+ 28 -> return "SILVERⅣ"
+ 29 -> return "SILVERⅤ"
+ 30 -> return "BRONZEⅠ"
+ 31 -> return "BRONZEⅡ"
+ 32 -> return "BRONZEⅢ"
+ 33 -> return "BRONZEⅣ"
+ 34 -> return "BRONZEⅤ"
+ }
+ }
+ }
+ return "UNRANKED"
+ }
+
+ fun getStatus(abilityClassVariety: AbilityClassVariety, abilityClass: Double): Double {
val abilityClasses = abilityClasses[abilityClassVariety.value]
for (i in abilityClasses.indices) {
if (abilityClass >= abilityClasses[i]) {
return if (i == 0) {
- arrayOf(-1.0, -1.0)
+ 1.0
} else {
- arrayOf(abilityClasses[i - 1] - abilityClass, abilityClasses[i - 1] - abilityClasses[i])
+ (abilityClass - abilityClasses[i]) / (abilityClasses[i - 1] - abilityClasses[i])
}
}
}
- return arrayOf(
- abilityClasses[abilityClasses.size - 1],
- abilityClasses[abilityClasses.size - 1]
- )
+ return 0.0
}
fun loadAbilityClass() {
diff --git a/src/main/kotlin/net/taehui/twilight/system/DB.kt b/src/main/kotlin/net/taehui/twilight/system/DB.kt
index 07a11d4..0a3ea9a 100644
--- a/src/main/kotlin/net/taehui/twilight/system/DB.kt
+++ b/src/main/kotlin/net/taehui/twilight/system/DB.kt
@@ -2675,12 +2675,15 @@
var avatarAbility5K = 0.0
var avatarAbility5KPlace = 0
var avatarAbility5KCount = 0
+ var avatarAbility5KStatus = 0.0
var avatarAbility7K = 0.0
var avatarAbility7KPlace = 0
var avatarAbility7KCount = 0
+ var avatarAbility7KStatus = 0.0
var avatarAbility9K = 0.0
var avatarAbility9KPlace = 0
var avatarAbility9KCount = 0
+ var avatarAbility9KStatus = 0.0
val dateSet = mutableListOf()
val dateValues = mutableListOf()
val quitStatusValues = IntArray(7)
@@ -2852,6 +2855,7 @@
avatarAbility5K = targetAbility5K.second.first
avatarAbility5KPlace = validAbilities5K.indexOf(targetAbility5K)
avatarAbility5KCount = validAbilities5K.size
+ avatarAbility5KStatus = AbilityClassSystem.getStatus(AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, avatarAbility5K)
}, logFuture {
val rawAbilities7K = getAbilities7K()
val targetAbilities7K = getAbilities(rawAbilities7K).toList()
@@ -2891,12 +2895,15 @@
val avatarAbility5K = avatarAbility5K
val avatarAbility5KPlace = avatarAbility5KPlace + 1
val avatarAbility5KCount = avatarAbility5KCount
+ val avatarAbility5KStatus = avatarAbility5KStatus
val avatarAbility7K = avatarAbility7K
val avatarAbility7KPlace = avatarAbility7KPlace + 1
val avatarAbility7KCount = avatarAbility7KCount
+ val avatarAbility7KStatus = avatarAbility7KStatus
val avatarAbility9K = avatarAbility9K
val avatarAbility9KPlace = avatarAbility9KPlace + 1
val avatarAbility9KCount = avatarAbility9KCount
+ val avatarAbility9KStatus = avatarAbility9KStatus
val levelNames = arrayOf("*").plus(AbilitySystem.getAbilityNames())
val dateSet = dateSet
val dateValues = dateValues