新阵营模块开发

This commit is contained in:
daixiawu 2026-06-05 19:59:32 +08:00
parent c03eaebdb3
commit d583ddc52b
44 changed files with 30368 additions and 6181 deletions

View File

@ -27,6 +27,8 @@ This repository is a Unity 2022.3 LTS / ET Framework turn-based strategy game. T
- Do not make UI-only, AI-only, or network-receiver-only data mutations that bypass the shared action layer unless the existing design for that subsystem already does so.
- For multiplayer-safe logic, avoid `UnityEngine.Random`, wall-clock time, unordered iteration, and direct `Main.MapData` assumptions inside simulated or synchronized execution paths.
- For Excel-backed keys such as `UnitFullType`, `SkillType` level pairs, resources, terrain, and tech atoms, inspect the actual config rows before coding. Do not infer current data from similar entries.
- Game-facing non-debug text must not be hardcoded in code. Add or reuse fields in the appropriate DataAssets/data tables, then read them through the existing data/table and localization path.
- Do not modify export-flow outputs such as `Unity/Assets/Resources/Export/*`, `Tools/Multilingual.xlsx`, or `Tools/MultilingualTxt.txt` unless the user explicitly asks for export/import workflow changes. These files are produced by the user's manual export process.
- For multilingual translation, keep target-language text close to the Chinese source length where practical. Preserve meaning first, but prefer concise game UI wording; trim only explanatory redundancy when a common in-game localization style allows it. Do not delete core differentiating terms just to shorten text: `房间名称` must preserve the `Name` meaning (`Room Name`, not `Room`), and `玩家席位` must preserve the player/slot distinction (`Player Slots`, not just `Slots`) unless the UI context independently supplies that missing meaning. Treat short UI status labels as labels, not explanatory sentences: for example, translate `密码房间` as `Private` / `鍵付き` / `잠금방`, not `Password-Protected Room` / `パスワード付きルーム` / `비밀번호 방`.
- Unity `.meta` files are part of source control and must be preserved when assets move or are created.
- Generated files should only be edited through the project generator or documented editor workflow.

View File

@ -1,5 +1,5 @@
{
"nextId": 315,
"nextId": 317,
"bugs": [
{
"id": 2,
@ -3167,6 +3167,28 @@
"longTerm": false,
"createdAt": 1780634066941,
"updatedAt": 1780634066941
},
{
"id": 315,
"title": "小恶魔被恐惧炸死进不了二阶段",
"description": "",
"status": "open",
"priority": "medium",
"module": "",
"longTerm": false,
"createdAt": 1780647613219,
"updatedAt": 1780647613219
},
{
"id": 316,
"title": "啥时候公示下资源生成系数",
"description": "",
"status": "open",
"priority": "medium",
"module": "",
"longTerm": false,
"createdAt": 1780654816747,
"updatedAt": 1780654816747
}
]
}

View File

