• Welcome to Valhalla Legends Archive.

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Don Cullen

I keep wanting to use Javascript, but I keep remembering some users who deliberately disable Javascript on their browsers.

So should I go ahead and use Javascript thus pissing off those extremely few users, or should I opt instead for an entirely no-javascript site?
How should expired BNETDocs.org accounts be handled?

This is how it currently is:

When someone registers, but never logs in thereafter for two weeks, it results in the account being deleted, but retained in backup database and the account name being locked permanently (preventing other people from registering using that name) for until the person who previously registered it re-registers it using the same email address they had used previously.

That's it.

So I'm considering modifying it to:

If someone registers, but fails to validate their email and doesn't login thereafter for two weeks, the account is completely deleted and the name made available for use by others.

If someone registers, and validates their email, but doesn't login thereafter for a period of two weeks, the account would be deleted, retained in backup database for recreation if the user re-registers using same registration info as before, but if someone else registers using that name with different registration info, the account in backup would be deleted permanently and the account name be given to that user.

If someone registers, validates, and does login at least once a year, but hasn't commented or contributed at all, and stops using the account for more than a year, an email will be sent asking the person to click on a link to keep the account (if they don't want to keep, just ignore the email). Two weeks after the email is sent, if no click, the account would be deleted and shifted to backup, and the name be made available for either recreation by same user or for use by somebody else.

If someone registers, validates, and comments/contributes at least once, the account would just be left alone permanently for archival purposes even if user never uses the account ever again.

What do you guys think?
Battle.net Bot Development / XML for BNETDocs Packets
September 02, 2008, 04:14 AM
I just finished coding the DTD for the XML, and also coded up two example XML-formatted packets. I'd love to hear your thoughts on it!

This XML example demonstrates basic usage:

<?xml version="1.0"?>
<!DOCTYPE packet SYSTEM "http://labs.bnetdocs.org/dtd/packet.dtd">

<packet ordinal="0x15" name="SID_CHECKAD" direction="2" clients="star,sexp" relatedurls="type=bncs&amp;id=0x15&amp;direction=1">
<!-- relatedurls would be delimited by commas -->
<field type="DWORD" descr="Platform ID" />
<field type="DWORD"  descr="Product ID" />
<field type="DWORD"  descr="ID of last displayed banner" />
<field type="DWORD"  descr="Current Time" />
<!-- Following are just fake, meant as an example -->
<field type="STRING" descr="Null Terminated String" />
<field type="VOID" descr="Non-Null Terminated String" />
<!-- if any, can include html for formatting, but use [] instead of <> -->
Requests ad banner information from battle.net.

This XML example demonstrates usage of loop, and conditionals:

<?xml version="1.0"?>
<!DOCTYPE packet SYSTEM "http://labs.bnetdocs.org/dtd/packet.dtd">

<packet ordinal="0x09" name="SID_GETADVLISTEX" direction="1" clients="star,sexp" relatedurls="type=bncs&amp;id=0x19&amp;direction=2">
<!-- relatedurls would be delimited by commas -->
<field type="DWORD" descr="Number of Games" />
<field type="DWORD" case="if DWORD1 == 0" descr="Status" />
<repeat case="DWORD1 > 0" amtdefined="true" amt="1">
<!-- If amtdefined is set to true, tell it which field contains amount (Ex: amt="1" means first field) -->
<field type="WORD" descr="Game Type" />
<field type="WORD" descr="Parameter" />
<field type="DWORD" descr="Language ID" />
<field type="WORD" descr="Address Family" default="AF_INET" />
<field type="WORD" descr="Port" />
<field type="DWORD" descr="Host's IP Address" />
<field type="DWORD" amt="2" descr="Sin Zero (0)" />
<field type="DWORD" descr="Game Status" />
<field type="DWORD" descr="Elapsed time (in seconds)" />
<field type="STRING" descr="Game Name" />
<field type="STRING" descr="Game Password" />
<field type="STRING" descr="Game Statstring" />
<!-- if any, can include html for formatting, but use [] instead of <> -->
[p]Returns a list of available games and their information. Varies depending on product.[/p]
[p]Note that fields from Address Family to sin_zero form a sockaddr_in structure.[/p]
[u]Valid status codes:[/u]
[dl][dd]0x00: OK
0x01: Game doesn't exist
0x02: Incorrect password
0x03: Game full
0x04: Game already started
0x06: Too many server requests[/dd][/dl]

