Giter VIP home page Giter VIP logo

gtasa-savegame-editor's Introduction

GTA:SA Savegame Editor

Version Badge Windows macOS Linux Join the chat at Gitter GitHub Pages Badge

Even more badges...

License Badge Languages Badge Repo Size Badge Top Language Badge CodeQL

This is a modified/updated version of the software that can be found on paulinternet.nl.

This version contains the following features (additionally to the ones found in the original version):

  • requires Java >= 11
  • macOS specific fixes
  • support for German/european steam versions of the game
  • support for macOS Steam version of the game
  • support for Linux Steam version of the game (SteamPlay/Proton)
  • support for editing garages and cars in them
  • support for transferring savegames from Android
    • support for reading Android savegames without crashing is still in development
    • if you think you can help with this, please take a look at #4
  • notifications about new versions
  • different download options (additionally to .jar):
    • a .exe for windows
    • a .app (and .dmg) for macOS
    • a .deb for Debian/Ubuntu
    • a .rpm for Fedora/CentOS
  • support for theming

Downloading

Just go to the Releases page and download the file you need.

Building

To build the application:

$ mvn clean install -DskipTests=true

You should now have the following files inside the newly created savegame-editor/target folder:

  • gtasaveedit-[version]-jar-with-dependencies.jar
    • This is the main executable. You can run it with java -jar [jarfile].

Profiles

You can also build specific application formats. For example: mvn clean package -Pwindows will create a .exe file.

Available profiles:

  • macOS
    • builds a .dmg and .app file
  • deb
    • builds a .deb file
  • rpm
    • builds a .rpm file
  • windows
    • builds a .exe

gtasa-savegame-editor's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar gitter-badger avatar lfuelling avatar marcusadriano avatar tuxburner avatar vanogrid avatar yulez avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gtasa-savegame-editor's Issues

boat school vehicles don't spawn

after using the program to get the gold model of all the tests the boat vehicles don't seem to spawn couldn't test it on the driving school or flying school, you may work to specify how the vehicles should spawn across the map locations and which vehicle should spawn it would be great.

Savegame list not reloading when changing the savegame directory

The savegame list is not reloading when changing the savegame directory.

Steps to reproduce:

  1. Copy any savegame into any new directory
  2. Start the savegame editor
  3. Set the savegame directory to the new directory
  4. One of the following happens:
    • The savegame list will be empty (in case of the option being unset before)
    • The savegames from the previous folder will be shown

[garages] Filter available mods per car

The game crashes when loading a savegame with an invalid car/mod combination.

There should be a list available somewhere (internet/game config) which car can have which mods.

Application fails to start on Ubuntu

I always see this error why! ๐Ÿ˜ข
I tried 32 bit, 64 bit.

java.lang.reflect.InvocationTargetException
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1367)
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1342)
	at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1480)
	at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:22)
