1. Post #2721
    @@
    @@'s Avatar
    January 2012
    138 Posts
    Neat, the mobile Steam app actually uses a web API written in PHP, even responding with JSON. That means it will now be much, much easier to interact with Steam Friends from third-party software.
    https://vitalyi7.valvesoftware.com:8283

    That's the URL it all goes through.
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Informative Informative x 3 (list)

  2. Post #2722
    RUBY OVERLORD
    swift and shift's Avatar
    November 2011
    2,115 Posts
    I've been playing with some experimental extensions to Javascript in Twostroke.

    I've got infix function calls, ala. Haskell:



    You can even 'fake' lambdas with infix function calls and Javascript's Function constructor:



    Lightweight lambda syntax, ala. C#:



    Blocks are essentially the same as functions, except they keep the same value of this as the scope they were defined in (inspired by coffeescript's fat arrow functions):



    I'm enjoying playing around with the language and experimenting with new features, but it's making me wish that all of these features were actually part of Javascript!
    Reply With Quote Edit / Delete Mac Australia Show Events Programming King Programming King x 4 (list)

  3. Post #2723
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    https://vitalyi7.valvesoftware.com:8283

    That's the URL it all goes through.
    What do the request and response structures look like, do you know?
    Reply With Quote Edit / Delete Windows 7 United States Show Events

  4. Post #2724
    RUBY OVERLORD
    swift and shift's Avatar
    November 2011
    2,115 Posts
    What do the request and response structures look like, do you know?
    http://fiddler2.com/fiddler2/
    Reply With Quote Edit / Delete Mac Australia Show Events Useful Useful x 3 (list)

  5. Post #2725
    @@
    @@'s Avatar
    January 2012
    138 Posts
    It's HTTPS good luck with that.

    Edited:

    Code:
            private static final String HTTP_PARAM_DEFAULT_PROXY = "proxy.valvesoftware.com";
            private static final int HTTP_PARAM_DEFAULT_PROXY_PORT = 3128;
    Free proxy from Valve.
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Programming King Programming King x 4Funny Funny x 1 (list)

  6. Post #2726
    RUBY OVERLORD
    swift and shift's Avatar
    November 2011
    2,115 Posts
    valve are a joke

    Edited:

    It's HTTPS good luck with that.
    also fiddler can intercept HTTPS if you trust its certificate
    Reply With Quote Edit / Delete Mac Australia Show Events Useful Useful x 1 (list)

  7. Post #2727
    @@
    @@'s Avatar
    January 2012
    138 Posts
    What do the request and response structures look like, do you know?
    It looks like a HTTP request.

    Code:
    httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
    ((HttpRequestBase) (obj)).addHeader("User-Agent", (new StringBuilder()).append("Steam App / Android / ").append(Config.APP_VERSION).append(" / ").append(Config.APP_VERSION_ID).toString());
    POST methods are used to send data:

    Code:
        public static RequestForLogin GetRequestForLogin(String s, String s1, String s2)
        {
            StringBuilder stringbuilder = new StringBuilder(1024);
            stringbuilder.append("client_id=");
            stringbuilder.append(Config.WebAPI.OAUTH_CLIENT_ID);
            stringbuilder.append("&grant_type=password&username=");
            stringbuilder.append(Uri.encode(s));
            stringbuilder.append("&password=");
            stringbuilder.append(Uri.encode(s1));
            if(s2.length() != 0)
            {
                stringbuilder.append("&x_emailauthcode=");
                stringbuilder.append(Uri.encode(s2));
            }
            stringbuilder.append("&scope=read_profile%20write_profile%20read_client%20write_client");
            RequestForLogin requestforlogin = new RequestForLogin();
            requestforlogin.SetPostData(stringbuilder.toString());
            return requestforlogin;
        }
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Programming King Programming King x 2 (list)

  8. Post #2728
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    Perhaps I can build a simple console client the very same day they've released the app. Any information on what receiving chat messages looks like?
    Reply With Quote Edit / Delete Windows 7 United States Show Events

  9. Post #2729
    @@
    @@'s Avatar
    January 2012
    138 Posts
    Perhaps I can build a simple console client the very same day they've released the app. Any information on what receiving chat messages looks like?
    everything is json encoded, I know that much. :> I'll try to search for some structures and will post 'em here.
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Friendly Friendly x 1 (list)

  10. Post #2730
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    everything is json encoded, I know that much. :> I'll try to search for some structures and will post 'em here.
    How lovely. Thanks!
    Reply With Quote Edit / Delete Windows 7 United States Show Events

  11. Post #2731
    RUBY OVERLORD
    swift and shift's Avatar
    November 2011
    2,115 Posts
    It looks like a HTTP request.

    Code:
    httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
    ((HttpRequestBase) (obj)).addHeader("User-Agent", (new StringBuilder()).append("Steam App / Android / ").append(Config.APP_VERSION).append(" / ").append(Config.APP_VERSION_ID).toString());
    POST methods are used to send data:

    Code:
        public static RequestForLogin GetRequestForLogin(String s, String s1, String s2)
        {
            StringBuilder stringbuilder = new StringBuilder(1024);
            stringbuilder.append("client_id=");
            stringbuilder.append(Config.WebAPI.OAUTH_CLIENT_ID);
            stringbuilder.append("&grant_type=password&username=");
            stringbuilder.append(Uri.encode(s));
            stringbuilder.append("&password=");
            stringbuilder.append(Uri.encode(s1));
            if(s2.length() != 0)
            {
                stringbuilder.append("&x_emailauthcode=");
                stringbuilder.append(Uri.encode(s2));
            }
            stringbuilder.append("&scope=read_profile%20write_profile%20read_client%20write_client");
            RequestForLogin requestforlogin = new RequestForLogin();
            requestforlogin.SetPostData(stringbuilder.toString());
            return requestforlogin;
        }
    If this uses OAuth, does that mean you could pull the secret token out of the app and gain access to anyone that has authorized the app's account?
    Reply With Quote Edit / Delete Mac Australia Show Events Disagree Disagree x 2 (list)

  12. Post #2732
    @@
    @@'s Avatar
    January 2012
    138 Posts
    How lovely. Thanks!
    {
        "type": "chatmsg"
        "type": "personastate"
        "type": "personarelationship"
        "type": "umqstate"
    }
    

    json encoded data will always have a "type" field which will be any one of those.

    a chatmsg:

    {
        "type": "chatmsg",
        "personaname": "string",
        "realname": "string",
        "avatar": "string",
        "personastate": int,
        "gameid": int,
        "gameextrainfo": "string",
        "lastlogoff": "string"
    }
    
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Informative Informative x 1 (list)

  13. Post #2733
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts


    "Okay, let's have a field day with this one and intercept that traff- Oh."
    Reply With Quote Edit / Delete Windows 7 United States Show Events Funny Funny x 15Winner Winner x 1 (list)

  14. Post #2734
    @@
    @@'s Avatar
    January 2012
    138 Posts
    Glad to see our data is safe though. :P
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Agree Agree x 19Optimistic Optimistic x 1Friendly Friendly x 1Funny Funny x 1 (list)

  15. Post #2735
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    Code:
    HTTP/1.1 200 OK
    expires: Fri, 27 Jan 2012 02:29:26 GMT
    content-type: application/json; charset=UTF-8
    Via: 1.1 api.steampowered.com
    Content-Length: 31811
    Date: Fri, 27 Jan 2012 02:43:28 GMT
    X-Varnish: 2988880957
    Age: 0
    Via: 1.1 varnish
    Connection: keep-alive
    
    {
    	"pollid": 0,
    	"messages": [
    		{
    			"type": "personastate",
    			"timestamp": 26910732,
    			"steamid_from": "76561198041546169",
    			"status_flags": 863,
    			"persona_state": 1,
    			"persona_name": "Andrew McWatters"
    		}
    	]
    	,
    	"messagelast": 1395,
    	"timestamp": 26910884,
    	"messagebase": 1222,
    	"sectimeout": 1,
    	"error": "OK"
    }
    Sample data structures

    Edited:

    More stuff, is typing structure:

    Code:
    HTTP/1.1 200 OK
    expires: Fri, 27 Jan 2012 02:30:49 GMT
    content-type: application/json; charset=UTF-8
    Via: 1.1 api.steampowered.com
    Content-Length: 248
    Date: Fri, 27 Jan 2012 02:44:51 GMT
    X-Varnish: 2988932096
    Age: 0
    Via: 1.1 varnish
    Connection: keep-alive
    
    {
    	"pollid": 0,
    	"messages": [
    		{
    			"type": "typing",
    			"timestamp": 26993412,
    			"steamid_from": "76561197996859119",
    			"text": ""
    		}
    	]
    	,
    	"messagelast": 1396,
    	"timestamp": 26993412,
    	"messagebase": 1395,
    	"sectimeout": 2,
    	"error": "OK"
    }
    Edited:

    Seems the messages are in the HTTPS bit:

    Code:
    HTTP/1.1 200 OK
    expires: Fri, 27 Jan 2012 02:30:51 GMT
    content-type: application/json; charset=UTF-8
    Via: 1.1 api.steampowered.com
    Content-Length: 264
    Date: Fri, 27 Jan 2012 02:44:53 GMT
    X-Varnish: 2988934393
    Age: 0
    Via: 1.1 varnish
    Connection: keep-alive
    
    {
    	"pollid": 0,
    	"messages": [
    		{
    			"type": "saytext",
    			"timestamp": 26994162,
    			"steamid_from": "76561197996859119",
    			"secure_message_id": 1396
    		}
    	]
    	,
    	"messagelast": 1396,
    	"timestamp": 26995488,
    	"messagebase": 1396,
    	"sectimeout": 1,
    	"error": "OK"
    }
    Reply With Quote Edit / Delete Windows 7 United States Show Events

  16. Post #2736
    @@
    @@'s Avatar
    January 2012
    138 Posts
    Via: 1.1 api.steampowered.com
    that's interesting... I thought they were using vitalyi7.

    Edited:

    Oh god, obfuscated code. It should of been:

    https://api.steampowered.com:443
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events

  17. Post #2737
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    Persona change:

    Code:
    HTTP/1.1 200 OK
    expires: Fri, 27 Jan 2012 02:37:01 GMT
    content-type: application/json; charset=UTF-8
    Via: 1.1 api.steampowered.com
    Content-Length: 320
    Date: Fri, 27 Jan 2012 02:51:03 GMT
    X-Varnish: 2989169733
    Age: 0
    Via: 1.1 varnish
    Connection: keep-alive
    
    {
    	"pollid": 0,
    	"messages": [
    		{
    			"type": "personastate",
    			"timestamp": 27365698,
    			"steamid_from": "76561198049505546",
    			"status_flags": 863,
    			"persona_state": 0,
    			"persona_name": "Sgt. Rarity"
    		}
    	]
    	,
    	"messagelast": 1750,
    	"timestamp": 27365698,
    	"messagebase": 1749,
    	"sectimeout": 7,
    	"error": "OK"
    }
    Sorry if these seem spammy. Yell at me if they do.

    Edited:

    that's interesting... I thought they were using vitalyi7.
    Nope. That's something else that we're not yet aware of.
    Reply With Quote Edit / Delete Windows 7 United States Show Events

  18. Post #2738
    RUBY OVERLORD
    swift and shift's Avatar
    November 2011
    2,115 Posts
    Code:
    			"persona_name": "Sgt. Rarity"


    Edited:



    "Okay, let's have a field day with this one and intercept that traff- Oh."
    you could probably swap out its copy of steam's public key for fiddler's public key

    or perhaps just install fiddler's certificate locally on your phone
    Reply With Quote Edit / Delete Mac Australia Show Events Agree Agree x 3Funny Funny x 2 (list)

  19. Post #2739
    Gold Member
    synthiac's Avatar
    June 2007
    1,100 Posts
    log ssl send function calls with gdb maybes?
    Reply With Quote Edit / Delete Windows 7 United States Show Events Artistic Artistic x 1 (list)

  20. Post #2740
    open.gl
    Overv's Avatar
    February 2007
    7,431 Posts


    "Okay, let's have a field day with this one and intercept that traff- Oh."
    How did you manage to do this? I installed Fiddler's root certificate and HTTPS pages won't load at all on my emulator :(
    Reply With Quote Edit / Delete Windows 7 Netherlands Show Events Friendly Friendly x 1 (list)

  21. Post #2741
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    or perhaps just install fiddler's certificate locally on your phone
    Eh, somehow I doubt that's gonna work out as smooth as it sounds.

    Edited:

    log ssl send function calls with gdb maybes?
    Nice thinking, but it wouldn't provide much more information than we're getting now.
    Reply With Quote Edit / Delete Windows 7 United States Show Events

  22. Post #2742
    @@
    @@'s Avatar
    January 2012
    138 Posts
    Code:
    http://api.steampowered.com:80/ISteamWebUserPresenceOAuth/PollStatus/v0001
    
    https://api.steampowered.com:443/ISteamWebUserPresenceOAuth/Logon/v0001
    https://api.steampowered.com:443/ISteamWebUserPresenceOAuth/Poll/v0001
    https://api.steampowered.com:443/ISteamWebUserPresenceOAuth/Message/v0001
    https://api.steampowered.com:443/ISteamWebUserPresenceOAuth/Logoff/v0001
    https://api.steampowered.com:443/ISteamWebUserPresenceOAuth/DeviceInfo/v0001
    https://api.steampowered.com:443/ISteamWebAPIUtil/GetServerInfo/v0001
    
    https://api.steampowered.com:443/ISteamOAuth2/GetTokenWithCredentials/v0001
    List of URIs.

    Edited:

    those sneaky valve, the URIs keep returning 404's until you match the parameters perfectly! D:
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Winner Winner x 4 (list)

  23. Post #2743
    Gold Member
    VoiDeD's Avatar
    August 2005
    860 Posts
    Edited:

    I wish I knew what Voidy's process was for reverse engineering these structures or I'd attempt to do it myself.
    I mash random keys on my keyboard and pray it works.
    Reply With Quote Edit / Delete Windows 7 United States Show Events Programming King x 15Funny x 2Winner x 2Informative x 2Agree x 1Useful x 1Friendly x 1 (list)

  24. Post #2744
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    I mash random keys on my keyboard and pray it works.
    take off your fennec paws first, maybe that'll improve your efficiency
    Reply With Quote Edit / Delete Windows 7 United States Show Events Funny Funny x 8Optimistic Optimistic x 1 (list)

  25. Post #2745
    open.gl
    Overv's Avatar
    February 2007
    7,431 Posts


    Reply With Quote Edit / Delete Windows 7 Netherlands Show Events Winner Winner x 8Funny Funny x 3Informative Informative x 1Artistic Artistic x 1 (list)

  26. Post #2746
    @@
    @@'s Avatar
    January 2012
    138 Posts
    oAuth client ID's:

    Public: DE45CD61
    Beta: 7DC60112
    Dev: E77327FA
    I don't know if these are like secret salts or anything?

    Code:
                    Uri uri = new Uri("https://api.steampowered.com/ISteamOAuth2/GetTokenWithCredentials/v0001/");
    
                    WebRequest http = HttpWebRequest.Create(uri);
                    ((HttpWebRequest)http).UserAgent = "Steam App / Android / 1337 / 1337";
                    http.Method = "POST";
                    http.ContentType = "application/x-www-form-urlencoded";
    
                    string postdata = "client_id=DE45CD61&grant_type=password&username=USERNAME&password=PASSWORD&scope=read_profile%20write_profile%20read_client%20write_client";
    
                    http.ContentLength = postdata.Length;
                    StreamWriter stOut = new
                    StreamWriter(http.GetRequestStream(), System.Text.Encoding.ASCII);
                    stOut.Write(postdata);
                    stOut.Close();
    
                    HttpWebResponse response = (HttpWebResponse)http.GetResponse();
                    Stream stream = response.GetResponseStream();
    login code.
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Winner Winner x 3 (list)

  27. Post #2747
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    Great job everyone, tomorrow we begin work on a Lua library on the work we've found.

    Edited:

    that wasn't suppose to be a joke

    Edited:

    not 24 hours since the app's release and we've already started documenting the api; kinda nice if you ask me
    Reply With Quote Edit / Delete Windows 7 United States Show Events Funny Funny x 13 (list)

  28. Post #2748
    Gold Member
    raBBish's Avatar
    March 2007
    2,667 Posts
    Tip for everyone working with OSW: don't set your status id to 11. It crashes everyone you're chatting with and fucks up your Steam:

    As discovered by Olivia

    e: Clarification: the people you crash can start Steam fine, it's just your own Steam that's fucked up.
    Reply With Quote Edit / Delete Windows 7 Finland Show Events Winner Winner x 15 (list)

  29. Post #2749
    itty-bitty pretty kitty
    Dennab
    September 2008
    9,837 Posts
    someone set up a website for this so we don't have to go trapsing through pages of forum posts to find this info.
    Reply With Quote Edit / Delete Windows 7 United States Show Events Agree Agree x 4 (list)

  30. Post #2750
    Gold Member
    Helix Alioth's Avatar
    August 2009
    2,566 Posts
    Tip for everyone working with OSW: don't set your status id to 11. It crashes everyone you're chatting with and fucks up your Steam:

    As discovered by Olivia

    e: Clarification: the people you crash can start Steam fine, it's just your own Steam that's fucked up.
    Just fixed it!
    You go to Steam\userdata\{numbers}\config\localconfig.vdf

    Code:
    "PersonaStateDesired"		"10"
    to
    Code:
    "PersonaStateDesired"		"1"
    Reply With Quote Edit / Delete Windows 7 United States Show Events Useful Useful x 2 (list)

  31. Post #2751
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    someone set up a website for this so we don't have to go trapsing through pages of forum posts to find this info.
    Overv will be documenting the API alongside myself and we'll be throwing up information on github within the library tomorrow.
    Reply With Quote Edit / Delete Windows 7 United States Show Events Winner Winner x 5 (list)

  32. Post #2752
    itty-bitty pretty kitty
    Dennab
    September 2008
    9,837 Posts
    Overv will be documenting the API alongside myself and we'll be throwing up information on github within the library tomorrow.
    Reply With Quote Edit / Delete Windows 7 United States Show Events Dumb Dumb x 3Friendly Friendly x 1 (list)

  33. Post #2753
    dajoh's Avatar
    March 2011
    625 Posts
    Overv will be documenting the API alongside myself and we'll be throwing up information on github within the library tomorrow.
    Or you could just update this page.
    Reply With Quote Edit / Delete Windows 7 Sweden Show Events Disagree Disagree x 4Agree Agree x 1Zing Zing x 1 (list)

  34. Post #2754
    Gold Member
    Helix Alioth's Avatar
    August 2009
    2,566 Posts
    This is fun
    Reply With Quote Edit / Delete Windows 7 United States Show Events Funny Funny x 11Programming King Programming King x 1 (list)

  35. Post #2755
    open.gl
    Overv's Avatar
    February 2007
    7,431 Posts


    Documenting time.
    Reply With Quote Edit / Delete Windows 7 Netherlands Show Events Programming King Programming King x 2 (list)

  36. Post #2756
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    Or you could just update this page.
    The code will explain how to use the interfaces. If we get around to pushing stuff to the VDC, we'll do it. Otherwise it's a secondary task. The VDC isn't known for it's quality anyway.
    Reply With Quote Edit / Delete Windows 7 United States Show Events

  37. Post #2757
    @@
    @@'s Avatar
    January 2012
    138 Posts


    Gotta deal with SteamGuard properly, but.. I'm logged in! :>

    Edited:

                try
                {
                    System.Net.ServicePointManager.Expect100Continue = false;
    
                    Uri uri = new Uri("https://api.steampowered.com/ISteamOAuth2/GetTokenWithCredentials/v0001/");
                    HttpWebRequest http = (HttpWebRequest)HttpWebRequest.Create(uri);
    
                    http.UserAgent = "Steam App / Android / 1.0 / 1297579";
                    http.Method = "POST";
                    http.KeepAlive = true;
                    http.ContentType = "application/x-www-form-urlencoded";
                    http.ProtocolVersion = HttpVersion.Version11;
    
                    Console.Write("Username: ");
                    string user = Console.ReadLine();
                    Console.Write("Password: ");
                    string password = Console.ReadLine();
                    Console.Write("SteamGuardAuth ( if any ): ");
                    string steamguard = Console.ReadLine();
                    Console.Write("\n");
    
                    string postdata = "client_id=DE45CD61&grant_type=password&username=" + Uri.EscapeDataString(user) + "&password=" + Uri.EscapeDataString(password) + "&scope=read_profile%20write_profile%20read_client%20write_client";
    
                    if (steamguard.Length != 0)
                        postdata = postdata + "&x_emailauthcode=" + Uri.EscapeDataString(steamguard);
    
                    http.ContentLength = postdata.Length;
                    StreamWriter stOut = new
                    StreamWriter(http.GetRequestStream(), System.Text.Encoding.ASCII);
                    stOut.Write(postdata);
                    stOut.Close();
    
                    HttpWebResponse response = (HttpWebResponse)http.GetResponse();
                    Stream stream = response.GetResponseStream();
    
                    Console.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());
                    Console.WriteLine(response.StatusCode);
                }
                catch (UriFormatException e)
                {
                    Console.WriteLine("Invalid URL");
                }
                catch (IOException e)
                {
                    Console.WriteLine("Could not connect to URL");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
    

    Done.
    Reply With Quote Edit / Delete Windows 7 United Kingdom Show Events Friendly Friendly x 1 (list)

  38. Post #2758
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    Code:
    {
    	"pollid": 0,
    	"messages": [
    		{
    			"type": "saytext",
    			"timestamp": 34368668,
    			"steamid_from": "76561197996859119",
    			"text": "The fun can really start with an access_token. :>"
    		}
    	]
    	,
    	"messagelast": 6454,
    	"timestamp": 34369598,
    	"messagebase": 6453,
    	"sectimeout": 1,
    	"error": "OK"
    }
    lole i hake u
    Reply With Quote Edit / Delete Windows 7 United States Show Events Funny Funny x 4 (list)

  39. Post #2759
    open.gl
    Overv's Avatar
    February 2007
    7,431 Posts
    Currently working on a C# library to use the API.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.IO;
    
    namespace SteamWebAPI
    {
        class Program
        {
            static void Main( string[] args )
            {
                SteamAPISession session = new SteamAPISession();
                SteamAPISession.LoginStatus status = session.Authenticate( "****", "****", "****" );
                Console.WriteLine( status );
            }
        }
    }



    The e-mail code parameter is optional. If you don't specify it, it will most likely return the SteamGuard login result and send the e-mail.
    Reply With Quote Edit / Delete Windows 7 Netherlands Show Events Winner Winner x 3 (list)

  40. Post #2760
    Andrew McWatters
    Dennab
    March 2011
    4,658 Posts
    Progress on this will follow up at https://github.com/andrewmcwatters/steamweb-lua-sdk If anyone has any better names for the project, tell me. I just came up with it in 5 seconds.

    Edited:

    We'll most likely be using paradigms from the FPSDK project such as no dependency on any one connector (LuaSocket, LuaCURL, etc.)

    Edited:

    I'll be working on the Lua API for this, while Overv will work on a C# (?) one.
    Reply With Quote Edit / Delete Windows 7 United States Show Events Winner Winner x 2 (list)