phasenwechsel bei quest annahme

hallo leute,

ich möchte einen spieler wenn er eine quest annimmt in der phase verschieben ich habe es mit einer smartai versucht aber damit hat es leider nicht funktioniert.

hier meine sql query für den phasenwechsel.

INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES (34863, 0, 0, 0, 19, 0, 100, 0, 14091, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'NPC - On Quest Complete - Set Phase 2');

hat vielleicht jemand eine idee wie es klappen könnte ?

gruß
malf

hab jetzt eine halbwegs brauchbare lösung und zwar regel ich es über die phase_definitions und conditions jedoch wenn ich die condition auf quest rewarded setze dann greift sie erst nach einem relog vielleicht jemand ne idee ?

Ich habe sowas meistens über ein einfaches C+±Script gelöst:

bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) { switch (quest->GetQuestId()) { case deine_questID: player->SetPhaseMask(deine_phasemask,true); break; } return false; }

habe ich auch gedacht das ich es über ein c++ script mache aber aus irgendeinem grund funktioniert der OnQuestReward und OnQuestAccept nicht mehr es springt garnicht erst in die Methode rein

aber ich habe einen anderen weg gefunden der funktioniert und zwar über die phase_definitions welche bei 4.3.4 dazugekommen sind

der sql query sieht dann so aus

INSERT INTO phase_definitions (zoneId, entry, phasemask, phaseId, terrainswapmap, flags, comment) VALUES
(4755, 1, 2, 0, 0, 1, 'Example phasemask 2 ');

INSERT INTO conditions (SourceTypeOrReferenceId, SourceGroup, SourceEntry, SourceId, ElseGroup, ConditionTypeOrReference, ConditionTarget, ConditionValue1, ConditionValue2, ConditionValue3, NegativeCondition, ErrorTextId, ScriptName, Comment) VALUES
(25, 4755, 1, 0, 0, 8, 0, 14078, 0, 0, 0, 0, ‘’, ‘’);

aber vielleicht habt ihr ja auch eine ahnung warum mein c++ script nciht funktioniert

class npc_test_npc_script : public CreatureScript
{
public:
    npc_test_npc_script() : CreatureScript("npc_test_npc_script") { }

    bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest)
    {
        player->SetPhaseMask(2,true);
        
        return true;
    }

};

void AddSC_westfall()
{
    new npc_test_npc_script();
}

am db eintrag vom npc liegts auch nicht da ich dort das script eingetragen habe und ich testweise ein gossiphello script eingebaut hatte welches funktioniert hat

ich hatte auch schon das const Quest* quest so drinstehen gehabt Quest const* quest aber hatte auch nichts gebracht

Also ich sehe keinen wirklichen Unterschied im C++ Script außer das du die Methode (OnQuestAccept) mit true verlässt. Probier mal mit false zu leaven. So wie es “Revolution” es gemacht hat in seinem Beispiel!

AAAAhhhh eine Leiche ausgebuddelt! /emoticons/default_ph34r.png

Kollege, das ist ewig her und längst gelöst.