This is the DTD both XML examples are validating against:

<!ELEMENT packet (format, remarks)>
<!ATTLIST packet ordinal CDATA #REQUIRED>
<!ATTLIST packet direction CDATA #REQUIRED>
<!ATTLIST packet clients CDATA #REQUIRED>
<!ATTLIST packet relatedurls CDATA #REQUIRED>
<!ELEMENT format (field*, repeat*)>
<!ATTLIST field default CDATA #IMPLIED>
<!ELEMENT repeat (field*)>
<!ATTLIST repeat amtdefined (true | false | TRUE | FALSE) #REQUIRED>
<!ELEMENT remarks (#PCDATA)>

I've been using http://validator.w3.org/check to validate my XML code against the DTD I coded, although I may modify it if you have better ideas on how the XML for the packets should be structured/laid out.

This thread is related to an old thread I posted over a year ago, which can be found here:


I usually just set the news page as the index for all of my sites. Today, it just hit me; what if the users prefer something different? So I was trying to think of what'd serve better as the main page other than news, when it occurred to me: why not ask the users?

So what would you prefer as the main page? Or is the current way it is right now (most recent 3 news posts displayed) the best solution?

I look forward to reading your input. :)
Battle.net Bot Development / BNETWiki?
March 25, 2008, 12:28 PM
Just noticed BNETWiki.org apparently no longer exists. The domain is valid, but the wiki per se is gone. In its place is a parked site apparently to collect cash. Perhaps the domain expired and the registrar is using the domain to collect money.

In any case, what's the status of BNETWiki? Is it still up, and if so, what's the current address? If it's gone, are there plans on bringing it back?
I was considering implementing support for using OpenID for logging in, and wanted to know your thoughts. Would you make use of it, rather than having to maintain a separate a separate account for BNETDocs?

If you would want to make use of OpenID, but already have a BNETDocs account, I can add an option that'll allow users to specify that their BNETDocs account is OpenID enabled, and what their OpenID address is, then from that point on, the user would be able to log in via OpenID. What do you think?

If you don't think OpenID is worth implementing, why not?

I look forward to be hearing your input.  :)
I'd like to set up XML formatting for the BNETDocs packet documentation. I feel this would establish a standard of formatting the documentation, and also open up mash-up possibilities for webmasters and bot developers alike. The editors of BNETDocs had already developed a XML structure for each packet on the forums of BNETDocs, but due to the server crash, that thread had been lost.

While I could ask the editors to re-develop the structure, I felt that it'd be better to involve the Battle.net Development community in this to ensure greater consensus.

Does anyone have ideas on what a good packet XML structure would look like?
Battle.net Bot Development / REQUESTED: Old hashes
November 11, 2007, 08:49 AM
If you have any hash, from the oldest to the newest for any Battle.net related Blizzard game, I'd appreciate the donation for BNETDocs.

For StarCraft, I already have:

1.08, 1.09, 1.09b, 1.10, 1.11, 1.11b, 1.12d, 1.13e, 1.13f 1.14, 1.15.1

And yes, even the current hash will be accepted.
I've been having problems getting UDP to work on my machine.

Basically, I added UDP support to my bot. But for some inexplicable reason I was not receiving any UDP packets, even after sending 0x08 or 0x09.

My machine is DMZ'ed, firewall and anti-virus is disabled. So those aren't the issues.

I sent a copy of my bot to l2k-Shadow, and without any modifications, the bot worked fine, INCLUDING UDP support. This came as a surprise to me.

I packet logged via WireShark. No UDP packets...

RealityRipple sent me the source to one of his bots, I added UDP support to it, tested it-- didn't work. Sent the bot back to RealityRipple INCLUDING UDP support. He tested it without any modifications. UDP worked fine.

Now, here's the interesting thing. I went in Starcraft, went on battle.net, and joined a game. Game started. Played. Lost. I won't get into details, but the point is, game was fine. I know for a fact games require UDP. So UDP seems to be working?

