UNPKG

@bot-shiki/koishi-plugin-werewolf

Version:
68 lines (67 loc) 2.62 kB
"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;