This is a read only copy without any forum functionality of the old Modcraft forum.
If there is anything that you would like to have removed, message me on Discord via Kaev#5208.
Big thanks to Alastor for making this copy!

Menu

Author Topic: New class?  (Read 5645 times)

Jivy

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 11
    • View Profile
Re: New class?
« Reply #15 on: April 26, 2012, 12:05:58 pm »
Heeello guys,

I have what you want, the begining of a new class, made by Khira. You can use all files :
Quote from: "Khira"
Bonjour,

J'avais commencé une nouvelle classe il y a un moment mais au vu du travail qu'il y a et le peu d'aide que j'ai eu, le projet a été mis en pause (pour ne pas dire abandonner...).

Voilà quelques screens et infos sur ce que j'avais fait.


Ecran de création de personnage modifié :
[center:egq1qfme][/center:egq1qfme]


Séléction des personnages (pet affiché) :
[center:egq1qfme][/center:egq1qfme]


En jeu :
[center:egq1qfme][/center:egq1qfme]



Les différentes spé du Spiritualiste :
[center:egq1qfme]



[/center:egq1qfme]


Et les arbres de talents, prêts à être remplis :
[center:egq1qfme][/center:egq1qfme]





La map de départ, petite ville enneigée :

[center:egq1qfme]

















[/center:egq1qfme]


Une vue de dessus avec juste le terrain et les bâtiments :
http://www.model-changing.com/images/pr ... map1.0.png


Quote from: "Khira"
Le spiritualiste est une classe pouvant invoquer un esprit qui prendra la forme que le Spiritualiste veut. Avant de pouvoir prendre une certain forme le spiritualiste devra réaliser une ou plusieurs quêtes, et celà pour toutes les invocations.

Il y aura 3 niveaux d'invocation pour chaque forme :
- Esprit mineur
- Esprit
- Esprit majeur
La force n'est pas déterminé par la puissance de l'esprit mais par la forme qu'il prend (et donc la puissance/volonté du Spiritualiste).

Il y aura plusieurs formes, la plupart (toutes ?) sont des formes élémentaires :
- Vent
- Terre
- Eau
- Feu
- Ombre (?)

Un seul esprit pourra être invoqué en même temps. Chaque élément devrais avoir des capacités spécifiques.

Quote from: "Khira"
Le SPiritualiste possède 3 domaines de spécialisation :
- Arcanes
- [Plan] spirituel
- [Plan] astral

Les Sorts des Arcanes :
Source principale des sorts à dégâts. Contrairement au Mage, les sorts offensifs directs seront majoritairement de type Arcanes. On peut garder quelques sorts d'invocations (Gemmes de mana ?).


Les Sorts Spirituels :
Principalement les invocations d'esprits.

Les Sorts Astrals :
Les Sort de soins, d'amélioration et de debuff. Principalement pour le soutien en groupe.


Voici, en gros, à quoi sont destinées les différentes spécialisations. Ce sujet sera surement mis à jour au fil du temps.

Quote from: "Khira"
Fichiers modifiés :
Core :
- src/game/CharacterHandler.cpp
- src/game/Level3.cpp
- src/game/ObjectMgr.cpp
- src/game/Player.cpp
- src/game/SharedDefines.h
- src/game/SpellEffects.cpp
- src/game/StatSystem.cpp
- src/game/Unit.cpp


Voici le patch MPQ contenant les quelques sorts, maps, modifs pour la classe, etc... : patch-NewClassSpirit.MPQ

Voici les fichiers qui ont été modifiés/ajoutés :
Code: [Select]
DBFilesClientAreaTable.dbc
DBFilesClientCharBaseInfo.dbc
DBFilesClientCharStartOutfit.dbc
DBFilesClientChrClasses.dbc
DBFilesClientCreatureDisplayInfo.dbc
DBFilesClientCreatureDisplayInfoExtra.dbc
DBFilesClientGameObjectDisplayInfo.dbc
DBFilesClientgtChanceToMeleeCrit.dbc
DBFilesClientgtChanceToMeleeCritBase.dbc
DBFilesClientgtChanceToSpellCrit.dbc
DBFilesClientgtChanceToSpellCritBase.dbc
DBFilesClientgtOCTRegenHP.dbc
DBFilesClientgtRegenHPPerSpt.dbc
DBFilesClientgtRegenMPPerSpt.dbc
DBFilesClientItem.dbc
DBFilesClientItemDisplayInfo.dbc
DBFilesClientSkillLine.dbc
DBFilesClientSkillLineAbility.dbc
DBFilesClientSkillRaceClassInfo.dbc
DBFilesClientSpell.dbc
DBFilesClientTalentTab.dbc
DBFilesClientWorldSafeLocs.dbc
InterfaceFrameXMLConstants.lua
InterfaceGluesCharacterCreateUI-CharacterCreate-Classes.blp
InterfaceGlueXMLCharacterCreate.lua
InterfaceGlueXMLCharacterCreate.xml
InterfaceGlueXMLGlueStrings.lua
InterfaceTalentFrameSpiritArcane-BottomLeft.blp
InterfaceTalentFrameSpiritArcane-BottomRight.blp
InterfaceTalentFrameSpiritArcane-TopLeft.blp
InterfaceTalentFrameSpiritArcane-TopRight.blp
InterfaceTalentFrameSpiritAstral-BottomLeft.blp
InterfaceTalentFrameSpiritAstral-BottomRight.blp
InterfaceTalentFrameSpiritAstral-TopLeft.blp
InterfaceTalentFrameSpiritAstral-TopRight.blp
InterfaceTalentFrameSpiritSpiritual-BottomLeft.blp
InterfaceTalentFrameSpiritSpiritual-BottomRight.blp
InterfaceTalentFrameSpiritSpiritual-TopLeft.blp
InterfaceTalentFrameSpiritSpiritual-TopRight.blp
InterfaceTargetingFrameUI-Classes-Circles.blp
ItemObjectComponentsShoulderShoulder_Robe_B_03Black.blp
ItemTextureComponentsTorsoLowerTextureTabard_A_Esperita_chest_TL_F.blp
ItemTextureComponentsTorsoLowerTextureTabard_A_Esperita_chest_TL_M.blp
ItemTextureComponentsTorsoUpperTextureTabard_A_Esperita_chest_TU_F.blp
ItemTextureComponentsTorsoUpperTextureTabard_A_Esperita_chest_TU_M.blp
TexturesBakedNpcTexturesCreatureDisplayExtra-25000.blp
WorldMapsKalimdorKalimdor_38_17.adt
WorldMapsKalimdorKalimdor_38_18.adt
WorldMapsKalimdorKalimdor_39_17.adt
WorldMapsKalimdorKalimdor_39_18.adt

