From e59059e1bd2f67691e2da0105771b0cb55b123a4 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 22 Jun 2025 21:56:58 +0200 Subject: Core/Players: PlayerChoice improvements * Add missing choice properties to database (InfiniteRange, ShowChoicesAsList) * Allow limiiting the number of responses sent at the same time * Fixed duration sent in SMSG_DISPLAY_PLAYER_CHOICE * Remove dynamically generated response identifiers from database * Remove auto rewarding choice responses * Change response scripts to be bound to scriptname --- src/server/game/Scripting/ScriptMgr.h | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/server/game/Scripting/ScriptMgr.h') diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 482d687f659..2e711c9ffae 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -76,6 +76,8 @@ struct CreatureTemplate; struct CreatureData; struct ItemTemplate; struct MapEntry; +struct PlayerChoice; +struct PlayerChoiceResponse; struct Position; struct QuestObjective; struct SceneTemplate; @@ -789,9 +791,6 @@ class TC_GAME_API PlayerScript : public ScriptObject // Called when a player completes a movie virtual void OnMovieComplete(Player* player, uint32 movieId); - - // Called when a player choose a response from a PlayerChoice - virtual void OnPlayerChoiceResponse(Player* player, uint32 choiceId, uint32 responseId); }; class TC_GAME_API AccountScript : public ScriptObject @@ -991,6 +990,26 @@ class TC_GAME_API EventScript : public ScriptObject virtual void OnTrigger(WorldObject* object, WorldObject* invoker, uint32 eventId); }; +class TC_GAME_API PlayerChoiceScript : public ScriptObject +{ + protected: + + explicit PlayerChoiceScript(char const* name) noexcept; + + public: + + ~PlayerChoiceScript(); + + /** + * @param object Source object of the PlayerChoice (can be nullptr) + * @param player Player making the choice + * @param choice Database template of PlayerChoice + * @param response Database template of selected PlayerChoice response + * @param clientIdentifier Dynamically generated identifier of the response, changes every time PlayerChoice is sent to player + */ + virtual void OnResponse(WorldObject* object, Player* player, PlayerChoice const* choice, PlayerChoiceResponse const* response, uint16 clientIdentifier); +}; + // Manages registration, loading, and execution of scripts. class TC_GAME_API ScriptMgr { @@ -1226,7 +1245,7 @@ class TC_GAME_API ScriptMgr void OnQuestStatusChange(Player* player, uint32 questId); void OnPlayerRepop(Player* player); void OnMovieComplete(Player* player, uint32 movieId); - void OnPlayerChoiceResponse(Player* player, uint32 choiceId, uint32 responseId); + void OnPlayerChoiceResponse(WorldObject* object, Player* player, PlayerChoice const* choice, PlayerChoiceResponse const* response, uint16 clientIdentifier); public: /* AccountScript */ -- cgit v1.2.3