# 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> <&f>à vous<&co> <&2><[text]> pchat: type: format format: <&f>Vous à <&b> <&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 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 : - 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 : # 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 ." # 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 : - 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 <&translate[entity.minecraft.]>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><&7><&o> ou <&b><&o>" # 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: - if : - stop - flag player npc_engaged expire:1m #- engage - narrate format:cchat "D'accord! Super!" - wait 5t - narrate format:instruction_format "Tuez <&translate[entity.minecraft.]>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 : - 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 : - 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.]>s ?" - narrate format:cchat "J'attends toujours les <&translate[entity.minecraft.]>s." - narrate format:cchat "Tu vas tuer ces <&translate[entity.minecraft.]>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 ]> - random: - narrate "Et un de moins! j'en suis à /5!" - narrate "Plus que <[reste_mob_kill]> à tuer!" - narrate "Encore un petit effort." # Quand il atteint cinq, vous avez terminé ! - if == : - narrate format:instruction_format "Mobs Quest Complétée: Vous avez tué <&translate[entity.minecraft.]>s, retournez voir " # 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