大江湖-分析篇-配置表

分析篇-配置表

摘要

​ 假若美术让游戏婀娜多姿,代码则是四肢支撑游戏流畅运行,而配置表则孕育游戏的心智与灵魂。

它是一个简单的数据库,包含了角色、物品、剧情等游戏的规则。

游戏策划一般使用 excel​​​或自主开发的可视化配置工具编写配置表,导出为二进制/json​​​/csv​​​等格式放入代码中进行读取。

​​​

加载流程

工具类

每个配置表对应一个工具类,提供加载 Load​、查询等功能,如 gang_a01Table

  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
 36
 37
 38
 39
 40
 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
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
using System;
using System.Collections.Generic;
using UnityEngine;

public class gang_a01Table
{
    private List<Row> rowList = new List<Row>();
    private bool isLoaded;

    public Row Find_Default(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.Default == find;
        });

    public Row Find_Digest(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.Digest == find;
        });

    public Row Find_ID(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.ID == find;
        });

    public Row Find_Limit(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.Limit == find;
        });

    public Row Find_Name(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.Name == find;
        });

    public Row Find_NameScene(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.NameScene == find;
        });

    public Row Find_NameUI(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.NameUI == find;
        });

    public Row Find_Note(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.Note == find;
        });

    public Row Find_Type(string find) => 
        this.rowList.Find(delegate (Row x) {
            return x.Type == find;
        });

    public List<Row> FindAll_Default(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.Default == find;
        });

    public List<Row> FindAll_Digest(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.Digest == find;
        });

    public List<Row> FindAll_ID(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.ID == find;
        });

    public List<Row> FindAll_Limit(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.Limit == find;
        });

    public List<Row> FindAll_Name(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.Name == find;
        });

    public List<Row> FindAll_NameScene(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.NameScene == find;
        });

    public List<Row> FindAll_NameUI(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.NameUI == find;
        });

    public List<Row> FindAll_Note(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.Note == find;
        });

    public List<Row> FindAll_Type(string find) => 
        this.rowList.FindAll(delegate (Row x) {
            return x.Type == find;
        });

    public Row GetAt(int i)
    {
        if (this.rowList.Count <= i)
        {
            return null;
        }
        return this.rowList[i];
    }

    public List<Row> GetRowList() => 
        this.rowList;

    public bool IsLoaded() => 
        this.isLoaded;

    public void Load(TextAsset csv)
    {
        this.rowList.Clear();
        string[][] strArray = CsvParser2.Parse(csv.text);
        for (int i = 1; i < strArray.Length; i++)
        {
            Row item = new Row {
                ID = strArray[i][0],
                Digest = strArray[i][1],
                Name = strArray[i][2],
                NameUI = strArray[i][3],
                NameScene = strArray[i][4],
                Type = strArray[i][5],
                Default = strArray[i][6],
                Limit = strArray[i][7],
                Note = strArray[i][8]
            };
            this.rowList.Add(item);
        }
        this.isLoaded = true;
    }

    public int NumRows() => 
        this.rowList.Count;

    public class Row
    {
        public string ID;
        public string Digest;
        public string Name;
        public string NameUI;
        public string NameScene;
        public string Type;
        public string Default;
        public string Limit;
        public string Note;
    }
}

生成工具类

每个工具类都是类似的,完全可以自动生成

C2TDemo.cs​捆绑到 unity​的界面中,点击按钮执行 Generate​函数时调用 TableCodeGen.Generate

 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
using System;
using UnityEngine;
using UnityEngine.UI;

public class C2TDemo : MonoBehaviour
{
    public TextAsset csv;
    public InputField input;
    public Text output;

    public void Generate()
    {
        if (!string.IsNullOrEmpty(this.input.text))
        {
            string str = TableCodeGen.Generate(this.input.text, "SampleTable");
            this.output.text = str;
        }
    }

    public void Start()
    {
        this.input.text = "";
        this.output.text = "";
        if (this.csv != null)
        {
            this.input.text = this.csv.text;
        }
    }
}
  • Assets\Scripts\Assembly-CSharp\TableCodeGen.cs

替换模板字符串中的字符串

 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
using System;

