Added an error message to Script Editor for missing usescript references

+ Script save file functions now return true when everything was saved correctly, false otherwise
+ Return value of the script save functions is checked to determine whether or not to mark current script file as changed
This commit is contained in:
AdAstra-LD
2022-08-30 00:07:38 +02:00
parent 00d05fa3d7
commit 56b6473fcb
3 changed files with 22 additions and 13 deletions

View File

@@ -6876,9 +6876,10 @@ namespace DSPRE {
} else if (userEdited.fileID == int.MaxValue) {
MessageBox.Show("This " + typeof(ScriptFile).Name + " is couldn't be saved since it's empty.", "Can't save", MessageBoxButtons.OK, MessageBoxIcon.Warning);
} else { //check if ScriptFile instance was created succesfully
userEdited.SaveToFileDefaultDir(selectScriptFileComboBox.SelectedIndex);
currentScriptFile = userEdited;
ScriptEditorSetClean();
if (userEdited.SaveToFileDefaultDir(selectScriptFileComboBox.SelectedIndex)) {
currentScriptFile = userEdited;
ScriptEditorSetClean();
}
}
}
private void clearCurrentLevelScriptButton_Click(object sender, EventArgs e) {

View File

@@ -6,12 +6,12 @@ using static DSPRE.RomInfo;
namespace DSPRE.ROMFiles {
public abstract class RomFile {
public abstract byte[] ToByteArray();
public void SaveToFile(string path, bool showSuccessMessage = true) {
public bool SaveToFile(string path, bool showSuccessMessage = true) {
byte[] romFileToByteArray = ToByteArray();
if (romFileToByteArray is null) {
Console.WriteLine(GetType().Name + " couldn't be saved!");
return;
return false;
}
File.WriteAllBytes(path, romFileToByteArray);
@@ -19,10 +19,12 @@ namespace DSPRE.ROMFiles {
if (showSuccessMessage) {
MessageBox.Show(GetType().Name + " saved successfully!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
return true;
}
protected internal void SaveToFileDefaultDir(DirNames dir, int IDtoReplace, bool showSuccessMessage = true) {
protected internal bool SaveToFileDefaultDir(DirNames dir, int IDtoReplace, bool showSuccessMessage = true) {
string path = RomInfo.gameDirs[dir].unpackedDir + "\\" + IDtoReplace.ToString("D4");
this.SaveToFile(path, showSuccessMessage);
return this.SaveToFile(path, showSuccessMessage);
}
protected internal void SaveToFileExplorePath(string fileType, string fileExtension, string suggestedFileName, bool showSuccessMessage = true) {
fileExtension = "*." + fileExtension;

View File

@@ -700,6 +700,12 @@ namespace DSPRE.ROMFiles {
AddReference(ref refList, (ushort)currentCmd.id, parameterList, (int)writer.BaseStream.Position, currentFunction);
}
} else {
int functionUsescript = currentFunction.usedScript - 1;
if (functionUsescript >= scriptOffsets.Count) {
MessageBox.Show($"Function #{currentFunction.manualUserID} refers to Script {currentFunction.usedScript}, which does not exist.\n" +
$"This Script File can't be saved.", "Can't resolve UseScript reference", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
functionOffsets.Add(new ContainerReference() {
ID = currentFunction.manualUserID,
offsetInFile = scriptOffsets[currentFunction.usedScript - 1].offsetInFile
@@ -749,9 +755,9 @@ namespace DSPRE.ROMFiles {
if (refList[i].typeOfInvoked is containerTypes.Action) { //isApplyMovement
result = actionOffsets.Find(entry => entry.ID == refList[i].invokedID);
if (result.Equals((0, 0)))
if (result.Equals(default(ContainerReference))) {
undeclaredActions.Add(refList[i].invokedID);
else {
} else {
int relativeOffset = (int)(result.offsetInFile - refList[i].invokedAt - 4);
writer.Write(relativeOffset);
unreferencedActions.Remove(refList[i].invokedID);
@@ -759,9 +765,9 @@ namespace DSPRE.ROMFiles {
} else {
result = functionOffsets.Find(entry => entry.ID == refList[i].invokedID);
if (result.Equals((0, 0)))
if (result.Equals(default(ContainerReference))) {
undeclaredFuncs.Add(refList[i].invokedID);
else {
} else {
int relativeOffset = (int)(result.offsetInFile - refList[i].invokedAt - 4);
writer.Write(relativeOffset);
@@ -871,8 +877,8 @@ namespace DSPRE.ROMFiles {
return false;
}
public void SaveToFileDefaultDir(int IDtoReplace, bool showSuccessMessage = true) {
SaveToFileDefaultDir(DirNames.scripts, IDtoReplace, showSuccessMessage);
public bool SaveToFileDefaultDir(int IDtoReplace, bool showSuccessMessage = true) {
return SaveToFileDefaultDir(DirNames.scripts, IDtoReplace, showSuccessMessage);
}
public void SaveToFileExplorePath(string suggestedFileName, bool blindmode) {
SaveFileDialog sf = new SaveFileDialog {