allow to change the mod loading order
This commit is contained in:
+23
@@ -62,6 +62,7 @@ int usage() {
|
||||
printf("Use --deploy or -d <APPID> to deploy the mods for the game\n");
|
||||
printf("Use --unbind <APPID> to rollback a deployment\n");
|
||||
printf("Use --fomod <APPID> <MODID> to create a new mod using the result from the FOMod\n");
|
||||
printf("Use --swap <APPID> <MODID A> MODID B> to swap two mod in the loading order\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
@@ -489,6 +490,22 @@ int fomod(int argc, char ** argv) {
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
int swapMod(int argc, char ** argv) {
|
||||
if(argc != 5) return usage();
|
||||
char * appIdStr = argv[2];
|
||||
int appid = validateAppId(appIdStr);
|
||||
if(appid < 0) {
|
||||
printf("Invalid appid");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
//no mod will go over the MAX_INT value
|
||||
int modIdA = (int)strtoul(argv[3], NULL, 10);
|
||||
int modIdB = (int)strtoul(argv[4], NULL, 10);
|
||||
return swapPlace(appid, modIdA, modIdB);
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
if(argc < 2 ) return usage();
|
||||
|
||||
@@ -589,6 +606,12 @@ int main(int argc, char ** argv) {
|
||||
else
|
||||
returnValue = removeMod(argc, argv);
|
||||
|
||||
} else if(strcmp(argv[1], "--swap") == 0 || strcmp(argv[1], "-s") == 0) {
|
||||
if(isRoot())
|
||||
returnValue = noRoot();
|
||||
else
|
||||
returnValue = swapMod(argc, argv);
|
||||
|
||||
} else {
|
||||
usage();
|
||||
returnValue = EXIT_FAILURE;
|
||||
|
||||
+45
-2
@@ -1,4 +1,5 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "order.h"
|
||||
|
||||
//no function are declared in main it's just macros
|
||||
@@ -92,9 +93,51 @@ GList * listMods(int appid) {
|
||||
}
|
||||
|
||||
|
||||
void swapPlace(int appid, int modId, int modId2) {
|
||||
GList * list = listMods(appid);
|
||||
int swapPlace(int appid, int modIdA, int modIdB) {
|
||||
char appidStr[10];
|
||||
sprintf(appidStr, "%d", appid);
|
||||
|
||||
char * home = getHome();
|
||||
char * modFolder = g_build_filename(home, MANAGER_FILES, MOD_FOLDER_NAME, appidStr, NULL);
|
||||
free(home);
|
||||
|
||||
GList * list = listMods(appid);
|
||||
GList * listA = list;
|
||||
GList * listB = list;
|
||||
|
||||
for(int i = 0; i < modIdA; i++) {
|
||||
listA = g_list_next(listA);
|
||||
}
|
||||
|
||||
for(int i = 0; i < modIdB; i++) {
|
||||
listB = g_list_next(listB);
|
||||
}
|
||||
|
||||
if(listA == NULL || listB == NULL) {
|
||||
printf("Invalid modId\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
char * modAFolder = g_build_filename(modFolder, listA->data, ORDER_FILE, NULL);
|
||||
char * modBFolder = g_build_filename(modFolder, listB->data, ORDER_FILE, NULL);
|
||||
|
||||
FILE * fileA = fopen(modAFolder, "w");
|
||||
FILE * fileB = fopen(modBFolder, "w");
|
||||
|
||||
g_free(modAFolder);
|
||||
g_free(modBFolder);
|
||||
|
||||
if(fileA == NULL || fileB == NULL) {
|
||||
fprintf(stderr, "Error could not open order file\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
fprintf(fileA, "%d", modIdB);
|
||||
fprintf(fileB, "%d", modIdA);
|
||||
|
||||
fclose(fileA);
|
||||
fclose(fileB);
|
||||
|
||||
g_list_free(list);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
+1
-1
@@ -24,6 +24,6 @@ GList * listMods(int appid);
|
||||
* @param modId
|
||||
* @param modId2
|
||||
*/
|
||||
void swapPlace(int appid, int modId, int modId2);
|
||||
int swapPlace(int appid, int modId, int modId2);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user