Caused by: java.lang.UnsatisfiedLinkError: /home/dev/Downloads/GTA SA Savegame Editor 3.2 - Linux 32-bit/libgluegen-rt.so: /home/dev/Downloads/GTA SA Savegame Editor 3.2 - Linux 32-bit/libgluegen-rt.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
	at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
	at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2442)
	at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
	at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2694)
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2659)
	at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
	at java.base/java.lang.System.loadLibrary(System.java:1873)
	at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:442)
	at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:59)
	at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:90)
	at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:328)
	at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:390)
	at com.jogamp.common.os.Platform.loadGlueGenRTImpl(Platform.java:251)
	at com.jogamp.common.os.Platform.access$000(Platform.java:57)
	at com.jogamp.common.os.Platform$1.run(Platform.java:186)
	at com.jogamp.common.os.Platform$1.run(Platform.java:183)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at com.jogamp.common.os.Platform.<clinit>(Platform.java:183)
	at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:82)
	at jogamp.opengl.ThreadingImpl$1.run(ThreadingImpl.java:90)
	at jogamp.opengl.ThreadingImpl$1.run(ThreadingImpl.java:74)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at jogamp.opengl.ThreadingImpl.<clinit>(ThreadingImpl.java:73)
	at javax.media.opengl.Threading.disableSingleThreading(Threading.java:138)
	at javax.media.j3d.JoglPipeline.initialize(JoglPipeline.java:117)
	at javax.media.j3d.Pipeline.createPipeline(Pipeline.java:89)
	at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:832)
	at javax.media.j3d.VirtualUniverse.<clinit>(VirtualUniverse.java:274)
	at javax.media.j3d.GroupRetained.<init>(GroupRetained.java:155)
	at javax.media.j3d.BranchGroupRetained.<init>(BranchGroupRetained.java:50)
	at javax.media.j3d.BranchGroup.createRetained(BranchGroup.java:71)
	at javax.media.j3d.SceneGraphObject.<init>(SceneGraphObject.java:114)
	at javax.media.j3d.Node.<init>(Node.java:172)
	at javax.media.j3d.Group.<init>(Group.java:549)
	at javax.media.j3d.BranchGroup.<init>(BranchGroup.java:63)
	at nl.paulinternet.gtasaveedit.view.cloth.ShapeViewer.<init>(ShapeViewer.java:47)
	at nl.paulinternet.gtasaveedit.view.pages.PageClothes.<init>(PageClothes.java:85)
	at nl.paulinternet.gtasaveedit.view.TabbedPane.<init>(TabbedPane.java:31)
	at nl.paulinternet.gtasaveedit.view.Window.createContent(Window.java:48)
	at nl.paulinternet.gtasaveedit.view.GUICreator.run(GUICreator.java:30)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:303)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
	at nl.paulinternet.gtasaveedit.view.EventQueueProxy.dispatchEvent(EventQueueProxy.java:12)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Game Crash at opening garage

In the last realese, the game crashes after editing any stuff with the editor. more precise when you try to open a garage with modified cars in it.
always 10/10

File format documentation

If someone gives me push access I'll upload the documentation from paulinternet.nl/sadoc. I'll just make a folder /doc and put it there.

The documentation contains one PHP file index.php. I think it would be useful if someone translates this to Javascript so the documentation can be viewed without a web server.

As soon as there is a URL on github that can be used to view the documentation, I'll remove the documentation from paulinternet.nl and make a redirect.

Fix bug in save menu

Apparently, if you load a game the save menu will be disabled until you delete a savegame. Even when there are free slots.

Change Buttons on About page

From the original author:

I think it would be better to let the first button on the about page point to Github. Since the Github page contains more than source code, most importantly the binary downloads, I would also name the button different.

Opening the Website doesn't work on Linux

Steps to reproduce

When I click the Original Website or View Source button, an alert box shows up with "Go to (website url)" instead of opening the website. (see Screenshot) But I guess these are Linux problems and so not so important. You could make the website in the about box selectable, so at least it's possible to copy-paste it.

Expected Behavior

The website should be opened in the standard Browser.

System

  • Debian Stretch (9.1)

Screenshots

about

NullPointerException on Windows

I'm sorry for asking such a basic question but I can't get the program to work at all. I had no problem using the old 32 bit version of this program from a couple years ago.

I tried downloading and the .jar and the .exe but they both gave the same error:
savegame error

I don't really understand the instructions as this is far beyond my competency with computers and I would just like to edit my savegame folder with the same ease as with the 2013-14 version of the program, it was much more user-friendly.

outdated .deb metadata

The .deb file is using outdated dependencies.

dpkg: dependency problems prevent configuration of gtasa-savegame-editor:
 gtasa-savegame-editor depends on openjdk-8-jre; however:
  Package openjdk-8-jre is not installed.

Show "About" Tab when using Windows/Linux

The about tab is currently hidden to make the application more consistent with macOS look and feel.

The tab should be displayed again when running on windows or linux.

