Aller au contenu
  • 0

fleche qui pointe vers des coordonnées.


Question

Posté(e) (modifié)

Version de Minecraft : 1.8..8
Version de Skript : 2.1.2

Addons utilisés: SkQuery, SkRayFall, WildSkript

Type du skript : un script permettant de faire une flèche qui pointe vers des coordonnées spécifiques

Description du script :

Bonjour, je fais un plugin UHC et il me faudrait un système de flèche qui permettrait aux joueurs de voir où est le milieu de la map dans le scoreboard.

Je n'ai pas de code encore.

Pour plus d'informations n'hésitez pas.

Merci.

N'oubliez pas les formules de politesses et des bouts de codes que vous avez déjà regroupé, des screenshots des erreurs ainsi que tout le nécessaire qui peut contribuer à la résolution de votre problème.

Modifié par Jugnaro

7 réponses à cette question

Messages recommandés

  • 0
Posté(e) (modifié)

Salut, en tapant directement ce que tu demandes sur Google, on peut tomber sur plusieurs topics similaires...

La solution la plus pertinente reste l'utilisation de la fonction créée par _CarloDrift, trouvable ici : https://www.spigotmc.org/resources/directionalarrows-api.83341/

Tu copies/colles les 2 fonctions et l'exemple du dessous dans ton code, puis tu entres tes coordonnées à la place de 0, 0, 0:

set {_location} to location(0, 0, 0, world "world")

 

Si tu préfères que la flèche soit dans un scoreboard plutôt que dans l'action bar, rajoute ces quelques lignes dans la loop:

wipe loop-player sidebar
set name of sidebar of loop-player  to "nomChoisi"
set score "-------------------" in sidebar of loop-player to 3
set score "&5 " in sidebar of loop-player to 2
set score "%{_direction}% (%{_distance}% block(s))" in sidebar of loop-player to 1
set score "&5  " in sidebar of loop-player  to 0

 

Warning : Si tu souhaites garder les lignes vides, il faut qu'il y ai toujours un espace de plus dans les lignes vides en partant du bas. Par exemple ici la ligne 0 à un espace de plus que la ligne 2. C'est important sinon cela ne fonctionnera pas.

Modifié par Azur21
Raison : Code invalide
  • 0
Posté(e)

Salut, si ce que je t'ai envoyé répond à ta demande, n'oublie pas de mettre ton post en résolu.
Et puis par principe, un petit message pour me dire si tout fonctionne bien, ça fait toujours plaisir. 🙃

  • 0
Posté(e) (modifié)

Je n'avais pas pu tester mon skript avec 2 joueurs auparavant et je viens de me rendre compte que le scoreboard ne se mettait à jour que pour le dernier joueur arrivé sur le serveur.

J'edit donc mon premier message avec un code fonctionnel.

Nb : Je reset un scoreboard entier toutes les secondes à chaque joueur, on peut reset seulement la ligne voulue mais je ne crois pas que le gain de performance soit remarquable

Il y a 8 heures, Naipow a dit :

Salut Azur21 pourrais tu me faire le même système mais cela pointe un joueur sur qui on a tirer dessus merci d'avance.

Salut

on damage:
	if projectile is an arrow:
		if attacker and victim is a player:
			set {victimName::%attacker%} to victim
on death:
	if attacker and victim is a player:
		delete {victimName::%attacker%}
		delete {victimName::%player%}

on quit:
	loop all players in world "world":
		if player is {victimName::%loop-player%}:
			delete {victimName::%loop-player%}
			delete {victimName::%player%}

every second:
	loop all players in world "world":
		wipe loop-player sidebar
		set name of sidebar of loop-player  to "nomChoisi"
		set score "-------------------" in sidebar of loop-player to 3
		set score "&5 " in sidebar of loop-player to 2
		set score "&5  " in sidebar of loop-player  to 0
		if {victimName::%loop-player%} is set:
			set {_location} to location of {victimName::%loop-player%}
			set {_direction} to direction(location of loop-player and {_location})
			set {_distance} to round(flatDistance(loop-player and {_location}))
			set score "%{_direction}% (%{_distance}% block(s))" in sidebar of loop-player to 1
		else:
			set score "[Pas de victime]" in sidebar of loop-player to 1

function direction(from: location, to: location) :: text:
	set pitch of {_from} to 0.001
	set {_behind} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter behind {_from} and {_to}) > 1/3
	set {_infrontof} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter in front of {_from} and {_to}) > 1/3
	set {_right} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter right {_from} and {_to}) > 1/3
	set {_left} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter left {_from} and {_to}) > 1/3
	return "⬊" if {_behind} and {_right} are true
	return "⬋" if {_behind} and {_left} are true
	return "⬈" if {_infrontof} and {_right} are true
	return "⬉" if {_infrontof} and {_left} are true
	if {_right} and {_left} are not set:
		return "↑" if {_infrontof} is true
		return "↓" if {_behind} is true
	if {_infrontof} and {_behind} are not set:
		return "←" if {_left} is true
		return "➡" if {_right} is true
	return "✔"

