|
|
 |
 |
 |
 |
|
 |
 |
|
 |
 |
|
 |
|
Support::Windows Servers Support forum for Windows EQEMu users. |
 |
|
 |

12-06-2013, 02:50 PM
|
Sarnak
|
|
Join Date: Sep 2013
Posts: 32
|
|
Configuration questions for potential new server (huge post!)
Greetings, all!
I've just finished setting up my server, and it works like a charm, I can log in, kill monsters, the works. Now comes the really hard part: setting the server up the way I want.
I intend to run a roleplay-required server, and I plan to implement several restrictions and changes to the current EQ system.
Note: the first part of this post is a wall of text outlining my long-term plans. If you don't want to read them, skip to the actual configuration questions below!
Level Restriction: 20
I feel that capping levels at 20 still provides a good incentive to go out and adventure, but prevents the severe gap in abilities between newer players and older ones. I don't want to encounter situations where my players simply cannot compete just because someone else has been here longer.
Adjusted spells, mobs, and quests
Obviously, because of the lower level cap, a lot of things need to be adjusted to bring them in tune with the lower level cap. Specifically, new spells need to be made (and existing ones modified) to take the lower levels into consideration. Since most damage/healing spells are already scaled by level, it's mostly the utility spells that might need some tweaking.
Adjusted gear
I'm heavily influenced by games like Dungeons and Dragons (the PnP game, not the online ones) for my itemization. Player-based economy will still be present, but with the anticipated smaller community, armor and weapons purchased from NPC merchants will be both more affordable and more feasible to use. Platemail will still be expensive for someone that's not wealthy, but it won't cost in excess of 5,000pp like it does on live servers.
Weapons will also be more balanced as well. All one-handed weapons of a certain type (steel, bronze, etc) will, for example, have roughly the same DPS, leaving the decision more to one of preference rather than stats.
Shields will play a bigger role as well, enough that even dual-wielding classes may prefer to use them. I will find some way to make the defensive benefit of carrying a shield good enough that swapping to two weapons will actually carry some drawbacks to weigh against the benefits. Possibly a big boost to block chance.
Significantly Slower Experience Rate
I don't want the focus on my server to be solely on grinding, and will actually be handing out XP for good roleplay. Because of this, the XP rates for killing monsters and performing quests will be dramatically reduced. One can still grind to 20, but doing so will be tedious. Of course, to offset that, there will be plenty of things you can participate in even at level 1, and you're going to reach level 20 a lot faster by providing and participating in good roleplaying story-lines than you ever would simply grinding on monsters.
Classic EQ Only!
The available zones will be limited solely to Classic EQ. Given the roleplay nature of the server, I highly doubt that we'll ever have a strong push to open other expansions, but we'll see.
Server Whitelisting
To ensure that we only get players truly interested in roleplaying, the entire server will not be open to any and all players. Assuming I can manage it, players will arrive at a predetermined zone and be unable to leave that zone unless they first fill out an application that demonstrates they're actually interested in roleplaying. Hopefully, this will help weed out troublemakers and trolls (the idiot internet kind, not the ones from Grobb).
Realistic NPCs with improved AI
Assuming it can be done, NPCs will fight like real players. Their damage will be based on their current weapon, and they'll hit like a player of that level, too. Hopefully, I can also get help implementing AI that makes casters root melee and back off, snare kite, and other tactics that a PC might use in a fight. How effective this will be is still up in the air, as I myself am not a programmer and am not sure how feasible it is.
Broadened Race/Class Combination
There's no legitimate reason why a wood elf couldn't become a cleric, or why a, erudite couldn't pick up a sword and become a warrior, or why a barbarian couldn't commit himself to The Tribunal and become a paladin of Justice. My server will include NPCs that are capable of performing class changes for certain races, provided said character is still only level 1. That is, unless it's possible to easily modify those options at the client level. While this won't be an ALL/ALL option, the increased class variety will make a little more sense.
Now, the configuration questions!
Which of the following can be done by modifying server/database settings, and which ones require changes to the source code? Note that while I am not a professional programmer, I do have some experience with writing code and modifying existing code provided it's well-commented (as all code should be).
Things I already know can be done through the database:- Changing the XP rates.
- Adjusting loot, items, loot tables, etc.
- Changing player spawn locations.
Things I'm pretty sure can be done without modifying source code:- Setting the level limit to 20.
- Removing PoK books and restricting players to classic zones only.
Things I'm not sure how to do:- Changing what level players get certain skills at (e.g. dual wield)
- Changing the stats for spells (spells_us.txt?)
- Disabling the /consider command. Obviously, players can find ways around that with MQ2 or UI changes, though.
- Setting up an NPC that changes player classes upon request.
Things I'm almost positive require source code changes:- Changing how weapon damage/accuracy is calculated.
- Removing the level-based modifier on combat/resists.
- Changing how resistances are calculated.
- Removing PvP damage reduction.
- Providing racial benefits to some races (innate damage reduction, innate mana regen, racial run speed, etc).
- Blocking /group chat, forcing players to always communicate via /say or /shout, making communications more realistic.
- Limiting /shout maximum range. If possible, making it function like /yell would be nice too (e.g. Lucia shouts, 'Help! Someone help me!' from behind and to your left. )
Things I'm not even sure are possible:- Allowing players to select non-standard race/class combinations during character creation.
Basically, anyone that can provide any feedback, advice, or answer any of my questions, please feel free. I'm eager to get started, but I want to know what my possibilities and limitations are before I start making too many plans.
|
 |