public class TableCodeGen
{
    private const string codeTemplate = "// This code automatically generated by TableCodeGen\nusing UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\n\npublic class $CLASS\n{\n\tpublic class Row\n\t{\n$ROW_MEMBER_CODE\n\t}\n\n\tList<Row> rowList = new List<Row>();\n\tbool isLoaded = false;\n\n\tpublic bool IsLoaded()\n\t{\n\t\treturn isLoaded;\n\t}\n\n\tpublic List<Row> GetRowList()\n\t{\n\t\treturn rowList;\n\t}\n\n\tpublic void Load(TextAsset csv)\n\t{\n\t\trowList.Clear();\n\t\tstring[][] grid = CsvParser2.Parse(csv.text);\n\t\tfor(int i = 1 ; i < grid.Length ; i++)\n\t\t{\n\t\t\tRow row = new Row();\n$ROW_READ_CODE\n\t\t\trowList.Add(row);\n\t\t}\n\t\tisLoaded = true;\n\t}\n\n\tpublic int NumRows()\n\t{\n\t\treturn rowList.Count;\n\t}\n\n\tpublic Row GetAt(int i)\n\t{\n\t\tif(rowList.Count <= i)\n\t\t\treturn null;\n\t\treturn rowList[i];\n\t}\n\n$FIND_CODE\n}";
    private const string findCodeTemplate = "\tpublic Row Find_$COLUMN(string find)\n\t{\n\t\treturn rowList.Find(x => x.$COLUMN == find);\n\t}\n\tpublic List<Row> FindAll_$COLUMN(string find)\n\t{\n\t\treturn rowList.FindAll(x => x.$COLUMN == find);\n\t}\n";

    public static string Generate(string csvText, string className)
    {
        if (string.IsNullOrEmpty(csvText))
        {
            return null;
        }
        string[][] strArray = CsvParser2.Parse(csvText);
        if (strArray.Length < 1)
        {
            return null;
        }
        string newValue = "";
        string str2 = "";
        string str3 = "";
        for (int i = 0; i < strArray[0].Length; i++)
        {
            newValue = newValue + $"		public string {strArray[0][i]};";
            str2 = str2 + $"			row.{strArray[0][i]} = grid[i][{((int) i)}];";
            str3 = str3 + "\tpublic Row Find_$COLUMN(string find)\n\t{\n\t\treturn rowList.Find(x => x.$COLUMN == find);\n\t}\n\tpublic List<Row> FindAll_$COLUMN(string find)\n\t{\n\t\treturn rowList.FindAll(x => x.$COLUMN == find);\n\t}\n".Replace("$COLUMN", strArray[0][i]);
        }
        return "// This code automatically generated by TableCodeGen\nusing UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\n\npublic class $CLASS\n{\n\tpublic class Row\n\t{\n$ROW_MEMBER_CODE\n\t}\n\n\tList<Row> rowList = new List<Row>();\n\tbool isLoaded = false;\n\n\tpublic bool IsLoaded()\n\t{\n\t\treturn isLoaded;\n\t}\n\n\tpublic List<Row> GetRowList()\n\t{\n\t\treturn rowList;\n\t}\n\n\tpublic void Load(TextAsset csv)\n\t{\n\t\trowList.Clear();\n\t\tstring[][] grid = CsvParser2.Parse(csv.text);\n\t\tfor(int i = 1 ; i < grid.Length ; i++)\n\t\t{\n\t\t\tRow row = new Row();\n$ROW_READ_CODE\n\t\t\trowList.Add(row);\n\t\t}\n\t\tisLoaded = true;\n\t}\n\n\tpublic int NumRows()\n\t{\n\t\treturn rowList.Count;\n\t}\n\n\tpublic Row GetAt(int i)\n\t{\n\t\tif(rowList.Count <= i)\n\t\t\treturn null;\n\t\treturn rowList[i];\n\t}\n\n$FIND_CODE\n}".Replace("$CLASS", className).Replace("$ROW_MEMBER_CODE", newValue).Replace("$ROW_READ_CODE", str2).Replace("$FIND_CODE", str3);
    }
}

配置表初始化

配置表数据存放在 Assets\Resources\datas\gang_xxx.bytes​中

Assets\Resources\datas\gang_a01.bytes

ID,Digest,Name,NameUI,NameScene,Type,Default,Limit,Note
1001,基础属性,LV,等级,等级,1,1,30,角色的等级
1002,基础属性,HPlimit,气血上限,气血上限,1,0,0,角色的气血上限