This is driving me insane.

So I can confirm it isn't my code. It's likely an issue on my machine or in my network. Or maybe an issue with the winsock driver on my machine? I'm fresh out of ideas.

l2k-Shadow, RealityRipple, and DevCode also were fresh out of ideas.

Any ideas you guys could suggest to pinpoint the problem?
I'm trying to code it so my bot is able to automatically update to the latest verbyte, even if BNLS doesn't have the latest verbyte (ATM, it does, but I'm speaking in the future scenarios). The method would preferably not involve brute forcing to get the verbyte.

From the two threads I've read, it seems the best way to go is to obtain it from Battle.snp:


Battle.net Bot Development / 0x09 SID_GETADVLISTEX
September 17, 2007, 11:54 AM
Joe[x86] brought up a good question that I'd like to be covered.

Joe[x86]: In 0x09 SID_GETADVLISTEX, is it possible for Conditions 1 and 2 to be a DWORD, and 3 and 4 to be a QWORD, hence 2 and 4 being null? Also, what is sent for the three string fields? Since list count is a DWORD, couldn't you specify to list 0xFFFFFFFF games?

You can read and respond to the discussion via this link.

Or respond in this thread. All the same, we'd like your input.
Battle.net Bot Development / BNETDocs Redux
August 22, 2007, 05:41 PM
What features did you wish BNETDocs had?
I have news for those who make use of the redirective domain of bnls.dementedminds.net.

For those who prefer a short and sweet/simple notice:

The service is now 100% automated, and no longer manually updated.

For those who like details:

I originally was updating the domain to redirect to the next available bnls system manually, as a result, if a server went down, there'd be a considerable delay before I found out about it being down, and updated it to redirect to another server. This was tedious, and also annoying for people who made use of the domain.

But now, that should be no longer an issue. I've coded a script that'll automate the entire process. When a server goes down, the dementedminds.net server will identify the loss and automatically seek out the next available bnls server. Once one is found, it updates the DNS.

If you notice that the bnls.dementedminds.net redirector service isn't working for you, try the following troubleshooting steps (applicable for windows, if anyone can port those steps to the mac/*nix distros, feel free:

1) Go into the command prompt, and type: ipconfig /flushdns

That should solve the problem, Windows tends to cache the DNS for servers recently accessed, so when the DNS is flushed, Windows will then query for the new DNS information.

2) If that still doesn't work, check the JBLS website for the status of the servers:

- http://www.jbls.org

3) If the JBLS website indicates that the following servers are down:

- valhallalegends.com
- bnls.valhallalegends.com
- jbls.org
- hdx.jbls.org

Then that pretty much means the redirector service ran out of alternate servers to redirect to. As soon as one of those alternate servers come back up, the redirector service will recognize it, and automatically redirect to that corresponding server.

4) If the JBLS website indicates that one or more of the previously mentioned servers are up, give the bnls.dementedminds.net redirector service some time -- the service does a query every half hour to check the status of the servers, and as soon as it realizes the current server it has been redirecting to is down, it'll automatically seek out an alternate server and divert the flow to that server.

5) If even after a half hour, bnls.dementedminds.net STILL isn't working (shouldn't ever happen, but you never know!), PM me and I'll check into it ASAP.

Hopefully the automated redirector service will help alleviate downtime of bots everywhere when a server goes down.


An user of bnls.dementedminds.net asked me about pings being redirected. Originally, pings were NOT redirected, only traffic for the BNLS ports were. But when he queried me about it, I thought it was a quite good idea, and have re-configured my server to from now on redirect all incoming pings to the server it is redirecting to. So in other words, all responses you receive from your pings to the bnls.dementedminds.net server are from the server it's redirecting to. Example:

C:\Documents and Settings\Owner>ping bnls.dementedminds.net

Pinging bnls.valhallalegends.com [] with 32 bytes of data:

Reply from bytes=32 time=106ms TTL=108
Reply from bytes=32 time=101ms TTL=108
Reply from bytes=32 time=97ms TTL=108
Reply from bytes=32 time=96ms TTL=108