function flatDistance(from: location, to: location) :: number:
	set y coordinate of {_from} to y coordinate of {_to}
	return distance between {_from} and {_to}

Il reprend en majorité la fonction dont j'ai parlé au début du post et le code que j'ai fait pour adapter la fonction en scoreboard. J'ai également rajouté 2, 3 lignes pour qu'il suive le joueur touché par une flèche à la place de coordonnées précises. Tant que la victime n'est pas morte/déco ou que l'attaquant ne tire pas sur un autre joueur, la distance le séparant de sa victime reste affichée, je te laisse modifier si tu souhaites qu'il y ai un timer précis, que la flèche ai un nom précise, que le joueur attaqué ne puis pas déco etc etc.

Modifié par Azur21
  • J'aime 1
  • 0
Posté(e)
Le 14/08/2021 à 03:45, Azur21 a dit :

Je n'avais pas pu tester mon skript avec 2 joueurs auparavant et je viens de me rendre compte que le scoreboard ne se mettait à jour que pour le dernier joueur arrivé sur le serveur.

J'edit donc mon premier message avec un code fonctionnel.

Nb : Je reset un scoreboard entier toutes les secondes à chaque joueur, on peut reset seulement la ligne voulue mais je ne crois pas que le gain de performance soit remarquable

Salut


on damage:
	if projectile is an arrow:
		if attacker and victim is a player:
			set {victimName::%attacker%} to victim
on death:
	if attacker and victim is a player:
		delete {victimName::%attacker%}
		delete {victimName::%player%}

on quit:
	loop all players in world "world":
		if player is {victimName::%loop-player%}:
			delete {victimName::%loop-player%}
			delete {victimName::%player%}

every second:
	loop all players in world "world":
		wipe loop-player sidebar
		set name of sidebar of loop-player  to "nomChoisi"
		set score "-------------------" in sidebar of loop-player to 3
		set score "&5 " in sidebar of loop-player to 2
		set score "&5  " in sidebar of loop-player  to 0
		if {victimName::%loop-player%} is set:
			set {_location} to location of {victimName::%loop-player%}
			set {_direction} to direction(location of loop-player and {_location})
			set {_distance} to round(flatDistance(loop-player and {_location}))
			set score "%{_direction}% (%{_distance}% block(s))" in sidebar of loop-player to 1
		else:
			set score "[Pas de victime]" in sidebar of loop-player to 1

function direction(from: location, to: location) :: text:
	set pitch of {_from} to 0.001
	set {_behind} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter behind {_from} and {_to}) > 1/3
	set {_infrontof} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter in front of {_from} and {_to}) > 1/3
	set {_right} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter right {_from} and {_to}) > 1/3
	set {_left} to true if (flatDistance({_from} and {_to})) - flatDistance(location 1 meter left {_from} and {_to}) > 1/3
	return "⬊" if {_behind} and {_right} are true
	return "⬋" if {_behind} and {_left} are true
	return "⬈" if {_infrontof} and {_right} are true
	return "⬉" if {_infrontof} and {_left} are true
	if {_right} and {_left} are not set:
		return "↑" if {_infrontof} is true
		return "↓" if {_behind} is true
	if {_infrontof} and {_behind} are not set:
		return "←" if {_left} is true
		return "➡" if {_right} is true
	return "✔"

function flatDistance(from: location, to: location) :: number:
	set y coordinate of {_from} to y coordinate of {_to}
	return distance between {_from} and {_to}

Il reprend en majorité la fonction dont j'ai parlé au début du post et le code que j'ai fait pour adapter la fonction en scoreboard. J'ai également rajouté 2, 3 lignes pour qu'il suive le joueur touché par une flèche à la place de coordonnées précises. Tant que la victime n'est pas morte/déco ou que l'attaquant ne tire pas sur un autre joueur, la distance le séparant de sa victime reste affichée, je te laisse modifier si tu souhaites qu'il y ai un timer précis, que la flèche ai un nom précise, que le joueur attaqué ne puis pas déco etc etc.

Merci faut-il des addons précis ? ( Je suis en 1.8.8 avec la version Skript 2.5.2 de Matocolotoe )

  • 0
Posté(e)
il y a 25 minutes, Naipow a dit :

Merci faut-il des addons précis ? ( Je suis en 1.8.8 avec la version Skript 2.5.2 de Matocolotoe )

Oui tu as besoin de SkRayfall pour le scoreboard. Perso j'ai effectué mes tests en 1.12.2, mais je ne pense pas que cela change grand chose.

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.