feat(custom): Klauss - PNJ taux XP perso, gossip FR, cap x7 (entry 1000000)
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Chat.h"
|
||||
#include "Creature.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedGossip.h"
|
||||
@@ -26,29 +27,32 @@ class npc_rate_xp_modifier : public CreatureScript
|
||||
public:
|
||||
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
|
||||
{
|
||||
// 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)
|
||||
{
|
||||
if (i == player->GetPersonnalXpRate())
|
||||
continue;
|
||||
|
||||
if (i == sWorld->getRate(RATE_XP_KILL))
|
||||
if (float(i) == defaultRate)
|
||||
continue;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
if (player->GetPersonnalXpRate())
|
||||
{
|
||||
std::ostringstream gossipText;
|
||||
gossipText << "Default Rate - x" << sWorld->getRate(RATE_XP_KILL);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, gossipText.str(), GOSSIP_SENDER_MAIN, 0);
|
||||
}
|
||||
// Toujours proposer le retour au taux par défaut du royaume (x1, Blizzlike)
|
||||
std::ostringstream defaultText;
|
||||
defaultText << "Revenir au taux par défaut (x" << defaultRate << ")";
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, defaultText.str(), GOSSIP_SENDER_MAIN, 0);
|
||||
|
||||
SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
|
||||
return true;
|
||||
@@ -57,7 +61,15 @@ class npc_rate_xp_modifier : public CreatureScript
|
||||
bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*uiSender*/, uint32 uiAction) override
|
||||
{
|
||||
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;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user