chore(release): 0.4.0
[risinglegends.git] / src / server / chat-commands / set-level.ts
1 import { ChatCommand } from './base';
2 import { Socket } from 'socket.io';
3 import { broadcastMessage, Message } from '../../shared/message';
4 import { renderChatMessage } from './../views/chat';
5 import { updatePlayer } from '../player';
6 import { maxHp, maxVigor, Player } from '../../shared/player';
7
8 async function handler(rawCommand: string, sender: Socket, player: Player) {
9   if(player.permissions.includes('admin') || player.permissions.includes('tester')) {
10     let message: Message;
11     // command in set-level username level
12     const pieces = rawCommand.split(' ');
13     if(pieces.length !== 2) {
14       message = broadcastMessage('server', 'format: /set-level level');
15     }
16     else {
17       const level = parseInt(pieces.pop() || '0');
18       if(level < 1) {
19         message = broadcastMessage('server', 'format: /set-level [level >= 1]');
20       }
21       else {
22         message = broadcastMessage('server', `Set to level ${level}. Please reload.`);
23
24         player.level = level;
25         player.strength = 4;
26         player.constitution = 4;
27         player.dexterity = 4;
28         player.intelligence = 4;
29         player.hp = maxHp(player.constitution, player.level);
30         player.vigor = maxVigor(player.constitution, player.level);
31         player.stat_points = level-1;
32
33         await updatePlayer(player);
34       }
35     }
36
37     sender.emit('chat', renderChatMessage(message));
38
39   }
40 }
41
42 export const setLevel = new ChatCommand('set-level', new RegExp(/^set-level \d+$/), handler);