All pastes #619486 Raw Edit

Stuff

public text v1 · immutable
·published 2007-07-14 19:45 UTC
rendered paste body
Index: src/game/Creature.h
===================================================================
--- src/game/Creature.h	(revision 4097)
+++ src/game/Creature.h	(working copy)
@@ -218,6 +218,7 @@
     char const* AIName;
     uint32  MovementType;
     uint32 InhabitType;
+    uint32 SpellDataId;
     char const* ScriptName;
 
     uint32 randomDisplayID() const;
Index: src/game/ObjectMgr.cpp
===================================================================
--- src/game/ObjectMgr.cpp	(revision 4097)
+++ src/game/ObjectMgr.cpp	(working copy)
@@ -1973,7 +1973,7 @@
                 {
                     if(db_node->skill != dbc_node.skill)
                         sLog.outErrorDb("Spell %u auto-learn skill %u in spell.dbc but learn skill %u in `spell_learn_skill`, fix DB.",
-                            spell,dbc_node.skill,db_node->skill);
+                        spell,dbc_node.skill,db_node->skill);
 
                     continue;                               // skip already added spell-skill pair
                 }
@@ -2091,6 +2091,7 @@
 
 void ObjectMgr::LoadPetCreateSpells()
 {
+    /*
     QueryResult *result = sDatabase.PQuery("SELECT `entry`, `Spell1`, `Spell2`, `Spell3`, `Spell4`,`FamilyPassive` FROM `petcreateinfo_spell`");
     if(!result)
     {
@@ -2140,7 +2141,7 @@
     delete result;
 
     sLog.outString( "" );
-    sLog.outString( ">> Loaded %u pet create spells", count );
+    sLog.outString( ">> Loaded %u pet create spells", count );*/
 }
 
 void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename)
Index: src/game/Pet.cpp
===================================================================
--- src/game/Pet.cpp	(revision 4097)
+++ src/game/Pet.cpp	(working copy)
@@ -405,36 +405,6 @@
     }
 }
 
-/*void Pet::SendPetQuery()
-{
-    Unit *player = GetOwner();
-    if(player->GetTypeId() != TYPEID_PLAYER)
-        return;
-    char *subname = "Pet";
-    CreatureInfo *ci = objmgr.GetCreatureTemplate(GetEntry());
-
-    WorldPacket data( SMSG_CREATURE_QUERY_RESPONSE, 4+m_name.size()+1+3+strlen(subname)+1+4+4+4+4+4+4+4+2);
-    data << (uint32)GetEntry();
-    data << m_name.c_str();
-    data << uint8(0) << uint8(0) << uint8(0);
-    data << subname;
-
-    uint32 wdbFeild11=0,wdbFeild12=0;
-
-    data << ci->flag1;                                      //flags          wdbFeild7=wad flags1
-    data << uint32(ci->type);                               //creatureType   wdbFeild8
-    data << (uint32)ci->family;                             //family         wdbFeild9
-    data << (uint32)ci->rank;                               //rank           wdbFeild10
-    data << (uint32)wdbFeild11;                             //unknow         wdbFeild11
-    data << (uint32)wdbFeild12;                             //unknow         wdbFeild12
-    data << ci->DisplayID;                                  //DisplayID      wdbFeild13
-
-    data << (uint16)ci->civilian;                           //wdbFeild14
-
-    player->GetSession()->SendPacket( &data );
-}
-*/
-
 void Pet::setDeathState(DeathState s)                       // overwrite virtual Creature::setDeathState and Unit::setDeathState
 {
     Creature::setDeathState(s);
@@ -1492,61 +1462,57 @@
 
 void Pet::InitPetCreateSpells()
 {
-	for(uint32 i = 0; i < 3; i++)	//init pet action bar
+    for(uint32 i = 0; i < 3; i++)	//init pet action bar
     {
-		PetActionBar[i].Type = ACT_COMMAND;
-		PetActionBar[i].SpellOrAction = 2 - i;
+        PetActionBar[i].Type = ACT_COMMAND;
+        PetActionBar[i].SpellOrAction = 2 - i;
 
-		PetActionBar[i + 7].Type = ACT_REACTION;
-		PetActionBar[i + 7].SpellOrAction = 2 - i;
-	}
-	for(uint32 i=0; i < 4; i++)		//init pet action bar
-	{
+        PetActionBar[i + 7].Type = ACT_REACTION;
+        PetActionBar[i + 7].SpellOrAction = 2 - i;
+    }
+
+    for(uint32 i=0; i < 4; i++)		//init pet action bar
+    {
         PetActionBar[i + 3].Type = ACT_DISABLED;
         PetActionBar[i + 3].SpellOrAction = 0;
- 	}
+    }
 
-	m_spells.clear();
-	int32 usedtrainpoints = 0, petspellid;
-    PetCreateSpellEntry const* CreateSpells = objmgr.GetPetCreateSpellEntry(GetEntry());
-	if(CreateSpells)
-	{
-		for(uint8 i = 0; i < 4; i++)
-		{
-			if(!CreateSpells->spellid[i])
-				break;
+    m_spells.clear();
+    int32 usedtrainpoints = 0, petspellid;
+    CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(GetEntry());
+    if(cInfo)
+    {
+        CreatureSpellDataEntry const* CreateSpells =  sCreatureSpellDataStore.LookupEntry(cInfo->SpellDataId);
+        if (CreateSpells)
+        {
+            for(uint8 i = 0; i < 4; i++)
+            {
+                SpellEntry const *learn_spellproto = sSpellStore.LookupEntry(CreateSpells->spellid[i]);
+                if(!learn_spellproto)
+                    continue;
 
-			SpellEntry const *learn_spellproto = sSpellStore.LookupEntry(CreateSpells->spellid[i]);
-			if(!learn_spellproto)
-				continue;
+                petspellid = learn_spellproto->Id;
+                if(GetOwner()->GetTypeId() == TYPEID_PLAYER && !((Player*)GetOwner())->HasSpell(petspellid))
+                {
+                    AddTeachSpell(petspellid, CreateSpells->spellid[i]);
+                }
+                PetActionBar[i + 3].Type = ACT_ENABLED;
+                PetActionBar[i + 3].SpellOrAction = petspellid;
+                addSpell(petspellid,ACT_ENABLED);
 
-			if(learn_spellproto->Effect[0] == SPELL_EFFECT_LEARN_SPELL || learn_spellproto->Effect[0] == SPELL_EFFECT_LEARN_PET_SPELL)
-			{
-				petspellid = learn_spellproto->EffectTriggerSpell[0];
-				if(GetOwner()->GetTypeId() == TYPEID_PLAYER && !((Player*)GetOwner())->HasSpell(learn_spellproto->Id))
-				{
-					if(IsPassiveSpell(petspellid)) //learn passive skills when tamed, not sure if thats right
-						((Player*)GetOwner())->learnSpell(learn_spellproto->Id);
-					else
-						AddTeachSpell(learn_spellproto->EffectTriggerSpell[0], learn_spellproto->Id);
-				}
-			}
-			else
-				petspellid = learn_spellproto->Id;
-
-			addSpell(petspellid);
-
-			SkillLineAbilityEntry const *Ability = sSkillLineAbilityStore.LookupEntry(learn_spellproto->EffectTriggerSpell[0]);
-			if(Ability)
-				usedtrainpoints += Ability->reqtrainpoints;
-		}
-
-		//family passive
-		SpellEntry const *learn_spellproto = sSpellStore.LookupEntry(CreateSpells->familypassive);
-		if(learn_spellproto)
-			addSpell(CreateSpells->familypassive);
-	}
-	SetTP(-usedtrainpoints);
+                SkillLineAbilityEntry const *Ability = sSkillLineAbilityStore.LookupEntry(petspellid);
+                if(Ability)
+                    usedtrainpoints += Ability->reqtrainpoints;
+            }
+        
+            //family passive
+            uint32 familypassive = FamilyToPassiveSpell(cInfo->family);
+            SpellEntry const *learn_spellproto = sSpellStore.LookupEntry(familypassive);
+            if(learn_spellproto)
+                addSpell(familypassive);
+        }
+    }
+    SetTP(-usedtrainpoints);
 }
 
 void Pet::CheckLearning(uint32 spellid)
Index: src/game/Pet.h
===================================================================
--- src/game/Pet.h	(revision 4097)
+++ src/game/Pet.h	(working copy)
@@ -112,6 +112,44 @@
 	PET_TALK_ATTACK			= 1
 };
 
+inline uint32 FamilyToPassiveSpell(uint8 family)
+{
+    switch(family)
+    {
+        case CREATURE_FAMILY_WOLF:         return  17223;
+        case CREATURE_FAMILY_CAT:          return  17210;
+        case CREATURE_FAMILY_SPIDER:       return  17219;
+        case CREATURE_FAMILY_BEAR:         return  17208;
+        case CREATURE_FAMILY_BOAR:         return  7000;
+        case CREATURE_FAMILY_CROCILISK:    return  17212;
+        case CREATURE_FAMILY_CARRION_BIRD: return  17209;
+        case CREATURE_FAMILY_CRAB:         return  17211;
+        case CREATURE_FAMILY_GORILLA:      return  17214;
+        case CREATURE_FAMILY_RAPTOR:       return  17217;
+        case CREATURE_FAMILY_TALLSTRIDER:  return  17220;
+        case CREATURE_FAMILY_FELHUNTER:    return  0;
+        case CREATURE_FAMILY_VOIDWALKER:   return  0;
+        case CREATURE_FAMILY_SUCCUBUS:     return  0;
+        case CREATURE_FAMILY_DOOMGUARD:    return  0;
+        case CREATURE_FAMILY_SCORPID:      return  17218;
+        case CREATURE_FAMILY_TURTLE:       return  17221;
+        case CREATURE_FAMILY_IMP:          return  0;
+        case CREATURE_FAMILY_BAT:          return  17206;
+        case CREATURE_FAMILY_HYENA:        return  17215;
+        case CREATURE_FAMILY_OWL:          return  17216;
+        case CREATURE_FAMILY_WIND_SERPENT:   return  17222;
+        case CREATURE_FAMILY_REMOTE_CONTROL: return  0;
+        case CREATURE_FAMILY_FELGUARD:       return  0;
+        case CREATURE_FAMILY_DRAGONHAWK:    return  34887;
+        case CREATURE_FAMILY_RAVAGER:       return  35257;
+        case CREATURE_FAMILY_WARP_STALKER:  return  35254;
+        case CREATURE_FAMILY_SPOREBAT:      return  35258;
+        case CREATURE_FAMILY_NETHER_RAY:    return  35253;
+        case CREATURE_FAMILY_SERPENT:       return  35386;
+    }
+    return 0;
+}
+
 typedef HM_NAMESPACE::hash_map<uint16, PetSpell*> PetSpellMap;
 typedef std::map<uint32,uint32> TeachSpellMap;
 typedef std::set<uint32> AutoSpellList;
Index: src/game/PetHandler.cpp
===================================================================
--- src/game/PetHandler.cpp	(revision 4097)
+++ src/game/PetHandler.cpp	(working copy)
@@ -457,15 +457,15 @@
 			((Pet*)pet)->PetActionBar[i].SpellOrAction = 0;
 	}
 