@ -1,5 +1,5 @@
{
"nextId": 8,
"nextId": 9,
"suggestions": [
{
"id": 1,
@ -63,6 +63,15 @@
"module": "",
"createdAt": 1780493042134,
"updatedAt": 1780493042134
},
{
"id": 8,
"title": "小提议,可以加一个英雄总次数,在三星后,英雄成就界面显示一个“出战此英雄并胜利的总次数” 。我觉得这样的话,会让玩家更有成就感和动力(",
"description": "",
"status": "open",
"module": "",
"createdAt": 1780657783648,
"updatedAt": 1780657783648
}
]
}

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -2,22 +2,21 @@ using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
// =================================== SkillDataAssets 自定义编辑器(带搜索功能) ===================================
[CustomEditor(typeof(SkillDataAssets))]
public class SkillDataAssetsEditor : Editor
{
private const float ListViewHeight = 600f;
private const float ItemPadding = 4f;
private const float ItemSpacing = 2f;
private const float DeleteButtonWidth = 25f;
private readonly List<int> _filteredIndices = new List<int>();
private string _searchFilter = "";
private List<int> _filteredIndices = new List<int>();
private SerializedProperty _skillInfoListProperty;
private Vector2 _scrollPosition;
private bool _isSearching = false;
private bool _isSearching;
private bool _needsFilterUpdate = true;
// 搜索过滤相关
private double _lastFilterUpdateTime;
private const double FILTER_UPDATE_DELAY = 0.1; // 100ms延迟
private void OnEnable()
{
_skillInfoListProperty = serializedObject.FindProperty("SkillInfoList");
@ -26,50 +25,36 @@ public class SkillDataAssetsEditor : Editor
private void OnDisable()
{
// 清理
_filteredIndices?.Clear();
_filteredIndices.Clear();
}
public override void OnInspectorGUI()
{
// 性能优化:只在真正需要时更新序列化对象
bool needsUpdate = Event.current.type == EventType.Layout ||
Event.current.type == EventType.Repaint ||
GUI.changed;
serializedObject.Update();
if (needsUpdate)
serializedObject.Update();
// 绘制默认的其他字段
DrawPropertiesExcluding(serializedObject, "SkillInfoList");
EditorGUILayout.Space(10);
EditorGUILayout.LabelField("技能列表", EditorStyles.boldLabel);
// 新增技能按钮(搜索模式下禁用)
if (_isSearching)
using (new EditorGUI.DisabledGroupScope(_isSearching))
{
GUI.enabled = false;
}
if (GUILayout.Button("新增 Skill", GUILayout.Height(30)))
{
_skillInfoListProperty.arraySize++;
var newElement = _skillInfoListProperty.GetArrayElementAtIndex(_skillInfoListProperty.arraySize - 1);
var skillTypeProp = newElement.FindPropertyRelative("SkillType");
if (skillTypeProp != null)
if (GUILayout.Button("新增 Skill", GUILayout.Height(30)))
{
skillTypeProp.enumValueIndex = 0;
_skillInfoListProperty.arraySize++;
SerializedProperty newElement = _skillInfoListProperty.GetArrayElementAtIndex(_skillInfoListProperty.arraySize - 1);
SerializedProperty skillTypeProp = newElement.FindPropertyRelative("SkillType");
if (skillTypeProp != null)
skillTypeProp.enumValueIndex = 0;
newElement.isExpanded = true;
serializedObject.ApplyModifiedProperties();
_scrollPosition.y = float.MaxValue;
}
newElement.isExpanded = true;
serializedObject.ApplyModifiedProperties();
// 滚动到底部(新项目在最后)
_scrollPosition.y = float.MaxValue;
}
GUI.enabled = true;
EditorGUILayout.Space(5);
// 搜索框
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("搜索:", GUILayout.Width(100));
string newFilter = EditorGUILayout.TextField(_searchFilter);
@ -80,148 +65,194 @@ public class SkillDataAssetsEditor : Editor
}
EditorGUILayout.EndHorizontal();
// 检测搜索内容变化(使用延迟更新避免频繁过滤)
if (newFilter != _searchFilter)
{
_searchFilter = newFilter;
_isSearching = !string.IsNullOrEmpty(_searchFilter);
// 延迟到下一帧更新过滤结果,减少输入时的卡顿
_needsFilterUpdate = true;
}
// 在Layout阶段更新过滤列表确保Layout和Repaint阶段控件数一致
if (_needsFilterUpdate && Event.current.type == EventType.Layout)
{
UpdateFilteredIndices();
_needsFilterUpdate = false;
}
// 显示筛选状态
if (_isSearching)
{
EditorGUILayout.LabelField($"筛选结果: {_filteredIndices.Count} 个技能", EditorStyles.miniLabel);
}
EditorGUILayout.Space(5);
// 绘制 SkillInfoList
if (_skillInfoListProperty != null)
{
_skillInfoListProperty.isExpanded = EditorGUILayout.Foldout(_skillInfoListProperty.isExpanded, $"Skill Info List ({(_isSearching ? _filteredIndices.Count : _skillInfoListProperty.arraySize)} items)", true);
int visibleCount = _isSearching ? _filteredIndices.Count : _skillInfoListProperty.arraySize;
_skillInfoListProperty.isExpanded = EditorGUILayout.Foldout(
_skillInfoListProperty.isExpanded,
$"Skill Info List ({visibleCount} items)",
true);
if (_skillInfoListProperty.isExpanded)
{
_scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, GUILayout.MaxHeight(600));
_scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, GUILayout.MaxHeight(ListViewHeight));
if (_isSearching)
{
// 搜索模式:手动绘制筛选后的项
if (_filteredIndices.Count == 0)
{
EditorGUILayout.HelpBox("没有找到匹配的技能", MessageType.Info);
}
else
{
foreach (int index in _filteredIndices)
{
DrawSkillInfoItem(index);
}
}
DrawVirtualizedFilteredList();
}
else
{
// 正常模式:倒序显示(序号大的在前面),每个项目带删除按钮
DrawSkillInfoListReverse();
DrawVirtualizedReverseList();
}
EditorGUILayout.EndScrollView();
}
}
// 性能优化只在GUI变更时应用修改避免无意义的序列化操作
if (GUI.changed)
{
serializedObject.ApplyModifiedProperties();
}
private void DrawVirtualizedFilteredList()
{
float visibleTop = _scrollPosition.y;
float visibleBottom = visibleTop + ListViewHeight;
float currentY = 0f;
for (int i = 0; i < _filteredIndices.Count; i++)
{
int index = _filteredIndices[i];
SerializedProperty element = _skillInfoListProperty.GetArrayElementAtIndex(index);
float height = GetSkillInfoItemHeight(element);
DrawOrSkipSkillInfoItem(index, element, false, currentY, height, visibleTop, visibleBottom);
currentY += height;
}
}
private void DrawSkillInfoItem(int index)
private void DrawVirtualizedReverseList()
{
SerializedProperty element = _skillInfoListProperty.GetArrayElementAtIndex(index);
string skillTypeName = GetCachedSkillTypeName(index, element);
string skillDisplayName = GetCachedSkillDisplayName(index, element);
float visibleTop = _scrollPosition.y;
float visibleBottom = visibleTop + ListViewHeight;
float currentY = 0f;
// 绘制背景高亮
Rect bgRect = EditorGUILayout.BeginVertical(GUI.skin.box);
EditorGUI.DrawRect(bgRect, new Color(0.2f, 0.8f, 0.2f, 0.05f));
// 绘制折叠标题(显示 SkillType 和 SkillName
string title = $"[{index}] {skillTypeName}";
if (!string.IsNullOrEmpty(skillDisplayName))
for (int index = _skillInfoListProperty.arraySize - 1; index >= 0; index--)
{
title += $" - {skillDisplayName}";
SerializedProperty element = _skillInfoListProperty.GetArrayElementAtIndex(index);
float height = GetSkillInfoItemHeight(element);
DrawOrSkipSkillInfoItem(index, element, true, currentY, height, visibleTop, visibleBottom);
currentY += height;
}
}
private void DrawOrSkipSkillInfoItem(
int index,
SerializedProperty element,
bool showDelete,
float currentY,
float height,
float visibleTop,
float visibleBottom)
{
bool isVisible = currentY + height >= visibleTop && currentY <= visibleBottom;
if (!isVisible)
{
GUILayout.Space(height);
return;
}
Rect rect = GUILayoutUtility.GetRect(0f, height, GUILayout.ExpandWidth(true));
DrawSkillInfoItem(rect, index, element, showDelete);
}
private float GetSkillInfoItemHeight(SerializedProperty element)
{
float height = ItemPadding + EditorGUIUtility.singleLineHeight + ItemPadding + ItemSpacing;
if (!element.isExpanded)
return height;
SerializedProperty childProp = element.Copy();
SerializedProperty end = childProp.GetEndProperty();
childProp.NextVisible(true);
while (!SerializedProperty.EqualContents(childProp, end))
{
height += EditorGUI.GetPropertyHeight(childProp, true) + EditorGUIUtility.standardVerticalSpacing;
if (!childProp.NextVisible(false))
break;
}
return height + ItemPadding;
}
private void DrawSkillInfoItem(Rect rect, int index, SerializedProperty element, bool showDelete)
{
GUI.Box(rect, GUIContent.none, GUI.skin.box);
Rect contentRect = new Rect(
rect.x + ItemPadding,
rect.y + ItemPadding,
rect.width - ItemPadding * 2f,
rect.height - ItemPadding * 2f);
Rect foldoutRect = new Rect(
contentRect.x,
contentRect.y,
showDelete ? contentRect.width - DeleteButtonWidth - ItemPadding : contentRect.width,
EditorGUIUtility.singleLineHeight);
string title = BuildSkillTitle(index, element);
bool wasExpanded = element.isExpanded;
element.isExpanded = EditorGUILayout.Foldout(wasExpanded, title, true);
bool newExpanded = EditorGUI.Foldout(foldoutRect, wasExpanded, title, true);
if (newExpanded != wasExpanded)
element.isExpanded = newExpanded;
// 用切换前的值决定是否绘制子属性确保Layout和Repaint阶段控件数一致
if (wasExpanded)
if (showDelete)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(element, GUIContent.none, true);
EditorGUI.indentLevel--;
}
Rect deleteRect = new Rect(
contentRect.xMax - DeleteButtonWidth,
contentRect.y,
DeleteButtonWidth,
EditorGUIUtility.singleLineHeight);
EditorGUILayout.Space(2);
EditorGUILayout.EndVertical();
}
private void DrawSkillInfoListReverse()
{
// 倒序遍历:序号大的显示在前面
int arraySize = _skillInfoListProperty.arraySize;
for (int i = arraySize - 1; i >= 0; i--)
{
SerializedProperty element = _skillInfoListProperty.GetArrayElementAtIndex(i);
string skillTypeName = GetCachedSkillTypeName(i, element);
string skillDisplayName = GetCachedSkillDisplayName(i, element);
EditorGUILayout.BeginVertical(GUI.skin.box);
// 标题行Foldout + 删除按钮
EditorGUILayout.BeginHorizontal();
// 绘制折叠标题(显示 SkillType 和 SkillName
string title = $"[{i}] {skillTypeName}";
if (!string.IsNullOrEmpty(skillDisplayName))
if (GUI.Button(deleteRect, "-"))
{
title += $" - {skillDisplayName}";
}
bool wasExpanded = element.isExpanded;
element.isExpanded = EditorGUILayout.Foldout(wasExpanded, title, true);
// 删除按钮
if (GUILayout.Button("-", GUILayout.Width(25), GUILayout.Height(20)))
{
_skillInfoListProperty.DeleteArrayElementAtIndex(i);
_skillInfoListProperty.DeleteArrayElementAtIndex(index);
serializedObject.ApplyModifiedProperties();
GUIUtility.ExitGUI();
return;
}
EditorGUILayout.EndHorizontal();
// 用切换前的值决定是否绘制子属性确保Layout和Repaint阶段控件数一致
if (wasExpanded)
{
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(element, GUIContent.none, true);
EditorGUI.indentLevel--;
}
EditorGUILayout.Space(2);
EditorGUILayout.EndVertical();
}
// Use the previous expansion state so Layout/Repaint keep the same control tree.
if (wasExpanded)
DrawSkillInfoChildren(contentRect, element);
}
private void DrawSkillInfoChildren(Rect contentRect, SerializedProperty element)
{
EditorGUI.indentLevel++;
float y = contentRect.y + EditorGUIUtility.singleLineHeight + ItemPadding;
SerializedProperty childProp = element.Copy();
SerializedProperty end = childProp.GetEndProperty();
childProp.NextVisible(true);
while (!SerializedProperty.EqualContents(childProp, end))
{
float height = EditorGUI.GetPropertyHeight(childProp, true);
Rect fieldRect = new Rect(contentRect.x, y, contentRect.width, height);
EditorGUI.PropertyField(fieldRect, childProp, true);
y += height + EditorGUIUtility.standardVerticalSpacing;
if (!childProp.NextVisible(false))
break;
}
EditorGUI.indentLevel--;
}
private void UpdateFilteredIndices()
@ -231,89 +262,82 @@ public class SkillDataAssetsEditor : Editor
if (_skillInfoListProperty == null || string.IsNullOrEmpty(_searchFilter))
return;
string lowerFilter = _searchFilter.ToLower();
int arraySize = _skillInfoListProperty.arraySize;
for (int i = 0; i < arraySize; i++)
{
SerializedProperty element = _skillInfoListProperty.GetArrayElementAtIndex(i);
string skillTypeName = GetCachedSkillTypeName(i, element);
string skillDisplayName = GetCachedSkillDisplayName(i, element);
string skillTypeName = GetSkillTypeName(element);
string skillDisplayName = GetSkillDisplayName(element);
if (skillTypeName.ToLower().Contains(lowerFilter)
|| (!string.IsNullOrEmpty(skillDisplayName) && skillDisplayName.ToLower().Contains(lowerFilter)))
if (ContainsIgnoreCase(skillTypeName, _searchFilter) ||
ContainsIgnoreCase(skillDisplayName, _searchFilter))
{
_filteredIndices.Add(i);
}
}
}
// 简单的名称获取,不做跨帧缓存(避免数组变化时缓存失效)
private string GetCachedSkillTypeName(int index, SerializedProperty skillInfoProperty)
private static string BuildSkillTitle(int index, SerializedProperty skillInfoProperty)
{
var skillTypeProp = skillInfoProperty.FindPropertyRelative("SkillType");
return skillTypeProp != null ? skillTypeProp.enumDisplayNames[skillTypeProp.enumValueIndex] : "Unknown";
string skillTypeName = GetSkillTypeName(skillInfoProperty);
string skillDisplayName = GetSkillDisplayName(skillInfoProperty);
if (string.IsNullOrEmpty(skillDisplayName))
return $"[{index}] {skillTypeName}";
return $"[{index}] {skillTypeName} - {skillDisplayName}";
}
private string GetCachedSkillDisplayName(int index, SerializedProperty skillInfoProperty)
private static string GetSkillTypeName(SerializedProperty skillInfoProperty)
{
var skillNameProp = skillInfoProperty.FindPropertyRelative("SkillName");
SerializedProperty skillTypeProp = skillInfoProperty.FindPropertyRelative("SkillType");
if (skillTypeProp == null ||
skillTypeProp.enumValueIndex < 0 ||
skillTypeProp.enumValueIndex >= skillTypeProp.enumDisplayNames.Length)
{
return "Unknown";
}
return skillTypeProp.enumDisplayNames[skillTypeProp.enumValueIndex];
}
private static string GetSkillDisplayName(SerializedProperty skillInfoProperty)
{
SerializedProperty skillNameProp = skillInfoProperty.FindPropertyRelative("SkillName");
return skillNameProp != null ? skillNameProp.stringValue : "";
}
// 兼容旧代码的调用方式
private string GetSkillTypeName(SerializedProperty skillInfoProperty)
private static bool ContainsIgnoreCase(string value, string filter)
{
return GetCachedSkillTypeName(-1, skillInfoProperty);
}
private string GetSkillDisplayName(SerializedProperty skillInfoProperty)
{
return GetCachedSkillDisplayName(-1, skillInfoProperty);
return !string.IsNullOrEmpty(value) &&
value.IndexOf(filter, System.StringComparison.OrdinalIgnoreCase) >= 0;
}
}
// =================================== SkillInfo Property Drawer用于其他地方 ===================================
[CustomPropertyDrawer(typeof(SkillInfo))]
public class SkillInfoDrawer : PropertyDrawer
{
// 缓存字段高度避免重复计算
private float _cachedHeight = -1;
private int _expandedCheckIndex = -1;
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginChangeCheck();
// Step 1: 获取 SkillType
var skillProp = property.FindPropertyRelative("SkillType");
string skillName = skillProp?.enumDisplayNames[skillProp.enumValueIndex];
SerializedProperty skillProp = property.FindPropertyRelative("SkillType");
string skillName = skillProp != null &&
skillProp.enumValueIndex >= 0 &&
skillProp.enumValueIndex < skillProp.enumDisplayNames.Length
? skillProp.enumDisplayNames[skillProp.enumValueIndex]
: label.text;
// 创建新的 GUIContent不修改传入的 label
GUIContent newLabel = new GUIContent(skillName);
// Step 2: 显示 Foldout
property.isExpanded = EditorGUI.Foldout(
new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight),
property.isExpanded,
newLabel,
true
);
new GUIContent(skillName),
true);
// Step 3: 展开显示所有字段
if (property.isExpanded)
{
EditorGUI.indentLevel++;
float y = position.y + EditorGUIUtility.singleLineHeight + 2;
// 缓存展开状态变更检测
int currentIndex = property.GetHashCode();
if (_expandedCheckIndex != currentIndex)
{
_cachedHeight = -1;
_expandedCheckIndex = currentIndex;
}
float y = position.y + EditorGUIUtility.singleLineHeight + 2f;
SerializedProperty childProp = property.Copy();
SerializedProperty end = childProp.GetEndProperty();
@ -321,13 +345,9 @@ public class SkillInfoDrawer : PropertyDrawer
while (!SerializedProperty.EqualContents(childProp, end))
{
float h = EditorGUI.GetPropertyHeight(childProp, true);
EditorGUI.PropertyField(
new Rect(position.x, y, position.width, h),
childProp,
true
);
y += h + EditorGUIUtility.standardVerticalSpacing;
float height = EditorGUI.GetPropertyHeight(childProp, true);
EditorGUI.PropertyField(new Rect(position.x, y, position.width, height), childProp, true);
y += height + EditorGUIUtility.standardVerticalSpacing;
if (!childProp.NextVisible(false))
break;
@ -336,25 +356,16 @@ public class SkillInfoDrawer : PropertyDrawer
EditorGUI.indentLevel--;
}
// 统一检测变更,减少序列化同步频率
if (EditorGUI.EndChangeCheck())
{
GUI.changed = true;
}
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
// 快速路径:未展开时返回固定高度
if (!property.isExpanded)
return EditorGUIUtility.singleLineHeight + 2;
return EditorGUIUtility.singleLineHeight + 2f;
// 缓存高度计算结果
int propHash = property.GetHashCode();
if (_cachedHeight > 0 && _expandedCheckIndex == propHash)
return _cachedHeight;
float height = EditorGUIUtility.singleLineHeight + 2;
float height = EditorGUIUtility.singleLineHeight + 2f;
SerializedProperty childProp = property.Copy();
SerializedProperty end = childProp.GetEndProperty();
@ -367,7 +378,6 @@ public class SkillInfoDrawer : PropertyDrawer
break;
}
_cachedHeight = height;
return height;
}
}

