Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4

This commit is contained in:
Vincent-Michael
2013-08-31 21:52:15 +02:00
16 changed files with 339 additions and 140 deletions

View File

@@ -73,14 +73,12 @@ enum Spells
SPELL_SHIELDWALL = 29390
};
#define POS_Z 81.73f
float Locations[4][3]=
Position const Locations[4] =
{
{-10991.0f, -1884.33f, 0.614315f},
{-10989.4f, -1885.88f, 0.904913f},
{-10978.1f, -1887.07f, 2.035550f},
{-10975.9f, -1885.81f, 2.253890f},
{-10991.0f, -1884.33f, 81.73f, 0.614315f},
{-10989.4f, -1885.88f, 81.73f, 0.904913f},
{-10978.1f, -1887.07f, 81.73f, 2.035550f},
{-10975.9f, -1885.81f, 81.73f, 2.253890f},
};
const uint32 Adds[6]=
@@ -137,7 +135,7 @@ public:
Enrage = false;
InVanish = false;
if (me->GetHealth())
if (me->IsAlive())
SpawnAdds();
if (instance)
@@ -183,39 +181,34 @@ public:
void SpawnAdds()
{
DeSpawnAdds();
if (isAddlistEmpty())
{
Creature* creature = NULL;
std::vector<uint32> AddList;
std::list<uint32> AddList;
for (uint8 i = 0; i < 6; ++i)
AddList.push_back(Adds[i]);
while (AddList.size() > 4)
AddList.erase((AddList.begin())+(rand()%AddList.size()));
Trinity::Containers::RandomResizeList(AddList, 4);
uint8 i = 0;
for (std::vector<uint32>::const_iterator itr = AddList.begin(); itr != AddList.end(); ++itr)
for (std::list<uint32>::const_iterator itr = AddList.begin(); itr != AddList.end() && i < 4; ++itr, ++i)
{
uint32 entry = *itr;
creature = me->SummonCreature(entry, Locations[i][0], Locations[i][1], POS_Z, Locations[i][2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
if (creature)
if (Creature* creature = me->SummonCreature(entry, Locations[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000))
{
AddGUID[i] = creature->GetGUID();
AddId[i] = entry;
}
++i;
}
}else
}
else
{
for (uint8 i = 0; i < 4; ++i)
{
Creature* creature = me->SummonCreature(AddId[i], Locations[i][0], Locations[i][1], POS_Z, Locations[i][2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000);
if (creature)
{
if (Creature* creature = me->SummonCreature(AddId[i], Locations[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 10000))
AddGUID[i] = creature->GetGUID();
}
}
}
}
@@ -235,9 +228,8 @@ public:
{
if (AddGUID[i])
{
Creature* temp = Creature::GetCreature((*me), AddGUID[i]);
if (temp && temp->IsAlive())
temp->DisappearAndDie();
if (Creature* temp = ObjectAccessor::GetCreature(*me, AddGUID[i]))
temp->DespawnOrUnsummon();
}
}
}

View File

@@ -11,6 +11,7 @@
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
Pet/pet_dk.cpp
Pet/pet_generic.cpp
Pet/pet_hunter.cpp
Pet/pet_mage.cpp
Pet/pet_priest.cpp

View File

@@ -0,0 +1,91 @@
/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Ordered alphabetically using scriptname.
* Scriptnames of files in this file should be prefixed with "npc_pet_gen_".
*/
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "Player.h"
enum Mojo
{
SAY_MOJO = 0,
SPELL_FEELING_FROGGY = 43906,
SPELL_SEDUCTION_VISUAL = 43919
};
class npc_pet_gen_mojo : public CreatureScript
{
public:
npc_pet_gen_mojo() : CreatureScript("npc_pet_gen_mojo") { }
struct npc_pet_gen_mojoAI : public ScriptedAI
{
npc_pet_gen_mojoAI(Creature* creature) : ScriptedAI(creature) { }
void Reset() OVERRIDE
{
_victimGUID = 0;
if (Unit* owner = me->GetOwner())
me->GetMotionMaster()->MoveFollow(owner, 0.0f, 0.0f);
}
void EnterCombat(Unit* /*who*/) OVERRIDE { }
void UpdateAI(uint32 /*diff*/) OVERRIDE { }
void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
{
me->HandleEmoteCommand(emote);
Unit* owner = me->GetOwner();
if (emote != TEXT_EMOTE_KISS || !owner || owner->GetTypeId() != TYPEID_PLAYER ||
owner->ToPlayer()->GetTeam() != player->GetTeam())
{
return;
}
Talk(SAY_MOJO, player->GetGUID());
if (_victimGUID)
if (Player* victim = ObjectAccessor::GetPlayer(*me, _victimGUID))
victim->RemoveAura(SPELL_FEELING_FROGGY);
_victimGUID = player->GetGUID();
DoCast(player, SPELL_FEELING_FROGGY, true);
DoCast(me, SPELL_SEDUCTION_VISUAL, true);
me->GetMotionMaster()->MoveFollow(player, 0.0f, 0.0f);
}
private:
uint64 _victimGUID;
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_pet_gen_mojoAI(creature);
}
};
void AddSC_generic_pet_scripts()
{
new npc_pet_gen_mojo();
}

View File

@@ -2034,6 +2034,79 @@ class spell_q12308_escape_from_silverbrook_summon_worgen : public SpellScriptLoa
}
};
enum DeathComesFromOnHigh
{
SPELL_FORGE_CREDIT = 51974,
SPELL_TOWN_HALL_CREDIT = 51977,
SPELL_SCARLET_HOLD_CREDIT = 51980,
SPELL_CHAPEL_CREDIT = 51982,
NPC_NEW_AVALON_FORGE = 28525,
NPC_NEW_AVALON_TOWN_HALL = 28543,
NPC_SCARLET_HOLD = 28542,
NPC_CHAPEL_OF_THE_CRIMSON_FLAME = 28544
};
// 51858 - Siphon of Acherus
class spell_q12641_death_comes_from_on_high : public SpellScriptLoader
{
public:
spell_q12641_death_comes_from_on_high() : SpellScriptLoader("spell_q12641_death_comes_from_on_high") { }
class spell_q12641_death_comes_from_on_high_SpellScript : public SpellScript
{
PrepareSpellScript(spell_q12641_death_comes_from_on_high_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE
{
if (!sSpellMgr->GetSpellInfo(SPELL_FORGE_CREDIT) ||
!sSpellMgr->GetSpellInfo(SPELL_TOWN_HALL_CREDIT) ||
!sSpellMgr->GetSpellInfo(SPELL_SCARLET_HOLD_CREDIT) ||
!sSpellMgr->GetSpellInfo(SPELL_CHAPEL_CREDIT))
return false;
return true;
}
void HandleDummy(SpellEffIndex /*effIndex*/)
{
uint32 spellId = 0;
TC_LOG_ERROR(LOG_FILTER_SPELLS_AURAS, "spell_q12641_death_comes_from_on_high:: Caster: %s (GUID: %u) On Hit Target: Creature: %s (Entry: %u GUID: %u)",
GetOriginalCaster()->GetName().c_str(), GetOriginalCaster()->GetGUIDLow(), GetHitCreature()->GetName().c_str(), GetHitCreature()->GetEntry(), GetHitCreature()->GetGUIDLow());
switch (GetHitCreature()->GetEntry())
{
case NPC_NEW_AVALON_FORGE:
spellId = SPELL_FORGE_CREDIT;
break;
case NPC_NEW_AVALON_TOWN_HALL:
spellId = SPELL_TOWN_HALL_CREDIT;
break;
case NPC_SCARLET_HOLD:
spellId = SPELL_SCARLET_HOLD_CREDIT;
break;
case NPC_CHAPEL_OF_THE_CRIMSON_FLAME:
spellId = SPELL_CHAPEL_CREDIT;
break;
default:
return;
}
GetOriginalCaster()->CastSpell((Unit*)NULL, spellId, true);
}
void Register() OVERRIDE
{
OnEffectHitTarget += SpellEffectFn(spell_q12641_death_comes_from_on_high_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const OVERRIDE
{
return new spell_q12641_death_comes_from_on_high_SpellScript();
}
};
void AddSC_quest_spell_scripts()
{
new spell_q55_sacred_cleansing();
@@ -2083,4 +2156,5 @@ void AddSC_quest_spell_scripts()
new spell_q12690_burst_at_the_seams();
new spell_q12308_escape_from_silverbrook_summon_worgen();
new spell_q12308_escape_from_silverbrook();
new spell_q12641_death_comes_from_on_high();
}

View File

@@ -1569,130 +1569,34 @@ public:
## npc_brewfest_reveler
####*/
class npc_brewfest_reveler : public CreatureScript
enum BrewfestReveler
{
public:
npc_brewfest_reveler() : CreatureScript("npc_brewfest_reveler") { }
struct npc_brewfest_revelerAI : public ScriptedAI
{
npc_brewfest_revelerAI(Creature* creature) : ScriptedAI(creature) {}
void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
{
if (!IsHolidayActive(HOLIDAY_BREWFEST))
return;
if (emote == TEXT_EMOTE_DANCE)
me->CastSpell(player, 41586, false);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_brewfest_revelerAI(creature);
}
SPELL_BREWFEST_TOAST = 41586
};
#define SAY_RANDOM_MOJO0 "Now that's what I call froggy-style!"
#define SAY_RANDOM_MOJO1 "Your lily pad or mine?"
#define SAY_RANDOM_MOJO2 "This won't take long, did it?"
#define SAY_RANDOM_MOJO3 "I thought you'd never ask!"
#define SAY_RANDOM_MOJO4 "I promise not to give you warts..."
#define SAY_RANDOM_MOJO5 "Feelin' a little froggy, are ya?"
#define SAY_RANDOM_MOJO6a "Listen, "
#define SAY_RANDOM_MOJO6b ", I know of a little swamp not too far from here...."
#define SAY_RANDOM_MOJO7 "There's just never enough Mojo to go around..."
class npc_mojo : public CreatureScript
class npc_brewfest_reveler : public CreatureScript
{
public:
npc_mojo() : CreatureScript("npc_mojo") { }
public:
npc_brewfest_reveler() : CreatureScript("npc_brewfest_reveler") { }
struct npc_mojoAI : public ScriptedAI
{
npc_mojoAI(Creature* creature) : ScriptedAI(creature) {Reset();}
uint32 hearts;
uint64 victimGUID;
void Reset() OVERRIDE
struct npc_brewfest_revelerAI : public ScriptedAI
{
victimGUID = 0;
hearts = 15000;
if (Unit* own = me->GetOwner())
me->GetMotionMaster()->MoveFollow(own, 0, 0);
}
npc_brewfest_revelerAI(Creature* creature) : ScriptedAI(creature) { }
void EnterCombat(Unit* /*who*/)OVERRIDE {}
void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
{
if (!IsHolidayActive(HOLIDAY_BREWFEST))
return;
void UpdateAI(uint32 diff) OVERRIDE
if (emote == TEXT_EMOTE_DANCE)
me->CastSpell(player, SPELL_BREWFEST_TOAST, false);
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
if (me->HasAura(20372))
{
if (hearts <= diff)
{
me->RemoveAurasDueToSpell(20372);
hearts = 15000;
} hearts -= diff;
}
return new npc_brewfest_revelerAI(creature);
}
void ReceiveEmote(Player* player, uint32 emote) OVERRIDE
{
me->HandleEmoteCommand(emote);
Unit* owner = me->GetOwner();
if (emote != TEXT_EMOTE_KISS || !owner || owner->GetTypeId() != TYPEID_PLAYER ||
owner->ToPlayer()->GetTeam() != player->GetTeam())
{
return;
}
std::string whisp = "";
switch (rand() % 8)
{
case 0:
whisp.append(SAY_RANDOM_MOJO0);
break;
case 1:
whisp.append(SAY_RANDOM_MOJO1);
break;
case 2:
whisp.append(SAY_RANDOM_MOJO2);
break;
case 3:
whisp.append(SAY_RANDOM_MOJO3);
break;
case 4:
whisp.append(SAY_RANDOM_MOJO4);
break;
case 5:
whisp.append(SAY_RANDOM_MOJO5);
break;
case 6:
whisp.append(SAY_RANDOM_MOJO6a);
whisp.append(player->GetName());
whisp.append(SAY_RANDOM_MOJO6b);
break;
case 7:
whisp.append(SAY_RANDOM_MOJO7);
break;
}
me->MonsterWhisper(whisp.c_str(), player->GetGUID());
if (victimGUID)
if (Player* victim = ObjectAccessor::GetPlayer(*me, victimGUID))
victim->RemoveAura(43906); // remove polymorph frog thing
me->AddAura(43906, player); // add polymorph frog thing
victimGUID = player->GetGUID();
DoCast(me, 20372, true); // tag.hearts
me->GetMotionMaster()->MoveFollow(player, 0, 0);
hearts = 15000;
}
};
CreatureAI* GetAI(Creature* creature) const OVERRIDE
{
return new npc_mojoAI(creature);
}
};
enum TrainingDummy
@@ -2548,7 +2452,6 @@ void AddSC_npcs_special()
new npc_steam_tonk();
new npc_tonk_mine();
new npc_brewfest_reveler();
new npc_mojo();
new npc_training_dummy();
new npc_wormhole();
new npc_pet_trainer();