Voici la modification du core (MaNGOS), c'est le - presque - minimum. La classe est accessible avec les mêmes conditions qu'un chevalier de la mort (départ lvl 55, etc..) :
Code: [Select]
diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp
index ae7e3f1..722cc3c 100644
--- a/src/game/CharacterHandler.cpp
+++ b/src/game/CharacterHandler.cpp
@@ -319,7 +319,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
 
     // speedup check for heroic class disabled case
     uint32 heroic_free_slots = sWorld.getConfig(CONFIG_UINT32_HEROIC_CHARACTERS_PER_REALM);
-    if(heroic_free_slots == 0 && GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT)
+    if(heroic_free_slots == 0 && GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT))
     {
         data << (uint8)CHAR_CREATE_UNIQUE_CLASS_LIMIT;
         SendPacket( &data );
@@ -328,7 +328,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
 
     // speedup check for heroic class disabled case
     uint32 req_level_for_heroic = sWorld.getConfig(CONFIG_UINT32_MIN_LEVEL_FOR_HEROIC_CHARACTER_CREATING);
-    if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT && req_level_for_heroic > sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL))
+    if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT) && req_level_for_heroic > sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL))
     {
         data << (uint8)CHAR_CREATE_LEVEL_REQUIREMENT;
         SendPacket( &data );
@@ -343,10 +343,10 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
     // if 0 then allowed creating without any characters
     bool have_req_level_for_heroic = (req_level_for_heroic==0);
 
-    if(!AllowTwoSideAccounts || skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT)
+    if(!AllowTwoSideAccounts || skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT)
     {
         QueryResult *result2 = CharacterDatabase.PQuery("SELECT level,race,class FROM characters WHERE account = '%u' %s",
-            GetAccountId(), (skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT) ? "" : "LIMIT 1");
+            GetAccountId(), (skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT) ? "" : "LIMIT 1");
         if(result2)
         {
             uint32 team_= Player::TeamForRace(race_);
@@ -354,10 +354,10 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
             Field* field = result2->Fetch();
             uint8 acc_race  = field[1].GetUInt32();
 
-            if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT)
+            if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT))
             {
                 uint8 acc_class = field[2].GetUInt32();
-                if(acc_class == CLASS_DEATH_KNIGHT)
+                if(acc_class == CLASS_DEATH_KNIGHT || acc_class == CLASS_SPIRIT)
                 {
                     if(heroic_free_slots > 0)
                         --heroic_free_slots;
@@ -398,7 +398,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
 
             // search same race for cinematic or same class if need
             // TODO: check if cinematic already shown? (already logged in?; cinematic field)
-            while ((skipCinematics == CINEMATICS_SKIP_SAME_RACE && !have_same_race) || class_ == CLASS_DEATH_KNIGHT)
+            while ((skipCinematics == CINEMATICS_SKIP_SAME_RACE && !have_same_race) || class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT)
             {
                 if(!result2->NextRow())
                     break;
@@ -409,10 +409,10 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
                 if(!have_same_race)
                     have_same_race = race_ == acc_race;
 
-                if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT)
+                if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT))
                 {
                     uint8 acc_class = field[2].GetUInt32();
-                    if(acc_class == CLASS_DEATH_KNIGHT)
+                    if(acc_class == CLASS_DEATH_KNIGHT || acc_class == CLASS_SPIRIT)
                     {
                         if(heroic_free_slots > 0)
                             --heroic_free_slots;
@@ -438,7 +438,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
         }
     }
 