Assets\Scripts\Assembly-CSharp\SharedData.cs​的 Init​函数中初始化配置表

 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
36
37
38
39
private void Init()
{
    this.a01 = new gang_a01Table();
    this.a01.Load(Resources.Load<TextAsset>("Datas/gang_a01"));
    this.a02 = new gang_a02Table();
    this.a02.Load(Resources.Load<TextAsset>("Datas/gang_a02"));
    this.a05 = new gang_a05Table();
    this.a05.Load(Resources.Load<TextAsset>("Datas/gang_a05"));
    this.b01 = new gang_b01Table();
    this.b01.Load(Resources.Load<TextAsset>("Datas/gang_b01"));
    this.b02 = new gang_b02Table();
    this.b02.Load(Resources.Load<TextAsset>("Datas/gang_b02"));
    this.b03 = new gang_b03Table();
    this.b03.Load(Resources.Load<TextAsset>("Datas/gang_b03"));
    this.b04 = new gang_b04Table();
    this.b04.Load(Resources.Load<TextAsset>("Datas/gang_b04"));
    this.b06 = new gang_b06Table();
    this.b06.Load(Resources.Load<TextAsset>("Datas/gang_b06"));
    this.b07 = new gang_b07Table();
    this.b07.Load(Resources.Load<TextAsset>("Datas/gang_b07"));
    this.b08 = new gang_b08Table();
    this.b08.Load(Resources.Load<TextAsset>("Datas/gang_b08"));
    this.b09 = new gang_b09Table();
    this.b09.Load(Resources.Load<TextAsset>("Datas/gang_b09"));
    this.c01 = new gang_c01Table();
    this.c01.Load(Resources.Load<TextAsset>("Datas/gang_c01"));
    this.c02 = new gang_c02Table();
    this.c02.Load(Resources.Load<TextAsset>("Datas/gang_c02"));
    this.c03 = new gang_c03Table();
    this.c03.Load(Resources.Load<TextAsset>("Datas/gang_c03"));
    this.e01 = new gang_e01Table();
    this.e01.Load(Resources.Load<TextAsset>("Datas/gang_e01"));
    this.e02 = new gang_e02Table();
    this.e02.Load(Resources.Load<TextAsset>("Datas/gang_e02"));
    this.e03 = new gang_e03Table();
    this.e03.Load(Resources.Load<TextAsset>("Datas/gang_e03"));
    this.e04 = new gang_e04Table();
    this.e04.Load(Resources.Load<TextAsset>("Datas/gang_e04"));
}

配置表

以下是游戏中使用的配置表

角色属性表

角色的属性表包含了角色基础/天赋/战斗/养成等各方面的所有属性类型

