UNPKG

werewolf-core

Version:

Are you a WEREWOLF?

194 lines (193 loc) 6.76 kB
"use strict"; var effect_1 = require('./effect'); var field_1 = require('./field'); var log_1 = require('./log'); var votebox_1 = require('./lib/votebox'); var events = require('./event'); var diereason = require('./lib/diereason'); var count = require('./lib/count'); var team = require('./lib/team'); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = (_a = {}, _a[events.EVENT_OPENCHOICE] = function (_a) { var effects = _a.effects, event = _a.event; var event2 = event; var e = effect_1.initChoiceEffect(event2.on, event2.kind, event2.options); effects.add(e); }, _a[events.EVENT_CHOICE] = function (_a) { var players = _a.players, effects = _a.effects, event = _a.event; var event2 = event; var pl = players.get(event2.from); var ef = effects.get(event2.choice_id); if (pl != null && ef != null) { if (ef.type === effect_1.EFFECT_CHOICE && ef.id === event2.choice_id && ef.on === pl.id) { var v_1 = event2.value; if (ef.options.some(function (_a) { var value = _a.value; return value === v_1; })) { ef.value = v_1; return; } } } event2.prevented = true; }, _a[events.EVENT_PULL_LOGS] = function (_a) { var field = _a.field, event = _a.event; var event2 = event; (_b = event2.logs).push.apply(_b, field.logs); field.logs = []; var _b; }, _a[events.EVENT_NEXTPHASE] = function (_a) { var field = _a.field, runner = _a.runner; var phase = field.phase; if (phase === field_1.PHASE_DAY) { runner.addEvent(events.initLynchEvent()); runner.addEvent(events.initPhaseNightEvent()); } else if (phase === field_1.PHASE_NIGHT) { runner.addEvent(events.initMidnightEvent()); runner.addEvent(events.initPhaseDayEvent()); } else if (phase === field_1.PHASE_PROLOGUE) { runner.addEvent(events.initPhaseNightEvent()); } else { throw new Error('Unknown phase'); } }, _a[events.EVENT_PHASE_DAY] = function (_a) { var field = _a.field; field.phase = field_1.PHASE_DAY; field.day++; field.votebox = votebox_1.initVoteBox(); field.logs.push(log_1.initLogPhaseTransition(field.day, 'day')); }, _a[events.EVENT_PHASE_NIGHT] = function (_a) { var players = _a.players, field = _a.field; field.phase = field_1.PHASE_NIGHT; field.werewolfRemains = 1; field.werewolfTarget = []; field.logs.push(log_1.initLogPhaseTransition(field.day, 'night')); }, _a[events.EVENT_MIDNIGHT] = function (_a) { var runner = _a.runner, players = _a.players, field = _a.field; for (var _i = 0, _b = field.werewolfTarget; _i < _b.length; _i++) { var to = _b[_i].to; runner.addEvent(events.initDieEvent({ on: to, reason: diereason.WEREWOLF, })); } }, _a[events.EVENT_LYNCH] = function (_a) { var runner = _a.runner, field = _a.field, event = _a.event; var _b = votebox_1.countVotes(field.votebox), result = _b.result, ids = _b.ids; event.voteResult = result; if (result === votebox_1.VOTERESULT_CHOSEN) { runner.addEvent(events.initDieEvent({ on: ids[0], reason: diereason.LYNCH, })); } else if (result === votebox_1.VOTERESULT_MULTI) { } else if (result === votebox_1.VOTERESULT_NONE) { } }, _a[events.EVENT_VOTE] = function (_a) { var field = _a.field, event = _a.event; var event2 = event; if (field.votebox == null) { field.votebox = votebox_1.initVoteBox(); } votebox_1.addVote(field.votebox, { from: event2.from, to: event2.to, num: event2.num, priority: event2.priority, }); }, _a[events.EVENT_DIE] = function (_a) { var players = _a.players, event = _a.event; var event2 = event; var pl = players.get(event2.on); if (pl && pl.dead !== true) { pl.dead = true; pl.dead_reason = event2.reason; } }, _a[events.EVENT_JUDGE] = function (_a) { var runner = _a.runner, players = _a.players, event = _a.event; var event2 = event; var c_human = 0; var c_werewolf = 0; var c_alive = 0; for (var _i = 0, _b = players.asArray(); _i < _b.length; _i++) { var pl = _b[_i]; if (pl.dead === false) { c_alive++; var c = runner.runEvent(events.initQueryCountEvent(pl.id)).count; switch (c) { case count.COUNT_HUMAN: c_human++; break; case count.COUNT_WEREWOLF: c_werewolf++; break; } } } if (c_alive === 0) { event2.end = true; event2.draw = true; } else if (c_werewolf === 0) { event2.end = true; event2.draw = false; event2.result = team.TEAM_HUMAN; } else if (c_human <= c_werewolf) { event2.end = true; event2.draw = false; event2.result = team.TEAM_WEREWOLF; } else { event2.end = false; } }, _a[events.EVENT_QUERY_VOTEDONE] = function (_a) { var field = _a.field, event = _a.event; var event2 = event; var box = field.votebox; if (box && (event2.on in box)) { event2.result = true; } }, _a[events.EVENT_QUERY_PLAYERINFO] = function (_a) { var field = _a.field, effects = _a.effects, players = _a.players, event = _a.event; var event2 = event; var on = event2.on, result = event2.result; var pl = players.get(on); if (pl == null) { return; } result.roleDisp = pl.type; result.dead = pl.dead; for (var _i = 0, _b = effects.ofType(effect_1.EFFECT_CHOICE); _i < _b.length; _i++) { var ef = _b[_i]; if (ef.on === on) { result.choices.push({ kind: ef.choice_kind, options: ef.options, value: ef.value, }); } } }, _a ); var _a;