Facepunch.Steamworks
Current running program's AppId
Called with a message from Steam
Global callback type
Call results are results to specific actions
An item in your inventory.
Careful, this might not be available. Especially on a game server.
Called when the local client's items are first retrieved, and when they change.
Obviously not called on the server.
A list of items owned by this user. You should call Refresh() before trying to access this,
and then wait until it's non null or listen to OnUpdate to find out immediately when it's populated.
You can send this data to a server, or another player who can then deserialize it
and get a verified list of items.
Serialized data exprires after an hour. This is the time the value in SerializedItems will expire.
Call this at least every two minutes, every frame doesn't hurt.
You should call it when you consider it active play time.
IE - your player is alive, and playing.
Don't stress on it too much tho cuz it's super hijackable anyway.
Call this to retrieve the items.
Note that if this has already been called it won't
trigger a call to OnUpdate unless the items have changed
Some definitions aren't sent to the client, and all aren't available on the server.
Manually getting a Definition here lets you call functions on those definitions.
Called every frame
If we have a local player request process it.
A list of items defined for this app.
This should be immediately populated and available.
Utility, given a "1;VLV250" string, convert it to a 2.5
You really need me to explain what this does?
Use your brains.
An item definition. This describes an item in your Steam inventory, but is
not unique to that item. For example, this might be a tshirt, but you might be able to own
multiple tshirts.
If you're manually occupying the Definition (because maybe you're on a server
and want to hack around the fact that definitions aren't presented to you),
you can use this to set propertis.
Trigger an item drop. Call this when it's a good time to award
an item drop to a player. This won't automatically result in giving
an item to a player. Just call it every minute or so, or on launch.
ItemDefinition is usually a generator
Basic UDP send. Packets can't be bigger than 1200 bytes (your typical MTU size). Can be lost, or arrive out of order (rare).
The sending API does have some knowledge of the underlying connection, so if there is no NAT-traversal accomplished or
there is a recognized adjustment happening on the connection, the packet will be batched until the connection is open again.
As above, but if the underlying p2p connection isn't yet established the packet will just be thrown away. Using this on the first
packet sent to a remote host almost guarantees the packet will be dropped.
This is only really useful for kinds of data that should never buffer up, i.e. voice payload packets
As above, but applies the Nagle algorithm to the send - sends will accumulate
until the current MTU size (typically ~1200 bytes, but can change) or ~200ms has passed (Nagle algorithm).
Useful if you want to send a set of smaller messages but have the coalesced into a single packet
Since the reliable stream is all ordered, you can do several small message sends with k_EP2PSendReliableWithBuffering and then
do a normal k_EP2PSendReliable to force all the buffered data to be sent.
Current user's Username
Current user's SteamId
Current Beta name, if ser
Should be called at least once every frame
History filters don't seem to work, so we don't bother.
You should apply them post process'dly
Favourite filters don't seem to work, so we don't bother.
You should apply them post process'dly
A list of servers that responded. If you're only interested in servers that responded since you
last updated, then simply clear this list.
A list of servers that were in the master list but didn't respond.
True when we have finished
Disposing will end the query
Callback when rules are receieved.
The bool is true if server responded properly.
List of server rules. Use HasRules to see if this is safe to access.
Returns true if this server has rules
Populates Rules for this server
Cancels a ticket.
You should cancel your ticket when you close the game or leave a server.
Creates an auth ticket.
Which you can send to a server to authenticate that you are who you say you are.
Returns the current BuildId of the game.
This is pretty useless, as it isn't guarenteed to return
the build id you're playing, or the latest build id.
Steam Id
Return true if blocked
Return true if is a friend. Returns false if blocked, request etc.
Their current display name
Returns true if this friend is online
Returns true if this friend is online and playing this game
Returns true if this friend is online and playing this game
The AppId this guy is playing
Returns all friends, even blocked, ignored, friend requests etc
Should be 32x32 - but make sure to check!
Should be 64x64 - but make sure to check!
Should be 184x184 - but make sure to check!
Return true if this image couldn't be loaded for some reason
Returns the optimal sample rate for voice - according to Steam
If set to true we are listening to the mic.
You should usually toggle this with the press of a key for push to talk.
The last time voice was detected, recorded
If set we will capture the audio at this rate. If unset (set to 0) will capture at OptimalSampleRate
Some platforms allow/need CallingConvention.ThisCall. If you're crashing with argument null
errors on certain platforms, try flipping this to true.
I owe this logic to Riley Labrecque's hard work on Steamworks.net - I don't have the knowledge
or patience to find this shit on my own, so massive thanks to him. And also massive thanks to him
for releasing his shit open source under the MIT license so we can all learn and iterate.
You can force the platform to a particular one here.
This is useful if you're on OSX because some versions of mono don't have a way
to tell which platform we're running
Returns a class representing this ItemId. We don't query
item name, description etc. We don't verify that item exists.
We don't verify that this item belongs to your app.
Both MicrotransactionItems and subscriptionItems
Workshop item that is meant to be voted on for the purpose of selling in-game
normal Workshop item that can be subscribed to
Return a URL to view this item online
The AppId you're querying. This defaults to this appid.
The AppId of the app used to upload the item. This defaults to 0
which means all/any.
Page starts at 1 !!
Only return items with these tags
If true, return items that have all RequireTags
If false, return items that have any tags in RequireTags
Don't return any items with this tag
If you're querying for a particular file or files, add them to this.
Don't call this in production!
Current user's Username
Current user's SteamId
Initialize a server - query port will use the same as GamePort (MASTERSERVERUPDATERPORT_USEGAMESOCKETSHARE)
Should be called at least once every frame
Gets or sets the current MaxPlayers.
This doesn't enforce any kind of limit, it just updates the master server.
Gets or sets the current BotCount.
This doesn't enforce any kind of limit, it just updates the master server.
Gets or sets the current Map Name.
Gets or sets the current ModDir
Gets or sets the current Product
Gets or sets the current Product
Gets or sets the current ServerName
Gets or sets the current Passworded
Gets or sets the current GameTags
Log onto Steam anonymously
Sets a Key Value
Steamid, Ownerid, Status
Steam authetication statuses
Steam has verified the user is online, the ticket is valid and ticket has not been reused.
Start authorizing a ticket. This user isn't authorized yet. Wait for a call to OnAuthChange.
Forget this guy. They're no longer in the game.
If true, Steam wants to send a packet. You should respond by sending
this packet in an unconnected way to the returned Address and Port
We have received a server query on our game port. Pass it to Steam to handle.
Retrieve the stats for this user
Set the named statistic for this user
Set the named statistic for this user
Set the named stat for this user
Set the named stat for this user
We're only Pack = 8 on Windows