View Full Version : Any Race/Class combo classic servers?
Fadedspirit
10-12-2013, 06:45 PM
Been mulling around the idea for awhile, but I wanted to see if anyone has one of these in the works or up already?
I've always thought it was dumb that frogloks can't be magicians, or that gnomes can't be monks (seriously, the short people have the best center of gravity for kung-fu!).
I heard there use to be two servers that had this, but stopped for unknown reasons (it wasn't due to the any race/class combo, it was easily achieved according to an x-Guide from one of these servers I spoke to playing EQ-Live).
Is it "actually" that hard to achieve? What would I have to do other than setting all gear to any race ;)?
Cheers,
Faded :grin:
NatedogEZ
10-12-2013, 06:53 PM
char_create_combinations table .. just gotta add all the ones you don't have :)
Kingly_Krab
10-12-2013, 07:51 PM
You must modify two tables, char_create_combinations and char_create_point_allocations, you may modify these to have any race, any class, and even make all the classes have the same level of allocation in order to balance them.
Fadedspirit
10-13-2013, 12:53 AM
Neato, thanks :)!
Trying to think if I want to set my own server up or not and work on it over time.
Couple more things though....
How hard is it to add new races to the global set? I just found one that has added like 138 races or so from the monster pool. However, most of them are pretty lame :P.
Was wondering if it was possible to say....add gnolls from BlackBurrow as a choosable race once you get in the game? Obviously the issue is that the way EQ used to work is that you could only have X number of global mob skins due to how it was designed.
Has that changed?
My idea:
-Add a couple basic new races, such as Gnolls, Goblins, Kobolds, Orcs, and otters.
-Allow anyone to become any race they want with any class they want (only possible at character creation!)
-1.25x normal experience
-Either a progression unlock or a normal server with Classic, Kunark, Velious, and PoP unlocked from start.
-Spawn times reduces for major mobs to 1/4th of their normal timers. In other words a Raid boss that takes 24hrs to respawn will only take 6hrs :).
-Doubled drop-rate of items. (ie: FBSS will drop in every 10kills rather than 20kills on average).
The purpose of the server would be to harken back to "like live" old-school days, but with the idea that people have jobs/kids now and cannot play for 20hr playsessions at a time anymore ;). Also, I've just always wanted to play a gnoll magician :-D!
Kingly_Krab
10-13-2013, 12:58 AM
With races like that you could just have an NPC do that, that will work fine as long as you're not using the Rain of Fear client. Also, there are globalloads out now that allow all races to be global, although they're rather resource requiring.
knowom
10-13-2013, 02:03 AM
Neato, thanks :)!
Trying to think if I want to set my own server up or not and work on it over time.
Couple more things though....
How hard is it to add new races to the global set? I just found one that has added like 138 races or so from the monster pool. However, most of them are pretty lame :P.
Was wondering if it was possible to say....add gnolls from BlackBurrow as a choosable race once you get in the game? Obviously the issue is that the way EQ used to work is that you could only have X number of global mob skins due to how it was designed.
Has that changed?
My idea:
-Add a couple basic new races, such as Gnolls, Goblins, Kobolds, Orcs, and otters.
-Allow anyone to become any race they want with any class they want (only possible at character creation!)
-1.25x normal experience
-Either a progression unlock or a normal server with Classic, Kunark, Velious, and PoP unlocked from start.
-Spawn times reduces for major mobs to 1/4th of their normal timers. In other words a Raid boss that takes 24hrs to respawn will only take 6hrs :).
-Doubled drop-rate of items. (ie: FBSS will drop in every 10kills rather than 20kills on average).
The purpose of the server would be to harken back to "like live" old-school days, but with the idea that people have jobs/kids now and cannot play for 20hr playsessions at a time anymore ;). Also, I've just always wanted to play a gnoll magician :-D! Chetari + Burynai + Otter = Redwall! FYI Burynai aggro radius should be zone wide because let's face it Honey badger dgaf and eats everything!
Fadedspirit
10-13-2013, 02:15 AM
Chetari + Burynai + Otter = Redwall! FYI Burynai aggro radius should be zone wide because let's face it Honey badger dgaf and eats everything!
ROFL!
Yea, and yea I was thinking about having new players spawn in a specific starter area that is locked off from the rest of the game that they cannot get back to. In this area, it would facilitate race/class change, and then once you're happy you start the game in your starter city :grin:!
If you picked a mob race it'd start in the city that it closest originates from.
ie: Gnolls come from Qeynos, Orcs from Freeport, etc.
Watcha think? Personally I like the sound of a classic legit server with a little "twist", but not so much of one that it ruins the feel of the server. :smile:
ps: Any recommendations for a server provider? How much do good ones run on average per month?
knowom
10-13-2013, 04:24 AM
It's your call really if your designing it you can do what you want to really. As far as server hosting I think it depends on your requirements. I think I recall reading you can expect about 10-20 people online at a time from a 1mbps upload connection. I think most just host it themselves if it's a small scale server they might upgrade their cable plan and pay $10-$30's more a month though for a plan with a better upload connection.
In terms of design it's entirely up to the developer how they want to setup the server players will either like it or won't and plenty won't mince words about their personal feelings about it if they do hate it. I think a twist is a good thing generally if it's too classic you run the risk of coming off as just another rip off server of project 1999 with a smaller player base, but that's just my personal take on the matter honestly.
Fadedspirit
10-13-2013, 12:06 PM
It's your call really if your designing it you can do what you want to really. As far as server hosting I think it depends on your requirements. I think I recall reading you can expect about 10-20 people online at a time from a 1mbps upload connection. I think most just host it themselves if it's a small scale server they might upgrade their cable plan and pay $10-$30's more a month though for a plan with a better upload connection.
In terms of design it's entirely up to the developer how they want to setup the server players will either like it or won't and plenty won't mince words about their personal feelings about it if they do hate it. I think a twist is a good thing generally if it's too classic you run the risk of coming off as just another rip off server of project 1999 with a smaller player base, but that's just my personal take on the matter honestly.
Honestly I cannot stand project 1999. They look down on multiboxers like we're cheaters. I multiboxed back in 1999 just fine, but then again I was in the 5% of EQ players whom had really good internet "Relatively" for the time.
That and I was a 10yr old that built computers and sold them to people rather than mowing lawns :D!
Trying to recreate that classic feel without stepping on people's toes telling them they're evil if they don't play how I experienced the game back then :I.
Tabaluga_Dragon
10-13-2013, 01:31 PM
Make a server like that I for one would check it out.
rdnck
10-16-2013, 08:42 AM
Neato, thanks :)!
Trying to think if I want to set my own server up or not and work on it over time.
Couple more things though....
How hard is it to add new races to the global set? I just found one that has added like 138 races or so from the monster pool. However, most of them are pretty lame :P.
Was wondering if it was possible to say....add gnolls from BlackBurrow as a choosable race once you get in the game? Obviously the issue is that the way EQ used to work is that you could only have X number of global mob skins due to how it was designed.
Has that changed?
My idea:
-Add a couple basic new races, such as Gnolls, Goblins, Kobolds, Orcs, and otters.
-Allow anyone to become any race they want with any class they want (only possible at character creation!)
-1.25x normal experience
-Either a progression unlock or a normal server with Classic, Kunark, Velious, and PoP unlocked from start.
-Spawn times reduces for major mobs to 1/4th of their normal timers. In other words a Raid boss that takes 24hrs to respawn will only take 6hrs :).
-Doubled drop-rate of items. (ie: FBSS will drop in every 10kills rather than 20kills on average).
The purpose of the server would be to harken back to "like live" old-school days, but with the idea that people have jobs/kids now and cannot play for 20hr playsessions at a time anymore ;). Also, I've just always wanted to play a gnoll magician :-D!
eh? Normal server with no Luclin? What do you have against the kitties? :confused:
Fadedspirit
10-16-2013, 09:40 AM
eh? Normal server with no Luclin? What do you have against the kitties? :confused:
Not sure if I want to hate on kitties or not. I definitely will hate on the Drakken though. It all depends how people feel about it. Right now i'm on the fence.
Either:
Lock the server on release to Classic only, and allow cats, Iksars, and Frogloks.
OR
Lock the server on release to Classic only, and only allow Iksars.
The whole idea of the server is to have a classic feel, but not be 100%. I like to give people choices, which is why I'm currently trying to add Gnolls into the game as playable characters. So restricting races (other than Drakken whom can burn in a pit for all eternity) is kind of counter-intuitive to that mindset of choices.
I DO have All Race/Class/Deity combo working, and I decided on a landing hub-zone for initial character creation for you to choose your starting city from and/or if you want to play an extra monster race.
Right now my current problem is:
-Trying to find all the known textures for the different gnolls. I was only able to find 4 so far.
-Trying to figure out how to add Gnoll, and all its textures as a global model.
-Trying to figure out why I'm seeing human models in blackburrow for the gnolls there, but if i go into Qeynos Hills I see gnolls just fine?
Cheers,
Faded
Davood
10-16-2013, 06:47 PM
nobody mentioned Alakamin!
I have like 150+ races and all can be all classes on my server... i even have equipment working for monster races, and I figured out how to force display stuff for the regular pc races that they shouldn't be able to display normally (human with erudite hoodie etc).. only works in Titanium, SoD and RoF , but not in UF
And there is a bug with monster races, you can't enter the game if you are using the RoF client... it works on all earlier clients though.
i even have tiered skill progression using # commands for the non standard races.... as well as physical growth adn other goodies...
example:
dragons get various ae attacks and stuns..
also
you don't have to download anything to play on my server. its all serverside.
I hvae been maintaining it but i haven't developed for it since april as I've been involved in a massive project IRL that will result in $, eqemu is a hobby for me.. i put in the time I can.
I have tiers 1 through 30 open, but i have a design modeled and ready to go up to tier 70, and I will be experimenting with a newgame+ mode (when I have time.) where you can play continually more challenging instances of everything.
Davood
10-16-2013, 06:48 PM
oh yeah
i will be hacking together my own version of "project M" when I do have serious development time. (december probably). as my reason for making monster races was to eventually have two diametrically opposed ways of progressing through the content on my server.
Davood
10-16-2013, 06:49 PM
send me a pm and I can help you figure all this stuff out.. my server code (95% same as main eqemu) is on github too if you want to see what i did with beastlord pets and the special combat abilities (i changed some formulae)
Davood
10-16-2013, 07:05 PM
oh yeah if anyone cares
if you check out alakamin (search for it on github) and compile it.. and then update your db to include the monster race (i think 65535) on specific (or all) items. the server will register the stats properly.
at some point I will re-design my horrible, atrocious, vomit inducing website and explain everything more effectively.
Fadedspirit
10-18-2013, 04:46 PM
oh yeah if anyone cares
if you check out alakamin (search for it on github) and compile it.. and then update your db to include the monster race (i think 65535) on specific (or all) items. the server will register the stats properly.
at some point I will re-design my horrible, atrocious, vomit inducing website and explain everything more effectively.
Could you point me towards where in your source you changed to make items work for 65535 races?
:)
Davood
10-18-2013, 05:58 PM
https://github.com/davoodinator/Server/blob/master/common/Item.cpp?source=cc#L1893
from 1893 to 1933 is the code snippet you are interested in
bool Item_Struct::IsEquipable(uint16 Race, uint16 Class_) const
{
bool IsRace = false;
bool IsClass = false;
uint32 Classes_ = Classes;
uint32 Races_ = Races;
int32 Race_ = GetArrayRace(Race);
for (int CurrentClass = 1; CurrentClass <= PLAYER_CLASS_COUNT; ++CurrentClass)
{
if (Classes_ % 2 == 1)
{
if (CurrentClass == Class_)
{
IsClass = true;
break;
}
}
Classes_ >>= 1;
}
Race_ = (Race_ == 18 ? 16 : Race_);
for (unsigned int CurrentRace = 1; CurrentRace <= PLAYER_RACE_COUNT; ++CurrentRace)
{
if (Races_ % 2 == 1)
{
if (CurrentRace == Race_)
{
IsRace = true;
break;
}
}
Races_ >>= 1;
}
if (Race_ == 69) {IsRace = true;}
return (IsRace && IsClass);
}
that said.
that is only one small part of it
you will also have to make those races available in other ways too in the source code
there are changes i've made too, to make it happen.. properly.
client.cpp
race.h
races.cpp
bot.cpp
many changes. honestly just download those files and diff them with the main source and you should see the differences pretty clearly (how I added races).. ultimately im going to add all of the races (for no good reason, just beacuse i can)
honestly, if you aren't too picky, you should just download my code from github and compile it, if you pester me enough ill update it to include all races, so that its friendly to whatever you want to do with it.
One thing you may want to do is change pets.cpp to teh original one from eqemu source. as i have heavily modified that file... and i'm not done.. gonna add all the monster races to it too... bixies need their halfling pets mk
Fadedspirit
10-19-2013, 03:55 PM
https://github.com/davoodinator/Server/blob/master/common/Item.cpp?source=cc#L1893
from 1893 to 1933 is the code snippet you are interested in
bool Item_Struct::IsEquipable(uint16 Race, uint16 Class_) const
{
bool IsRace = false;
bool IsClass = false;
uint32 Classes_ = Classes;
uint32 Races_ = Races;
int32 Race_ = GetArrayRace(Race);
for (int CurrentClass = 1; CurrentClass <= PLAYER_CLASS_COUNT; ++CurrentClass)
{
if (Classes_ % 2 == 1)
{
if (CurrentClass == Class_)
{
IsClass = true;
break;
}
}
Classes_ >>= 1;
}
Race_ = (Race_ == 18 ? 16 : Race_);
for (unsigned int CurrentRace = 1; CurrentRace <= PLAYER_RACE_COUNT; ++CurrentRace)
{
if (Races_ % 2 == 1)
{
if (CurrentRace == Race_)
{
IsRace = true;
break;
}
}
Races_ >>= 1;
}
if (Race_ == 69) {IsRace = true;}
return (IsRace && IsClass);
}
that said.
that is only one small part of it
you will also have to make those races available in other ways too in the source code
there are changes i've made too, to make it happen.. properly.
client.cpp
race.h
races.cpp
bot.cpp
many changes. honestly just download those files and diff them with the main source and you should see the differences pretty clearly (how I added races).. ultimately im going to add all of the races (for no good reason, just beacuse i can)
honestly, if you aren't too picky, you should just download my code from github and compile it, if you pester me enough ill update it to include all races, so that its friendly to whatever you want to do with it.
One thing you may want to do is change pets.cpp to teh original one from eqemu source. as i have heavily modified that file... and i'm not done.. gonna add all the monster races to it too... bixies need their halfling pets mk
Question:
I see that the only thing you changed in IsEquipable is you added the line "if (Race_ == 69) {IsRace = true;}".
Meaning if the Race of the player is ever 69, ie: Will-O-Wisp, then it is a valid race.
If the only way to become a non-player race is to talk to a npc to get it done for you why not simply comment out the "if (Races_ %2 ==1)" logic and just put:
If (Races_ != null && Races_ != 0)
{
IsRace = true;
break;
}
???
This would allow any non-standard race to equip any item, ever.
Davood
10-19-2013, 04:02 PM
im speaking off the cuff here. but i couldnt be mistaken, its literally been 8-9 months since ive looked at that part of the code. but in the other files i referenced i haev lumped all of the non pc races into one "race" for reference elsewhere, that might be what the 69 is. otherwise you are probably right.
the problem lies in the OTHER parts, a /who all won't work unless you also update the other cpp and .h files i mentioned and add all of the races
Davood
10-19-2013, 04:03 PM
and yes without tijnkering with teh client, the only way to change to one of these races is to do a permarace call in perl
Fadedspirit
10-19-2013, 05:23 PM
and yes without tijnkering with teh client, the only way to change to one of these races is to do a permarace call in perl
Hmm, i made changes similar to yours in the source you mentioned except for client.cpp.
When i did a compare between default and your client.cpp's there were no differences??
Are you sure all i have to do is changed:
race.cpp
race.h
items.cpp?
Items are still red with race:All on them to my gnoll :(
[edit]: Scratch that, i looked at zone\client.cpp but it is only returning string values, and not really handling anything? I still added Gnoll but no change.
So i've changed:
race.cpp
race.h
items.cpp
client.cpp
still stats are not affecting my custom race :(
rencro
10-19-2013, 06:57 PM
world/client.cpp
hmm I played with this a while back as well...
but dont recall, Im gonna mess with it as well on my end
Fadedspirit
10-19-2013, 06:59 PM
world/client.cpp
world/client.cpp has nothing to do with races being able to equip items though?
The only thing he changed in his world/client.cpp was stuff about tutorial. :confused:
rencro
10-19-2013, 07:04 PM
Yea, sorry, dont mind me..trying to do 15 things at once :oops:
Fadedspirit
10-19-2013, 07:05 PM
Yea, sorry, dont mind me..trying to do 15 things at once :oops:
/10char xD lol
rencro
10-20-2013, 01:01 AM
65535 = all races but with this patch it does not include the shroud class which is equal to 65536, so for shroud only characters item needs to be 65536. To make it usable by all races need to make it 65535+65536=131071
With that the items stats will work.. This still shows ALL for races in items listed as 65535 but will not work for shrouds, so needs to be patched to show all classes minus shroud when item has 65535 in db...
This does show "Shroud" as class if item race is set to 65536..
Fadedspirit
10-20-2013, 03:24 AM
65535 = all races but with this patch it does not include the shroud class which is equal to 65536, so for shroud only characters item needs to be 65536. To make it usable by all races need to make it 65535+65536=131071
With that the items stats will work.. This still shows ALL for races in items listed as 65535 but will not work for shrouds, so needs to be patched to show all classes minus shroud when item has 65535 in db...
This does show "Shroud" as class if item race is set to 65536..
I'll try this suggestion tomorrow, thanks!
Fadedspirit
10-20-2013, 03:36 AM
65535 = all races but with this patch it does not include the shroud class which is equal to 65536, so for shroud only characters item needs to be 65536. To make it usable by all races need to make it 65535+65536=131071
With that the items stats will work.. This still shows ALL for races in items listed as 65535 but will not work for shrouds, so needs to be patched to show all classes minus shroud when item has 65535 in db...
This does show "Shroud" as class if item race is set to 65536..
Ok so new problem that I thought would go away when I got stats to work...my weapons all say "Invulnerable" when you try to attack with a race other than non-standard? Is this because said races aren't registered to be able to use said class or what's that about?
Was using a rusty dagger, no level req obviously, and still invuln on melee hits?
rencro
10-20-2013, 01:33 PM
I have mine setup with only Human Pirates, was using a monk and gave him a club, he hit fine with it. Then permaraced him to a warrior, gave him rusty dagger, and again was fine.
What race class combo you trying so I can try building it on my end as well?
Also, are you attacking a mob that is invulnerable to non magical items by chance?
Kingly_Krab
10-20-2013, 01:44 PM
I have mine setup with only Human Pirates, was using a monk and gave him a club, he hit fine with it. Then permaraced him to a warrior, gave him rusty dagger, and again was fine.
What race class combo you trying so I can try building it on my end as well?
Also, are you attacking a mob that is invulnerable to non magical items by chance?
I hopped on his server, he was playing a Gnoll Warrior I believe and he was attacking normal mobs such as 'a rodent' in North Qeynos and it was invulnerable to all his attacks.
Fadedspirit
10-20-2013, 01:52 PM
I hopped on his server, he was playing a Gnoll Warrior I believe and he was attacking normal mobs such as 'a rodent' in North Qeynos and it was invulnerable to all his attacks.
Yup :(
Also, although it LOOKs like stats are working on my gnoll, my HP and Mana will not regen above my "naked" stats when I equip items :(.
Davood
10-20-2013, 03:39 PM
oh shoot - something is broken on alakamin?
i better check this.. i had equipping working before.. must be a merge that i didn't pay attention to sometime recently.
Fadedspirit
10-20-2013, 03:42 PM
oh shoot - something is broken on alakamin?
i better check this.. i had equipping working before.. must be a merge that i didn't pay attention to sometime recently.
Not sure if it is on your server, talking about mine lol. I don't like just throwing stuff in so I'm trying to work it out myself :).
Do you know what could be the issue with weapons not working right in custom form, or why hp/mana won't regen when you put items on?
ps: I'm on my TS3
Kingly_Krab
10-20-2013, 03:44 PM
I was talking about Fadedspirit's server.
Davood
10-20-2013, 03:57 PM
wew! ok i just tested it, it still works properly on my server hehe.
I will pop into TS3 in a few. i have to run some errands
rencro
10-20-2013, 04:05 PM
Your Gnolls are not properly defined in the code, I replaced my Human pirates with Gnolls and now my Human Pirates have the same behavior you are talking about..But Gnolls work fine now..
Perhaps something was missed when you patched it, here is the diff for me, numbers may not line up as I have lots of other custom stuff in:
diff --git a/common/Item.cpp b/common/Item.cpp
index 1f74b1b..9e15f48 100644
--- a/common/Item.cpp
+++ b/common/Item.cpp
@@ -1928,6 +1928,7 @@ bool Item_Struct::IsEquipable(uint16 Race, uint16 Class_) const
}
Races_ >>= 1;
}
+ if (Race_ == 69) {IsRace = true;} // davood
return (IsRace && IsClass);
}
diff --git a/common/races.cpp b/common/races.cpp
index d088ce1..69878d1 100644
--- a/common/races.cpp
+++ b/common/races.cpp
@@ -106,6 +106,8 @@ uint32 GetArrayRace(uint16 race) {
return Array_Race_FROGLOK;
case DRAKKIN:
return Array_Race_DRAKKIN;
+ case ALAKAMIN_HUMAN_PIRATE:
+ return Array_Race_SHROUD; // davood
default:
return Array_Race_UNKNOWN;
}
diff --git a/common/races.h b/common/races.h
index 2c360e9..d610c86 100644
--- a/common/races.h
+++ b/common/races.h
@@ -54,6 +54,7 @@
#define EMU_RACE_NPC 131069 // was 65533
#define EMU_RACE_PET 131070 // was 65534
#define EMU_RACE_UNKNOWN 131071 // was 65535
+#define ALAKAMIN_HUMAN_PIRATE 341 // davood
#define human_1 1
@@ -72,6 +73,7 @@
#define vahshir_1 8192
#define rall_1 16384 //froglok?
#define drakkin_1 32768
+#define shroud_1 65536 //davood
const char* GetRaceName(uint16 race);
@@ -97,8 +99,10 @@ inline uint32 GetRaceBitmask(uint16 race) { return uint32(pow(2.0f, float(GetArr
#define Array_Race_DRAKKIN 16
#define Array_Race_NPC 17
#define Array_Race_PET 18
+#define Array_Race_SHROUD 69 // lets see if this works (Davood)
#define Count_Array_Race 19 // used for array defines, must be the max + 1
-#define PLAYER_RACE_COUNT 16 // The count of all player races
+#define PLAYER_RACE_COUNT 17 // davood
+//#define PLAYER_RACE_COUNT 16 // The count of all player races
/*
diff --git a/zone/client.cpp b/zone/client.cpp
index 96eb1a3..b183661 100644
--- a/zone/client.cpp
+++ b/zone/client.cpp
@@ -6264,6 +6264,7 @@ void Client::SendStatsWindow(Client* client, bool use_window)
case 130: race_Name = "Vah Shir"; break;
case 330: race_Name = "Froglok"; break;
case 522: race_Name = "Drakkin"; break;
+ case 341: race_Name = "Human_Pirate"; break; // davood
default: break;
}
/*################################################# #########
@@ -7116,6 +7117,8 @@ const char* Client::GetRacePlural(Client* client) {
return "Frogloks"; break;
case DRAKKIN:
return "Drakkin"; break;
+ case ALAKAMIN_HUMAN_PIRATE:
+ return "Human_Pirate"; break; //davood
default:
return "Races"; break;
}
Just replace Human Pirate with Gnolls, and Gnoll info, must say, the Gnolls look cool as a playable race!! Thanks Davood!!!
Fadedspirit
10-20-2013, 04:13 PM
Your Gnolls are not properly defined in the code, I replaced my Human pirates with Gnolls and now my Human Pirates have the same behavior you are talking about..But Gnolls work fine now..
Perhaps something was missed when you patched it, here is the diff for me, numbers may not line up as I have lots of other custom stuff in:
diff --git a/common/Item.cpp b/common/Item.cpp
index 1f74b1b..9e15f48 100644
--- a/common/Item.cpp
+++ b/common/Item.cpp
@@ -1928,6 +1928,7 @@ bool Item_Struct::IsEquipable(uint16 Race, uint16 Class_) const
}
Races_ >>= 1;
}
+ if (Race_ == 69) {IsRace = true;} // davood
return (IsRace && IsClass);
}
diff --git a/common/races.cpp b/common/races.cpp
index d088ce1..69878d1 100644
--- a/common/races.cpp
+++ b/common/races.cpp
@@ -106,6 +106,8 @@ uint32 GetArrayRace(uint16 race) {
return Array_Race_FROGLOK;
case DRAKKIN:
return Array_Race_DRAKKIN;
+ case ALAKAMIN_HUMAN_PIRATE:
+ return Array_Race_SHROUD; // davood
default:
return Array_Race_UNKNOWN;
}
diff --git a/common/races.h b/common/races.h
index 2c360e9..d610c86 100644
--- a/common/races.h
+++ b/common/races.h
@@ -54,6 +54,7 @@
#define EMU_RACE_NPC 131069 // was 65533
#define EMU_RACE_PET 131070 // was 65534
#define EMU_RACE_UNKNOWN 131071 // was 65535
+#define ALAKAMIN_HUMAN_PIRATE 341 // davood
#define human_1 1
@@ -72,6 +73,7 @@
#define vahshir_1 8192
#define rall_1 16384 //froglok?
#define drakkin_1 32768
+#define shroud_1 65536 //davood
const char* GetRaceName(uint16 race);
@@ -97,8 +99,10 @@ inline uint32 GetRaceBitmask(uint16 race) { return uint32(pow(2.0f, float(GetArr
#define Array_Race_DRAKKIN 16
#define Array_Race_NPC 17
#define Array_Race_PET 18
+#define Array_Race_SHROUD 69 // lets see if this works (Davood)
#define Count_Array_Race 19 // used for array defines, must be the max + 1
-#define PLAYER_RACE_COUNT 16 // The count of all player races
+#define PLAYER_RACE_COUNT 17 // davood
+//#define PLAYER_RACE_COUNT 16 // The count of all player races
/*
diff --git a/zone/client.cpp b/zone/client.cpp
index 96eb1a3..b183661 100644
--- a/zone/client.cpp
+++ b/zone/client.cpp
@@ -6264,6 +6264,7 @@ void Client::SendStatsWindow(Client* client, bool use_window)
case 130: race_Name = "Vah Shir"; break;
case 330: race_Name = "Froglok"; break;
case 522: race_Name = "Drakkin"; break;
+ case 341: race_Name = "Human_Pirate"; break; // davood
default: break;
}
/*################################################# #########
@@ -7116,6 +7117,8 @@ const char* Client::GetRacePlural(Client* client) {
return "Frogloks"; break;
case DRAKKIN:
return "Drakkin"; break;
+ case ALAKAMIN_HUMAN_PIRATE:
+ return "Human_Pirate"; break; //davood
default:
return "Races"; break;
}
Just replace Human Pirate with Gnolls, and Gnoll info, must say, the Gnolls look cool as a playable race!! Thanks Davood!!!
You see why i wanted gnoll?
Also, can you supply code blocks instead of diffs ^-^. If not i'll just pick through it by hand :O. I hate using diffs :(.
But yea, i've already done all this without looking at davood's code lol. Maybe i messed up somewhere.
Fadedspirit
10-20-2013, 04:22 PM
There's something else wrong, I rechecked 3 times now. I've already done all that lol. Still has the same issue, he changed something else somewhere :(.
[edit]: I also just backed up my stuff, and grabbed races.h, races.cpp, client.cpp, from his server setup. Still doesn't work lol, time to revert my code xD!
Davood
10-20-2013, 04:57 PM
I will list off the sections I have changed:
(bolded)file name
(regular text) functions changed
bot.cpp (2 changes)
[search for the following]
bool Bot::IsValidRaceClassCombo() {
[search for the following]
std::string Bot::RaceIdToString(uint16 raceId) {
client.cpp (2 changes)
[search for the following]
char* Client::GetRacePlural(Client* client) {
[search for the following]
// Race
std::string race_Name = itoa(GetRace());
switch(GetRace())
{
item.cpp (1 change)
[search for the following]
bool Item_Struct::IsEquipable(uint16 Race, uint16 Class_) const
pets.cpp (1 change)
[search for the following]
//handle beastlord pet appearance
if(record.petnaming == 2)
{
switch(GetBaseRace())
{
race.h
I replaced 100% of this file
races.cpp (1 change)
[search for the following]
uint32 GetArrayRace(uint16 race) {
your IDE should be helpful in figuring out what the actual code blocks are that you need to copy.
i pullled those segments without looking at the code.. i have some offline notes. I don't have time right now to actually prepare the code blocks.. but maybe later tonight I can do that if you really want.
An easier solution is to take 100% of my code, and revert attack*.* pets.* and bots.* back to eqemu default. or keep them. your choice.
Fadedspirit
10-20-2013, 05:17 PM
I will list off the sections I have changed:
(bolded)file name
(regular text) functions changed
bot.cpp (2 changes)
[search for the following]
bool Bot::IsValidRaceClassCombo() {
[search for the following]
std::string Bot::RaceIdToString(uint16 raceId) {
client.cpp (2 changes)
[search for the following]
char* Client::GetRacePlural(Client* client) {
[search for the following]
// Race
std::string race_Name = itoa(GetRace());
switch(GetRace())
{
item.cpp (1 change)
[search for the following]
bool Item_Struct::IsEquipable(uint16 Race, uint16 Class_) const
pets.cpp (1 change)
[search for the following]
//handle beastlord pet appearance
if(record.petnaming == 2)
{
switch(GetBaseRace())
{
race.h
I replaced 100% of this file
races.cpp (1 change)
[search for the following]
uint32 GetArrayRace(uint16 race) {
your IDE should be helpful in figuring out what the actual code blocks are that you need to copy.
i pullled those segments without looking at the code.. i have some offline notes. I don't have time right now to actually prepare the code blocks.. but maybe later tonight I can do that if you really want.
An easier solution is to take 100% of my code, and revert attack*.* pets.* and bots.* back to eqemu default. or keep them. your choice.
Errr, races.h you only added 36 new lines of code, so you modified maybe 25% of that file? You didn't replace anything either. I had already done essentially what you did there anyways so, nothing really different there.
Pets.cpp && Bot.cpp won't help me with my issue :).
I had also changed GetArrayRace to work with races.h. Right now i'm not sure what the issue is but i'll keep hunting around.
ps: I already tried grabbing your races.cpp, races.h, and client.cpp, but the issue persisted. I also changed Item.cpp from return(IsRace && IsClass); to simply return(IsClass);, so it nullifies that issue right out of the door. Trying to figure out what else might be the issue.
Fadedspirit
10-20-2013, 10:13 PM
Ok, so something is up with my compiler I think? I intentionally sabotaged my IsEquippable() so it always returned false, yet normal races have no issues with items when I equip them? Their stats are reflected correctly and regen fine.
I'm compiling the code i've been modifying, and pulling from the correct Bin folder. What could be my issue :(?
Am I not supposed to be cleaning, and then building "All_Build" when I modify the source?
Any ideas what my issue could be?? :-x
Davood
10-20-2013, 10:34 PM
that sounds very strange.
try the following
pull my code - and compile it -
does it work?
if it doesn't there could be a problem in your process. what are you doing exactly to compile it?
clearly something isn't happening if you sabotaged a key process and it still works.
or perhaps you weren't thorough in your testing. when you say the equipment still works for pcs. do you mean that #mystats shows the "normal" stats with the equipment? if it isn't working it will show the naked stats always - but your client doesn't know if it shoudl be working or not and it will always "Work" client side.. the server will tell you teh truth with #mystats
Davood
10-20-2013, 10:39 PM
Anyways.
my suggestion is the following:
establish a working baseline.
Can you compile my codebase and get it to work? If yes then you just missed something in your copy of the code. get yourself diffzilla and diff that sucker and see what is different!
if not then maybe there is something wrong with my github repository. I can dump it to another dir and diff it against my working dir if i really really have to - i hope that isn't necessary?
Fadedspirit
10-20-2013, 11:24 PM
Anyways.
my suggestion is the following:
establish a working baseline.
Can you compile my codebase and get it to work? If yes then you just missed something in your copy of the code. get yourself diffzilla and diff that sucker and see what is different!
if not then maybe there is something wrong with my github repository. I can dump it to another dir and diff it against my working dir if i really really have to - i hope that isn't necessary?
I already said that your files, specifically item.cpp, races.cpp, races.h, and client.cpp compile fine but custom races still do not report their hp/mana correctly and melee weapons won't work (invuln bug).
I did not check #mystats, but the client wasn't reporting stats correctly either, and when I sabotaged IsEquippable my melee weapon on a normal race did normal damage, and my stats reported correctly (hp/mana regenned fine, etc).
There's something else going on here :(
I'm thinking your code is too old, and something was changed in the past 4-5 months since you got yours working, because IsEquippable isn't even being called now lol? I triple checked to make sure I was compiling and moving the Bin code to the correct location. No idea what's up.
rencro
10-21-2013, 12:23 AM
I just compiled this today on my code and it worked fine..I equipped two Silver Fire Wedding Rings (30hp apiece) and went into W Freeport and let them beat me down near death then ran to guards, put on my fungi, and all was good..
Im not using : (werewolf,bixie,kerran,brownie,banshee,any of the pirates)
I'll post the code blocks..
common/item.cpp
AT -- about line 1893ish (sorry have other custom code)
bool Item_Struct::IsEquipable(uint16 Race, uint16 Class_) const
.
.
.
for (unsigned int CurrentRace = 1; CurrentRace <= PLAYER_RACE_COUNT; ++CurrentRace)
{
if (Races_ % 2 == 1)
{
if (CurrentRace == Race_)
{
IsRace = true;
break;
}
}
Races_ >>= 1;
}
return (IsRace && IsClass);
CHANGE TO --
for (unsigned int CurrentRace = 1; CurrentRace <= PLAYER_RACE_COUNT; ++CurrentRace)
{
if (Races_ % 2 == 1)
{
if (CurrentRace == Race_)
{
IsRace = true;
break;
}
}
Races_ >>= 1;
}
if (Race_ == 69) {IsRace = true;} //davood
return (IsRace && IsClass);
common/races.cpp
AT -- about line 74
uint32 GetArrayRace(uint16 race) {
.
.
.
case FROGLOK2:
return Array_Race_FROGLOK;
case DRAKKIN:
return Array_Race_DRAKKIN;
default:
return Array_Race_UNKNOWN;
CHANGE TO --
case FROGLOK2:
return Array_Race_FROGLOK;
case DRAKKIN:
return Array_Race_DRAKKIN;
case ALAKAMIN_PYRILEN:
case ALAKAMIN_GELIDRAN:
case ALAKAMIN_SHILLISKIN:
case ALAKAMIN_BEHOLDER:
case ALAKAMIN_HARPYR:
case ALAKAMIN_SATYR:
case ALAKAMIN_AVIAK:
case ALAKAMIN_SIREN:
case ALAKAMIN_MINOTAUR:
case ALAKAMIN_FUNGOID:
case ALAKAMIN_KOBOLD:
case ALAKAMIN_GOBLIN:
case ALAKAMIN_ORC:
case ALAKAMIN_ULTRATAUR:
case ALAKAMIN_BAZU:
case ALAKAMIN_FAERIE:
case ALAKAMIN_GARGOYLE:
case ALAKAMIN_ZOMBIE:
case ALAKAMIN_GNOLL:
case ALAKAMIN_IMP:
case ALAKAMIN_SCRYKIN:
case ALAKAMIN_GOLEM:
return Array_Race_SHROUD; // davood
default:
return Array_Race_UNKNOWN;
common/races.h
In the Defines --
#define FROGLOK2 74 // Not sure why /who all reports race as 74 for frogloks
#define DRAKKIN 522 // 32768
#define EMU_RACE_NPC 131069 // was 65533
#define EMU_RACE_PET 131070 // was 65534
#define EMU_RACE_UNKNOWN 131071 // was 65535
#define human_1 1
#define barbarian_1 2
CHANGE TO --
#define FROGLOK2 74 // Not sure why /who all reports race as 74 for frogloks
#define DRAKKIN 522 // 32768
#define EMU_RACE_NPC 131069 // was 65533
#define EMU_RACE_PET 131070 // was 65534
#define EMU_RACE_UNKNOWN 131071 // was 65535
//davood custom races
#define ALAKAMIN_PYRILEN 408
#define ALAKAMIN_GELIDRAN 417
#define ALAKAMIN_SHILLISKIN 467
#define ALAKAMIN_BEHOLDER 469
#define ALAKAMIN_HARPYR 527
#define ALAKAMIN_SATYR 529
#define ALAKAMIN_AVIAK 558
#define ALAKAMIN_SIREN 564
#define ALAKAMIN_MINOTAUR 574
#define ALAKAMIN_FUNGOID 456
#define ALAKAMIN_KOBOLD 455
#define ALAKAMIN_GOBLIN 433
#define ALAKAMIN_ORC 458
#define ALAKAMIN_ULTRATAUR 470
#define ALAKAMIN_BAZU 409
#define ALAKAMIN_FAERIE 473
#define ALAKAMIN_GARGOYLE 464
#define ALAKAMIN_ZOMBIE 471
#define ALAKAMIN_GNOLL 524
#define ALAKAMIN_IMP 46
#define ALAKAMIN_SCRYKIN 495
#define ALAKAMIN_GOLEM 374 // davood
#define human_1 1
#define barbarian_1 2
zone/client.cpp (NOTE--There are two locations need editing in this file)
AT -- about line 6200
void Client::SendStatsWindow(Client* client, bool use_window)
.
.
.
case 130: race_Name = "Vah Shir"; break;
case 330: race_Name = "Froglok"; break;
case 522: race_Name = "Drakkin"; break;
default: break;
}
/*################################################# #########
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^
H/M/E String
CHANGE TO --
case 130: race_Name = "Vah Shir"; break;
case 330: race_Name = "Froglok"; break;
case 522: race_Name = "Drakkin"; break;
//davood
case 408: race_Name = "Pyrilen"; break;
case 417: race_Name = "Gelidran"; break;
case 467: race_Name = "Shilliskin"; break;
case 469: race_Name = "Beholder"; break;
case 527: race_Name = "Harpyr"; break;
case 529: race_Name = "Satyr"; break;
case 558: race_Name = "Aviak"; break;
case 564: race_Name = "Siren"; break;
case 574: race_Name = "Minotaur"; break;
case 456: race_Name = "Fungoid"; break;
case 455: race_Name = "Kobold"; break;
case 433: race_Name = "Goblin"; break;
case 458: race_Name = "Orc"; break;
case 470: race_Name = "Ultrataur"; break;
case 409: race_Name = "Bazu"; break;
case 473: race_Name = "Faerie"; break;
case 464: race_Name = "Gargoyle"; break;
case 471: race_Name = "Zombie"; break;
case 524: race_Name = "Gnoll"; break;
case 46: race_Name = "Imp"; break;
case 495: race_Name = "Scrykin"; break;
case 374: race_Name = "Golem"; break;
default: break;
}
/*################################################# #########
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^
H/M/E String
THEN AT -- about line 7100
const char* Client::GetRacePlural(Client* client) {
.
.
.
case VAHSHIR:
return "Vah Shir"; break;
case FROGLOK:
return "Frogloks"; break;
case DRAKKIN:
return "Drakkin"; break;
default:
return "Races"; break;
CHANGE TO --
case VAHSHIR:
return "Vah Shir"; break;
case FROGLOK:
return "Frogloks"; break;
case DRAKKIN:
return "Drakkin"; break;
//davood
case ALAKAMIN_PYRILEN:
return "Pyrilen"; break;
case ALAKAMIN_GELIDRAN:
return "Gelidran"; break;
case ALAKAMIN_SHILLISKIN:
return "Shilliskin"; break;
case ALAKAMIN_BEHOLDER:
return "Beholder"; break;
case ALAKAMIN_HARPYR:
return "Harpyr"; break;
case ALAKAMIN_SATYR:
return "Satyr"; break;
case ALAKAMIN_AVIAK:
return "Aviak"; break;
case ALAKAMIN_SIREN:
return "Siren"; break;
case ALAKAMIN_MINOTAUR:
return "Minotaur"; break;
case ALAKAMIN_FUNGOID:
return "Fungoid"; break;
case ALAKAMIN_KOBOLD:
return "Kobold"; break;
case ALAKAMIN_GOBLIN:
return "Goblin"; break;
case ALAKAMIN_ORC:
return "Orc"; break;
case ALAKAMIN_ULTRATAUR:
return "Ultrataur"; break;
case ALAKAMIN_BAZU:
return "Bazu"; break;
case ALAKAMIN_FAERIE:
return "Faerie"; break;
case ALAKAMIN_GARGOYLE:
return "Gargoyle"; break;
case ALAKAMIN_ZOMBIE:
return "Zombie"; break;
case ALAKAMIN_GNOLL:
return "Gnoll"; break;
case ALAKAMIN_IMP:
return "Imp"; break;
case ALAKAMIN_SCRYKIN:
return "Scrykin"; break;
case ALAKAMIN_GOLEM:
return "Golem"; break;
default:
return "Races"; break;
knowom
10-21-2013, 01:13 AM
There are a few different Gnoll texture types in the game brown, white, and black could the "choose face" option be made to let you pick between the different model types I think that would be rather cool.
I mean that would be similar to how Vah Shir and Froglok were done the choose face option did a bit more than simply alter the face textures in those character models.
Davood
10-21-2013, 01:05 PM
I use extra sql tables to drtermine pkayer texture selection
when they zone it checks the db and sets the appropriate texture
also..all of this is done via perl and event_zone
Fadedspirit
10-21-2013, 01:16 PM
@rencro
Like I said, I copied & pasted Davood's code just to see if i was really messing something up and nothing changed.
I'm thinking I've got a compiler issue going on, as I intentionally messed up the IsEquippable() method yet nothing happened.
I tried putting log events in, but none of them showed up :x.
I even double checked based on dateTime stamps on files to see which ones were being built, but still no changes were being seen.
I'll keep working on it though.
As for the /face thing, if there is code in the source to handle that it probably is possible, but you'd still need on_enter_zone events in perl to check your current texture each time you zone :-D!
Davood
10-21-2013, 04:42 PM
I have a question fadedspirit.
what are the final 3 lines of your compiler output?
if the date time stamp of the exes isnt changing then it isn't actually compiling??? or skipping? maybe a config issue
rencro
10-21-2013, 05:57 PM
Its almost like the old code is still running...Are you copying over to the server folder from the bin folder while the server is stopped(is this possible?? dunno)
Just for giggles how about deleting the "Build" directory and rerunning cmake?? Then recompile, then grab the files from the release folder (or debug if you built debug mode)
just taking shots in the dark, sorry..
Fadedspirit
10-21-2013, 06:06 PM
Its almost like the old code is still running...Are you copying over to the server folder from the bin folder while the server is stopped(is this possible?? dunno)
Just for giggles how about deleting the "Build" directory and rerunning cmake?? Then recompile, then grab the files from the release folder (or debug if you built debug mode)
just taking shots in the dark, sorry..
Yea, I'm trying a lot of things at the moment. Fairly certain it is a build error with my compiler. Just got home so haven't identified what it is just yet :-x.
Cheers
Davood
10-21-2013, 06:30 PM
can you please read my last post.
what do the final 3 lines of your compile operation say?
Fadedspirit
10-21-2013, 06:33 PM
Boom, got it working.
My VS2012 was borked and needed a reinstall. Kept telling me it had "compatibility issues with the current OS" of which is Server 2008 R2 (of which vs2012 is compatible with).
A quick 20minute repair, and everything is building correctly now :D!
Woot :]
knowom
10-21-2013, 07:11 PM
Congrats glad you got that headache all straightened out.
Fadedspirit
10-22-2013, 04:42 PM
Congrats glad you got that headache all straightened out.
Now i just wish someone could point me in the direction of forcing Luclin models off when people join my server. Was a guide on a server years ago (Vekk/Zekk?) where it only allowed you to use the old models.
Apparently that was custom proprietary code that none are willing to share :confused:.
knowom
10-22-2013, 07:10 PM
Now i just wish someone could point me in the direction of forcing Luclin models off when people join my server. Was a guide on a server years ago (Vekk/Zekk?) where it only allowed you to use the old models.
Apparently that was custom proprietary code that none are willing to share :confused:. Why do you want to force them to use the old models it's only seen on the clients end anyway? I don't get why that would matter to you honestly. Personally I prefer the older models though I can't see why you'd want to force them on users.
Davood
10-23-2013, 02:26 PM
Its probably not going to be a popular choice.. but it might br possible hy disbling the expansions after velious.
Keggers
10-28-2013, 05:21 PM
Make a server like that I for one would check it out.
Your wish, granted (http://www.eqemulator.org/forums/showthread.php?t=37439).
<===Fadedspirit :)
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.