Petit problème Scoreboard

TeamAyuio

Aventurier
26 Octobre 2011
17
0
1
29
Bouche du Rhone
Salut a tous et a toutes!

J'ai un problème au niveau du scoreboard.

Alors voila je fait un map aventure, et il y a donc un scoreboard de type totalKillCount en sidebar.
J'aimerais maintenant qu'a chaque kill le player obtiennent X xp. J'avais pensé a une commande block qui tourne en boucle avec un testfor du style "testfor @a[score_Kill_min= +1]" soit des que le compteur prend +1 validé la commande et donc passé au command bloc suivant.

Voila si vous avez une idée de commande que je pourrais mettre pour pouvoir faire ceci merci de me la faire partager.

A très bienôt!
Ayuio
 

Miou

Barbare ingénieur
30 Avril 2012
79
1
56
Salut, je te dirai de créer un nouveau scoreboard (en plus du premier) que tu appellerai par exemple Kill2 de type TotalKillCount et qui ne serait afficher nulle part, ensuite je pense que tu peux faire une boucle en redstone ( comparateur, hopper timer, ... ) puis mettre un fil qui part vers un premier command block avec la commande : xp nombred'xp @p[score_Kill2_min=1] puis en sortie du command block un repeeter ( oui un repeeter pas un comparateur sinon il y aura des bugs si le joueur tue trop de mobs en même temps ) qui mène à un deuxième command block avec la commande : scoreboard players remove @p[score_Kill2_min=1] Kill2 1. Donc ça fera dès que le joueur tue un mob (ou plusieurs très rapidement) ça lui donnera updatera le scoreboard et ça lui donnera X d'xp puis ça enlèvera 1 point à la nouvelle variable Kill2 pour ne pas bug.

A bientôt
Mioou

EDIT: Ce que je t'ai dis n'est que valable si ta map est en solo, en multi, tu peux mettre chaque joueur dans une team différente et répéter le système autant de fois que nécessaire en rajouttant dans les crochets ,team=nomdelateam.

EDIT2: J'ai oublié de te dire que ce système doit être fait dans le chunk du spawn sinon ça ne marchera pas.
 

Miou

Barbare ingénieur
30 Avril 2012
79
1
56
en fait le chunk du spawn est toujours load, même si le(s) joueur(s) et(sont) à 99999999999999 blocks sinon la boussole ne marcherait pas, les autres chunks sont deload si un joueur n'est pas proche.
 

peyo56

Ingénieur en mécaniques minecraftiennes
24 Mai 2011
168
22
13
Une solution peu coûteuse consiste à créer une clock rapide sur un set de Command Blocks comme le circuit de la capture dans les chunk de spawn:
2013-08-07_07.25.22.png


Quand un groupe de command blocks est alimenté par un signal sur un block, le block est exécute en premier, puis ceux d'a cotés, puis celui du dessous, puis celui du dessus, il te suffit donc de mettre ces commandes dedans :
Code:
Blanc : /scoreboard objectives remove detectkill
Orange : /scoreboard objectives add detectkill totalKillCount
Code:
Jaune : /xp 1 @a[score_detectkill_min=1]
Rose : /scoreboard players remove @a[score_detectkill_min=1] detectkill 1
Cette méthode à un avantage par rapport à ce que propose Miou :
Toutes les commandes sont exécuté sur le même tick, donc entre chaque commande dans le même tick, le joueur ne peut pas avoir tué de mobs pile-poil entre le moment ou la command d'xp est faite et ou le scoreboard est modifié, donc la comptabilisation est "parfaite".