IDDigestNameNameUINameSceneTypeDefaultLimitNote
备注属性类别属性代号属性名称属性名称类型:0-仅展示1-普通2-百分比默认值最大值描述
1001基础属性LV等级等级1130角色的等级
1002基础属性HPlimit气血上限气血上限100角色的气血上限
2001天赋属性STR臂力臂力1025角色的臂力值,修炼刀法、棍法需要一定的臂力值,部分武器防具需要达到一定的臂力值才可以装备
2002天赋属性AGI身法身法1025角色的身法值,修炼剑法、刀法、拳掌需要一定的身法值,部分武器防具需要达到一定的身法值才可以装备
3001技能属性Sword剑法剑法10200角色的剑法造诣,剑法值每提升 20 点,角色便可以学习更高一阶的剑法武学
3002技能属性Knife刀法刀法10200角色的刀法造诣,刀法值每提升 20 点,角色便可以学习更高一阶的刀法武学
4001触发属性Crit暴击暴击201角色的暴击率
4002触发属性Crit1暴伤暴伤205角色因为暴击造成的伤害值,默认的暴击伤害值是 150%
5001气血浮动属性HPHealing气血恢复力气血恢复力201——
5002气血浮动属性MPHealing内力恢复力内力恢复力201——
5004气血浮动属性HPturn自动回血自动回血201角色每回合自动回复气血的值
6001流派伤害属性BuddhismATK佛家武学伤害佛家武学伤害100——
6002流派伤害属性TaoismattATK道家武学伤害道家武学伤害100——
6003流派伤害属性ConfucianistATK儒家武学伤害儒家武学伤害100——
7001技能伤害属性SwordATK剑法伤害剑法伤害100角色剑法类武学的武功招式伤害
7002技能伤害属性KnifeATK刀法伤害刀法伤害100角色刀法类武学的武功招式伤害
8002控制属性Hurt内伤内伤10255角色的内伤值,内伤值越高,角色的最大内力值越低,角色的攻击及防御会因内伤大幅下降
8004控制属性Poison中毒中毒10255角色的中毒值,中毒时每回合损血,当角色中毒值累积到一定程度会进入深毒阶段。中毒后移动、攻击会损血,待机不损血
8012控制属性Mad走火入魔走火入魔10255角色的走火入魔值,当角色走火入魔时不受控制,敌我不分,走火入魔会随着回合增加而减少
9001免疫属性Hurtresist免疫内伤免疫内伤101角色不会被敌人打成内伤
9002免疫属性Poisonresist免疫中毒免疫中毒101角色百毒不侵
9003免疫属性Bleedresist免疫流血免疫流血101角色不会流血
11002DEBUFF 属性ATKdown伤害下降伤害下降10100角色对敌人造成的整体攻击力下降
11004DEBUFF 属性DEFdown承受伤害承受伤害10100角色承受敌人的整体伤害上升
11006DEBUFF 属性SPdown轻功下降值轻功下降值10255角色的轻功降低
12001身份属性Star星级星级1010——
12002身份属性Sex性别性别102——
12003身份属性Name姓名姓名000——
12004身份属性Age年龄年龄000——
12005身份属性Birthday出生日期出生日期000——
12006身份属性Guild门派门派000——
13001养成属性Life寿命寿命100——
13002养成属性Freeweight负重负重100——
14001移动属性Movement移动力移动力100——
14002移动属性Freewalk无视阻挡无视阻挡101——
14003移动属性Skywalk高空移动高空移动101——
14004移动属性Waterwalk水面行走水面行走101——

身世表

身世表包含以下属性

  • KongFu​字段关联功夫表
  • Features​字段关联江湖特性表
  • HP/MP​等 ID​对应属性表的属性代号
ID备注1001
Scenario描述落魄的小乞丐
Note背景你是一个流落江湖的小乞丐,整日在江湖上游手好闲,艰难度日。你不知道父母是谁,甚至不知道自己是汉人还是金人,就这样浑浑噩噩度过了一十八年,你希望遇到些江湖奇遇逆天改命……
Name姓名狗剩儿
Nickname称号破庙大侠
Guild门派
Duty身份落魄的小乞丐
Birthplace出生地襄阳府
Birthdate出生日期南宋绍兴三年(公元 1133 年)
Age年龄18
Lifecode八字属相癸丑腊月初三子时,牛
Position家国立场中立
Round未知1
Story无用0
Money金钱0
Kongfu功夫 id10001
GoodAt擅长优势:轻功,盗术,劣势:臂力
Features江湖特性1001
LV等级1
HP最低血量120
HP1最高血量180
MP内力120
MP1内力180
ATK攻击力20
ATK1攻击力30
DEF防御力20
DEF1防御力30
SP轻功45
SP1轻功60
STR臂力2
STR1臂力6
AGI身法4
AGI1身法12
BON根骨6
BON1根骨12
WIL定力6
WIL1定力12
LER悟性4
LER1悟性12
MOR道德1
MOR1道德12
Sword剑法20
Sword1剑法30
Knife刀法10
Knife1刀法30
Stick棍法10
Stick1棍法30
Hand拳掌20
Hand1拳掌30
Finger指法10
Finger1指法30
Special特殊武学10
Special1特殊武学30
YinYang奇门之术10
YinYang1奇门之术30
Melody音律10
Melody1音律30
Medical医术10
Medical1医术30
Darts暗器10
Darts1暗器30
Wineart酒艺10
Wineart1酒艺30
Steal盗术20
Steal1盗术40

等级表

该表存储了角色每次升级所需的经验和增加的属性值

LV备注12
EXP所需经验值100200
HP气血2020
MP内力2020
ATK攻击力11
DEF防御力11
SP轻功11
STR臂力00
AGI身法00
BON根骨00
WIL定力00
LER悟性00
MOR道德00
Sword剑法0.10.1
Knife刀法0.10.1
Stick棍法0.10.1
Hand拳掌0.10.1
Finger指法0.10.1
Special特殊武学0.10.1
YinYang奇门之术0.10.1
Melody音律0.10.1
Medical医术0.10.1
Darts暗器0.10.1
Wineart酒艺0.10.1
Steal盗术0.10.1

