mm_os 4.1.5 → 4.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/com/db/drive.js +40 -24
- package/com/db/index.js +1 -1
- package/package.json +1 -1
- package/common/handler/msg/handler.json +0 -22
- package/common/handler/msg/index.js +0 -23
- package/common/handler/player/handler.json +0 -22
- package/common/handler/player/index.js +0 -287
- package/common/handler/user/handler.json +0 -22
- package/common/handler/user/index.js +0 -23
- package/common/model/msg/index.js +0 -88
- package/common/model/msg/model.json +0 -401
- package/common/model/player/index.js +0 -63
- package/common/model/player/model.json +0 -185
- package/common/model/user/index.js +0 -11
- package/common/model/user/model.json +0 -219
package/com/db/drive.js
CHANGED
|
@@ -105,7 +105,6 @@ Drive.prototype._parseFieldNote = function (note, tp, max_length) {
|
|
|
105
105
|
var local_max_length = max_length;
|
|
106
106
|
|
|
107
107
|
if (desc) {
|
|
108
|
-
description = desc.right(']', true).left('(', true).trim();
|
|
109
108
|
var range = desc.between('[', ']');
|
|
110
109
|
if (range) {
|
|
111
110
|
var min_str = range.left(',', true);
|
|
@@ -125,6 +124,7 @@ Drive.prototype._parseFieldNote = function (note, tp, max_length) {
|
|
|
125
124
|
}
|
|
126
125
|
}
|
|
127
126
|
map = desc.between('(', ')');
|
|
127
|
+
description = desc.right(']', true).replace(`(${map})`, '').trim();
|
|
128
128
|
}
|
|
129
129
|
let min_length = 0;
|
|
130
130
|
if (min > 0) {
|
|
@@ -183,6 +183,8 @@ Drive.prototype._handleDefaultValue = function (tp, not_null, default_val) {
|
|
|
183
183
|
if (not_null && !default_val) {
|
|
184
184
|
if (tp === 'varchar' || tp === 'text') {
|
|
185
185
|
return '';
|
|
186
|
+
} else if (tp === 'datetime' || tp === 'timestamp') {
|
|
187
|
+
return 'CURRENT_TIMESTAMP';
|
|
186
188
|
} else {
|
|
187
189
|
return '0';
|
|
188
190
|
}
|
|
@@ -484,15 +486,25 @@ Drive.prototype._generateFieldSql = function (o) {
|
|
|
484
486
|
* @private
|
|
485
487
|
*/
|
|
486
488
|
Drive.prototype._getTypeSql = function (o) {
|
|
487
|
-
var type;
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
489
|
+
var type = o.type;
|
|
490
|
+
var max_len = o.max_length || 0;
|
|
491
|
+
|
|
492
|
+
if (max_len > 0) {
|
|
493
|
+
// decimal仅对浮点类型有效(int/smallint/bigint等使用decimal=0时不追加)
|
|
494
|
+
var is_float_type = o.type.indexOf('float') !== -1 ||
|
|
495
|
+
o.type.indexOf('double') !== -1 ||
|
|
496
|
+
o.type.indexOf('decimal') !== -1;
|
|
497
|
+
if (is_float_type && o.decimal !== undefined && o.decimal !== null) {
|
|
498
|
+
type += '(' + max_len + ',' + o.decimal + ')';
|
|
499
|
+
} else {
|
|
500
|
+
type += '(' + max_len + ')';
|
|
501
|
+
}
|
|
492
502
|
}
|
|
493
503
|
|
|
494
|
-
|
|
495
|
-
|
|
504
|
+
// 类型未包含unsigned且为非字符/日期类型时追加UNSIGNED
|
|
505
|
+
if (!o.symbol && type.indexOf('unsigned') === -1 &&
|
|
506
|
+
(o.type !== 'varchar' && o.type !== 'longtext' && o.type !== 'text' &&
|
|
507
|
+
o.type !== 'date' && o.type !== 'time' && o.type !== 'datetime' && o.type !== 'timestamp')) {
|
|
496
508
|
type += ' UNSIGNED';
|
|
497
509
|
}
|
|
498
510
|
|
|
@@ -556,7 +568,7 @@ Drive.prototype._isNumericType = function (type) {
|
|
|
556
568
|
* @private
|
|
557
569
|
*/
|
|
558
570
|
Drive.prototype._isAutoInc = function (o) {
|
|
559
|
-
return o.auto && !this._isDateTimeType(o.type);
|
|
571
|
+
return !!o.auto && !this._isDateTimeType(o.type);
|
|
560
572
|
};
|
|
561
573
|
|
|
562
574
|
/**
|
|
@@ -570,11 +582,15 @@ Drive.prototype._getValueSql = function (o) {
|
|
|
570
582
|
return 'DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP';
|
|
571
583
|
}
|
|
572
584
|
|
|
585
|
+
if (this._isAutoInc(o)) {
|
|
586
|
+
return '';
|
|
587
|
+
}
|
|
588
|
+
|
|
573
589
|
if (o.default === null) {
|
|
574
590
|
return 'DEFAULT NULL';
|
|
575
591
|
}
|
|
576
592
|
|
|
577
|
-
if (o.default) {
|
|
593
|
+
if (o.default !== undefined) {
|
|
578
594
|
return this._getDefaultValueSql(o);
|
|
579
595
|
}
|
|
580
596
|
|
|
@@ -588,7 +604,7 @@ Drive.prototype._getValueSql = function (o) {
|
|
|
588
604
|
* @private
|
|
589
605
|
*/
|
|
590
606
|
Drive.prototype._isAutoTime = function (o) {
|
|
591
|
-
return o.auto && this._isDateTimeType(o.type);
|
|
607
|
+
return !!o.auto && this._isDateTimeType(o.type);
|
|
592
608
|
};
|
|
593
609
|
|
|
594
610
|
/**
|
|
@@ -614,7 +630,7 @@ Drive.prototype._getDefaultValueSql = function (o) {
|
|
|
614
630
|
* @private
|
|
615
631
|
*/
|
|
616
632
|
Drive.prototype._isCurrentDefault = function (o) {
|
|
617
|
-
return this._isDateTimeType(o.type) && o.default.indexOf('CURR') !== -1;
|
|
633
|
+
return this._isDateTimeType(o.type) && o.default && o.default.indexOf('CURR') !== -1;
|
|
618
634
|
};
|
|
619
635
|
|
|
620
636
|
/**
|
|
@@ -649,23 +665,23 @@ Drive.prototype._getDefaultEmptySql = function (o) {
|
|
|
649
665
|
* @private
|
|
650
666
|
*/
|
|
651
667
|
Drive.prototype._getNoteSql = function (o) {
|
|
652
|
-
var note = o.title + ':';
|
|
668
|
+
var note = (o.title || '') + ':';
|
|
653
669
|
|
|
654
670
|
if (o.type === 'varchar' || o.type === 'text' || o.type === 'longtext') {
|
|
655
671
|
if (o.max_length) {
|
|
656
|
-
note += '[' + o.min_length + ',' + o.max_length + ']';
|
|
672
|
+
note += '[' + (o.min_length || '0') + ',' + o.max_length + ']';
|
|
657
673
|
} else if (o.min_length) {
|
|
658
674
|
note += '[' + o.min_length + ']';
|
|
659
675
|
}
|
|
660
676
|
} else {
|
|
661
677
|
if (o.max) {
|
|
662
|
-
note += '[' + o.min + ',' + o.max + ']';
|
|
678
|
+
note += '[' + (o.min || '0') + ',' + o.max + ']';
|
|
663
679
|
} else if (o.min) {
|
|
664
680
|
note += '[' + o.min + ']';
|
|
665
681
|
}
|
|
666
682
|
}
|
|
667
683
|
|
|
668
|
-
note += o.description;
|
|
684
|
+
note += (o.description || '');
|
|
669
685
|
if (o.map) {
|
|
670
686
|
note += '(' + o.map + ')';
|
|
671
687
|
}
|
|
@@ -697,8 +713,8 @@ Drive.prototype._buildFieldSql = function (name, type, notnull, value, note) {
|
|
|
697
713
|
* @param {Array} fields 数据库字段列表
|
|
698
714
|
*/
|
|
699
715
|
Drive.prototype._addOrUpdateField = async function (db, table, o, fields) {
|
|
700
|
-
var arr = fields.
|
|
701
|
-
name
|
|
716
|
+
var arr = fields.filter(function (f) {
|
|
717
|
+
return f.name === o.name;
|
|
702
718
|
});
|
|
703
719
|
var sql = this._generateFieldSql(o);
|
|
704
720
|
|
|
@@ -720,7 +736,7 @@ Drive.prototype.updateDb = async function (db) {
|
|
|
720
736
|
var cg = this.config;
|
|
721
737
|
var table = cg.table + '';
|
|
722
738
|
var list = cg.fields;
|
|
723
|
-
|
|
739
|
+
db.table = table;
|
|
724
740
|
var fields = await this._initTable(db, cg, list);
|
|
725
741
|
|
|
726
742
|
if (fields.length > 0) {
|
|
@@ -792,7 +808,7 @@ Drive.prototype._handleConfigFile = function (f, cover) {
|
|
|
792
808
|
delete o.description;
|
|
793
809
|
}
|
|
794
810
|
$.push(jobj, o, true);
|
|
795
|
-
f.
|
|
811
|
+
f.saveText(JSON.stringify(jobj, null, 2));
|
|
796
812
|
}
|
|
797
813
|
};
|
|
798
814
|
|
|
@@ -1252,8 +1268,8 @@ Drive.prototype._procFields = async function (fields, table) {
|
|
|
1252
1268
|
return {
|
|
1253
1269
|
query,
|
|
1254
1270
|
update: update_obj,
|
|
1255
|
-
field: field.
|
|
1256
|
-
field_obj: field_obj.
|
|
1271
|
+
field: field.trim(','),
|
|
1272
|
+
field_obj: field_obj.trim(','),
|
|
1257
1273
|
query_default,
|
|
1258
1274
|
format,
|
|
1259
1275
|
orderby,
|
|
@@ -1297,8 +1313,8 @@ Drive.prototype._createSqlConfig = function (cg, processed, keyword_query) {
|
|
|
1297
1313
|
table: cg.table,
|
|
1298
1314
|
key: cg.key,
|
|
1299
1315
|
orderby_default: '`' + cg.key + '` desc',
|
|
1300
|
-
field_obj: processed.field_obj
|
|
1301
|
-
field_default: processed.field
|
|
1316
|
+
field_obj: processed.field_obj,
|
|
1317
|
+
field_default: processed.field,
|
|
1302
1318
|
method: 'get get_obj avg sum count',
|
|
1303
1319
|
query: { ...processed.query, ...keyword_query },
|
|
1304
1320
|
query_default: processed.query_default,
|
package/com/db/index.js
CHANGED
|
@@ -138,7 +138,7 @@ Db.prototype.getObj = function (table) {
|
|
|
138
138
|
*/
|
|
139
139
|
Db.prototype.updateFile = async function (db, name, table, cover = true) {
|
|
140
140
|
if (name) {
|
|
141
|
-
var o = this.
|
|
141
|
+
var o = this.getMod(name);
|
|
142
142
|
if (o) {
|
|
143
143
|
await o.call('updateFile', db, cover);
|
|
144
144
|
} else {
|
package/package.json
CHANGED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// 名称
|
|
3
|
-
"name": "msg",
|
|
4
|
-
// 标题
|
|
5
|
-
"title": "消息处理器",
|
|
6
|
-
// 描述
|
|
7
|
-
"description": "负责处理消息",
|
|
8
|
-
// 主文件
|
|
9
|
-
"main": "index.js",
|
|
10
|
-
// 作用域,决定加载到什么区域
|
|
11
|
-
"scope": "server",
|
|
12
|
-
// 状态 0:禁用 1:启用
|
|
13
|
-
"state": 1,
|
|
14
|
-
// 排序,越小越靠前
|
|
15
|
-
"sort": 100,
|
|
16
|
-
// 依赖的领域服务
|
|
17
|
-
"services": [],
|
|
18
|
-
// 依赖的仓储
|
|
19
|
-
"stores": [],
|
|
20
|
-
// 依赖的富血模型
|
|
21
|
-
"models": ["msg"]
|
|
22
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 处理器(应用层)
|
|
3
|
-
*/
|
|
4
|
-
module.exports = {
|
|
5
|
-
/**
|
|
6
|
-
* 初始化
|
|
7
|
-
* @param {object} app 应用实例
|
|
8
|
-
* @param {object} eventer 事件总线
|
|
9
|
-
*/
|
|
10
|
-
async _init(app, eventer) {
|
|
11
|
-
// this.log('debug', `初始化!`, app.config.name);
|
|
12
|
-
// 可将监听写在这里
|
|
13
|
-
// eventer.on('');
|
|
14
|
-
},
|
|
15
|
-
/**
|
|
16
|
-
* 主要逻辑
|
|
17
|
-
* @param {...any} args 逻辑参数
|
|
18
|
-
*/
|
|
19
|
-
async main(...args) {
|
|
20
|
-
this.log('debug', `主要逻辑`);
|
|
21
|
-
// 主要代码写在这
|
|
22
|
-
}
|
|
23
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// 名称
|
|
3
|
-
"name": "player",
|
|
4
|
-
// 标题
|
|
5
|
-
"title": "玩家处理器",
|
|
6
|
-
// 描述
|
|
7
|
-
"description": "负责处理玩家相关的操作",
|
|
8
|
-
// 主文件
|
|
9
|
-
"main": "index.js",
|
|
10
|
-
// 作用域,决定加载到什么区域
|
|
11
|
-
"scope": "server",
|
|
12
|
-
// 状态 0:禁用 1:启用
|
|
13
|
-
"state": 1,
|
|
14
|
-
// 排序,越小越靠前
|
|
15
|
-
"sort": 100,
|
|
16
|
-
// 依赖的领域服务
|
|
17
|
-
"services": [],
|
|
18
|
-
// 依赖的仓储
|
|
19
|
-
"stores": [],
|
|
20
|
-
// 依赖的富血模型
|
|
21
|
-
"models": ["player"]
|
|
22
|
-
}
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 处理器(应用层)
|
|
3
|
-
*/
|
|
4
|
-
module.exports = {
|
|
5
|
-
/**
|
|
6
|
-
* 初始化
|
|
7
|
-
* @param {object} app 应用实例
|
|
8
|
-
* @param {object} eventer 事件总线
|
|
9
|
-
*/
|
|
10
|
-
async _init(app, eventer) {
|
|
11
|
-
// this.log('debug', `初始化!`);
|
|
12
|
-
// 可将监听写在这里
|
|
13
|
-
// eventer.on('');
|
|
14
|
-
},
|
|
15
|
-
/**
|
|
16
|
-
* 主要逻辑
|
|
17
|
-
* @param {...any} args 逻辑参数
|
|
18
|
-
*/
|
|
19
|
-
async main(...args) {
|
|
20
|
-
this.log('debug', `主要逻辑`);
|
|
21
|
-
// 主要代码写在这
|
|
22
|
-
},
|
|
23
|
-
/**
|
|
24
|
-
* 设置玩家数据
|
|
25
|
-
* @param {object} data 玩家数据
|
|
26
|
-
*/
|
|
27
|
-
async setting(data) {
|
|
28
|
-
$.push(this, data, true);
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 设置玩家频道ID
|
|
33
|
-
* @param {number} channel_id 频道ID
|
|
34
|
-
*/
|
|
35
|
-
async setChannelId(channel_id) {
|
|
36
|
-
this.channel_id = channel_id;
|
|
37
|
-
},
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 设置玩家房间ID
|
|
41
|
-
* @param {number} room_id 房间ID
|
|
42
|
-
*/
|
|
43
|
-
async setRoomId(room_id) {
|
|
44
|
-
this.room_id = room_id;
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* 处理消息
|
|
49
|
-
* @param {object} msg 消息对象
|
|
50
|
-
* @returns {boolean} 是否处理成功
|
|
51
|
-
*/
|
|
52
|
-
async onMessage(msg) {
|
|
53
|
-
try {
|
|
54
|
-
// 根据消息类型进行分发处理
|
|
55
|
-
switch (msg.msg_type) {
|
|
56
|
-
case 'combat':
|
|
57
|
-
return await this._handleCombat(msg);
|
|
58
|
-
case 'activity':
|
|
59
|
-
return await this._handleActivity(msg);
|
|
60
|
-
case 'mail':
|
|
61
|
-
return await this._handleMail(msg);
|
|
62
|
-
case 'system':
|
|
63
|
-
return await this._handleSystem(msg);
|
|
64
|
-
case 'text':
|
|
65
|
-
return await this._handleText(msg);
|
|
66
|
-
case 'chat':
|
|
67
|
-
return await this._handleChat(msg);
|
|
68
|
-
default:
|
|
69
|
-
return await this._handleDefault(msg);
|
|
70
|
-
}
|
|
71
|
-
} catch (error) {
|
|
72
|
-
console.error(`玩家 ${this.player_id} 数据处理失败:`, error);
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* 处理文本消息
|
|
79
|
-
* @param {object} msg 消息对象
|
|
80
|
-
* @returns {boolean} 是否处理成功
|
|
81
|
-
*/
|
|
82
|
-
async _handleText(msg) {
|
|
83
|
-
try {
|
|
84
|
-
// 根据消息范围进行分发处理
|
|
85
|
-
switch (msg.msg_group) {
|
|
86
|
-
case 'private':
|
|
87
|
-
return await this._handlePrivateText(msg);
|
|
88
|
-
case 'channel':
|
|
89
|
-
return await this._handleChannelText(msg);
|
|
90
|
-
case 'world':
|
|
91
|
-
return await this._handleWorldText(msg);
|
|
92
|
-
case 'guild':
|
|
93
|
-
return await this._handleGuildText(msg);
|
|
94
|
-
default:
|
|
95
|
-
return await this._handleDefaultText(msg);
|
|
96
|
-
}
|
|
97
|
-
} catch (error) {
|
|
98
|
-
console.error(`玩家 ${this.player_id} 处理文本消息失败:`, error);
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* 处理私聊文本消息
|
|
105
|
-
* @param {object} msg 消息对象
|
|
106
|
-
* @returns {boolean} 是否处理成功
|
|
107
|
-
*/
|
|
108
|
-
async _handlePrivateText(msg) {
|
|
109
|
-
// 处理私聊消息逻辑
|
|
110
|
-
console.log(`[私聊] ${msg.sender_name}: ${msg.content}`);
|
|
111
|
-
return true;
|
|
112
|
-
},
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* 处理频道文本消息
|
|
116
|
-
* @param {object} msg 消息对象
|
|
117
|
-
* @returns {boolean} 是否处理成功
|
|
118
|
-
*/
|
|
119
|
-
async _handleChannelText(msg) {
|
|
120
|
-
// 处理频道消息逻辑
|
|
121
|
-
console.log(`[频道${msg.channel_id}] ${msg.sender_name}: ${msg.content}`);
|
|
122
|
-
return true;
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* 处理世界文本消息
|
|
127
|
-
* @param {object} msg 消息对象
|
|
128
|
-
* @returns {boolean} 是否处理成功
|
|
129
|
-
*/
|
|
130
|
-
async _handleWorldText(msg) {
|
|
131
|
-
// 处理世界消息逻辑
|
|
132
|
-
console.log(`[世界] ${msg.sender_name}: ${msg.content}`);
|
|
133
|
-
return true;
|
|
134
|
-
},
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* 处理公会文本消息
|
|
138
|
-
* @param {object} msg 消息对象
|
|
139
|
-
* @returns {boolean} 是否处理成功
|
|
140
|
-
*/
|
|
141
|
-
async _handleGuildText(msg) {
|
|
142
|
-
// 处理公会消息逻辑
|
|
143
|
-
console.log(`[公会] ${msg.sender_name}: ${msg.content}`);
|
|
144
|
-
return true;
|
|
145
|
-
},
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* 处理默认文本消息
|
|
149
|
-
* @param {object} msg 消息对象
|
|
150
|
-
* @returns {boolean} 是否处理成功
|
|
151
|
-
*/
|
|
152
|
-
async _handleDefaultText(msg) {
|
|
153
|
-
// 处理默认文本消息逻辑
|
|
154
|
-
console.log(`[未知范围] ${msg.sender_name}: ${msg.content}`);
|
|
155
|
-
return true;
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* 处理战斗数据
|
|
160
|
-
* @param {object} msg 消息对象
|
|
161
|
-
* @returns {boolean} 是否处理成功
|
|
162
|
-
*/
|
|
163
|
-
async _handleCombat(msg) {
|
|
164
|
-
// 处理战斗相关数据:技能释放、伤害计算、战斗结果等
|
|
165
|
-
var combat = msg.data;
|
|
166
|
-
|
|
167
|
-
// 示例:处理伤害数据
|
|
168
|
-
if (combat.damage && combat.target_id === this.player_id) {
|
|
169
|
-
this.health -= combat.damage;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// 这里可以添加更多的战斗数据处理逻辑
|
|
173
|
-
return true;
|
|
174
|
-
},
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* 处理活动数据
|
|
178
|
-
* @param {object} msg 消息对象
|
|
179
|
-
* @returns {boolean} 是否处理成功
|
|
180
|
-
*/
|
|
181
|
-
async _handleActivity(msg) {
|
|
182
|
-
// 处理活动相关数据:活动开始、奖励发放、进度更新等
|
|
183
|
-
var activity = msg.data;
|
|
184
|
-
|
|
185
|
-
// 示例:处理活动奖励
|
|
186
|
-
if (activity.rewards) {
|
|
187
|
-
this.rewards = this.rewards || [];
|
|
188
|
-
this.rewards.push(...activity.rewards);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
return true;
|
|
192
|
-
},
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* 处理邮件数据
|
|
196
|
-
* @param {object} msg 消息对象
|
|
197
|
-
* @returns {boolean} 是否处理成功
|
|
198
|
-
*/
|
|
199
|
-
async _handleMail(msg) {
|
|
200
|
-
// 处理邮件相关数据:邮件内容、附件、赠品等
|
|
201
|
-
var mail = msg.data;
|
|
202
|
-
|
|
203
|
-
// 示例:处理邮件接收
|
|
204
|
-
this.mailbox = this.mailbox || [];
|
|
205
|
-
this.mailbox.push({
|
|
206
|
-
id: Date.now(),
|
|
207
|
-
title: mail.title,
|
|
208
|
-
content: mail.content,
|
|
209
|
-
attachments: mail.attachments || [],
|
|
210
|
-
timestamp: Date.now()
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
return true;
|
|
214
|
-
},
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* 处理系统数据
|
|
218
|
-
* @param {object} msg 消息对象
|
|
219
|
-
* @returns {boolean} 是否处理成功
|
|
220
|
-
*/
|
|
221
|
-
async _handleSystem(msg) {
|
|
222
|
-
// 处理系统相关数据:系统公告、维护通知等
|
|
223
|
-
var system = msg.data;
|
|
224
|
-
|
|
225
|
-
// 示例:处理系统公告
|
|
226
|
-
console.log(`玩家 ${this.player_id} 收到系统公告:`, system.message);
|
|
227
|
-
|
|
228
|
-
return true;
|
|
229
|
-
},
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* 处理私聊数据
|
|
233
|
-
* @param {object} msg 消息对象
|
|
234
|
-
* @returns {boolean} 是否处理成功
|
|
235
|
-
* @private
|
|
236
|
-
*/
|
|
237
|
-
async _handlePrivate(msg) {
|
|
238
|
-
// 处理私聊相关数据:私聊消息、好友请求等
|
|
239
|
-
var data = msg.data;
|
|
240
|
-
|
|
241
|
-
// 示例:处理私聊消息
|
|
242
|
-
console.log(`玩家 ${this.player_id} 收到私聊消息:`, data.message);
|
|
243
|
-
|
|
244
|
-
return true;
|
|
245
|
-
},
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* 处理频道数据
|
|
249
|
-
* @param {object} msg 消息对象
|
|
250
|
-
* @returns {boolean} 是否处理成功
|
|
251
|
-
*/
|
|
252
|
-
async _handleChannel(msg) {
|
|
253
|
-
// 处理频道相关数据:频道公告、频道活动等
|
|
254
|
-
var channel = msg.data;
|
|
255
|
-
|
|
256
|
-
// 示例:处理频道消息
|
|
257
|
-
console.log(`玩家 ${this.player_id} 收到频道消息:`, channel.message);
|
|
258
|
-
|
|
259
|
-
return true;
|
|
260
|
-
},
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* 处理聊天数据
|
|
264
|
-
* @param {object} msg 消息对象
|
|
265
|
-
* @returns {boolean} 是否处理成功
|
|
266
|
-
*/
|
|
267
|
-
async _handleChat(msg) {
|
|
268
|
-
// 处理聊天相关数据:聊天消息、频道消息等
|
|
269
|
-
var chat = msg.data;
|
|
270
|
-
|
|
271
|
-
// 示例:处理聊天消息
|
|
272
|
-
console.log(`玩家 ${this.player_id} 收到聊天消息:`, chat.message);
|
|
273
|
-
|
|
274
|
-
return true;
|
|
275
|
-
},
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* 处理默认数据
|
|
279
|
-
* @param {object} msg 消息对象
|
|
280
|
-
* @returns {boolean} 是否处理成功
|
|
281
|
-
*/
|
|
282
|
-
async _handleDefault(msg) {
|
|
283
|
-
// 处理未知类型的数据
|
|
284
|
-
console.log(`玩家 ${this.player_id} 收到未知类型数据:`, msg);
|
|
285
|
-
return true;
|
|
286
|
-
}
|
|
287
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// 名称
|
|
3
|
-
"name": "user",
|
|
4
|
-
// 标题
|
|
5
|
-
"title": "示例处理器",
|
|
6
|
-
// 描述
|
|
7
|
-
"description": "介绍该处理器有什么用",
|
|
8
|
-
// 主文件
|
|
9
|
-
"main": "index.js",
|
|
10
|
-
// 作用域,决定加载到什么区域
|
|
11
|
-
"scope": "server",
|
|
12
|
-
// 状态 0:禁用 1:启用
|
|
13
|
-
"state": 1,
|
|
14
|
-
// 排序,越小越靠前
|
|
15
|
-
"sort": 100,
|
|
16
|
-
// 依赖的领域服务
|
|
17
|
-
"services": [],
|
|
18
|
-
// 依赖的仓储
|
|
19
|
-
"stores": [],
|
|
20
|
-
// 依赖的富血模型
|
|
21
|
-
"models": ["user"]
|
|
22
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 处理器(应用层)
|
|
3
|
-
*/
|
|
4
|
-
module.exports = {
|
|
5
|
-
/**
|
|
6
|
-
* 初始化
|
|
7
|
-
* @param {object} app 应用实例
|
|
8
|
-
* @param {object} eventer 事件总线
|
|
9
|
-
*/
|
|
10
|
-
async _init(app, eventer) {
|
|
11
|
-
// this.log('debug', `初始化!`);
|
|
12
|
-
// 可将监听写在这里
|
|
13
|
-
// eventer.on('');
|
|
14
|
-
},
|
|
15
|
-
/**
|
|
16
|
-
* 主要逻辑
|
|
17
|
-
* @param {...any} args 逻辑参数
|
|
18
|
-
*/
|
|
19
|
-
async main(...args) {
|
|
20
|
-
this.log('debug', `主要逻辑`);
|
|
21
|
-
// 主要代码写在这
|
|
22
|
-
}
|
|
23
|
-
};
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
if (!$.const) {
|
|
2
|
-
$.const = {};
|
|
3
|
-
}
|
|
4
|
-
if ($.const) {
|
|
5
|
-
/**
|
|
6
|
-
* 消息类型枚举
|
|
7
|
-
*/
|
|
8
|
-
const MESSAGE_TYPES = {
|
|
9
|
-
// 内容消息类
|
|
10
|
-
TEXT: 'text',
|
|
11
|
-
IMAGE: 'image',
|
|
12
|
-
VOICE: 'voice',
|
|
13
|
-
VIDEO: 'video',
|
|
14
|
-
FILE: 'file',
|
|
15
|
-
|
|
16
|
-
// 交互消息类
|
|
17
|
-
EVENT: 'event',
|
|
18
|
-
NOTICE: 'notice',
|
|
19
|
-
CARD: 'card',
|
|
20
|
-
LIST: 'list',
|
|
21
|
-
|
|
22
|
-
// 业务消息类
|
|
23
|
-
CHAT: 'chat',
|
|
24
|
-
MAIL: 'mail',
|
|
25
|
-
TRADE: 'trade'
|
|
26
|
-
};
|
|
27
|
-
$.const.MESSAGE_TYPES = MESSAGE_TYPES;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* 事件类型枚举
|
|
31
|
-
*/
|
|
32
|
-
const EVENT_TYPES = {
|
|
33
|
-
// 游戏事件
|
|
34
|
-
COMBAT: 'combat',
|
|
35
|
-
QUEST: 'quest',
|
|
36
|
-
LEVEL: 'level',
|
|
37
|
-
ACHIEVEMENT: 'achievement',
|
|
38
|
-
|
|
39
|
-
// 社交事件
|
|
40
|
-
FRIEND: 'friend',
|
|
41
|
-
GUILD: 'guild',
|
|
42
|
-
TEAM: 'team',
|
|
43
|
-
INVITE: 'invite',
|
|
44
|
-
|
|
45
|
-
// 系统事件
|
|
46
|
-
LOGIN: 'login',
|
|
47
|
-
LOGOUT: 'logout',
|
|
48
|
-
REWARD: 'reward',
|
|
49
|
-
ACTIVITY: 'activity'
|
|
50
|
-
};
|
|
51
|
-
$.const.EVENT_TYPES = EVENT_TYPES;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* 消息分组枚举
|
|
55
|
-
*/
|
|
56
|
-
const MESSAGE_GROUPS = {
|
|
57
|
-
PRIVATE: 'private',
|
|
58
|
-
CHANNEL: 'channel',
|
|
59
|
-
WORLD: 'world',
|
|
60
|
-
GUILD: 'guild',
|
|
61
|
-
SYSTEM: 'system'
|
|
62
|
-
};
|
|
63
|
-
$.const.MESSAGE_GROUPS = MESSAGE_GROUPS;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* 消息优先级枚举
|
|
67
|
-
*/
|
|
68
|
-
const PRIORITIES = {
|
|
69
|
-
LOW: 'low',
|
|
70
|
-
NORMAL: 'normal',
|
|
71
|
-
HIGH: 'high',
|
|
72
|
-
URGENT: 'urgent'
|
|
73
|
-
};
|
|
74
|
-
$.const.PRIORITIES = PRIORITIES;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* 消息模型
|
|
79
|
-
*/
|
|
80
|
-
module.exports = {
|
|
81
|
-
/**
|
|
82
|
-
* 添加消息模型方法
|
|
83
|
-
* @param {object} model 消息模型实例
|
|
84
|
-
*/
|
|
85
|
-
addMethods(model) {
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
};
|