This commit is contained in:
wuwenbo 2025-08-28 17:59:55 +08:00
commit 4ca091a1cc
21 changed files with 5949 additions and 3061 deletions

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -66,7 +66,7 @@ MonoBehaviour:
FeelingStrategyInfoList:
- FeelingStrategy: 0
FeelingStrategyTitle: "\u660E\u667A\u7684"
FeelingStrategyDesc: "\u60A8\u5BF9\u5176\u4ED6\u56FD\u5BB6\u7684\u5916\u4EA4\u7B56\u7565\u4E0E\u5979\u4EEC\u76F8\u8FD1"
FeelingStrategyDesc: "\u4F60\u4EEC\u6709\u76F8\u540C\u7684\u654C\u4EBA\u6216\u8005\u76DF\u53CB"
FeelingStrategyColor: {r: 0, g: 1, b: 0, a: 0}
- FeelingStrategy: 1
FeelingStrategyTitle: "\u8FF7\u4EBA\u7684"
@ -106,7 +106,7 @@ MonoBehaviour:
FeelingStrategyColor: {r: 1, g: 0, b: 0, a: 0}
- FeelingStrategy: 10
FeelingStrategyTitle: "\u611A\u8822\u7684"
FeelingStrategyDesc: "\u60A8\u5BF9\u5176\u4ED6\u56FD\u5BB6\u7684\u5916\u4EA4\u7B56\u7565\u4E0E\u5979\u4EEC\u7684\u5F88\u4E0D\u4E00\u81F4"
FeelingStrategyDesc: "\u60A8\u7684\u654C\u4EBA/\u76DF\u53CB\u662F\u5979\u4EEC\u7684\u76DF\u53CB/\u654C\u4EBA"
FeelingStrategyColor: {r: 1, g: 0, b: 0, a: 0}
- FeelingStrategy: 11
FeelingStrategyTitle: "\u8B66\u60D5\u7684"

View File

