Eau empoisonnée ?

D4rknessCraft

Feignasse attitrée
14 Août 2012
295
15
130
29
Bonjour à toutes et à tous !

Je me suis lancé dans la construction d'une map pvp suivant mon propre concept que j'ai développé.. Pour la créer j'utilise WorldEdit et VoxelSniper.

Ma question est simple :

- Est-ce que je peux faire en sorte que Minecraft détecte lorsqu'un joueur touche de l'eau et que ce joueur en question reçoive poison + nausea autant de temps qu'il sera dans l'eau avec un command block ? Ou faut-il un plugin ?
 

nico69

Architecte en herbe
23 Août 2011
159
21
124
Il te suffis de faire un testforblock à la position du joueur (via execute) pour savoir si il est dans l'eau.
Tu peut lui donner un effet de nausée sur un temps court (par exemple 1sec) et check régulièrement si le joueur est dans l'eau.
Si il y est toujours, tu lui réapplique cet effet de nausée.
La 2e façon de faire serais de lui donner un temps de nausée très long lorsque le joueur rentre dans l'eau, puis de clear quand il en sort.
 

D4rknessCraft

Feignasse attitrée
14 Août 2012
295
15
130
29
Je suis... Je me débrouille avec les command block mais sans plus.. Serait-il possible que tu me listes les commandes à faire.. ? :x
 

nico69

Architecte en herbe
23 Août 2011
159
21
124
Je préfère donner des indications au lieux de donner directement la solution exacte, ça te permet, en cherchant, de comprendre le fonctionnement de ce qui te pose problème, pour ensuite savoir le refaire dans un système similaire.
J'aurais peut être du ajouter une référence des commandes :
http://minecraft.gamepedia.com/Commands

ps : execute te permet de faire exécuter une commande par une entité, donc si la commande est relative (~ ~ ~), tu peut faire des tests en fonction de sa position.
 

Trollam

Architecte en herbe
8 Mars 2011
417
34
135
29
Désolé de remonter ce topic, mais si tu veux simplifier la chose tu peux toujours créer un scoreboard avec comme critère stat.swimOneCm (le score de ce scoreboard sera égale pour un joueur au nombre de cm qu'il aura fait dans l'eau), ensuite tu affecte un effet de poison à tout les joueurs qui on un score supérieur ou égale à 1 dans ce scoreboard.
Sachant bien sur qu'il faut penser à reset ce scoreboard pour les joueurs qui ne sont plus dans l'eau, sans quoi ils seraient constamment empoisonné.

Le lien pour les différents critères de scoreboard au cas ou : http://minecraft.gamepedia.com/Scoreboard
 

tomaxed44

Mappeur
11 Octobre 2012
521
51
135
Exemple avec le scoreboard swimOneCm par dragnoz
mais ca comporte pas mal de problèmes, comme par exemple ca fait rien quand on bouge pas dans l'eau..
du coup dragnoz a fait une meilleure version avec le /stats et explique les avantages de cette technique
 

Luxicraft712

Chasseur de Zombie
12 Juillet 2013
69
0
39
23
Mdr nan stop avec vos truc compliquer la : le stat risque de s'appliquer dans TOUTE les eaux et c'est compliquer autant faire un testfor à l'endroit ou est le joueur et si il est au bon endroit : effet nausé.
Pour les commandes (dsl nico69 mais je les dits xDD)
Tu fait une cloc avec un command block qui dit : /testfor @a[x=?,y=?,z=?,r=?] (oublie pas les virgules) Le x y z c'est les coordonnées du point central puis pour élargir ton périmètre de recherche tu met le "r" le rayon qui recherche un joueur dans un CERCLE (vers le haut et bas aussi c'est un cercle quoi)
Donc si tu met r=2 sa cherchera pour un joueur dans un CERCLE de 2 cases

