diff --git a/Unity/Assets/Scripts/TH1_Data/MapData.cs b/Unity/Assets/Scripts/TH1_Data/MapData.cs index 7cf66a6d6..a7fcb729e 100644 --- a/Unity/Assets/Scripts/TH1_Data/MapData.cs +++ b/Unity/Assets/Scripts/TH1_Data/MapData.cs @@ -111,6 +111,12 @@ namespace RuntimeData SetSinglePlayerCiv(civId, forceId); } + public MapConfig CreateRuntimeCopy() + { + var bytes = MemoryPackSerializer.Serialize(this); + return MemoryPackSerializer.Deserialize(bytes); + } + // MemoryPack 反序列化之后的后处理 [MemoryPackOnDeserialized] public void OnAfterMemoryPackDeserialize() @@ -1985,10 +1991,10 @@ namespace RuntimeData public MapData(MapConfig mapCfg, NetMode netMode) { MapID = (uint)Guid.NewGuid().GetHashCode(); - MapConfig = mapCfg; + MapConfig = mapCfg.CreateRuntimeCopy(); _idGenerator = new MapIdGenerator(); - GridMap = new GridMapData(mapCfg, _idGenerator); + GridMap = new GridMapData(MapConfig, _idGenerator); PlayerMap = new PlayerMapData(this, _idGenerator, netMode); CityMap = new CityMapData(); UnitMap = new UnitMapData(); @@ -2001,7 +2007,7 @@ namespace RuntimeData CityToGridDict = new Dictionary(); _gridToCityDict = new Dictionary(); _gridToUnitDict = new Dictionary(); - MatchSettlement.Init(this, mapCfg); + MatchSettlement.Init(this, MapConfig); } public MapData(MapData copyMap) @@ -2102,7 +2108,6 @@ namespace RuntimeData action.Param.MapData = this; action.Param.RefreshParams(); } - MapConfig?.ApplyTeamDiplomacy(this); } // 当场上有小兵受伤前