Sorrow446 / HLSE-Hogwarts-Legacy-Save-Editor

Save editor for Hogwarts Legacy written in Go.
60 stars 4 forks source link

Unlocking all Fast Travel locations #18

Open kennedy opened 1 year ago

kennedy commented 1 year ago

Add the ability to quickly unlock all Fast Travel points.

In MapLocationDataDynamic table, any MapLocationID that starts with FT_ (for fast travel) are Foo locations.

State values:

MapLocationID values:

Note, I am not sure what would happen unlocking CommonRooms outside your assigned house, I suggest skipping any modifications towards CommonRoom FT points.

kennedy commented 1 year ago

I am going to test this by manually setting and injecting the DB into my save file

kennedy commented 1 year ago

image

It works!

kennedy commented 1 year ago

Unfortunately, it seemingly looks unlocks on the map, but its not usable. I was not able to fast travel to these.

Sorrow446 commented 1 year ago

Damn, try taking a look around in LockableComponentsDynamic and LocksDynamic.

Can unlock common rooms in LockableComponentsDynamic.

kennedy commented 1 year ago

@Sorrow446, good advice on the LocksDynamic table. I just discovered that once you unlock a new fast travel spot, it would be added to LocksDynamic with a value of 0.

I shall experiment with this.

Sorrow446 commented 1 year ago

Yep, I've just found a few FT_ in LocksDynamic. I think the MapLocationDataDynamic is just for displaying purposes on the map.

kennedy commented 1 year ago

@Sorrow446 I compared the two tables and found the missing LocksDynamic items from MapLocationDataDynamic. Once I added them (minus the CommonRooms) I was able to fast travel to there now 😄!

Sorrow446 commented 1 year ago

Great news. Could you send me all the strings or your save with all unlocked?

kennedy commented 1 year ago

@Sorrow446 sure

FT_OL_ArchiesFort_HS_AH
FT_OL_BothyA_CO_AM
FT_OL_BothyA_CO_AS
FT_OL_BothyA_CO_BA
FT_OL_BothyA_CO_BQ
FT_OL_BothyA_HN_AK
FT_OL_BothyA_HN_AP
FT_OL_BothyA_HN_AS
FT_OL_BothyA_HN_BI
FT_OL_BothyA_HS_AW
FT_OL_BothyA_HS_AZ
FT_OL_Cairn_Dungeon_2_CO_AA
FT_OL_CairnDungeon3_HS_BF
FT_OL_CastleArbroath_CO_BQ
FT_OL_CastleChepstow_HS_AW
FT_OL_CastleDungeon1_TU_BB
FT_OL_CastleJerpoint_CO_AG
FT_OL_CavDungeon12_CO_AV
FT_OL_CaveOfDarkness_CO_AH
FT_OL_CoastalEntrance_CO_AA
FT_OL_CoastRegionVault_HS_BA
FT_OL_DarkForestEast_HN_AU
FT_OL_DFBanditCamp_HN_AN
FT_OL_FalbartonCastle_FO_AU
FT_OL_Fig07Graphorn_CO_BB
FT_OL_Forbidden_Forest_Entrance_HN_AV
FT_OL_GoblinBridge_CO_AM
FT_OL_Gobmine_Dungeon_07_HS_BA
FT_OL_GobmineDungeon06_CO_AN
FT_OL_HamletHalkirk_CO_BB
FT_OL_HamletHearth_HN_BD
FT_OL_HamletHelmsdale_CO_BD
FT_OL_HamletIrondale_HS_AY
FT_OL_HamletKeenbridge_HS_AR
FT_OL_HamletKinloch_HS_AW
FT_OL_HamletLowerHogsfield_HN_BG
FT_OL_HamletMaruweem_CO_AT
FT_OL_HamletMotherwell_HN_BJ
FT_OL_HamletStirling_HN_AS
FT_OL_NorthBogEntrance_HN_AO
FT_OL_NorthFeldcroft_HS_AG
FT_OL_OldIsidoraCastle_CO_AS
FT_OL_PercivalsTower_HN_AK
FT_OL_Pitt-UponFord_HN_AK
FT_OL_SanctumDungeonCavern2_HN_AU
FT_OL_SNC_02_MooncalfDen_HN_AZ
FT_OL_TheCollectorsCave_HN_AU
FT_HW_AstronomyTower
FT_HW_BellTowerCourtyard
FT_HW_Boathouse
FT_HW_CentralTower
FT_HW_CharmsClass
FT_HW_ClockTowerCourtyard
FT_HW_DADATower
FT_HW_DadaClass
FT_HW_DivinationClass
FT_HW_FacultyTower
FT_HW_FigClass
FT_HW_FlyingClass
FT_HW_GrandStaircase
FT_HW_GrandstaircaseTower
FT_HW_GreatHall
FT_HW_Greenhouses
FT_HW_Haven
FT_HW_HospitalWing
FT_HW_Library
FT_HW_LowerGrandstaircase
FT_HW_MagicalCreatures
FT_HW_NorthExitHogwarts
FT_HW_NorthTower
FT_HW_PotionsClass
FT_HW_QuadCourtyard
FT_HW_RavenclawTower
FT_HW_RoomOfRequirement
FT_HW_SouthExitHogwarts
FT_HW_TransfigurationClass
FT_HW_TransfigurationCourtyard
FT_HW_TrophyRoom
FT_HW_ViaductCourtyard
FT_Hogsmeade_North
FT_Hogsmeade_South
FT_Hogsmeade_West
kennedy commented 1 year ago

I made a safer way to find the missing fast travel points:

select MapLocationDataDynamic.MapLocationID 
from MapLocationDataDynamic
left OUTER join LocksDynamic on MapLocationDataDynamic.MapLocationID = LocksDynamic.LockID
where MapLocationDataDynamic.MapLocationID like 'FT_%' 
    and MapLocationID not like '%CommonRoom'
    and LocksDynamic.LockID is NULL

EDIT: ignore

kennedy commented 1 year ago

here is a better solution. This would add the LocksDynamic and ignore the ones already present.

INSERT OR IGNORE INTO LocksDynamic(LockID)
select MapLocationID
from MapLocationDataDynamic
where 
MapLocationID like 'FT_%' and
MapLocationID not like '%CommonRoom'
kennedy commented 1 year ago

This would update fast-travel locations in the MapLocationDataDynamic table with state value 9

UPDATE MapLocationDataDynamic
set State = 9
where 
MapLocationID like 'FT_%' and
MapLocationID not like '%CommonRoom'