Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

AppGameKit Classic Chat / Online highscore system for your AGK games

Author
Message
Ched80
8
Years of Service
User Offline
Joined: 18th Sep 2010
Location: Peterborough, UK
Posted: 11th Apr 2014 22:13
Not sure if that was my issue, my code would have caught that anyway.

Butt I can now say that adding index.php makes the code work on Android again cheers!

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 12th Apr 2014 08:12
Quote: " If so, that may be the issues, as I am parsing the data under the assumption that max 10 names will be returne"

That's why the very first item returned in the list is a number stating how many entries are being sent. This is how it's always been.

num_of_Elements, name1, score1, name2, score2, name3, score3, etc...

Though I believe I may have upped the total number of scores allowed per game to 20. My demo above also illustrates this.
If desired, I can add an optional parameter to return only a limited number of scores. So let's say you only wanted the top 5.


Here's a tip if anyone has a game where lower is considered the better score (like golf). You could make your scores negative before submitting them and this will keep the lowest scores organized in the database. Then when you retrieve them, simply flip them back from negative to positive again. I'll probably add this ability natively through the website so it can be set on a per-game basis and then you won't even have to worry about using negatives.

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 12th Apr 2014 08:21
SageTech, thanks for pointing me to that link. I wasn't able to look at it earlier today, but you're right AppGameKit does indeed support SSL.

So for anyone currently using this highscore system, I strongly encourage you to change to the following lines:


And I've confirmed the sent data is encrypted, so no more spying on apps to get their highscore game key.

Jeku
Moderator
16
Years of Service
User Offline
Joined: 4th Jul 2003
Location: Vancouver, British Columbia, Canada
Posted: 12th Apr 2014 09:41
Could you encrypt the user and score with some hash, salted by the secret key, and then have the server decrypt it? That way it would be difficult to spoof the score without the secret key.

One way I used to make some anti-cheating was have the app submit several values with some secret math, then on the server it would reverse the math from the values and make sure they fit with each other to detect tampering. In this public high score it's not really doable since the math equations would have to be secret.

Senior Developer - CBS Interactive Music Group
Ched80
8
Years of Service
User Offline
Joined: 18th Sep 2010
Location: Peterborough, UK
Posted: 12th Apr 2014 11:37
Hmmm I can't seem to log on to the website - it says my username/password are incorrect...

Funnell7
7
Years of Service
User Offline
Joined: 8th Sep 2011
Location: UK, England
Posted: 12th Apr 2014 17:57
@Ched80, Phaelax changed the log in to your email address as opposed to the username you originally created, could be that?

Quote: "Though I believe I may have upped the total number of scores allowed per game to 20"


That'd be it then No probs, I can easily change it to accommodate the extra names, thanks!
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 13th Apr 2014 01:21
Quote: "Could you encrypt the user and score with some hash, salted by the secret key, "


I planned on going that route before I moved to SSL, but after that I didn't think it was necessary. You think I should still add it even going over HTTPS? While the public key is transmitted, I considered a private key which isn't and is used for encrypting the data before submitting. I can still do that as well, I just need a decent encryption scheme.

Jeku
Moderator
16
Years of Service
User Offline
Joined: 4th Jul 2003
Location: Vancouver, British Columbia, Canada
Posted: 13th Apr 2014 09:23 Edited at: 13th Apr 2014 09:24
Quote: "I planned on going that route before I moved to SSL"


Oh I didn't realize there's support for this, that's awesome! I believe that there's no way for something like Charles to read the proper values being sent to the server with SSL and I'd be really interested in knowing if this works for you

Senior Developer - CBS Interactive Music Group
SageTech
14
Years of Service
User Offline
Joined: 3rd Dec 2004
Location: Orlando, Florida
Posted: 13th Apr 2014 11:48
If all communications are sent over HTTPS, then no other encryption should be necessary, at that point the choices for cheating are severely reduced.

