Remise à zéro de la mana/vie/cooldown en début de duel
Bonjour à vous,

Je vais vous partager un script demandé souvent par les serveurs PVP :

Fonctions :
- Remise de la mana en début de duel
- Remise de la vie en début de duel
- Cooldown remis à zéro en début de duel

Script :
diff -r 8f824d68fad6 src/game/DuelHandler.cpp 
--- a/src/game/DuelHandler.cpp
+++ b/src/game/DuelHandler.cpp 
@@ -51,6 +51,15 @@ 
              pl->duel->startTimer = now; 
              plTarget->duel->startTimer = now; 
                     
+        // reset cooldowns et restauration vie et mana
+        pl->SetHealth(pl->GetMaxHealth()); 
+        plTarget->SetHealth(plTarget->GetMaxHealth()); 
+ 
+        if (pl->getPowerType() == POWER_MANA) pl->SetPower(POWER_MANA, pl->GetMaxPower(POWER_MANA)); 
+        if (plTarget->getPowerType() == POWER_MANA) plTarget->SetPower(POWER_MANA, plTarget->GetMaxPower(POWER_MANA)); 
+        // seulement pour les temps de recharge qui dure moins de 15 min 
+        if (!pl->GetMap()->IsDungeon()) { pl->RemoveArenaSpellCooldowns(); plTarget->RemoveArenaSpellCooldowns(); } 
+ 
              pl->SendDuelCountdown(3000); 
              plTarget->SendDuelCountdown(3000); 
           }

Cordialement.
#Accepté et déplacé !

Merci pour ce partage, Arediss Wink
Merci bien !
Merci Arediss Wink
Juste pour une info.

Trinitycore inclut des "hook" qui permettent de placer du code "custom" de manière un peu plus propre.

voilà un exemple plus "propre" de l’implémentation :

#include "ScriptPCH.h"

class player_resetduel_script : public PlayerScript
{
public:
    player_resetduel_script() : PlayerScript("player_resetduel_script"){}

    void OnDuelStart(Player* player1, Player* player2)
    {
        //Remove all cooldown
        player1->RemoveAllSpellCooldown();
        player2->RemoveAllSpellCooldown();

        //Set power and health at max p1
        player1->SetHealth(player1->GetMaxHealth());
        if (player1->getPowerType() == POWER_MANA)
            player1->SetPower(POWER_MANA, player1->GetMaxPower(POWER_MANA));

        //Set power and health at max p2
        player2->SetHealth(player2->GetMaxHealth());
        if (player2->getPowerType() == POWER_MANA)
            player2->SetPower(POWER_MANA, player2->GetMaxPower(POWER_MANA));
    }
    
    void OnDuelEnd(Player* winner, Player* loser, DuelCompleteType)
    {

        winner->RemoveAllSpellCooldown();
        loser->RemoveAllSpellCooldown();

        winner->SetHealth(winner->GetMaxHealth());
        if (winner->getPowerType() == POWER_MANA)
            winner->SetPower(POWER_MANA, winner->GetMaxPower(POWER_MANA));
        
        loser->SetHealth(loser->GetMaxHealth());
        if (loser->getPowerType() == POWER_MANA)
            loser->SetPower(POWER_MANA, loser->GetMaxPower(POWER_MANA));
    }
};
           
void ADDSC_player_resetduel_script()
{
    new player_resetduel_script();
}

HAVE FUN !! Big Grin
Bon partage ! Smile
Effectivement c'est plus propre du côté de totomakers tout de même ^^

Retourner en haut WoW-Emu