Been playing around a bit and was wondering if these two scripts were correct… =)
The reason I am using areatrigger and NPC scripts is because the pre-TBC versions were using areatriggers and the TBC and up versions used triggers. /emoticons/default_smile.png
Problem:
It seems to crash on the different faction quests (Dark Portal and Caverns of Time).
npcs_special.cpp
[CODE]/*######
npc_childrens_week_trigger
######*/
enum ChildrensWeek
{
QUEST_AUCHINDOUN = 10950,
QUEST_DARK_PORTAL_H = 10951,
QUEST_DARK_PORTAL_A = 10952,
QUEST_JHEEL_AERIS = 10954,
QUEST_SEAT_NAARU = 10956,
QUEST_CALL_FARSEER = 10958,
QUEST_CAVERNS_A = 10962,
QUEST_CAVERNS_H = 10963,
QUEST_THRONE = 10953,
QUEST_SPOREGGAR = 10945,
NPC_AUCHINDOUN = 22831,
NPC_SEAT_NAARU = 22851,
NPC_CALL_FARSEER = 22905,
NPC_DARK_PORTAL = 22833,
NPC_CAVERNS = 22872,
NPC_AERIS_LANDING = 22838,
NPC_SPOREGGAR = 22829,
NPC_THRONE_ELEMENT = 22839,
AURA_ORPHAN_OUT = 58818,
};
class npc_childrens_week_trigger : public CreatureScript
{
public:
npc_childrens_week_trigger() : CreatureScript(“npc_childrens_week_trigger”) { }
CreatureAI* GetAI(Creature* creature) const
{
return new npc_childrens_week_triggerAI (creature);
}
struct npc_childrens_week_triggerAI : public ScriptedAI
{
npc_childrens_week_triggerAI(Creature* c) : ScriptedAI(c) {}
void Reset() { }
void EnterCombat(Unit* /*who*/) { }
void MoveInLineOfSight(Unit* who)
{
uint32 questId = 0;
if (!who)
return;
switch (me->GetEntry())
{
case NPC_AUCHINDOUN:
questId = QUEST_AUCHINDOUN;
break;
case NPC_SEAT_NAARU:
questId = QUEST_SEAT_NAARU;
break;
case NPC_CALL_FARSEER:
questId = QUEST_CALL_FARSEER;
break;
case NPC_DARK_PORTAL:
questId = who->ToPlayer()->GetTeam() == ALLIANCE ? QUEST_DARK_PORTAL_A : QUEST_DARK_PORTAL_H;
break;
case NPC_CAVERNS:
questId = who->ToPlayer()->GetTeam() == ALLIANCE ? QUEST_CAVERNS_A : QUEST_CAVERNS_H;
break;
case NPC_AERIS_LANDING:
questId = QUEST_JHEEL_AERIS;
break;
case NPC_SPOREGGAR:
questId = QUEST_SPOREGGAR;
break;
case NPC_THRONE_ELEMENT:
questId = QUEST_THRONE;
break;
}
if (who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 10) && who->HasAura(AURA_ORPHAN_OUT))
{
if (who->ToPlayer()->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
who->ToPlayer()->AreaExploredOrEventHappens(questId);
}
}
};
};[/code]
areatrigger_scripts.cpp
[code]/*######
at_bring_your_orphan_to
######*/
enum ChildrensWeek
{
QUEST_DOWN_AT_THE_DOCKS = 910,
QUEST_GATEWAY_TO_THE_FRONTIER = 911,
QUEST_LORDAERON_THRONE_ROOM = 1800,
QUEST_BOUGHT_OF_ETERNALS = 1479,
QUEST_SPOOKY_LIGHTHOUSE = 1687,
QUEST_STONEWROUGHT_DAM = 1558,
AT_DOWN_AT_THE_DOCKS = 3551,
AT_GATEWAY_TO_THE_FRONTIER = 3549,
AT_LORDAERON_THRONE_ROOM = 3547,
AT_BOUGHT_OF_ETERNALS = 3546,
AT_SPOOKY_LIGHTHOUSE = 3552,
AT_STONEWROUGHT_DAM = 3548,
AT_DARK_PORTAL = 4356,
AURA_ORPHAN_OUT = 58818,
};
class AreaTrigger_at_bring_your_orphan_to : public AreaTriggerScript
{
public:
AreaTrigger_at_bring_your_orphan_to() : AreaTriggerScript(“at_bring_your_orphan_to”) { }
bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
{
uint32 questId = 0;
if (player->isDead() || !player->HasAura(AURA_ORPHAN_OUT))
return false;
switch (trigger->id)
{
case AT_DOWN_AT_THE_DOCKS:
questId = QUEST_DOWN_AT_THE_DOCKS;
break;
case AT_GATEWAY_TO_THE_FRONTIER:
questId = QUEST_GATEWAY_TO_THE_FRONTIER;
break;
case AT_LORDAERON_THRONE_ROOM:
questId = QUEST_LORDAERON_THRONE_ROOM;
break;
case AT_BOUGHT_OF_ETERNALS:
questId = QUEST_BOUGHT_OF_ETERNALS;
break;
case AT_SPOOKY_LIGHTHOUSE:
questId = QUEST_SPOOKY_LIGHTHOUSE;
break;
case AT_STONEWROUGHT_DAM:
questId = QUEST_STONEWROUGHT_DAM;
break;
}
if (questId && player->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
player->AreaExploredOrEventHappens(questId);
return true;
}
};
[/CODE]
[CODE]-- Areatrigger
DELETE FROM areatrigger_scripts
WHERE entry
IN (3551,3549,3547,3546,3552,3548);
INSERT INTO areatrigger_scripts
(entry
,ScriptName
) VALUES
(3551,‘at_bring_your_orphan_to’),
(3549,‘at_bring_your_orphan_to’),
(3547,‘at_bring_your_orphan_to’),
(3546,‘at_bring_your_orphan_to’),
(3552,‘at_bring_your_orphan_to’),
(3548,‘at_bring_your_orphan_to’);
– Outland Children’s Week XX Trigger
UPDATE creature_template
SET ScriptName
=‘npc_childrens_week_trigger’,flags_extra
=130 WHERE entry
IN (22831,22851,22905,22833,22872,22838,22829,22839,22866,22867,26400);
– [Q] The Seat of the Naaru should cast Blessing of O’ros
UPDATE quest_template
SET RewSpellCast
=39826 WHERE entry
=10956;
– All of them should be events instead of auto-complete
UPDATE quest_template
SET SpecialFlags
=2 WHERE entry
IN (10950,10951,10952,10954,10956,10958,10962,10963,10953,10945);
– Spawn missing triggers
DELETE FROM creature
WHERE id
IN (22831,22833,22838,22829);
INSERT INTO creature
(guid
,id
,map
,spawnMask
,phaseMask
,modelid
,equipment_id
,position_x
,position_y
,position_z
,orientation
,spawntimesecs
,spawndist
,currentwaypoint
,curhealth
,curmana
,MovementType
,npcflag
,unit_flags
,dynamicflags
) VALUES
(1705628,22831,530,1,1,0,0,-3327.79,4937.63,-99.4667,3.01952,300,0,0,6986,0,0,0,0,0),-- Outland Children’s Week Auchindoun Trigger
(1705630,22833,530,1,1,0,0,-249.702,1011.02,56.8248,1.645,300,0,0,6986,0,0,0,0,0),-- Outland Children’s Week Dark Portal Trigger
(1705871,22838,530,1,1,0,0,-2078.94,8557.77,22.8211,2.80008,300,0,0,42,0,0,0,0,0),-- Outland Children’s Week Aeris Landing Trigger
(1705872,22829,530,1,1,0,0,205.697,8549.43,22.6169,1.85123,300,0,0,6986,0,0,0,0,0); – Outland Children’s Week Sporeggar Trigger[/sql]
[/CODE]