Paste #102836: Unnamed YAML Paste

Date: 2022/11/01 06:30:02 UTC-07:00
Type: YAML

View Raw Paste Download This Paste
Copy Link


# Exemple de script pour une quête
# https://guide.denizenscript.com/guides/put-it-together/kill-quest.html
#
# Ce script est conçu de telle sorte que vous puissiez le copier/coller et le charger sur votre serveur,
#  et l'assigner à un PNJ avec /npc assign --set npc_killquest
# ou /ex assignation set npc_killquest, et tout fonctionnera.
# Vous pouvez ensuite le personnaliser et/ou l'utiliser comme référence pour apprendre.
#
# Script d'affectation de base à affecter a un NPC
#
# # Traduction en français des items mobs ... https://meta.denizenscript.com/Docs/Tags/&translate # #
# ex: <&translate[entity.minecraft.spider]> = Araignée
# <&translate[item.minecraft.diamond_sword]>" = Epée en diamant

npc_killquest:
    type: assignment
    actions:
        on assignment:
        # Activer les deux déclencheurs qui seront utilisés
        - trigger name:click state:true
        - trigger name:chat state:true
    interact scripts:
    # Et liez le script d'interaction ci-dessous
    - npc_killquest_interact

# Format de chat alternatif pour le PNJ si vous n'aimez pas le "chat" par défaut
# si vous créez plusieurs PNJ avec ce script comme modèle, rappelez-vous que vous n'avez besoin que des scripts de format *une fois* (sauf si vous l'avez différent par PNJ)
cchat:
    type: format
    format: <&b><npc.name> <&f>à vous<&co> <&2><[text]>
pchat:
    type: format
    format: <&f>Vous à <&b><npc.name> <&6><[text]>

# Un format propre mais simple pour les instructions données au joueur par le script plutôt que par le PNJ
# (La clarification hors du personnage de ce que le PNJ a dit dans le personnage).
instruction_format:
    type: format
    # Light Gray + Italic
    # Peut aussi s'écrire comme <gray><italic>
    format: <&7><&o>[<[text]><&7><&o>]

