werewolf-core
Version:
Are you a WEREWOLF?
194 lines (193 loc) • 6.76 kB
JavaScript
"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;