Aller au contenu

Classement

Contenu populaire

Affichage du contenu avec la meilleure réputation le 29/12/2019 dans toutes les zones

  1. Skript-db : L'addon qui va vous faire aimer le SQL ! Bonjour, je présente aujourd'hui mon premier tuto sur le Forum, j'espère qu'il servira au plus grand nombre d'entre vous ! Avant de lire ce tuto, il est nécessaire d'avoir de légères bases en SQL, si vous n'en avez pas, pas de panique je tout de même vais aborder les principes de base. Difficultés : ✪✪✪✫✫ Temps d'apprentissage : 30mn si vous connaissez le SQL ~ 2h sinon. Le SQL: Bon, vue que tout le monde ne sait pas forcément ce qu'est le SQL et pour pouvoir toucher un maximum de monde à travers ce tuto je vais en parler un peu ! Le SQL, c'est un langage de programmation, spécialement créé pour l'exploitation de bases de données, c'est pour cette raison qu'on associe toujours "SQL" à "Data Base". En gros, le SQL est le langage qui va vous permettre de gérer votre base de données. Par ailleurs, le SQL permet d'utiliser vos Bases dans plusieurs langages de programmation (PHP, C++, Java, skript !). L'addon Skript-db permet donc d'utiliser le SQL sur skript dans toutes ses mesures. La Base de données: Pour le tuto que je vais aborder, nous allons uniquement traiter de bases de données de type "MySQL", je vous recommande vivement, si vous débutez, d'utiliser une base MySQL avec un accès PYPMyAdmin, qui vous permet d'avoir un panel graphique sur votre base de donnée et une assistance pour la rédaction de vos requêtes SQL (Très pratique pour la suite). Pour expliquer rapidement, la base de données va stocker vos "informations" dans des "tables" organisées en colonnes et classés en plusieurs lignes. Résumé: Vous avez compris, le SQL vous permet d'exploiter des bases de données dans plusieurs programmes de langages différents, par exemple, vous pouvez grâce au SQL, partager des informations entre plusieurs serveur minecraft, ou entre un serveur minecraft et un site web. Skript-db: Voilà enfin le chapitre intéressant ! L'addon est ULTRA basique, mais ULTRA complet. Il permet au contraire des autres addons, d'exécuter n'importe quelle requête de SQL, en seulement 1 ET UNIQUEMENT 1 effect (en vrai il y en a 2 mais ils fonctionnement de la même manière l'un est juste plus complet donc disons 1 seul effect). Donc, comme je l'ai dit il y a 2 effects pour effectuer des requêtes (query) SQL et 2 expressions, l'une pour se connecter une base de donnée et une autre expression pour récupérer vos erreurs SQL. Concrètement nous allons donc utiliser "seulement" l'expression pour se connecter, et l'effect pour les effectuer des requêtes. Ce connecter à votre BDD: Alors déjà, j'aime beaucoup cet addon, car contrairement aux autres addons qui "gèrent" le SQL, il permet de se connecter à plusieurs bases différentes dans le même skript, et surtout de pouvoir les utiliser dans d'autres skript sans les rappeler. C'est magique, non OPTIMISÉ !! Donc sans plus attendre on ce connecte: on load: set {sql} to the database "mysql://%host%:%port%/%database-name%?user=%username%&password=%password%&useSSL=false" # "useSSL", si votre base de donnée est protégée par un certificat SSL, en localhost ignoré le ! {sql}, ça va être la valeur avec laquelle vous aller pouvoir effectuer vos requêtes, ce qui veut dire que si vous voulez plusieurs bases, il suffit d'utiliser des vars différentes ({sql.1} puis {sql.2} ... etc ...). Voilà, rien de compliqué c'est bon vous êtes connecté, une fois cette expression utilisée plus besoin de l'utiliser (Je vous conseil de la mettre dans un "on load")! Effectuer une requête SQL: Et bien, c'est tout l'intérêt de l'addon, alors comme je l'ai dit, il y a 2 effects différents mais qui permettent de faire légèrement la même chose. La différence c'est que l'un permet d'exécuter une requête 'unsafe' stockée dans une variable, et l'autre d'exécuter un texte brut (comprenez sans variables). Vous l'aurez compris, l'effect 'unsafe' permet donc d'exécuter des variable, ce qui est plutôt utile comparé à l'autre. Je ne vais donc montrer que l'effect 'unsafe' dans ce tuto. # Requête sans retour : execute unsafe {_requete} in {sql} # Requête avec retour : execute unsafe {_requete} in {sql} and store the result in {_output::*} Bon voilà, un bon aperçue de l'effect, alors comment l'utiliser ? - Premièrement il faut savoir si vous allez avoir besoin du paramètre de retour ou non, c'est simple, il y a 2 types de requêtes SQL, celles où vous modifiez la BDD, et celles où vous lisez la BDD, dans le cas où vous écrivez, pas besoin de retour, dans l'autre cas il vous faut un retour, évidement. - Ensuite, il vous faut définir la requête {_requete}, c'est simplement une variable text. [spoiler=Application et Exemples] # Petit exercice: un log de chat, pour cela il faut : # Une table avec 2 colonnes : "joueur" et "messsage", avec en bonus "date". # Si vous souhaitez réaliser ce tuto avec moi, je vous passe une ligne SQL. # Vous pouvez la rentrer dans votre console SQL pour générer la table : CREATE TABLE IF NOT EXISTS `chat` ( `joueur` varchar(32) CHARACTER SET utf8 DEFAULT NULL, `message` varchar(64) CHARACTER SET utf8 DEFAULT NULL, `date` varchar(20) CHARACTER SET utf8 NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Table du tuto skript-db par tutur1004'; # Voilà, à présent passons au skript ! # Le but: dès qu'un joueur écrira un message il sera enregistré dans votre base SQL. # À noter que "insert" permet d'ajouter une nouvelle entrée dans votre base, `chat` est le nom de la base. on chat: set {_requete} to "INSERT INTO `chat` (`joueur`, `message`, `date`) VALUES ('%player%', '%message%', '%now%')" execute unsafe {_requete} in {sql} # Maintenant, on va essayer de récupérer avec une commande les x derniers messages d'un joueur (Connecté). # Nous allons utiliser la fonction SQL "SELECT" qui permet de lire une ligne (ou plusieurs) dans une table. command /find-msg <player> <int>: trigger: set {_requete} to "SELECT * from `chat` WHERE `joueur` = '%arg-1%' ORDER BY `message` DESC LIMIT %arg-2%" execute unsafe {_requete} in {sql} and store the result in {_output::*} # {_output::*} contiens maintenant les messages du joueur- # - ainsi que plusieurs fois son pseudo et les différentes dates des différents messages. loop {_output::message::*}: send "Le %{_output::date::%loop-index%}% %arg-1% à dit:" send "%loop-value%" L'exemple vous paraît compliqué ? - Si vous n'avez pas compris le 'insert into', je vous conseille d'apprendre le SQL. - Si vous n'avez pas compris le {_output::*}, je vais vous l'expliquer. Le {_output::*} généré par la requête est classé en fonction des colonnes de votre base. Si on reprend l'exemple, il y a (`joueur`, `message`, `date`) dans notre base. J'ai écrit pour récupérer les messages "loop {_output::message::*}". La variable ce répartie donc en 3 parties. 1) "_output", ça, tout le monde le sait, c'est le nom de la variable. 2) "message", ici, c'est le nom de la colonne qu'on souhaite lire. 3) "*", ici vont défiler les variable que la requête à "SELECT". Un 2ème exemple? Aller: J'ai ensuite utilisé send .. %{_output::date::%loop-index%}% .. -> {_output::date::%loop-index%} 2) "date" le nom de la colonne qu'on souhaite lire, pour pouvoir afficher la date. 3) "%loop-index%", si on suit l'exemple, on a loop les index des messages, Donc nous allons avoir les dates qui correspondent, puisqu'ils ont le même index de variable. Voilà, j'espère avoir suffisamment détaillé le fonctionnement de l'addon, il est assez simple à comprendre et utilisé, vous pourrez le trouver sur le git-hub de btk5h ou sur mon post avec la liste des addons (Maj. en janvier 2018 !) Tutur1004 !
    1 point
  2. Bonjour ! J'essaye d'installer Skript dans mon fichier plugins de mon serveur local, le seul problème c'est que je ne connais pas la version de skript conseillé pour la 1.9.4 J'aimerais savoir si cela serait possible que vous me disiez quelle est la version de Skript en 1.9.4 Cordialment Ziyxu
    1 point
  3. Calme ton agressivité s'il te plait. En tant que modérateur tu n'est en aucun cas censé chercher. Reste calme la prochaine fois pour le bien de tout le monde s'il te plait. Merci.
    1 point
  4. tu connais les conditions ? c'est pareil ici "si ton problème est résolu, met le en 'Résolu'" je lui ai pas ordonné. de plus c'était une question, et non pas une affirmation.
    0 point
  5. Re, J'ai pris un bout de code du Skript BanInfo pour en faire un TempBan, voilà le code : command /tempban [<offline player>] [<time span>]: usage: &c/tempban <player> <time> trigger: if player has permission "tempban.use": if arg 1 is not set: send "&cErreur : La bonne commande est /Tempban [Pseudo] [Temps]" to player else if arg 2 is not set: send "&cErreur : La bonne commande est /Tempban [Pseudo] [Temps]" to player else: set {_player} to arg 1 if {_player} is player: if {tempban.time:%{_player}%} is not set: message "&cVous avez été banni temporairement !" set {tempban.time::%{_player}%} to arg 2 set {tempban.timestamp::%{_player}%} to now kick {_player} due to "&6Tu es banni pendant &b%arg 2% &6minutes" if {tempban.time::%{_player}%} is set: message "&cCe joueur est maintenant banni !" if "%{_player}%" is offline player: if {tempban.time:%{_player}%} is not set: message "Vous avez été banni temporairement !" set {tempban.time::%{_player}%} to arg 2 set {tempban.timestamp::%{_player}%} to now if {tempban.time::%{_player}%} is set: message "&cCe joueur est maintenant banni !" if {numbertempban.%arg 1%} is not set: set {numbertempban.%arg 1%} to 1 else: add 1 to {numbertempban.%arg 1%} add arg 2 to {tempbantime.%arg 1%::*} on join: if {tempban.time::%player%} is set: set {_tempban} to difference between now and {tempban.timestamp::%player%} reduce {_tempban} by {tempban.time::%player%} if difference between now and {tempban.timestamp::%player%} is bigger than {tempban.time::%player%}: clear {tempban.time::%player%} clear {tempban.timestamp::%player%} set {banned.%player%} to false unban player if difference between now and {tempban.timestamp::%player%} is smaller than {tempban.time::%player%}: set {tempban.%player%} to true kick player due to "&cErreur : Vous avez été banni temporairement !"
    0 point
  6. Re je suis sur mon autre compte, alors au niveau du code : command /tempban [<offlineplayer>] [<text>] [<timespan>]: aliases: modtempban usage: /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) permission: tempban.use permission message: &cErreur, tu n'as pas la permission ! trigger: if arg 1 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 2 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 3 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 1 is set: if arg 2 is set: if arg 3 is set: if arg 3 is timespan: strike lightning effect to arg 1's location ban arg 1 due to "&bVous avez été banni pour &3: &c%arg 2% &bpendant &c%arg 3% &b!" set {tempban.%uuid of arg 1%} to true broadcast "&c%arg 1% &7a été &cbanni &7pour &c%arg 2%" set {raison.tempban.%uuid of arg 1%} to arg 2 set {temps.tempban.%uuid of arg 1%} to arg 3 kick arg 1 due to "&bVous avez été banni pour &3: &c%arg 2% &bpendant &c%arg 3% &b!" send "&bTu as bien banni &c%arg 1% &bpour &c%arg 2% &bpendant &c%arg 3% &b!" to player on connect: if {tempban.%uuid of player%} is set: kick player due to "&4/!\ &cTu as été bannis du serveur &4/!\ %nl% &7Raison: %{raison.tempban.%uuid of player%}% %nl% &7Durée: %{temps.tempban.%uuid of player%}%." Dit moi si il y a des erreurs et si tu veux le skript de unban ;)
    -1 points
  7. command /tempban [<offlineplayer>] [<text>] [<timespan>]: aliases: modtempban usage: /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) permission: tempban.use permission message: &cErreur, tu n'as pas la permission ! trigger: if arg 1 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 2 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 3 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 1 is set: if arg 2 is set: if arg 3 is set: if arg 3 is timespan: strike lightning effect to arg 1's location ban arg 1 due to "&bVous avez été banni pour &3: &c%arg 2% &bpendant &c%arg 3% &b!" set {tempban.%uuid of arg 1%} to true broadcast "&c%arg 1% &7a été &cbanni &7pour &c%arg 2%" set {raison.tempban.%uuid of arg 1%} to arg 2 set {temps.tempban.%uuid of arg 1%} to arg 3 kick arg 1 due to "&bVous avez été banni pour &3: &c%arg 2% &bpendant &c%arg 3% &b!" send "&bTu as bien banni &c%arg 1% &bpour &c%arg 2% &bpendant &c%arg 3% &b!" to player wait arg 3 make player execute command "/unban %arg 1%" essaye cela :) Baisse pas les bras ;) ou directement : command /tempban [<offlineplayer>] [<text>] [<timespan>]: aliases: modtempban usage: /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) permission: tempban.use permission message: &cErreur, tu n'as pas la permission ! trigger: if arg 1 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 2 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 3 is not set: send "&3 /tempban <joueur> <raison> <temps> (10:00 = 10 minutes...) " to player if arg 1 is set: if arg 2 is set: if arg 3 is set: if arg 3 is timespan: strike lightning effect to arg 1's location ban arg 1 due to "&bVous avez été banni pour &3: &c%arg 2% &bpendant &c%arg 3% &b!" set {tempban.%uuid of arg 1%} to true broadcast "&c%arg 1% &7a été &cbanni &7pour &c%arg 2%" set {raison.tempban.%uuid of arg 1%} to arg 2 set {temps.tempban.%uuid of arg 1%} to arg 3 kick arg 1 due to "&bVous avez été banni pour &3: &c%arg 2% &bpendant &c%arg 3% &b!" send "&bTu as bien banni &c%arg 1% &bpour &c%arg 2% &bpendant &c%arg 3% &b!" to player wait arg 3 delete {tempban.%uuid of arg 1%} delete {raison.tempban.%uuid of arg 1%} delete {temps.tempban.%uuid of arg 1%} stop N'oublie pas de vérifier les tabs dans les trois dernières lignes ~~ ;)
    -1 points
  8. Salut, j'ai fais un système de modération sur un serveur MMO que je développe. Je te passe la ligne du tempban et je te laisse modifier à ta guise ;) options: err: &c[Erreur] command /mmo [<text>] [<offline player>] [<text>] [<timespan>]: trigger: else if arg-1 is "ban": if arg-2 isn't set: send "{@err} &cVeuillez préciser le pseudo du joueur !" to player else if arg-2 is "%player%": send "{@err} &cVous ne pouvez pas vous ban !" to player else: if arg-3 isn't set: send "{@err} &cVeuillez préciser la raison !" to player else: if {ban.%arg-2%} isn't set: if arg-4 isn't set: set {ban.%arg-2%} to now add 1 to {ban.nombre.%arg-2%} set {ban.raison.%arg-2%} to "%arg-3%" send "&aVous avez banni définitivement &c%arg-2%" to player kick arg-2 due to "&cVous êtes banni de ce serveur !%nl%&6Durée: A vie%nl%&cRaison: &a%{ban.raison.%arg-2%}%" broadcast "&c%arg-2% a été banni du serveur !" log "[MODERATION] - %player% a banni %arg-2% a vie pour la raison suivante: %arg-3% %nl%" to "%player%.log" log "[bAN] - %arg-2% a été banni par %player% a vie pour la raison suivante: %arg-3% %nl%" to "%arg-2%.log" else: set {ban.%arg-2%} to now set {ban.timer.%arg-2%} to arg-4 add 1 to {ban.nombre.%arg-2%} set {ban.raison.%arg-2%} to "%arg-3%" send "&aVous avez banni &c%arg-2%" to player set {_t} to {ban.%arg-2%} add {ban.timer.%arg-2%} to {_t} kick arg-2 due to "&cVous êtes banni de ce serveur !%nl%&6Jusqu'au %{_t}% %nl%&cRaison: &a%{ban.raison.%arg-2%}%" broadcast "&c%arg-2% a été banni du serveur !" log "[MODERATION] - %player% a banni %arg-2% pendant %arg-4% pour la raison suivante: %arg-3% %nl%" to "%player%.log" log "[bAN] - %arg-2% a été banni par %player% pendant %arg-4% pour la raison suivante: %arg-3% %nl%" to "%arg-2%.log" else: send "&c{@err} Ce joueur est déjà banni !" to player set {_t} to {ban.%arg-2%} add {ban.timer.%arg-2%} to {_t} send "&dJusqu'au %{_t}% !" to player else if arg-1 is "unban": # UNBAN if arg-2 isn't set: send "{@err} &cVeuillez préciser le pseudo du joueur !" to player else: if arg-3 isn't set: send "{@err} &cVeuillez préciser la raison !" to player else: if {ban.%arg-2%} isn't set: send "{@err} &cCe joueur n'est pas banni !" to player else: delete {ban.%arg-2%} delete {ban.timer.%arg-2%} delete {ban.raison.%arg-2%} send "&aVous avez unban &c%arg-2% &a!" to player log "[MODERATION] - %player% a unban %arg-2% pour la raison suivante: %arg-3% %nl%" to "%player%.log" log "[bAN] - %arg-2% a été unban par %player% pour la raison suivante: %arg-3% %nl%" to "%arg-2%.log" on join: if {ban.%player%} is set: if {ban.timer.%player%} isn't set: set join message to "" kick player due to "&cVous êtes banni de ce serveur !%nl%&6Durée: A vie%nl%&cRaison: &a%{ban.raison.%player%}%" else if difference between now and {ban.%player%} is less than {ban.timer.%player%}: set join message to "" set {_t} to {ban.%player%} add {ban.timer.%player%} to {_t} kick player due to "&cVous êtes banni de ce serveur !%nl%&6Jusqu'au %{_t}% %nl%&cRaison: &a%{ban.raison.%player%}%" else: delete {ban.%player%} delete {ban.timer.%player%} delete {ban.raison.%player%} Pour lister les joueurs ban, tu ajoute le pseudo du joueur à une variable liste comme: '{liste.bans::*}' et tu créée un argument 'list' puis tu fais un: 'send "%{liste.bans::*}%" to player' Lorsque le joueur est débanni tu fais: 'remove "%player%" from {liste.bans::*}' tout en adaptant bien évidemment le 'player' J'espère t'avoir aidé ! ;)
    -1 points
  9. je te file mon code prend ce qui t'interesse command /tempban [<offline player>] [<time span>]: trigger: if arg 1 is not set: message "&cUsage : /tempban <player> <time>" else if arg 2 is not set: message "&cUsage : /tempban <player> <time>" else: set {_player} to arg 1 if {_player} is a player: if {tempban.time:%{_player}%} is not set: broadcast "&2%{_player}% &aà été banni par &2%sender% &apendant &2%arg 2%" set {tempban.time::%{_player}%} to arg 2 set {tempban.timestamp::%{_player}%} to now kick {_player} due to "Tu es tempban %arg 2%" stop if {tempban.time::%{_player}%} is set: message "&cCe joueur est déjà banni" stop if "%{_player}%" is offline player: if {tempban.time:%{_player}%} is not set: broadcast "&2%{_player}% &aà été banni par &2%sender% &apendant &2%arg 2%" set {tempban.time::%{_player}%} to arg 2 set {tempban.timestamp::%{_player}%} to now stop if {tempban.time::%{_player}%} is set: message "&cCe joueur est déjà banni" on join: if {tempban.time::%player%} is set: set {_tempban} to difference between now and {tempban.timestamp::%player%} set {_tempban2} to difference between {tempban.timestamp::%player%} and now reduce {_tempban} by {tempban.time::%player%} if difference between now and {tempban.timestamp::%player%} is bigger than {tempban.time::%player%}: clear {tempban.time::%player%} clear {tempban.timestamp::%player%} unban player if difference between now and {tempban.timestamp::%player%} is smaller than {tempban.time::%player%}: set join message to "" set {tempban.%player%} to true kick player due to "Tu es à &c%{_tempban2}% / %{tempban.time::%player%}% de tempban"
    -1 points
×
×
  • 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.