hytopia 0.3.7 → 0.3.8

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.
Files changed (45) hide show
  1. package/examples/hygrounds/assets/icons/auto-sniper.png +0 -0
  2. package/examples/hygrounds/assets/icons/gravity-potion.png +0 -0
  3. package/examples/hygrounds/assets/icons/revolver.png +0 -0
  4. package/examples/hygrounds/assets/icons/submachine-gun.png +0 -0
  5. package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper-named-nodes.glb +0 -0
  6. package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb +0 -0
  7. package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb.md5 +1 -0
  8. package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion-named-nodes.glb +0 -0
  9. package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb +0 -0
  10. package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb.md5 +1 -0
  11. package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver-named-nodes.glb +0 -0
  12. package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb +0 -0
  13. package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb.md5 +1 -0
  14. package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun-named-nodes.glb +0 -0
  15. package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb +0 -0
  16. package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb.md5 +1 -0
  17. package/examples/hygrounds/assets/models/items/auto-sniper.glb +0 -0
  18. package/examples/hygrounds/assets/models/items/gravity-potion.glb +0 -0
  19. package/examples/hygrounds/assets/models/items/revolver.glb +0 -0
  20. package/examples/hygrounds/assets/models/items/submachine-gun.glb +0 -0
  21. package/examples/hygrounds/assets/ui/index.html +51 -1
  22. package/examples/hygrounds/classes/GameManager.ts +39 -1
  23. package/examples/hygrounds/classes/GamePlayerEntity.ts +44 -13
  24. package/examples/hygrounds/classes/GunEntity.ts +1 -5
  25. package/examples/hygrounds/classes/ItemFactory.ts +12 -0
  26. package/examples/hygrounds/classes/items/GravityPotionEntity.ts +48 -0
  27. package/examples/hygrounds/classes/items/ShieldPotionEntity.ts +1 -1
  28. package/examples/hygrounds/classes/weapons/AutoShotgunEntity.ts +1 -1
  29. package/examples/hygrounds/classes/weapons/AutoSniperEntity.ts +43 -0
  30. package/examples/hygrounds/classes/weapons/LightMachineGunEntity.ts +2 -2
  31. package/examples/hygrounds/classes/weapons/RevolverEntity.ts +46 -0
  32. package/examples/hygrounds/classes/weapons/RocketLauncherEntity.ts +11 -2
  33. package/examples/hygrounds/classes/weapons/ShotgunEntity.ts +1 -1
  34. package/examples/hygrounds/classes/weapons/SubmachineGunEntity.ts +43 -0
  35. package/examples/hygrounds/gameConfig.ts +38 -6
  36. package/examples/hygrounds/index.ts +2 -1
  37. package/examples/player-persistence/README.md +3 -0
  38. package/examples/player-persistence/assets/map.json +2623 -0
  39. package/examples/player-persistence/dev/persistence/player-player-1.json +6 -0
  40. package/examples/player-persistence/dev/persistence/test.json +3 -0
  41. package/examples/player-persistence/index.ts +126 -0
  42. package/examples/player-persistence/package.json +16 -0
  43. package/package.json +1 -1
  44. package/server.js +1 -1
  45. /package/examples/hygrounds/assets/audio/sfx/{shield-potion-consume.mp3 → potion-consume.mp3} +0 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "test": "{\"a\": 2}",
3
+ "testing": {
4
+ "a": 1
5
+ }
6
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "test": "testing"
3
+ }
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hytopia",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "The HYTOPIA SDK makes it easy for developers to create massively multiplayer games using JavaScript or TypeScript.",
5
5
  "main": "server.js",
6
6
  "bin": {