@ -12,7 +12,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c659b850b20e460f866ed3f696be406b, type: 3}
m_Name: VersionConfig
m_EditorClassIdentifier:
CurVersionId: 10201
CurVersionId: 10300
Versions:
- MajorVersion: 1
MinorVersion: 0
@ -74,3 +74,7 @@ MonoBehaviour:
PatchVersion: 1
Description: "[\u8865\u4E01\u7248\u672C\uFF1ADemo 1.2.1.1]\n\u53D1\u5E03\u65E5\u671F\uFF1A25.8.17\n[\u7D27\u6025\u4FEE\u590D]\n\u4FEE\u590D\u4E86\u53EF\u4EE5\u654C\u65B9\u5355\u4F4D\u884C\u52A8\u680F\u663E\u793A\u9519\u8BEF\u7684bug\u3002\n[\u82F1\u96C4\u8BBE\u8BA1\u8C03\u6574]\n1.\u5E15\u79CB\u8389\xB7\u8BFA\u857E\u59ECLv.0\u79FB\u9664\u7687\u5BB6\u70C8\u7130\u6280\u80FD\uFF0C\u65B0\u589E\u6280\u80FD\u5723\u7231\u5C14\u6469\u706B\u67F1\uFF0C\u65B0\u589E\u57FA\u7840\u6280\u80FD\u51B2\u950B\uFF0C\u8C03\u6574\u4E86\u751F\u547D\u503C\u6210\u957F10/15/20/25/30/30\n2.\u857E\u7C73\u8389\u4E9A\xB7\u65AF\u5361\u96F7\u7279Lv.0\u8C03\u6574\u751F\u547D\u503C15->20\n3.\u8299\u5170\u6735\u9732Lv.0\u79FB\u9664\u65E0\u89C6\u654C\u65B9\u63A7\u5236\u533A\u6280\u80FD\uFF0C\u539F\u56DB\u91CD\u5B58\u5728\u6280\u80FD\u8C03\u6574\u4E3A\uFF1ALv.1\u53CC\u91CD\u5B58\u5728\uFF0CLv2\u4E09\u91CD\u5B58\u5728\uFF0CLv3\u56DB\u91CD\u5B58\u5728\n\n[Bug\u4E0E\u4F18\u5316]\n1.\u4FEE\u590D\u4E86\u8299\u5170\u6735\u9732\u548C\u9A91\u5175\u53EF\u4EE5\u8FDE\u7EED\u653B\u51FB\u4E24\u6B21\u7684bug\n2.\u4FEE\u590D\u4E86\u6D77\u4E0A\u9057\u8FF9\u53EF\u80FD\u4F1A\u8BA9\u5F53\u524D\u5355\u4F4D\u6D88\u5931\u7684bug\n3.\u4FEE\u590D\u4E86\u5404\u79CD\u63CF\u8FF0\u63D0\u793A\u6846\u9519\u4F4D\u7684bug\n4.\u4FEE\u590D\u4E86\u90E8\u5206\u6280\u80FD\u63CF\u8FF0\u4E2D\u6587\u5B57\u4E22\u5931\u663E\u793A\u4E3A\u65B9\u6846\u7684bug\n5.\u4FEE\u590D\u4E86\u857E\u7C73\u5728\u654C\u4EBA\u9996\u90FD\u4E5F\u80FD\u4F20\u9001\u7684bug\n6.\u4FEE\u590D\u4E86\u79D1\u6280\u70B9\u548C\u91D1\u5E01\u6DF7\u7528\u65F6\uFF0C\u663E\u793A\u91D1\u94B1\u4E0D\u591F\u7684bug\n7.\u4FEE\u590D\u4E86\u9635\u8425\u9009\u62E9\u754C\u9762\u63D0\u793A\u4FE1\u606F\u663E\u793A\u4E0D\u5168\u7684bug\n8.\u4FEE\u590D\u4E86\u53EF\u4EE5\u79FB\u52A8\u7684\u5355\u4F4D\u6CA1\u6709\u88AB\u9AD8\u4EAE\u7684bug\n9.\u4FEE\u590D\u4E86\u53EF\u653B\u51FB\u5176\u4ED6\u654C\u4EBA\u6216\u8005\u4E0D\u53EF\u653B\u51FB\u5176\u4ED6\u654C\u4EBA\u65F6\uFF0C\u5355\u4F4D\u7684\u9AD8\u4EAE\u663E\u793A\u51FA\u9519\u7684bug\n10.\u4FEE\u590D\u4E86\u70B9\u51FB\u79D1\u6280\u8FC7\u5FEB\u4F1A\u6263\u8D39\u4E24\u6B21\u7684bug\n11.\u4FEE\u590D\u4E86\u654C\u65B9\u5DE8\u4EBA\u6218\u8239\u4F1A\u5BF9\u53CB\u519B\u9020\u6210\u6E85\u5C04\u4F24\u5BB3\u7684bug\n12.\u4F18\u5316\u4E86\u9057\u8FF9\u83B7\u5F97\u7684\u5355\u4F4D\uFF0C\u73B0\u5728\u83B7\u5F97\u5355\u4F4D\u5C06\u4F1A\u662F\u5DF2\u7ECF\u5347\u7EA7\u5B8C\u6210\u7684\u5355\u4F4D\n13.\u4FEE\u590D\u4E86\u654C\u519B\u63A7\u5236\u533A\u5728\u9053\u8DEF\u52A0\u6301\u4E0B\u5931\u6548\u7684bug\n14.\u4FEE\u590D\u4E86\u654C\u4EBA\u9886\u5730\u865A\u7EBF\u663E\u793A\u4E0D\u6E05\u6670\u7684bug\n15.\u4FEE\u590D\u4E86\u5F80\u671F\u7248\u672C\u516C\u544A\u754C\u9762
\u5C45\u4E2D\u663E\u793A\u6587\u5B57\u7684bug\n16.\u4FEE\u590D\u4E86\u6211\u65B9\u4F4E\u9762\u5355\u4F4D\u51FB\u6740\u654C\u65B9\u6E2F\u53E3\u5355\u4F4D\u540E\u53D8\u6210\u8239\u7684bug\n17.\u4FEE\u590D\u4E86\u6211\u65B9\u5355\u4F4D\u51FB\u6740\u654C\u65B9\u6E2F\u53E3\u7684\u654C\u519B\u540E\uFF0C\u4E0D\u4F1A\u4E0B\u6D77\u7684bug\n18.\u518D\u6B21\u4FEE\u590D\u4E86AI\u7A7A\u57CE\u62F1\u624B\u8BA9\u4EBA\u7684bug\n19.\u4FEE\u590D\u4E86\u519B\u8425\u65E0\u6CD5\u751F\u4EA7\u82F1\u96C4\u7684bug"
- MajorVersion: 1
MinorVersion: 3
PatchVersion: 0
Description: 11