Triggering "Zone Glitch Fix" leads to a NullPointerException

Hello There!
I just found a bug that makes problems occured. When i load "100% Complete savegame" then go to Fixes tab. I see that the zone glitch present status is "Yes" so i click "Fix zone glitch" then the problem that i talking about is occured. Here is the problem from java debug (i think) that i got:

 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at nl.paulinternet.gtasaveedit.model.MethodInvoker.handleEvent(MethodInvoker.java:39)
	at nl.paulinternet.gtasaveedit.model.event.ReportableEvent.lambda$report$0(ReportableEvent.java:19)
	at java.util.ArrayList.forEach(Unknown Source)
	at nl.paulinternet.gtasaveedit.model.event.ReportableEvent.report(ReportableEvent.java:19)
	at nl.paulinternet.gtasaveedit.view.swing.PButton.actionPerformed(PButton.java:31)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at nl.paulinternet.gtasaveedit.view.EventQueueProxy.dispatchEvent(EventQueueProxy.java:14)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at nl.paulinternet.gtasaveedit.model.MethodInvoker.handleEvent(MethodInvoker.java:36)
	... 41 more
Caused by: java.lang.NullPointerException
	at nl.paulinternet.gtasaveedit.model.savegame.ByteSequence.overwrite(ByteSequence.java:133)
	at nl.paulinternet.gtasaveedit.model.GlitchFix.fixZoneGlitch(GlitchFix.java:114)
	at nl.paulinternet.gtasaveedit.view.pages.PageFix.fixZoneGlitch(PageFix.java:121)
	... 46 more

So i hope you or anyone else can helping this bug/problem get fix..

Note: That problems was occured on both of gtasaveedit (Windows version and java version)

[garages] Resolve duplicated color names

Some colors have duplicated names because their values are too close together. Those color names should be suffixed with something like (darker) or (more red).

Write the config file respecting the XDG Base Directory Specification

Hey there.

In simple terms, the XDG Base Directory Specification exists to prevent cluttering an user's home directory with dotfiles. The full spec. is here: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

Currently, GTA:SA Savegame Editor writes its settings file to a hard-coded path: ~/.gta_sa_savegame_editor.

It would be preferable if it wrote to $XDG_CONFIG_HOME/gta_sa_savegame_editor, or maybe $XDG_CONFIG_HOME/gta_sa_savegame_editor/config.

Looking up the settings file would look like this (roughly):

  1. Check if ~/.gta_sa_savegame_editor exists, so we don't break backwards compatibility.
  2. If it does exist, keep using that path.
  3. If it doesn't, check if $XDG_CONFIG_HOME is set and use it.
  4. Otherwise, fallback to ~/.config/

Let me know what you think.
Thank you very much!

Clothes pages not working

The clothes pages are currently not showing the equipped items and/or those in possession of the player.

Can't create/find/open settings file on Windows

PS C:\Users\youse\Desktop\deploy> ls


    Directory: C:\Users\youse\Desktop\deploy


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        19/12/2020  09:20 PM       12054024 savegame-editor-3.3-SNAPSHOT-jar-with-dependencies.jar


PS C:\Users\youse\Desktop\deploy> java -version
java version "15.0.2" 2021-01-19
Java(TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
PS C:\Users\youse\Desktop\deploy> java -jar .\savegame-editor-3.3-SNAPSHOT-jar-with-dependencies.jar
java.lang.Error: Invalid memory access
        at com.sun.jna.Native.invokeInt(Native Method)
        at com.sun.jna.Function.invoke(Function.java:426)
        at com.sun.jna.Function.invoke(Function.java:361)
        at com.sun.jna.Library$Handler.invoke(Library.java:265)
        at com.sun.proxy.$Proxy0.SHGetSpecialFolderPath(Unknown Source)
        at nl.paulinternet.gtasaveedit.Settings.getSettingsFile(Settings.java:69)
        at nl.paulinternet.gtasaveedit.Settings.<clinit>(Settings.java:23)
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.<init>(MainWindow.java:30)
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.getInstance(MainWindow.java:20)
        at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:55)
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class nl.paulinternet.gtasaveedit.Settings
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.<init>(MainWindow.java:30)
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.getInstance(MainWindow.java:20)
        at nl.paulinternet.gtasaveedit.view.window.ExceptionDialog.<init>(ExceptionDialog.java:47)
        at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:68)
