mirror of
https://github.com/ZZZure/ZZZ-Plugin.git
synced 2025-12-16 13:17:32 +00:00
feat: 强袭战
This commit is contained in:
parent
fb7f746407
commit
3a88596399
14 changed files with 1066 additions and 5 deletions
273
model/deadly.js
Normal file
273
model/deadly.js
Normal file
|
|
@ -0,0 +1,273 @@
|
|||
import request from '../utils/request.js';
|
||||
import { Buffer } from 'node:buffer';
|
||||
/**
|
||||
* @typedef {Object} DeadlyTime
|
||||
* @property {number} hour
|
||||
* @property {number} minute
|
||||
* @property {number} second
|
||||
* @property {number} year
|
||||
* @property {number} month
|
||||
* @property {number} day
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} Bos
|
||||
* @property {string} race_icon
|
||||
* @property {string} icon
|
||||
* @property {string} name
|
||||
* @property {string} bg_icon
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} DeadBuffer
|
||||
* @property {string} desc
|
||||
* @property {string} icon
|
||||
* @property {string} name
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} Buddy
|
||||
* @property {number} id
|
||||
* @property {string} rarity
|
||||
* @property {number} level
|
||||
* @property {string} bangboo_rectangle_url
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} AvatarList
|
||||
* @property {string} rarity
|
||||
* @property {number} element_type
|
||||
* @property {number} avatar_profession
|
||||
* @property {number} id
|
||||
* @property {number} level
|
||||
* @property {number} rank
|
||||
* @property {string} role_square_url
|
||||
* @property {number} sub_element_type
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} DeadlyList
|
||||
* @property {number} star
|
||||
* @property {number} score
|
||||
* @property {Bos[]} boss
|
||||
* @property {DeadBuffer[]} buffer
|
||||
* @property {Buddy} buddy
|
||||
* @property {number} total_star
|
||||
* @property {DeadlyTime} challenge_time
|
||||
* @property {AvatarList[]} avatar_list
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} Deadly
|
||||
* @property {DeadlyTime} start_time
|
||||
* @property {DeadlyTime} end_time
|
||||
* @property {string} nick_name
|
||||
* @property {string} avatar_icon
|
||||
* @property {boolean} has_data
|
||||
* @property {number} zone_id
|
||||
* @property {number} total_star
|
||||
* @property {number} rank_percent
|
||||
* @property {number} total_score
|
||||
* @property {DeadlyList[]} list
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class Deadly.
|
||||
*/
|
||||
export class Deadly {
|
||||
/**
|
||||
* @param {Deadly} data
|
||||
*/
|
||||
constructor(data) {
|
||||
this.start_time = new DeadlyTime(data.start_time);
|
||||
this.end_time = new DeadlyTime(data.end_time);
|
||||
this.nick_name = data.nick_name;
|
||||
this.avatar_icon = data.avatar_icon;
|
||||
this.has_data = data.has_data;
|
||||
this.zone_id = data.zone_id;
|
||||
this.total_star = data.total_star;
|
||||
this.rank_percent = data.rank_percent;
|
||||
this.total_score = data.total_score;
|
||||
this.list = data.list.map(item => new DeadlyList(item));
|
||||
}
|
||||
async get_assets() {
|
||||
const avatar_icon_b64 = await request
|
||||
.get(this.avatar_icon, {}, { responseType: 'arraybuffer' })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(
|
||||
buffer =>
|
||||
`data:image/png;base64,${Buffer.from(buffer).toString('base64')}`
|
||||
);
|
||||
this.avatar_icon = avatar_icon_b64;
|
||||
await Promise.all(this.list.map(item => item.get_assets()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class DeadlyList.
|
||||
*/
|
||||
export class DeadlyList {
|
||||
/**
|
||||
* @param {DeadlyList} data
|
||||
*/
|
||||
constructor(data) {
|
||||
this.star = data.star;
|
||||
this.score = data.score;
|
||||
this.boss = data.boss.map(b => new Bos(b));
|
||||
this.buffer = data.buffer.map(b => new DeadBuffer(b));
|
||||
this.buddy = new Buddy(data.buddy);
|
||||
this.total_star = data.total_star;
|
||||
this.challenge_time = new DeadlyTime(data.challenge_time);
|
||||
this.avatar_list = data.avatar_list.map(item => new AvatarList(item));
|
||||
}
|
||||
|
||||
async get_assets() {
|
||||
await Promise.all([
|
||||
this.buddy.get_assets(),
|
||||
...this.avatar_list.map(avatar => avatar.get_assets()),
|
||||
...this.boss.map(boss => boss.get_assets()),
|
||||
...this.buffer.map(buffer => buffer.get_assets()),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class AvatarList.
|
||||
*/
|
||||
export class AvatarList {
|
||||
/**
|
||||
* @param {AvatarList} data
|
||||
*/
|
||||
constructor(data) {
|
||||
this.rarity = data.rarity;
|
||||
this.element_type = data.element_type;
|
||||
this.avatar_profession = data.avatar_profession;
|
||||
this.id = data.id;
|
||||
this.level = data.level;
|
||||
this.rank = data.rank;
|
||||
this.role_square_url = data.role_square_url;
|
||||
this.sub_element_type = data.sub_element_type;
|
||||
}
|
||||
|
||||
async get_assets() {
|
||||
const role_square_b64 = await request
|
||||
.get(this.role_square_url, {}, { responseType: 'arraybuffer' })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(
|
||||
buffer =>
|
||||
`data:image/png;base64,${Buffer.from(buffer).toString('base64')}`
|
||||
);
|
||||
this.role_square_url = role_square_b64;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class Buddy.
|
||||
*/
|
||||
export class Buddy {
|
||||
/**
|
||||
* @param {Buddy} data
|
||||
*/
|
||||
constructor(data) {
|
||||
this.id = data.id;
|
||||
this.rarity = data.rarity;
|
||||
this.level = data.level;
|
||||
this.bangboo_rectangle_url = data.bangboo_rectangle_url;
|
||||
}
|
||||
|
||||
async get_assets() {
|
||||
const bangboo_rectangle_b64 = await request
|
||||
.get(this.bangboo_rectangle_url, {}, { responseType: 'arraybuffer' })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(
|
||||
buffer =>
|
||||
`data:image/png;base64,${Buffer.from(buffer).toString('base64')}`
|
||||
);
|
||||
this.bangboo_rectangle_url = bangboo_rectangle_b64;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class DeadBuffer.
|
||||
*/
|
||||
export class DeadBuffer {
|
||||
/**
|
||||
* @param {DeadBuffer} data
|
||||
*/
|
||||
constructor(data) {
|
||||
this.desc = data.desc;
|
||||
this.icon = data.icon;
|
||||
this.name = data.name;
|
||||
}
|
||||
|
||||
async get_assets() {
|
||||
const icon_b64 = await request
|
||||
.get(this.icon, {}, { responseType: 'arraybuffer' })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(
|
||||
buffer =>
|
||||
`data:image/png;base64,${Buffer.from(buffer).toString('base64')}`
|
||||
);
|
||||
this.icon = icon_b64;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class Bos.
|
||||
*/
|
||||
export class Bos {
|
||||
/**
|
||||
* @param {Bos} data
|
||||
*/
|
||||
constructor(data) {
|
||||
this.race_icon = data.race_icon;
|
||||
this.icon = data.icon;
|
||||
this.name = data.name;
|
||||
this.bg_icon = data.bg_icon;
|
||||
}
|
||||
|
||||
async get_assets() {
|
||||
const race_icon_b64 = request
|
||||
.get(this.race_icon, {}, { responseType: 'arraybuffer' })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(
|
||||
buffer =>
|
||||
`data:image/png;base64,${Buffer.from(buffer).toString('base64')}`
|
||||
);
|
||||
const icon_b64 = request
|
||||
.get(this.icon, {}, { responseType: 'arraybuffer' })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(
|
||||
buffer =>
|
||||
`data:image/png;base64,${Buffer.from(buffer).toString('base64')}`
|
||||
);
|
||||
const bg_icon_b64 = request
|
||||
.get(this.bg_icon, {}, { responseType: 'arraybuffer' })
|
||||
.then(response => response.arrayBuffer())
|
||||
.then(
|
||||
buffer =>
|
||||
`data:image/png;base64,${Buffer.from(buffer).toString('base64')}`
|
||||
);
|
||||
const all = await Promise.all([race_icon_b64, icon_b64, bg_icon_b64]);
|
||||
this.race_icon = all[0];
|
||||
this.icon = all[1];
|
||||
this.bg_icon = all[2];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class DeadlyTime.
|
||||
*/
|
||||
export class DeadlyTime {
|
||||
/**
|
||||
* @param {DeadlyTime} data
|
||||
*/
|
||||
constructor(data) {
|
||||
this.hour = data.hour;
|
||||
this.minute = data.minute;
|
||||
this.second = data.second;
|
||||
this.year = data.year;
|
||||
this.month = data.month;
|
||||
this.day = data.day;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue