@bot-shiki/koishi-plugin-werewolf
Version:
Touhou werewolf game
68 lines (67 loc) • 2.62 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.rotate = exports.Character = exports.Preset = exports.Identity = exports.Weather = void 0;
exports.Weather = ['kaisei', 'donten', 'souten', 'hanagumori', 'noumu', 'tenkiame', 'kawagiri', 'taifuu', 'nagi', 'kousa', 'baiu'];
var Identity;
(function (Identity) {
Identity.Neutral = ['doremy', 'parsee'];
Identity.Youkai = [];
Identity.Youkai.push(...Identity.Youkai.Expert = ['yukari', 'utsuho', 'remilia', 'yuuka', 'mamizou']);
Identity.Youkai.push(...Identity.Youkai.Normal = ['kagerou', 'rumia', 'mystia', 'wriggle', 'wakasagihime', 'sekibanki', 'kyouko', 'tewi', 'chen', 'nazrin', 'kogasa']);
Identity.Ningen = [];
Identity.Ningen.push(...Identity.Ningen.Expert = ['reimu', 'rinnosuke']);
Identity.Ningen.push(...Identity.Ningen.Normal = ['marisa', 'sanae', 'sumireko', 'kosuzu', 'renko', 'merry', 'akyuu', 'youmu', 'mokou']);
Identity.Expert = [...Identity.Neutral, ...Identity.Youkai.Expert, ...Identity.Ningen.Expert];
function getParty(identity) {
if (Identity.Neutral.includes(identity))
return 'neutral';
if (Identity.Youkai.includes(identity))
return 'youkai';
if (Identity.Ningen.includes(identity))
return 'ningen';
}
Identity.getParty = getParty;
})(Identity = exports.Identity || (exports.Identity = {}));
exports.Preset = require('./preset');
class Character {
constructor(player, identity) {
this.player = player;
this.identity = identity;
this.party = Identity.getParty(identity);
}
/** 有特殊技能 */
get isExpert() {
return Identity.Expert.includes(this.identity);
}
get isRevenger() {
return ['reimu', 'yuuka'].includes(this.identity);
}
get isDead() {
return this.isOut && (this.identity !== 'utsuho' || this.killer !== 'vote');
}
get isDying() {
return this.killer && !this.isOut;
}
/** 是否被视为人类 */
get isNingen() {
return this.party === 'ningen' && this.identity !== 'rinnosuke';
}
/** 能在投票前发言 */
get canSpeak() {
return !this.killer || this.identity === 'utsuho' && this.killer === 'vote';
}
}
exports.Character = Character;
function rotate(source, offset = 0) {
const result = source.slice();
if (!offset)
return result;
if (offset < 0) {
result.unshift(...result.splice(offset, Infinity));
}
else {
result.push(...result.splice(0, offset));
}
return result;
}
exports.rotate = rotate;