PS C:\Users\youse\Desktop\deploy>

Lift Project to Java 12

The project should be lifted to the latest Java version before the next version is released.

Design not consistent when restarting

Steps to reproduce

I selected the GTK+ look and feel, but when I start the application the menu bar is shown in Metal look and feel (see screenshot). Right after the look and feel is changed in the options, everything is displayed correctly, it's only a startup problem.

Expected Behavior

The design should be consistent.

System

  • Debian Stretch (9.1)

Screenshots

lookandfeel

Audio doesn't work

Description

In the about tab, the audio doesn't work and the Stop Audio button is greyed out.

Expected Behavior

The audio should play

System

  • Debian Stretch (9.1)
  • Windows 7

Bug in comparison of version flags

Description

There's a bug in the version flag parser/comparator logic that makes v3.3-beta.2 appear newer as v3.3-rc.1.

The correct way (from lowest to highest) would be:

  1. alpha
  2. beta
  3. rc
  4. `` (no flag)

Todo

  • add/fix test for version flag parsing/comparison
  • fix version flag parsing logic

Cannot run on windows

The following exception is being thrown:

java.lang.Error: Invalid memory access
        at com.sun.jna.Native.invokeInt(Native Method)
        at com.sun.jna.Function.invoke(Function.java:426)
        at com.sun.jna.Function.invoke(Function.java:361)
        at com.sun.jna.Library$Handler.invoke(Library.java:265)
        at com.sun.proxy.$Proxy0.SHGetSpecialFolderPath(Unknown Source)
        at nl.paulinternet.gtasaveedit.Settings.getSettingsFile(Settings.java:69)
        at nl.paulinternet.gtasaveedit.Settings.<clinit>(Settings.java:23)
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.<init>(MainWindow.java:30)
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.getInstance(MainWindow.java:20)
        at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:55)
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class nl.paulinternet.gtasaveedit.Settings
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.<init>(MainWindow.java:30)
        at nl.paulinternet.gtasaveedit.view.window.MainWindow.getInstance(MainWindow.java:20)
        at nl.paulinternet.gtasaveedit.view.window.ExceptionDialog.<init>(ExceptionDialog.java:47)
        at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:68)

editor version: 3.3-SNAPSHOT
java version: 11.0.7

Add current savegame id to dropdown

It seems like the savegame id for the macOS steam version of the game has a new value. It doesn't appear in the dropdown and the dropdown is empty when loading a file saved with the current version.

Problems with "Zones" tab

I'm having two separate problems using the "Zones" tab.

  1. I'm not able to view/edit the gang density numbers (0-10-20-30-40) for any zones in any version of the program after v3.3-rc.11 because all of the fields are greyed-out as in the attached screenshot. I am still able to select zones by clicking on the map, and their colours still correspond to the correct density, but the rest of the feature is not working.

  2. Whenever I assign a territory to Unused Gang 1 or Unused Gang 2 and save the file, it doesn't function: when I open the file in the game, or re-load it in the savegame editor, any territory which I had assigned to an Unused Gang is now vacant, with all gang densities at 0 for that territory.

Thanks for any help you can offer.

image

Add working artifact handling for travis

On every tag, Travis should:

  • build the jar
    • save it as artifact
  • build the macOS version (haha)
    • save it as artifact
  • build the bundled-jdk version (.jar and .app)
    • save it as artifact
  • publish the tag as new release containing the artifacts

But first I need to research if this is even possible.

MacOS specific fixes not working (again)

