Aller au contenu
  • 0

Question

Posté(e) (modifié)

Bonjour/Bonsoir

Cela fais presque 3 heures que je cherche à régler ce problème mais je ne trouve pas de solution, je m'explique.

J'ai créé un skript que quand deux joueurs s'affrontent, qu'ils ne puissent pas se téléporter ou que si un des deux joueurs déconnecte du serveur, il soit tué lors de sa déconnection. Vous me suivez ?

Mais le problème c'est que quand un joueur lance une enderpearl, l'anti-déco-combat s'active alors qu'il ne sait fait frapper par aucun joueur. Aucune solution trouvée pour l'instant.

[EDIT]: L'anti-déco-combat s'active seulement quand le joueur prend un dégât causé par une enderpearl, sinon il ne s'active pas.

Version de skript: 2.2-Fixes-V8b

Version du serveur: Spigot 1.8.8

Code:

on damage:
	victim is a player
	attacker is a player
	if {combat.%victim%} is true:
		set {time.%victim%} to 10
	if {combat.%attacker%} is true:
		set {time.%attacker%} to 10
	if {combat.%victim%} is not set:
		set {time.%victim%} to 10
		send action bar from "&cTu es en combat !" to victim
		set victim's flight mode to false
		set {combat.%victim%} to true
	if {combat.%attacker%} is not set:
		set {time.%attacker%} to 10
		set attacker's flight mode to false
		send action bar from "&cTu es en combat !" to attacker
		set {combat.%attacker%} to true
       
       
every 1 seconds in "skyblock":
	loop all players:
		if {combat.%loop-player%} is true:
			remove 1 from {time.%loop-player%}
			if {time.%loop-player%} > 1:
				send action bar from "&9Tu es en combat pendant &f%{time.%loop-player%}% secondes" to loop-player
			if {time.%loop-player%} = 1:
				send action bar from "&9Tu es en combat pendant &f%{time.%loop-player%}% seconde" to loop-player
			if {time.%loop-player%} = 0:
				set {fly.%loop-player%} to false
				clear {time.%loop-player%}
				clear {combat.%loop-player%}
				send action bar from "&bTu n'es plus en combat !" to loop-player
on quit:
    if {combat.%player%} is true:
        kill player
        broadcast "&4[&aAnti-déco-combat&4] &7%player% &cs'est déconnecté en combat !"
        clear {time.%player%}
        clear {combat.%player%}
       
on join:
    clear {time.%player%}
    clear {combat.%player%}
on respawn:
	if {combat.%player%} is true:
		clear {time.%player%}
		clear {combat.%player%}
		send action bar from "&bTu n'es plus en combat !" to player
	else:
		stop
	
on teleport:
	if {combat.%player%} is true:
		cancel event
		send "&4[&aAnti-déco-combat&4] &9Tu ne peux pas te téléporter en combat."
		stop
		
command /combat [<text>]:
	trigger:
		if arg 1 is set:
			send "&cCommande incorrect.&e (/ct)"
			stop
		else:
			send "&4&m------------------------------------------------"
			send "                         &a&nANTI-DECO-COMBAT"
			send ""
			send "&9                                ------"
			send "&e» &bCe plugin permet quand deux joueurs s'affontrent,"
			send "    &bdès qu'un coup est donné, les joueurs sont en"
			send "    &bcombat et il est impossible de ce téléporter temps"
			send "    &bque le joueur est en combat et si le joueur ce"
			send "    &bdéconnecte, il perdra son stuff et son stuff sera"
			send "    &bjeter au sol."
			send ""
			send "&9                                ------"
			send "&4&m------------------------------------------------"

 

Modifié par TheFighter51

21 réponses à cette question

Messages recommandés

  • 0
Posté(e)

Salut ?

Premièrement, je te déconseille d’exécuter un ⤵️

every second:
	loop all players:
		# Ceci cause des lags

Mais plutôt un while dans ton on damage.
Ensuite pour ton enderpearl essaie avec ceci ⤵️

on teleport:
	if "%teleport cause%" is "ENDER_PEARL":
		# La suite

# Cette expression est aussi valable pour un damage event

on damage:
	if "%damage cause%" is "ENDER_PEARL":
		# La suite

Voilà ?
En espérant t'avoir aidé

  • 0
Posté(e)
Le 15/08/2018 à 15:09, TheFighter51 a dit :

up

Explique quel mot ou quel phrase tu n'as pas compris, on ne donne pas du code tout fait ici car ça ne te permet pas d'apprendre ^^

  • 0
Posté(e)
Il y a 12 heures, TheFighter51 a dit :

Bah je ne comprend pas où faut placer le code que tu m'as donné..

Alors tu peux utiliser la condition

if "%damage cause%" is not "ENDER_PEARL":

après le on damage pour t'assurer que les enderpearl ne rende pas injustement le joueur en mode combat...

 

Tu peux aussi utiliser le :

if "%teleport cause%" is not "ENDER_PEARL":

après ton on teleport pour autoriser un joueur a se tp avec une ender pearl en mod combat 

 

