EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Server Code Submissions (https://www.eqemulator.org/forums/forumdisplay.php?f=669)
-   -   LoN Illusion fix (https://www.eqemulator.org/forums/showthread.php?t=33395)

501st 04-25-2011 07:26 AM

LoN Illusion fix
 
There's a few illusions that, when cast, appear at odd sizes or will not show up as the proper genders instead being set to gender 2 which will cause them to appear as a human male.

This will fix the Kerran illusion (male/female gender dependent upon the gender of the recipient.), the Brownie illusion (same as Kerran plus a size change), the Drachnid illusion (same as Kerran), the two Banshee illusions (default to gender 1), the Spectre/Basilisk/Fairy illusions (size changes) and all of the LoY pirates (really only used for the Halloween illusions however as of right now on Live the gnome and ogre pirates are both clickies and the ogre is also an enchanter illusion so I just added them all in since they are plagued by these same problems anyway)

races.h
line 51-72
Code:

#define FROGLOK                        330
#define TROLL_PIRATE        331
#define GNOME_PIRATE        338
#define DARKELF_PIRATE        339
#define OGRE_PIRATE                340
#define HUMAN_PIRATE        341
#define ERUDITE_PIRATE        342
#define CHOKIDAI                356
#define SKELETON_LDON        367
#define BASILISK_DON        436
#define DRACHNID_DODH        461
#define FAIRY_DODH                473
#define SPECTRE_POR                485
#define BANSHEE1                487
#define BANSHEE2                488
#define FROGLOK2                74        // Not sure why /who all reports race as 74 for frogloks
#define DRAKKIN                        522 // 32768
#define KERRAN_TBS                562
#define BROWNIE_SOF                568
#define EMU_RACE_NPC        131069 // was 65533
#define EMU_RACE_PET        131070 // was 65534
#define EMU_RACE_UNKNOWN 131071 // was 65535

mob.cpp
line 1368-1397
Code:

int8 Mob::GetDefaultGender(int16 in_race, int8 in_gender) {
//cout << "Gender in:  " << (int)in_gender << endl;
        if ((in_race > 0 && in_race <= GNOME )
                || in_race == IKSAR || in_race == VAHSHIR || in_race == FROGLOK || in_race == DRAKKIN
                || in_race == 15 || in_race == 50 || in_race == 57 || in_race == 70 || in_race == 98
                || in_race == 118 || in_race == TROLL_PIRATE || in_race == OGRE_PIRATE || in_race == GNOME_PIRATE
                || in_race == DARKELF_PIRATE || in_race == HUMAN_PIRATE || in_race == ERUDITE_PIRATE || in_race == KERRAN_TBS
                || in_race == DRACHNID_DODH || in_race == BROWNIE_SOF) {
                if (in_gender >= 2) {
                        // Female default for PC Races
                        return 1;
                }
                else
                        return in_gender;
        }
        else if (in_race == 44 || in_race == 52 || in_race == 55 || in_race == 65 || in_race == 67 || in_race == 88 || in_race == 117 || in_race == 127 ||
                in_race == 77 || in_race == 78 || in_race == 81 || in_race == 90 || in_race == 92 || in_race == 93 || in_race == 94 || in_race == 106 || in_race == 112 || in_race == 471) {
                // Male only races
                return 0;

        }
        else if (in_race == 25 || in_race == 56 || in_race == BANSHEE1 || in_race == BANSHEE2) {
                // Female only races
                return 1;
        }
        else {
                // Neutral default for NPC Races
                return 2;
        }
}

spell_effects.cpp
line 1236-1272
Code:

                                else {
                                        SendIllusionPacket
                                        (
                                                spell.base[i],
                                                Mob::GetDefaultGender(spell.base[i], GetGender()),
                                                spell.base2[i]
                                        );
                                        if(spell.base[i] == OGRE || spell.base[i] == BASILISK_DON || spell.base[i] == OGRE_PIRATE){
                                                SendAppearancePacket(AT_Size, 9);
                                        }
                                        else if(spell.base[i] == TROLL || spell.base[i] == SPECTRE_POR || spell.base[i] == TROLL_PIRATE){
                                                SendAppearancePacket(AT_Size, 8);
                                        }
                                        else if(spell.base[i] == VAHSHIR || spell.base[i] == BARBARIAN){
                                                SendAppearancePacket(AT_Size, 7);
                                        }
                                        else if(spell.base[i] == HALF_ELF || spell.base[i] == WOOD_ELF || spell.base[i] == DARK_ELF || spell.base[i] == FROGLOK
                                                || spell.base[i] == DARKELF_PIRATE || spell.base[i] == KERRAN_TBS){
                                                SendAppearancePacket(AT_Size, 5);
                                        }
                                        else if(spell.base[i] == DWARF || spell.base[i] == FAIRY_DODH){
                                                SendAppearancePacket(AT_Size, 4);
                                        }
                                        else if(spell.base[i] == HALFLING || spell.base[i] == GNOME || spell.base[i] == GNOME_PIRATE){
                                                SendAppearancePacket(AT_Size, 3);
                                        }
                                        else if(spell.base[i] == WOLF || spell.base[i] == BROWNIE_SOF) {
                                                SendAppearancePacket(AT_Size, 2);
                                        }
                                        else if(spell.base[i] == DRACHNID_DODH || spell.base[i] == BANSHEE1 || spell.base[i] == BANSHEE2 ||
                                                spell.base[i] == HUMAN_PIRATE || spell.base[i] == ERUDITE_PIRATE){
                                                SendAppearancePacket(AT_Size, 6);
                                        }
                                        else{
                                                SendAppearancePacket(AT_Size, 6);
                                        }
                                }

spell_effects.cpp
line 3172-3207
Code:

                        case SE_IllusionCopy:
                        case SE_Illusion:
                        {
                                SendIllusionPacket(0, GetBaseGender());
                                if(GetRace() == OGRE || GetRace() == OGRE_PIRATE){
                                        SendAppearancePacket(AT_Size, 9);
                                }
                                else if(GetRace() == TROLL || GetRace() == TROLL_PIRATE){
                                        SendAppearancePacket(AT_Size, 8);
                                }
                                else if(GetRace() == VAHSHIR || GetRace() == FROGLOK || GetRace() == BARBARIAN){
                                        SendAppearancePacket(AT_Size, 7);
                                }
                                else if(GetRace() == HALF_ELF || GetRace() == WOOD_ELF || GetRace() == DARK_ELF || GetRace() == DARKELF_PIRATE || GetRace() == KERRAN_TBS){
                                        SendAppearancePacket(AT_Size, 5);
                                }
                                else if(GetRace() == DWARF){
                                        SendAppearancePacket(AT_Size, 4);
                                }
                                else if(GetRace() == HALFLING || GetRace() == GNOME || GetRace() == GNOME_PIRATE){
                                        SendAppearancePacket(AT_Size, 3);
                                }
                                else if(GetRace()== BROWNIE_SOF){
                                        SendAppearancePacket(AT_Size, 2);
                                }
                                else if(GetRace() == DRACHNID_DODH || GetRace() == HUMAN_PIRATE || GetRace() == ERUDITE_PIRATE){
                                        SendAppearancePacket(AT_Size, 6);
                                }
                                else{
                                        SendAppearancePacket(AT_Size, 6);
                                }
                                for(int x = 0; x < 7; x++){
                                        SendWearChange(x);
                                }
                                break;
                        }

-Danyelle

Akkadius 04-25-2011 11:30 AM

Create a .diff patch file, it will be much easier for those trying to find out what specifically was changed.

http://tortoisesvn.net/docs/nightly/...dug-patch.html

Post the .diff file here.

PS: Contact me sometime Danyelle

501st 05-06-2011 07:28 PM

Bah i'm an idiot. Completely forgot about that. Here.

Code:

Index: trunk/EQEmuServer/common/classes.cpp
===================================================================
--- trunk/EQEmuServer/common/classes.cpp        (revision 1888)
+++ trunk/EQEmuServer/common/classes.cpp        (working copy)
@@ -21,7 +21,9 @@
 const char* GetEQClassName(int8 class_, int8 level) {
        switch(class_) {
      case WARRIOR:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Imperator";
+                else if (level >= 70)
                        return "Vanquisher";
          else if (level >= 65)
            return "Overlord";  //Baron-Sprite: LEAVE MY CLASSES ALONE.
@@ -34,7 +36,9 @@
          else
            return "Warrior";
      case CLERIC:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Exemplar";
+                else if (level >= 70)
                        return "Prelate";
          else if (level >= 65)
            return "Archon";
@@ -47,7 +51,9 @@
          else
            return "Cleric";
      case PALADIN:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Holy Defender";
+                else if (level >= 70)
                        return "Lord";
          else if (level >= 65)
            return "Lord Protector";
@@ -60,7 +66,9 @@
          else
            return "Paladin";
      case RANGER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Huntmaster";
+                else if (level >= 70)
                        return "Plainswalker";
          else if (level >= 65)
            return "Forest Stalker";
@@ -73,7 +81,9 @@
          else
            return "Ranger";
      case SHADOWKNIGHT:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Bloodreaver";
+                else if (level >= 70)
                        return "Scourge Knight";
          else if (level >= 65)
            return "Dread Lord";
@@ -86,7 +96,9 @@
          else
            return "Shadowknight";
      case DRUID:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Storm Caller";
+                else if (level >= 70)
                        return "Natureguard";
          else if (level >= 65)
            return "Storm Warden";
@@ -99,7 +111,9 @@
          else
            return "Druid";
      case MONK:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Ashenhand";
+                else if (level >= 70)
                        return "Stone Fist";
          else if (level >= 65)
            return "Transcendent";
@@ -112,7 +126,9 @@
          else
            return "Monk";
      case BARD:
-            if (level >= 70)
+            if (level >= 75)
+                        return "Lyricist";
+                else if (level >= 70)
                        return "Performer";
          else if (level >= 65)
            return "Maestro";
@@ -125,7 +141,9 @@
          else
            return "Bard";
      case ROGUE:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Shadowblade";
+                else if (level >= 70)
                        return "Nemesis";
          else if (level >= 65)
            return "Deceiver";
@@ -138,7 +156,9 @@
          else
            return "Rogue";
      case SHAMAN:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Spiritwatcher";
+                else if (level >= 70)
                        return "Soothsayer";
          else if (level >= 65)
            return "Prophet";
@@ -151,7 +171,9 @@
          else
            return "Shaman";
      case NECROMANCER:
-            if (level >= 70)
+            if (level >= 75)
+                        return "Deathcaller";
+                else if (level >= 70)
                        return "Wraith";
          else if (level >= 65)
            return "Arch Lich";
@@ -164,7 +186,9 @@
          else
            return "Necromancer";
      case WIZARD:
-            if (level >= 70)
+            if (level >= 75)
+                        return "Pyromancer";
+                else if (level >= 70)
                        return "Grand Arcanist";
          else if (level >= 65)
            return "Arcanist";
@@ -177,7 +201,9 @@
          else
            return "Wizard";
      case MAGICIAN:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Grand Summoner";
+                else if (level >= 70)
                        return "Arch Magus";
          else if (level >= 65)
            return "Arch Convoker";
@@ -185,12 +211,14 @@
            return "Arch Mage";
          else if (level >= 55)
            return "Conjurer";
-        if (level >= 51)
+        else if (level >= 51)
            return "Elementalist";
          else
            return "Magician";
      case ENCHANTER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Entrancer";
+                else if (level >= 70)
                        return "Bedazzler";
          else if (level >= 65)
            return "Coercer";
@@ -203,7 +231,9 @@
          else
            return "Enchanter";
      case BEASTLORD:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Frostblood";
+                else if (level >= 70)
                        return "Wildblood";
          else if (level >= 65)
            return "Feral Lord";
@@ -216,7 +246,9 @@
          else
            return "Beastlord";
          case BERSERKER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Juggernaut";
+                else if (level >= 70)
                        return "Ravager";
          else if (level >= 65)
            return "Fury";
@@ -229,7 +261,9 @@
          else
            return "Berserker";
          case BANKER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Grand Banker";
+                else if (level >= 70)
                        return "Master Banker";
          else if (level >= 65)
            return "Elder Banker";
@@ -275,16 +309,22 @@
                        return "Berserker Guildmaster";
          case MERCHANT:
                        return "Merchant";
-                case ADVENTURERECRUITER:
+          case DISCORD_MERCHANT:
+                  return "Discord Merchant";
+          case ADVENTURERECRUITER:
                        return "Adventure Recruiter";
-                case ADVENTUREMERCHANT:
+          case ADVENTUREMERCHANT:
                        return "Adventure Merchant";
-                case CORPSE_CLASS:
-                        return "Corpse Class";
-                case TRIBUTE_MASTER:
+          case LDON_TREASURE:
+                    return "Chest";
+          case TRIBUTE_MASTER:
                        return "Tribute Master";
-                case GUILD_TRIBUTE_MASTER:
+          case GUILD_TRIBUTE_MASTER:
                        return "Guild Tribute Master";
+          case ALT_CURRENCY_MERCH:
+                    return "Alternate Currency Merchant";
+          case MERC_LIASON:
+                    return "Mercenary Liason";
          default:
                        return "Unknown";
        }
Index: trunk/EQEmuServer/common/classes.h
===================================================================
--- trunk/EQEmuServer/common/classes.h        (revision 1888)
+++ trunk/EQEmuServer/common/classes.h        (working copy)
@@ -59,11 +59,12 @@
 #define ADVENTURERECRUITER 60
 #define ADVENTUREMERCHANT 61
 #define LDON_TREASURE 62 //objects you can use /open on first seen in LDONs
-#define CORPSE_CLASS 62        //only seen on Danvi's Corpse in Akheva so far..
 #define TRIBUTE_MASTER        63
 #define GUILD_TRIBUTE_MASTER        64        //not sure
 #define NORRATHS_KEEPERS_MERCHANT 67
 #define DARK_REIGN_MERCHANT 68
+#define ALT_CURRENCY_MERCH 70 //TBS and SoF Merchants (Doubloons. Faycite etc)
+#define MERC_LIASON 71 //Mercenary Merchants.
 #define warrior_1 1
 #define monk_1 64
 #define paladin_1 4
Index: trunk/EQEmuServer/common/races.h
===================================================================
--- trunk/EQEmuServer/common/races.h        (revision 1888)
+++ trunk/EQEmuServer/common/races.h        (working copy)
@@ -49,8 +49,24 @@
 #define CONTROLLED_BOAT 141
 #define IKSAR_SKELETON        161
 #define FROGLOK                        330
+#define TROLL_PIRATE        331
+#define GNOME_PIRATE        338
+#define DARKELF_PIRATE        339
+#define OGRE_PIRATE                340
+#define HUMAN_PIRATE        341
+#define ERUDITE_PIRATE        342
+#define CHOKIDAI                356
+#define SKELETON_LDON        367
+#define BASILISK_DON        436
+#define DRACHNID_DODH        461
+#define FAIRY_DODH                473
+#define SPECTRE_POR                485
+#define BANSHEE1                487
+#define BANSHEE2                488
 #define FROGLOK2                74        // Not sure why /who all reports race as 74 for frogloks
 #define DRAKKIN                        522 // 32768
+#define KERRAN_TBS                562
+#define BROWNIE_SOF                568
 #define EMU_RACE_NPC        131069 // was 65533
 #define EMU_RACE_PET        131070 // was 65534
 #define EMU_RACE_UNKNOWN 131071 // was 65535
Index: trunk/EQEmuServer/zone/mob.cpp
===================================================================
--- trunk/EQEmuServer/zone/mob.cpp        (revision 1888)
+++ trunk/EQEmuServer/zone/mob.cpp        (working copy)
@@ -1369,7 +1369,10 @@
 //cout << "Gender in:  " << (int)in_gender << endl;
        if ((in_race > 0 && in_race <= GNOME )
                || in_race == IKSAR || in_race == VAHSHIR || in_race == FROGLOK || in_race == DRAKKIN
-                || in_race == 15 || in_race == 50 || in_race == 57 || in_race == 70 || in_race == 98 || in_race == 118) {
+                || in_race == 15 || in_race == 50 || in_race == 57 || in_race == 70 || in_race == 98
+                || in_race == 118 || in_race == TROLL_PIRATE || in_race == OGRE_PIRATE || in_race == GNOME_PIRATE
+                || in_race == DARKELF_PIRATE || in_race == HUMAN_PIRATE || in_race == ERUDITE_PIRATE || in_race == KERRAN_TBS
+                || in_race == DRACHNID_DODH || in_race == BROWNIE_SOF) {
                if (in_gender >= 2) {
                        // Female default for PC Races
                        return 1;
@@ -1383,7 +1386,7 @@
                return 0;
 
        }
-        else if (in_race == 25 || in_race == 56) {
+        else if (in_race == 25 || in_race == 56 || in_race == BANSHEE1 || in_race == BANSHEE2) {
                // Female only races
                return 1;
        }
Index: trunk/EQEmuServer/zone/spell_effects.cpp
===================================================================
--- trunk/EQEmuServer/zone/spell_effects.cpp        (revision 1888)
+++ trunk/EQEmuServer/zone/spell_effects.cpp        (working copy)
@@ -1240,27 +1240,32 @@
                                                Mob::GetDefaultGender(spell.base[i], GetGender()),
                                                spell.base2[i]
                                        );
-                                        if(spell.base[i] == OGRE){
+                                        if(spell.base[i] == OGRE || spell.base[i] == BASILISK_DON || spell.base[i] == OGRE_PIRATE){
                                                SendAppearancePacket(AT_Size, 9);
                                        }
-                                        else if(spell.base[i] == TROLL){
+                                        else if(spell.base[i] == TROLL || spell.base[i] == SPECTRE_POR || spell.base[i] == TROLL_PIRATE){
                                                SendAppearancePacket(AT_Size, 8);
                                        }
                                        else if(spell.base[i] == VAHSHIR || spell.base[i] == BARBARIAN){
                                                SendAppearancePacket(AT_Size, 7);
                                        }
-                                        else if(spell.base[i] == HALF_ELF || spell.base[i] == WOOD_ELF || spell.base[i] == DARK_ELF || spell.base[i] == FROGLOK){
+                                        else if(spell.base[i] == HALF_ELF || spell.base[i] == WOOD_ELF || spell.base[i] == DARK_ELF || spell.base[i] == FROGLOK
+                                                || spell.base[i] == DARKELF_PIRATE || spell.base[i] == KERRAN_TBS){
                                                SendAppearancePacket(AT_Size, 5);
                                        }
-                                        else if(spell.base[i] == DWARF){
+                                        else if(spell.base[i] == DWARF || spell.base[i] == FAIRY_DODH){
                                                SendAppearancePacket(AT_Size, 4);
                                        }
-                                        else if(spell.base[i] == HALFLING || spell.base[i] == GNOME){
+                                        else if(spell.base[i] == HALFLING || spell.base[i] == GNOME || spell.base[i] == GNOME_PIRATE){
                                                SendAppearancePacket(AT_Size, 3);
                                        }
-                                        else if(spell.base[i] == WOLF) {
+                                        else if(spell.base[i] == WOLF || spell.base[i] == BROWNIE_SOF) {
                                                SendAppearancePacket(AT_Size, 2);
                                        }
+                                        else if(spell.base[i] == DRACHNID_DODH || spell.base[i] == BANSHEE1 || spell.base[i] == BANSHEE2 ||
+                                                spell.base[i] == HUMAN_PIRATE || spell.base[i] == ERUDITE_PIRATE){
+                                                SendAppearancePacket(AT_Size, 6);
+                                        }
                                        else{
                                                SendAppearancePacket(AT_Size, 6);
                                        }
@@ -3168,24 +3173,30 @@
                        case SE_Illusion:
                        {
                                SendIllusionPacket(0, GetBaseGender());
-                                if(GetRace() == OGRE){
+                                if(GetRace() == OGRE || GetRace() == OGRE_PIRATE){
                                        SendAppearancePacket(AT_Size, 9);
                                }
-                                else if(GetRace() == TROLL){
+                                else if(GetRace() == TROLL || GetRace() == TROLL_PIRATE){
                                        SendAppearancePacket(AT_Size, 8);
                                }
                                else if(GetRace() == VAHSHIR || GetRace() == FROGLOK || GetRace() == BARBARIAN){
                                        SendAppearancePacket(AT_Size, 7);
                                }
-                                else if(GetRace() == HALF_ELF || GetRace() == WOOD_ELF || GetRace() == DARK_ELF){
+                                else if(GetRace() == HALF_ELF || GetRace() == WOOD_ELF || GetRace() == DARK_ELF || GetRace() == DARKELF_PIRATE || GetRace() == KERRAN_TBS){
                                        SendAppearancePacket(AT_Size, 5);
                                }
                                else if(GetRace() == DWARF){
                                        SendAppearancePacket(AT_Size, 4);
                                }
-                                else if(GetRace() == HALFLING || GetRace() == GNOME){
+                                else if(GetRace() == HALFLING || GetRace() == GNOME || GetRace() == GNOME_PIRATE){
                                        SendAppearancePacket(AT_Size, 3);
                                }
+                                else if(GetRace()== BROWNIE_SOF){
+                                        SendAppearancePacket(AT_Size, 2);
+                                }
+                                else if(GetRace() == DRACHNID_DODH || GetRace() == HUMAN_PIRATE || GetRace() == ERUDITE_PIRATE){
+                                        SendAppearancePacket(AT_Size, 6);
+                                }
                                else{
                                        SendAppearancePacket(AT_Size, 6);
                                }

And just so i'm not bumping this for a completely pointless reason, in addition to the illusion fix this also includes the level 75+ class titles (We only have up to level 70 at the moment. Live stopped at 75 so that would make this the final set.). Adds the alt currency merchant (as used in TBS/SoF/SoD for doubloons, faycite and whatnot.) and the mercenary liason to the class list and removes corpse class (As it's the exact same class as the ldon chest, 62, so it's not really needed)

-Danyelle

trevius 05-07-2011 02:11 PM

Thanks Danyelle, I will try to get this tested and committed when I have time unless someone cares to beat me to it (but I doubt it lol).

trevius 05-27-2011 04:24 AM

Here are some updates to this submission that Danyelle PM'd me. Posting them here in case someone wants to commit them before I get to it. Been out on vacation for almost 2 weeks, so it may be a bit before I get all caught up for another look and testing of this.

Code:

Index: trunk/EQEmuServer/common/classes.cpp
===================================================================
--- trunk/EQEmuServer/common/classes.cpp        (revision 1918)
+++ trunk/EQEmuServer/common/classes.cpp        (working copy)
@@ -21,7 +21,9 @@
 const char* GetEQClassName(int8 class_, int8 level) {
        switch(class_) {
      case WARRIOR:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Imperator";
+                else if (level >= 70)
                        return "Vanquisher";
          else if (level >= 65)
            return "Overlord";  //Baron-Sprite: LEAVE MY CLASSES ALONE.
@@ -34,7 +36,9 @@
          else
            return "Warrior";
      case CLERIC:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Exemplar";
+                else if (level >= 70)
                        return "Prelate";
          else if (level >= 65)
            return "Archon";
@@ -47,7 +51,9 @@
          else
            return "Cleric";
      case PALADIN:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Holy Defender";
+                else if (level >= 70)
                        return "Lord";
          else if (level >= 65)
            return "Lord Protector";
@@ -60,7 +66,9 @@
          else
            return "Paladin";
      case RANGER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Huntmaster";
+                else if (level >= 70)
                        return "Plainswalker";
          else if (level >= 65)
            return "Forest Stalker";
@@ -73,7 +81,9 @@
          else
            return "Ranger";
      case SHADOWKNIGHT:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Bloodreaver";
+                else if (level >= 70)
                        return "Scourge Knight";
          else if (level >= 65)
            return "Dread Lord";
@@ -86,7 +96,9 @@
          else
            return "Shadowknight";
      case DRUID:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Storm Caller";
+                else if (level >= 70)
                        return "Natureguard";
          else if (level >= 65)
            return "Storm Warden";
@@ -99,7 +111,9 @@
          else
            return "Druid";
      case MONK:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Ashenhand";
+                else if (level >= 70)
                        return "Stone Fist";
          else if (level >= 65)
            return "Transcendent";
@@ -112,7 +126,9 @@
          else
            return "Monk";
      case BARD:
-            if (level >= 70)
+            if (level >= 75)
+                        return "Lyricist";
+                else if (level >= 70)
                        return "Performer";
          else if (level >= 65)
            return "Maestro";
@@ -125,7 +141,9 @@
          else
            return "Bard";
      case ROGUE:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Shadowblade";
+                else if (level >= 70)
                        return "Nemesis";
          else if (level >= 65)
            return "Deceiver";
@@ -138,7 +156,9 @@
          else
            return "Rogue";
      case SHAMAN:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Spiritwatcher";
+                else if (level >= 70)
                        return "Soothsayer";
          else if (level >= 65)
            return "Prophet";
@@ -151,7 +171,9 @@
          else
            return "Shaman";
      case NECROMANCER:
-            if (level >= 70)
+            if (level >= 75)
+                        return "Deathcaller";
+                else if (level >= 70)
                        return "Wraith";
          else if (level >= 65)
            return "Arch Lich";
@@ -164,7 +186,9 @@
          else
            return "Necromancer";
      case WIZARD:
-            if (level >= 70)
+            if (level >= 75)
+                        return "Pyromancer";
+                else if (level >= 70)
                        return "Grand Arcanist";
          else if (level >= 65)
            return "Arcanist";
@@ -177,7 +201,9 @@
          else
            return "Wizard";
      case MAGICIAN:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Grand Summoner";
+                else if (level >= 70)
                        return "Arch Magus";
          else if (level >= 65)
            return "Arch Convoker";
@@ -185,12 +211,14 @@
            return "Arch Mage";
          else if (level >= 55)
            return "Conjurer";
-        if (level >= 51)
+        else if (level >= 51)
            return "Elementalist";
          else
            return "Magician";
      case ENCHANTER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Entrancer";
+                else if (level >= 70)
                        return "Bedazzler";
          else if (level >= 65)
            return "Coercer";
@@ -203,7 +231,9 @@
          else
            return "Enchanter";
      case BEASTLORD:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Frostblood";
+                else if (level >= 70)
                        return "Wildblood";
          else if (level >= 65)
            return "Feral Lord";
@@ -216,7 +246,9 @@
          else
            return "Beastlord";
          case BERSERKER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Juggernaut";
+                else if (level >= 70)
                        return "Ravager";
          else if (level >= 65)
            return "Fury";
@@ -229,7 +261,9 @@
          else
            return "Berserker";
          case BANKER:
-                if (level >= 70)
+                if (level >= 75)
+                        return "Grand Banker";
+                else if (level >= 70)
                        return "Master Banker";
          else if (level >= 65)
            return "Elder Banker";
@@ -275,16 +309,22 @@
                        return "Berserker Guildmaster";
          case MERCHANT:
                        return "Merchant";
-                case ADVENTURERECRUITER:
+          case DISCORD_MERCHANT:
+                  return "Discord Merchant";
+          case ADVENTURERECRUITER:
                        return "Adventure Recruiter";
-                case ADVENTUREMERCHANT:
+          case ADVENTUREMERCHANT:
                        return "Adventure Merchant";
-                case CORPSE_CLASS:
-                        return "Corpse Class";
-                case TRIBUTE_MASTER:
+          case LDON_TREASURE:
+                    return "Chest";
+          case TRIBUTE_MASTER:
                        return "Tribute Master";
-                case GUILD_TRIBUTE_MASTER:
+          case GUILD_TRIBUTE_MASTER:
                        return "Guild Tribute Master";
+          case ALT_CURRENCY_MERCH:
+                    return "Alternate Currency Merchant";
+          case MERC_LIASON:
+                    return "Mercenary Liason";
          default:
                        return "Unknown";
        }
Index: trunk/EQEmuServer/common/classes.h
===================================================================
--- trunk/EQEmuServer/common/classes.h        (revision 1918)
+++ trunk/EQEmuServer/common/classes.h        (working copy)
@@ -59,11 +59,12 @@
 #define ADVENTURERECRUITER 60
 #define ADVENTUREMERCHANT 61
 #define LDON_TREASURE 62 //objects you can use /open on first seen in LDONs
-#define CORPSE_CLASS 62        //only seen on Danvi's Corpse in Akheva so far..
 #define TRIBUTE_MASTER        63
 #define GUILD_TRIBUTE_MASTER        64        //not sure
 #define NORRATHS_KEEPERS_MERCHANT 67
 #define DARK_REIGN_MERCHANT 68
+#define ALT_CURRENCY_MERCH 70 //TBS and SoF Merchants (Doubloons. Faycite etc)
+#define MERC_LIASON 71 //Mercenary Merchants.
 #define warrior_1 1
 #define monk_1 64
 #define paladin_1 4
Index: trunk/EQEmuServer/common/races.h
===================================================================
--- trunk/EQEmuServer/common/races.h        (revision 1918)
+++ trunk/EQEmuServer/common/races.h        (working copy)
@@ -39,6 +39,7 @@
 #define BEAR                        43
 #define SKELETON                60
 #define TIGER                        63
+#define FROGLOK2                74        // Not sure why /who all reports race as 74 for frogloks
 #define ELEMENTAL                75
 #define ALLIGATOR                91
 #define EYE_OF_ZOMM                108
@@ -49,8 +50,33 @@
 #define CONTROLLED_BOAT 141
 #define IKSAR_SKELETON        161
 #define FROGLOK                        330
-#define FROGLOK2                74        // Not sure why /who all reports race as 74 for frogloks
+#define TROLL_PIRATE        331
+#define GNOME_PIRATE        338
+#define DARKELF_PIRATE        339
+#define OGRE_PIRATE                340
+#define HUMAN_PIRATE        341
+#define ERUDITE_PIRATE        342
+#define CHOKIDAI                356
+#define SKELETON_LDON        367
+#define GOLEM_LDON                374
+#define PYRILEN                        408
+#define GELIDRAN                417
+#define BASILISK_DON        436
+#define SPIDER_DON                440
+#define KOBOLD_DODH                455
+#define GNOMEWORK                457
+#define DRACHNID_DODH        461
+#define SHILISKIN                467
+#define FAIRY_DODH                473
+#define SPECTRE_POR                485
+#define BANSHEE1                487
+#define BANSHEE2                488
+#define SCRYKIN                        495
+#define CENTAUR_TSS                521
 #define DRAKKIN                        522 // 32768
+#define GNOLL_TSS                524
+#define KERRAN_TBS                562
+#define BROWNIE_SOF                568
 #define EMU_RACE_NPC        131069 // was 65533
 #define EMU_RACE_PET        131070 // was 65534
 #define EMU_RACE_UNKNOWN 131071 // was 65535
Index: trunk/EQEmuServer/zone/mob.cpp
===================================================================
--- trunk/EQEmuServer/zone/mob.cpp        (revision 1918)
+++ trunk/EQEmuServer/zone/mob.cpp        (working copy)
@@ -1370,7 +1370,10 @@
 //cout << "Gender in:  " << (int)in_gender << endl;
        if ((in_race > 0 && in_race <= GNOME )
                || in_race == IKSAR || in_race == VAHSHIR || in_race == FROGLOK || in_race == DRAKKIN
-                || in_race == 15 || in_race == 50 || in_race == 57 || in_race == 70 || in_race == 98 || in_race == 118) {
+                || in_race == 15 || in_race == 50 || in_race == 57 || in_race == 70 || in_race == 98
+                || in_race == 118 || in_race == TROLL_PIRATE || in_race == OGRE_PIRATE || in_race == GNOME_PIRATE
+                || in_race == DARKELF_PIRATE || in_race == HUMAN_PIRATE || in_race == ERUDITE_PIRATE || in_race == KERRAN_TBS
+                || in_race == DRACHNID_DODH || in_race == BROWNIE_SOF) {
                if (in_gender >= 2) {
                        // Female default for PC Races
                        return 1;
@@ -1384,7 +1387,7 @@
                return 0;
 
        }
-        else if (in_race == 25 || in_race == 56) {
+        else if (in_race == 25 || in_race == 56 || in_race == BANSHEE1 || in_race == BANSHEE2) {
                // Female only races
                return 1;
        }
Index: trunk/EQEmuServer/zone/pets.cpp
===================================================================
--- trunk/EQEmuServer/zone/pets.cpp        (revision 1918)
+++ trunk/EQEmuServer/zone/pets.cpp        (working copy)
@@ -324,9 +324,9 @@
                        npc_type->texture = 2;
                        break;
                case IKSAR:
-                        npc_type->race = WOLF;
+                        npc_type->race = CHOKIDAI;
                        npc_type->texture = 0;
-                        npc_type->gender = 1;
+                        npc_type->gender = 2;
                        npc_type->size *= 2.0f;
                        npc_type->luclinface = 0;
                        break;
@@ -370,6 +370,8 @@
                        npc_type->size = monster->size;
                        npc_type->texture = monster->texture;
                        npc_type->gender = monster->gender;
+                        npc_type->luclinface = monster->luclinface;
+                        npc_type->helmtexture = monster->helmtexture;
                }
                else {
                        LogFile->write(EQEMuLog::Error, "Error loading NPC data for monster summoning pet (NPC ID %d)", monsterid);
Index: trunk/EQEmuServer/zone/spell_effects.cpp
===================================================================
--- trunk/EQEmuServer/zone/spell_effects.cpp        (revision 1918)
+++ trunk/EQEmuServer/zone/spell_effects.cpp        (working copy)
@@ -1237,27 +1237,37 @@
                                                Mob::GetDefaultGender(spell.base[i], GetGender()),
                                                spell.base2[i]
                                        );
-                                        if(spell.base[i] == OGRE){
+                                        if(spell.base[i] == SPIDER_DON){
+                                                SendAppearancePacket(AT_Size, 10);
+                                        }
+                                        else if(spell.base[i] == OGRE || spell.base[i] == BASILISK_DON || spell.base[i] == OGRE_PIRATE){
                                                SendAppearancePacket(AT_Size, 9);
                                        }
-                                        else if(spell.base[i] == TROLL){
+                                        else if(spell.base[i] == TROLL || spell.base[i] == SPECTRE_POR || spell.base[i] == TROLL_PIRATE || spell.base[i] == GOLEM_LDON){
                                                SendAppearancePacket(AT_Size, 8);
                                        }
-                                        else if(spell.base[i] == VAHSHIR || spell.base[i] == BARBARIAN){
+                                        else if(spell.base[i] == VAHSHIR || spell.base[i] == BARBARIAN || spell.base[i] == SCRYKIN || spell.base[i] == CENTAUR_TSS
+                                                || spell.base[i] == SHILISKIN || spell.base[i] == PYRILEN || spell.base[i] == GELIDRAN || spell.base[i] == GNOLL_TSS
+                                                || spell.base[i] == KOBOLD_DODH){
                                                SendAppearancePacket(AT_Size, 7);
                                        }
-                                        else if(spell.base[i] == HALF_ELF || spell.base[i] == WOOD_ELF || spell.base[i] == DARK_ELF || spell.base[i] == FROGLOK){
+                                        else if(spell.base[i] == HALF_ELF || spell.base[i] == WOOD_ELF || spell.base[i] == DARK_ELF || spell.base[i] == FROGLOK
+                                                || spell.base[i] == DARKELF_PIRATE || spell.base[i] == KERRAN_TBS || spell.base[i] == GNOMEWORK){
                                                SendAppearancePacket(AT_Size, 5);
                                        }
-                                        else if(spell.base[i] == DWARF){
+                                        else if(spell.base[i] == DWARF || spell.base[i] == FAIRY_DODH || spell.base[i] == WOLF || spell.base[i] == WOLF_ELEMENTAL){
                                                SendAppearancePacket(AT_Size, 4);
                                        }
-                                        else if(spell.base[i] == HALFLING || spell.base[i] == GNOME){
+                                        else if(spell.base[i] == HALFLING || spell.base[i] == GNOME || spell.base[i] == GNOME_PIRATE){
                                                SendAppearancePacket(AT_Size, 3);
                                        }
-                                        else if(spell.base[i] == WOLF) {
+                                        else if(spell.base[i] == BROWNIE_SOF) {
                                                SendAppearancePacket(AT_Size, 2);
                                        }
+                                        else if(spell.base[i] == DRACHNID_DODH || spell.base[i] == BANSHEE1 || spell.base[i] == BANSHEE2 ||
+                                                spell.base[i] == HUMAN_PIRATE || spell.base[i] == ERUDITE_PIRATE){
+                                                SendAppearancePacket(AT_Size, 6);
+                                        }
                                        else{
                                                SendAppearancePacket(AT_Size, 6);
                                        }
@@ -3165,24 +3175,30 @@
                        case SE_Illusion:
                        {
                                SendIllusionPacket(0, GetBaseGender());
-                                if(GetRace() == OGRE){
+                                if(GetRace() == OGRE || GetRace() == OGRE_PIRATE){
                                        SendAppearancePacket(AT_Size, 9);
                                }
-                                else if(GetRace() == TROLL){
+                                else if(GetRace() == TROLL || GetRace() == TROLL_PIRATE){
                                        SendAppearancePacket(AT_Size, 8);
                                }
                                else if(GetRace() == VAHSHIR || GetRace() == FROGLOK || GetRace() == BARBARIAN){
                                        SendAppearancePacket(AT_Size, 7);
                                }
-                                else if(GetRace() == HALF_ELF || GetRace() == WOOD_ELF || GetRace() == DARK_ELF){
+                                else if(GetRace() == HALF_ELF || GetRace() == WOOD_ELF || GetRace() == DARK_ELF || GetRace() == DARKELF_PIRATE || GetRace() == KERRAN_TBS){
                                        SendAppearancePacket(AT_Size, 5);
                                }
                                else if(GetRace() == DWARF){
                                        SendAppearancePacket(AT_Size, 4);
                                }
-                                else if(GetRace() == HALFLING || GetRace() == GNOME){
+                                else if(GetRace() == HALFLING || GetRace() == GNOME || GetRace() == GNOME_PIRATE){
                                        SendAppearancePacket(AT_Size, 3);
                                }
+                                else if(GetRace()== BROWNIE_SOF){
+                                        SendAppearancePacket(AT_Size, 2);
+                                }
+                                else if(GetRace() == DRACHNID_DODH || GetRace() == HUMAN_PIRATE || GetRace() == ERUDITE_PIRATE){
+                                        SendAppearancePacket(AT_Size, 6);
+                                }
                                else{
                                        SendAppearancePacket(AT_Size, 6);
                                }



All times are GMT -4. The time now is 06:20 PM.

Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.