Compare commits

...

81 Commits

Author SHA1 Message Date
dy
63877a2664 Merge branch 'bugfix' into release 2023-12-28 17:34:02 +08:00
dy
1a88ed0784 Merge branch 'feature/json' into release 2023-12-28 17:33:54 +08:00
dy
f2b9f12390 huodong.json 2023-12-28 17:33:47 +08:00
dy
6a0a158fba fix 脚本 2023-12-28 17:33:08 +08:00
dy
9d9c37714b Merge branch 'bugfix' into release 2023-12-28 16:13:54 +08:00
dy
37f2472f5d 修复脚本模板,刷新活动内容脚本 2023-12-28 16:10:56 +08:00
xcy
bf4f22d092 fix:
修复终身卡邮件没有type
2023-12-28 15:18:47 +08:00
dy
4343d50f7c Merge branch 'feature/yuandan' into release 2023-12-28 15:17:35 +08:00
dy
5512bf3422 Merge branch 'feature/json' into release 2023-12-28 15:17:24 +08:00
dy
86595c68b3 cehua json 2023-12-28 15:17:06 +08:00
dy
847a1d03e9 注释 2023-12-28 15:14:42 +08:00
xcy
96729c719a fix:
终身卡发放奖励bug修复
2023-12-28 14:48:52 +08:00
xcy
075c60a9f8 fix:
终身卡定时器log
2023-12-28 14:42:45 +08:00
dy
1412da00ae Merge remote-tracking branch 'origin/bugfix' into bugfix 2023-12-28 14:18:33 +08:00
dy
4e19dc21a1 fix聊天禁言,英雄阵形战力计算 2023-12-28 14:18:26 +08:00
xcy
27d7a56d10 累计充值累计金额修改为累计vip经验(金额*10) 2023-12-28 13:44:35 +08:00
dy
053ab1ab23 Merge remote-tracking branch 'origin/bugfix' into bugfix 2023-12-28 13:39:54 +08:00
dy
07fa117614 fix公共方法 random 2023-12-28 13:39:28 +08:00
xcy
d6e41758f9 fix:
修复终身卡每周奖励未发放bug
2023-12-28 11:49:21 +08:00
Your Name
4fc0aa8576 fix:
修复悬赏任务一键领取3倍奖励逻辑错误
2023-12-28 11:11:13 +08:00
dy
ee991be3b9 弃用临时修复的tsbuffer-validator/index.js 2023-12-28 10:56:54 +08:00
dy
cae860a087 tsrpc版本升级 2023-12-28 10:47:38 +08:00
Your Name
47b1fe4d22 fix:修复悬赏任务一键领取特权问题 2023-12-28 10:08:19 +08:00
dy
e098e41885 paylog增加args记录 2023-12-28 10:05:52 +08:00
dy
57c5a8a5e7 Revert "fix pay"
This reverts commit b9a556ea30.
2023-12-27 22:56:55 +08:00
dy
7b5c470f52 fix 红点 2023-12-27 22:31:09 +08:00
dy
b9a556ea30 fix pay 2023-12-27 22:09:53 +08:00
dy
757f1ba4b8 Merge branch 'feature/xiaofeijingsai' into release 2023-12-27 21:06:44 +08:00
dy
722e92a54b 消费竞赛 2023-12-27 21:05:53 +08:00
dy
2309ff4a9c Merge branch 'feature/json' into release 2023-12-27 20:50:05 +08:00
dy
c0e6f6516c cehua json 2023-12-27 20:49:23 +08:00
dy
d6d8b39afe Merge branch 'feature/json' into release
# Conflicts:
#	src/json/attr.json
#	src/json/huodong.json5
2023-12-27 20:21:51 +08:00
dy
27ec272347 cehua json 2023-12-27 20:21:13 +08:00
dy
47f16b583a Merge branch 'feature/xiaofeijingsai' into release 2023-12-27 20:20:23 +08:00
dy
82d323d5c8 Merge branch 'feature/yuandan' into release
# Conflicts:
#	src/public/pay.ts
2023-12-27 20:20:01 +08:00
dy
dced990c89 Merge remote-tracking branch 'origin/fix_rank' into release 2023-12-27 20:19:25 +08:00
dy
12300703b5 每日刷新付费礼包 2023-12-27 20:09:59 +08:00
dy
2e84333776 fix 元旦任务计数 2023-12-27 19:59:50 +08:00
dy
add9c7c562 fix 元旦任务 2023-12-27 19:49:33 +08:00
dy
dbb012675a fix 自选支付 2023-12-27 19:30:49 +08:00
dy
771c4a2ceb cehua json 2023-12-27 19:15:51 +08:00
dy
3e198b688e Merge branch 'master' into feature/json 2023-12-27 19:15:27 +08:00
dy
7af728b68c fix 自选购买 2023-12-27 19:13:17 +08:00
dy
837e9b58c8 fix 元旦红点 2023-12-27 18:50:36 +08:00
dy
5e476fa5c6 fix 探险 2023-12-27 18:34:04 +08:00
dy
3c034fb296 每10分钟刷新排行榜前一千名玩家的用户数据 2023-12-27 17:53:32 +08:00
dy
53a2becac5 娃娃机改为掉落组 2023-12-27 16:53:33 +08:00
dy
7c83a8bbe8 娃娃机改为掉落组 2023-12-27 16:41:22 +08:00
dy
0df09e0f9e 娃娃机改为掉落组 2023-12-27 16:33:31 +08:00
dy
bdb83f9da7 英雄爆伤限制为最大值1000% 2023-12-27 16:00:43 +08:00
dy
b821afc6b0 修复配件套装战力计算 2023-12-27 15:47:44 +08:00
dy
6089ad5dd2 增加抓娃娃的任务类型,userPing同步玩家钻石金币 2023-12-27 15:06:22 +08:00
dy
b578bb0db0 消费竞赛改为跨服活动 2023-12-27 14:17:10 +08:00
dy
d4bd776b48 proto 2023-12-27 11:09:00 +08:00
dy
c3fa18c9b1 proto 2023-12-27 11:08:42 +08:00
dy
34ace42872 proto 2023-12-27 11:03:10 +08:00
dy
1cf4784d42 元旦红点,破冰红点 2023-12-27 11:02:53 +08:00
dy
4538c0dc16 自选礼包红点 2023-12-27 10:23:12 +08:00
dy
f9989cf002 自选礼包 2023-12-27 10:17:38 +08:00
dy
944ef41d5d 达摩献礼 2023-12-27 09:51:37 +08:00
dy
8503a65c1f yuandan fun 2023-12-26 20:04:05 +08:00
dy
f50f6de933 yuandan 2023-12-26 19:49:46 +08:00
dy
a6efa1019e fix 讨伐海盗 2023-12-26 18:57:23 +08:00
dy
1f92fe7dc3 Revert "Revert "fix 自选支付""
This reverts commit 9e3d1b92aa.
2023-12-26 18:38:20 +08:00
dy
3e5479760d Revert "Revert "fix pay""
This reverts commit d13b9fcae0.
2023-12-26 18:38:17 +08:00
dy
74c28c787b Revert "Revert "自选类型购买改为统一方法""
This reverts commit 9837d27132.
2023-12-26 18:38:14 +08:00
dy
08d0bed291 元旦活动 2023-12-26 17:33:48 +08:00
Your Name
78b246f32a 排行榜修改 2023-12-26 17:25:03 +08:00
dy
21994f214a 元旦fix 2023-12-26 16:53:43 +08:00
dy
5fa9d088d9 cehua json 2023-12-26 16:48:20 +08:00
dy
ae0a5c6882 fix元旦 2023-12-26 16:33:31 +08:00
dy
bfc9ff369c fix元旦 2023-12-26 16:20:59 +08:00
dy
72ff17ba0b 元旦活动 2023-12-26 15:26:58 +08:00
dy
1e90b96c6c huodong json 2023-12-26 15:07:00 +08:00
dy
9b6d29ddf2 元旦活动,娃娃机 2023-12-26 14:30:10 +08:00
dy
fd035faf86 元旦活动 2023-12-26 14:04:19 +08:00
dy
d5ef0b3187 yuandan 2023-12-26 09:40:15 +08:00
dy
5486c2adf7 json 2023-12-25 18:03:15 +08:00
dy
1d6143794c 元旦活动 2023-12-25 17:13:59 +08:00
dy
cba4f4563d json 2023-12-25 14:00:30 +08:00
dy
00804fa8c1 init 元旦活动 2023-12-25 13:48:18 +08:00
77 changed files with 20608 additions and 1309 deletions

1
.gitignore vendored
View File

@ -1,6 +1,5 @@
/node_modules /node_modules
/.idea /.idea
/.vscode
/dist /dist
/doc /doc

50
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,50 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "消息服",
"type": "node",
"request": "launch",
"args": [
"${workspaceRoot}/src/index.ts",
"-serverType",
"msg",
"-logModel",
"debug"
],
"runtimeArgs": [
"--nolazy",
"-r",
"ts-node/register"
],
"sourceMaps": true,
"cwd": "${workspaceRoot}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
},
{
"name": "跨服",
"type": "node",
"request": "launch",
"args": [
"${workspaceRoot}/src/index.ts",
"-serverType",
"cross",
"-logModel",
"debug"
],
"runtimeArgs": [
"--nolazy",
"-r",
"ts-node/register"
],
"sourceMaps": true,
"cwd": "${workspaceRoot}",
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen"
}
]
}

View File

@ -11,6 +11,6 @@ WORKDIR /app
RUN npm config set registry http://registry.npm.taobao.org/ && npm install pm2@5.2.2 -g RUN npm config set registry http://registry.npm.taobao.org/ && npm install pm2@5.2.2 -g
RUN rm -rf node_modules/tsbuffer-validator/index.js && cp tsbufferIndex.js node_modules/tsbuffer-validator/index.js #RUN rm -rf node_modules/tsbuffer-validator/index.js && cp tsbufferIndex.js node_modules/tsbuffer-validator/index.js
CMD cd /app && sh zoeninfo.sh "Asia/Tokyo" && pm2-runtime start js_pm2.config.js -- ${Param} CMD cd /app && sh zoeninfo.sh "Asia/Tokyo" && pm2-runtime start js_pm2.config.js -- ${Param}

109
package-lock.json generated
View File

@ -11,7 +11,6 @@
"axios": "^1.4.0", "axios": "^1.4.0",
"crypto-js": "^4.1.1", "crypto-js": "^4.1.1",
"express": "^4.18.2", "express": "^4.18.2",
"heapdump": "^0.3.15",
"ioredis": "^5.3.2", "ioredis": "^5.3.2",
"json5": "^2.2.3", "json5": "^2.2.3",
"mathjs": "^11.4.0", "mathjs": "^11.4.0",
@ -21,7 +20,7 @@
"redis": "^4.3.1", "redis": "^4.3.1",
"shelljs": "^0.8.5", "shelljs": "^0.8.5",
"sync-request": "^6.1.0", "sync-request": "^6.1.0",
"tsrpc": "^3.4.12", "tsrpc": "^3.4.14",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {
@ -2925,18 +2924,6 @@
"he": "bin/he" "he": "bin/he"
} }
}, },
"node_modules/heapdump": {
"version": "0.3.15",
"resolved": "https://registry.npmjs.org/heapdump/-/heapdump-0.3.15.tgz",
"integrity": "sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA==",
"hasInstallScript": true,
"dependencies": {
"nan": "^2.13.2"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/http-basic": { "node_modules/http-basic": {
"version": "8.1.3", "version": "8.1.3",
"resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz", "resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz",
@ -3853,11 +3840,6 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true "dev": true
}, },
"node_modules/nan": {
"version": "2.18.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
"integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w=="
},
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.1", "version": "3.3.1",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.1.tgz", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.1.tgz",
@ -5092,12 +5074,12 @@
} }
}, },
"node_modules/tsbuffer": { "node_modules/tsbuffer": {
"version": "2.2.7", "version": "2.2.8",
"resolved": "https://registry.npmmirror.com/tsbuffer/-/tsbuffer-2.2.7.tgz", "resolved": "https://registry.npmjs.org/tsbuffer/-/tsbuffer-2.2.8.tgz",
"integrity": "sha512-WkP6NU14W14Kxa+OtccJ4m9+nY8UZs/DlM3FQzxstBkNGzmNvggN3+2mfIzYO8YDKu6mqYUXgpNg1aqIYcUACw==", "integrity": "sha512-P907NAcy6G2+glFFvxd4oE/j9IXRw7Imi6qXLm6WAYGV1ksJdFrge+86R1pAeRzhcgP9KfvjMcR+miv/HnWZpg==",
"dependencies": { "dependencies": {
"k8w-extend-native": "^1.4.6", "k8w-extend-native": "^1.4.6",
"tsbuffer-validator": "^2.1.1", "tsbuffer-validator": "^2.1.2",
"tslib": "*" "tslib": "*"
} }
}, },
@ -5120,9 +5102,9 @@
"integrity": "sha512-I4+5Xfk7G+D++kXdNnYTeY26WQTaf14C84XQwPKteNmrwxRY3CQCkMqASRiCUqtpOuDn43qmoxuXpT+Vo8Wltg==" "integrity": "sha512-I4+5Xfk7G+D++kXdNnYTeY26WQTaf14C84XQwPKteNmrwxRY3CQCkMqASRiCUqtpOuDn43qmoxuXpT+Vo8Wltg=="
}, },
"node_modules/tsbuffer-validator": { "node_modules/tsbuffer-validator": {
"version": "2.1.1", "version": "2.1.2",
"resolved": "https://registry.npmmirror.com/tsbuffer-validator/-/tsbuffer-validator-2.1.1.tgz", "resolved": "https://registry.npmjs.org/tsbuffer-validator/-/tsbuffer-validator-2.1.2.tgz",
"integrity": "sha512-12JVltPQjv2hZqfd9TZhTjCyQ0bvtRlTXyczOAaH+CnryWI9Twt0i9ZGaM5fb2QMxW5BOhToOIbwO8opDqpCEg==", "integrity": "sha512-PrqIYy7aANY7ssr92HJN8ZM+eGc4Qmpvu7nNBv+T2DOAb+eqblKjlDZEhNnzxjs/ddqu9PqPe4Aa+fqYdzo98g==",
"dependencies": { "dependencies": {
"k8w-extend-native": "^1.4.6", "k8w-extend-native": "^1.4.6",
"tsbuffer-schema": "^2.2.0", "tsbuffer-schema": "^2.2.0",
@ -5130,32 +5112,32 @@
} }
}, },
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.4.0", "version": "2.4.1",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
}, },
"node_modules/tsrpc": { "node_modules/tsrpc": {
"version": "3.4.12", "version": "3.4.14",
"resolved": "https://registry.npmmirror.com/tsrpc/-/tsrpc-3.4.12.tgz", "resolved": "https://registry.npmjs.org/tsrpc/-/tsrpc-3.4.14.tgz",
"integrity": "sha512-FMa7FdzW7LdhsQ49DxcNegeW4oRJGxqP+3DXbZBvsUHSeL2h6UFCSKmw2TypI2ChDeRGgbo+wt6uJ0upF6fz9Q==", "integrity": "sha512-v1EHjAbza6kuMMPbVu30zQlx05jy8XOCJciyU0gotwbAlnteS48uqOD9ze6WvOt6xeJwyQW5VyGy14oeBEiJtQ==",
"dependencies": { "dependencies": {
"@types/ws": "^7.4.7", "@types/ws": "^7.4.7",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"tsbuffer": "^2.2.7", "tsbuffer": "^2.2.8",
"tsrpc-base-client": "^2.1.11", "tsrpc-base-client": "^2.1.13",
"tsrpc-proto": "^1.4.3", "tsrpc-proto": "^1.4.3",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"ws": "^7.5.9" "ws": "^7.5.9"
} }
}, },
"node_modules/tsrpc-base-client": { "node_modules/tsrpc-base-client": {
"version": "2.1.12", "version": "2.1.13",
"resolved": "https://registry.npmmirror.com/tsrpc-base-client/-/tsrpc-base-client-2.1.12.tgz", "resolved": "https://registry.npmjs.org/tsrpc-base-client/-/tsrpc-base-client-2.1.13.tgz",
"integrity": "sha512-7Zsby1dtDQkxzvT/tRMLLnjCqpYpoCwN9Sci9x7iWCBMNHiiBPBoKIIp2nqhlfLF3kxSgemQOGF499Mx3GVQfg==", "integrity": "sha512-oNPOZEJfXkOwqi2wp/j0q55NzA7qJFRpL2IzTEU59PTPRZ5OpbV2wg3VVNK7NTJBOjwPSUH/TNBckWtIVKstKg==",
"dependencies": { "dependencies": {
"k8w-extend-native": "^1.4.6", "k8w-extend-native": "^1.4.6",
"tsbuffer": "^2.2.7", "tsbuffer": "^2.2.7",
"tslib": "*", "tslib": "=2.4.1",
"tsrpc-proto": "^1.4.3" "tsrpc-proto": "^1.4.3"
} }
}, },
@ -7929,14 +7911,6 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true "dev": true
}, },
"heapdump": {
"version": "0.3.15",
"resolved": "https://registry.npmjs.org/heapdump/-/heapdump-0.3.15.tgz",
"integrity": "sha512-n8aSFscI9r3gfhOcAECAtXFaQ1uy4QSke6bnaL+iymYZ/dWs9cqDqHM+rALfsHUwukUbxsdlECZ0pKmJdQ/4OA==",
"requires": {
"nan": "^2.13.2"
}
},
"http-basic": { "http-basic": {
"version": "8.1.3", "version": "8.1.3",
"resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz", "resolved": "https://registry.npmmirror.com/http-basic/-/http-basic-8.1.3.tgz",
@ -8655,11 +8629,6 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true "dev": true
}, },
"nan": {
"version": "2.18.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
"integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w=="
},
"nanoid": { "nanoid": {
"version": "3.3.1", "version": "3.3.1",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.1.tgz", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.1.tgz",
@ -9598,12 +9567,12 @@
} }
}, },
"tsbuffer": { "tsbuffer": {
"version": "2.2.7", "version": "2.2.8",
"resolved": "https://registry.npmmirror.com/tsbuffer/-/tsbuffer-2.2.7.tgz", "resolved": "https://registry.npmjs.org/tsbuffer/-/tsbuffer-2.2.8.tgz",
"integrity": "sha512-WkP6NU14W14Kxa+OtccJ4m9+nY8UZs/DlM3FQzxstBkNGzmNvggN3+2mfIzYO8YDKu6mqYUXgpNg1aqIYcUACw==", "integrity": "sha512-P907NAcy6G2+glFFvxd4oE/j9IXRw7Imi6qXLm6WAYGV1ksJdFrge+86R1pAeRzhcgP9KfvjMcR+miv/HnWZpg==",
"requires": { "requires": {
"k8w-extend-native": "^1.4.6", "k8w-extend-native": "^1.4.6",
"tsbuffer-validator": "^2.1.1", "tsbuffer-validator": "^2.1.2",
"tslib": "*" "tslib": "*"
} }
}, },
@ -9626,9 +9595,9 @@
"integrity": "sha512-I4+5Xfk7G+D++kXdNnYTeY26WQTaf14C84XQwPKteNmrwxRY3CQCkMqASRiCUqtpOuDn43qmoxuXpT+Vo8Wltg==" "integrity": "sha512-I4+5Xfk7G+D++kXdNnYTeY26WQTaf14C84XQwPKteNmrwxRY3CQCkMqASRiCUqtpOuDn43qmoxuXpT+Vo8Wltg=="
}, },
"tsbuffer-validator": { "tsbuffer-validator": {
"version": "2.1.1", "version": "2.1.2",
"resolved": "https://registry.npmmirror.com/tsbuffer-validator/-/tsbuffer-validator-2.1.1.tgz", "resolved": "https://registry.npmjs.org/tsbuffer-validator/-/tsbuffer-validator-2.1.2.tgz",
"integrity": "sha512-12JVltPQjv2hZqfd9TZhTjCyQ0bvtRlTXyczOAaH+CnryWI9Twt0i9ZGaM5fb2QMxW5BOhToOIbwO8opDqpCEg==", "integrity": "sha512-PrqIYy7aANY7ssr92HJN8ZM+eGc4Qmpvu7nNBv+T2DOAb+eqblKjlDZEhNnzxjs/ddqu9PqPe4Aa+fqYdzo98g==",
"requires": { "requires": {
"k8w-extend-native": "^1.4.6", "k8w-extend-native": "^1.4.6",
"tsbuffer-schema": "^2.2.0", "tsbuffer-schema": "^2.2.0",
@ -9636,32 +9605,32 @@
} }
}, },
"tslib": { "tslib": {
"version": "2.4.0", "version": "2.4.1",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
}, },
"tsrpc": { "tsrpc": {
"version": "3.4.12", "version": "3.4.14",
"resolved": "https://registry.npmmirror.com/tsrpc/-/tsrpc-3.4.12.tgz", "resolved": "https://registry.npmjs.org/tsrpc/-/tsrpc-3.4.14.tgz",
"integrity": "sha512-FMa7FdzW7LdhsQ49DxcNegeW4oRJGxqP+3DXbZBvsUHSeL2h6UFCSKmw2TypI2ChDeRGgbo+wt6uJ0upF6fz9Q==", "integrity": "sha512-v1EHjAbza6kuMMPbVu30zQlx05jy8XOCJciyU0gotwbAlnteS48uqOD9ze6WvOt6xeJwyQW5VyGy14oeBEiJtQ==",
"requires": { "requires": {
"@types/ws": "^7.4.7", "@types/ws": "^7.4.7",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"tsbuffer": "^2.2.7", "tsbuffer": "^2.2.8",
"tsrpc-base-client": "^2.1.11", "tsrpc-base-client": "^2.1.13",
"tsrpc-proto": "^1.4.3", "tsrpc-proto": "^1.4.3",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"ws": "^7.5.9" "ws": "^7.5.9"
} }
}, },
"tsrpc-base-client": { "tsrpc-base-client": {
"version": "2.1.12", "version": "2.1.13",
"resolved": "https://registry.npmmirror.com/tsrpc-base-client/-/tsrpc-base-client-2.1.12.tgz", "resolved": "https://registry.npmjs.org/tsrpc-base-client/-/tsrpc-base-client-2.1.13.tgz",
"integrity": "sha512-7Zsby1dtDQkxzvT/tRMLLnjCqpYpoCwN9Sci9x7iWCBMNHiiBPBoKIIp2nqhlfLF3kxSgemQOGF499Mx3GVQfg==", "integrity": "sha512-oNPOZEJfXkOwqi2wp/j0q55NzA7qJFRpL2IzTEU59PTPRZ5OpbV2wg3VVNK7NTJBOjwPSUH/TNBckWtIVKstKg==",
"requires": { "requires": {
"k8w-extend-native": "^1.4.6", "k8w-extend-native": "^1.4.6",
"tsbuffer": "^2.2.7", "tsbuffer": "^2.2.7",
"tslib": "*", "tslib": "=2.4.1",
"tsrpc-proto": "^1.4.3" "tsrpc-proto": "^1.4.3"
} }
}, },