Pour le every 1 second, on te conseil de supprimer toute cette partie car ce n'est pas opti et plutôt déclencher un while allant de 10 à 0 dans l'event on damage ^^

  • 0
Posté(e)
Il y a 1 heure, TheFighter51 a dit :

Pour le while je ne connais pas ça ...

Pour savoir ce qu'est un while lis ça : https://skript-mc.fr/doc/skript/Boucles

 

voici comment par exemple l'utilisé dans ton cas

on damage:
	victim is a player
	attacker is a player
	send action bar from "&cTu es en combat !" to victim
	set victim's flight mode to false
	if {combat.%victim%} is not set:
		set {combat.%victim%} to 10
		while {combat.%victim%} is higher than 0:
			wait 1 second
			remove 1 from {combat.%victim%}
			send action bar from "&9Tu es en combat pendant &f%{combat.%attacker%}% secondes" to victim
		send action bar from "&bTu n'es plus en combat !" to victim
		delete {combat.%victim%}
	else:
		set {combat.%victim%} to 10
on damage:
	victim is a player
	attacker is a player
	set attacker's flight mode to false
	send action bar from "&cTu es en combat !" to attacker
	if {combat.%attacker%} is not set:
		set {combat.%attacker%} to 10
		while {combat.%attacker%} is higher than 0:
			wait 1 second
			remove 1 from {combat.%attacker%}
			send action bar from "&9Tu es en combat pendant &f%{combat.%attacker%}% secondes" to attacker
		send action bar from "&bTu n'es plus en combat !" to attacker
		delete {combat.%attacker%}
	else:
		set {combat.%attacker%} to 10

(le code se répète 2 fois, une fois pour l'attaquant et 1 fois pour la victim) 

 

pour savoir si un joueur est en mode combat tu as juste a testé si le {combat.%player%} est set

essaye de bien comprendre le code et dis moi si tu as une partie que tu comprend pas ^^

  • 0
Posté(e)
Il y a 10 heures, TheFighter51 a dit :

D'accord


if "%teleport cause%" is not "ENDER_PEARL":

 

et pour ça on le place ou ?

dans l'endroit après le on teleport: pour que ton anti-tp ne s'applique pas aux ender_perl

  • 0
Posté(e)

Est-ce bien comme ça qu'il faut placer le %damage cause% ? Car si oui cela ne fonctionne pas...

on damage:
	if "%damage cause%" is not "ENDER_PEARL":
		victim is a player
		attacker is a player
		if {combat.%victim%} is true:
			set {time.%victim%} to 10
		if {combat.%attacker%} is true:
			set {time.%attacker%} to 10
		if {combat.%victim%} is not set:
			set {time.%victim%} to 10
			send action bar from "&cTu es en combat !" to victim
			set victim's flight mode to false
			set {combat.%victim%} to true
		if {combat.%attacker%} is not set:
			set {time.%attacker%} to 10
			set attacker's flight mode to false
			send action bar from "&cTu es en combat !" to attacker
			set {combat.%attacker%} to true

 

  • 0
Posté(e)
Il y a 1 heure, TheFighter51 a dit :

Est-ce bien comme ça qu'il faut placer le %damage cause% ? Car si oui cela ne fonctionne pas...


on damage:
	if "%damage cause%" is not "ENDER_PEARL":
		victim is a player
		attacker is a player
		if {combat.%victim%} is true:
			set {time.%victim%} to 10
		if {combat.%attacker%} is true:
			set {time.%attacker%} to 10
		if {combat.%victim%} is not set:
			set {time.%victim%} to 10
			send action bar from "&cTu es en combat !" to victim
			set victim's flight mode to false
			set {combat.%victim%} to true
		if {combat.%attacker%} is not set:
			set {time.%attacker%} to 10
			set attacker's flight mode to false
			send action bar from "&cTu es en combat !" to attacker
			set {combat.%attacker%} to true

 

essaye de t'envoyer comme message %damage cause% après l'event on damage, pour voir ce que ça te dit quand tu prend des dégats d'ender pearl ^^

  • 0
Posté(e)

Merci sa fonctionne, maintenant j'essaye de faire un anti retour safe, du genre si le joueur essaye de quitte la région "mine" en combat sa le retp 1 block derrière lui, tu penses que c'est possible ?

  • 0
Posté(e)
il y a 19 minutes, TheFighter51 a dit :

Merci sa fonctionne, maintenant j'essaye de faire un anti retour safe, du genre si le joueur essaye de quitte la région "mine" en combat sa le retp 1 block derrière lui, tu penses que c'est possible ?

Possible mais je ne sais pas comment faire, je te conseil d'ouvrir un nouveau post pour ce sujet et mettre celui là en résolu

  • 0
Posté(e)

En fait c'est censé être pour rechercher des postes par thème, genre si ton poste c'est un truc "Problème spawner" t'es censé mettre "spawner" par exemple. Mais les modos nous demande de mettre le tag résolu comme ça après ils passent le sujet en résolu ^^

  • J'aime 1
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.