hytopia 0.3.6 → 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 (147) hide show
  1. package/boilerplate/assets/map.json +191 -43
  2. package/docs/server.playercameramode.md +14 -0
  3. package/examples/hygrounds/README.md +0 -0
  4. package/examples/hygrounds/assets/audio/sfx/chest-open-1.mp3 +0 -0
  5. package/examples/hygrounds/assets/audio/sfx/chest-open-2.mp3 +0 -0
  6. package/examples/hygrounds/assets/audio/sfx/machine-gun-reload.mp3 +0 -0
  7. package/examples/hygrounds/assets/audio/sfx/machine-gun-shoot.mp3 +0 -0
  8. package/examples/hygrounds/assets/audio/sfx/medpack-consume.mp3 +0 -0
  9. package/examples/hygrounds/assets/audio/sfx/mining-drill-drilling.mp3 +0 -0
  10. package/examples/hygrounds/assets/audio/sfx/pistol-reload.mp3 +0 -0
  11. package/examples/hygrounds/assets/audio/sfx/pistol-shoot.mp3 +0 -0
  12. package/examples/hygrounds/assets/audio/sfx/player-hurt.mp3 +0 -0
  13. package/examples/hygrounds/assets/audio/sfx/potion-consume.mp3 +0 -0
  14. package/examples/hygrounds/assets/audio/sfx/rifle-reload.mp3 +0 -0
  15. package/examples/hygrounds/assets/audio/sfx/rifle-shoot.mp3 +0 -0
  16. package/examples/hygrounds/assets/audio/sfx/rocket-launcher-explosion.mp3 +0 -0
  17. package/examples/hygrounds/assets/audio/sfx/rocket-launcher-reload.mp3 +0 -0
  18. package/examples/hygrounds/assets/audio/sfx/rocket-launcher-shoot.mp3 +0 -0
  19. package/examples/hygrounds/assets/audio/sfx/shield.png +0 -0
  20. package/examples/hygrounds/assets/audio/sfx/shotgun-reload.mp3 +0 -0
  21. package/examples/hygrounds/assets/audio/sfx/shotgun-shoot.mp3 +0 -0
  22. package/examples/hygrounds/assets/audio/sfx/sniper-reload.mp3 +0 -0
  23. package/examples/hygrounds/assets/audio/sfx/sniper-shoot.mp3 +0 -0
  24. package/examples/hygrounds/assets/icons/ak-47.png +0 -0
  25. package/examples/hygrounds/assets/icons/ammo.png +0 -0
  26. package/examples/hygrounds/assets/icons/auto-shotgun.png +0 -0
  27. package/examples/hygrounds/assets/icons/auto-sniper.png +0 -0
  28. package/examples/hygrounds/assets/icons/block.png +0 -0
  29. package/examples/hygrounds/assets/icons/bolt-action-sniper.png +0 -0
  30. package/examples/hygrounds/assets/icons/crown-bronze.png +0 -0
  31. package/examples/hygrounds/assets/icons/crown-gold.png +0 -0
  32. package/examples/hygrounds/assets/icons/crown-silver.png +0 -0
  33. package/examples/hygrounds/assets/icons/gravity-potion.png +0 -0
  34. package/examples/hygrounds/assets/icons/heart.png +0 -0
  35. package/examples/hygrounds/assets/icons/light-machine-gun.png +0 -0
  36. package/examples/hygrounds/assets/icons/medpack.png +0 -0
  37. package/examples/hygrounds/assets/icons/mining-drill.png +0 -0
  38. package/examples/hygrounds/assets/icons/pickaxe.png +0 -0
  39. package/examples/hygrounds/assets/icons/pistol.png +0 -0
  40. package/examples/hygrounds/assets/icons/revolver.png +0 -0
  41. package/examples/hygrounds/assets/icons/rocket-launcher.png +0 -0
  42. package/examples/hygrounds/assets/icons/shield-potion.png +0 -0
  43. package/examples/hygrounds/assets/icons/shield.png +0 -0
  44. package/examples/hygrounds/assets/icons/shotgun.png +0 -0
  45. package/examples/hygrounds/assets/icons/submachine-gun.png +0 -0
  46. package/examples/hygrounds/assets/map.json +31796 -0
  47. package/examples/hygrounds/assets/models/environment/.optimized/explosion/explosion-named-nodes.glb +0 -0
  48. package/examples/hygrounds/assets/models/environment/.optimized/explosion/explosion.glb +0 -0
  49. package/examples/hygrounds/assets/models/environment/.optimized/explosion/explosion.glb.md5 +1 -0
  50. package/examples/hygrounds/assets/models/environment/.optimized/explosion-2/explosion-2-named-nodes.glb +0 -0
  51. package/examples/hygrounds/assets/models/environment/.optimized/explosion-2/explosion-2.glb +0 -0
  52. package/examples/hygrounds/assets/models/environment/.optimized/explosion-2/explosion-2.glb.md5 +1 -0
  53. package/examples/hygrounds/assets/models/environment/.optimized/explosion-3/explosion-3-named-nodes.glb +0 -0
  54. package/examples/hygrounds/assets/models/environment/.optimized/explosion-3/explosion-3.glb +0 -0
  55. package/examples/hygrounds/assets/models/environment/.optimized/explosion-3/explosion-3.glb.md5 +1 -0
  56. package/examples/hygrounds/assets/models/environment/.optimized/helicopter/helicopter-named-nodes.glb +0 -0
  57. package/examples/hygrounds/assets/models/environment/.optimized/helicopter/helicopter.glb +0 -0
  58. package/examples/hygrounds/assets/models/environment/.optimized/helicopter/helicopter.glb.md5 +1 -0
  59. package/examples/hygrounds/assets/models/environment/chest.gltf +1 -0
  60. package/examples/hygrounds/assets/models/environment/explosion.glb +0 -0
  61. package/examples/hygrounds/assets/models/environment/muzzle-flash.gltf +1 -0
  62. package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper-named-nodes.glb +0 -0
  63. package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb +0 -0
  64. package/examples/hygrounds/assets/models/items/.optimized/auto-sniper/auto-sniper.glb.md5 +1 -0
  65. package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion-named-nodes.glb +0 -0
  66. package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb +0 -0
  67. package/examples/hygrounds/assets/models/items/.optimized/gravity-potion/gravity-potion.glb.md5 +1 -0
  68. package/examples/hygrounds/assets/models/items/.optimized/medkit/medkit-named-nodes.glb +0 -0
  69. package/examples/hygrounds/assets/models/items/.optimized/medkit/medkit.glb +0 -0
  70. package/examples/hygrounds/assets/models/items/.optimized/medkit/medkit.glb.md5 +1 -0
  71. package/examples/hygrounds/assets/models/items/.optimized/medpack/medpack-named-nodes.glb +0 -0
  72. package/examples/hygrounds/assets/models/items/.optimized/medpack/medpack.glb +0 -0
  73. package/examples/hygrounds/assets/models/items/.optimized/medpack/medpack.glb.md5 +1 -0
  74. package/examples/hygrounds/assets/models/items/.optimized/mining-drill/mining-drill-named-nodes.glb +0 -0
  75. package/examples/hygrounds/assets/models/items/.optimized/mining-drill/mining-drill.glb +0 -0
  76. package/examples/hygrounds/assets/models/items/.optimized/mining-drill/mining-drill.glb.md5 +1 -0
  77. package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver-named-nodes.glb +0 -0
  78. package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb +0 -0
  79. package/examples/hygrounds/assets/models/items/.optimized/revolver/revolver.glb.md5 +1 -0
  80. package/examples/hygrounds/assets/models/items/.optimized/rocket-missile/rocket-missile-named-nodes.glb +0 -0
  81. package/examples/hygrounds/assets/models/items/.optimized/rocket-missile/rocket-missile.glb +0 -0
  82. package/examples/hygrounds/assets/models/items/.optimized/rocket-missile/rocket-missile.glb.md5 +1 -0
  83. package/examples/hygrounds/assets/models/items/.optimized/shield-potion/shield-potion-named-nodes.glb +0 -0
  84. package/examples/hygrounds/assets/models/items/.optimized/shield-potion/shield-potion.glb +0 -0
  85. package/examples/hygrounds/assets/models/items/.optimized/shield-potion/shield-potion.glb.md5 +1 -0
  86. package/examples/hygrounds/assets/models/items/.optimized/shield-potion-2/shield-potion-2-named-nodes.glb +0 -0
  87. package/examples/hygrounds/assets/models/items/.optimized/shield-potion-2/shield-potion-2.glb +0 -0
  88. package/examples/hygrounds/assets/models/items/.optimized/shield-potion-2/shield-potion-2.glb.md5 +1 -0
  89. package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun-named-nodes.glb +0 -0
  90. package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb +0 -0
  91. package/examples/hygrounds/assets/models/items/.optimized/submachine-gun/submachine-gun.glb.md5 +1 -0
  92. package/examples/hygrounds/assets/models/items/ak-47.glb +0 -0
  93. package/examples/hygrounds/assets/models/items/auto-shotgun.glb +0 -0
  94. package/examples/hygrounds/assets/models/items/auto-sniper.glb +0 -0
  95. package/examples/hygrounds/assets/models/items/bolt-action-sniper.glb +0 -0
  96. package/examples/hygrounds/assets/models/items/gravity-potion.glb +0 -0
  97. package/examples/hygrounds/assets/models/items/light-machine-gun.glb +0 -0
  98. package/examples/hygrounds/assets/models/items/medpack.glb +0 -0
  99. package/examples/hygrounds/assets/models/items/mining-drill.glb +0 -0
  100. package/examples/hygrounds/assets/models/items/pickaxe.gltf +1 -0
  101. package/examples/hygrounds/assets/models/items/pistol.glb +0 -0
  102. package/examples/hygrounds/assets/models/items/revolver.glb +0 -0
  103. package/examples/hygrounds/assets/models/items/rocket-launcher.glb +0 -0
  104. package/examples/hygrounds/assets/models/items/rocket-missile.glb +0 -0
  105. package/examples/hygrounds/assets/models/items/shield-potion.glb +0 -0
  106. package/examples/hygrounds/assets/models/items/shotgun.glb +0 -0
  107. package/examples/hygrounds/assets/models/items/submachine-gun.glb +0 -0
  108. package/examples/hygrounds/assets/models/players/soldier-player.gltf +1 -0
  109. package/examples/hygrounds/assets/ui/images/scope.png +0 -0
  110. package/examples/hygrounds/assets/ui/index.html +1122 -0
  111. package/examples/hygrounds/bun.lock +503 -0
  112. package/examples/hygrounds/classes/ChestEntity.ts +133 -0
  113. package/examples/hygrounds/classes/GameManager.ts +422 -0
  114. package/examples/hygrounds/classes/GamePlayerEntity.ts +595 -0
  115. package/examples/hygrounds/classes/GunEntity.ts +259 -0
  116. package/examples/hygrounds/classes/ItemEntity.ts +225 -0
  117. package/examples/hygrounds/classes/ItemFactory.ts +61 -0
  118. package/examples/hygrounds/classes/MeleeWeaponEntity.ts +138 -0
  119. package/examples/hygrounds/classes/TerrainDamageManager.ts +56 -0
  120. package/examples/hygrounds/classes/items/GravityPotionEntity.ts +48 -0
  121. package/examples/hygrounds/classes/items/MedPackEntity.ts +43 -0
  122. package/examples/hygrounds/classes/items/ShieldPotionEntity.ts +43 -0
  123. package/examples/hygrounds/classes/weapons/AK47Entity.ts +43 -0
  124. package/examples/hygrounds/classes/weapons/AutoShotgunEntity.ts +80 -0
  125. package/examples/hygrounds/classes/weapons/AutoSniperEntity.ts +43 -0
  126. package/examples/hygrounds/classes/weapons/BoltActionSniperEntity.ts +46 -0
  127. package/examples/hygrounds/classes/weapons/LightMachineGunEntity.ts +43 -0
  128. package/examples/hygrounds/classes/weapons/MiningDrillEntity.ts +38 -0
  129. package/examples/hygrounds/classes/weapons/PickaxeEntity.ts +38 -0
  130. package/examples/hygrounds/classes/weapons/PistolEntity.ts +46 -0
  131. package/examples/hygrounds/classes/weapons/RevolverEntity.ts +46 -0
  132. package/examples/hygrounds/classes/weapons/RocketLauncherEntity.ts +195 -0
  133. package/examples/hygrounds/classes/weapons/ShotgunEntity.ts +84 -0
  134. package/examples/hygrounds/classes/weapons/SubmachineGunEntity.ts +43 -0
  135. package/examples/hygrounds/gameConfig.ts +430 -0
  136. package/examples/hygrounds/index.ts +41 -0
  137. package/examples/hygrounds/package.json +16 -0
  138. package/examples/player-persistence/README.md +3 -0
  139. package/examples/player-persistence/assets/map.json +2623 -0
  140. package/examples/player-persistence/dev/persistence/player-player-1.json +6 -0
  141. package/examples/player-persistence/dev/persistence/test.json +3 -0
  142. package/examples/player-persistence/index.ts +126 -0
  143. package/examples/player-persistence/package.json +16 -0
  144. package/package.json +1 -1
  145. package/server.api.json +21 -0
  146. package/server.d.ts +2 -1
  147. package/server.js +113 -113
