Skip to content
This repository was archived by the owner on Jan 15, 2024. It is now read-only.

Commit 2b4d09c

Browse files
committed
v1.1.1 - Support for game-specific APIs
1 parent 7c2d4a7 commit 2b4d09c

File tree

8 files changed

+85
-8
lines changed

8 files changed

+85
-8
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
public void Message_RegeneratePlayer(const String:type[], const String:message[], const JSON_Object:jsondata, WebsocketHandle:websocket) {
2+
int i = jsondata.GetInt("message")
3+
4+
if (IsClientInGame(i)) {
5+
TF2_RegeneratePlayer(i)
6+
}
7+
}

plugin/sourcemod.js.sp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ new Handle:g_hChilds
4242
#include "messages/SetPlayerRendering.sp"
4343
#include "messages/SlapPlayer.sp"
4444
#include "messages/TeleportPlayer.sp"
45+
#include "messages/tf2/RegeneratePlayer.sp"
4546

4647
#include "websocket/WebsocketPing.sp"
4748
#include "websocket/WebsocketEvents.sp"

plugin/websocket/OnWebsocketReceive.sp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,5 +88,7 @@ public void HandleMessage(const String:type[], const String:message[], const JSO
8888
Message_SlapPlayer(type, message, jsondata, websocket)
8989
} else if (StrEqual(type, "SetPlayerRendering")) {
9090
Message_SetPlayerRendering(type, message, jsondata, websocket)
91+
} else if (StrEqual(type, "TF2_RegeneratePlayer")) {
92+
Message_RegeneratePlayer(type, message, jsondata, websocket)
9193
}
9294
}

src/classes/Game.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @typedef Games
3+
* @property {string} None
4+
* @property {string} TeamFortress2
5+
*/
6+
export const Games = {
7+
None: "None",
8+
TeamFortress2: "TeamFortress2"
9+
}
10+
11+
export class Game {
12+
constructor(type) {
13+
this.type = type ?? Games.None
14+
}
15+
16+
serverModifier(server) {
17+
return server
18+
}
19+
20+
playerModifier(player) {
21+
return player
22+
}
23+
}

src/classes/Player.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import { checkBytes } from "./Utilities.js"
4040
this.partial = partial ?? false
4141

4242
this.update(data)
43+
this.players.server.game.playerModifier(this)
4344

4445
this.players.on("chat", (plr, message, team) => {
4546
if (plr.id != this.id) return

src/classes/Server.js

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import EventEmitter from "events"
22
import { Events, Messages, Socket } from "./Socket.js"
33
import { Console } from "./Console.js"
4+
import { Game } from "./Game.js"
45
import { Players } from "./Players.js"
56

67
/**
@@ -11,7 +12,6 @@ import { Players } from "./Players.js"
1112
* @property {object} socket - An instance of the `Socket` class used for interacting with the WebSocket. Will be null if not yet connected.
1213
* @property {object} console - Instance of the `Console` object for this server.
1314
* @property {object} players - Instance of the `Players` object for this server.
14-
*
1515
* @property {string} currentMap - Name of the current map. Keep in mind that this is a generic response from the engine and not the game itself.
1616
* @property {bool} isDedicated - Whether the server is a dedicated server or not.
1717
* @property {sring} authID - The SteamID of the server.
@@ -35,6 +35,7 @@ export class Server extends EventEmitter {
3535
this.socket = null
3636
this.console = new Console(this)
3737
this.players = new Players(this)
38+
this.game = null
3839

3940
this.currentMap = ""
4041
this.nextMap = ""
@@ -55,14 +56,8 @@ export class Server extends EventEmitter {
5556
*/
5657
async connect() {
5758
await new Socket(this, this.host)
58-
.then((socket) => {
59+
.then(async (socket) => {
5960
this.socket = socket
60-
/**
61-
* Fired when the connection to the server has been established.
62-
*
63-
* @event Server#ready
64-
*/
65-
this.emit("ready", true)
6661

6762
this.socket.on(Events.ServerUpdate, (data) => {
6863
var msg = data.message
@@ -85,6 +80,27 @@ export class Server extends EventEmitter {
8580
data.message.value
8681
)
8782
})
83+
84+
await this.fetch()
85+
86+
switch (this.gameDescription) {
87+
case "Team Fortress":
88+
await import("../games/TeamFortress2.js").then(module => {
89+
this.game = new module.TeamFortress2()
90+
this.game.serverModifier(this)
91+
})
92+
break
93+
default:
94+
this.game = new Game()
95+
this.game.serverModifier(this)
96+
}
97+
98+
/**
99+
* Fired when the connection to the server has been established.
100+
*
101+
* @event Server#ready
102+
*/
103+
this.emit("ready", true)
88104
})
89105
.catch(err => { throw err })
90106
}

src/classes/Socket.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ export class Socket extends EventEmitter {
202202
TeleportPlayer: "TeleportPlayer",
203203
SlapPlayer: "SlapPlayer",
204204
SetPlayerRendering: "SetPlayerRendering"
205+
TF2_RegeneratePlayer: "TF2_RegeneratePlayer"
205206
}
206207

207208
/**

src/games/TeamFortress2.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Game, Games } from "../classes/Game.js"
2+
import { Messages } from "../classes/Socket.js"
3+
4+
export class TeamFortress2 extends Game {
5+
constructor() {
6+
super(Games.TeamFortress2)
7+
}
8+
9+
serverModifier(server) {
10+
return server
11+
}
12+
13+
playerModifier(player) {
14+
/**
15+
* Regenerates a player's health and ammo. Team Fortress 2 only!
16+
* [SourceMod API Reference](https://sm.alliedmods.net/new-api/tf2/TF2_RegeneratePlayer)
17+
*
18+
* @function Player#regenerate
19+
*/
20+
player.regenerate = function() {
21+
return player.players.server.socket.send(Messages.TF2_RegeneratePlayer, player.id)
22+
}
23+
24+
return player
25+
}
26+
}

0 commit comments

Comments
 (0)