View File

@ -37,7 +37,6 @@
"axios": "^1.4.0", "axios": "^1.4.0",
"crypto-js": "^4.1.1", "crypto-js": "^4.1.1",
"express": "^4.18.2", "express": "^4.18.2",
"heapdump": "^0.3.15",
"ioredis": "^5.3.2", "ioredis": "^5.3.2",
"json5": "^2.2.3", "json5": "^2.2.3",
"mathjs": "^11.4.0", "mathjs": "^11.4.0",
@ -47,7 +46,7 @@
"redis": "^4.3.1", "redis": "^4.3.1",
"shelljs": "^0.8.5", "shelljs": "^0.8.5",
"sync-request": "^6.1.0", "sync-request": "^6.1.0",
"tsrpc": "^3.4.12", "tsrpc": "^3.4.14",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
} }
} }

View File

@ -7,7 +7,7 @@ import { getGud } from "../../public/gud";
export default async function (call: ApiCall<ReqSend, ResSend>) { export default async function (call: ApiCall<ReqSend, ResSend>) {
let status_chat = await getGud(call.uid)['status_chat']; let status_chat = (await getGud(call.uid))['status_chat'];
// 验证是否被禁言 // 验证是否被禁言
if(status_chat == 1) return call.error(lng.chat_4); if(status_chat == 1) return call.error(lng.chat_4);
let data = call.req; let data = call.req;

View File

@ -26,7 +26,7 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
call.succ({ call.succ({
sTime: sTime, sTime: sTime,
recIndex: db?.recIndex || [], recIndex: db?.recIndex || [],
payNum: await PayFun.getPayDaysAllPayNum(call.uid, _hdinfo.stime, _hdinfo.rtime), payNum: (await PayFun.getPayDaysAllPayNum(call.uid, _hdinfo.stime, _hdinfo.rtime)) * 10,
hdinfo: _hdinfo hdinfo: _hdinfo
}); });
} }

View File

@ -20,7 +20,7 @@ export default async function (call: ApiCall<ReqRec, ResRec>) {
let db = await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType }); let db = await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType });
if (db.recIndex.includes(call.req.index)) return call.error('', { code: -2 }); if (db.recIndex.includes(call.req.index)) return call.error('', { code: -2 });
let payNum = await PayFun.getPayDaysAllPayNum(call.uid, _hdinfo.stime, _hdinfo.rtime); let payNum = (await PayFun.getPayDaysAllPayNum(call.uid, _hdinfo.stime, _hdinfo.rtime)) * 10;
if (payNum < conf.total) return call.error('', { code: -3 }); if (payNum < conf.total) return call.error('', { code: -3 });
await PlayerFun.sendPrize(call, conf.prize); await PlayerFun.sendPrize(call, conf.prize);

View File

@ -26,10 +26,10 @@ export async function playerCanReceive(call: ApiCall, callError : boolean = true
} }
activityId = activityInfo.hdid; activityId = activityInfo.hdid;
const hasReceivedKey = hasGotKeyPrefix + activityId; const hasReceivedKey = hasGotKeyPrefix + activityId;
const hasReceivedStr = await G.iorediscross.get(hasReceivedKey); const hasReceivedStr = await G.crossioredis.get(hasReceivedKey);
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0; const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
const remaining = activityInfo.data['totalmoney'] - hasReceived; const remaining = activityInfo.data['totalmoney'] - hasReceived;
const showOffResult = await G.iorediscross.lrange(showOffListKeyPrefix + activityId, 0, -1); const showOffResult = await G.crossioredis.lrange(showOffListKeyPrefix + activityId, 0, -1);
const showOffList = showOffResult.map(result => JSON.parse(result)); const showOffList = showOffResult.map(result => JSON.parse(result));
const zeroTime = PublicShared.getToDayZeroTime(); const zeroTime = PublicShared.getToDayZeroTime();
const vipScore = await ActionLog.getDayLog(call.uid, 'pay'); const vipScore = await ActionLog.getDayLog(call.uid, 'pay');

View File

@ -71,12 +71,12 @@ export default async function (call: ApiCall<ReqReceive, ResReceive>) {
} }
const activityData = canReceiveResult.activityInfo.data; const activityData = canReceiveResult.activityInfo.data;
// 更新 redis 领取记录之前先加锁, 防止多领 // 更新 redis 领取记录之前先加锁, 防止多领
const lockResult = await G.iorediscross.setnx(hasGotLockKey, 1); const lockResult = await G.crossioredis.setnx(hasGotLockKey, 1);
if (lockResult) { if (lockResult) {
await G.iorediscross.expire(hasGotLockKey, 1); // 设置 ttl 避免死锁 await G.crossioredis.expire(hasGotLockKey, 1); // 设置 ttl 避免死锁
const activityId = call.req.activityId; const activityId = call.req.activityId;
const hasReceivedKey = hasGotKeyPrefix + activityId; const hasReceivedKey = hasGotKeyPrefix + activityId;
const hasReceivedStr = await G.iorediscross.get(hasReceivedKey); const hasReceivedStr = await G.crossioredis.get(hasReceivedKey);
const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0; const hasReceived = hasReceivedStr? parseInt(hasReceivedStr) : 0;
const remaining = activityData['totalmoney'] - hasReceived; const remaining = activityData['totalmoney'] - hasReceived;
if (remaining <= 0) { if (remaining <= 0) {
@ -86,8 +86,8 @@ export default async function (call: ApiCall<ReqReceive, ResReceive>) {
} else { } else {
const { group, maxAmount } = randomWithWeight(activityData['groupConf']['base']['arr']); const { group, maxAmount } = randomWithWeight(activityData['groupConf']['base']['arr']);
const gotAmount = calcDiamondGot(remaining, group, maxAmount); const gotAmount = calcDiamondGot(remaining, group, maxAmount);
await G.iorediscross.incrby(hasReceivedKey, Math.abs(gotAmount)); // 添加已领取的额度 await G.crossioredis.incrby(hasReceivedKey, Math.abs(gotAmount)); // 添加已领取的额度
await G.iorediscross.del(hasGotLockKey); // 移除锁 await G.crossioredis.del(hasGotLockKey); // 移除锁
await PlayerFun.sendPrize(call, [{ 'a': 'attr', 't': 'rmbmoney', 'n': gotAmount }]); await PlayerFun.sendPrize(call, [{ 'a': 'attr', 't': 'rmbmoney', 'n': gotAmount }]);
const showOff = gotAmount >= activityData['groupConf']['base']['loglimit']; const showOff = gotAmount >= activityData['groupConf']['base']['loglimit'];
call.succ({ // 领取核心逻辑完成, 请求可以返回了 call.succ({ // 领取核心逻辑完成, 请求可以返回了
@ -108,8 +108,8 @@ export default async function (call: ApiCall<ReqReceive, ResReceive>) {
name: call.conn.gud.name, gotAmount, serverID: call.conn.gud.sid name: call.conn.gud.name, gotAmount, serverID: call.conn.gud.sid
}); });
const showOffListKey = showOffListKeyPrefix + activityId; const showOffListKey = showOffListKeyPrefix + activityId;
await G.iorediscross.lpush(showOffListKey, msg); await G.crossioredis.lpush(showOffListKey, msg);
await G.iorediscross.ltrim(showOffListKey, 0, 49); // 限制列表保存 50 条消息, 避免无限增长 await G.crossioredis.ltrim(showOffListKey, 0, 49); // 限制列表保存 50 条消息, 避免无限增长
} }
} }
} else { } else {

View File

@ -4,13 +4,13 @@ import {HuoDongFun} from "../../../public/huodongfun";
/** /**
* *
* redis缓存120秒 * redis缓存60秒
* *
* @param call * @param call
*/ */
export default async function (call: ApiCall<ReqOpen, ResOpen>) { export default async function (call: ApiCall<ReqOpen, ResOpen>) {
let ioList = await G.ioredis.get(`rank:xiaofeijingsai`); let ioList = await G.crossioredis.get(`rank:xiaofeijingsai`);
if (ioList) { if (ioList) {
let myData = await getMyData(call, JSON.parse(ioList)) let myData = await getMyData(call, JSON.parse(ioList))
return call.succ({list: JSON.parse(ioList), myData}) return call.succ({list: JSON.parse(ioList), myData})
@ -21,28 +21,27 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || call.req.limit || 100 let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || call.req.limit || 100
let rmbuse = await G.mongodb.collection('rmbuse').aggregate([ let rmbuse = await G.crossmongodb.collection('rmbuse').find({
{$match: {isAdd: false, cTime: {$gte: _hd.stime, $lte: _hd.etime}}}, time: {
{$group: {_id: "$uid", total: {$sum: "$change"}}}, $gte: _hd.stime,
{$sort: {total: 1}}, $lte: _hd.etime + 10
{$limit: limit} }
]).toArray() }).sort({change: 1}).limit(limit).toArray()
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.total)}))
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.change)}))
let rankList = sortRankList(_hd.data.rank, list) let rankList = sortRankList(_hd.data.rank, list)
let users = await G.mongodb.collection('user').find({uid: {$in: rankList.map(i => i._id).filter(i => i._id != 'system')}}).toArray() let users = await G.crossmongodb.collection('huodong_user').find({uid: {$in: rankList.map(i => i._id).filter(i => i._id != 'system')}}).toArray()
rankList = rankList.map(i => ({...i, player: users.find(v => v.uid == i._id) || {}})) rankList = rankList.map(i => ({...i, player: users.find(v => v.uid == i._id) || {}}))
// 活动结束前半小时缓存过期时间改为10秒 // 活动结束前半小时缓存过期时间改为10秒
let exTime = (G.time + 1800) > _hd.etime ? 10 : 120 let exTime = (G.time + 1800) > _hd.etime ? 10 : 60
G.ioredis.setex(`rank:xiaofeijingsai`, exTime, JSON.stringify(rankList)); G.crossioredis.setex(`rank:xiaofeijingsai`, exTime, JSON.stringify(rankList));
let myData = await getMyData(call, rankList, _hd) let myData = await getMyData(call, rankList)
call.succ({list: rankList, myData}) call.succ({list: rankList, myData})
} }
@ -69,19 +68,14 @@ export function sortRankList(rank, list) {
} }
// 获取自己的信息 // 获取自己的信息
async function getMyData(call, rankList, _hd?) { async function getMyData(call, rankList) {
let myData = rankList.find(i => i._id == call.uid) let myData = rankList.find(i => i._id == call.uid)
if (myData) return myData if (myData) return myData
if (!_hd) { let myCut: any = await G.crossmongodb.collection('rmbuse').findOne({uid: call.uid})
_hd = (await HuoDongFun.gethdList(call, 11))[0]
}
let myCut = (await G.mongodb.collection('rmbuse').aggregate([
{$match: {uid: call.uid, isAdd: false, cTime: {$gte: _hd.stime, $lte: _hd.etime}}},
{$group: {_id: "$uid", total: {$sum: "$change"}}}
]).toArray())[0]
let myUser = await G.mongodb.collection('user').findOne({uid: call.uid}) let myUser = await G.mongodb.collection('user').findOne({uid: call.uid})
G.crossmongodb.collection('huodong_user').updateOne({uid: call.uid}, myUser, {upsert: true})
if (!myCut) { if (!myCut) {
myCut = {_id: myUser.uid, total: 0} myCut = {_id: myUser.uid, total: 0}

View File

@ -0,0 +1,35 @@
import {ApiCall} from "tsrpc";
import {ReqDMRec, ResDMRec} from "../../../shared/protocols/event/yuandan/PtlDMRec";
import {HuoDongFun} from "../../../public/huodongfun";
import {PlayerFun} from "../../../public/player";
import {HongDianChange} from "../../hongdian/fun";
import {PublicShared} from "../../../shared/public/public";
export default async function (call: ApiCall<ReqDMRec, ResDMRec>) {
// 查询活动是否存在
let _hd = (await HuoDongFun.gethdList(call, 14))[0]
if (!_hd) return call.errorCode(-1)
// 扣除免费次数或相应货币
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
let rec = data?.gameNum
if (rec && rec >= _hd.data?.gamefree) {
await PlayerFun.checkNeedIsMeet(call, _hd.data.gameneed);
await PlayerFun.cutNeed(call, _hd.data.gameneed);
}
let prize = []
if (call.req.id) {
prize = PublicShared.randomDropGroup('1', 1, {'1': _hd.data.game});
await PlayerFun.sendPrize(call, prize);
}
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
$inc: {[`gameNum`]: 1},
}, {upsert: true})
call.succ({prize})
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
}

View File

@ -0,0 +1,36 @@
import {ApiCall} from "tsrpc";
import {ReqDZRec, ResDZRec} from "../../../shared/protocols/event/yuandan/PtlDZRec";
import {HuoDongFun} from "../../../public/huodongfun";
import {PlayerFun} from "../../../public/player";
import {HongDianChange} from "../../hongdian/fun";
export default async function (call: ApiCall<ReqDZRec, ResDZRec>) {
// 查询活动是否有当前领奖的免费选项
let _hd = (await HuoDongFun.gethdList(call, 14))[0]
let gift = _hd?.data?.gift?.find(i => i.free && i.id == call.req.id)
if (!gift) return call.errorCode(-1)
// 超出限购次数
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
let rec = data?.gift?.[call.req.id]
if (rec && rec >= gift.buynum) return call.errorCode(-2)
// 奖励不符合,严格判断
let dlzList = R.flatten(gift.dlz.map(i => R.values(i)))
call.req.dlz.map(i => {
let item = dlzList.find(v => i.a == v.a && i.t == v.t && i.n == v.n)
if (!item) call.errorCode(-4)
})
let prize = [...gift.prize, ...call.req.dlz]
await PlayerFun.sendPrize(call, prize);
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
$set: {[`gift.${gift.id}`]: prize},
}, {upsert: true})
call.succ({[gift.id]: prize})
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
}

View File

@ -0,0 +1,29 @@
import {ApiCall} from "tsrpc";
import {ReqExchange, ResExchange} from "../../../shared/protocols/event/yuandan/PtlExchange";
import {HuoDongFun} from "../../../public/huodongfun";
import {PlayerFun} from "../../../public/player";
import {HongDianChange} from "../../hongdian/fun";
export default async function (call: ApiCall<ReqExchange, ResExchange>) {
// 礼包不存在
let _hd = (await HuoDongFun.gethdList(call, 14))[0]
let gift = _hd?.data?.duihuan?.find(i => i.id == call.req.id)
if (!gift) return call.errorCode(-1)
// 超出限购次数
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
let rec = data?.exchange?.[call.req.id]
if (rec && rec >= gift?.buyNum) return call.errorCode(-2)
await PlayerFun.checkNeedIsMeet(call, gift.need);
await PlayerFun.cutNeed(call, gift.need)
await PlayerFun.sendPrize(call, gift.prize);
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
$inc: {[`exchange.${gift.id}`]: 1},
}, {upsert: true})
call.succ({})
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
}

View File

@ -0,0 +1,16 @@
import {ApiCall} from "tsrpc";
import {ReqOpen, ResOpen} from "../../../shared/protocols/event/yuandan/PtlOpen";
import {HuoDongFun} from "../../../public/huodongfun";
import {PayFun} from "../../../public/pay";
import {Yuandanfun} from "./fun";
export default async function (call: ApiCall<ReqOpen, ResOpen>) {
let _hd = await Yuandanfun.getCon(call)
let payIds = _hd.data.gift.filter(i => i.payid).map(i => i.payid)
call.succ({
data: await Yuandanfun.getData(call, _hd.hdid),
payLog: await PayFun.getPayLogs(call.uid, payIds)
})
}

View File

@ -0,0 +1,37 @@
import { ApiCall } from "tsrpc";
import { ReqTaskRec, ResTaskRec } from "../../../shared/protocols/event/yuandan/PtlTaskRec";
import {Yuandanfun, Yuandanfun as Christmasfun} from "./fun";
import {HongDianChange} from "../../hongdian/fun";
import {PlayerFun} from "../../../public/player";
export default async function (call: ApiCall<ReqTaskRec, ResTaskRec>) {
let _hd = await Christmasfun.getCon(call)
let taskid = call.req.taskid;
let _con = _hd.data.task[taskid];
if (!_con) {
// 任务id 不存在
return call.error('', { code: -1, message: globalThis.lng.yangchengmubiao_2 })
}
let _mydata = await Yuandanfun.getData(call, _hd.hdid)
if (_mydata.taskval[taskid] < _con.pval) {
// 任务未完成
return call.error('', { code: -2, message: globalThis.lng.yangchengmubiao_3 })
}
if (_mydata.taskfinish.includes(taskid)) {
// 任务已领取
return call.error('', { code: -3, message: globalThis.lng.yangchengmubiao_4 })
}
_mydata.taskfinish.push(taskid)
let _setData = {}
_setData["taskfinish"] = _mydata.taskfinish
await Yuandanfun.setData(call.uid, _hd.hdid, { $set: _setData })
let _prize = _con.prize
await PlayerFun.sendPrize(call, _prize);
let changedata = { data: _mydata, prize: _prize}
// 推送红点
HongDianChange.sendChangeKey(call.uid, ['huodonghd']);
call.succ(changedata);
}

View File

@ -0,0 +1,44 @@
import {ApiCall} from "tsrpc";
import {ReqZLRec, ResZLRec} from "../../../shared/protocols/event/yuandan/PtlZLRec";
import {HuoDongFun} from "../../../public/huodongfun";
import {PlayerFun} from "../../../public/player";
import {HongDianChange} from "../../hongdian/fun";
import {Yuandanfun} from "./fun";
import {PublicShared} from "../../../shared/public/public";
export default async function (call: ApiCall<ReqZLRec, ResZLRec>) {
let _hd = await Yuandanfun.getCon(call)
if (!_hd) return call.errorCode(-1)
// 查询是否存在当前传入id的礼品
let gift = _hd?.data?.qiandao?.[call.req.id]
if (!gift) return call.errorCode(-2)
// 奖励已领取
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
let rec = data?.qiandao?.[call.req.id]
if (rec) return call.errorCode(-3)
if (data && data.qiandaoTime && PublicShared.chkSameDate(data.qiandaoTime, G.time)) {
return call.errorCode(-4)
}
// 奖励不符合,严格判断
let dlzList = R.flatten(gift.dlz.map(i => R.values(i)))
call.req.dlz.map(i => {
let item = dlzList.find(v => i.a == v.a && i.t == v.t && i.n == v.n)
if (!item) call.errorCode(-5)
})
let prize = [...gift.prize, ...call.req.dlz]
await PlayerFun.sendPrize(call, prize);
await G.mongodb.cEvent(`yuandan${_hd.hdid}`).updateOne({uid: call.uid, type: `yuandan${_hd.hdid}`}, {
$set: {[`qiandao.${call.req.id}`]: prize, qiandaoTime: G.time},
}, {upsert: true})
call.succ({[call.req.id]: prize})
HongDianChange.sendChangeKey(call.uid, ['yuandan']);
}

View File

@ -0,0 +1,116 @@
import {ApiCall} from 'tsrpc';
import {HuoDongFun} from '../../../public/huodongfun';
import {christmas} from '../../../shared/protocols/event/christmas/PtlOpen';
import {PublicShared} from '../../../shared/public/public';
import {PayFun} from "../../../public/pay";
export class Yuandanfun {
/**配置 */
static async getCon(call: ApiCall) {
return (await HuoDongFun.gethdList(call, 14))[0]
}
/**获取我的数据 */
static async getData(call: ApiCall, hdid: number) {
let data = await G.mongodb.cEvent(`yuandan${hdid}`).findOne({uid: call.uid, type: `yuandan${hdid}`})
if (!data || !data.refreshTime || !PublicShared.chkSameDate(data.refreshTime, G.time)) {
// 刷新每日任务
data = (await G.mongodb.cEvent(`yuandan${hdid}`).findOneAndUpdate({uid: call.uid, type: `yuandan${hdid}`}, {
$set: {
gameNum: 0,
gift: {},
exchange: {},
taskfinish: [],
taskval: await this.getTaskVal(call),
qiandaoTime: data?.qiandaoTime || 0,
refreshTime: G.time
},
}, {upsert: true, returnDocument: 'after'})).value
this.refreshPayLog(call)
}
return data
}
static async refreshPayLog(call: ApiCall) {
let _hd = await this.getCon(call)
let payIds = _hd?.data?.gift?.filter(i=>i.payId).map(i=>i.payId)
PayFun.delPayLog(call.uid, ...payIds.map(i => {
return {payId: i, val: []}
}))
}
/**获取所有taskid 及对应的值 */
static async getTaskVal(call: ApiCall) {
let _initCon = await this.getCon(call)
let _tasks = _initCon.data.task
let _res = {}
for (let index = 0; index < Object.keys(_tasks).length; index++) {
const element = Object.keys(_tasks)[index];
let _tmp = _tasks[element]
_tmp["id"] = element
// 每日登录直接完成
if (_tmp.stype == "128") {
_res[element] = 1
} else {
_res[element] = 0
}
}
return _res
}
/**设置数据 */
static async setData(uid: string, hdid: number, set: {}) {
await G.mongodb.cEvent(`yuandan${hdid}`).updateOne(
{uid: uid, type: `yuandan${hdid}`},
set
)
}
/**设置任务 */
static async setTaskVal(call: ApiCall, stype: number, val: number, chkCall: Function, chkval: number = 0, isinc: number = 0, alchangeVal: Function, arg) {
// 活动过期,不计数
let _hd = await this.getCon(call)
if (!_hd) return
// let _mydata = await Christmasfun.getMyData(call, hdid)
let _tasks = _hd.data.task
let _setData = {
$inc: {},
$set: {}
}
let isset = 0
for (let indextask = 0; indextask < Object.keys(_tasks).length; indextask++) {
const ele = Object.keys(_tasks)[indextask];
// 具体任务配置
let _taskCon = _tasks[ele]
if (_taskCon.stype != stype) continue
let _pval = _taskCon.pval
// 不符合任务要求
if (!(await chkCall(_taskCon["cond"], chkval, arg))) continue
// 根据需求改写
val = await alchangeVal(call, _taskCon, val, arg)
isset = 1
if (isinc == 1) { // 累加
_setData["$inc"][`taskval.${ele}`] = val
} else {
_setData["$set"][`taskval.${ele}`] = val
}
}
// 设置任务
if (isset == 1) {
await G.mongodb.collection('event').updateOne(
{uid: call.uid, type: `yuandan${_hd.hdid}`},
_setData
)
}
}
}