npc_killquest_interact:
    type: interact
    steps:
        # Étape par défaut : attendre que le joueur interagisse
        waiting*:
            # L'interaction initiale du joueur avec ce PNJ consiste toujours à faire un clic droit dessus
            click trigger:
                script:
                # Exemple d'engagement par joueur avec un drapeau
                # L'engagement est un moyen d'empêcher les joueurs de spammer les interactions avec un PNJ et de faire échouer les scripts en conséquence.
                # Cela oblige simplement le joueur à attendre sa prochaine interaction jusqu'à ce que l'actuelle soit terminée.
                # Cela fonctionne en utilisant une vérification has_flag au début de chaque interaction pour s'arrêter plus tôt, et en ajoutant/supprimant avant/après les interactions lentes comme les récits avec attentes ci-dessous.
                - if <player.has_flag[npc_engaged]>:
                    - stop
                # Vérifiez le temps de recharge avant de vous engager afin que nous n'ayons pas à nous désengager à l'intérieur du if
                - if <player.has_flag[kill_mobs_quest_cooldown]>:
                    # Alors qu'un temps de recharge *pourrait* être une étape ou une commande de "temps de recharge", l'avoir comme indicateur vous permet de suivre et d'afficher clairement le temps de recharge, ce que les joueurs apprécieront.
                    - narrate format:instruction_format "Vous pourrez répéter cette quête dans <player.flag_expiration[kill_mobs_quest_cooldown].from_now.formatted>."
                    # Si nous plaçons le script * après * un engagement, le désengagement irait ici - juste avant toute commande "stop".
                    - stop
                # Ajoutez le drapeau d'engagement pendant une minute - soit il sera effacé via la commande flag, soit s'il y a un bogue, il s'effacera tout seul après une minute
                - flag player npc_engaged expire:1m
                # Choisir unu entitée a tuer
                - random:
                    - flag player npc_kill_quest_mob_select:zombie
                    - flag player npc_kill_quest_mob_select:spider
                    - flag player npc_kill_quest_mob_select:pig
                    - flag player npc_kill_quest_mob_select:cow
                # choisir la quantitée
                - random:
                    - flag player npc_kill_quest_max_number_kill:4
                    - flag player npc_kill_quest_max_number_kill:5
                    - flag player npc_kill_quest_max_number_kill:6
                # Fixer un flag selon l'entitée tiré au sort
                - choose <player.flag[npc_kill_quest_mob_select]>:
                    - case zombie:
                        - flag player npc_kill_quest_bool_zombie:1
                    - case spider:
                        - flag player npc_kill_quest_bool_spider:1
                    - case pig:
                        - flag player npc_kill_quest_bool_pig:1
                    - case cow:
                        - flag player npc_kill_quest_bool_cow:1


                # Alternativement, au lieu des drapeaux de joueur, vous pouvez utiliser des commandes d'engagement pour engager par PNJ,
                # ce qui est plus simple à faire (tout est dans la seule commande courte) mais gêne souvent les autres joueurs
                #- engage
                - narrate format:cchat "Bonjour. Voudriez-vous un prix spécial ?""
                - wait 5t
                - narrate format:cchat "Si c'est le cas, vous pouvez tuer <player.flag[npc_kill_quest_max_number_kill]> <&translate[entity.minecraft.<player.flag[npc_kill_quest_mob_select]>]>s pour moi."
                - wait 5t
                - narrate format:cchat "Accepteriez-vous de m'aider ?"
                - wait 5t
                # Le joueur peut taper "oui" ou "non" dans le chat normalement OU cliquer sur le mot pour le dire automatiquement
                - narrate format:instruction_format "Type <&b><&o><element[Oui].click_chat[oui]><&7><&o> ou <&b><&o><element[Non].click_chat[non]>"
                # Passez à l'étape qui contient le déclencheur de chat. Ajoutez une limite de cinq minutes pour que si le joueur s'enfuit et revienne, le PNJ n'attend toujours pas de réponse.
                - zap accept_question 5m
                - flag player npc_engaged:!
                #- disengage
        # Deuxième étape : active uniquement en attendant une réponse à la question donnée dans le déclencheur de clic
        accept_question:
            chat trigger:
                1:
                    # Déclencheur de chat principal simple : si le joueur dit oui, il commence la quête
                    trigger: format:pchat "/Oui/ J'accepte de vous aider."
                    script:
                    - flag player npc_kill_quest_npc_name:<npc.name>
                    - if <player.has_flag[npc_engaged]>:
                        - stop
                    - flag player npc_engaged expire:1m
                    #- engage
                    - narrate format:cchat "D'accord! Super!"
                    - wait 5t
                    - narrate format:instruction_format "Tuez <player.flag[npc_kill_quest_max_number_kill]> <&translate[entity.minecraft.<player.flag[npc_kill_quest_mob_select]>]>s!"
                    # Démarrez un drapeau de compteur à zéro (pas encore de monstres tués).
                    - flag player npc_kill_quest_mobs_count:0
                    # Sautez à l'étape pour terminer la quête et verrouillez-la (pas de délai d'attente).
                    - zap finish_quest
                    - flag player npc_engaged:!
                    #- disengage
                2:
                    # Même si ce n'est pas vraiment nécessaire, ajoutez une réponse "non" qui revient juste
                    trigger: format:pchat "/Non/ Je n'ai pas le temps"
                    script:
                    - if <player.has_flag[npc_engaged]>:
                        - stop
                    # Les messages plus fréquemment affichés peuvent devenir ennuyeux pour les joueurs qui doivent les voir constamment.
                    # Ajouter du caractère aléatoire à certains messages est une petite touche qui rend les scripts un peu plus agréables pour les joueurs
                    - random:
                        - narrate format:cchat "Ok ben partez!"
                        - narrate format:cchat "Ok alors."
                        - narrate format:cchat "Ne m'ennuyez pas plus longtemps !"
                    # Ils ont refusé, alors revenez à l'étape par défaut et attendez.
                    # detruire flag pc_kill_quest_bool_xxx
                    - flag player npc_kill_quest_bool_zombie:!
                    - flag player npc_kill_quest_bool_spider:!
                    - flag player npc_kill_quest_bool_pig:!
                    - flag player npc_kill_quest_bool_cow:!
                    - flag player npc_kill_quest_mob_select:!
                    - flag player npc_kill_quest_mobs_count:!
                    - flag player npc_kill_quest_max_number_kill:!
                    - zap *
        # 3rd step: la seule interaction autorisée est le clic, ils sont coincés ici jusqu'à ce qu'ils terminent la quête
        finish_quest:
            click trigger:
                script:
                # Cette étape n'a pas d'interactions différées, donc aucun engagement n'est nécessaire.
                # Si la quête est marquée comme terminée, donnez des récompenses.
                - if <player.has_flag[kill_mobs_quest_complete]>:
                    - narrate format:cchat "Bien joué! Voici votre récompense!"
                    - give diamond
                    # Ensuite, supprimez le drapeau "terminé" et définissez le temps de recharge
                    - flag player kill_mobs_quest_complete:!
                    #supprimmer le mob aléatoire
                    - flag player npc_kill_quest_mob_select:!
                    - flag player npc_kill_quest_npc_name:!
                    - flag player kill_mobs_quest_cooldown expire:24h
                    # Et revenez à l'étape par défaut pour qu'ils puissent réessayer la quête une fois le temps de recharge terminé.
                    - zap *
                - else:
                    # Sinon, donnez simplement un bavardage en attente.
                    - random:
                        - narrate format:cchat "Tu n'as pas encore tué ces <&translate[entity.minecraft.<player.flag[npc_kill_quest_mob_select]>]>s ?"
                        - narrate format:cchat "J'attends toujours les <&translate[entity.minecraft.<player.flag[npc_kill_quest_mob_select]>]>s."
                        - narrate format:cchat "Tu vas tuer ces <&translate[entity.minecraft.<player.flag[npc_kill_quest_mob_select]>]>s ou quoi ?"