View File

@ -7825,14 +7825,14 @@ MonoBehaviour:
PlayerActionType: 0
AIParamType: 0
CultureCardType: 0
ActionName: "\u6587\u5316\u6FC0\u52B1"
Desc: "\u7ACB\u5373\u83B7\u5F97**<2\u6587\u5316\u503C>**"
ActionName: "\u4E66\u9662"
Desc: "\u57CE\u5E02\u5174\u529E**<\u4E66\u9662>**\uFF0C\u7ACB\u5373\u83B7\u5F97**<2\u6587\u5316\u503C>**"
NeedTechDesc: 0
TechDesc:
NeedLockDesc: 0
LockDesc:
Icon: {fileID: 21300000, guid: 84e729f8b11878441be9314fc0791d8a, type: 3}
IconViewSizeType: 0
Icon: {fileID: 21300000, guid: fc0f2c0896702b04882773d9a9cd711f, type: 3}
IconViewSizeType: 2
VarientIcon: 0
IconList: []
Cost: 0
@ -8802,3 +8802,36 @@ MonoBehaviour:
NoNeedTech: 1
SpriteSize: {x: 120, y: 120}
SpritePos: {x: 0, y: 35}
- ActionId:
ActionType: 6
WonderType: 0
ResourceType: 0
FeatureType: 0
TerrainType: 0
UnitType: 0
GiantType: 0
UnitLevel: 0
Vegetation: 0
UnitActionType: 27
CityLevelUpActionType: 0
GridMiscActionType: 0
SkillType: 0
TechType: 0
PlayerActionType: 0
AIParamType: 0
CultureCardType: 0
ActionName: "\u5347\u7EA7"
Desc: "\u6D88\u8017**<\u6587\u5316\u70B9>**\u7ACB\u523B\u5347\u7EA7"
NeedTechDesc: 0
TechDesc:
NeedLockDesc: 0
LockDesc:
Icon: {fileID: 21300000, guid: f2126554d286b6d448668305e244637a, type: 3}
IconViewSizeType: 2
VarientIcon: 0
IconList: []
Cost: 0
CityExp: 0
NoNeedTech: 1
SpriteSize: {x: 0, y: 0}
SpritePos: {x: 0, y: 0}

View File

@ -593,7 +593,7 @@ MonoBehaviour:
IsActive: 1
NotShow: 0
Name: "\u5C01\u5EFA\u91C7\u9091"
Description: "\u82F1\u96C4\u5347\u7EA7\u6240\u9700**<\u6587\u5316\u503C>**\u6D88\u8017\u51CF\u5C1180%"
Description: "\u6211\u65B9\u62E5\u6709**<\u664B\u5347>**\u7C7B\u6280\u80FD\u7684\u5355\u4F4D\u53EF\u6D88\u8017**<\u6587\u5316\u70B9>**\u7ACB\u523B\u5347\u7EA7"
Cost: 100
Icon: {fileID: 21300000, guid: 7983e5706aca9634188e20ecea690403, type: 3}
IconViewSizeType: 5

View File

@ -141,31 +141,31 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: 7827e23a317aaac4c8d5131a85e63094, type: 3}
HeroAvatar: {fileID: 21300000, guid: 6bb640e5ad6fd9a4aa4cc673e625ca86, type: 3}
TaskList:
- taskContentType: 1
Param: 20
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 50
- taskContentType: 23
Param: 60
SkillParam: 103
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 100
- taskContentType: 23
Param: 120
SkillParam: 82
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- GiantType: 2
@ -296,31 +296,31 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: c5feb7e3a8bc4384e955e9fa2218fc25, type: 3}
HeroAvatar: {fileID: 21300000, guid: 2ee782bb5dad2a742a9cad72289a1ef1, type: 3}
TaskList:
- taskContentType: 1
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 50
- taskContentType: 23
Param: 60
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 100
- taskContentType: 23
Param: 120
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- GiantType: 11
@ -475,13 +475,13 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: 3756265d254e8e542b0c198d11bf75d4, type: 3}
HeroAvatar: {fileID: 21300000, guid: e5a0b8c9d9f229a48897e68344fd47b1, type: 3}
TaskList:
- taskContentType: 1
Param: 20
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- taskContentType: 19
@ -599,31 +599,31 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: 391a0d98539de7242a5a936135aeb482, type: 3}
HeroAvatar: {fileID: 21300000, guid: b2cfe071c01256347816f04fa6acbc5a, type: 3}
TaskList:
- taskContentType: 1
Param: 20
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 50
- taskContentType: 23
Param: 60
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 100
- taskContentType: 23
Param: 120
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: "\u7D2F\u8BA1\u9020\u6210**<{param}/{param}>**\u70B9\u4F24\u5BB3"
Desc: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<{param}/{param}>**\u70B9\u4F24\u5BB3"
UnitFullTypes: []
TargetBuff:
- GiantType: 20

View File

@ -3528,12 +3528,12 @@ MonoBehaviour:
ReserveGiantUpgrade: 1
ReserveCommonTransform: 1
- SkillType: 267
SkillViewType: 0
SkillName: 21001
SkillDesc: 21002
SkillViewType: 1
SkillName: "\u5F3A\u88AD\u5821\u5792"
SkillDesc: "\u4F4D\u4E8E\u4EFB\u610F**<\u57CE\u5E02\u4E2D\u5FC3>**\u6216**<\u519B\u8425\u7C7B\u5EFA\u7B51>**\u65F6\u83B7\u5F97\u989D\u5916\u9632\u5FA1\u3002\u653B\u51FB\u65F6\u65E0\u89C6\u76EE\u6807\u7684\u9632\u5FA1\u52A0\u6210\u3002\u82F1\u96C4\u5347\u7EA7\u65F6\u989D\u5916\u56DE\u590D5HP\u3002"
NotShow: 0
ShowOnUnitMono: 0
SkillIcon: {fileID: 21300000, guid: cf55b3fe561c3244faa3ad199411bcd3, type: 3}
SkillIcon: {fileID: 21300000, guid: 7b4c66aefb93a8e428a8ecc40eb55376, type: 3}
HasShowList: 0
SkillShowList: []
skillPriority: 0
@ -3542,12 +3542,12 @@ MonoBehaviour:
ReserveGiantUpgrade: 0
ReserveCommonTransform: 0
- SkillType: 268
SkillViewType: 4
SkillViewType: 1
SkillName: "\u5FA1\u5883\u5DE1\u884C"
SkillDesc: "\u5728\u6211\u65B9\u9886\u571F\u6216\u6211\u65B9\u9886\u571F\u76F8\u90BB1\u683C\u65F6\uFF0C**<\u79FB\u52A8\u529B>**+1\u3002"
SkillDesc: "\u5904\u4E8E\u53CB\u65B9\u9886\u571F\u6216\u4E0E\u53CB\u65B9\u9886\u571F\u76F8\u90BB\u65F6\uFF0C**<\u79FB\u52A8\u529B>**+1\u3002"
NotShow: 0
ShowOnUnitMono: 0
SkillIcon: {fileID: 21300000, guid: 80c0657194d758e44872047bf99a6fe9, type: 3}
SkillIcon: {fileID: 21300000, guid: 41fb89994da370143ab0b5f2fcf072cd, type: 3}
HasShowList: 0
SkillShowList: []
skillPriority: 0
@ -3556,15 +3556,15 @@ MonoBehaviour:
ReserveGiantUpgrade: 0
ReserveCommonTransform: 1
- SkillType: 269
SkillViewType: 4
SkillName: "\u738B\u6743\u8D21\u8D4B"
SkillDesc: "\u4ECE\u9996\u90FD\u53CA\u6BCF\u4E2A\u5360\u9886\u7684\u4ED6\u56FD\u539F\u59CB\u9996\u90FD\u83B7\u5F97\u989D\u5916\u7684**<\u56DE\u5408\u91D1\u5E01>**\u6570\xD7\u8BE5**<\u738B>**\u9636\u4F4D\u82F1\u96C4\u7B49\u7EA7\u7684**<\u91D1\u5E01>**\u3002"
SkillViewType: 1
SkillName: "\u738B\u5BA4\u5185\u5E11"
SkillDesc: "\u9996\u90FD\u53CA\u6BCF\u4E2A\u5360\u9886\u7684**<\u4ED6\u56FD\u539F\u59CB\u9996\u90FD>**\u63D0\u4F9B\u989D\u5916\u7684**<\u56DE\u5408\u91D1\u5E01>**\u3002\u6570\u989D\u4E0E\u82F1\u96C4\u7B49\u7EA7\u76F8\u540C\u3002"
NotShow: 0
ShowOnUnitMono: 0
SkillIcon: {fileID: 21300000, guid: cf55b3fe561c3244faa3ad199411bcd3, type: 3}
SkillIcon: {fileID: 21300000, guid: b89a6f679ea1f3d47a69b6995a13a426, type: 3}
HasShowList: 0
SkillShowList: []
skillPriority: 0
skillPriority: 1
ReserveOnCarry: 0
ReserveLeaveCarry: 0
ReserveGiantUpgrade: 1

