
(Thanks to stgn/gngbng for the awesome logo)
Hello everyone, I've been meaning to start a thread about this project but haven't found there to be enough content revolving around the project up until now.
Update:
I've started work on yet another new aspect of Open Steamworks that will enable more developers to get access to the code base: dotnetworks.
dotnetworks is a managed C++/CLI wrapper of the OSW code that allows developers in the .NET environment to access the interfaces.
The dotnetworks project will allow C# programmers, for example, to get the same features and functionality from OSW.
static class Program
{
static void Main()
{
if ( !Steamworks.Init() )
{
MessageBox.Show( "Unable to initialize steamworks." );
return;
}
SteamUserStats002 stats = Steamworks.GetSteamUserStats002();
GameID tf2 = new GameID( 440 );
if ( !stats.RequestCurrentStats( tf2 ) )
Console.WriteLine( "Can't get stats." );
uint numStats = stats.GetNumStats( tf2 );
for ( uint x = 0 ; x < numStats ; x++ )
{
string name = stats.GetStatName( tf2, x );
int value = 0;
bool success = stats.GetStat( tf2, name, ref value );
if ( success )
Console.WriteLine( name + ": " + value );
}
}
}
But, mind you, this project is only in its infancy, and will require a great deal of work until the major features are implemented.
In order for dotnetworks to expand, I need alot of assistance. The process of writing wrapper classes for each of the interfaces in OSW is a very lengthy process that requires a large investment of time.
Currently the OSW team looks like this:
http://osw.limetech.org/?page=team, and I'm always looking for anyone who is willing to put forward any amount of effort to help support the project.
So I'm asking for anyone that can help commit code changes and new classes to dotnetworks, so that aspect of the project can expand. Please send me a PM, contact me on IRC, or send off an email to
voidedweasel@gmail.com if you are interested. Thanks!
Any who, here's the project I've been working on recently. It's called Open Steamworks. Here's an excerpt explaining what Open Steamworks is:
What is Open Steamworks?
Open Steamworks is an open implementation of the Valve's Steamworks API. In a sense it provides the same client only functionality you would receive if you or your company applied for Valve's Steamworks.
This project has been obtained from reverse engineering and scourging of existing code and projects.
Keep in mind that this project only provides code, and very little documentation. The only documentation provided is that of code comments, and not all features are documented. If documentation and the other features are a must, have your company contact Valve to sign up for the real Steamworks.
Furthermore, you do not get access to the Steamworks back-end. You cannot create achievements, register a game, or do other back-end related activities.
More details on Valve's Steamworks is available here:
https://partner.steamgames.com/
Interested in Helping or Getting Help?
If you're interested in helping the project, the primary means of reaching me is through email. If you're looking to submit patches and code changes, please email me with a subject that describes these intentions. Suggestions and comments are always welcome.
If you need help using the API, I can provide only basic help, the majority of the work should be done by you.
Update: I'm currently looking for people who would be interested in taking testing positions and working through the API and testing features. Please email me if you are interested!
You may reach me at:
voidedweasel@gmail.com
You can find the project's code base here:
http://svn.limetech.org/web/opensteamworks/.
The project is in its preliminary stage, but there are still many projects that are evolving out of it.
Here's some screen shots of things that are in development:
stgn/gngbng's MSN messenger status changer
my steam friend's name theft device
A garrymod module created by Chrisaster that is built on top of this API:
http://www.facepunch.com/showthread.php?t=823783
This is my binding to VoiDeD's Steamworks API,
Open Steamworks.
Download
http://bit.ly/luxOe (Last updated
18/11/09 19:30)
Function List
steamworks.CSteamID()
steamworks.ISteamClient()
steamworks.Steam_BGetCallback()
steamworks.Steam_FreeLastCallback()
ISteamClient007:CreateSteamPipe()
ISteamClient007:ConnectToGlobalUser(hSteamPipe)
ISteamClient007:GetISteamUser(hSteamUser, hSteamPipe, interfaceVersion)
ISteamClient007:GetISteamFriends(hSteamUser, hSteamPipe, interfaceVersion)
ISteamUser005:IsPrimaryChatDestination()
ISteamUser005:GetHSteamUser()
ISteamUser005:GetCSteamID()
ISteamUser005:LoggedOn()
ISteamUser005:SetSelfAsPrimaryChatDestination()
ISteamUser012:GetHSteamUser()
ISteamUser012:GetCSteamID()
ISteamUser012:LoggedOn()
ISteamFriends002:AcknowledgeInviteToClan(CSID, bool)
ISteamFriends002:AddFriend(CSID)
ISteamFriends002:AddFriendByName(nameOrEmail)
ISteamFriends002:GetChatMessage(friendCSID, chatID)
ISteamFriends002:InviteFriendToClan(friendCSID, groupCSID)
ISteamFriends002:RemoveFriend(friendCSID)
ISteamFriends002:SendMsgToFriend(friendCSID, messageType, messageBody)
ISteamFriends002:SetPersonaState(personaState)
ISteamFriends005:ActivateGameOverlay(pchDialog)
ISteamFriends005:ActivateGameOverlayToStore(appID)
ISteamFriends005:ActivateGameOverlayToUser(pchDial og, friendCSID)
ISteamFriends005:ActivateGameOverlayToWebPage(pchU RL)
ISteamFriends005:GetClanByIndex(clanIndex)
ISteamFriends005:GetClanCount()
ISteamFriends005:GetClanName(groupCSID)
ISteamFriends005:GetFriendByIndex(friendIndex, friendFlags)
ISteamFriends005:GetFriendCount(friendFlags)
ISteamFriends005:GetFriendCountFromSource(sourceCS ID)
ISteamFriends005:GetFriendFromSourceByIndex(source CSID, friendIndex)
ISteamFriends005:GetFriendGamePlayed(friendCSID)
ISteamFriends005:GetFriendPersonaName(friendCSID)
ISteamFriends005:GetFriendPersonaNameHistory(frien dCSID, historyIndex)
ISteamFriends005:GetFriendPersonaState(friendCSID)
ISteamFriends005:GetFriendRelationship(friendCSID)
ISteamFriends005:GetPersonaName()
ISteamFriends005:GetPersonaState()
ISteamFriends005:HasFriend(friendCSID, friendFlags)
ISteamFriends005:IsUserInSource(userCSID, sourceCSID)
ISteamFriends005:SetInGameVoiceSpeaking(userCSID, bSpeaking)
ISteamFriends005:SetPersonaName(personaName)
CSteamID:GetAccountID()
CSteamID:GetEAccountType()
CSteamID:GetEUniverse()
CSteamID:GetUnAccountInstance()
CSteamID:InstancedSet(accountID, accountInstance, eUniverse, eAccountType)
CSteamID:IsValid()
CSteamID:Render()
CSteamID:Set(accountID, eUniverse, accountType)
CSteamID:SetAccountID(accountID)
CSteamID:SetEUniverse(eUniverse)
PubParam:To(newTypeMetaID)
CallbackMsg_t:GetCubParam()
CallbackMsg_t:GetHSteamUser()
CallbackMsg_t:GetCallback()
CallbackMsg_t:GetPubParam()
GameOverlayActivated_t:IsActive()
PersonaStateChange_t:GetSteamID()
PersonaStateChange_t:GetFlags()
FriendChatMsg_t:GetReceiver()
FriendChatMsg_t:GetSender()
FriendChatMsg_t:GetChatID()
FriendEndChatSession_t:GetCSteamID()
FriendAdded_t:GetSuccess()
FriendAdded_t:GetSteamID()
UserRequestingFriendship_t:GetSteamID()
FriendGameInfo_t:GetCGameID()
FriendGameInfo_t:GetGameIP()
FriendGameInfo_t:GetGamePort()
FriendGameInfo_t:GetQueryPort()
CGameID:AppID()
CGameID:IsMod()
CGameID:IsP2PFile()
CGameID:IsShortcut()
CGameID:IsSteamApp()
CGameID:IsValid()
CGameID:ModID()
Chatlogs!
Alright, seems the chat logger is ready for beta testing.
You can grab it here:
http://dl.dropbox.com/u/99606/steam_chat_logger_b1.rar

