Fix VSliceParser crash

This commit is contained in:
Ralty
2025-08-10 08:25:52 +07:00
parent 970d294ea1
commit 978022dc0b
5 changed files with 9 additions and 5 deletions
+1
View File
@@ -98,6 +98,7 @@ class Chart {
data.setFieldDefault("needsVoices", true);
data.setFieldDefault("difficulties", []);
data.setFieldDefault("variants", []);
data.setFieldDefault("metas", []);
return data;
}
+1 -1
View File
@@ -183,7 +183,7 @@ class VSliceParser {
result.stepsPerBeat = firstTimeChange.d.getDefault(Flags.DEFAULT_STEPS_PER_BEAT);
result.displayName = songName;
result.difficulties = data.playData.difficulties.copy();
result.variants = data.playData.songVariations.copy();
if (data.playData.songVariations != null) result.variants = data.playData.songVariations.copy();
if (result.customValues == null) result.customValues = {};
result.customValues.artist = data.artist;
@@ -41,7 +41,7 @@ class CharterSelectionScreen extends EditorTreeMenuScreen {
for (d in s.difficulties) if (d != '') screen.add(makeChartOption(d, isVariant ? s.variant : null, s.name));
screen.add(new Separator());
if (s.variants != null && s.metas != null) for (v in s.variants) if (s.metas.get(v) != null) screen.add(makeVariationOption(s.metas.get(v)));
for (v in s.variants) if (s.metas.get(v) != null) screen.add(makeVariationOption(s.metas.get(v)));
#if sys
screen.insert(0, new NewOption(getID('newDifficulty'), getID('newDifficultyDesc'), () -> {
@@ -90,7 +90,7 @@ class CharterSelectionScreen extends EditorTreeMenuScreen {
return;
}
var songFolder:String = '${Paths.getAssetsRoot()}/songs/${creation.meta.name}';
var songFolder:String = '${Paths.getAssetsRoot()}/songs/${variant != null && curSong != null ? curSong.name : creation.meta.name}';
#if sys
// Make Directories
@@ -114,6 +114,7 @@ class CharterSelectionScreen extends EditorTreeMenuScreen {
if (variant != null && curSong != null) {
if (curSong.variants == null) curSong.variants = [];
if (!curSong.variants.contains(variant)) curSong.variants.push(variant);
curSong.metas.set(variant, creation.meta);
parent.tree.last().add(makeVariationOption(creation.meta));
@@ -245,7 +245,7 @@ class SongCreationScreen extends UISubstateWindow {
var pages = isImporting ? importPages : pages;
if (curPage == pages.length-1) {
saveSongInfo();
close();
if (subState == null) close();
} else {
curPage++;
refreshPages();
@@ -415,6 +415,7 @@ class SongCreationScreen extends UISubstateWindow {
#end
});
} catch (e:haxe.Exception) {
trace(e.stack, e.message);
openSubState(new UIWarningSubstate("Importing Song/Charts: Error!", e.details(), [
{label: "Ok", color: 0xFFFF0000, onClick: function(t) {}}
]));
@@ -464,6 +465,7 @@ class SongCreationScreen extends UISubstateWindow {
playerVocals: files.get('Voices-${playData.characters.playerVocals != null ? playData.characters.playerVocals[0] : playData.characters.player}.${Flags.SOUND_EXT}'),
oppVocals: files.get('Voices-${playData.characters.opponentVocals != null ? playData.characters.opponentVocals[0] : playData.characters.opponent}.${Flags.SOUND_EXT}'),
}, (songFolder:String) -> {
trace(songFolder);
#if sys
for (diff in diffCharts) CoolUtil.safeSaveFile('$songFolder/${getChartSavePath(meta, diff.diffName)}', Json.stringify(diff.chart, Flags.JSON_PRETTY_PRINT));
if (events != null) CoolUtil.safeSaveFile('$songFolder/events${meta.variant != null && meta.variant != "" ? "-" + meta.variant : ""}.json', Json.stringify({events: events}, Flags.JSON_PRETTY_PRINT));
@@ -20,7 +20,7 @@ class VariationCreationScreen extends SongCreationScreen {
cast(songNameTextBox.members[songNameTextBox.members.length - 1], UIText).text = translateMeta("variation");
cast(importIdTextBox.members[importIdTextBox.members.length - 1], UIText).applyMarkup(
translate("variation"),
translateMeta("variation"),
[new FlxTextFormatMarkerPair(new FlxTextFormat(0xFFAD1212), "$")]
);