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 --deploy or -d <APPID> to deploy the mods for the game\n");
|
||||||
printf("Use --unbind <APPID> to rollback a deployment\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 --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;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -489,6 +490,22 @@ int fomod(int argc, char ** argv) {
|
|||||||
return returnValue;
|
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) {
|
int main(int argc, char ** argv) {
|
||||||
if(argc < 2 ) return usage();
|
if(argc < 2 ) return usage();
|
||||||
|
|
||||||
@@ -589,6 +606,12 @@ int main(int argc, char ** argv) {
|
|||||||
else
|
else
|
||||||
returnValue = removeMod(argc, argv);
|
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 {
|
} else {
|
||||||
usage();
|
usage();
|
||||||
returnValue = EXIT_FAILURE;
|
returnValue = EXIT_FAILURE;
|
||||||
|
|||||||
+45
-2
@@ -1,4 +1,5 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include "order.h"
|
#include "order.h"
|
||||||
|
|
||||||
//no function are declared in main it's just macros
|
//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) {
|
int swapPlace(int appid, int modIdA, int modIdB) {
|
||||||
GList * list = listMods(appid);
|
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);
|
g_list_free(list);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -24,6 +24,6 @@ GList * listMods(int appid);
|
|||||||
* @param modId
|
* @param modId
|
||||||
* @param modId2
|
* @param modId2
|
||||||
*/
|
*/
|
||||||
void swapPlace(int appid, int modId, int modId2);
|
int swapPlace(int appid, int modId, int modId2);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user