新阵营模块开发
This commit is contained in:
parent
c03eaebdb3
commit
d583ddc52b
@ -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.
|
||||
|
||||
@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -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
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -92,6 +92,7 @@ MonoBehaviour:
|
||||
NotifyUITechHint: 17041
|
||||
NotifyUIExamineTechHint: 19435
|
||||
NotifyUIExamineCityExpHint: 19439
|
||||
NotifyUIExamineCultureHint: 21030
|
||||
NotifyUITurnHint: 1043
|
||||
NotifyUIInfiltrateStealCoin: 19584
|
||||
PresentationUIDiplomacyYouText: 17445
|
||||
|
||||
@ -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
|
||||
|
||||
78
Unity/Assets/Resources/Export/VisualSpriteVariantMap.asset
Normal file
78
Unity/Assets/Resources/Export/VisualSpriteVariantMap.asset
Normal 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}
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 10b8698a9c075364a8a7cc3f077f38c8
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -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
|
||||
|
||||
@ -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}
|
||||
|
||||
@ -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 |
@ -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 |
@ -133,6 +133,7 @@ namespace TH1_Core.Events
|
||||
TurnHint,
|
||||
ExamineTech,
|
||||
ExamineCityExp,
|
||||
ExamineCulture,
|
||||
InfiltrateStealCoin,
|
||||
OutsideMultiplayRoomFull,
|
||||
OutsideMultiplayRoomGone,
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -170,6 +170,7 @@ public enum TechAtom
|
||||
TrainUnitKomeijiRider,
|
||||
TrainUnitKomeijiKnight,
|
||||
TrainUnitKomeijiFairyBigGuy,
|
||||
BuildCityWall,
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
Loading…
x
Reference in New Issue
Block a user