NPC 表

该表存放了所有游戏中出现的 NPC 角色的基本信息、属性等信息

  • Prefab​对应 Unity​资源的 prefab​名称
  • Sound​对应游戏中的声音文件
  • BattleIcon​对应游戏中的图标
  • KongFuX​字段关联功夫表
  • Features​字段关联江湖特性表
  • HP/MP 等 ID 对应属性表的属性代号
ID备注101102
Name姓名苍髯客黑衣老人
Sex性别11
PrefabprefabCangRanKeXuZhu
Sound声音ManMan
BattleIcon图标role-cangrankerole-xuzhu
Age年龄9182
Nickname称号
Guild门派
Duty身份镜湖三闲镜湖三闲之一
Birthplace籍贯紫云洞
Birthdate生日北宋熙宁二年(公元 1069 年)
Lifecode八字属相己酉腊月廿九丑时,蛇
Position家国立场
LV等级3030
HP气血5500800
MP内力57503550
ATK攻击力320180
DEF防御力280200
SP轻功85120
STR臂力199
AGI身法1712
BON根骨1312
WIL定力2423
LER悟性1713
MOR道德2220
Sword剑法80121
Knife刀法12066
Stick棍法200166
Hand拳掌200200
Finger指法120168
Special特殊武学80157
YinYang奇门之术2236
Melody音律1312
Medical医术4585
Darts暗器2576
Wineart酒艺12060
Steal盗术2022
kongfu1功夫 104017
KFLV1功夫 1 等级013
kongfu2功夫 204019
KFLV2功夫 2 等级012
kongfu3功夫 306007
KFLV3功夫 3 等级012
kongfu4功夫 409018
KFLV4功夫 4 等级09
kongfu5功夫 509009
KFLV5功夫 5 等级09
Like喜好00
Hate厌恶00
Favorite最喜欢00
Relationship关系00
AiTypeai 类型00
DropGroup00
Traits江湖特性01027

装备表

包含了装备的类型/属性需求,装备后添加的属性和技能

  • 属性需求通过 Limit1/Logic/Limitvalue​三个字段组合成表达式
ID备注210121022103
Name名称沉重的古剑桃木剑吴越长剑
Style1-武器2-防具3-饰品111
Limit1属性需求SwordSwordSword
Logic条件1-小于2-大于111
Limitvalue属性值202040
add1属性 1SwordATKSwordATKSwordATK
Attribute1属性 1 值5510
add2属性 2ATKSPATK
Attribute2属性 2 值10510
add3属性 3SP0SP
Attribute3属性 3 值-505
add4属性 4000
Attribute4属性值000
Skills1技能 1MPturn00
Skillsvalue1技能值0.100
Odds1几率100

武功表

包含了所有武功的类型/等级/战斗/升级等信息

ID备注10011002
Name名称趟尸剑法青城剑法
Star星级12
Icon类别图标Sword-0924Sword-0924
BookIcon物品图标kongfu-sword-01kongfu-sword-02
Origin类型1-佛家武学2-道家武学3-儒家武学4-邪门武学5-江湖杂学32
LV最大等级912
Style动画/音效 id101101
Damage伤害1526
Damageadd升级增加伤害56
Expend消耗内力1020
Expendadd升级增加消耗内力22
EXP所需经验100200
EXPadd升级增加所需经验100200
Attckstyle攻击范围图标A01
Area选择区域11
Range攻击区域34
Effect技能效果Sword01Sword06
Site11
Crit暴击率0.050.05
Critadd每级增加00
Crit1暴击伤害1.51.5
Crit1add每级增加00
Combo连击率00
Comboadd每级增加00
Fend击退率00
Fendadd每级增加00
Fend1击退格数00
Fend1add每级增加00
Skill1ATK&301&10&3
Skill2技能 200
Skill3技能 300
Skill4技能 400
Skill5技能 500
Limit1修炼条件 1属性条件
Limit2修炼条件 20LER
Limit3修炼条件 300
Paraplus1增加属性 1HP5
Paraplus2增加属性 2ATK1
Paraplus3增加属性 3Sword1
Paraplus4增加属性 40Sword

战斗 NPC

定义了战斗时参战的 NPC 属性