View File

@ -15,10 +15,21 @@ export default async function (call: ApiCall<ReqBuy, ResBuy>) {
let conf = _hdinfo.data.gift[call.req.index]; let conf = _hdinfo.data.gift[call.req.index];
if (!conf || conf.payId) return call.errorCode(-1); if (!conf || conf.payId) return call.errorCode(-1);
let selectPrize = conf.prize.map((v, i) => v[call.req.prizeIndex[i]]).filter(p => !!p); let data = await G.mongodb.cEvent(_dbType).findOne({uid: call.uid, type: _dbType})
if (selectPrize.length < conf.prize.length) return call.errorCode(-2); let rec = data?.rec?.[call.req.index]
if (rec) return call.errorCode(-3)
// 奖励不符合,严格判断
let dlzList = R.flatten(conf.dlz.map(i => R.values(i)))
call.req.dlz.map(i => {
let item = dlzList.find(v => i.a == v.a && i.t == v.t && i.n == v.n)
if (!item) call.errorCode(-4)
})
let event = (await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType }));
let buyNum = R.values(event?.rec)?.length || 0
let buyNum = (await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType }))?.record?.[call.req.index] || 0;
if (buyNum >= conf.buyNum) return call.errorCode(-3); if (buyNum >= conf.buyNum) return call.errorCode(-3);
if (conf.need.length > 0) { if (conf.need.length > 0) {
@ -26,15 +37,15 @@ export default async function (call: ApiCall<ReqBuy, ResBuy>) {
await PlayerFun.cutNeed(call, conf.need); await PlayerFun.cutNeed(call, conf.need);
} }
await PlayerFun.sendPrize(call, selectPrize); let prize = [...conf.prize,...call.req.dlz]
G.mongodb.cEvent(_dbType).updateOne( await PlayerFun.sendPrize(call, prize);
{ uid: call.uid, type: _dbType },
{ $inc: G.mongodb.createTreeObj({ key: `record.${call.req.index}`, val: 1 }) }, await G.mongodb.cEvent(_dbType).updateOne({uid: call.uid, type: _dbType}, {
{ upsert: true } $set: {[`rec.${call.req.index}`]: prize},
); }, {upsert: true})
call.succ({ call.succ({
prize: selectPrize prize: prize
}); });
} }

View File

@ -13,7 +13,7 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
let db = await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType }); let db = await G.mongodb.cEvent(_dbType).findOne({ uid: call.uid, type: _dbType });
call.succ({ call.succ({
record: db?.record || {}, rec: db?.rec || {},
hdinfo: _hdinfo hdinfo: _hdinfo
}); });
} }

View File

@ -8,4 +8,11 @@ export default async function (call: ApiCall<ReqhdGetList, ReshdGetList>) {
let _hdList = await HuoDongFun.gethdList(call) let _hdList = await HuoDongFun.gethdList(call)
call.succ({hdlist: _hdList}); call.succ({hdlist: _hdList});
// 消费竞赛是跨服活动,活动开启时,同步当前用户信息到跨服数据库
G.huodong.xfjs = !!_hdList.find(i => i.htype == 11);
if (G.huodong.xfjs) {
let myUser = await G.mongodb.collection('user').findOne({uid: call.uid})
G.crossmongodb.collection('huodong_user').updateOne({uid: call.uid}, {$set: myUser}, {upsert: true})
}
} }

View File

@ -348,6 +348,10 @@ export class HuoDongHongDianFun {
// 检测 htype 10 破冰活动红点 // 检测 htype 10 破冰活动红点
ishd = await this.pobinglibao(call, element) ishd = await this.pobinglibao(call, element)
} }
if (element.htype == 14) {
// 检测 htype 10 破冰活动红点
ishd = await this.yuandan(call, element)
}
// 此活动有红点 // 此活动有红点
if (ishd.show) { if (ishd.show) {
@ -362,7 +366,7 @@ export class HuoDongHongDianFun {
/**破冰礼包红点 */ /**破冰礼包红点 */
static async pobinglibao(call: ApiCall, _hd: ReqAddHuoDong): Promise<hongdianVal> { static async pobinglibao(call: ApiCall, _hd: ReqAddHuoDong): Promise<hongdianVal> {
let gift = _hd?.data?.gift?.find(i => i.id == call.req.id) let gift = _hd?.data?.gift?.find(i => i.free == true && !i.payId)
if (!gift) return {show: false} if (!gift) return {show: false}
let payLog = await PayFun.getPayLog(call.uid, gift.payId) let payLog = await PayFun.getPayLog(call.uid, gift.payId)
@ -376,6 +380,31 @@ export class HuoDongHongDianFun {
return {show: true} return {show: true}
} }
/**元旦活动红点 */
static async yuandan(call: ApiCall, _hd: ReqAddHuoDong): Promise<hongdianVal> {
let gift = _hd?.data?.gift?.find(i => i.free && !i.payId)
// 取奖励列表,判断是否有可领取奖励
let data = await G.mongodb.cEvent(`yuandan${_hd.hdid}`).findOne({uid: call.uid, type: `yuandan${_hd.hdid}`})
if (gift && !data?.gift?.[gift.id]) return {show: true}
if (data?.gameNum < _hd.data.gamefree) return {show: true}
if (!PublicShared.chkSameDate(data?.qiandaoTime || 0, G.time)) {
return {show: true}
}
for (let i = 1; i++; i <= data.taskval.length) {
if (data?.taskval[i] >= _hd?.data?.task?.[i]?.pval && !data?.taskfinish.find(v => v == i + '')) {
return {show: true}
}
}
return {show: false}
}
/**开服狂欢红点 */ /**开服狂欢红点 */
static async kfkhHongDian(call: ApiCall) { static async kfkhHongDian(call: ApiCall) {
let _res: hongdianVal = { let _res: hongdianVal = {
@ -829,7 +858,7 @@ export class HuoDongHongDianFun {
static async zixuanlibaoHongDian(call: ApiCall, hdCon: ReqAddHuoDong): Promise<hongdianVal> { static async zixuanlibaoHongDian(call: ApiCall, hdCon: ReqAddHuoDong): Promise<hongdianVal> {
let _dbType: `zixuanlibao${number}` = `zixuanlibao${hdCon.hdid}` let _dbType: `zixuanlibao${number}` = `zixuanlibao${hdCon.hdid}`
let db = await G.mongodb.cEvent(_dbType).findOne({uid: call.uid, type: _dbType}); let db = await G.mongodb.cEvent(_dbType).findOne({uid: call.uid, type: _dbType});
if (!db?.record?.[0]) { if (!db?.rec) {
return {show: true} return {show: true}
} }

View File

@ -27,4 +27,7 @@ export default async function (call: ApiCall<ReqOpen, ResOpen>) {
...data, ...data,
...enemy ...enemy
}); });
}
JJCFun.checkUpdatePlayer()
}

View File

@ -20,4 +20,9 @@ export default async function (call: ApiCall<ReqPing, ResPing>) {
onlineTime: onlineTime, onlineTime: onlineTime,
openDay: PublicShared.getOpenServerDay() openDay: PublicShared.getOpenServerDay()
}); });
G.server.sendMsgByUid(call.uid, 'msg_s2c/PlayerChange', {
jinbi: call.conn.gud.jinbi,
rmbmoney: call.conn.gud.rmbmoney
});
} }

View File

@ -38,9 +38,7 @@ export default async function (call: ApiCall<ReqAllGet, ResAllGet>) {
} }
// XstaskFun.delTask(call.uid, task._id); // XstaskFun.delTask(call.uid, task._id);
XstaskFun.changeInfo(call.uid, change); XstaskFun.changeInfo(call.uid, change);
await PlayerFun.sendPrize(call, taskConf.prize);
HongDianChange.sendChangeKey(call.uid, ['xstaskhd', 'huodonghd']); HongDianChange.sendChangeKey(call.uid, ['xstaskhd', 'huodonghd']);
if (!tequan) { if (!tequan) {
prizeArr.push(...taskConf.prize) prizeArr.push(...taskConf.prize)
} else { } else {
@ -48,8 +46,9 @@ export default async function (call: ApiCall<ReqAllGet, ResAllGet>) {
prizeArr.push(...taskConf.prize) prizeArr.push(...taskConf.prize)
} }
} }
prizeArr.push(...taskConf.prize) // prizeArr.push(...taskConf.prize)
} }
if (prizeArr.length > 0) await PlayerFun.sendPrize(call, prizeArr);
call.succ({ call.succ({
taskList: await XstaskFun.getAllTask(call.uid), taskList: await XstaskFun.getAllTask(call.uid),
prize: PublicShared.mergePrize(prizeArr) prize: PublicShared.mergePrize(prizeArr)

View File

@ -44,10 +44,10 @@ export function clusterPublish(key: string, data: any) {
* N个进程中使 * N个进程中使
*/ */
export function clusterRunOnce(fun) { export function clusterRunOnce(fun) {
console.log(`${process.pid}环境变量pm_id===>${process.env.pm_id}`); // console.log(`${process.pid}环境变量pm_id===>${process.env.pm_id}`);
if (process.env.pm_id == null || process.env.pm_id === '0') { if (process.env.pm_id == null || process.env.pm_id === '0') {
//非pm2启动的或是pm2下启动的第一个进程 //非pm2启动的或是pm2下启动的第一个进程
console.log("run clusterRunOnce1 ===>", process.pid) // console.log("run clusterRunOnce1 ===>", process.pid)
fun(); fun();
return; return;
} }
@ -56,7 +56,7 @@ export function clusterRunOnce(fun) {
if (firstPid == process.pid) { if (firstPid == process.pid) {
//pm2的其中一个进程 //pm2的其中一个进程
console.log("run clusterRunOnce2 ===>", process.pid) // console.log("run clusterRunOnce2 ===>", process.pid)
fun(); fun();
return; return;
} }

View File

@ -0,0 +1,81 @@
import {patchFun, patchInit} from "../patch";
class Path {
@patchFun
async fun1(a: any) {
//这里执行脚本的内容加了patchFun的函数不允许重复执行
console.log("这是第1个脚本里内容");
let _hd = G.gc.huodong.find(i => i.hdid == 4000)
if (!_hd) {
console.log('htype4没查到活动')
return
}
await G.mongodb.collection('hdinfo').findOneAndUpdate({hdid: 4000}, {$set: {data: _hd.data}})
console.log('这是第1个脚本执行完成')
return _hd
}
@patchFun
async fun2(a: any) {
//这里执行脚本的内容加了patchFun的函数不允许重复执行
console.log("这是第2个脚本里内容");
let _hd = G.gc.huodong.find(i => i.htype == 2)
if (!_hd) {
console.log('htype2没查到活动')
return
}
await G.mongodb.collection('hdinfo').updateMany({htype: 2}, {$set: {data: _hd.data}})
console.log('这是第2个脚本执行完成')
return _hd
}
@patchFun
async fun3(a: any) {
//这里执行脚本的内容加了patchFun的函数不允许重复执行
console.log("这是第3个脚本里内容");
let _hd = G.gc.huodong.filter(i => i.htype == 5)
if (!_hd.length) {
console.log('htype5没查到活动')
return
}
_hd.map(i => {
// @ts-ignore
G.mongodb.collection('hdinfo').updateOne({hdid: i.hdid}, {$set: {...i}}, {upsert: true})
})
console.log('这是第3个脚本执行完成')
return _hd
}
async run() {
await this.fun1(1);
await this.fun2(2);
await this.fun3(3);
}
}
async function main() {
await patchInit()
let patch = new Path();
await patch.run();
setInterval(() => {
console.log(new Date().format("MM-dd hh:mm:ss"));
}, 1000);
console.log("逻辑执行完成,等待退出");
}
main();

View File

@ -1,22 +1,22 @@
import EventEmitter from 'events'; import EventEmitter from 'events';
import { existsSync, readdirSync, readFileSync, writeFileSync } from 'fs'; import {existsSync, readdirSync, readFileSync, writeFileSync} from 'fs';
import { parse } from 'json5'; import {parse} from 'json5';
import * as mathjs from 'mathjs'; import * as mathjs from 'mathjs';
import { join, resolve } from 'path'; import {join, resolve} from 'path';
import { argv, env } from 'process'; import {argv, env} from 'process';
import { HttpServer, WsClient, WsServer } from 'tsrpc'; import {HttpServer, WsClient, WsServer} from 'tsrpc';
import { ServiceType as ServiceTypeCross } from './cross/protocols/serviceProto'; import {ServiceType as ServiceTypeCross} from './cross/protocols/serviceProto';
import { MyEvent } from './event'; import {MyEvent} from './event';
import { addListener, gEventType } from './globalListener'; import {addListener, gEventType} from './globalListener';
import localConfig from './localConfig'; import localConfig from './localConfig';
import { ServiceType as ServiceTypeHttp } from './monopoly/protocols/serviceProto'; import {ServiceType as ServiceTypeHttp} from './monopoly/protocols/serviceProto';
import { SchedulerManage } from './public/scheduler/scheduler'; import {SchedulerManage} from './public/scheduler/scheduler';
import { _mongodb } from './setMongodb'; import {_mongodb} from './setMongodb';
import { redisJsonFun } from './setRedis'; import {redisJsonFun} from './setRedis';
import { ResGetList } from './shared/protocols/pay/PtlGetList'; import {ResGetList} from './shared/protocols/pay/PtlGetList';
import { ServiceType as ServiceTypeWs } from './shared/protocols/serviceProto'; import {ServiceType as ServiceTypeWs} from './shared/protocols/serviceProto';
import { PublicShared } from './shared/public/public'; import {PublicShared} from './shared/public/public';
import { clusterRunOnce } from './clusterUtils'; import {clusterRunOnce} from './clusterUtils';
import * as ramda from 'ramda' import * as ramda from 'ramda'
import Redis from 'ioredis'; import Redis from 'ioredis';
@ -33,22 +33,24 @@ declare global {
type atn = { a: string, t: string | number | any, n: number; colour?: number; shiwuBuff?: any; }; type atn = { a: string, t: string | number | any, n: number; colour?: number; shiwuBuff?: any; };
/**类型过滤 */ /**类型过滤 */
type FilterConditionally<Source, Condition> = Pick< type FilterConditionally<Source, Condition> = Pick<Source,
Source,
{ {
[K in keyof Source]: Source[K] extends Condition ? K : never [K in keyof Source]: Source[K] extends Condition ? K : never
}[keyof Source] }[keyof Source]>;
>;
interface Array<T> { interface Array<T> {
/**数组随机取值 */ /**数组随机取值 */
random(): T; random(): T;
/**取一个数组在当前数组中的交集 */ /**取一个数组在当前数组中的交集 */
intersection(other: T[]): T[]; intersection(other: T[]): T[];
/**取一个数组在当前数组中的差集 */ /**取一个数组在当前数组中的差集 */
difference(other: T[]): T[]; difference(other: T[]): T[];
/**数组是否存在重复元素 */ /**数组是否存在重复元素 */
isDuplication(): boolean; isDuplication(): boolean;
/**打乱数组 */ /**打乱数组 */
shuffle(): this; shuffle(): this;
} }
@ -69,9 +71,9 @@ class _G {
/**服务器日志模式 error | debug*/ /**服务器日志模式 error | debug*/
logModel: string; logModel: string;
} = { } = {
serverType: 'msg', serverType: 'msg',
logModel: 'error' logModel: 'error'
}; };
/**当前时间对象 */ /**当前时间对象 */
date: Date; date: Date;
/**当前时间戳 */ /**当前时间戳 */
@ -93,7 +95,7 @@ class _G {
/**ioredis连接对象 */ /**ioredis连接对象 */
ioredis: Redis; ioredis: Redis;
/** 跨服 ioredis 连接对象 */ /** 跨服 ioredis 连接对象 */
iorediscross: Redis; crossioredis: Redis;
/**mongodb连接对象 */ /**mongodb连接对象 */
mongodb: _mongodb; mongodb: _mongodb;
/**crossmongodb连接对象 */ /**crossmongodb连接对象 */
@ -102,6 +104,11 @@ class _G {
/**所有玩家的充值记录 */ /**所有玩家的充值记录 */
allPlayerPayLog: k_v<ResGetList['list']> = {}; allPlayerPayLog: k_v<ResGetList['list']> = {};
/**跨服活动——消费竞赛的开启状态 */
huodong = {
xfjs: false
};
private event = new EventEmitter(); private event = new EventEmitter();
/**映射开服时间 */ /**映射开服时间 */
@ -115,7 +122,7 @@ class _G {
off(type: any, callback: any, caller?: any): void; off(type: any, callback: any, caller?: any): void;
emit(type: any, ...args: any[]): void; emit(type: any, ...args: any[]): void;
debug(): any; debug(): any;
removeAllListeners(type?:any):void; removeAllListeners(type?: any): void;
} { } {
return MyEvent as any; return MyEvent as any;
} }
@ -142,10 +149,10 @@ class _G {
} }
on<T extends keyof gEventType>(event: T, callback: gEventType[T]) { on<T extends keyof gEventType>(event: T, callback: gEventType[T]) {
return this.event.on(event, (...args)=>{ return this.event.on(event, (...args) => {
try{ try {
callback.call(this, ...args); callback.call(this, ...args);
}catch(e){ } catch (e) {
console.error(e) console.error(e)
} }
}); });
@ -166,7 +173,7 @@ class _G {
if (file.endsWith('.json5')) { if (file.endsWith('.json5')) {
let json = parse(readFileSync(join(jsonPath, file), 'utf-8')); let json = parse(readFileSync(join(jsonPath, file), 'utf-8'));
this.gc[file.split('.')[0]] = json; this.gc[file.split('.')[0]] = json;
} else if(file.endsWith('.json')) { } else if (file.endsWith('.json')) {
let json = JSON.parse(readFileSync(join(jsonPath, file), 'utf-8')); let json = JSON.parse(readFileSync(join(jsonPath, file), 'utf-8'));
this.gc[file.split('.')[0]] = json; this.gc[file.split('.')[0]] = json;
} }

View File

@ -149,6 +149,8 @@ export type gEventType = {
Class_task_156: (eventname, call, val, chkVal) => void; Class_task_156: (eventname, call, val, chkVal) => void;
/**每日获取vip经验 */ /**每日获取vip经验 */
Class_task_157: (eventname, call, val, chkVal) => void; Class_task_157: (eventname, call, val, chkVal) => void;
/**今日参与{1}次抓娃娃小游戏 */
Class_task_158: (eventname, call, val, chkVal) => void;
}; };
export function addListener() { export function addListener() {

View File

@ -16,7 +16,7 @@ export async function initIORedis() {
G.ioredis = new Redis(G.argv.serverType == 'cross' ? G.config.crossRedisUrl : G.config.redisUrl,{ G.ioredis = new Redis(G.argv.serverType == 'cross' ? G.config.crossRedisUrl : G.config.redisUrl,{
keyPrefix: preKey, keyPrefix: preKey,
}); });
G.iorediscross = new Redis(G.config.crossRedisUrl,{ G.crossioredis = new Redis(G.config.crossRedisUrl,{
keyPrefix: "cross_", keyPrefix: "cross_",
}); });
} }

View File

@ -138,5 +138,25 @@
"sicon": "icon_hspj", "sicon": "icon_hspj",
"describe": "intr_attr_describe_15", "describe": "intr_attr_describe_15",
"advancedEffects": "" "advancedEffects": ""
},
"weiwang": {
"id": "weiwang",
"name": "intr_attr_name_16",
"undefined": "影响力",
"colour": 4,
"icon": "icon_weiwang",
"sicon": "icon_weiwang",
"describe": "intr_attr_describe_16",
"advancedEffects": ""
},
"yuandanyouxi": {
"id": "yuandanyouxi",
"name": "intr_attr_name_17",
"undefined": "元旦游戏币",
"colour": 5,
"icon": "icon_xnjb",
"sicon": "icon_xnjb",
"describe": "intr_attr_describe_17",
"advancedEffects": "ani_xiangzikuang"
} }
} }

View File

@ -39,9 +39,9 @@
], ],
//段位奖励 //段位奖励
danPrize: [ danPrize: [
{ star: [49, 49], prize: [{ a: 'item', t: '605', n:3 },{ a: 'item', t: '29', n:10 },{ a: 'item', t: '38', n:3 },{ a: 'item', t: '40', n:1 }] }, { star: [49, 49], prize: [{ a: 'item', t: '605', n:3 },{ a: 'item', t: '29', n:10 },{ a: 'item', t: '631', n:3 },{ a: 'item', t: '40', n:1 }] },
{ star: [39, 48], prize: [{ a: 'item', t: '605', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '38', n:2 }] }, { star: [39, 48], prize: [{ a: 'item', t: '605', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '631', n:2 }] },
{ star: [29, 38], prize: [{ a: 'item', t: '606', n:3 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '38', n:1 }] }, { star: [29, 38], prize: [{ a: 'item', t: '606', n:3 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '631', n:1 }] },
{ star: [21, 28], prize: [{ a: 'item', t: '606', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:1000 }] }, { star: [21, 28], prize: [{ a: 'item', t: '606', n:2 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:1000 }] },
{ star: [13, 20], prize: [{ a: 'item', t: '606', n:1 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:800 }] }, { star: [13, 20], prize: [{ a: 'item', t: '606', n:1 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:800 }] },
{ star: [7, 12], prize: [{ a: 'item', t: '29', n:10 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:600 }] }, { star: [7, 12], prize: [{ a: 'item', t: '29', n:10 },{ a: 'item', t: '29', n:5 },{ a: 'item', t: '39', n:600 }] },

View File

@ -18,7 +18,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 30 "npc": 60001
}, },
"1": { "1": {
"allStar": 1, "allStar": 1,
@ -39,7 +39,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 30 "npc": 60002
}, },
"2": { "2": {
"allStar": 2, "allStar": 2,
@ -60,7 +60,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 30 "npc": 60003
}, },
"3": { "3": {
"allStar": 3, "allStar": 3,
@ -81,7 +81,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 30 "npc": 60004
}, },
"4": { "4": {
"allStar": 4, "allStar": 4,
@ -102,7 +102,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 31 "npc": 60005
}, },
"5": { "5": {
"allStar": 5, "allStar": 5,
@ -123,7 +123,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 31 "npc": 60006
}, },
"6": { "6": {
"allStar": 6, "allStar": 6,
@ -144,7 +144,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 31 "npc": 60007
}, },
"7": { "7": {
"allStar": 7, "allStar": 7,
@ -165,7 +165,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 31 "npc": 60008
}, },
"8": { "8": {
"allStar": 8, "allStar": 8,
@ -186,7 +186,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 32 "npc": 60009
}, },
"9": { "9": {
"allStar": 9, "allStar": 9,
@ -207,7 +207,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 32 "npc": 60010
}, },
"10": { "10": {
"allStar": 10, "allStar": 10,
@ -228,7 +228,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 32 "npc": 60011
}, },
"11": { "11": {
"allStar": 11, "allStar": 11,
@ -249,7 +249,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 32 "npc": 60012
}, },
"12": { "12": {
"allStar": 12, "allStar": 12,
@ -270,7 +270,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 33 "npc": 60013
}, },
"13": { "13": {
"allStar": 13, "allStar": 13,
@ -291,7 +291,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 33 "npc": 60014
}, },
"14": { "14": {
"allStar": 14, "allStar": 14,
@ -312,7 +312,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 33 "npc": 60015
}, },
"15": { "15": {
"allStar": 15, "allStar": 15,
@ -333,7 +333,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 33 "npc": 60016
}, },
"16": { "16": {
"allStar": 16, "allStar": 16,
@ -354,7 +354,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 34 "npc": 60017
}, },
"17": { "17": {
"allStar": 17, "allStar": 17,
@ -375,7 +375,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 34 "npc": 60018
}, },
"18": { "18": {
"allStar": 18, "allStar": 18,
@ -396,7 +396,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 34 "npc": 60019
}, },
"19": { "19": {
"allStar": 19, "allStar": 19,
@ -417,7 +417,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 34 "npc": 60020
}, },
"20": { "20": {
"allStar": 20, "allStar": 20,
@ -438,7 +438,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 35 "npc": 60021
}, },
"21": { "21": {
"allStar": 21, "allStar": 21,
@ -459,7 +459,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 35 "npc": 60022
}, },
"22": { "22": {
"allStar": 22, "allStar": 22,
@ -480,7 +480,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 35 "npc": 60023
}, },
"23": { "23": {
"allStar": 23, "allStar": 23,
@ -501,7 +501,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 35 "npc": 60024
}, },
"24": { "24": {
"allStar": 24, "allStar": 24,
@ -522,7 +522,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 36 "npc": 60025
}, },
"25": { "25": {
"allStar": 25, "allStar": 25,
@ -543,7 +543,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 36 "npc": 60026
}, },
"26": { "26": {
"allStar": 26, "allStar": 26,
@ -564,7 +564,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 36 "npc": 60027
}, },
"27": { "27": {
"allStar": 27, "allStar": 27,
@ -585,7 +585,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 36 "npc": 60028
}, },
"28": { "28": {
"allStar": 28, "allStar": 28,
@ -606,7 +606,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 37 "npc": 60029
}, },
"29": { "29": {
"allStar": 29, "allStar": 29,
@ -627,7 +627,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 37 "npc": 60030
}, },
"30": { "30": {
"allStar": 30, "allStar": 30,
@ -648,7 +648,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 37 "npc": 60031
}, },
"31": { "31": {
"allStar": 31, "allStar": 31,
@ -669,7 +669,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 37 "npc": 60032
}, },
"32": { "32": {
"allStar": 32, "allStar": 32,
@ -690,7 +690,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 38 "npc": 60033
}, },
"33": { "33": {
"allStar": 33, "allStar": 33,
@ -711,7 +711,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 38 "npc": 60034
}, },
"34": { "34": {
"allStar": 34, "allStar": 34,
@ -732,7 +732,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 38 "npc": 60035
}, },
"35": { "35": {
"allStar": 35, "allStar": 35,
@ -753,7 +753,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 38 "npc": 60036
}, },
"36": { "36": {
"allStar": 36, "allStar": 36,
@ -774,7 +774,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 39 "npc": 60037
}, },
"37": { "37": {
"allStar": 37, "allStar": 37,
@ -795,7 +795,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 39 "npc": 60038
}, },
"38": { "38": {
"allStar": 38, "allStar": 38,
@ -816,7 +816,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 39 "npc": 60039
}, },
"39": { "39": {
"allStar": 39, "allStar": 39,
@ -837,7 +837,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 39 "npc": 60040
}, },
"40": { "40": {
"allStar": 40, "allStar": 40,
@ -858,7 +858,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 40 "npc": 60041
}, },
"41": { "41": {
"allStar": 41, "allStar": 41,
@ -879,7 +879,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 40 "npc": 60042
}, },
"42": { "42": {
"allStar": 42, "allStar": 42,
@ -900,7 +900,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 40 "npc": 60043
}, },
"43": { "43": {
"allStar": 43, "allStar": 43,
@ -921,7 +921,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 40 "npc": 60044
}, },
"44": { "44": {
"allStar": 44, "allStar": 44,
@ -942,7 +942,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 41 "npc": 60045
}, },
"45": { "45": {
"allStar": 45, "allStar": 45,
@ -963,7 +963,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 41 "npc": 60046
}, },
"46": { "46": {
"allStar": 46, "allStar": 46,
@ -984,7 +984,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 41 "npc": 60047
}, },
"47": { "47": {
"allStar": 47, "allStar": 47,
@ -1005,7 +1005,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 41 "npc": 60048
}, },
"48": { "48": {
"allStar": 48, "allStar": 48,
@ -1026,7 +1026,7 @@
"n": 100 "n": 100
} }
], ],
"npc": 41 "npc": 60049
}, },
"49": { "49": {
"allStar": 49, "allStar": 49,
@ -1047,6 +1047,6 @@
"n": 100 "n": 100
} }
], ],
"npc": 42 "npc": 60050
} }
} }

