private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { try { maine_actor_data a_data = save_file.actors[listBox2.SelectedIndex]; qx_text.Text = "QX: " + a_data.q_x.ToString(); qy_text.Text = "QY: " + a_data.q_y.ToString(); qz_text.Text = "QZ: " + a_data.q_z.ToString(); qw_text.Text = "QW: " + a_data.q_w.ToString(); x_text.Text = "X: " + a_data.x.ToString(); y_text.Text = "Y: " + a_data.y.ToString(); z_text.Text = "Z: " + a_data.z.ToString(); hp_text.Text = "HP: " + a_data.hp.ToString(); } catch { } }
public void open(string folder_path) { string save_path = folder_path + "\\World.sav"; string save_image = folder_path + "\\SaveGameScreenshot.png"; if (File.Exists(save_image)) { screenshot = Image.FromFile(save_image); } if (File.Exists(save_path)) { actors = new List <maine_actor_data>(); file_stream = new FileStream(save_path, FileMode.Open); binary_reader = new BinaryReader(file_stream); binary_writer = new BinaryWriter(file_stream); binary_reader.BaseStream.Position = 0x10; int item_count = binary_reader.ReadInt32(); for (int i = 0; i < item_count; i++) { int data_size = binary_reader.ReadInt32(); int next_offset = (int)binary_reader.BaseStream.Position + data_size - 4; binary_reader.BaseStream.Position += 0x14; int bp_size = binary_reader.ReadInt32(); string bp = Encoding.ASCII.GetString(binary_reader.ReadBytes(bp_size - 1)); if (bp == "/Game/Blueprints/Global/BP_SurvivalGameState.BP_SurvivalGameState_C") { binary_reader.BaseStream.Position += 0x68; int actor_count = binary_reader.ReadInt32(); for (int ac = 0; ac < actor_count; ac++) { maine_actor_data a_data = new maine_actor_data(); a_data.file_offset = (int)binary_reader.BaseStream.Position; int size = binary_reader.ReadInt32(); int next_actor_offset = (int)binary_reader.BaseStream.Position + size - 4; binary_reader.BaseStream.Position += 0xC; int actor_type_len = binary_reader.ReadInt32(); string actor_type_str = Encoding.ASCII.GetString(binary_reader.ReadBytes(actor_type_len - 1)); binary_reader.BaseStream.Position += 1; int actor_str_size = binary_reader.ReadInt32(); string actor_str = Encoding.ASCII.GetString(binary_reader.ReadBytes(actor_str_size - 1)); binary_reader.BaseStream.Position += 1; a_data.q_x = binary_reader.ReadSingle(); a_data.q_y = binary_reader.ReadSingle(); a_data.q_z = binary_reader.ReadSingle(); a_data.q_w = binary_reader.ReadSingle(); a_data.position_offset = (int)binary_reader.BaseStream.Position; a_data.x = binary_reader.ReadSingle(); a_data.y = binary_reader.ReadSingle(); a_data.z = binary_reader.ReadSingle(); float dummy = binary_reader.ReadSingle(); dummy = binary_reader.ReadSingle(); dummy = binary_reader.ReadSingle(); dummy = binary_reader.ReadSingle(); dummy = binary_reader.ReadSingle(); dummy = binary_reader.ReadSingle(); dummy = binary_reader.ReadSingle(); int some_int_0 = binary_reader.ReadInt32(); int some_int_1 = binary_reader.ReadInt32(); if (some_int_1 == 0) { int actor_property_count = binary_reader.ReadInt32(); for (int apc = 0; apc < actor_property_count; apc++) { int ap_size = binary_reader.ReadInt32(); int next_ap = (int)binary_reader.BaseStream.Position + ap_size - 4; binary_reader.BaseStream.Position += 0xC; int ap_str_size = binary_reader.ReadInt32(); string ap_str = Encoding.ASCII.GetString(binary_reader.ReadBytes(ap_str_size - 1)); if (ap_str == "/Script/Maine.HealthLODComponent") { binary_reader.BaseStream.Position += 1; a_data.hp_offset = (int)binary_reader.BaseStream.Position; a_data.hp = binary_reader.ReadSingle(); } binary_reader.BaseStream.Position = next_ap; } } binary_reader.BaseStream.Position = next_actor_offset; a_data.bp_name = actor_str; actors.Add(a_data); } break; } binary_reader.BaseStream.Position = next_offset; } } }