Visitas
Conectarse
Últimos temas
Vendedores de grimorios de brujos ARCEMU
3 participantes
Página 1 de 1.
Vendedores de grimorios de brujos ARCEMU
Bueno chicos ya que este es un peculiar trabajao y que en las nuevas revisiones no vienen aqui os dejo un SQL para que lo metais en vuestra bd de world y todos los vendederes de grimorios os aparezcan con los grimorios:
DESCARGAR
Son 8 archivos de grimorios uno por cada NPC que vende grimorios.
DESCARGAR
Son 8 archivos de grimorios uno por cada NPC que vende grimorios.
Re: Vendedores de grimorios de brujos ARCEMU
probaste y funcionan???
Clerigon- Aprendiz
- Cantidad de envíos : 587
Oro : 2468
Reputación : 150
Fecha de inscripción : 27/01/2009
Localización : no
Re: Vendedores de grimorios de brujos ARCEMU
jaja claro los e hecho yo los e tenido que meter en mi base de datos si no me moria del asco iendo por la bd directamente xD
Re: Vendedores de grimorios de brujos ARCEMU
Los grimorios los puedes comprar y tal, comprobado por mi (aunque el vendedor que uso, es el que está en RivalDB, no esto que has puesto) ... ahora bien...
¿Seguro que los demonios aprenden los hechizos?
Te lo digo, porque ayer estuve probando yo hacer lo mismo, en el servidor de pruebas que tengo 3.0.9, y no iba (no se podia interactuar con los libros).
Y lo que es mas, a menos que mis sospechas estén equivocadas, como Blizzard, por el cambio del sistema en la 3.0.X, haya eliminado los hechizos especiales que provocaban que los demonios aprendiesen el hechizo correspondiente... no nos va a ser posible hacer esto por medio de los libros.
Salu2
¿Seguro que los demonios aprenden los hechizos?
Te lo digo, porque ayer estuve probando yo hacer lo mismo, en el servidor de pruebas que tengo 3.0.9, y no iba (no se podia interactuar con los libros).
Y lo que es mas, a menos que mis sospechas estén equivocadas, como Blizzard, por el cambio del sistema en la 3.0.X, haya eliminado los hechizos especiales que provocaban que los demonios aprendiesen el hechizo correspondiente... no nos va a ser posible hacer esto por medio de los libros.
Salu2
Re: Vendedores de grimorios de brujos ARCEMU
mmmm no lo e provado aora me meto y te comento la jugada
Re: Vendedores de grimorios de brujos ARCEMU
Yo estoy intentando arreglar este asunto, pero a nivel de código.
Veremos sino me explota el juego cuando el PJ suba de nivel y éste sea 4 (que es cuando le he puesto que el diablillo aprenda el Pacto de sangre) XD.
Salu2
Veremos sino me explota el juego cuando el PJ suba de nivel y éste sea 4 (que es cuando le he puesto que el diablillo aprenda el Pacto de sangre) XD.
Salu2
Re: Vendedores de grimorios de brujos ARCEMU
aver te cuento ariath en mi servidor el diablillo aprende el "disparo de fuego al nivel 5 " pero a mi se suben automaticamente el nivel. Me explico e mirado y por ejemplo mi diablillo al morir y sacarlo otra vez, por ponerte un ejemplo, estoy al nivel 30 mi diablillo muere y al sacarle otra vez me aparece ya con lo que tendria que tener aprendido mas cosas de nivel mayor que todavia se supone que no tendria que aprender....esto no se si es bueno o malo
Re: Vendedores de grimorios de brujos ARCEMU
A ver, si te he entendido bien, me estas diciendo que tu diablillo, cada vez que es invocado, aprende los hechizos o niveles siguientes a los que tiene, ¿Es eso?.
Eso parece algo raro del código, desgraciadamente, ahora mismo, no se como se podría arreglar.
Yo he conseguido, después de varias pruebas con el código, que el diablillo aprenda el Pacto de sangre al nivel 4, y lo que es más importante, se mantiene aprendido al destituir e invocar de nuevo al diablillo, no solo eso... los cambios se quedan guardados incluso después de cerrar y abrir el servidor y el juego, por lo que a ese respecto, lo he conseguido .
Solo tendría que, donde he puesto lo que he puesto en el código, añadir un switch (el que sepa algo de programación básica, sabrá a lo que me refiero ), de forma que, según el nivel al que suba el personaje, si es uno de los apropiados, el diablillo aprenda la magia o grado de hechizo que corresponda.
Antes decía que, a ese respecto, lo había conseguido. Lo de "a ese respecto" viene por que hay varias pegas que tengo que conseguir averiguar como solucionar:
1ª: Lo que le he añadido al código del emulador, está ubicado en una parte donde se realizan todas las operaciones que tienen lugar cuando el personaje sube de nivel, por lo tanto, no va a servir de momento para un brujo que ya exista, sino para los nuevos.
2ª: El código que he insertado, está en una zona en la que antes se comprueba si el demonio en cuestión está sacado, con lo que solo tiene efecto en el demonio que tengas activo en ese momento. Hay que mejorar el código para que actualice a todos los demonios que tengas, los tengas activos o no.
3ª: Hay un detalle curioso, y es que el autolanzar del diablillo no parece funcionar (me refiero, a cuando le das con el derecho a un hechizo suyo. En ese momento, el lanzamiento de ese hechizo debería ser automático.). El hechizo que le he añadido, el Pacto de sangre, lo puedes poner automático, pero al hacerlo, no se lanza.
4ª: Y creo que última, y es curiosa. El diablillo, parece que tiene que tenerte marcado como objetivo para que el Pacto de sangre te afecte, y la cosa rara no acaba ahi. Si, teniendote a tí mismo como objetivo, le das a la descarga de fuego del diablillo... te la tira a tí o_O .
En fín, seguire investigando, pero una cosa está clara: Teniendo en cuenta mis conocimientos limitados de C++, y el hecho de que nunca me había aventurado a modificar el código del ArcEmu, ni a añadir cosas... me ha causado una plena satisfacción que esto haya dado sus frutos, aunque sean limitados de momento .
Salu2
P.D: Por cierto, si teneis curiosidad por ver lo que hice...
En Player.cpp:
--------------------
// if warlock has summonned pet, increase its level too
if(info->class_ == WARLOCK) {
if((m_Summon != NULL) && (m_Summon->IsInWorld()) && (m_Summon->isAlive())) {
m_Summon->ModUnsigned32Value(UNIT_FIELD_LEVEL, 1);
m_Summon->ApplyStatsForLevel();
uint32 Nivel;
Nivel = getLevel();
if(Nivel == 4){
printf("El diablillo deberia haber aprendido Pacto de sangre\n");
AddSummonSpell(416,6307);
}
}
}
La parte en negrita, es lo que he añadido. El comando en cuestión es AddSummonSpell, el cual recibe 2 parámetros: ID del demonio que aprende el hechizo, y la ID del hechizo en cuestión.
El mensaje del printf, lo puse solo para asegurarme de que esta parte del código se ejecutaba, y dicho mensaje sale impreso en la consola del World.
(No veais lo que me ha costado dar con el comando del hechizo y saber como funcionaba )
Eso parece algo raro del código, desgraciadamente, ahora mismo, no se como se podría arreglar.
Yo he conseguido, después de varias pruebas con el código, que el diablillo aprenda el Pacto de sangre al nivel 4, y lo que es más importante, se mantiene aprendido al destituir e invocar de nuevo al diablillo, no solo eso... los cambios se quedan guardados incluso después de cerrar y abrir el servidor y el juego, por lo que a ese respecto, lo he conseguido .
Solo tendría que, donde he puesto lo que he puesto en el código, añadir un switch (el que sepa algo de programación básica, sabrá a lo que me refiero ), de forma que, según el nivel al que suba el personaje, si es uno de los apropiados, el diablillo aprenda la magia o grado de hechizo que corresponda.
Antes decía que, a ese respecto, lo había conseguido. Lo de "a ese respecto" viene por que hay varias pegas que tengo que conseguir averiguar como solucionar:
1ª: Lo que le he añadido al código del emulador, está ubicado en una parte donde se realizan todas las operaciones que tienen lugar cuando el personaje sube de nivel, por lo tanto, no va a servir de momento para un brujo que ya exista, sino para los nuevos.
2ª: El código que he insertado, está en una zona en la que antes se comprueba si el demonio en cuestión está sacado, con lo que solo tiene efecto en el demonio que tengas activo en ese momento. Hay que mejorar el código para que actualice a todos los demonios que tengas, los tengas activos o no.
3ª: Hay un detalle curioso, y es que el autolanzar del diablillo no parece funcionar (me refiero, a cuando le das con el derecho a un hechizo suyo. En ese momento, el lanzamiento de ese hechizo debería ser automático.). El hechizo que le he añadido, el Pacto de sangre, lo puedes poner automático, pero al hacerlo, no se lanza.
4ª: Y creo que última, y es curiosa. El diablillo, parece que tiene que tenerte marcado como objetivo para que el Pacto de sangre te afecte, y la cosa rara no acaba ahi. Si, teniendote a tí mismo como objetivo, le das a la descarga de fuego del diablillo... te la tira a tí o_O .
En fín, seguire investigando, pero una cosa está clara: Teniendo en cuenta mis conocimientos limitados de C++, y el hecho de que nunca me había aventurado a modificar el código del ArcEmu, ni a añadir cosas... me ha causado una plena satisfacción que esto haya dado sus frutos, aunque sean limitados de momento .
Salu2
P.D: Por cierto, si teneis curiosidad por ver lo que hice...
En Player.cpp:
--------------------
// if warlock has summonned pet, increase its level too
if(info->class_ == WARLOCK) {
if((m_Summon != NULL) && (m_Summon->IsInWorld()) && (m_Summon->isAlive())) {
m_Summon->ModUnsigned32Value(UNIT_FIELD_LEVEL, 1);
m_Summon->ApplyStatsForLevel();
uint32 Nivel;
Nivel = getLevel();
if(Nivel == 4){
printf("El diablillo deberia haber aprendido Pacto de sangre\n");
AddSummonSpell(416,6307);
}
}
}
La parte en negrita, es lo que he añadido. El comando en cuestión es AddSummonSpell, el cual recibe 2 parámetros: ID del demonio que aprende el hechizo, y la ID del hechizo en cuestión.
El mensaje del printf, lo puse solo para asegurarme de que esta parte del código se ejecutaba, y dicho mensaje sale impreso en la consola del World.
(No veais lo que me ha costado dar con el comando del hechizo y saber como funcionaba )
Re: Vendedores de grimorios de brujos ARCEMU
juer ariath te veo muy metido en materia y me alegro porque esto son cositas que nos gustan a todos y si a tu pregunta si es mas o menos eso lo que me pasa pero aver teines suerte y consiges hacer algo parecido al "ofi" respecto a este tema te felicito por tu curro que veo que nadie lo hace ( y no es por peloteo que seguro que algien lo pinesa)
P.D. Digo yo no será mejor cojer y poner apra que en vez de que lo aprendan automaticamente que lo aprendan a la antigua?comprando los grimorios etc etc...
P.D. Digo yo no será mejor cojer y poner apra que en vez de que lo aprendan automaticamente que lo aprendan a la antigua?comprando los grimorios etc etc...
Re: Vendedores de grimorios de brujos ARCEMU
Aprender los hechizos con los libros tiene un problema, y es que, sospecho que para que un libro produjiese el efecto de que se aprende un hechizo, a ese libro iba ligado un hechizo especial, que producía ese mismo efecto.
La cuestión es que, temo que Blizzard haya quitado dichos hechizos especiales, puesto que para la 3.0.X ya no eran necesarios.
Gracias por los elogios, siempre me gusta compartir con la comunidad .
Todas estas cosas... pues como lo fue en un principio el montaje del servidor, son pequeños retos. El diseño de las webs para editar NPCs y tal, fue lo mismo, para poner a prueba mis conocimientos de PHP (limitados de momento), y aprender cosas nuevas.
Pues nada, seguiré investigando el tema, a ver si conseguimos que vaya como en el oficial .
Salu2
La cuestión es que, temo que Blizzard haya quitado dichos hechizos especiales, puesto que para la 3.0.X ya no eran necesarios.
Gracias por los elogios, siempre me gusta compartir con la comunidad .
Todas estas cosas... pues como lo fue en un principio el montaje del servidor, son pequeños retos. El diseño de las webs para editar NPCs y tal, fue lo mismo, para poner a prueba mis conocimientos de PHP (limitados de momento), y aprender cosas nuevas.
Pues nada, seguiré investigando el tema, a ver si conseguimos que vaya como en el oficial .
Salu2
Re: Vendedores de grimorios de brujos ARCEMU
mmmm ariath te queria preguntar como ves la posibilidad de que pudieses hacer una "parte" de la web que fuese un shop?me explico algo tipo como lo que tiene gplp en el tema de las donaciones, que por cada sms que mandes te llege una clave y al meter la clave en la web, (previamente te as registrado con tu cuenta del wow), te diesen un punto por sms mandado, que luego cada X puntos se puedan canjear por unos items que al seleccionarlos teniendo la cantidad de puntos requerida te lo mandase directamente al wow por correo?esto seria muy dificl de conseguir?
Re: Vendedores de grimorios de brujos ARCEMU
mmm yo lo estaba haciendo pero en magos osea en C...y cansa por que tienes que hacer uno para cada demonio
xDDD todavia me falta algunas cosillas, me guie de un patch que estaba en un foro en ingles pero no estaba completo..asi que al tener la base puedes hacer lo demas facilmente
- Spoiler:
- diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index 7ae39eb..27e61d0 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -177,6 +177,26 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
SetUInt32Value(UNIT_NPC_FLAGS, 0);
SetName(fields[9].GetString());
+ bool petlevelchange = false;
+ switch(owner->getClass())
+ {
+ case CLASS_WARLOCK:
+ {
+ // if player level up without pet, when player summon a pet, pet auto level up. (only warlock)
+ _LoadSpells();
+ _LoadSpellCooldowns();
+
+ if(owner->getLevel() > petlevel)
+ {
+ petlevelchange = true;
+ }
+
+ break;
+ }
+ default:
+ break;
+ }
+
switch(getPetType())
{
case SUMMON_PET:
@@ -295,8 +315,26 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
map->Add((Creature*)this);
// Spells should be loaded after pet is added to map, because in CanCast is check on it
- _LoadSpells();
- _LoadSpellCooldowns();
+
+ switch(owner->getClass())
+ {
+ case CLASS_WARLOCK:
+ {
+ //if player level up to high level without pet, when player summon a pet, pet auto level up
+ if(petlevelchange == true) {
+ InitPetCreateSpells();
+ InitStatsForLevel(petlevel);
+ }
+
+ break;
+ }
+ default:
+ {
+ _LoadSpells();
+ _LoadSpellCooldowns();
+ break;
+ }
+ }
owner->SetPet(this); // in DB stored only full controlled creature
sLog.outDebug("New Pet has guid %u", GetGUIDLow());
@@ -832,6 +870,9 @@ bool Pet::InitStatsForLevel(uint32 petlevel)
uint32 shadow = owner->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW);
uint32 val = (fire > shadow) ? fire : shadow;
+ // WARLOCK
+ learnLevelupSpellsWarlock();
+
SetBonusDamage(int32 (val * 0.15f));
//bonusAP += val * 0.57;
break;
@@ -1051,7 +1092,7 @@ void Pet::_SaveSpellCooldowns()
m_CreatureSpellCooldowns.erase(itr++);
else
{
- CharacterDatabase.PExecute("INSERT INTO pet_spell_cooldown (guid,spell,time) VALUES ('%u', '%u', '" I64FMTD "')", m_charmInfo->GetPetNumber(), itr->first, uint64(itr->second));
+ CharacterDatabase.PExecute("INSERT IGNORE INTO pet_spell_cooldown (guid,spell,time) VALUES ('%u', '%u', '" I64FMTD "')", m_charmInfo->GetPetNumber(), itr->first, uint64(itr->second));
++itr;
}
}
@@ -1083,8 +1124,8 @@ void Pet::_SaveSpells()
if (itr->second->type == PETSPELL_FAMILY) continue; // prevent saving family passives to DB
if (itr->second->state == PETSPELL_REMOVED || itr->second->state == PETSPELL_CHANGED)
CharacterDatabase.PExecute("DELETE FROM pet_spell WHERE guid = '%u' and spell = '%u'", m_charmInfo->GetPetNumber(), itr->first);
- if (itr->second->state == PETSPELL_NEW || itr->second->state == PETSPELL_CHANGED)
- CharacterDatabase.PExecute("INSERT INTO pet_spell (guid,spell,active) VALUES ('%u', '%u', '%u')", m_charmInfo->GetPetNumber(), itr->first, itr->second->active);
+ if (itr->second->state == PETSPELL_NEW || itr->second->state == PETSPELL_CHANGED)
+ CharacterDatabase.PExecute("INSERT IGNORE INTO pet_spell (guid,spell,active) VALUES ('%u', '%u', '%u')", m_charmInfo->GetPetNumber(), itr->first, itr->second->active);
if (itr->second->state == PETSPELL_REMOVED)
_removeSpell(itr->first);
@@ -1370,6 +1411,117 @@ void Pet::learnLevelupSpells()
}
}
+void Pet::learnLevelupSpellsWarlock()
+{
+
+ PetLevelupSpellSet const *levelupSpells = spellmgr.GetPetLevelupSpellList(GetCreatureInfo()->family);
+ if(!levelupSpells)
+ return;
+
+ uint32 level = getLevel();
+ uint32 levelspelladd = 0;
+ uint32 levelspelldel = 0;
+
+ for(PetLevelupSpellSet::const_iterator itr = levelupSpells->begin(); itr != levelupSpells->end(); ++itr)
+ {
+ if((itr->first & 0xffff) <= level) {
+ if (existAddSpell(itr->second) == true) {
+ // add spell
+
+ if(existLowRankOfSpell(itr->second) == false)
+ {
+ levelspelladd++;
+ }
+ }
+ }
+ else {
+ if(existDeleteSpell(itr->second) == true)
+ {
+ // delete spell
+
+ levelspelldel++;
+ }
+ }
+ }
+
+ if(levelspelladd == 0 && levelspelldel == 0) {
+ return;
+ }
+
+ for(PetLevelupSpellSet::const_iterator itr = levelupSpells->begin(); itr != levelupSpells->end(); ++itr)
+ {
+ if((itr->first & 0xffff) <= level) {
+
+ if(existLowRankOfSpell(itr->second) == false)
+ {
+ learnSpell(itr->second);
+ }
+ }
+ else {
+ unlearnSpell(itr->second);
+ }
+ }
+
+}
+
+bool Pet::existLowRankOfSpell(uint32 spell_id)
+{
+ uint32 levelspelllow = 0;
+
+ for (PetSpellMap::const_iterator sitr = m_spells.begin(), next = m_spells.begin(); sitr != m_spells.end(); sitr = next) {
+ ++next;
+ if(sitr->first == spell_id) {
+ levelspelllow = 1;
+ break;
+ }
+ else if(spellmgr.IsHighRankOfSpell(sitr->first,spell_id)) {
+ levelspelllow = 1;
+ break;
+ }
+ }
+
+ if(levelspelllow)
+ {
+ return(true);
+ }
+
+ return(false);
+}
+
+bool Pet::existAddSpell(uint32 spell_id)
+{
+ SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id);
+ if (!spellInfo)
+ {
+ sLog.outError("Pet::existAddSpell: Non-existed in SpellStore spell #%u request.",spell_id);
+ return false;
+ }
+
+ PetSpellMap::iterator itr = m_spells.find(spell_id);
+ if (itr != m_spells.end())
+ {
+ if (itr->second->state == PETSPELL_REMOVED)
+ {
+ }
+ else
+ return false;
+ }
+
+ return true;
+}
+
+bool Pet::existDeleteSpell(uint32 spell_id)
+{
+ PetSpellMap::iterator itr = m_spells.find(spell_id);
+ if (itr == m_spells.end())
+ return false;
+
+ if(itr->second->state == PETSPELL_REMOVED)
+ return false;
+
+ return true;
+}
+
bool Pet::unlearnSpell(uint32 spell_id)
{
if(removeSpell(spell_id))
diff --git a/src/game/Pet.h b/src/game/Pet.h
index 47e0a65..b08002c 100644
--- a/src/game/Pet.h
+++ b/src/game/Pet.h
@@ -191,6 +191,10 @@ class Pet : public Creature
bool addSpell(uint32 spell_id,uint16 active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, PetSpellType type = PETSPELL_NORMAL);
bool learnSpell(uint32 spell_id);
void learnLevelupSpells();
+ void learnLevelupSpellsWarlock();
+ bool existLowRankOfSpell(uint32 spell_id);
+ bool existAddSpell(uint32 spell_id);
+ bool existDeleteSpell(uint32 spell_id);
bool unlearnSpell(uint32 spell_id);
bool removeSpell(uint32 spell_id);
bool _removeSpell(uint32 spell_id);
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 39cf076..4698594 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -4199,7 +4199,20 @@ void Spell::EffectSummonPet(uint32 i)
NewSummon->SetUInt32Value(UNIT_FIELD_FLAGS,UNIT_FLAG_PVP_ATTACKABLE);
NewSummon->InitStatsForLevel(petlevel);
- NewSummon->InitPetCreateSpells();
+ switch (m_caster->getClass()) {
+ case CLASS_WARLOCK:
+ {
+ NewSummon->InitPetCreateSpells();
+ // when player get a pet first at high level, pet auto level up. (only warlock)
+ NewSummon->InitStatsForLevel(petlevel);
+ break;
+ }
+ default:
+ {
+ NewSummon->InitPetCreateSpells();
+ break;
+ }
+ }
NewSummon->InitTalentForLevel();
if(NewSummon->getPetType()==SUMMON_PET)
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index f333db8..1ca63b9 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -2093,12 +2093,122 @@ void SpellMgr::LoadSpellPetAuras()
sLog.outString( ">> Loaded %u spell pet auras", count );
}
+uint32* SpellMgr::LoadPetLevelupSpellMapWarlockInit(uint32 *pet_spell_db_count)
+{
+ uint32 *pet_spell_data = NULL;
+ *pet_spell_db_count = 0;
+
+ // 0 1
+ QueryResult *result = WorldDatabase.PQuery("SELECT entry, spell FROM pet_levelspell");
+
+ if(!result)
+ {
+ sLog.outErrorDb(">> Loaded 0 pet dblevel spell. DB table `pet_levelspell` is empty.");
+ return(NULL);
+ }
+ else
+ {
+ *pet_spell_db_count = result->GetRowCount();
+ uint32 pet_spell_count = 0;
+
+ if(*pet_spell_db_count)
+ {
+ if ((pet_spell_data = (uint32 *) malloc(*pet_spell_db_count * sizeof(uint32) * 2)) == NULL) {
+ sLog.outErrorDb(">> Loaded 0 pet dblevel spell. DB table `pet_levelspell` allocate memory error.");
+ return(NULL);
+ }
+ }
+ else {
+ sLog.outErrorDb(">> Loaded 0 pet dblevel spell. DB table `pet_levelspell` count is zero.");
+ return(NULL);
+ }
+
+ do {
+ Field *fields = result->Fetch();
+
+ pet_spell_data[(pet_spell_count*2)+0] = fields[0].GetUInt32();
+ pet_spell_data[(pet_spell_count*2)+1] = fields[1].GetUInt32();
+
+ pet_spell_count++;
+
+ if(pet_spell_count >= *pet_spell_db_count)
+ {
+ break;
+ }
+ }
+ while ( result->NextRow() );
+
+ delete result;
+
+ sLog.outString();
+ sLog.outString( ">> Loaded %u spell pet dblevel spell", pet_spell_count );
+
+ }
+
+ return(pet_spell_data);
+
+}
+
+bool SpellMgr::LoadPetLevelupSpellMapWarlockCheck(CreatureFamilyEntry const *creatureFamily)
+{
+ bool pet_spell_is;
+
+ //WARLOCK
+ switch (creatureFamily->ID) {
+ case CREATURE_FAMILY_IMP:
+ case CREATURE_FAMILY_VOIDWALKER:
+ case CREATURE_FAMILY_SUCCUBUS:
+ case CREATURE_FAMILY_FELHUNTER:
+ case CREATURE_FAMILY_FELGUARD:
+ pet_spell_is = true;
+ break;
+ default:
+ pet_spell_is = false;
+ break;
+ }
+
+ return(pet_spell_is);
+
+}
+
+uint32 SpellMgr::LoadPetLevelupSpellMapWarlockLoad(CreatureFamilyEntry const *creatureFamily, SpellEntry const *spell, uint32 *pet_spell_data, uint32 pet_spell_count)
+{
+ uint32 count = 0;
+
+ for(uint32 k = 0; k < pet_spell_count; k++)
+ {
+ if(creatureFamily->ID == pet_spell_data[(k*2)+0] && spell->Id == pet_spell_data[(k*2)+1])
+ {
+ mPetLevelupSpellMap[creatureFamily->ID][spell->spellLevel + (k*0x10000)] = spell->Id;
+ count++;
+ break;
+ }
+ }
+
+ return(count);
+}
+
+void SpellMgr::LoadPetLevelupSpellMapWarlockEnd(uint32 *pet_spell_data)
+{
+
+ if(pet_spell_data != NULL) {
+ free(pet_spell_data);
+ }
+
+}
+
void SpellMgr::LoadPetLevelupSpellMap()
{
CreatureFamilyEntry const *creatureFamily;
SpellEntry const *spell;
uint32 count = 0;
+ uint32 *warlock_pet_spell_data = NULL;
+ uint32 warlock_pet_spell_count = 0;
+
+ // Load Pet Spell Warlock From DB
+ warlock_pet_spell_data = LoadPetLevelupSpellMapWarlockInit(&warlock_pet_spell_count);
+
for (uint32 i = 0; i < sCreatureFamilyStore.GetNumRows(); ++i)
{
creatureFamily = sCreatureFamilyStore.LookupEntry(i);
@@ -2106,8 +2216,18 @@ void SpellMgr::LoadPetLevelupSpellMap()
if(!creatureFamily) // not exist
continue;
- if(creatureFamily->petTalentType < 0) // not hunter pet family
- continue;
+ //WARLOCK
+ bool warlock_pet_spell_true = false;
+ if(warlock_pet_spell_count)
+ {
+ warlock_pet_spell_true = LoadPetLevelupSpellMapWarlockCheck(creatureFamily);
+ }
+
+ if(warlock_pet_spell_true == false)
+ {
+ if(creatureFamily->petTalentType < 0) // not hunter pet family
+ continue;
+ }
for(uint32 j = 0; j < sSpellStore.GetNumRows(); ++j)
{
@@ -2117,6 +2237,13 @@ void SpellMgr::LoadPetLevelupSpellMap()
if(!spell)
continue;
+ //WARLOCK
+ if(warlock_pet_spell_true == true)
+ {
+ count += LoadPetLevelupSpellMapWarlockLoad(creatureFamily, spell, warlock_pet_spell_data, warlock_pet_spell_count);
+ continue;
+ }
+
// not hunter spell
if(spell->SpellFamilyName != SPELLFAMILY_HUNTER)
continue;
@@ -2269,6 +2396,8 @@ void SpellMgr::LoadPetLevelupSpellMap()
}
}
+ LoadPetLevelupSpellMapWarlockEnd(warlock_pet_spell_data);
+
sLog.outString();
sLog.outString( ">> Loaded %u pet levelup spells", count );
}
diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h
index 5e300b6..0c1aee2 100644
--- a/src/game/SpellMgr.h
+++ b/src/game/SpellMgr.h
@@ -857,6 +857,10 @@ class SpellMgr
void LoadSpellThreats();
void LoadSkillLineAbilityMap();
void LoadSpellPetAuras();
+ uint32* LoadPetLevelupSpellMapWarlockInit(uint32 *pet_spell_db_count);
+ bool LoadPetLevelupSpellMapWarlockCheck(CreatureFamilyEntry const *creatureFamily);
+ uint32 LoadPetLevelupSpellMapWarlockLoad(CreatureFamilyEntry const *creatureFamily, SpellEntry const *spell, uint32 *pet_spell_data, uint32 pet_spell_count);
+ void LoadPetLevelupSpellMapWarlockEnd(uint32 *pet_spell_data);
void LoadPetLevelupSpellMap();
void LoadSpellAreas();
xDDD todavia me falta algunas cosillas, me guie de un patch que estaba en un foro en ingles pero no estaba completo..asi que al tener la base puedes hacer lo demas facilmente
Clerigon- Aprendiz
- Cantidad de envíos : 587
Oro : 2468
Reputación : 150
Fecha de inscripción : 27/01/2009
Localización : no
Re: Vendedores de grimorios de brujos ARCEMU
Muy, muy interesante Clerigon. No sabía que estabas puesto en C++ .
Yo estoy intentando mejorar mi código, pues tenía una pega importante, y es que, solo aprendía los hechizos el demonio que tenias invocado, los demás no.
Dado que he supuesto, que un demonio solo puede aprender hechizos cuando está invocado, estoy intentando reubicar mi función, para que se ejecute después de que el demonio es invocado .
Salu2
Yo estoy intentando mejorar mi código, pues tenía una pega importante, y es que, solo aprendía los hechizos el demonio que tenias invocado, los demás no.
Dado que he supuesto, que un demonio solo puede aprender hechizos cuando está invocado, estoy intentando reubicar mi función, para que se ejecute después de que el demonio es invocado .
Salu2
Re: Vendedores de grimorios de brujos ARCEMU
Ariath escribió:Muy, muy interesante Clerigon. No sabía que estabas puesto en C++ .
Yo estoy intentando mejorar mi código, pues tenía una pega importante, y es que, solo aprendía los hechizos el demonio que tenias invocado, los demás no.
Dado que he supuesto, que un demonio solo puede aprender hechizos cuando está invocado, estoy intentando reubicar mi función, para que se ejecute después de que el demonio es invocado .
Salu2
si lastima que sea en C y en arcemu no funcionen...para que aprendan skill hay que invocar el demonio para que las aprenda..no consegui hacer que aprendan las skill asi no esten invocado...aunque seria mejor que las aprendiera cuando los invocamos
Clerigon- Aprendiz
- Cantidad de envíos : 587
Oro : 2468
Reputación : 150
Fecha de inscripción : 27/01/2009
Localización : no
Temas similares
» vendedores para Arcemu..wotlk y bc
» crear npc´s vendedores creando tus propias querrys para principiantes
» Addon en el Arcemu
» Me paso a Arcemu!
» Addon GM ArcEmu
» crear npc´s vendedores creando tus propias querrys para principiantes
» Addon en el Arcemu
» Me paso a Arcemu!
» Addon GM ArcEmu
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
Lun Nov 14, 2016 3:41 pm por ragnarosxd
» WoW server ragnaros 3.3.5a high reates
Miér Jun 24, 2015 11:12 pm por ragnarosxd
» WoW server ragnaros 3.3.5a high reates
Miér Jun 24, 2015 11:11 pm por ragnarosxd
» Traducciones WhyDB
Vie Mayo 02, 2014 10:54 pm por tubafonos
» realmlist
Jue Ago 29, 2013 5:36 pm por locoiii
» cual es el realmist????
Mar Mayo 14, 2013 3:15 am por bosz
» Presentacion
Lun Abr 01, 2013 6:40 am por danigraful
» holaa me podeis ayudarr
Dom Mar 31, 2013 5:34 pm por alejandro9696
» WOWPlus - Excelente Servidor WoW 3.3.5 a (WOTLK)
Miér Mar 27, 2013 2:33 am por Galawowplus