View File

@ -75,7 +75,7 @@ MonoBehaviour:
icon: {fileID: 0}
CostLevel: 2
FatherTechList: 06000000
TechAtomList: 1800000019000000
TechAtomList: 180000001900000065000000
TechTreeCircleViewType: 7
- TechType: 8
TechName: "\u8015\u79CD"
@ -4964,3 +4964,35 @@ MonoBehaviour:
IsVarient: 0
IconList: []
iconViewSizeType: 1
- TechAtom: 101
TechAtomName: "\u5EFA\u9020\u57CE\u5899"
Desc: "\u5728\u57CE\u5E02\u4E2D\u5FC3\u6D88\u80178\u91D1\u5E01\u5EFA\u9020**<\u57CE\u5899>**\u3002"
IsAddSkill: 0
AddSkillCondition: []
AddSkillType: 0
EnableAction: 1
TechActions:
- ActionType: 21
WonderType: 0
ResourceType: 0
FeatureType: 0
TerrainType: 0
UnitType: 0
GiantType: 0
UnitLevel: 0
Vegetation: 0
UnitActionType: 0
CityLevelUpActionType: 0
CityActionType: 1
GridMiscActionType: 0
SkillType: 0
TechType: 0
PlayerActionType: 0
AIParamType: 0
CultureCardType: 0
UseActionSprite: 1
IconContainer:
Icon: {fileID: 21300000, guid: a6a9fcdb495237a499a62d498c760746, type: 3}
IsVarient: 0
IconList: []
iconViewSizeType: 2

View File

@ -92,6 +92,7 @@ MonoBehaviour:
NotifyUITechHint: "\u79D1\u6280\u5DF2\u7814\u53D1"
NotifyUIExamineTechHint: "\u83B7\u5F97\u968F\u673A\u79D1\u6280!"
NotifyUIExamineCityExpHint: "\u9996\u90FD\u83B7\u5F973\u70B9\u57CE\u5E02\u53D1\u5C55\u5EA6!"
NotifyUIExamineCultureHint: "\u83B7\u5F974\u70B9\u6587\u5316\u70B9"
NotifyUITurnHint: "\u7B2C{param}\u56DE\u5408"
NotifyUIInfiltrateStealCoin: "\u6210\u529F\u7A83\u53D6{param}\u91D1\u5E01!"
PresentationUIDiplomacyYouText: "\u60A8"

View File

@ -5574,7 +5574,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 20
Attack: 2.5
Attack: 2
Defense: 3
MoveRange: 1
AttackRange: 1
@ -6482,7 +6482,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 20
Attack: 3
Attack: 2.5
Defense: 3
MoveRange: 1
AttackRange: 1
@ -6508,7 +6508,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 30
Attack: 3.5
Attack: 3
Defense: 3
MoveRange: 1
AttackRange: 1
@ -6692,7 +6692,7 @@ MonoBehaviour:
MaxHealth: 5
Attack: 2
Defense: 1
MoveRange: 2
MoveRange: 1
AttackRange: 1
Cost: 0
Skills: db0000000c000000dc00000003000000e1000000020000000c010000
@ -6718,7 +6718,7 @@ MonoBehaviour:
MaxHealth: 10
Attack: 2
Defense: 1
MoveRange: 2
MoveRange: 1
AttackRange: 1
Cost: 0
Skills: db0000000c000000dc000000030000001d000000e1000000020000000c010000
@ -6744,7 +6744,7 @@ MonoBehaviour:
MaxHealth: 10
Attack: 2
Defense: 2
MoveRange: 2
MoveRange: 1
AttackRange: 1
Cost: 0
Skills: db0000000c000000dc000000030000001d000000e1000000e2000000020000000c010000
@ -7087,7 +7087,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 15
Attack: 3
Attack: 2
Defense: 3
MoveRange: 1
AttackRange: 1
@ -7113,7 +7113,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 25
Attack: 3
Attack: 2.5
Defense: 3
MoveRange: 1
AttackRange: 1

View File

@ -7825,8 +7825,8 @@ MonoBehaviour:
PlayerActionType: 0
AIParamType: 0
CultureCardType: 0
ActionName: 16928
Desc: 16929
ActionName: 21019
Desc: 21021
NeedTechDesc: 0
TechDesc:
NeedLockDesc: 0
@ -8802,3 +8802,36 @@ MonoBehaviour:
NoNeedTech: 1
SpriteSize: {x: 120, y: 120}
SpritePos: {x: 0, y: 35}
- ActionId:
ActionType: 6
WonderType: 0
ResourceType: 0
FeatureType: 0
TerrainType: 0
UnitType: 0
GiantType: 0
UnitLevel: 0
Vegetation: 0
UnitActionType: 27
CityLevelUpActionType: 0
GridMiscActionType: 0
SkillType: 0
TechType: 0
PlayerActionType: 0
AIParamType: 0
CultureCardType: 0
ActionName: 41
Desc: 21017
NeedTechDesc: 0
TechDesc:
NeedLockDesc: 0
LockDesc:
Icon: {fileID: 21300000, guid: f2126554d286b6d448668305e244637a, type: 3}
IconViewSizeType: 2
VarientIcon: 0
IconList: []
Cost: 0
CityExp: 0
NoNeedTech: 1
SpriteSize: {x: 0, y: 0}
SpritePos: {x: 0, y: 0}

View File

@ -141,31 +141,31 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: 7827e23a317aaac4c8d5131a85e63094, type: 3}
HeroAvatar: {fileID: 21300000, guid: 6bb640e5ad6fd9a4aa4cc673e625ca86, type: 3}
TaskList:
- taskContentType: 1
Param: 20
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 50
- taskContentType: 23
Param: 60
SkillParam: 103
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 100
- taskContentType: 23
Param: 120
SkillParam: 82
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- GiantType: 2
@ -296,31 +296,31 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: c5feb7e3a8bc4384e955e9fa2218fc25, type: 3}
HeroAvatar: {fileID: 21300000, guid: 2ee782bb5dad2a742a9cad72289a1ef1, type: 3}
TaskList:
- taskContentType: 1
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 50
- taskContentType: 23
Param: 60
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 100
- taskContentType: 23
Param: 120
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- GiantType: 11
@ -475,13 +475,13 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: 3756265d254e8e542b0c198d11bf75d4, type: 3}
HeroAvatar: {fileID: 21300000, guid: e5a0b8c9d9f229a48897e68344fd47b1, type: 3}
TaskList:
- taskContentType: 1
Param: 20
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- taskContentType: 19
@ -599,31 +599,31 @@ MonoBehaviour:
HeroIllustration: {fileID: 21300000, guid: 391a0d98539de7242a5a936135aeb482, type: 3}
HeroAvatar: {fileID: 21300000, guid: b2cfe071c01256347816f04fa6acbc5a, type: 3}
TaskList:
- taskContentType: 1
Param: 20
- taskContentType: 23
Param: 25
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 50
- taskContentType: 23
Param: 60
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- taskContentType: 1
Param: 100
- taskContentType: 23
Param: 120
SkillParam: 0
SpType: 0
SkillList:
SkillName:
Desc: 1997
Desc: 21022
UnitFullTypes: []
TargetBuff:
- GiantType: 20

View File

