1 import { db } from './lib/db';
2 import {Player, maxHp} from "../shared/player";
3 import { random } from 'lodash';
4 import { Skills } from '../shared/skills';
5 import {Profession} from 'shared/profession';
6 import {logger} from './lib/logger';
8 export async function loadPlayer(authToken: string): Promise<Player> {
9 const res = await db.first()
10 .select('players.*', 'profession_levels.level', 'profession_levels.exp')
11 .from<Player>('players')
12 .join('profession_levels', function() {
14 this.on('profession_levels.player_id', '=', 'players.id')
15 this.andOn('profession_levels.profession', '=', 'players.profession')
19 'players.id': authToken
25 export async function createPlayer(): Promise<Player> {
26 const raw: Partial<Player> = {
27 username: `Player${Date.now().toString().substr(-7)}`,
28 strength: random(3, 5),
29 constitution: random(3, 5),
30 dexterity: random(3, 5),
31 intelligence: random(3, 5),
34 raw.hp = maxHp(raw.constitution, 1);
36 const res = await db('players').insert(raw).returning<Player[]>('*');
37 const player = res.pop();
39 logger.log(`Created player [${player.id}]`);
44 const sql = `insert into player_skills (id, player_id) values `;
46 logger.log(`Inserted base skills for [${player.id}]`)
48 Skills.forEach(skill => {
50 values.push(skill.id, player.id);
53 await db.raw(sql + pairs.join(','), values);
55 // create the profession level
56 await db('profession_levels').insert({
58 profession: 'Wanderer',
63 logger.log(`Inserted base profession level [${player.id}]`);
69 export async function updatePlayer(player: Player) {
76 strength: player.strength,
77 constitution: player.constitution,
78 dexterity: player.dexterity,
79 intelligence: player.intelligence,
80 stat_points: player.stat_points,
83 db('profession_levels').where({
85 profession: player.profession
93 export async function movePlayer(cityId: number, playerId: string) {
94 return db('players').where({
96 }).update({city_id: cityId})
99 export async function changeProfession(player_id: string, newProfession: Profession): Promise<{level: number, exp: number}> {
103 await db('profession_levels').insert({
105 profession: newProfession,
112 const res = await db.first().select('*').from('profession_levels').where({
114 profession: newProfession
119 // profession already exists, wahtever yo!
122 await db('players').where({
124 }).update({ profession: newProfession });