GID备注1000110001
NoteNPC 名称开局破庙演示战-黄袍 V 黑衣开局破庙演示战-黄袍 V 黑衣
IDIDPlayer2Enemy2
Side阵营1-我方2-敌方10
Sex性别11
PrefabprefabHuangShangXuZhu
Sound声音ManMan
BattleIcon图标role-huangshangrole-xuzhu
Name名称黄袍怪客黑衣老人
Age年龄10782
Guild门派
Duty身份活死人墓主镜湖三闲
Movement未用00
AiType未使用00
EXP经验00
Lvlimit未使用00
LV等级3030
HP气血650800
MP内力32503550
ATK攻击力355235
DEF防御力100150
SP轻功9085
STR臂力99
AGI身法1612
BON根骨1712
WIL定力1923
LER悟性2413
MOR道德420
Sword剑法165121
Knife刀法3266
Stick棍法22166
Hand拳掌190200
Finger指法192168
Special特殊武学200157
YinYang奇门之术10636
Melody音律2212
Making医术5585
Darts暗器3276
Wineart酒艺1160
Steal盗术1022
kongfu1功夫 150074017
KFLV1功夫 1 等级913
kongfu2功夫 240234019
KFLV2功夫 2 等级1312
kongfu3功夫 3100106007
KFLV3功夫 3 等级918
kongfu4功夫 4100149018
KFLV4功夫 4 等级129
kongfu5功夫 590219009
KFLV5功夫 5 等级99

江湖特性

开局创建角色时可以随机 roll 到的江湖特性,与属性表进行关联

id备注10011002
name名称体壮如牛精气满溢
good1-增益11
probability未使用0.050.05
add1增加属性 1HPplusMPplus
attribute1属性值0.050.05
add2增加属性 2DEFplusATKplus
attribute2属性值0.05-0.05
add3增加属性 3SPplus0
attribute3属性值-0.050
add4增加属性 400
attribute4属性值00
eventid未使用00
note描述气血 +5%,防御 +5%,轻功-5%内力 +5%,攻击-5%
comment详情皮糙肉厚四肢强健,但会显得有些笨拙精气充盈罩护周身,但比常人更容易疲累

物品表

定义了所有物品的属性

  • 武功类物品通过 Relateid​关联武功表
  • 其中药品类使用后可以修改属性
ID备注999100130013002
Name名称银两趟尸剑法金疮药小还丹
BookIcon图标Moneykongfu-sword-01herbs-jinchuangherbs-xiaohuan
Style未使用999101301301
Star星级1111
Value价格11000200400
Use10001110000000110000000
Relateid关联 id0100100
Skills1属性 100HPMP
Skills1value00240240
Skills2属性 200BleedHurt
Skills2value00-100-100
Skills3属性 30000
Skills3value0000
Skills4属性 40000
Skills4value0000
note描述穷家富路,行走江湖遇到阻碍时,也可以考虑用银两疏通疏通黄袍怪客遗落的武功秘籍,前言不搭后语,武功套路狗屁不通气血 +240,流血-100,凡刀斧损伤,跌仆打碎,敷上即时止痛、止血,更不作脓内力 +240,内伤-100,耗损真气后服此药,丹田热气升起,精力弥漫,可助功力的恢复

商店物品表

定义了每个商店出售的物品种类、个数、价格信息

  • 商店 ID 关联商店 NPC 名称表
  • 物品 ID 关联物品表
ID备注100001100002100003
ShopID商店 ID100110011001
GoodID物品 ID720972107301
Pack个数111
Price价格5050100

商店 NPC 名称表

仅记录了商店 NPC​的 ID​和名称

IDName
备注名称
1001襄阳杂货铺-蔡大头
1002襄阳铁匠铺-庞武
1003襄阳药铺-黄氏
1004酒家习老汉
1005江夏小童的江湖黑店
1006江夏老乞丐的私藏秘籍
1007江夏小童的杂货店
1008江湖商人
9001不氪熬腐中古店

事件物品表

事件触发关联的物品信息

IDItemQTYChance
备注物品 ID数量范围概率
100101301411
100102301411
100103301811
100104301811
10010599950100
100106999525
100107999525
100108999525
100109210111
102101230711

物品好感度表

角色对物品的好感度配置表

roleiditemidpoint
角色 id物品好感度
50130065
50130075
50130085
50130095
50130105
50130115

悬赏表