@ -61104,7 +61104,7 @@ MonoBehaviour:
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
@ -987422,7 +987422,7 @@ MonoBehaviour:
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSpecialTerm: 1
IsSecondary: 0
IsActive: 1
Color:
@ -1003997,7 +1003997,7 @@ MonoBehaviour:
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
@ -1084558,18 +1084558,15 @@ MonoBehaviour:
Color:
Icon: emoji_culture
- ID: 18142
ZH: "\u82F1\u96C4\u5347\u7EA7\u6240\u9700**<18141>**\u6D88\u8017\u51CF\u5C1180%"
TDZH: "\u82F1\u96C4\u5347\u7D1A\u6240\u9700**<18141>**\u6D88\u8017\u6E1B\u5C1180%"
EN: '**<18141>** cost for reduced by 80%'
JP: "\u30D2\u30FC\u30ED\u30FC\u30EC\u30D9\u30EB\u30A2\u30C3\u30D7\u306B\u5FC5\u8981\u306A**<18141>**\u6D88\u8CBB\u304C80%\u30C0\u30A6\u30F3"
KR: "\uC601\uC6C5 \uB808\uBCA8 \uC5C5\uC5D0 \uD544\uC694\uD55C **<18141>** \uC18C\uBAA8
80% \uAC10\uC18C"
RU: "\u0421\u0442\u043E\u0438\u043C\u043E\u0441\u0442\u044C **<\u041A\u0443\u043B\u044C\u0442\u0443\u0440\u0430>**
\u0434\u043B\u044F \u0441\u043D\u0438\u0436\u0435\u043D\u0430 \u043D\u0430
80%"
ES: Costo de **<Cultura>** reducido en 80%
ZH: "\u6211\u65B9\u62E5\u6709**<16651>**\u7C7B\u6280\u80FD\u7684\u5355\u4F4D\u53EF\u6D88\u8017**<18892>**\u7ACB\u523B\u5347\u7EA7"
TDZH: "\u6211\u65B9\u64C1\u6709**<16651>**\u985E\u6280\u80FD\u7684\u55AE\u4F4D\u53EF\u6D88\u8017**<18892>**\u7ACB\u523B\u5347\u7D1A"
EN: Units with **<16651>**-type skills can spend **<18892>** to level up instantly
JP:
KR:
RU:
ES:
PT:
FR: "Co\xFBt en **<Culture>** r\xE9duit de 80 %"
FR:
DE:
IDN:
TH:
@ -1084600,8 +1084597,7 @@ MonoBehaviour:
UZ:
KY:
MN:
AR: "\u062A\u0643\u0644\u0641\u0629 **<\u0627\u0644\u062B\u0642\u0627\u0641\u0629>**
\u0645\u062E\u0641\u0636\u0629 \u0628\u0646\u0633\u0628\u0629 80%"
AR:
DA:
TL:
Custom:
@ -1167844,11 +1167840,230 @@ MonoBehaviour:
Color:
Icon:
- ID: 21001
ZH: "强袭堡垒"
TDZH: "強襲堡壘"
EN: "Assault Fortress"
JP: "強襲要塞"
KR: "강습 요새"
ZH: "\u5F3A\u88AD\u5821\u5792"
TDZH: "\u5F37\u8972\u5821\u58D8"
EN: Assault Fortress
JP: "\u5F37\u8972\u8981\u585E"
KR: "\uAC15\uC2B5 \uC694\uC0C8"
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21002
ZH: "\u4F4D\u4E8E\u4EFB\u610F\u57CE\u5E02\u4E2D\u5FC3\u6216\u5175\u8425\u65F6\u83B7\u5F97\u989D\u5916\u9632\u5FA1\u3002\u653B\u51FB\u65F6\u65E0\u89C6\u76EE\u6807\u7684\u6B63\u9762\u9632\u5FA1\u52A0\u6210\u3002\u82F1\u96C4\u5347\u7EA7\u65F6\u989D\u5916\u56DE\u590D5HP\u3002"
TDZH: "\u4F4D\u65BC\u4EFB\u610F\u57CE\u5E02\u4E2D\u5FC3\u6216\u5175\u71DF\u6642\u7372\u5F97\u984D\u5916\u9632\u79A6\u3002\u653B\u64CA\u6642\u7121\u8996\u76EE\u6A19\u7684\u6B63\u9762\u9632\u79A6\u52A0\u6210\u3002"
EN: Gains bonus Defense on any City Center or Barracks. Ignores positive Defense
bonuses when attacking.
JP: "\u4EFB\u610F\u306E\u90FD\u5E02\u4E2D\u5FC3\u307E\u305F\u306F\u5175\u55B6\u306B\u3044\u308B\u6642\u3001\u9632\u5FA1\u30DC\u30FC\u30CA\u30B9\u3092\u5F97\u308B\u3002\u653B\u6483\u6642\u3001\u76EE\u6A19\u306E\u6B63\u306E\u9632\u5FA1\u30DC\u30FC\u30CA\u30B9\u3092\u7121\u8996\u3059\u308B\u3002"
KR: "\uC544\uBB34 \uB3C4\uC2DC \uC911\uC2EC\uC774\uB098 \uBCD1\uC601\uC5D0 \uC788\uC73C\uBA74
\uCD94\uAC00 \uBC29\uC5B4\uB97C \uC5BB\uACE0, \uACF5\uACA9 \uC2DC \uB300\uC0C1\uC758
\uAE0D\uC815 \uBC29\uC5B4 \uBCF4\uB108\uC2A4\uB97C \uBB34\uC2DC\uD55C\uB2E4."
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21017
ZH: "\u6D88\u8017**<18892>**\u7ACB\u523B\u5347\u7EA7"
TDZH: "\u6D88\u8017**<18892>**\u7ACB\u523B\u5347\u7D1A"
EN: Spend **<18892>** to level up instantly
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21018
ZH: "\u5F00\u542F\u62A4\u773C\u6A21\u5F0F"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21019
ZH: "\u4E66\u9662"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
@ -1167897,12 +1168112,552 @@ MonoBehaviour:
IsActive: 1
Color:
Icon:
- ID: 21002
ZH: "位于任意城市中心或兵营时获得额外防御。攻击时无视目标的正面防御加成。英雄升级时额外回复5HP。"
TDZH: "位於任意城市中心或兵營時獲得額外防禦。攻擊時無視目標的正面防禦加成。"
EN: "Gains bonus Defense on any City Center or Barracks. Ignores positive Defense bonuses when attacking."
JP: "任意の都市中心または兵営にいる時、防御ボーナスを得る。攻撃時、目標の正の防御ボーナスを無視する。"
KR: "아무 도시 중심이나 병영에 있으면 추가 방어를 얻고, 공격 시 대상의 긍정 방어 보너스를 무시한다."
- ID: 21020
ZH: "2\u6587\u5316\u503C"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21021
ZH: "\u57CE\u5E02\u5174\u529E**<21019>**\uFF0C\u7ACB\u5373\u83B7\u5F97**<21020>**"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21022
ZH: "\u7D2F\u8BA1\u9020\u6210\u6216\u627F\u53D7**<17869>**\u70B9\u4F24\u5BB3"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21023
ZH: "\u519B\u8425\u7C7B\u5EFA\u7B51"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21024
ZH: "\u4F4D\u4E8E\u4EFB\u610F**<17871>**\u6216**<21023>**\u65F6\u83B7\u5F97\u989D\u5916\u9632\u5FA1\u3002\u653B\u51FB\u65F6\u65E0\u89C6\u76EE\u6807\u7684\u9632\u5FA1\u52A0\u6210\u3002\u82F1\u96C4\u5347\u7EA7\u65F6\u989D\u5916\u56DE\u590D5HP\u3002"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21025
ZH: "\u5FA1\u5883\u5DE1\u884C"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21026
ZH: "\u5904\u4E8E\u53CB\u65B9\u9886\u571F\u6216\u4E0E\u53CB\u65B9\u9886\u571F\u76F8\u90BB\u65F6\uFF0C**<17855>**+1\u3002"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21027
ZH: "\u738B\u5BA4\u5185\u5E11"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21028
ZH: "\u4ED6\u56FD\u539F\u59CB\u9996\u90FD"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 1
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21029
ZH: "\u9996\u90FD\u53CA\u6BCF\u4E2A\u5360\u9886\u7684**<21028>**\u63D0\u4F9B\u989D\u5916\u7684**<18147>**\u3002\u6570\u989D\u4E0E\u82F1\u96C4\u7B49\u7EA7\u76F8\u540C\u3002"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:
FR:
DE:
IDN:
TH:
PL:
VI:
MS:
UK:
KZ:
TR:
IT:
NL:
FI:
SV:
NO:
CS:
HU:
EL:
RO:
ET:
LT:
HR:
SR:
SL:
SK:
BE:
HE:
BG:
UZ:
KY:
MN:
AR:
DA:
TL:
Custom:
IsProperNoun: 0
IsDialogue: 0
DialogueSpeaker:
IsDeprecated: 0
IsCustom: 0
IsSpecialTerm: 0
IsSecondary: 0
IsActive: 1
Color:
Icon:
- ID: 21030
ZH: "\u83B7\u5F974\u70B9\u6587\u5316\u70B9"
TDZH:
EN:
JP:
KR:
RU:
ES:
PT:

View File

@ -3524,12 +3524,12 @@ MonoBehaviour:
ReserveGiantUpgrade: 1
ReserveCommonTransform: 1
- SkillType: 267
SkillViewType: 0
SkillViewType: 1
SkillName: 21001
SkillDesc: 21002
SkillDesc: 21024
NotShow: 0
ShowOnUnitMono: 0
SkillIcon: {fileID: 21300000, guid: cf55b3fe561c3244faa3ad199411bcd3, type: 3}
SkillIcon: {fileID: 21300000, guid: 7b4c66aefb93a8e428a8ecc40eb55376, type: 3}
HasShowList: 0
SkillShowList: []
skillPriority: 0
@ -3537,18 +3537,32 @@ MonoBehaviour:
ReserveLeaveCarry: 0
ReserveGiantUpgrade: 0
ReserveCommonTransform: 0
- SkillType: 269
SkillViewType: 4
SkillName: "\u738B\u6743\u7A0E"
SkillDesc: "\u6BCF\u56DE\u5408\u989D\u5916\u83B7\u5F97\u4F60\u62E5\u6709\u7684\u539F\u59CB\u9996\u90FD\u6570\xD7\u8BE5**<\u738B>**\u9636\u4F4D\u82F1\u96C4\u7B49\u7EA7\u7684**<\u91D1\u5E01>**\u3002"
- SkillType: 268
SkillViewType: 1
SkillName: 21025
SkillDesc: 21026
NotShow: 0
ShowOnUnitMono: 0
SkillIcon: {fileID: 21300000, guid: cf55b3fe561c3244faa3ad199411bcd3, type: 3}
SkillIcon: {fileID: 21300000, guid: 41fb89994da370143ab0b5f2fcf072cd, type: 3}
HasShowList: 0
SkillShowList: []
skillPriority: 0
ReserveOnCarry: 0
ReserveLeaveCarry: 0
ReserveGiantUpgrade: 0
ReserveCommonTransform: 1
- SkillType: 269
SkillViewType: 1
SkillName: 21027
SkillDesc: 21029
NotShow: 0
ShowOnUnitMono: 0
SkillIcon: {fileID: 21300000, guid: b89a6f679ea1f3d47a69b6995a13a426, type: 3}
HasShowList: 0
SkillShowList: []
skillPriority: 1
ReserveOnCarry: 0
ReserveLeaveCarry: 0
ReserveGiantUpgrade: 1
ReserveCommonTransform: 0
SkillViewTypeColorList:

View File

