kulmapaikka-ircbot/plugins/character2.js

134 lines
3.6 KiB
JavaScript

var BasePlugin = require('./base.js')
var Chance = require('chance')
var chance = new Chance()
class Character {
constructor () {
this.gender = null
this.name = null
this.class = null
this.alignment = null
this.stats = []
this.statSum = -1
}
create () {
this.gender = chance.gender()
this.name = chance.first({gender: this.gender})
// Throw stats
for (var i = 0; i < 6; i++) {
var throws = [chance.d6(), chance.d6(), chance.d6(), chance.d6()].sort()
throws.splice(0, 1)
var stat = throws.reduce(function (a, b) { return a + b }, 0)
this.stats.push(stat)
}
this.statSum = this.stats.reduce(function (a, b) { return a + b }, 0)
// Select race
var races = {
'Human': '',
'Dwarf': 'Fighter',
'Elf': 'Wizard',
'Gnome': 'Bard',
'Half-Elf': '',
'Half-Orc': 'Barbarian',
'Halfling': 'Rogue'
}
this.race = Object.keys(races)[chance.natural({min: 0, max: Object.keys(races).length - 1})]
// Select alignment
var alignmentY = ['Good', 'Neutral', 'Evil'].splice(chance.natural({min: 0, max: 2}), 1)
var alignmentX = ['Lawful', 'Neutral', 'Chaotic'].splice(chance.natural({min: 0, max: 2}), 1)
this.alignment = (alignmentY[0] === 'Neutral' && alignmentX[0] === 'Neutral') ? 'True Neutral' : alignmentX[0] + ' ' + alignmentY[0]
// Select class
var classes = {
'Barbarian': '',
'Bard': '',
'Cleric': '',
'Druid': '',
'Fighter': '',
'Monk': '',
'Paladin': '',
'Ranger': '',
'Rogue': '',
'Sorcerer': ''
}
this.class = Object.keys(classes)[chance.natural({min: 0, max: Object.keys(classes).length - 1})]
// Select age
var roll = function (times, func) {
var sum = 0
for (var i = 0; i < times; i++) {
sum += chance[func]()
}
return sum
}
var ages = {
'Human': { start: 15, classes: [roll(1, 'd4'), roll(1, 'd6'), roll(2, 'd6')] },
'Dwarf': { start: 40, classes: [roll(3, 'd6'), roll(5, 'd6'), roll(6, 'd6')] },
'Elf': { start: 110, classes: [roll(4, 'd6'), roll(6, 'd6'), roll(10, 'd6')] },
'Gnome': { start: 40, classes: [roll(4, 'd6'), roll(6, 'd6'), roll(9, 'd6')] },
'Half-Elf': { start: 20, classes: [roll(1, 'd6'), roll(2, 'd6'), roll(3, 'd6')] },
'Half-Orc': { start: 14, classes: [roll(1, 'd4'), roll(1, 'd6'), roll(2, 'd6')] },
'Halfling': { start: 20, classes: [roll(2, 'd4'), roll(3, 'd6'), roll(4, 'd6')] }
}
var ageClasses = {
'Barbarian': 0,
'Rogue': 0,
'Sorcerer': 0,
'Bard': 1,
'Fighter': 1,
'Paladin': 1,
'Ranger': 1,
'Cleric': 2,
'Druid': 2,
'Monk': 2,
'Wizard': 2
}
this.age = ages[this.race].start + ages[this.race].classes[ageClasses[this.class]]
}
toString () {
var str = this.age + ' years old ' + this.alignment + ' ' + this.gender + ' ' + this.race + ' ' + this.class + ' named ' + this.name
str += ' with stats '
this.stats.forEach(function (val) {
str += val + ' '
})
str += ' (' + this.statSum + ')'
return str
}
}
class Character2 extends BasePlugin {
constructor (config) {
super(config)
this.name = 'Character2'
}
help () {
// | Command | Description
return '.luohahmo2 Luo D&D-hahmon statsit nimellä ja luokalla'
}
test (input) {
if (input.match(/^\.luohahmo2$/i)) {
return true
}
return false
}
result (input) {
// Different cases
let newChar = new Character()
newChar.create()
let result = newChar.toString()
return result
}
}
module.exports = Character2