IDWantedWantedNPCWantedItemWantedBonus
悬赏物品描述物品金钱
100110022把江洋大盗白无常的人头交给襄阳城李捕头可得赏金9002500

坟墓表

idpresceneposhorimono
所属场景位置描述
100001Map_XiangYang1616

地图名称表

idname_chn
地图 id名称
Base_YingDi营地
Map_XiangYang襄阳地区
Field_HeiFengZhai_01黑风寨 壹
Field_HeiFengZhai_02黑风寨 贰
Field_HeiFengZhai_03黑风寨 叁
Field_HeiFengZhai_04黑风寨 肆
Field_JiangLing江陵渡口
Field_JiangXiaDu江夏渡口
Field_JiangXiaDu_1F江夏渡口 酒家 一层
Field_JiangXiaDu_2F江夏渡口 酒家 二层
Field_JianZhong剑冢
Field_JianZhong_ShiNei剑冢 室内
Field_JianZhongYouGu剑冢幽谷
Field_JianZhongYouGu_XiaoWu剑冢幽谷 小屋
Field_JinZhangDaYing金军营地
Field_SanDouPing_01三斗坪水道 壹
Field_SanDouPing_02三斗坪水道 贰
Field_SanDouPing_03三斗坪水道 叁
Field_SanDouPing_04三斗坪水道 肆
Field_SanDouPing_05三斗坪水道 伍
Field_SanDouPing_06三斗坪水道 陆
Field_SanDouPing_07三斗坪水道 柒
Field_SanDouPing_08三斗坪水道 捌
Field_XiangYang襄阳城
Field_YangTaiFuMiao羊太傅庙
Field_YangTaiFuMiao_Day羊太傅庙
Field_YangTaiFuMiao_ShiNei羊太傅庙 庙内

事件表

事件表是游戏的核心,所有角色与游戏世界的交互都由此表定义。

所有事件对应的起始 eventid​都会定义在地图上,当角色触碰到该实体时,触发对应的事件。

eventidIDSTAGE_00_0STAGE_00_1
flag存档记录 flagSTAGE_00_0STAGE_00_1
trigger触发方式AUTO-自动FOOTON-经过CLICK-点击FOLLOW-跟随AUTOFOOTON
display展示 prefabPrefabs/Field/Dummy
direction方向FREE
action动作TELEPORT-传送点MOVE-移动CHAT-对话GET-获取物品VOICEOVER-对话结束CAMCTRL-摄像头移动PLAYSE-播放音效CHECK-检查条件DESTROY-销毁JOIN-加入队伍TOMB-坟墓PLAYBGM-播放背景音乐EVENT-开启关闭事件BATTLE-战斗SELECT-选择对话框INFO-消息SHOP-商店WANTED-悬赏REST-住宿PLAYCG-播放动画SAVEDATA-存档PLAYANI-播放人物动作CHANGETEAM-选择队伍FOLLOW-跟随UNFOLLOW-不再跟随THROUGH-穿过TELEPORT
elseaction未启用
throughaction未启用
nextflag下次事件STAGE_00_1STAGE_00_2
outputend-结束事件
elsefollow未使用
menu弹出菜单00
online是否启用11

对话表

存放游戏的剧情信息,事件表的 action​值为 CHAT​时关联到此表,chating​的内容还支持以下特性

  • 使用 <color>​标签配置文字颜色
  • 使用 [teammates]​指代队友名字
  • 使用 [player]​表示主角名字
chatidsideeventidchating
对话 ID0-系统player-主角其他-名字所属事件 id对话内容
INTERMISSION_0000100缥缈峰上虚名隐
VOICEOVER_A-00100你在江湖上漂泊已有些时日,自觉也该做点什么
S_01_CHAT_1player0天色不早了,就去前面破庙休息一下吧
S_01_CHAT_2player0惬意小火让人陷入沉思……是否记录一下现有经历?
S_01_CHAT_2_SELECT_100记录
S_01_CHAT_2_SELECT_200离开
S_01_CHAT_3player0月色下井底好像有什么东西闪闪发光
S_01_CHAT_3player0井不是很深,要不要施展轻功下去看看?
S_01_CHAT_5player0听说 <color=f0e352>​「襄阳」</color>​城南酒家铺子的 <color=f0e352>​「羊肉馒头」</color>​很正宗,正好去早集买两个尝尝!

0%