|
 |
 |
|
 |

12-06-2013, 03:25 PM
|
 |
Dragon
|
|
Join Date: Nov 2008
Location: GA
Posts: 904
|
|
Quote:
Originally Posted by Lucia Moore
Things I'm pretty sure can be done without modifying source code:- Setting the level limit to 20. --Yup
- Removing PoK books and restricting players to classic zones only. --Yup
Things I'm not sure how to do:- Changing what level players get certain skills at (e.g. dual wield) --Database and Local files: Skill_caps table, Class_skills tables, and SkillCaps.txt. If you plan to do alter AA levels that's in the database too
- Changing the stats for spells (spells_us.txt?) -- I believe all spell data was moved into the database last year.
- Disabling the /consider command. Obviously, players can find ways around that with MQ2 or UI changes, though. -- Not sure, never even thought about it.
- Setting up an NPC that changes player classes upon request. -- Yup
Things I'm almost positive require source code changes:- Changing how weapon damage/accuracy is calculated. -- Source
- Removing the level-based modifier on combat/resists. -- Some source, some database
- Changing how resistances are calculated. -- Database
- Removing PvP damage reduction. -- Source
- Providing racial benefits to some races (innate damage reduction, innate mana regen, racial run speed, etc). -- Source, but there is probably a way to do it through script/database (pretty sure...)
- Blocking /group chat, forcing players to always communicate via /say or /shout, making communications more realistic. -- Unsure. I know you can turn off global OOC in the database.
- Limiting /shout maximum range. If possible, making it function like /yell would be nice too. -- Unsure
Things I'm not even sure are possible:- Allowing players to select non-standard race/class combinations during character creation. -- Database
Basically, anyone that can provide any feedback, advice, or answer any of my questions, please feel free. I'm eager to get started, but I want to know what my possibilities and limitations are before I start making too many plans.
|
See red text for answers 
|
 |
|
 |

12-06-2013, 03:45 PM
|
Demi-God
|
|
Join Date: Apr 2008
Location: MA
Posts: 1,164
|
|
Disabling consider you can just make Client::Handle_OP_Consider in zone/client_packet.cpp do nothing. And I don't think there is any way around this with MQ2, the client knows nothing of the mobs faction until the server responds to the OP_Consider packet. Disabling groups should be similar, I'm just not sure where in the source group chat is :P Same with the shout change.
KLS recently pushed changes that adds a base data table which also comes with a program to easily generate the SkillCaps.txt and other files after you change them in the database to distribute to players.
EDIT: In zone/client.cpp Client::ChannelMessageReceived is the function that would need to be edited for the chat changes I think :P
|
 |
|
 |