One important thing to consider is that HTTPS use must be consistent. You really should REQUIRE the use of TLS...you can achieve this by tweaking your Apache config or if you are on shared hosting modifying the .htaccess file to redirect all non http traffic to https.

There are still some techniques that can be used to hack ssl encrypted communications, one of them is called a replay attack. Basically a packet sniffer can resend or delay a request, which would be considered valid by the server since it was generated by the client using a valid key. The methods to gain anything valuable from this are complex, but it is something to consider. You can mitigate this by implementing session tracking or time stamping requests.

Another thing to watch out for is SQL Injection. If you're using PDO with parameter binding on the back-end you don't need to worry about this, but otherwise allowing the client to send ANYTHING (in this case a name to go along with the high score) means the cheater can do all sorts of nasty things. As an example, they could lower everyone else's score so there's is the highest, obtain the game key or even other game keys...or worst of all, DROP the high-score table or all the tables, really anything you can do in SQL, they can do as well.

Unfortunately, this is what comes along with securing applications/services, so it is crucial that you remember the number one rule in app security:

Never, ever, EVER trust user input. Whether by accident or by malevolence, the user will always end up entering unexpected input, its up to you to make sure that they don't get unexpected output as a result.
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 14th Apr 2014 17:11
Quote: " I believe that there's no way for something like Charles to read the proper values being sent to the server with SSL and I'd be really interested in knowing if this works for you"

I used Charles to get the transmitted data and I certainly wasn't able to read what it found.

Quote: "you can achieve this by tweaking your Apache config or if you are on shared hosting modifying the .htaccess file to redirect all non http traffic to https."

Thanks, I wasn't quite sure how to prevent using the non-encrypted protocol.

Quote: "or worst of all, DROP the high-score table or all the tables
"

The user account I created to be used by the site doesn't have DROP rights. (but it can delete)

I'm not using PDO, but I do use filter_input on everything to sanitize the data. I can easily implement prepared statements if necessary. Do you think the filtering is sufficient?

SageTech
14
Years of Service
User Offline
Joined: 3rd Dec 2004
Location: Orlando, Florida
Posted: 15th Apr 2014 14:54
@Phaelax

It's been my experience that when handling user input, the best thing to do is to use prepared statements. When you think about it, escaping input is really an output concern, so doing it with input therefore violates the separation of concerns paradigm which is central to good, readable code. Not only that, but using prepared statements is more then sufficient for preventing SQL Injection.

There is still however a place for validation. For example, on any modern web development project, I make sure input is at-least superficially consistent with what I am expecting. With a high score for example, you know that the input needs to be an integer, so if input is anything outside that known constraint (IE. not purely a number), the program shouldn't even touch the DB Persistence layer of your application.

One way to simplify this for yourself is by using an ORM as it can handle most of these concerns for you, for example you can pass your input to a validator, then if it passes that, write to the database. My code would look something like this in PHP:





There is an advantage to abstracting some of this logic away, mostly so you don't keep writing the same code over and over again (Again another solid development principle to follow, DRY, or Don't Repeat Yourself).
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 15th Apr 2014 18:00
Quote: " make sure input is at-least superficially consistent with what I am expecting"

And that's how I based my filters actually. But I have added prepared statements after posting yesterday.

I wrote a class to handle most of the functions and keep things easier for me to implement down the road.

Jeku
Moderator
16
Years of Service
User Offline
Joined: 4th Jul 2003
Location: Vancouver, British Columbia, Canada
Posted: 18th Apr 2014 04:04 Edited at: 18th Apr 2014 04:09
I agree about using some kind of ORM or Active Record for anything database-related. I've found it's worth it for the small amount of bloat required, and the tradeoffs are immense. I've built my own online high-score functionality using my existing Code Igniter setup for my domain and simply plugged in the new table easily with something like the following in my highscore controller file:



In my code above $publicGameId is the 'secret' hash that identifies the game.

