Issue information

Issue ID
#2069
Status
Fixed
Severity
None
Started
Hercules Elf Bot
Aug 15, 2008 20:58
Last Post
Hercules Elf Bot
Apr 19, 2012 15:36
Confirmation
N/A

Hercules Elf Bot - Aug 15, 2008 20:58

Originally posted by [b]theultramage[/b]
http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=2069

When trying to go map->char, the mapserver first sends a request (0x2b02: req char selection). At this point the charserver sets up a temporary auth node with partial data (email, sex, expiration time and gmlevel set to zero). The client then goes to request auth again (0x65: req to connect) where the sex gets filled in and char_auth_ok() is called.

Then there is a check,
CODE
if (max_connect_user && count_users() >= max_connect_user && sd->gmlevel < gm_allow_level)
which will never work since sd->gmlevel is not known at this point (char_auth_ok() normally gets called after receiving all info from login server; but in this case the code is re-used).

Only after this point is there a request for these values:
CODE
    if (login_fd > 0) {
        // request to login-server to obtain e-mail/time limit
        //FIXME: isn't this part of the auth_ok packet? [ultramage]
        WFIFOHEAD(login_fd,6);
        WFIFOW(login_fd,0) = 0x2716;
        WFIFOL(login_fd,2) = sd->account_id;
        WFIFOSET(login_fd,6);
    }

The bug manifests itself when you dual-login your gm account. The system then reaches a state where your gm level will remain set to '0'. This does not occur in normal cases because the separate information request has enough time to execute and refresh the data structures.

So the issue is that code is incorrectly being reused. The charserver shouldn't need to request player information from the login server over and over again.

Hercules Elf Bot - Jan 14, 2012 8:58

Originally posted by [b]Ind[/b]
was fixed in a previous ea revision