12-06-2013, 04:28 PM
|
Hill Giant
|
|
Join Date: Sep 2008
Location: So. California
Posts: 219
|
|
Here is how I disable "tell, ooc, and auction", same priciple can be applied for group...
Code:
diff --git a/zone/client.cpp b/zone/client.cpp
index 533f8b5..750ff73 100644
--- a/zone/client.cpp
+++ b/zone/client.cpp
@@ -872,6 +872,9 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break;
}
case 4: { // Auction
+ Message(13, "Auction is disabled."); //rencro
+ return;
+
if(RuleB(Chat, ServerWideAuction))
{
if(!global_channel_timer.Check())
@@ -911,6 +914,9 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break;
}
case 5: { // OOC
+ Message(13, "OOC is disabled."); //rencro
+ return;
+
if(RuleB(Chat, ServerWideOOC))
{
if(!global_channel_timer.Check())
@@ -966,6 +972,9 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break;
}
case 7: { // Tell
+ Message(13, "Tell system is disabled."); //rencro
+ return;
+
if(!global_channel_timer.Check())
{
if(strlen(targetname) == 0)
A lazy way of doing it but gets the job done..
|
 |
|
 |
 |
|
 |

12-06-2013, 04:35 PM
|
Sarnak
|
|
Join Date: Sep 2013
Posts: 32
|
|
Quote:
Originally Posted by rencro
Here is how I disable "tell, ooc, and auction", same priciple can be applied for group...
Code:
diff --git a/zone/client.cpp b/zone/client.cpp
index 533f8b5..750ff73 100644
--- a/zone/client.cpp
+++ b/zone/client.cpp
@@ -872,6 +872,9 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break;
}
case 4: { // Auction
+ Message(13, "Auction is disabled."); //rencro
+ return;
+
if(RuleB(Chat, ServerWideAuction))
{
if(!global_channel_timer.Check())
@@ -911,6 +914,9 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break;
}
case 5: { // OOC
+ Message(13, "OOC is disabled."); //rencro
+ return;
+
if(RuleB(Chat, ServerWideOOC))
{
if(!global_channel_timer.Check())
@@ -966,6 +972,9 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break;
}
case 7: { // Tell
+ Message(13, "Tell system is disabled."); //rencro
+ return;
+
if(!global_channel_timer.Check())
{
if(strlen(targetname) == 0)
A lazy way of doing it but gets the job done..
|
Is that an entire .cpp file that I can just copy/paste into my source, or do I have to plug that in somewhere?
As I said, I know some things about programming, but I don't wanna FUBAR my code unless I can figure out where I FUBAR'd it at.
|
 |
|
 |
 |
|
 |

12-06-2013, 05:07 PM
|
Hill Giant
|
|
Join Date: Sep 2008
Location: So. California
Posts: 219
|
|
Quote:
Originally Posted by Lucia Moore
Is that an entire .cpp file that I can just copy/paste into my source, or do I have to plug that in somewhere?
As I said, I know some things about programming, but I don't wanna FUBAR my code unless I can figure out where I FUBAR'd it at.
|
Thats a diff with my changes that would modify your code, but you want it for groups so you would be better going into zone/client.cpp and making the edits there yourself...
A word of warning..Once you start modifying things, it will be a chore to keep up with the tip release, so you may need to draw a line in the sand and just work from your source exclusively and perhaps cherry pick any new releases to the code manually, if at all....
Any ways:
Code:
About line 743 of zone/client.cpp
void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_skill, const char* orig_message, const char* targetname) {
.
.
.
case 2: { // GroupChat
Raid* raid = entity_list.GetRaidByClient(this);
if(raid) {
raid->RaidGroupSay((const char*) message, this);
break;
}
Group* group = GetGroup();
if(group != nullptr) {
group->GroupMessage(this,language,lang_skill,(const char*) message);
}
break;
}
Not sure about the raid but could try this:
Code:
void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_skill, const char* orig_message, const char* targetname) {
.
.
.
case 2: { // GroupChat
Message(13, "Group chat disabled."); //remove group chat
return;
Raid* raid = entity_list.GetRaidByClient(this);
if(raid) {
raid->RaidGroupSay((const char*) message, this);
break;
}
Group* group = GetGroup();
if(group != nullptr) {
group->GroupMessage(this,language,lang_skill,(const char*) message);
}
break;
}
Then recompile and test. If you dont like the "Group chat is disabled message, then remove it -)
|
 |
|
 |
 |
|
 |

12-06-2013, 04:33 PM
|
Sarnak
|
|
Join Date: Sep 2013
Posts: 32
|
|
Responding to everyone here. (Thanks so much for the replies, by the way!)
Quote:
I believe all spell data was moved into the database last year.
|
Does that mean that I don't need to distribute any spell data files? Meaning, if I change a spell in my database, will it appear with the new stats, name, etc. on other peoples' clients when they play there, or do they still have to download something?
As for the things requiring source changes:
Some of those are pretty simple, right? Like, in the source for PvP damage mod, it must say somewhere something like "totalDamage * 0.66" or something similar, I assume, or maybe it's a constant defined somewhere like "PVP_DMG_MODIFIER" or something?
Quote:
Originally Posted by demonstar55
Disabling consider you can just make Client::Handle_OP_Consider in zone/client_packet.cpp do nothing. And I don't think there is any way around this with MQ2, the client knows nothing of the mobs faction until the server responds to the OP_Consider packet. Disabling groups should be similar, I'm just not sure where in the source group chat is :P Same with the shout change.
KLS recently pushed changes that adds a base data table which also comes with a program to easily generate the SkillCaps.txt and other files after you change them in the database to distribute to players.
EDIT: In zone/client.cpp Client::ChannelMessageReceived is the function that would need to be edited for the chat changes I think :P
|
My desire to remove /consider wasn't due to faction concerns, it's so that players cannot determine one anothers' levels. However, since level information still gets sent to clients, MQ2 can probably pull it using the ${Target.Level} variable. The Firiona Vie server on live had a modified /consider where people were either green (more than 5 below), white (within 5), or red (more than five over), and you could still pull their exact level using MQ2.
It's a minor concern, anyway. I intend to remove the effects of level on combat and spell resists, and with a cap of 20, level won't be as important as attributes, anyway. I hope to make it so that ATK, AC, and skills are the only factor in determining combat effectiveness.
|
 |
|
 |
 |
|
 |

12-06-2013, 04:47 PM
|
Hill Giant
|
|
Join Date: Sep 2008
Location: So. California
Posts: 219
|
|
Quote:
Realistic NPCs with improved AI
Assuming it can be done, NPCs will fight like real players. Their damage will be based on their current weapon, and they'll hit like a player of that level, too. Hopefully, I can also get help implementing AI that makes casters root melee and back off, snare kite, and other tactics that a PC might use in a fight. How effective this will be is still up in the air, as I myself am not a programmer and am not sure how feasible it is.
|
I use a combination of Xachary's is evil code, davood's shroud races, and mq2 to make "bot" characters with access level 100 that will pvp the players when they enter a certain zone, which is monitored via WorldWide emotes. This solves your "hit like a player" because they are players. I have one windows box setup with 6 wineq sessions with "stick" graphics and a minimalist eqclient.ini load on them, each of them a different race that is "evil" and can pvp any player that is not "evil", of course they "cheat because they have access to gm commands but all "npcs" cheat.... Still working on the quest files for this to make a chest spawn on the death of the "bot"..Its a big WIP....Only issue is when the server goes down I have to log all the "bots" back in. Eventually I want to make them act like bosses and have assistance from zone npcs against the players.../derail off
|
 |
|
 |
 |
|
 |

12-06-2013, 05:22 PM
|
Sarnak
|
|
Join Date: Sep 2013
Posts: 32
|
|
Quote:
Originally Posted by rencro
I use a combination of Xachary's is evil code, davood's shroud races, and mq2 to make "bot" characters with access level 100 that will pvp the players when they enter a certain zone, which is monitored via WorldWide emotes. This solves your "hit like a player" because they are players. I have one windows box setup with 6 wineq sessions with "stick" graphics and a minimalist eqclient.ini load on them, each of them a different race that is "evil" and can pvp any player that is not "evil", of course they "cheat because they have access to gm commands but all "npcs" cheat.... Still working on the quest files for this to make a chest spawn on the death of the "bot"..Its a big WIP....Only issue is when the server goes down I have to log all the "bots" back in. Eventually I want to make them act like bosses and have assistance from zone npcs against the players.../derail off
|
That's an interesting idea, but far too excessive for me. Really, all I want is NPCs that behave a little more intelligently than normal. Chanters that mez extra targets, casters rooting attackers and then backing off, that sort of stuff.
The hitting part I can probably work around simply by setting their minimum/maximum damage to be roughly equal to whatever weapon I make them spawn with.
|
 |
|
 |

12-06-2013, 05:55 PM
|
Demi-God
|
|
Join Date: Aug 2010
Posts: 1,742
|
|
If you change spells you need to export the spell file from the database and distribute it to your players.
|

12-06-2013, 06:00 PM
|
Demi-God
|
|
Join Date: Apr 2008
Location: MA
Posts: 1,164
|
|
If you're building with client files on (default is on) it could create import_client_files and export_client_files. With these tools you can now just edit the DB entries for spells, skill caps, and base data then run export_client_files and it should generate the files for you to distribute to users.
EDIT: make sure the export directory exists.
|

12-07-2013, 03:49 AM
|
Sarnak
|
|
Join Date: Sep 2013
Posts: 32
|
|
Quote:
Originally Posted by demonstar55
If you're building with client files on (default is on) it could create import_client_files and export_client_files. With these tools you can now just edit the DB entries for spells, skill caps, and base data then run export_client_files and it should generate the files for you to distribute to users.
EDIT: make sure the export directory exists.
|
How do I run that, exactly? Where do I input the "export_client_files" command?
|

12-08-2013, 12:46 AM
|
 |
Dragon
|
|
Join Date: Nov 2008
Location: GA
Posts: 904
|
|
Quote:
Originally Posted by Lucia Moore
How do I run that, exactly? Where do I input the "export_client_files" command?
|
Per KLS:
Quote:
Originally Posted by KLS
If you're using current upstream source (which it sounds like you are).
1) Put export_client_files.exe into your server directory. eg: C:/eqemu/export_client_files.exe
2) Create a directory "export" in your server directory. eg: C:/eqemu/export
3) Run export_client_files.exe.
4) All the files that export_client_files.exe works with will now be in the directory created.
Currently we export: spells, skills and base data. We don't yet work with race but if someone works it out I'm not against more of the files being officially exportable.
|
I just tried it and it worked.
|
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:48 AM.
|
|
 |
|
 |
|
|
|
 |
|
 |
|
 |