La suite demain soir dsl je vais me coucher :c (j'éditerais le post :D)
 

Trollam

Architecte en herbe
8 Mars 2011
417
34
135
29
Mdr nan stop avec vos truc compliquer la : le stat risque de s'appliquer dans TOUTE les eaux [...]

D4rknessCraft n'a pas précisé si l'eau doit être empoisonné à un endroit spécifique ou de manière générale, je lui propose donc une solution dans le cas ou il veut que toutes les eaux soit empoisonnées. De plus c'est assez simple à faire sa requiert juste 3 commandes blocs + une clock (je ne compte pas la commande nécessaire à la mise en place du scoreboards) :
-un pour l'effet si le joueur à le score nécessaire
-un qui fait continuellement décroître le scoreboard (mais jamais en dessous de 0 !)
-un pour éviter que le scoreboard ne monte trop haut et qu'il mette 3 heures à retomber à 0

Néanmoins l'immobilité dans l'eau pose un problème que je n'arrive pas à solutionner de manière efficace et adapté à une situation particulière pour l'instant. :oops: (cf. 2 paragraphes plus bas)

Dites le moi si je me trompe mais, selon moi, les méthodes proposés par Luxicraft712 et nico69 qui consiste à utiliser un testfor ou un testforblock on un souci majeur, le multijoueur.
En effet je ne pense pas qu'il soit possible à ma connaissance de faire en sorte que seul un joueur spécifique soit concerné par l'effet de poison en utilisant un testfor (ou dérivés), le commandes block va tester si un joueur est dans l'eau mais après ? On peut utiliser un comparateur à la sortie du testfor qui rentre dans le commande block pour l'effet, mais le commandes block avec l'effet fait comment pour viser ce joueur en particulier ?

Mes connaissances n'étant pas absolue il est tout à fait possible que Luxicraft712, nico69 ou n'importe qui d'autre puisse apporter une solution et me contredire (et ainsi m'aider à simplifier certain de mes systèmes par la même occasion :D.).

La méthode de dragnoz partagé par tomaxed44 est bonne si (oui y'a un "si", sinon c'est pas drôle :p ) tu n'utilise aucune autre commande execute* sur un joueur, en effet comme expliqué dans la vidéo le scoreboard basé sur la stat SuccesCount modifie le scoreboard concerné lorsqu'une commande (n'importe laquelle) effectué par le joueur renvoie "true" (testforblock en l’occurrence)
(*Cela dépend si la commande execute peut renvoyer "true").

Après si le poison ne concerne qu'un zone d'eau tu peux tout simplement mettre les arguments de coordonnés directement dans la commande "effect" (ce qui ne fait qu'un commande block+la clock), ce qui donne une commande de type :
- /effect @a[X,Y,Z,dx=DX,dy=DY,dz=DZ]
Ce qui te permet de ne viser qu'une zone cubique et non circulaire, cela apporte donc une meilleure précision à mon goût.

Pour plus de détails sur les arguments de sélection des commandes --> Gamepedia

N.B. : Je m'excuse d'avance auprès de Luxicraft712, tomaxed44 et nico69 si ils se sentent offensé par mes propos, ce n'est pas mon intention.

P.S. : Je m'excuse pour ce long message mais j'estimais cela nécessaire de proposer une analyse des différentes solutions proposés et d'essayer de mettre en évidence les points faibles afin de permettre à D4rknessCraft d'utiliser la solution la plus adapté à son problème.

P.S.2 : Même si cela peut en donner l'impression je ne propose pas ma solution en pensant que c'est la "meilleure" solution.
 

D4rknessCraft

Feignasse attitrée
14 Août 2012
295
15
130
29
Woulah merci les gens pour toutes vos réponses, mais je crois pas que ce que je veux faire soit possible.. Ma map est un rond, séparée en 2 par une grande rivière, et je veux que juste l'eau de la rivière soit empoisonnée.. Mais je suis nul en commandblock donc je vais faire autrement.. Merci quand même !