hytopia 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/server.playerentitycontroller.md +1 -1
- package/docs/server.playerentitycontroller.tickwithplayerinput.md +1 -1
- package/examples/hygrounds/assets/icons/auto-sniper.png +0 -0
- package/examples/hygrounds/assets/icons/gravity-potion.png +0 -0
- package/examples/hygrounds/assets/icons/revolver.png +0 -0
- package/examples/hygrounds/assets/icons/submachine-gun.png +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun-named-nodes.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb +0 -0
- package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb.md5 +1 -0
- package/examples/hygrounds/assets/models/items/auto-sniper.glb +0 -0
- package/examples/hygrounds/assets/models/items/gravity-potion.glb +0 -0
- package/examples/hygrounds/assets/models/items/revolver.glb +0 -0
- package/examples/hygrounds/assets/models/items/submachine-gun.glb +0 -0
- package/examples/hygrounds/assets/ui/index.html +51 -1
- package/examples/hygrounds/classes/GameManager.ts +39 -1
- package/examples/hygrounds/classes/GamePlayerEntity.ts +44 -13
- package/examples/hygrounds/classes/GunEntity.ts +1 -5
- package/examples/hygrounds/classes/ItemFactory.ts +12 -0
- package/examples/hygrounds/classes/items/GravityPotionEntity.ts +48 -0
- package/examples/hygrounds/classes/items/ShieldPotionEntity.ts +1 -1
- package/examples/hygrounds/classes/weapons/AK47Entity.ts +1 -1
- package/examples/hygrounds/classes/weapons/AutoShotgunEntity.ts +2 -2
- package/examples/hygrounds/classes/weapons/AutoSniperEntity.ts +43 -0
- package/examples/hygrounds/classes/weapons/LightMachineGunEntity.ts +3 -3
- package/examples/hygrounds/classes/weapons/RevolverEntity.ts +46 -0
- package/examples/hygrounds/classes/weapons/RocketLauncherEntity.ts +11 -2
- package/examples/hygrounds/classes/weapons/ShotgunEntity.ts +1 -1
- package/examples/hygrounds/classes/weapons/SubmachineGunEntity.ts +43 -0
- package/examples/hygrounds/gameConfig.ts +38 -6
- package/examples/hygrounds/index.ts +2 -1
- package/examples/player-persistence/README.md +3 -0
- package/examples/player-persistence/assets/map.json +2623 -0
- package/examples/player-persistence/dev/persistence/player-player-1.json +6 -0
- package/examples/player-persistence/dev/persistence/test.json +3 -0
- package/examples/player-persistence/index.ts +126 -0
- package/examples/player-persistence/package.json +16 -0
- package/package.json +1 -1
- package/server.api.json +1 -1
- package/server.d.ts +3 -1
- package/server.js +1 -1
- /package/examples/hygrounds/assets/audio/sfx/{shield-potion-consume.mp3 → potion-consume.mp3} +0 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
import {
|
2
|
+
startServer,
|
3
|
+
PlayerEntity,
|
4
|
+
PlayerEvent,
|
5
|
+
Player,
|
6
|
+
PersistenceManager,
|
7
|
+
} from 'hytopia';
|
8
|
+
|
9
|
+
import worldMap from './assets/map.json';
|
10
|
+
|
11
|
+
startServer(world => {
|
12
|
+
world.loadMap(worldMap);
|
13
|
+
|
14
|
+
// Handle player join
|
15
|
+
world.on(PlayerEvent.JOINED_WORLD, ({ player }) => {
|
16
|
+
const playerEntity = new PlayerEntity({
|
17
|
+
player,
|
18
|
+
name: 'Player',
|
19
|
+
modelUri: 'models/players/player.gltf',
|
20
|
+
modelLoopedAnimations: ['idle'],
|
21
|
+
modelScale: 0.5,
|
22
|
+
});
|
23
|
+
|
24
|
+
playerEntity.spawn(world, { x: 0, y: 10, z: 0 });
|
25
|
+
|
26
|
+
help(player);
|
27
|
+
});
|
28
|
+
|
29
|
+
// Handle player leave
|
30
|
+
world.on(PlayerEvent.LEFT_WORLD, ({ player }) => {
|
31
|
+
world.entityManager.getPlayerEntitiesByPlayer(player).forEach(entity => entity.despawn());
|
32
|
+
});
|
33
|
+
|
34
|
+
// Command definitions with help text
|
35
|
+
type Command = {
|
36
|
+
command: string;
|
37
|
+
description: string;
|
38
|
+
args?: string;
|
39
|
+
handler: (player: Player, args: string[]) => void;
|
40
|
+
};
|
41
|
+
|
42
|
+
const commands: Record<string, Command> = {
|
43
|
+
help: {
|
44
|
+
command: '/help',
|
45
|
+
description: 'Shows all available commands',
|
46
|
+
handler: (player: Player) => help(player),
|
47
|
+
},
|
48
|
+
whoami: {
|
49
|
+
command: '/whoami',
|
50
|
+
description: 'Shows your username and ID',
|
51
|
+
handler: (player: Player) => {
|
52
|
+
sendMessage(player, `You are ${player.username} | Your ID is ${player.id}`);
|
53
|
+
}
|
54
|
+
},
|
55
|
+
setPlayerKeyValue: {
|
56
|
+
command: '/setplayerkeyvalue',
|
57
|
+
description: 'Sets a player state key with a string value',
|
58
|
+
args: '<key> <value>',
|
59
|
+
handler: (player: Player, args: string[]) => {
|
60
|
+
const [key, ...value] = args;
|
61
|
+
if (!key || value.length === 0) return sendMessage(player, 'Usage: /setplayerkeyvalue <key> <value>', 'FF0000');
|
62
|
+
|
63
|
+
player.setPersistedData({ [key]: value.join(' ') });
|
64
|
+
sendMessage(player, `Set player state: ${key} = ${value.join(' ')}`);
|
65
|
+
}
|
66
|
+
},
|
67
|
+
setPlayerKeyJson: {
|
68
|
+
command: '/setplayerkeyjson',
|
69
|
+
description: 'Sets a player state key with a JSON value',
|
70
|
+
args: '<key> <json>',
|
71
|
+
handler: (player: Player, args: string[]) => {
|
72
|
+
const [key, ...value] = args;
|
73
|
+
if (!key || value.length === 0) return sendMessage(player, 'Usage: /setplayerkeyjson <key> <json>', 'FF0000');
|
74
|
+
|
75
|
+
try {
|
76
|
+
const jsonValue = JSON.parse(value.join(' '));
|
77
|
+
player.setPersistedData({ [key]: jsonValue });
|
78
|
+
sendMessage(player, `Set player state: ${key} = ${JSON.stringify(jsonValue)}`);
|
79
|
+
} catch (e) {
|
80
|
+
sendMessage(player, 'Invalid JSON value', 'FF0000');
|
81
|
+
}
|
82
|
+
}
|
83
|
+
},
|
84
|
+
getPlayerState: {
|
85
|
+
command: '/getplayerstate',
|
86
|
+
description: 'Gets all player state',
|
87
|
+
handler: async (player: Player) => {
|
88
|
+
const value = await player.getPersistedData();
|
89
|
+
sendMessage(player, `Player state: ${JSON.stringify(value, null, 2)}`);
|
90
|
+
}
|
91
|
+
},
|
92
|
+
deletePlayerKey: {
|
93
|
+
command: '/deleteplayerkey',
|
94
|
+
description: 'Deletes a player state key',
|
95
|
+
args: '<key>',
|
96
|
+
handler: (player: Player, args: string[]) => {
|
97
|
+
const [key] = args;
|
98
|
+
if (!key) return sendMessage(player, 'Usage: /deleteplayerkey <key>', 'FF0000');
|
99
|
+
|
100
|
+
player.setPersistedData({ [key]: undefined });
|
101
|
+
sendMessage(player, `Deleted player state key: ${key}`);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
};
|
105
|
+
|
106
|
+
// Helper function for sending messages
|
107
|
+
function sendMessage(player: Player, message: string, color = '00FF00') {
|
108
|
+
world.chatManager.sendPlayerMessage(player, message, color);
|
109
|
+
}
|
110
|
+
|
111
|
+
// Register all commands
|
112
|
+
Object.values(commands).forEach(({ command, handler }) => {
|
113
|
+
world.chatManager.registerCommand(command, handler);
|
114
|
+
});
|
115
|
+
|
116
|
+
// Help command implementation
|
117
|
+
function help(player: Player) {
|
118
|
+
sendMessage(player, '=== Available Commands ===');
|
119
|
+
Object.values(commands).forEach(cmd => {
|
120
|
+
const usage = cmd.args ? `${cmd.command} ${cmd.args}` : cmd.command;
|
121
|
+
sendMessage(player, `${usage}`);
|
122
|
+
sendMessage(player, ` ${cmd.description}`);
|
123
|
+
sendMessage(player, '---');
|
124
|
+
});
|
125
|
+
}
|
126
|
+
});
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"name": "payload-game",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"description": "",
|
5
|
+
"main": "index.js",
|
6
|
+
"scripts": {
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
8
|
+
},
|
9
|
+
"keywords": [],
|
10
|
+
"author": "",
|
11
|
+
"license": "ISC",
|
12
|
+
"dependencies": {
|
13
|
+
"@hytopia.com/assets": "latest",
|
14
|
+
"hytopia": "latest"
|
15
|
+
}
|
16
|
+
}
|
package/package.json
CHANGED
package/server.api.json
CHANGED
@@ -27166,7 +27166,7 @@
|
|
27166
27166
|
{
|
27167
27167
|
"kind": "Method",
|
27168
27168
|
"canonicalReference": "server!PlayerEntityController#tickWithPlayerInput:member(1)",
|
27169
|
-
"docComment": "/**\n * Ticks the player movement for the entity controller, overriding the default implementation.\n *\n * @param entity - The entity to tick.\n *\n * @param input - The current input state of the player.\n *\n * @param cameraOrientation - The current camera orientation state of the player.\n *\n * @param deltaTimeMs - The delta time in milliseconds since the last tick.\n */\n",
|
27169
|
+
"docComment": "/**\n * Ticks the player movement for the entity controller, overriding the default implementation. If the entity to tick is a child entity, only the event will be emitted but the default movement logic will not be applied.\n *\n * @param entity - The entity to tick.\n *\n * @param input - The current input state of the player.\n *\n * @param cameraOrientation - The current camera orientation state of the player.\n *\n * @param deltaTimeMs - The delta time in milliseconds since the last tick.\n */\n",
|
27170
27170
|
"excerptTokens": [
|
27171
27171
|
{
|
27172
27172
|
"kind": "Content",
|
package/server.d.ts
CHANGED
@@ -3511,7 +3511,9 @@ export declare class PlayerEntityController extends BaseEntityController {
|
|
3511
3511
|
spawn(entity: Entity): void;
|
3512
3512
|
/**
|
3513
3513
|
* Ticks the player movement for the entity controller,
|
3514
|
-
* overriding the default implementation.
|
3514
|
+
* overriding the default implementation. If the entity to tick
|
3515
|
+
* is a child entity, only the event will be emitted but the default
|
3516
|
+
* movement logic will not be applied.
|
3515
3517
|
*
|
3516
3518
|
* @param entity - The entity to tick.
|
3517
3519
|
* @param input - The current input state of the player.
|