🤓Exemples - Équipes

Ce document contient des exemples pratiques pour la gestion des équipes avec le plugin Horizons.

Table des matières

Gestion basique des équipes

Vérifier l'équipe d'un joueur

command /myteam:
    trigger:
        set {_team} to team of player
        if {_team} is set:
            send "&a🏆 Vous êtes dans l'équipe: &6%{_team}%" to player
            send "&7Nom d'affichage: &e%display name of team {_team}%" to player
            send "&7Préfixe: %prefix of team {_team}%" to player
            send "&7Score actuel: &a%score of team {_team}% points" to player
        else:
            send "&cVous n'êtes dans aucune équipe!" to player

Rejoindre une équipe

command /jointeam <text>:
    trigger:
        set {_teamName} to arg-1
        if team {_teamName} exists:
            if player has a team:
                send "&cVous êtes déjà dans une équipe! Utilisez /leaveteam d'abord." to player
            else:
                set team of player to {_teamName}
                send "&a✅ Vous avez rejoint l'équipe &6%{_teamName}%!" to player
                broadcast "&e%player% a rejoint l'équipe &6%{_teamName}%!"
        else:
            send "&cL'équipe '%{_teamName}%' n'existe pas!" to player

Quitter son équipe

command /leaveteam:
    trigger:
        if player has a team:
            set {_team} to team of player
            remove player from their team
            send "&a✅ Vous avez quitté l'équipe &6%{_team}%!" to player
            broadcast "&e%player% a quitté l'équipe &6%{_team}%!"
        else:
            send "&cVous n'êtes dans aucune équipe!" to player

Systèmes de score

Système de récompense basé sur le score

command /checkreward:
    trigger:
        set {_team} to team of player
        if {_team} is set:
            set {_score} to score of team {_team}
            if {_score} >= 1000:
                send "&a🎉 Votre équipe a débloqué le rang LÉGENDAIRE!" to player
                give diamond sword named "&6Épée Légendaire" to player
            else if {_score} >= 500:
                send "&e⭐ Votre équipe a le rang EXPERT!" to player
                give iron sword named "&eÉpée d'Expert" to player
            else if {_score} >= 100:
                send "&7🥉 Votre équipe a le rang DÉBUTANT!" to player
                give stone sword named "&7Épée de Débutant" to player
            else:
                send "&cVotre équipe n'a pas encore de rang. Score: %{_score}%" to player
        else:
            send "&cVous devez être dans une équipe!" to player

Système de bonus quotidien

every day at 12:00:
    broadcast "&6🌟 Distribution des bonus quotidiens!"
    
    loop all teams:
        set {_team} to loop-value
        set {_score} to score of team {_team}
        set {_memberCount} to size of members of team {_team}
        
        # Bonus basé sur l'activité
        if {_memberCount} >= 5:
            add 100 to score of team {_team}
            set {_bonus} to 100
        else if {_memberCount} >= 3:
            add 50 to score of team {_team}
            set {_bonus} to 50
        else:
            add 25 to score of team {_team}
            set {_bonus} to 25
        
        # Notification aux membres
        loop all members of team {_team}:
            send "&a💰 Bonus quotidien: +%{_bonus}% points pour votre équipe!" to loop-value-2 parsed as player

Système de pénalités

on death of player:
    if player has a team:
        set {_team} to team of player
        remove 10 from score of team {_team}
        send "&c💀 Votre mort a coûté 10 points à votre équipe!" to player
        
        # Notification à l'équipe
        loop all members of team {_team}:
            if loop-value parsed as player is not player:
                send "&c⚠️ %player% est mort! L'équipe perd 10 points." to loop-value parsed as player

Classements et leaderboards

Leaderboard complet

command /leaderboard:
    aliases: /lb, /top, /classement
    trigger:
        send "&6╔══════════════════════════════════════╗" to player
        send "&6║        &l🏆 CLASSEMENT DES ÉQUIPES &6║" to player
        send "&6╚══════════════════════════════════════╝" to player
        
        set {_teams::*} to all teams sorted by score
        set {_position} to 1
        
        loop {_teams::*}:
            set {_team} to loop-value
            set {_score} to score of team {_team}
            set {_members} to size of members of team {_team}
            set {_displayName} to display name of team {_team}
            
            if {_position} <= 10:
                # Médailles pour le top 3
                if {_position} is 1:
                    set {_medal} to "&6🥇"
                else if {_position} is 2:
                    set {_medal} to "&7🥈"
                else if {_position} is 3:
                    set {_medal} to "&c🥉"
                else:
                    set {_medal} to "&e%{_position}%."
                
                send "%{_medal}% &f%{_displayName}% &7- &a%{_score}% pts &7(%{_members}% membres)" to player
                add 1 to {_position}
        
        send "&6════════════════════════════════════════" to player

Leaderboard personnel

command /teamstats:
    trigger:
        set {_team} to team of player
        if {_team} is set:
            set {_teams::*} to all teams sorted by score
            set {_position} to 1
            
            loop {_teams::*}:
                if loop-value is {_team}:
                    exit loop
                add 1 to {_position}
            
            set {_score} to score of team {_team}
            set {_members::*} to members of team {_team}
            set {_displayName} to display name of team {_team}
            
            send "&6╔══════════════════════════════════════╗" to player
            send "&6║          &l📊 STATS DE L'ÉQUIPE &6║" to player
            send "&6╚══════════════════════════════════════╝" to player
            send "&eÉquipe: &f%{_displayName}%" to player
            send "&ePosition: &a#%{_position}%" to player
            send "&eScore: &a%{_score}% points" to player
            send "&eMembres (%size of {_members::*}%):" to player
            
            loop {_members::*}:
                send "&7  - &f%loop-value%" to player
        else:
            send "&cVous n'êtes dans aucune équipe!" to player