@ -92,6 +92,7 @@ MonoBehaviour:
NotifyUITechHint: 17041
NotifyUIExamineTechHint: 19435
NotifyUIExamineCityExpHint: 19439
NotifyUIExamineCultureHint: 21030
NotifyUITurnHint: 1043
NotifyUIInfiltrateStealCoin: 19584
PresentationUIDiplomacyYouText: 17445

View File

@ -3890,7 +3890,7 @@ MonoBehaviour:
MoveRange: 1
AttackRange: 2
Cost: 0
Skills: 0d000000730000000200000074000000d0000000
Skills: 0d000000730000000200000074000000d00000000c010000
Sprite: {fileID: 21300000, guid: bd7e07fc549ba8a46a4eb79a62f9090b, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -3916,7 +3916,7 @@ MonoBehaviour:
MoveRange: 1
AttackRange: 2
Cost: 0
Skills: 0d0000007a000000020000007500000074000000d0000000
Skills: 0d0000007a000000020000007500000074000000d00000000c010000
Sprite: {fileID: 21300000, guid: bd7e07fc549ba8a46a4eb79a62f9090b, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -3942,7 +3942,7 @@ MonoBehaviour:
MoveRange: 1
AttackRange: 2
Cost: 0
Skills: 0d000000020000007a0000007600000074000000d0000000
Skills: 0d000000020000007a0000007600000074000000d00000000c010000
Sprite: {fileID: 21300000, guid: bd7e07fc549ba8a46a4eb79a62f9090b, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -3968,7 +3968,7 @@ MonoBehaviour:
MoveRange: 1
AttackRange: 2
Cost: 0
Skills: 0d0000007a00000002000000760000004700000074000000d0000000
Skills: 0d0000007a00000002000000760000004700000074000000d00000000c010000
Sprite: {fileID: 21300000, guid: bd7e07fc549ba8a46a4eb79a62f9090b, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -5250,7 +5250,7 @@ MonoBehaviour:
MoveRange: 1
AttackRange: 3
Cost: 0
Skills: 020000000d0000000c00000003000000
Skills: 020000000d0000000c000000030000000c010000
Sprite: {fileID: 21300000, guid: b726d8d6bc92ae54e90e8e32457c53d1, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -5276,7 +5276,7 @@ MonoBehaviour:
MoveRange: 1
AttackRange: 3
Cost: 0
Skills: 02000000510000005a0000000d0000000c00000003000000
Skills: 02000000510000005a0000000d0000000c000000030000000c010000
Sprite: {fileID: 21300000, guid: b726d8d6bc92ae54e90e8e32457c53d1, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -5302,7 +5302,7 @@ MonoBehaviour:
MoveRange: 1
AttackRange: 3
Cost: 0
Skills: 02000000510000005b0000005a0000000d0000000c00000003000000
Skills: 02000000510000005b0000005a0000000d0000000c000000030000000c010000
Sprite: {fileID: 21300000, guid: b726d8d6bc92ae54e90e8e32457c53d1, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -5328,7 +5328,7 @@ MonoBehaviour:
MoveRange: 2
AttackRange: 3
Cost: 0
Skills: 0200000051000000030100005a0000005b0000000d0000000c00000003000000
Skills: 0200000051000000030100005a0000005b0000000d0000000c000000030000000c010000
Sprite: {fileID: 21300000, guid: b726d8d6bc92ae54e90e8e32457c53d1, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -5574,7 +5574,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 20
Attack: 2.5
Attack: 2
Defense: 3
MoveRange: 1
AttackRange: 1
@ -6141,7 +6141,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 2
Cost: 0
Skills: 020000000c0000009b0000009c000000
Skills: 020000000c0000009b0000009c0000000c010000
Sprite: {fileID: 21300000, guid: cb8459c31c131994e987d4fc1c0fd8bd, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -6167,7 +6167,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 2
Cost: 0
Skills: 020000000c0000009b0000009c000000ba000000
Skills: 020000000c0000009b0000009c000000ba0000000c010000
Sprite: {fileID: 21300000, guid: cb8459c31c131994e987d4fc1c0fd8bd, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -6193,7 +6193,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 2
Cost: 0
Skills: 020000000c0000009b0000009c000000ba000000bb000000
Skills: 020000000c0000009b0000009c000000ba000000bb0000000c010000
Sprite: {fileID: 21300000, guid: cb8459c31c131994e987d4fc1c0fd8bd, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -6219,7 +6219,7 @@ MonoBehaviour:
MoveRange: 3
AttackRange: 2
Cost: 0
Skills: 020000000c0000009b0000009c000000ba000000bb000000bc000000
Skills: 020000000c0000009b0000009c000000ba000000bb000000bc0000000c010000
Sprite: {fileID: 21300000, guid: cb8459c31c131994e987d4fc1c0fd8bd, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -6482,7 +6482,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 20
Attack: 3
Attack: 2.5
Defense: 3
MoveRange: 1
AttackRange: 1
@ -6508,7 +6508,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 30
Attack: 3.5
Attack: 3
Defense: 3
MoveRange: 1
AttackRange: 1
@ -6692,10 +6692,10 @@ MonoBehaviour:
MaxHealth: 5
Attack: 2
Defense: 1
MoveRange: 2
MoveRange: 1
AttackRange: 1
Cost: 0
Skills: db0000000c000000dc00000003000000e100000002000000
Skills: db0000000c000000dc00000003000000e1000000020000000c010000
Sprite: {fileID: 21300000, guid: f3c529d92a9946745825639f7bf74554, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -6718,10 +6718,10 @@ MonoBehaviour:
MaxHealth: 10
Attack: 2
Defense: 1
MoveRange: 2
MoveRange: 1
AttackRange: 1
Cost: 0
Skills: db0000000c000000dc000000030000001d000000e100000002000000
Skills: db0000000c000000dc000000030000001d000000e1000000020000000c010000
Sprite: {fileID: 21300000, guid: f3c529d92a9946745825639f7bf74554, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -6744,10 +6744,10 @@ MonoBehaviour:
MaxHealth: 10
Attack: 2
Defense: 2
MoveRange: 2
MoveRange: 1
AttackRange: 1
Cost: 0
Skills: db0000000c000000dc000000030000001d000000e1000000e200000002000000
Skills: db0000000c000000dc000000030000001d000000e1000000e2000000020000000c010000
Sprite: {fileID: 21300000, guid: f3c529d92a9946745825639f7bf74554, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -6773,7 +6773,7 @@ MonoBehaviour:
MoveRange: 2
AttackRange: 1
Cost: 0
Skills: db0000000c000000dc000000030000001d000000e1000000e200000002000000dd000000
Skills: db0000000c000000dc000000030000001d000000e1000000e200000002000000dd0000000c010000
Sprite: {fileID: 21300000, guid: f3c529d92a9946745825639f7bf74554, type: 3}
IsSpriteVarient: 0
SpriteList: []
@ -7087,7 +7087,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 15
Attack: 3
Attack: 2
Defense: 3
MoveRange: 1
AttackRange: 1
@ -7113,7 +7113,7 @@ MonoBehaviour:
LandType: 1
NoMaxHealth: 0
MaxHealth: 25
Attack: 3
Attack: 2.5
Defense: 3
MoveRange: 1
AttackRange: 1

View File

@ -0,0 +1,78 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a95e9645017b445787c2089711dc2318, type: 3}
m_Name: VisualSpriteVariantMap
m_EditorClassIdentifier:
Pairs:
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 94d08b14820ccb24eb2b87e651486e99, type: 3}
EyeComfort: {fileID: 21300000, guid: b616e949499c4da1912623240e7acfc9, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 8d630227ae5811a458084cd996dce259, type: 3}
EyeComfort: {fileID: 21300000, guid: 6b07f6edabe946159dcd8df181554b2a, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: ad0de484a4e625345971d368d2d59a9e, type: 3}
EyeComfort: {fileID: 21300000, guid: 7254935ca87749c786440a56bcd5ea04, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: d41e9bfdb0aaf0c44995991a435c3cd8, type: 3}
EyeComfort: {fileID: 21300000, guid: 233d6c49ea5f46bea6dac4f5ffbd0b1b, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 0fa66ddbaa79132408fbfc61d5e0d9aa, type: 3}
EyeComfort: {fileID: 21300000, guid: 051505e0084c48aa87f9cab866e0a4ea, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 583ea1b8d676e5a479fbcab5d53b1f9d, type: 3}
EyeComfort: {fileID: 21300000, guid: 0346fc36ed704bf690ba2e53999813fc, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: c3fb107044a0c3b45a457f49fab3cc5b, type: 3}
EyeComfort: {fileID: 21300000, guid: 32c16226bfc8413dbf7ef112f0da993a, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 20ad2e91f36031244b6c560034296648, type: 3}
EyeComfort: {fileID: 21300000, guid: 686bf6f7d20d48229f9d85da35210df5, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 4d9c1678e6659ad419c02ed58c218157, type: 3}
EyeComfort: {fileID: 21300000, guid: 3fbb98f6251d4730a7d1e7f69d3daeaf, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 2561646e9b612904790b2dd62bfd6373, type: 3}
EyeComfort: {fileID: 21300000, guid: 427fc040c61048909ba31fbde82e8ed6, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: e922a01ab52db1d49b99c764af1e0bba, type: 3}
EyeComfort: {fileID: 21300000, guid: 17d2a8aae7d6440fbac6e4bd77732010, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 984035e87e87a844389570f33038a17f, type: 3}
EyeComfort: {fileID: 21300000, guid: 7d6d812d64f543edaa31b6513e7ff17f, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 5479e4ea015ba93489fb506fa7c64457, type: 3}
EyeComfort: {fileID: 21300000, guid: 0ca6ee22c9724dad9d0faec41a25cbe9, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: bfc65020b78917b40a368c644bead685, type: 3}
EyeComfort: {fileID: 21300000, guid: 729b5af585d443e0883b37871b1f5690, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: c5e1ab2a4a1da374a97e15adcbac3bbf, type: 3}
EyeComfort: {fileID: 21300000, guid: 606441faefe5428180eaea02d908a736, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: c1333ad4ade2687449683f74b1a79273, type: 3}
EyeComfort: {fileID: 21300000, guid: 61c7140c327740b3b5d9c959aab72d70, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 6725daee0faa6e7419ce0d6caa953652, type: 3}
EyeComfort: {fileID: 21300000, guid: 32bf163ed414410d86ad0a6986a94013, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 7d843dd58cca48f48ad44a483d593f78, type: 3}
EyeComfort: {fileID: 21300000, guid: 6d8767fb01db401a80164a6c789d8c6a, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 3cbabce4061702e47baa58831c5204e5, type: 3}
EyeComfort: {fileID: 21300000, guid: fa72e18fbb7b4753b8466a75915afeb3, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 213e09df9c9c4a144977303dc11c8b69, type: 3}
EyeComfort: {fileID: 21300000, guid: 87034b5b717a4676a5453b16f169d621, type: 3}
- Group: GridObject/Ground
Source: {fileID: 21300000, guid: 5f6e5da4f97fa854fb17cd588cf6078f, type: 3}
EyeComfort: {fileID: 21300000, guid: 3f647398edea4cfa95cc2a9449c46b9c, type: 3}

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 10b8698a9c075364a8a7cc3f077f38c8
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -601,6 +601,7 @@ MonoBehaviour:
CostText: {fileID: 8232403563750718916}
CoinCostSprite: {fileID: 21300000, guid: 794e6f091dd8fad4997bc9d682636790, type: 3}
CultureCostSprite: {fileID: 21300000, guid: b2371f7abd2c8d746ba7928bfc9c5586, type: 3}
HeroReviveCultureCostSprite: {fileID: 0}
TimeBar: {fileID: 8305030154970552702}
TimeText: {fileID: 379324304391131447}
TextBlue: {r: 0.14509805, g: 0.17254902, b: 0.3882353, a: 1}
@ -922,7 +923,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0.4119873, y: -26.200012}
m_AnchoredPosition: {x: 37.3, y: 53}
m_SizeDelta: {x: 56.287003, y: 23.851501}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4041220032658855136

View File

@ -606,6 +606,7 @@ MonoBehaviour:
CostText: {fileID: 0}
CoinCostSprite: {fileID: 21300000, guid: 794e6f091dd8fad4997bc9d682636790, type: 3}
CultureCostSprite: {fileID: 21300000, guid: b2371f7abd2c8d746ba7928bfc9c5586, type: 3}
HeroReviveCultureCostSprite: {fileID: 0}
TimeBar: {fileID: 0}
TimeText: {fileID: 0}
TextBlue: {r: 0.14509805, g: 0.17254902, b: 0.3882353, a: 1}
@ -2329,6 +2330,7 @@ MonoBehaviour:
CostText: {fileID: 0}
CoinCostSprite: {fileID: 21300000, guid: 794e6f091dd8fad4997bc9d682636790, type: 3}
CultureCostSprite: {fileID: 21300000, guid: b2371f7abd2c8d746ba7928bfc9c5586, type: 3}
HeroReviveCultureCostSprite: {fileID: 0}
TimeBar: {fileID: 0}
TimeText: {fileID: 0}
TextBlue: {r: 0.14509805, g: 0.17254902, b: 0.3882353, a: 1}

View File

@ -273,7 +273,7 @@ MonoBehaviour:
NoExport: 0
FontBan: 0
Preset: 0
ID: 17753
ID: 21018
FontID: 1
TextCfg:
- Type: 1
@ -9463,6 +9463,7 @@ MonoBehaviour:
BgmContinuousToggle: {fileID: 5173756232815940152}
CityBorderAlwaysToggle: {fileID: 7449948995218195977}
ConfirmNextTurnToggle: {fileID: 1128881828376385442}
EyeComfortToggle: {fileID: 0}
MoreLanguageModule: {fileID: 7088314466326854064}
NowUsingLanguageText: {fileID: 9109790349295146539}
ManageButton: {fileID: 266385876390542388}

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,114 @@
fileFormatVersion: 2
guid: fc0f2c0896702b04882773d9a9cd711f
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -133,6 +133,7 @@ namespace TH1_Core.Events
TurnHint,
ExamineTech,
ExamineCityExp,
ExamineCulture,
InfiltrateStealCoin,
OutsideMultiplayRoomFull,
OutsideMultiplayRoomGone,

View File

@ -1310,6 +1310,7 @@ namespace RuntimeData
public void OnAfterMemoryPackDeserialize()
{
TechAtomActionCacheSet ??= new HashSet<uint>();
TechAtomCacheSet ??= new HashSet<TechAtom>();
foreach (var tech in TechSet)
{
var techInfo = Table.Instance.TechDataAssets.GetTechInfo(tech);

View File

@ -955,6 +955,11 @@ namespace RuntimeData
{
return GetBaseDefenseValue(map, target) * GetDefenseMultiplicationParam(map, target);
}
public float GetAllDefenseValueIgnoringPositiveBonus(MapData map, UnitData target = null)
{
return GetBaseDefenseValueIgnoringPositiveBonus(map, target) * GetDefenseMultiplicationParamIgnoringPositiveBonus(map, target);
}
// 防御力加算系数
public float GetDefenseAdditionParam(MapData map, UnitData target = null)
@ -968,6 +973,20 @@ namespace RuntimeData
}
return value;
}
public float GetBaseDefenseValueIgnoringPositiveBonus(MapData map, UnitData target = null)
{
if(!Table.Instance.UnitTypeDataAssets.GetUnitTypeInfo(UnitFullType, out var info)) return 0;
var value = info.Defense;
var isFrozen = IsFrozen();
foreach (var skill in Skills)
{
if (isFrozen && IsSkillFrozenFilter(skill)) continue;
var t = skill.GetDefenseAdditionParam(map, this, target);
if (t < 0f) value += t;
}
return value;
}
//只用于显示防御外壳判断用的系数计算(会去除<1的乘算因子)
public float GetDefenseMultiplicationParamOnlyForDefenseShow(MapData map, UnitData target = null)
@ -1044,6 +1063,32 @@ namespace RuntimeData
return buffValue * debuffMult;
}
public float GetDefenseMultiplicationParamIgnoringPositiveBonus(MapData map, UnitData target = null)
{
var debuffMult = 1f;
var isZero = 1f;
var isFrozen = IsFrozen();
foreach (var skill in Skills)
{
if (isFrozen && IsSkillFrozenFilter(skill)) continue;
var t = skill.GetDefenseMultiplicationParam(map, this, target);
isZero *= t;
if (t < 1f)
debuffMult *= t;
}
var p = GetTerrainDefenseMultiplicationParam(map);
if (p < 1f)
debuffMult *= p;
isZero *= p;
if (isZero == 0f) return 0f;
return debuffMult;
}
public bool IgnorePositiveTargetDefenseBonus(MapData map, UnitData target)
{
if (map == null || target == null) return false;

View File

@ -170,6 +170,7 @@ public enum TechAtom
TrainUnitKomeijiRider,
TrainUnitKomeijiKnight,
TrainUnitKomeijiFairyBigGuy,
BuildCityWall,
}

View File

@ -111,6 +111,7 @@ public class TextDataAssets : ScriptableObject
[MultilingualField] public string NotifyUITechHint;
[MultilingualField] public string NotifyUIExamineTechHint;
[MultilingualField] public string NotifyUIExamineCityExpHint;
[MultilingualField] public string NotifyUIExamineCultureHint;
[MultilingualField] public string NotifyUITurnHint;
[MultilingualField] public string NotifyUIInfiltrateStealCoin;
@ -166,4 +167,4 @@ public class GiantUpgradeText
{
public GiantType GiantType;
[MultilingualField] public string UpgradeText;
}
}

View File

@ -40,6 +40,7 @@ public enum ChessType {None,King,Queen,Bishop,Knight,Rook,PawnWarrior,PawnArcher
public enum MoveAttackType { None,Move,Attack,MoveToPort,MoveAshore,Ally,MoveTeleport,AttackGround}
public enum CityLevelUpActionType{None,Explorer,Workshop,CityWall,CityWealth,Expand,Population,Park,BigGuy}
public enum CityActionType{None,BuildCityWall}
public enum Forces
{

View File

@ -67,6 +67,7 @@ namespace Logic.Action
UnitAttackGround,
PlayerSurrender,
BuyCultureCard,
CityAction,
}
@ -286,6 +287,7 @@ namespace Logic.Action
public Vegetation Vegetation;
public UnitActionType UnitActionType;
public CityLevelUpActionType CityLevelUpActionType;
public CityActionType CityActionType;
public GridMiscActionType GridMiscActionType;
public SkillType SkillType;
public TechType TechType;
@ -318,6 +320,7 @@ namespace Logic.Action
hash = hash * 31 + Vegetation.GetHashCode();
hash = hash * 31 + UnitActionType.GetHashCode();
hash = hash * 31 + CityLevelUpActionType.GetHashCode();
hash = hash * 31 + CityActionType.GetHashCode();
hash = hash * 31 + GridMiscActionType.GetHashCode();
hash = hash * 31 + SkillType.GetHashCode();
hash = hash * 31 + TechType.GetHashCode();
@ -344,6 +347,7 @@ namespace Logic.Action
if (a.Vegetation != b.Vegetation) return false;
if (a.UnitActionType != b.UnitActionType) return false;
if (a.CityLevelUpActionType != b.CityLevelUpActionType) return false;
if (a.CityActionType != b.CityActionType) return false;
if (a.GridMiscActionType != b.GridMiscActionType) return false;
if (a.SkillType != b.SkillType) return false;
if (a.TechType != b.TechType) return false;
@ -400,6 +404,7 @@ namespace Logic.Action
log += $"Vegetation : {Vegetation}\n";
log += $"UnitAction : {UnitActionType}\n";
log += $"CityLevelUpAction : {CityLevelUpActionType}\n";
log += $"CityAction : {CityActionType}\n";
log += $"GridMiscAction : {GridMiscActionType}\n";
log += $"Skill : {SkillType}\n";
log += $"Tech : {TechType}\n";
@ -706,6 +711,17 @@ namespace Logic.Action
};
ActionLogicDict[commonActionId] = new CityLevelUpActionAction(commonActionId);
}
foreach (CityActionType cityActionType in System.Enum.GetValues(typeof(CityActionType)))
{
if (cityActionType == CityActionType.None) continue;
commonActionId = new CommonActionId
{
ActionType = CommonActionType.CityAction,
CityActionType = cityActionType
};
ActionLogicDict[commonActionId] = new CityAction(commonActionId);
}
//unitAction自身行为的各个行为逻辑
foreach (UnitActionType unitActionType in System.Enum.GetValues(typeof(UnitActionType)))
@ -1018,6 +1034,7 @@ namespace Logic.Action
if (actionType == CommonActionType.GridMisc) return MainObjectType.Grid;
if (actionType == CommonActionType.UnitAction) return MainObjectType.Unit;
if (actionType == CommonActionType.CityLevelUpAction) return MainObjectType.City;
if (actionType == CommonActionType.CityAction) return MainObjectType.City;
if (actionType == CommonActionType.UnitSkill) return MainObjectType.Unit;
if (actionType == CommonActionType.LearnTech) return MainObjectType.Player;
if (actionType == CommonActionType.UnitMove) return MainObjectType.Unit;
@ -1031,6 +1048,58 @@ namespace Logic.Action
}
}
public class CityAction : ActionLogicBase
{
public CityAction(CommonActionId id) : base(id)
{
}
protected override bool Execute(CommonActionParams actionParams)
{
if (_actionId.CityActionType != CityActionType.BuildCityWall) return false;
if (!CheckCan(actionParams)) return false;
actionParams.PlayerData.SpendCoin(GetCost(actionParams));
actionParams.CityData.CityWall = true;
actionParams.CityData.SetCityRenderer(actionParams.MapData);
return true;
}
public override bool CheckCan(CommonActionParams actionParams)
{
if (_actionId.CityActionType != CityActionType.BuildCityWall) return false;
if (actionParams?.MapData == null) return false;
if (actionParams.PlayerData == null) return false;
if (actionParams.CityData == null) return false;
if (actionParams.MainObjectType != MainObjectType.City) return false;
if (actionParams.CityData.CityWall) return false;
if (!actionParams.MapData.CheckCityIdBelongPlayerId(actionParams.CityData.Id, actionParams.PlayerData.Id)) return false;
if (!actionParams.PlayerData.TechTree.CheckIfHasTechAtom(TechAtom.BuildCityWall)) return false;
if (actionParams.PlayerData.PlayerCoin < GetCost(actionParams)) return false;
return true;
}
public override bool CheckShow(CommonActionParams actionParams, out ShowType showType)
{
showType = ShowType.None;
if (_actionId.CityActionType != CityActionType.BuildCityWall) return false;
if (actionParams?.MapData == null) return false;
if (actionParams.PlayerData == null) return false;
if (actionParams.CityData == null) return false;
if (actionParams.MainObjectType != MainObjectType.City) return false;
if (actionParams.CityData.CityWall) return false;
if (!actionParams.MapData.CheckCityIdBelongPlayerId(actionParams.CityData.Id, actionParams.PlayerData.Id)) return false;
if (!actionParams.PlayerData.TechTree.CheckIfHasTechAtom(TechAtom.BuildCityWall))
{
showType = ShowType.Locked;
return true;
}
if (actionParams.PlayerData.PlayerCoin < GetCost(actionParams)) showType = ShowType.Cost;
return true;
}
}
// 行为基类
public abstract class ActionLogicBase

View File

@ -382,6 +382,8 @@ namespace Logic.Action
else if (value == 3)
{
actionParams.PlayerData.AddCulturePoint(4);
if (actionParams.PlayerData.IsSelfPlayer())
EventManager.Publish(new ShowUINotifyCommon(){UINotifyCommonType = UINotifyCommonType.ExamineCulture});
}
//给首都3点城市经验
else

View File

@ -68,6 +68,8 @@ namespace TH1_Logic.HeroTask
AccumulateRelicsOpenedIncludeOthers,
// 累计占领他人城市{param1}个或者占领村庄{param2}个
AccumulateCaptureOtherCitiesOrVillages,
// 累计承受伤害和造成伤害
AccumulateDamageTakenAndDealt,
}
@ -95,6 +97,7 @@ namespace TH1_Logic.HeroTask
[MemoryPackUnion(21, typeof(HeroTaskContentTargetTypeAreasExplored))]
[MemoryPackUnion(22, typeof(HeroTaskContentTargetAccumulateRelicsOpenedIncludeOthers))]
[MemoryPackUnion(23, typeof(HeroTaskContentAccumulateCaptureOtherCitiesOrVillages))]
[MemoryPackUnion(24, typeof(HeroTaskContentAccumulateDamageTakenAndDealt))]
public abstract partial class HeroTaskContentBase
{
public bool IsSelf;
@ -331,6 +334,34 @@ namespace TH1_Logic.HeroTask
Level += (uint)info.HealthReduceValue;
}
}
[MemoryPackable]
public partial class HeroTaskContentAccumulateDamageTakenAndDealt : HeroTaskContentBase
{
public override HeroTaskContentType GetContentType()
{
return HeroTaskContentType.AccumulateDamageTakenAndDealt;
}
public override HeroTaskContentBase GetCopyHeroTaskContent()
{
var newContent = new HeroTaskContentAccumulateDamageTakenAndDealt();
newContent.Level = Level;
newContent.TargetLevel = TargetLevel;
return newContent;
}
public override void OnDamaged(MapData mapData, SettlementInfo info)
{
Level += (uint)info.HealthReduceValue;
}
public override void OnDamageOther(MapData mapData, SettlementInfo info)
{
Level += (uint)info.HealthReduceValue;
}
}
[MemoryPackable]
@ -896,4 +927,4 @@ namespace TH1_Logic.HeroTask
Level++;
}
}
}
}

View File

@ -43,6 +43,8 @@ namespace TH1_Logic.HeroTask
return "累计承受伤害";
if (contentType == HeroTaskContentType.AccumulateDamageDealt)
return "累计造成伤害";
if (contentType == HeroTaskContentType.AccumulateDamageTakenAndDealt)
return "累计承受伤害和造成伤害";
if (contentType == HeroTaskContentType.AccumulateKills)
return "累计杀人";
if (contentType == HeroTaskContentType.AccumulateHealing)
@ -60,4 +62,4 @@ namespace TH1_Logic.HeroTask
return "";
}
}
}
}

