Unable to upload profile Death Kitten: Please enable online play within the game first.

20 replies [Last post]
Joined: 10/15/2009

I just tried to upload my profile to the leader board, and the subject of this entry says it all:

Quote:
Unable to upload profile Death Kitten: Please enable online play within the game first.

As far as I know online play IS enabled, but I haven't been able to test it out due to the server seeming to be down during the birthday sale. Anyone know what's going on?

I <3 BABYLAND! 1989 - 2009
nuqDaq yuch Dapol

Joined: 11/04/2008

All you have to do is, either:

a) Complete a level and turn on "submit to World of Goo leaderboard" at the end of the level

or

b) Go to World of Goo Corporation and click "connect"

Joined: 10/15/2009

Then clearly something else is wrong, as I have tried both steps. I have selected the submit to World of Goo leaderboard option at the end of one or more levels, and I have attempted the connect button in the World of Goo corporation. Neither seems to work at the moment... which I was lead to believe was a result of the birthday sale putting heavy load on the servers and many people being left unable to connect as a result.

I <3 BABYLAND! 1989 - 2009
nuqDaq yuch Dapol

Joined: 12/23/2008

Yes, that's still broken on 2D Boy's end. There is nothing you can do about it at the moment.

This is really unfortunate as that means none of the new players since the Birthday sale will be able to upload profiles until this gets fixed. I hope 2D Boy are able to fix it on their side, otherwise we'll have to come up with an alternative way of creating player keys...

For example, I think Gootool should be able to edit the player's profile and set a randomly-generated key, but I don't know if that breaks the WoGC labels. (This doesn't matter if 2D Boy's script is down forever, of course.)

Joined: 10/15/2009

Thank You for being able to confirm that it was the inability to connect to the 2D Boy servers that was preventing me from being able to have my data recognized on these Leaderboards. Also, thank you for mentioning what it was that we were lacking that kept it from accepting my data (the player key).

I <3 BABYLAND! 1989 - 2009
nuqDaq yuch Dapol

Joined: 11/04/2008

Not sure what you mean by "WoGC labels" here Soultaker? Otherwise I think it's a splendid idea and I'll add it to GooTool.

Joined: 10/16/2009

But what if the random number It generates is some one else's number wouldn't It screw up the 2 profiles?

Joined: 11/04/2008

Yes, but there's only a N in 340,282,366,920,938,463,463,374,607,431,768,211,456 chance of this happening (where N is the number of WoG players worldwide)!

And then the only thing that would happen is that they wouldn't be allowed to upload their profile because someone else has the same ID. I'll take the risk of having to manually fix someone's profile if this happens!

Joined: 03/31/2009

Last time i checked the WoG Corporation I had a tower of 0.00m and it said I was about 1200000 tallest in the world. So I presume N(number of profiles in the world is 1200000) that leaves only 1 in 2.83568639 × 10^23 Laughing out loud

My Gooish profile | Videos on YouTube | My WOG Mods

thB
thB's picture
ContributorAddin AuthorKleptomaniacToo Much Free TimeSerious OCD
Joined: 04/17/2009

Even if the chances are extremely low that two players end up using the same key, imo one should never take the risk of just creating a random key. Why not use a combination of for example the profile's name, the creation time and some environment variable(s) GooTool has access to for hashing? That would at least make it virtually impossible that two or more of the keys created by GooTool will be the same.

my gooey profile | my video channel | author of Hazardous Environment

Joined: 11/04/2008

Because that would actually increase the chance of a collision! As a simple illustration, imagine a 5-character profile name. There's a far greater chance of this being "David" than it being "a4f7h".

BTW I would imagine 2D Boy are also doing a random 128-bit integer.

thB
thB's picture
ContributorAddin AuthorKleptomaniacToo Much Free TimeSerious OCD
Joined: 04/17/2009

That's why of course other parameters MUST also be part of the string. I didn't say to only use the name; that would be just brainless. Using name and timestamp alone would basically already make a collision impossible, but as I said more parameters should of course be included to be sure.

my gooey profile | my video channel | author of Hazardous Environment

Joined: 11/04/2008

No, I know you didn't say only name. But what I'm saying is that, contrary to your expectation, using things like the name/environment/etc in the string actually increase the chance of a collision over a pure (pseudo-)random number. I don't have the energy to illustrate the maths behind this and just used the name as an example of how it actually decreases the entropy.

Joined: 03/31/2009

I must agree with davidc, it is easier to use random number(not saying that easy means bad just easy) and if ID was made by some parameters some good coder(savant Smile ) could crack the way it was been made Smile

My Gooish profile | Videos on YouTube | My WOG Mods

Joined: 12/23/2008

davidc wrote:
Not sure what you mean by "WoGC labels" here Soultaker?

What I'm worried about is that if GooTool sets the player key, the 2D Boy server doesn't recognize it and ignores this player altogether.

Normally, when the game goes online, it first requests a new player key from the server, and at this point the server stores the player's name and country info. This information is not included when the game posts scores back, so I think that if you use a random key (that was never officially handed out by the server) the server won't be able to list you in the official leaderboards or the WoGC clouds.

The official leaderboards seem to be down indefinitely, so that probably isn't an objection, but if the WoGC clouds come back online again, people with random-generated keys can't see them and they can't request a really valid key either because the game thinks it has a valid key (unless GooTool can also un-set the key, which is probably not desirable because then profiles are disconnected on this website too).