-	//still keep passive
+	/*//still keep passive
 	PetCreateSpellEntry const* CreateSpells = objmgr.GetPetCreateSpellEntry(pet->GetEntry());
 	SpellEntry const *learn_spellproto = sSpellStore.LookupEntry(CreateSpells->familypassive);
 	if(learn_spellproto)
-		((Pet*)pet)->addSpell(CreateSpells->familypassive);
-	
+		((Pet*)pet)->addSpell(CreateSpells->familypassive);*/
 	((Pet*)pet)->m_resetTalentsTime = time(NULL);
 	((Pet*)pet)->m_resetTalentsCost = cost;
 	GetPlayer()->ModifyMoney(-(int32)cost);
+	((Pet*)pet)->InitPetCreateSpells();
 
     GetPlayer()->PetSpellInitialize();
 }
Index: src/game/QueryHandler.cpp
===================================================================
--- src/game/QueryHandler.cpp	(revision 4097)
+++ src/game/QueryHandler.cpp	(working copy)
@@ -148,13 +148,15 @@
     data << (uint32)ci->family;                             // family         wdbFeild9
     data << (uint32)(unit && unit->isPet() ? 0 : ci->rank); // rank           wdbFeild10
     data << uint32(0);                                      // unknown        wdbFeild11
-    data << uint32(0);                                      // unknown        wdbFeild12
+    data << (uint32)ci->SpellDataId;                        // SpellDataId    wdbFeild12
 
+    data << (uint32)ci->DisplayID_f;                        //DisplayID      wdbFeild13
+    /*wrong: in offi creaturecache.wdb DisplayID == ci->DisplayID_f
     if (unit)
         data << unit->GetUInt32Value(UNIT_FIELD_DISPLAYID); //DisplayID      wdbFeild13
     else
-        data << (uint32)ci->randomDisplayID();
-
+        data << (uint32)ci->randomDisplayID();*/
+    
     data << (float)1;                                       // unk
     data << (float)1;                                       // unk
     data << uint8(ci->civilian);
Index: src/shared/Database/Database.cpp
===================================================================
--- src/shared/Database/Database.cpp	(revision 4097)
+++ src/shared/Database/Database.cpp	(working copy)
@@ -101,4 +101,4 @@
     }
 
     return Execute(szQuery);
-}
\ No newline at end of file
+}
Index: src/shared/Database/DatabaseMysql.cpp
===================================================================
--- src/shared/Database/DatabaseMysql.cpp	(revision 4097)
+++ src/shared/Database/DatabaseMysql.cpp	(working copy)
@@ -383,4 +383,4 @@
     m_delayThread->wait();                                  //Wait for flush to DB
     delete m_delayThread;                                   //This also deletes m_threadBody
     m_delayThread = NULL;
-}
\ No newline at end of file
+}
Index: src/shared/Database/DBCfmt.cpp
===================================================================
--- src/shared/Database/DBCfmt.cpp	(revision 4097)
+++ src/shared/Database/DBCfmt.cpp	(working copy)
@@ -23,6 +23,7 @@
 const char ChrClassesEntryfmt[]="nxixxxxxxxxxxxxxxxxxxxxx";
 const char ChrRacesEntryfmt[]="nxixiixxixxxxissssssssssssssssxxxxx";
 const char CreatureFamilyfmt[]="nxxxxxiissssssssssssssssxx";
+const char CreatureSpellDatafmt[]="niiiixxxx";
 const char DurabilityCostsfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiii";
 const char DurabilityQualityfmt[]="nf";
 const char EmoteEntryfmt[]="nxixxxxxxxxxxxxxxxx";
Index: src/shared/Database/DBCStores.cpp
===================================================================
--- src/shared/Database/DBCStores.cpp	(revision 4097)
+++ src/shared/Database/DBCStores.cpp	(working copy)
@@ -39,6 +39,7 @@
 DBCStorage <ChrClassesEntry> sChrClassesStore(ChrClassesEntryfmt);
 DBCStorage <ChrRacesEntry> sChrRacesStore(ChrRacesEntryfmt);
 DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt);
+DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt);  
 
 DBCStorage <DurabilityQualityEntry> sDurabilityQualityStore(DurabilityQualityfmt);
 DBCStorage <DurabilityCostsEntry> sDurabilityCostsStore(DurabilityCostsfmt);
@@ -145,7 +146,7 @@
 {
     std::string tmpPath="";
 
-    const uint32 DBCFilesCount = 35;
+    const uint32 DBCFilesCount = 36;
 
     barGoLink bar( DBCFilesCount );
 
@@ -158,6 +159,7 @@
     LoadDBC(bar,bad_dbc_files,sChrClassesStore,          dataPath+"dbc/ChrClasses.dbc");
     LoadDBC(bar,bad_dbc_files,sChrRacesStore,            dataPath+"dbc/ChrRaces.dbc");
     LoadDBC(bar,bad_dbc_files,sCreatureFamilyStore,      dataPath+"dbc/CreatureFamily.dbc");
+    LoadDBC(bar,bad_dbc_files,sCreatureSpellDataStore,   dataPath+"dbc/CreatureSpellData.dbc"); 
     LoadDBC(bar,bad_dbc_files,sDurabilityCostsStore,     dataPath+"dbc/DurabilityCosts.dbc");
     LoadDBC(bar,bad_dbc_files,sDurabilityQualityStore,   dataPath+"dbc/DurabilityQuality.dbc");
     LoadDBC(bar,bad_dbc_files,sEmotesTextStore,          dataPath+"dbc/EmotesText.dbc");
Index: src/shared/Database/DBCStores.h
===================================================================
--- src/shared/Database/DBCStores.h	(revision 4097)
+++ src/shared/Database/DBCStores.h	(working copy)
@@ -140,6 +140,7 @@
 extern DBCStorage <ChrClassesEntry>           sChrClassesStore;
 extern DBCStorage <ChrRacesEntry>             sChrRacesStore;
 extern DBCStorage <CreatureFamilyEntry>       sCreatureFamilyStore;
+extern DBCStorage <CreatureSpellDataEntry>    sCreatureSpellDataStore;
 extern DBCStorage <DurabilityCostsEntry>      sDurabilityCostsStore; 
 extern DBCStorage <DurabilityQualityEntry>    sDurabilityQualityStore;
 extern DBCStorage <SpellCastTimesEntry>       sCastTimesStore;
Index: src/shared/Database/DBCStructure.h
===================================================================
--- src/shared/Database/DBCStructure.h	(revision 4097)
+++ src/shared/Database/DBCStructure.h	(working copy)
@@ -116,6 +116,12 @@
                                                             // 24 string flags, unused 
 };
 
+struct CreatureSpellDataEntry
+{
+    uint32    ID;                                           // 0
+    uint32    spellid[4];                                   // 1-4 spells
+                                                            // 4-7 unused
+};
 struct DurabilityCostsEntry
 {
     uint32    Itemlvl;                                       // 0
Index: src/shared/Database/SQLStorage.cpp
===================================================================
--- src/shared/Database/SQLStorage.cpp	(revision 4097)
+++ src/shared/Database/SQLStorage.cpp	(working copy)
@@ -23,7 +23,7 @@
 
 extern DatabaseMysql  sDatabase;
 
-const char CreatureInfofmt[]="iiissiiiiiiiiififfiiiiififiiiiffifiiiiiiiiiiiiiiiiiiiiiiiiiiisiis";
+const char CreatureInfofmt[]="iiissiiiiiiiiififfiiiiififiiiiffifiiiiiiiiiiiiiiiiiiiiiiiiiiisiiis";
 const char CreatureDataAddonInfofmt[]="iiiiiiiiiiii";
 const char GameObjectInfofmt[]="iiisiifiiiiiiiiiiiiiiiiiiiiiiiis";
 const char ItemPrototypefmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiffiffiffiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisiiiiiiiiiiiiiiiiiiiiiiiiiifsi";