diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_pet.cpp | 31 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 20 |
2 files changed, 22 insertions, 29 deletions
diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index 7ca9de2c249..b23a71780af 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -91,42 +91,25 @@ public: } // Everything looks OK, create new pet - Pet* pet = new Pet(player, HUNTER_PET); - if (!pet->CreateBaseAtCreature(creatureTarget)) - { - delete pet; - handler->PSendSysMessage("Error 1"); - return false; - } + Pet* pet = player->CreateTamedPetFrom(creatureTarget); + // "kill" original creature creatureTarget->DespawnOrUnsummon(); - creatureTarget->SetHealth(0); // just for nice GM-mode view - pet->SetCreatorGUID(player->GetGUID()); - pet->SetFaction(player->GetFaction()); - if (!pet->InitStatsForLevel(creatureTarget->GetLevel())) - { - TC_LOG_ERROR("misc", "InitStatsForLevel() in EffectTameCreature failed! Pet deleted."); - handler->PSendSysMessage("Error 2"); - delete pet; - return false; - } // prepare visual effect for levelup - pet->SetLevel(creatureTarget->GetLevel() - 1); - - pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true); - // this enables pet details window (Shift+P) - pet->InitPetCreateSpells(); - pet->SetFullHealth(); + pet->SetLevel(player->GetLevel() - 1); + // add to world pet->GetMap()->AddToMap(pet->ToCreature()); // visual effect for levelup - pet->SetLevel(creatureTarget->GetLevel()); + pet->SetLevel(player->GetLevel()); + // caster have pet now player->SetMinion(pet, true); + pet->SavePetToDB(PET_SAVE_AS_CURRENT); player->PetSpellInitialize(); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index e3be7cf78ed..ef3197d7119 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -617,8 +617,8 @@ class spell_hun_tame_beast : public SpellScriptLoader SpellCastResult CheckCast() { - Unit* caster = GetCaster(); - if (caster->GetTypeId() != TYPEID_PLAYER) + Player* caster = GetCaster()->ToPlayer(); + if (!caster) return SPELL_FAILED_DONT_REPORT; if (!GetExplTargetUnit()) @@ -630,11 +630,21 @@ class spell_hun_tame_beast : public SpellScriptLoader return SPELL_FAILED_HIGHLEVEL; // use SMSG_PET_TAME_FAILURE? - if (!target->GetCreatureTemplate()->IsTameable(caster->ToPlayer()->CanTameExoticPets())) + if (!target->GetCreatureTemplate()->IsTameable(caster->CanTameExoticPets())) return SPELL_FAILED_BAD_TARGETS; - if (!caster->GetPetGUID().IsEmpty()) - return SPELL_FAILED_ALREADY_HAVE_SUMMON; + PetStable const* petStable = caster->GetPetStable(); + if (petStable) + { + if (petStable->CurrentPet) + return SPELL_FAILED_ALREADY_HAVE_SUMMON; + + if (petStable->GetUnslottedHunterPet()) + { + caster->SendTameFailure(PetTameResult::TooMany); + return SPELL_FAILED_DONT_REPORT; + } + } if (!caster->GetCharmedGUID().IsEmpty()) return SPELL_FAILED_ALREADY_HAVE_CHARM; |