davidc wrote:
But what I'm saying is that, contrary to your expectation, using things like the name/environment/etc in the string actually increase the chance of a collision over a pure (pseudo-)random number.

I don't think this is necessarily true if you just view the environmental data (time, player name, etc.) as yet another source of entropy. Specifically, hash_of(random number + player name + time) should not be better or worse than just generating a large random number to begin with. However, if you use just a random number, make sure you actually use 128 bits of entropy, instead of doing md5(rand()). Wink

Joined: 11/04/2008

I actually coded this already, but given your response, I might have to rethink it. I didn't consider that the official leaderboards might ignore randomly generated IDs. I suppose I never traced a "new" profile so I only ever identified op=SetWogcStat and op=SetLevelStats, and assumed the country was set server-side on the first call via geolocation on the IP address.

At the moment it's 128 bits of "secure" random data. But if I set the first 32 bits to a fixed value, and make only the remaining 96 bits random, then I can use the first 32 bits to identify a locally generated ID. I can then allow the user to "unset" their online ID if it matches the first 32 bits (i.e. it was originally set in this manner) if/when the official leaderboads come back online.

Of course that doesn't prevent profiles getting disconnected on this site, but I don't think that's a particular problem since we have other ways of removing hacked profiles than just the online ID.

As far as the last point goes... I'm not an expert in cryptography by any means but if you include "random" data as well, I agree. But if you just seed it off the environment/username I believe my original statement was correct.

I'm not md5ing at all to generate the key. I generate 128 bits of random data and convert it to hex. I think this is about right:

package com.goofans.gootool.profile;
 
import java.io.IOException;
import java.util.Random;
import java.security.SecureRandom;
 
import com.goofans.gootool.io.GameFormat;
 
/**
 * Updates the user's profile file to add online IDs to each profile that is missing one.
 *
 * @author David Croft
 * @version $Id: GenerateOnlineIds.java 354 2009-11-04 11:28:04Z david $
 */
public class GenerateOnlineIds
{
  private static final Random RANDOM  = new SecureRandom();
  private static final char[] HEX_DIGITS = new char[]{'0', '1', '2', '3', '4', '5', '6', '7',
          '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
 
  private GenerateOnlineIds()
  {
  }
 
  public static void generateOnlineIds() throws IOException
  {
    ProfileData profileData = ProfileFactory.getProfileData();
 
    for (Profile profile : profileData.getProfiles()) {
      if (profile != null && profile.getOnlineId() == null) {
        profile.setOnlineId(generateId());
      }
    }
 
    GameFormat.encodeProfileFile(ProfileFactory.getProfileFile(), profileData.toData());
  }
 
  @SuppressWarnings({"MagicNumber"})
  private static String generateId()
  {
    byte[] bytes = new byte[16];
    RANDOM.nextBytes(bytes);
 
    char[] chars = new char[32];
    for (int i = 0; i < 16; ++i) {
      int theByte = bytes[i];
      chars[i * 2] = HEX_DIGITS[theByte & 0xf];
      chars[i * 2 + 1] = HEX_DIGITS[theByte >> 4 & 0xf];
    }
 
    return new String(chars);
  }
}

Joined: 12/23/2008

The point was that your RNG needs at least 128 bits of internal state if you want to generate a true 128 bit random number. Cheap and fast RNGs like in the C library don't have anywhere near that. (Sure, you can call nextBytes(1000) to obtain 8000 random-looking bits, but if this is based on an internal state of only 31 bits, then this isn't actually any better than just putting 7969 zeroes in front of a 31 bit number; it only looks more random.) Those cryptographically secure RNGs probably have a pretty large internal state, so this may not apply.

Anyway, all of this is beside the point. I have no doubt you would implement this sensibly. Smile

Quote:
But if I set the first 32 bits to a fixed value, and make only the remaining 96 bits random, then I can use the first 32 bits to identify a locally generated ID. I can then allow the user to "unset" their online ID [..] if/when the official leaderboads come back online.

That's one solution. Another way to go about it would be to leave the actual profile alone but have GooTool submit a randomly-generated (but persistent) client key along with the file. Then, the server can use this locally-generated key if the profile doesn't contain a client key. (A similar approach would be to have the client insert the online key before submitting, if the profile doesn't have one, and then the server-side code doesn't have to change.)

The advantage of this would be that the player doesn't need to do anything special with GooTool to go get an official online key once 2D Boy's server comes back up. The downside is that people without an online key need to submit their profiles through GooTool. I don't know if that's a big problem for many people (it's quite useful to have GooTool installed anyway and it runs fine on all platforms that WoG runs on).

Joined: 11/15/2009

I still have a problem with "Unable to upload profile Death Kitten: Please enable online play within the game first." Sad

And as I press button "connect" in World of Goo Corporation, displays to me this words:
"Unable to connect. Does the Internet work?"

The link can not be a problem because I have a solid and fast enough Sad

What should I do about this?

Joined: 03/31/2009

download GooTool 1.0.1v. In advance menu click Create Online Player ID. Then you can upload your profile Wink

My Gooish profile | Videos on YouTube | My WOG Mods

Joined: 11/04/2008

^ What Pavke said Smile

Joined: 11/16/2009

Pavke wrote:
download GooTool 1.0.1v. In advance menu click Create Online Player ID. Then you can upload your profile Wink

i have the same problem as death kitten, and where do i find the advance menu your talking about o.o

edit: nvm i found it