├── APIFawe-zim.sk ├── FAWETools.sk ├── LICENSE ├── MotionUtils.sk ├── README.md ├── api.sk ├── charts ├── -falling_asteroid.sk ├── -simpletone.sk ├── -styx_helix.sk ├── -world_function.sk ├── falling_asteroid_properties.sk ├── simpletone_properties.sk ├── styx_helix_properties.sk └── world_function_properties.sk ├── editor.sk ├── gui.sk ├── judge.sk ├── load.sk ├── main.sk └── result.sk /APIFawe-zim.sk: -------------------------------------------------------------------------------- 1 | 2 | import: 3 | java.io.File 4 | java.io.FileInputStream 5 | java.io.FileOutputStream 6 | org.bukkit.Bukkit 7 | com.sk89q.worldedit.WorldEdit 8 | com.sk89q.worldedit.bukkit.BukkitWorld 9 | com.sk89q.worldedit.regions.CuboidRegion 10 | com.sk89q.worldedit.function.pattern.BlockPattern 11 | com.sk89q.worldedit.function.operation.Operations 12 | com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard 13 | com.sk89q.worldedit.function.operation.ForwardExtentCopy 14 | com.sk89q.worldedit.world.block.BlockTypes 15 | com.sk89q.worldedit.extension.input.ParserContext 16 | 17 | re.imc.worldeditlib.WorldEditLib 18 | 19 | on load: 20 | delete {-worldeditAPI::*} 21 | set {-worldeditAPI::BaseBlock6} to class "com.sk89q.worldedit.blocks.BaseBlock" 22 | set {-worldeditAPI::BukkitUtil} to class "com.sk89q.worldedit.bukkit.BukkitUtil" 23 | set {-worldeditAPI::BlockVector3} to class "com.sk89q.worldedit.math.BlockVector3" 24 | set {-worldeditAPI::BaseBlock7} to class "com.sk89q.worldedit.world.block.BaseBlock" 25 | set {-worldeditAPI::Schematic} to class "com.boydti.fawe.object.schematic.Schematic" 26 | set {-worldeditAPI::BukkitAdapter} to class "com.sk89q.worldedit.bukkit.BukkitAdapter" 27 | set {-worldeditAPI::ClipboardFormat} to class "com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat" 28 | set {-worldeditAPI::ClipboardFormats} to class "com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats" 29 | set {-worldeditAPI::BuiltInClipboardFormat} to class "com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat" 30 | 31 | function worldeditAPI(loc: location) :: object: 32 | if {-worldeditAPI::BlockVector3} is not set: 33 | return {-worldeditAPI::BukkitUtil}.toVector({_loc}) 34 | else: 35 | return {-worldeditAPI::BlockVector3}.at({_loc}.getBlockX(), {_loc}.getBlockY() and {_loc}.getBlockZ()) 36 | 37 | 38 | 39 | 40 | effect replace blocks (within|between) %location% and %location% with pattern %string%: 41 | trigger: 42 | WorldEditLib.replaceBlocks(expr-1, expr-2, expr-3) 43 | 44 | 45 | effect replace blocks (within|between) %location% and %location% with %item%: 46 | trigger: 47 | set {_w} to new BukkitWorld(expr-2.getWorld()) 48 | set {_region} to new CuboidRegion({_w}, worldeditAPI(expr-1) and worldeditAPI(expr-2)) 49 | set {_editSession} to WorldEdit.getInstance().getEditSessionFactory().getEditSession({_w} and -1) 50 | if {-worldeditAPI::BlockVector3} is not set: 51 | set {_baseBlock} to new BlockPattern(new {-worldeditAPI::BaseBlock6}((random item of expr-3).getTypeId())) 52 | else: 53 | set {_baseBlock} to new BlockPattern(new {-worldeditAPI::BaseBlock7}({-worldeditAPI::BukkitAdapter}.asBlockState(random item of expr-3))) 54 | await {_editSession}.setBlocks({_region} and {_baseBlock}) 55 | {_editSession}.flushQueue() 56 | 57 | 58 | effect paste schematic %string% at %location%: 59 | trigger: 60 | if {-worldeditAPI::Schematics::%expr-1%} is not set: 61 | set {_file} to new File(expr-1) 62 | if {-worldeditAPI::BlockVector3} is not set: 63 | set {-worldeditAPI::Schematics::%expr-1%} to {-worldeditAPI::ClipboardFormat}.findByFile({_file}).load({_file}) 64 | else: 65 | set {-worldeditAPI::Schematics::%expr-1%} to {-worldeditAPI::ClipboardFormats}.findByFile({_file}).load({_file}) 66 | await {-worldeditAPI::Schematics::%expr-1%}.paste(new BukkitWorld(expr-2.getWorld()), worldeditAPI(expr-2), false, true and null) 67 | 68 | effect save schematic %object% to file %string%: 69 | trigger: 70 | set {_clipboard} to expr-1 71 | set {_schematic} to new File(expr-2) 72 | {_schematic}.getParentFile().mkdirs() 73 | set {_writer} to {-worldeditAPI::BuiltInClipboardFormat}.SPONGE_SCHEMATIC.getWriter(new FileOutputStream({_schematic})) 74 | {_writer}.write({_clipboard}) 75 | {_writer}.close() 76 | effect save schematic %string% from %location% and %location%: 77 | trigger: 78 | set {_schematic} to new File(expr-1) 79 | set {_region} to new CuboidRegion(new BukkitWorld(expr-2.getWorld()), worldeditAPI(expr-2) and worldeditAPI(expr-3)) 80 | if {-worldeditAPI::BlockVector3} is not set: 81 | set {_schematic} to new {-worldeditAPI::Schematic}({_region}) 82 | {_schematic}.getClipboard().setOrigin(worldeditAPI(expr-2)) 83 | {_schematic}.save({_schematic} and {-worldeditAPI::ClipboardFormat}.SCHEMATIC) 84 | stop 85 | set {_clipboard} to new BlockArrayClipboard({_region}) 86 | set {_editSession} to WorldEdit.getInstance().getEditSessionFactory().getEditSession({_region}.getWorld() and -1) 87 | set {_forwardExtentCopy} to new ForwardExtentCopy({_editSession}, {_region}, {_clipboard} and {_region}.getMinimumPoint()) 88 | {_forwardExtentCopy}.setCopyingEntities(false) 89 | {_clipboard}.setOrigin(worldeditAPI(expr-2)) 90 | Operations.complete({_forwardExtentCopy}) 91 | set {_writer} to {-worldeditAPI::BuiltInClipboardFormat}.SPONGE_SCHEMATIC.getWriter(new FileOutputStream({_schematic})) 92 | {_writer}.write({_clipboard}) 93 | {_writer}.close() 94 | 95 | effect paste %object% at %location%: 96 | trigger: 97 | await expr-1.paste(new BukkitWorld(expr-2.getWorld()), worldeditAPI(expr-2), false, true and null) 98 | 99 | expression schematic at %location% from %location% and %location%: 100 | return type: object 101 | get: 102 | set {_region} to new CuboidRegion(new BukkitWorld(expr-1.getWorld()), worldeditAPI(expr-2) and worldeditAPI(expr-3)) 103 | set {_clipboard} to new BlockArrayClipboard({_region}) 104 | set {_editSession} to WorldEdit.getInstance().getEditSessionFactory().getEditSession({_region}.getWorld() and -1) 105 | set {_forwardExtentCopy} to new ForwardExtentCopy({_editSession}, {_region}, {_clipboard} and {_region}.getMinimumPoint()) 106 | {_forwardExtentCopy}.setCopyingEntities(false) 107 | {_clipboard}.setOrigin(worldeditAPI(expr-1)) 108 | Operations.complete({_forwardExtentCopy}) 109 | return {_clipboard} -------------------------------------------------------------------------------- /FAWETools.sk: -------------------------------------------------------------------------------- 1 | on break: 2 | player's tool is blaze rod 3 | player have permission "sktools.admin" 4 | cancel event 5 | if player is sneaking: 6 | clear {loc3::%player%} 7 | message "" to player 8 | message "&e调试魔棒>> &7位置1: %{loc1::%player%}%" to player 9 | message "&e调试魔棒>> &7位置2: %{loc2::%player%}%" to player 10 | message "&e调试魔棒>> &a结构原点: %{loc3::%player%}%" to player 11 | message "" to player 12 | else: 13 | set {loc1::%player%} to event-block's location 14 | message "" to player 15 | message "&e调试魔棒>> &a位置1: %{loc1::%player%}%" to player 16 | message "&e调试魔棒>> &7位置2: %{loc2::%player%}%" to player 17 | message "&e调试魔棒>> &7结构原点: %{loc3::%player%}%" to player 18 | message "" to player 19 | on right click with blaze rod: 20 | event-block is set 21 | player have permission "sktools.admin" 22 | cancel event 23 | if player is sneaking: 24 | set {loc3::%player%} to event-block's location 25 | message "" to player 26 | message "&e调试魔棒>> &7位置1: %{loc1::%player%}%" to player 27 | message "&e调试魔棒>> &7位置2: %{loc2::%player%}%" to player 28 | message "&e调试魔棒>> &a结构原点: %{loc3::%player%}%" to player 29 | message "" to player 30 | else: 31 | set {loc2::%player%} to event-block's location 32 | message "" to player 33 | message "&e调试魔棒>> &7位置1: %{loc1::%player%}%" to player 34 | message "&e调试魔棒>> &a位置2: %{loc2::%player%}%" to player 35 | message "&e调试魔棒>> &7结构原点: %{loc3::%player%}%" to player 36 | message "" to player 37 | command /skcopy: 38 | permission: sktools.admin 39 | trigger: 40 | if {loc3::%player%} is not set: 41 | set {loc3::%player%} to {loc1::%player%} 42 | set {clipboard::%player%} to schematic at {loc3::%player%} from {loc1::%player%} and {loc2::%player%} 43 | message "&a复制成功" to player 44 | command /skpaste: 45 | permission: sktools.admin 46 | trigger: 47 | set {_loc3} to player's location 48 | paste {clipboard::%player%} at {_loc3} 49 | message "&a粘贴成功" to player 50 | command /sksave : 51 | permission: sktools.admin 52 | trigger: 53 | if {loc3::%player%} is not set: 54 | set {loc3::%player%} to {loc1::%player%} 55 | set {_clipboard} to schematic at {loc3::%player%} from {loc1::%player%} and {loc2::%player%} 56 | save schematic {_clipboard} to file "plugins/Skript/schematics/%argument%.schem" 57 | message "&a已将该结构保存到: /plugins/skript/schematics/%argument%.schem" to player 58 | command /skload : 59 | permission: sktools.admin 60 | trigger: 61 | set {_loc3} to player's location 62 | paste schematic "plugins/Skript/schematics/%argument%.schem" at {_loc3} 63 | message "&a已加载: /plugins/skript/schematics/%argument%.schem 的结构" to player 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /MotionUtils.sk: -------------------------------------------------------------------------------- 1 | 2 | # 3 | # 在给定时间内将实体从一点移动到另一点,期间实体的位置和变化速度取决于给出的缓动函数 4 | # 只需给定两点坐标和缓动函数可以实现非线性运动,比如抛出物品等一些复杂动画 5 | # 关于缓动函数的相关信息及效果预览,请查阅 https://easings.net/zh-cn 6 | # 7 | # easingMotion(实体(变量), 开始位置(变量), 结束位置(变量), "X坐标缓动函数名称/ID", "Y坐标缓动函数名称/ID", "Z坐标缓动函数名称/ID", "Yaw缓动函数名称/ID", "Pitch缓动函数名称/ID", 持续时间(Tick数)) 8 | # 9 | # easingMotion({_entity}, {_loc1}, {_loc2}, "sina", "sina", "sina", "1", "1", 20) 10 | # 11 | # 缓动函数名称与ID对照如下: 12 | # 全名 ID 13 | # Linear 1 14 | # 15 | # easeInSine sina 16 | # easeOutSine sinb 17 | # easeInOutSine sinc 18 | # 19 | # easeInQuad 2a 20 | # easeOutQuad 2b 21 | # easeInOutQuad 2c 22 | # 23 | # easeInCubic 3a 24 | # easeOutCubic 3b 25 | # easeInOutCubic 3c 26 | # 27 | # easeInQuart 4a 28 | # easeOutQuart 4b 29 | # easeInOutQuart 4c 30 | # 31 | # easeInQuint 5a 32 | # easeOutQuint 5b 33 | # easeInOutQuint 5c 34 | # 35 | # easeInExpo expa 36 | # easeOutExpo expb 37 | # easeInOutExpo expc 38 | # 39 | # easeInCirc cira 40 | # easeOutCirc cirb 41 | # easeInOutCirc circ 42 | # 43 | # easeInBack backa 44 | # easeOutBack backb 45 | # easeInOutBack backc 46 | # 47 | # easeInElastic elaa 48 | # easeOutElastic elab 49 | # easeInOutElastic elac 50 | # 51 | # easeInBounce bouna 52 | # easeOutBounce bounb 53 | # easeInOutBounce bounc 54 | # 55 | 56 | function easingMotion(entity: entity, from: location, to: location, XmotionType: text, YmotionType: text, ZmotionType: text, WmotionType: text, PmotionType: text, duration: integer): 57 | set {_x1} to x location of {_from} 58 | set {_x2} to x location of {_to} 59 | set {_y1} to y location of {_from} 60 | set {_y2} to y location of {_to} 61 | set {_z1} to z location of {_from} 62 | set {_z2} to z location of {_to} 63 | set {_yaw1} to yaw of {_from} 64 | set {_yaw2} to yaw of {_to} 65 | set {_pitch1} to pitch of {_from} 66 | set {_pitch2} to pitch of {_to} 67 | set {_tick} to 0 68 | loop {_duration} times: 69 | wait 1 tick 70 | add 1 to {_tick} 71 | set {_tickrate} to ({_tick} / {_duration}) 72 | set {_x} to ({_x1} + ({_x2} - {_x1}) * calcEasingValue({_tickrate}, {_XmotionType})) 73 | set {_y} to ({_y1} + ({_y2} - {_y1}) * calcEasingValue({_tickrate}, {_YmotionType})) 74 | set {_z} to ({_z1} + ({_z2} - {_z1}) * calcEasingValue({_tickrate}, {_ZmotionType})) 75 | set {_yaw} to ({_yaw1} + ({_yaw2} - {_yaw1}) * calcEasingValue({_tickrate}, {_WmotionType})) 76 | set {_pitch} to ({_pitch1} + ({_pitch2} - {_pitch1}) * calcEasingValue({_tickrate}, {_PmotionType})) 77 | teleport {_entity} to location({_x}, {_y}, {_z}, world "world", {_yaw}, {_pitch}) 78 | 79 | function calcEasingValue(x: number, type: text) :: number: 80 | set {_y} to {_x} 81 | if {_x} <= 0: 82 | set {_y} to 0 83 | else if {_x} >= 1: 84 | set {_y} to 1 85 | else: 86 | set {_y} to ({_x}) if {_type} is "linear" or "1" or "" 87 | set {_y} to (1 - cos(({_x} * -180) / 2)) if {_type} is "easeInSine" or "sina" 88 | set {_y} to (sin(({_x} * 180) / 2)) if {_type} is "easeOutSine" or "sinb" 89 | set {_y} to (-1 * (cos(180 * {_x}) - 1) / 2) if {_type} is "easeInOutSine" or "sinc" 90 | set {_y} to ({_x} ^ 2) if {_type} is "easeInQuad" or "2a" 91 | set {_y} to (1 - (1 - {_x}) ^ 2) if {_type} is "easeOutQuad" or "2b" 92 | if {_x} < 0.5: 93 | set {_y} to (2 * {_x} ^ 2) if {_type} is "easeInOutQuad" or "2c" 94 | else: 95 | set {_y} to (1 - (-2 * {_x} + 2) ^ 2 / 2) if {_type} is "easeInOutQuad" or "2c" 96 | set {_y} to ({_x} ^ 3) if {_type} is "easeInCubic" or "3a" 97 | set {_y} to (1 - (1 - {_x}) ^ 3) if {_type} is "easeOutCubic" or "3b" 98 | if {_x} < 0.5: 99 | set {_y} to (4 * {_x} ^ 3) if {_type} is "easeInOutCubic" or "3c" 100 | else: 101 | set {_y} to (1 - (-2 * {_x} + 2) ^ 3 / 2) if {_type} is "easeInOutCubic" or "3c" 102 | set {_y} to ({_x} ^ 4) if {_type} is "easeInQuart" or "4a" 103 | set {_y} to (1 - (1 - {_x}) ^ 4) if {_type} is "easeOutQuart" or "4b" 104 | if {_x} < 0.5: 105 | set {_y} to (8 * {_x} ^ 4) if {_type} is "easeInOutQuart" or "4c" 106 | else: 107 | set {_y} to (1 - (-2 * {_x} + 2) ^ 4 / 2) if {_type} is "easeInOutQuart" or "4c" 108 | set {_y} to ({_x} ^ 5) if {_type} is "easeInQuint" or "5a" 109 | set {_y} to (1 - (1 - {_x}) ^ 5) if {_type} is "easeInQuint" or "5b" 110 | if {_x} < 0.5: 111 | set {_y} to (16 * {_x} ^ 5) if {_type} is "easeInOutQuint" or "5c" 112 | else: 113 | set {_y} to (1 - (-2 * {_x} + 2) ^ 5 / 2) if {_type} is "easeInOutQuint" or "5c" 114 | set {_y} to (2 ^ (10 * {_x} - 10)) if {_type} is "easeInExpo" or "expa" 115 | set {_y} to (1 - 2 ^ (-10 * {_x})) if {_type} is "easeOutExpo" or "expb" 116 | if {_x} < 0.5: 117 | set {_y} to (2 ^ (20 * {_x} - 10) / 2) if {_type} is "easeInOutExpo" or "expc" 118 | else: 119 | set {_y} to ((2 - 2 ^ (-20 * {_x} + 10)) / 2) if {_type} is "easeInOutExpo" or "expc" 120 | set {_y} to (1 - sqrt(1 - {_x} ^ 2)) if {_type} is "easeInCirc" or "cira" 121 | set {_y} to (sqrt(1 - ({_x} - 1) ^ 2)) if {_type} is "easeOutCirc" or "cirb" 122 | if {_x} < 0.5: 123 | set {_y} to ((1 - sqrt(1 - (2 * {_x}) ^ 2)) / 2) if {_type} is "easeInOutCirc" or "circ" 124 | else: 125 | set {_y} to ((sqrt(1 - (-2 * {_x} + 2) ^ 2) + 1) / 2) if {_type} is "easeInOutCirc" or "circ" 126 | set {_y} to (2.70158 * {_x} ^ 3 - 1.70158 * {_x} ^ 2) if {_type} is "easeInBack" or "backa" 127 | set {_y} to (1 + 2.70158 * ({_x} - 1) ^ 3 + 1.70158 * ({_x} - 1) ^ 2) if {_type} is "easeOutBack" or "backb" 128 | if {_x} < 0.5: 129 | set {_y} to (((2 * {_x}) ^ 2 * ((2.5949095 + 1) * 2 * {_x} - 2.5949095)) / 2) if {_type} is "easeInOutBack" or "backc" 130 | else: 131 | set {_y} to (((2 * {_x} - 2) ^ 2 * ((2.5949095 + 1) * ({_x} * 2 - 2) + 2.5949095) + 2) / 2) if {_type} is "easeInOutBack" or "backc" 132 | set {_c4} to (2 * 180) / 3 133 | set {_y} to (-1 * 2 ^ (10 * {_x} - 10) * sin(({_x} * 10 - 10.75) * {_c4})) if {_type} is "easeInElastic" or "elaa" 134 | set {_y} to (2 ^ (-10 * {_x}) * sin(({_x} * 10 - 0.75) * {_c4}) + 1) if {_type} is "easeOutElastic" or "elab" 135 | set {_c5} to (2 * 180) / 4.5 136 | if {_x} < 0.5: 137 | set {_y} to (-1 * (2 ^ (20 * {_x} - 10) * sin((20 * {_x} - 11.125) * {_c5})) / 2) if {_type} is "easeInOutElastic" or "elac" 138 | else: 139 | set {_y} to ((2 ^ (-20 * {_x} + 10) * sin((20 * {_x} - 11.125) * {_c5})) / 2 + 1) if {_type} is "easeInOutElastic" or "elac" 140 | set {_y} to (1 - calcEasingValue((1 - {_x}), "easeOutBounce")) if {_type} is "easeInBounce" or "bouna" 141 | set {_n1} to 7.5625 142 | set {_d1} to 2.75 143 | if {_x} < (1 / {_d1}): 144 | set {_y} to ({_n1} * {_x} ^ 2) if {_type} is "easeOutBounce" or "bounb" 145 | else if {_x} < (2 / {_d1}): 146 | set {_x} to {_x} - 1.5 / {_d1} 147 | set {_y} to ({_n1} * {_x} * {_x} + 0.75) if {_type} is "easeOutBounce" or "bounb" 148 | else if {_x} < (2.5 / {_d1}): 149 | set {_x} to {_x} - 2.25 / {_d1} 150 | set {_y} to ({_n1} * {_x} * {_x} + 0.9375) if {_type} is "easeOutBounce" or "bounb" 151 | else: 152 | set {_x} to {_x} - 2.625 / {_d1} 153 | set {_y} to ({_n1} * {_x} * {_x} + 0.984375) if {_type} is "easeOutBounce" or "bounb" 154 | if {_x} < 0.5: 155 | set {_y} to ((1 - calcEasingValue((1 - 2 * {_x}), "easeOutBounce")) / 2) if {_type} is "easeInOutBounce" or "bounc" #这家伙有问题 156 | else: 157 | set {_y} to ((1 + calcEasingValue((2 * {_x} - 1), "easeOutBounce")) / 2) if {_type} is "easeInOutBounce" or "bounc" #这家伙有问题 158 | return {_y} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cube Rhythm 2 | 在Minecraft中实现音游 3 | 4 | 本项目完全使用Skript及其附属编写,对应服务端内plugins/skript/scripts目录 5 | 6 | ## 已知问题 7 | 1. 性能问题,由于每个Tick要传送一遍所有的音符导致 8 | (需要比较强劲的电脑!否则加载时间可能过长,面对大量实体时出现卡顿甚至音画不同步等问题) 9 | 2. 在没有与Double音符交互时,对准其左键单击会同时击打两次,目前暂无解决方案 10 | 3. 偶见吞音符现象:少量音符隐身,但不影响判定,与客户端和服务器延迟有关 11 | 4. 音符排列偶见轻微移位 12 | 13 | ## 制谱向导 14 | https://github.com/EroslonDusk/CubeRhythm/wiki 15 | 16 | ## 下载地址 17 | https://www.123pan.com/s/eaNjVv-olZBA 18 | 19 | 如果你对Cube Rhythm感兴趣,欢迎加入我们的QQ群聊:[300846184](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=SgCNDOGEwRfCo1iKtLBknSuKhanpQmLZ&authKey=G7trk03ZTQeU7%2FDH6Ph89M%2FG5vrvkrSxO%2BtdFKwlmSeJOwlb4TjihMTWVtdoyqxI&noverify=0&group_code=300846184) 20 | -------------------------------------------------------------------------------- /api.sk: -------------------------------------------------------------------------------- 1 | options: 2 | structurePath: plugins/Skript/schematics 3 | 4 | function pasteSchematic(id: text, loc: location): 5 | paste schematic "{@structurePath}/empty.schem" at {_loc} 6 | wait 2 ticks 7 | paste schematic "{@structurePath}/%{_id}%.schem" at {_loc} 8 | # 9 | # 清空出生点黑箱范围内的所有方块,并在原点处粘贴结构 10 | # 最好将出生点设为原点,关于如何保存结构和设置原点请看下面: 11 | # 1. 在出生点附近建好结构 12 | # 2. 手持烈焰棒 左/右键地图两个定点确定选区(和小木斧一样) 13 | # 3. 手持烈焰棒 Shift+右键出生点脚下屏障作为原点 14 | # 4. 输入/sksave <结构名>将选区保存为 结构名.schem 并存储在plugins/Skript/schematics文件夹里 15 | # 如何导入结构: 16 | # 将.schem文件丢进plugins/Skript/schematics 17 | # 18 | # pasteSchematic("结构名(不用加.schem)", 原点位置(变量)) 19 | # 20 | 21 | 22 | 23 | function drawLine(face: text, x: number, y: number, z: number, pitch: number, length: number, duration: number, glowing: boolean, gc1: number, gc2: number, gc3: number, gc4: number): 24 | {_duration} >= 3 25 | set {_x} to {_x}+0.5 26 | set {_y} to {_y}-0.5 27 | set {_z} to {_z}+1+{speed::%uuid of {actor}%} 28 | if {_face} is "w": 29 | set {_loc} to location({_x}, {_y}+1, {_z}-0.95, world "world", 0, 0) 30 | if {_face} is "a": 31 | remove 1 from {_x} 32 | set {_loc} to location({_z}-0.95, {_y}+1, -1*{_x}, world "world", 90, 0) 33 | if {_face} is "s": 34 | remove 1 from {_x} 35 | remove 1 from {_z} 36 | set {_loc} to location(-1*{_x}, {_y}+1, -1*{_z}+0.95, world "world", 180, 0) 37 | if {_face} is "d": 38 | remove 1 from {_z} 39 | set {_loc} to location(-1*{_z}+0.95, {_y}+1, {_x}, world "world", 270, 0) 40 | summon block display at {_loc}: 41 | set display interpolation start of entity to 0 42 | set display interpolation duration of entity to 100 43 | set display block data of entity to white_concrete 44 | set display scale of entity to vector(0.05,{_length},0.05) 45 | set metadata value "face" of entity to {_face} 46 | set metadata value "decoration" of entity to true 47 | set pitch of entity to {_pitch} 48 | set yaw of entity to 90 if {_face} is "w" 49 | set yaw of entity to 0 if {_face} is "a" 50 | set yaw of entity to -90 if {_face} is "s" 51 | set yaw of entity to -180 if {_face} is "d" 52 | if {_glowing} is true: 53 | set glowing of entity to true 54 | set display glow color override of entity to bukkitColor({_gc1},{_gc2},{_gc3},{_gc4}) 55 | set {_entity} to entity 56 | wait 2 ticks 57 | set display brightness of {_entity} to displayBrightness(15,15) 58 | set display translation of {_entity} to vector(-100*{speed::%uuid of {actor}%}, 0, 0) if {_face} is "w" or "s" 59 | set display translation of {_entity} to vector(-100*{speed::%uuid of {actor}%}, 0, 0) if {_face} is "a" or "d" 60 | loop {_duration}-2 times: 61 | wait 1 tick 62 | loop all block displays: 63 | loop-entity is {_entity} 64 | delete loop-entity 65 | exit loop 66 | # 67 | # 直接在谱面中绘制线段,与小节线生成原理相同 68 | # 从x y z开始,length为长度,pitch-90°为旋转角度射出的一条线段 69 | # 会随谱面同步移动,时间到消失 70 | # 71 | # drawLine("判定面", X, Y, Z, 旋转角度(-90到90,0为竖直向上), 长度, 持续时间(Tick数), 是否发光, 发光不透明度, 发光颜色R值, 发光颜色G值, 发光颜色B值) 72 | # 最后四个数取值范围均为0~255 73 | # 74 | 75 | 76 | 77 | function drawLineWithoutMotion(face: text, x: number, y: number, z: number, pitch: number, length: number, duration: number, glowing: boolean, gc1: number, gc2: number, gc3: number, gc4: number): 78 | {_duration} >= 1 79 | set {_x} to {_x}+0.5 80 | set {_y} to {_y}-0.5 81 | if {_face} is "w": 82 | set {_loc} to location({_x}, {_y}+1, {_z}-0.95, world "world", 0, 0) 83 | if {_face} is "a": 84 | remove 1 from {_x} 85 | set {_loc} to location({_z}-0.95, {_y}+1, -1*{_x}, world "world", 90, 0) 86 | if {_face} is "s": 87 | remove 1 from {_x} 88 | remove 1 from {_z} 89 | set {_loc} to location(-1*{_x}, {_y}+1, -1*{_z}+0.95, world "world", 180, 0) 90 | if {_face} is "d": 91 | remove 1 from {_z} 92 | set {_loc} to location(-1*{_z}+0.95, {_y}+1, {_x}, world "world", 270, 0) 93 | summon block display at {_loc}: 94 | set display block data of entity to white_concrete 95 | set display scale of entity to vector(0.05,{_length},0.05) 96 | set metadata value "face" of entity to {_face} 97 | set metadata value "decoration" of entity to true 98 | set pitch of entity to {_pitch} 99 | set yaw of entity to 90 if {_face} is "w" 100 | set yaw of entity to 0 if {_face} is "a" 101 | set yaw of entity to -90 if {_face} is "s" 102 | set yaw of entity to -180 if {_face} is "d" 103 | if {_glowing} is true: 104 | set glowing of entity to true 105 | set display glow color override of entity to bukkitColor({_gc1},{_gc2},{_gc3},{_gc4}) 106 | set {_entity} to entity 107 | wait 2 ticks 108 | set display brightness of {_entity} to displayBrightness(15,15) 109 | loop {_duration} times: 110 | wait 1 tick 111 | loop all block displays: 112 | loop-entity is {_entity} 113 | delete loop-entity 114 | exit loop 115 | # 116 | # 直接在谱面中绘制线段,与小节线生成原理相同 117 | # 从x y z开始,length为长度,pitch-90°为旋转角度射出的一条线段 118 | # 不会移动,时间到消失 119 | # 120 | # drawLineWithoutMotion("判定面", X, Y, Z, 旋转角度(-90到90,0为竖直向上), 长度, 持续时间(Tick数), 是否发光, 发光不透明度, 发光颜色R值, 发光颜色G值, 发光颜色B值) 121 | # 最后四个数取值范围均为0~255 122 | # 123 | 124 | 125 | 126 | function drawBlockDisplay(blockdata: blockdata, x: number, y: number, z: number, yaw: number, pitch: number, scale: vector, duration: number, glowing: boolean, gc1: number, gc2: number, gc3: number, gc4: number): 127 | {_duration} >= 1 128 | set {_loc} to location({_x}, {_y}, {_z}, world "world", {_yaw}, {_pitch}) 129 | summon block display at {_loc}: 130 | set display block data of entity to {_blockdata} 131 | set display scale of entity to {_scale} 132 | set metadata value "decoration" of entity to true 133 | set display brightness of entity to displayBrightness(15,15) 134 | if {_glowing} is true: 135 | set glowing of entity to true 136 | set display glow color override of entity to bukkitColor({_gc1},{_gc2},{_gc3},{_gc4}) 137 | set {_entity} to entity 138 | loop {_duration} times: 139 | wait 1 tick 140 | loop all block displays: 141 | loop-entity is {_entity} 142 | delete loop-entity 143 | exit loop 144 | # 145 | # 生成方块展示实体的简化形式 146 | # 不会移动,时间到消失 147 | # 148 | # drawBlockDisplay(方块数据, X, Y, Z, Yaw, Pitch, 缩放(向量), 持续时间(Tick数), 是否发光, 发光不透明度, 发光颜色R值, 发光颜色G值, 发光颜色B值) 149 | # 150 | # drawBlockDisplay(minecraft:chest[facing=north], 1, 2, 3, 90, 0, vector(2, 2, 2), 20, true, 255, 255, 255, 255) 151 | # 最后四个数取值范围均为0~255 152 | # 153 | 154 | 155 | 156 | function drawItemDisplay(item: item, x: number, y: number, z: number, yaw: number, pitch: number, scale: vector, duration: number, glowing: boolean, gc1: number, gc2: number, gc3: number, gc4: number): 157 | {_duration} >= 1 158 | set {_loc} to location({_x}, {_y}, {_z}, world "world", {_yaw}, {_pitch}) 159 | summon item display at {_loc}: 160 | set display item of entity to {_item} 161 | set display scale of entity to {_scale} 162 | set metadata value "decoration" of entity to true 163 | set display brightness of entity to displayBrightness(15,15) 164 | if {_glowing} is true: 165 | set glowing of entity to true 166 | set display glow color override of entity to bukkitColor({_gc1},{_gc2},{_gc3},{_gc4}) 167 | set {_entity} to entity 168 | loop {_duration} times: 169 | wait 1 tick 170 | loop all item displays: 171 | loop-entity is {_entity} 172 | delete loop-entity 173 | exit loop 174 | # 175 | # 生成物品展示实体的简化形式 176 | # 不会移动,时间到消失 177 | # 178 | # drawItemDisplay(物品(复杂物品请写进变量), X, Y, Z, Yaw, Pitch, 缩放(向量), 持续时间(Tick数), 是否发光, 发光不透明度, 发光颜色R值, 发光颜色G值, 发光颜色B值) 179 | # 180 | # drawItemDisplay(diamond pickaxe, 1, 2, 3, 90, 0, vector(2, 2, 2), 20, true, 255, 255, 255, 255) 181 | # 最后四个数取值范围均为0~255 182 | # 183 | 184 | 185 | 186 | function blind(duration: timespan): 187 | apply blindness without any particles to {actor} for 1 hour 188 | loop all block displays: 189 | metadata value "decoration" of loop-entity is true 190 | set glowing of loop-entity to true 191 | wait {_time} 192 | remove blindness from {actor} 193 | loop all block displays: 194 | metadata value "decoration" of loop-entity is true 195 | set glowing of loop-entity to false 196 | # 197 | # 给予玩家一段时间失明效果,失明生效时小节线发光 198 | # 199 | # blind(时间(使用skript格式)) 200 | # 201 | # 举个例子: 202 | # 203 | #on load: 204 | # create section stored in {blind1}: 205 | # blind(1.5 seconds) 206 | # delete {blind1} 207 | 208 | 209 | 210 | function forceExact(ticks: integer, tag: text): 211 | loop {ticks} times: 212 | {actor} is set 213 | loop all interactions: 214 | set metadata value "forceexact" of loop-entity to true if metadata value "tag" of loop-entity is {_tag} 215 | wait 1 tick 216 | loop all interactions: 217 | delete metadata value "forceexact" of loop-entity if metadata value "tag" of loop-entity is {_tag} 218 | # 219 | # 超级时间,该时间内轨道上拥有特定Tag的音符,击中不会产生Just判定 220 | # 221 | # forceExact(持续时间(Tick数), "Tag") 222 | # 223 | # 举个例子: 224 | # 225 | #on load: 226 | # create section stored in {st1}: 227 | # forceExact(20, "custom") 228 | # delete {st1} 229 | 230 | 231 | 232 | function setTextDisplay(face: text, x: number, y: number, z: number, pitch: number, scale: number, opacity: number, duration: timespan, text: text): 233 | add 0.5 to {_x} 234 | remove 1 from {_x} if {_face} is "s" or "a" 235 | add 1 to {_z} if {_face} is "w" or "a" 236 | remove 0.5 from {_y} 237 | if {_face} is "w": 238 | set {_loc} to location({_x}, {_y}, {_z}, world "world", -90, {_pitch}) 239 | if {_face} is "a": 240 | set {_loc} to location({_z}, {_y}, -1*{_x}, world "world", 180, {_pitch}) 241 | if {_face} is "s": 242 | set {_loc} to location(-1*{_x}, {_y}, -1*{_z}, world "world", 90, {_pitch}) 243 | if {_face} is "d": 244 | set {_loc} to location(-1*{_z}, {_y}, {_x}, world "world", 0, {_pitch}) 245 | {_loc}.add(0, 1, 0) 246 | summon text display at {_loc}: 247 | set display text of the entity to {_text} if {showOffset::%uuid of {actor}%} is not "&a开" 248 | set display scale of the entity to vector({_scale},{_scale},{_scale}) 249 | set display right rotation of the entity to axisAngle(90 * (3.14 / 180), 0, 1, 0) 250 | set display translation of the entity to vector({_scale}*-0.015,{_scale}*-0.15,0) 251 | set display text opacity of the entity to {_opacity} 252 | set display text background color of the entity to bukkitColor(0,0,0,0) 253 | set {_entity} to entity 254 | wait {_duration} 255 | loop all text displays: 256 | loop-entity is {_entity} 257 | delete loop-entity 258 | # 259 | # 以前方判定面为基准,x y z为坐标,生成文字展示实体并持续一段时间 260 | # 如果你需要在非前判定面生成,坐标仍按照前判定面的格式,脚本会自动更正 261 | # 262 | # setTextDisplay("判定面", X, Y, Z, 旋转角度(-90到90,0为水平), 缩放倍数, 不透明度(最大255), 持续时间(使用skript格式), "文本") 263 | # 264 | # 举个例子,加载后会在四周贴上“福字”,持续10秒: 265 | # 266 | #on load: 267 | # setTextDisplay("w", 0, 0, 4, 45, 8, 255, 10 seconds, "&c█") 268 | # setTextDisplay("a", 0, 0, 4, 45, 8, 255, 10 seconds, "&c█") 269 | # setTextDisplay("s", 0, 0, 4, 45, 8, 255, 10 seconds, "&c█") 270 | # setTextDisplay("d", 0, 0, 4, 45, 8, 255, 10 seconds, "&c█") 271 | # setTextDisplay("w", 0.075, -0.075, 4, 45, 8, 255, 10 seconds, "&e▄") 272 | # setTextDisplay("a", 0.075, -0.075, 4, 45, 8, 255, 10 seconds, "&e▄") 273 | # setTextDisplay("s", 0.075, -0.075, 4, 45, 8, 255, 10 seconds, "&e▄") 274 | # setTextDisplay("d", 0.075, -0.075, 4, 45, 8, 255, 10 seconds, "&e▄") 275 | # setTextDisplay("w", 0, 0.075, 3.95, 0, 4, 255, 10 seconds, "&c福") 276 | # setTextDisplay("a", 0, 0.075, 3.95, 0, 4, 255, 10 seconds, "&c福") 277 | # setTextDisplay("s", 0, 0.075, 3.95, 0, 4, 255, 10 seconds, "&c福") 278 | # setTextDisplay("d", 0, 0.075, 3.95, 0, 4, 255, 10 seconds, "&c福") 279 | 280 | 281 | 282 | function changeGlowingColor(tag: text, opacity: number, r: number, g: number, b: number, duration: integer): 283 | loop {duration} times: 284 | {actor} is set 285 | wait 1 tick 286 | loop all block displays: 287 | set display glow color override of loop-entity to bukkitColor({_opacity},{_r},{_g},{_b}) if metadata value "tag" of loop-entity is {_tag} 288 | # 289 | # 在一段时间内更改轨道上拥有特定Tag的音符的发光颜色 290 | # 291 | # changeGlowingColor("Tag", 发光不透明度, R, G, B, 持续时间(Tick数)) 292 | # 293 | 294 | 295 | function hideNote(tag: text, duration: integer): 296 | loop {duration} times: 297 | {actor} is set 298 | wait 1 tick 299 | loop all block displays: 300 | delete loop-entity if metadata value "tag" of loop-entity is {_tag} 301 | # 302 | # 在一段时间内删除轨道上拥有特定Tag的方块展示实体以实现隐藏音符 303 | # 304 | # hideNote("Tag", 持续时间(Tick数)) 305 | # -------------------------------------------------------------------------------- /charts/-falling_asteroid.sk: -------------------------------------------------------------------------------- 1 | options: 2 | 音频: cr.falling_asteroid 3 | 曲名: Falling Asteroid 4 | 曲师: postt 5 | 谱师: PiraTom 6 | 难度: &aBasic 4 7 | 8 | on load: 9 | delete {loadedNotes::*} 10 | set {maxNote} to 0 11 | set {sound} to "{@音频}" 12 | loadChart() 13 | set {song} to "{@曲名}" 14 | set {artist} to "{@曲师}" 15 | set {author} to "{@谱师}" 16 | set {level} to "{@难度}" 17 | 18 | function loadChart(): 19 | tap(0,"w",1,-1,false, "") 20 | tap(1.41,"w",-1,0,false, "") 21 | tap(2.82,"w",1,0,false, "") 22 | tap(4.24,"w",-1,-1,false, "") 23 | tap(5.65,"w",-1,1,false, "") 24 | hold(5.66,"w",-1,1,false, "") 25 | hold(5.75,"w",-1,1,false, "") 26 | hold(5.85,"w",-1,1,false, "") 27 | hold(5.95,"w",-1,1,false, "") 28 | hold(6.05,"w",-1,1,false, "") 29 | hold(6.15,"w",-1,1,false, "") 30 | hold(6.25,"w",-1,1,false, "") 31 | tap(7.06,"w",-1,0,false, "") 32 | tap(7.76,"w",0,-1,false, "") 33 | tap(8.47,"w",1,-1,false, "") 34 | hold(8.48,"w",1,-1,false, "") 35 | hold(8.57,"w",1,-1,false, "") 36 | hold(8.67,"w",1,-1,false, "") 37 | hold(8.77,"w",1,-1,false, "") 38 | hold(8.87,"w",1,-1,false, "") 39 | hold(8.97,"w",1,-1,false, "") 40 | hold(9.07,"w",1,-1,false, "") 41 | tap(9.88,"w",-1,-1,false, "") 42 | tap(10.59,"w",0,-1,false, "") 43 | double(11.29,"w",2,-1,-2,1,false, "") 44 | hold(11.3,"w",2,-1,false, "") 45 | hold(11.39,"w",2,-1,false, "") 46 | hold(11.49,"w",2,-1,false, "") 47 | hold(11.59,"w",2,-1,false, "") 48 | hold(11.69,"w",2,-1,false, "") 49 | hold(11.79,"w",2,-1,false, "") 50 | hold(11.89,"w",2,-1,false, "") 51 | hold(11.99,"w",2,-1,false, "") 52 | hold(12.09,"w",2,-1,false, "") 53 | hold(12.19,"w",2,-1,false, "") 54 | hold(12.29,"w",2,-1,false, "") 55 | hold(11.3,"w",-2,1,false, "") 56 | hold(11.39,"w",-2,1,false, "") 57 | hold(11.49,"w",-2,1,false, "") 58 | hold(11.59,"w",-2,1,false, "") 59 | hold(11.69,"w",-2,1,false, "") 60 | hold(11.79,"w",-2,1,false, "") 61 | hold(11.89,"w",-2,1,false, "") 62 | hold(11.99,"w",-2,1,false, "") 63 | hold(12.09,"w",-2,1,false, "") 64 | hold(12.19,"w",-2,1,false, "") 65 | hold(12.29,"w",-2,1,false, "") 66 | double(12.71,"w",1,1,-1,-1,false, "") 67 | double(13.41,"w",1,-1,-1,1,false, "") 68 | double(14.12, "w", 2, 0, -2, 0, false, "") 69 | hold(14.13, "w", 2, 0, false, "") 70 | hold(14.22, "w", 2, 0, false, "") 71 | hold(14.32, "w", 2, 0, false, "") 72 | hold(14.42, "w", 2, 0, false, "") 73 | hold(14.52, "w", 2, 0, false, "") 74 | hold(14.62, "w", 2, 0, false, "") 75 | hold(14.72, "w", 2, 0, false, "") 76 | hold(14.82, "w", 2, 0, false, "") 77 | hold(14.92, "w", 2, 0, false, "") 78 | hold(15.02, "w", 2, 0, false, "") 79 | hold(14.13, "w", -2, 0, false, "") 80 | hold(14.22, "w", -2, 0, false, "") 81 | hold(14.32, "w", -2, 0, false, "") 82 | hold(14.42, "w", -2, 0, false, "") 83 | hold(14.52, "w", -2, 0, false, "") 84 | hold(14.62, "w", -2, 0, false, "") 85 | hold(14.72, "w", -2, 0, false, "") 86 | hold(14.82, "w", -2, 0, false, "") 87 | hold(14.92, "w", -2, 0, false, "") 88 | hold(15.02, "w", -2, 0, false, "") 89 | double(15.53, "w", 1, -1, -1, 1, false, "") 90 | double(16.24, "w", 1, 1, -1, -1, false, "") 91 | tap(16.94, "w", 2, -1, false, "") 92 | tap(17.29, "w", 2, -1, false, "") 93 | tap(17.65, "w", 2, -1, false, "") 94 | tap(18, "w", 2, -1, false, "") 95 | tap(18.35, "w", -2, 0, false, "") 96 | tap(18.71, "w", -2, 0, false, "") 97 | tap(19.06, "w", -2, 0, false, "") 98 | tap(19.41, "w", -2, 0, false, "") 99 | drag(19.76, "w", -2, 1, false, "") 100 | drag(19.94, "w", -1.5, 1, false, "") 101 | drag(20.11, "w", -1, 1, false, "") 102 | drag(20.29, "w", -0.5, 1, false, "") 103 | drag(20.47, "w", 0, 1, false, "") 104 | drag(20.65, "w", 0.5, 1, false, "") 105 | drag(20.82, "w", 1, 1, false, "") 106 | drag(21, "w", 1.5, 1, false, "") 107 | tap(21.18, "w", -1, 0, false, "") 108 | hold(21.19, "w", -1, 0, false, "") 109 | hold(21.28, "w", -1, 0, false, "") 110 | hold(21.38, "w", -1, 0, false, "") 111 | hold(21.48, "w", -1, 0, false, "") 112 | hold(21.58, "w", -1, 0, false, "") 113 | hold(21.68, "w", -1, 0, false, "") 114 | hold(21.78, "w", -1, 0, false, "") 115 | flick(22.59, "w", "left", false, "") 116 | tap(24, "a", 1, -1, false, "") 117 | tap(25.41, "a", -1, 0, false, "") 118 | tap(26.82, "a", 0, 1, false, "") 119 | tap(28.23, "a", 1, 0, false, "") 120 | hold(28.24, "a", 1, 0, false, "") 121 | hold(28.33, "a", 1, 0, false, "") 122 | hold(28.43, "a", 1, 0, false, "") 123 | hold(28.53, "a", 1, 0, false, "") 124 | hold(28.63, "a", 1, 0, false, "") 125 | hold(28.73, "a", 1, 0, false, "") 126 | hold(28.83, "a", 1, 0, false, "") 127 | tap(29.65, "a", -1, 0, false, "") 128 | hold(29.66, "a", -1, 0, false, "") 129 | hold(29.75, "a", -1, 0, false, "") 130 | hold(29.85, "a", -1, 0, false, "") 131 | hold(29.95, "a", -1, 0, false, "") 132 | hold(30.05, "a", -1, 0, false, "") 133 | hold(30.15, "a", -1, 0, false, "") 134 | hold(30.25, "a", -1, 0, false, "") 135 | drag(31.05, "a", 1, 1, false, "") 136 | drag(31.1, "a", 1, 1, false, "") 137 | drag(31.15, "a", 1, 1, false, "") 138 | drag(31.19, "a", 1, 1, false, "") 139 | drag(31.59, "a", -1, 1, false, "") 140 | drag(31.63, "a", -1, 1, false, "") 141 | drag(31.68, "a", -1, 1, false, "") 142 | drag(31.72, "a", -1, 1, false, "") 143 | drag(32.12, "a", 0, -1, false, "") 144 | drag(32.29, "a", 0, -1, false, "") 145 | drag(32.38, "a", 0, -1, false, "") 146 | drag(32.47, "a", 0, -1, false, "") 147 | drag(32.56, "a", 0, -1, false, "") 148 | drag(32.65, "a", 0, -1, false, "") 149 | drag(32.74, "a", 0, -1, false, "") 150 | drag(32.82, "a", 0, -1, false, "") 151 | drag(32.91, "a", 0, -1, false, "") 152 | drag(33, "a", 0, -1, false, "") 153 | drag(33.09, "a", 0, -1, false, "") 154 | drag(33.18, "a", 0, -1, false, "") 155 | flick(33.88, "a", "right", false, "") 156 | drag(34.59, "w", -2, 1, false, "") 157 | drag(34.76, "w", -1, 1, false, "") 158 | drag(34.94, "w", 0, 1, false, "") 159 | drag(35.12, "w", 1, 1, false, "") 160 | double(35.29, "w", 2, 1, -2, -1, false, "") 161 | double(36, "w", 2, -1, -2, 1, false, "") 162 | flick(36.71, "w", "left", false, "") 163 | drag(37.41, "a", 2, -1, false, "") 164 | drag(37.59, "a", 1, -1, false, "") 165 | drag(37.76, "a", 0, -1, false, "") 166 | drag(37.94, "a", -1, -1, false, "") 167 | double(38.12, "a", 0, 1, -2, -1, false, "") 168 | double(38.82, "a", 2, -1, 0, 1, false, "") 169 | flick(39.53, "a", "right", false, "") 170 | drag(40.24, "w", 0, -1, false, "") 171 | drag(40.94, "w", -2, 1, false, "") 172 | drag(41.12, "w", -1, 1, false, "") 173 | drag(41.29, "w", 0, 1, false, "") 174 | drag(41.47, "w", 1, 1, false, "") 175 | double(41.65, "w", 2, 1, 1, -2, false, "") 176 | flick(42.35, "w", "left", false, "") 177 | drag(43.06, "a", 0, -1, false, "") 178 | tap(43.76, "a", -1, 1, false, "") 179 | tap(44.12, "a", 1, 0, false, "") 180 | tap(44.47, "a", -1, -1, false, "") 181 | tap(44.82, "a", -2, 0, false, "") 182 | tap(45.18, "a", -1, 2, false, "") 183 | hold(45.19, "a", -1, 2, false, "") 184 | hold(45.28, "a", -1, 2, false, "") 185 | hold(45.38, "a", -1, 2, false, "") 186 | hold(45.48, "a", -1, 2, false, "") 187 | hold(45.58, "a", -1, 2, false, "") 188 | hold(45.68, "a", -1, 2, false, "") 189 | hold(45.78, "a", -1, 2, false, "") 190 | hold(45.88, "a", -1, 2, false, "") 191 | hold(45.98, "a", -1, 2, false, "") 192 | hold(46.08, "a", -1, 2, false, "") 193 | hold(46.18, "a", -1, 2, false, "") 194 | hold(46.28, "a", -1, 2, false, "") 195 | hold(46.38, "a", -1, 2, false, "") 196 | hold(46.48, "a", -1, 2, false, "") 197 | hold(46.58, "a", -1, 2, false, "") 198 | hold(46.68, "a", -1, 2, false, "") 199 | hold(46.78, "a", -1, 2, false, "") 200 | hold(46.88, "a", -1, 2, false, "") 201 | hold(46.98, "a", -1, 2, false, "") 202 | hold(47.08, "a", -1, 2, false, "") 203 | hold(47.18, "a", -1, 2, false, "") 204 | hold(47.28, "a", -1, 2, false, "") 205 | hold(47.38, "a", -1, 2, false, "") 206 | hold(47.48, "a", -1, 2, false, "") 207 | hold(47.58, "a", -1, 2, false, "") 208 | hold(47.68, "a", -1, 2, false, "") 209 | hold(47.78, "a", -1, 2, false, "") 210 | hold(47.88, "a", -1, 2, false, "") 211 | hold(47.98, "a", -1, 2, false, "") 212 | hold(48.08, "a", -1, 2, false, "") 213 | hold(48.18, "a", -1, 2, false, "") 214 | hold(48.28, "a", -1, 2, false, "") 215 | hold(48.38, "a", -1, 2, false, "") 216 | hold(48.48, "a", -1, 2, false, "") 217 | hold(48.58, "a", -1, 2, false, "") 218 | hold(48.68, "a", -1, 2, false, "") 219 | hold(48.78, "a", -1, 2, false, "") 220 | hold(48.88, "a", -1, 2, false, "") 221 | hold(48.98, "a", -1, 2, false, "") 222 | hold(49.08, "a", -1, 2, false, "") 223 | hold(49.18, "a", -1, 2, false, "") 224 | hold(49.28, "a", -1, 2, false, "") 225 | hold(49.38, "a", -1, 2, false, "") 226 | hold(49.48, "a", -1, 2, false, "") 227 | hold(49.58, "a", -1, 2, false, "") 228 | hold(49.68, "a", -1, 2, false, "") 229 | hold(49.78, "a", -1, 2, false, "") 230 | hold(49.88, "a", -1, 2, false, "") 231 | hold(49.98, "a", -1, 2, false, "") 232 | hold(50.08, "a", -1, 2, false, "") 233 | hold(50.18, "a", -1, 2, false, "") 234 | hold(50.28, "a", -1, 2, false, "") 235 | hold(50.38, "a", -1, 2, false, "") 236 | hold(50.48, "a", -1, 2, false, "") 237 | hold(50.58, "a", -1, 2, false, "") 238 | hold(50.68, "a", -1, 2, false, "") 239 | hold(50.78, "a", -1, 2, false, "") 240 | hold(50.88, "a", -1, 2, false, "") 241 | hold(50.98, "a", -1, 2, false, "") 242 | hold(51.08, "a", -1, 2, false, "") 243 | hold(51.18, "a", -1, 2, false, "") 244 | hold(51.28, "a", -1, 2, false, "") 245 | hold(51.38, "a", -1, 2, false, "") 246 | hold(51.48, "a", -1, 2, false, "") 247 | hold(51.58, "a", -1, 2, false, "") 248 | hold(51.68, "a", -1, 2, false, "") 249 | hold(51.78, "a", -1, 2, false, "") 250 | hold(51.88, "a", -1, 2, false, "") 251 | hold(51.98, "a", -1, 2, false, "") 252 | hold(52.08, "a", -1, 2, false, "") 253 | hold(52.18, "a", -1, 2, false, "") 254 | hold(52.28, "a", -1, 2, false, "") 255 | hold(52.38, "a", -1, 2, false, "") 256 | hold(52.48, "a", -1, 2, false, "") 257 | hold(52.58, "a", -1, 2, false, "") 258 | hold(52.68, "a", -1, 2, false, "") 259 | hold(52.78, "a", -1, 2, false, "") 260 | hold(52.88, "a", -1, 2, false, "") 261 | hold(52.98, "a", -1, 2, false, "") 262 | hold(53.08, "a", -1, 2, false, "") 263 | hold(53.18, "a", -1, 2, false, "") 264 | hold(53.28, "a", -1, 2, false, "") 265 | hold(53.38, "a", -1, 2, false, "") 266 | hold(53.48, "a", -1, 2, false, "") 267 | hold(53.58, "a", -1, 2, false, "") 268 | hold(53.68, "a", -1, 2, false, "") 269 | hold(53.78, "a", -1, 2, false, "") 270 | hold(53.88, "a", -1, 2, false, "") 271 | hold(53.98, "a", -1, 2, false, "") 272 | hold(54.08, "a", -1, 2, false, "") 273 | hold(54.18, "a", -1, 2, false, "") 274 | hold(54.28, "a", -1, 2, false, "") 275 | hold(54.38, "a", -1, 2, false, "") 276 | hold(54.48, "a", -1, 2, false, "") 277 | hold(54.58, "a", -1, 2, false, "") 278 | hold(54.68, "a", -1, 2, false, "") 279 | hold(54.78, "a", -1, 2, false, "") 280 | hold(54.88, "a", -1, 2, false, "") 281 | hold(54.98, "a", -1, 2, false, "") 282 | drag(45.53, "a", 0, 1, false, "") 283 | drag(45.62, "a", 1, 1, false, "") 284 | drag(45.71, "a", 2, 1, false, "") 285 | drag(46.24, "a", 2, 1, false, "") 286 | drag(46.32, "a", 2, 0, false, "") 287 | drag(46.41, "a", 2, -1, false, "") 288 | drag(46.94, "a", 2, -1, false, "") 289 | drag(47.03, "a", 1, -1, false, "") 290 | drag(47.12, "a", 0, -1, false, "") 291 | drag(47.65, "a", 0, -1, false, "") 292 | drag(47.74, "a", 0, 0, false, "") 293 | drag(47.82, "a", 0, 1, false, "") 294 | drag(48.35, "a", 0, 1, false, "") 295 | drag(48.44, "a", 1, 0, false, "") 296 | drag(48.53, "a", 2, -1, false, "") 297 | drag(49.06, "a", 2, 1, false, "") 298 | drag(49.15, "a", 1, 0, false, "") 299 | drag(49.24, "a", 0, -1, false, "") 300 | drag(49.76, "a", 1, -1, false, "") 301 | drag(49.85, "a", 1, 0, false, "") 302 | drag(49.94, "a", 1, 1, false, "") 303 | drag(50.47, "a", 1, 1, false, "") 304 | drag(50.56, "a", 1, 0, false, "") 305 | drag(50.65, "a", 1, -1, false, "") 306 | drag(51.18, "a", 1, -1, false, "") 307 | drag(51.26, "a", 0, -1, false, "") 308 | drag(51.35, "a", -1, -1, false, "") 309 | drag(51.88, "a", -2, -1, false, "") 310 | drag(51.97, "a", -1, -1, false, "") 311 | drag(52.06, "a", 0, -1, false, "") 312 | drag(52.59, "a", 0, -1, false, "") 313 | drag(52.68, "a", -1, 0, false, "") 314 | drag(52.76, "a", -2, 1, false, "") 315 | drag(53.29, "a", -2, 1, false, "") 316 | drag(53.38, "a", -1, 0, false, "") 317 | drag(53.47, "a", 0, -1, false, "") 318 | drag(54, "a", -1, -1, false, "") 319 | drag(54.09, "a", -1, 0, false, "") 320 | drag(54.18, "a", -1, 1, false, "") 321 | drag(54.71, "a", -1, 1, false, "") 322 | drag(54.79, "a", -1, 0, false, "") 323 | drag(54.88, "a", -1, -1, false, "") 324 | drag(55.41, "a", 0, -1, false, "") 325 | drag(55.76, "a", 1, -1, false, "") 326 | drag(56.12, "a", 2, -1, false, "") 327 | tap(56.47, "a", 1, 0, false, "") 328 | tap(56.82, "a", -1, 1, false, "") 329 | tap(57.35, "a", 1, 0, false, "") 330 | tap(57.53, "a", -1, 1, false, "") 331 | tap(57.88, "a", -2, -1, false, "") 332 | tap(58.24, "a", 0, 1, false, "") 333 | tap(58.76, "a", -2, -1, false, "") 334 | tap(58.94, "a", 0, 1, false, "") 335 | tap(59.29, "a", 2, -1, false, "") 336 | tap(59.65, "a", -1, 0, false, "") 337 | tap(60.18, "a", 2, -1, false, "") 338 | tap(60.35, "a", -1, 0, false, "") 339 | tap(60.71, "a", -1, -1, false, "") 340 | tap(61.06, "a", 1, 1, false, "") 341 | tap(61.59, "a", -1, -1, false, "") 342 | tap(61.76, "a", 1, 1, false, "") 343 | tap(62.12, "a", 2, 0, false, "") 344 | tap(62.47, "a", -1, 0, false, "") 345 | tap(63, "a", 2, 0, false, "") 346 | tap(63.18, "a", -1, 0, false, "") 347 | tap(63.53, "a", 0, -1, false, "") 348 | tap(63.88, "a", -2, 1, false, "") 349 | tap(64.41, "a", 0, -1, false, "") 350 | tap(64.59, "a", -2, 1, false, "") 351 | tap(64.94, "a", 1, 0, false, "") 352 | tap(65.29, "a", -2, -1, false, "") 353 | tap(65.82, "a", 1, 0, false, "") 354 | tap(66, "a", -2, -1, false, "") 355 | tap(66.35, "a", 1, 0, false, "") 356 | tap(67.06, "a", -1, 0, false, "") 357 | flick(67.76, "a", "left", false, "") 358 | double(69.18, "s", 1, -1, -1, 1, false, "") 359 | flick(70.59, "s", "left", false, "") 360 | double(72, "d", 1, 1, -1, -1, false, "") 361 | flick(73.41, "d", "left", false, "") 362 | double(74.82, "w", 0, 1, 0, -1, false, "") 363 | flick(76.24, "w", "left", false, "") 364 | drag(77.65, "a", 1, -1, false, "") 365 | drag(77.71, "a", 0.5, -1, false, "") 366 | drag(77.76, "a", 1, -1, false, "") 367 | drag(77.82, "a", 0.5, -1, false, "") 368 | drag(77.88, "a", 1, -1, false, "") 369 | drag(77.94, "a", 0.5, -1, false, "") 370 | drag(78, "a", 1, -1, false, "") 371 | drag(78.06, "a", 0.5, -1, false, "") 372 | drag(78.12, "a", 1, -1, false, "") 373 | drag(78.18, "a", 0.5, -1, false, "") 374 | drag(78.24, "a", 1, -1, false, "") 375 | drag(78.29, "a", 0.5, -1, false, "") 376 | flick(79.06, "a", "right", false, "") 377 | drag(80.12, "w", -1, 1, false, "") 378 | drag(80.29, "w", 0, 1, false, "") 379 | drag(80.47, "w", 1, 1, false, "") 380 | tap(81, "w", -1, 1, false, "") 381 | tap(81.53, "w", 1, 0, false, "") 382 | double(81.88, "w", 2, -1, -1, 1, false, "") 383 | hold(81.89, "w", 2, -1, false, "") 384 | hold(81.98, "w", 2, -1, false, "") 385 | hold(82.08, "w", 2, -1, false, "") 386 | hold(82.18, "w", 2, -1, false, "") 387 | hold(82.28, "w", 2, -1, false, "") 388 | hold(82.38, "w", 2, -1, false, "") 389 | hold(82.48, "w", 2, -1, false, "") 390 | drag(82.94, "w", 1, -1, false, "") 391 | drag(83.12, "w", 0, 0, false, "") 392 | drag(83.29, "w", -1, 1, false, "") 393 | tap(84, "w", -2, 0, false, "") 394 | tap(84.71, "w", 1, 0, false, "") 395 | tap(85.06, "w", 1, 0, false, "") 396 | tap(85.41, "w", 1, 0, false, "") 397 | tap(85.76, "w", 1, 0, false, "") 398 | tap(86.12, "w", -1, 0, false, "") 399 | tap(86.47, "w", -1, 0, false, "") 400 | tap(86.82, "w", -1, 0, false, "") 401 | tap(87.18, "w", -1, 0, false, "") 402 | drag(87.53, "w", -1, 2, false, "") 403 | drag(87.62, "w", -1, 2, false, "") 404 | drag(87.71, "w", -1, 2, false, "") 405 | drag(87.79, "w", -1, 2, false, "") 406 | drag(87.88, "w", 0, 1, false, "") 407 | drag(87.97, "w", 0, 1, false, "") 408 | drag(88.06, "w", 0, 1, false, "") 409 | drag(88.15, "w", 0, 1, false, "") 410 | drag(88.24, "w", 1, 0, false, "") 411 | drag(88.32, "w", 1, 0, false, "") 412 | drag(88.41, "w", 1, 0, false, "") 413 | drag(88.5, "w", 1, 0, false, "") 414 | drag(88.59, "w", 2, -1, false, "") 415 | drag(88.68, "w", 2, -1, false, "") 416 | drag(88.76, "w", 2, -1, false, "") 417 | drag(88.85, "w", 2, -1, false, "") 418 | drag(89.29, "w", 1, 0, false, "") 419 | drag(89.65, "w", 0, 0, false, "") 420 | drag(90, "w", -1, 0, false, "") 421 | double(90.35, "w", 1, 1, -1, -1, false, "") 422 | hold(90.36, "w", 1, 1, false, "") 423 | hold(90.45, "w", 1, 1, false, "") 424 | hold(90.55, "w", 1, 1, false, "") 425 | hold(90.65, "w", 1, 1, false, "") 426 | hold(90.36, "w", -1, -1, false, "") 427 | hold(90.45, "w", -1, -1, false, "") 428 | hold(90.55, "w", -1, -1, false, "") 429 | hold(90.65, "w", -1, -1, false, "") 430 | drag(91.06, "w", 0, 1, false, "") 431 | drag(91.24, "w", 1, 0, false, "") 432 | drag(91.41, "w", 0, -1, false, "") 433 | drag(91.59, "w", -1, 0, false, "") 434 | tap(91.76, "w", 0, 1, false, "") 435 | tap(92.12, "w", 2, 0, false, "") 436 | tap(92.47, "w", 0, -2, false, "") 437 | tap(92.82, "w", -1, 0, false, "") 438 | double(93.18, "w", 1, -1, -1, 1, false, "") 439 | hold(93.19, "w", 1, -1, false, "") 440 | hold(93.28, "w", 1, -1, false, "") 441 | hold(93.38, "w", 1, -1, false, "") 442 | hold(93.48, "w", 1, -1, false, "") 443 | hold(93.19, "w", -1, 1, false, "") 444 | hold(93.28, "w", -1, 1, false, "") 445 | hold(93.38, "w", -1, 1, false, "") 446 | hold(93.48, "w", -1, 1, false, "") 447 | drag(93.88, "w", -2, 1, false, "") 448 | drag(94.06, "w", -1, 0, false, "") 449 | drag(94.24, "w", 1, 0, false, "") 450 | drag(94.41, "w", 2, 1, false, "") 451 | tap(94.59, "w", 1, 1, false, "") 452 | tap(94.94, "w", 1, 0, false, "") 453 | tap(95.29, "w", 1, -1, false, "") 454 | tap(95.65, "w", 0, -1, false, "") 455 | double(96, "w", 1, 2, -2, 1, false, "") 456 | hold(96.01, "w", 1, 2, false, "") 457 | hold(96.1, "w", 1, 2, false, "") 458 | hold(96.2, "w", 1, 2, false, "") 459 | hold(96.3, "w", 1, 2, false, "") 460 | hold(96.01, "w", -2, 1, false, "") 461 | hold(96.1, "w", -2, 1, false, "") 462 | hold(96.2, "w", -2, 1, false, "") 463 | hold(96.3, "w", -2, 1, false, "") 464 | tap(96.7, "w", -2, 1, false, "") 465 | tap(97.06, "w", 0, 1, false, "") 466 | tap(97.41, "w", -1.5, -1, false, "") 467 | tap(97.76, "w", 0, -2, false, "") 468 | tap(98.12, "w", 2, 0, false, "") 469 | tap(98.47, "w", 1, 0, false, "") 470 | tap(98.82, "w", -1, -1, false, "") 471 | tap(99.18, "w", -2, 0, false, "") 472 | tap(99.53, "w", 1, 1, false, "") 473 | tap(99.88, "w", 1, -1, false, "") 474 | tap(100.24, "w", -2, 0, false, "") 475 | tap(100.59, "w", 1, -1, false, "") 476 | tap(100.94, "w", -1, 0, false, "") 477 | tap(101.29, "w", 2, 0, false, "") 478 | double(101.65, "w", 2, 1, -2, -1, false, "") 479 | hold(101.66, "w", 2, 1, false, "") 480 | hold(101.75, "w", 2, 1, false, "") 481 | hold(101.85, "w", 2, 1, false, "") 482 | hold(101.95, "w", 2, 1, false, "") 483 | hold(102.05, "w", 2, 1, false, "") 484 | hold(102.15, "w", 2, 1, false, "") 485 | hold(102.25, "w", 2, 1, false, "") 486 | hold(102.35, "w", 2, 1, false, "") 487 | hold(102.45, "w", 2, 1, false, "") 488 | hold(102.55, "w", 2, 1, false, "") 489 | hold(102.65, "w", 2, 1, false, "") 490 | hold(102.75, "w", 2, 1, false, "") 491 | hold(102.85, "w", 2, 1, false, "") 492 | hold(102.95, "w", 2, 1, false, "") 493 | hold(103.05, "w", 2, 1, false, "") 494 | hold(103.15, "w", 2, 1, false, "") 495 | hold(103.25, "w", 2, 1, false, "") 496 | hold(103.35, "w", 2, 1, false, "") 497 | hold(103.45, "w", 2, 1, false, "") 498 | hold(103.55, "w", 2, 1, false, "") 499 | hold(103.65, "w", 2, 1, false, "") 500 | hold(103.75, "w", 2, 1, false, "") 501 | hold(103.85, "w", 2, 1, false, "") 502 | hold(103.95, "w", 2, 1, false, "") 503 | hold(104.05, "w", 2, 1, false, "") 504 | hold(101.66, "w", -2, -1, false, "") 505 | hold(101.75, "w", -2, -1, false, "") 506 | hold(101.85, "w", -2, -1, false, "") 507 | hold(101.95, "w", -2, -1, false, "") 508 | hold(102.05, "w", -2, -1, false, "") 509 | hold(102.15, "w", -2, -1, false, "") 510 | hold(102.25, "w", -2, -1, false, "") 511 | hold(102.35, "w", -2, -1, false, "") 512 | hold(102.45, "w", -2, -1, false, "") 513 | hold(102.55, "w", -2, -1, false, "") 514 | hold(102.65, "w", -2, -1, false, "") 515 | hold(102.75, "w", -2, -1, false, "") 516 | hold(102.85, "w", -2, -1, false, "") 517 | hold(102.95, "w", -2, -1, false, "") 518 | hold(103.05, "w", -2, -1, false, "") 519 | hold(103.15, "w", -2, -1, false, "") 520 | hold(103.25, "w", -2, -1, false, "") 521 | hold(103.35, "w", -2, -1, false, "") 522 | hold(103.45, "w", -2, -1, false, "") 523 | hold(103.55, "w", -2, -1, false, "") 524 | hold(103.65, "w", -2, -1, false, "") 525 | hold(103.75, "w", -2, -1, false, "") 526 | hold(103.85, "w", -2, -1, false, "") 527 | hold(103.95, "w", -2, -1, false, "") 528 | hold(104.05, "w", -2, -1, false, "") 529 | double(104.82, "w", 1, 1, -1, -1, false, "") 530 | double(105.53, "w", 1, -1, -1, 1, false, "") 531 | double(106.24, "w", 2, 1, -2, 1, false, "") 532 | double(106.94, "w", 2, -1, -2, -1, false, "") 533 | double(107.65, "w", -1, -1, -2, 1, false, "") 534 | double(108.35, "w", 2, 1, 1, -1, false, "") 535 | double(109.06, "w", 2, -1, 0, 1, false, "") 536 | double(109.76, "w", 0, 1, -2, -1, false, "") 537 | double(110.47, "w", 0, 2, -2, 2, false, "") 538 | double(111.18, "w", 2, -2, 0, -2, false, "") 539 | hold(112.24, "w", 1, 2, false, "") 540 | hold(112.24, "w", 2, 1, false, "") 541 | hold(112.24, "w", -1, 2, false, "") 542 | hold(112.24, "w", -2, 1, false, "") 543 | hold(112.24, "w", -2, -1, false, "") 544 | hold(112.24, "w", -1, -2, false, "") 545 | hold(112.24, "w", 1, -2, false, "") 546 | hold(112.24, "w", 2, -1, false, "") 547 | tap(112.24, "w", 0, 0, true, "") 548 | tap(112.94, "w", -1, 1, true, "") 549 | hold(112.95, "w", -1, 1, false, "") 550 | hold(113.04, "w", -1, 1, false, "") 551 | hold(113.14, "w", -1, 1, false, "") 552 | hold(113.24, "w", -1, 1, false, "") 553 | hold(113.34, "w", -1, 1, false, "") 554 | hold(113.44, "w", -1, 1, false, "") 555 | hold(113.54, "w", -1, 1, false, "") 556 | hold(113.64, "w", -1, 1, false, "") 557 | hold(113.74, "w", -1, 1, false, "") 558 | hold(113.84, "w", -1, 1, false, "") 559 | hold(113.94, "w", -1, 1, false, "") 560 | tap(114.35, "w", 1, 0, true, "") 561 | hold(114.36, "w", 1, 0, false, "") 562 | hold(114.45, "w", 1, 0, false, "") 563 | hold(114.55, "w", 1, 0, false, "") 564 | hold(114.65, "w", 1, 0, false, "") 565 | hold(114.75, "w", 1, 0, false, "") 566 | hold(114.85, "w", 1, 0, false, "") 567 | hold(114.95, "w", 1, 0, false, "") 568 | hold(115.05, "w", 1, 0, false, "") 569 | hold(115.15, "w", 1, 0, false, "") 570 | hold(115.25, "w", 1, 0, false, "") 571 | hold(115.35, "w", 1, 0, false, "") 572 | tap(115.76, "w", -1, -1, true, "") 573 | hold(115.77, "w", -1, -1, false, "") 574 | hold(115.86, "w", -1, -1, false, "") 575 | hold(115.96, "w", -1, -1, false, "") 576 | hold(116.06, "w", -1, -1, false, "") 577 | hold(116.16, "w", -1, -1, false, "") 578 | hold(116.26, "w", -1, -1, false, "") 579 | hold(116.36, "w", -1, -1, false, "") 580 | hold(116.46, "w", -1, -1, false, "") 581 | hold(116.56, "w", -1, -1, false, "") 582 | hold(116.66, "w", -1, -1, false, "") 583 | hold(116.76, "w", -1, -1, false, "") 584 | tap(117.18, "w", 0, -1, true, "") 585 | hold(117.19, "w", 0, -1, false, "") 586 | hold(117.28, "w", 0, -1, false, "") 587 | hold(117.38, "w", 0, -1, false, "") 588 | hold(117.48, "w", 0, -1, false, "") 589 | hold(117.58, "w", 0, -1, false, "") 590 | hold(117.68, "w", 0, -1, false, "") 591 | hold(117.78, "w", 0, -1, false, "") 592 | hold(117.88, "w", 0, -1, false, "") 593 | hold(117.98, "w", 0, -1, false, "") 594 | hold(118.08, "w", 0, -1, false, "") 595 | hold(118.18, "w", 0, -1, false, "") 596 | tap(118.59, "w", 2, -1, true, "") 597 | hold(118.6, "w", 2, -1, false, "") 598 | hold(118.69, "w", 2, -1, false, "") 599 | hold(118.79, "w", 2, -1, false, "") 600 | hold(118.89, "w", 2, -1, false, "") 601 | hold(118.99, "w", 2, -1, false, "") 602 | hold(119.09, "w", 2, -1, false, "") 603 | hold(119.19, "w", 2, -1, false, "") 604 | hold(119.29, "w", 2, -1, false, "") 605 | hold(119.39, "w", 2, -1, false, "") 606 | hold(119.49, "w", 2, -1, false, "") 607 | hold(119.59, "w", 2, -1, false, "") 608 | tap(120, "w", 1, 0, true, "") 609 | hold(120.01, "w", 1, 0, false, "") 610 | hold(120.1, "w", 1, 0, false, "") 611 | hold(120.2, "w", 1, 0, false, "") 612 | hold(120.3, "w", 1, 0, false, "") 613 | hold(120.4, "w", 1, 0, false, "") 614 | hold(120.5, "w", 1, 0, false, "") 615 | hold(120.6, "w", 1, 0, false, "") 616 | hold(120.7, "w", 1, 0, false, "") 617 | hold(120.8, "w", 1, 0, false, "") 618 | hold(120.9, "w", 1, 0, false, "") 619 | hold(121, "w", 1, 0, false, "") 620 | tap(121.41, "w", -1, -1, true, "") 621 | hold(121.42, "w", -1, -1, false, "") 622 | hold(121.51, "w", -1, -1, false, "") 623 | hold(121.61, "w", -1, -1, false, "") 624 | hold(121.71, "w", -1, -1, false, "") 625 | hold(121.81, "w", -1, -1, false, "") 626 | hold(121.91, "w", -1, -1, false, "") 627 | hold(122.01, "w", -1, -1, false, "") 628 | hold(122.11, "w", -1, -1, false, "") 629 | hold(122.21, "w", -1, -1, false, "") 630 | hold(122.31, "w", -1, -1, false, "") 631 | hold(122.11, "w", -1, -1, false, "") 632 | tap(122.82, "w", 1, 0, true, "") 633 | hold(122.83, "w", 1, 0, false, "") 634 | hold(122.92, "w", 1, 0, false, "") 635 | hold(123.02, "w", 1, 0, false, "") 636 | hold(123.12, "w", 1, 0, false, "") 637 | hold(123.22, "w", 1, 0, false, "") 638 | hold(123.32, "w", 1, 0, false, "") 639 | hold(123.42, "w", 1, 0, false, "") 640 | hold(123.52, "w", 1, 0, false, "") 641 | hold(123.62, "w", 1, 0, false, "") 642 | hold(123.72, "w", 1, 0, false, "") 643 | hold(123.82, "w", 1, 0, false, "") 644 | tap(124.24, "w", 0, 0, true, "") 645 | hold(124.25, "w", 0, 0, false, "") 646 | hold(124.34, "w", 0, 0, false, "") 647 | hold(124.44, "w", 0, 0, false, "") 648 | hold(124.54, "w", 0, 0, false, "") 649 | hold(124.64, "w", 0, 0, false, "") 650 | hold(124.74, "w", 0, 0, false, "") 651 | hold(124.84, "w", 0, 0, false, "") 652 | hold(124.94, "w", 0, 0, false, "") 653 | hold(125.04, "w", 0, 0, false, "") 654 | hold(125.14, "w", 0, 0, false, "") 655 | hold(125.24, "w", 0, 0, false, "") 656 | hold(125.34, "w", 0, 0, false, "") 657 | hold(125.44, "w", 0, 0, false, "") 658 | hold(125.54, "w", 0, 0, false, "") 659 | hold(125.64, "w", 0, 0, false, "") 660 | hold(125.74, "w", 0, 0, false, "") 661 | hold(125.84, "w", 0, 0, false, "") 662 | hold(125.94, "w", 0, 0, false, "") 663 | hold(126.04, "w", 0, 0, false, "") 664 | hold(126.14, "w", 0, 0, false, "") 665 | hold(126.24, "w", 0, 0, false, "") 666 | hold(126.34, "w", 0, 0, false, "") 667 | hold(126.44, "w", 0, 0, false, "") 668 | hold(126.54, "w", 0, 0, false, "") 669 | hold(126.64, "w", 0, 0, false, "") 670 | hold(126.74, "w", 0, 0, false, "") 671 | hold(126.84, "w", 0, 0, false, "") 672 | hold(126.94, "w", 0, 0, false, "") 673 | hold(127.04, "w", 0, 0, false, "") 674 | hold(127.14, "w", 0, 0, false, "") 675 | hold(127.24, "w", 0, 0, false, "") 676 | hold(127.34, "w", 0, 0, false, "") 677 | hold(127.44, "w", 0, 0, false, "") 678 | hold(127.54, "w", 0, 0, false, "") 679 | hold(127.64, "w", 0, 0, false, "") 680 | hold(127.74, "w", 0, 0, false, "") 681 | hold(127.84, "w", 0, 0, false, "") 682 | hold(127.94, "w", 0, 0, false, "") 683 | hold(128.04, "w", 0, 0, false, "") 684 | hold(128.14, "w", 0, 0, false, "") 685 | hold(128.24, "w", 0, 0, false, "") 686 | hold(128.34, "w", 0, 0, false, "") 687 | hold(128.44, "w", 0, 0, false, "") 688 | hold(128.54, "w", 0, 0, false, "") 689 | hold(128.64, "w", 0, 0, false, "") -------------------------------------------------------------------------------- /charts/-simpletone.sk: -------------------------------------------------------------------------------- 1 | options: 2 | 音频: cr.simpletone 3 | 曲名: simpletone 4 | 曲师: CRE 5 | 谱师: PiraTom 6 | 难度: &bTutorial 1 7 | 8 | on load: 9 | delete {loadedNotes::*} 10 | set {maxNote} to 0 11 | set {sound} to "{@音频}" 12 | loadChart() 13 | set {song} to "{@曲名}" 14 | set {artist} to "{@曲师}" 15 | set {author} to "{@谱师}" 16 | set {level} to "{@难度}" 17 | 18 | function loadChart(): 19 | create section stored in {title1}: 20 | send title "&7欢迎来到 &fCube Rhythm" with subtitle "&f &f" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 21 | delete {title1} 22 | 23 | create section stored in {title2}: 24 | send title "&7下面将进行&f玩法教学" with subtitle "&f &f" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 25 | delete {title2} 26 | 27 | create section stored in {title3}: 28 | send title "&7我们先从&f最基础的东西&7开始" with subtitle "&f &f" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 29 | delete {title3} 30 | 31 | create section stored in {title4}: 32 | send title "&f由方框包围起来的部分" with subtitle "&f是判定面,位于你的前后左右" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 33 | loop blocks in radius 8 around {actor}: 34 | loop-block is white concrete 35 | set loop-block to light blue concrete 36 | wait 5 ticks 37 | loop blocks in radius 8 around {actor}: 38 | loop-block is light blue concrete 39 | set loop-block to white concrete 40 | wait 5 ticks 41 | loop blocks in radius 8 around {actor}: 42 | loop-block is white concrete 43 | set loop-block to light blue concrete 44 | wait 5 ticks 45 | loop blocks in radius 8 around {actor}: 46 | loop-block is light blue concrete 47 | set loop-block to white concrete 48 | delete {title4} 49 | 50 | create section stored in {title5}: 51 | send title "&f左上角是你的分数" with subtitle "&f中间是你的连击数" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 52 | set {_loc1} to location(0.5, 0, 10, world "world", 180, 0) 53 | summon text display at {_loc1}: 54 | set display translation of the entity to vector(0,-1,0) 55 | set display brightness of the entity to displayBrightness(10,10) 56 | set display text of the entity to "&f0" 57 | set display scale of entity to vector(10,10,10) 58 | set display text background color of the entity to bukkitColor(0,0,0,0) 59 | set metadata value "show" of the entity to true 60 | set display text opacity of the entity to 0 61 | set {_entity} to the entity 62 | set {_height} to 5 63 | loop 20 times: 64 | set {_height} to {_height} * 0.8 65 | set display translation of {_entity} to vector(0,-1-{_height},0) 66 | add 255/10 to {_alpha} 67 | set {_alpha} to 255 if {_alpha} > 255 68 | set display text opacity of {_entity} to {_alpha} 69 | wait 1 tick 70 | loop 10 times: 71 | set {_height} to {_height} * 0.8 72 | remove 255/10 from {_alpha} 73 | set {_alpha} to 1 if {_alpha} < 1 74 | set display text opacity of {_entity} to {_alpha} 75 | wait 1 tick 76 | loop all text displays: 77 | loop-entity is {_entity} 78 | delete loop-entity 79 | exit loop 80 | wait 1 tick 81 | delete {_entity} 82 | delete {title5} 83 | 84 | create section stored in {title6}: 85 | send title "&f接下来介绍音符" with subtitle "&f &f" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 86 | delete {title6} 87 | 88 | create section stored in {title7}: 89 | set {_loc1} to location(-0.5, 0, 4, world "world", 180, 0) 90 | summon text display at {_loc1}: 91 | set display brightness of the entity to displayBrightness(10,10) 92 | set display text alignment of {_display} to left aligned 93 | set display text of the entity to "&b&lTap&f 音符", "&f", "&f与判定面重合时", "&f对准它", "&e单击&f鼠标&a左&f或&d右&f键" 94 | set display scale of entity to vector(0.8,0.8,0.8) 95 | set display text background color of the entity to bukkitColor(0,0,0,0) 96 | set metadata value "show" of the entity to true 97 | set display text opacity of the entity to 0 98 | set {_entity} to the entity 99 | loop 5 times: 100 | add 255/5 to {_alpha} 101 | set {_alpha} to 255 if {_alpha} > 255 102 | set display text opacity of {_entity} to {_alpha} 103 | wait 1 tick 104 | wait 5 seconds 105 | loop 5 times: 106 | set {_height} to {_height} * 0.8 107 | remove 255/5 from {_alpha} 108 | set {_alpha} to 1 if {_alpha} < 1 109 | set display text opacity of {_entity} to {_alpha} 110 | wait 1 tick 111 | loop all text displays: 112 | loop-entity is {_entity} 113 | delete loop-entity 114 | exit loop 115 | wait 1 tick 116 | delete {_entity} 117 | delete {title7} 118 | 119 | create section stored in {title8}: 120 | set {_loc1} to location(2, 0, 4, world "world", 180, 0) 121 | summon text display at {_loc1}: 122 | set display brightness of the entity to displayBrightness(10,10) 123 | set display text alignment of {_display} to right aligned 124 | set display text of the entity to "&6&lDouble&f 音符", "&f", "&f与判定面重合时", "&f对准&e其中一个", "&6双击&f鼠标&a左&d右&f键" 125 | set display scale of entity to vector(0.8,0.8,0.8) 126 | set display text background color of the entity to bukkitColor(0,0,0,0) 127 | set metadata value "show" of the entity to true 128 | set display text opacity of the entity to 0 129 | set {_entity} to the entity 130 | loop 5 times: 131 | add 255/5 to {_alpha} 132 | set {_alpha} to 255 if {_alpha} > 255 133 | set display text opacity of {_entity} to {_alpha} 134 | wait 1 tick 135 | wait 5 seconds 136 | loop 5 times: 137 | set {_height} to {_height} * 0.8 138 | remove 255/5 from {_alpha} 139 | set {_alpha} to 1 if {_alpha} < 1 140 | set display text opacity of {_entity} to {_alpha} 141 | wait 1 tick 142 | loop all text displays: 143 | loop-entity is {_entity} 144 | delete loop-entity 145 | exit loop 146 | wait 1 tick 147 | delete {_entity} 148 | delete {title8} 149 | 150 | create section stored in {title9}: 151 | set {_loc1} to location(-0.5, 0, 4, world "world", 180, 0) 152 | summon text display at {_loc1}: 153 | set display brightness of the entity to displayBrightness(10,10) 154 | set display text alignment of {_display} to left aligned 155 | set display text of the entity to "&f&lHold&f 音符", "&f", "&f与判定面重合时", "&c按住&f鼠标&d右&f键", "&f按住后&a无需对准" 156 | set display scale of entity to vector(0.8,0.8,0.8) 157 | set display text background color of the entity to bukkitColor(0,0,0,0) 158 | set metadata value "show" of the entity to true 159 | set display text opacity of the entity to 0 160 | set {_entity} to the entity 161 | loop 5 times: 162 | add 255/5 to {_alpha} 163 | set {_alpha} to 255 if {_alpha} > 255 164 | set display text opacity of {_entity} to {_alpha} 165 | wait 1 tick 166 | wait 5 seconds 167 | loop 5 times: 168 | set {_height} to {_height} * 0.8 169 | remove 255/5 from {_alpha} 170 | set {_alpha} to 1 if {_alpha} < 1 171 | set display text opacity of {_entity} to {_alpha} 172 | wait 1 tick 173 | loop all text displays: 174 | loop-entity is {_entity} 175 | delete loop-entity 176 | exit loop 177 | wait 1 tick 178 | delete {_entity} 179 | delete {title9} 180 | 181 | create section stored in {title10}: 182 | set {_loc1} to location(2, 0, 4, world "world", 180, 0) 183 | summon text display at {_loc1}: 184 | set display brightness of the entity to displayBrightness(10,10) 185 | set display text alignment of {_display} to right aligned 186 | set display text of the entity to "&d&lFlick&f 音符", "&f", "&f与判定面重合时", "&f按&b箭头&f方向", "&e旋转&f90°到邻近的判定面" 187 | set display scale of entity to vector(0.8,0.8,0.8) 188 | set display text background color of the entity to bukkitColor(0,0,0,0) 189 | set metadata value "show" of the entity to true 190 | set display text opacity of the entity to 0 191 | set {_entity} to the entity 192 | loop 5 times: 193 | add 255/5 to {_alpha} 194 | set {_alpha} to 255 if {_alpha} > 255 195 | set display text opacity of {_entity} to {_alpha} 196 | wait 1 tick 197 | wait 5 seconds 198 | loop 5 times: 199 | set {_height} to {_height} * 0.8 200 | remove 255/5 from {_alpha} 201 | set {_alpha} to 1 if {_alpha} < 1 202 | set display text opacity of {_entity} to {_alpha} 203 | wait 1 tick 204 | loop all text displays: 205 | loop-entity is {_entity} 206 | delete loop-entity 207 | exit loop 208 | wait 1 tick 209 | delete {_entity} 210 | delete {title10} 211 | 212 | create section stored in {title11}: 213 | set {_loc1} to location(-0.5, 0, 4, world "world", 180, 0) 214 | summon text display at {_loc1}: 215 | set display brightness of the entity to displayBrightness(10,10) 216 | set display text alignment of {_display} to left aligned 217 | set display text of the entity to "&e&lDrag&f 音符", "&f", "&f与判定面重合时", "&f对准它", "&a无需按键" 218 | set display scale of entity to vector(0.8,0.8,0.8) 219 | set display text background color of the entity to bukkitColor(0,0,0,0) 220 | set metadata value "show" of the entity to true 221 | set display text opacity of the entity to 0 222 | set {_entity} to the entity 223 | loop 5 times: 224 | add 255/5 to {_alpha} 225 | set {_alpha} to 255 if {_alpha} > 255 226 | set display text opacity of {_entity} to {_alpha} 227 | wait 1 tick 228 | wait 3.5 seconds 229 | loop 5 times: 230 | set {_height} to {_height} * 0.8 231 | remove 255/5 from {_alpha} 232 | set {_alpha} to 1 if {_alpha} < 1 233 | set display text opacity of {_entity} to {_alpha} 234 | wait 1 tick 235 | loop all text displays: 236 | loop-entity is {_entity} 237 | delete loop-entity 238 | exit loop 239 | wait 1 tick 240 | delete {_entity} 241 | delete {title11} 242 | 243 | create section stored in {title12}: 244 | send title "&f玩法教学到此结束" with subtitle "&f &f" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 245 | delete {title12} 246 | 247 | create section stored in {title13}: 248 | send title "&f如果想再看一遍教程" with subtitle "&f重新加载这张谱面即可" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 249 | delete {title13} 250 | 251 | create section stored in {title14}: 252 | delete {title14} 253 | 254 | execution(0,{title1}) 255 | execution(1.85,{title2}) 256 | execution(3.69,{title3}) 257 | execution(7.38,{title4}) 258 | execution(9.23,{title5}) 259 | execution(11.08,{title6}) 260 | execution(12.92,{title7}) 261 | execution(20.31,{title8}) 262 | execution(27.69,{title9}) 263 | execution(35.07,{title10}) 264 | execution(40.61,{title11}) 265 | execution(44.30,{title12}) 266 | execution(46.15,{title13}) 267 | execution(48,{title14}) 268 | tap(14.77, "w", 1, 0, false, "") 269 | tap(16.61, "w", 1, 1, false, "") 270 | tap(18.46, "w", 1, -1, false, "") 271 | tap(20.31, "w", 1, 0, false, "") 272 | double(22.15, "w", -1, -1, -2, 1, false, "") 273 | double(24, "w", -1, 1, -2, -1, false, "") 274 | double(25.84, "w", 1, 2, -2, -1, false, "") 275 | double(27.69, "w", 1, -1, -1, 2, false, "") 276 | tap(29.54, "w", 2, 1, false, "") 277 | hold(29.55, "w", 2, 1, false, "") 278 | hold(29.64, "w", 2, 1, false, "") 279 | hold(29.74, "w", 2, 1, false, "") 280 | hold(29.84, "w", 2, 1, false, "") 281 | hold(29.94, "w", 2, 1, false, "") 282 | hold(30.04, "w", 2, 1, false, "") 283 | hold(30.14, "w", 2, 1, false, "") 284 | hold(30.24, "w", 2, 1, false, "") 285 | hold(30.34, "w", 2, 1, false, "") 286 | hold(30.44, "w", 2, 1, false, "") 287 | hold(30.54, "w", 2, 1, false, "") 288 | hold(30.64, "w", 2, 1, false, "") 289 | hold(30.74, "w", 2, 1, false, "") 290 | hold(30.84, "w", 2, 1, false, "") 291 | tap(31.38, "w", 1, 0, false, "") 292 | hold(31.39, "w", 1, 0, false, "") 293 | hold(31.48, "w", 1, 0, false, "") 294 | hold(31.58, "w", 1, 0, false, "") 295 | hold(31.68, "w", 1, 0, false, "") 296 | hold(31.78, "w", 1, 0, false, "") 297 | hold(31.88, "w", 1, 0, false, "") 298 | hold(31.98, "w", 1, 0, false, "") 299 | hold(32.08, "w", 1, 0, false, "") 300 | hold(32.18, "w", 1, 0, false, "") 301 | hold(32.28, "w", 1, 0, false, "") 302 | hold(32.38, "w", 1, 0, false, "") 303 | hold(32.48, "w", 1, 0, false, "") 304 | hold(32.58, "w", 1, 0, false, "") 305 | hold(32.68, "w", 1, 0, false, "") 306 | tap(33.23, "w", 0, -1, false, "") 307 | hold(33.24, "w", 0, -1, false, "") 308 | hold(33.33, "w", 0, -1, false, "") 309 | hold(33.43, "w", 0, -1, false, "") 310 | hold(33.53, "w", 0, -1, false, "") 311 | hold(33.63, "w", 0, -1, false, "") 312 | hold(33.73, "w", 0, -1, false, "") 313 | hold(33.83, "w", 0, -1, false, "") 314 | hold(33.93, "w", 0, -1, false, "") 315 | hold(34.03, "w", 0, -1, false, "") 316 | hold(34.13, "w", 0, -1, false, "") 317 | hold(34.23, "w", 0, -1, false, "") 318 | hold(34.33, "w", 0, -1, false, "") 319 | hold(34.43, "w", 0, -1, false, "") 320 | hold(34.53, "w", 0, -1, false, "") 321 | flick(36.92, "w", "left", false, "") 322 | flick(38.77, "a", "right", false, "") 323 | drag(42.46, "w", 2, 1, false, "") 324 | drag(42.69, "w", 2, 0.5, false, "") 325 | drag(42.92, "w", 2, 0, false, "") 326 | drag(43.15, "w", 2, -0.5, false, "") 327 | drag(43.38, "w", 2, -1, false, "") 328 | drag(43.5, "w", 1.5, -1, false, "") 329 | drag(43.61, "w", 1, -1, false, "") 330 | drag(43.73, "w", 0.5, -1, false, "") 331 | drag(43.84, "w", 0, -1, false, "") 332 | drag(43.96, "w", -0.5, -1, false, "") 333 | drag(44.07, "w", -1, -1, false, "") 334 | drag(44.19, "w", -1.5, -1, false, "") 335 | drag(44.3, "w", -2, -1, false, "") 336 | -------------------------------------------------------------------------------- /charts/-styx_helix.sk: -------------------------------------------------------------------------------- 1 | options: 2 | 音频: cr.styx_helix 3 | 曲名: STYX HELIX 4 | 曲师: MYTH & ROID 5 | 谱师: PiraTom 6 | 难度: &aBasic 5 7 | 8 | on load: 9 | delete {loadedNotes::*} 10 | set {maxNote} to 0 11 | set {sound} to "{@音频}" 12 | loadChart() 13 | set {song} to "{@曲名}" 14 | set {artist} to "{@曲师}" 15 | set {author} to "{@谱师}" 16 | set {level} to "{@难度}" 17 | 18 | function loadChart(): 19 | double(0, "w", 0, -1, -2, 1, false, "") 20 | double(0.49, "w", 0, -1, -1, 1, false, "") 21 | tap(0.85, "w", 1, 0, false, "") 22 | tap(1.1, "w", -1, -1, false, "") 23 | tap(1.34, "w", 0, -1, false, "") 24 | tap(1.59, "w", 1, -1, false, "") 25 | double(1.95, "w", 2, -1, 0, 1, false, "") 26 | double(2.44, "w", 2, -1, 1, 1, false, "") 27 | tap(2.8, "w", -1, 0, false, "") 28 | tap(3.05, "w", 1, -1, false, "") 29 | tap(3.29, "w", 0, -1, false, "") 30 | tap(3.54, "w", -1, -1, false, "") 31 | double(3.9, "w", 2, -1, -2, -1, false, "") 32 | double(4.39, "w", 2, -1, -2, -1, false, "") 33 | tap(4.76, "w", 1, -1, false, "") 34 | tap(5, "w", -1, -1, false, "") 35 | tap(5.24, "w", 1, -1, false, "") 36 | tap(5.49, "w", -1, -1, false, "") 37 | double(5.85, "w", 0, -2, 0, 2, false, "") 38 | drag(6.34, "w", 2, -2, false, "") 39 | drag(6.46, "w", 1, -2, false, "") 40 | drag(6.59, "w", 0, -2, false, "") 41 | drag(6.71, "w", -1, -2, false, "") 42 | drag(6.83, "w", -2, -2, false, "") 43 | drag(6.95, "w", -1, -2, false, "") 44 | drag(7.07, "w", 0, -2, false, "") 45 | drag(7.2, "w", -1, -2, false, "") 46 | drag(7.32, "w", -2, -2, false, "") 47 | drag(7.44, "w", -1, -2, false, "") 48 | double(7.8, "w", 1, -1, -1, 1, false, "") 49 | hold(7.8, "w", 1, -1, false, "") 50 | hold(7.93, "w", 1, -1, false, "") 51 | hold(8.05, "w", 1, -1, false, "") 52 | hold(8.17, "w", 1, -1, false, "") 53 | hold(8.29, "w", 1, -1, false, "") 54 | hold(8.41, "w", 1, -1, false, "") 55 | hold(8.54, "w", 1, -1, false, "") 56 | hold(8.66, "w", 1, -1, false, "") 57 | hold(7.8, "w", -1, 1, false, "") 58 | hold(7.93, "w", -1, 1, false, "") 59 | hold(8.05, "w", -1, 1, false, "") 60 | hold(8.17, "w", -1, 1, false, "") 61 | hold(8.29, "w", -1, 1, false, "") 62 | hold(8.41, "w", -1, 1, false, "") 63 | hold(8.54, "w", -1, 1, false, "") 64 | hold(8.66, "w", -1, 1, false, "") 65 | drag(9.27, "w", 0, 0, false, "") 66 | double(9.76, "w", 2, 2, 0, 2, false, "") 67 | hold(9.76, "w", 2, 2, false, "") 68 | hold(9.88, "w", 2, 2, false, "") 69 | hold(10, "w", 2, 2, false, "") 70 | hold(10.12, "w", 2, 2, false, "") 71 | hold(10.24, "w", 2, 2, false, "") 72 | hold(10.37, "w", 2, 2, false, "") 73 | hold(10.49, "w", 2, 2, false, "") 74 | hold(10.61, "w", 2, 2, false, "") 75 | drag(10.24, "w", 0, 1, false, "") 76 | hold(10.24, "w", 0, 1, false, "") 77 | hold(10.37, "w", 0, 1, false, "") 78 | hold(10.49, "w", 0, 1, false, "") 79 | hold(10.61, "w", 0, 1, false, "") 80 | drag(10.73, "w", 1, 0, false, "") 81 | tap(11.22, "w", -1, 1, false, "") 82 | tap(11.46, "w", -1, 0, false, "") 83 | tap(11.71, "w", -1, -1, false, "") 84 | hold(11.71, "w", -1, -1, false, "") 85 | hold(11.83, "w", -1, -1, false, "") 86 | hold(11.95, "w", -1, -1, false, "") 87 | hold(12.07, "w", -1, -1, false, "") 88 | hold(12.2, "w", -1, -1, false, "") 89 | hold(12.32, "w", -1, -1, false, "") 90 | hold(12.44, "w", -1, -1, false, "") 91 | hold(12.56, "w", -1, -1, false, "") 92 | drag(12.2, "w", 1, 0, false, "") 93 | hold(12.2, "w", 1, 0, false, "") 94 | hold(12.32, "w", 1, 0, false, "") 95 | hold(12.44, "w", 1, 0, false, "") 96 | hold(12.56, "w", 1, 0, false, "") 97 | drag(12.68, "w", 0, 1, false, "") 98 | double(13.17, "w", 1, -1, -1, 1, false, "") 99 | tap(13.66, "w", 2, -1, false, "") 100 | tap(13.9, "w", 2, -1, false, "") 101 | double(14.15, "w", 2, -1, -2, -1, false, "") 102 | tap(14.63, "w", -1, -1, false, "") 103 | tap(14.88, "w", -1, -1, false, "") 104 | double(15.12, "w", 1, -1, -1, -1, false, "") 105 | tap(15.61, "w", 1, 1, false, "") 106 | tap(15.85, "w", 1, 1, false, "") 107 | double(16.1, "w", 1, 1, -1, 1, false, "") 108 | tap(16.59, "w", -1, 1, false, "") 109 | tap(16.83, "w", -1, 1, false, "") 110 | double(17.07, "w", 2, 1, -2, 1, false, "") 111 | double(17.56, "w", 1, -1, -1, 1, false, "") 112 | hold(17.56, "w", -1, 1, false, "") 113 | hold(17.68, "w", -1, 1, false, "") 114 | hold(17.8, "w", -1, 1, false, "") 115 | hold(17.93, "w", -1, 1, false, "") 116 | drag(18.05, "w", 0, 1, false, "") 117 | hold(18.05, "w", 0, 1, false, "") 118 | hold(18.17, "w", 0, 1, false, "") 119 | hold(18.29, "w", 0, 1, false, "") 120 | hold(18.41, "w", 0, 1, false, "") 121 | drag(18.54, "w", 1, 1, false, "") 122 | tap(19.02, "w", 1, 1, false, "") 123 | tap(19.27, "w", 1, 0, false, "") 124 | tap(19.51, "w", 1, -1, false, "") 125 | hold(19.51, "w", 1, -1, false, "") 126 | hold(19.63, "w", 1, -1, false, "") 127 | hold(19.76, "w", 1, -1, false, "") 128 | hold(19.88, "w", 1, -1, false, "") 129 | drag(20, "w", -1, 1, false, "") 130 | hold(20, "w", -1, 1, false, "") 131 | hold(20.12, "w", -1, 1, false, "") 132 | hold(20.24, "w", -1, 1, false, "") 133 | hold(20.37, "w", -1, 1, false, "") 134 | drag(20.49, "w", -1, 0, false, "") 135 | hold(20.49, "w", -1, 0, false, "") 136 | hold(20.61, "w", -1, 0, false, "") 137 | hold(20.73, "w", -1, 0, false, "") 138 | hold(20.85, "w", -1, 0, false, "") 139 | double(21.46, "w", 2, -1, 2, 1, false, "") 140 | double(21.71, "w", 2, -1, 2, 1, false, "") 141 | double(21.95, "w", 2, -1, 2, 1, false, "") 142 | drag(22.01, "w", 1, -1, false, "") 143 | drag(22.07, "w", 0, -1, false, "") 144 | double(22.44, "w", -2, -1, -2, 1, false, "") 145 | double(22.68, "w", -2, -1, -2, 1, false, "") 146 | double(22.92, "w", -2, -1, -2, 1, false, "") 147 | drag(22.99, "w", -1, -1, false, "") 148 | drag(23.05, "w", 0, -1, false, "") 149 | double(23.41, "w", 2, 1, 0, 1, false, "") 150 | double(23.65, "w", 2, 1, 0, 1, false, "") 151 | double(23.90, "w", 2, 1, 0, 1, false, "") 152 | hold(23.90, "w", 2, 1, false, "") 153 | hold(24, "w", 2, 1, false, "") 154 | hold(24, "w", 0, 1, false, "") 155 | hold(23.90, "w", 0, 1, false, "") 156 | double(24.39, "w", 0, -1, -2, -1, false, "") 157 | double(24.63, "w", 0, -1, -2, -1, false, "") 158 | double(24.88, "w", 0, -1, -2, -1, false, "") 159 | hold(24.88, "w", 0, -1, false, "") 160 | hold(24.88, "w", -2, -1, false, "") 161 | hold(24.98, "w", -2, -1, false, "") 162 | hold(24.98, "w", 0, -1, false, "") 163 | tap(26.83, "w", 2, 1, false, "") 164 | tap(27.32, "w", 1, 1, false, "") 165 | hold(27.32, "w", 1, 1, false, "") 166 | hold(27.44, "w", 1, 1, false, "") 167 | hold(27.56, "w", 1, 1, false, "") 168 | hold(27.68, "w", 1, 1, false, "") 169 | hold(27.8, "w", 1, 1, false, "") 170 | tap(28.05, "w", -1, 1, false, "") 171 | tap(28.29, "w", 0, 1, false, "") 172 | hold(28.29, "w", 0, 1, false, "") 173 | hold(28.41, "w", 0, 1, false, "") 174 | hold(28.54, "w", 0, 1, false, "") 175 | hold(28.66, "w", 0, 1, false, "") 176 | drag(28.78, "w", 2, 0, false, "") 177 | tap(29.27, "w", 1, -1, false, "") 178 | hold(29.27, "w", 1, -1, false, "") 179 | hold(29.39, "w", 1, -1, false, "") 180 | hold(29.51, "w", 1, -1, false, "") 181 | hold(29.63, "w", 1, -1, false, "") 182 | tap(30, "w", -2, -1, false, "") 183 | tap(30.24, "w", -1, -1, false, "") 184 | hold(30.24, "w", -1, -1, false, "") 185 | hold(30.37, "w", -1, -1, false, "") 186 | hold(30.49, "w", -1, -1, false, "") 187 | hold(30.61, "w", -1, -1, false, "") 188 | drag(30.73, "w", 1, 1, false, "") 189 | tap(31.22, "w", -1, 2, false, "") 190 | hold(31.22, "w", -1, 2, false, "") 191 | hold(31.34, "w", -1, 2, false, "") 192 | hold(31.46, "w", -1, 2, false, "") 193 | hold(31.59, "w", -1, 2, false, "") 194 | drag(31.95, "w", 1.5, 1, false, "") 195 | drag(32.07, "w", 1.5, 1, false, "") 196 | tap(32.2, "w", 1.5, 1, true, "") 197 | hold(32.2, "w", 1.5, 1, false, "") 198 | hold(32.32, "w", 1.5, 1, false, "") 199 | hold(32.44, "w", 1.5, 1, false, "") 200 | hold(32.56, "w", 1.5, 1, false, "") 201 | drag(32.93, "w", -1.5, 0, false, "") 202 | drag(33.05, "w", -1.5, 0, false, "") 203 | tap(33.17, "w", -1.5, 0, true, "") 204 | hold(33.17, "w", -1.5, 0, false, "") 205 | hold(33.29, "w", -1.5, 0, false, "") 206 | hold(33.41, "w", -1.5, 0, false, "") 207 | hold(33.54, "w", -1.5, 0, false, "") 208 | drag(33.9, "w", 1, -1.5, false, "") 209 | drag(34.02, "w", 1, -1.5, false, "") 210 | tap(34.15, "w", 1, -1.5, true, "") 211 | hold(34.15, "w", 1, -1.5, false, "") 212 | hold(34.27, "w", 1, -1.5, false, "") 213 | hold(34.39, "w", 1, -1.5, false, "") 214 | hold(34.51, "w", 1, -1.5, false, "") 215 | tap(35.12, "w", -1, -1.5, false, "") 216 | hold(35.12, "w", -1, -1.5, false, "") 217 | hold(35.24, "w", -1, -1.5, false, "") 218 | hold(35.37, "w", -1, -1.5, false, "") 219 | hold(35.49, "w", -1, -1.5, false, "") 220 | tap(35.85, "w", -1, 1, false, "") 221 | tap(36.1, "w", -1, 0, false, "") 222 | hold(36.1, "w", -1, 0, false, "") 223 | hold(36.22, "w", -1, 0, false, "") 224 | hold(36.34, "w", -1, 0, false, "") 225 | hold(36.46, "w", -1, 0, false, "") 226 | drag(36.59, "w", 1, -1, false, "") 227 | tap(37.07, "w", 2, 0, false, "") 228 | hold(37.07, "w", 2, 0, false, "") 229 | hold(37.2, "w", 2, 0, false, "") 230 | hold(37.32, "w", 2, 0, false, "") 231 | hold(37.44, "w", 2, 0, false, "") 232 | tap(37.8, "w", 2, 1, false, "") 233 | tap(38.05, "w", 1, 0, false, "") 234 | hold(38.05, "w", 1, 0, false, "") 235 | hold(38.17, "w", 1, 0, false, "") 236 | tap(38.54, "w", 0, 1, false, "") 237 | hold(38.54, "w", 0, 1, false, "") 238 | hold(38.66, "w", 0, 1, false, "") 239 | tap(39.02, "w", 0, -1, false, "") 240 | hold(39.02, "w", 0, -1, false, "") 241 | hold(39.15, "w", 0, -1, false, "") 242 | hold(39.27, "w", 0, -1, false, "") 243 | hold(39.39, "w", 0, -1, false, "") 244 | hold(39.51, "w", 0, -1, false, "") 245 | hold(39.63, "w", 0, -1, false, "") 246 | hold(39.76, "w", 0, -1, false, "") 247 | hold(39.88, "w", 0, -1, false, "") 248 | hold(40, "w", 0, -1, false, "") 249 | hold(40.12, "w", 0, -1, false, "") 250 | hold(40.24, "w", 0, -1, false, "") 251 | hold(40.37, "w", 0, -1, false, "") 252 | drag(39.51, "w", -1, 0, false, "") 253 | drag(40, "w", 1, 1, false, "") 254 | drag(40.49, "w", 0, 2, false, "") 255 | tap(40.98, "w", -1, 2, false, "") 256 | tap(41.22, "w", 0, 2, false, "") 257 | tap(41.46, "w", 1, 2, false, "") 258 | tap(41.71, "w", 2, 2, false, "") 259 | tap(41.95, "w", 1, 2, false, "") 260 | double(42.93, "w", 1, 1, -1, -1, false, "") 261 | double(43.9, "w", 1, -1, -1, 1, false, "") 262 | double(44.88, "w", 0, 1, -2, 1, false, "") 263 | tap(45.37, "w", -1, -1, false, "") 264 | hold(45.37, "w", -1, -1, false, "") 265 | hold(45.49, "w", -1, -1, false, "") 266 | hold(45.61, "w", -1, -1, false, "") 267 | hold(45.73, "w", -1, -1, false, "") 268 | drag(45.85, "w", 0, -1, false, "") 269 | hold(45.85, "w", 0, -1, false, "") 270 | hold(45.98, "w", 0, -1, false, "") 271 | hold(46.1, "w", 0, -1, false, "") 272 | hold(46.22, "w", 0, -1, false, "") 273 | drag(46.34, "w", 1, -1, false, "") 274 | hold(46.34, "w", 1, -1, false, "") 275 | hold(46.46, "w", 1, -1, false, "") 276 | hold(46.59, "w", 1, -1, false, "") 277 | hold(46.71, "w", 1, -1, false, "") 278 | hold(46.83, "w", 2, -1, false, "") 279 | drag(46.83, "w", 1, 0, false, "") 280 | hold(46.95, "w", 2, -1, false, "") 281 | hold(47.07, "w", 2, -1, false, "") 282 | hold(47.2, "w", 2, -1, false, "") 283 | hold(47.32, "w", 2, -1, false, "") 284 | hold(47.44, "w", 2, -1, false, "") 285 | hold(47.56, "w", 2, -1, false, "") 286 | hold(47.68, "w", 2, -1, false, "") 287 | drag(47.32, "w", -1, 0, false, "") 288 | drag(47.8, "w", 0, -1, false, "") 289 | drag(48.29, "w", -1, -1, false, "") 290 | drag(48.78, "w", 1, -1, false, "") 291 | drag(49.27, "w", -1, -1, false, "") 292 | drag(49.76, "w", 1, 0, false, "") 293 | drag(50.24, "w", -1, 0, false, "") 294 | drag(50.73, "w", 0, 0, false, "") 295 | hold(47.8, "w", 2, 0, false, "") 296 | hold(47.93, "w", 2, 0, false, "") 297 | hold(48.05, "w", 2, 0, false, "") 298 | hold(48.17, "w", 2, 0, false, "") 299 | hold(48.29, "w", 2, 0, false, "") 300 | hold(48.41, "w", 2, 0, false, "") 301 | hold(48.54, "w", 2, 0, false, "") 302 | hold(48.66, "w", 2, 0, false, "") 303 | hold(48.78, "w", 2, 1, false, "") 304 | hold(48.9, "w", 2, 1, false, "") 305 | hold(49.02, "w", 2, 1, false, "") 306 | hold(49.15, "w", 2, 1, false, "") 307 | hold(49.27, "w", 2, 1, false, "") 308 | hold(49.39, "w", 2, 1, false, "") 309 | hold(49.51, "w", 2, 1, false, "") 310 | hold(49.63, "w", 2, 1, false, "") 311 | hold(49.76, "w", 2, 2, false, "") 312 | hold(49.88, "w", 2, 2, false, "") 313 | hold(50, "w", 2, 2, false, "") 314 | hold(50.12, "w", 2, 2, false, "") 315 | hold(50.24, "w", 2, 2, false, "") 316 | hold(50.37, "w", 2, 2, false, "") 317 | hold(50.49, "w", 2, 2, false, "") 318 | hold(50.61, "w", 2, 2, false, "") 319 | hold(50.73, "w", 2, 2, false, "") 320 | hold(50.73, "w", 1, 2, false, "") 321 | hold(50.73, "w", 2, 1, false, "") 322 | hold(50.73, "w", -1, 2, false, "") 323 | hold(50.73, "w", -2, 2, false, "") 324 | hold(50.73, "w", -2, 1, false, "") 325 | hold(50.73, "w", -2, -1, false, "") 326 | hold(50.73, "w", -2, -2, false, "") 327 | hold(50.73, "w", -1, -2, false, "") 328 | hold(50.73, "w", 1, -2, false, "") 329 | hold(50.73, "w", 2, -2, false, "") 330 | hold(50.73, "w", 2, -1, false, "") 331 | double(52.2, "w", 2, 0, -2, 0, false, "") 332 | tap(52.68, "w", 1, -1, false, "") 333 | hold(52.68, "w", 1, -1, false, "") 334 | hold(52.8, "w", 1, -1, false, "") 335 | tap(53.17, "w", -1, 0, false, "") 336 | hold(53.17, "w", -1, 0, false, "") 337 | hold(53.29, "w", -1, 0, false, "") 338 | tap(53.66, "w", 1, -1, false, "") 339 | tap(54.15, "w", -1, 1, false, "") 340 | tap(54.39, "w", 0, 1, false, "") 341 | tap(54.63, "w", -1, 0, false, "") 342 | hold(54.63, "w", -1, 0, false, "") 343 | hold(54.76, "w", -1, 0, false, "") 344 | tap(55.12, "w", 1, -1, false, "") 345 | hold(55.12, "w", 1, -1, false, "") 346 | hold(55.24, "w", 1, -1, false, "") 347 | tap(55.61, "w", 1, 1, false, "") 348 | tap(56.1, "w", 2, -1, true, "") 349 | tap(56.34, "w", 2, -1, true, "") 350 | hold(56.34, "w", 2, -1, false, "") 351 | hold(56.46, "w", 2, -1, false, "") 352 | hold(56.59, "w", 2, -1, false, "") 353 | hold(56.71, "w", 2, -1, false, "") 354 | hold(56.83, "w", 2, -1, false, "") 355 | hold(56.95, "w", 2, -1, false, "") 356 | drag(56.59, "w", 0.5, -1, false, "") 357 | hold(56.59, "w", 0.5, -1, false, "") 358 | hold(56.71, "w", 0.5, -1, false, "") 359 | hold(56.83, "w", 0.5, -1, false, "") 360 | hold(56.95, "w", 0.5, -1, false, "") 361 | drag(56.83, "w", -1, -1, false, "") 362 | hold(56.83, "w", -1, -1, false, "") 363 | hold(56.95, "w", -1, -1, false, "") 364 | tap(57.32, "w", -2, 1, true, "") 365 | tap(57.56, "w", -2, 1, true, "") 366 | hold(57.56, "w", -2, 1, false, "") 367 | hold(57.68, "w", -2, 1, false, "") 368 | hold(57.8, "w", -2, 1, false, "") 369 | hold(57.93, "w", -2, 1, false, "") 370 | drag(57.8, "w", -0.5, 1, false, "") 371 | hold(57.8, "w", -0.5, 1, false, "") 372 | hold(57.93, "w", -0.5, 1, false, "") 373 | tap(58.29, "w", 2, 2, false, "") 374 | hold(58.29, "w", 2, 2, true, "") 375 | hold(58.41, "w", 2, 2, false, "") 376 | hold(58.54, "w", 2, 2, false, "") 377 | hold(58.66, "w", 2, 2, false, "") 378 | hold(58.78, "w", 2, 1, false, "") 379 | hold(58.9, "w", 2, 1, false, "") 380 | hold(59.02, "w", 2, 2, false, "") 381 | hold(59.15, "w", 2, 2, false, "") 382 | hold(59.27, "w", 1, 2, false, "") 383 | hold(59.39, "w", 0, 2, false, "") 384 | hold(59.51, "w", -1, 2, false, "") 385 | hold(59.63, "w", -1, 2, false, "") 386 | hold(59.76, "w", -1, 2, false, "") 387 | hold(59.88, "w", -1, 2, false, "") 388 | hold(60, "w", 0, 2, false, "") 389 | hold(60.12, "w", 0, 2, false, "") 390 | hold(60.24, "w", 0, 2, false, "") 391 | hold(60.37, "w", 0, 2, false, "") 392 | drag(58.78, "w", -1, 0, false, "") 393 | drag(59.02, "w", 0, -1, false, "") 394 | drag(59.27, "w", -1, -1, false, "") 395 | drag(59.39, "w", 0, -1, false, "") 396 | drag(59.51, "w", 1, -1, false, "") 397 | drag(60, "w", 0, -1, false, "") 398 | tap(60.73, "w", 1, -1, false, "") 399 | tap(60.98, "w", 1, -1, false, "") 400 | hold(60.98, "w", 1, -1, false, "") 401 | hold(61.1, "w", 1, -1, false, "") 402 | tap(61.46, "w", -2, -1, false, "") 403 | tap(61.71, "w", -1, -1, false, "") 404 | hold(61.71, "w", -1, -1, false, "") 405 | hold(61.83, "w", -1, -1, false, "") 406 | tap(62.2, "w", 0, -1, true, "") 407 | tap(62.44, "w", 2, 0, true, "") 408 | tap(62.68, "w", -1, 1, true, "") 409 | tap(62.93, "w", 1, 2, true, "") 410 | tap(63.41, "w", 2, -1, false, "") 411 | hold(63.41, "w", 2, -1, false, "") 412 | hold(63.54, "w", 2, -1, false, "") 413 | hold(63.66, "w", 2, -1, false, "") 414 | drag(63.78, "w", -1, 0, false, "") 415 | hold(63.78, "w", -1, 0, false, "") 416 | hold(63.9, "w", -1, 0, false, "") 417 | hold(64.02, "w", -1, 0, false, "") 418 | drag(64.15, "w", 1, 0, false, "") 419 | hold(64.15, "w", 1, 0, false, "") 420 | hold(64.27, "w", 1, 0, false, "") 421 | drag(64.39, "w", 0, -1, false, "") 422 | hold(64.39, "w", 0, -1, false, "") 423 | hold(64.51, "w", 0, -1, false, "") 424 | hold(64.63, "w", 0, -1, false, "") 425 | hold(64.76, "w", 0, -1, false, "") 426 | hold(64.88, "w", 0, -1, false, "") 427 | hold(65, "w", 0, -1, false, "") 428 | hold(65.12, "w", 0, -1, false, "") 429 | hold(65.24, "w", 0, -1, false, "") 430 | hold(65.37, "w", 0, -1, false, "") 431 | hold(65.49, "w", 0, -1, false, "") 432 | hold(65.61, "w", 0, -1, false, "") 433 | hold(65.73, "w", 0, -1, false, "") 434 | drag(64.88, "w", -1, -1, false, "") 435 | drag(65.37, "w", 1, -1, false, "") 436 | drag(65.85, "w", -1, 0, false, "") 437 | tap(66.1, "w", -1, 2, false, "") 438 | hold(66.1, "w", -1, 2, false, "") 439 | drag(66.22, "w", -0.5, 2, false, "") 440 | drag(66.28, "w", 0, 2, false, "") 441 | drag(66.34, "w", 0.5, 2, false, "") 442 | hold(66.34, "w", 1, 2, false, "") 443 | hold(66.46, "w", 1.5, 2, false, "") 444 | hold(66.59, "w", 2, 2, false, "") 445 | hold(66.71, "w", 2, 2, false, "") 446 | hold(66.83, "w", 2, 2, false, "") 447 | hold(66.95, "w", 2, 2, false, "") 448 | hold(67.07, "w", 2, 2, false, "") 449 | hold(67.2, "w", 2, 2, false, "") 450 | drag(66.83, "w", 1, 1, false, "") 451 | drag(67.32, "w", -1, -1, false, "") 452 | double(67.8, "w", 0, -2, 0, 2, false, "") 453 | tap(68.29, "w", 2, -1, false, "") 454 | hold(68.29, "w", 2, -1, false, "") 455 | hold(68.41, "w", 2, -1, false, "") 456 | hold(68.54, "w", 2, -1, false, "") 457 | tap(68.78, "w", 2, 1, false, "") 458 | hold(68.78, "w", 2, 1, false, "") 459 | hold(68.9, "w", 2, 1, false, "") 460 | hold(69.02, "w", 2, 1, false, "") 461 | tap(69.27, "w", 2, 0, false, "") 462 | hold(69.27, "w", 2, 0, false, "") 463 | hold(69.39, "w", 2, 0, false, "") 464 | hold(69.51, "w", 2, 0, false, "") 465 | tap(69.76, "w", 0, -1, true, "") 466 | tap(70.24, "w", -2, 1, false, "") 467 | hold(70.24, "w", -2, 1, false, "") 468 | hold(70.37, "w", -2, 1, false, "") 469 | hold(70.49, "w", -2, 1, false, "") 470 | tap(70.73, "w", -2, -1, false, "") 471 | hold(70.73, "w", -2, -1, false, "") 472 | hold(70.85, "w", -2, -1, false, "") 473 | hold(70.98, "w", -2, -1, false, "") 474 | tap(71.22, "w", -2, 0, false, "") 475 | hold(71.22, "w", -2, 0, false, "") 476 | hold(71.34, "w", -2, 0, false, "") 477 | hold(71.46, "w", -2, 0, false, "") 478 | double(72.2, "w", -2, 1, -2, -1, false, "") 479 | tap(71.95, "w", -2, 1, false, "") 480 | double(72.44, "w", -1, 1, -1, -1, false, "") 481 | tap(72.93, "w", 2, 1, false, "") 482 | double(73.17, "w", 2, 1, 2, -1, false, "") 483 | double(73.41, "w", 1, -1, 1, 1, false, "") 484 | double(73.9, "w", -2, 1, 2, -1, false, "") 485 | hold(73.9, "w", -2, 1, false, "") 486 | hold(74.02, "w", -2, 1, false, "") 487 | hold(74.15, "w", -2, 1, false, "") 488 | hold(74.27, "w", -2, 1, false, "") 489 | hold(74.39, "w", -2, 0, false, "") 490 | hold(74.51, "w", -2, 0, false, "") 491 | hold(74.63, "w", -2, 1, false, "") 492 | hold(74.76, "w", -2, 1, false, "") 493 | hold(74.88, "w", -2, 0, false, "") 494 | hold(75, "w", -2, -1, false, "") 495 | hold(75.12, "w", -2, -2, false, "") 496 | hold(75.24, "w", -2, -2, false, "") 497 | hold(75.37, "w", -2, -2, false, "") 498 | hold(75.49, "w", -2, -2, false, "") 499 | hold(75.61, "w", -2, -1, false, "") 500 | hold(75.73, "w", -2, -1, false, "") 501 | hold(75.85, "w", -2, -1, false, "") 502 | hold(75.98, "w", -2, -1, false, "") 503 | drag(74.63, "w", 0, 1, false, "") 504 | drag(75.12, "w", 1, 0, false, "") 505 | drag(75.61, "w", 0, -1, false, "") 506 | drag(76.1, "w", -1, 0, false, "") 507 | tap(76.59, "w", 1, 1, false, "") 508 | hold(76.59, "w", 1, 1, false, "") 509 | hold(76.71, "w", 1, 1, false, "") 510 | hold(76.83, "w", 1, 1, false, "") 511 | hold(76.95, "w", 1, 1, false, "") 512 | hold(77.07, "w", 1, 1, false, "") 513 | hold(77.2, "w", 1, 1, false, "") 514 | hold(77.32, "w", 1, 1, false, "") 515 | hold(77.44, "w", 1, 1, false, "") 516 | drag(77.07, "w", 0, 1, false, "") 517 | drag(77.56, "w", -1, 1, false, "") 518 | double(78.05, "w", 1, -1, -1, 1, false, "") 519 | hold(78.05, "w", -1, 1, false, "") 520 | hold(78.17, "w", -1, 1, false, "") 521 | hold(78.29, "w", -1, 1, false, "") 522 | hold(78.41, "w", -1, 1, false, "") 523 | drag(78.54, "w", -1, 0, false, "") 524 | tap(79.02, "w", 2, -1, false, "") 525 | hold(79.02, "w", 2, -1, false, "") 526 | tap(79.39, "w", 1, -2, false, "") 527 | hold(79.39, "w", 1, -2, false, "") 528 | tap(79.76, "w", -1, -2, false, "") 529 | hold(79.76, "w", -1, -2, false, "") 530 | tap(80, "w", -2, -1, false, "") 531 | hold(80, "w", -2, -1, false, "") 532 | hold(80.12, "w", -2, -1, false, "") 533 | hold(80.24, "w", -2, -1, false, "") 534 | hold(80.37, "w", -2, -1, false, "") 535 | hold(80.49, "w", -2, -1, false, "") 536 | hold(80.61, "w", -2, -1, false, "") 537 | hold(80.73, "w", -1, -1, false, "") 538 | hold(80.85, "w", 0, -1, false, "") 539 | hold(80.98, "w", 1, -1, false, "") 540 | hold(81.1, "w", 1, -1, false, "") 541 | hold(81.22, "w", 1, -1, false, "") 542 | hold(81.34, "w", 1, -1, false, "") 543 | drag(80.49, "w", -2, 0, false, "") 544 | drag(80.98, "w", 0, 1, false, "") 545 | drag(81.46, "w", 2, 0, false, "") 546 | double(81.95, "w", 1, -1, -1, 1, false, "") 547 | hold(81.95, "w", 1, -1, false, "") 548 | hold(82.07, "w", 1, -1, false, "") 549 | hold(82.2, "w", 1, -1, false, "") 550 | hold(82.32, "w", 1, -1, false, "") 551 | hold(81.95, "w", -1, 1, false, "") 552 | hold(82.07, "w", -1, 1, false, "") 553 | hold(82.2, "w", -1, 1, false, "") 554 | hold(82.32, "w", -1, 1, false, "") 555 | double(82.93, "w", 1, 1, -1, -1, false, "") 556 | hold(82.93, "w", 1, 1, false, "") 557 | hold(83.05, "w", 1, 1, false, "") 558 | hold(83.17, "w", 1, 1, false, "") 559 | hold(83.29, "w", 1, 1, false, "") 560 | hold(82.93, "w", -1, -1, false, "") 561 | hold(83.05, "w", -1, -1, false, "") 562 | hold(83.17, "w", -1, -1, false, "") 563 | hold(83.29, "w", -1, -1, false, "") 564 | tap(83.9, "w", 0, 2, false, "") 565 | hold(83.9, "w", 0, 2, false, "") 566 | hold(84.02, "w", 0, 2, false, "") 567 | hold(84.15, "w", 0, 2, false, "") 568 | hold(84.27, "w", 0, 2, false, "") 569 | hold(84.39, "w", 0, 2, false, "") 570 | hold(84.51, "w", 0, 2, false, "") 571 | hold(84.63, "w", 0, 2, false, "") 572 | hold(84.76, "w", 0, 2, false, "") 573 | hold(84.88, "w", 0, 2, false, "") 574 | hold(85, "w", 0, 2, false, "") 575 | hold(85.12, "w", 0, 2, false, "") 576 | hold(85.24, "w", 0, 2, false, "") 577 | hold(85.37, "w", 0, 2, false, "") 578 | hold(85.49, "w", 0, 2, false, "") 579 | hold(85.61, "w", 0, 2, false, "") 580 | hold(85.73, "w", 0, 2, false, "") 581 | hold(85.85, "w", 0, 2, false, "") 582 | hold(85.98, "w", 0, 2, false, "") 583 | hold(86.1, "w", 0, 2, false, "") 584 | hold(86.22, "w", 0, 2, false, "") 585 | hold(86.34, "w", 0, 2, false, "") 586 | hold(86.46, "w", 0, 2, false, "") 587 | hold(86.59, "w", 0, 2, false, "") 588 | hold(86.71, "w", 0, 2, false, "") 589 | hold(86.83, "w", 0, 2, false, "") 590 | hold(86.95, "w", 0, 2, false, "") 591 | hold(87.07, "w", 0, 2, false, "") 592 | hold(87.2, "w", 0, 2, false, "") 593 | hold(87.32, "w", 0, 2, false, "") 594 | hold(87.44, "w", 0, 2, false, "") 595 | hold(87.56, "w", 0, 2, false, "") 596 | hold(87.68, "w", 0, 2, false, "") 597 | flick(84.39, "w", "right", false, "") 598 | hold(84.88, "d", 0, 0, false, "") 599 | hold(85, "d", 0, 0, false, "") 600 | hold(85.12, "d", 0, 0, false, "") 601 | hold(85.24, "d", 0, 0, false, "") 602 | hold(85.37, "d", 0, 0, false, "") 603 | hold(85.49, "d", 0, 0, false, "") 604 | hold(85.61, "d", 0, 0, false, "") 605 | hold(85.73, "d", 0, 0, false, "") 606 | hold(85.85, "d", 0, 0, false, "") 607 | hold(85.98, "d", 0, 0, false, "") 608 | hold(86.1, "d", 0, 0, false, "") 609 | hold(86.22, "d", 0, 0, false, "") 610 | hold(86.34, "d", 0, 0, false, "") 611 | hold(86.46, "d", 0, 0, false, "") 612 | hold(86.59, "d", 0, 0, false, "") 613 | hold(86.71, "d", 0, 0, false, "") 614 | hold(86.83, "d", 0, 0, false, "") 615 | hold(86.95, "d", 0, 0, false, "") 616 | hold(87.07, "d", 0, 0, false, "") 617 | hold(87.2, "d", 0, 0, false, "") 618 | hold(87.32, "d", 0, 0, false, "") 619 | hold(87.44, "d", 0, 0, false, "") 620 | hold(87.56, "d", 0, 0, false, "") 621 | hold(87.68, "d", 0, 0, false, "") 622 | flick(85.37, "d", "right", false, "") 623 | hold(85.85, "s", 0, 0, false, "") 624 | hold(85.98, "s", 0, 0, false, "") 625 | hold(86.1, "s", 0, 0, false, "") 626 | hold(86.22, "s", 0, 0, false, "") 627 | hold(86.34, "s", 0, 0, false, "") 628 | hold(86.46, "s", 0, 0, false, "") 629 | hold(86.59, "s", 0, 0, false, "") 630 | hold(86.71, "s", 0, 0, false, "") 631 | hold(86.83, "s", 0, 0, false, "") 632 | hold(86.95, "s", 0, 0, false, "") 633 | hold(87.07, "s", 0, 0, false, "") 634 | hold(87.2, "s", 0, 0, false, "") 635 | hold(87.32, "s", 0, 0, false, "") 636 | hold(87.44, "s", 0, 0, false, "") 637 | hold(87.56, "s", 0, 0, false, "") 638 | hold(87.68, "s", 0, 0, false, "") 639 | flick(86.34, "s", "right", false, "") 640 | hold(86.83, "a", 0, 0, false, "") 641 | hold(86.95, "a", 0, 0, false, "") 642 | hold(87.07, "a", 0, 0, false, "") 643 | hold(87.2, "a", 0, 0, false, "") 644 | hold(87.32, "a", 0, 0, false, "") 645 | hold(87.44, "a", 0, 0, false, "") 646 | hold(87.56, "a", 0, 0, false, "") 647 | hold(87.68, "a", 0, 0, false, "") 648 | flick(87.32, "a", "right", false, "") 649 | tap(88.29, "w", 1, -1, false, "") 650 | tap(88.78, "w", -2, 1, false, "") 651 | tap(89.02, "w", -1, 1, false, "") 652 | tap(89.27, "w", 0, 1, false, "") 653 | tap(89.76, "w", 1, -1, false, "") 654 | double(90.24, "w", -1, -1, -1, 1, false, "") 655 | tap(90.73, "w", 2, -1, false, "") 656 | tap(90.98, "w", 1, -1, false, "") 657 | tap(91.22, "w", 0, -1, false, "") 658 | tap(91.46, "w", -1, -1, false, "") 659 | tap(91.71, "w", 0, -1, false, "") 660 | double(92.2, "w", 1, 1, -1, -1, false, "") 661 | tap(92.68, "w", 1, -1, false, "") 662 | drag(92.8, "w", 0, -1, false, "") 663 | double(93.17, "w", 2, 0, -2, 0, false, "") 664 | double(93.66, "w", 0, 1, -2, -1, false, "") 665 | hold(93.66, "w", -2, -1, false, "") 666 | hold(93.78, "w", -2, -1, false, "") 667 | hold(93.9, "w", -2, -1, false, "") 668 | hold(94.02, "w", -2, -1, false, "") 669 | drag(94.15, "w", -2, 0, false, "") 670 | double(94.63, "w", 2, -1, 0, 1, false, "") 671 | hold(94.63, "w", 2, -1, false, "") 672 | hold(94.76, "w", 2, -1, false, "") 673 | hold(94.88, "w", 2, -1, false, "") 674 | hold(95, "w", 2, -1, false, "") 675 | drag(95.12, "w", 2, 0, false, "") 676 | double(95.61, "w", 0, -1, -2, 1, false, "") 677 | hold(95.61, "w", 0, -1, false, "") 678 | hold(95.73, "w", 0, -1, false, "") 679 | hold(95.85, "w", 0, -1, false, "") 680 | hold(95.98, "w", 0, -1, false, "") 681 | drag(96.1, "w", -1, 1, false, "") 682 | tap(96.59, "w", 1, -1, false, "") 683 | tap(96.83, "w", -1, 0, false, "") 684 | tap(97.07, "w", 1, 1, false, "") 685 | tap(97.32, "w", 0, 1, false, "") 686 | hold(97.32, "w", 0, 1, false, "") 687 | hold(97.44, "w", 0, 1, false, "") 688 | hold(97.56, "w", 0, 1, false, "") 689 | -------------------------------------------------------------------------------- /charts/falling_asteroid_properties.sk: -------------------------------------------------------------------------------- 1 | options: 2 | 谱面: falling_asteroid 3 | 曲名: Falling Asteroid 4 | 曲师: postt 5 | 谱师: PiraTom 6 | 难度: &aBasic 4 7 | 时长: 131 8 | 偏移: 0 9 | BPM: 170 10 | 11 | on load: 12 | registerChart("{@谱面}", "{@曲名}", "{@难度}", "{@曲师}", "{@谱师}", {@时长}, {@偏移}) 13 | setBPM("{@谱面}", {@BPM}) -------------------------------------------------------------------------------- /charts/simpletone_properties.sk: -------------------------------------------------------------------------------- 1 | options: 2 | 谱面: simpletone 3 | 曲名: simpletone 4 | 曲师: CRE 5 | 谱师: PiraTom 6 | 难度: &bTutorial 1 7 | 时长: 51 8 | 偏移: 0 9 | BPM: 130 10 | 11 | on load: 12 | registerChart("{@谱面}", "{@曲名}", "{@难度}", "{@曲师}", "{@谱师}", {@时长}, {@偏移}) 13 | setBPM("{@谱面}", {@BPM}) -------------------------------------------------------------------------------- /charts/styx_helix_properties.sk: -------------------------------------------------------------------------------- 1 | options: 2 | 谱面: styx_helix 3 | 曲名: STYX HELIX 4 | 曲师: MYTH & ROID 5 | 谱师: PiraTom 6 | 难度: &aBasic 5 7 | 时长: 101 8 | 偏移: 22 9 | BPM: 123 10 | 11 | on load: 12 | registerChart("{@谱面}", "{@曲名}", "{@难度}", "{@曲师}", "{@谱师}", {@时长}, {@偏移}) 13 | setBPM("{@谱面}", {@BPM}) -------------------------------------------------------------------------------- /charts/world_function_properties.sk: -------------------------------------------------------------------------------- 1 | options: 2 | 谱面: world_function 3 | 曲名: 世界函数~World Function~ 4 | 曲师: Taikes 5 | 谱师: PiraTom 6 | 难度: &aBasic 6 7 | 时长: 104 8 | 偏移: 2741 9 | BPM: 177 10 | 11 | on load: 12 | registerChart("{@谱面}", "{@曲名}", "{@难度}", "{@曲师}", "{@谱师}", {@时长}, {@偏移}) 13 | setBPM("{@谱面}", {@BPM}) -------------------------------------------------------------------------------- /editor.sk: -------------------------------------------------------------------------------- 1 | on load: 2 | set {editor::bpm} to 120 if {editor::bpm} is not set 3 | set {editor::tick} to 0 if {editor::tick} is not set 4 | set {editor::length} to 1 if {editor::length} is not set 5 | set {editor::preTime} to 0 if {editor::preTime} is not set 6 | 7 | on player drop: 8 | cancel event 9 | 10 | on swap hand items: 11 | cancel event 12 | if {editMode} is true: 13 | if {editor::glowing} is false: 14 | set {editor::glowing} to true 15 | play sound "ui.button.click" with pitch 2 to player 16 | send title "" with subtitle "&7发光: &a开" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 17 | else: 18 | set {editor::glowing} to false 19 | play sound "ui.button.click" with pitch 2 to player 20 | send title "" with subtitle "&7发光: &c关" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 21 | 22 | command /editor [] []: 23 | trigger: 24 | set {_arg2} to arg-2 parsed as number if arg-2 parsed as number is set 25 | player's gamemode is not spectator 26 | if arg-1 is not set: 27 | if {editMode} is not set: 28 | delete {editorSave::*} 29 | set {editMode} to true 30 | set {editor::noteType} to "tap" 31 | set {editor::face} to "w" 32 | set {editor::glowing} to false 33 | message "&8&m一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一" 34 | message "" 35 | message "&6/editor &e[&7...&e] &7:" 36 | message " &7help &7查看命令帮助" 37 | message " &7bpm &b<&7number&b> &7每分钟拍数" 38 | message " &7execution &b<&7section&b> &7放置Execution音符,&f不加{}" 39 | message " &7tag &b<&7text&b> &7修改准星指向的音符的标签" 40 | message " &7pretime &b<&7number&b> &7将第1拍的时间增加x秒" 41 | message "" 42 | message "&6/step &b<&7integer&b> &7/step 4 表示步长为1/4拍" 43 | message "&6/b &b<&7number&b> &7传送到某一拍" 44 | message "&a/gen &7清空已放置的音符并生成谱面代码" 45 | message "&c/editor &7退出编辑模式" 46 | message "" 47 | message "&8&m一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一" 48 | message "" 49 | message "&6按键操作:" 50 | message " &3[鼠标滚轮↑] &7步进一格" 51 | message " &3[鼠标滚轮↓] &7后退一格" 52 | message " &7[1] &7更改音符类型(默认为&bTap&f)" 53 | message " &7[9] &7更改判定面(默认为前)" 54 | message " &7[F] &7设置音符发光(默认为关)" 55 | message "" 56 | message "&8&m一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一" 57 | message "" 58 | message "&a进入编辑模式" 59 | message "&7编辑模式里,输入&f /play &7播放谱面可使之加载到编辑器上,以便修改" 60 | message "" 61 | 62 | 63 | clear player's inventory 64 | set slot 0 of player to a light blue wool named "&b" 65 | set slot 4 of player to a stick named "&d&l魔杖&e (右键放置,左键删除,Shift对齐网格)" 66 | set slot 8 of player to a white stained glass named "&b" 67 | set hotbar slot of player to 4 68 | set blocks within location(3, 3, 4, world "world", 0, 0) and location(-3, -3, 4, world "world", 0, 0) to glass 69 | else: 70 | delete {editMode} 71 | message "&c离开编辑模式" 72 | clear player's inventory 73 | delete {editorSave::*} 74 | delete {editor::noteType} 75 | set blocks within location(3, 3, 4, world "world", 0, 0) and location(-3, -3, 4, world "world", 0, 0) to air 76 | loop all block displays: 77 | delete loop-entity 78 | 79 | else if arg-1 is "bpm": 80 | {_arg2} is set 81 | set {editor::bpm} to {_arg2} 82 | send title "&a✔" with subtitle "&a &a" to player for 0.5 seconds with fade in 0.5 seconds and fade out 0.5 seconds 83 | else if arg-1 is "pretime": 84 | {_arg2} is set 85 | set {editor::preTime} to {_arg2} 86 | send title "&a✔" with subtitle "&a &a" to player for 0.5 seconds with fade in 0.5 seconds and fade out 0.5 seconds 87 | else if arg-1 is "help": 88 | message "&8&m一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一" 89 | message "" 90 | message "&6/editor &e[&7...&e] &7:" 91 | message " &7help &7查看命令帮助" 92 | message " &7bpm &b<&7number&b> &7每分钟拍数" 93 | message " &7execution &b<&7section&b> &7放置Execution音符,&f不加{}" 94 | message " &7tag &b<&7text&b> &7修改准星指向的音符的标签" 95 | message " &7pretime &b<&7number&b> &7将第1拍的时间增加x秒" 96 | message "" 97 | message "&6/step &b<&7integer&b> &7/step 4 表示步长为1/4拍" 98 | message "&6/b &b<&7number&b> &7传送到某一拍" 99 | message "&a/gen &7清空已放置的音符并生成谱面代码" 100 | message "&c/editor &7退出编辑模式" 101 | message "" 102 | message "&8&m一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一" 103 | message "" 104 | message "&6按键操作:" 105 | message " &3[鼠标滚轮↑] &7步进一格" 106 | message " &3[鼠标滚轮↓] &7后退一格" 107 | message " &7[1] &7更改音符类型(默认为&bTap&f)" 108 | message " &7[9] &7更改判定面(默认为前)" 109 | message " &7[F] &7设置音符发光(默认为关)" 110 | message "" 111 | message "&8&m一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一" 112 | message "" 113 | message "&7编辑模式里,输入&f /play &7播放谱面可使之加载到编辑器上,以便修改" 114 | message "" 115 | else if arg-1 is "regive": 116 | {editMode} is true 117 | clear player's inventory 118 | set slot 0 of player to a light blue wool named "&b" 119 | set slot 4 of player to a stick named "&d&l魔杖&e (右键放置,左键删除,Shift对齐网格)" 120 | set slot 8 of player to a white stained glass named "&b" 121 | else if arg-1 is "execution": 122 | {editMode} is true 123 | arg-2 is set 124 | send title "" with subtitle "{%arg-2%}" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 125 | set {_id} to random uuid 126 | set {_loc} to location(0.5, 0.5, 4, world "world", 0, 0) 127 | set {_arg22} to arg-2 128 | summon block display at {_loc}: 129 | set display block data of entity to black stained glass 130 | set display scale of entity to vector(1,1,1) 131 | set glowing of entity to true 132 | set display translation of entity to vector(-0.5,-0.5,0.1) 133 | set display glow color override of entity to bukkitColor(255,0,255,0) 134 | set display name of entity to "Section: {%{_arg22}%}" 135 | set metadata value "id" of entity to {_id} 136 | set {editorSave::type::%{_id}%} to "execution" 137 | set {editorSave::time::%{_id}%} to {editor::tick}/{editor::length}*(60/{editor::bpm})+{editor::preTime} 138 | set {editorSave::loc::%{_id}%} to {_loc} 139 | set {editorSave::section::%{_id}%} to {_arg22} 140 | else if arg-1 is "tag": 141 | {editMode} is true 142 | loop all block displays: 143 | metadata value "isPreview" of loop-entity is true 144 | set {_cursor} to loop-entity 145 | {_cursor} is set 146 | if distance between (nearest block display relative to {_cursor}) and {_cursor} <= 1: 147 | set {_id} to metadata value "id" of nearest block display relative to {_cursor} 148 | send title "" with subtitle "新增Tag: &a%arg-2%" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds if arg-2 is set 149 | send title "" with subtitle "删除Tag: &c%{editorSave::tag::%{_id}%}%" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds if arg-2 is not set 150 | set {editorSave::tag::%{_id}%} to arg-2 if arg-2 is set 151 | set {editorSave::tag::%{_id}%} to "" if arg-2 is not set 152 | if {editorSave::glowing::%{_id}%} is true: 153 | set display name of nearest block display relative to {_cursor} to "&aTag: %{editorSave::tag::%{_id}%}%" if {editorSave::tag::%{_id}%} is not "" 154 | set display name of nearest block display relative to {_cursor} to "&a+++" if {editorSave::tag::%{_id}%} is "" 155 | else: 156 | set display name of nearest block display relative to {_cursor} to "&fTag: %{editorSave::tag::%{_id}%}%" if {editorSave::tag::%{_id}%} is not "" 157 | reset display name of nearest block display relative to {_cursor} if {editorSave::tag::%{_id}%} is "" 158 | 159 | 160 | command /b : 161 | trigger: 162 | player's gamemode is not spectator 163 | if {editMode} is set: 164 | argument is set 165 | set {editor::tick} to ((argument) - 1) * {editor::length} 166 | send title "&a✔" with subtitle "&a &a" to player for 0.5 seconds with fade in 0.5 seconds and fade out 0.5 seconds 167 | 168 | command /step : 169 | trigger: 170 | player's gamemode is not spectator 171 | if {editMode} is set: 172 | argument is set 173 | set {_past} to {editor::length} 174 | set {editor::length} to argument 175 | set {editor::tick} to {editor::tick} * {editor::length} / {_past} 176 | send title "&a✔" with subtitle "&a &a" to player for 0.5 seconds with fade in 0.5 seconds and fade out 0.5 seconds 177 | 178 | every 2 ticks: 179 | if {editMode} is set: 180 | send action bar "&6BPM: &f%{editor::bpm}% &b第 &f%floor({editor::tick}/{editor::length}) + 1%&7小节 &f%mod({editor::tick}, {editor::length})%&7/%{editor::length}%拍 &f(%{editor::tick}/{editor::length}*(60/{editor::bpm})+{editor::preTime}%s) &f共计 %size of {editorSave::type::*}% Notes" to all players 181 | 182 | function addTick(p: player, t: number): 183 | add {_t} to {editor::tick} 184 | set {_current} to {editor::tick}/{editor::length}*(60/{editor::bpm})+{editor::preTime} 185 | loop all block displays: 186 | metadata value "id" of loop-entity is set 187 | delete loop-entity 188 | loop {editorSave::time::*}: 189 | set {_id} to loop-index 190 | set {_time} to loop-value 191 | set {_z} to ({_time} - {_current}) * 20 * {speed::%uuid of {_p}%} 192 | {_z} >= -1 193 | {_z} <= 50 194 | set {_loc} to {editorSave::loc::%loop-index%} 195 | {_loc}.add(0, 0, {_z}) 196 | summon block display at {_loc}: 197 | set display block data of entity to light_blue_concrete if {editorSave::type::%{_id}%} is "tap" 198 | set display block data of entity to orange_concrete if {editorSave::type::%{_id}%} is "double" 199 | set display block data of entity to yellow_concrete if {editorSave::type::%{_id}%} is "drag" 200 | set display block data of entity to white_concrete if {editorSave::type::%{_id}%} is "hold" 201 | set display block data of entity to magenta_concrete if {editorSave::type::%{_id}%} is "flickL" 202 | set display block data of entity to red_concrete if {editorSave::type::%{_id}%} is "flickR" 203 | set display block data of entity to black stained glass if {editorSave::type::%{_id}%} is "execution" 204 | set display scale of entity to vector(1,1,1) 205 | set display scale of entity to vector(1,1,3*{speed::%uuid of {_p}%}) if {editorSave::type::%{_id}%} is "hold" 206 | set glowing of entity to true 207 | set display translation of entity to vector(-0.5,-0.5,0.1) 208 | set display translation of entity to vector(-0.5,-0.5,0.2) if {editorSave::type::%{_id}%} is "hold" 209 | set display glow color override of entity to bukkitColor(255,255,255,255) if {editorSave::face::%{_id}%} is "w" 210 | set display glow color override of entity to bukkitColor(255,255,235,42) if {editorSave::face::%{_id}%} is "a" 211 | set display glow color override of entity to bukkitColor(255,255,150,0) if {editorSave::face::%{_id}%} is "s" 212 | set display glow color override of entity to bukkitColor(255,255,0,0) if {editorSave::face::%{_id}%} is "d" 213 | set display glow color override of entity to bukkitColor(255,0,255,0) if {editorSave::type::%{_id}%} is "execution" 214 | if {editorSave::type::%{_id}%} is "execution": 215 | set display name of entity to "Section: {%{editorSave::section::%{_id}%}%}" 216 | else if {editorSave::glowing::%{_id}%} is true: 217 | set display name of entity to "&aTag: %{editorSave::tag::%{_id}%}%" if {editorSave::tag::%{_id}%} is not "" 218 | set display name of entity to "&a+++" if {editorSave::tag::%{_id}%} is "" 219 | else: 220 | set display name of entity to "&fTag: %{editorSave::tag::%{_id}%}%" if {editorSave::tag::%{_id}%} is not "" 221 | reset display name of entity if {editorSave::tag::%{_id}%} is "" 222 | set metadata value "id" of entity to {_id} 223 | 224 | on tool change: 225 | {editMode} is set 226 | cancel event 227 | player's gamemode is not spectator 228 | if event-slot is 1 or 2 or 3: 229 | addTick(player, 1) 230 | send title "" with subtitle "&a>>> &7&o#%floor({editor::tick}/{editor::length}) + 1% &f%mod({editor::tick}, {editor::length})%&7/%{editor::length}% &a>>>" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 231 | play sound "block.note_block.hat" with pitch 2 to player 232 | else if event-slot is 5 or 6 or 7: 233 | addTick(player, -1) 234 | send title "" with subtitle "&a<<< &7&o#%floor({editor::tick}/{editor::length}) + 1% &f%mod({editor::tick}, {editor::length})%&7/%{editor::length}% &a<<<" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 235 | play sound "block.note_block.hat" with pitch 1.5 to player 236 | else if event-slot is 0: 237 | play sound "ui.button.click" with pitch 2 to player 238 | if slot 0 of player is light blue wool named "&b": 239 | set {editor::noteType} to "double" 240 | set player's tool to orange wool named "&b" 241 | send title "" with subtitle "&6Double" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 242 | else if slot 0 of player is orange wool named "&b": 243 | set {editor::noteType} to "drag" 244 | set player's tool to yellow wool named "&b" 245 | send title "" with subtitle "&eDrag" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 246 | else if slot 0 of player is yellow wool named "&b": 247 | set {editor::noteType} to "hold" 248 | set player's tool to white wool named "&b" 249 | send title "" with subtitle "&fHold" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 250 | else if slot 0 of player is white wool named "&b": 251 | set {editor::noteType} to "flickL" 252 | set player's tool to magenta wool named "&b" 253 | send title "" with subtitle "&a← &dFlick" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 254 | else if slot 0 of player is magenta wool named "&b": 255 | set {editor::noteType} to "flickR" 256 | set player's tool to red wool named "&b" 257 | send title "" with subtitle "&cFlick &a→" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 258 | else if slot 0 of player is red wool named "&b": 259 | set {editor::noteType} to "tap" 260 | set player's tool to light blue wool named "&b" 261 | send title "" with subtitle "&bTap" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 262 | else if event-slot is 8: 263 | play sound "ui.button.click" with pitch 2 to player 264 | if slot 8 of player is white stained glass named "&b": 265 | set {editor::face} to "a" 266 | set player's tool to yellow stained glass named "&b" 267 | send title "" with subtitle "&7判定面: &e左" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 268 | else if slot 8 of player is yellow stained glass named "&b": 269 | set {editor::face} to "s" 270 | set player's tool to orange stained glass named "&b" 271 | send title "" with subtitle "&7判定面: &6后" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 272 | else if slot 8 of player is orange stained glass named "&b": 273 | set {editor::face} to "d" 274 | set player's tool to red stained glass named "&b" 275 | send title "" with subtitle "&7判定面: &c右" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 276 | else if slot 8 of player is red stained glass named "&b": 277 | set {editor::face} to "w" 278 | set player's tool to white stained glass named "&b" 279 | send title "" with subtitle "&7判定面: &f前" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 280 | 281 | on right click: 282 | {editMode} is set 283 | cancel event 284 | player's gamemode is not spectator 285 | if player's tool is stick named "&d&l魔杖&e (右键放置,左键删除,Shift对齐网格)": 286 | set {_z} to 4 287 | set {_pz} to z location of player 288 | set {_v} to vector in direction of player 289 | set {_vx} to x of {_v} 290 | set {_vy} to y of {_v} 291 | set {_vz} to z of {_v} 292 | set {_rate} to abs({_z} - {_pz}) / {_vz} 293 | set {_vx} to {_vx} * {_rate} + x location of player 294 | if player is sneaking: 295 | set {_vy} to {_vy} * {_rate} + y location of player + 1.4 296 | else: 297 | set {_vy} to {_vy} * {_rate} + y location of player + 1.6 298 | set {_vz} to {_vz} * {_rate} 299 | {_vx} <= 4 300 | {_vy} <= 4 301 | {_vx} >= -3 302 | {_vy} >= -3 303 | if player is sneaking: 304 | set {_vx} to round({_vx}*2)/2 305 | set {_vy} to round({_vy}*2)/2 306 | set {_loc} to location({_vx}, {_vy}, {_z}, world "world", 0, 0) 307 | else: 308 | set {_loc} to location({_vx}, {_vy}, {_z}, world "world", 0, 0) 309 | send title "" with subtitle "%{_vx} - 0.5% , %{_vy} - 0.5%" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 310 | set {_id} to random uuid 311 | set {_length} to 3*{speed::%uuid of player%} 312 | summon block display at {_loc}: 313 | set display block data of entity to light_blue_concrete if {editor::noteType} is "tap" 314 | set display block data of entity to orange_concrete if {editor::noteType} is "double" 315 | set display block data of entity to yellow_concrete if {editor::noteType} is "drag" 316 | set display block data of entity to white_concrete if {editor::noteType} is "hold" 317 | set display block data of entity to magenta_concrete if {editor::noteType} is "flickL" 318 | set display block data of entity to red_concrete if {editor::noteType} is "flickR" 319 | set display scale of entity to vector(1,1,1) 320 | set glowing of entity to true 321 | set display translation of entity to vector(-0.5,-0.5,0.1) 322 | set display glow color override of entity to bukkitColor(255,255,255,255) if {editor::face} is "w" 323 | set display glow color override of entity to bukkitColor(255,255,235,42) if {editor::face} is "a" 324 | set display glow color override of entity to bukkitColor(255,255,150,0) if {editor::face} is "s" 325 | set display glow color override of entity to bukkitColor(255,255,0,0) if {editor::face} is "d" 326 | set display scale of entity to vector(1,1,{_length}) if {editor::noteType} is "hold" 327 | set display translation of entity to vector(-0.5,-0.5,0.2) if {editor::noteType} is "hold" 328 | set display name of entity to "&a+++" if {editor::glowing} is true 329 | set metadata value "id" of entity to {_id} 330 | set {editorSave::type::%{_id}%} to {editor::noteType} 331 | set {editorSave::time::%{_id}%} to {editor::tick}/{editor::length}*(60/{editor::bpm})+{editor::preTime} 332 | set {editorSave::loc::%{_id}%} to {_loc} 333 | set {editorSave::face::%{_id}%} to {editor::face} 334 | set {editorSave::turn::%{_id}%} to "left" if {editor::noteType} is "flickL" 335 | set {editorSave::turn::%{_id}%} to "right" if {editor::noteType} is "flickR" 336 | set {editorSave::glowing::%{_id}%} to {editor::glowing} 337 | set {editorSave::tag::%{_id}%} to "" 338 | 339 | on left click: 340 | {editMode} is set 341 | cancel event 342 | player's gamemode is not spectator 343 | if player's tool is stick named "&d&l魔杖&e (右键放置,左键删除,Shift对齐网格)": 344 | loop all block displays: 345 | metadata value "isPreview" of loop-entity is true 346 | set {_cursor} to loop-entity 347 | {_cursor} is set 348 | if distance between (nearest block display relative to {_cursor}) and {_cursor} <= 1: 349 | set {_id} to metadata value "id" of nearest block display relative to {_cursor} 350 | delete {editorSave::type::%{_id}%} 351 | delete {editorSave::time::%{_id}%} 352 | delete {editorSave::loc::%{_id}%} 353 | delete {editorSave::face::%{_id}%} 354 | delete {editorSave::turn::%{_id}%} 355 | delete {editorSave::section::%{_id}%} 356 | delete {editorSave::glowing::%{_id}%} 357 | delete {editorSave::tag::%{_id}%} 358 | delete nearest block display relative to {_cursor} 359 | 360 | command /gen: 361 | trigger: 362 | {editMode} is set 363 | player's gamemode is not spectator 364 | size of {editorSave::type::*} > 0 365 | set {_sorted::*} to sorted indices of {editorSave::time::*} in ascending order 366 | set {_count} to 0 367 | loop {_sorted::*}: 368 | set {_id} to loop-value 369 | set {_x} to x location of {editorSave::loc::%{_id}%} 370 | set {_y} to y location of {editorSave::loc::%{_id}%} 371 | if {editorSave::type::%{_id}%} is "execution": 372 | set {_gen} to "%{editorSave::type::%{_id}%}%(%{editorSave::time::%{_id}%}%, {%{editorSave::section::%{_id}%}%})" 373 | delete {editorSave::type::%{_id}%} 374 | delete {editorSave::time::%{_id}%} 375 | delete {editorSave::loc::%{_id}%} 376 | delete {editorSave::section::%{_id}%} 377 | else if {editorSave::type::%{_id}%} is "tap" or "hold" or "drag": 378 | set {_gen} to "%{editorSave::type::%{_id}%}%(%{editorSave::time::%{_id}%}%, ""%{editorSave::face::%{_id}%}%"", %{_x} - 0.5%, %{_y} - 0.5%, %{editorSave::glowing::%{_id}%}%, ""%{editorSave::tag::%{_id}%}%"")" 379 | delete {editorSave::type::%{_id}%} 380 | delete {editorSave::time::%{_id}%} 381 | delete {editorSave::loc::%{_id}%} 382 | delete {editorSave::face::%{_id}%} 383 | delete {editorSave::turn::%{_id}%} 384 | delete {editorSave::glowing::%{_id}%} 385 | delete {editorSave::tag::%{_id}%} 386 | else if {editorSave::type::%{_id}%} is "flickR" or "flickL": 387 | set {_tempType1} to "flick" 388 | set {_gen} to "%{_tempType1}%(%{editorSave::time::%{_id}%}%, ""%{editorSave::face::%{_id}%}%"", ""%{editorSave::turn::%{_id}%}%"", %{editorSave::glowing::%{_id}%}%, ""%{editorSave::tag::%{_id}%}%"")" 389 | delete {editorSave::type::%{_id}%} 390 | delete {editorSave::time::%{_id}%} 391 | delete {editorSave::loc::%{_id}%} 392 | delete {editorSave::face::%{_id}%} 393 | delete {editorSave::turn::%{_id}%} 394 | delete {editorSave::glowing::%{_id}%} 395 | delete {editorSave::tag::%{_id}%} 396 | else if {editorSave::type::%{_id}%} is "double": 397 | set {_tempType} to {editorSave::type::%{_id}%} 398 | set {_tempTime} to {editorSave::time::%{_id}%} 399 | set {_tempFace} to {editorSave::face::%{_id}%} 400 | set {_tempGlowing} to {editorSave::glowing::%{_id}%} 401 | set {_tempTag} to {editorSave::tag::%{_id}%} 402 | set {_x1} to x location of {editorSave::loc::%{_id}%} 403 | set {_y1} to y location of {editorSave::loc::%{_id}%} 404 | delete {editorSave::type::%{_id}%} 405 | delete {editorSave::time::%{_id}%} 406 | delete {editorSave::loc::%{_id}%} 407 | delete {editorSave::face::%{_id}%} 408 | delete {editorSave::turn::%{_id}%} 409 | delete {editorSave::glowing::%{_id}%} 410 | delete {editorSave::tag::%{_id}%} 411 | delete {_x2} 412 | delete {_y2} 413 | loop {editorSave::type::*}: 414 | loop-value-2 is "double" 415 | {editorSave::time::%loop-index-2%} - {_tempTime} is between -0.05 and 0.05 416 | set {_x2} to x location of {editorSave::loc::%loop-index-2%} 417 | set {_y2} to y location of {editorSave::loc::%loop-index-2%} 418 | delete {editorSave::type::%loop-index-2%} 419 | delete {editorSave::time::%loop-index-2%} 420 | delete {editorSave::loc::%loop-index-2%} 421 | delete {editorSave::face::%loop-index-2%} 422 | delete {editorSave::turn::%loop-index-2%} 423 | delete {editorSave::glowing::%loop-index-2%} 424 | delete {editorSave::tag::%loop-index-2%} 425 | exit loop 426 | set {_gen} to "%{_tempType}%(%{_tempTime}%, ""%{_tempFace}%"", %{_x1} - 0.5%, %{_y1} - 0.5%, %{_x2} - 0.5%, %{_y2} - 0.5%, %{_tempGlowing}%, ""%{_tempTag}%"")" 427 | else: 428 | set {_gen} to "empty" 429 | if {_gen} contains "": 430 | replace all "" with "&e&c" in {_gen} 431 | broadcast "&c✘ &c%{_gen}%" 432 | else: 433 | {_gen} is not "empty" 434 | add 1 to {_count} 435 | log "%{_gen}%" to file "generated.log" 436 | loop all block displays: 437 | metadata value "id" of loop-entity is set 438 | delete loop-entity 439 | delete {editorSave::*} 440 | send title "" with subtitle "&a已清空面板" to player for 0.5 seconds with fade in 0 seconds and fade out 0.5 seconds 441 | send "" to player 442 | send "&a处理完毕,成功生成了 %{_count}% 个音符" to player 443 | send "&7(前往 &fplugins\skript\logs\generated.log&7 查看生成结果)" to player 444 | send "" to player 445 | 446 | every ticks: 447 | {editMode} is set 448 | loop all players: 449 | loop-player's gamemode is not spectator 450 | tool of loop-player is stick named "&d&l魔杖&e (右键放置,左键删除,Shift对齐网格)" 451 | set {_z} to 4 452 | set {_pz} to z location of loop-player 453 | set {_v} to vector in direction of loop-player 454 | set {_vx} to x of {_v} 455 | set {_vy} to y of {_v} 456 | set {_vz} to z of {_v} 457 | set {_rate} to abs({_z} - {_pz}) / {_vz} 458 | set {_vx} to {_vx} * {_rate} + x location of loop-player 459 | if loop-player is sneaking: 460 | set {_vy} to {_vy} * {_rate} + y location of loop-player + 1.4 461 | else: 462 | set {_vy} to {_vy} * {_rate} + y location of loop-player + 1.6 463 | set {_vz} to {_vz} * {_rate} 464 | loop all block displays: 465 | delete loop-entity-2 if metadata value "isPreview" of loop-entity-2 is true 466 | {_vx} <= 4 467 | {_vy} <= 4 468 | {_vx} >= -3 469 | {_vy} >= -3 470 | if loop-player is sneaking: 471 | set {_vx} to round({_vx}*2)/2 472 | set {_vy} to round({_vy}*2)/2 473 | set {_loc} to location({_vx}, {_vy}, {_z}, world "world", 0, 0) 474 | summon block display at {_loc}: 475 | set display block data of entity to light_blue_concrete if {editor::noteType} is "tap" 476 | set display block data of entity to orange_concrete if {editor::noteType} is "double" 477 | set display block data of entity to white_concrete if {editor::noteType} is "hold" 478 | set display block data of entity to yellow_concrete if {editor::noteType} is "drag" 479 | set display block data of entity to magenta_concrete if {editor::noteType} is "flickL" 480 | set display block data of entity to red_concrete if {editor::noteType} is "flickR" 481 | set display scale of entity to vector(1,1,1) 482 | set glowing of entity to true 483 | set display translation of entity to vector(-0.5,-0.5,0.1) 484 | set display glow color override of entity to bukkitColor(255,255,255,255) if {editor::face} is "w" 485 | set display glow color override of entity to bukkitColor(255,255,235,42) if {editor::face} is "a" 486 | set display glow color override of entity to bukkitColor(255,255,150,0) if {editor::face} is "s" 487 | set display glow color override of entity to bukkitColor(255,255,0,0) if {editor::face} is "d" 488 | set display name of entity to "&a+++" if {editor::glowing} is true 489 | set metadata value "isPreview" of entity to true -------------------------------------------------------------------------------- /gui.sk: -------------------------------------------------------------------------------- 1 | every ticks: 2 | if {process} is set: 3 | add 1 to {loadingTime} 4 | set {_dots} to round({process} / 2) 5 | set {_bar} to "&a" 6 | loop {_dots} times: 7 | set {_bar} to "%{_bar}%·" 8 | set {_bar} to "%{_bar}%&7" 9 | loop (50 - {_dots}) times: 10 | set {_bar} to "%{_bar}%·" 11 | send title "" with subtitle "&8%ceiling({loadingTime}/20)% %{_bar}%&8 %ceiling({loadingTime}/20)%" to all players for 1 second with fade in 0 seconds and fade out 0 seconds 12 | else if {loadingTime} is set: 13 | delete {loadingTime} 14 | 15 | on load: 16 | set {loaded} to true 17 | 18 | function playChart(id: text): 19 | set {noteID} to 0 20 | set {process} to 0 21 | delete {editorSave::*} if {editMode} is true 22 | create section stored in {_sync}: 23 | loop enabled scripts: 24 | loop-value start with "charts" 25 | if loop-value contains "_properties": 26 | set {_null} to "" 27 | else: 28 | disable script loop-value 29 | quitGame() if {editMode} is not true 30 | run section {_sync} sync and wait 31 | wait 1 tick 32 | set {process} to 10 33 | create section stored in {_async}: 34 | enable script "charts\-%{_id}%" 35 | run section {_async} async and wait 36 | wait 1 tick 37 | if {editMode} is true: 38 | set {editor::bpm} to {bpm::%{_id}%} 39 | set {editor::tick} to 0 40 | set {editor::preTime} to 0 41 | addTick({actor}, 0) 42 | delete {process} 43 | send title "" with subtitle "&a谱面已读取完毕" to all players for 1 second with fade in 0 seconds and fade out 0 seconds 44 | else: 45 | set {process} to 25 46 | set {playing} to {_id} 47 | wait 0.5 seconds 48 | execute {actor} command "start" 49 | delete {actor} if {editMode} is true 50 | 51 | function refresh(p: player): 52 | delete {loadedCharts::*} 53 | delete {length::*} 54 | delete {chartOffset::*} 55 | loop enabled scripts: 56 | loop-value start with "charts" 57 | if loop-value contains "_properties": 58 | disable script loop-value 59 | wait 1 tick 60 | loop disabled scripts: 61 | loop-value start with "charts" 62 | if loop-value contains "_properties": 63 | enable script loop-value 64 | wait 5 ticks 65 | infoGUI({_p}) 66 | 67 | function registerChart(id: text, name: text, level: text, artist: text, author: text, length: number, offset: number): 68 | add {_id} to {loadedCharts::id::*} 69 | add {_name} to {loadedCharts::name::*} 70 | add {_level} to {loadedCharts::level::*} 71 | add {_artist} to {loadedCharts::artist::*} 72 | add {_author} to {loadedCharts::author::*} 73 | set {length::%{_id}%} to {_length} 74 | set {chartOffset::%{_id}%} to {_offset} 75 | 76 | function setBPM(id: text, bpm: number): 77 | set {bpm::%{_id}%} to {_bpm} 78 | 79 | command /play: 80 | trigger: 81 | player's gamemode is not spectator 82 | if {loaded} is set: 83 | delete {loaded} 84 | refresh(player) 85 | else: 86 | infoGUI(player) 87 | 88 | function infoGUI(p: player): 89 | if {actor} is not set: 90 | set {_infoGUI} to chest inventory with 6 rows named "选择谱面" 91 | loop integers from 47 to 51: 92 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 93 | set slot 45 of {_infoGUI} to oak sign named "&f喜欢 &eCube Rhythm&f 吗?" with lore "&7加入我们的QQ群聊%nl%&b300846184%nl%&7和大家一起分享谱面!" 94 | set slot 46 of {_infoGUI} to book named "&a◆ &f如何导入谱面?" with lore "%nl%&e1. &7打开目录 &f服务端\plugins\Skript\scripts\charts%nl%&e2. &7把谱面文件&f(谱面.sk 和 谱面_properties.sk)&7扔进去%nl%&e3. &7输入 &b/sk reload \charts\ &7稍等片刻即可导入%nl% &c(需要管理员权限 后台输入op %name of {_p}%)%nl%%nl%&a◆ &f如何写谱?%nl%%nl%&7请浏览:%nl%&7https://github.com/EroslonDusk/CubeRhythm/wiki%nl%&a" 95 | set slot 52 of {_infoGUI} to comparator named "&f设置" with lore "%nl%&7包括调速、偏移等更多选项%nl%%nl%&e点击查看" 96 | set slot 53 of {_infoGUI} to slime ball named "&a刷新列表" with lore "%nl%&7重载所有谱面配置文件并刷新列表%nl%&f如果你想导入新谱面,这个按钮并不能帮你%nl%%nl%&e点击刷新" 97 | loop indices of {loadedCharts::id::*}: 98 | set {_slot} to (loop-value parsed as integer) - 1 99 | {_slot} is set 100 | set {_best} to {best::%uuid of {_p}%::%{loadedCharts::id::%loop-value%}%} 101 | set {_best} to 0 if {_best} is not set 102 | set {_t} to "%{length::%{loadedCharts::id::%loop-value%}%}% seconds" parsed as timespan 103 | set {_dura} to ({_t} from (unix date of 0)) formatted as "m:ss" 104 | set {_bpm} to {bpm::%{loadedCharts::id::%loop-value%}%} 105 | set {_bpm} to "&7未知" if {_bpm} is not set 106 | delete {_char::*} 107 | set {_tempnumber} to "" 108 | set {_char::*} to (uncolored {loadedCharts::level::%loop-value%}) split at "" 109 | loop {_char::*}: 110 | set {_tempnumber} to "%{_tempnumber}%%loop-value-2%" if loop-value-2 is "0" or "1" or "2" or "3" or "4" or "5" or "6" or "7" or "8" or "9" 111 | set {_tempnumber} to {_tempnumber} parsed as number 112 | set {_item} to music disc cat named "&f%{loadedCharts::name::%loop-value%}%" with lore "%nl%&8· &7难度: &f%{loadedCharts::level::%loop-value%}%%nl%&8· &7作曲: &f%{loadedCharts::artist::%loop-value%}%%nl%&8· &7谱师: &f%{loadedCharts::author::%loop-value%}%%nl%&8· &7时长: &f%{_dura}%%nl%&8· &7BPM: &f%{_bpm}%%nl%&8· &7最好成绩: &f%{_best}% &7%getRank({_best})%%nl%%nl%&7输入 /reset 离开游戏%nl%%nl%&8[&a左键&8] &f开始游玩%nl%&8[&d右键&8] &c删除成绩%nl%&f" 113 | set item amount of {_item} to {_tempnumber} if {_tempnumber} > 0 114 | set slot {_slot} of {_infoGUI} to {_item} 115 | open {_infoGUI} to {_p} 116 | else: 117 | send "&c游戏期间不可打开面板!如果要退出游玩,请输入 /reset !%nl%&7如果游戏尚未开始,请输入 /sk reload main" to {_p} 118 | 119 | function getRank(score: number) :: text: 120 | return "&eSSS+" if {_score} >= 1000000 121 | return "&eSSS" if {_score} is between 999999 and 990000 122 | return "&eSS" if {_score} is between 989999 and 980000 123 | return "&eS" if {_score} is between 979999 and 960000 124 | return "&aAAA" if {_score} is between 959999 and 950000 125 | return "&aAA" if {_score} is between 949999 and 940000 126 | return "&aA" if {_score} is between 939999 and 930000 127 | return "&bBBB" if {_score} is between 929999 and 920000 128 | return "&bBB" if {_score} is between 919999 and 910000 129 | return "&bB" if {_score} is between 909999 and 900000 130 | return "&2C" if {_score} is between 899999 and 850000 131 | return "&7D" if {_score} <= 849999 132 | 133 | function deleteScoreGUI(id: text, p: player): 134 | set metadata value "prepareToDelete" of {_p} to {_id} 135 | set {_infoGUI} to chest inventory with 5 rows named "清除该曲成绩?" 136 | loop integers from 0 to 7: 137 | set slot loop-value of {_infoGUI} to red stained glass pane named "" 138 | loop integers from 8 to 9: 139 | set slot loop-value of {_infoGUI} to red stained glass pane named "" 140 | loop integers from 17 to 18: 141 | set slot loop-value of {_infoGUI} to red stained glass pane named "" 142 | loop integers from 26 to 27: 143 | set slot loop-value of {_infoGUI} to red stained glass pane named "" 144 | loop integers from 35 to 44: 145 | set slot loop-value of {_infoGUI} to red stained glass pane named "" 146 | set slot 20 of {_infoGUI} to lime wool named "&a清除成绩" with lore "&c此操作无法撤销!" 147 | set slot 24 of {_infoGUI} to red wool named "&c返回" with lore "&f选歌界面" 148 | open {_infoGUI} to {_p} 149 | 150 | function settingsGUI(p: player): 151 | set {_infoGUI} to chest inventory with 6 rows named "设置" 152 | loop integers from 0 to 7: 153 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 154 | loop integers from 8 to 9: 155 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 156 | loop integers from 17 to 18: 157 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 158 | loop integers from 26 to 27: 159 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 160 | loop integers from 35 to 36: 161 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 162 | loop integers from 44 to 52: 163 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 164 | set slot 20 of {_infoGUI} to feather named "&f音符流速: &e%{speed::%uuid of {_p}%}%" with lore "%nl%&7音符每Tick(1/20秒)移动的距离(米)%nl%&7推荐范围: 1~2.5%nl%&f过高或过低的流速会严重影响游戏体验%nl%%nl%&e点击修改" 165 | set slot 21 of {_infoGUI} to clock named "&f偏移: &e%{offset::%uuid of {_p}%}%ms" with lore "%nl%&7单位: 毫秒(ms)%nl%&7偏移越高,音符生成越滞后,反之提前%nl%&7如果你遇到了音画不同步,请调整此项%nl%&f注意:第一次播放音画不同步属正常现象%nl%%nl%&e点击修改" 166 | set slot 22 of {_infoGUI} to note block named "&f打击音效: %{hitSound::%uuid of {_p}%}%" with lore "%nl%&7击中音符时播放打击音效%nl%%nl%&e点击开启/关闭" 167 | set slot 23 of {_infoGUI} to gold block named "&fFull Combo/Perfect指示器: %{indicator::%uuid of {_p}%}%" with lore "%nl%&7将连击数和分数区域%nl%&7根据您的游戏表现显示不同颜色%nl%%nl%&e点击开启/关闭" 168 | set slot 24 of {_infoGUI} to piston named "&f自动演奏: %{autoPlay::%uuid of {_p}%}%" with lore "%nl%&7自动演奏歌曲,无需操作%nl%&f该模式下游玩成绩无效%nl%%nl%&e点击开启/关闭" 169 | set slot 29 of {_infoGUI} to redstone named "&f在判定提示中显示偏移: %{showOffset::%uuid of {_p}%}%" with lore "%nl%&7替换打击特效中的Exact/Just字样为%nl%&7音符到达判定面时间与被击打时间的差值%nl%%nl%&e点击开启/关闭" 170 | set slot 30 of {_infoGUI} to white concrete named "&f小节提示线: %{showLine::%uuid of {_p}%}%" with lore "%nl%&7在轨道两侧生成提示节拍的细线%nl%%nl%&e点击开启/关闭" 171 | set slot 53 of {_infoGUI} to music disc cat named "&a选择谱面" with lore "%nl%&e点击返回" 172 | open {_infoGUI} to {_p} 173 | 174 | on inventory click: 175 | "%current inventory of player%" is "inventory of " 176 | cancel event 177 | if name of event-inventory is "选择谱面": 178 | if index of event-slot < 45: 179 | set {_slot} to index of event-slot + 1 180 | if {loadedCharts::id::%{_slot}%} is set: 181 | if inventory action is pickup half: 182 | deleteScoreGUI({loadedCharts::id::%{_slot}%}, player) 183 | else: 184 | close player's inventory 185 | playChart({loadedCharts::id::%{_slot}%}) 186 | set {actor} to player 187 | else: 188 | settingsGUI(player) if index of event-slot = 52 189 | refresh(player) if event-slot is slime ball 190 | set event-slot to barrier named "&c请稍等……" if index of event-slot = 53 191 | if name of event-inventory is "设置": 192 | setSpeedGUI(player) if index of event-slot = 20 193 | setOffsetGUI(player) if index of event-slot = 21 194 | setHitSound(player) if index of event-slot = 22 195 | setIndicator(player) if index of event-slot = 23 196 | setAutoPlay(player) if index of event-slot = 24 197 | setShowOffset(player) if index of event-slot = 29 198 | setLine(player) if index of event-slot = 30 199 | infoGUI(player) if index of event-slot = 53 200 | if name of event-inventory is "调速": 201 | settingsGUI(player) if index of event-slot = 53 202 | remove 0.5 from {speed::%uuid of player%} if index of event-slot = 19 203 | setSpeedGUI(player) if index of event-slot = 19 204 | remove 0.1 from {speed::%uuid of player%} if index of event-slot = 20 205 | setSpeedGUI(player) if index of event-slot = 20 206 | remove 0.01 from {speed::%uuid of player%} if index of event-slot = 21 207 | setSpeedGUI(player) if index of event-slot = 21 208 | add 0.5 to {speed::%uuid of player%} if index of event-slot = 25 209 | setSpeedGUI(player) if index of event-slot = 25 210 | add 0.1 to {speed::%uuid of player%} if index of event-slot = 24 211 | setSpeedGUI(player) if index of event-slot = 24 212 | add 0.01 to {speed::%uuid of player%} if index of event-slot = 23 213 | setSpeedGUI(player) if index of event-slot = 23 214 | if name of event-inventory is "偏移调整": 215 | settingsGUI(player) if index of event-slot = 53 216 | remove 50 from {offset::%uuid of player%} if index of event-slot = 19 217 | setOffsetGUI(player) if index of event-slot = 19 218 | remove 10 from {offset::%uuid of player%} if index of event-slot = 20 219 | setOffsetGUI(player) if index of event-slot = 20 220 | remove 1 from {offset::%uuid of player%} if index of event-slot = 21 221 | setOffsetGUI(player) if index of event-slot = 21 222 | add 50 to {offset::%uuid of player%} if index of event-slot = 25 223 | setOffsetGUI(player) if index of event-slot = 25 224 | add 10 to {offset::%uuid of player%} if index of event-slot = 24 225 | setOffsetGUI(player) if index of event-slot = 24 226 | add 1 to {offset::%uuid of player%} if index of event-slot = 23 227 | setOffsetGUI(player) if index of event-slot = 23 228 | if name of event-inventory is "清除该曲成绩?": 229 | set {_id} to metadata value "prepareToDelete" of player 230 | if index of event-slot = 20: 231 | delete {best::%uuid of player%::%{_id}%} 232 | delete metadata value "prepareToDelete" of player 233 | close player's inventory 234 | send "&a清除成绩成功" to player 235 | if index of event-slot = 24: 236 | infoGUI(player) 237 | delete metadata value "prepareToDelete" of player 238 | 239 | function setSpeedGUI(p: player): 240 | set {_infoGUI} to chest inventory with 6 rows named "调速" 241 | loop integers from 45 to 52: 242 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 243 | set slot 53 of {_infoGUI} to comparator named "&a设置" with lore "%nl%&e点击返回" 244 | set slot 19 of {_infoGUI} to 50 orange stained glass panes named "&6-0.5" with lore "&7当前: %{speed::%uuid of {_p}%}%" 245 | set slot 20 of {_infoGUI} to 10 orange stained glass panes named "&6-0.1" with lore "&7当前: %{speed::%uuid of {_p}%}%" 246 | set slot 21 of {_infoGUI} to 1 orange stained glass pane named "&6-0.01" with lore "&7当前: %{speed::%uuid of {_p}%}%" 247 | set slot 22 of {_infoGUI} to feather named "&f音符流速: &e%{speed::%uuid of {_p}%}%" with lore "%nl%&7音符每Tick(1/20秒)移动的距离(米)%nl%&7推荐范围: 1~2.5%nl%&f过高或过低的流速会严重影响游戏体验" 248 | set slot 25 of {_infoGUI} to 50 light blue stained glass panes named "&b+0.5" with lore "&7当前: %{speed::%uuid of {_p}%}%" 249 | set slot 24 of {_infoGUI} to 10 light blue stained glass panes named "&b+0.1" with lore "&7当前: %{speed::%uuid of {_p}%}%" 250 | set slot 23 of {_infoGUI} to 1 light blue stained glass pane named "&b+0.01" with lore "&7当前: %{speed::%uuid of {_p}%}%" 251 | open {_infoGUI} to {_p} 252 | 253 | function setOffsetGUI(p: player): 254 | set {_infoGUI} to chest inventory with 6 rows named "偏移调整" 255 | loop integers from 45 to 52: 256 | set slot loop-value of {_infoGUI} to gray stained glass pane named "" 257 | set slot 53 of {_infoGUI} to comparator named "&a设置" with lore "%nl%&e点击返回" 258 | set slot 19 of {_infoGUI} to 50 orange stained glass panes named "&6-50" with lore "&7当前: %{offset::%uuid of {_p}%}%ms" 259 | set slot 20 of {_infoGUI} to 10 orange stained glass panes named "&6-10" with lore "&7当前: %{offset::%uuid of {_p}%}%ms" 260 | set slot 21 of {_infoGUI} to 1 orange stained glass pane named "&6-1" with lore "&7当前: %{offset::%uuid of {_p}%}%ms" 261 | set slot 22 of {_infoGUI} to clock named "&f偏移: &e%{offset::%uuid of {_p}%}%ms" with lore "%nl%&7单位: 毫秒(ms)%nl%&7偏移越高,音符生成越滞后,反之提前%nl%&7如果你遇到了音画不同步,请调整此项%nl%&f注意:第一次播放音画不同步属正常现象" 262 | set slot 25 of {_infoGUI} to 50 light blue stained glass panes named "&b+50" with lore "&7当前: %{offset::%uuid of {_p}%}%ms" 263 | set slot 24 of {_infoGUI} to 10 light blue stained glass panes named "&b+10" with lore "&7当前: %{offset::%uuid of {_p}%}%ms" 264 | set slot 23 of {_infoGUI} to 1 light blue stained glass pane named "&b+1" with lore "&7当前: %{offset::%uuid of {_p}%}%ms" 265 | open {_infoGUI} to {_p} 266 | 267 | function setHitSound(p: player): 268 | if {hitSound::%uuid of {_p}%} is "&a开": 269 | set {hitSound::%uuid of {_p}%} to "&c关" 270 | else: 271 | set {hitSound::%uuid of {_p}%} to "&a开" 272 | settingsGUI({_p}) 273 | 274 | function setIndicator(p: player): 275 | if {indicator::%uuid of {_p}%} is "&a开": 276 | set {indicator::%uuid of {_p}%} to "&c关" 277 | else: 278 | set {indicator::%uuid of {_p}%} to "&a开" 279 | settingsGUI({_p}) 280 | 281 | function setShowOffset(p: player): 282 | if {showOffset::%uuid of {_p}%} is "&a开": 283 | set {showOffset::%uuid of {_p}%} to "&c关" 284 | else: 285 | set {showOffset::%uuid of {_p}%} to "&a开" 286 | settingsGUI({_p}) 287 | 288 | function setAutoPlay(p: player): 289 | if {autoPlay::%uuid of {_p}%} is "&a开": 290 | set {autoPlay::%uuid of {_p}%} to "&c关" 291 | else: 292 | set {autoPlay::%uuid of {_p}%} to "&a开" 293 | settingsGUI({_p}) 294 | 295 | function setLine(p: player): 296 | if {showLine::%uuid of {_p}%} is "&a开": 297 | set {showLine::%uuid of {_p}%} to "&c关" 298 | else: 299 | set {showLine::%uuid of {_p}%} to "&a开" 300 | settingsGUI({_p}) 301 | -------------------------------------------------------------------------------- /judge.sk: -------------------------------------------------------------------------------- 1 | ######################################################## 2 | # # 3 | # 判定部分 # 4 | # # 5 | ######################################################## 6 | 7 | every ticks: 8 | {autoPlay::%uuid of {actor}%} is not "&a开" 9 | loop all players: 10 | {actor} is loop-player 11 | set {_entity} to target of loop-player ignoring blocks 12 | {_entity} is interaction 13 | set {_target} to location of {_entity} 14 | if metadata value "notetype" of {_entity} is "drag": 15 | set {_x} to z location of {_target} if metadata value "face" of {_entity} is "w" or "s" 16 | set {_x} to x location of {_target} if metadata value "face" of {_entity} is "a" or "d" 17 | set {_time} to ({_x} - 4) / {speed::%uuid of {actor}%} * 50 if metadata value "face" of {_entity} is "w" or "a" 18 | set {_time} to (-1 * {_x} - 4) / {speed::%uuid of {actor}%} * 50 if metadata value "face" of {_entity} is "s" or "d" 19 | if abs({_time}) <= 200: 20 | {_target}.add(0, 20, 0) 21 | teleport {_entity} to {_target} 22 | set metadata value "hited" of {_entity} to true 23 | exit loop 24 | 25 | function exact(entity: entity, time: number): 26 | if metadata value "notetype" of {_entity} is not "hold": 27 | add 1 to {combo} 28 | play sound "entity.player.hurt" with pitch 2 to all players if {hitSound::%uuid of {actor}%} is "&a开" 29 | add 1 to {hitNotes} 30 | add 1 to {statistics::exact} 31 | else: 32 | add 1 to {statistics::exactHold} 33 | set {alphaTime} to 11 34 | set {score} to floor(1000000/{maxNote}*{hitNotes}) 35 | set {_face} to metadata value "face" of {_entity} 36 | set {_loc} to location of {_entity} 37 | set {_z} to z location of {_loc} 38 | set {_x} to x location of {_loc} 39 | set yaw of {_loc} to 180 if {_face} is "w" 40 | set yaw of {_loc} to 90 if {_face} is "a" 41 | set yaw of {_loc} to 0 if {_face} is "s" 42 | set yaw of {_loc} to -90 if {_face} is "d" 43 | {_loc}.add(0, 0, {_z}*-1+5) if {_face} is "w" 44 | {_loc}.add({_x}*-1+5, 0, 0) if {_face} is "a" 45 | {_loc}.add(0, 0, {_z}*-1-4) if {_face} is "s" 46 | {_loc}.add({_x}*-1-4, 0, 0) if {_face} is "d" 47 | {_loc}.add(0, 1, 0) 48 | if metadata value "notetype" of {_entity} is "drag" or "hold" or "flick": 49 | if {autoPlay::%uuid of {actor}%} is not "&a开": 50 | {_loc}.add(0, -20, 0) 51 | else if metadata value "notetype" of {_entity} is "drag": 52 | {_loc}.add(0, 0, 0) 53 | else if metadata value "notetype" of {_entity} is "hold": 54 | {_loc}.add(0, -20, 0) 55 | else: 56 | {_loc}.add(0, -20.5, 0) 57 | else: 58 | {_loc}.add(0, 0, 0) 59 | summon text display at {_loc}: 60 | set {_alpha} to 255 61 | set display text of the entity to "&bExact" if {showOffset::%uuid of {actor}%} is not "&a开" 62 | if {showOffset::%uuid of {actor}%} is "&a开": 63 | set display text of the entity to "&b+%round({_time})%" if {_time} > 0 64 | set display text of the entity to "&b%round({_time})%" if {_time} < 0 65 | set display text of the entity to "&b" if {_time} = 0 66 | set display text background color of the entity to bukkitColor(0,0,0,0) 67 | set {_scale} to 3 68 | set display scale of the entity to vector({_scale},{_scale},{_scale}) 69 | set display translation of the entity to vector({_scale}*-0.015,{_scale}*-0.15,0) 70 | set metadata value "belongsto" of the entity to uuid of {_ent1} 71 | set display shadow strength of the entity to 0 72 | set {_text} to the entity 73 | summon text display at {_loc}: 74 | set {_alpha} to 255 75 | set display text of the entity to "&b█" 76 | set display text background color of the entity to bukkitColor(0,0,0,0) 77 | set display text opacity of the entity to 14 78 | set {_scale2} to 8 79 | set {_scale2toDelete} to 3 80 | set display scale of the entity to vector(2,2,2) 81 | set display translation of the entity to vector({_scale2}*-0.015,{_scale2}*-0.15,0) 82 | set metadata value "belongsto" of the entity to uuid of {_ent1} 83 | set display shadow strength of the entity to 0 84 | set {_text2} to the entity 85 | loop 10 times: 86 | remove 24 from {_alpha} 87 | set display text opacity of {_text} to {_alpha} 88 | if {_alpha} > 40: 89 | set display text opacity of {_text2} to {_alpha} / 4 90 | else: 91 | set display text opacity of {_text2} to 14 92 | set {_scale} to {_scale} * 0.9 93 | set {_scale} to 1 if {_scale} < 1 94 | set {_scale2toDelete} to {_scale2toDelete} * 0.7 95 | set {_scale4} to {_scale2} - {_scale2toDelete} 96 | set display scale of {_text} to vector({_scale},{_scale},{_scale}) 97 | set display scale of {_text2} to vector({_scale4},{_scale4},{_scale4}) 98 | set display translation of {_text} to vector({_scale}*-0.015,{_scale}*-0.15,0) 99 | set display translation of {_text2} to vector({_scale4}*-0.015,{_scale4}*-0.15,0) 100 | wait 1 tick 101 | loop all text displays: 102 | if loop-entity is {_text}: 103 | delete loop-entity 104 | else if loop-entity is {_text2}: 105 | delete loop-entity 106 | 107 | function great(entity: entity, el: text, time: number): 108 | play sound "entity.player.hurt" with pitch 2 to all players if {hitSound::%uuid of {actor}%} is "&a开" 109 | add 1 to {combo} 110 | add 0.7 to {hitNotes} 111 | add 1 to {statistics::just} 112 | set {alphaTime} to 11 113 | set {score} to floor(1000000/{maxNote}*{hitNotes}) 114 | if {_el} is "early": 115 | send action bar "&bEarly" to all players 116 | if {_el} is "late": 117 | send action bar "&6Late" to all players 118 | set {_face} to metadata value "face" of {_entity} 119 | set {_loc} to location of {_entity} 120 | set {_z} to z location of {_loc} 121 | set {_x} to x location of {_loc} 122 | set yaw of {_loc} to 180 if {_face} is "w" 123 | set yaw of {_loc} to 90 if {_face} is "a" 124 | set yaw of {_loc} to 0 if {_face} is "s" 125 | set yaw of {_loc} to -90 if {_face} is "d" 126 | {_loc}.add(0, 0, {_z}*-1+5) if {_face} is "w" 127 | {_loc}.add({_x}*-1+5, 0, 0) if {_face} is "a" 128 | {_loc}.add(0, 0, {_z}*-1-4) if {_face} is "s" 129 | {_loc}.add({_x}*-1-4, 0, 0) if {_face} is "d" 130 | {_loc}.add(0, 1, 0) 131 | if metadata value "notetype" of {_entity} is "drag" or "hold" or "flick": 132 | if {autoPlay::%uuid of {actor}%} is not "&a开": 133 | {_loc}.add(0, -20, 0) 134 | else if metadata value "notetype" of {_entity} is "drag": 135 | {_loc}.add(0, 0, 0) 136 | else if metadata value "notetype" of {_entity} is "hold": 137 | {_loc}.add(0, -20, 0) 138 | else: 139 | {_loc}.add(0, -20.5, 0) 140 | else: 141 | {_loc}.add(0, 0, 0) 142 | summon text display at {_loc}: 143 | set {_alpha} to 255 144 | set display text of the entity to "&eJust" if {showOffset::%uuid of {actor}%} is not "&a开" 145 | if {showOffset::%uuid of {actor}%} is "&a开": 146 | set display text of the entity to "&e+%round({_time})%" if {_time} > 0 147 | set display text of the entity to "&e%round({_time})%" if {_time} < 0 148 | set display text of the entity to "&b" if {_time} = 0 149 | set display text background color of the entity to bukkitColor(0,0,0,0) 150 | set {_scale} to 3 151 | set display scale of the entity to vector({_scale},{_scale},{_scale}) 152 | set display translation of the entity to vector({_scale}*-0.015,{_scale}*-0.15,0) 153 | set metadata value "belongsto" of the entity to uuid of {_ent1} 154 | set display shadow strength of the entity to 0 155 | set {_text} to the entity 156 | summon text display at {_loc}: 157 | set {_alpha} to 255 158 | set display text of the entity to "&e█" 159 | set display text background color of the entity to bukkitColor(0,0,0,0) 160 | set display text opacity of the entity to 14 161 | set {_scale2} to 8 162 | set {_scale2toDelete} to 3 163 | set display scale of the entity to vector(2,2,2) 164 | set display translation of the entity to vector({_scale2}*-0.015,{_scale2}*-0.15,0) 165 | set metadata value "belongsto" of the entity to uuid of {_ent1} 166 | set display shadow strength of the entity to 0 167 | set {_text2} to the entity 168 | loop 10 times: 169 | remove 24 from {_alpha} 170 | set display text opacity of {_text} to {_alpha} 171 | if {_alpha} > 40: 172 | set display text opacity of {_text2} to {_alpha} / 4 173 | else: 174 | set display text opacity of {_text2} to 14 175 | set {_scale} to {_scale} * 0.9 176 | set {_scale} to 1 if {_scale} < 1 177 | set {_scale2toDelete} to {_scale2toDelete} * 0.5 178 | set {_scale4} to {_scale2} - {_scale2toDelete} 179 | set display scale of {_text} to vector({_scale},{_scale},{_scale}) 180 | set display scale of {_text2} to vector({_scale4},{_scale4},{_scale4}) 181 | set display translation of {_text} to vector({_scale}*-0.015,{_scale}*-0.15,0) 182 | set display translation of {_text2} to vector({_scale4}*-0.015,{_scale4}*-0.15,0) 183 | wait 1 tick 184 | loop all text displays: 185 | if loop-entity is {_text}: 186 | delete loop-entity 187 | else if loop-entity is {_text2}: 188 | delete loop-entity 189 | 190 | function miss(): 191 | set {combo} to 0 192 | add 1 to {statistics::miss} 193 | send title "" with subtitle "&4Miss" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 194 | 195 | function hitNote(entity: entity): 196 | set {_loc} to location of {_entity} 197 | set {_x} to z location of {_loc} if metadata value "face" of {_entity} is "w" or "s" 198 | set {_x} to x location of {_loc} if metadata value "face" of {_entity} is "a" or "d" 199 | set {_time} to ({_x} - 4) / {speed::%uuid of {actor}%} * 50 if metadata value "face" of {_entity} is "w" or "a" 200 | set {_time} to (-1 * {_x} - 4) / {speed::%uuid of {actor}%} * 50 if metadata value "face" of {_entity} is "s" or "d" 201 | #broadcast "%{_time}%ms" 202 | if abs({_time}) <= 80: 203 | exact({_entity}, {_time}) 204 | set {_canRemove} to true 205 | else if abs({_time}) <= 200: 206 | if metadata value "forceexact" of {_entity} is true: 207 | exact({_entity}, {_time}) 208 | else: 209 | if {_time} > 0: 210 | great({_entity}, "early", {_time}) 211 | else: 212 | great({_entity}, "late", {_time}) 213 | set {_canRemove} to true 214 | {_canRemove} is set 215 | if metadata value "notetype" of {_entity} is "double": 216 | if metadata value "linknote" of {_entity} is set: 217 | loop all interactions: 218 | uuid of loop-entity is metadata value "linknote" of {_entity} 219 | deleteNote(loop-entity) 220 | clear metadata value "linknote" of {_entity} 221 | exit this loop 222 | else: 223 | deleteNote({_entity}) 224 | else: 225 | deleteNote({_entity}) 226 | 227 | function deleteNote(entity: entity): 228 | set {_uuid} to uuid of {_entity} 229 | set {_linkuuid} to metadata value "linkuuid" of {_entity} 230 | metadata value "linkuuid" of {_entity} is set 231 | loop all block displays: 232 | if uuid of loop-entity is {_linkuuid}: 233 | delete loop-entity 234 | if metadata value "note1" of loop-entity is {_uuid}: 235 | delete loop-entity 236 | if metadata value "note2" of loop-entity is {_uuid}: 237 | delete loop-entity 238 | loop all interactions: 239 | loop-entity is {_entity} 240 | delete loop-entity 241 | wait 1 tick 242 | loop all text displays: 243 | if metadata value "belongsto" of loop-entity is {_uuid}: 244 | #broadcast "deleted %loop-entity%" 245 | delete loop-entity 246 | if metadata value "linkbind" of loop-entity is {_linkuuid}: 247 | #broadcast "deleted %loop-entity%" 248 | delete loop-entity 249 | 250 | function checkIfTurned(entity: entity): 251 | exact({_entity}, 0) 252 | set {_face} to metadata value "face" of {_entity} 253 | set {_turn} to metadata value "turn" of {_entity} 254 | {autoPlay::%uuid of {actor}%} is not "&a开" 255 | wait 0.5 seconds 256 | loop all players: 257 | {actor} is loop-player 258 | set {_yaw} to yaw of loop-player 259 | set {_yaw} to {_yaw} - 360 if {_yaw} > 180 260 | set {_yaw} to {_yaw} + 360 if {_yaw} < -180 261 | if {_face} is "w": 262 | if {_turn} is "left": 263 | if {_yaw} is between -135 and -45: 264 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 265 | else: 266 | miss() 267 | else if {_turn} is "right": 268 | if {_yaw} is between 45 and 135: 269 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 270 | else: 271 | miss() 272 | else if {_face} is "a": 273 | if {_turn} is "left": 274 | if {_yaw} is between 135 and 180: 275 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 276 | else if {_yaw} is between -180 and -135: 277 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 278 | else: 279 | miss() 280 | else if {_turn} is "right": 281 | if {_yaw} is between -45 and 45: 282 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 283 | else: 284 | miss() 285 | else if {_face} is "s": 286 | if {_turn} is "left": 287 | if {_yaw} is between 45 and 135: 288 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 289 | else: 290 | miss() 291 | else if {_turn} is "right": 292 | if {_yaw} is between -135 and -45: 293 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 294 | else: 295 | miss() 296 | else if {_face} is "d": 297 | if {_turn} is "right": 298 | if {_yaw} is between 135 and 180: 299 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 300 | else if {_yaw} is between -180 and -135: 301 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 302 | else: 303 | miss() 304 | else if {_turn} is "left": 305 | if {_yaw} is between -45 and 45: 306 | send title "" with subtitle "&aPass" to all players for 0.5 seconds with fade in 0.1 second and fade out 0.3 seconds 307 | else: 308 | miss() 309 | exit loop 310 | 311 | function deleteEntity(entity: entity): 312 | wait 1 tick 313 | loop all text displays: 314 | loop-entity is {_entity} 315 | delete loop-entity 316 | exit loop -------------------------------------------------------------------------------- /load.sk: -------------------------------------------------------------------------------- 1 | ######################################################## 2 | # # 3 | # 谱面读取部分 # 4 | # # 5 | ######################################################## 6 | 7 | on load: 8 | create section with {_id}, {_type}, {_time}, {_face}, {_x}, {_y}, {_x1}, {_y1}, {_x2}, {_y2}, {_turn}, {_section}, {_glowing}, {_tag} stored in {asyncNoteRegister}: 9 | if {editMode} is not true: 10 | set {loadedNotes::type::%{_id}%} to {_type} 11 | set {loadedNotes::time::%{_id}%} to {_time} 12 | set {loadedNotes::face::%{_id}%} to {_face} 13 | set {loadedNotes::x::%{_id}%} to {_x} 14 | set {loadedNotes::y::%{_id}%} to {_y} 15 | set {loadedNotes::x1::%{_id}%} to {_x1} 16 | set {loadedNotes::y1::%{_id}%} to {_y1} 17 | set {loadedNotes::x2::%{_id}%} to {_x2} 18 | set {loadedNotes::y2::%{_id}%} to {_y2} 19 | set {loadedNotes::turn::%{_id}%} to {_turn} 20 | set {loadedNotes::section::%{_id}%} to {_section} 21 | set {loadedNotes::glowing::%{_id}%} to {_glowing} 22 | set {loadedNotes::tag::%{_id}%} to {_tag} 23 | else: 24 | set {_uuid} to random uuid 25 | if {_type} is not "double": 26 | set {_loc} to location({_x} + 0.5, {_y} + 0.5, 4, world "world", 0, 0) 27 | if {_turn} is "right": 28 | set {editorSave::type::%{_uuid}%} to "flickR" 29 | else if {_turn} is "left": 30 | set {editorSave::type::%{_uuid}%} to "flickL" 31 | else: 32 | set {editorSave::type::%{_uuid}%} to {_type} 33 | set {editorSave::loc::%{_uuid}%} to location(0.5, 0.5, 4, world "world", 0, 0) if {editorSave::type::%{_uuid}%} is "flickR" or "flickL" or "execution" 34 | set {editorSave::time::%{_uuid}%} to {_time} if {_time} is set 35 | set {editorSave::loc::%{_uuid}%} to {_loc} if {_loc} is set 36 | set {editorSave::face::%{_uuid}%} to {_face} if {_face} is set 37 | set {editorSave::turn::%{_uuid}%} to {_turn} if {_turn} is set 38 | set {editorSave::section::%{_uuid}%} to "暂不支持" if {_section} is set 39 | set {editorSave::glowing::%{_uuid}%} to {_glowing} if {_glowing} is set 40 | set {editorSave::tag::%{_uuid}%} to {_tag} if {_tag} is set 41 | else: 42 | set {_loc1} to location({_x1} + 0.5, {_y1} + 0.5, 4, world "world", 0, 0) 43 | set {_loc2} to location({_x2} + 0.5, {_y2} + 0.5, 4, world "world", 0, 0) 44 | set {editorSave::type::%{_uuid}%} to {_type} if {_type} is set 45 | set {editorSave::time::%{_uuid}%} to {_time} if {_time} is set 46 | set {editorSave::loc::%{_uuid}%} to {_loc1} if {_loc1} is set 47 | set {editorSave::face::%{_uuid}%} to {_face} if {_face} is set 48 | set {editorSave::turn::%{_uuid}%} to {_turn} if {_turn} is set 49 | set {editorSave::section::%{_uuid}%} to "暂不支持" if {_section} is set 50 | set {editorSave::glowing::%{_uuid}%} to {_glowing} if {_glowing} is set 51 | set {editorSave::tag::%{_uuid}%} to {_tag} if {_tag} is set 52 | set {_uuid2} to random uuid 53 | set {editorSave::type::%{_uuid2}%} to {_type} if {_type} is set 54 | set {editorSave::time::%{_uuid2}%} to {_time} if {_time} is set 55 | set {editorSave::loc::%{_uuid2}%} to {_loc2} if {_loc2} is set 56 | set {editorSave::face::%{_uuid2}%} to {_face} if {_face} is set 57 | set {editorSave::turn::%{_uuid2}%} to {_turn} if {_turn} is set 58 | set {editorSave::section::%{_uuid2}%} to "暂不支持" if {_section} is set 59 | set {editorSave::glowing::%{_uuid2}%} to {_glowing} if {_glowing} is set 60 | set {editorSave::tag::%{_uuid2}%} to {_tag} if {_tag} is set 61 | 62 | 63 | 64 | function execution(time: number, section: section): 65 | add 1 to {noteID} 66 | set {_type} to "execution" 67 | run section {asyncNoteRegister} async with {noteID}, {_type}, {_time}, "empty", "empty", "empty", "empty", "empty", "empty", "empty", "empty", {_section}, "empty", "empty" 68 | 69 | function tap(time: number, face: text, x: number, y: number, glowing: boolean, tag: text): 70 | add 1 to {maxNote} 71 | add 1 to {noteID} 72 | set {_type} to "tap" 73 | run section {asyncNoteRegister} async with {noteID}, {_type}, {_time}, {_face}, {_x}, {_y}, "empty", "empty", "empty", "empty", "empty", "empty", {_glowing}, {_tag} 74 | 75 | function drag(time: number, face: text, x: number, y: number, glowing: boolean, tag: text): 76 | add 1 to {maxNote} 77 | add 1 to {noteID} 78 | set {_type} to "drag" 79 | run section {asyncNoteRegister} async with {noteID}, {_type}, {_time}, {_face}, {_x}, {_y}, "empty", "empty", "empty", "empty", "empty", "empty", {_glowing}, {_tag} 80 | 81 | function hold(time: number, face: text, x: number, y: number, glowing: boolean, tag: text): 82 | add 1 to {noteID} 83 | set {_type} to "hold" 84 | run section {asyncNoteRegister} async with {noteID}, {_type}, {_time}, {_face}, {_x}, {_y}, "empty", "empty", "empty", "empty", "empty", "empty", {_glowing}, {_tag} 85 | 86 | function flick(time: number, face: text, turn: text, glowing: boolean, tag: text): 87 | add 1 to {maxNote} 88 | add 1 to {noteID} 89 | set {_type} to "flick" 90 | run section {asyncNoteRegister} async with {noteID}, {_type}, {_time}, {_face}, "empty", "empty", "empty", "empty", "empty", "empty", {_turn}, "empty", {_glowing}, {_tag} 91 | 92 | function double(time: number, face: text, x1: number, y1: number, x2: number, y2: number, glowing: boolean, tag: text): 93 | add 2 to {maxNote} 94 | add 1 to {noteID} 95 | set {_type} to "double" 96 | run section {asyncNoteRegister} async with {noteID}, {_type}, {_time}, {_face}, "empty", "empty", {_x1}, {_y1}, {_x2}, {_y2}, "empty", "empty", {_glowing}, {_tag} 97 | 98 | function drawTap(face: text, x: number, y: number, z: number, glowing: boolean, tag: text): 99 | set {_x1} to {_x}+0.5 100 | set {_y1} to {_y}-0.5 101 | set {_z1} to {_z}+0.5 102 | if {_face} is "w": 103 | set {_loc1} to location({_x}, {_y}, {_z}, world "world", 0, 0) 104 | set {_loc2} to location({_x1}, {_y1}, {_z1}, world "world", 0, 0) 105 | if {_face} is "a": 106 | remove 1 from {_x1} 107 | set {_loc1} to location({_z}, {_y}, -1*{_x}, world "world", 90, 0) 108 | set {_loc2} to location({_z1}, {_y1}, -1*{_x1}, world "world", 90, 0) 109 | if {_face} is "s": 110 | remove 1 from {_x1} 111 | remove 1 from {_z1} 112 | set {_loc1} to location(-1*{_x}+1, {_y}, -1*{_z}+1, world "world", 180, 0) 113 | set {_loc2} to location(-1*{_x1}, {_y1}, -1*{_z1}, world "world", 180, 0) 114 | if {_face} is "d": 115 | remove 1 from {_z1} 116 | set {_loc1} to location(-1*{_z}+1, {_y}, {_x}+1, world "world", 270, 0) 117 | set {_loc2} to location(-1*{_z1}, {_y1}, {_x1}, world "world", 270, 0) 118 | summon block display at {_loc1}: 119 | set display interpolation start of entity to 0 120 | set display interpolation duration of entity to 100 121 | set display block data of entity to light_blue_concrete 122 | set display scale of entity to vector(1,1,0.5*{speed::%uuid of {actor}%}) 123 | set metadata value "tag" of entity to {_tag} 124 | set {_uuid} to uuid of entity 125 | if {_glowing} is true: 126 | set glowing of entity to true 127 | set display glow color override of entity to bukkitColor(0,50,255,255) 128 | set {_e} to entity 129 | 130 | summon interaction at {_loc2}: 131 | set interaction height of entity to 2 132 | set interaction width of entity to 2 133 | set metadata value "notetype" of entity to "tap" 134 | set metadata value "face" of entity to "%{_face}%" 135 | set metadata value "linkuuid" of entity to "%{_uuid}%" #击中音符时通过uuid将对应的block display销毁 136 | set metadata value "tag" of entity to {_tag} 137 | if {_glowing} is true: 138 | set metadata value "glowing" of entity to true 139 | 140 | wait 2 ticks 141 | set display brightness of {_e} to displayBrightness(15,15) 142 | set display translation of {_e} to vector(0,0,-100*{speed::%uuid of {actor}%}) if {_face} is "w" or "s" 143 | set display translation of {_e} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "a" or "d" 144 | 145 | function drawHold(face: text, x: number, y: number, z: number, glowing: boolean, tag: text): 146 | set {_x1} to {_x}+0.5 147 | set {_y1} to {_y}-0.5+20 148 | set {_z1} to {_z}+1 149 | if {_face} is "w": 150 | set {_loc1} to location({_x}, {_y}, {_z}+0.1, world "world", 0, 0) 151 | set {_loc2} to location({_x1}, {_y1}, {_z1}, world "world", 0, 0) 152 | if {_face} is "a": 153 | remove 1 from {_x1} 154 | set {_loc1} to location({_z}+0.1, {_y}, -1*{_x}+1, world "world", -90, 0) 155 | set {_loc2} to location({_z1}, {_y1}, -1*{_x1}, world "world", -90, 0) 156 | if {_face} is "s": 157 | remove 1 from {_x1} 158 | remove 1 from {_z1} 159 | set {_loc1} to location(-1*{_x}+1, {_y}, -1*{_z}+0.9, world "world", 180, 0) 160 | set {_loc2} to location(-1*{_x1}, {_y1}, -1*{_z1}, world "world", 180, 0) 161 | if {_face} is "d": 162 | remove 1 from {_z1} 163 | set {_loc1} to location(-1*{_z}+0.9, {_y}, {_x}, world "world", 90, 0) 164 | set {_loc2} to location(-1*{_z1}, {_y1}, {_x1}, world "world", 90, 0) 165 | summon block display at {_loc1}: 166 | set display interpolation start of entity to 0 167 | set display interpolation duration of entity to 100 168 | set display block data of entity to white_concrete 169 | set display scale of entity to vector(1,1,3*{speed::%uuid of {actor}%}) 170 | set metadata value "tag" of entity to {_tag} 171 | set {_uuid} to uuid of entity 172 | if {_glowing} is true: 173 | set glowing of entity to true 174 | set display glow color override of entity to bukkitColor(255,255,255,255) 175 | set {_e} to entity 176 | 177 | summon interaction at {_loc2}: 178 | set interaction height of entity to 2 179 | set interaction width of entity to 2 180 | set metadata value "notetype" of entity to "hold" 181 | set metadata value "face" of entity to "%{_face}%" 182 | set metadata value "linkuuid" of entity to "%{_uuid}%" #击中音符时通过uuid将对应的block display销毁 183 | set metadata value "tag" of entity to {_tag} 184 | if {_glowing} is true: 185 | set metadata value "glowing" of entity to true 186 | 187 | wait 2 ticks 188 | set display brightness of {_e} to displayBrightness(15,15) 189 | set display translation of {_e} to vector(0,0,-100*{speed::%uuid of {actor}%}) 190 | 191 | function drawDrag(face: text, x: number, y: number, z: number, glowing: boolean, tag: text): 192 | set {_x1} to {_x}+0.5 193 | set {_y1} to {_y}-0.5 194 | set {_z1} to {_z}+1 195 | if {_face} is "w": 196 | set {_loc1} to location({_x}, {_y}, {_z}, world "world", 0, 0) 197 | set {_loc2} to location({_x1}, {_y1}, {_z1}, world "world", 0, 0) 198 | if {_face} is "a": 199 | remove 1 from {_x1} 200 | set {_loc1} to location({_z}, {_y}, -1*{_x}, world "world", 90, 0) 201 | set {_loc2} to location({_z1}, {_y1}, -1*{_x1}, world "world", 90, 0) 202 | if {_face} is "s": 203 | remove 1 from {_x1} 204 | remove 1 from {_z1} 205 | set {_loc1} to location(-1*{_x}+1, {_y}, -1*{_z}+1, world "world", 180, 0) 206 | set {_loc2} to location(-1*{_x1}, {_y1}, -1*{_z1}, world "world", 180, 0) 207 | if {_face} is "d": 208 | remove 1 from {_z1} 209 | set {_loc1} to location(-1*{_z}+1, {_y}, {_x}+1, world "world", 270, 0) 210 | set {_loc2} to location(-1*{_z1}, {_y1}, {_x1}, world "world", 270, 0) 211 | summon block display at {_loc1}: 212 | set display interpolation start of entity to 0 213 | set display interpolation duration of entity to 100 214 | set display block data of entity to yellow_concrete 215 | set display scale of entity to vector(1,1,0.5*{speed::%uuid of {actor}%}) 216 | set metadata value "tag" of entity to {_tag} 217 | set {_uuid} to uuid of entity 218 | if {_glowing} is true: 219 | set glowing of entity to true 220 | set display glow color override of entity to bukkitColor(255,255,235,42) 221 | set {_e} to entity 222 | 223 | summon interaction at {_loc2}: 224 | set interaction height of entity to 2 225 | set interaction width of entity to 2 226 | set metadata value "notetype" of entity to "drag" 227 | set metadata value "face" of entity to "%{_face}%" 228 | set metadata value "linkuuid" of entity to "%{_uuid}%" #击中音符时通过uuid将对应的block display销毁 229 | set metadata value "tag" of entity to {_tag} 230 | if {_glowing} is true: 231 | set metadata value "glowing" of entity to true 232 | 233 | wait 2 ticks 234 | set display brightness of {_e} to displayBrightness(15,15) 235 | set display translation of {_e} to vector(0,0,-100*{speed::%uuid of {actor}%}) if {_face} is "w" or "s" 236 | set display translation of {_e} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "a" or "d" 237 | 238 | function drawFlick(face: text, z: number, turn: text, glowing: boolean, tag: text): 239 | set {_x} to 0 240 | set {_y} to 0 241 | set {_z} to {_z}-0.5 242 | set {_x1} to {_x}+0.5 243 | set {_y1} to 20 244 | set {_x2} to -2 245 | set {_y2} to -2 246 | set {_z1} to {_z}+1 247 | if {_face} is "w": 248 | set {_loc1} to location({_x2}, {_y2}, {_z}, world "world", 0, 0) 249 | set {_loc2} to location({_x1}, {_y1}, {_z1}, world "world", 0, 0) 250 | set {_loc3} to location({_x}+0.75, {_y}-2.75, {_z}+0.4, world "world", 180, 0) 251 | if {_face} is "a": 252 | remove 1 from {_x1} 253 | set {_loc1} to location({_z}+1, {_y2}, -1*{_x2}-4, world "world", 90, 0) 254 | set {_loc2} to location({_z1}, {_y1}, -1*{_x1}, world "world", 90, 0) 255 | set {_loc3} to location({_z}+0.4, {_y}-2.75, -1*{_x}+0.25, world "world", 90, 0) 256 | if {_face} is "s": 257 | remove 1 from {_x1} 258 | remove 1 from {_z1} 259 | set {_loc1} to location(-1*{_x2}+1, {_y2}, -1*{_z}+1, world "world", 180, 0) 260 | set {_loc2} to location(-1*{_x1}, {_y1}, -1*{_z1}, world "world", 180, 0) 261 | set {_loc3} to location(-1*{_x}+0.25, {_y}-2.75, -1*{_z}+0.6, world "world", 0, 0) 262 | if {_face} is "d": 263 | remove 1 from {_z1} 264 | set {_loc1} to location(-1*{_z}, {_y2}, {_x2}+5, world "world", 270, 0) 265 | set {_loc2} to location(-1*{_z1}, {_y1}, {_x1}, world "world", 270, 0) 266 | set {_loc3} to location(-1*{_z}+0.6, {_y}-2.75, {_x}+0.75, world "world", 270, 0) 267 | summon block display at {_loc1}: 268 | set display interpolation start of entity to 0 269 | set display interpolation duration of entity to 100 270 | set display block data of entity to white_stained_glass_pane[east=true,north=false,south=false,waterlogged=false,west=true] 271 | set display scale of entity to vector(5,5,1) 272 | set metadata value "tag" of entity to {_tag} 273 | set {_uuid} to uuid of entity 274 | if {_glowing} is true: 275 | set glowing of entity to true 276 | set {_e1} to entity 277 | 278 | if {_turn} is "left": 279 | summon text display at {_loc3}: 280 | set display interpolation start of entity to 0 281 | set display interpolation duration of entity to 100 282 | set display text of the entity to "§f←" 283 | set display scale of entity to vector(20,20,0) 284 | set display text background color of the entity to bukkitColor(0,0,0,0) 285 | set metadata value "linkbind" of entity to {_uuid} 286 | set {_e2} to entity 287 | 288 | if {_turn} is "right": 289 | summon text display at {_loc3}: 290 | set display interpolation start of entity to 0 291 | set display interpolation duration of entity to 100 292 | set display text of the entity to "§f→" 293 | set display scale of entity to vector(20,20,0) 294 | set display text background color of the entity to bukkitColor(0,0,0,0) 295 | set metadata value "linkbind" of entity to {_uuid} 296 | set {_e3} to entity 297 | 298 | summon interaction at {_loc2}: 299 | set interaction height of entity to 2 300 | set interaction width of entity to 2 301 | set metadata value "notetype" of entity to "flick" 302 | set metadata value "face" of entity to "%{_face}%" 303 | set metadata value "turn" of entity to "%{_turn}%" 304 | set metadata value "linkuuid" of entity to "%{_uuid}%" #击中音符时通过uuid将对应的block display销毁 305 | set metadata value "tag" of entity to {_tag} 306 | if {_glowing} is true: 307 | set metadata value "glowing" of entity to true 308 | 309 | wait 2 ticks 310 | set display brightness of {_e1} to displayBrightness(15,15) 311 | set display brightness of {_e2} to displayBrightness(15,15) 312 | set display brightness of {_e3} to displayBrightness(15,15) 313 | set display translation of {_e1} to vector(0,0,-100*{speed::%uuid of {actor}%}) if {_face} is "w" or "s" 314 | set display translation of {_e2} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "w" or "s" 315 | set display translation of {_e3} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "w" or "s" 316 | set display translation of {_e1} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "a" or "d" 317 | set display translation of {_e2} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "a" or "d" 318 | set display translation of {_e3} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "a" or "d" 319 | 320 | function drawDouble(face: text, xa: number, ya: number, za: number, xb: number, yb: number, zb: number, glowing: boolean, tag: text): 321 | if {_xa} < {_xb}: 322 | set {_t1} to {_xa} 323 | set {_t2} to {_ya} 324 | set {_t3} to {_za} 325 | set {_xa} to {_xb} 326 | set {_ya} to {_yb} 327 | set {_za} to {_zb} 328 | set {_xb} to {_t1} 329 | set {_yb} to {_t2} 330 | set {_zb} to {_t3} 331 | set {_xa1} to {_xa}+0.5 332 | set {_ya1} to {_ya}-0.5 333 | set {_za1} to {_za}+1 334 | if {_face} is "w": 335 | set {_loc1} to location({_xa}, {_ya}, {_za}, world "world", 0, 0) 336 | set {_loc2} to location({_xa1}, {_ya1}, {_za1}, world "world", 0, 0) 337 | if {_face} is "a": 338 | remove 1 from {_xa1} 339 | set {_loc1} to location({_za}, {_ya}, -1*{_xa}, world "world", 90, 0) 340 | set {_loc2} to location({_za1}, {_ya1}, -1*{_xa1}, world "world", 90, 0) 341 | if {_face} is "s": 342 | remove 1 from {_xa1} 343 | remove 1 from {_za1} 344 | set {_loc1} to location(-1*{_xa}+1, {_ya}, -1*{_za}+1, world "world", 180, 0) 345 | set {_loc2} to location(-1*{_xa1}, {_ya1}, -1*{_za1}, world "world", 180, 0) 346 | if {_face} is "d": 347 | remove 1 from {_za1} 348 | set {_loc1} to location(-1*{_za}+1, {_ya}, {_xa}+1, world "world", 270, 0) 349 | set {_loc2} to location(-1*{_za1}, {_ya1}, {_xa1}, world "world", 270, 0) 350 | summon block display at {_loc1}: 351 | set display interpolation start of entity to 0 352 | set display interpolation duration of entity to 100 353 | set display block data of entity to orange_concrete 354 | set display scale of entity to vector(1,1,0.5*{speed::%uuid of {actor}%}) 355 | set metadata value "tag" of entity to {_tag} 356 | set {_uuid} to uuid of entity 357 | if {_glowing} is true: 358 | set glowing of entity to true 359 | set display glow color override of entity to bukkitColor(255,255,180,0) 360 | set {_e1} to entity 361 | 362 | summon interaction at {_loc2}: 363 | set interaction height of entity to 2 364 | set interaction width of entity to 2 365 | set metadata value "notetype" of entity to "double" 366 | set metadata value "face" of entity to "%{_face}%" 367 | set metadata value "linkuuid" of entity to "%{_uuid}%" #击中音符时通过uuid将对应的block display销毁 368 | set metadata value "tag" of entity to {_tag} 369 | set {_entity1} to entity 370 | set {_uuid1} to uuid of entity 371 | if {_glowing} is true: 372 | set metadata value "glowing" of entity to true 373 | 374 | set {_xb1} to {_xb}+0.5 375 | set {_yb1} to {_yb}-0.5 376 | set {_zb1} to {_zb}+1 377 | if {_face} is "w": 378 | set {_loc3} to location({_xb}, {_yb}, {_zb}, world "world", 0, 0) 379 | set {_loc4} to location({_xb1}, {_yb1}, {_zb1}, world "world", 0, 0) 380 | if {_face} is "a": 381 | remove 1 from {_xb1} 382 | set {_loc3} to location({_zb}, {_yb}, -1*{_xb}, world "world", 90, 0) 383 | set {_loc4} to location({_zb1}, {_yb1}, -1*{_xb1}, world "world", 90, 0) 384 | if {_face} is "s": 385 | remove 1 from {_xb1} 386 | remove 1 from {_zb1} 387 | set {_loc3} to location(-1*{_xb}+1, {_yb}, -1*{_zb}+1, world "world", 180, 0) 388 | set {_loc4} to location(-1*{_xb1}, {_yb1}, -1*{_zb1}, world "world", 180, 0) 389 | if {_face} is "d": 390 | remove 1 from {_zb1} 391 | set {_loc3} to location(-1*{_zb}+1, {_yb}, {_xb}+1, world "world", 270, 0) 392 | set {_loc4} to location(-1*{_zb1}, {_yb1}, {_xb1}, world "world", 270, 0) 393 | summon block display at {_loc3}: 394 | set display interpolation start of entity to 0 395 | set display interpolation duration of entity to 100 396 | set display block data of entity to orange_concrete 397 | set display scale of entity to vector(1,1,0.5*{speed::%uuid of {actor}%}) 398 | set metadata value "tag" of entity to {_tag} 399 | set {_uuid} to uuid of entity 400 | if {_glowing} is true: 401 | set glowing of entity to true 402 | set display glow color override of entity to bukkitColor(255,255,180,0) 403 | set {_e2} to entity 404 | 405 | summon interaction at {_loc4}: 406 | set interaction height of entity to 2 407 | set interaction width of entity to 2 408 | set metadata value "notetype" of entity to "double" 409 | set metadata value "face" of entity to "%{_face}%" 410 | set metadata value "linkuuid" of entity to "%{_uuid}%" #击中音符时通过uuid将对应的block display销毁 411 | set metadata value "tag" of entity to {_tag} 412 | set {_entity2} to entity 413 | set {_uuid2} to uuid of entity 414 | if {_glowing} is true: 415 | set metadata value "glowing" of entity to true 416 | 417 | set metadata value "linknote" of {_entity1} to "%{_uuid2}%" 418 | set metadata value "linknote" of {_entity2} to "%{_uuid1}%" #击中1时消除2,击中2时消除1 419 | set {_d1} to distance between {_loc1} and {_loc3} 420 | set {_d3} to distance between {_loc1} and {_loc3} 421 | set {_d2} to abs({_xa} - {_xb}) 422 | set {_acos} to acos({_d2}/{_d1}) - 90 423 | #broadcast "distance: %{_d1}%" 424 | #broadcast "angle: %{_acos}%" 425 | if {_ya} <= {_yb}: 426 | {_loc2}.add(0, 1, -0.8) if {_face} is "w" 427 | {_loc2}.add(0, 1, 0.8) if {_face} is "s" 428 | {_loc2}.add(-0.8, 1, 0) if {_face} is "a" 429 | {_loc2}.add(0.8, 1, 0) if {_face} is "d" 430 | summon block display at {_loc2}: 431 | set display interpolation start of entity to 0 432 | set display interpolation duration of entity to 100 433 | set display block data of entity to white_concrete 434 | set display scale of entity to vector(0.1,{_d3},0.1) 435 | set metadata value "note1" of entity to {_uuid2} 436 | set metadata value "note2" of entity to {_uuid1} 437 | set metadata value "face" of entity to {_face} 438 | set metadata value "tag" of entity to {_tag} 439 | set pitch of entity to {_acos} 440 | set yaw of entity to -90 if {_face} is "w" 441 | set yaw of entity to -180 if {_face} is "a" 442 | set yaw of entity to 90 if {_face} is "s" 443 | set yaw of entity to 0 if {_face} is "d" 444 | if {_glowing} is true: 445 | set glowing of entity to true 446 | set display glow color override of entity to bukkitColor(255,255,255,255) 447 | set {_e3} to entity 448 | 449 | else: 450 | {_loc4}.add(0, 1, -0.9) if {_face} is "w" 451 | {_loc4}.add(0, 1, 0.9) if {_face} is "s" 452 | {_loc4}.add(-0.9, 1, 0) if {_face} is "a" 453 | {_loc4}.add(0.9, 1, 0) if {_face} is "d" 454 | summon block display at {_loc4}: 455 | set display interpolation start of entity to 0 456 | set display interpolation duration of entity to 100 457 | set display block data of entity to white_concrete 458 | set display scale of entity to vector(0.1,{_d3},0.1) 459 | set metadata value "note1" of entity to {_uuid2} 460 | set metadata value "note2" of entity to {_uuid1} 461 | set metadata value "face" of entity to {_face} 462 | set metadata value "tag" of entity to {_tag} 463 | set pitch of entity to {_acos} 464 | set yaw of entity to 90 if {_face} is "w" 465 | set yaw of entity to 0 if {_face} is "a" 466 | set yaw of entity to -90 if {_face} is "s" 467 | set yaw of entity to -180 if {_face} is "d" 468 | if {_glowing} is true: 469 | set glowing of entity to true 470 | set display glow color override of entity to bukkitColor(255,255,255,255) 471 | set {_e4} to entity 472 | 473 | wait 2 ticks 474 | set display brightness of {_e1} to displayBrightness(15,15) 475 | set display brightness of {_e2} to displayBrightness(15,15) 476 | set display brightness of {_e3} to displayBrightness(15,15) 477 | set display brightness of {_e4} to displayBrightness(15,15) 478 | set display translation of {_e1} to vector(0,0,-100*{speed::%uuid of {actor}%}) if {_face} is "w" or "s" 479 | set display translation of {_e2} to vector(0,0,-100*{speed::%uuid of {actor}%}) if {_face} is "w" or "s" 480 | set display translation of {_e3} to vector(100*{speed::%uuid of {actor}%}, 0, 0) if {_face} is "w" or "s" 481 | set display translation of {_e4} to vector(-100*{speed::%uuid of {actor}%}, 0, 0) if {_face} is "w" or "s" 482 | set display translation of {_e1} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "a" or "d" 483 | set display translation of {_e2} to vector(0,0,100*{speed::%uuid of {actor}%}) if {_face} is "a" or "d" 484 | set display translation of {_e3} to vector(100*{speed::%uuid of {actor}%}, 0, 0) if {_face} is "a" or "d" 485 | set display translation of {_e4} to vector(-100*{speed::%uuid of {actor}%}, 0, 0) if {_face} is "a" or "d" 486 | -------------------------------------------------------------------------------- /result.sk: -------------------------------------------------------------------------------- 1 | ######################################################## 2 | # # 3 | # 游戏结算 # 4 | # # 5 | ######################################################## 6 | 7 | function end(): 8 | clear {actor}'s inventory 9 | if {combo} = {maxNote}: 10 | if {statistics::exact} = {maxNote}: 11 | perfectPerformance() 12 | else: 13 | fullCombo() 14 | set {_base} to 0 15 | wait 30 ticks 16 | set level progress of all players to 0 17 | {actor} is set 18 | loop 30 times: 19 | {actor} is set 20 | add 0.01 to {_base} 21 | loop all text displays: 22 | set {_loc} to location of loop-entity 23 | if metadata value "score" of loop-entity is true: 24 | {_loc}.add(0, {_base}, 0) 25 | if metadata value "level" of loop-entity is true: 26 | {_loc}.add(0, {_base}, 0) 27 | if metadata value "combo" of loop-entity is true: 28 | set {_base2} to {_base}*5 29 | {_loc}.add(0, {_base2}, 0) 30 | if metadata value "perfect" of loop-entity is true: 31 | set {_base2} to {_base}*5 32 | {_loc}.add(0, {_base2}, 0) 33 | teleport loop-entity to {_loc} 34 | wait 1 tick 35 | {actor} is set 36 | delete all text displays 37 | wait 5 ticks 38 | if {autoPlay::%uuid of {actor}%} is not "&a开": 39 | {actor} is set 40 | result() 41 | result2() 42 | result3() 43 | result4() 44 | else: 45 | quitGame() 46 | 47 | function fullCombo(): 48 | set {_loc1} to location(0.5, 0.5, 10, world "world", -90, 90) 49 | summon text display at {_loc1}: 50 | set display interpolation delay of entity to 2 51 | set display translation of the entity to vector(0,-1.5,0) 52 | set display brightness of the entity to displayBrightness(15,15) 53 | set display right rotation of the entity to axisAngle(90 * (3.14 / 180), 0, 1, 0) 54 | set display text of the entity to "§bFull Combo" 55 | set display scale of entity to vector(40,40,40) 56 | set display text background color of the entity to bukkitColor(0,0,0,0) 57 | set metadata value "perfect" of the entity to true 58 | set display text opacity of the entity to 255 59 | set {_entity} to the entity 60 | set {_angle} to 90 61 | set {_del} to 22 62 | set {_size} to 40 63 | loop 30 times: 64 | set {_del} to {_del} * 0.8 65 | set {_size} to {_size} * 0.7 66 | remove {_del} from {_angle} 67 | set pitch of {_entity} to {_angle} 68 | set display scale of {_entity} to vector({_size}+5,{_size}+5,{_size}+5) 69 | set display translation of {_entity} to vector(0,-1.5*({_size}+5)*0.1,0) 70 | wait 1 tick 71 | 72 | function perfectPerformance(): 73 | set {_loc1} to location(0.5, 0.5, 10, world "world", -90, 90) 74 | summon text display at {_loc1}: 75 | set display interpolation delay of entity to 2 76 | set display translation of the entity to vector(0,-1.5,0) 77 | set display brightness of the entity to displayBrightness(15,15) 78 | set display right rotation of the entity to axisAngle(90 * (3.14 / 180), 0, 1, 0) 79 | set display text of the entity to "§ePerfect ", " Performance!" 80 | set display scale of entity to vector(40,40,40) 81 | set display text background color of the entity to bukkitColor(0,0,0,0) 82 | set metadata value "perfect" of the entity to true 83 | set display text opacity of the entity to 255 84 | set {_entity} to the entity 85 | set {_angle} to 90 86 | set {_del} to 22 87 | set {_size} to 40 88 | loop 30 times: 89 | set {_del} to {_del} * 0.8 90 | set {_size} to {_size} * 0.7 91 | remove {_del} from {_angle} 92 | set pitch of {_entity} to {_angle} 93 | set display scale of {_entity} to vector({_size}+5,{_size}+5,{_size}+5) 94 | set display translation of {_entity} to vector(0,-1.5*({_size}+5)*0.1,0) 95 | wait 1 tick 96 | 97 | function result(): 98 | play sound "entity.player.levelup" to all players 99 | add {statistics::exactHold} to {score} 100 | if {best::%uuid of {actor}%::%{playing}%} is not set: 101 | set {best::%uuid of {actor}%::%{playing}%} to {score} 102 | send title "&e初次游玩!" with subtitle "&e &e" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 103 | else if {score} > {best::%uuid of {actor}%::%{playing}%}: 104 | set {best::%uuid of {actor}%::%{playing}%} to {score} 105 | send title "&e新记录!" with subtitle "&e &e" to all players for 1 second with fade in 0.5 seconds and fade out 0.5 seconds 106 | 107 | set {_loc1} to location(-3.5, 0.5, 12, world "world", 180, 0) 108 | set {_loc2} to location(5.5, 0.5, 12, world "world", 180, 0) 109 | summon text display at {_loc1}: 110 | set display translation of the entity to vector(-0.2,-1,0) 111 | set display brightness of the entity to displayBrightness(15,15) 112 | set display text of the entity to "§e" 113 | set display scale of entity to vector(10,10,10) 114 | set display text background color of the entity to bukkitColor(0,0,0,0) 115 | set metadata value "result" of the entity to true 116 | set display text opacity of the entity to 255 117 | easingMotion(entity, {_loc1}, {_loc2}, "cirb", "1", "1", "1", "1", 25) 118 | set {_entity} to the entity 119 | loop 60 times: 120 | wait 1 tick 121 | set display text of {_entity} to getRank({displayScore}) 122 | 123 | function result2(): 124 | set {_loc1} to location(-7, 2, 10, world "world", 180, 0) 125 | set {_loc2} to location(-1.5, 2, 10, world "world", 180, 0) 126 | summon text display at {_loc1}: 127 | set display translation of the entity to vector(0,-1.5,0) 128 | set display brightness of the entity to displayBrightness(15,15) 129 | set display text of the entity to "§f" 130 | set display scale of entity to vector(8,8,8) 131 | set display text background color of the entity to bukkitColor(0,0,0,0) 132 | set metadata value "result" of the entity to true 133 | set display text opacity of the entity to 255 134 | easingMotion(entity, {_loc1}, {_loc2}, "cirb", "1", "1", "1", "1", 30) 135 | set {_entity} to the entity 136 | set {_tempScore2} to {score} 137 | set {_tempScore} to {_tempScore2} * 0.75 138 | loop 60 times: 139 | set {_tempScore} to 0.75 * {_tempScore} 140 | set {displayScore} to round({_tempScore2} - {_tempScore}) 141 | set {_color} to "§f" 142 | if {displayScore} >= 1000000: 143 | set display text of {_entity} to "%{_color}%%{displayScore}%" 144 | else if {displayScore} >= 100000: 145 | set display text of {_entity} to "§80%{_color}%%{displayScore}%" 146 | else if {displayScore} >= 10000: 147 | set display text of {_entity} to "§800%{_color}%%{displayScore}%" 148 | else if {displayScore} >= 1000: 149 | set display text of {_entity} to "§8000%{_color}%%{displayScore}%" 150 | else if {displayScore} >= 100: 151 | set display text of {_entity} to "§80000%{_color}%%{displayScore}%" 152 | else if {displayScore} >= 10: 153 | set display text of {_entity} to "§800000%{_color}%%{displayScore}%" 154 | else: 155 | set display text of {_entity} to "§8000000%{_color}%%{displayScore}%" 156 | wait 1 tick 157 | 158 | function result3(): 159 | set {_loc1} to location(-5.5, 2, 10, world "world", 180, 0) 160 | set {_loc2} to location(0, 2, 10, world "world", 180, 0) 161 | summon text display at {_loc1}: 162 | set display translation of the entity to vector(0,-4.5,0) 163 | set display brightness of the entity to displayBrightness(15,15) 164 | set display line width of the entity to 400 165 | set display text of the entity to "&bExact &f%{statistics::exact}%&e(+%{statistics::exacthold}%)%nl%&eJust &f%{statistics::just}%%nl%&4Miss &c%{statistics::miss}%", "", "&7输入 [/reset] 重置游戏" 166 | set display scale of entity to vector(2,2,2) 167 | set display text background color of the entity to bukkitColor(0,0,0,0) 168 | set metadata value "result" of the entity to true 169 | set display text alignment of the entity to left aligned 170 | set display text opacity of the entity to 14 171 | easingMotion(entity, {_loc1}, {_loc2}, "cirb", "1", "1", "1", "1", 30) 172 | set {_entity} to the entity 173 | loop 30 times: 174 | add 255/10 to {_alpha} 175 | set {_alpha} to 255 if {_alpha} > 255 176 | set display text opacity of {_entity} to {_alpha} 177 | wait 1 tick 178 | 179 | function result4(): 180 | set {_length} to length of "&f%{song}%&f %{level}%" * 0.12 181 | set {_loc1} to location(-2.9 - {_length}, 3, 10, world "world", 180, 0) 182 | set {_loc2} to location(2.6 - {_length}, 3, 10, world "world", 180, 0) 183 | summon text display at {_loc1}: 184 | set display brightness of the entity to displayBrightness(15,15) 185 | set display line width of the entity to 400 186 | set display text of the entity to "&f%{song}%&f %{level}%" 187 | set display scale of entity to vector(3,3,3) 188 | set display text background color of the entity to bukkitColor(0,0,0,0) 189 | set metadata value "result" of the entity to true 190 | set display text opacity of the entity to 255 191 | set display text alignment of the entity to left aligned 192 | easingMotion(entity, {_loc1}, {_loc2}, "cirb", "1", "1", "1", "1", 30) 193 | 194 | --------------------------------------------------------------------------------