-    if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT && !have_req_level_for_heroic)
+    if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT) && !have_req_level_for_heroic)
     {
         data << (uint8)CHAR_CREATE_LEVEL_REQUIREMENT;
         SendPacket( &data );
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 927348e..cf7d562 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -4468,7 +4468,7 @@ bool ChatHandler::HandleResetLevelCommand(const char * args)
         return false;
 
     // set starting level
-    uint32 start_level = target->getClass() != CLASS_DEATH_KNIGHT
+    uint32 start_level = (target->getClass() != CLASS_DEATH_KNIGHT && target->getClass() != CLASS_SPIRIT)
         ? sWorld.getConfig(CONFIG_UINT32_START_PLAYER_LEVEL)
         : sWorld.getConfig(CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL);
 
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index 50394de..f07d8be 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -3006,6 +3006,13 @@ void ObjectMgr::BuildPlayerLevelInfo(uint8 race, uint8 _class, uint8 level, Play
                 info->stats[STAT_INTELLECT] += (lvl > 33 ? 2: (lvl > 2 ? 1: 0));
                 info->stats[STAT_SPIRIT]    += (lvl > 38 ? 2: (lvl > 3 ? 1: 0));
                 break;
+            case CLASS_SPIRIT:
+                info->stats[STAT_STRENGTH]  += (lvl > 9 && !(lvl%2) ? 1: 0);
+                info->stats[STAT_STAMINA]   += (lvl > 5  ? 1: 0);
+                info->stats[STAT_AGILITY]   += (lvl > 9 && !(lvl%2) ? 1: 0);
+                info->stats[STAT_INTELLECT] += (lvl > 24 ? 2: (lvl > 1 ? 1: 0));
+                info->stats[STAT_SPIRIT]    += (lvl > 33 ? 2: (lvl > 2 ? 1: 0));
+                break;
             case CLASS_DRUID:
                 info->stats[STAT_STRENGTH]  += (lvl > 38 ? 2: (lvl > 6 && (lvl%2) ? 1: 0));
                 info->stats[STAT_STAMINA]   += (lvl > 32 ? 2: (lvl > 4 ? 1: 0));
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index dfa19ac..cf624b2 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -619,7 +619,7 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8
     SetUInt32Value( PLAYER_FIELD_YESTERDAY_CONTRIBUTION, 0 );
 
     // set starting level
-    uint32 start_level = getClass() != CLASS_DEATH_KNIGHT
+    uint32 start_level = (getClass() != CLASS_DEATH_KNIGHT && getClass() != CLASS_SPIRIT)
         ? sWorld.getConfig(CONFIG_UINT32_START_PLAYER_LEVEL)
         : sWorld.getConfig(CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL);
 
@@ -1517,7 +1517,7 @@ bool Player::BuildEnumData( QueryResult * result, WorldPacket * p_data )
         uint32 petFamily  = 0;
 
         // show pet at selection character in character list only for non-ghost character
-        if (result && !(playerFlags & PLAYER_FLAGS_GHOST) && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT))
+        if (result && !(playerFlags & PLAYER_FLAGS_GHOST) && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT || pClass == CLASS_SPIRIT))
         {
             uint32 entry = fields[16].GetUInt32();
             CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(entry);
@@ -4984,7 +4984,7 @@ float Player::GetDodgeFromAgility()
          0.0167f,   // Shaman
          0.034575f, // Mage
          0.02011f,  // Warlock
-         0.0f,      // ??
+         0.034575f, // Spiritualist
         -0.0187f    // Druid
     };
     // Crit/agility to dodge/agility coefficient multipliers
@@ -4998,7 +4998,7 @@ float Player::GetDodgeFromAgility()
          1.0f,      // Shaman
          1.0f,      // Mage
          1.0f,      // Warlock
-         0.0f,      // ??
+         1.0f,      // Spiritualist
          1.7f       // Druid
     };
 
@@ -20909,7 +20909,7 @@ uint32 Player::CalculateTalentsPoints() const
 {
     uint32 base_talent = getLevel() < 10 ? 0 : getLevel()-9;
 
-    if(getClass() != CLASS_DEATH_KNIGHT)
+    if(getClass() != CLASS_DEATH_KNIGHT && getClass() != CLASS_SPIRIT)
         return uint32(base_talent * sWorld.getConfig(CONFIG_FLOAT_RATE_TALENT));
 
     uint32 talentPointsForLevel = getLevel() < 56 ? 0 : getLevel() - 55;
@@ -21013,6 +21013,29 @@ void Player::_LoadSkills(QueryResult *result)
     }
 
     // special settings
+    if(getClass()==CLASS_SPIRIT)
+    {
+        uint32 base_level = std::min(getLevel(),sWorld.getConfig (CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL));
+        if(base_level < 1)
+            base_level = 1;
+        uint32 base_skill = (base_level-1)*5;
+        if(base_skill < 1)
+            base_skill = 1;
+
+        if(GetPureSkillValue (SKILL_FIRST_AID) < base_skill)
+            SetSkill(SKILL_FIRST_AID, base_skill, base_skill);
+        if(GetPureSkillValue (SKILL_DEFENSE) < base_skill)
+            SetSkill(SKILL_DEFENSE, base_skill, base_skill);
+        if(GetPureSkillValue (SKILL_WANDS) < base_skill)
+            SetSkill(SKILL_WANDS, base_skill, base_skill);
+        if(GetPureSkillValue (SKILL_DAGGERS) < base_skill)
+            SetSkill(SKILL_DAGGERS, base_skill, base_skill);
+        if(GetPureSkillValue (SKILL_2H_MACES) < base_skill)
+            SetSkill(SKILL_2H_MACES, base_skill, base_skill);
+        if(GetPureSkillValue (SKILL_UNARMED) < base_skill)
+            SetSkill(SKILL_UNARMED, base_skill, base_skill);
+    }
+
     if(getClass()==CLASS_DEATH_KNIGHT)
     {
         uint32 base_level = std::min(getLevel(),sWorld.getConfig (CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL));
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index d1d792f..91a2bd5 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -78,7 +78,7 @@ enum Classes
     CLASS_SHAMAN        = 7,
     CLASS_MAGE          = 8,
     CLASS_WARLOCK       = 9,
-    // CLASS_UNK2       = 10,unused
+    CLASS_SPIRIT        = 10,
     CLASS_DRUID         = 11,
 };
 
