diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_pet.cpp | 35 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_hunter.cpp | 20 |
2 files changed, 25 insertions, 30 deletions
diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index c1fae85621b..417eaebfffa 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -91,42 +91,27 @@ 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->SetGuidValue(UNIT_FIELD_CREATEDBY, 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; - } + uint8 level = (creatureTarget->GetLevel() < (player->GetLevel() - 5)) ? (player->GetLevel() - 5) : player->GetLevel(); // prepare visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->GetLevel()-1); - - pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true); - // this enables pet details window (Shift+P) - pet->InitPetCreateSpells(); - pet->SetFullHealth(); + pet->SetUInt32Value(UNIT_FIELD_LEVEL, level - 1); + // add to world pet->GetMap()->AddToMap(pet->ToCreature()); // visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->GetLevel()); + pet->SetUInt32Value(UNIT_FIELD_LEVEL, level); + // caster have pet now player->SetMinion(pet, true); + + pet->InitTalentForLevel(); + 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 e1278a77828..48abad416b7 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -1415,8 +1415,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()) @@ -1428,11 +1428,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()) - 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(PETTAME_TOOMANY); + return SPELL_FAILED_DONT_REPORT; + } + } if (caster->GetCharmedGUID()) return SPELL_FAILED_ALREADY_HAVE_CHARM; |
