und nicht Xaver jetzt dran (am Wiki) rumzubasteln, nur weil deine Genialität jetzt keinen Sieg für die Wölfe gebracht hat
Sollte vor dem Rumbasteln schon noch von anderen Rollentestern wie Sareon usw. besprochen werden.
Ich bastle nicht, ich korrigiere nur unsaubere Formulierungen, die durch meine Vorgänger entstanden sind
Außerdem gibt mir die Referenzimplementierung des Jeremias in allen Punkten recht
JavaScript
import { Blubb } from '../../Blubb';
import { Gesinnung, Tod } from '../../enums';
import { AddableActionCollection, IdleAction } from '../../Nachtaktion';
import { RoleInfos } from '../../settingGenerator/RoleInfos';
import { SkillTypes, SkillValues, Variance } from '../../settingGenerator/SkillTypes';
import { Spieler } from '../../Spieler';
import { AbstractDorfRolle } from './AbstractDorfRolle';
export class [wiki]Jeremias[/wiki] extends AbstractDorfRolle {
static readonly names = ['Jeremias'];
static readonly roleInfos: RoleInfos = {
gesinnung: Gesinnung.DB,
balance: 5,
variance: Variance.MEDIUM,
minPlayerNumber: 4,
skills: [[SkillTypes.DEFENSIV, SkillValues.MEDIUM], [SkillTypes.SEHEND, SkillValues.WEAK]]
};
protected _name = 'Jeremias';
private canUseAbility = true;
private attackers?: Spieler[];
schutzNachtaktion(blubb: Blubb, actions: AddableActionCollection): void {
if (!this.canUseAbility) {
return;
}
actions.add(new IdleAction(() => {
const attck = blubb.attacks.find((attack) => (
attack.player === this.player && attack.cause === Tod.FRESSEN && !attack.isProtected && attack.savable
));
if (attck !== undefined && attck.cause === Tod.FRESSEN) {
blubb.protectPlayer(this.player, attck);
attck.attacker.addEndOfNigthMessage('Ihr habt versucht ' + this.player.name
+ ' den [wiki]Jeremias[/wiki] zu fressen.');
this.attackers = attck.attacker.getRudelmitglieder(blubb);
this.canUseAbility = false;
}
}));
}
dawnNachtaktion(blubb: Blubb, actions: AddableActionCollection): void {
if (this.attackers === undefined) {
return;
}
const possibleAttackers = this.attackers.filter((player) => (!blubb.isPlayerGoingToDie(player)));
const attacker = possibleAttackers[Math.floor(Math.random() * possibleAttackers.length)];
const possibleOthers = blubb.realPlayers.filter((player) => (
player.isAlive && player !== this.player && player !== attacker && !blubb.isPlayerGoingToDie(player)
));
const other = possibleOthers[Math.floor(Math.random() * possibleOthers.length)];
// bringe die Spieler in eine zufällige Reihenfolge, weil man sonst wüsste, wo welcher steht
const players = (Math.random() > 0.5 ? [attacker, other] : [other, attacker])
.filter((player) => (player !== undefined));
let txt;
let blubbTxt = this.player.getDescription() + ' wurde angegriffen';
if (players.length === 0) {
txt = 'Du wurdest angegriffen und überlebst als einziger die Nacht.';
blubbTxt += ', aber erfährt von keinem seiner Angreifer, weil alle sterben.';
} else if (players.length === 1) {
txt = 'Du wurdest angegriffen und es überlebt mit dir nur ' + players[0].name;
blubbTxt += ', aber erfährt nur von ' + players[0].name + ', weil alle anderen sterben.';
} else {
txt = 'Du wurdest angegriffen und erfährst diese 2 Namen: '
+ players[0].name + ' und ' + players[1].name;
blubbTxt += ' und erfährt von ' + players[0].name + ' und ' + players[1].name + '.';
}
actions.addText(txt, () => {
this.attackers = undefined;
blubb.addToAllActions(blubbTxt);
});
}
}
Alles anzeigen
(weshalb gibt es noch immer keine Syntaxhervorhebung für Typescript?)