传世私服架设新手必看入门篇,基础知识
--------------------------------------------------------------------------------
第一章 基础篇
历史:
今后,模拟器还将继续完善下去,为了实现最终的世界的梦想。
功能:
目前的淡抹夕阳模拟器的功能主要有以下几个大类
1- 帐号注册/登陆/修改密码
2- 角色创建/删除/恢复
3- 打怪升级以及属性变化
4- 主要武器装备饰品外观和数值效果
5- NPC以及脚本系统。
6- 部分职业的技能效果支持
7- 简单聊天(说来比较惭愧,这么简单的系统一直没有完善)
模拟器的一些指标如下
1- 后台使用SQL Server2000作为数据库
2- 使用分布式的逻辑架构
3- 使用IOCP(完成端口)来处理大量的并发连接和庞大的数据流I/O。
4- 各种单个逻辑模块使用统一的界面风格和操作方式。
5- 对于数据,采用容易编辑的txt作为数据源
架设:
1- 部署:
a) 数据库部署
首先- 安装SQL Server2000 或者更高。并确保SQL server的服务是运行状态
。而且要打开SQL Server2000的网络服务端口。
然后- 用查询分析器的文件菜单中的打开菜单项来打开模拟器压缩包中带的4个数
据库表,依次执行,将会生成一个叫做MirWorldDB的数据库和4张表。分别是TBL_ACCOUNT/
TBL_CHARACTER_INFO/ TBL_CHARACTER_ITEM/ TBL_CHARACTER_MAGIC。
最后- 数据库就部署完毕~
b) 模拟的各个模块的部署
首先- 确定部署策略,loginserver/selectcharserver/gameserver 三个
需要接受客户端的连接,所以,不能架设在内网。其他的模块可以放在内网。(如果有的话)
然后- 将每个模块的exe拷贝到相应的机器,可以放在一个文件夹(配置文件可以
共享),也可以放在不同的文件夹(独立的配置文件)。
最后- 启动各个模块。这里,透露一个小秘密,在每个模块启动时加参数,可以
自动启动该模块,不需要再去按开始按钮。方法是 为每个模块创建一个快捷方式,打开快捷方
式的属性对话框,然后会看到一个写着“目标”的编辑框,如果路径不含有空格,编辑框内的
文字没有引号,如果有空格,则框内文字有引号。这个不需要管,只要在这些文字的后面空一
个格,写上“start”5个字母就可以了。试试看用这些快捷方式启动,是不是自动就启
动好了。 还有一个方法: 建立一个名为startserver.cmd的文件,用记事本写入命令 “start
模块exe的名字 start”,(注意,引号不要写进去),保存后,双击这个cmd文件就可以自动
启动这个模块了。
2- 配置:
a)整体部署配置(config.ini)
观察一下config.ini里面的内容,会发现开头有两句配置:
scaddr = 127.0.0.1
scport = 6000
这两句的意思是告诉模块,服务器中心的地址和端口,用来注册自己到中
心。这里要注意的是,无论是多个模块放在一起共享配置文件,还是分开,独立的配置文件,
开头的这两行配置一定要有。否则会工作不正常。
接下来,会看到几个段(就是以[...]开头的一组配置)。这些段的段名是固定的,
不能随便修改,否则就会不正常了。每个段有6个相同的配置项。我们以登陆段为例
[登陆]
addr =222.65.7.114
port = 7000
type = loginserver
id = 1
group = 1
name = 登陆1
其中addr 描述的是模块的地址,一定要设置成部署位置的ip地址,如果要
公开,就写成外网地址,如果不要公开的就写成内网地址。port描述的是登陆的端口。
type描述了该配置的模块的类型,登陆的类型一定要设置成loginserver。id 描述的是
该服务器在自己组内的id,如果组内的该类型的大于一台,id就不能重复。group描述的
是组的代号,一般设置成1,有多组存在时,设置成组的代号,该代号只能为数字。name
描述了该的名字,这个对于gameserver和selectcharserver很重要,设置不对会找不到
的。
b)dbServer的配置
config.ini里面的数据库的段里面多了几个配置选项。
server = (local)
database = MirWorldDB
account = sa
password = dragon
server描述的是SQL Server所在的位置,如果在本机就是(local),如果在其他机器
,一般是该机器的机器名。 database描述的是表所在的数据库,如果是用原版的sql脚本导入
的,这里一般是 MirWorldDB。 account 是描述这个数据库的登陆帐号,可以不用sa这个账号
,但是必须有查询写入的权限。password 描述的是数据库登陆账号的密码。
c)GameServer的配置
GameServer的配置较多,除了config.ini里面的基本配置外,还需要一个叫做data
的文件夹来存放各种数据。其中有个叫作server.txt里面就是gameserver的基本逻辑配置
。一般内容如下:
[humandata]
warrior = .\data\humandata\战士.csv
magician = .\data\humandata\法师.csv
taoshi = .\data\humandata\道士.csv
;这里描述的是角色每个等级的数据的相对于exe的路径。这三个文件必须为.csv文件,你可以
用excel来编辑这三个文件,修改各个等级的属性数据。
[firstlogin]
script = firstlogin
startlevel = 22
startgold = 0
startitem = 金创药(小量)*2/赤明天帝/金鹏宝甲(男)*2
;这里描述的是,角色第一次登陆的一些配置,startlevel描述的是起始的等级,startgold描
述的是开始时候背包内的系统给予的金钱的数量。startitem描述的是开始的时候系统给予的物
品,不同的物品用/来分隔,每个物品名字必须与baseitem.txt里描述的物品名字一致。而且可
以在名字后面用 *和数字来描述物品的数量。
[setting]
downitemupdatetime = 300
;这里描述的是掉在地上的物品更新的时间,以秒为单位。
[var]
itemupdatetime = 300
;这里描述的是掉在地上的物品更新的时间,以秒为单位。目前使用上面一个,这个未使用。
maxgold = 8000000
;这里描述的是角色最大可以持有的金钱数量。
[name]
goldname = 金币
;这里描述的是金币的名字,必须和MonItems里面的金币名字一致。否则怪物不掉钱
malename = 男
femalename = 女
;这里描述的是性别的名字,这个是应英国朋友的要求,修改来适应英文版的需要。
;这个跟@makeitem 命令造衣服有关,主要是没有指定男女的衣服名字后面加上一个(男)之类的标记来区别相同的名字。
新手必看之入门篇-基础篇
--------------------------------------------------------------------------------
架设:
1- 部署:
a) 数据库部署
首先- 安装SQL Server2000 或者更高。并确保SQL server的服务是运行状态
。而且要打开SQL Server2000的网络服务端口。
然后- 用查询分析器的文件菜单中的打开菜单项来打开模拟器压缩包中带的4个数
据库表,依次执行,将会生成一个叫做MirWorldDB的数据库和4张表。分别是TBL_ACCOUNT/
TBL_CHARACTER_INFO/ TBL_CHARACTER_ITEM/ TBL_CHARACTER_MAGIC。
最后- 数据库就部署完毕~
b) 模拟的各个模块的部署
首先- 确定部署策略,loginserver/selectcharserver/gameserver 三个
需要接受客户端的连接,所以,不能架设在内网。其他的模块可以放在内网。(如果有的话)
然后- 将每个模块的exe拷贝到相应的机器,可以放在一个文件夹(配置文件可以
共享),也可以放在不同的文件夹(独立的配置文件)。
最后- 启动各个模块。这里,透露一个小秘密,在每个模块启动时加参数,可以
自动启动该模块,不需要再去按开始按钮。方法是 为每个模块创建一个快捷方式,打开快捷方
式的属性对话框,然后会看到一个写着“目标”的编辑框,如果路径不含有空格,编辑框内的
文字没有引号,如果有空格,则框内文字有引号。这个不需要管,只要在这些文字的后面空一
个格,写上“start”5个字母就可以了。试试看用这些快捷方式启动,是不是自动就启
动好了。 还有一个方法: 建立一个名为startserver.cmd的文件,用记事本写入命令 “start
模块exe的名字 start”,(注意,引号不要写进去),保存后,双击这个cmd文件就可以自动
启动这个模块了。
2- 配置:
a)整体部署配置(config.ini)
观察一下config.ini里面的内容,会发现开头有两句配置:
scaddr = 127.0.0.1
scport = 6000
这两句的意思是告诉模块,服务器中心的地址和端口,用来注册自己到中
心。这里要注意的是,无论是多个模块放在一起共享配置文件,还是分开,独立的配置文件,
开头的这两行配置一定要有。否则会工作不正常。
接下来,会看到几个段(就是以[...]开头的一组配置)。这些段的段名是固定的,
不能随便修改,否则就会不正常了。每个段有6个相同的配置项。我们以登陆段为例
[登陆]
addr =222.65.7.114
port = 7000
type = loginserver
id = 1
group = 1
name = 登陆1
其中addr 描述的是模块的地址,一定要设置成部署位置的ip地址,如果要
公开,就写成外网地址,如果不要公开的就写成内网地址。port描述的是登陆的端口。
type描述了该配置的模块的类型,登陆的类型一定要设置成loginserver。id 描述的是
该服务器在自己组内的id,如果组内的该类型的大于一台,id就不能重复。group描述的
是组的代号,一般设置成1,有多组存在时,设置成组的代号,该代号只能为数字。name
描述了该的名字,这个对于gameserver和selectcharserver很重要,设置不对会找不到
的。
b)dbServer的配置
config.ini里面的数据库的段里面多了几个配置选项。
server = (local)
database = MirWorldDB
account = sa
password = dragon
server描述的是SQL Server所在的位置,如果在本机就是(local),如果在其他机器
,一般是该机器的机器名。 database描述的是表所在的数据库,如果是用原版的sql脚本导入
的,这里一般是 MirWorldDB。 account 是描述这个数据库的登陆帐号,可以不用sa这个账号
,但是必须有查询写入的权限。password 描述的是数据库登陆账号的密码。
c)GameServer的配置
GameServer的配置较多,除了config.ini里面的基本配置外,还需要一个叫做data
的文件夹来存放各种数据。其中有个叫作server.txt里面就是gameserver的基本逻辑配置
。一般内容如下:
[humandata]
warrior = .\data\humandata\战士.csv
magician = .\data\humandata\法师.csv
taoshi = .\data\humandata\道士.csv
;这里描述的是角色每个等级的数据的相对于exe的路径。这三个文件必须为.csv文件,你可以
用excel来编辑这三个文件,修改各个等级的属性数据。
[firstlogin]
script = firstlogin
startlevel = 22
startgold = 0
startitem = 金创药(小量)*2/赤明天帝/金鹏宝甲(男)*2
;这里描述的是,角色第一次登陆的一些配置,startlevel描述的是起始的等级,startgold描
述的是开始时候背包内的系统给予的金钱的数量。startitem描述的是开始的时候系统给予的物
品,不同的物品用/来分隔,每个物品名字必须与baseitem.txt里描述的物品名字一致。而且可
以在名字后面用 *和数字来描述物品的数量。
[setting]
downitemupdatetime = 300
;这里描述的是掉在地上的物品更新的时间,以秒为单位。
[var]
itemupdatetime = 300
;这里描述的是掉在地上的物品更新的时间,以秒为单位。目前使用上面一个,这个未使用。
maxgold = 8000000
;这里描述的是角色最大可以持有的金钱数量。
[name]
goldname = 金币
;这里描述的是金币的名字,必须和MonItems里面的金币名字一致。否则怪物不掉钱
malename = 男
femalename = 女
;这里描述的是性别的名字,这个是应英国朋友的要求,修改来适应英文版的需要。
;这个跟@makeitem 命令造衣服有关,主要是没有指定男女的衣服名字后面加上一个(男)之类的标记来区别相同的名字。
最新模拟器中怪物的形象代码
首先先在data文件夹中新建名为basemonster的文本文档,然后输入以下信息,保存后再新建一个名为MonGen的文本文档,把你要刷的怪物的名称和坐标,以及刷新时间输入即可.
以下为2个文本文档的信息.
basemonster.txt文档中的内容
#name/title/view/hp/dc/ac/mac/gainexp/delay/autoattack
#then the name of the monster u saw, is title
猪/猪/0xb4/100/0-1/0-0/0-0/20/2000/0
通天教主/通天教主/0xc6/1000/10-10/1-1/1-1/20/2000/0
棍犬/棍犬/0x1d/100/0-5/1-1/1-1/20/2000/0
刀犬/刀犬/0x1c/100/0-5/1-1/1-1/20/2000/0
兔子/兔子/0xb5/100/0-0/1-1/1-1/20/2000/0
牛/牛/0x83/100/0-2/1-1/1-1/20/2000/0
教主座骑/教主座骑/0xc7/1000/0-2/1-1/1-1/20/2000/0
滚刀手/滚刀手/0x48/200/0-5/1-1/1-1/20/2000/0
炎魔/炎魔/0xce/200/0-5/1-1/1-1/20/2000/0
炎魔/炎魔/0xdb/200/0-5/1-1/1-1/20/2000/0
逆魔侍卫/逆魔侍卫/0x80/200/0-5/1-1/1-1/20/2000/0
机关巨兽/机关巨兽/0x4d/200/0-5/1-1/1-1/20/2000/0
刺魔/刺魔/0xb0/200/0-5/1-1/1-1/20/2000/0
禁地魔王/禁地魔王/0xc0/200/0-5/1-1/1-1/20/2000/0
幽魂/幽魂/0xe0/200/0-5/1-1/1-1/20/2000/0
僵尸/僵尸/0x32/200/0-5/1-1/1-1/20/2000/0
僵尸2/僵尸2/0x33/200/0-5/1-1/1-1/20/2000/0
尸王/尸王/0x35/200/0-5/1-1/1-1/20/2000/0
僵尸4/僵尸4/0x36/200/0-5/1-1/1-1/20/2000/0
僵尸5/僵尸5/0x37/200/0-5/1-1/1-1/20/2000/0
尸霸/尸霸/0x45/200/0-5/1-1/1-1/20/2000/0
铜人/铜人/0x47/200/0-5/1-1/1-1/20/2000/0
石人/石人/x49/200/0-5/1-1/1-1/20/2000/0
逆魔弓箭手/逆魔弓箭手/0x55/200/0-5/1-1/1-1/20/2000/0
金刚人/金刚人/0x4b/200/0-5/1-1/1-1/20/2000/0
逆魔卫士/逆魔卫士/0x57/200/0-5/1-1/1-1/20/2000/0
逆魔/逆魔/0x58/200/0-5/1-1/1-1/20/2000/0
逆魔雕像/逆魔雕像/0x60/200/0-5/1-1/1-1/20/2000/0
魔甲虫/魔甲虫/(0x8b/200/0-5/1-1/1-1/20/2000/0
红蛇妖/红蛇妖/0x8c/200/0-5/1-1/1-1/20/2000/0
黑蛇妖/黑蛇妖/0x8d/200/0-5/1-1/1-1/20/2000/0
白蛇妖/白蛇妖/0x8e/200/0-5/1-1/1-1/20/2000/0
三头蛇王/三头蛇王/0x8f/200/0-5/1-1/1-1/20/2000/0
铁翼魔/铁翼魔/0xb3/200/0-5/1-1/1-1/20/2000/0
利爪魔/利爪魔/0xbe/200/0-5/1-1/1-1/20/2000/0
火烈鸟/火烈鸟/0xc1/200/0-5/1-1/1-1/20/2000/0
招魂使/招魂使/0xc4/200/0-5/1-1/1-1/20/2000/0
MonGen.txt文本文档中的内容
#name/mapid/x/y/range/count/refreshdelay(seconds)
猪/1/477/233/1/2/60
猪/1/467/233/1/2/60
猪/1/453/213/1/2/60
猪/1/377/233/1/2/60
猪/1/277/233/1/2/60
通天教主/1/683/186/1/5/60
棍犬/1/458/230/1/3/60
刀犬/1/458/230/1/3/60
稻草人/1/458/230/1/3/60
兔子/1/458/230/1/2/60
牛/1/458/230/1/2/60
教主座骑/1/683/186/1/10/60
滚刀手/1/723/54/1/30/60
炎魔/1/723/54/1/30/60
逆魔侍卫/1/723/54/1/30/60
机关巨兽/1/723/54/1/3/60
刺魔/1/723/54/1/30/60
禁地魔王/1/240/183/1/10/60
幽魂/1/240/183/1/30/60
僵尸/1/114/155/1/30/60
僵尸2/1/114/155/1/30/60
尸王/1/114/155/1/20/60
僵尸4/1/730/467/1/30/60
僵尸5/1/730/467/1/30/60
尸霸/1/730/467/1/10/60
铜人/1/683/186/1/30/60
石人/1/683/186/1/30/60
逆魔弓箭手/1/632/467/1/30/60
金刚人/1/727/219/1/20/60
逆魔卫士/1/730/467/1/30/60
逆魔/1/267/447/1/10/60
逆魔雕像/1/267/447/1/30/60
魔甲虫/1/174/325/1/30/60
红蛇妖/1/172/542/1/30/60
白蛇妖/1/114/155/1/30/60
三头蛇王/1/240/183/1/20/60
铁翼魔/1/454/454/1/20/60
利爪魔/1/723/54/1/10/60
招魂使/1/683/186/1/30/60
世界的基本构造详解
--------------------------------------------------------------------------------
这里是初步拟订的(相当与1.60版)结构,还包含了几个做好的服务端结构性设备,现在进展很快,有的图发不上来很遗憾.不感发出来怕犯法,就自己留着玩啦
日志说明书
一、 文件描述
项目标识项目名称日志
二、 文档修订纪录
序 号修改时间修 改 人审 核 人备 注
1
2
3
4
5
6
7
8
9
15
16
17
三、 功能及运行
日志通过UDP协议接收GameServer
发送来的加密日志信息包,解密并解析相关内容后,发送给已连接的MySQL数据库,在MySQL数据库中记录下相关日志信息。
在启动日志服务器之前,首先必须启动MySQL数据库,且建好数据库表(见建表脚本文件table_script.txt)。然后正确配置日志的配置文件Config.ini
四、配置文件说明
配置文件:Config.ini
[LogServer]
logip = 10.10.10.36 ( LogServer 接收信息端的IP地址 ,必须与GameServer的配置一致)
logport = 6801 ( LogServer 接收信息端的端口,必须与GameServer的配置一致)
[MySqlServer]
mysqlip = 10.10.10.160 ( MySQL数据库的IP地址 )
mysqlport = 3306 ( MySQL数据库的端口 )
dbname = logs ( 数据库的名称 )
user = root ( 数据库用户名 )
password = ( 数据库密码 )
五、表结构说明
1. GD行为日志表
create table Gd_Action_Logs
(
rowidbigint unsignednot null AUTO_INCREMENT,
Player_Idvarchar(14)not null,
Player_Chrvarchar(18)not null,
Player_IPvarchar(18)not null,
GD_Commandvarchar(255)not null,
Use_datedatetimenot null default 'NOW()',
ActionTypevarchar(50)not null,
primary key (rowid)
);
字段说明:
Player_Id 玩家帐号
Player_Chr 玩家角色名
Player_IP玩家IP地址
Use_date时间
ActionTypeGD_Command
上下线上线/下线
GD指令对象/使用参数/包括群发消息的消息内容。
交易对方/物品/
组队队长角色/组员
行会行会名/在其中担任的职务/
发言内容发言方式(组队/普通/行会内/喊话等)/私聊对象/发言内容
拣物品/扔物品动作类型(扔/拣)物品/金钱数量
装备/取下物品动作类型/装备/取下物品
PK地图/对方/胜负对方死/自己死/对方受伤害但没有死/无伤害/自己的
伤害情况)
打怪地图/怪物/
死亡地图/对方(人或怪物)
非隐身状态时间始终点/
GD参与的举动
2. 交易日志表
create table Items_Transform_Logs
(
rowidbigint unsignednot null AUTO_INCREMENT,
Player_Chr1varchar(18)not null,
Item_List1textnot null,
Player_Chr2varchar(18)not null,
Item_List2textnot null,
Trans_datedatetimenot null default 'NOW()',
primary key (rowid)
);
字段说明:
Player_Chr1参与交易的玩家1角色名
Item_List1玩家1的交易物品
Player_Chr2参与交易的玩家2角色名
Item_List2玩家2的交易物品
Trans_date交易时间
3. 跳GS日志表
create table Jump_Gs_Logs
(
rowidbigint unsignednot null AUTO_INCREMENT,
Player_Chrvarchar(18)not null,
JumpDetailvarchar(80)not null,
Jump_datedatetimenot null default 'NOW()',
primary key (rowid)
);
字段说明:
Player_Chr玩家角色名
JumpDetail跳GS的详细描述
Jump_date跳GS时间
4. 组队日志表
create table Group_Logs
(
rowidbigint unsignednot null AUTO_INCREMENT,
Player_Chrvarchar(18)not null,
GroupDetailvarchar(100) not null,
Group_datedatetimenot null default 'NOW()',
primary key (rowid)
);
字段说明:
Player_Chr玩家角色名
GroupDetail组队的详细描述
Group_date组队时间
5. 仓库存取物品记录日志表
create table StoreItem_Logs
(
rowidbigint unsignednot null AUTO_INCREMENT,
Item_Idbigint unsignednot null,
Item_Namevarchar(30)not null,
Item_Hostvarchar(18)not null,
Action_Typevarchar(10)not null,
Item_Propertyvarchar(255)not null,
StoreDatedatetimenot null default 'NOW()',
primary key (rowid)
);
字段说明:
Item_Id物品ID
Item_Name物品名称
Item_Host物品的所有者
Action_Type存物品/取物品
Item_Property物品属性
StoreDate存取物品时间
6. 武器升级记录日志
create table WeaponUpdate_Logs
(
rowid bigint unsigned not null AUTO_INCREMENT,
Weapon_Idbigint unsigned not null,
Weapon_Name varchar(30) not null,
Weapon_Host varchar(18) not null,
Update_Type varchar(20) not null,
Weapon_Property varchar(255) not null,
UpdateDate datetime not null default 'NOW()',
primary key (rowid)
);
字段说明:
Weapon_Id武器ID
Weapon_Name武器名称
Weapon_Host武器所有者
Update_Type使用祝福油被祝福/使用祝福油被诅咒/修练/PK被诅咒
Weapon_Property武器升级前属性和升级后属性
UpdateDate时间
7. PK记录日志表
create table pk_logs
(
rowid bigint unsigned not null AUTO_INCREMENT,
Player1_Chr varchar(18) not null,
Player2_Chrvarchar(18) not null,
Pk_Resultvarchar(50) not null,
Pkdatedatetime not null default 'NOW()',
primary key (rowid)
);
字段说明:
Player1_Chr玩家角色名
Player2_Chr对方玩家角色名
Pk_ResultPk结果
PkdatePK时间
8. 行会记录日志表
create table guild_logs
(
rowid bigint unsigned not null AUTO_INCREMENT,
Player_Chr varchar(18) not null,
Guild_Name varchar(30) not null,
IsGuildChairsmallint unsignednot null,
Action_Type varchar(20) not null,
Detailvarchar(20) ,
Pkdate datetime not null default 'NOW()',
primary key (rowid)
);
字段说明:
Player_Chr玩家角色名
Guild_Name玩家所属行会名
IsGuildChair0
Pkdate时间
Action_TypeDetail
加入行会
退出行会
建立行会
删除行会
编辑封号
编辑公告
申请行会战对方行会名
同盟对方行会名
解除同盟对方行会名
添加行会成员成员角色名
删除行会成员成员角色名
申请攻城 城主行会
9. 升级记录日志表
create table upgrade_logs
(
rowid bigint unsigned not null AUTO_INCREMENT,
Player_Id varchar(14) not null,
Player_Chr varchar(18) not null,
Upgradevarchar(10) not null,
date datetime not null default 'NOW()',
primary key (rowid)
);
字段说明:
Player_Id 玩家帐号
Player_Chr 玩家角色名
Upgrade升级描述 (例如从一级升到二级为:1->2 )
Date升级时间
10. 声望值记录日志表
create table repute
(
rowid bigint unsigned not null AUTO_INCREMENT,
player_Chrvarchar(18)not null,
reputevarchar(20)not null,
detailvarchar(50)not null,
date datetime not null default 'NOW()',
primary key (rowid)
);
字段说明:
player_Chr玩家角色名
repute声望值变化
detail声望值变化原因
date时间
11. 婚姻关系记录日志表
create table marry
(
rowid bigint unsigned not null AUTO_INCREMENT,
hu##andvarchar(18)not null,
wifevarchar(18)not null,
typevarchar(20)not null,
detailvarchar(50)not null,
date datetime not null default 'NOW()',
primary key (rowid)
);
字段说明:
hu##and丈夫角色名
wife妻子角色名
type结婚、离婚
detail结婚或离婚的原因
date时间
12. 师徒关系记录日志表
create table teacher
(
rowid bigint unsigned not null AUTO_INCREMENT,
teachervarchar(18)not null,
studentvarchar(18)not null,
typevarchar(20)not null,
detailvarchar(50)not null,
date datetime not null default 'NOW()',
primary key (rowid)
);
字段说明:
teacher师父角色名
student徒弟角色名
type建立师徒关系、解除师徒关系
detail建立或解除师徒关系的原因
date时间