One nice thing with integers is that you can safely cast things to an int with PHP and if someone enters a string it will evaluate to 0, so you can just check if it's <= 0 if you're expecting a positive int. My code above doesn't care about the username size and Active Record takes care of checking for SQL injection. Beautiful

Senior Developer - CBS Interactive Music Group
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 18th Apr 2014 22:04
Just a quick update, I've been working on some new features for the site. Not so much for the highscore tables, but continuing with my original plans of GameSpace. Eventually, you'll be able to host your games on the site. Sometime over the next week I'll switch over to the new design which lets you upload photos of your game, search other games, and leave reviews.

Ched80
8
Years of Service
User Offline
Joined: 18th Sep 2010
Location: Peterborough, UK
Posted: 23rd Apr 2014 18:20
Hi Phaelax, I've been thinking about your service and I had a few ideas.

Personally I think you might struggle to get the traffic you want with the features you talk about. I think you may have more luck by offering alternative services such as Postable challenges where players can login and post challenges as well as comments and reviews. Also achievements would be an awesome feature,but you could also display achievement starts so players could compare their performance.

Just some thoughts.

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 23rd Apr 2014 20:55
What kind of challenges?

Ched80
8
Years of Service
User Offline
Joined: 18th Sep 2010
Location: Peterborough, UK
Posted: 24th Apr 2014 08:35
I'm thinking of more complex games here where private challenges can develop beyond what the developer originally designed. For example in Master of Orion 2 I used to challenge myself to build an empire almost entirely out of androids. This want a challenge made by the designers but it would have been cool to share my challenge with others.

_Pauli_
AGK Developer
9
Years of Service
User Offline
Joined: 13th Aug 2009
Location: Germany
Posted: 25th Apr 2014 12:27 Edited at: 25th Apr 2014 15:14
Ok, I tried this, but I have a few issues...

