...
Bloque de código |
---|
|
// As the name says code inside brackets is executed when scene starts, e.g. by spell or by "player->GetSceneMgr().PlayScene(SceneId);"
void OnSceneStart(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) override
{
}
// Code inside brackets is executed when CMSG_SCENE_TRIGGER_EVENT with similar sceneInstanceID as scene is sent
void OnSceneTriggerEvent(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& triggerName) override
{
// IMPORTANT: you need to select correct triggerName otherwise your code is executed all the time if some triggerName is sent toby sceneclient
// triggerName is sent by CMSG_SCENE_TRIGGER_EVENT (check PacketStruct), you can find it also in parsed sniff or inside SceneScript.db2 (lua)
if (triggerName == "IKILLEDIT")
player->KilledMonsterCredit(KILLED_MOB);
if (triggerName == "UPDATEPHASE")
player->UpdateAreaAndZonePhase();
}
// As the name says code inside brackets is executed when scene is canceled, e.g. player presses ESC and confirms
void OnSceneCancel(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate) override
{
}
// As the name says code inside brackets is executed when scene is properly completed
void OnSceneComplete(Player* player, uint32 sceneInstanceID, SceneTemplate const* sceneTemplate) override
{
} |
Note: triggerNames are fixed names by Blizzard.
Example Script
Bloque de código |
---|
|
enum SceneCreatures
{
SEE_FELSABER_QUEST_KILL_CREDIT = 101534,
SEVIS_BRIGHTFLAME_ASHTONGUE = 99916
};
class scene_enter_the_illidari_ashtongue : public SceneScript
{
public:
scene_enter_the_illidari_ashtongue() : SceneScript("scene_enter_the_illidari_ashtongue") { }
void OnSceneStart(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/) override
{
//This must be Personal Spawn (NYI)
Creature* sevis = GetClosestCreatureWithEntry(player, SEVIS_BRIGHTFLAME_ASHTONGUE, 5);
if (sevis == nullptr)
return;
player->SummonCreature(SEVIS_BRIGHTFLAME_ASHTONGUE, sevis->GetPosition(), TEMPSUMMON_TIMED_DESPAWN, 18000);
player->UpdateAreaAndZonePhase();
}
void OnSceneTriggerEvent(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& triggerName) override
{
if (triggerName == "SEEFELSABERCREDIT")
player->KilledMonsterCredit(SEE_FELSABER_QUEST_KILL_CREDIT);
if (triggerName == "UPDATEPHASE")
player->UpdateAreaAndZonePhase();
}
};
void AddSC_scene_scripts()
{
new scene_enter_the_illidari_ashtongue();
} |