The online racing simulator
Searching in All forums
(89 results)
wabz
S2 licensed
Dear Stigpt,

They show up with 9999 ping because their IP addresses have changed since you added them to your favourite list. With favourites, we don't contact the master server to get their details, so this behaviour is to be expected (you see the same with server browsers for other games - steam/hlsw/etc).

Just remove them and add them from the main list again.

The reason you can view server info and get some details is because it uses pubstat for some of those details, and that works by server name, not IP address.

Hope this makes things clear,

love,
-- wabz
Browse For Speed - 0.9
wabz
S2 licensed
Patch Y changed a few things which required BFS to be updated, and we added some extra things along the way.

BFS 0.9

0.8a to 0.9 Changelog:
  • Updated for Patch Y
  • Added "Can reset" and "Cruise" filters
  • Added FBM to car list
  • Now uses LFSLib.Net 0.16b.
  • Admin interface fixed. Removed relay option (BFS uses TCP for insim, so using the relay shouldn't be necessary)
  • Favourite servers now show if they're Private from the normal list
  • Added password dialog before joining. Uses saved password.
  • Server list background is white if you turn off coloured hostnames
If you haven't heard of Browse For Speed:

Browse For Speed is an extremely useful tool for finding servers and joining them. It is able to query demo/s1/s2 servers, lets you maintain a favourites list and keeps track of your friends. It also lets you remotely control your servers via an admin interface.

Querying Features
:
  • Ability to query/join Demo/S1/S2 servers, with filters (cars/public/private/empty/full/tracks/ping/can reset/cruise)
  • Maintains a favourite server list
  • Maintains a friends list
  • View extended server information (racer list, server rules etc)

Admin features
:
  • Connects to servers via insim (connecting via insim relay also supported)
  • Sends/receives server messages
  • Ability to send private messages
  • Shows racer list, with context menu (kick/ban/force spectate)

General
:
  • Ability to launch an arbitrary number of programs before LFS
  • Able to get a server list and query each server
  • Available in 9 languages (thanks to the translators, see CREDITS file)
  • Extremely easy to add translations (place an XML file in the lang folder)
  • Free and open source. If there is any doubt in your mind about what this program does, you can get the source, go through it, and build it yourself using free tools.
The only remote machines BFS will contact are:
  • The LFS master server (to get a server list)
  • Each LFS game server
  • LFSWorld (for pubstat queries (BFS caches these queries so you don't hit the limit))
  • If (and only if) you have version check enabled, it will query www.browseforspeed.net purely for version checking.
I moved my hosting around, and have therefore been able to move (what was private) trac/svn to it:
http://www.browseforspeed.net/trac/ if you want to send patches
And if you want to get the sources from svn, here's the svn url:
http://www.browseforspeed.net/svn/trunk/
wabz
S2 licensed
sf.net is probably fine if somebody is actually going to be the project lead and make necessary updates/accept appropriate patches, as a user of LFSLib.NET I hope someone will take on the task (Hollywood?). I would rather not just see it dropped there and get stale.
wabz
S2 licensed
Quote from Haddock :Where is the failure - on my side?

Nope. I need to fix the insim support (it's been broken since the last round of insim changes). Since someone apparently uses this feature in bfs (awesome!), I'll get around to fixing it soon
wabz
S2 licensed
goncept - The password is saved for favourite servers if you enter it from the extended server info window (right click on the server).
wabz
S2 licensed
Oh, just add those particular servers to your favourites and then you can just refresh that list?
wabz
S2 licensed
Quote from GerG :Wabz,

Hi there m8 i have the updated hungarian translation in hands, should i email it to you, or is the online system working now somehow?

Yeah, just email it, thanks!

Quote from geeman1 :Thanks for the update.

I have one request though. Could you make the program show S2 and S1 servers at the same time?

Not really. When we request the server list from the master server, we specify what version we want, and we can't ask for both. It would be possible to ask for S2 and then S1 servers, but I really don't see much point in doing that.
wabz
S2 licensed
Okay, 0.8a is out, updated for patch X10, hasn't been tested much, let me know of any problems!
wabz
S2 licensed
Yeah, we should handle that more gracefully. The problem won't go away though, because the server query protocol is not documented, and never guaranteed to send what we expect - we can only be reactive. I'll have a look at this later today.
wabz
S2 licensed
Quote from sdether :Ok, 0.12b is out. It's just 0.11b with patch X compatibility. Docs are not updated (switching to Sandcastle by 0.13b) and i haven't exhaustively tested it, but it at least should allow 0.11b people to get up and running against path X with only a few code changes.

More info is here and the zip is here.

Thanks! I'll test this stuff (though BFS certainly doesn't use most of your library's functionality) soon.

I think the current event based model is nicer than your proposal - for example, how would that work with LFSMessage or RaceTraceConnection stuff, where there isn't a request for each response? Probably the one way to do things would be cleaner. Or am I missing something?
wabz
S2 licensed
sdether, thanks for updating LFSLib, your work is really appreciated.

Regarding going from unicode to LFS's structure - something like the following will do it:

public static string convertToLFSString(string str) {
string ret = "";
Encoding current = Encoding.GetEncoding(1252);
Encoding lat = Encoding.GetEncoding(1252);
Encoding jap = Encoding.GetEncoding(932);
Encoding greek = Encoding.GetEncoding(1253);
Encoding bal = Encoding.GetEncoding(1257);
Encoding cryl = Encoding.GetEncoding(1251);
Encoding euro = Encoding.GetEncoding(1250);
Encoding turk = Encoding.GetEncoding(1254);
char[] c = str.ToCharArray();
for (int i = 0; i < c.Length; ++i) {
if (current != jap && jap.GetBytes(c, i, 1)[0] != lat.GetBytes(c, i, 1)[0]) {
current = jap;
ret += "^J";
} else if (current != greek && greek.GetBytes(c, i, 1)[0] != lat.GetBytes(c, i, 1)[0]) {
current = greek;
ret += "^G";
} else if (current != bal && bal.GetBytes(c, i, 1)[0] != lat.GetBytes(c, i, 1)[0]) {
current = bal;
ret += "^B";
} else if (current != cryl && cryl.GetBytes(c, i, 1)[0] != lat.GetBytes(c, i, 1)[0]) {
current = cryl;
ret += "^C";
} else if (current != euro && euro.GetBytes(c, i, 1)[0] != lat.GetBytes(c, i, 1)[0]) {
current = euro;
ret += "^E";
} else if (current != turk && turk.GetBytes(c, i, 1)[0] != lat.GetBytes(c, i, 1)[0]) {
current = turk;
ret += "^T";
}
ret += lat.GetString(current.GetBytes(c, i, 1));
}
return ret;
}

However it has a fundamental problem - if the original LFS string that you converted to unicode has, for example, unnecessary ^Js, the strings won't match. For example, ノマed may have originally come as ^Jノ^Jマ^Led, or just ^Jマed and you simply don't know - so received/sent LFS strings won't match, and however you do the conversion, they never will (BFS deals with this by storing the raw data alongside the unicode equiv). This isn't a corner case hypothetical problem - I found that people put these extraneous conversion chars in _all the time_. It would be nice if LFS removed them as they were entered...

So maybe just let the application deal with it, or provide a (static?) method apps can use if they want to convert to unicode for display.

By the way, is your new version going to support going through the insim relay? I think I sent you a patch with copyright assigned to you...
Last edited by wabz, . Reason : grammar
wabz
S2 licensed
buedi: yes, that server is very likely a W17 server. When the next incompatible version is released, we'll release a BFS update.
wabz
S2 licensed
No, it just starts LFS with /password or whatever it is. That sounds like a bug. Odd though, because it hasn't been reported before. We'll look into it.
wabz
S2 licensed
Edit: site back up
Last edited by wabz, .
wabz
S2 licensed
Fixed, I hope. 0.7d is now available. It sends a newer version number when querying. This has received very little testing, so let me know if there are still problems.

Also fixed is the startup exception for vista users.
wabz
S2 licensed
uh oh!

Looks like something in the (undocumented) query protocol has changed. This will require a bit of time to fix - we will try to get around to it in the next couple of days.

There's a good chance Scawen has changed the compatibility list or something and all that needs updating is the version that we send to the server when doing the query.
wabz
S2 licensed
*bump*!

If reducing the time to query servers from several minutes to just a few seconds isn't a valid improvement suggestion, I'm not sure what is
wabz
S2 licensed
Quote from KMSpeed :When I click on the question mark on the LFS multiplayer screen, I can see who is in the server, what car he drives, if there is a race or qualifying in progress and in which lap each racer is.

Are these info available from BrowseForSpeed?
If not will they implemented or is it impossible (not provided by pubstats)?
Please illuminate this topic a little.

Yeah, I agree, that is useful information. Most of the information BFS gets isn't from pubstats, it's directly from the server or master server. Some queries require a valid username and password, the query to get that information is one of those. BFS is a 3rd party application and I don't think it's acceptable to ask a user to enter their game username and password, whether it's optional or not. That info isn't available from pubstats either unfortunately.

The best solution here probably is to implement this stuff in the in-game browser, or completely document and open the server querying protocol (what other game _requires_ a valid user/pass to query individual servers?). Or I could just hardcode my user/pass (the password sent is a form of crc32 of it, not the actual text) and hope the devs don't get angry
wabz
S2 licensed
There's always Browse For Speed, an external server browser which lets you add favourites, and friends (shows which are online). One of its advantages is not having to load LFS just to see if there's a server you want to join. And it's open source, so you can add features you want yourself (or just ask)!
wabz
S2 licensed
Quote from the_angry_angel :I had an idea of possibly implementing a quick config implementation tomorrow based on tables i.e.
cfg = {
insim = { "address" = "127.0.0.1, "port" = 29999, "password" = "pies", flags = etc. blah blah },
lua = { "forcegarbagecollection" = yes },
blah blah
}

Not necessarily set out like that, but who knows. I'd love some comments on the idea of using tables as the main configuration concept though. Perhaps its not the best way? Interating through tables is a bit clunky as it requires pushing functions on and off the Lua stack and then getting the results, sadly.

Use glib? The following would be very useful:
http://developer.gnome.org/doc ... ey-value-file-parser.html
wabz
S2 licensed
Quote from nathanm :Like it or not, Phlos' attitude is fairly common among certain types of legitimate security researchers, much less those who use the work of others to crack systems. "We gave you fair warning" is often considered enough in their minds to justify public shaming by cracking the vulnerable system.

Full disclosure is VERY different to actually exploiting things and running around making an ass of yourself. A decent enough thing to do would be to email the devs, possibly give them some time to fix/respond, then make details of vulnerabilities public (and not actually exploit/damage).

http://www.schneier.com/blog/a ... 7/01/debating_full_d.html
wabz
S2 licensed
Quote from efast :Is there any way to get "STCC 1a New & Bronze" server's IP address? since I would like to join the server but my LFS can never find it when indexing servers

Knowing the IP address of the server won't help you - to join a server it has to be done through the master server using the name of the server - you cannot join a server directly. Try using Browse For Speed (link in my sig - the version it sends should get all servers running a current compatible patch). Browse For Speed does get servers' IP addresses, but that's so it can show ping values.

Quote from St4Lk3R :you can't. thats a security function to prevent cracking, and its good like it is.

This is incorrect. See the Browse For Speed source to see how it's done. I also don't believe that servers' IP addresses are hidden for security reasons - my guess is that they're hidden because users shouldn't _need_ to know about IP addresses, it just adds complexity. Security through obscurity doesn't work (BFS source code proves this), and your cracking comment is simply incorrect.
wabz
S2 licensed
Quote from Scawen :Ian : I think colour codes are correctly ignored. But codepage changes are not ignored. If you can find a reproducable case where one seems wrong, I'd like to know about it.

(It seems the problem is in the checking of the length of the server name entry field including/not including colour/codepage changes)

Also, if the server admin puts extraneous codepage changes in, then it's impossible to type it in, because you don't know where those unnecessary changes are. Maybe the master server should remove extraneous changes in all cases. (erm.. maybe this is the case now, but I know a few months back it wasn't)

I think it's also not possible to join a server starting with a "/" using the /join switch when starting LFS. Along with the suggestions in this thread, maybe it would be an idea to allow joining by specifying IP/port - could be useful for external apps, as well as removing all ambiguities.

Ian: "Just another"???
Last edited by wabz, .
Server Querying suggestions
wabz
S2 licensed
I have some suggestions regarding the way server querying is done:
All other games that I'm aware of use UDP for server querying. There are very good reasons for this:
  • Speed
  • Replies aren't essential - and if you miss out it's likely to be an unreliable server for you anyway
  • Speed
  • Microsoft Windows is a truckload of suck (explained below)
  • Speed
When the game is getting the server list, 16 servers (max) are sent per packet. A response is required between each packet. Please, think of the Australians. There are usually about 500 servers, that's about 30 packets. A round trip ping (directly from OptusNet, Australia's 2nd largest ISP) to master.liveforspeed.net takes at least 300ms. That's 9 seconds MINIMUM, just to get the server list. After that, 500 servers are sent 2 packets (from memory) and responses.

Now, the above wouldn't be so crucial[1], but in all its idiocy, Windows XP (and above) limits the number of outgoing tcp connections to 10 per second. illepall This limit is not imposed on UDP.

So, querying all servers, especially from Australia, takes a Very Long Time Indeed[2] (several minutes). Compare this to Steam, which uses UDP for server querying - it queries hundreds of servers per second.

Therefore, I have some suggestions:
  • Don't require a response after each packet when getting the server list. Just blast them at the client.
  • Start querying servers as soon as you start receiving them
  • Use UDP
  • Visit Australia
[1] Despite distances, linux does the whole job in under 20 seconds (servers are queried once the first packet containing server IP/Ports response is received)

[2] I'm well aware of filters. However, there being few servers in the Oceana region, I often just want to get all of them. Filtering isn't a very scalable solution to this problem either. It might be worth doing what Steam does, and letting server admins specify what continent they're on, then be able to filter on that too.
Last edited by wabz, . Reason : whacky font stuff
wabz
S2 licensed
Quote from Bean0 :I imagine the master server is on a fixed IP, so there is no harm leaving it there

I wouldn't recommend leaving it there, if you do and it changes (like it just did), you might be left scratching your head. If you need to race in LFS in the next hour or whatever, put it there and remove afterwards.
FGED GREDG RDFGDR GSFDG