First of all I could not do anything on the site in Firefox or Internet Explorer! The Firefox console says the page uses non-encrypted password fields or something. This doesn't work at registration or login. I don't want to install a new browser just to use this. Registration and login works on my Android phone though (but it's a pain to use on a small screen).

And then I can't add a game to my account! When I click "Add Game" and enter a name and description and submit, I am redirected to a page with only the page header and no game shows up on my account.

Edit:
Well, nevermind. I followed this tutorial and implementing it was not that difficult. Also it gives me more flexibility, just have to dive into PHP a bit more...

Visit my blog: sebastianpauli.tumblr.com
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 26th Apr 2014 08:14
That tutorial uses the outdated mysql commands. Not too mention it sticks GET variables straight into an sql query without any validation or escaping. Very bad!

What version of FF are you using? You'd be the first to have FF issues that I've heard of. Either way, I'm hoping to have my new version of the site up this weekend.

ThrOtherJoJo
7
Years of Service
User Offline
Joined: 24th Mar 2012
Location: California
Posted: 27th Apr 2014 00:31
Here is Phaelax's Tier 1 code converted into Tier 2, if anyone is interested:



Joeisms
KG2Entertainment.com
_Pauli_
AGK Developer
9
Years of Service
User Offline
Joined: 13th Aug 2009
Location: Germany
Posted: 27th Apr 2014 12:02
Quote: "That tutorial uses the outdated mysql commands. Not too mention it sticks GET variables straight into an sql query without any validation or escaping. Very bad!"


Ok, I just don't have any idea about all this PHP/SQL stuff. Maybe I'll have to check out a few tutorials. But right now it just works and I can go on from there...

Quote: "What version of FF are you using?"


My Firefox About-window says it's version 28.0.

Visit my blog: sebastianpauli.tumblr.com
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 27th Apr 2014 20:45
My FF is way behind, I'm using version 23! I'm not sure what problem it was having with FF, but the updated site is now live and I've verified registration works in FF.

I'm still adding features for managing your games once created, but hopefully you all like the new site.

Funnell7
7
Years of Service
User Offline
Joined: 8th Sep 2011
Location: UK, England
Posted: 27th Apr 2014 21:08
Quote: "but hopefully you all like the new site"


I'm sure we will... But wait... My leaderboard isn't working again, I'm still doing it the original way (test.php), is that no longer possible now? I know you said you would remove this 'eventually', just wasn't sure when eventually would be
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 27th Apr 2014 22:00
I guess eventually is today! You have to use SSL, use this now:



Ched80
8
Years of Service
User Offline
Joined: 18th Sep 2010
Location: Peterborough, UK
Posted: 28th Apr 2014 08:41
I'm loving the new look Phaelax! Great work!

Funnell7
7
Years of Service
User Offline
Joined: 8th Sep 2011
Location: UK, England
Posted: 28th Apr 2014 13:05
Quote: "I guess eventually is today!"


Lol, no probs! All updated and submitted... Thanks again for hosting this, it's perfect!! Site is look great too!
Matty H
10
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 1st May 2014 01:30
Thanks Phaelax. This was really easy to setup. I am using it in my new game: The Worm Game

Fknbude
5
Years of Service
User Offline
Joined: 22nd Jun 2014
Location:
Posted: 29th Jun 2014 04:31
Many thanks Phaelax, just managed to implement it to Tapmanic and it works wonderfully!

<a href="https://play.google.com/store/apps/details?id=com.adambartkow.tapmanic">Tapmanic</a>
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 30th Jun 2014 01:47
I just noticed. Yesterday I decided to take a look at the board to see if anyone made a new game lately and saw yours listed.

I have a few updates to make so you can upload photos of the game after you've created it on the site. I've been somewhat distant from the forums the past two months due to military obligations. But I'll be trying to add things to the site.

Fknbude
5
Years of Service
User Offline
Joined: 22nd Jun 2014
Location:
Posted: 30th Jun 2014 23:07
Ah great stuff, looking forward to it

Tapmanic - Android
ThrOtherJoJo
7
Years of Service
User Offline
Joined: 24th Mar 2012
Location: California
Posted: 7th Jul 2014 09:20
Phaelax, what size should the pics be? It's not letting me upload a pic.

I didn't take note of the error initially, but there was an error in the php file related to it.

Also, when I'm on my game page, I go to pick a file and it does nothing after pressing save.

P.S.
I also want to say thanks again for providing the online system.

Prove Your Worthiness
KG2Entertainment.com
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 8th Jul 2014 09:08
The ability to add a photo after the game was already created has not been implemented yet. I was in the middle of it before I got busy with other things, but someone else brought this up the other day too. I'll try to finish implementing this within the next 24 hours.


Quote: "what size should the pics be?"

I'll have to double check the code, but I *think* the filesize limit is 750kb.

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 8th Jul 2014 21:06
Should be working now, on creation and updating.

Looks like the filesize limit is set for 1mb, which should be plenty. The script will resize the photo for the thumbnails and preview.

Matty H
10
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 8th Jul 2014 21:19
One nice feature would be to be able to save meta data along with the name and high score.

For instance if a player uses a certain avatar then you could save this in a string, it's never on the scoreboard but it allows the programmer to maybe place that avatar next to their name when the scores are downloaded from the server.

Just an idea, really appreciate all the work you have done so far

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 8th Jul 2014 21:39
I could perhaps add a string field for meta data. Would anyone else find this useful?

JLMoondog
Moderator
10
Years of Service
User Offline
Joined: 18th Jan 2009
Location: Paradox
Posted: 5th Aug 2014 20:14
Hey Phaelax, trying to look over the example code and implement it into my game. Maybe I'm not getting something, or I"m confusing myself. Can you break down your code and add a few more comments?

Submit score is simple, no problems there.

Grabbing the online scores is a bit more tricky for me. I only want to grab the top ten and store them into an array with a .name / .score data types. This array is also stored locally encase they're offline.

I don't really understand what you're doing in your retrieve scores code. Like I said, I might just be confusing myself. I'm not a super coder so be nice.

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 6th Aug 2014 18:18
Quote: "I don't really understand what you're doing in your retrieve scores code. Like I said, I might just be confusing myself. I'm not a super coder so be nice. "

I only got this far with HTTP commands because I asked questions too!


When you retrieve the score, the first thing you need to do is connect to the server and establish a link with it.

So first step is to create an HTTP connection then we set the host, or server, for the connection and its parameters. The parameters for setHTTPHost are the Connection ID, the Server Address, SSL (0 for http, 1 for https), then username and password (if any).

Once the connection is establish, we make an HTTP request, separating the address from the GET variables into two function parameters. In this case, all we need to supply is the gamekey.





Once the request is sent, we need to listen for the server's response. The above funtion returns the HTTP connection ID, which is the parameter we use with getHTTPResponseReady. You would check this continuously like you would when listening for key strokes. If it returns 0, the server hasn't responded yet. -1 means an error occurred. And 1 means the server has responded successfully. Keep in mind that just because you got a server response doesn't necessarily mean it's correct, as it could simply be replying with a 404 error or something.




Once we know the server has responded, we call GetHTTPResponse(). This returns whatever data the page would typically send to a web browser when it makes a request. Obviously, my server is setup to not include HTML tags and simply spit out some text. At this point, we can stop listening and close the http connection and release the resources.

The returned string is in the following format:
Num_of_entries, name1, score1, name2, score2, name3, score3, etc...

At that point, you just parse it however you want then add it to your array. At the moment, I haven't implemented a way to limit the number of scores returned, but I could easily fix that tonight if I have time.

JLMoondog
Moderator
10
Years of Service
User Offline
Joined: 18th Jan 2009
Location: Paradox
Posted: 6th Aug 2014 19:11
Quote: "I only got this far with HTTP commands because I asked questions too!"

First time messing with these commands.

Awesome, I think I got it now lol. I'm going to make a test program tonight with one of my keys, wish me luck.

This is the last thing I have left to do and my app is complete. Did you want a in-game credit?

Thanks again!

JLMoondog
Moderator
10
Years of Service
User Offline
Joined: 18th Jan 2009
Location: Paradox
Posted: 11th Aug 2014 16:29 Edited at: 11th Aug 2014 17:22
Woot! Think I got it.

Oh just thought of this while testing. Is there an error code encase you're unable to retrieve the high scores?

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 11th Aug 2014 17:46
If it's an error on my end and not with connecting to the server, I believe it'll give an error. Hmm, looks like maybe I only did error codes for submitting scores, not retrieving. I should probably fix that.

JLMoondog
Moderator
10
Years of Service
User Offline
Joined: 18th Jan 2009
Location: Paradox
Posted: 11th Aug 2014 17:51 Edited at: 11th Aug 2014 18:54
Also getting unknown error code 0 when submitting scores... :/ Been happening for the last hour now. I thought it was something to do with my code, but after checking the res variable, it seems to be on your end? idk

Submitting scores were working perfectly fine before. I can also retrieve scores no problem.

Alright, looks like it's on my end... :/

I'm wracking my brain and can't figure it out...

Here's what I'm donig:


Ignore that...dang, idk what I did but it works again..but nwo the highscores won't update until you've restarted the whole game :/

JLMoondog
Moderator
10
Years of Service
User Offline
Joined: 18th Jan 2009
Location: Paradox
Posted: 11th Aug 2014 19:02 Edited at: 11th Aug 2014 19:03
Also getting unknown error code 0 when submitting scores... :/ Been happening for the last hour now. I thought it was something to do with my code, but after checking the res variable, it seems to be on your end? idk

Submitting scores were working perfectly fine before. I can also retrieve scores no problem.

Alright, looks like it\'s on my end... :/

I\'m wracking my brain and can\'t figure it out...

Here\'s what I\'m donig:


Ignore that...dang, idk what I did but it works again..but nwo the highscores won\'t update until you\'ve restarted the whole game :/

Ok! It's all good. I finally get the http commands...blah. Before I was only running the response functions during certain times..once I switched to always checking in the game loop it worked perfectly.

Edit...oops, I hit the edit button but it gave me a new post..

Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 12th Aug 2014 04:14
I haven't made any changes, but I'll look into it. Don't think I can get to it tonight, just got a call from my LT, the commander is getting on my butt about some online training I have to like right now. Why on earth anyone would appoint me as a public affairs officer is beyond me!

lilpissywilly
AGK Developer
8
Years of Service
User Offline
Joined: 10th Sep 2010
Location: Office Chair
Posted: 20th Sep 2014 19:11 Edited at: 20th Sep 2014 19:58
I tried the example code in your first post and it doesn't work for me. (changed game_key)


Edit: Found the code on your webpage and that works. Maybe the first post should be updated


Edit 2: I'm trying to send and receive floats, any ideas?

My hovercraft is full of eels
ThrOtherJoJo
7
Years of Service
User Offline
Joined: 24th Mar 2012
Location: California
Posted: 21st Sep 2014 05:19 Edited at: 21st Sep 2014 05:40
You can pass your score/times as integers and then pass them to variables that are floats, then divide by a 100.00 for 121.34 or 1000.00 to get 12.13 .



Prove Your Worthiness
KG2Entertainment.com
mr_d
DBPro Tool Maker
12
Years of Service
User Offline
Joined: 26th Mar 2007
Location: Somewhere In Australia
Posted: 21st Sep 2014 07:35 Edited at: 21st Sep 2014 07:54
Hey Phaelax, I just registered on your site, but after confirming my account, I was brought to the screen as attached.
As can be seen, it seems to list a number of games under the "My Games" section, but these are not mine, and when I click on any of them, I get an error page. When I log in properly, the "my Games" section reports "You do not have any games yet." which is currently correct.
Not sure if this is a bug that you want to look at fixing as it seems to only happen when people first activate their account/gamekey.

P.S. I know that there are only a limited number of ways to implement an online highscore system, but I find it coincidental that you seem to use http variable names that are the same as those used by my system...Looks like great minds do think alike

Attachments

Login to view attachments
lilpissywilly
AGK Developer
8
Years of Service
User Offline
Joined: 10th Sep 2010
Location: Office Chair
Posted: 21st Sep 2014 12:17
Quote: "You can pass your score/times as integers and then pass them to variables that are floats, then divide by a 100.00 for 121.34 or 1000.00 to get 12.13 ."


I did solve this last night. But much thanks for your response Jojo

My hovercraft is full of eels
Phaelax
DBPro Master
16
Years of Service
User Offline
Joined: 16th Apr 2003
Location: Metropia
Posted: 23rd Sep 2014 19:50
Quote: "Hey Phaelax, I just registered on your site, but after confirming my account, I was brought to the screen as attached."

Thanks for pointing this out, I'll look into it. It looks like it's pulling a list of my own games, probably some default code I left in by mistake. Did you try clicking on them? Did you have access to edit them?


Quote: "but I find it coincidental that you seem to use http variable names that are the same as those used by my system...Looks like great minds do think alike"

Honestly it is coincidental, I never saw that thread before.

Rezalt
10
Years of Service
User Offline
Joined: 30th Apr 2009
Location: Denmark
Posted: 22nd Oct 2014 01:27 Edited at: 22nd Oct 2014 21:59
Duplicate post, sorry.
Rezalt
10
Years of Service
User Offline
Joined: 30th Apr 2009
Location: Denmark
Posted: 22nd Oct 2014 01:31
Is there a way to avoid having duplicate scores/users uploaded and downloaded from the table?

Download table, see if any matches local user and then check for difference in scores and then upload if local is higher... But that doesn't remove the one already there...?

Maybe I'm just tired, but I can't seem to figure it out at the moment.

Login to post a reply

Server time is: 2019-07-18 11:03:25
Your offset time is: 2019-07-18 11:03:25