CEP & EE Changes: Lunacy?
Grizzled_Dwarflord
Member Posts: 168
See this thread on Brownies and Wmics
Unless I'm missing the big picture, any PW module that uses the CEP has the floodgates open for extra races outlined in their racialtypes 2das, yes? You can close it on the server end, but you're not really closing it because it's open on the client end, and all haks are pre-loaded at character creation. Am I overlooking the obvious? I must be or there would be more of an outcry than this. If this were true, then this would require an extra re-distrubution of every PW's custom hak.
So, what are CEP PW admins to do?
Unless I'm missing the big picture, any PW module that uses the CEP has the floodgates open for extra races outlined in their racialtypes 2das, yes? You can close it on the server end, but you're not really closing it because it's open on the client end, and all haks are pre-loaded at character creation. Am I overlooking the obvious? I must be or there would be more of an outcry than this. If this were true, then this would require an extra re-distrubution of every PW's custom hak.
So, what are CEP PW admins to do?
0
Comments
Another option is to check the racial type for wolfhead and browniehead characters and boot them onenter of your pw.
This was posted in another thread by Zeroark and gives you an idea of how it would be done.
int RACE_FEAT_WEMIC = 51;
int RACIAL_TYPE_BROWNIE = 53;
if (GetRacialType(oPC) == RACIAL_TYPE_BROWNIE)
{ // AUTO BOOT PLAYER FROM JOINING SERVER
}
if (GetRacialType(oPC) == RACIAL_TYPE_WEMIC)
{ // AUTO BOOT PLAYER FROM JOINING SERVER
}
However, NWN server should disallow joining players with race that is not player race by eyes of the server. IE. if you edit racialtypes.2da on the server side and set both races not to be player races anymore.
If you modify racial_types.2da on your end properly (ie. when self-testing with the modified haks, you will be unable to select the race when joining your server) and the server still allows player to enter, there are two possibilities:
1) your server doesn't use ELC - in such case you need to use script which was already suggested
2) there is a bug in NWN:EE and it doesn't check whether race selected by players is player-race on server and this should be reported.
In either case, question is why CEP allowed Wemic and Brownie as player races when they were never selectable by player due to missing GUI. You can't really blame BeamDog for this.
Anyway, fact is, that all servers with CEP had their "gates" opened all this time. It was possible to enter with Brownie or Wemic race from the day 1. However, this was only possible by using exploits with character creation or lately my nwncx_patch plugin which added the same feature as NWN:EE and thus only few PW admins ever encountered it.
So, should I assume then that a player can edit their racialtypes2da on their end and open any race listed there, and also choose whatever stat bonus they choose to give that race? For instance, they can open up Ooze as a race, and give oozes +20 to all starting stats. And so the only way to mitigate this -- if one is using the CEP -- is to create a new server hak that redefines and enforces the appropriate racial types, which would also require the player to download the hak, and thus close the door on would-be offenders?
Races aside, the player could just edit legal races in their 2da -- say human -- and grant them any bonus their greedy little heart desires? And so an OnClientEnter event, while it would catch illegal races, would not be able to catch the legal ones that are on Performance Enhancers.
Am I on the money, or have I lost it?
If you turn ELC off, then yes, anyone can join with custom stats. Servers sometimes turn ELC off so that they can edit the characters (e.g. for subrace bonuses), but then they write an additional ELC check in the scripts and boot such "hacked" characters manually.
This was possible to do before using at least 2 other methods, but now it is indeed much simpler for them. CEP has actually nothing to do with this. This is possible on all servers no matter what haks are they using, player just needs to know which hak is your top hak and how to make edits.
CEP just shown this issue because it includes 2 custom races that are set as Player races. So even if you use ELC, server will allows such character and the only way to protect against it is to boot character with wemic/brownie races or, if you are using ELC, change racialtypes.2da on your end and disable both races for players. Then, despite they will still be able to create new character with them, they will be rejected by server when they atempt to enter.
So basically. Use ELC and you are safe. Those without ELC has been always vulnerable to all kinds of hacked characters and because of the unhardcoded character creation, we can expect that there will be more players that will try to sneak with cheated character into our persistent worlds.
EDIT: Woops, I misunderstood. I will say though that using a custom top hak doesn't even give people joining my server the choice to pick Wemic or Brownie at character creation.
Besides, the only exploit here, if unmitigated, is getting powerful PCs. The "don't discuss exploits in public" is more about exploits that bring down the server, steal credit card info and similar.
https://neverwintervault.org/project/nwn1/other/cep-265-additional-races-fix
(and of course, when you made the feat to grant permanent bonus to ability using NWNX...)
Hence, first extend your ruleset server-side, and then make sure it is distributed to the clients.
If you remember it didn't allow some characters in due to an invalid domain, it means the domain was invalid server-side, i.e. the custom domains.2da was missing from the server, or there was a mismatch with its clients
Thanks in advance.
thanks to silentrocks
//:://////////////////////////////////////////////
//:: Created By: Deva B. Winblood
//:: Created On: Dec 30th, 2007
//:: Last Update: April 21th, 2008
//:://////////////////////////////////////////////
//#include “x3_inc_horse”
int RACIAL_TYPE_WEMIC = 51;
int RACIAL_TYPE_BROWNIE = 53;
void main()
{
object oPC = GetEnteringObject();
int nRace = GetRacialType(oPC);
if (GetIsPC(oPC))
{
// If players race is wemic or brownie…
if (nRace == RACIAL_TYPE_WEMIC || nRace == RACIAL_TYPE_BROWNIE)
{
// Boot players with races, that are not allowed
BootPC(oPC);
}
}
}