@@ -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.6",
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": {
package/server.api.json CHANGED
@@ -26358,6 +26358,27 @@
26358
26358
  "releaseTag": "Public",
26359
26359
  "name": "FIRST_PERSON"
26360
26360
  },
26361
+ {
26362
+ "kind": "EnumMember",
26363
+ "canonicalReference": "server!PlayerCameraMode.SPECTATOR:member",
26364
+ "docComment": "",
26365
+ "excerptTokens": [
26366
+ {
26367
+ "kind": "Content",
26368
+ "text": "SPECTATOR = "
26369
+ },
26370
+ {
26371
+ "kind": "Content",
26372
+ "text": "2"
26373
+ }
26374
+ ],
26375
+ "initializerTokenRange": {
26376
+ "startIndex": 1,
26377
+ "endIndex": 2
26378
+ },
26379
+ "releaseTag": "Public",
26380
+ "name": "SPECTATOR"
26381
+ },
26361
26382
  {
26362
26383
  "kind": "EnumMember",
26363
26384
  "canonicalReference": "server!PlayerCameraMode.THIRD_PERSON:member",
package/server.d.ts CHANGED
@@ -3367,7 +3367,8 @@ export declare interface PlayerCameraEventPayloads {
3367
3367
  /** The mode of the camera. @public */
3368
3368
  export declare enum PlayerCameraMode {
3369
3369
  FIRST_PERSON = 0,
3370
- THIRD_PERSON = 1
3370
+ THIRD_PERSON = 1,
3371
+ SPECTATOR = 2
3371
3372
  }
3372
3373
 
3373
3374
  /** The camera orientation state of a Player. @public */