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