From 5b6698f583c1d476350cf7824fcc752d6fc5aa26 Mon Sep 17 00:00:00 2001 From: natsu <107408377+natsurepo@users.noreply.github.com> Date: Mon, 24 Oct 2022 10:58:39 +0700 Subject: [PATCH] Extend setConstCommand "all" (#1884) * Extend give command "talent" * Update src/main/java/emu/grasscutter/data/excels/AvatarSkillDepotData.java Shorten IntStream for getCombatSkills Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com> * Fix setSkillLevel to work during avatar construction Shortening getCombatSkills * changeSkillLevel now acts as intermediate operation to fetch skillIds * setSkillLevel changes to allow out of range levels to be normalized * Update src/main/java/emu/grasscutter/command/commands/GiveCommand.java Removing recalcStats since it's redundant Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com> * Major changes and cleanup: - AvatarSkillDepotData: removed getCombatSkills since it's unused - TalentCommand: shortened /talent all using getSkillsAndEnergySkill - GiveCommand: changed changeSkillLevel to setSkillLevel - Avatar: delete changeSkillLevel and moved the operation inside setSkillLevel,updated skillId to Integer to catch special cases from GiveCommand * Small cleanup: Removed the special case from Avatar to be handled inside of GiveCommand * Added "all" parameter to SetConst * Changed all to [all] int SetConstCommand usage Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com> Co-authored-by: Luke H-W <Birdulon@users.noreply.github.com> --- .../command/commands/SetConstCommand.java | 59 ++++++++++++------- src/main/resources/languages/en-US.json | 1 + src/main/resources/languages/es-ES.json | 1 + src/main/resources/languages/fr-FR.json | 1 + src/main/resources/languages/ja-JP.json | 1 + src/main/resources/languages/ko-KR.json | 1 + src/main/resources/languages/pl-PL.json | 1 + src/main/resources/languages/ro-RO.json | 1 + src/main/resources/languages/ru-RU.json | 1 + src/main/resources/languages/zh-CN.json | 1 + src/main/resources/languages/zh-TW.json | 1 + 11 files changed, 48 insertions(+), 21 deletions(-) diff --git a/src/main/java/emu/grasscutter/command/commands/SetConstCommand.java b/src/main/java/emu/grasscutter/command/commands/SetConstCommand.java index f24f46fc..a2e3f68b 100644 --- a/src/main/java/emu/grasscutter/command/commands/SetConstCommand.java +++ b/src/main/java/emu/grasscutter/command/commands/SetConstCommand.java @@ -1,10 +1,7 @@ package emu.grasscutter.command.commands; -import emu.grasscutter.Grasscutter; import emu.grasscutter.command.Command; import emu.grasscutter.command.CommandHandler; -import emu.grasscutter.data.GameData; -import emu.grasscutter.data.excels.AvatarTalentData; import emu.grasscutter.game.avatar.Avatar; import emu.grasscutter.game.entity.EntityAvatar; import emu.grasscutter.game.player.Player; @@ -12,14 +9,13 @@ import emu.grasscutter.game.world.Scene; import emu.grasscutter.game.world.World; import emu.grasscutter.server.packet.send.*; import emu.grasscutter.utils.Position; -import it.unimi.dsi.fastutil.ints.IntArrayList; import java.util.List; @Command( label = "setConst", aliases = {"setconstellation"}, - usage = {"<constellation level>"}, + usage = {"<constellation level> [all]"}, permission = "player.setconstellation", permissionTargeted = "player.setconstellation.others") public final class SetConstCommand implements CommandHandler { @@ -29,21 +25,28 @@ public final class SetConstCommand implements CommandHandler { sendUsageMessage(sender); return; } - try { int constLevel = Integer.parseInt(args.get(0)); + // Check if level is out of range if (constLevel < -1 || constLevel > 6) { CommandHandler.sendTranslatedMessage(sender, "commands.setConst.range_error"); return; } - - EntityAvatar entity = targetPlayer.getTeamManager().getCurrentAvatarEntity(); - if (entity == null) return; - Avatar avatar = entity.getAvatar(); - - this.setConstellation(targetPlayer, avatar, constLevel); - - CommandHandler.sendTranslatedMessage(sender, "commands.setConst.success", avatar.getAvatarData().getName(), constLevel); + // If it's either empty or anything else other than "all" just do normal setConstellation + if (args.size() == 1) { + EntityAvatar entity = targetPlayer.getTeamManager().getCurrentAvatarEntity(); + if (entity == null) return; + Avatar avatar = entity.getAvatar(); + this.setConstellation(targetPlayer, avatar, constLevel); + CommandHandler.sendTranslatedMessage(sender, "commands.setConst.success", avatar.getAvatarData().getName(), constLevel); + return; + } + // Check if there's an additional argument which is "all", if it does then go setAllConstellation + if (args.size() > 1 && args.get(1).equalsIgnoreCase("all")) { + this.setAllConstellation(targetPlayer, constLevel); + CommandHandler.sendTranslatedMessage(sender, "commands.setConst.successall", constLevel); + } + else sendUsageMessage(sender); } catch (NumberFormatException ignored) { CommandHandler.sendTranslatedMessage(sender, "commands.setConst.level_error"); } @@ -55,13 +58,7 @@ public final class SetConstCommand implements CommandHandler { // force player to reload scene when necessary if (constLevel < currentConstLevel) { - World world = player.getWorld(); - Scene scene = player.getScene(); - Position pos = player.getPosition(); - - world.transferPlayerToScene(player, 1, pos); - world.transferPlayerToScene(player, scene.getId(), pos); - scene.broadcastPacket(new PacketSceneEntityAppearNotify(player)); + this.reloadScene(player); } // ensure that all changes are visible to the player @@ -69,4 +66,24 @@ public final class SetConstCommand implements CommandHandler { avatar.recalcStats(true); avatar.save(); } + + private void setAllConstellation(Player player, int constLevel) { + player.getAvatars().forEach(avatar -> { + avatar.forceConstellationLevel(constLevel); + avatar.recalcConstellations(); + avatar.recalcStats(true); + avatar.save(); + }); + // Just reload scene once, shorter than having to check for each constLevel < currentConstLevel + this.reloadScene(player); + } + + private void reloadScene(Player player) { + World world = player.getWorld(); + Scene scene = player.getScene(); + Position pos = player.getPosition(); + world.transferPlayerToScene(player, 1, pos); + world.transferPlayerToScene(player, scene.getId(), pos); + scene.broadcastPacket(new PacketSceneEntityAppearNotify(player)); + } } diff --git a/src/main/resources/languages/en-US.json b/src/main/resources/languages/en-US.json index 529e1e58..6471400e 100644 --- a/src/main/resources/languages/en-US.json +++ b/src/main/resources/languages/en-US.json @@ -264,6 +264,7 @@ "fail": "Failed to set constellation.", "failed_success": "Constellations for %s have been set to %s. Please reload scene to see changes.", "success": "Constellations for %s have been set to %s.", + "successall": "Constellations for all characters have been set to %s.", "description": "Sets constellation level for your current active character" }, "setFetterLevel": { diff --git a/src/main/resources/languages/es-ES.json b/src/main/resources/languages/es-ES.json index e1f536e0..50a0cc9c 100644 --- a/src/main/resources/languages/es-ES.json +++ b/src/main/resources/languages/es-ES.json @@ -264,6 +264,7 @@ "fail": "Error al establecer la constelaci贸n.", "failed_success": "Las constelaciones de %s han sido establecidas a %s. Por favor reinicia el escenario para ver los cambios.", "success": "Las constelaciones de %s han sido establecidas a %s.", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "Establece el nivel de constelaci贸n para tu personaje actual" }, "setFetterLevel": { diff --git a/src/main/resources/languages/fr-FR.json b/src/main/resources/languages/fr-FR.json index 35da92fe..dafb0fb9 100644 --- a/src/main/resources/languages/fr-FR.json +++ b/src/main/resources/languages/fr-FR.json @@ -264,6 +264,7 @@ "fail": "馃嚭馃嚫Failed to set constellation.", "failed_success": "馃嚭馃嚫Constellations for %s have been set to %s. Please reload scene to see changes.", "success": "馃嚭馃嚫Constellations for %s have been set to %s.", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "馃嚭馃嚫Sets constellation level for your current active character" }, "setFetterLevel": { diff --git a/src/main/resources/languages/ja-JP.json b/src/main/resources/languages/ja-JP.json index 97398b69..2403e564 100644 --- a/src/main/resources/languages/ja-JP.json +++ b/src/main/resources/languages/ja-JP.json @@ -264,6 +264,7 @@ "fail": "鏄熷骇銇ō瀹氥伀澶辨晽銇椼伨銇椼仧銆�", "failed_success": "%s 銇槦搴с伅 %s 銇ō瀹氥仌銈屻伨銇椼仧銆� 銈枫兗銉炽倰銉儹銉笺儔銇椼仸澶夋洿銈掔⒑瑾嶃仐銇︺亸銇犮仌銇勩€�", "success": "%s 銇槦搴с伅 %s 銇ō瀹氥仌銈屻伨銇椼仧銆�", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "鐝惧湪銈€偗銉嗐偅銉栥仾銈儯銉┿偗銈裤兗銇槦搴с儸銉欍儷銈掕ō瀹氥仐銇俱仚" }, "setFetterLevel": { diff --git a/src/main/resources/languages/ko-KR.json b/src/main/resources/languages/ko-KR.json index ca8e79c9..e74f2628 100644 --- a/src/main/resources/languages/ko-KR.json +++ b/src/main/resources/languages/ko-KR.json @@ -264,6 +264,7 @@ "fail": "馃嚭馃嚫Failed to set constellation.", "failed_success": "馃嚭馃嚫Constellations for %s have been set to %s. Please reload scene to see changes.", "success": "馃嚭馃嚫Constellations for %s have been set to %s.", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "馃嚭馃嚫Sets constellation level for your current active character" }, "setFetterLevel": { diff --git a/src/main/resources/languages/pl-PL.json b/src/main/resources/languages/pl-PL.json index b929d820..02f382df 100644 --- a/src/main/resources/languages/pl-PL.json +++ b/src/main/resources/languages/pl-PL.json @@ -264,6 +264,7 @@ "fail": "Nie uda艂o si臋 ustawi膰 konstelacji.", "failed_success": "Konstelacje dla %s zosta艂y ustawione na %s. Prosz臋 prze艂adowa膰 scen臋 aby zobaczy膰 zmiany.", "success": "Konstelacje dla %s zosta艂y ustawione na %s.", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "Ustawia poziom konstelacji dla aktywnej postaci" }, "setFetterLevel": { diff --git a/src/main/resources/languages/ro-RO.json b/src/main/resources/languages/ro-RO.json index 1578d219..48eac740 100644 --- a/src/main/resources/languages/ro-RO.json +++ b/src/main/resources/languages/ro-RO.json @@ -264,6 +264,7 @@ "fail": "馃嚭馃嚫Failed to set constellation.", "failed_success": "馃嚭馃嚫Constellations for %s have been set to %s. Please reload scene to see changes.", "success": "馃嚭馃嚫Constellations for %s have been set to %s.", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "馃嚭馃嚫Sets constellation level for your current active character" }, "setFetterLevel": { diff --git a/src/main/resources/languages/ru-RU.json b/src/main/resources/languages/ru-RU.json index 96c4c616..7faf9645 100644 --- a/src/main/resources/languages/ru-RU.json +++ b/src/main/resources/languages/ru-RU.json @@ -264,6 +264,7 @@ "fail": "袧械 褍写邪谢芯褋褜 褍褋褌邪薪芯胁懈褌褜 褍褉芯胁械薪褜 褋芯蟹胁械蟹写懈褟.", "failed_success": "小芯蟹胁械蟹写懈褟 写谢褟 %s 褍褋褌邪薪芯胁谢械薪褘 薪邪 %s. 袩械褉械蟹邪泄写懈褌械 褔褌芯斜褘 懈蟹屑械薪械薪懈褟 胁褋褌褍锌懈谢懈 胁 褋懈谢褍.", "success": "小芯蟹胁械蟹写懈褟 写谢褟 %s 斜褘谢懈 褍褋褌邪薪芯胁谢械薪褘 薪邪 %s.", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "袟邪写邪械褌 褍褉芯胁械薪褜 褋芯蟹胁械蟹写懈褟 写谢褟 邪泻褌懈胁薪芯谐芯 锌械褉褋芯薪邪卸邪" }, "setFetterLevel": { diff --git a/src/main/resources/languages/zh-CN.json b/src/main/resources/languages/zh-CN.json index 9bd17fea..bd098a45 100644 --- a/src/main/resources/languages/zh-CN.json +++ b/src/main/resources/languages/zh-CN.json @@ -264,6 +264,7 @@ "fail": "鍛戒箣搴х瓑绾ц缃け璐ャ€�", "failed_success": "鍛戒箣搴� %s 宸茶缃负 %s銆�", "success": "鍛戒箣搴� %s 宸茶缃负 %s銆�", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "涓哄綋鍓嶆椿璺冭鑹茶缃懡搴х瓑绾�" }, "setFetterLevel": { diff --git a/src/main/resources/languages/zh-TW.json b/src/main/resources/languages/zh-TW.json index 8ff04088..8d2d506e 100644 --- a/src/main/resources/languages/zh-TW.json +++ b/src/main/resources/languages/zh-TW.json @@ -264,6 +264,7 @@ "fail": "瑷畾鍛藉骇澶辨晽銆�", "failed_success": "%s鐨勫懡涔嬪骇宸茶ō瀹氱偤鎴�%s锛岄噸鏂扮櫥鍏ュ緦灏囨渻鐢熸晥銆�", "success": "%s鐨勫懡涔嬪骇宸茶ō瀹氱偤鎴�%s銆�", + "successall": "馃嚭馃嚫Constellations for all characters have been set to %s.", "description": "瑷畾鐣跺墠瑙掕壊鐨勫懡涔嬪骇銆�" }, "setFetterLevel": { -- GitLab