feat(custom): Klauss - PNJ taux XP perso, gossip FR, cap x7 (entry 1000000)

This commit is contained in:
SylvaniaCore deploy
2026-06-17 09:02:33 +00:00
parent 18f0889847
commit 23bfb33b30
+22 -10
View File
@@ -15,6 +15,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>. * with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "Chat.h"
#include "Creature.h" #include "Creature.h"
#include "Player.h" #include "Player.h"
#include "ScriptedGossip.h" #include "ScriptedGossip.h"
@@ -26,29 +27,32 @@ class npc_rate_xp_modifier : public CreatureScript
public: public:
npc_rate_xp_modifier() : CreatureScript("npc_rate_xp_modifier") { } npc_rate_xp_modifier() : CreatureScript("npc_rate_xp_modifier") { }
#define MAX_RATE uint32(10) // Taux d'expérience personnel maximum sélectionnable (bride serveur)
#define MAX_RATE uint32(7)
bool OnGossipHello(Player* player, Creature* creature) override bool OnGossipHello(Player* player, Creature* creature) override
{ {
// Sans taux personnel, le core applique RATE_XP_QUEST aux kills
// comme aux quêtes (Formulas.h / Player.cpp) : c'est LE taux par défaut.
float defaultRate = sWorld->getRate(RATE_XP_QUEST);
for (uint32 i = 1; i <= MAX_RATE; ++i) for (uint32 i = 1; i <= MAX_RATE; ++i)
{ {
if (i == player->GetPersonnalXpRate()) if (i == player->GetPersonnalXpRate())
continue; continue;
if (i == sWorld->getRate(RATE_XP_KILL)) if (float(i) == defaultRate)
continue; continue;
std::ostringstream gossipText; std::ostringstream gossipText;
gossipText << "Rate x" << i; gossipText << "Taux d'expérience x" << i;
AddGossipItemFor(player, GOSSIP_ICON_CHAT, gossipText.str(), GOSSIP_SENDER_MAIN, i); AddGossipItemFor(player, GOSSIP_ICON_CHAT, gossipText.str(), GOSSIP_SENDER_MAIN, i);
} }
if (player->GetPersonnalXpRate()) // Toujours proposer le retour au taux par défaut du royaume (x1, Blizzlike)
{ std::ostringstream defaultText;
std::ostringstream gossipText; defaultText << "Revenir au taux par défaut (x" << defaultRate << ")";
gossipText << "Default Rate - x" << sWorld->getRate(RATE_XP_KILL); AddGossipItemFor(player, GOSSIP_ICON_CHAT, defaultText.str(), GOSSIP_SENDER_MAIN, 0);
AddGossipItemFor(player, GOSSIP_ICON_CHAT, gossipText.str(), GOSSIP_SENDER_MAIN, 0);
}
SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
return true; return true;
@@ -57,7 +61,15 @@ class npc_rate_xp_modifier : public CreatureScript
bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*uiSender*/, uint32 uiAction) override bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*uiSender*/, uint32 uiAction) override
{ {
CloseGossipMenuFor(player); CloseGossipMenuFor(player);
player->SetPersonnalXpRate(float(std::min(MAX_RATE, uiAction)));
uint32 newRate = std::min(MAX_RATE, uiAction);
player->SetPersonnalXpRate(float(newRate));
if (newRate)
ChatHandler(player->GetSession()).PSendSysMessage("Votre taux d'expérience personnel est désormais x%u.", newRate);
else
ChatHandler(player->GetSession()).PSendSysMessage("Votre taux d'expérience est revenu à la valeur par défaut du royaume (x%g).", sWorld->getRate(RATE_XP_QUEST));
return true; return true;
} }
}; };