J'ai appelé cette méthode le RCBC(Redstone Command Block Computer)/RCBP(Redstone Command Block Program) ou j’arrive à exécuter jusqu'à 960 Commandes Blocks sur le même tick, cela m'a donné l'avantage de pouvoir créer des modèles de RCBC sans me soucier du RCBP et inversement, et m'a permis notament de faire :
- Detecter si quelqu'un se trouve sur l'écran de mort
- detecter si quelqu'un meurt
- detecter si quelqu'un respawn
- detecter si quelqu'un se trouve dans une des zones donnée (grace à une scoreboard dummy nommé area)
- detecter si quelqu'un rejoint le serveur pour la première fois
- detecter si quelqu'un rejoint le serveur une fois encore
- Faire un effet adrénaline (rendre la personne plus forte pendant 2 minutes si elle perd beaucoup de vie d'un seul coup, ou si elle est en dessous d'un certain seuil de vie, lui donner des effet négatifs si elle regagne suffisament de vie)
- Créer un "AntiChamber" avec des téléportation
- Créer des ascii-art instantannées dans le chat
...

PS : Testfor n'est pas une solution à tout, c'est juste à utiliser dans le cas ou l'on ne veut pas faire d'actions précises ...
 

peyo56

Ingénieur en mécaniques minecraftiennes
24 Mai 2011
168
22
13
en fait le chunk du spawn est toujours load, même si le(s) joueur(s) et(sont) à 99999999999999 blocks sinon la boussole ne marcherait pas, les autres chunks sont deload si un joueur n'est pas proche.

La bousole pourrait fonctionner même si le chunk n'était pas chargé, puisque c'est juste une coordonnée inscrite dans des fichiers, la raison pour laquelle ces chunks sont toujours chargés, c'est au cas ou un joueur joindrait le serveur ... ou la partie solo, vu que c'est quand même un serveur.
 

Miou

Barbare ingénieur
30 Avril 2012
79
1
56
Code:
Jaune : /xp 1 @a[score_setectkill_min=1]
Rose : /scoreboard players remove @a[score_setectkill_min=1]
Il y a des fautes de frappes comme score_setectkill_min=1] ou bien quand tu oublie de remove les points à l'objectif dans le command block rose.

Mais ça ne pourrait pas fonctionner vu que tu as mis @a donc faudrait que tous les joueurs kill un mob sinon, ça ne marcherai pas ( si la map est en multi )

Sinon le système est vraiment bien trouvé, ça me facilitera la vie pour plus tard ^^
 

peyo56

Ingénieur en mécaniques minecraftiennes
24 Mai 2011
168
22
13
Code:
Jaune : /xp 1 @a[score_setectkill_min=1]
Rose : /scoreboard players remove @a[score_setectkill_min=1]
Il y a des fautes de frappes comme score_setectkill_min=1] ou bien quand tu oublie de remove les points à l'objectif dans le command block rose.

Mais ça ne pourrait pas fonctionner vu que tu as mis @a donc faudrait que tous les joueurs kill un mob sinon, ça ne marcherai pas ( si la map est en multi )

Sinon le système est vraiment bien trouvé, ça me facilitera la vie pour plus tard ^^

Désolé pour la faute de frappe, je vient de corriger.

Par contre je te certifie que le système fonctionne, @p selectionne le joueur le plus proche correspondant aux critères, @a selectione tout les joueurs corespondants aux critères.

Du coup ici cela "transforme" corectement les point de la scoreboard en xp, puisque cela veut dire :
donner un point d'xp à tout joueur dont le score est superieur à 1 puis enlever un point à toute personne dont le score est superieur à 1.

À titre de comparaison avec le système proposé plus haut, si 10 personnes tuait 10 mobs chacun en même temps ( usines à mobs ? ) le premier système aurait fini de distribuer l'xp au bout de 20 secondes, celui que je propose aurait distribué l'xp en seulement 2 secondes, puisque le système traiterait toutes les personnes en même temps. et non pas unes à unes.
 

Miou

Barbare ingénieur
30 Avril 2012
79
1
56
Haaaaaa ok j'ai compris, moi je pensai que le @a vérifiait si tous les joueurs avait la variable de juste, donc si il y avait une de faux ça ne marchait pas. Comme quoi, on apprend tous le jours des trucs en redstone ^^