diff --git a/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs b/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs
new file mode 100644
index 0000000000..ad3eb9d2d9
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs
@@ -0,0 +1,255 @@
+using System;
+using System.IO;
+using ModelRenderer.Scripts.Common;
+
+namespace BrewMonster.Common
+{
+
+ public struct SCRIPTINFO
+ {
+ public byte[] pFileBuf; // Pointer to file data buffer
+ public byte[] pStart; // Start address of buffer
+ public byte[] pEnd; // End address of buffer
+ public byte[] pCur; // Current pointer. Pointer size is 2 bytes
+ public uint pCurIndex; // Current pointer index
+ public int iLine; // Line counter
+ }
+
+ public class AWScriptFile
+ {
+ private const int MAX_LINELEN = 2048;
+ public ushort[] m_szToken = new ushort[MAX_LINELEN];
+
+ protected SCRIPTINFO m_Script = new SCRIPTINFO();
+
+
+
+ public bool Open(FileStream stream)
+ {
+ uint dwFilelen = (uint)stream.Length;
+ if (dwFilelen <= 0)
+ {
+ BMLogger.LogError($"EC_StringTab::Open: {stream.Name} File length is 0");
+ return false;
+ }
+
+ byte[] pBuf = new byte[dwFilelen];
+
+ stream.Read(pBuf, 0, (int)dwFilelen);
+
+ // Check unicode file header
+ ushort wChar = BitConverter.ToUInt16(new byte[] {pBuf[0], pBuf[1]});
+ if (wChar != 0xfeff)
+ {
+ BMLogger.LogError($"EC_StringTab::Open: {stream.Name} File is not unicode");
+ return false;
+ }
+
+ m_Script.pFileBuf = pBuf;
+ m_Script.pStart = new []{m_Script.pFileBuf[2], m_Script.pFileBuf[3]}; // Skip unicode magic number
+ m_Script.pCur = m_Script.pStart;
+ m_Script.pEnd = new [] {m_Script.pFileBuf[pBuf.Length - 2], m_Script.pFileBuf[pBuf.Length - 1]};
+ m_Script.pCurIndex = 2;
+ m_Script.iLine = 0;
+
+ return true;
+ }
+
+ public bool Open(string szFile)
+ {
+ if (!File.Exists(szFile))
+ {
+ BMLogger.LogError($"EC_StringTab::Open: {szFile} File not found");
+ return false;
+ }
+
+ using (FileStream stream = new FileStream(szFile, FileMode.Open, FileAccess.Read))
+ {
+ var bRet = Open(stream);
+ if (!bRet)
+ {
+ BMLogger.LogError($"EC_StringTab::Open: {szFile} File open failed");
+ return false;
+ }
+ stream.Close();
+ return true;
+ }
+ }
+
+ public void Close()
+ {
+ //TODO: May be not needed
+ m_Script.pFileBuf = null;
+ m_Script.pStart = null;
+ m_Script.pCur = null;
+ m_Script.pEnd = null;
+ }
+
+ ///
+ /// Get next token and move file pointer forward.
+ ///
+ /// true, search next token until it is found or all buffer has been checked;
false, only search next token in current line
+ /// true for success, otherwise return false
+ public bool GetNextToken(bool bCrossLine)
+ {
+ NewLine:
+ while (m_Script.pCurIndex < m_Script.pFileBuf.Length)
+ {
+ // get the first byte because the pointer is 2 bytes. The second byte should be 0 in these cases (value < 255)
+ if (m_Script.pFileBuf[m_Script.pCurIndex] > 32 && m_Script.pFileBuf[m_Script.pCurIndex] != ';' &&
+ m_Script.pFileBuf[m_Script.pCurIndex] != ',')
+ break;
+
+ m_Script.pCurIndex += 2; // move pointer forward 2 bytes because it's w_char (2 bytes)
+ if (m_Script.pCurIndex >= m_Script.pFileBuf.Length)
+ return false;
+ m_Script.pCur[0] = m_Script.pFileBuf[m_Script.pCurIndex];
+ m_Script.pCur[1] = m_Script.pFileBuf[m_Script.pCurIndex + 1];
+ if (m_Script.pCur[0] == '\n')
+ {
+ if (!bCrossLine)
+ {
+ m_Script.pCurIndex -= 2; // Let search pointer still stop in this line
+ return false;
+ }
+
+ m_Script.iLine++;
+ }
+ }
+
+ if (m_Script.pCurIndex >= m_Script.pFileBuf.Length)
+ return false;
+
+ // Skip comment lines those begin with '//'
+ if (m_Script.pFileBuf[m_Script.pCurIndex] == '/' && m_Script.pFileBuf[m_Script.pCurIndex + 2] == '/')
+ {
+ // This is a note line, search it's ending.
+ while (!m_Script.pCur.Equals(m_Script.pEnd) && m_Script.pFileBuf[m_Script.pCurIndex] != '\n')
+ {
+ m_Script.pCurIndex += 2;
+ }
+
+ if (m_Script.pCurIndex >= m_Script.pFileBuf.Length) // Found nothing
+ return false;
+ if (!bCrossLine) // Don't search cross line
+ return false;
+
+ m_Script.pCurIndex += 2; // Skip '\n'
+ m_Script.iLine++;
+ goto NewLine;
+ }
+
+ // Text between /* */ are also comment
+ if (m_Script.pFileBuf[m_Script.pCurIndex] == '/' && m_Script.pFileBuf[m_Script.pCurIndex + 2] == '*')
+ {
+ bool bError = false;
+
+ m_Script.pCurIndex += 4; // Skip /*
+
+ while (m_Script.pFileBuf[m_Script.pCurIndex] != '*' || m_Script.pFileBuf[m_Script.pCurIndex + 2] != '/')
+ {
+ if (m_Script.pCurIndex >= m_Script.pEnd.Length) // Found nothing
+ return false;
+ else if (m_Script.pFileBuf[m_Script.pCurIndex] == '\n')
+ {
+ if (!bCrossLine)
+ {
+ // This is a fatal error, we should return false.
+ // But we must search the '*/' so that next time our begin point
+ // isn't in comment paragraph
+ bError = true;
+ }
+
+ m_Script.iLine++;
+ }
+
+ m_Script.pCurIndex += 2;
+ }
+
+ m_Script.pCurIndex += 4; // Skip */
+
+ if (bError)
+ return false;
+
+ goto NewLine;
+ }
+
+ int i = 0;
+
+ // Copy string in "" or () pair
+ if (m_Script.pFileBuf[m_Script.pCurIndex] == '"' || m_Script.pFileBuf[m_Script.pCurIndex] == '(')
+ {
+ char cEnd = m_Script.pFileBuf[m_Script.pCurIndex] == '"' ? '"' : ')';
+
+ // Quoted token
+ m_Script.pCurIndex += 2; // Skip " or (
+ m_Script.pCur[0] = m_Script.pFileBuf[m_Script.pCurIndex];
+ m_Script.pCur[1] = m_Script.pFileBuf[m_Script.pCurIndex + 1];
+
+ while (!m_Script.pCur.Equals(m_Script.pEnd) && m_Script.pFileBuf[m_Script.pCurIndex] != cEnd)
+ {
+ if (i >= MAX_LINELEN-1)
+ return false;
+
+ // save the text into the token array
+ m_szToken[i++] = BitConverter.ToUInt16(m_Script.pCur);
+
+ m_Script.pCurIndex += 2;
+ m_Script.pCur[0] = m_Script.pFileBuf[m_Script.pCurIndex];
+ m_Script.pCur[1] = m_Script.pFileBuf[m_Script.pCurIndex + 1];
+ }
+
+ m_Script.pCurIndex += 2; // Skip " or )
+ m_Script.pCur[0] = m_Script.pFileBuf[m_Script.pCurIndex];
+ m_Script.pCur[1] = m_Script.pFileBuf[m_Script.pCurIndex + 1];
+ }
+ else // Is a normal token
+ {
+ while (!m_Script.pCur.Equals(m_Script.pEnd) && BitConverter.ToInt16(m_Script.pCur) > 32 &&
+ m_Script.pFileBuf[m_Script.pCurIndex] != ';' && m_Script.pFileBuf[m_Script.pCurIndex] != ',')
+ {
+ if (i >= MAX_LINELEN-1)
+ return false;
+
+ m_szToken[i++] = BitConverter.ToUInt16(m_Script.pCur);
+
+ m_Script.pCurIndex += 2;
+ m_Script.pCur[0] = m_Script.pFileBuf[m_Script.pCurIndex];
+ m_Script.pCur[1] = m_Script.pFileBuf[m_Script.pCurIndex + 1];
+ }
+ }
+
+ m_szToken[i] = '\0';
+
+ return true;
+ }
+
+ ///
+ /// Peek next token and don't move file pointer
+ /// Return true for success, otherwise return false
+ ///
+ /// true, search next token until it is found or all buffer has been checked; false, only search next token in current line
+ public bool PeekNextToken(bool bCrossLine)
+ {
+ // Record current pointer and line
+ var pCur = new [] {m_Script.pCur[0], m_Script.pCur[1]};
+ var iLine = m_Script.iLine;
+ var pCurIndex = m_Script.pCurIndex;
+
+ bool bRet = GetNextToken(bCrossLine);
+
+ // Restore pointer and line
+ m_Script.pCur = pCur;
+ m_Script.iLine = iLine;
+ m_Script.pCurIndex = pCurIndex;
+
+ return bRet;
+ }
+
+ public int GetNextTokenAsInt(bool bCrossLine)
+ {
+ GetNextToken(bCrossLine);
+ return int.Parse(ByteToStringUtils.UshortArrayToUnicodeString(m_szToken));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs.meta b/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs.meta
new file mode 100644
index 0000000000..4eb59f260a
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Common/AWScriptFile.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 2c2c2e6c750c64c4fb852e667a353b22
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Common/EC_StringTab.cs b/Assets/PerfectWorld/Scripts/Common/EC_StringTab.cs
new file mode 100644
index 0000000000..985a0f79bf
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Common/EC_StringTab.cs
@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using ModelRenderer.Scripts.Common;
+
+namespace BrewMonster.Common
+{
+ public class CECStringTab
+ {
+
+ private Dictionary m_AStrTab = new Dictionary();
+ private Dictionary m_WStrTab = new Dictionary();
+
+ protected bool m_bInit = false;
+ protected bool m_bUnicode = false;
+
+ public bool IsInitialized() => m_bInit;
+
+ public void Clear()
+ {
+ m_AStrTab.Clear();
+ m_WStrTab.Clear();
+ m_bInit = false;
+ m_bUnicode = false;
+ }
+
+ public bool Init(string szFile, bool bUnicode)
+ {
+ bool bRet = false;
+
+ if (bUnicode)
+ {
+ bRet = LoadWideStrings(szFile);
+ }
+
+ if (!bRet)
+ {
+ BMLogger.LogError($"EC_StringTab::Init: {szFile} File load failed");
+ return false;
+ }
+
+ m_bInit = true;
+ return true;
+ }
+
+ private bool LoadWideStrings(string szFile)
+ {
+ AWScriptFile ScriptFile = new AWScriptFile();
+ if (!ScriptFile.Open(szFile)) return false;
+
+ bool bIndex = false;
+ bool bFileEnd = true;
+
+ // Read configs
+ while (ScriptFile.GetNextToken(true))
+ {
+ string tokenStr = ByteToStringUtils.UshortArrayToUnicodeString(ScriptFile.m_szToken);
+ if (ByteToStringUtils.UshortArrayToUnicodeString(ScriptFile.m_szToken).StartsWith("#_index"))
+ bIndex = true;
+ else if (ByteToStringUtils.UshortArrayToUnicodeString(ScriptFile.m_szToken).StartsWith("#_begin"))
+ {
+ bFileEnd = false;
+ break;
+ }
+ }
+
+ if (bFileEnd)
+ {
+ ScriptFile.Close();
+ return true;
+ }
+
+ if (bIndex)
+ {
+ // Every string has a preset index
+ while (ScriptFile.PeekNextToken(true))
+ {
+ int n = ScriptFile.GetNextTokenAsInt(true);
+ ScriptFile.GetNextToken(false);
+
+ string pstr = ByteToStringUtils.UshortArrayToUnicodeString(ScriptFile.m_szToken);
+ if (string.IsNullOrEmpty(pstr))
+ {
+ ScriptFile.Close();
+ BMLogger.LogError($"EC_StringTab::LoadWideStrings: {szFile} Not enough memory");
+ return false;
+ }
+
+ if (!m_WStrTab.TryAdd(n, pstr))
+ {
+ BMLogger.LogError($"EC_StringTab::LoadWideStrings: {szFile} Failed to add string to dictionary");
+ return false;
+ }
+ }
+ }
+ else
+ {
+ int iCnt = 0;
+
+ // Read strings sequently
+ while (ScriptFile.GetNextToken(true))
+ {
+ string pstr = ByteToStringUtils.UshortArrayToUnicodeString(ScriptFile.m_szToken);
+ if (string.IsNullOrEmpty(pstr))
+ {
+ ScriptFile.Close();
+ BMLogger.LogError($"EC_StringTab::LoadWideStrings: {szFile} Not enough memory");
+ return false;
+ }
+
+ if (!m_WStrTab.TryAdd(iCnt++, pstr))
+ {
+ BMLogger.LogError($"EC_StringTab::LoadWideStrings: {szFile} Failed to add string to dictionary");
+ return false;
+ }
+ }
+ }
+
+ ScriptFile.Close();
+
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Common/EC_StringTab.cs.meta b/Assets/PerfectWorld/Scripts/Common/EC_StringTab.cs.meta
new file mode 100644
index 0000000000..672eb34c76
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Common/EC_StringTab.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: b95d268e43a5da14f9cf8e1ed98bfd73
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Common/StringTabTest.cs b/Assets/PerfectWorld/Scripts/Common/StringTabTest.cs
new file mode 100644
index 0000000000..3babe721d3
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Common/StringTabTest.cs
@@ -0,0 +1,48 @@
+using System.IO;
+using UnityEngine;
+
+namespace BrewMonster.Common
+{
+ public class StringTabTest : MonoBehaviour
+ {
+ private CECStringTab m_pStringTab;
+
+ [ContextMenu("Test SkillStr")]
+ void TestSkillStr()
+ {
+ if (m_pStringTab == null)
+ {
+ m_pStringTab = new CECStringTab();
+ }
+ m_pStringTab.Clear();
+ string path = Path.Combine(Application.streamingAssetsPath, "configs/skillstr.txt");
+ m_pStringTab.Init(path, true);
+ }
+
+ [ContextMenu("Test Item Desc")]
+ public void TestItemDesc()
+ {
+ if (m_pStringTab == null)
+ {
+ m_pStringTab = new CECStringTab();
+ }
+
+ m_pStringTab.Clear();
+ string path = Path.Combine(Application.streamingAssetsPath, "configs/item_desc.txt");
+ m_pStringTab.Init(path, true);
+ }
+
+ [ContextMenu("Test Fixed Message")]
+ public void TestFixedMessage()
+ {
+ if (m_pStringTab == null)
+ {
+ m_pStringTab = new CECStringTab();
+ }
+
+ m_pStringTab.Clear();
+ string path = Path.Combine(Application.streamingAssetsPath, "configs/fixed_msg.txt");
+ m_pStringTab.Init(path, true);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/PerfectWorld/Scripts/Common/StringTabTest.cs.meta b/Assets/PerfectWorld/Scripts/Common/StringTabTest.cs.meta
new file mode 100644
index 0000000000..908c1a6476
--- /dev/null
+++ b/Assets/PerfectWorld/Scripts/Common/StringTabTest.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 3dee7c1499b302c43ac95e29bd235e3f
\ No newline at end of file
diff --git a/Assets/StreamingAssets/configs.meta b/Assets/StreamingAssets/configs.meta
new file mode 100644
index 0000000000..36d8547f86
--- /dev/null
+++ b/Assets/StreamingAssets/configs.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e6d11b7855791e740ba22f037c41f0d9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/StreamingAssets/configs/faction_pvp.txt b/Assets/StreamingAssets/configs/faction_pvp.txt
new file mode 100644
index 0000000000..aecf7461ec
--- /dev/null
+++ b/Assets/StreamingAssets/configs/faction_pvp.txt
@@ -0,0 +1,54 @@
+1 -3023.42 218.73 3804.07 -2315.22 251.55 4416.35
+2 -1922.07 217.27 4276.7 -1194.75 220.13 4256.25
+3 -856.27 219.49 3957.78 -355.67 237.19 3916.26
+4 897.03 219.1 4351.59 35.11 219.65 3989.86
+5 1549.96 243.59 3865.42 1243.7 219.07 4543.64
+6 2453.35 228.05 4307.06 2715.47 247.63 4105.12
+7 -2510.53 218.28 2802.99 -2402.91 218.09 3356.69
+8 -1557.7 218.62 2583.67 -1349.28 264.35 2927.5
+9 -212.46 220.38 2724.44 -654.49 222.47 3541.15
+10 197.31 248.51 3087.58 483.42 222.32 2844.72
+11 2038.49 218.29 3936.27 1578.52 229 3672.47
+12 1745.09 273.48 2860.03 1602.8 218.98 3481.97
+13 2343.84 219.9 2511.81 2266.59 221.58 1991.78
+14 -2591.45 218.19 2454.08 -2261.2 218.91 1746.06
+15 -1860.3 218.36 2139.75 -1150.03 245.14 1773.89
+16 -791.97 214.17 2471.02 -129.35 224.08 2081.36
+17 368.38 219.54 2182.4 279.82 221.15 1761.76
+18 2011.77 222.19 2400.27 1294.64 336.56 2261.45
+19 -2292.16 469.47 1185.61 -2842.81 528.89 760.08
+20 -1674.26 220.34 435.34 -1905.86 229.63 -61.49
+21 -557.8 413.98 831.01 -21.79 219.42 972.1
+22 147.18 216.57 1146.07 462.83 231.23 764.32
+23 1470.78 220.53 645.87 1079.88 221.18 1256.26
+24 2846.67 217.35 953.47 2413.6 218.71 537.18
+25 -2957.37 520.29 -272.5 -2225.5 523.78 377.31
+26 -2025.75 219.2 -375.8 -1894.25 226.35 -192.02
+27 -993.31 522.37 20.72 -521.16 522.2 489.45
+28 -285.09 234.15 465.15 -607.3 219.14 -489.76
+29 646.27 218.46 -271.57 471.1 216.63 380.43
+30 358.89 218.47 -463.42 492.2 222.58 -109.62
+31 1271.29 244.23 224.86 1048.12 238.15 -293.67
+32 2447.06 219.6 -145.47 2778.47 220.67 213.79
+33 -2149.01 525.18 -1064.02 -2852.9 524.33 -1270.3
+34 -1702.3 522.73 -1141.74 -1140.11 522.96 -868.99
+35 -127.76 218.48 -1512.58 -539.96 219.56 -870.73
+36 25.99 218.68 -833.9 543.07 218.09 -808.75
+37 1463.93 219.4 -1472.2 1737.68 218.85 -947.34
+38 2451.27 219.75 -1456.2 2584.51 221.31 -677.67
+39 -2344.41 523.96 -1576.39 -2819 524.02 -2181.16
+40 -1160.61 219.03 -2087.02 -1833.15 504.52 -2360.84
+41 -479.77 218.9 -2059.16 -828.94 216.61 -2484.79
+42 958.61 219.02 -2082.36 130.06 219.85 -2275.24
+43 1065.01 218.99 -2207.16 1594.66 220.67 -2471.93
+44 2310.6 219.28 -1578.46 2532.92 220.95 -1665.75
+45 2827.66 225.81 -3084.25 2360.43 217.55 -3279.74
+46 1579.91 245.92 -4094.02 1594.13 248.55 -3849.75
+47 2453.18 245.07 -3711.65 2865.72 217.89 -4411.53
+48 -2153.87 204.16 -3154.12 -2573.45 217.27 -3501.96
+49 -1297.92 216.52 -2908.71 -1716.92 232.57 -2805.03
+50 -642.59 216.87 -3442.9 -550.52 218.04 -2764.84
+51 226.82 241.05 -3121.08 880.44 239.78 -3066.87
+52 3337.821 230.013 3998.825 3717.706 253.014 3667.437
+
+
diff --git a/Assets/StreamingAssets/configs/faction_pvp.txt.meta b/Assets/StreamingAssets/configs/faction_pvp.txt.meta
new file mode 100644
index 0000000000..218f5f74fa
--- /dev/null
+++ b/Assets/StreamingAssets/configs/faction_pvp.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: bccfbf7d03830734fb6cd82a31536791
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/StreamingAssets/configs/fixed_msg.txt b/Assets/StreamingAssets/configs/fixed_msg.txt
new file mode 100644
index 0000000000..e03822c138
Binary files /dev/null and b/Assets/StreamingAssets/configs/fixed_msg.txt differ
diff --git a/Assets/StreamingAssets/configs/fixed_msg.txt.meta b/Assets/StreamingAssets/configs/fixed_msg.txt.meta
new file mode 100644
index 0000000000..8130370cf5
--- /dev/null
+++ b/Assets/StreamingAssets/configs/fixed_msg.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 06d9a02a2d455104d9b49c78ed8fc6d3
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/StreamingAssets/configs/item_desc.txt b/Assets/StreamingAssets/configs/item_desc.txt
new file mode 100644
index 0000000000..325a9b7f89
Binary files /dev/null and b/Assets/StreamingAssets/configs/item_desc.txt differ
diff --git a/Assets/StreamingAssets/configs/item_desc.txt.meta b/Assets/StreamingAssets/configs/item_desc.txt.meta
new file mode 100644
index 0000000000..0120cfd215
--- /dev/null
+++ b/Assets/StreamingAssets/configs/item_desc.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 22d591e6986fa6c4ab705ee890953236
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/StreamingAssets/configs/item_ext_desc.txt b/Assets/StreamingAssets/configs/item_ext_desc.txt
new file mode 100644
index 0000000000..fca4c160ff
Binary files /dev/null and b/Assets/StreamingAssets/configs/item_ext_desc.txt differ
diff --git a/Assets/StreamingAssets/configs/item_ext_desc.txt.meta b/Assets/StreamingAssets/configs/item_ext_desc.txt.meta
new file mode 100644
index 0000000000..55a0bfdba3
--- /dev/null
+++ b/Assets/StreamingAssets/configs/item_ext_desc.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 0b095c8d0e089f747a289d8e6c7b693e
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/StreamingAssets/configs/item_ext_prop.txt b/Assets/StreamingAssets/configs/item_ext_prop.txt
new file mode 100644
index 0000000000..4f59ca27e9
--- /dev/null
+++ b/Assets/StreamingAssets/configs/item_ext_prop.txt
@@ -0,0 +1,1670 @@
+/* Element 附加属性表
+
+属性类型定义使用 byte 表示,255 保留作为未知类型
+
+附加属性类型定义:
+
+ 0: 物理攻击
+ 1: 物理攻击上限
+ 2: 物理攻击(%)
+ 3: 魔法攻击
+ 4: 魔法攻击上限
+ 5: 魔法攻击(%)
+ 6: +物防-物攻
+ 7: +物攻-物防
+ 8: +魔攻-魔防
+ 9: 攻击速度
+10: 攻击距离
+11: 吟唱时间
+
+12: 物理防御
+13: 物理防御(%)
+14: 五行防御
+15: 金防
+16: 金防(%)
+17: 木防
+18: 木防(%)
+19: 水防
+20: 水防(%)
+21: 火防
+22: 火防(%)
+23: 土防
+24: 土防(%)
+25: +金防(%)-火防(%)
+26: +木防(%)-金防(%)
+27: +水防(%)-土防(%)
+28: +火防(%)-水防(%)
+29: +土防(%)-木防(%)
+30: +金防-火防
+31: +木防-金防
+32: +水防-土防
+33: +火防-水防
+34: +土防-木防
+
+35: HP
+36: MP
+37: HP(%)
+38: MP(%)
+39: HP恢复速度
+40: MP恢复速度
+41: 力量范围
+42: 敏捷范围
+43: 灵力范围
+44: 体力范围
+
+45: 致命一击率
+46: 命中
+47: 命中(%)
+48: 移动速度
+49: 移动速度(%)
+50: 躲闪
+51: 躲闪(%)
+52: 耐久度
+53: 耐久度(%)
+54: 物理免疫
+55: 附加技能
+56: 装备需求
+57: 未知属性
+58: 经验值加成
+59: 攻击等级
+60: 防御等级
+61: 五行防御(%)
+62: 丛林之眼
+63: 魂力
+64: 金系减免(%)
+65: 木系减免(%)
+66: 水系减免(%)
+67: 火系减免(%)
+68: 土系减免(%)
+69: 五行减免(%)
+70: 攻击等级范围(属性值随机可用)
+71: 防御等级范围(属性值随机可用)
+72: 致命一击率(%)范围(属性值随机可用)
+73: HP范围(属性值随机可用)
+74: MP范围(属性值随机可用)
+75: 命中(%)范围(属性值随机可用)
+76: 物理防御范围(属性值随机可用)
+77: 五行防御范围(属性值随机可用)
+78: 物理减免(%)范围(属性值随机可用)
+79: 五行减免(%)范围(属性值随机可用)
+80: 吟唱时间(%)范围(属性值随机可用)
+81: 攻击距离范围(属性值随机可用)
+82: MP恢复速度范围(属性值随机可用)
+83: 物理防御(%)范围(属性值随机可用)
+84: 五行防御(%)范围(属性值随机可用)
+85: HP恢复速度范围(属性值随机可用)
+86: 躲闪范围(属性值随机可用)
+87: 物理攻击上限范围(属性值随机可用)
+88: 魔法攻击上限范围(属性值随机可用)
+90: 猎魔等级
+91: 御魔等级
+92: +物防+魔防
+93: 角色HP
+94: 角色HP范围
+95: 力量
+96: 敏捷
+97: 灵力
+98: 体力
+99: 角色MP
+160: 气魄固定值
+161: 物理攻击(星盘)
+162: 魔法攻击(星盘)
+163: 物理防御(星盘)
+164: 五行防御(星盘)
+165: 生命(星盘)
+166: 气魄(星盘)
+167: 金防(星盘)
+168: 木防(星盘)
+169: 水防(星盘)
+170: 火防(星盘)
+171: 土防(星盘)
+172: 命中(星盘)
+173: 躲闪度(星盘)
+174: 真气(星盘)
+175: 无视物防等级(星盘)
+176: 无视魔防等级(星盘)
+
+套装属性类型定义:
+
+150: 致命一击率+1%
+151: 致命一击率+2%
+152: 致命一击率+3%
+153: 致命一击率+4%
+154: 致命一击率+5%
+155: 致命一击率+6%
+156: 魂力(套装)
+
+精炼属性类型定义:
+
+200: 精炼物理攻击
+201: 精炼魔法攻击
+202: 精炼物理防御
+203: 精炼金防
+204: 精炼木防
+205: 精炼水防
+206: 精炼火防
+207: 精炼土防
+208: 精炼HP
+209: 精炼躲闪
+210: 精炼五行防御
+211: 精炼物理攻击 & 魔法攻击
+212: 精炼物理防御 & 魔法防御
+
+磨刀石属性类型定义:
+
+100: 磨刀石物理攻击
+101: 磨刀石物理攻击上限
+102: 磨刀石魔法攻击
+103: 磨刀石魔法攻击上限
+104: 磨刀石物理防御
+105: 磨刀石HP
+106: 磨刀石力量
+107: 磨刀石敏捷
+108: 磨刀石灵力
+109: 磨刀石命中率
+110: 磨刀石致命一击率(%)
+111: 磨刀石攻击等级
+112: 磨刀石防御等级
+113: 磨刀石吟唱时间
+114: 磨刀石魔法防御
+115: 磨刀石骑乘加速
+
+镌刻属性类型定义
+
+120: 镌刻金防
+121: 镌刻木防
+122: 镌刻水防
+123: 镌刻火防
+124: 镌刻土防
+125: 镌刻命中
+126: 镌刻躲闪
+127: 镌刻真气
+128: 镌刻体力
+129: 镌刻力量
+130: 镌刻敏捷
+131: 镌刻灵力
+132: 镌刻HP
+133: 镌刻物防
+134: 镌刻五行防御
+135: 镌刻物理攻击
+136: 镌刻魔法攻击
+137: 镌刻金系减免(%)
+138: 镌刻木系减免(%)
+139: 镌刻水系减免(%)
+140: 镌刻火系减免(%)
+141: 镌刻土系减免(%)
+142: 镌刻五行减免(%)
+143: 镌刻致命一击率
+144: 镌刻攻击等级
+145: 镌刻防御等级
+146: 镌刻物理免疫
+
+*/
+
+// 0: 物理攻击
+type: 0
+{
+ 411, 413, 415, 476, 478,
+ 481, 753, 754, 756, 755,
+ 757, 758, 759, 760, 761,
+ 762, 763, 1009, 1008, 1007,
+ 1006, 784, 785, 786, 787,
+ 788, 789, 790, 791, 792,
+ 793, 794, 994, 995, 996,
+ 997, 1401, 1402, 1403, 1404,
+ 1405, 341, 342, 343, 586,
+ 848, 849, 850, 852, 857,
+ 858, 859, 860, 855, 1011,
+ 1010, 1012, 1013, 2020, 2022,
+ 3036, 3040,
+}
+
+// 1: 物理攻击上限
+type: 1
+{
+ 412, 414, 416, 764, 765,
+ 766, 767, 768, 769, 770,
+ 771, 772, 773, 774, 1003,
+ 1004, 1005, 1002, 795, 796,
+ 797, 798, 799, 800, 801,
+ 802, 803, 804, 805, 1001,
+ 1000, 999, 998, 3026,
+}
+
+// 2: 物理攻击(%)
+type: 2
+{
+ 417, 418, 419, 775, 344,
+ 2221, 2222, 2223, 2224, 2225,
+ 2226, 2227, 2228, 2229, 2248,
+ 2249, 2250, 2251, 2252, 2253,
+ 2254, 2255, 2256,
+}
+
+// 3: 魔法攻击
+type: 3
+{
+ 422, 434, 436, 483, 485,
+ 488, 809, 810, 811, 813,
+ 814, 815, 816, 817, 818,
+ 820, 821, 990, 991, 992,
+ 993, 348, 349, 350, 588,
+ 885, 886, 887, 889, 890,
+ 891, 892, 893, 895, 1018,
+ 1019, 1020, 1022, 1423, 1424,
+ 1425, 1426, 1427, 2023, 3038,
+ 3042,
+}
+
+// 4: 魔法攻击上限
+type: 4
+{
+ 423, 435, 437, 822, 823,
+ 824, 825, 826, 827, 828,
+ 829, 830, 831, 832, 989,
+ 988, 987, 986, 3028,
+}
+
+// 5: 魔法攻击(%)
+type: 5
+{
+ 438, 439, 440, 835, 351,
+ 2230, 2231, 2232, 2233, 2234,
+ 2235, 2236, 2237, 2238, 2257,
+ 2258, 2259, 2260, 2261, 2262,
+ 2265, 2266, 2267,
+}
+
+// 6: +物防-物功
+type: 6
+{
+ 316, 317, 318, 319, 320,
+}
+
+// 7: +物功-物防
+type: 7
+{
+ 345, 346, 347, 587, 862,
+ 863, 864, 865, 867, 868,
+ 869, 870, 871, 1014, 1015,
+ 1016, 1017,
+}
+
+// 8: +魔功-魔防
+type: 8
+{
+ 352, 353, 354, 589, 896,
+ 897, 898, 899, 900, 901,
+ 902, 903, 905, 1026, 1025,
+ 1024, 1023,
+}
+
+// 9: 攻击速度
+type: 9
+{
+ 420, 421, 331, 337, 338,
+ 339, 1901, 1904, 2012, 2013,
+ 2014,
+}
+
+// 10: 攻击距离
+type: 10
+{
+ 471, 1422,
+}
+
+// 11: 吟唱时间
+type: 11
+{
+ 441, 442, 443, 444, 1417,
+ 332, 333, 334, 335, 355,
+ 594, 595, 1428, 1449, 1511,
+ 1518, 1907, 2007, 2008, 2009,
+ 2010, 2011, 2148, 2914,
+ 3111,
+}
+
+// 12: 物理防御
+type: 12
+{
+ 477, 479, 482, 1244, 1245,
+ 1246, 1247, 1248, 1249, 1250,
+ 1251, 1252, 1253, 1254, 1255,
+ 1256, 1257, 1420, 216, 217,
+ 218, 219, 220, 590, 598,
+ 599, 600, 601, 652, 653,
+ 654, 655, 656, 657, 658,
+ 659, 660, 661, 1058, 1057,
+ 1056, 1055, 359, 360, 361,
+ 909, 910, 911, 912, 913,
+ 914, 915, 916, 917, 918,
+ 919, 1027, 1028, 1029, 1030,
+ 3032, 3136, 3137, 3138, 3139,
+ 3199,
+}
+
+// 13: 物理防御(%)
+type: 13
+{
+ 221, 222, 223, 224, 225,
+ 2102, 2103, 2104, 2105, 2106,
+ 2107, 2108, 2167, 2168, 2169,
+ 2170, 2171, 2172, 2173, 2174,
+ 2175,
+}
+
+// 14: 五行防御
+type: 14
+{
+ 484, 486, 489, 306, 307,
+ 308, 309, 310, 380, 381,
+ 382, 1565, 2109, 2110, 2111,
+ 2112, 2113, 2114, 2115, 2116,
+ 3034, 3140, 3141, 3142, 3143,
+ 3200,
+}
+
+// 15: 金防
+type: 15
+{
+ 226, 227, 228, 229, 230,
+ 365, 366, 367, 1519, 1520,
+ 1521, 1524, 1527, 1528, 1530,
+ 1531, 1534, 1535, 1537, 1539,
+ 1541, 1542, 1544, 1523, 1525,
+ 1526, 1529, 1532, 1533, 1536,
+ 1538, 1540, 1545, 1547, 1687,
+ 1551, 1554, 1557, 1560, 1563,
+}
+
+// 16: 金防(%)
+type: 16
+{
+ 231, 232, 233, 234, 235,
+ 2194, 2195, 2196, 2197, 2198,
+ 2199, 2200, 2201, 2202,
+}
+
+// 17: 木防
+type: 17
+{
+ 236, 237, 238, 239, 240,
+ 368, 369, 370, 1546, 1549,
+ 1550, 1552, 1553, 1555, 1556,
+ 1558, 1559, 1561, 1562, 1564,
+ 1566, 1567, 1568, 1569, 1571,
+ 1574, 1576, 1579, 1582, 1584,
+ 1588, 1590, 1593, 1595, 1598,
+ 1600, 1603, 1605, 1608, 1610,
+ 1611,
+}
+
+// 18: 木防(%)
+type: 18
+{
+ 424, 425, 426, 427, 428,
+ 2185, 2186, 2187, 2188, 2189,
+ 2190, 2191, 2192, 2193,
+}
+
+// 19: 水防
+type: 19
+{
+ 429, 430, 431, 432, 433,
+ 371, 372, 373, 1570, 1572,
+ 1573, 1575, 1577, 1578, 1580,
+ 1581, 1583, 1585, 1586, 1587,
+ 1589, 1591, 1592, 1616, 1619,
+ 1621, 1623, 1626, 1628, 1630,
+ 1633, 1634, 1635, 1636, 1637,
+ 1639, 1641, 1644, 1646, 1648,
+ 1650,
+}
+
+// 20: 水防(%)
+type: 20
+{
+ 241, 242, 243, 244, 245,
+ 2212, 2213, 2214, 2215, 2216,
+ 2217, 2218, 2219, 2220,
+}
+
+// 21: 火防
+type: 21
+{
+ 246, 247, 248, 249, 250,
+ 374, 375, 376, 1594, 1596,
+ 1597, 1599, 1601, 1602, 1604,
+ 1606, 1607, 1609, 1612, 1613,
+ 1614, 1617, 1618, 1651, 1652,
+ 1653, 1654, 1655, 1656, 1657,
+ 1658, 1659, 1660, 1661, 1662,
+ 1663, 1664, 1665, 1666, 1667,
+ 1668,
+}
+
+// 22: 火防(%)
+type: 22
+{
+ 251, 252, 253, 254, 255,
+ 2176, 2177, 2178, 2179, 2180,
+ 2181, 2182, 2183, 2184,
+}
+
+// 23: 土防
+type: 23
+{
+ 256, 257, 258, 259, 260,
+ 377, 378, 379, 1620, 1622,
+ 1624, 1625, 1627, 1629, 1631,
+ 1632, 1638, 1640, 1642, 1643,
+ 1645, 1647, 1649, 1669, 1670,
+ 1671, 1672, 1673, 1674, 1675,
+ 1676, 1677, 1678, 1679, 1680,
+ 1681, 1682, 1683, 1684, 1685,
+ 1686,
+
+}
+
+// 24: 土防(%)
+type: 24
+{
+ 261, 262, 263, 264, 265,
+ 2203, 2204, 2205, 2206, 2207,
+ 2208, 2209, 2210, 2211,
+}
+
+// 25: +金防(%)-火防(%)
+type: 25
+{
+ 527, 528, 529, 530, 531,
+}
+
+// 26: +木防(%)-金防(%)
+type: 26
+{
+ 532, 533, 534, 535, 536,
+}
+
+// 27: +水防(%)-土防(%)
+type: 27
+{
+ 537, 538, 539, 540, 541,
+}
+
+// 28: +火防(%)-水防(%)
+type: 28
+{
+ 542, 543, 544, 545, 546,
+}
+
+// 29: +土防(%)-木防(%)
+type: 29
+{
+ 547, 548, 549, 550, 551,
+}
+
+// 30: +金防-火防
+type: 30
+{
+ 592, 602, 603, 604, 605,
+ 676, 677, 678, 679, 680,
+ 681, 682, 683, 684, 685,
+ 686, 1066, 1065, 1064, 1063,
+ 512, 517, 522, 931, 932,
+ 933, 934, 935, 936, 937,
+ 938, 939, 940, 941, 1038,
+ 1037, 1036, 1035,
+}
+
+// 31: +木防-金防
+type: 31
+{
+ 606, 607, 608, 609, 610,
+ 693, 694, 695, 696, 698,
+ 699, 700, 701, 707, 708,
+ 709, 1070, 1069, 1068, 1067,
+ 513, 518, 523, 942, 943,
+ 944, 945, 946, 947, 948,
+ 949, 950, 951, 952, 1042,
+ 1041, 1040, 1039,
+}
+
+// 32: +水防-土防
+type: 32
+{
+ 611, 612, 613, 614, 615,
+ 710, 711, 712, 713, 714,
+ 715, 716, 717, 718, 719,
+ 720, 1074, 1073, 1072, 1071,
+ 514, 519, 524, 964, 965,
+ 966, 967, 968, 969, 970,
+ 971, 972, 973, 974, 1050,
+ 1049, 1048, 1047,
+}
+
+// 33: +火防-水防
+type: 33
+{
+ 617, 616, 618, 619, 620,
+ 722, 723, 724, 725, 726,
+ 727, 728, 729, 730, 731,
+ 732, 1078, 1077, 1076, 1075,
+ 515, 520, 525, 975, 976,
+ 977, 978, 979, 980, 981,
+ 982, 983, 984, 985, 1054,
+ 1053, 1052, 1051,
+}
+
+// 34: +土防-木防
+type: 34
+{
+ 621, 622, 623, 624, 625,
+ 733, 734, 735, 736, 737,
+ 738, 739, 741, 742, 743,
+ 744, 1082, 1081, 1080, 1079,
+ 516, 521, 526, 953, 954,
+ 956, 955, 957, 958, 959,
+ 960, 961, 962, 963, 1046,
+ 1045, 1044, 1043,
+}
+
+// 35: HP
+type: 35
+{
+ 1239, 1240,
+ 1241, 1242, 1243, 1335, 1336,
+ 1337, 1338, 1339, 1340, 1341,
+ 1342, 1343, 1344, 1411, 1412,
+ 1413, 1414, 1415, 1416, 266,
+ 267, 268, 269, 270, 626,
+ 627, 628, 629, 630, 1345,
+ 1346, 1347, 1348, 1349, 1370,
+ 1371, 1372, 1373, 1374, 1375,
+ 1376, 1377, 1378, 1379, 1380,
+ 1381, 1382, 1383, 1384, 1997,
+ 1998, 1999, 2000, 2001, 3019,
+}
+
+// 36: MP
+type: 36
+{
+ 500, 501, 502, 1234, 1235,
+ 1236, 1237, 1238, 1325, 1326,
+ 1327, 1328, 1329, 1330, 1331,
+ 1332, 1333, 1334, 276, 277,
+ 278, 279, 280, 631, 632,
+ 633, 634, 635, 1350, 1351,
+ 1352, 1353, 1354, 1355, 1356,
+ 1357, 1358, 1359, 1360, 1361,
+ 1362, 1363, 1364, 1365, 1366,
+ 1367, 1368, 1369, 2002, 2003,
+ 2004, 2005, 2006, 2117, 2118,
+ 2119, 2120, 2121, 2122, 2123,
+ 2124, 2125,
+}
+
+// 37: HP(%)
+type: 37
+{
+ 271, 272, 273, 274, 275,
+ 387, 1688, 2133, 2134, 2135,
+ 2136, 2137, 2138, 2139, 2140,
+ 2141, 2842,
+}
+
+// 38: MP(%)
+type: 38
+{
+ 281, 282, 283, 284, 285,
+ 388, 1689,
+}
+
+// 39: HP恢复速度
+type: 39
+{
+ 321, 322, 323, 324, 325,
+ 383, 1690, 1987, 1988, 1989,
+ 1990, 1991,
+}
+
+// 40: MP恢复速度
+type: 40
+{
+ 326, 327, 328, 329, 330,
+ 384, 1691, 1992, 1993, 1994,
+ 1995, 1996,
+}
+
+// 41: 力量范围
+type: 41
+{
+ 1104, 1105, 1106, 1107, 1108,
+ 1124, 1125, 1126, 1127, 1128,
+ 1098, 1084, 1085, 1086, 1087,
+ 1429, 1430, 1431, 1432, 1433,
+ 1470, 1471, 1472, 1473, 1474,
+ 1490, 1492, 1450, 1451, 1452,
+ 1453, 1454, 1513, 1895, 1912,
+ 1913, 1914, 1915, 1916, 1917,
+ 1936, 1937, 1938, 1939, 1940,
+ 1941, 1942, 1943, 1944, 2272,
+ 2718, 2745, 3055, 3072, 3232
+}
+
+// 42: 敏捷范围
+type: 42
+{
+ 1109, 1110, 1111, 1112, 1113,
+ 1418, 1129, 1130, 1131, 1132,
+ 1133, 1088, 1089, 1090, 1091,
+ 1092, 1434, 1435, 1436, 1437,
+ 1438, 1475, 1476, 1477, 1478,
+ 1479, 1494, 1455, 1456, 1457,
+ 1458, 1459, 1514, 1897, 1918,
+ 1919, 1920, 1921, 1922, 1923,
+ 1945, 1946, 1947, 1948, 1949,
+ 1950, 1951, 1952, 1953, 2271,
+ 2719, 2746, 3056, 3073, 3234,
+}
+
+// 43: 灵力范围
+type: 43
+{
+ 1114, 1115, 1116, 1117, 1118,
+ 1419, 1134, 1135, 1136, 1137,
+ 1138, 1093, 1094, 1095, 1096,
+ 1097, 1439, 1440, 1441, 1442,
+ 1443, 1480, 1481, 1482, 1483,
+ 1484, 1495, 1460, 1461, 1462,
+ 1463, 1464, 1516, 1899, 1930,
+ 1931, 1932, 1933, 1934, 1935,
+ 1963, 1964, 1965, 1966, 1967,
+ 1968, 1969, 1970, 1971, 2270,
+ 2717, 2744, 3054, 3071, 3233,
+}
+
+// 44: 体力范围
+type: 44
+{
+ 1119, 1120, 1121, 1122, 1123,
+ 1139, 1140, 1141, 1142, 1143,
+ 1099, 1100, 1101, 1102, 1103,
+ 1444, 1445, 1446, 1447, 1448,
+ 1485, 1486, 1487, 1488, 1489,
+ 1491, 1493, 1465, 1466, 1467,
+ 1468, 1469, 1515, 1902, 1905,
+ 1908, 1924, 1925, 1926, 1927,
+ 1928, 1929, 1954, 1955, 1956,
+ 1957, 1958, 1959, 1960, 1961,
+ 1962, 2146, 2273, 2720, 2747,
+ 3057, 3074, 3235,
+}
+
+// 45: 致命一击率
+type: 45
+{
+ 473, 474, 475, 1421, 356,
+ 357, 358, 585, 591, 1510,
+ 1517, 1977, 1978, 1979, 1980,
+ 1981, 2021, 2024, 2025, 2027,
+ 2028, 2147, 2915, 3020,
+}
+
+// 46: 命中
+type: 46
+{
+ 490, 492, 494, 1311, 1312,
+ 1313, 1314, 1315, 1316, 1317,
+ 1318, 1319, 1320, 1321, 1322,
+ 1323, 1324, 1406, 1407, 1408,
+ 1385, 1386, 1387, 1388, 1389,
+ 1390, 1391, 1392, 1393, 1395,
+ 1396, 1397, 1398, 1399, 3029,
+}
+
+// 47: 命中(%)
+type: 47
+{
+ 462, 463, 464, 389, 390,
+ 391, 1512,
+}
+
+// 48: 移动速度
+type: 48
+{
+ 636, 637, 638, 639, 640,
+ 1972, 1973, 1974, 1975, 1976,
+}
+
+// 49: 移动速度(%)
+type: 49
+{
+ 286, 287, 288, 289, 290,
+}
+
+// 50: 躲闪
+type: 50
+{
+ 491, 493, 495, 1258, 1259,
+ 1260, 1261, 1262, 1263, 1264,
+ 1265, 1266, 1267, 1268, 1269,
+ 1270, 1271, 1409, 1410, 641,
+ 642, 643, 644, 645, 662,
+ 663, 664, 665, 666, 667,
+ 668, 669, 670, 671, 1062,
+ 1061, 1060, 1059, 593, 596,
+ 597, 920, 921, 922, 923,
+ 924, 925, 926, 927, 928,
+ 929, 930, 1031, 1032, 1033,
+ 1034, 3030,
+}
+
+// 51: 躲闪(%)
+type: 51
+{
+ 291, 292, 293, 294, 295,
+ 392, 393, 394,
+}
+
+// 52: 耐久度
+type: 52
+{
+ 646, 647, 648, 649, 650,
+}
+
+// 53: 耐久度(%)
+type: 53
+{
+ 465, 467, 469, 296, 297,
+ 298, 299, 300, 407, 408,
+ 409,
+}
+
+// 54: 物理免疫
+type: 54
+{
+ 1272, 1273, 1274, 311, 312,
+ 313, 314, 315, 362, 363,
+ 364, 1896, 1898, 1900, 1982,
+ 1983, 1984, 1985, 1986, 2916,
+}
+
+// 55: 附加技能
+type: 55
+{
+ 445, 446, 447, 448, 449,
+ 450, 451, 452, 453, 454,
+ 455, 456, 457, 458, 459,
+ 460, 461, 1275, 1276, 1277,
+ 1278, 1279, 1280, 1281, 1282,
+ 1283, 1284, 1285, 1286, 1287,
+ 1288, 1289, 1290, 1291, 1292,
+ 1293, 1294, 1295, 1296, 1297,
+ 1298, 1299, 1300, 1301, 1302,
+ 1303, 1304, 1305, 1306, 1307,
+ 1308, 1309, 1310, 2275, 2276,
+ 2277, 2278, 2279, 2280, 2281,
+ 2282, 2283, 2472, 2473, 2474,
+ 2475, 2477, 2479, 2482, 2710,
+ 2711, 2712, 2713, 2714, 2715,
+ 2716, 3221, 3222, 3223, 3224,
+ 3225, 3226, 3227, 3228, 3229,
+ 3239,
+}
+
+// 56: 装备需求
+type: 56
+{
+ 466, 468, 470, 301, 302,
+ 303, 304, 305, 2738,
+}
+
+// 57: 未知属性
+type: 57
+{
+ 472, 336, 410,
+}
+
+// 58: 经验值加成
+type: 58
+{
+ 404, 405, 406, 2015, 2016,
+ 2017, 2018, 2019, 2839,
+ 2840, 2841,
+}
+
+// 59: 攻击等级
+type: 59
+{
+ 2029, 2030, 2031, 2032, 2033,
+ 2034, 2035, 2036, 2037, 2038,
+ 2065, 2066, 2067, 2068, 2069,
+ 2070, 2071, 2072, 2073, 2074,
+ 2075, 2076, 2077, 2078, 2079,
+ 2080, 2081, 2082, 2083, 2084,
+ 2098, 2099, 2100, 2101, 2142,
+ 2143, 2149, 2150, 2151, 2268,
+ 2974, 3009, 3110, 3152, 3195,
+ 3205, 3206, 3207, 3208, 3203,
+ 3230,
+}
+
+// 60: 防御等级
+type: 60
+{
+ 2085, 2086, 2087, 2088, 2089,
+ 2090, 2091, 2092, 2093, 2094,
+ 2095, 2096, 2097, 2039, 2040,
+ 2041, 2042, 2043, 2044, 2045,
+ 2046, 2047, 2048, 2049, 2050,
+ 2051, 2052, 2053, 2054, 2055,
+ 2056, 2057, 2058, 2059, 2060,
+ 2061, 2062, 2063, 2064, 2144,
+ 2145, 2154, 2155, 2156, 2157,
+ 2269, 2274, 2309, 2310, 3008,
+ 3153, 3204, 3231,
+}
+
+// 61: 五行防御(%)
+type: 61
+{
+ 2239, 2240, 2241, 2242, 2243,
+ 2244, 2245, 2246, 2247, 2299,
+ 2300, 2301, 2302, 2303, 2304,
+ 2305, 2306, 2307, 2308,
+}
+
+// 62: 丛林之眼
+type: 62
+{
+ 2311,
+}
+
+// 63: 魂力
+type: 63
+{
+ 2362, 2922,
+}
+
+// 64: 金系减免(%)
+type: 64
+{
+ 2487, 2488, 2489, 2490,
+}
+
+// 65: 木系减免(%)
+type: 65
+{
+ 2491, 2492, 2493, 2494,
+}
+
+// 66: 水系减免(%)
+type: 66
+{
+ 2495, 2496, 2497, 2498,
+}
+
+// 67: 火系减免(%)
+type: 67
+{
+ 2483, 2484, 2485, 2486,
+}
+
+// 68: 土系减免(%)
+type: 68
+{
+ 2499, 2500, 2501, 2502,
+}
+
+// 69: 五行减免(%)
+type: 69
+{
+ 2503, 2504, 2505, 2921,
+}
+
+// 70: 攻击等级范围(属性值随机可用)
+type: 70
+{
+ 2721, 2722, 2912, 3075,
+ 3076,
+}
+
+// 71: 防御等级范围(属性值随机可用)
+type: 71
+{
+ 2723, 2724, 3077, 3078,
+}
+
+// 72: 致命一击率(%)范围(属性值随机可用)
+type: 72
+{
+ 2725, 2726, 2754,
+}
+
+// 73: HP范围(属性值随机可用)
+type: 73
+{
+ 2729, 2740, 2741, 3050,
+ 3051, 3068, 3069, 3070,
+ 3081,
+}
+
+// 74: MP范围(属性值随机可用)
+type: 74
+{
+ 2730, 2742, 3052, 3082,
+}
+
+// 75: 命中(%)范围(属性值随机可用)
+type: 75
+{
+ 2731, 3083,
+}
+
+// 76: 物理防御范围(属性值随机可用)
+type: 76
+{
+ 2732, 2756, 3064, 3084,
+}
+
+// 77: 五行防御范围(属性值随机可用)
+type: 77
+{
+ 2733, 2755, 3063, 3065,
+ 3066, 3067, 3085,
+}
+
+// 78: 物理减免(%)范围(属性值随机可用)
+type: 78
+{
+ 2734, 2757, 3086,
+}
+
+// 79: 五行减免(%)范围(属性值随机可用)
+type: 79
+{
+ 2735, 2758, 3087,
+}
+
+// 80: 吟唱时间(%)范围(属性值随机可用)
+type: 80
+{
+ 2736, 2737, 2752, 2753,
+ 2913, 3062, 3088,
+}
+
+// 81: 攻击距离范围(属性值随机可用)
+type: 81
+{
+ 2739,
+}
+
+// 82: MP恢复速度范围(属性值随机可用)
+type: 82
+{
+ 2743, 3053,
+}
+
+// 83: 物理防御(%)范围(属性值随机可用)
+type: 83
+{
+ 2748, 3058,
+}
+
+// 84: 五行防御(%)范围(属性值随机可用)
+type: 84
+{
+ 2749, 3059,
+}
+
+// 85: HP恢复速度范围(属性值随机可用)
+type: 85
+{
+ 2750, 3060,
+}
+
+// 86: 躲闪范围(属性值随机可用)
+type: 86
+{
+ 2751, 3061,
+}
+
+// 87: 物理攻击上限范围(属性值随机可用)
+type: 87
+{
+ 2727, 3079,
+}
+
+// 88: 魔法攻击上限范围(属性值随机可用)
+type: 88
+{
+ 2728, 3080,
+}
+
+// 90: 猎魔等级
+type: 90
+{
+ 2843, 2844, 2845, 2846,
+ 2847, 2848, 2849, 2881,
+ 2889, 2890, 3007, 3021,
+ 3023, 3109, 3130, 3131,
+ 3132,
+}
+
+// 91: 御魔等级
+type: 91
+{
+ 2850, 2851, 2852, 2853,
+ 2854, 2855, 2856, 2857,
+ 2858, 2859, 2887, 2888,
+ 3022, 3024,
+}
+
+// 92: +物防+魔防
+type: 92
+{
+}
+
+// 93: 角色HP
+type: 93
+{
+ 497, 498, 499, 2983,
+}
+
+// 94: 角色HP范围
+type: 94
+{
+ 2126, 2127, 2128, 2129,
+ 2130, 2131, 2132,
+}
+
+// 95: 力量
+type: 95
+{
+ 2917, 2985, 3010,
+}
+
+// 96: 敏捷
+type: 96
+{
+ 2918, 2986, 3014,
+}
+
+// 97: 灵力
+type: 97
+{
+ 2919, 2987, 3012,
+}
+
+// 98: 体力
+type: 98
+{
+ 2920, 3016, 3144, 3145,
+ 3146, 3147, 3201,
+}
+
+// 99: 角色MP
+type: 99
+{
+ 2984,
+}
+
+// 300: 气魄固定值
+type: 160
+{
+ 3043, 3044, 3148, 3149,
+ 3150, 3151, 3196, 3209,
+ 3210, 3211, 3212, 3202,
+ 3236, 3237, 3238,
+}
+
+// 161: 物理攻击(星盘)
+type: 161
+{
+ 3160, 3161, 3162,
+}
+
+// 162: 魔法攻击(星盘)
+type: 162
+{
+ 3163,
+}
+
+// 163: 物理防御(星盘)
+type: 163
+{
+ 3164, 3165, 3166,
+}
+
+// 164: 五行防御(星盘)
+type: 164
+{
+ 3167, 3168, 3169,
+}
+
+// 165: 生命(星盘)
+type: 165
+{
+ 3170, 3171, 3172,
+}
+
+// 166: 气魄(星盘)
+type: 166
+{
+ 3173,
+}
+
+// 167: 金防(星盘)
+type: 167
+{
+ 3174, 3175, 3176,
+}
+
+// 168: 木防(星盘)
+type: 168
+{
+ 3177, 3178, 3179,
+}
+
+// 169: 水防(星盘)
+type: 169
+{
+ 3180, 3181, 3182,
+}
+
+// 170: 火防(星盘)
+type: 170
+{
+ 3183, 3184, 3185,
+}
+
+// 171: 土防(星盘)
+type: 171
+{
+ 3186, 3187, 3188,
+}
+
+// 172: 准确度(星盘)
+type: 172
+{
+ 3189,
+}
+
+// 173: 躲闪度(星盘)
+type: 173
+{
+ 3190,
+}
+
+// 174: 真气(星盘)
+type: 174
+{
+ 3191, 3192,
+}
+
+// 175: 无视物防等级(星盘)
+type: 175
+{
+ 3193, 3197, 3213, 3214, 3215,
+ 3216,
+}
+
+// 176: 无视魔防等级(星盘)
+type: 176
+{
+ 3194, 3198, 3217, 3218, 3219,
+ 3220,
+}
+
+// 150: 致命一击率+1%
+type: 150
+{
+ 2313, 2318, 2323, 2328, 2333,
+ 2338, 2343, 2348, 2353, 2358,
+}
+
+// 151: 致命一击率+2%
+type: 151
+{
+}
+
+// 152: 致命一击率+3%
+type: 152
+{
+ 1903, 1906, 1909
+}
+
+// 153: 致命一击率+4%
+type: 153
+{
+}
+
+// 154: 致命一击率+5%
+type: 154
+{
+ 2925, 2930, 2935, 2940,
+ 2945, 2950, 2955, 2960,
+ 2965, 2970,
+}
+
+// 155: 致命一击率+6%
+type: 155
+{
+}
+
+// 156: 魂力(套装)
+type: 156
+{
+ 2834, 3093,
+}
+
+// 200: 精炼物理攻击
+type: 200
+{
+ 1497, 1498, 1499, 1692, 1693,
+ 1694, 1695, 1696, 1697, 1698,
+ 1701, 1699, 1700, 1702, 1703,
+ 1704, 1705, 1706, 1707, 1708,
+ 1709, 1710, 1711, 1712, 1713,
+ 1714, 1715, 1716, 1717, 1718,
+ 1719, 1720, 1721, 1722, 1723,
+ 1724, 1725, 1726, 1727, 1728,
+ 1729, 1730, 1731, 1732, 1733,
+ 1734, 1735, 1736, 1737, 1738,
+ 1739, 1740, 1741, 1742, 1743,
+ 1744, 1745, 1746, 1747, 1748,
+ 1749, 1750, 1751,
+}
+
+// 201: 精炼魔法攻击
+type: 201
+{
+ 1496,
+}
+
+// 202: 精炼物理防御
+type: 202
+{
+ 1503, 1832, 1833, 1834, 1835,
+ 1836, 1837, 1838, 1839, 1840,
+ 1841, 1842, 1843, 1844, 1845,
+ 1846, 1847, 1848, 1849, 1850,
+ 1851,
+}
+
+// 203: 精炼金防
+type: 203
+{
+}
+
+// 204: 精炼木防
+type: 204
+{
+}
+
+// 205: 精炼水防
+type: 205
+{
+}
+
+// 206: 精炼火防
+type: 206
+{
+}
+
+// 207: 精炼土防
+type: 207
+{
+}
+
+// 208: 精炼HP
+type: 208
+{
+ 1500, 1501, 1502, 1772, 1773,
+ 1774, 1775, 1776, 1777, 1778,
+ 1779, 1780, 1781, 1782, 1783,
+ 1784, 1785, 1786, 1787, 1788,
+ 1789, 1790, 1791, 1792, 1793,
+ 1794, 1795, 1796, 1797, 1798,
+ 1799, 1800, 1801, 1802, 1803,
+ 1804, 1805, 1806, 1807, 1808,
+ 1809, 1810, 1811, 1812, 1813,
+ 1814, 1815, 1816, 1817, 1818,
+ 1819, 1820, 1821, 1822, 1823,
+ 1824, 1825, 1826, 1827, 1828,
+ 1829, 1830, 1831,
+}
+
+// 209: 精炼躲闪
+type: 209
+{
+ 1505, 1872, 1873, 1874, 1875,
+ 1876, 1877, 1878, 1879, 1880,
+ 1881, 1882, 1883, 1884, 1885,
+ 1886, 1887, 1888, 1889, 1890,
+ 1891,
+}
+
+// 210: 精炼五行防御
+type: 210
+{
+ 1504, 1852, 1853, 1854, 1855,
+ 1856, 1857, 1858, 1859, 1860,
+ 1861, 1862, 1863, 1864, 1865,
+ 1866, 1867, 1868, 1869, 1870,
+ 1871,
+}
+
+// 211: 精炼物理攻击 & 魔法攻击
+type: 211
+{
+ 1752, 1753, 1754, 1755, 1756,
+ 1757, 1758, 1759, 1760, 1761,
+ 1762, 1763, 1764, 1765, 1766,
+ 1767, 1768, 1769, 1770, 1771,
+}
+
+// 212: 精炼物理防御 & 魔法防御
+type: 212
+{
+ 2923,
+}
+
+// 100: 磨刀石物理攻击
+type: 100
+{
+ 2363, 2369, 2377, 2386,
+ 2395, 2407, 2420, 3004,
+}
+
+// 101: 磨刀石物理攻击上限
+type: 101
+{
+ 2370, 2378, 2387, 2396,
+ 2408, 2421,
+}
+
+// 102: 磨刀石魔法攻击
+type: 102
+{
+ 2364, 2371, 2379, 2388,
+ 2397, 2409, 2422, 3005,
+}
+
+// 103: 磨刀石魔法攻击上限
+type: 103
+{
+ 2372, 2380, 2389, 2398,
+ 2410, 2423,
+}
+
+// 104: 磨刀石物理防御
+type: 104
+{
+ 2382, 2390, 2400, 2412,
+ 2425,
+}
+
+// 105: 磨刀石HP
+type: 105
+{
+ 2365, 2373, 2381, 2434,
+ 2399, 2411, 2424, 3006,
+}
+
+// 106: 磨刀石力量
+type: 106
+{
+ 2366, 2374, 2383, 2392,
+ 2433, 2417, 2430,
+}
+
+// 107: 磨刀石敏捷
+type: 107
+{
+ 2367, 2375, 2384, 2393,
+ 2405, 2418, 2431,
+}
+
+// 108: 磨刀石灵力
+type: 108
+{
+ 2368, 2376, 2385, 2394,
+ 2406, 2419, 2432,
+}
+
+// 109: 磨刀石命中率
+type: 109
+{
+ 2391, 2401, 2413, 2426,
+}
+
+// 110: 磨刀石致命一击率(%)
+type: 110
+{
+ 2402, 2427,
+}
+
+// 111: 磨刀石攻击等级
+type: 111
+{
+ 2403, 2415, 2428,
+}
+
+// 112: 磨刀石防御等级
+type: 112
+{
+ 2404, 2416, 2429,
+}
+
+// 113: 磨刀石吟唱时间
+type: 113
+{
+ 2414,
+}
+
+// 114: 磨刀石魔法防御
+type: 114
+{
+ 3045, 3046, 3047, 3048,
+ 3049,
+}
+
+// 115: 磨刀石骑乘加速
+type: 115
+{
+ 3133, 3134, 3135,
+}
+
+// 120: 镌刻金防
+type: 120
+{
+ 2518, 2519, 2520, 2521, 2522,
+ 2523,
+}
+
+// 121: 镌刻木防
+type: 121
+{
+ 2506, 2507, 2508, 2509, 2510,
+ 2511,
+}
+
+// 122: 镌刻水防
+type: 122
+{
+ 2512, 2513, 2514, 2515, 2516,
+ 2517,
+}
+
+// 123: 镌刻火防
+type: 123
+{
+ 2530, 2531, 2532, 2533, 2534,
+ 2535,
+}
+
+// 124: 镌刻土防
+type: 124
+{
+ 2524, 2525, 2526, 2527, 2528,
+ 2529,
+}
+
+// 125: 镌刻命中
+type: 125
+{
+ 2536, 2537, 2538, 2539, 2540,
+ 2541, 2542,
+}
+
+// 126: 镌刻躲闪
+type: 126
+{
+ 2543, 2544, 2545, 2546, 2547,
+ 2548, 2549,
+}
+
+// 127: 镌刻MP
+type: 127
+{
+ 2550, 2551, 2552, 2553, 2554,
+ 2555, 2556, 2557,
+}
+
+// 128: 镌刻体力
+type: 128
+{
+ 2558, 2559, 2560, 2561, 2562,
+ 2563, 2564, 2565, 2566, 2988,
+}
+
+// 129: 镌刻力量
+type: 129
+{
+ 2567, 2568, 2569, 2570, 2571,
+ 2572, 2573, 2574, 2575,
+}
+
+// 130: 镌刻敏捷
+type: 130
+{
+ 2576, 2577, 2578, 2579, 2580,
+ 2581, 2582, 2583, 2584,
+}
+
+// 131: 镌刻灵力
+type: 131
+{
+ 2585, 2586, 2587, 2588, 2589,
+ 2590, 2591, 2592, 2593,
+}
+
+// 132: 镌刻HP
+type: 132
+{
+ 2594, 2595, 2596, 2597, 2598,
+ 2599, 2600, 2601, 2602, 2603,
+ 2604, 2605, 2606, 2607, 2608,
+ 2609, 2610, 2611, 2612, 2613,
+ 2614, 2615, 2989, 2990, 2991,
+}
+
+// 133: 镌刻物防
+type: 133
+{
+ 2616, 2617, 2618, 2619, 2620,
+ 2621, 2622, 2623, 2624, 2625,
+ 2626, 2627, 2628, 2629, 2630,
+ 2631, 2632, 3001, 3002, 3003,
+}
+
+// 134: 镌刻五行防御
+type: 134
+{
+ 2633, 2634, 2635, 2636, 2637,
+ 2638, 2639, 2640, 2641, 2642,
+ 2643, 2644, 2645, 2646, 2647,
+ 2648, 2649, 2998, 2999, 3000,
+}
+
+// 135: 镌刻物理攻击
+type: 135
+{
+ 2650, 2651, 2652, 2653, 2654,
+ 2655, 2656, 2657, 2658, 2659,
+ 2660, 2661, 2662, 2663, 2664,
+ 2665, 2666, 2667, 2995, 2996,
+ 2997,
+}
+
+// 136: 镌刻魔法攻击
+type: 136
+{
+ 2668, 2669, 2670, 2671, 2672,
+ 2673, 2674, 2675, 2676, 2677,
+ 2678, 2679, 2680, 2681, 2682,
+ 2683, 2684, 2685, 2992, 2993,
+ 2994,
+}
+
+// 137: 镌刻金系减免(%)
+type: 137
+{
+ 2686, 2687, 2688,
+}
+
+// 138: 镌刻木系减免(%)
+type: 138
+{
+ 2689, 2690, 2691,
+}
+
+// 139: 镌刻水系减免(%)
+type: 139
+{
+ 2692, 2693, 2694,
+}
+
+// 140: 镌刻火系减免(%)
+type: 140
+{
+ 2695, 2696, 2697,
+}
+
+// 141: 镌刻土系减免(%)
+type: 141
+{
+ 2698, 2699, 2700,
+}
+
+// 142: 镌刻五行减免(%)
+type: 142
+{
+ 2708, 2709,
+}
+
+// 143: 镌刻致命一击率
+type: 143
+{
+ 2701,
+}
+
+// 144: 镌刻攻击等级
+type: 144
+{
+ 2702, 2703,
+}
+
+// 145: 镌刻防御等级
+type: 145
+{
+ 2704, 2705,
+}
+
+// 146: 镌刻物理免疫
+type: 146
+{
+ 2706, 2707,
+}
\ No newline at end of file
diff --git a/Assets/StreamingAssets/configs/item_ext_prop.txt.meta b/Assets/StreamingAssets/configs/item_ext_prop.txt.meta
new file mode 100644
index 0000000000..6cd877438a
--- /dev/null
+++ b/Assets/StreamingAssets/configs/item_ext_prop.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5429be2b686cda24e8f5ab2049a68b27
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/StreamingAssets/configs/item_msg_map.txt b/Assets/StreamingAssets/configs/item_msg_map.txt
new file mode 100644
index 0000000000..1fc2307ad7
--- /dev/null
+++ b/Assets/StreamingAssets/configs/item_msg_map.txt
@@ -0,0 +1,139 @@
+//物品id 喊话id 显示参数 喊话次数(默认为1) 喊话间隔
+//如果出现同一物品id对应不同的喊话id,程序中将只取靠后的那个喊话id
+//参数含义(3: 先显示物品名再显示玩家名,2:先显示玩家名再显示物品名,1:显示玩家名,0:都不显示);
+//0 都不显示
+//1 显示玩家名
+//2 先显示玩家名再显示物品名
+//3 先显示物品名再显示玩家名
+//4 显示顺序:服务器-玩家-道具
+//5 显示顺序:道具-服务器-玩家
+//6 显示顺序:服务器-玩家
+//7 显示顺序:服务器
+
+//本服喊话ID对照
+11599 4521 2
+11600 4522 2
+12227 4523 1
+12265 4524 2
+12264 4525 2
+12266 4526 2
+12769 4527 2
+12719 4528 2
+12646 4529 2
+12647 4529 2
+12648 4529 2
+12649 4529 2
+12650 4529 2
+12651 4529 2
+13548 4648 0
+13565 4665 0
+13566 4666 0
+13567 4667 0
+13568 4668 0
+13569 4669 0
+13570 4670 0
+13571 4671 0
+13572 4672 0
+13573 4673 0
+13574 4674 0
+13575 4675 0
+13576 4676 0
+13577 4677 0
+13578 4678 0
+13579 4679 0
+13580 4680 0
+13581 4681 0
+13582 4682 0
+13583 4683 0
+13584 4684 0
+13585 4685 0
+13586 4686 0
+13587 4687 0
+13588 4688 0
+13589 4689 0
+13590 4690 0
+13591 4691 0
+13592 4692 0
+13593 4693 0
+13594 4694 0
+13595 4695 0
+13596 4696 0
+13597 4697 0
+13598 4698 0
+13599 4699 0
+13600 4700 0
+14290 4532 1
+20853 4533 3
+20255 4534 3
+20289 4535 3
+21065 4536 3
+20311 4537 3
+20852 4538 3
+20218 4539 3
+20402 4540 3
+20851 4541 3
+20394 4542 3
+20363 4543 3
+26061 4544 3
+26053 4545 3
+28607 4546 2
+29453 4547 3
+30207 4548 3
+44960 4549 3
+45043 4550 3
+48694 4551 3
+48695 4551 3
+48696 4552 3
+48697 4552 3
+50139 4554 2
+50145 4554 2
+50151 4554 2
+50157 4554 2
+50163 4554 2
+50169 4554 2
+50175 4554 2
+50181 4554 2
+50187 4554 2
+50193 4554 2
+50199 4554 2
+50205 4554 2
+50211 4554 2
+50217 4554 2
+50223 4554 2
+50229 4554 2
+50140 4555 2
+50146 4555 2
+50152 4555 2
+50158 4555 2
+50164 4555 2
+50170 4555 2
+50176 4555 2
+50182 4555 2
+50188 4555 2
+50194 4555 2
+50200 4555 2
+50206 4555 2
+50212 4555 2
+50218 4555 2
+50224 4555 2
+50230 4555 2
+
+//跨服喊话ID对照
+49647 4801 4
+50702 4802 6
+50704 4803 6
+50706 4804 6
+50708 4805 6
+50710 4806 6
+50712 4807 6
+50714 4808 6
+50716 4809 6
+50718 4810 6
+50720 4811 6
+50722 4812 6
+50724 4813 6
+50726 4814 6
+50728 4815 6
+50730 4816 6
+50732 4817 6
+
diff --git a/Assets/StreamingAssets/configs/item_msg_map.txt.meta b/Assets/StreamingAssets/configs/item_msg_map.txt.meta
new file mode 100644
index 0000000000..4fd53cb569
--- /dev/null
+++ b/Assets/StreamingAssets/configs/item_msg_map.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 76f11583e7abe3e4bbf976a45f946fe7
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/StreamingAssets/configs/skillstr.txt b/Assets/StreamingAssets/configs/skillstr.txt
new file mode 100644
index 0000000000..22f992185c
Binary files /dev/null and b/Assets/StreamingAssets/configs/skillstr.txt differ
diff --git a/Assets/StreamingAssets/configs/skillstr.txt.meta b/Assets/StreamingAssets/configs/skillstr.txt.meta
new file mode 100644
index 0000000000..3b97f7f5c8
--- /dev/null
+++ b/Assets/StreamingAssets/configs/skillstr.txt.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6ee4a110a33412e4aa3f879764bec33b
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: