From e97e8f7705e3ae4040ea0b3c447f6b36425c234e Mon Sep 17 00:00:00 2001 From: atenfyr Date: Fri, 28 Nov 2025 14:24:59 -0600 Subject: [PATCH] fixes for 4.27 + addl gw fixes --- Cargo.toml | 6 +- .../assets/ActorTemplate.uasset | Bin 2358 -> 2598 bytes .../assets/alert_mod/NotificationActor.uasset | Bin 5152 -> 0 bytes .../assets/alert_mod/NotificationActor.uexp | Bin 1201 -> 0 bytes .../Integrator/NotificationActor.uasset | Bin 5152 -> 0 bytes .../Content/Integrator/NotificationActor.uexp | Bin 1201 -> 0 bytes .../baked/800-CoreMod-0.1.0_P/metadata.json | 1 - astro_mod_integrator/src/assets.rs | 5 +- .../src/handlers/biome_placement_modifiers.rs | 4 +- .../src/handlers/item_list_entries.rs | 38 ++++++++++- .../src/handlers/linked_actor_components.rs | 64 ++++++++++++++---- .../src/handlers/mission_trailheads.rs | 4 +- astro_mod_integrator/src/handlers/mod.rs | 2 + astro_mod_integrator/src/lib.rs | 8 +-- astro_modloader/src/main.rs | 1 + 15 files changed, 107 insertions(+), 26 deletions(-) delete mode 100644 astro_mod_integrator/assets/alert_mod/NotificationActor.uasset delete mode 100644 astro_mod_integrator/assets/alert_mod/NotificationActor.uexp delete mode 100644 astro_mod_integrator/baked/800-CoreMod-0.1.0_P/Astro/Content/Integrator/NotificationActor.uasset delete mode 100644 astro_mod_integrator/baked/800-CoreMod-0.1.0_P/Astro/Content/Integrator/NotificationActor.uexp diff --git a/Cargo.toml b/Cargo.toml index ed4789c..22c2704 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,15 +2,15 @@ members = ["astro_mod_integrator", "astro_modloader"] [workspace.package] -version = "0.1.14" +version = "0.1.15" authors = ["AstroTechies, localcc, konsti219"] description = "Astroneer Modloader" [workspace.dependencies] astro_mod_integrator = { path = "./astro_mod_integrator" } -unreal_mod_manager = { rev = "c636ad4e30c0f048f931d03a803d233c06dbf5d8", git = "https://github.com/AstroTechies/unrealmodding", features = [ - "ue4_23", +unreal_mod_manager = { rev = "f4df5d8e75b1e184832384d1865f0b696b90a614", git = "https://github.com/AstroTechies/unrealmodding", features = [ + "ue4_27", "cpp_loader", ] } diff --git a/astro_mod_integrator/assets/ActorTemplate.uasset b/astro_mod_integrator/assets/ActorTemplate.uasset index 098fb295ebf8e6cac9e69c0eddf5817231b9de84..71f907954028164b72962f80d6af575d47ebd3d0 100644 GIT binary patch delta 391 zcmdlcv`nP_V6)b|pa1{=Phe(X;9_C`10Eo0b1=^Qx5pE<4=oH^>k75hSb$=0Gd4VV z=``gF_btOkj=SCTG=O6EC4bI0xNLB~FEVj*v4X6)Dp1Vlc~rH4Pr;=b;SnpNv=q5{ zfns+{pK7YREq+jTNnq})J37jOK(RIn+4_VQ|CBZNE{m|3u9skX$ zUzO7K=bG9tMxfa9dG&=>o*P~oP2AkU-e@5W(yVkfWX?W+wH0pcic>B$ZAsJyie)5o zJdf~E&MuI)Y?&CRCI-^$6gT^Zo9|wg6>EfAD#cUo1BDoVRek-_>{J#I@yvGRP9xm~ z|6PEBYFrEqtU%f?KQ9%es6iJtrbo6DA`tZ*nb%B~v(r`II9N0GIrG$p8QV delta 152 zcmZ1`vQ5bQV6)b|pa1{=XFvmHoD2-CKrz4kyi|}>gD#Lb2x372Gmt*S&cGlFq|1OR ze{oEQ~+(3$J^EyTib|y2<$&Q@5lN%UWCv$O{FgZcExtx|v=@8~s G&OiXr{TY=2 diff --git a/astro_mod_integrator/assets/alert_mod/NotificationActor.uasset b/astro_mod_integrator/assets/alert_mod/NotificationActor.uasset deleted file mode 100644 index 0dfad2f6acf6b7f8c85ca041ff0edcc2b102f768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5152 zcmb7H32YQq7=Gm}1r!wIP|8tIP|I@5Dcx?%vb2=a7Q~RaPIn*ez;>pYodp^K5k?iMaVfk8xN=|(#=fyx9TDJAe-j(%qJIo@HB0bEbtg-9qT*&bnhEh{(=+)dXYgk}& zz1jn-km|Ow)Ffj=QMOQhZ)E>uAC&1z)bz&8O5ISkiaf!u8{x{;^@yWEr&gO^&7?)25{XQTX`!G`*Gxs#qQMeQ4%KEV#ErFW zb86}!_g8*y`eKGbjxFT#d8CK}7Pn!4!?Xr?!E?hh`qB9m^QB$wVRl*hAr$;Ce)@2rL1?xOMM~OwuV9@se>K(J+ z>FZv;om0|w4H^DG+=p)Otj;}H3k@Caa1pYQt>2W9)76box;jo>vt60q%MH3iYbhA? zu|Y??ZzEg|Z#%ynCi5;#Y!`=@hA5tnuUL8ZnYuXLN`0k4BpW;arqZFGn{%m3ex5jwXKm;i9pbw zUlg3_EeUvY3-j5hOO{P`dC=KznJ~6^>q+EK9*-zB?8@%57uwQH9JMWJd8gW2Q`4v^ z)+y83rdjQ?klXoMtjbYv`oRx#P*3s~@=(m=Gs?L^1*N)@yp&i^M(sSd90}*d*SPfM zE1hTorHFE}Mjps@J1fgk8Il|THlc3rYbdh*m>Ooj;;WS~4`s~Il*mlQP?hos$5CMu z8Z&Nmut7)LkM@q5GK$s;hQR~DsmeS~(V%bzn^cD+hyS~bVauUcff}viCT*muP^gw0 zic!P192h*@h1En&Ugconz`F=yAssu-q}-(B4rp_9_Dsgv7Vs$ab##3GQu-9<8oAtZ zdq=Qs;!R5KfvZ}LLc~PP@$aKt7E_@oZ7nyrrL%PQ#bQ`f!b4o0&vQAI=3->f(#7RJK-Ur;)ni78 z+lp9qgsuKw-ID=~a@Q`_-8%T6g1QMOZgTf<5H7I~j~yIV&~=%WInL=Dx_8fZD0$mM z*X6O2K1knEJ*I{8=aV69V~j2*P#S1JSQ&Sjy1Qy1aS)v z%VRfhFtr(Zy1!66)m8oWgv#e=bO^8TvbEdjtG|q4QvIvSJb5U$`J?hV` zuVif;(|F<}YHIQu_u8c?^)Nsl2Di*obDZk@mu@!XU@{M2-`Lw=*oVRb zl00!?NWya*lniTOLrF3Dz3kmQ<++o+jOS6(rDp=q31W^jhPxCbc}fiXhS*S2>^y%opQi*d&2T8}h{b z1nrw5#{bY5!voYKHh!^=7|LA7f3{Rf<^c9#{5SDOe%}=Gh6{#>&yQl9pQ0S-i?L9)Lh_}5d9wcZwL>mdC$Jw-Wq=7C@b z2)+CdeUjwB*8Tv9fc3RTjLlC`j;vc^yT$9Ou;-kx=V1XtP9=VbR;4HhcP4VrZPzs+ z=Z3Hcz6C)_Kglau$j2JIF&N=6C93Ed?Jbr$NX$NImiz4>1tF>1&M`dpSipC+aD2rMr{NioEI8eK0%xjU(`<2O?-oQ6KW>>NYh5-AI7k) zH8uDVd58ZzdkOo48t#eTsO_V+pW08HFpJXn92XsOIKWXN6RsaA1 diff --git a/astro_mod_integrator/assets/alert_mod/NotificationActor.uexp b/astro_mod_integrator/assets/alert_mod/NotificationActor.uexp deleted file mode 100644 index e9e3a914500bc3390f14c33c0564c009ae468bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1201 zcmah|O>5Lp6n)WAN2i)WBwf{HP;9LW(_~^MxX>m|tmx>X%PwT3wIj&5@MEVG^e5<2 zaU*VAxvAjFg?m8@f*&ifih>&jcjGxP@1?<5df|S&d(OS@zR4X=tc$_Wab&`i7UunM zI6R>af$}vCHW18i1hU=fjlk^yiaQYh!ZmEmqB@j#aSh@v&_hrPu}DTaw^_d{{-FMV z%9WkIgMGI`Pbn}~o_A5g+*Pe^@UJJ6O=}pJgKAv-#3aQ*k?z4$ihL2|dD&qb;@!{@ z=nm*3w0EIrAHbXwgv}pl9@9wX!N!I7vpzU)5SedDppk^bhTXloaLq{vy^B{C7lhsE zxSp2!74%<>3F^{zmSxGY zG!3VsI0&a>*NZ#t89!$IJJ!?4dRz3rBOaB9ajR?cdGd|@ugs5I`{Zl;Ypft>&t2~= zT^=lni3#g`j(s6>Kd_TWKOl4v&6_Y|&py4r)zW)0>RR1eW6oG!29!(rcjnj9QsfPz z2!Va$43NFhJ{>vdWGk|1yrO6BjtRcPi|72FBni~{vGYVxGYSKRH9 zCu>jdzv@2!z4D^@cxCm7VoWJt%x9}a`E|!tj>|>SWIeas=Uo8!YRaa>R?e$Fj$O)E Tm*f9_hfN6|@ms#UGx_i@bmNx` diff --git a/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/Astro/Content/Integrator/NotificationActor.uasset b/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/Astro/Content/Integrator/NotificationActor.uasset deleted file mode 100644 index 0dfad2f6acf6b7f8c85ca041ff0edcc2b102f768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5152 zcmb7H32YQq7=Gm}1r!wIP|8tIP|I@5Dcx?%vb2=a7Q~RaPIn*ez;>pYodp^K5k?iMaVfk8xN=|(#=fyx9TDJAe-j(%qJIo@HB0bEbtg-9qT*&bnhEh{(=+)dXYgk}& zz1jn-km|Ow)Ffj=QMOQhZ)E>uAC&1z)bz&8O5ISkiaf!u8{x{;^@yWEr&gO^&7?)25{XQTX`!G`*Gxs#qQMeQ4%KEV#ErFW zb86}!_g8*y`eKGbjxFT#d8CK}7Pn!4!?Xr?!E?hh`qB9m^QB$wVRl*hAr$;Ce)@2rL1?xOMM~OwuV9@se>K(J+ z>FZv;om0|w4H^DG+=p)Otj;}H3k@Caa1pYQt>2W9)76box;jo>vt60q%MH3iYbhA? zu|Y??ZzEg|Z#%ynCi5;#Y!`=@hA5tnuUL8ZnYuXLN`0k4BpW;arqZFGn{%m3ex5jwXKm;i9pbw zUlg3_EeUvY3-j5hOO{P`dC=KznJ~6^>q+EK9*-zB?8@%57uwQH9JMWJd8gW2Q`4v^ z)+y83rdjQ?klXoMtjbYv`oRx#P*3s~@=(m=Gs?L^1*N)@yp&i^M(sSd90}*d*SPfM zE1hTorHFE}Mjps@J1fgk8Il|THlc3rYbdh*m>Ooj;;WS~4`s~Il*mlQP?hos$5CMu z8Z&Nmut7)LkM@q5GK$s;hQR~DsmeS~(V%bzn^cD+hyS~bVauUcff}viCT*muP^gw0 zic!P192h*@h1En&Ugconz`F=yAssu-q}-(B4rp_9_Dsgv7Vs$ab##3GQu-9<8oAtZ zdq=Qs;!R5KfvZ}LLc~PP@$aKt7E_@oZ7nyrrL%PQ#bQ`f!b4o0&vQAI=3->f(#7RJK-Ur;)ni78 z+lp9qgsuKw-ID=~a@Q`_-8%T6g1QMOZgTf<5H7I~j~yIV&~=%WInL=Dx_8fZD0$mM z*X6O2K1knEJ*I{8=aV69V~j2*P#S1JSQ&Sjy1Qy1aS)v z%VRfhFtr(Zy1!66)m8oWgv#e=bO^8TvbEdjtG|q4QvIvSJb5U$`J?hV` zuVif;(|F<}YHIQu_u8c?^)Nsl2Di*obDZk@mu@!XU@{M2-`Lw=*oVRb zl00!?NWya*lniTOLrF3Dz3kmQ<++o+jOS6(rDp=q31W^jhPxCbc}fiXhS*S2>^y%opQi*d&2T8}h{b z1nrw5#{bY5!voYKHh!^=7|LA7f3{Rf<^c9#{5SDOe%}=Gh6{#>&yQl9pQ0S-i?L9)Lh_}5d9wcZwL>mdC$Jw-Wq=7C@b z2)+CdeUjwB*8Tv9fc3RTjLlC`j;vc^yT$9Ou;-kx=V1XtP9=VbR;4HhcP4VrZPzs+ z=Z3Hcz6C)_Kglau$j2JIF&N=6C93Ed?Jbr$NX$NImiz4>1tF>1&M`dpSipC+aD2rMr{NioEI8eK0%xjU(`<2O?-oQ6KW>>NYh5-AI7k) zH8uDVd58ZzdkOo48t#eTsO_V+pW08HFpJXn92XsOIKWXN6RsaA1 diff --git a/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/Astro/Content/Integrator/NotificationActor.uexp b/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/Astro/Content/Integrator/NotificationActor.uexp deleted file mode 100644 index e9e3a914500bc3390f14c33c0564c009ae468bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1201 zcmah|O>5Lp6n)WAN2i)WBwf{HP;9LW(_~^MxX>m|tmx>X%PwT3wIj&5@MEVG^e5<2 zaU*VAxvAjFg?m8@f*&ifih>&jcjGxP@1?<5df|S&d(OS@zR4X=tc$_Wab&`i7UunM zI6R>af$}vCHW18i1hU=fjlk^yiaQYh!ZmEmqB@j#aSh@v&_hrPu}DTaw^_d{{-FMV z%9WkIgMGI`Pbn}~o_A5g+*Pe^@UJJ6O=}pJgKAv-#3aQ*k?z4$ihL2|dD&qb;@!{@ z=nm*3w0EIrAHbXwgv}pl9@9wX!N!I7vpzU)5SedDppk^bhTXloaLq{vy^B{C7lhsE zxSp2!74%<>3F^{zmSxGY zG!3VsI0&a>*NZ#t89!$IJJ!?4dRz3rBOaB9ajR?cdGd|@ugs5I`{Zl;Ypft>&t2~= zT^=lni3#g`j(s6>Kd_TWKOl4v&6_Y|&py4r)zW)0>RR1eW6oG!29!(rcjnj9QsfPz z2!Va$43NFhJ{>vdWGk|1yrO6BjtRcPi|72FBni~{vGYVxGYSKRH9 zCu>jdzv@2!z4D^@cxCm7VoWJt%x9}a`E|!tj>|>SWIeas=Uo8!YRaa>R?e$Fj$O)E Tm*f9_hfN6|@ms#UGx_i@bmNx` diff --git a/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/metadata.json b/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/metadata.json index dff2f27..fcae8d2 100644 --- a/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/metadata.json +++ b/astro_mod_integrator/baked/800-CoreMod-0.1.0_P/metadata.json @@ -5,7 +5,6 @@ "version": "0.1.0", "author": "AstroTechies", "integrator": { - "persistent_actors": ["/Game/Integrator/NotificationActor"], "persistent_actor_maps": [ "Astro/Content/Maps/Staging_T2.umap", "Astro/Content/Maps/Staging_T2_PackedPlanets_Switch.umap", diff --git a/astro_mod_integrator/src/assets.rs b/astro_mod_integrator/src/assets.rs index d75412c..b6be074 100644 --- a/astro_mod_integrator/src/assets.rs +++ b/astro_mod_integrator/src/assets.rs @@ -2,8 +2,9 @@ pub(crate) const ACTOR_TEMPLATE_ASSET: &[u8] = include_bytes!("../assets/ActorTe pub(crate) const ACTOR_TEMPLATE_EXPORT: &[u8] = include_bytes!("../assets/ActorTemplate.uexp"); -pub(crate) const ALERT_MOD_NOTIFICATION_ACTOR_ASSET: &[u8] = +/*pub(crate) const ALERT_MOD_NOTIFICATION_ACTOR_ASSET: &[u8] = include_bytes!("../assets/alert_mod/NotificationActor.uasset"); pub(crate) const ALERT_MOD_NOTIFICATION_ACTOR_EXPORT: &[u8] = - include_bytes!("../assets/alert_mod/NotificationActor.uexp"); + include_bytes!("../assets/alert_mod/NotificationActor.uexp");*/ + \ No newline at end of file diff --git a/astro_mod_integrator/src/handlers/biome_placement_modifiers.rs b/astro_mod_integrator/src/handlers/biome_placement_modifiers.rs index b1a787c..03c128b 100644 --- a/astro_mod_integrator/src/handlers/biome_placement_modifiers.rs +++ b/astro_mod_integrator/src/handlers/biome_placement_modifiers.rs @@ -1,3 +1,5 @@ +#![allow(clippy::io_other_error)] + use std::collections::HashMap; use std::fs::File; use std::io::{self, BufReader, ErrorKind}; @@ -66,7 +68,7 @@ pub(crate) fn handle_biome_placement_modifiers( game_paks, mod_paks, &map_path.to_string(), - EngineVersion::VER_UE4_23, + EngineVersion::VER_UE4_27, )?; let mut voxel_exports = HashMap::new(); diff --git a/astro_mod_integrator/src/handlers/item_list_entries.rs b/astro_mod_integrator/src/handlers/item_list_entries.rs index 8e7092c..1293f2b 100644 --- a/astro_mod_integrator/src/handlers/item_list_entries.rs +++ b/astro_mod_integrator/src/handlers/item_list_entries.rs @@ -45,6 +45,10 @@ pub(crate) fn handle_item_list_entries( // this provides backwards compatibility for older mods // this can just be suppressed by specifying an entry for /Game/Items/ItemTypes/BaseGameInitialKnownItemList in metadata let exists_bgikil = item_list_entries_map.contains_key("/Game/Items/ItemTypes/BaseGameInitialKnownItemList"); + let exists_bgikil2 = item_list_entries_map.contains_key("/Game/U32_Expansion/Items/GW_InitialKnownItemList"); + let exists_bgikil3 = item_list_entries_map.contains_key("/Game/Items/ItemLists/BackpackPrinterItemList_GW"); + let exists_bgikil4 = item_list_entries_map.contains_key("/Game/Items/ItemLists/T1PrinterItemList_GW"); + let exists_bgikil5 = item_list_entries_map.contains_key("/Game/Items/ItemLists/T2PrinterItemList_GW"); for (name, item_list_entries) in item_list_entries_map { let item_list_entries = item_list_entries @@ -80,6 +84,38 @@ pub(crate) fn handle_item_list_entries( .or_insert_with(HashMap::new) .extend(orig_entry); } + if name == "/Game/Items/ItemTypes/MasterItemList" && !exists_bgikil2 { + let orig_entry = new_items.entry(name.clone()).or_insert_with(HashMap::new).clone(); + + new_items + .entry(String::from("/Game/U32_Expansion/Items/GW_InitialKnownItemList")) + .or_insert_with(HashMap::new) + .extend(orig_entry); + } + if name == "/Game/Items/ItemLists/BackpackPrinterItemList" && !exists_bgikil3 { + let orig_entry = new_items.entry(name.clone()).or_insert_with(HashMap::new).clone(); + + new_items + .entry(String::from("/Game/Items/ItemLists/BackpackPrinterItemList_GW")) + .or_insert_with(HashMap::new) + .extend(orig_entry); + } + if name == "/Game/Items/ItemLists/T1PrinterItemList" && !exists_bgikil4 { + let orig_entry = new_items.entry(name.clone()).or_insert_with(HashMap::new).clone(); + + new_items + .entry(String::from("/Game/Items/ItemLists/T1PrinterItemList_GW")) + .or_insert_with(HashMap::new) + .extend(orig_entry); + } + if name == "/Game/Items/ItemLists/T2PrinterItemList" && !exists_bgikil5 { + let orig_entry = new_items.entry(name.clone()).or_insert_with(HashMap::new).clone(); + + new_items + .entry(String::from("/Game/Items/ItemLists/T2PrinterItemList_GW")) + .or_insert_with(HashMap::new) + .extend(orig_entry); + } } } @@ -91,7 +127,7 @@ pub(crate) fn handle_item_list_entries( game_paks, mod_paks, &asset_name, - EngineVersion::VER_UE4_23, + EngineVersion::VER_UE4_27, )?; let mut item_types_property: HashMap> = HashMap::new(); diff --git a/astro_mod_integrator/src/handlers/linked_actor_components.rs b/astro_mod_integrator/src/handlers/linked_actor_components.rs index bf06594..517e06d 100644 --- a/astro_mod_integrator/src/handlers/linked_actor_components.rs +++ b/astro_mod_integrator/src/handlers/linked_actor_components.rs @@ -1,3 +1,5 @@ +#![allow(clippy::io_other_error)] + use std::collections::HashMap; use std::fs::File; use std::io::{self, BufReader, Cursor, ErrorKind}; @@ -12,13 +14,14 @@ use unreal_mod_manager::unreal_asset::{ cast, engine_version::EngineVersion, exports::{Export, ExportBaseTrait, ExportNormalTrait}, - flags::EObjectFlags, + enums::{EArrayDim, ELifetimeCondition}, + flags::{EObjectFlags, EPropertyFlags}, properties::{ guid_property::GuidProperty, int_property::BoolProperty, object_property::ObjectProperty, str_property::NameProperty, struct_property::StructProperty, Property, PropertyDataTrait, }, types::PackageIndex, - uproperty::UProperty, + fproperty::{FGenericProperty, FObjectProperty}, Asset, Import, }; use unreal_mod_manager::unreal_helpers::{game_to_absolute, Guid}; @@ -42,15 +45,15 @@ pub(crate) fn handle_linked_actor_components( let actor_asset = Asset::new( Cursor::new(ACTOR_TEMPLATE_ASSET.to_vec()), Some(Cursor::new(ACTOR_TEMPLATE_EXPORT.to_vec())), - EngineVersion::VER_UE4_23, + EngineVersion::VER_UE4_27, None, ) .map_err(|e| io::Error::new(ErrorKind::Other, e.to_string()))?; let gen_variable = cast!(Export, NormalExport, &actor_asset.asset_data.exports[0]) .expect("Corrupted ActorTemplate"); - let component_export = cast!(Export, PropertyExport, &actor_asset.asset_data.exports[1]) - .expect("Corrupted ActorTemplate"); + //let component_export = cast!(Export, PropertyExport, &actor_asset.asset_data.exports[1]) + // .expect("Corrupted ActorTemplate"); let scs_export = cast!(Export, NormalExport, &actor_asset.asset_data.exports[2]) .expect("Corrupted ActorTemplate"); @@ -83,7 +86,7 @@ pub(crate) fn handle_linked_actor_components( game_paks, mod_paks, &name, - EngineVersion::VER_UE4_23, + EngineVersion::VER_UE4_27, )?; for component_path_raw in components { @@ -124,13 +127,14 @@ pub(crate) fn handle_linked_actor_components( let script_core_uobject = asset.add_fname("/Script/CoreUObject"); let name_class = asset.add_fname("Class"); - let object_property = asset.add_fname("ObjectProperty"); - let default_object_property = asset.add_fname("Default__ObjectProperty"); + //let object_property = asset.add_fname("ObjectProperty"); + //let default_object_property = asset.add_fname("Default__ObjectProperty"); let name_scs_node = asset.add_fname("SCS_Node"); let script_engine = asset.add_fname("/Script/Engine"); let default_scs_node = asset.add_fname("Default__SCS_Node"); - let class_object_property_import = asset + // 4.23 + /*let class_object_property_import = asset .find_import_no_index(&script_core_uobject, &name_class, &object_property) .expect("No class object property import"); @@ -140,7 +144,7 @@ pub(crate) fn handle_linked_actor_components( &object_property, &default_object_property, ) - .expect("No default objectproperty"); + .expect("No default objectproperty");*/ let scs_node_import = asset .find_import_no_index(&script_core_uobject, &name_class, &name_scs_node) @@ -193,12 +197,13 @@ pub(crate) fn handle_linked_actor_components( }; let default_import = asset.add_import(default_import); - let mut component_export = component_export.clone(); + // 4.23 + /*let mut component_export = component_export.clone(); let component_object_property = cast!(UProperty, UObjectProperty, &mut component_export.property) .ok_or_else(|| io::Error::new(ErrorKind::Other, "Corrupted starter pak"))?; component_object_property.property_class = blueprint_generated_class_import; - + let component_base_export = component_export.get_base_export_mut(); component_base_export.object_name = asset.add_fname(component); component_base_export.create_before_serialization_dependencies = @@ -213,6 +218,7 @@ pub(crate) fn handle_linked_actor_components( asset.asset_data.exports.push(component_export.into()); let component_export_index = asset.asset_data.exports.len() as i32; + let actor_export = cast!( Export, ClassExport, @@ -228,7 +234,39 @@ pub(crate) fn handle_linked_actor_components( .normal_export .base_export .serialization_before_serialization_dependencies - .push(PackageIndex::new(component_export_index)); + .push(PackageIndex::new(component_export_index));*/ + + // 4.27 + let fname_object_property = asset.add_fname("ObjectProperty"); + let fname_none = asset.add_fname("None"); + let component_no_c = String::from(component); + let fprop_generic = FGenericProperty { + serialized_type: Some(fname_object_property), + name: asset.add_fname(&component_no_c), + array_dim: EArrayDim::TArray, + element_size: 8, + property_flags: EPropertyFlags::CPF_BLUEPRINT_VISIBLE | EPropertyFlags::CPF_INSTANCED_REFERENCE | EPropertyFlags::CPF_NON_TRANSACTIONAL, + rep_index: 0, + rep_notify_func: fname_none, + blueprint_replication_condition: ELifetimeCondition::CondNone, + flags: EObjectFlags::RF_PUBLIC | EObjectFlags::RF_LOAD_COMPLETED + }; + let fprop = FObjectProperty { + property_class: blueprint_generated_class_import, + generic_property: fprop_generic + }; + + let actor_export = cast!( + Export, + ClassExport, + &mut asset.asset_data.exports[actor_index] + ) + .expect("Corrupted memory"); + + actor_export + .struct_export + .loaded_properties + .push(fprop.into()); let mut component_gen_variable = gen_variable.clone(); let component_gen_variable_base_export = component_gen_variable.get_base_export_mut(); diff --git a/astro_mod_integrator/src/handlers/mission_trailheads.rs b/astro_mod_integrator/src/handlers/mission_trailheads.rs index d430add..1fabe7b 100644 --- a/astro_mod_integrator/src/handlers/mission_trailheads.rs +++ b/astro_mod_integrator/src/handlers/mission_trailheads.rs @@ -1,3 +1,5 @@ +#![allow(clippy::io_other_error)] + use std::fs::File; use std::io::{self, BufReader, ErrorKind}; use std::path::Path; @@ -35,7 +37,7 @@ pub(crate) fn handle_mission_trailheads( game_paks, mod_paks, &String::from(map_path), - EngineVersion::VER_UE4_23, + EngineVersion::VER_UE4_27, )?; let mut trailheads = Vec::new(); diff --git a/astro_mod_integrator/src/handlers/mod.rs b/astro_mod_integrator/src/handlers/mod.rs index 1ae5791..349ce89 100644 --- a/astro_mod_integrator/src/handlers/mod.rs +++ b/astro_mod_integrator/src/handlers/mod.rs @@ -1,3 +1,5 @@ +#![allow(clippy::io_other_error)] + use lazy_static::lazy_static; use regex::Regex; diff --git a/astro_mod_integrator/src/lib.rs b/astro_mod_integrator/src/lib.rs index 75eb4b5..890941b 100644 --- a/astro_mod_integrator/src/lib.rs +++ b/astro_mod_integrator/src/lib.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use lazy_static::lazy_static; use unreal_mod_manager::unreal_asset::engine_version::EngineVersion; -use unreal_mod_manager::unreal_helpers::game_to_absolute; +//use unreal_mod_manager::unreal_helpers::game_to_absolute; use unreal_mod_manager::unreal_mod_integrator::{ BakedMod, Error, HandlerFn, IntegratorConfig, IntegratorMod, }; @@ -20,7 +20,7 @@ pub struct AstroIntegratorConfig; lazy_static! { static ref FILE_REFS: HashMap = HashMap::from([ - ( + /*( game_to_absolute( AstroIntegratorConfig::GAME_NAME, "/Game/Integrator/NotificationActor.uasset" @@ -35,7 +35,7 @@ lazy_static! { ) .unwrap(), assets::ALERT_MOD_NOTIFICATION_ACTOR_EXPORT - ), + ),*/ ]); } @@ -84,5 +84,5 @@ impl<'data> IntegratorConfig<'data, (), Error> for AstroIntegratorConfig { const GAME_NAME: &'static str = "Astro"; const INTEGRATOR_VERSION: &'static str = env!("CARGO_PKG_VERSION"); - const ENGINE_VERSION: EngineVersion = EngineVersion::VER_UE4_23; + const ENGINE_VERSION: EngineVersion = EngineVersion::VER_UE4_27; } diff --git a/astro_modloader/src/main.rs b/astro_modloader/src/main.rs index f6703d1..a9c3971 100644 --- a/astro_modloader/src/main.rs +++ b/astro_modloader/src/main.rs @@ -179,6 +179,7 @@ where Box::new(MsStoreInstallManager::new( "SystemEraSoftworks", "ASTRONEER", + "AppSystemEraSoftworks29415440E1269Shipping", "Astro", )), );