结算增加保底
This commit is contained in:
parent
0453dd3ba8
commit
cc521c7b0a
@ -1876,6 +1876,13 @@ namespace RuntimeData
|
||||
// 用于使用指定地图的地图相关内容重生成
|
||||
public void RegenerateMap(MapRecordData recordData)
|
||||
{
|
||||
foreach (var player in PlayerMap.PlayerDataList)
|
||||
{
|
||||
player.Alive = false;
|
||||
player.DieMark = false;
|
||||
player.IsSurrender = false;
|
||||
}
|
||||
|
||||
foreach (var grid in GridMap.GridList)
|
||||
{
|
||||
if (recordData.GridMap.GetGridDataByPos(grid.Pos.X, grid.Pos.Y, out var recordGrid))
|
||||
@ -1907,6 +1914,7 @@ namespace RuntimeData
|
||||
if (p == null)
|
||||
{
|
||||
LogSystem.LogError($"RegenerateMap Error 找不到地图 {recordData.MapName} 的玩家文明信息 Civ={playerInfo.Civ} Force={playerInfo.Force}");
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (var cityInfo in playerInfo.Cities)
|
||||
@ -1914,11 +1922,13 @@ namespace RuntimeData
|
||||
if (!GridMap.GetGridDataByPos(cityInfo.X, cityInfo.Y, out var cityGrid))
|
||||
{
|
||||
LogSystem.LogError($"RegenerateMap Error 找不到地图 {recordData.MapName} 的城市格子信息 Pos=({cityInfo.X},{cityInfo.Y})");
|
||||
continue;
|
||||
}
|
||||
|
||||
//建设一个新城市
|
||||
CityData c = AddCityData(cityGrid.Id, p.Id);
|
||||
c.Level = cityInfo.Level;
|
||||
p.Alive = true;
|
||||
if (cityInfo.IsCapital)
|
||||
{
|
||||
//设置该城市为首都
|
||||
@ -1932,6 +1942,7 @@ namespace RuntimeData
|
||||
if (!GridMap.GetGridDataByPos(unitInfo.X, unitInfo.Y, out var unitGrid))
|
||||
{
|
||||
LogSystem.LogError($"RegenerateMap Error 找不到地图 {recordData.MapName} 的城市格子信息 Pos=({unitInfo.X},{unitInfo.Y})");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (AddUnitData(unitGrid.Id, c.Id, unitInfo.UnitFullType, out var newUnit))
|
||||
@ -1939,6 +1950,18 @@ namespace RuntimeData
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var player in PlayerMap.PlayerDataList)
|
||||
{
|
||||
if (GetCityCount(player.Id) > 0)
|
||||
{
|
||||
player.Alive = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
player.Alive = false;
|
||||
player.DieMark = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 用于使用指定地图进游戏的清理工作
|
||||
|
||||
@ -231,7 +231,7 @@ namespace Logic.Editor
|
||||
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("添加玩家结算器"))
|
||||
{
|
||||
mapConfig.PlayerSettlements.Add(new PlayerSettlementInfo());
|
||||
mapConfig.PlayerSettlements.Add(CreateDefaultPlayerSettlementInfo());
|
||||
}
|
||||
|
||||
deleteIndex = -1;
|
||||
@ -270,7 +270,7 @@ namespace Logic.Editor
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth("添加任务"))
|
||||
{
|
||||
var newTask = new PlayerTaskInfo();
|
||||
var newTask = CreateDefaultPlayerTaskInfo();
|
||||
settlementInfo.Tasks.Add(newTask);
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
@ -288,6 +288,31 @@ namespace Logic.Editor
|
||||
return isDelete;
|
||||
}
|
||||
|
||||
private static PlayerSettlementInfo CreateDefaultPlayerSettlementInfo()
|
||||
{
|
||||
return new PlayerSettlementInfo
|
||||
{
|
||||
SettlementType = PlayerSettlementType.AllSuccessOrFailure,
|
||||
IsSettlement = false,
|
||||
IsWin = false,
|
||||
Tasks = new List<PlayerTaskInfo> { CreateDefaultPlayerTaskInfo() }
|
||||
};
|
||||
}
|
||||
|
||||
private static PlayerTaskInfo CreateDefaultPlayerTaskInfo()
|
||||
{
|
||||
return new PlayerTaskInfo
|
||||
{
|
||||
TaskType = PlayerTaskType.OtherDie,
|
||||
IsSettlement = false,
|
||||
IsSuccess = false,
|
||||
Param1 = -1,
|
||||
Param2 = 0,
|
||||
Param3 = 0,
|
||||
Param4 = UnitType.None
|
||||
};
|
||||
}
|
||||
|
||||
private bool OnGUITask(PlayerTaskInfo taskInfo, int index)
|
||||
{
|
||||
EditorGUILayout.BeginVertical(_whiteBoxStyle, GUILayout.Width(500));
|
||||
@ -387,4 +412,4 @@ namespace Logic.Editor
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,13 +43,15 @@ namespace TH1_Logic.MatchConfig
|
||||
|
||||
public void Init(MapData map, MapConfig config)
|
||||
{
|
||||
SettlementType = config.MatchSettlement;
|
||||
SettlementType = config?.MatchSettlement ?? MatchSettlementType.None;
|
||||
IsFinished = false;
|
||||
PlayerSettlements ??= new Dictionary<uint, PlayerSettlementGroup>();
|
||||
PlayerSettlements.Clear();
|
||||
var protectedSettlements = BuildProtectedSettlements(config);
|
||||
foreach (var player in map.PlayerMap.PlayerDataList)
|
||||
{
|
||||
PlayerSettlements[player.Id] = new PlayerSettlementGroup();
|
||||
PlayerSettlements[player.Id].Init(config.PlayerSettlements);
|
||||
PlayerSettlements[player.Id].Init(protectedSettlements);
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,6 +85,138 @@ namespace TH1_Logic.MatchConfig
|
||||
PlayerSettlements[kv.Key] = new PlayerSettlementGroup(kv.Value);
|
||||
}
|
||||
}
|
||||
|
||||
private static List<PlayerSettlementInfo> BuildProtectedSettlements(MapConfig config)
|
||||
{
|
||||
var protectedSettlements = new List<PlayerSettlementInfo>();
|
||||
var sourceSettlements = config?.PlayerSettlements;
|
||||
if (sourceSettlements != null)
|
||||
{
|
||||
foreach (var sourceSettlement in sourceSettlements)
|
||||
{
|
||||
if (sourceSettlement == null)
|
||||
{
|
||||
LogSystem.LogWarning("MatchSettlement.Init: 检测到空的 PlayerSettlementInfo,已跳过。");
|
||||
continue;
|
||||
}
|
||||
|
||||
protectedSettlements.Add(BuildProtectedSettlement(
|
||||
sourceSettlement,
|
||||
config?.MatchSettlement ?? MatchSettlementType.None));
|
||||
}
|
||||
}
|
||||
|
||||
if (protectedSettlements.Count > 0) return protectedSettlements;
|
||||
|
||||
LogSystem.LogWarning(
|
||||
$"MatchSettlement.Init: 结算配置为空或无效,已注入默认结算任务。MatchType={config?.MatchSettlement}");
|
||||
protectedSettlements.Add(CreateFallbackSettlement(config?.MatchSettlement ?? MatchSettlementType.None));
|
||||
return protectedSettlements;
|
||||
}
|
||||
|
||||
private static PlayerSettlementInfo BuildProtectedSettlement(
|
||||
PlayerSettlementInfo sourceSettlement,
|
||||
MatchSettlementType matchType)
|
||||
{
|
||||
var settlementType = sourceSettlement.SettlementType;
|
||||
if (settlementType == PlayerSettlementType.None)
|
||||
{
|
||||
LogSystem.LogWarning("MatchSettlement.Init: SettlementType=None,已自动修正为 AllSuccessOrFailure。");
|
||||
settlementType = PlayerSettlementType.AllSuccessOrFailure;
|
||||
}
|
||||
|
||||
var settlement = new PlayerSettlementInfo
|
||||
{
|
||||
SettlementType = settlementType,
|
||||
IsSettlement = false,
|
||||
IsWin = false,
|
||||
Tasks = new List<PlayerTaskInfo>()
|
||||
};
|
||||
|
||||
if (sourceSettlement.Tasks != null)
|
||||
{
|
||||
foreach (var sourceTask in sourceSettlement.Tasks)
|
||||
{
|
||||
if (sourceTask == null)
|
||||
{
|
||||
LogSystem.LogWarning("MatchSettlement.Init: 检测到空的 PlayerTaskInfo,已跳过。");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sourceTask.TaskType == PlayerTaskType.None)
|
||||
{
|
||||
LogSystem.LogWarning("MatchSettlement.Init: TaskType=None,已跳过该任务。");
|
||||
continue;
|
||||
}
|
||||
|
||||
settlement.Tasks.Add(new PlayerTaskInfo
|
||||
{
|
||||
TaskType = sourceTask.TaskType,
|
||||
IsSettlement = false,
|
||||
IsSuccess = false,
|
||||
Param1 = sourceTask.Param1,
|
||||
Param2 = sourceTask.Param2,
|
||||
Param3 = sourceTask.Param3,
|
||||
Param4 = sourceTask.Param4,
|
||||
Param1Cur = 0,
|
||||
Param2Cur = 0,
|
||||
Param3Cur = 0
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (settlement.Tasks.Count > 0) return settlement;
|
||||
|
||||
LogSystem.LogWarning("MatchSettlement.Init: 结算器任务为空或无效,已注入默认任务。");
|
||||
settlement.Tasks.Add(CreateFallbackTask(matchType));
|
||||
return settlement;
|
||||
}
|
||||
|
||||
private static PlayerSettlementInfo CreateFallbackSettlement(MatchSettlementType matchType)
|
||||
{
|
||||
return new PlayerSettlementInfo
|
||||
{
|
||||
SettlementType = PlayerSettlementType.AllSuccessOrFailure,
|
||||
IsSettlement = false,
|
||||
IsWin = false,
|
||||
Tasks = new List<PlayerTaskInfo> { CreateFallbackTask(matchType) }
|
||||
};
|
||||
}
|
||||
|
||||
private static PlayerTaskInfo CreateFallbackTask(MatchSettlementType matchType)
|
||||
{
|
||||
// 教程/剧情默认给可收敛的生存任务;其他模式默认给“其他玩家死亡”任务(N-1)
|
||||
if (matchType == MatchSettlementType.Tutor || matchType == MatchSettlementType.Story)
|
||||
{
|
||||
return new PlayerTaskInfo
|
||||
{
|
||||
TaskType = PlayerTaskType.SurviveOrLoseMatch,
|
||||
IsSettlement = false,
|
||||
IsSuccess = false,
|
||||
Param1 = 1,
|
||||
Param2 = 0,
|
||||
Param3 = 0,
|
||||
Param4 = UnitType.None,
|
||||
Param1Cur = 0,
|
||||
Param2Cur = 0,
|
||||
Param3Cur = 0
|
||||
};
|
||||
}
|
||||
|
||||
return new PlayerTaskInfo
|
||||
{
|
||||
TaskType = PlayerTaskType.OtherDie,
|
||||
IsSettlement = false,
|
||||
IsSuccess = false,
|
||||
Param1 = -1,
|
||||
Param2 = 0,
|
||||
Param3 = 0,
|
||||
Param4 = UnitType.None,
|
||||
Param1Cur = 0,
|
||||
Param2Cur = 0,
|
||||
Param3Cur = 0
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -278,4 +412,4 @@ namespace TH1_Logic.MatchConfig
|
||||
info.IsFinished = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user