@@ -89,11 +89,11 @@ enum Classes
     ((1<<(CLASS_WARRIOR-1))|(1<<(CLASS_PALADIN-1))|(1<<(CLASS_HUNTER-1))|
     (1<<(CLASS_ROGUE-1))  |(1<<(CLASS_PRIEST-1)) |(1<<(CLASS_SHAMAN-1))|
     (1<<(CLASS_MAGE-1))   |(1<<(CLASS_WARLOCK-1))|(1<<(CLASS_DRUID-1)) |
-    (1<<(CLASS_DEATH_KNIGHT-1)) )
+    (1<<(CLASS_SPIRIT-1)) |(1<<(CLASS_DEATH_KNIGHT-1)) )
 
 #define CLASSMASK_ALL_CREATURES ((1<<(CLASS_WARRIOR-1)) | (1<<(CLASS_PALADIN-1)) | (1<<(CLASS_ROGUE-1)) | (1<<(CLASS_MAGE-1)) )
 
-#define CLASSMASK_WAND_USERS ((1<<(CLASS_PRIEST-1))|(1<<(CLASS_MAGE-1))|(1<<(CLASS_WARLOCK-1)))
+#define CLASSMASK_WAND_USERS ((1<<(CLASS_PRIEST-1))|(1<<(CLASS_MAGE-1))|(1<<(CLASS_WARLOCK-1))|(1<<(CLASS_SPIRIT-1)))
 
 #define PLAYER_MAX_BATTLEGROUND_QUEUES 2
 
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 9c8a1a8..36362d0 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -1615,8 +1615,9 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
                             break;
                         case CLASS_PRIEST:
                         case CLASS_MAGE:
+                        case CLASS_SPIRIT:
                         case CLASS_WARLOCK:
-                            spell_id = 67016;               // SPD for Priests, Mages, Warlocks
+                            spell_id = 67016;               // SPD for Priests, Mages, Warlocks, Spiritualists
                             break;
                         case CLASS_SHAMAN:
                             // random (SPD, AP)
diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp
index 9440217..cfa420c 100644
--- a/src/game/StatSystem.cpp
+++ b/src/game/StatSystem.cpp
@@ -340,6 +340,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged )
             case CLASS_MAGE:    val2 =              GetStat(STAT_STRENGTH)                         - 10.0f; break;
             case CLASS_PRIEST:  val2 =              GetStat(STAT_STRENGTH)                         - 10.0f; break;
             case CLASS_WARLOCK: val2 =              GetStat(STAT_STRENGTH)                         - 10.0f; break;
+            case CLASS_SPIRIT:  val2 =              GetStat(STAT_STRENGTH)                         - 10.0f; break;
         }
     }
 
@@ -881,7 +882,7 @@ bool Pet::UpdateStats(Stats stat)
                                                             //warlock's and mage's pets gain 30% of owner's intellect
     else if ( stat == STAT_INTELLECT && getPetType() == SUMMON_PET )
     {
-        if(owner && (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_MAGE) )
+        if(owner && (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_MAGE || owner->getClass() == CLASS_SPIRIT) )
             value += float(owner->GetStat(stat)) * 0.3f;
     }
 
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 680567f..36d2951 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -1512,6 +1512,7 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da
                 case CLASS_SHAMAN:
                 case CLASS_PRIEST:
                 case CLASS_MAGE:
+                case CLASS_SPIRIT:
                 case CLASS_WARLOCK:
                 case CLASS_DRUID:
                     baseLowEnd  -= 0.7f;
@@ -5311,6 +5312,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
                         case CLASS_PRIEST:                  // 40999,41002,41005,41009,41011,41406,41409
                         case CLASS_SHAMAN:                  // 40999,41002,41005,41009,41011,41406,41409
                         case CLASS_MAGE:                    // 40999,41002,41005,41009,41011,41406,41409