This is the main settings dialog used for controlling the logging.
The corresponding output found in the logged text file:
Primary control of the logger is handled through a notification icon in the taskbar, through a context menu. Double clicking the icon will also open the settings dialog.
The string formatting is pretty straight forward, {Name} replaces to what you'd expect, and the majority of the formatting is explained on the settings dialog.
However, here's the full list of formatting options:
Code:
{SteamID} - Replaces to the sender's SteamID. (In a filename context all ':'s are replaced with '_'s)
{Name} - The sender's name. (Made filename safe for the directory and filenames)
{Date} - Date, all invalid chars are replaced with '_'s in filename contexts.
{Time} - Time, same replacement.
{Message} - The logged message, only valid in the log formats.
{NewLine} - Writes a new line for formatting logs.
{Tab} - Tab character for formatting logs.
{MyName} - Writes your name in a log context.
{UnixTime} - Unix time in log context.
There's plenty of things that still need to be added:
Code:
* Single process mutex, so only one logger can be run at a time.
* Options such as a toggle for XML output.
* Additional formatting options.
* Group chat support? (This is unlikely. It requires use of the IClientFriends interface and is bound to cause lots of problems when an update rolls out)
This is a beta release for the sole purpose of bug testing, so PLEASE report any issues that any of you encounter while using this.
Additionally, I welcome comments, suggestions, and other to-do additions!
The full source code is available on the SVN, as with all other projects:
http://code.assembla.com/steamworks/...t%20Log?rev=30
In essence, anything possible with steam (on the client side) is possible with Open Steamworks.
As always, if you are interested in contributing or just want to toss your opinion out, I'd always be glad to hear it. Also if you work on a project that involves the API, let me know and I'll add it to the post.