Sadly stuff breaking after a few months is what Apple is all about; there's new stuff to fix:

  • "About" menu item showing the usual Crapple About Window
  • Main menu application title not customized
  • Dock customizations not working

Add debian package

It would be nice to have the possibility to install the application using apt on Debian/Ubuntu based Linux distributions. For this the application should be bundled into a .deb file. I'd suggest we use jdeb for this as it is available as a maven plugin.

We could also add a .rpm file for RedHat/Fedora/(CentOS?) based distributions by adding the maven ant plugin to the build which in turn would run alien.

[garages] Filter available colors per car

The game crashes when loading a savegame with an invalid car/color combination.

There should be a list available somewhere (internet/game config) which car can have which colors.

Darcula theme cause crash

I was looking at the themes, and I was looking for a dark theme, and then I got to Dacula, but then, when I put it in, SaveEditor crashed, it was spamming some blank error screens, and I tried to close and open the SaveEditor, but then it continued with the error, and I can no longer open SaveEditor.

Edit: Now it doesn't open anymore, I went to Appdata and deleted the savegameeditor folder to reset the settings, and after that it doesn't open anymore

Crash:java.lang.reflect.InvocationTargetException
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1368)
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1343)
	at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1479)
	at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:68)
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because "this.loaded" is null
	at nl.paulinternet.gtasaveedit.view.component.TabbedPane.updateUI(TabbedPane.java:110)
	at java.desktop/javax.swing.JTabbedPane.<init>(JTabbedPane.java:231)
	at java.desktop/javax.swing.JTabbedPane.<init>(JTabbedPane.java:196)
	at nl.paulinternet.gtasaveedit.view.component.TabbedPane.<init>(TabbedPane.java:26)
	at nl.paulinternet.gtasaveedit.view.window.MainWindow.createContent(MainWindow.java:49)
	at nl.paulinternet.gtasaveedit.view.GUICreator.run(GUICreator.java:23)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:306)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
	at nl.paulinternet.gtasaveedit.view.EventQueueProxy.dispatchEvent(EventQueueProxy.java:14)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Darcula theme uses JDK internal stuff

Maybe it can be patched ๐Ÿค”

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.bulenkov.darcula.DarculaLaf (file:/classpath/com/bulenkov/darcula/1.0/darcula-1.0.jar) to field javax.swing.text.html.HTMLEditorKit.DEFAULT_STYLES_KEY
WARNING: Please consider reporting this to the maintainers of com.bulenkov.darcula.DarculaLaf
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

null

java.lang.reflect.InvocationTargetException
at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1368)
at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1343)
at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1479)
at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:68)
Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because "this.loaded" is null
at nl.paulinternet.gtasaveedit.view.component.TabbedPane.updateUI(TabbedPane.java:110)
at java.desktop/javax.swing.JTabbedPane.(JTabbedPane.java:231)
at java.desktop/javax.swing.JTabbedPane.(JTabbedPane.java:196)
at nl.paulinternet.gtasaveedit.view.component.TabbedPane.(TabbedPane.java:26)
at nl.paulinternet.gtasaveedit.view.window.MainWindow.createContent(MainWindow.java:49)
at nl.paulinternet.gtasaveedit.view.GUICreator.run(GUICreator.java:23)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:306)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at nl.paulinternet.gtasaveedit.view.EventQueueProxy.dispatchEvent(EventQueueProxy.java:14)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

[garages] Cars show up in wrong garage slots

When there are two cars inside the Grove Street garage (cjsave), one of the cars shows up in a seemingly random other slot.

I think there are two possible ways of doing this:

  1. Find relation between saved cars and which garage they're in
  2. Use the X,Y,Z Positioning and compare it to the garage boundaries

.deb package install scripts are garbage

