chore(release): 0.0.2
[risinglegends.git] / src / events / profession-changing / server.ts
1 import {API, SocketEvent} from "../../server/socket-event.server";
2 import { EVENT_NAME } from './shared';
3 import { changeProfession } from "../../server/player";
4 import {Profession} from "shared/profession";
5 import {broadcastMessage} from "../../shared/message";
6
7 const MIN_LEVEL = 25;
8
9 export const professionRecruiter: SocketEvent = {
10   eventName: EVENT_NAME,
11   handler: (api, data): Promise<any> => {
12
13     let text: string = '';
14
15     if(api.player.profession === 'Wanderer') {
16       text = `
17       <b>Welcome to the Professional Services at Windcross!</b>
18       <p>Our duty is to help Wanderers such as yourself become more than they are. By helping you achieve new levels in service of the King, we can ensure that the Kingdom of Khatis continues to grow!</p>
19       <p>You have 3 choices laid before you.</p>
20       <p>You could become a great and mighty <b>Warrior</b>! Wielding powerful swords and maces.</p>
21       <p>You could become a powerful <b>Mage</b>! Casting spells to rain fire upon our enemies.</p>
22       <p>You could become a lithe <b>Rogue</b>! Attacking our enemies swiftly when they least expect!</p>
23       `;
24
25       if(api.player.level < MIN_LEVEL) {
26         text += `<p>Unfortunately.. you have to be at least level ${MIN_LEVEL} to take part in our training...</p>`;
27       }
28       else {
29         text += `
30         <p><b>Be Careful!</b> Once you change your profession, you will never again be a Wanderer</p>
31         <div>
32         <button class="city-emit-event" data-event="${EVENT_NAME}:warrior">Become a Warrior</button>
33         <button class="city-emit-event" data-event="${EVENT_NAME}:mage">Become a Mage</button>
34         <button class="city-emit-event" data-event="${EVENT_NAME}:rogue">Become a Rogue</button>
35         </div>
36         `
37       }
38     }
39     else {
40
41       let town = 'UNSET';
42       let place = 'UNSETPLACE';
43       switch(api.player.profession) {
44         case 'Warrior':
45           town = 'Stether';
46           place = 'Highbreaker Inn'
47           break;
48         case 'Mage':
49           town = 'Davelfell';
50           place = 'Mages Tower';
51           break;
52         case 'Rogue':
53           town = 'Ferbalt Gap';
54           place = 'Keepers Tavern';
55           break;
56       }
57
58       text = `<p>Welcome <b>${api.player.profession}</b>!`;
59       text += `<p>Unfortunately I won't be of much help to you now that you are no longer a wanderer...</p>`;
60       text += `<p>However, you should visit the ${place} in ${town} that can probably provide some guidance!</p>`;
61     }
62
63
64     api.socket.emit('city:services:profession_recruitor_windcross', {
65       text
66     });
67
68     return;
69   }
70 };
71
72 async function generalFirstLevelProfessionChange(api: API, data: unknown, profession: Profession) {
73     console.log(`${api.player.username} is becoming a ${profession}!`);
74     const update = await changeProfession(api.player.id, profession);
75
76     api.player.level = update.level;
77     api.player.exp = update.exp;
78     api.player.profession = profession;
79
80     api.socket.emit('updatePlayer', api.player);
81     api.socket.emit(`${EVENT_NAME}:${profession.toLowerCase()}`, {
82       text: `Congratulations! You are now a ${profession}!`
83     });
84
85     api.io.emit('chat', broadcastMessage('server', `${api.player.username} is now a ${profession}`));
86 }
87
88 export const professionChangeWarrior: SocketEvent = {
89   eventName: `${EVENT_NAME}:warrior`,
90   handler: async  (api, data) => {
91     generalFirstLevelProfessionChange(api, data, 'Warrior');
92   }
93 }
94
95 export const professionChangeMage: SocketEvent = {
96   eventName: `${EVENT_NAME}:mage`,
97   handler: async  (api, data) => {
98     generalFirstLevelProfessionChange(api, data, 'Mage');
99   }
100 }
101
102 export const professionChangeRogue: SocketEvent = {
103   eventName: `${EVENT_NAME}:rogue`,
104   handler: async  (api, data) => {
105     generalFirstLevelProfessionChange(api, data, 'Rogue');
106   }
107 }