Go Back   EQEmulator Home > EQEmulator Forums > Support > Support::Linux Servers

Support::Linux Servers Support forum for Linux EQEMu users.

Reply
 
Thread Tools Display Modes
  #1  
Old 09-21-2008, 11:46 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Ya, I think your issue is something completely different than my issue.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #2  
Old 09-22-2008, 06:04 AM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Well, I tested every level 70+ disc that I recently added to my server and none of them caused the crash for me. So, I am guessing it is something else. I am still leaning towards it being the source code or one of the custom changes I added in recently since I do run quite a few of them.

I will continue testing and see if I can come up with anything. So far, I tried reverting back to 1128 code version, but I also added in most of the features that have been added since then to it as well. Maybe it is one of those features that is causing the problem. The list of most of the added features I am currently using is:

Enraged, Flurry and Rampage Spamming Fix
http://www.eqemulator.net/forums/showthread.php?t=26258

Technique of Master Wu AA (Fix)
http://www.eqemulator.net/forums/showthread.php?t=26160

quest::traindiscs() and new quest::scribespells()
http://www.eqemulator.net/forums/showthread.php?t=26083

IP Limiting Additional Feature and Correction
http://www.eqemulator.net/forums/showthread.php?t=26122

#ItemLink <Item ID Number> (quest::itemlink())
http://www.eqemulator.net/forums/showthread.php?t=26018

Proc spells don't work after zoning (Proc Buff Fix)
http://www.eqemulator.net/forums/showthread.php?t=25991

New Quest Command quest::clearspawntimers()
http://www.eqemulator.net/forums/showthread.php?t=26261

Damage Bonus Functions (2H Bonus Fix)
http://www.eqemulator.net/forums/showthread.php?t=26262

Resurrection Reworked (with Confirmation box)
http://www.eqemulator.net/forums/showthread.php?t=26049

Buffs Being Blocked That Shouldn't Be (CHA Stacking Fix)
http://www.eqemulator.net/forums/showthread.php?t=25570

Spell Blocking (now with Intra-Zone restrictions!)
http://www.eqemulator.net/forums/showthread.php?t=26051

Spell And Skill Rule for Above MaxLevel Players
http://www.eqemulator.net/forums/showthread.php?t=25937
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #3  
Old 09-22-2008, 07:32 AM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

Quote:
Originally Posted by trevius View Post

IP Limiting Additional Feature and Correction
http://www.eqemulator.net/forums/showthread.php?t=26122
I've just been looking over the changes to clientlist.cpp in that thread and I think the logic is flawed if that is how you have it coded:

Code:
                if (IPInstances > (RuleI(World, MaxClientsPerIP))){
                        countCLEIPs->SetOnline(CLE_Status_Offline);
                        iterator.RemoveCurrent();
                }
        }
        countCLEIPs->SetOnline(CLE_Status_Offline);
        iterator.RemoveCurrent();
If the code reaches the most deepy nested iterator.RemoveCurrent(), then not only will it it remove the ClientList entry of the connection exceeding the IP limit, but the iterator will be updated to point to the next entry in the ClientList (which probably belongs to someone else), and the flow of execution will then reach the second iterator.RemoveCurrent() and remove that one as well.

My head's hurting from looking at it, so maybe I am misunderstanding the intention of the code.
Reply With Quote
  #4  
Old 09-22-2008, 06:29 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

Ya, I do kinda suspect that code could be the cause of the issue. It does actually seem to work the way I want it to from the testing I have done, but I haven't really checked to see what happens if I try to log in more characters than that.

Basically, I want my normal status 0 accounts to be able to log in 3 characters max at once. I then want my status 2 accounts to be able to login a max of 4 characters (1 more character) as a bonus for purchasing my contributor package. Then, I want anything over status 20 to be exempt from the IP limiting. As it is now, the code I have does seem to work to do exactly what I want, but the flaw you mention probably is a real problem. Maybe it is unable to select another client once the first one is removed, so it causes a world crash.

I would definitely be open to better ways of doing this! I know it hurts my head to think about the code for it, but maybe there is a simpler way of getting it done. As suggested in that thread, maybe just having it so that you can set the max number for all clients below X status. Then, for every point higher than that set status it would allow them to have +1 accounts logged in.