View File

@ -1403,19 +1403,25 @@ namespace Logic
var kingLevel = player.PlayerHeroData.GetMaxHeroLevelByChessType(ChessType.King);
if (kingLevel == 0) return 0;
return GetPlayerOwnedCradleCityCount(mapData, player.Id) * (int)kingLevel;
return GetPlayerKingCoinSourceCount(mapData, player) * (int)kingLevel;
}
public int GetPlayerOwnedCradleCityCount(MapData mapData, uint playerId)
public int GetPlayerKingCoinSourceCount(MapData mapData, PlayerData player)
{
if (mapData == null) return 0;
if (mapData == null || player == null) return 0;
int count = 0;
if (mapData.GetCapitalCityDataByPlayerId(player.Id, out var capitalCity)
&& mapData.GetPlayerDataByCityId(capitalCity.Id, out var capitalOwner)
&& capitalOwner.Id == player.Id)
count++;
foreach (var otherPlayer in mapData.PlayerMap.PlayerDataList)
{
if (otherPlayer.Id == player.Id) continue;
if (!mapData.CityMap.GetCityById(otherPlayer.CradleCityId, out var city)) continue;
if (!mapData.GetPlayerDataByCityId(city.Id, out var owner)) continue;
if (owner.Id == playerId) count++;
if (owner.Id == player.Id) count++;
}
return count;

View File

@ -29,13 +29,13 @@ namespace Logic.Skill
if (!mapData.GetPlayerIdByUnitId(self.Id, out var ownerId)) return 0;
if (!mapData.GetGridDataByUnitId(self.Id, out var selfGrid)) return 0;
if (IsSelfTerritory(mapData, selfGrid, ownerId)) return 1;
if (IsFriendlyTerritory(mapData, selfGrid, ownerId)) return 1;
var aroundBuf = RentAroundBuf();
mapData.GridMap.GetAroundGridData(1, 1, selfGrid, aroundBuf);
foreach (var grid in aroundBuf)
{
if (!IsSelfTerritory(mapData, grid, ownerId)) continue;
if (!IsFriendlyTerritory(mapData, grid, ownerId)) continue;
ReturnAroundBuf();
return 1;
}
@ -44,11 +44,11 @@ namespace Logic.Skill
return 0;
}
private static bool IsSelfTerritory(MapData mapData, GridData grid, uint ownerId)
private static bool IsFriendlyTerritory(MapData mapData, GridData grid, uint ownerId)
{
return grid != null
&& mapData.GetPlayerDataByTerritoryGridId(grid.Id, out var territoryPlayer)
&& territoryPlayer.Id == ownerId;
&& mapData.SameUnion(ownerId, territoryPlayer.Id);
}
public override bool ReservedOnTransform(UnitData self, UnitFullType fullType)