When an error happens (ex. #74, #75), the .deb install scripts are failing which leads to an inconsistent package state.

E: Sub-process /usr/bin/dpkg returned an error code (1)
dev@ubu27x:~/Downloads/GTA.SA-Savegame-Editor.deb/deploy$ sudo dpkg -i savegame-editor_3.3~SNAPSHOT_all.deb
(Reading database ... 212063 files and directories currently installed.)
Preparing to unpack savegame-editor_3.3~SNAPSHOT_all.deb ...
Removing desktop entry...
rm: cannot remove '/usr/share/applications/gtasa-savegame-editor.desktop': No such file or directory
Removing shell shortcut...
rm: cannot remove '/usr/bin/gtasa-savegame-editor': No such file or directory
dpkg: warning: old gtasa-savegame-editor package pre-removal script subprocess returned error exit status 1
dpkg: trying script from the new package instead ...
Removing desktop entry...
rm: cannot remove '/usr/share/applications/gtasa-savegame-editor.desktop': No such file or directory
Removing shell shortcut...
rm: cannot remove '/usr/bin/gtasa-savegame-editor': No such file or directory
dpkg: error processing archive savegame-editor_3.3~SNAPSHOT_all.deb (--install):
 new gtasa-savegame-editor package pre-removal script subprocess returned error exit status 1
dpkg: error while cleaning up:
 installed gtasa-savegame-editor package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 savegame-editor_3.3~SNAPSHOT_all.deb
dev@ubu27x:~/Downloads/GTA.SA-Savegame-Editor.deb/deploy$ sudo dpkg -r gtasa-savegame-editor 
dpkg: error processing package gtasa-savegame-editor (--remove):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting a removal
Errors were encountered while processing:
 gtasa-savegame-editor

An error occurred when this program started running.

I installed JAVA (and its version): Java(TM) Development Kit 11.0.2 (64-bit)
Specific text about the error:

java.lang.reflect.InvocationTargetException
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1367)
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1342)
	at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1480)
	at nl.paulinternet.gtasaveedit.view.Main.main(Main.java:68)
Caused by: java.lang.NullPointerException
	at nl.paulinternet.gtasaveedit.view.component.TabbedPane.updateUI(TabbedPane.java:110)
	at java.desktop/javax.swing.JTabbedPane.<init>(JTabbedPane.java:207)
	at java.desktop/javax.swing.JTabbedPane.<init>(JTabbedPane.java:172)
	at nl.paulinternet.gtasaveedit.view.component.TabbedPane.<init>(TabbedPane.java:26)
	at nl.paulinternet.gtasaveedit.view.window.MainWindow.createContent(MainWindow.java:49)
	at nl.paulinternet.gtasaveedit.view.GUICreator.run(GUICreator.java:23)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:303)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
	at nl.paulinternet.gtasaveedit.view.EventQueueProxy.dispatchEvent(EventQueueProxy.java:14)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Flight School not saving properly.

I have legitimately obtained gold medals in the flying school in all categories except the helicopter shooting one, in which I have 96%.
When I load the save in the editor, and change it to 100%, I can save the file just fine, and load it, but when I go to the TV in the flight school, it still says I only have 96% in the challenge, despite the save editor saying I have 100% when I load the save in the editor.

Support for Android

I'm not sure if GTA SA uses the same savegame format for Android as on PC. If yes, we could easily port the editor to Android. The TODOs below all depend on the first one. If Android uses another format or doesn't save locally at all (โ˜๏ธ) it might not be possible to port this.

Android does indeed use a similar savegame format than the PC version.

Steps to take:

  • Evaluate the Android Savegame Format
    • Find out if the same blocks are used
    • Find out if the blocks of the android version and the pc version have the same stuff in them
    • Find out if some blocks are empty/unused in the Android version that are used on PC and vice-versa
  • Refactor the Savegame handling logic to make it able to handle Android savefiles
    • Get the command line tool to extract blocks from an Android save
    • Get the command line tool to assemble a valid Android save
    • Implement the necessary stuff in libsavegame to make it able to read Android savegames
    • Implement the necessary stuff in libsavegame to make it able to save valid Android savegames

Upd8: What I found out so far:

  • Android savegames also go from 1 to 8 with the same naming scheme. Additionally there are 9 and 10 savegames that are always "present" (on the file system) and seem to contain the two "cloud slots".
  • Android savegames have a size of ~190500 bytes
    • The usual blocks used for the PC version don't work with this
    • Either the blocks are smaller or some are left out Some blocks are empty
  • The savegame-extractor is able to load the savegame into the editor but it crashes as soon as it's loading the file.

Further updates, notes and task tracking will happen in:

Request: editing girlfriend relationship levels

I hate having to do go on dates and stuff for the casino heist one. Can't y'all add the option to edit GF relationship status so it's all done with a couple of clicks?

Thanks in advance if you can ๐Ÿ’š

Sudden Unhandled Exception when loading specific Savegame.

I am using the .jar Version of the latest release, Win 10 Pro x64.
I loaded up my savegame and selected / deselected some clothings. Because i did some changes i couldnt revert, i wanted to load the savegame again, so i selected Load > Savegame 8.

It threw this:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at nl.paulinternet.gtasaveedit.model.MethodInvoker.handleEvent(MethodInvoker.java:39) at nl.paulinternet.gtasaveedit.model.event.ReportableEvent.lambda$report$0(ReportableEvent.java:19) at nl.paulinternet.gtasaveedit.model.event.ReportableEvent$$Lambda$15/125993742.accept(Unknown Source) at java.util.ArrayList.forEach(ArrayList.java:1249) at nl.paulinternet.gtasaveedit.model.event.ReportableEvent.report(ReportableEvent.java:19) at nl.paulinternet.gtasaveedit.view.swing.PMenuItem.actionPerformed(PMenuItem.java:31) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.AbstractButton.doClick(AbstractButton.java:376) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.menuDragMouseReleased(BasicMenuItemUI.java:943) at javax.swing.JMenuItem.fireMenuDragMouseReleased(JMenuItem.java:586) at javax.swing.JMenuItem.processMenuDragMouseEvent(JMenuItem.java:483) at javax.swing.JMenuItem.processMouseEvent(JMenuItem.java:429) at javax.swing.MenuSelectionManager.processMouseEvent(MenuSelectionManager.java:329) at javax.swing.plaf.basic.BasicPopupMenuUI$MouseGrabber.eventDispatched(BasicPopupMenuUI.java:870) at java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Toolkit.java:2425) at java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2317) at java.awt.Toolkit.notifyAWTEventListeners(Toolkit.java:2275) at java.awt.Component.dispatchEventImpl(Component.java:4777) at java.awt.Container.dispatchEventImpl(Container.java:2292) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) at java.awt.Container.dispatchEventImpl(Container.java:2278) at java.awt.Window.dispatchEventImpl(Window.java:2750) at java.awt.Component.dispatchEvent(Component.java:4703) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at nl.paulinternet.gtasaveedit.view.EventQueueProxy.dispatchEvent(EventQueueProxy.java:14) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at nl.paulinternet.gtasaveedit.model.MethodInvoker.handleEvent(MethodInvoker.java:36) ... 48 more Caused by: java.lang.RuntimeException: Invalid modID: '65343'! at nl.paulinternet.gtasaveedit.model.savegame.data.VehicleMod.getMod(VehicleMod.java:165) at nl.paulinternet.gtasaveedit.model.savegame.blocks.Block03.printDebugCsv(Block03.java:181) at nl.paulinternet.gtasaveedit.model.savegame.blocks.Block03.load(Block03.java:124) at nl.paulinternet.gtasaveedit.model.link.LinkArray.load(LinkArray.java:16) at nl.paulinternet.gtasaveedit.model.savegame.Savegame.load(Savegame.java:28) at nl.paulinternet.gtasaveedit.view.menu.QuickLoad.loadSavegame(QuickLoad.java:35) ... 53 more

savegame is attached.
GTASAsf8.zip

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.