killquest_mob_world:
    type: world
    events:
        # Écoutez l'événement d'un joueur tuant des monstres
        # Écouter uniquement lorsque le drapeau du compteur et le boolean mob (npc_kill_quest_bool_xxx) est mis sur true
            after player kills pig flagged:npc_kill_quest_mobs_count|npc_kill_quest_bool_pig:
                - run update_quest
            after player kills zombie flagged:npc_kill_quest_mobs_count|npc_kill_quest_bool_zombie:
                - run update_quest
            after player kills spider flagged:npc_kill_quest_mobs_count|npc_kill_quest_bool_spider:
                - run update_quest
            after player kills cow flagged:npc_kill_quest_mobs_count|npc_kill_quest_bool_cow:
                - run update_quest
update_quest:
    type: task
    debug: true
    script:
        - narrate "Quête en cours..."
        # Après la mise à mort, incrémentez le compteur de mise à mort du joueur
        - flag player npc_kill_quest_mobs_count:++
        - define reste_mob_kill <player.flag[npc_kill_quest_max_number_kill].sub_int[<player.flag[npc_kill_quest_mobs_count]>]>
        - random:
            - narrate "Et un de moins! j'en  suis à <player.flag[npc_kill_quest_mobs_count]>/5!"
            - narrate "Plus que <[reste_mob_kill]> à tuer!"
            - narrate "Encore un petit effort."
        # Quand il atteint cinq, vous avez terminé !
        - if <player.flag[npc_kill_quest_mobs_count]> == <player.flag[npc_kill_quest_max_number_kill]>:
            - narrate format:instruction_format "Mobs Quest Complétée: Vous avez tué <player.flag[npc_kill_quest_max_number_kill]> <&translate[entity.minecraft.<player.flag[npc_kill_quest_mob_select]>]>s, retournez voir <player.flag[npc_kill_quest_npc_name]>"
            # Supprimez donc les variables ajoutez un nouveau drapeau indiquant que la quête est terminée
            - flag player npc_kill_quest_bool_zombie:!
            - flag player npc_kill_quest_bool_spider:!
            - flag player npc_kill_quest_bool_pig:!
            - flag player npc_kill_quest_bool_cow:!
            - flag player npc_kill_quest_mob_select:!
            - flag player npc_kill_quest_mobs_count:!
            - flag player npc_kill_quest_max_number_kill:!
            # Alternativement au drapeau, utiliser '- zap npc_killquest_interact quest_completed' et une nouvelle étape correspondante fonctionnerait également.
            # Le drapeau + if/else a été choisi principalement pour avoir des exemples de différentes méthodologies.
            - flag player kill_mobs_quest_complete


Highlighting for 'Other' types handled by Highlight.JS, which was released under the BSD 3-Clause License.