View File

@ -48,7 +48,7 @@ namespace Logic.Skill
fullType.UnitType = UnitType.BonePile;
if (self.GetAttackRange(map) > 1) return false;
if (self.GetAllAttackValue(map, target) <= target.GetAllDefenseValue(map, self)) return false;
if (self.GetAllAttackValue(map, target) <= target.GetAllDefenseValueIgnoringPositiveBonus(map, self)) return false;
var player = self.Player(map);
if (player == null) return false;
var targetPlayer = target.Player(map);

View File

@ -49,6 +49,9 @@ namespace TH1_UI.View.Notify
case UINotifyCommonType.ExamineCityExp:
MultilingualManager.Instance.SetUIText(content,Table.Instance.TextDataAssets.NotifyUIExamineCityExpHint);
break;
case UINotifyCommonType.ExamineCulture:
MultilingualManager.Instance.SetUIText(content,Table.Instance.TextDataAssets.NotifyUIExamineCultureHint);
break;
case UINotifyCommonType.TurnHint:
MultilingualManager.Instance.SetUIText(content,Table.Instance.TextDataAssets.NotifyUITurnHint,new List<string>(){(Main.MapData.CurPlayer.Turn + 1).ToString()});
AudioManager.Instance.PlayAudio("SFX/start");

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff