|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
04-14-2009, 09:53 AM
|
Fire Beetle
|
|
Join Date: Apr 2009
Location: Zimbabwe
Posts: 1
|
|
Connection issues with multiple servers
I am relatively new to the EQEmu thing although I had played EQ for a good 4-5 years so I am very familiar with the original game.
I started playing EQEmu two days ago and I've had a lot of fun reacquainting myself with the environment and overall feel of the game. I played all last night with no issues, but when I try to login this morning, I just can't seem to pull it off.
I created a character on [PEQ] The Grand Creation (Preferred Server) two days previous and tried to play my Shaman just a few minutes ago. I get past the login screen, the server select screen, and then when I get to the character select screen and I select "Enter World", it dumps me to a black screen that says "YOU HAVE BEEN DISCONNECTED"
So I think, fair enough, the server is probably having issues. That doesn't seem to be the case. I created a new character on VZ/TZ PVP server and I have the same issues. I decided that maybe it wasn't a server issue, but a client issue, and I restarted the EQgame.exe (of course, with the appropriate shortcut parameters). I tried to login to "The Grand Creation" with my Shaman, and I was able to enter the Gloomingdeep Mines with no issues. I decided to exit the tutorial and return to Halas and when I did, I was returned to the same disconnect screen.
It seems now that I can not get past this disconnect screen no matter what I try to do. Are there any suggestions out there or is there a huge gaping hole in my troubleshooting logic? I don't want to reinstall the game if I don't have to so I'd like to exhaust all other troubleshooting options before hand.
Thanks in advance!
-Aegide Drekkenzin
|
|
|
|
04-16-2009, 06:18 AM
|
|
Demi-God
|
|
Join Date: May 2007
Location: b
Posts: 1,447
|
|
Bump. This seriously needs a solution, as it's an issue in current code related to the AccountSessionLimit implementation.
Basically, whenever you go LD, it won't let you in till your character is removed from the CLE list in world. This is a serious issue that deters people from playing, and if removed, opens up a can of worms related to logging in the same account twice.
I will make a post on the developer section if this gets ignored... :/
|
|
|
|
04-16-2009, 02:48 PM
|
|
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
Sounds like he was having issues with the session timeout limit from the character select screen and also maybe issues with logging in 2 characters on the same account (not sure I read that correctly).
Basically, if you wait at the character select for more than about 1 minute, you will get disconnected as soon as you try to enter world. This 1 minute also includes character creation, so you have to be quick about creating a new character.
I don't know why this limit is set so tightly, because it is pretty annoying. I don't even think it actually disconnects you from the server until you try to do something and get the disconnect message, so there isn't really a reason for it to time out like that. It isn't helping the server in any way at all as far as I can tell.
As for the account session limiting, I fully agree that it needs work. I think it is useful to stop certain hacks and other issues, but I don't even run it on my server because of some of the problems it causes with connections. Since I made it, I have been saying that it needs to be changed to kick the character in game and always let you log in, instead of blocking the new connection while it waits for the one that is logged in to time out. I just don't personally know how to make it do that atm. I basically just used TheLieka's code for IP Limiting and set it to do the same thing for accounts. It does what it is meant to do, but you are right that it needs to be looked at. I just don't personally know how to make it do what it needs to be doing.
|
|
|
|
|
|
|
04-16-2009, 03:12 PM
|
Developer
|
|
Join Date: Feb 2004
Location: UK
Posts: 1,540
|
|
Try this:
Code:
Index: world/clientlist.cpp
===================================================================
--- world/clientlist.cpp (revision 432)
+++ world/clientlist.cpp (working copy)
@@ -100,17 +100,32 @@
//Account Limiting Code to limit the number of characters allowed on from a single account at once.
void ClientList::GetCLEAccount(int32 iAccID) {
ClientListEntry* count_Chars_On = 0;
- LinkedListIterator<ClientListEntry*> iterator(clientlist);
+ LinkedListIterator<ClientListEntry*> iterator(clientlist, BACKWARD);
int Chars_On = 0;
iterator.Reset();
while(iterator.MoreElements()) {
count_Chars_On = iterator.GetData();
- if ((count_Chars_On->AccountID() == iAccID) && ((count_Chars_On->Admin() <= (RuleI(World, ExemptAccountLimitStatus))) || (RuleI(World, ExemptAccountLimitStatus) < 0))) {
+ if ((count_Chars_On->LSAccountID() == iAccID) && ((count_Chars_On->Admin() <= (RuleI(World, ExemptAccountLimitStatus))) || (RuleI(World, ExemptAccountLimitStatus) < 0))) {
Chars_On++;
- if (Chars_On > (RuleI(World, AccountSessionLimit))){
+ _log(NET__ERROR, "LSAccount: %i has %i connections.", iAccID, Chars_On);
+ if (Chars_On >= (RuleI(World, AccountSessionLimit))){
+ // If we have a char name, they are in a zone, so send a kick to the zone server
+ if(strlen(count_Chars_On->name())) {
+ _log(NET__ERROR, "Sending kick to %s", count_Chars_On->name());
+
+ ServerPacket* pack = new ServerPacket(ServerOP_KickPlayer, sizeof(ServerKickPlayer_Struct));
+ ServerKickPlayer_Struct* skp = (ServerKickPlayer_Struct*) pack->pBuffer;
+ strcpy(skp->adminname, "SessionLimit");
+ strcpy(skp->name, count_Chars_On->name());
+ skp->adminrank = 255;
+ zoneserver_list.SendPacket(pack);
+ safe_delete(pack);
+ }
+ _log(NET__ERROR, "Putting CLE offline");
count_Chars_On->SetOnline(CLE_Status_Offline);
iterator.RemoveCurrent();
+ continue;
}
}
iterator.Advance();
Index: world/LoginServer.cpp
===================================================================
--- world/LoginServer.cpp (revision 432)
+++ world/LoginServer.cpp (working copy)
@@ -151,6 +151,11 @@
}
case ServerOP_LSClientAuth: {
ServerLSClientAuth* slsca = (ServerLSClientAuth*) pack->pBuffer;
+
+ if (RuleI(World, AccountSessionLimit) >= 0) {
+ client_list.GetCLEAccount(slsca->lsaccount_id); //Check current CLE Accounts against incoming connection
+ }
+
client_list.CLEAdd(slsca->lsaccount_id, slsca->name, slsca->key, slsca->worldadmin, slsca->ip, slsca->local);
break;
}
Index: world/client.cpp
===================================================================
--- world/client.cpp (revision 432)
+++ world/client.cpp (working copy)
@@ -490,10 +490,6 @@
break;
}
- if (RuleI(World, AccountSessionLimit) >= 0) {
- client_list.GetCLEAccount(this->GetAccountID()); //Check current CLE Accounts against incoming connection
- }
-
if (RuleI(World, MaxClientsPerIP) >= 0) {
client_list.GetCLEIP(this->GetIP()); //Lieka Edit Begin: Check current CLE Entry IPs against incoming connection
}
In my limited testing on my private server, this seems to have the desired effect of kicking the existing connection and letting the new one in.
I moved the check, so it will kick the existing connection before the new one even gets to Character Select.
Edit: Code updated to remove memory leak.
Last edited by Derision; 04-17-2009 at 12:22 AM..
Reason: Code updated to remove memory leak.
|
|
|
|
04-16-2009, 07:01 PM
|
|
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
I will try to get that running on SH tonight for testing. If players aren't reporting any issues with it, I will let you know, so you can commit it if you like. I am sure that any server using account session limiting would much prefer to use that way over the existing one! Thanks again, Derision!
|
04-17-2009, 06:58 AM
|
|
Developer
|
|
Join Date: Aug 2006
Location: USA
Posts: 5,946
|
|
I got Derision's code running on SH right now and it seems to work fine so far. I will leave it running and see if I get any reports of issues with it. I bet that PEQ and other servers using the old Session Limiting would love the new code for handling it. I didn't even run the old code because of the issues with it, but with this new code, I will definitely keep it enabled
Also, I moved this thread to Code Submissions, since it contains a nice bit of code
Last edited by trevius; 04-17-2009 at 03:02 PM..
|
04-17-2009, 06:02 AM
|
|
Demi-God
|
|
Join Date: May 2007
Location: b
Posts: 1,447
|
|
Quote:
Originally Posted by Derision
Try this:
In my limited testing on my private server, this seems to have the desired effect of kicking the existing connection and letting the new one in.
I moved the check, so it will kick the existing connection before the new one even gets to Character Select.
Edit: Code updated to remove memory leak.
|
Thank you! This is exactly what some of us need. I'm sure it will take a lot of stress off of both server admins and players.
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 11:38 AM.
|
|
|
|
|
|
|
|
|
|
|
|
|