View File

@ -7139,6 +7139,27 @@
"rarity": 4 "rarity": 4
} }
}, },
"item^50011": {
"itemId": "item^50011",
"name": "新春安宁",
"i18nKey": "playerheadFrame_name_25",
"detailI18nKey": "intr_item_describe_50011",
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
"value": 0,
"typeId": "item",
"typeName": "道具",
"isStoreSupported": true,
"isAiSupported": true,
"attributes": {
"storeDisplayPrice": null,
"storeCategory": "",
"setQuantity": 1,
"purchaseLimit": 0,
"sellMinCp": 100,
"sellMaxCp": 500,
"rarity": 4
}
},
"item^50101": { "item^50101": {
"itemId": "item^50101", "itemId": "item^50101",
"name": "冰天雪地", "name": "冰天雪地",
@ -7223,6 +7244,27 @@
"rarity": 4 "rarity": 4
} }
}, },
"item^50105": {
"itemId": "item^50105",
"name": "新年快乐",
"i18nKey": "playerChatFrame_name_9",
"detailI18nKey": "intr_item_describe_50105",
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
"value": 0,
"typeId": "item",
"typeName": "道具",
"isStoreSupported": true,
"isAiSupported": true,
"attributes": {
"storeDisplayPrice": null,
"storeCategory": "",
"setQuantity": 1,
"purchaseLimit": 0,
"sellMinCp": 100,
"sellMaxCp": 500,
"rarity": 4
}
},
"item^50201": { "item^50201": {
"itemId": "item^50201", "itemId": "item^50201",
"name": "招贤纳士", "name": "招贤纳士",
@ -10669,7 +10711,7 @@
}, },
"attr^shengdanExp": { "attr^shengdanExp": {
"itemId": "attr^shengdanExp", "itemId": "attr^shengdanExp",
"name": "圣诞战令经验", "name": "圣诞积分",
"i18nKey": "intr_attr_name_13", "i18nKey": "intr_attr_name_13",
"detailI18nKey": "intr_attr_describe_13", "detailI18nKey": "intr_attr_describe_13",
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png", "iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
@ -10690,7 +10732,7 @@
}, },
"attr^shengdanBullet": { "attr^shengdanBullet": {
"itemId": "attr^shengdanBullet", "itemId": "attr^shengdanBullet",
"name": "圣诞打靶币", "name": "圣诞喷漆",
"i18nKey": "intr_attr_name_14", "i18nKey": "intr_attr_name_14",
"detailI18nKey": "intr_attr_describe_14", "detailI18nKey": "intr_attr_describe_14",
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png", "iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
@ -10711,7 +10753,7 @@
}, },
"attr^jingxuanbi": { "attr^jingxuanbi": {
"itemId": "attr^jingxuanbi", "itemId": "attr^jingxuanbi",
"name": "每日精选兑换币", "name": "黑市票券",
"i18nKey": "intr_attr_name_15", "i18nKey": "intr_attr_name_15",
"detailI18nKey": "intr_attr_describe_15", "detailI18nKey": "intr_attr_describe_15",
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png", "iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
@ -10729,5 +10771,47 @@
"sellMaxCp": 500, "sellMaxCp": 500,
"rarity": 4 "rarity": 4
} }
},
"attr^weiwang": {
"itemId": "attr^weiwang",
"name": "影响力",
"i18nKey": "intr_attr_name_16",
"detailI18nKey": "intr_attr_describe_16",
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
"value": 0,
"typeId": "attr",
"typeName": "货币",
"isStoreSupported": true,
"isAiSupported": true,
"attributes": {
"storeDisplayPrice": null,
"storeCategory": "",
"setQuantity": 1,
"purchaseLimit": 0,
"sellMinCp": 100,
"sellMaxCp": 500,
"rarity": 4
}
},
"attr^yuandanyouxi": {
"itemId": "attr^yuandanyouxi",
"name": "新年庆典币",
"i18nKey": "intr_attr_name_17",
"detailI18nKey": "intr_attr_describe_17",
"iconUrl": "https://ik.imagekit.io/g123/production-ctw-box/game-box/preview/6ffd84658d75d5247f7f01b2f00ae3e6beda7163237c025ff8f0a58c.png",
"value": 0,
"typeId": "attr",
"typeName": "货币",
"isStoreSupported": true,
"isAiSupported": true,
"attributes": {
"storeDisplayPrice": null,
"storeCategory": "",
"setQuantity": 1,
"purchaseLimit": 0,
"sellMinCp": 100,
"sellMaxCp": 500,
"rarity": 5
}
} }
} }

View File

@ -1413,7 +1413,7 @@
"triggerType": "openCond", "triggerType": "openCond",
"typeId": "dixialeitai_paiqian", "typeId": "dixialeitai_paiqian",
"Type": "finger", "Type": "finger",
"path": "Canvas/draw/uiRoot/uiView_dixialeitai_paiqian/dixialeitai_paiqian/ScrollView/view/content/list/item/ItemClass", "path": "Canvas/draw/uiRoot/uiView_dixialeitai_paiqian/dixialeitai_paiqian/dxlt_txdb/ScrollView/view/content/list/item/ItemClass",
"undefined": "点击第一个干部", "undefined": "点击第一个干部",
"initiative": 1, "initiative": 1,
"location": 1, "location": 1,

View File