+                        case CLASS_SPIRIT:                  // 40999,41002,41005,41009,41011,41406,41409
                         case CLASS_WARLOCK:                 // 40999,41002,41005,41009,41011,41406,41409
                         {
                             uint32 RandomSpell[]={40999,41002,41005,41009,41011,41406,41409};
@@ -6365,6 +6367,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
                             triggered_spell_id = 28795;     // Increases the friendly target's mana regeneration by $s1 per 5 sec. for $d.
                             break;
                         case CLASS_MAGE:
+                        case CLASS_SPIRIT:
                         case CLASS_WARLOCK:
                             triggered_spell_id = 28793;     // Increases the friendly target's spell damage and healing by up to $s1 for $d.
                             break;
@@ -6585,6 +6588,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
                             triggered_spell_id = 28824;     // Increases the friendly target's mana regeneration by $s1 per 5 sec. for $d.
                             break;
                         case CLASS_MAGE:
+                        case CLASS_SPIRIT:
                         case CLASS_WARLOCK:
                             triggered_spell_id = 28825;     // Increases the friendly target's spell damage and healing by up to $s1 for $d.
                             break;

Voici également un tableau open office avec ce qui était prévu pour les sorts :
Liste des sorts

Et enfin quelques requêtes en vrac :
Code: [Select]
-- Cimetière
DELETE FROM `game_graveyard_zone` WHERE id = 18000;
INSERT INTO `game_graveyard_zone` (`id`, `ghost_zone`, `faction`) VALUES (1800, 6000, 0);

-- Text
INSERT INTO npc_text (ID, text0_0) VALUES (40000, 'Je ne peux vous entraîner, retounez à Esperita, quelqu''un pourra s''occuper de vous.');

-- Start Position
DELETE FROM `playercreateinfo` WHERE `class` = 10;
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (1, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (6, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (10, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (11, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);

-- SpellChain
/* Connaissances astrales */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85000, 85001, 85002, 85003, 85004, 85005);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85000, 0, 85000, 1, 0),
(85001, 85000, 85000, 2, 0),
(85002, 85001, 85000, 3, 0),
(85003, 85002, 85000, 4, 0),
(85004, 85003, 85000, 5, 0),
(85005, 85004, 85000, 6, 0);

/* Invocations (mineure -> normale -> majeure) */
/* Vent */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85006, 85007, 85008);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85006, 0, 85006, 1, 0),
(85007, 85006, 85006, 2, 0),
(85008, 85007, 85006, 3, 0);

/* Terre */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85009, 85010, 85011);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85009, 0, 85009, 1, 0),
(85010, 85009, 85009, 2, 0),
(85011, 85010, 85009, 3, 0);

/* Eau */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85012, 85013, 85014);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85012, 0, 85012, 1, 0),
(85013, 85012, 85012, 2, 0),
(85014, 85013, 85012, 3, 0);

/* Feu */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85015, 85016, 85017);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85015, 0, 85015, 1, 0),
(85016, 85015, 85015, 2, 0),
(85017, 85016, 85015, 3, 0);

/* Ombre */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85018, 85019, 85020);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85018, 0, 85018, 1, 0),
(85019, 85018, 85018, 2, 0),
(85020, 85019, 85018, 3, 0);
/* Fin invocations */

/* Projections arcaniques */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85028, 85030, 85032, 85034, 85036, 85038);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85028, 0, 85028, 1, 0),
(85030, 85028, 85028, 2, 0),
(85032, 85030, 85028, 3, 0),
(85034, 85032, 85028, 4, 0),
(85036, 85034, 85028, 5, 0),
(85038, 85036, 85028, 6, 0);

/* Fouet arcanique */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85040, 85041, 85042, 85043);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85040, 0, 85040, 1, 0),
(85041, 85040, 85040, 2, 0),
(85042, 85041, 85040, 3, 0),
(85043, 85042, 85040, 4, 0);

-- SpellTargetPosition
DELETE FROM `spell_target_position` WHERE `id` = 85006;
INSERT INTO `spell_target_position` (`id`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES (85006, 1, 7231.335938, -3366.374512, 1006.4, 4.46);

Code: [Select]
-- Portail Esperita
DELETE FROM `gameobject_template` WHERE `entry` = 500000;
DELETE FROM `locales_gameobject` WHERE `entry` = 500000;
INSERT INTO `locales_gameobject` (`entry`, `name_loc2`) VALUES (500000, 'Portail vers Esperita');
INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `data0`, `data2`, `data3`) VALUES (500000, 22, 4394, 'Portal to Esperita', 85027, 1, 1);

/*
*   Spell : Invocation d'un esprit du feu majeur
*/

/* SQL */
DELETE FROM `creature_template`
    WHERE `entry` = 60002;
INSERT INTO `creature_template`
    (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_A`, `modelid_A2`,
     `modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`,
     `maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`,
     `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`,
     `trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`,
     `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`,
     `spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`,
     `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`,
     `mechanic_immune_mask`, `flags_extra`, `ScriptName`)
VALUES
    (60002, 0, 0, 0, 0, 0, 25680, 0, 25680, 0, 'Esprit du feu majeur', '', '', 0, 1, 1, 1, 1, 0, 0, 3396, 35, 35, 0, 1.1, 1.14286, 1, 0, 300,
     400, 0, 1000, 3.5, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 69, 101, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 3, 0.25, 1,
     0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8388624, 0, '');

/*
*   Spell : Appel des esprits mineurs
*/

/* SQL */
DELETE FROM `creature_template`
    WHERE `entry` = 60001;
   
INSERT INTO `creature_template`
    (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_A`, `modelid_A2`,
     `modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`,
     `maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`,
     `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`,
     `trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`,
     `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`,
     `spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`,
     `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`,
     `mechanic_immune_mask`, `flags_extra`, `ScriptName`)
VALUES
    (60001, 0, 0, 0, 0, 0, 20594, 1824, 20594, 1824, 'Esprit mineur ', '', '', 0, 1, 1, 1, 1, 0, 0, 7, 35, 35, 0, 1, 1.14286, 1, 0, 2, 2, 0,
     24, 1, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 3, 0.301265, 1, 0, 0, 0, 0,
     0, 0, 0, 0, 1, 0, 8388624, 0, '');