View File

@ -66,7 +66,7 @@ MonoBehaviour:
FeelingStrategyInfoList:
- FeelingStrategy: 0
FeelingStrategyTitle: 1686
FeelingStrategyDesc: 1710
FeelingStrategyDesc: 1731
FeelingStrategyColor: {r: 0, g: 1, b: 0, a: 0}
- FeelingStrategy: 1
FeelingStrategyTitle: 1688
@ -106,7 +106,7 @@ MonoBehaviour:
FeelingStrategyColor: {r: 1, g: 0, b: 0, a: 0}
- FeelingStrategy: 10
FeelingStrategyTitle: 1704
FeelingStrategyDesc: 1705
FeelingStrategyDesc: 1732
FeelingStrategyColor: {r: 1, g: 0, b: 0, a: 0}
- FeelingStrategy: 11
FeelingStrategyTitle: 1706

View File

@ -10908,4 +10908,16 @@ MonoBehaviour:
EN:
JP:
KR:
- ID: 1731
ZH: "\u4F60\u4EEC\u6709\u76F8\u540C\u7684\u654C\u4EBA\u6216\u8005\u76DF\u53CB"
TDZH:
EN:
JP:
KR:
- ID: 1732
ZH: "\u60A8\u7684\u654C\u4EBA/\u76DF\u53CB\u662F\u5979\u4EEC\u7684\u76DF\u53CB/\u654C\u4EBA"
TDZH:
EN:
JP:
KR:
TargetTypes: 0100000001000000010000000100000001000000

View File

@ -826,9 +826,12 @@ namespace Logic.Action
// 执行后逻辑
protected virtual void AfterExecute(CommonActionParams actionParams, bool isMoment)
{
//更新所有人的外交好感情况。临时用的
foreach(var pData in actionParams.MapData.PlayerMap.PlayerDataList)
pData.RefreshFeelingValue(actionParams.MapData);
//更新所有人的外交好感情况。临时用的。必须真map才做AI预测的不做性能爆炸了
if (actionParams.MapData == Main.MapData)
{
foreach (var pData in actionParams.MapData.PlayerMap.PlayerDataList)
pData.RefreshFeelingValue(actionParams.MapData);
}
}
public abstract bool CheckCan(CommonActionParams actionParams);

View File