@ -2398,7 +2398,7 @@
free: false, free: false,
payId: 'ycmb_2_1', payId: 'ycmb_2_1',
buyNum: 1, buyNum: 1,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 600},{'a': 'item', 't': '4', 'n': 10} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'item', 't': '4', 'n': 5},{'a': 'item', 't': '4', 'n': 5} ]
}, },
{ {
index: 2, index: 2,
@ -2406,7 +2406,7 @@
free: false, free: false,
payId: 'ycmb_2_2', payId: 'ycmb_2_2',
buyNum: 1, buyNum: 1,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1360},{'a': 'item', 't': '4', 'n': 20} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'item', 't': '4', 'n': 10},{'a': 'item', 't': '4', 'n': 10} ]
}, },
{ {
index: 3, index: 3,
@ -2414,7 +2414,7 @@
free: false, free: false,
payId: 'ycmb_2_3', payId: 'ycmb_2_3',
buyNum: 1, buyNum: 1,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 2560},{'a': 'item', 't': '4', 'n': 50} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'item', 't': '4', 'n': 25},{'a': 'item', 't': '4', 'n': 25} ]
}, },
{ {
index: 4, index: 4,
@ -2422,7 +2422,7 @@
free: false, free: false,
payId: 'ycmb_2_4', payId: 'ycmb_2_4',
buyNum: 3, buyNum: 3,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6560},{'a': 'item', 't': '4', 'n': 100} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'item', 't': '4', 'n': 50},{'a': 'item', 't': '4', 'n': 50} ]
}, },
{ {
index: 4, index: 4,
@ -2430,7 +2430,7 @@
free: false, free: false,
payId: 'ycmb_2_5', payId: 'ycmb_2_5',
buyNum: 10, buyNum: 10,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 12960},{'a': 'item', 't': '4', 'n': 200} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'item', 't': '4', 'n': 100},{'a': 'item', 't': '4', 'n': 100} ]
} }
], ],
//任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一 //任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一
@ -2546,7 +2546,7 @@
free: false, free: false,
payId: 'ycmb_2_1', payId: 'ycmb_2_1',
buyNum: 1, buyNum: 1,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 600},{'a': 'item', 't': '4', 'n': 10} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'attr', 't': 'rmbmoney', 'n': 300},{'a': 'item', 't': '4', 'n': 5},{'a': 'item', 't': '4', 'n': 5} ]
}, },
{ {
index: 2, index: 2,
@ -2554,7 +2554,7 @@
free: false, free: false,
payId: 'ycmb_2_2', payId: 'ycmb_2_2',
buyNum: 1, buyNum: 1,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1360},{'a': 'item', 't': '4', 'n': 20} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'attr', 't': 'rmbmoney', 'n': 680},{'a': 'item', 't': '4', 'n': 10},{'a': 'item', 't': '4', 'n': 10} ]
}, },
{ {
index: 3, index: 3,
@ -2562,7 +2562,7 @@
free: false, free: false,
payId: 'ycmb_2_3', payId: 'ycmb_2_3',
buyNum: 1, buyNum: 1,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 2560},{'a': 'item', 't': '4', 'n': 50} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'attr', 't': 'rmbmoney', 'n': 1280},{'a': 'item', 't': '4', 'n': 25},{'a': 'item', 't': '4', 'n': 25} ]
}, },
{ {
index: 4, index: 4,
@ -2570,7 +2570,7 @@
free: false, free: false,
payId: 'ycmb_2_4', payId: 'ycmb_2_4',
buyNum: 3, buyNum: 3,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6560},{'a': 'item', 't': '4', 'n': 100} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'attr', 't': 'rmbmoney', 'n': 3280},{'a': 'item', 't': '4', 'n': 50},{'a': 'item', 't': '4', 'n': 50} ]
}, },
{ {
index: 4, index: 4,
@ -2578,7 +2578,7 @@
free: false, free: false,
payId: 'ycmb_2_5', payId: 'ycmb_2_5',
buyNum: 10, buyNum: 10,
prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 12960},{'a': 'item', 't': '4', 'n': 200} ] prize: [ {'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'attr', 't': 'rmbmoney', 'n': 6480},{'a': 'item', 't': '4', 'n': 100},{'a': 'item', 't': '4', 'n': 100} ]
} }
], ],
//任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一 //任务相关 type 1 每日任务(每天刷新) 2 活动任务(轮数) 3 每日登录 4-一次性任务 任务hdid一定要唯一
@ -2672,7 +2672,7 @@
{ {
a: 'item', a: 'item',
t: '49', t: '49',
n: 6, n: 4,
p: 10, p: 10,
s: 3600 s: 3600
} }
@ -2733,7 +2733,7 @@
{ {
a: 'item', a: 'item',
t: '49', t: '49',
n: 6, n: 4,
p: 10, p: 10,
s: 3600 s: 3600
} }
@ -2892,9 +2892,12 @@
free: true, free: true,
payId: '', payId: '',
buyNum: 1, buyNum: 1,
prize: [ prize: [{a: 'attr', t: 'rmbmoney', n: 30}],
[ {a: 'attr', t: 'rmbmoney', n: 30}], dlz: [
[ {a: 'attr', t: 'jinbi', n: 50000}, {a: 'item', t: '1', n: 50000} ] {
"1":{a: 'attr', t: 'jinbi', n: 50000},
"2":{a: 'item', t: '1', n: 50000}
}
] ]
}, },
{ {
@ -2902,43 +2905,69 @@
free: false, free: false,
payId: 'zixuanlibao6', payId: 'zixuanlibao6',
buyNum: 1, buyNum: 1,
prize: [ prize: [{a: 'attr', t: 'rmbmoney', n: 60}],
[ {a: 'attr', t: 'rmbmoney', n: 60} ], dlz: [
[ {a: 'item', t: '2', n: 60}, {a: 'item', t: '12', n: 50} ], {
[ {a: 'item', t: '27', n: 1500}, {a: 'item', t: '1', n: 100000} ] "1":{a: 'item', t: '2', n: 60},
"2":{a: 'item', t: '12', n: 50}
},
{
"1":{a: 'item', t: '27', n: 1500},
"2":{a: 'item', t: '1', n: 100000}
}
] ]
}, },
{ {
need: [], need: [],
free: false, free: false,
payId: 'zixuanlibao30', payId: 'zixuanlibao30',
buyNum: 2, buyNum: 2,
prize: [ prize: [{a: 'attr', t: 'rmbmoney', n: 300}],
[ {a: 'attr', t: 'rmbmoney', n: 300} ], dlz: [
[ {a: 'item', t: '2', n: 200}, {a: 'item', t: '12', n: 100} ], {
[ {a: 'item', t: '27', n: 7000}, {a: 'item', t: '1', n: 200000} ] "1":{a: 'item', t: '2', n: 200},
"2":{a: 'item', t: '12', n: 100}
},
{
"1":{a: 'item', t: '27', n: 7000},
"2":{a: 'item', t: '1', n: 200000}
}
] ]
}, },
{ {
need: [], need: [],
free: false, free: false,
payId: 'zixuanlibao68', payId: 'zixuanlibao68',
buyNum: 2, buyNum: 2,
prize: [ prize: [{a: 'attr', t: 'rmbmoney', n: 680}],
[ {a: 'attr', t: 'rmbmoney', n: 680} ], dlz: [
[ {a: 'item', t: '18', n: 100}, {a: 'item', t: '21', n: 200}, {a: 'item', t: '9', n: 1000} ], {
[ {a: 'item', t: '27', n: 15000}, {a: 'item', t: '1', n: 300000} ] "1":{a: 'item', t: '18', n: 100},
"2":{a: 'item', t: '21', n: 200},
"3":{a: 'item', t: '9', n: 1000}
},
{
"1":{a: 'item', t: '27', n: 15000},
"2":{a: 'item', t: '1', n: 300000}
}
] ]
}, },
{ {
need: [], need: [],
free: false, free: false,
payId: 'zixuanlibao128', payId: 'zixuanlibao128',
buyNum: 2, buyNum: 2,
prize: [ prize: [{a: 'attr', t: 'rmbmoney', n: 1280}],
[ {a: 'attr', t: 'rmbmoney', n: 1280} ], dlz: [
[ {a: 'item', t: '18', n: 200}, {a: 'item', t: '9', n: 2000}, {a: 'item', t: '10', n: 200} ], {
[ {a: 'item', t: '27', n: 20000}, {a: 'item', t: '1', n: 500000} ] "1":{a: 'item', t: '18', n: 200},
"2":{a: 'item', t: '9', n: 2000},
"3":{a: 'item', t: '10', n: 200}
},
{
"1":{a: 'item', t: '27', n: 20000},
"2":{a: 'item', t: '1', n: 500000}
}
] ]
}, },
{ {
@ -2946,10 +2975,17 @@
free: false, free: false,
payId: 'zixuanlibao328', payId: 'zixuanlibao328',
buyNum: 3, buyNum: 3,
prize: [ prize: [{a: 'attr', t: 'rmbmoney', n: 3280}],
[ {a: 'attr', t: 'rmbmoney', n: 3280} ], dlz: [
[ {a: 'item', t: '600', n: 20}, {a: 'item', t: '601', n: 20}, {a: 'item', t: '616', n: 40} ], {
[ {a: 'item', t: '27', n: 50000}, {a: 'item', t: '1', n: 700000} ] "1":{a: 'item', t: '600', n: 20},
"2":{a: 'item', t: '601', n: 20},
"3":{a: 'item', t: '616', n: 40}
},
{
"1":{a: 'item', t: '27', n: 50000},
"2":{a: 'item', t: '1', n: 700000}
}
] ]
}, },
{ {
@ -2957,10 +2993,17 @@
free: false, free: false,
payId: 'zixuanlibao648', payId: 'zixuanlibao648',
buyNum: 3, buyNum: 3,
prize: [ prize: [{a: 'attr', t: 'rmbmoney', n: 6480}],
[ {a: 'attr', t: 'rmbmoney', n: 6480} ], dlz: [
[ {a: 'item', t: '600', n: 40}, {a: 'item', t: '601', n: 40}, {a: 'item', t: '616', n: 80} ], {
[ {a: 'item', t: '27', n: 100000}, {a: 'item', t: '1', n: 1000000} ] "1":{a: 'item', t: '600', n: 40},
"2":{a: 'item', t: '601', n: 40},
"3":{a: 'item', t: '616', n: 80}
},
{
"1":{a: 'item', t: '27', n: 100000},
"2":{a: 'item', t: '1', n: 1000000}
}
] ]
} }
] ]
@ -2980,15 +3023,17 @@
"showtime" : "仅供参考,会复写正确值", "showtime" : "仅供参考,会复写正确值",
"data" : { "data" : {
tasks: [ tasks: [
{ total: 100, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] }, { total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] },
{ total: 200, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]}, { total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]},
{ total: 500, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]}, { total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]},
{ total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]}, { total: 10000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]},
{ total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]}, { total: 20000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]},
{ total: 3000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]}, { total: 30000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]},
{ total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]} { total: 50000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]}
] ]
}, }
},
{
"hdid" : 5001, // 唯一活动id 累计充值 "hdid" : 5001, // 唯一活动id 累计充值
"htype" : 5, // 后端唯一识别标识 "htype" : 5, // 后端唯一识别标识
"stype" : 500, // 前端唯一识别标识(看前端需要是否修改) "stype" : 500, // 前端唯一识别标识(看前端需要是否修改)
@ -3001,15 +3046,17 @@
"showtime" : "仅供参考,会复写正确值", "showtime" : "仅供参考,会复写正确值",
"data" : { "data" : {
tasks: [ tasks: [
{ total: 100, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] }, { total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] },
{ total: 200, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]}, { total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]},
{ total: 500, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]}, { total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]},
{ total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]}, { total: 10000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]},
{ total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]}, { total: 20000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]},
{ total: 3000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]}, { total: 30000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]},
{ total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]} { total: 50000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]}
] ]
}, }
},
{
"hdid" : 5002, // 唯一活动id 累计充值 "hdid" : 5002, // 唯一活动id 累计充值
"htype" : 5, // 后端唯一识别标识 "htype" : 5, // 后端唯一识别标识
"stype" : 500, // 前端唯一识别标识(看前端需要是否修改) "stype" : 500, // 前端唯一识别标识(看前端需要是否修改)
@ -3022,15 +3069,17 @@
"showtime" : "仅供参考,会复写正确值", "showtime" : "仅供参考,会复写正确值",
"data" : { "data" : {
tasks: [ tasks: [
{ total: 100, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] }, { total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] },
{ total: 200, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]}, { total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]},
{ total: 500, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]}, { total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]},
{ total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]}, { total: 10000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]},
{ total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]}, { total: 20000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]},
{ total: 3000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]}, { total: 30000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]},
{ total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]} { total: 50000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]}
] ]
}, }
},
{
"hdid" : 5003, // 唯一活动id 累计充值 "hdid" : 5003, // 唯一活动id 累计充值
"htype" : 5, // 后端唯一识别标识 "htype" : 5, // 后端唯一识别标识
"stype" : 500, // 前端唯一识别标识(看前端需要是否修改) "stype" : 500, // 前端唯一识别标识(看前端需要是否修改)
@ -3043,16 +3092,16 @@
"showtime" : "仅供参考,会复写正确值", "showtime" : "仅供参考,会复写正确值",
"data" : { "data" : {
tasks: [ tasks: [
{ total: 100, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] }, { total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 500},{a: 'item', t: '4', n: 2}] },
{ total: 200, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]}, { total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 1000},{a: 'item', t: '12', n: 500}]},
{ total: 500, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]}, { total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 1500},{a: 'item', t: '4', n: 5}]},
{ total: 1000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]}, { total: 10000, prize: [{a: 'attr', t: 'rmbmoney', n: 2000},{a: 'item', t: '600', n: 20}]},
{ total: 2000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]}, { total: 20000, prize: [{a: 'attr', t: 'rmbmoney', n: 3000},{a: 'item', t: '609', n: 1}]},
{ total: 3000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]}, { total: 30000, prize: [{a: 'attr', t: 'rmbmoney', n: 6000},{a: 'item', t: '611', n: 1}]},
{ total: 5000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]} { total: 50000, prize: [{a: 'attr', t: 'rmbmoney', n: 10000},{a: 'item', t: '610', n: 1}]}
] ]
} }
}, },
{ {
"hdid" : 6000, // 唯一活动id 七日登录 "hdid" : 6000, // 唯一活动id 七日登录
"htype" : 6, // 后端唯一识别标识 "htype" : 6, // 后端唯一识别标识
@ -4283,5 +4332,594 @@
} }
} }
} }
} },
{
"hdid" : 14000, // 唯一活动id 元旦活动
"htype" : 14,
"stype" : 1400,
"ttype" : 4, // 0 按照开服时间计算1 玩家注册时间计算 4 屏蔽此活动
"stime" : 60,
"rtime" : 90,
"etime" : 90,
"name" : "xnhd_tips_1",
"icon" : "icon_xfdj",
"showtime" : "根据玩家注册时间,游戏返回时复写",
"data" : {
//任务
"task" : {
"1": {
"pval" : 1,
"stype" : "128",
"cond": [],
"tiaozhuan": 4,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 100
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 2
},
{
"a" : "attr",
"t" : "rmbmoney",
"n" : 200
},
{
"a" : "item",
"t" : "1",
"n" : 100000
}
],
"des" : "intr_cszl_des_1"
},
"2": {
"pval" : 300,
"stype" : "116",
"cond": [],
"tiaozhuan": 5,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 200
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 3
},
{
"a" : "item",
"t" : "600",
"n" : 5
},
{
"a" : "item",
"t" : "1",
"n" : 500000
}
],
"des" : "intr_cszl_des_2"
},
"3": {
"pval" : 1000,
"stype" : "116",
"cond": [],
"tiaozhuan": 2,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 300
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 5
},
{
"a" : "item",
"t" : "600",
"n" : 10
},
{
"a" : "item",
"t" : "1",
"n" : 1000000
}
],
"des" : "intr_cszl_des_3"
},
"4": {
"pval" : 2000,
"stype" : "116",
"cond": [],
"tiaozhuan": 1,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 150
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 2
},
{
"a" : "item",
"t" : "6",
"n" : 10
},
{
"a" : "item",
"t" : "1",
"n" : 200000
}
],
"des" : "intr_cszl_des_4"
},
"5": {
"pval" : 3,
"stype" : "142",
"cond": [2],
"tiaozhuan": 6,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 100
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 2
},
{
"a" : "item",
"t" : "2",
"n" : 500
},
{
"a" : "item",
"t" : "1",
"n" : 200000
}
],
"des" : "intr_cszl_des_5"
},
"6": {
"pval" : 3,
"stype" : "122",
"cond": [],
"tiaozhuan": 7,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 200
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 2
},
{
"a" : "item",
"t" : "12",
"n" : 400
},
{
"a" : "item",
"t" : "1",
"n" : 200000
}
],
"des" : "intr_cszl_des_6"
},
"7": {
"pval" : 1,
"stype" : "155",
"cond": [],
"tiaozhuan": 8,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 100
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 2
},
{
"a" : "attr",
"t" : "rmbmoney",
"n" : 200
},
{
"a" : "item",
"t" : "1",
"n" : 100000
}
],
"des" : "intr_cszl_des_7"
},
"8": {
"pval" : 1,
"stype" : "127",
"cond": [],
"tiaozhuan": 10,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 100
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 2
},
{
"a" : "item",
"t" : "21",
"n" : 50
},
{
"a" : "item",
"t" : "1",
"n" : 100000
}
],
"des" : "intr_cszl_des_8"
},
"9": {
"pval" : 1,
"stype" : "154",
"cond": [],
"tiaozhuan": 11,
"prize" : [
{
"a" : "attr",
"t" : "shengdanExp",
"n" : 100
},
{
"a" : "attr",
"t" : "shengdanBullet",
"n" : 2
},
{
"a" : "attr",
"t" : "jinbi",
"n" : 100000
},
{
"a" : "item",
"t" : "1",
"n" : 100000
}
],
"des" : "intr_cszl_des_9"
},
},
//玩游戏需要消耗
"gameneed": [{"a": "attr", "t":"yuandanyouxi", "n": 1}],
//游戏奖品池
"game": [
//P是权重
//gailv是显示的概率
{"a": "item", "t":"1", "n": 10000000, "p": 10, "gailv": 10},
{"a": "item", "t":"12", "n": 1000, "p": 10, "gailv": 10},
{"a": "item", "t":"2", "n": 2000, "p": 10, "gailv": 10},
{"a": "item", "t":"18", "n": 100, "p": 10, "gailv": 10},
{"a": "item", "t":"18", "n": 200, "p": 10, "gailv": 10},
{"a": "item", "t":"18", "n": 300, "p": 10, "gailv": 10},
{"a": "item", "t":"18", "n": 400, "p": 10, "gailv": 10}
],
//免费玩游戏次数
"gamefree": 3,
//钻石兑换
"duihuan": [
{id:1, need: [{a: 'attr', t: 'rmbmoney', n: 1000}], prize: [{a: 'item', t: '610', n: 1},{a: 'item', t: '2', n: 500},{a: 'item', t: '1', n: 1000}], buyNum: 2 },
{id:2, need: [{a: 'attr', t: 'rmbmoney', n: 2000}], prize: [{a: 'item', t: '610', n: 2},{a: 'item', t: '2', n: 600},{a: 'item', t: '1', n: 550}], buyNum: 1 },
{id:3, need: [{a: 'attr', t: 'rmbmoney', n: 3000}], prize: [{a: 'item', t: '610', n: 3},{a: 'item', t: '2', n: 700},{a: 'item', t: '1', n: 230}], buyNum: 1 },
{id:4, need: [{a: 'attr', t: 'rmbmoney', n: 4000}], prize: [{a: 'item', t: '610', n: 4},{a: 'item', t: '2', n: 800},{a: 'item', t: '1', n: 690}], buyNum: 3 },
{id:5, need: [{a: 'attr', t: 'rmbmoney', n: 5000}], prize: [{a: 'item', t: '610', n: 5},{a: 'item', t: '2', n: 900},{a: 'item', t: '1', n: 3300}], buyNum: 5 },
{id:6, need: [{a: 'attr', t: 'rmbmoney', n: 6000}], prize: [{a: 'item', t: '610', n: 6},{a: 'item', t: '2', n: 1000},{a: 'item', t: '1', n: 130}], buyNum: 6 }
],
//活动礼包
"gift": [
{
"id": 1,
"free": true,
"payId": "",
"buynum": 1,
//固定奖励
"prize": [{"a": "attr", "t":"rmbmoney", "n": 100}],
"des" : "intr_cszl_des_10",
//自选池
"dlz": [
{
"1": {"a": "attr", "t":"jinbi", "n": 100000},
"2": {"a": "item", "t":"1", "n": 50000}
}
]
},
{
"id": 2,
"free": false,
"payId": "xnhd_libao_1",
"buynum": 2,
"prize": [{"a": "attr", "t":"rmbmoney", "n": 120}],
"des" : "intr_cszl_des_11",
"dlz": [
{
"1": {"a": "item", "t":"2", "n": 400},
"2": {"a": "item", "t":"12", "n": 200}
},
{
"1": {"a": "attr", "t":"jinbi", "n": 1000000},
"2": {"a": "item", "t":"1", "n": 500000}
}
]
},
{
"id": 3,
"free": false,
"payId": "xnhd_libao_2",
"buynum": 2,
"prize": [{"a": "attr", "t":"rmbmoney", "n": 300}],
"des" : "intr_cszl_des_12",
"dlz": [
{
"1": {"a": "item", "t":"9", "n": 500},
"2": {"a": "item", "t":"10", "n": 100}
},
{
"1": {"a": "item", "t":"9", "n": 500},
"2": {"a": "item", "t":"10", "n": 100}
},
{
"1": {"a": "item", "t":"9", "n": 500},
"2": {"a": "item", "t":"10", "n": 100}
}
]
},
{
"id": 4,
"free": false,
"payId": "xnhd_libao_3",
"buynum": 5,
"prize": [{"a": "attr", "t":"rmbmoney", "n": 680}],
"des" : "intr_cszl_des_12",
"dlz": [
{
"1": {"a": "item", "t":"615", "n": 1},
"2": {"a": "item", "t":"18", "n": 200}
},
{
"1": {"a": "item", "t":"615", "n": 1},
"2": {"a": "item", "t":"18", "n": 200}
},
{
"1": {"a": "item", "t":"615", "n": 1},
"2": {"a": "item", "t":"18", "n": 200}
}
]
},
{
"id": 5,
"free": false,
"payId": "xnhd_libao_4",
"buynum": 9,
"prize": [{"a": "attr", "t":"rmbmoney", "n": 1280}],
"des" : "intr_cszl_des_13",
"dlz": [
{
"1": {"a": "item", "t":"600", "n": 10},
"2": {"a": "item", "t":"605", "n": 2},
"3": {"a": "item", "t":"606", "n": 1}
},
{
"1": {"a": "item", "t":"600", "n": 10},
"2": {"a": "item", "t":"605", "n": 2},
"3": {"a": "item", "t":"606", "n": 1}
},
{
"1": {"a": "item", "t":"1", "n": 5000000},
"2": {"a": "attr", "t":"jinbi", "n": 10000000}
}
]
},
{
"id": 6,
"free": false,
"payId": "xnhd_libao_5",
"buynum": 9,
"prize": [{"a": "attr", "t":"rmbmoney", "n": 3280}],
"des" : "intr_cszl_des_14",
"dlz": [
{
"1": {"a": "item", "t":"600", "n": 20},
"2": {"a": "item", "t":"5002", "n": 10},
"3": {"a": "item", "t":"5004", "n": 10}
},
{
"1": {"a": "item", "t":"600", "n": 20},
"2": {"a": "item", "t":"5002", "n": 10},
"3": {"a": "item", "t":"5004", "n": 10}
},
{
"1": {"a": "item", "t":"1", "n": 10000000},
"2": {"a": "item", "t":"12", "n": 1000},
"3": {"a": "item", "t":"2", "n": 2000},
"4": {"a": "item", "t":"18", "n": 500}
}
]
},
{
"id": 7,
"free": false,
"payId": "xnhd_libao_6",
"buynum": 9,
"prize": [{"a": "attr", "t":"rmbmoney", "n": 6480}],
"des" : "intr_cszl_des_14",
"dlz": [
{
"1": {"a": "item", "t":"600", "n": 30},
"2": {"a": "item", "t":"5002", "n": 20},
"3": {"a": "item", "t":"5004", "n": 20}
},
{
"1": {"a": "item", "t":"600", "n": 30},
"2": {"a": "item", "t":"5002", "n": 20},
"3": {"a": "item", "t":"5004", "n": 20}
},
{
"1": {"a": "item", "t":"605", "n": 4},
"2": {"a": "item", "t":"606", "n": 2},
"3": {"a": "item", "t":"18", "n": 1000},
"4": {"a": "item", "t":"23", "n": 1000000}
}
]
},
],
//签到奖励
"qiandao": {
"1": {
//固定奖励
"prize": [{"a": "attr", "t":"rmbmoney", "n": 100}],
"des" : "intr_cszl_des_10",
//自选池
"dlz": [
{
"1": {"a": "attr", "t":"jinbi", "n": 100000},
"2": {"a": "item", "t":"1", "n": 50000}
}
]
},
"2": {
"prize": [{"a": "attr", "t":"rmbmoney", "n": 120}],
"des" : "intr_cszl_des_11",
"dlz": [
{
"1": {"a": "item", "t":"2", "n": 400},
"2": {"a": "item", "t":"12", "n": 200}
},
{
"1": {"a": "attr", "t":"jinbi", "n": 1000000},
"2": {"a": "item", "t":"1", "n": 500000}
}
]
},
"3": {
"prize": [{"a": "attr", "t":"rmbmoney", "n": 300}],
"des" : "intr_cszl_des_12",
"dlz": [
{
"1": {"a": "item", "t":"9", "n": 500},
"2": {"a": "item", "t":"10", "n": 100}
},
{
"1": {"a": "item", "t":"9", "n": 500},
"2": {"a": "item", "t":"10", "n": 100}
},
{
"1": {"a": "item", "t":"9", "n": 500},
"2": {"a": "item", "t":"10", "n": 100}
}
]
},
"4": {
"prize": [{"a": "attr", "t":"rmbmoney", "n": 680}],
"des" : "intr_cszl_des_12",
"dlz": [
{
"1": {"a": "item", "t":"615", "n": 1},
"2": {"a": "item", "t":"18", "n": 200}
},
{
"1": {"a": "item", "t":"615", "n": 1},
"2": {"a": "item", "t":"18", "n": 200}
},
{
"1": {"a": "item", "t":"615", "n": 1},
"2": {"a": "item", "t":"18", "n": 200}
}
]
},
"5": {
"prize": [{"a": "attr", "t":"rmbmoney", "n": 1280}],
"des" : "intr_cszl_des_13",
"dlz": [
{
"1": {"a": "item", "t":"600", "n": 10},
"2": {"a": "item", "t":"605", "n": 2},
"3": {"a": "item", "t":"606", "n": 1}
},
{
"1": {"a": "item", "t":"600", "n": 10},
"2": {"a": "item", "t":"605", "n": 2},
"3": {"a": "item", "t":"606", "n": 1}
},
{
"1": {"a": "item", "t":"1", "n": 5000000},
"2": {"a": "attr", "t":"jinbi", "n": 10000000}
}
]
},
"6": {
"prize": [{"a": "attr", "t":"rmbmoney", "n": 3280}],
"des" : "intr_cszl_des_14",
"dlz": [
{
"1": {"a": "item", "t":"600", "n": 20},
"2": {"a": "item", "t":"5002", "n": 10},
"3": {"a": "item", "t":"5004", "n": 10}
},
{
"1": {"a": "item", "t":"600", "n": 20},
"2": {"a": "item", "t":"5002", "n": 10},
"3": {"a": "item", "t":"5004", "n": 10}
},
{
"1": {"a": "item", "t":"1", "n": 10000000},
"2": {"a": "item", "t":"12", "n": 1000},
"3": {"a": "item", "t":"2", "n": 2000},
"4": {"a": "item", "t":"18", "n": 500}
}
]
},
"7": {
"prize": [{"a": "attr", "t":"rmbmoney", "n": 6480}],
"des" : "intr_cszl_des_14",
"dlz": [
{
"1": {"a": "item", "t":"600", "n": 30},
"2": {"a": "item", "t":"5002", "n": 20},
"3": {"a": "item", "t":"5004", "n": 20}
},
{
"1": {"a": "item", "t":"600", "n": 30},
"2": {"a": "item", "t":"5002", "n": 20},
"3": {"a": "item", "t":"5004", "n": 20}
},
{
"1": {"a": "item", "t":"605", "n": 4},
"2": {"a": "item", "t":"606", "n": 2},
"3": {"a": "item", "t":"18", "n": 1000},
"4": {"a": "item", "t":"23", "n": 1000000}
}
]
}
}
}
}
] ]

View File

