aboutsummaryrefslogtreecommitdiffstats
path: root/src/launch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/launch.c')
-rw-r--r--src/launch.c60
1 files changed, 42 insertions, 18 deletions
diff --git a/src/launch.c b/src/launch.c
index a8ea689..942cbbb 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -3,6 +3,8 @@
#include "l2su.h"
#include "launch.h"
#include "macros.h"
+#include "user.h"
+#include "uuid/uuid.h"
#include "version.h"
#include "assets.h"
#include "args.h"
@@ -261,9 +263,12 @@ int l2_launch_init_substitutor(struct l2_launch *launch)
#define L2_LAUNCH_ADD_SUB(_st, _name, _val) \
if (l2_subst_add(_st, _name, _val) < 0) goto cleanup
+ int ret = -1;
char *keyname = NULL, *apath = NULL;
size_t keycap = 0, acap = 0;
+ char *props_arr = NULL, *props_map = NULL;
+
char *classpath = launch->classpath;
const char *ver_name;
@@ -276,16 +281,38 @@ int l2_launch_init_substitutor(struct l2_launch *launch)
if (l2_subst_init(&launch->arg_subst) < 0) goto cleanup;
l2_subst_t *st = launch->arg_subst;
- L2_LAUNCH_ADD_SUB(st, "auth_access_token", "-");
- L2_LAUNCH_ADD_SUB(st, "user_properties", "{}");
- L2_LAUNCH_ADD_SUB(st, "user_property_map", "{}");
- L2_LAUNCH_ADD_SUB(st, "auth_xuid", "null");
- L2_LAUNCH_ADD_SUB(st, "clientid", "null");
- L2_LAUNCH_ADD_SUB(st, "auth_session", "-");
+ l2_user_session_t *session = NULL;
+ if (launch->user) session = launch->user->session;
+
+ if (l2_user_session_fill_subst(session, st) < 0) goto cleanup;
+
+ if (launch->user && *launch->user->profile.name) {
+ char uuidstr[UUID_STRLEN_SHORT + 1];
+
+ l2_uuid_to_string_short(&launch->user->profile.uuid, uuidstr);
+
+ L2_LAUNCH_ADD_SUB(st, "auth_player_name", launch->user->profile.name);
+ L2_LAUNCH_ADD_SUB(st, "auth_uuid", uuidstr);
+
+ props_arr = l2_user_properties_serialize(&launch->user->profile, true);
+ props_map = l2_user_properties_serialize(&launch->user->profile, false);
- L2_LAUNCH_ADD_SUB(st, "auth_player_name", "figboot");
- L2_LAUNCH_ADD_SUB(st, "auth_uuid", "afc3f2d153844959bd05b2a5dc519c06");
- L2_LAUNCH_ADD_SUB(st, "user_type", "msa");
+ if (!props_arr || !props_map) goto cleanup;
+
+ L2_LAUNCH_ADD_SUB(st, "user_properties", props_arr);
+ L2_LAUNCH_ADD_SUB(st, "user_property_map", props_map);
+ } else {
+ uuid_t rnduuid;
+ char rnduuidstr[UUID_STRLEN_SHORT + 1];
+
+ l2_uuid_random(&rnduuid);
+ l2_uuid_to_string_short(&rnduuid, rnduuidstr);
+
+ L2_LAUNCH_ADD_SUB(st, "auth_player_name", "Player$");
+ L2_LAUNCH_ADD_SUB(st, "auth_uuid", rnduuidstr);
+ L2_LAUNCH_ADD_SUB(st, "user_properties", "[]");
+ L2_LAUNCH_ADD_SUB(st, "user_property_map", "{}");
+ }
if (launch->instance) {
L2_LAUNCH_ADD_SUB(st, "profile_name", launch->instance->name);
@@ -339,23 +366,20 @@ int l2_launch_init_substitutor(struct l2_launch *launch)
}
}
- free(keyname);
- free(apath);
-
- keyname = NULL;
- apath = NULL;
-
launch->classpath = classpath;
-
- return 0;
+ classpath = NULL;
+ ret = 0;
cleanup:
free(keyname);
free(apath);
+ free(props_arr);
+ free(props_map);
+
if (classpath != launch->classpath) free(classpath);
- return -1;
+ return ret;
#undef L2_LAUNCH_ADD_SUB
}