Ultimately, I think there needs to be code added (preferably with a rule option) to limit people to only being able to play 1 character per account. Then have the IP Limiting checked after the 1 character per account check happens. So, if someone already has a character logged in that might be ghosted, it will kick them out of the world instead of completely blocking them with IP limiting.

I will keep looking at this code and see if I can make it work better. However, professional help would be appreciated

I am going to try removing this temporarily from my server to see if that resolves my World Disconnect issue. It seems to have started around the same time I added this code in, but I also added alot of other stuff in at that same time, so it is hard to tell. I think this is a likely suspect if no one else is seeing the same exact problem that I currently am.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!
Reply With Quote
  #5  
Old 09-22-2008, 07:05 PM
cavedude's Avatar
cavedude
The PEQ Dude
 
Join Date: Apr 2003
Location: -
Posts: 1,988
Default

Do you have gdb installed? You can use that to parse the core dumps to tell you exactly where in the code the crash occurred.
Reply With Quote
  #6  
Old 09-22-2008, 07:55 PM
trevius's Avatar
trevius
Developer
 
Join Date: Aug 2006
Location: USA
Posts: 5,946
Default

I just had someone test this on my server. They were able to log in 4 accounts just fine, but when they tried to enter world on the 5th account, it caused the World Disconnect! So, this code is obviously the problem.

Now that I am looking at it again, I see that it is really done pretty badly to begin with lol. The only reason I even stickied the post was because it does include a valid fix for the current IP Limiting code, which is just changing a <= into a < check instead. That minor fix wasn't really breaking anything, but it was definitely making the rule settings misleading.

The custom code I added after that is just custom stuff I am trying to get working properly on my server. I thought it was working right until now and after further testing. I don't think it was actually working quite as I thought to begin with...

This is what I think the IP Limiting code should be doing to work how I would like to see it:

***Optional Additional Feature***
Check if a character is already logged in on this account
If so, then kick the logged in character
If no character is already logged in on this account, then continue
***Optional Additional Feature***


1. Check if there are more connections than the IP limit (MaxClientsPerIP) setting
If not, then allow them to log in.
If so, then continue

2. Check if the Account Status is >= the Additional IP Limit (AddMaxClientsStatus) Setting
If not, then IP Limit them to the IP Limit (MaxClientsPerIP) setting
If so, then continue

3. Check if there are more connections than the Additional IP Limit (AddMaxClientsPerIP) setting
If not, then allow them to log in.
If so, then continue

4. Check if the Account Status is >= the Exempt (ExemptMaxClientsStatus) setting
If not, then IP Limit them to the Additional IP Limit (AddMaxClientsPerIP) setting
If so, then allow them to log in.


Or maybe another way to do it would be:

Check Account Status
- If Status >= Exempt (ExemptMaxClientsStatus), then don't IP Limit
- If Status >= Additional IP Limit (AddMaxClientsStatus) && <= Exempt (ExemptMaxClientsStatus), then IP Limit to the Additional IP Limit (AddMaxClientsPerIP) setting
- If Status < Additional IP Limit (AddMaxClientsStatus), then IP Limit to standard IP Limit (MaxClientsPerIP) setting

I will see if I can figure out the flow of how the code should be to make one of these ways work. Really, I wouldn't mind getting another option in instead of just having a single Additional max clients and status setting. I would like for it to have a setting that just adds 1 more client for every status point over the status setting for these additional account connections.

(Account Status - AddMaxClientStatus + 1) = Total Additional Accounts Allowed Per IP. Of course you would have to check to make sure this is >= 0 otherwise any account below (AddMaxClientStatus - 1) will go into the negative. I will post the code if I figure anything out for it.
__________________
Trevazar/Trevius Owner of: Storm Haven
Everquest Emulator FAQ (Frequently Asked Questions) - Read It!

Last edited by trevius; 09-23-2008 at 03:57 AM..
Reply With Quote
  #7  
Old 09-22-2008, 09:00 PM
Rocker8956
Hill Giant
 
Join Date: Sep 2007
Posts: 117
Default

Quote:
Originally Posted by trevius View Post

***Optional Additional Feature***
Check if a character is already logged in on this account
If so, then kick the logged in character
If no character is already logged in on this account, then continue
***Optional Additional Feature***
Sorry not trying to derail the thread but
There may be a way to kick the last logged on character for that account without caring if it is logged in.
The account table keeps the name of the last character logged into with that account.

If I get some free time I will see if trying to kick a character that is not logged in causes any crashes/errors.
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 11:17 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3