@ -804,7 +804,7 @@
"40": { "40": {
"id": 40, "id": 40,
"name": "intr_item_name_40", "name": "intr_item_name_40",
"undefined": "丛林狩猎霸主级玩家的特殊身份标识", "undefined": "丛林狩猎霸主级玩家的特殊身份标识使用后持续7天",
"type": 7, "type": 7,
"sort": 1, "sort": 1,
"colour": 5, "colour": 5,
@ -1230,6 +1230,16 @@
"a": "item", "a": "item",
"t": "4013", "t": "4013",
"n": 1 "n": 1
},
{
"a": "item",
"t": "4002",
"n": 1
},
{
"a": "item",
"t": "4012",
"n": 1
} }
], ],
"payId": "", "payId": "",
@ -2087,30 +2097,15 @@
"useNeed": [], "useNeed": [],
"usePrize": [], "usePrize": [],
"selecPrize": [ "selecPrize": [
{
"a": "hero",
"t": "5001",
"n": 1
},
{ {
"a": "hero", "a": "hero",
"t": "5002", "t": "5002",
"n": 1 "n": 1
}, },
{
"a": "hero",
"t": "5003",
"n": 1
},
{ {
"a": "hero", "a": "hero",
"t": "5004", "t": "5004",
"n": 1 "n": 1
},
{
"a": "hero",
"t": "5005",
"n": 1
} }
], ],
"payId": "", "payId": "",
@ -2889,10 +2884,7 @@
"type": 3, "type": 3,
"sort": 3, "sort": 3,
"colour": 6, "colour": 6,
"way": [ "way": [],
9,
75
],
"go": "", "go": "",
"icon": "icon_gbsp_5002", "icon": "icon_gbsp_5002",
"describe": "intr_item_describe_5002", "describe": "intr_item_describe_5002",
@ -2933,10 +2925,7 @@
"type": 3, "type": 3,
"sort": 3, "sort": 3,
"colour": 6, "colour": 6,
"way": [ "way": [],
9,
75
],
"go": "", "go": "",
"icon": "icon_gbsp_5004", "icon": "icon_gbsp_5004",
"describe": "intr_item_describe_5004", "describe": "intr_item_describe_5004",
@ -4024,6 +4013,7 @@
"50010": { "50010": {
"id": 50010, "id": 50010,
"name": "playerheadFrame_name_24", "name": "playerheadFrame_name_24",
"undefined": "使用后解锁头像框“披星戴月”",
"type": 7, "type": 7,
"sort": 1, "sort": 1,
"colour": 4, "colour": 4,
@ -4039,6 +4029,25 @@
"payId": "", "payId": "",
"advancedEffects": "" "advancedEffects": ""
}, },
"50011": {
"id": 50011,
"name": "playerheadFrame_name_25",
"undefined": "使用后解锁头像框“新春安宁”",
"type": 7,
"sort": 1,
"colour": 4,
"way": [],
"go": "",
"icon": "txk_029",
"sicon": "txk_029",
"describe": "intr_item_describe_50011",
"diaoluo": 25,
"useNeed": [],
"usePrize": [],
"selecPrize": [],
"payId": "",
"advancedEffects": ""
},
"50101": { "50101": {
"id": 50101, "id": 50101,
"name": "playerChatFrame_name_6", "name": "playerChatFrame_name_6",
@ -4115,6 +4124,25 @@
"payId": "", "payId": "",
"advancedEffects": "" "advancedEffects": ""
}, },
"50105": {
"id": 50105,
"name": "playerChatFrame_name_9",
"undefined": "使用后解锁聊天框“新年快乐”",
"type": 8,
"sort": 1,
"colour": 4,
"way": [],
"go": "",
"icon": "lt_dhk15",
"sicon": "lt_dhk15",
"describe": "intr_item_describe_50105",
"diaoluo": 9,
"useNeed": [],
"usePrize": [],
"selecPrize": [],
"payId": "",
"advancedEffects": ""
},
"50201": { "50201": {
"id": 50201, "id": 50201,
"name": "playerheadFrame_name_16", "name": "playerheadFrame_name_16",

File diff suppressed because it is too large Load Diff

View File

@ -1378,5 +1378,18 @@
"display": { "display": {
"lv": 15 "lv": 15
} }
},
"weiwang": {
"name": "weiwang",
"undefined": "威望",
"and": {
"lv": 15
},
"or": {},
"time": 0,
"tips": "openCond_tips_96",
"display": {
"lv": 15
}
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -878,5 +878,355 @@
"n": 1 "n": 1
} }
] ]
},
"510": {
"id": 510,
"prize": [
{
"a": "item",
"t": "1",
"n": 1020000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"520": {
"id": 520,
"prize": [
{
"a": "item",
"t": "1",
"n": 1040000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "3009",
"n": 1
}
]
},
"530": {
"id": 530,
"prize": [
{
"a": "item",
"t": "1",
"n": 1060000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"540": {
"id": 540,
"prize": [
{
"a": "item",
"t": "1",
"n": 1080000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "2009",
"n": 1
}
]
},
"550": {
"id": 550,
"prize": [
{
"a": "item",
"t": "1",
"n": 1100000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"560": {
"id": 560,
"prize": [
{
"a": "item",
"t": "1",
"n": 1120000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "1009",
"n": 1
}
]
},
"570": {
"id": 570,
"prize": [
{
"a": "item",
"t": "1",
"n": 1140000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"580": {
"id": 580,
"prize": [
{
"a": "item",
"t": "1",
"n": 1160000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "4003",
"n": 1
}
]
},
"590": {
"id": 590,
"prize": [
{
"a": "item",
"t": "1",
"n": 1180000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"600": {
"id": 600,
"prize": [
{
"a": "item",
"t": "1",
"n": 1200000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "3003",
"n": 1
}
]
},
"610": {
"id": 610,
"prize": [
{
"a": "item",
"t": "1",
"n": 1220000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"620": {
"id": 620,
"prize": [
{
"a": "item",
"t": "1",
"n": 1240000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "2003",
"n": 1
}
]
},
"630": {
"id": 630,
"prize": [
{
"a": "item",
"t": "1",
"n": 1260000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"640": {
"id": 640,
"prize": [
{
"a": "item",
"t": "1",
"n": 1280000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "1003",
"n": 1
}
]
},
"650": {
"id": 650,
"prize": [
{
"a": "item",
"t": "1",
"n": 1300000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"660": {
"id": 660,
"prize": [
{
"a": "item",
"t": "1",
"n": 1320000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "4004",
"n": 1
}
]
},
"670": {
"id": 670,
"prize": [
{
"a": "item",
"t": "1",
"n": 1340000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"680": {
"id": 680,
"prize": [
{
"a": "item",
"t": "1",
"n": 1360000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "3004",
"n": 1
}
]
},
"690": {
"id": 690,
"prize": [
{
"a": "item",
"t": "1",
"n": 1380000
},
{
"a": "item",
"t": "12",
"n": 300
}
]
},
"700": {
"id": 700,
"prize": [
{
"a": "item",
"t": "1",
"n": 1400000
},
{
"a": "item",
"t": "12",
"n": 300
},
{
"a": "equip",
"t": "2004",
"n": 1
}
]
} }
} }

View File

@ -630,7 +630,7 @@
{ {
"a": "item", "a": "item",
"t": "1", "t": "1",
"n": 1000000 "n": 2000000
} }
], ],
"firstPayPrize": [], "firstPayPrize": [],
@ -661,7 +661,7 @@
{ {
"a": "item", "a": "item",
"t": "1", "t": "1",
"n": 2000000 "n": 5000000
} }
], ],
"firstPayPrize": [], "firstPayPrize": [],
@ -764,7 +764,7 @@
{ {
"a": "item", "a": "item",
"t": "1", "t": "1",
"n": 12000000 "n": 30000000
} }
], ],
"firstPayPrize": [], "firstPayPrize": [],
@ -4246,7 +4246,7 @@
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_mingwang_4", "name": "pay_name_mingwang_4",
"undefined": "名望礼包_128元", "undefined": "名望礼包_128元",
"time": -1, "time": 86400,
"buys": 1, "buys": 1,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -4265,8 +4265,8 @@
"prize": [], "prize": [],
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_wkdlibao_1", "name": "pay_name_wkdlibao_1",
"undefined": "周末礼包_1元", "undefined": "期间限定_1元",
"time": 86400, "time": -1,
"buys": 0, "buys": 0,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -4285,8 +4285,8 @@
"prize": [], "prize": [],
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_wkdlibao_2", "name": "pay_name_wkdlibao_2",
"undefined": "周末礼包_6元", "undefined": "期间限定_6元",
"time": 86400, "time": -1,
"buys": 0, "buys": 0,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -4305,8 +4305,8 @@
"prize": [], "prize": [],
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_wkdlibao_3", "name": "pay_name_wkdlibao_3",
"undefined": "周末礼包_30元", "undefined": "期间限定_30元",
"time": 86400, "time": -1,
"buys": 0, "buys": 0,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -4325,8 +4325,8 @@
"prize": [], "prize": [],
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_wkdlibao_4", "name": "pay_name_wkdlibao_4",
"undefined": "周末礼包_68元", "undefined": "期间限定_68元",
"time": 86400, "time": -1,
"buys": 0, "buys": 0,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -4345,8 +4345,8 @@
"prize": [], "prize": [],
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_wkdlibao_5", "name": "pay_name_wkdlibao_5",
"undefined": "周末礼包_128元", "undefined": "期间限定_128元",
"time": 86400, "time": -1,
"buys": 0, "buys": 0,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -4365,8 +4365,8 @@
"prize": [], "prize": [],
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_wkdlibao_6", "name": "pay_name_wkdlibao_6",
"undefined": "周末礼包_328元", "undefined": "期间限定_328元",
"time": 86400, "time": -1,
"buys": 0, "buys": 0,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -4385,8 +4385,8 @@
"prize": [], "prize": [],
"firstPayPrize": [], "firstPayPrize": [],
"name": "pay_name_wkdlibao_7", "name": "pay_name_wkdlibao_7",
"undefined": "周末礼包_648元", "undefined": "期间限定_648元",
"time": 86400, "time": -1,
"buys": 0, "buys": 0,
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
@ -6473,5 +6473,205 @@
"needVip": 0, "needVip": 0,
"front": {}, "front": {},
"currency": "CNY" "currency": "CNY"
},
"xnhd_libao_1": {
"id": "xnhd_libao_1",
"money": 0.5,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 5
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_1",
"undefined": "新年活动_1",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_2": {
"id": "xnhd_libao_2",
"money": 1,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 10
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_2",
"undefined": "新年活动_2",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_3": {
"id": "xnhd_libao_3",
"money": 6,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 60
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_3",
"undefined": "新年活动_3",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_4": {
"id": "xnhd_libao_4",
"money": 18,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 180
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_4",
"undefined": "新年活动_4",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_5": {
"id": "xnhd_libao_5",
"money": 30,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 300
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_5",
"undefined": "新年活动_5",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_6": {
"id": "xnhd_libao_6",
"money": 68,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 680
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_6",
"undefined": "新年活动_6",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_7": {
"id": "xnhd_libao_7",
"money": 128,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 1280
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_7",
"undefined": "新年活动_7",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_8": {
"id": "xnhd_libao_8",
"money": 198,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 1980
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_8",
"undefined": "新年活动_8",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_9": {
"id": "xnhd_libao_9",
"money": 328,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 3280
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_9",
"undefined": "新年活动_9",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
},
"xnhd_libao_10": {
"id": "xnhd_libao_10",
"money": 648,
"payExp": [
{
"a": "attr",
"t": "payExp",
"n": 6480
}
],
"prize": [],
"firstPayPrize": [],
"name": "pay_name_xnhd_libao_10",
"undefined": "新年活动_10",
"time": -1,
"buys": 0,
"needVip": 0,
"front": {},
"currency": "CNY"
} }
} }

View File

@ -241,7 +241,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
0.6 0.006
], ],
"suit": 0, "suit": 0,
"rmPrize": [ "rmPrize": [
@ -403,7 +403,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.2 0.012
], ],
"suit": 0, "suit": 0,
"rmPrize": [ "rmPrize": [
@ -590,7 +590,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 1, "suit": 1,
"rmPrize": [ "rmPrize": [
@ -782,7 +782,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 2, "suit": 2,
"rmPrize": [ "rmPrize": [
@ -974,7 +974,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 3, "suit": 3,
"rmPrize": [ "rmPrize": [
@ -1166,7 +1166,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 4, "suit": 4,
"rmPrize": [ "rmPrize": [
@ -1358,7 +1358,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 5, "suit": 5,
"rmPrize": [ "rmPrize": [
@ -1550,7 +1550,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 6, "suit": 6,
"rmPrize": [ "rmPrize": [
@ -1742,7 +1742,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 7, "suit": 7,
"rmPrize": [ "rmPrize": [
@ -1934,7 +1934,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
1.8 0.018
], ],
"suit": 8, "suit": 8,
"rmPrize": [ "rmPrize": [
@ -2126,7 +2126,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
3 0.03
], ],
"suit": 1, "suit": 1,
"rmPrize": [ "rmPrize": [
@ -2318,7 +2318,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
3 0.03
], ],
"suit": 2, "suit": 2,
"rmPrize": [ "rmPrize": [
@ -2510,7 +2510,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
3 0.03
], ],
"suit": 3, "suit": 3,
"rmPrize": [ "rmPrize": [
@ -2702,7 +2702,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
3 0.03
], ],
"suit": 4, "suit": 4,
"rmPrize": [ "rmPrize": [
@ -2894,7 +2894,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
3 0.03
], ],
"suit": 5, "suit": 5,
"rmPrize": [ "rmPrize": [
@ -3086,7 +3086,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
3 0.03
], ],
"suit": 6, "suit": 6,
"rmPrize": [ "rmPrize": [
@ -3278,7 +3278,7 @@
"conversion": [], "conversion": [],
"buff": [ "buff": [
"baoshangpro", "baoshangpro",
3 0.03
], ],
"suit": 7, "suit": 7,
"rmPrize": [ "rmPrize": [

File diff suppressed because it is too large Load Diff

View File

@ -133,7 +133,24 @@
"buff": { "buff": {
"defpro": 0.01 "defpro": 0.01
}, },
"colour": 3, "colour": 4,
"ani": ""
},
"9": {
"id": 9,
"name": "playerChatFrame_name_9",
"img": "lt_dhk15",
"cond": [
"time",
-1
],
"undefined": "新年庆典获得",
"intr": "playerChatFrame_des_9",
"sort": 9,
"buff": {
"defpro": 0.01
},
"colour": 4,
"ani": "" "ani": ""
} }
} }

View File

@ -408,5 +408,22 @@
}, },
"colour": 5, "colour": 5,
"ani": "" "ani": ""
},
"25": {
"id": 25,
"name": "playerheadFrame_name_25",
"undefined": "新年庆典活动获得,解锁后生命加成+1%",
"img": "txk_029",
"cond": [
"time",
-1
],
"intr": "playerheadFrame_des_25",
"sort": 25,
"buff": {
"hppro": 0.01
},
"colour": 4,
"ani": ""
} }
} }

5002
src/json/renown_chanchu.json Normal file

File diff suppressed because it is too large Load Diff

362
src/json/renown_level.json Normal file
View File

@ -0,0 +1,362 @@
{
"1": {
"id": 1,
"renownlevel": 1,
"maxlevel": 250,
"cost": 5,
"atk": 2,
"def": 1,
"hp": 8
},
"2": {
"id": 2,
"renownlevel": 2,
"maxlevel": 500,
"cost": 6,
"atk": 2,
"def": 1,
"hp": 9
},
"3": {
"id": 3,
"renownlevel": 3,
"maxlevel": 750,
"cost": 7,
"atk": 2,
"def": 1,
"hp": 10
},
"4": {
"id": 4,
"renownlevel": 4,
"maxlevel": 1000,
"cost": 9,
"atk": 4,
"def": 2,
"hp": 11
},
"5": {
"id": 5,
"renownlevel": 5,
"maxlevel": 1250,
"cost": 11,
"atk": 4,
"def": 2,
"hp": 12
},
"6": {
"id": 6,
"renownlevel": 6,
"maxlevel": 1500,
"cost": 13,
"atk": 4,
"def": 2,
"hp": 13
},
"7": {
"id": 7,
"renownlevel": 7,
"maxlevel": 1750,
"cost": 15,
"atk": 6,
"def": 3,
"hp": 14
},
"8": {
"id": 8,
"renownlevel": 8,
"maxlevel": 2000,
"cost": 17,
"atk": 6,
"def": 3,
"hp": 15
},
"9": {
"id": 9,
"renownlevel": 9,
"maxlevel": 2500,
"cost": 19,
"atk": 6,
"def": 3,
"hp": 16
},
"10": {
"id": 10,
"renownlevel": 10,
"maxlevel": 3000,
"cost": 21,
"atk": 8,
"def": 4,
"hp": 17
},
"11": {
"id": 11,
"renownlevel": 11,
"maxlevel": 3500,
"cost": 23,
"atk": 8,
"def": 4,
"hp": 18
},
"12": {
"id": 12,
"renownlevel": 12,
"maxlevel": 4000,
"cost": 25,
"atk": 8,
"def": 4,
"hp": 19
},
"13": {
"id": 13,
"renownlevel": 13,
"maxlevel": 4500,
"cost": 27,
"atk": 10,
"def": 5,
"hp": 20
},
"14": {
"id": 14,
"renownlevel": 14,
"maxlevel": 5000,
"cost": 30,
"atk": 10,
"def": 5,
"hp": 21
},
"15": {
"id": 15,
"renownlevel": 15,
"maxlevel": 5000,
"cost": 33,
"atk": 10,
"def": 5,
"hp": 21
},
"16": {
"id": 16,
"renownlevel": 16,
"maxlevel": 5000,
"cost": 36,
"atk": 12,
"def": 6,
"hp": 22
},
"17": {
"id": 17,
"renownlevel": 17,
"maxlevel": 5000,
"cost": 39,
"atk": 12,
"def": 6,
"hp": 22
},
"18": {
"id": 18,
"renownlevel": 18,
"maxlevel": 5000,
"cost": 42,
"atk": 12,
"def": 6,
"hp": 22
},
"19": {
"id": 19,
"renownlevel": 19,
"maxlevel": 5000,
"cost": 45,
"atk": 14,
"def": 7,
"hp": 23
},
"20": {
"id": 20,
"renownlevel": 20,
"maxlevel": 5000,
"cost": 48,
"atk": 14,
"def": 7,
"hp": 23
},
"21": {
"id": 21,
"renownlevel": 21,
"maxlevel": 5000,
"cost": 51,
"atk": 14,
"def": 7,
"hp": 23
},
"22": {
"id": 22,
"renownlevel": 22,
"maxlevel": 5000,
"cost": 54,
"atk": 14,
"def": 7,
"hp": 23
},
"23": {
"id": 23,
"renownlevel": 23,
"maxlevel": 5000,
"cost": 57,
"atk": 16,
"def": 8,
"hp": 24
},
"24": {
"id": 24,
"renownlevel": 24,
"maxlevel": 5000,
"cost": 60,
"atk": 16,
"def": 8,
"hp": 24
},
"25": {
"id": 25,
"renownlevel": 25,
"maxlevel": 5000,
"cost": 63,
"atk": 16,
"def": 8,
"hp": 24
},
"26": {
"id": 26,
"renownlevel": 26,
"maxlevel": 5000,
"cost": 66,
"atk": 16,
"def": 8,
"hp": 24
},
"27": {
"id": 27,
"renownlevel": 27,
"maxlevel": 5000,
"cost": 69,
"atk": 16,
"def": 8,
"hp": 24
},
"28": {
"id": 28,
"renownlevel": 28,
"maxlevel": 5000,
"cost": 72,
"atk": 18,
"def": 9,
"hp": 25
},
"29": {
"id": 29,
"renownlevel": 29,
"maxlevel": 5000,
"cost": 75,
"atk": 18,
"def": 9,
"hp": 25
},
"30": {
"id": 30,
"renownlevel": 30,
"maxlevel": 5000,
"cost": 78,
"atk": 18,
"def": 9,
"hp": 25
},
"31": {
"id": 31,
"renownlevel": 31,
"maxlevel": 5000,
"cost": 81,
"atk": 18,
"def": 9,
"hp": 25
},
"32": {
"id": 32,
"renownlevel": 32,
"maxlevel": 5000,
"cost": 84,
"atk": 18,
"def": 9,
"hp": 25
},
"33": {
"id": 33,
"renownlevel": 33,
"maxlevel": 5000,
"cost": 87,
"atk": 18,
"def": 10,
"hp": 25
},
"34": {
"id": 34,
"renownlevel": 34,
"maxlevel": 5000,
"cost": 90,
"atk": 18,
"def": 10,
"hp": 25
},
"35": {
"id": 35,
"renownlevel": 35,
"maxlevel": 5000,
"cost": 93,
"atk": 18,
"def": 10,
"hp": 25
},
"36": {
"id": 36,
"renownlevel": 36,
"maxlevel": 5000,
"cost": 97,
"atk": 18,
"def": 10,
"hp": 25
},
"37": {
"id": 37,
"renownlevel": 37,
"maxlevel": 5000,
"cost": 101,
"atk": 18,
"def": 10,
"hp": 25
},
"38": {
"id": 38,
"renownlevel": 38,
"maxlevel": 5000,
"cost": 105,
"atk": 18,
"def": 10,
"hp": 25
},
"39": {
"id": 39,
"renownlevel": 39,
"maxlevel": 5000,
"cost": 109,
"atk": 18,
"def": 10,
"hp": 25
},
"40": {
"id": 40,
"renownlevel": 40,
"maxlevel": 5000,
"cost": 113,
"atk": 18,
"def": 10,
"hp": 25
}
}

View File

@ -393,8 +393,8 @@
"payId": [ "payId": [
"lv15" "lv15"
], ],
"time": 3600, "time": 10800,
"displayCD": 3600, "displayCD": 10800,
"scale": 3000, "scale": 3000,
"icon": "djlb" "icon": "djlb"
}, },
@ -408,8 +408,8 @@
"payId": [ "payId": [
"lv25" "lv25"
], ],
"time": 3600, "time": 10800,
"displayCD": 3600, "displayCD": 10800,
"scale": 3000, "scale": 3000,
"icon": "djlb" "icon": "djlb"
}, },

View File

@ -23,6 +23,7 @@ import {ResOpen as ResOpenKaifujingsai} from '../shared/protocols/kaifujingsai/P
import {ResOpen as ResOpenZhoumolibao} from '../shared/protocols/event/zhoumolibao/PtlOpen'; import {ResOpen as ResOpenZhoumolibao} from '../shared/protocols/event/zhoumolibao/PtlOpen';
import {ResOpen as ResOpenPobinglibao} from '../shared/protocols/event/pobinglibao/PtlOpen'; import {ResOpen as ResOpenPobinglibao} from '../shared/protocols/event/pobinglibao/PtlOpen';
import {ResOpen as ResOpenLeiChongLiBao} from '../shared/protocols/event/leichonglibao/PtlOpen'; import {ResOpen as ResOpenLeiChongLiBao} from '../shared/protocols/event/leichonglibao/PtlOpen';
import {event as ResOpenYuandan} from '../shared/protocols/event/yuandan/PtlOpen';
export type eventType = { export type eventType = {
shouchong: { shouchong: {
@ -57,6 +58,7 @@ export type eventType = {
payForDiamond: { payForDiamond: {
[time: number]: number [time: number]: number
} }
} & { } & {
[k: `${number}jijin`]: ResOpenYuedujijin; [k: `${number}jijin`]: ResOpenYuedujijin;
[k: `yangchengmubiao${number}`]: yangchengmubiao; [k: `yangchengmubiao${number}`]: yangchengmubiao;
@ -67,6 +69,7 @@ export type eventType = {
[k: `leijichongzhi${number}`]: Omit<ResOpenLeijichongzhi, 'payNum'>; [k: `leijichongzhi${number}`]: Omit<ResOpenLeijichongzhi, 'payNum'>;
[k: `qiridenglu${number}`]: Pick<ResOpenQiridenglu, 'recPrize'>; [k: `qiridenglu${number}`]: Pick<ResOpenQiridenglu, 'recPrize'>;
[k: `leichonglibao${number}`]: ResOpenLeiChongLiBao & { opentime: number }; [k: `leichonglibao${number}`]: ResOpenLeiChongLiBao & { opentime: number };
[k: `yuandan${number}`]: ResOpenYuandan;
}; };
export type CollectionEvent<T extends keyof eventType> = { export type CollectionEvent<T extends keyof eventType> = {

View File

@ -133,4 +133,6 @@ export type MongodbCollections = {
fightLog: CollectionFightLog fightLog: CollectionFightLog
shop: CollectionShop shop: CollectionShop
pushgift:CollectionPushGift pushgift:CollectionPushGift
huodong_user: CollectionUser;
}; };

View File

@ -15,7 +15,7 @@ export function patchFun(target: any, key: string, descriptor: PropertyDescripto
throw new Error(); throw new Error();
} catch (e) { } catch (e) {
let caller = (e.stack.split("\n").slice(2)[0].split("\\").slice(-2)); let caller = (e.stack.split("\n").slice(2)[0].split("\\").slice(-2));
scriptName = caller[1].split(':')[0]; scriptName = caller[0].split('(')[1].split(':')[0];
} }
if(!scriptName){ if(!scriptName){

View File

@ -87,6 +87,45 @@ export class JJCFun {
return rankList return rankList
} }
/**
* 10
* @param min
* @param max
* @param uTimeOffset
* @param isUpdate
*/
static async checkUpdatePlayer(min: number = 0, max: number = 1000, uTimeOffset: number = 600, isUpdate: boolean = true) {
// 获取指定排名用户uid
let sortInfo = await this.getRankListUid(min, max)
if (!sortInfo.length) return []
let updateArr = []
let users = await G.redis.hGetAll('rank:jjc:data')
for (let i = 0; i < sortInfo.length; i++) {
let uid = sortInfo[i]
let rankInfo = users[uid]
if (!rankInfo?.player) continue
// 比对utime判断是否更新数据
if (!rankInfo.player.isNpc) {
if (!rankInfo.utime || (rankInfo.utime && rankInfo.utime < (G.time - uTimeOffset))) {
updateArr.push(rankInfo)
}
}
}
// 更新数据
if (isUpdate && updateArr.length > 0) {
let playerArrInfo = await G.mongodb.collection("user").find({uid: {$in: updateArr.map(i => i.uid)}}).toArray()
for (let i = 0; i < playerArrInfo.length; i++) {
let playerInfo = playerArrInfo[i]
let index = updateArr.findIndex(x => x.player.uid == playerInfo.uid)
updateArr[index].player = playerInfo
updateArr[index].utime = G.time
this.updatePlayerData(playerInfo.uid, updateArr[index]);
}
}
}
/** /**
* uid[] * uid[]
* @param min * @param min

View File

@ -75,8 +75,8 @@ export class LingZhuLaiXifun {
if (_myData && PublicShared.chkSameDate(_myData.time, G.time)) { if (_myData && PublicShared.chkSameDate(_myData.time, G.time)) {
_res = { _res = {
num: _myData.num || 0, num: _myData.num || 0,
time: _myData.time, time: _myData.time || G.time,
maxdps: _myData.maxdps maxdps: _myData.maxdps || {}
} }
} else { } else {
_res = { _res = {

View File

@ -31,6 +31,8 @@ export class PayFun {
let obj: payLog = {time: G.time, type: type}; let obj: payLog = {time: G.time, type: type};
if (conf.time != -1) obj.eTime = time + conf.time; if (conf.time != -1) obj.eTime = time + conf.time;
obj.args = payArgs
if (payId == 'G123SendGift') { if (payId == 'G123SendGift') {
obj.popup_id = payArgs.popup_id obj.popup_id = payArgs.popup_id
obj.template_id = payArgs.template_id obj.template_id = payArgs.template_id
@ -206,19 +208,20 @@ export class PayFun {
payArgs: payArgs, payArgs: payArgs,
orderNo: orderNo orderNo: orderNo
} }
if (payId.indexOf('zixuanlibao') != -1) { //改为统一方法,此处自选不这样用
// 后端唯一标识 htype 4 自选/定制 礼包 // if (payId.indexOf('zixuanlibao') != -1) {
// @ts-ignore // // 后端唯一标识 htype 4 自选/定制 礼包
let _hdList = await HuoDongFun.gethdList(call, 4) // // @ts-ignore
_hdList.forEach(ele => { // let _hdList = await HuoDongFun.gethdList(call, 4)
let selectPrize = ele.data.gift.find(v => v.payId == payId)?.prize; // _hdList.forEach(ele => {
if (prize) { // let selectPrize = ele.data.gift.find(v => v.payId == payId)?.prize;
let index = payArgs instanceof Array ? payArgs : []; // if (prize) {
let select = selectPrize.map((v, i) => v[index[i]] ? v[index[i]] : v[0]); // let index = payArgs instanceof Array ? payArgs : [];
prize.push(...select); // let select = selectPrize.map((v, i) => v[index[i]] ? v[index[i]] : v[0]);
} // prize.push(...select);
}) // }
} // })
// }
if (payId.indexOf('ycmb') != -1) { if (payId.indexOf('ycmb') != -1) {
// @ts-ignore // 养成活动充值礼包 // @ts-ignore // 养成活动充值礼包
let _hdids = await YangChengMuBiaofun.getCon(call); let _hdids = await YangChengMuBiaofun.getCon(call);
@ -235,11 +238,30 @@ export class PayFun {
let conf = await zmlbGetConf(call, {payId}) let conf = await zmlbGetConf(call, {payId})
prize.push(...conf.prize) prize.push(...conf.prize)
} }
/**
* todo
* todo
* todo emit事件
* todo
*/
//圣诞节活动充值 //圣诞节活动充值
try{ try {
await Christmasfun.payChristmas(payId, call); await Christmasfun.payChristmas(payId, call);
}catch (e) { } catch (e) {
console.log("Christmasfun.payChristmas Error",e); console.log("Christmasfun.payChristmas Error", e);
}
/**
* payArgs里传入自选项
* check里判断拦截自选项的奖励
*/
if (payArgs && payArgs?.htype && payArgs?.selectList) {
let selectPrize = await G.ioredis.get(`pay:${payId}:${player.uid}`);
if (selectPrize) {
prize.push(...JSON.parse(selectPrize))
G.ioredis.del(`pay:${payId}:${player.uid}`)
}
} }
let isReplaceConf = await this.checkBuysAfterPay(uid, payId, conf, payArgs, player) let isReplaceConf = await this.checkBuysAfterPay(uid, payId, conf, payArgs, player)
@ -399,6 +421,33 @@ export class PayFun {
if (conf.time != -1 && buyLog.slice(-1)[0]?.eTime > G.time && conf.buys == 0 && payId.indexOf('wkdlibao') == -1) { if (conf.time != -1 && buyLog.slice(-1)[0]?.eTime > G.time && conf.buys == 0 && payId.indexOf('wkdlibao') == -1) {
return G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -2}); return G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -2});
} }
/**
* htype 414
* payArgs里传相应参数selectList选择的奖励列表
* 414
*/
if (payArgs && payArgs?.htype && payArgs?.selectList) {
let call = this.getCall(player)
// @ts-ignore
let _hdInfo = (await HuoDongFun.gethdList(call, payArgs.htype))[0]
// 活动类购买不符合条件返回-5
if (!_hdInfo) G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -5})
let giftInfo = _hdInfo.data.gift.find(v => v.payId == payId);
if (!giftInfo) G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -5})
let dlzPrize = R.flatten(giftInfo.dlz.map(i => R.values(i)))
let selectPrize = payArgs.selectList.map(v => {
let sPrize = dlzPrize.find(o => o.a == v.a && o.t == v.t && o.n == v.n)
// 严格判断,自选奖励不存在奖励列表,返回-6
if (!sPrize) return G.server.sendMsgByUid(player.uid, 'msg_s2c/PayResult', {code: -6});
return sPrize
})
// 自选奖励过判断后存入redis6小时内支付有效 todo 6小时可能有些长
let prize = [...giftInfo.prize, ...selectPrize]
G.ioredis.setex(`pay:${payId}:${player.uid}`, 21600, JSON.stringify(prize));
}
//针对每日礼包的单独处理 //针对每日礼包的单独处理
let zeroTime = PublicShared.getToDayZeroTime(G.time) let zeroTime = PublicShared.getToDayZeroTime(G.time)
if (payId.indexOf('136Gift') != -1 && payId != '136GiftAll') { if (payId.indexOf('136Gift') != -1 && payId != '136GiftAll') {
@ -455,6 +504,7 @@ export class PayFun {
/** /**
* *
* @param player
* @param lastTime * @param lastTime
* @param curTime * @param curTime
*/ */

View File

@ -214,7 +214,6 @@ export class PlayerFun {
} }
static async changeAttrLog(uid: string, change, atn, before) { static async changeAttrLog(uid: string, change, atn, before) {
let data = { let data = {
uid, uid,
before, before,
@ -225,6 +224,13 @@ export class PlayerFun {
atn atn
} }
G.mongodb.collection('rmbuse').insertOne(data); G.mongodb.collection('rmbuse').insertOne(data);
// 消费竞赛开启时写入跨服数据库
if (G.huodong.xfjs && !data.isAdd) {
G.crossmongodb.collection('rmbuse').updateOne({uid: data.uid}, {
time: G.time,
$inc: {change: data.change}
}, {upsert: true});
}
} }
static async changeAttr(uid: string, change: Partial<player>) { static async changeAttr(uid: string, change: Partial<player>) {

View File

@ -1,6 +1,5 @@
import { rankType, ResOpen } from '../../shared/protocols/rank/PtlOpen'; import { rankType, ResOpen } from '../../shared/protocols/rank/PtlOpen';
import { rankInfo } from '../../shared/protocols/type'; import { rankInfo } from '../../shared/protocols/type';
import { player } from '../../shared/protocols/user/type';
import { Queue } from '../../shared/public/queue'; import { Queue } from '../../shared/public/queue';
import { RankClslCross } from './rank_clsl'; import { RankClslCross } from './rank_clsl';
//import { RankHbzbJfsCross, RankHbzbJfsLocal, RankHbzbZbsCross } from './rank_hbzb_jfs'; //import { RankHbzbJfsCross, RankHbzbJfsLocal, RankHbzbZbsCross } from './rank_hbzb_jfs';
@ -12,21 +11,17 @@ import { RankTujian } from './rank_tujian';
import { RankWzryCross } from './rank_wzry'; import { RankWzryCross } from './rank_wzry';
import { RankXszm } from './rank_xszm'; import { RankXszm } from './rank_xszm';
import { RankZccg } from './rank_zccg'; import { RankZccg } from './rank_zccg';
import { sortEd } from '../../module/redis'
import * as util from 'util' import * as util from 'util'
import {RankKfjs} from "./rank_kfjs"; import { RankKfjs } from "./rank_kfjs";
import { clusterRunOnce } from '../../clusterUtils'; import { clusterRunOnce } from '../../clusterUtils';
export abstract class Rank { export abstract class Rank {
static list: Partial<{ static list: Partial<{
qjzzd: RankQjzzd; qjzzd: RankQjzzd;
zhanli: RankPower; zhanli: RankPower;
tanxian: RankTanXian; tanxian: RankTanXian;
//hbzbLocal: RankHbzbJfsLocal;
// hbzbCross: RankHbzbJfsCross;
// hbzbZbsCross: RankHbzbZbsCross;
slzd1: RankSlzd1; slzd1: RankSlzd1;
slzd2: RankSlzd2; slzd2: RankSlzd2;
slzd3: RankSlzd3; slzd3: RankSlzd3;
@ -41,17 +36,12 @@ export abstract class Rank {
kfjs: RankKfjs kfjs: RankKfjs
}> = {}; }> = {};
// list: rankInfo[];
queue = new Queue(); queue = new Queue();
findKey = 'uid'; findKey = 'uid';
countMaxNum = 50; countMaxNum = 50;
utimeTTL = 60; utimeTTL = 60;
abstract getType(): rankType; abstract getType(): rankType;
// abstract compare(other: rankInfo, cur: rankInfo): boolean;
// abstract compareSort(a: rankInfo, b: rankInfo): number;
// abstract getRankList(uid: string, obj?: {gud?:player, min?: number, max?:number}): Promise<ResOpen['']>;
// abstract getValArr(info: rankInfo): number|string; // 运算后的积分值,排名依据
// 获取rank数据, 注可能重写具体根据type类型判断 // 获取rank数据, 注可能重写具体根据type类型判断
async getRankList(uid: string, { min, max }): Promise<{ rankList: rankInfo[]; myRank: rankInfo; }> { async getRankList(uid: string, { min, max }): Promise<{ rankList: rankInfo[]; myRank: rankInfo; }> {
@ -65,13 +55,18 @@ export abstract class Rank {
myRank: { myRank: {
rank, rank,
player: data?.player || conn?.gud || {}, player: data?.player || conn?.gud || {},
valArr: [ score ] valArr: [score]
} }
}; };
} }
// 积分, 排名依据, 可能重写具体根据type类型判断 /**
getValArr(info: rankInfo):number|string { * RankInfo数据
* type类型判断
* @param info
* @returns
*/
getValArr(info: rankInfo): number | string {
return info?.valArr[0] || 0 return info?.valArr[0] || 0
} }
@ -79,15 +74,19 @@ export abstract class Rank {
compare(other: rankInfo, cur: rankInfo): boolean { compare(other: rankInfo, cur: rankInfo): boolean {
return cur.valArr[0] > other.valArr[0]; return cur.valArr[0] > other.valArr[0];
} }
// rankList排序可能重写具体根据type类型判断 // rankList排序可能重写具体根据type类型判断
compareSort(a: rankInfo, b: rankInfo): number { compareSort(a: rankInfo, b: rankInfo): number {
return b.valArr[0] - a.valArr[0]; return b.valArr[0] - a.valArr[0];
} }
/**
// 页码转换为minmax * page和offset转换出min和max
static pageToMin (page, offset) { * @param page
* @param offset
* @returns
*/
static pageToMin(page: number, offset: number) {
let res = { let res = {
min: page * offset, min: page * offset,
max: page * offset + offset max: page * offset + offset
@ -95,9 +94,16 @@ export abstract class Rank {
return res return res
} }
/**
* DB连接对象
*/
get db() { get db() {
return G.mongodb.collection('rankList'); return G.mongodb.collection('rankList');
} }
/**
*
*/
get type() { get type() {
return this.getType(); return this.getType();
} }
@ -107,10 +113,16 @@ export abstract class Rank {
this.cotr(); this.cotr();
} }
/**
* typeredis Data的key
*/
get getRedisKey() { get getRedisKey() {
return util.format('rank:%s:data', this.getType()) return util.format('rank:%s:data', this.getType())
} }
/**
* typeredis Sort的key
*/
get getRedisKeySort() { get getRedisKeySort() {
return util.format('rank:%s:sort', this.getType()) return util.format('rank:%s:sort', this.getType())
} }
@ -119,152 +131,252 @@ export abstract class Rank {
async cotr() { async cotr() {
clusterRunOnce(async () => { clusterRunOnce(async () => {
// redis已存在则不初始化 // redis已存在则不初始化
if(await this.getRankLen() > 0) return //if(await this.getRankLen() > 0) return
this.db.find({ type: this.type }).toArray().then(listArr => {
//将db里的数据写入到 rank:xxx:sort里
//写入的单条数据为: {uid:score}
this.db.find({ type: this.type }, {
projection: {
"idKey": 1,
"type": 1,
"data.valArr": 1,
"utime": 1
}
}).toArray().then(listArr => {
// 写入初始化数据 // 写入初始化数据
listArr = listArr || []; listArr = listArr || [];
listArr.forEach(item => { listArr.forEach(item => {
if(item.idKey && item.data) this.setRankData(item.idKey, item.data) if (item.idKey && item.data) this.setRankData(item.idKey, item.data)
}) })
}); });
}) })
this.getRankListRange();
} }
// 更新数据与排名 /**
async setRankData(idKey: string, data: rankInfo) { *
let key = this.getRedisKey * @param uid uidrank里通常保存于idKey这个字段
* @param data data.valArr字段
* @returns
*/
async setRankData(uid: string, data: rankInfo) {
let keySort = this.getRedisKeySort let keySort = this.getRedisKeySort
data.utime = G.time
// data // let key = this.getRedisKey
G.redis.hSet(key, idKey, data) // G.redis.hSet(key, idKey, data)
// sort
let valArr = await this.getValArr(data) /**积分 */
G.redis.zAdd(keySort, <sortEd>{value: idKey, score: valArr}) let score = await this.getValArr(data)
return //G.redis.zAdd(keySort, <sortEd>{value: idKey, score: valArr})
await G.ioredis.zadd(keySort, score, uid)
return
} }
// 获取单个用户的数据 /**
async getRankData(idKey: string) { *
let key = this.getRedisKey * @param uid uid
let data = await G.redis.hGet(key, idKey) * @returns
if(!data || data.utime < (G.time - this.utimeTTL)) { */
let type = this.getType() async getRankData(uid: string) {
let res = await this.db.findOne({isKey: idKey, type}) let data: rankInfo;
if(res) { let res = await this.db.findOne({ "idKey": uid, "type": this.getType() })
data = G.mongodb.conversionIdObj(res)
this.setRankData(idKey, data.data) if (res?.data && res.data.utime + 60 > G.time) {
} data = (G.mongodb.conversionIdObj(res)).data;
} else if (res?.data) {
let player = await G.mongodb.collection("user").findOne({ uid: uid }, { projection: { _id: 0 } });
data = Object.assign(res.data, { player: player });
this.db.updateOne({ idKey: uid, type: this.getType() }, { $set: { "data.player": data.player, "data.utime": G.time } });
} }
if(data) return data return data;
return undefined || {}
// let key = this.getRedisKey
// let data = await G.redis.hGet(key, idKey)
// if(!data || data.utime < (G.time - this.utimeTTL)) {
// let type = this.getType()
// let res = await this.db.findOne({isKey: idKey, type}) //<--isKey意味着整个rank从来不会更新res永远是空
// if(res) {
// data = G.mongodb.conversionIdObj(res)
// this.setRankData(idKey, data.data)
// }
// }
// if(data) return data
// return undefined || {}
} }
// 获取单个用户的分数 /**
async getRankScore(idKey:string): Promise<number> { *
let score = await G.redis.zScore(this.getRedisKeySort, idKey) * @param uid
* @returns
*/
async getRankScore(uid: string): Promise<number> {
let score = await G.redis.zScore(this.getRedisKeySort, uid)
return score || 0 return score || 0
}
// 获取单个用户的排名 *降序
async getRankSortByOne(idKey: string):Promise<number> {
let rank = await G.redis.zRevRank(this.getRedisKeySort, idKey)
return rank === 0 || rank > 0 ? rank: -1;
} }
// 获取单个指定排名的用户数据 *降序 /**
* redis中获取单个用户的排名 *
* @param uid
* @returns
*/
async getRankSortByOne(uid: string): Promise<number> {
let rank = await G.redis.zRevRank(this.getRedisKeySort, uid)
return rank === 0 || rank > 0 ? rank : -1;
}
// 从redis中获取单个指定排名的用户数据 *降序
async getRankSortDataByOne(rank: number): Promise<rankInfo> { async getRankSortDataByOne(rank: number): Promise<rankInfo> {
let rankList:rankInfo[] = await this.getRankListRange(rank, rank + 1) let rankList: rankInfo[] = await this.getRankListRange(rank, rank + 1)
let rankInfo = rankList && rankList.length > 0 ? rankList[0] : {} as rankInfo let rankInfo = rankList && rankList.length > 0 ? rankList[0] : {} as rankInfo
return rankInfo return rankInfo
} }
// 获取排名长度 // 获取排名长度
async getRankLen() { // async getRankLen() {
return await G.redis.hLen(this.getRedisKey) // return await G.redis.hLen(this.getRedisKey)
} // }
// 获取指定排名范围的数据 *降序 /**
async getRankListRange(min:number = 0, max:number = 50): Promise<rankInfo[]> { * *
let idKeys = await this.getRankListIdKeyRange(min, max) * @param min
if(idKeys && idKeys.length > 0) { * @param max
let res = await G.redis.hmGet(this.getRedisKey, idKeys) * @returns
res = await this.checkData(res) */
return res.sort(this.compareSort) async getRankListRange(min: number = 0, max: number = 50): Promise<rankInfo[]> {
} let uids = await this.getRankListIdKeyRange(min, max)
return [] if (uids && uids.length > 0) {
} let res = await this.db.find({ idKey: { $in: uids }, type: this.getType() }).toArray()
// 获取指定排名范围的idKey *降序
async getRankListIdKeyRange(min:number = 0, max: number = 50): Promise<string[]> {
let idKeys = await G.redis.zRevRange(this.getRedisKeySort, min, max - 1)
return idKeys || []
}
// 获取指定类型的全部rank列表,返回为积分排序后的数组 switch (this.getType()) {
async getRankListAll(): Promise<rankInfo[]> { default: // 排行数据更新逻辑 默认更新playerInfo
let res = await G.redis.hGetAll(this.getRedisKey) let updateUids = [];
if(res) { res = res.map(item => {
// 如果是用户数据则比对utime更新数据 // 没有player 或者 player 过期
// res = await this.checkData(res) if (!item.data?.player || item.data.utime + 60 < G.time) {
return Object.values(res).sort(this.compareSort) updateUids.push(item.idKey);
}
return item;
});
let newUserArr = await G.mongodb.collection('user').find(
{ uid: { $in: updateUids } }, { projection: { _id: 0 } }
).toArray();
newUserArr.forEach(item => {
// 每次遍历查找?
let index = res.findIndex(x => x.idKey == item.uid);
res[index].data.player = item;
this.db.updateOne({ idKey: item.uid, type: this.getType() }, { $set: { "data.player": item } });
// 跟新redis score
this.setRankData(item.uid, res[index].data as any);
})
}
return res.map(ele => ele.data).sort(this.compareSort) as any;
} }
return [] return []
} }
// 按排名获取全部的idKey /**
* redis中获取指定排名范围的uid集合 *
* @param min
* @param max
* @returns uid集合数组
*/
async getRankListIdKeyRange(min: number = 0, max: number = 50): Promise<string[]> {
let uids = await G.redis.zRevRange(this.getRedisKeySort, min, max - 1)
return uids || []
}
/**
* rank列表,
* @returns
*/
async getRankListAll(): Promise<rankInfo[]> {
// let res = await G.redis.hGetAll(this.getRedisKey)
let res = (await this.db.find({ type: this.getType() }).toArray()).map(ele => ele.data);
if (res) {
// 如果是用户数据则比对utime更新数据
// res = await this.checkData(res)
return res.sort(this.compareSort)
}
return []
}
/**
* idKey
* @returns
*/
async getRankListIdKeyAll(): Promise<string[]> { async getRankListIdKeyAll(): Promise<string[]> {
let res = this.getRankListIdKeyRange(0, -1) let res = this.getRankListIdKeyRange(0, -1)
return res return res
} }
// 验证数据的过期时间,更新数据 // 验证数据的过期时间,更新数据
async checkData(rankList: rankInfo[]): Promise<rankInfo[]> { // async checkData(rankList: rankInfo[]): Promise<rankInfo[]> {
let updateUid = [] // let updateUid = []
rankList.forEach((value,key) => { // rankList.forEach((value,key) => {
// 仅针对用户表,公会表暂不考虑 // // 仅针对用户表,公会表暂不考虑
if(rankList[key].player?.uid && (rankList[key].utime || 0) < (G.time - this.utimeTTL)) { // if(rankList[key].player?.uid && (rankList[key].utime || 0) < (G.time - this.utimeTTL)) {
// 更新数据 // // 更新数据
updateUid.push(rankList[key].player.uid) // updateUid.push(rankList[key].player.uid)
} // }
}) // })
if(updateUid.length > 0) { // if(updateUid.length > 0) {
let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray() // let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
// let newUserArr = await G.redis.gets('user', ...updateUid.map(uid => [uid] as [string])) // // let newUserArr = await G.redis.gets('user', ...updateUid.map(uid => [uid] as [string]))
// let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray() // // let newUserArr = await G.mongodb.collection('user').find({uid:{$in: updateUid}}).toArray()
newUserArr.forEach(item => { // newUserArr.forEach(item => {
let index = rankList.findIndex( x => x.player.uid == item.uid); // let index = rankList.findIndex( x => x.player.uid == item.uid);
rankList[index].player = item; // rankList[index].player = item;
this.setRankData(item.uid, rankList[index]); // this.setRankData(item.uid, rankList[index]);
}) // })
} // }
return rankList // return rankList
// }
/**
* idk的排名数据
* @param idKey
* @returns
*/
async delRankData(idKey: string) {
// G.redis.hDel(this.getRedisKey, idKey)
G.redis.zRem(this.getRedisKeySort, idKey);
this.db.updateOne({ idKey: idKey, type: this.getType() }, {
$set: { idKey: `del_${idKey}` }
});
} }
async delRankData(idKey:string) { /**
G.redis.hDel(this.getRedisKey, idKey) * 50(countMaxNum)
G.redis.zRem(this.getRedisKeySort, idKey) * @param info
} * @returns
*/
// 原逻辑前50(countMaxNum)名才更新数据(上榜),多余的数据会删除。
async addNew(info: rankInfo) { async addNew(info: rankInfo) {
//this.queue.enqueue(async () => { //this.queue.enqueue(async () => {
await this.setRankData(info.player[this.findKey], info) await this.setRankData(info.player[this.findKey], info)
await this.db.updateOne({ type: this.type, idKey: info.player[this.findKey] }, { $set: { data: info } }, { upsert: true }); await this.db.updateOne({ type: this.type, idKey: info.player[this.findKey] }, { $set: { data: info } }, { upsert: true });
// 删除第50名以后的数据排名从0开始计算 // 删除第50名以后的数据排名从0开始计算
// let idKeys:string[] = await this.getRankListIdKeyRange(50, -1) // let idKeys:string[] = await this.getRankListIdKeyRange(50, -1)
// idKeys.forEach(idKey => { // idKeys.forEach(idKey => {
// this.db.deleteOne({ type: this.type, idKey: idKey }); // this.db.deleteOne({ type: this.type, idKey: idKey });
// this.delRankData(idKey) // this.delRankData(idKey)
// }) // })
//}); //});
} }
// 清空相关rank数据 // 清空相关rank数据
async clear() { async clear() {
this.queue.enqueue(async () => { this.queue.enqueue(async () => {
// G.redis.rawDel(this.getRedisKey)
G.redis.rawDel(this.getRedisKeySort);
await this.db.deleteMany({ type: this.type }); await this.db.deleteMany({ type: this.type });
G.redis.rawDel(this.getRedisKey)
G.redis.rawDel(this.getRedisKeySort)
}); });
} }
} }

View File

@ -1,8 +1,9 @@
import { Scheduler, schedulerType } from './scheduler'; import { Scheduler, schedulerType } from './scheduler';
import {PublicShared} from "../../shared/public/public"; import { PublicShared } from "../../shared/public/public";
import {Wjjl} from "../../module/collection_wjjl"; import { Wjjl } from "../../module/collection_wjjl";
import {ZhanLingTasks} from "../zhanling"; import { ZhanLingTasks } from "../zhanling";
import { setGud } from '../gud'; import { setGud } from '../gud';
import { EmailFun } from '../email';
export class SchedulerNewDayLocalCtor extends Scheduler { export class SchedulerNewDayLocalCtor extends Scheduler {
@ -23,8 +24,8 @@ export class SchedulerNewDayLocalCtor extends Scheduler {
async start() { async start() {
let users = Object.values(G.server.uid_connections) let users = Object.values(G.server.uid_connections)
if(users.length) { if (users.length) {
for (let item of users){ for (let item of users) {
let gud = item.gud let gud = item.gud
let add: k_v<any> = {}; let add: k_v<any> = {};
//每天首次登陆 //每天首次登陆
@ -36,23 +37,53 @@ export class SchedulerNewDayLocalCtor extends Scheduler {
if (gud.logoutTime && PublicShared.getToWeekMondayZeroTime(gud.logoutTime) < PublicShared.getToWeekMondayZeroTime(G.time)) { if (gud.logoutTime && PublicShared.getToWeekMondayZeroTime(gud.logoutTime) < PublicShared.getToWeekMondayZeroTime(G.time)) {
ZhanLingTasks.clearLog(gud.uid, 'week'); ZhanLingTasks.clearLog(gud.uid, 'week');
} }
G.emit('FIRST_LOGIN_EVERY_DAY', gud, G.time - 24 * 3600, G.time); G.emit('FIRST_LOGIN_EVERY_DAY', gud, gud.loginTime, G.time);
} }
gud.loginTime = G.time; gud.loginTime = G.time;
add.loginTime = G.time; add.loginTime = G.time;
if (Object.keys(add).length > 0) { if (Object.keys(add).length > 0) {
G.mongodb.collection('user').updateOne({ bindUid: gud.bindUid,sid:gud.sid }, { G.mongodb.collection('user').updateOne({ bindUid: gud.bindUid, sid: gud.sid }, {
$set: { $set: {
...add ...add
} }
}); });
setGud(gud.uid,add); setGud(gud.uid, add);
} }
G.server.sendMsgByUid(gud.uid, 'msg_s2c/PlayerChange', gud) G.server.sendMsgByUid(gud.uid, 'msg_s2c/PlayerChange', gud)
} }
G.server.broadcastClusterMsg('msg_s2c/NewDay', {time: this.zeroTime}); G.server.broadcastClusterMsg('msg_s2c/NewDay', { time: this.zeroTime });
} }
(async () => {
// 每周一,发放终身卡
if (PublicShared.getWeek(G.time) != 1) {
console.log("不是周一,不发放终身卡", PublicShared.getWeek(G.time));
return
};
let logs = await G.mongodb.collection("payLogNew").find(
{ key: "zhongshenka", del_time: { $exists: false } }, { projection: { _id: 0, } }
).toArray();
if (logs.length == 0) {
console.log("没有终身卡数据,不发放终身卡");
}
let con = G.gc.payEmail.zhongshenka.filter(e => e.day == 7)[0];
for (let i = 0; i < logs.length; i++) {
console.log("发放终身卡", logs[i].uid);
// 发送邮件
EmailFun.addEmail({
uid: logs[i].uid,
type: "system",
title: con.title,
content: con.content,
contentInsertArr: [],
createTime: G.time,
prize:con.prize,
})
}
})()
} }
} }

View File

@ -38,14 +38,15 @@ export class Scheduler_xfjs_Local_Ctor extends Scheduler {
if (!_hd) return if (!_hd) return
let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || 100 let limit = _hd.data?.rank?.slice(-1)?.[0]?.rank?.slice(-1)?.[0] || 100
let rmbuse = await G.mongodb.collection('rmbuse').aggregate([
{$match: {isAdd: false, cTime: {$gte: _hd.stime, $lte: _hd.etime}}},
{$group: {_id: "$uid", total: {$sum: "$change"}}},
{$sort: {total: 1}},
{$limit: limit}
]).toArray()
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.total)})) let rmbuse = await G.crossmongodb.collection('rmbuse').find({
time: {
$gte: _hd.stime,
$lte: _hd.etime + 10
}
}).sort({change: 1}).limit(limit).toArray()
let list: any = rmbuse.map(i => ({...i, total: R.negate(i.change)}))
let ranklist = sortRankList(_hd.data.rank, list) let ranklist = sortRankList(_hd.data.rank, list)
@ -53,6 +54,7 @@ export class Scheduler_xfjs_Local_Ctor extends Scheduler {
let users = R.slice(i.rank[0] - 1, i.rank[1])(ranklist) let users = R.slice(i.rank[0] - 1, i.rank[1])(ranklist)
users.map(v => { users.map(v => {
if (v._id == 'system') return if (v._id == 'system') return
if (G.config.serverId != users.sid) return;
EmailFun.addEmail({ EmailFun.addEmail({
uid: v._id, uid: v._id,
type: 'system', type: 'system',

View File

@ -1,32 +1,31 @@
import { ApiCall } from 'tsrpc'; import {ApiCall} from 'tsrpc';
import { ResOpen } from '../shared/protocols/tanxian/PtlOpen'; import {ResOpen} from '../shared/protocols/tanxian/PtlOpen';
import { TeQuanFun } from './tequan'; import {TeQuanFun} from './tequan';
type dataChange = Partial<ResOpen>; type dataChange = Partial<ResOpen>;
export class TanXianFun { export class TanXianFun {
/**修改探险数据 */ /**修改探险数据 */
static async changeData(call: ApiCall, change: dataChange) { static async changeData(call: ApiCall, change: dataChange) {
G.mongodb.collection('tanxian').updateOne({uid: call.uid}, {$set: {...change}});
G.mongodb.collection('tanxian').updateOne({ uid: call.uid }, { $set: { ...change } });
let data = await this.getData(call); let data = await this.getData(call);
Object.assign(data, change); Object.assign(data, change);
G.ioredis.set(`tanxian:${call.uid}`, JSON.stringify(data)); G.ioredis.setex(`tanxian:${call.uid}`, 600, JSON.stringify(data));
} }
/**获取探险数据 */ /**获取探险数据 */
static async getData(call: ApiCall, cache = true) { static async getData(call: ApiCall, cache = true) {
if(cache){ let cacheData = await G.ioredis.get(`tanxian:${call.uid}`);
let data = await G.ioredis.get(`tanxian:${call.uid}`); if (cacheData && cache) return JSON.parse(cacheData);
if (data) return JSON.parse(data); let {_id, uid, ...data} = await G.mongodb.collection('tanxian').findOne({uid: call.uid});
}
let { _id, uid, ...data } = await G.mongodb.collection('tanxian').findOne({ uid: call.uid });
if (!data.eventTime) { if (!data.eventTime) {
data.eventTime = G.time; data.eventTime = G.time;
G.mongodb.collection('tanxian').updateOne({ uid: call.uid }, { $set: { eventTime: G.time } }); G.mongodb.collection('tanxian').updateOne({uid: call.uid}, {$set: {eventTime: G.time}});
} }
await G.ioredis.set(`tanxian:${call.uid}`, JSON.stringify(data)); G.ioredis.setex(`tanxian:${call.uid}`, 600, JSON.stringify(data));
return data; return data;
} }
/**获取快速探险次数 */ /**获取快速探险次数 */
static async getFastGuaJiNum(call: ApiCall) { static async getFastGuaJiNum(call: ApiCall) {
let num = G.gc.tanxian_com.fastGuaJiNum + await TeQuanFun.getTxFreeNum(call); let num = G.gc.tanxian_com.fastGuaJiNum + await TeQuanFun.getTxFreeNum(call);
@ -38,9 +37,10 @@ export class TanXianFun {
} }
return num; return num;
} }
/**获取最后领取奖励的id与sort后的数组*/ /**获取最后领取奖励的id与sort后的数组*/
static getLastMapId(receivePrizeConfId: string[]) { static getLastMapId(receivePrizeConfId: string[]) {
if(!receivePrizeConfId) receivePrizeConfId = [] if (!receivePrizeConfId) receivePrizeConfId = []
receivePrizeConfId = receivePrizeConfId.sort((a, b) => ~~a - ~~b); receivePrizeConfId = receivePrizeConfId.sort((a, b) => ~~a - ~~b);
let receiveLastId = receivePrizeConfId.length > 0 ? receivePrizeConfId[receivePrizeConfId.length - 1] : '0';// 获取当前的领取进度 let receiveLastId = receivePrizeConfId.length > 0 ? receivePrizeConfId[receivePrizeConfId.length - 1] : '0';// 获取当前的领取进度
return {receiveLastId, receivePrizeConfId} return {receiveLastId, receivePrizeConfId}

View File

@ -838,6 +838,11 @@ export class TaskAllEmitFun {
G.emit("Class_task_153", 'Class_task_153', node.call, _val, 0); G.emit("Class_task_153", 'Class_task_153', node.call, _val, 0);
} }
if (node.call.service.name == 'event/yuandan/DMRec' && node.return.isSucc) {
// 今日参与{1}次抓娃娃小游戏
G.emit("Class_task_158", 'Class_task_158', node.call, 1, 0);
}
if (node.call.eventMsg && node.call.eventMsg["msg_s2c/PeijianChange"] && node.call.eventMsg["msg_s2c/PeijianChange"]) { if (node.call.eventMsg && node.call.eventMsg["msg_s2c/PeijianChange"] && node.call.eventMsg["msg_s2c/PeijianChange"]) {
let _change = node.call.eventMsg["msg_s2c/PeijianChange"]; let _change = node.call.eventMsg["msg_s2c/PeijianChange"];

View File

@ -13,6 +13,7 @@ import {weixiuchangType} from "../shared/protocols/weixiuchang/type";
import {FunWeiXiuChang} from "./weixiuchang"; import {FunWeiXiuChang} from "./weixiuchang";
import {JJCFun} from "./jjc"; import {JJCFun} from "./jjc";
import {getGud} from "./gud"; import {getGud} from "./gud";
import {Yuandanfun} from "../api_s2c/event/yuandan/fun";
let _classNameFunc = {} let _classNameFunc = {}
/** /**
@ -76,6 +77,8 @@ export module manager {
YangChengMuBiaofun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg) YangChengMuBiaofun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
// 圣诞活动任务计数 // 圣诞活动任务计数
Christmasfun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg) Christmasfun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
// 元旦活动任务计数
Yuandanfun.setTaskVal(call, this.stype, val, this.chkCall, chkval, this.isinc, this.alchangeVal, arg)
} }
// 任务数值, 和检测值,看情况需要上层复写 // 任务数值, 和检测值,看情况需要上层复写
@ -820,6 +823,16 @@ export module manager {
} }
} }
// 第60个任务 今日参与{1}次抓娃娃小游戏
export class Class_task_158 extends BaseClass {
stype = 158
isinc = 1
async initVal(call: ApiCall, con) {
return 0;
}
}
} }

View File

@ -438,7 +438,12 @@ const crossIndexs: Partial<{ [k in keyof MongodbCollections]: IndexDescription[]
{ {
key: {zkey: 1} key: {zkey: 1}
}, },
] ],
huodong_user: [
{
key: {uid: 1}, unique: true,
}
],
}; };
export async function initMongoDB() { export async function initMongoDB() {

View File

@ -0,0 +1,12 @@
import {prizeType} from "../../type";
/**
*
*/
export type ReqDMRec = {
id: 1 | 0
}
export type ResDMRec = {
prize: prizeType[]
}

View File

@ -0,0 +1,11 @@
/**
*
*/
export type ReqDZRec = {
id: string
dlz: { a: string, t: string, n: number }[]
}
export type ResDZRec = {
[k: string]: any;
}

View File

@ -0,0 +1,11 @@
/**
*
*/
export type ReqExchange = {
id: string
}
export type ResExchange = {
}

View File

@ -0,0 +1,22 @@
/**
*
*/
export type ReqOpen = {}
export type ResOpen = {
data: any
payLog: any
[k: string]: any;
}
export type event = {
qiandao: { [k: string]: any };
gift: { [k: string]: any };
taskfinish: string[];
taskval: { [k: string]: any }
exchange: { [k: string]: any }
gameNum: number
refreshTime: number;
qiandaoTime: number;
[k: string]: any;
}

View File

@ -0,0 +1,10 @@
/**
*
*/
export type ReqTaskRec = {
taskid: string
}
export type ResTaskRec = {
[k: string]: any;
}

View File

@ -0,0 +1,12 @@
/**
*
*/
export type ReqZLRec = {
id: string,
dlz: { a: string, t: string, n: number }[]
}
export type ResZLRec = {
[k: string]: any;
}

View File

@ -1,10 +1,10 @@
/** /**
* *
*/ */
export interface ReqReceive { export type ReqReceive = {
id: string id: string
} }
export interface ResReceive { export type ResReceive = {
} }

View File

@ -1,4 +1,4 @@
import { prizeType } from '../../type'; import {prizeType} from '../../type';
/** /**
* *
@ -7,7 +7,7 @@ export type ReqBuy = {
/**礼包index */ /**礼包index */
index: number; index: number;
/**礼包的每个奖励index */ /**礼包的每个奖励index */
prizeIndex: number[]; dlz: prizeType[]
hdid: number hdid: number
}; };

View File

@ -10,8 +10,8 @@ export type ReqOpen = {
export type ResOpen = { export type ResOpen = {
/**购买记录 */ /**购买记录 */
record: { rec: {
[k: string]: number; [k: string]: any;
}; };
hdinfo: ReqAddHuoDong hdinfo: ReqAddHuoDong
}; };

View File

@ -54,7 +54,8 @@ export type hongdianKey =
| 'zhoumolibao' | 'zhoumolibao'
| 'pobinglibao' | 'pobinglibao'
| 'payForDiamond' | 'payForDiamond'
| 'leichonglibao'; | 'leichonglibao'
| 'yuandan';
export type hongdianVal = { export type hongdianVal = {
show?: boolean; show?: boolean;
// 看功能需要 // 看功能需要

View File

@ -20,6 +20,11 @@ export type payLog = {
* @system * @system
*/ */
type: 'user' | 'system' | 'legu'; type: 'user' | 'system' | 'legu';
/**
*
*/
args?: any;
/** G123 */ /** G123 */
popup_id?: string popup_id?: string

File diff suppressed because it is too large Load Diff

View File

@ -141,6 +141,8 @@ export class HeroShared {
} }
}); });
let sumLv = R.sum(pjs.map(i => i.lv))
for (let [suitId, data] of Object.entries(suitObj)) { for (let [suitId, data] of Object.entries(suitObj)) {
// //计算配件套装属性 // //计算配件套装属性
@ -149,7 +151,7 @@ export class HeroShared {
// suitBuff.forEach(b => PublicShared.mergeProperty(buff, b[1])); // suitBuff.forEach(b => PublicShared.mergeProperty(buff, b[1]));
//计算配件大师属性 //计算配件大师属性
let masterConf = Object.values(G.gc.peijian_master[suitId]).filter(c => c.lv <= data.minLv).sort((a, b) => b.lv - a.lv)[0]; let masterConf = Object.values(G.gc.peijian_master[suitId]).filter(c => c.needLv <= sumLv).sort((a, b) => b.lv - a.lv)[0];
if (masterConf) { if (masterConf) {
let masterbuff = Object.entries(masterConf.buff).filter(v => Number(v[0]) <= data.num); let masterbuff = Object.entries(masterConf.buff).filter(v => Number(v[0]) <= data.num);
masterbuff.forEach(b => PublicShared.mergeProperty(buff, b[1])); masterbuff.forEach(b => PublicShared.mergeProperty(buff, b[1]));
@ -236,7 +238,9 @@ export class HeroShared {
let find = Object.entries(posObj).find(v => v[1] == hero._id); let find = Object.entries(posObj).find(v => v[1] == hero._id);
if (find) { if (find) {
let __buff = G.gc.fightPlan[select][lv].buff[Number(find[0]) - 1]; let maxLv = R.values(G.gc.fightPlan[select]).length - 1
let fixLv = lv > maxLv ? maxLv : lv
let __buff = G.gc.fightPlan[select][fixLv].buff[Number(find[0]) - 1];
__buff && PublicShared.mergeProperty(buff, __buff); __buff && PublicShared.mergeProperty(buff, __buff);
} }
} }
@ -280,6 +284,7 @@ export class HeroShared {
let buffKey = k.replace('pro', ''); let buffKey = k.replace('pro', '');
if (buff[buffKey]) { if (buff[buffKey]) {
buff[buffKey] += buff[buffKey] * buff[k]; buff[buffKey] += buff[buffKey] * buff[k];
if (buffKey == 'baoshang' && buff[buffKey] > 10) buff[buffKey] = 10
// buff[k] = 0; // buff[k] = 0;
} }
} }

View File

@ -73,6 +73,7 @@ export class PublicShared {
* *
* @param id id * @param id id
* @param num * @param num
* @param conf
*/ */
static randomDropGroup(id: string | number, num = 1, conf = G.gc.diaoluo): prizeType[] { static randomDropGroup(id: string | number, num = 1, conf = G.gc.diaoluo): prizeType[] {
let prize = []; let prize = [];
@ -115,7 +116,7 @@ export class PublicShared {
* *
*/ */
static randomNum(min: number, max: number) { static randomNum(min: number, max: number) {
return Math.floor(Math.random() * (max - min) + min); return Math.floor(Math.random() * (max - min + 1) + min);
} }
/**获取道具配置 */ /**获取道具配置 */
static getAtnConf(atn: prizeType) { static getAtnConf(atn: prizeType) {