@ -54,24 +54,36 @@ namespace TH1_Logic.Action
MapData map = actionParams.MapData;
PlayerData player = actionParams.PlayerData;
PlayerData targetPlayer = actionParams.TargetPlayerData;
if (!map.GetCapitalCityDataByPlayerId(actionParams.TargetPlayerData.Id, out var city)) return false;
if (!map.GetGridDataByCityId(city.Id, out var grid)) return false;
if (!map.GetCapitalCityDataByPlayerId(actionParams.TargetPlayerData.Id, out var targetCity)) return false;
if (!map.GetCapitalCityDataByPlayerId(actionParams.PlayerData.Id, out var city)) return false;
if (!map.GetGridDataByCityId(targetCity.Id, out var targetGrid)) return false;
actionParams.PlayerData.DiplomacyData.GetCountryDiplomacyInfo(actionParams.TargetPlayerData.Id, out var dipInfo);
actionParams.TargetPlayerData.DiplomacyData.GetCountryDiplomacyInfo(actionParams.PlayerData.Id,out var dipInfo2);
//Step #2 处理大使馆和撤销大使馆
//Step #2 处理大使馆
if (_actionId.PlayerActionType == PlayerActionType.Embassy)
{
//Step #1建立大使馆,并更新对应城市的视觉,播放大使馆建立特效 & Notify通知
//Step #1建立大使馆,
dipInfo.IsEmbassy = true;
city.CityInfoRenderMark = true;
grid.VFXRenderMarkTreasure = true;
//如果是真人玩家 在其他首都建立大使馆,更新对应城市的视觉,播放大使馆建立特效
if (actionParams.MapData == Main.MapData && player.Id == Main.MapData.PlayerMap.SelfPlayerId)
{
targetCity.CityInfoRenderMark = true;
targetGrid.VFXRenderMarkTreasure = true;
}
//如果是真人玩家 AI在真人玩家的首都建立大使馆更新对应城市的视觉,
if (actionParams.MapData == Main.MapData && targetPlayer.Id == Main.MapData.PlayerMap.SelfPlayerId)
{
city.CityInfoRenderMark = true;
}
//Step #2 如果对方还没有meet我加入meetlist
if(!targetPlayer.MeetPlayers.Contains(player.Id))
Main.PlayerLogic.AddMeetPlayer(map,targetPlayer,player);
//Step #3 更新大使馆周围一格的视野,会自动处理视觉部分
var gidList = map.GridMap.GetAroundGridIdList(1,grid,true );
var gidList = map.GridMap.GetAroundGridIdList(1,targetGrid,true );
Main.PlayerLogic.UpdateSight(map,player,gidList);
//step #4 扣钱
@ -123,11 +135,20 @@ namespace TH1_Logic.Action
dipInfo.IsLeagueRequest = false;
dipInfo.DiplomacyState = DiplomacyState.League;
dipInfo2.DiplomacyState = DiplomacyState.League;
//Step #2 如果target是真map真人玩家 弹出一个presentationUI 提示,达成盟友
//Step #2 如果target是真map真人玩家 弹出一个presentationUI 提示,达成盟友更新双方首都的cityinfo
if (map == Main.MapData && targetPlayer.Id == map.PlayerMap.SelfPlayerId)
{
var announcement = new ShowUIAnnounceDiplomacy { PlayerActionType = PlayerActionType.AcceptAlly,PlayerId = player.Id,TargetPlayerId = targetPlayer.Id };
EventManager.Publish(announcement);
city.CityInfoRenderMark = true;
targetCity.CityInfoRenderMark = true;
}
//Step #3 如果是真map我方是真人玩家更新双方首都的cityinfo
if (map == Main.MapData && player.Id == map.PlayerMap.SelfPlayerId)
{
city.CityInfoRenderMark = true;
targetCity.CityInfoRenderMark = true;
}
return true;
}
@ -152,12 +173,49 @@ namespace TH1_Logic.Action
//Step #1 设置双方的外交状态为背盟
dipInfo.DiplomacyState = DiplomacyState.LeagueRupture;
dipInfo2.DiplomacyState = DiplomacyState.LeagueRupture;
//Step #2 如果target是真map真人玩家 弹出一个presentationUI 提示,明确背叛对方
//Step #2 所有单位跳过本回合,所有对方领土的单位自动解散
foreach (var unit in map.UnitMap.UnitList)
{
if(!map.GetPlayerDataByUnitId(unit.Id,out var uplayer))continue;
if(uplayer.Id != player.Id) continue;
if (!map.GetGridDataByUnitId(unit.Id, out var ugrid)) continue;
var hasPlayer = map.GetPlayerDataByTerritoryGridId(ugrid.Id, out var ugridPlayer);
//如果是对方领土上的己方unit强制解散
if (hasPlayer && ugridPlayer.Id == targetPlayer.Id)
{
var action = ActionLogicFactory.GetActionLogic(new CommonActionId()
{ ActionType = CommonActionType.UnitAction, UnitActionType = UnitActionType.Disband });
if (action != null)
action.CompleteExecute(new CommonActionParams()
{
MainObjectType = MainObjectType.Unit,
UnitData = unit,
PlayerData = player
},false);
}
else
{
unit.ClearAPMPCP();
unit.RenderMark = true;
}
}
//Step #3 如果target是真map真人玩家 弹出一个presentationUI 提示,明确背叛对方,更新双方cityinfo
if (map == Main.MapData && targetPlayer.Id == map.PlayerMap.SelfPlayerId)
{
var announcement = new ShowUIAnnounceDiplomacy { PlayerActionType = PlayerActionType.BreakAlly,PlayerId = player.Id,TargetPlayerId = targetPlayer.Id };
EventManager.Publish(announcement);
city.CityInfoRenderMark = true;
targetCity.CityInfoRenderMark = true;
}
//Step #4 如果我方是真map真人玩家更新双方cityinfo
if (map == Main.MapData && player.Id == map.PlayerMap.SelfPlayerId)
{
city.CityInfoRenderMark = true;
targetCity.CityInfoRenderMark = true;
}
return true;
}

