[7881] More types with random generated item at recipe casting. Cleanups code.

Real resulting items creating required DB support (helper error message outputed at loading)
This commit is contained in:
VladimirMangos 2009-05-23 18:39:26 +04:00
parent 3d1b055e9e
commit 5616ef173b
3 changed files with 27 additions and 32 deletions

View file

@ -2697,17 +2697,30 @@ void Spell::EffectCreateItem(uint32 i)
void Spell::EffectCreateItem2(uint32 i)
{
// special case: generate using spell_loot_template
if(!m_spellInfo->EffectItemType[i])
if(m_caster->GetTypeId()!=TYPEID_PLAYER)
return;
Player* player = (Player*)m_caster;
uint32 item_id = m_spellInfo->EffectItemType[i];
if(item_id)
DoCreateItem(i,item_id);
// special case: fake item replaced by generate using spell_loot_template
if(IsLootCraftingSpell(m_spellInfo))
{
if(m_caster->GetTypeId()!=TYPEID_PLAYER)
return;
if(item_id)
{
if(!player->HasItemCount(item_id,1))
return;
// remove reagent
uint32 count = 1;
player->DestroyItemCount (item_id,count,true);
}
// create some random items
((Player*)m_caster)->AutoStoreLoot(m_spellInfo->Id,LootTemplates_Spell);
return;
player->AutoStoreLoot(m_spellInfo->Id,LootTemplates_Spell);
}
DoCreateItem(i,m_spellInfo->EffectItemType[i]);
}
void Spell::EffectPersistentAA(uint32 i)
@ -4927,32 +4940,12 @@ void Spell::EffectScriptEffect(uint32 effIndex)
case 61288: // Minor Inscription Research
case 61756: // Northrend Inscription Research (FAST QA VERSION)
{
if(!IsExplicitDiscoverySpell(m_spellInfo))
{
sLog.outError("Wrong explicit discovery spell %u structure, or outdated...",m_spellInfo->Id);
return;
}
if(m_caster->GetTypeId()!=TYPEID_PLAYER)
return;
Player* player = (Player*)m_caster;
// need replace effect 0 item by loot
uint32 reagent_id = m_spellInfo->EffectItemType[0];
if(!player->HasItemCount(reagent_id,1))
return;
// remove reagent
uint32 count = 1;
player->DestroyItemCount (reagent_id,count,true);
// create some random items
player->AutoStoreLoot(m_spellInfo->Id,LootTemplates_Spell);
// learn random explicit discovery recipe (if any)
if(uint32 discoveredSpell = GetExplicitDiscoverySpell(m_spellInfo->Id, player))
player->learnSpell(discoveredSpell,false);
if(uint32 discoveredSpell = GetExplicitDiscoverySpell(m_spellInfo->Id, (Player*)m_caster))
((Player*)m_caster)->learnSpell(discoveredSpell,false);
return;
}
}

View file

@ -140,8 +140,10 @@ inline bool IsExplicitDiscoverySpell(SpellEntry const *spellInfo)
inline bool IsLootCraftingSpell(SpellEntry const *spellInfo)
{
return spellInfo->Effect[0]==SPELL_EFFECT_CREATE_ITEM_2 &&
(spellInfo->Effect[1]==SPELL_EFFECT_SCRIPT_EFFECT || !spellInfo->EffectItemType[0]);
return spellInfo->Effect[0]==SPELL_EFFECT_CREATE_ITEM_2 && (
spellInfo->Effect[1]==SPELL_EFFECT_SCRIPT_EFFECT || // see IsExplicitDiscoverySpell
!spellInfo->EffectItemType[0] || // result item not provided
spellInfo->TotemCategory[0] == 121); // different random cards from Inscription (121==Virtuoso Inking Set category)
}
int32 CompareAuraRanks(uint32 spellId_1, uint32 effIndex_1, uint32 spellId_2, uint32 effIndex_2);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "7880"
#define REVISION_NR "7881"
#endif // __REVISION_NR_H__