Ping statistics for
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 96ms, Maximum = 106ms, Average = 100ms

P.S.S. Or you can look at my forum signature, which includes the server status information. :)

Enjoy.  :)
General Discussion / RepASM
July 16, 2007, 02:31 PM
Anyone got experience with installing RepASM on a Linux?
What's the best way to deal with 0x5E?

[10:17:35 AM] Received Packet: 0xA (SID_ENTERCHAT)
[10:17:35 AM] Received Packet: 0xF (SID_CHATEVENT)
[10:17:35 AM] Received Packet: 0xF (SID_CHATEVENT)
[10:17:37 AM] Received Packet: 0x5E (UNKNOWN BNET PACKET!)
[10:17:37 AM] Dumping packet...
0000: FF 5E 29 00 AF 6F C0 FC E5 B0 18 57 9D AA 4D 1C  ÿ^).¯oÀüå°W?ªM
0010: 07 21 78 F0 D7 F7 FC 4A 03 27 74 53 28 99 EF 80  !xð×÷üJ'tS(™ï€
0020: F2 21 6C 7E F4 66 62 4B 24                       ò!l~ôfbK$.......

Thanks in advance for any and all responses.
Think of bnetdocs.valhallalegends.com. What internet browser did you prefer to use while viewing that site? Do you ever access the bnetdocs via a wireless device such as a cell phone, PDA, sidekick, blackberry, etc? If you could access a mini-version of the bnetdocs via a mobile device, would you make use of it, or would this feature be entirely unneeded? Was there anything in the bnetdocs site that was missing that you wished they had? If so, what? Was there something the bnetdocs had that you felt they should have done without?

I'm just curious to hear your thoughts. :)
What bnet bots are available for linux-based platforms?
Could someone upload IX86ver7.mpq and give a link so I could download it? Thanks in advance.
Battle.net Bot Development / S->C 0x50 problems...
February 25, 2007, 02:45 PM
this is what i have so far:

Public Sub SID_AUTH_INFO(ByVal ProdID As Long) '0x50
    Dim lServerToken As Long, UDPValue As Long
    Select Case ProdID
        Case &H53455850
            AC "Client identified as SEXP"
            lServerToken = GetTickCount()
            UDPValue = CLng("&H" & Replace(StrToHex("bnet"), " ", vbNullString))
            With PacketBuf
                .InsertDWORD &H0
                .InsertDWORD lServerToken
                .InsertDWORD UDPValue
                .InsertBYTE &HF3
                .InsertBYTE &H8C
                .InsertBYTE &H60
                .InsertBYTE &H2
                .InsertBYTE &H0
                .InsertBYTE &H0
                .InsertBYTE &H81
                .InsertBYTE &H8F
                .InsertBYTE &H83
                .InsertBYTE &H91
                .InsertBYTE &HE7
                .InsertBYTE &HC3
                .InsertNTString "IX86ver7.mpq"
                .InsertNTString "A=290027319 B=709764025 C=42718536 4 A=A+S B=B^C C=C^A A=A^B"
                .SendBNETPacket Winsock1, &H50
            End With
        Case Else
            AC "Product ID: &H" & Hex$(ProdID)
            AC "Unknown client. Rejected connection."
            AC "Listening for incoming connections..."
            Exit Sub
    End Select
End Sub

But I don't like the way it is right now. For one, I think I'm screwing up the file time. For two, it makes my starcraft client crash. No idea why. It just does.

So, my question here is:

How exactly would I get the file time for IX86ver7.mpq, and how exactly would I send it to the client? I found a IX86ver7.mpq packet via searching the forums, and I pretty much did a cut/paste. Dirty, but whatever. Suggestions?
An alternative BNLS server has been established by Ringo. People can access BNLS at bnls.dementedminds.net. The port remains the same (9367). The address is permanent. The BNLS server works with lockdown, so you can use it with all game products that were previously supported by Skywing's BNLS. Ringo says that the BNLS server will stay up until Skywing's BNLS comes back online. Hopefully Ringo will reconsider and permanently host BNLS. We sure could use a BNLS server with excellent uptime. Enjoy.