View File

@ -32,6 +32,15 @@ namespace Logic.Action
protected override bool Execute(CommonActionParams actionParams, bool isMoment)
{
//临时使用用来给解除联盟的disband特判用的
if (isMoment == false)
{
}
else
{
if (!CheckCan(actionParams)) return false;
}
//鲁棒性判断
if (actionParams.UnitData == null) return false;
var unitData = actionParams.UnitData;
@ -187,7 +196,7 @@ namespace Logic.Action
int recoverV = 4;
if (!actionParams.MapData.GetPlayerDataByTerritoryGridId(gridData.Id, out var terrPlayerData))
recoverV = 2;
else if (terrPlayerData != actionParams.PlayerData)
else if (!actionParams.MapData.SameUnion(terrPlayerData.Id , actionParams.PlayerData.Id))
recoverV = 2;
actionParams.UnitData.Health += recoverV;
gridData.VFXRenderMarkHeal = true;

View File

@ -1,5 +1,4 @@
using System.Collections.Generic;
using ET.Server;
using Logic.CrashSight;
using MongoDB.Driver.Core.Misc;
using UnityEngine;

View File

@ -137,9 +137,13 @@ namespace Logic
Main.PlayerLogic.UpdateSight(mapData,playerData,mapData.GridMap.GetAroundGridIdList(radius,gridData));
//更新所有人的外交好感情况。临时用的
foreach(var pData in mapData.PlayerMap.PlayerDataList)
pData.RefreshFeelingValue(mapData);
//更新所有人的外交好感情况。临时用的。必须真map才做AI预测的不做性能爆炸了
if (mapData == Main.MapData)
{
foreach(var pData in mapData.PlayerMap.PlayerDataList)
pData.RefreshFeelingValue(mapData);
}
//判断unit是否走到了另一个玩家的城市里如果是要设置两国状态为战争
if (mapData.GetCityDataByGid(gridData.Id, out var city)

View File

@ -4,7 +4,6 @@ using TMPro;
using RuntimeData;
using Logic;
using Animancer;
using ET.Server;
using Logic.Multilingual;
using TH1_Logic.Core;
using TH1Resource;

View File

@ -3,7 +3,6 @@ using UnityEngine;
using Logic;
using RuntimeData;
using Animancer;
using ET.Client;
using Logic.Config;
using UnityEngine.UI;
using Logic.Multilingual;

View File

@ -96,6 +96,7 @@ namespace TH1_UI.Core
public void HideCurTask()
{
if (_task == null) return;
_task.Close();
}

File diff suppressed because one or more lines are too long

View File

@ -140,7 +140,7 @@ PlayerSettings:
loadStoreDebugModeEnabled: 0
visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0
bundleVersion: 1.2.1
bundleVersion: 1.3.0
preloadedAssets: []
metroInputSource: 0
wsaTransparentSwapchain: 0