19 |
20 | **3.创建云开发平台-前端部署应用**
21 |
22 | 3.1 创建前端应用
23 |
24 | 依次点击「应用列表」「前端应用」「新建前端应用」按钮。首先绑定GitHub帐号,允许云开发平台构建、发布你的GitHub代码为可访问的网站。
25 |
26 |
27 |
28 |
29 |
30 | 选择第一步中的代码仓库、主干分支等,并点击下一步。主干分支一般指的是代码的master或main等分支。
31 |
32 |
33 |
34 | 点击「下一步」、「完成」。稍等片刻创建成功后,将进入到应用部署界面。
35 |
36 |
37 |
38 | 3.2 进行项目的部署
39 |
40 | 依次点击日常环境的「部署」「确定」,即可启动日常环境的发布流程。
41 |
42 |
43 |
44 | 如果您是第一次在该仓库上使用云开发平台,需要将 https://ram.console.aliyun.com/manage/ak 中的AccessKeyID、AccessKeySecret,粘贴配置到GitHub Secret中的AK、SK变量中。具体步骤,请仔细阅读「部署配置」的Step1。
45 |
46 |
47 |
48 | 3.3 查看部署结果
49 |
50 | 部署成功后,点击「部署配置」,并点击「测试域名」,即可访问您的应用。请注意测试域名的过期时间。
51 |
52 |
53 |
54 | 如果测试域名访问时出现类似以下情况,请点击「高级」-「继续访问」。这是因为临时测试域名并未提供完整的证书,仅供您临时测试使用。如果需要发布为长期的正式网站,请看下一步。
55 |
56 |
57 |
58 | 3.4 (可选)添加自己的自定义域名
59 |
60 | 但是您可以通过设置自定义域名,并进行CNAME解析,来持久化这个前端游戏。在「部署配置」「自定义域名」中,添加您自己名下的域名,重新点击部署。再按照提示,将您名下的域名CNAME到指定的OSS域名下,即可使用自己的域名,持续访问该应用。
61 |
62 |
63 |
64 | 3.5 (可选)使用CDN加速域名访问,节约流量费用
65 |
66 | 当网站流量巨大时,可点击「部署配置」中的「如何配置CDN加速」,将自己的域名与CDN加速绑定,从而加速网站访问,节约流量费用。
67 |
68 | ## 三、应用下线
69 |
70 | 云开发平台功能完全免费,但OSS存储会收取您存储、上传、下载的流量费用,具体请见: https://help.aliyun.com/document_detail/173521.html
71 |
72 | 如果希望马上停止应用计费,目前请您在OSS控制台指定Bucket内进行手动操作: https://oss.console.aliyun.com/bucket
73 |
74 | 进入您在「部署配置」中选择的Bucket,点击「文件管理」,并在多选框中勾选所有存储的文件,点击「删除」,即可即时完全停止应用被外界访问。
75 |
76 |
77 |
78 | 当您需要启动时,只要重新点击云开发平台的部署按钮即可开始部署。云开发平台会尽快增加一键停服的自动化功能,方便您随时暂停应用。
79 |
--------------------------------------------------------------------------------
/src/talent.js:
--------------------------------------------------------------------------------
1 | import { clone } from './functions/util.js';
2 | import { checkCondition } from './functions/condition.js';
3 |
4 | class Talent {
5 | constructor() {}
6 |
7 | #talents;
8 |
9 | initial({talents}) {
10 | this.#talents = talents;
11 | for(const id in talents) {
12 | const talent = talents[id];
13 | talent.id= Number(id);
14 | talent.grade = Number(talent.grade);
15 | }
16 | }
17 |
18 | check(talentId, property) {
19 | const { condition } = this.get(talentId);
20 | return checkCondition(property, condition);
21 | }
22 |
23 | get(talentId) {
24 | const talent = this.#talents[talentId];
25 | if(!talent) throw new Error(`[ERROR] No Talent[${talentId}]`);
26 | return clone(talent);
27 | }
28 |
29 | information(talentId) {
30 | const { grade, name, description } = this.get(talentId)
31 | return { grade, name, description };
32 | }
33 |
34 | exclusive(talends, exclusiveId) {
35 | const { exclusive } = this.get(exclusiveId);
36 | if(!exclusive) return null;
37 | for(const talent of talends) {
38 | for(const e of exclusive) {
39 | if(talent == e) return talent;
40 | }
41 | }
42 | return null;
43 | }
44 |
45 | talentRandom(include) {
46 | // 1000, 100, 10, 1
47 | const talentList = {};
48 | for(const talentId in this.#talents) {
49 | const { id, grade, name, description } = this.#talents[talentId];
50 | if(id == include) {
51 | include = { grade, name, description, id };
52 | continue;
53 | }
54 | if(!talentList[grade]) talentList[grade] = [{ grade, name, description, id }];
55 | else talentList[grade].push({ grade, name, description, id });
56 | }
57 |
58 | return new Array(10)
59 | .fill(1).map((v, i)=>{
60 | if(!i && include) return include;
61 | const gradeRandom = Math.random();
62 | let grade;
63 | if(gradeRandom>=0.111) grade = 0;
64 | else if(gradeRandom>=0.011) grade = 1;
65 | else if(gradeRandom>=0.001) grade = 2;
66 | else grade = 3;
67 |
68 | while(talentList[grade].length == 0) grade--;
69 |
70 | const length = talentList[grade].length;
71 |
72 | const random = Math.floor(Math.random()*length) % length;
73 | return talentList[grade].splice(random,1)[0];
74 | });
75 | }
76 |
77 | allocationAddition(talents) {
78 | if(Array.isArray(talents)) {
79 | let addition = 0;
80 | for(const talent of talents)
81 | addition += this.allocationAddition(talent);
82 | return addition;
83 | }
84 | return Number(this.get(talents).status) || 0;
85 | }
86 |
87 | do(talentId, property) {
88 | const { effect, condition, grade, name, description } = this.get(talentId);
89 | if(condition && !checkCondition(property, condition))
90 | return null;
91 | return { effect, grade, name, description };
92 | }
93 | }
94 |
95 | export default Talent;
--------------------------------------------------------------------------------
/src/functions/summary.js:
--------------------------------------------------------------------------------
1 | const data = {
2 | "CHR": [
3 | {"judge": "地狱", "grade": 0},
4 | {"min":1, "judge": "折磨", "grade": 0},
5 | {"min":2, "judge": "不佳", "grade": 0},
6 | {"min":4, "judge": "普通", "grade": 0},
7 | {"min":7, "judge": "优秀", "grade": 1},
8 | {"min":9, "judge": "罕见", "grade": 2},
9 | {"min":11, "judge": "逆天", "grade": 3},
10 | ],
11 | "MNY": [
12 | {"judge": "地狱", "grade": 0},
13 | {"min":1, "judge": "折磨", "grade": 0},
14 | {"min":2, "judge": "不佳", "grade": 0},
15 | {"min":4, "judge": "普通", "grade": 0},
16 | {"min":7, "judge": "优秀", "grade": 1},
17 | {"min":9, "judge": "罕见", "grade": 2},
18 | {"min":11, "judge": "逆天", "grade": 3},
19 | ],
20 | "SPR": [
21 | {"judge": "地狱", "grade": 0},
22 | {"min":1, "judge": "折磨", "grade": 0},
23 | {"min":2, "judge": "不幸", "grade": 0},
24 | {"min":4, "judge": "普通", "grade": 0},
25 | {"min":7, "judge": "幸福", "grade": 1},
26 | {"min":9, "judge": "极乐", "grade": 2},
27 | {"min":11, "judge": "天命", "grade": 3},
28 | ],
29 | "INT": [
30 | {"judge": "地狱", "grade": 0},
31 | {"min":1, "judge": "折磨", "grade": 0},
32 | {"min":2, "judge": "不佳", "grade": 0},
33 | {"min":4, "judge": "普通", "grade": 0},
34 | {"min":7, "judge": "优秀", "grade": 1},
35 | {"min":9, "judge": "罕见", "grade": 2},
36 | {"min":11, "judge": "逆天", "grade": 3},
37 | {"min":21, "judge": "识海", "grade": 3},
38 | {"min":131, "judge": "元神", "grade": 3},
39 | {"min":501, "judge": "仙魂", "grade": 3},
40 | ],
41 | "STR": [
42 | {"judge": "地狱", "grade": 0},
43 | {"min":1, "judge": "折磨", "grade": 0},
44 | {"min":2, "judge": "不佳", "grade": 0},
45 | {"min":4, "judge": "普通", "grade": 0},
46 | {"min":7, "judge": "优秀", "grade": 1},
47 | {"min":9, "judge": "罕见", "grade": 2},
48 | {"min":11, "judge": "逆天", "grade": 3},
49 | {"min":21, "judge": "凝气", "grade": 3},
50 | {"min":101, "judge": "筑基", "grade": 3},
51 | {"min":401, "judge": "金丹", "grade": 3},
52 | {"min":1001, "judge": "元婴", "grade": 3},
53 | {"min":2001, "judge": "仙体", "grade": 3},
54 | ],
55 | "AGE": [
56 | {"judge": "胎死腹中", "grade": 0},
57 | {"min":1, "judge": "早夭", "grade": 0},
58 | {"min":10, "judge": "少年", "grade": 0},
59 | {"min":18, "judge": "盛年", "grade": 0},
60 | {"min":40, "judge": "中年", "grade": 0},
61 | {"min":60, "judge": "花甲", "grade": 1},
62 | {"min":70, "judge": "古稀", "grade": 1},
63 | {"min":80, "judge": "杖朝", "grade": 2},
64 | {"min":90, "judge": "南山", "grade": 2},
65 | {"min":95, "judge": "不老", "grade": 3},
66 | {"min":100, "judge": "修仙", "grade": 3},
67 | {"min":500, "judge": "仙寿", "grade": 3},
68 | ],
69 | "SUM": [
70 | {"judge": "地狱", "grade": 0},
71 | {"min":41, "judge": "折磨", "grade": 0},
72 | {"min":50, "judge": "不佳", "grade": 0},
73 | {"min":60, "judge": "普通", "grade": 0},
74 | {"min":80, "judge": "优秀", "grade": 1},
75 | {"min":100, "judge": "罕见", "grade": 2},
76 | {"min":110, "judge": "逆天", "grade": 3},
77 | {"min":120, "judge": "传说", "grade": 3},
78 | ]
79 | }
80 |
81 | function summary(type, value) {
82 | let length = data[type].length;
83 | while(length--) {
84 | const {min, judge, grade} = data[type][length];
85 | if(min==void 0 || value >= min) return {judge, grade};
86 | }
87 | }
88 |
89 | export { summary };
--------------------------------------------------------------------------------
/src/functions/condition.js:
--------------------------------------------------------------------------------
1 | function parseCondition(condition) {
2 |
3 | const conditions = [];
4 | const length = condition.length;
5 | const stack = [];
6 | stack.unshift(conditions);
7 | let cursor = 0;
8 | const catchString = i => {
9 | const str = condition.substring(cursor, i).trim();
10 | cursor = i;
11 | if(str) stack[0].push(str);
12 | };
13 |
14 | for(let i=0; i