Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Bloque de código
languagecpp
    // 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
languagecpp
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();
}