roblox-opencode 1.0.0 → 1.0.1
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/README.md +112 -122
- package/commands/setup-game.md +108 -108
- package/commands/sync-check.md +53 -53
- package/core/roblox-core.md +93 -93
- package/dist/server.js +189 -167
- package/package.json +35 -35
- package/skills/roblox-analytics/SKILL.md +277 -277
- package/skills/roblox-analytics/references/event-batcher.luau +75 -75
- package/skills/roblox-animation-vfx/SKILL.md +1325 -1325
- package/skills/roblox-architecture/SKILL.md +863 -863
- package/skills/roblox-architecture/references/combat-systems.md +1381 -1381
- package/skills/roblox-code-review/SKILL.md +686 -686
- package/skills/roblox-data/SKILL.md +889 -889
- package/skills/roblox-data/references/inventory-systems.md +1729 -1729
- package/skills/roblox-debug/SKILL.md +98 -98
- package/skills/roblox-gui/SKILL.md +1103 -1103
- package/skills/roblox-gui-fusion/SKILL.md +150 -150
- package/skills/roblox-gui-fusion/references/inventory.luau +427 -427
- package/skills/roblox-gui-fusion/references/settings-menu.luau +579 -579
- package/skills/roblox-gui-fusion/references/shop.luau +411 -411
- package/skills/roblox-luau-mastery/SKILL.md +1519 -1519
- package/skills/roblox-monetization/SKILL.md +1084 -1084
- package/skills/roblox-monetization/references/process-receipt.luau +131 -131
- package/skills/roblox-networking/SKILL.md +669 -669
- package/skills/roblox-networking/references/remote-validator.luau +193 -193
- package/skills/roblox-publish-checklist/SKILL.md +127 -127
- package/skills/roblox-runtime/SKILL.md +753 -753
- package/skills/roblox-sharp-edges/SKILL.md +294 -294
- package/skills/roblox-sync/SKILL.md +126 -126
- package/skills/roblox-testing/SKILL.md +943 -943
- package/skills/roblox-tooling/SKILL.md +149 -149
- package/vendor/LICENSES/ProfileStore-LICENSE +201 -201
- package/vendor/LICENSES/RbxUtil-LICENSE +7 -7
- package/vendor/LICENSES/promise-LICENSE +20 -20
- package/vendor/LICENSES/t-LICENSE +21 -21
- package/vendor/LICENSES/testez-LICENSE +200 -200
- package/vendor/README.md +83 -83
- package/vendor/fusion/Animation/ExternalTime.luau +83 -83
- package/vendor/fusion/Animation/Spring.luau +321 -321
- package/vendor/fusion/Animation/Stopwatch.luau +127 -127
- package/vendor/fusion/Animation/Tween.luau +187 -187
- package/vendor/fusion/Animation/getTweenDuration.luau +27 -27
- package/vendor/fusion/Animation/getTweenRatio.luau +47 -47
- package/vendor/fusion/Animation/lerpType.luau +163 -163
- package/vendor/fusion/Animation/packType.luau +99 -99
- package/vendor/fusion/Animation/springCoefficients.luau +80 -80
- package/vendor/fusion/Animation/unpackType.luau +102 -102
- package/vendor/fusion/Colour/Oklab.luau +70 -70
- package/vendor/fusion/Colour/sRGB.luau +54 -54
- package/vendor/fusion/External.luau +167 -167
- package/vendor/fusion/ExternalDebug.luau +69 -69
- package/vendor/fusion/Graph/Observer.luau +113 -113
- package/vendor/fusion/Graph/castToGraph.luau +28 -28
- package/vendor/fusion/Graph/change.luau +80 -80
- package/vendor/fusion/Graph/depend.luau +32 -32
- package/vendor/fusion/Graph/evaluate.luau +55 -55
- package/vendor/fusion/Instances/Attribute.luau +57 -57
- package/vendor/fusion/Instances/AttributeChange.luau +46 -46
- package/vendor/fusion/Instances/AttributeOut.luau +63 -63
- package/vendor/fusion/Instances/Child.luau +21 -21
- package/vendor/fusion/Instances/Children.luau +147 -147
- package/vendor/fusion/Instances/Hydrate.luau +32 -32
- package/vendor/fusion/Instances/New.luau +52 -52
- package/vendor/fusion/Instances/OnChange.luau +49 -49
- package/vendor/fusion/Instances/OnEvent.luau +53 -53
- package/vendor/fusion/Instances/Out.luau +69 -69
- package/vendor/fusion/Instances/applyInstanceProps.luau +148 -148
- package/vendor/fusion/Instances/defaultProps.luau +194 -194
- package/vendor/fusion/LICENSE +21 -21
- package/vendor/fusion/Logging/formatError.luau +48 -48
- package/vendor/fusion/Logging/messages.luau +51 -51
- package/vendor/fusion/Logging/parseError.luau +24 -24
- package/vendor/fusion/Memory/checkLifetime.luau +133 -133
- package/vendor/fusion/Memory/deriveScope.luau +23 -23
- package/vendor/fusion/Memory/deriveScopeImpl.luau +44 -44
- package/vendor/fusion/Memory/doCleanup.luau +78 -78
- package/vendor/fusion/Memory/innerScope.luau +33 -33
- package/vendor/fusion/Memory/legacyCleanup.luau +17 -17
- package/vendor/fusion/Memory/needsDestruction.luau +16 -16
- package/vendor/fusion/Memory/poisonScope.luau +33 -33
- package/vendor/fusion/Memory/scopePool.luau +54 -54
- package/vendor/fusion/Memory/scoped.luau +26 -26
- package/vendor/fusion/Memory/whichLivesLonger.luau +74 -74
- package/vendor/fusion/RobloxExternal.luau +97 -97
- package/vendor/fusion/State/Computed.luau +138 -138
- package/vendor/fusion/State/For/Disassembly.luau +210 -210
- package/vendor/fusion/State/For/ForTypes.luau +30 -30
- package/vendor/fusion/State/For/init.luau +109 -109
- package/vendor/fusion/State/ForKeys.luau +93 -93
- package/vendor/fusion/State/ForPairs.luau +96 -96
- package/vendor/fusion/State/ForValues.luau +93 -93
- package/vendor/fusion/State/Value.luau +87 -87
- package/vendor/fusion/State/castToState.luau +25 -25
- package/vendor/fusion/State/peek.luau +30 -30
- package/vendor/fusion/Types.luau +314 -314
- package/vendor/fusion/Utility/Contextual.luau +90 -90
- package/vendor/fusion/Utility/Safe.luau +22 -22
- package/vendor/fusion/Utility/isSimilar.luau +29 -29
- package/vendor/fusion/Utility/merge.luau +35 -35
- package/vendor/fusion/Utility/nameOf.luau +34 -34
- package/vendor/fusion/Utility/never.luau +13 -13
- package/vendor/fusion/Utility/nicknames.luau +10 -10
- package/vendor/fusion/Utility/xtypeof.luau +26 -26
- package/vendor/fusion/init.luau +82 -82
- package/vendor/profilestore/init.luau +2242 -2242
- package/vendor/promise/init.luau +1982 -1982
- package/vendor/rbxutil/buffer-util/Buffer.test.luau +25 -25
- package/vendor/rbxutil/buffer-util/BufferReader.luau +228 -228
- package/vendor/rbxutil/buffer-util/BufferWriter.luau +269 -269
- package/vendor/rbxutil/buffer-util/DataTypeBuffer.luau +223 -223
- package/vendor/rbxutil/buffer-util/Types.luau +60 -60
- package/vendor/rbxutil/buffer-util/index.d.ts +153 -153
- package/vendor/rbxutil/buffer-util/init.luau +41 -41
- package/vendor/rbxutil/buffer-util/package.json +16 -16
- package/vendor/rbxutil/buffer-util/wally.toml +9 -9
- package/vendor/rbxutil/comm/Client/ClientComm.luau +232 -232
- package/vendor/rbxutil/comm/Client/ClientRemoteProperty.luau +156 -156
- package/vendor/rbxutil/comm/Client/ClientRemoteSignal.luau +109 -109
- package/vendor/rbxutil/comm/Client/init.luau +135 -135
- package/vendor/rbxutil/comm/Server/RemoteProperty.luau +295 -295
- package/vendor/rbxutil/comm/Server/RemoteSignal.luau +211 -211
- package/vendor/rbxutil/comm/Server/ServerComm.luau +211 -211
- package/vendor/rbxutil/comm/Server/init.luau +140 -140
- package/vendor/rbxutil/comm/Types.luau +18 -18
- package/vendor/rbxutil/comm/Util.luau +27 -27
- package/vendor/rbxutil/comm/init.luau +35 -35
- package/vendor/rbxutil/comm/wally.toml +13 -13
- package/vendor/rbxutil/component/init.luau +759 -759
- package/vendor/rbxutil/component/init.test.luau +311 -311
- package/vendor/rbxutil/component/wally.toml +14 -14
- package/vendor/rbxutil/concur/init.luau +542 -542
- package/vendor/rbxutil/concur/init.test.luau +364 -364
- package/vendor/rbxutil/concur/wally.toml +8 -8
- package/vendor/rbxutil/enum-list/init.luau +101 -101
- package/vendor/rbxutil/enum-list/init.test.luau +91 -91
- package/vendor/rbxutil/enum-list/wally.toml +8 -8
- package/vendor/rbxutil/find/index.d.ts +20 -20
- package/vendor/rbxutil/find/init.luau +44 -44
- package/vendor/rbxutil/find/package.json +17 -17
- package/vendor/rbxutil/find/wally.toml +8 -8
- package/vendor/rbxutil/input/Gamepad.luau +559 -559
- package/vendor/rbxutil/input/Keyboard.luau +124 -124
- package/vendor/rbxutil/input/Mouse.luau +278 -278
- package/vendor/rbxutil/input/PreferredInput.luau +91 -91
- package/vendor/rbxutil/input/Touch.luau +120 -120
- package/vendor/rbxutil/input/init.luau +33 -33
- package/vendor/rbxutil/input/wally.toml +12 -12
- package/vendor/rbxutil/loader/index.d.ts +15 -15
- package/vendor/rbxutil/loader/init.luau +137 -137
- package/vendor/rbxutil/loader/wally.toml +8 -8
- package/vendor/rbxutil/log/index.d.ts +38 -38
- package/vendor/rbxutil/log/init.luau +746 -746
- package/vendor/rbxutil/log/wally.toml +8 -8
- package/vendor/rbxutil/net/init.luau +190 -190
- package/vendor/rbxutil/net/wally.toml +8 -8
- package/vendor/rbxutil/option/index.d.ts +44 -44
- package/vendor/rbxutil/option/init.luau +489 -489
- package/vendor/rbxutil/option/init.test.luau +342 -342
- package/vendor/rbxutil/option/wally.toml +8 -8
- package/vendor/rbxutil/pid/index.d.ts +53 -53
- package/vendor/rbxutil/pid/init.luau +195 -195
- package/vendor/rbxutil/pid/package.json +16 -16
- package/vendor/rbxutil/pid/wally.toml +9 -9
- package/vendor/rbxutil/quaternion/index.d.ts +117 -117
- package/vendor/rbxutil/quaternion/init.luau +570 -570
- package/vendor/rbxutil/quaternion/package.json +16 -16
- package/vendor/rbxutil/quaternion/wally.toml +9 -9
- package/vendor/rbxutil/query/index.d.ts +43 -43
- package/vendor/rbxutil/query/init.luau +117 -117
- package/vendor/rbxutil/query/package.json +18 -18
- package/vendor/rbxutil/query/wally.toml +9 -9
- package/vendor/rbxutil/sequent/index.d.ts +28 -28
- package/vendor/rbxutil/sequent/init.luau +340 -340
- package/vendor/rbxutil/sequent/package.json +16 -16
- package/vendor/rbxutil/sequent/wally.toml +9 -9
- package/vendor/rbxutil/ser/init.luau +175 -175
- package/vendor/rbxutil/ser/init.test.luau +50 -50
- package/vendor/rbxutil/ser/wally.toml +11 -11
- package/vendor/rbxutil/shake/index.d.ts +36 -36
- package/vendor/rbxutil/shake/init.luau +532 -532
- package/vendor/rbxutil/shake/init.test.luau +267 -267
- package/vendor/rbxutil/shake/package.json +16 -16
- package/vendor/rbxutil/shake/wally.toml +9 -9
- package/vendor/rbxutil/signal/index.d.ts +100 -100
- package/vendor/rbxutil/signal/init.luau +432 -432
- package/vendor/rbxutil/signal/init.test.luau +190 -190
- package/vendor/rbxutil/signal/package.json +17 -17
- package/vendor/rbxutil/signal/wally.toml +9 -9
- package/vendor/rbxutil/silo/TableWatcher.luau +65 -65
- package/vendor/rbxutil/silo/Util.luau +55 -55
- package/vendor/rbxutil/silo/init.luau +338 -338
- package/vendor/rbxutil/silo/init.test.luau +215 -215
- package/vendor/rbxutil/silo/wally.toml +8 -8
- package/vendor/rbxutil/spring/index.d.ts +40 -40
- package/vendor/rbxutil/spring/init.luau +97 -97
- package/vendor/rbxutil/spring/package.json +17 -17
- package/vendor/rbxutil/spring/wally.toml +8 -8
- package/vendor/rbxutil/stream/index.d.ts +88 -88
- package/vendor/rbxutil/stream/init.luau +597 -597
- package/vendor/rbxutil/stream/package.json +18 -18
- package/vendor/rbxutil/stream/wally.toml +9 -9
- package/vendor/rbxutil/streamable/Streamable.luau +202 -202
- package/vendor/rbxutil/streamable/StreamableUtil.luau +80 -80
- package/vendor/rbxutil/streamable/init.luau +8 -8
- package/vendor/rbxutil/streamable/wally.toml +12 -12
- package/vendor/rbxutil/symbol/init.luau +56 -56
- package/vendor/rbxutil/symbol/init.test.luau +37 -37
- package/vendor/rbxutil/symbol/wally.toml +8 -8
- package/vendor/rbxutil/table-util/init.luau +938 -938
- package/vendor/rbxutil/table-util/init.test.luau +439 -439
- package/vendor/rbxutil/task-queue/index.d.ts +27 -27
- package/vendor/rbxutil/task-queue/init.luau +97 -97
- package/vendor/rbxutil/task-queue/wally.toml +8 -8
- package/vendor/rbxutil/timer/index.d.ts +81 -81
- package/vendor/rbxutil/timer/init.luau +249 -249
- package/vendor/rbxutil/timer/init.test.luau +73 -73
- package/vendor/rbxutil/timer/wally.toml +11 -11
- package/vendor/rbxutil/tree/index.d.ts +15 -15
- package/vendor/rbxutil/tree/init.luau +137 -137
- package/vendor/rbxutil/tree/wally.toml +8 -8
- package/vendor/rbxutil/trove/index.d.ts +46 -46
- package/vendor/rbxutil/trove/init.luau +787 -787
- package/vendor/rbxutil/trove/init.test.luau +203 -203
- package/vendor/rbxutil/trove/wally.toml +8 -8
- package/vendor/rbxutil/typed-remote/init.luau +196 -196
- package/vendor/rbxutil/typed-remote/wally.toml +8 -8
- package/vendor/rbxutil/wait-for/index.d.ts +17 -17
- package/vendor/rbxutil/wait-for/init.luau +257 -257
- package/vendor/rbxutil/wait-for/init.test.luau +182 -182
- package/vendor/rbxutil/wait-for/wally.toml +11 -11
- package/vendor/t/t.lua +1350 -1350
- package/vendor/testez/Context.lua +26 -26
- package/vendor/testez/Expectation.lua +311 -311
- package/vendor/testez/ExpectationContext.lua +38 -38
- package/vendor/testez/LifecycleHooks.lua +89 -89
- package/vendor/testez/Reporters/TeamCityReporter.lua +101 -101
- package/vendor/testez/Reporters/TextReporter.lua +105 -105
- package/vendor/testez/Reporters/TextReporterQuiet.lua +96 -96
- package/vendor/testez/TestBootstrap.lua +146 -146
- package/vendor/testez/TestEnum.lua +27 -27
- package/vendor/testez/TestPlan.lua +304 -304
- package/vendor/testez/TestPlanner.lua +39 -39
- package/vendor/testez/TestResults.lua +111 -111
- package/vendor/testez/TestRunner.lua +188 -188
- package/vendor/testez/TestSession.lua +243 -243
- package/vendor/testez/init.lua +39 -39
|
@@ -1,196 +1,196 @@
|
|
|
1
|
-
--!strict
|
|
2
|
-
|
|
3
|
-
type Signal<T...> = {
|
|
4
|
-
Connect: (self: Signal<T...>, fn: (T...) -> ()) -> RBXScriptConnection,
|
|
5
|
-
ConnectParallel: (self: Signal<T...>, fn: (T...) -> ()) -> RBXScriptConnection,
|
|
6
|
-
Once: (self: Signal<T...>, fn: (T...) -> ()) -> RBXScriptConnection,
|
|
7
|
-
Wait: (self: Signal<T...>) -> T...,
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
type PlayerSignal<T...> = {
|
|
11
|
-
Connect: (self: PlayerSignal<T...>, fn: (player: Player, T...) -> ()) -> RBXScriptConnection,
|
|
12
|
-
ConnectParallel: (self: PlayerSignal<T...>, fn: (player: Player, T...) -> ()) -> RBXScriptConnection,
|
|
13
|
-
Once: (self: PlayerSignal<T...>, fn: (player: Player, T...) -> ()) -> RBXScriptConnection,
|
|
14
|
-
Wait: (self: PlayerSignal<T...>) -> (Player, T...),
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
--[=[
|
|
18
|
-
@within TypedRemote
|
|
19
|
-
@interface Event<T...>
|
|
20
|
-
.OnClientEvent Signal<T...>,
|
|
21
|
-
.OnServerEvent PlayerSignal<T...>,
|
|
22
|
-
.FireClient (self: Event<T...>, player: Player, T...) -> (),
|
|
23
|
-
.FireAllClients (self: Event<T...>, T...) -> (),
|
|
24
|
-
.FireServer (self: Event<T...>, T...) -> (),
|
|
25
|
-
]=]
|
|
26
|
-
export type Event<T...> = Instance & {
|
|
27
|
-
OnClientEvent: Signal<T...>,
|
|
28
|
-
OnServerEvent: PlayerSignal<T...>,
|
|
29
|
-
FireClient: (self: Event<T...>, player: Player, T...) -> (),
|
|
30
|
-
FireAllClients: (self: Event<T...>, T...) -> (),
|
|
31
|
-
FireServer: (self: Event<T...>, T...) -> (),
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
--[=[
|
|
35
|
-
@within TypedRemote
|
|
36
|
-
@interface UnreliableEvent<T...>
|
|
37
|
-
.OnClientEvent Signal<T...>,
|
|
38
|
-
.OnServerEvent PlayerSignal<T...>,
|
|
39
|
-
.FireClient (self: Event<T...>, player: Player, T...) -> (),
|
|
40
|
-
.FireAllClients (self: Event<T...>, T...) -> (),
|
|
41
|
-
.FireServer (self: Event<T...>, T...) -> (),
|
|
42
|
-
]=]
|
|
43
|
-
export type UnreliableEvent<T...> = Event<T...>
|
|
44
|
-
|
|
45
|
-
--[=[
|
|
46
|
-
@within TypedRemote
|
|
47
|
-
@interface Function<T..., R...>
|
|
48
|
-
.InvokeServer (self: Function<T..., R...>, T...) -> R...,
|
|
49
|
-
.OnServerInvoke (player: Player, T...) -> R...,
|
|
50
|
-
]=]
|
|
51
|
-
export type Function<T..., R...> = Instance & {
|
|
52
|
-
InvokeServer: (self: Function<T..., R...>, T...) -> R...,
|
|
53
|
-
OnServerInvoke: (player: Player, T...) -> R...,
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
type CreatorFn<T> = (name: string) -> T
|
|
57
|
-
|
|
58
|
-
local IS_SERVER = game:GetService("RunService"):IsServer()
|
|
59
|
-
|
|
60
|
-
--[=[
|
|
61
|
-
@class TypedRemote
|
|
62
|
-
|
|
63
|
-
Simple networking package that helps create typed RemoteEvents and RemoteFunctions.
|
|
64
|
-
|
|
65
|
-
```lua
|
|
66
|
-
-- ReplicatedStorage.Network (ModuleScript)
|
|
67
|
-
|
|
68
|
-
local TypedRemote = require(ReplicatedStorage.Packages.TypedRemote)
|
|
69
|
-
|
|
70
|
-
-- Get the RF, RE and URE instance creators, which create RemoteFunctions/RemoteEvents/UnreliableRemoteEvents
|
|
71
|
-
-- within the given parent (the script by default):
|
|
72
|
-
local RF, RE, URE = TypedRemote.parent()
|
|
73
|
-
|
|
74
|
-
-- Redeclare the TypedRemote types for simplicity:
|
|
75
|
-
type RF<T..., R...> = TypedRemote.Function<T..., R...>
|
|
76
|
-
type RE<T...> = TypedRemote.Event<T...>
|
|
77
|
-
type URE<T...> = TypedRemote.UnreliableEvent<T...>
|
|
78
|
-
|
|
79
|
-
-- Define network table:
|
|
80
|
-
return {
|
|
81
|
-
-- RemoteFunction that takes two arguments (boolean, string) and returns a number:
|
|
82
|
-
MyFunc = RF("MyFunc") :: RF<(boolean, string), (number)>,
|
|
83
|
-
|
|
84
|
-
-- RemoteEvent that takes two arguments - a string and a number:
|
|
85
|
-
MyEvent = RE("MyEvent") :: RE<string, number>,
|
|
86
|
-
|
|
87
|
-
-- UnreliableRemoteEvent that takes two arguments - a string and a number:
|
|
88
|
-
MyUnreliableEvent = URE("MyUnreliableEvent") :: URE<string, number>,
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
```lua
|
|
93
|
-
-- Example usage of the above Network module:
|
|
94
|
-
|
|
95
|
-
local Network = require(ReplicatedStorage.Network)
|
|
96
|
-
|
|
97
|
-
-- If you type this out, intellisense will help with what the function signature should be:
|
|
98
|
-
Network.MyEvent.OnClientEvent:Connect(function(player, str, num)
|
|
99
|
-
-- Foo
|
|
100
|
-
end)
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
In most cases, the `TypedRemote.parent()` function will be used to create the memoized
|
|
104
|
-
RemoteFunction and RemoteEvent builder functions. From there, call the given functions
|
|
105
|
-
with the desired name per remote.
|
|
106
|
-
|
|
107
|
-
The `TypedRemote.func` and `TypedRemote.event` functions can also be used, but the
|
|
108
|
-
parent must be supplied to each call, hence the helpful `parent()` memoizer.
|
|
109
|
-
]=]
|
|
110
|
-
local TypedRemote = {}
|
|
111
|
-
|
|
112
|
-
--[=[
|
|
113
|
-
@return ((name: string) -> RemoteFunction, (name: string) -> RemoteEvent)
|
|
114
|
-
|
|
115
|
-
Creates a memoized version of the `func` and `event` functions that include the `parent`
|
|
116
|
-
in each call.
|
|
117
|
-
|
|
118
|
-
```lua
|
|
119
|
-
-- Create RF and RE functions that use the current script as the instance parent:
|
|
120
|
-
local RF, RE = TypedRemote.parent(script)
|
|
121
|
-
|
|
122
|
-
local remoteFunc = RF("RemoteFunc")
|
|
123
|
-
```
|
|
124
|
-
]=]
|
|
125
|
-
function TypedRemote.parent(
|
|
126
|
-
parent: Instance?
|
|
127
|
-
): (CreatorFn<RemoteFunction>, CreatorFn<RemoteEvent>, CreatorFn<UnreliableRemoteEvent>)
|
|
128
|
-
return function(name: string)
|
|
129
|
-
return TypedRemote.func(name, parent)
|
|
130
|
-
end, function(name: string)
|
|
131
|
-
return TypedRemote.event(name, parent)
|
|
132
|
-
end, function(name: string)
|
|
133
|
-
return TypedRemote.unreliableEvent(name, parent)
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
--[=[
|
|
138
|
-
Creates a RemoteFunction with `name` and parents it inside of `parent`.
|
|
139
|
-
|
|
140
|
-
If the `parent` argument is not included or is `nil`, then it defaults to the parent of
|
|
141
|
-
this TypedRemote ModuleScript.
|
|
142
|
-
]=]
|
|
143
|
-
function TypedRemote.func(name: string, parent: Instance?): RemoteFunction
|
|
144
|
-
local rf: RemoteFunction
|
|
145
|
-
if IS_SERVER then
|
|
146
|
-
rf = Instance.new("RemoteFunction")
|
|
147
|
-
rf.Name = name
|
|
148
|
-
rf.Parent = if parent then parent else script
|
|
149
|
-
else
|
|
150
|
-
rf = (if parent then parent else script):WaitForChild(name)
|
|
151
|
-
assert(rf:IsA("RemoteFunction"), "expected remote function")
|
|
152
|
-
end
|
|
153
|
-
return rf
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
--[=[
|
|
157
|
-
Creates a RemoteEvent with `name` and parents it inside of `parent`.
|
|
158
|
-
|
|
159
|
-
If the `parent` argument is not included or is `nil`, then it defaults to the parent of
|
|
160
|
-
this TypedRemote ModuleScript.
|
|
161
|
-
]=]
|
|
162
|
-
function TypedRemote.event(name: string, parent: Instance?): RemoteEvent
|
|
163
|
-
local re: RemoteEvent
|
|
164
|
-
if IS_SERVER then
|
|
165
|
-
re = Instance.new("RemoteEvent")
|
|
166
|
-
re.Name = name
|
|
167
|
-
re.Parent = if parent then parent else script
|
|
168
|
-
else
|
|
169
|
-
re = (if parent then parent else script):WaitForChild(name)
|
|
170
|
-
assert(re:IsA("RemoteEvent"), "expected remote event")
|
|
171
|
-
end
|
|
172
|
-
return re
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
--[=[
|
|
176
|
-
Creates an UnreliableRemoteEvent with `name` and parents it inside of `parent`.
|
|
177
|
-
|
|
178
|
-
If the `parent` argument is not included or is `nil`, then it defaults to the parent of
|
|
179
|
-
this TypedRemote ModuleScript.
|
|
180
|
-
]=]
|
|
181
|
-
function TypedRemote.unreliableEvent(name: string, parent: Instance?): UnreliableRemoteEvent
|
|
182
|
-
local ure: UnreliableRemoteEvent
|
|
183
|
-
if IS_SERVER then
|
|
184
|
-
ure = Instance.new("UnreliableRemoteEvent")
|
|
185
|
-
ure.Name = name
|
|
186
|
-
ure.Parent = if parent then parent else script
|
|
187
|
-
else
|
|
188
|
-
ure = (if parent then parent else script):WaitForChild(name)
|
|
189
|
-
assert(ure:IsA("UnreliableRemoteEvent"), "expected unreliable remote event")
|
|
190
|
-
end
|
|
191
|
-
return ure
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
table.freeze(TypedRemote)
|
|
195
|
-
|
|
196
|
-
return TypedRemote
|
|
1
|
+
--!strict
|
|
2
|
+
|
|
3
|
+
type Signal<T...> = {
|
|
4
|
+
Connect: (self: Signal<T...>, fn: (T...) -> ()) -> RBXScriptConnection,
|
|
5
|
+
ConnectParallel: (self: Signal<T...>, fn: (T...) -> ()) -> RBXScriptConnection,
|
|
6
|
+
Once: (self: Signal<T...>, fn: (T...) -> ()) -> RBXScriptConnection,
|
|
7
|
+
Wait: (self: Signal<T...>) -> T...,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type PlayerSignal<T...> = {
|
|
11
|
+
Connect: (self: PlayerSignal<T...>, fn: (player: Player, T...) -> ()) -> RBXScriptConnection,
|
|
12
|
+
ConnectParallel: (self: PlayerSignal<T...>, fn: (player: Player, T...) -> ()) -> RBXScriptConnection,
|
|
13
|
+
Once: (self: PlayerSignal<T...>, fn: (player: Player, T...) -> ()) -> RBXScriptConnection,
|
|
14
|
+
Wait: (self: PlayerSignal<T...>) -> (Player, T...),
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
--[=[
|
|
18
|
+
@within TypedRemote
|
|
19
|
+
@interface Event<T...>
|
|
20
|
+
.OnClientEvent Signal<T...>,
|
|
21
|
+
.OnServerEvent PlayerSignal<T...>,
|
|
22
|
+
.FireClient (self: Event<T...>, player: Player, T...) -> (),
|
|
23
|
+
.FireAllClients (self: Event<T...>, T...) -> (),
|
|
24
|
+
.FireServer (self: Event<T...>, T...) -> (),
|
|
25
|
+
]=]
|
|
26
|
+
export type Event<T...> = Instance & {
|
|
27
|
+
OnClientEvent: Signal<T...>,
|
|
28
|
+
OnServerEvent: PlayerSignal<T...>,
|
|
29
|
+
FireClient: (self: Event<T...>, player: Player, T...) -> (),
|
|
30
|
+
FireAllClients: (self: Event<T...>, T...) -> (),
|
|
31
|
+
FireServer: (self: Event<T...>, T...) -> (),
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
--[=[
|
|
35
|
+
@within TypedRemote
|
|
36
|
+
@interface UnreliableEvent<T...>
|
|
37
|
+
.OnClientEvent Signal<T...>,
|
|
38
|
+
.OnServerEvent PlayerSignal<T...>,
|
|
39
|
+
.FireClient (self: Event<T...>, player: Player, T...) -> (),
|
|
40
|
+
.FireAllClients (self: Event<T...>, T...) -> (),
|
|
41
|
+
.FireServer (self: Event<T...>, T...) -> (),
|
|
42
|
+
]=]
|
|
43
|
+
export type UnreliableEvent<T...> = Event<T...>
|
|
44
|
+
|
|
45
|
+
--[=[
|
|
46
|
+
@within TypedRemote
|
|
47
|
+
@interface Function<T..., R...>
|
|
48
|
+
.InvokeServer (self: Function<T..., R...>, T...) -> R...,
|
|
49
|
+
.OnServerInvoke (player: Player, T...) -> R...,
|
|
50
|
+
]=]
|
|
51
|
+
export type Function<T..., R...> = Instance & {
|
|
52
|
+
InvokeServer: (self: Function<T..., R...>, T...) -> R...,
|
|
53
|
+
OnServerInvoke: (player: Player, T...) -> R...,
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
type CreatorFn<T> = (name: string) -> T
|
|
57
|
+
|
|
58
|
+
local IS_SERVER = game:GetService("RunService"):IsServer()
|
|
59
|
+
|
|
60
|
+
--[=[
|
|
61
|
+
@class TypedRemote
|
|
62
|
+
|
|
63
|
+
Simple networking package that helps create typed RemoteEvents and RemoteFunctions.
|
|
64
|
+
|
|
65
|
+
```lua
|
|
66
|
+
-- ReplicatedStorage.Network (ModuleScript)
|
|
67
|
+
|
|
68
|
+
local TypedRemote = require(ReplicatedStorage.Packages.TypedRemote)
|
|
69
|
+
|
|
70
|
+
-- Get the RF, RE and URE instance creators, which create RemoteFunctions/RemoteEvents/UnreliableRemoteEvents
|
|
71
|
+
-- within the given parent (the script by default):
|
|
72
|
+
local RF, RE, URE = TypedRemote.parent()
|
|
73
|
+
|
|
74
|
+
-- Redeclare the TypedRemote types for simplicity:
|
|
75
|
+
type RF<T..., R...> = TypedRemote.Function<T..., R...>
|
|
76
|
+
type RE<T...> = TypedRemote.Event<T...>
|
|
77
|
+
type URE<T...> = TypedRemote.UnreliableEvent<T...>
|
|
78
|
+
|
|
79
|
+
-- Define network table:
|
|
80
|
+
return {
|
|
81
|
+
-- RemoteFunction that takes two arguments (boolean, string) and returns a number:
|
|
82
|
+
MyFunc = RF("MyFunc") :: RF<(boolean, string), (number)>,
|
|
83
|
+
|
|
84
|
+
-- RemoteEvent that takes two arguments - a string and a number:
|
|
85
|
+
MyEvent = RE("MyEvent") :: RE<string, number>,
|
|
86
|
+
|
|
87
|
+
-- UnreliableRemoteEvent that takes two arguments - a string and a number:
|
|
88
|
+
MyUnreliableEvent = URE("MyUnreliableEvent") :: URE<string, number>,
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
```lua
|
|
93
|
+
-- Example usage of the above Network module:
|
|
94
|
+
|
|
95
|
+
local Network = require(ReplicatedStorage.Network)
|
|
96
|
+
|
|
97
|
+
-- If you type this out, intellisense will help with what the function signature should be:
|
|
98
|
+
Network.MyEvent.OnClientEvent:Connect(function(player, str, num)
|
|
99
|
+
-- Foo
|
|
100
|
+
end)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
In most cases, the `TypedRemote.parent()` function will be used to create the memoized
|
|
104
|
+
RemoteFunction and RemoteEvent builder functions. From there, call the given functions
|
|
105
|
+
with the desired name per remote.
|
|
106
|
+
|
|
107
|
+
The `TypedRemote.func` and `TypedRemote.event` functions can also be used, but the
|
|
108
|
+
parent must be supplied to each call, hence the helpful `parent()` memoizer.
|
|
109
|
+
]=]
|
|
110
|
+
local TypedRemote = {}
|
|
111
|
+
|
|
112
|
+
--[=[
|
|
113
|
+
@return ((name: string) -> RemoteFunction, (name: string) -> RemoteEvent)
|
|
114
|
+
|
|
115
|
+
Creates a memoized version of the `func` and `event` functions that include the `parent`
|
|
116
|
+
in each call.
|
|
117
|
+
|
|
118
|
+
```lua
|
|
119
|
+
-- Create RF and RE functions that use the current script as the instance parent:
|
|
120
|
+
local RF, RE = TypedRemote.parent(script)
|
|
121
|
+
|
|
122
|
+
local remoteFunc = RF("RemoteFunc")
|
|
123
|
+
```
|
|
124
|
+
]=]
|
|
125
|
+
function TypedRemote.parent(
|
|
126
|
+
parent: Instance?
|
|
127
|
+
): (CreatorFn<RemoteFunction>, CreatorFn<RemoteEvent>, CreatorFn<UnreliableRemoteEvent>)
|
|
128
|
+
return function(name: string)
|
|
129
|
+
return TypedRemote.func(name, parent)
|
|
130
|
+
end, function(name: string)
|
|
131
|
+
return TypedRemote.event(name, parent)
|
|
132
|
+
end, function(name: string)
|
|
133
|
+
return TypedRemote.unreliableEvent(name, parent)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
--[=[
|
|
138
|
+
Creates a RemoteFunction with `name` and parents it inside of `parent`.
|
|
139
|
+
|
|
140
|
+
If the `parent` argument is not included or is `nil`, then it defaults to the parent of
|
|
141
|
+
this TypedRemote ModuleScript.
|
|
142
|
+
]=]
|
|
143
|
+
function TypedRemote.func(name: string, parent: Instance?): RemoteFunction
|
|
144
|
+
local rf: RemoteFunction
|
|
145
|
+
if IS_SERVER then
|
|
146
|
+
rf = Instance.new("RemoteFunction")
|
|
147
|
+
rf.Name = name
|
|
148
|
+
rf.Parent = if parent then parent else script
|
|
149
|
+
else
|
|
150
|
+
rf = (if parent then parent else script):WaitForChild(name)
|
|
151
|
+
assert(rf:IsA("RemoteFunction"), "expected remote function")
|
|
152
|
+
end
|
|
153
|
+
return rf
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
--[=[
|
|
157
|
+
Creates a RemoteEvent with `name` and parents it inside of `parent`.
|
|
158
|
+
|
|
159
|
+
If the `parent` argument is not included or is `nil`, then it defaults to the parent of
|
|
160
|
+
this TypedRemote ModuleScript.
|
|
161
|
+
]=]
|
|
162
|
+
function TypedRemote.event(name: string, parent: Instance?): RemoteEvent
|
|
163
|
+
local re: RemoteEvent
|
|
164
|
+
if IS_SERVER then
|
|
165
|
+
re = Instance.new("RemoteEvent")
|
|
166
|
+
re.Name = name
|
|
167
|
+
re.Parent = if parent then parent else script
|
|
168
|
+
else
|
|
169
|
+
re = (if parent then parent else script):WaitForChild(name)
|
|
170
|
+
assert(re:IsA("RemoteEvent"), "expected remote event")
|
|
171
|
+
end
|
|
172
|
+
return re
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
--[=[
|
|
176
|
+
Creates an UnreliableRemoteEvent with `name` and parents it inside of `parent`.
|
|
177
|
+
|
|
178
|
+
If the `parent` argument is not included or is `nil`, then it defaults to the parent of
|
|
179
|
+
this TypedRemote ModuleScript.
|
|
180
|
+
]=]
|
|
181
|
+
function TypedRemote.unreliableEvent(name: string, parent: Instance?): UnreliableRemoteEvent
|
|
182
|
+
local ure: UnreliableRemoteEvent
|
|
183
|
+
if IS_SERVER then
|
|
184
|
+
ure = Instance.new("UnreliableRemoteEvent")
|
|
185
|
+
ure.Name = name
|
|
186
|
+
ure.Parent = if parent then parent else script
|
|
187
|
+
else
|
|
188
|
+
ure = (if parent then parent else script):WaitForChild(name)
|
|
189
|
+
assert(ure:IsA("UnreliableRemoteEvent"), "expected unreliable remote event")
|
|
190
|
+
end
|
|
191
|
+
return ure
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
table.freeze(TypedRemote)
|
|
195
|
+
|
|
196
|
+
return TypedRemote
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
[package]
|
|
2
|
-
name = "sleitnick/typed-remote"
|
|
3
|
-
description = "Simple networking package for typed RemoteEvents and RemoteFunctions"
|
|
4
|
-
version = "0.3.0"
|
|
5
|
-
license = "MIT"
|
|
6
|
-
authors = ["Stephen Leitnick"]
|
|
7
|
-
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
-
realm = "shared"
|
|
1
|
+
[package]
|
|
2
|
+
name = "sleitnick/typed-remote"
|
|
3
|
+
description = "Simple networking package for typed RemoteEvents and RemoteFunctions"
|
|
4
|
+
version = "0.3.0"
|
|
5
|
+
license = "MIT"
|
|
6
|
+
authors = ["Stephen Leitnick"]
|
|
7
|
+
registry = "https://github.com/UpliftGames/wally-index"
|
|
8
|
+
realm = "shared"
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
declare namespace WaitFor {
|
|
2
|
-
interface Constructor {
|
|
3
|
-
readonly Error: { Unparented: "Unparented"; ParentChanged: "ParentChanged" };
|
|
4
|
-
|
|
5
|
-
Child: (parent: Instance, childName: string, timeout?: number) => Promise<Instance>;
|
|
6
|
-
Children: (parent: Instance, childrenNames: string[], timeout?: number) => Promise<Instance[]>;
|
|
7
|
-
Descendant: (parent: Instance, descendantName: string, timeout?: number) => Promise<Instance>;
|
|
8
|
-
Descendants: (parent: Instance, descendantNames: string[], timeout?: number) => Promise<Instance[]>;
|
|
9
|
-
PrimaryPart: (model: Model, timeout?: number) => Promise<BasePart>;
|
|
10
|
-
ObjectValue: (objectValue: ObjectValue, timeout?: number) => Promise<Instance>;
|
|
11
|
-
Custom: <T>(predicate: () => T | undefined, timeout?: number) => Promise<T>;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
declare const WaitFor: WaitFor.Constructor;
|
|
16
|
-
|
|
17
|
-
export = WaitFor;
|
|
1
|
+
declare namespace WaitFor {
|
|
2
|
+
interface Constructor {
|
|
3
|
+
readonly Error: { Unparented: "Unparented"; ParentChanged: "ParentChanged" };
|
|
4
|
+
|
|
5
|
+
Child: (parent: Instance, childName: string, timeout?: number) => Promise<Instance>;
|
|
6
|
+
Children: (parent: Instance, childrenNames: string[], timeout?: number) => Promise<Instance[]>;
|
|
7
|
+
Descendant: (parent: Instance, descendantName: string, timeout?: number) => Promise<Instance>;
|
|
8
|
+
Descendants: (parent: Instance, descendantNames: string[], timeout?: number) => Promise<Instance[]>;
|
|
9
|
+
PrimaryPart: (model: Model, timeout?: number) => Promise<BasePart>;
|
|
10
|
+
ObjectValue: (objectValue: ObjectValue, timeout?: number) => Promise<Instance>;
|
|
11
|
+
Custom: <T>(predicate: () => T | undefined, timeout?: number) => Promise<T>;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
declare const WaitFor: WaitFor.Constructor;
|
|
16
|
+
|
|
17
|
+
export = WaitFor;
|