Commandes d'administration

Création d'équipe avancée

command /createteam <text> <text> <text>:
    permission: admin.teams
    usage: /createteam <nom> <préfixe> <nom_affichage>
    trigger:
        set {_name} to arg-1
        set {_prefix} to arg-2
        set {_displayName} to arg-3
        
        if team {_name} exists:
            send "&cL'équipe '%{_name}%' existe déjà!" to player
        else:
            create team {_name} with prefix {_prefix} and display name {_displayName}
            send "&a✅ Équipe '%{_name}%' créée avec succès!" to player
            send "&7Préfixe: %{_prefix}%" to player
            send "&7Nom d'affichage: &e%{_displayName}%" to player
            broadcast "&6📢 Nouvelle équipe créée: &e%{_displayName}%!"

Gestion des scores par admin

command /teamscore <text> <text> [<number>]:
    permission: admin.teams.score
    usage: /teamscore <équipe> <set/add/remove> [montant]
    trigger:
        set {_team} to arg-1
        set {_action} to arg-2
        set {_amount} to arg-3
        
        if team {_team} doesn't exist:
            send "&cL'équipe '%{_team}%' n'existe pas!" to player
            stop
        
        if {_action} is "set":
            if {_amount} is set:
                set score of team {_team} to {_amount}
                send "&a✅ Score de l'équipe %{_team}% défini à %{_amount}%!" to player
            else:
                send "&cVeuillez spécifier un montant!" to player
        
        else if {_action} is "add":
            if {_amount} is set:
                add {_amount} to score of team {_team}
                send "&a✅ +%{_amount}% points ajoutés à l'équipe %{_team}%!" to player
            else:
                send "&cVeuillez spécifier un montant!" to player
        
        else if {_action} is "remove":
            if {_amount} is set:
                remove {_amount} from score of team {_team}
                send "&a✅ -%{_amount}% points retirés de l'équipe %{_team}%!" to player
            else:
                send "&cVeuillez spécifier un montant!" to player
        
        else:
            send "&cAction invalide! Utilisez: set, add ou remove" to player

Transfert de joueur

command /transferplayer <player> <text>:
    permission: admin.teams.transfer
    usage: /transferplayer <joueur> <équipe>
    trigger:
        set {_targetPlayer} to arg-1
        set {_targetTeam} to arg-2
        
        if team {_targetTeam} doesn't exist:
            send "&cL'équipe '%{_targetTeam}%' n'existe pas!" to player
            stop
        
        if {_targetPlayer} has a team:
            set {_oldTeam} to team of {_targetPlayer}
            send "&7%{_targetPlayer}% était dans l'équipe: &e%{_oldTeam}%" to player
        
        set team of {_targetPlayer} to {_targetTeam}
        send "&a✅ %{_targetPlayer}% a été transféré dans l'équipe %{_targetTeam}%!" to player
        send "&a📧 Vous avez été transféré dans l'équipe &6%{_targetTeam}%!" to {_targetPlayer}

Événements et notifications

Système de notifications d'équipe

function teamBroadcast(team: text, message: text):
    loop all members of team {_team}:
        send {_message} to loop-value parsed as player

on join:
    wait 1 second
    if player has a team:
        set {_team} to team of player
        teamBroadcast({_team}, "&a👋 %player% s'est connecté!")
        send "&a🏠 Bienvenue dans l'équipe &6%{_team}%!" to player

on quit:
    if player has a team:
        set {_team} to team of player
        teamBroadcast({_team}, "&c👋 %player% s'est déconnecté!")

Système de milestones d'équipe

function checkTeamMilestone(team: text):
    set {_score} to score of team {_team}
    
    # Vérifier les paliers
    if {_score} is 100:
        broadcast "&6🎯 L'équipe &e%{_team}% &6a atteint 100 points!"
        loop all members of team {_team}:
            give 5 emeralds to loop-value parsed as player
    
    else if {_score} is 500:
        broadcast "&6🎯 L'équipe &e%{_team}% &6a atteint 500 points!"
        loop all members of team {_team}:
            give diamond to loop-value parsed as player
    
    else if {_score} is 1000:
        broadcast "&6🎯 L'équipe &e%{_team}% &6a atteint 1000 points!"
        loop all members of team {_team}:
            give diamond sword named "&6Épée Légendaire" to loop-value parsed as player

# Déclencher la vérification quand le score change
every 30 seconds:
    loop all teams:
        checkTeamMilestone(loop-value)

Chat d'équipe

command /tc <text>:
    aliases: /teamchat
    usage: /tc <message>
    trigger:
        if player has a team:
            set {_team} to team of player
            set {_prefix} to prefix of team {_team}
            set {_message} to arg-1
            
            loop all members of team {_team}:
                send "&8[&6ÉQUIPE&8] %{_prefix}%%player%&7: &f%{_message}%" to loop-value parsed as player
        else:
            send "&cVous devez être dans une équipe pour utiliser le chat d'équipe!" to player

Notes importantes

  1. Performance : Les boucles sur toutes les équipes peuvent être coûteuses. Utilisez-les avec modération.

  2. Synchronisation : En mode multi-serveur, les changements d'équipes sont automatiquement synchronisés.

  3. Permissions : Adaptez les permissions selon votre configuration serveur.

  4. Stockage : Les données d'équipes sont persistantes et sauvegardées automatiquement.