/*
*   Spell : Invocation d'un esprit du vent mineur
*/

/* SQL */
DELETE FROM `creature_template`
    WHERE `entry` = 60000;
INSERT INTO `creature_template`
    (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_A`, `modelid_A2`,
     `modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`,
     `maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`,
     `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`,
     `trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`,
     `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`,
     `spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`,
     `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`,
     `mechanic_immune_mask`, `flags_extra`, `ScriptName`)
VALUES
    (60000, 0, 0, 0, 0, 0, 18245, 0, 18245, 0, 'Esprit du vent mineur', '', '', 0, 1, 1, 1, 1, 0, 0, 3396, 35, 35, 0, 1.1, 1.14286, 1, 0,
     300, 400, 0, 1000, 3.5, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 69, 101, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 3,
     0.25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8388624, 0, '');
Il en manque pas mal mais ça va être à vous de compléter ^^".


Au niveau des sorts, il y a ceci (tiré des dbcs donc pas top le format) :
  • 85000, Connaissances astrales, Rang 1, Augmente l'Intelligence de la cible de $s1 pendant $d.,
  • 85001, Connaissances astrales, Rang 2, Augmente l'Intelligence de la cible de $s1 pendant $d.,
  • 85002, Connaissances astrales, Rang 3, Augmente l'Intelligence de la cible de $s1 pendant $d.,
  • 85003, Connaissances astrales, Rang 4, Augmente l'Intelligence de la cible de $s1 pendant $d.,
  • 85004, Connaissances astrales, Rang 5, Augmente l'Intelligence de la cible de $s1 pendant $d.,
  • 85005, Connaissances astrales, Rang 6, Augmente l'Intelligence de la cible de $s1 pendant $d.,
  • 85055, Invocation d'un esprit du vent mineur, Rang 1, Invoque $s1 $lEsprit du vent mineur:Esprits du vent mineurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85068, Invocation d'un esprit du vent, Rang 2, Invoque $s1 $lEsprit du vent:Esprits du vent; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85078, Invocation d'un esprit du vent majeur, Rang 3, Invoque $s1 $lEsprit du vent majeur:Esprits du vent majeurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85058, Invocation d'un esprit de le terre mineur, Rang 1, Invoque $s1 $lEsprit de le terre mineur:Esprits de le terre mineurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85010, Invocation d'un esprit de le terre, Rang 2, Invoque $s1 $lEsprit de le terre:Esprits de le terre; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85011, Invocation d'un esprit de le terre majeur, Rang 3, Invoque $s1 $lEsprit de le terre majeur:Esprits de le terre majeurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85012, Invocation d'un esprit de l'eau mineur, Rang 1, Invoque $s1 $lEsprit de l'eau mineur:Esprits de l'eau mineurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85013, Invocation d'un esprit de l'eau, Rang 2, Invoque $s1 $lEsprit de l'eau:Esprits de l'eau; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85014, Invocation d'un esprit de l'eau majeur, Rang 3, Invoque $s1 $lEsprit de l'eau majeur:Esprits de l'eau majeurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85015, Invocation d'un esprit du feu mineur, Rang 1, Invoque $s1 $lEsprit du feu mineur:Esprits du feu mineurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85016, Invocation d'un esprit du feu, Rang 2, Invoque $s1 $lEsprit du feu:Esprits du feu; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85017, Invocation d'un esprit du feu majeur, Rang 3, Invoque $s1 $lEsprit du feu majeur:Esprits du feu majeurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85018, Invocation d'un esprit de l'ombre mineur, Rang 1, Invoque $s1 $lEsprit de l'ombre mineur:Esprits de l'ombre mineurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85019, Invocation d'un esprit de l'ombre, Rang 2, Invoque $s1 $lEsprit de l'ombre:Esprits de l'ombre; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85020, Invocation d'un esprit de l'ombre majeur, Rang 3, Invoque $s1 $lEsprit de l'ombre majeur:Esprits de l'ombre majeurs; pour accompagner le lanceur de sorts. Dure jusqu'au renvoi.,
  • 85021, Appel des esprits mineurs, Rang 1, Fait appel à de nombreux esprits mineurs vous aidant à combattre., Invocation d'esprits.,
  • 85022, Appel des esprits mineurs, Fait appel à de nombreux esprits mineurs vous aidant à combattre.,
  • 85023, Appel des esprits, Rang 2, Fait appel à de nombreux esprits vous aidant à combattre., Invocation d'esprits.,
  • 85024, Appel des esprits, Fait appel à de nombreux esprits vous aidant à combattre.,
  • 85025, Monde des esprits, Vous transporte dans le monde des esprits pendant 3 minutes., Vous êtes dans le monde des esprits.,
  • 85026, Portail : Esperita, Crée un portail qui téléporte les membres du groupe qui l'empruntent à Esperita.,
  • 85027, Effet portail : Esperita,
  • 85028, Projections arcaniques, Rang 1, Lance des projectiles des arcanes sur l'ennemi et lui inflige $10274s1 points de dégâts des Arcanes toutes les $10212t2 sec. pendant $10212d.,
  • 85029, Projections arcaniques, Rang 1, Lance des projectiles des arcanes sur l'ennemi et lui inflige $10274s1 points de dégâts des Arcanes toutes les $10212t2 sec. pendant $10212d.,
  • 85030, Projections arcaniques, Rang 2, Lance des projectiles des arcanes sur l'ennemi et lui inflige $25346s1 points de dégâts des Arcanes toutes les $25345t2 sec. pendant $25345d.,
  • 85031, Projections arcaniques, Rang 2, Lance des projectiles des arcanes sur l'ennemi et lui inflige $25346s1 points de dégâts des Arcanes toutes les $25345t2 sec. pendant $25345d.,
  • 85032, Projections arcaniques, Rang 3, Lance des projectiles des arcanes sur l'ennemi et lui inflige $27076s1 points de dégâts des Arcanes toutes les $t2 sec. pendant $d.,
  • 85033, Projections arcaniques, Rang 3, Lance des projectiles des arcanes sur l'ennemi et lui inflige $27076s1 points de dégâts des Arcanes toutes les $27075t2 sec. pendant $27075d.,
  • 85034, Projections arcaniques, Rang 4, Lance des projectiles des arcanes sur l'ennemi et lui inflige $38703s1 points de dégâts des Arcanes toutes les $t2 sec. pendant $d.,
  • 85035, Projections arcaniques, Rang 4, Lance des projectiles des arcanes sur l'ennemi et lui inflige $38703s1 points de dégâts des Arcanes toutes les $38704t2 sec. pendant $38704d.,
  • 85036, Projections arcaniques, Rang 5, Lance des projectiles des arcanes sur l'ennemi et lui inflige $42844s1 points de dégâts des Arcanes toutes les $t2 sec. pendant $d.,
  • 85037, Projections arcaniques, Rang 5, Lance des projectiles des arcanes sur l'ennemi et lui inflige $42844s1 points de dégâts des Arcanes toutes les $42843t2 sec. pendant $42843d.,
  • 85038, Projections arcaniques, Rang 6, Lance des projectiles des arcanes sur l'ennemi et lui inflige $42845s1 points de dégâts des Arcanes toutes les $t2 sec. pendant $d.,
  • 85039, Projections arcaniques, Rang 6, Lance des projectiles des arcanes sur l'ennemi et lui inflige $42845s1 points de dégâts des Arcanes toutes les $42846t2 sec. pendant $42846d.,
  • 85040, Fouet arcanique, Rang 1, Attaque l'esprit de la cible avec l'énergie des Arcanes. Inflige ${$m3*3} points de dégâts des Arcanes en $d. et réduit la vitesse de la cible de $s2%., Vitesse de déplacement réduite.,
  • 85041, Fouet arcanique, Rang 2, Attaque l'esprit de la cible avec l'énergie des Arcanes. Inflige ${$m3*3} points de dégâts des Arcanes en $d. et réduit la vitesse de la cible de $s2%., Vitesse de déplacement réduite.,
  • 85042, Fouet arcanique, Rang 3, Attaque l'esprit de la cible avec l'énergie des Arcanes. Inflige ${$m3*3} points de dégâts des Arcanes en $d. et réduit la vitesse de la cible de $s2%., Vitesse de déplacement réduite.,
  • 85043, Fouet arcanique, Rang 4, Attaque l'esprit de la cible avec l'énergie des Arcanes. Inflige ${$m3*3} points de dégâts des Arcanes en $d. et réduit la vitesse de la cible de $s2%., Vitesse de déplacement réduite.,
  • 85044, Invocation d'un esprit du vent mineur, Rang 1,
  • 85045, Invocation d'un esprit du vent, Rang 2,
  • 85046, Invocation d'un esprit du vent majeur, Rang 3,
  • 85047, Invocation d'un esprit de le terre mineur, Rang 1,
  • 85048, Invocation d'un esprit de le terre, Rang 2,
  • 85049, Invocation d'un esprit de le terre majeur, Rang 3,
  • 85050, Invocation d'un esprit de l'eau mineur, Rang 1,
  • 85051, Invocation d'un esprit de l'eau, Rang 2,
  • 85052, Invocation d'un esprit de l'eau majeur, Rang 3,
  • 85053, Invocation d'un esprit du feu mineur, Rang 1,
  • 85054, Invocation d'un esprit du feu, Rang 2,
  • 85055, Invocation d'un esprit du feu majeur, Rang 3,
  • 85056, Invocation d'un esprit de l'ombre mineur, Rang 1,
  • 85057, Invocation d'un esprit de l'ombre, Rang 2,
  • 85058, Invocation d'un esprit de l'ombre majeur, Rang 3,
  • 85059, Appel des esprits mineurs, Rang 1,
  • 85060, Appel des esprits, Rang 2,
  • 85061, Monde des esprits, Changement de monde,
  • 85062, Portail : Esperita, Portail de téléportation,

Have fun and thanks to her
« Last Edit: January 01, 1970, 01:00:00 am by Admin »

Night

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 12
    • View Profile
Re: New class?
« Reply #16 on: April 26, 2012, 08:41:45 pm »
Hey, thanks for posting this, but actually there aren't any new serverside changes that I haven't done and still it crashes once I'm opening the characters menu.
Does this guide work for you?

While searching for the old bug I've mentioned, I just found this macro on some other forum:
Code: [Select]
/console PlayerStatLeftDropDown none
/console PlayerStatRightDropDown none
/reload
This will clear the selection of the status dropdowns, so it doesn't crash right away. But once you select any option in it, it will crash.
I know this is no solution, but someone in that thread said this is an client side problem. Can anybody confirm this? Because then I will completly stop looking for the problem serverside (haven't looked into the druid problem at all, so I can't even tell if they are related).

So, for now I will start digging for it clientside. Maybe I can find that damn bug and squash it!
« Last Edit: January 01, 1970, 01:00:00 am by Admin »

Jivy

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 11
    • View Profile
Re: New class?
« Reply #17 on: April 27, 2012, 12:20:59 am »
Have you edited all gt*.dbc ?
« Last Edit: January 01, 1970, 01:00:00 am by Admin »

Night

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 12
    • View Profile
Re: New class?
« Reply #18 on: April 27, 2012, 07:16:25 pm »
Quote from: "Jivy"
Have you edited all gt*.dbc ?
Not yet. I've opened them, but the numbers appear to be random and I can't find any documentation for these files.
I'll take a look at it, thanks.
« Last Edit: January 01, 1970, 01:00:00 am by Admin »

Jivy

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 11
    • View Profile
Re: New class?
« Reply #19 on: April 27, 2012, 07:36:08 pm »
Hi,

It's coeff for each class for 100 levels.
Line 1 -> 100 : Class id 1 (lvl 1 to 100)
Line 101 -> 200 : Class id 2 (lvl 1 to 100)
etc...
I just copy/paste numbers from another - similar - class at the right place.

Greetings
« Last Edit: January 01, 1970, 01:00:00 am by Admin »

Night

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 12
    • View Profile
Re: New class?
« Reply #20 on: April 27, 2012, 10:21:11 pm »
Quote from: "Jivy"
Hi,

It's coeff for each class for 100 levels.
Line 1 -> 100 : Class id 1 (lvl 1 to 100)
Line 101 -> 200 : Class id 2 (lvl 1 to 100)
etc...
I just copy/paste numbers from another - similar - class at the right place.

Greetings

Aaah, I see! But are you sure about that? gtChanceToMeleeCrit.dbc for example has 1100 entries which means there must be 11 classes, but in fact there are only 10 by default! So this could mean that they just count up and fill the infos for the non existing class anyway, but that doesn't seem to be the case for all dbcs!

Lets take a look at the gt* files:

gtBarberShopCostBase.dbc: 100 entries  
- 10 per class for 10 classes
- 9,0909... per class for 11 classes

gtChanceToMeleeCrit.dbc: 1100 entries
- 110 per class for 10 classes
- 100 per class for 11 classes

gtChanceToMeleeCritBase.dbc 11 entries
- 1,1 per class for 10 classes
- 1 per class for 11 classes

gtChanceToSpellCrit.dbc: 1100 entries
- 110 per class for 10 classes
- 100 per class for 11 classes

gtChanceToSpellCritBase.dbc: 11 entries
- 1,1 per class for 10 classes
- 1 per class for 11 classes

gtCombatRatings.dbc: 3200 entries
- 320 per class for 10 classes
- 290,9090... per class for 11 classes

gtNPCManaCostScaler.dbc: 100 entries
- 10 per class for 10 classes
- 9,0909... per class for 11 classes

gtOCTClassCombatRatingScalar.dbc: 352 entries
- 35,2 per class for 10 classes
- 32 per class for 11 classes

gtOCTRegenHP: 1100 entries
- 110 per class for 10 classes
- 100 per class for 11 classes

gtOCTRegenMP: 1100 entries
- 110 per class for 10 classes
- 100 per class for 11 classes

gtRegenHPPerSpt.dbc: 1100 entries
- 110 per class for 10 classes
- 100 per class for 11 classes

gtRegenMPPerSpt.dbc: 1100 entries
- 110 per class for 10 classes
- 100 per class for 11 classes


So obviously none of them does always apply! This could mean that none of them are correct.
Let me check it out.


--- imagine it's about half an hour later :P ---

Alright, I've added everywhere I can numEntries/11 entries. If the result was a decimal digit I've taken numEntries/10 entries.
And it actually worked, well kinda. I'm now able to look at my characters base stats but everything else will still crash the game. Why is that? Well my guess is that I should have taken everywhere the numEntries/10 entries and now some entries are missing.

http://imagr.eu/up/4f9aff44d00455_WoWSc ... 220401.jpg


Thats all from me for today, I really hope I can get this done tomorrow. And again, thank you very much, Jivy!


cheers
« Last Edit: January 01, 1970, 01:00:00 am by Admin »

Jivy

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 11
    • View Profile
Re: New class?
« Reply #21 on: April 27, 2012, 11:17:33 pm »
Hi Night, it's a pleasure to help.

And you're right about differents gt*, it's not always 100 entries by class. And Wow have only 10 classes BUT druid have id 11 and id 10 is unused, so the logic of 100 (or 10 or something else) entries by class is ok.

You can check modifications of Khira in her MPQ, the class works fine.

Have fun.
« Last Edit: January 01, 1970, 01:00:00 am by Admin »

Leor

  • Registred Member
  • BLP Convertor
  • *****
  • Posts: 11
    • View Profile
Re: New class?
« Reply #22 on: February 25, 2014, 01:52:55 pm »
Hi, does anyone have this patch ? wow.model-changing.com is dead.
Please, re-upload it or send it by Mp.

Thank's
« Last Edit: January 01, 1970, 01:00:00 am by Admin »