Accéder au contenu de la page

Comment créer son propre serveur NetBattle?

/!\ Vous n'avez besoin que de lire les 3 premières parties si vous désirez simplement créer un serveur.
Par conséquent, inutile de vous prendre la tête pour essayer de comprendre la partie 4 si vous ne voulez pas faire de scripts.

Comme vous avez pu le voir, la servlist est constituée d'un grand nombre de serveurs disséminés un peu partout dans le monde... Mais comment faire le votre?

Sommaire :
1 - Paramétrer le serveur
2 - Modder le serveur
3 - Modérer le serveur
4 - Les scripts
(Partie difficile !)

1ère partie : paramétrer le serveur et le mettre en ligne.

Ouvrir un serveur est à la portée de tous, et extrêmement simple. Rendez-vous sur le menu démarrer, dans Hubert Ware > NetBattle > Tools > Run a server.

Une fois ouvert, une fenêtre devrait apparaitre ou vous devrez paramétrer les données de base de votre serveur.
Si cette fenêtre n'apparait pas, rendez-vous sur : Server > Options > Registry.

Voir l'image en grand

Commencez par donner un nom à votre serveur, mettre le pseudo de l'administrateur principal du serveur, puis une rapide description du serveur. Attention à ne pas dépasser 4 lignes pour celle-ci, sans quoi tout ne sera pas visible.

"Private server" vous permet de mettre en ligne votre serveur sans l'ajouter à la Servlist : ainsi, seul les joueurs connaissant votre IP pourront y accéder, via le bouton "Advanced" en dessous de la servlist".
"Public server" ajoutera votre serveur à la servlist.

Le bouton "Register" vous permet de remettre votre serveur dans la Servlist, au cas où celle-ci aurait été désactivée temporairement ou si vous avez pour une quelquonque raison passé votre serveur en privé et que vous désirez le rendre de nouveau disponible au public.

Passez à l'onglet "General".

Voir l'image en grand

"Welcome message" : vous permet d'afficher automatiquement un message d'accueil à chaque nouvel arrivant qui ne sera visible que par lui seul. Cette case n'est cependant pas très utile, car l'on peut passer par les scripts pour cela (on y reviendra un peu plus loin).
Cependant, si vous ne voulez pas faire de script pour votre serveur, vous pouvez vous servir de cette case.

"Number of users" détermine le nombre maximum de joueurs qui pourront être connectés à votre serveur. 255 est le maximum, cependant définir un nombre moindre de joueurs pourra limiter le lag dans certains cas.

"Send rate" : sert à séfinir la vitesse d'affichage des messages. En général, l'affichage est simultané à l'envoi du message, mais dans certains cas (comme un copier/coller de plusieurs lignes de texte), choisir un send rate plus élevé affichera plus tardivement les messages dans le but, une fois encore, de limiter le lag.

"Number of lines to display" : détermine le nombres de lignes de messages qui seront affichés sur votre serveur. Laisser cette option à zéro ne fixera aucune limite. Si vous instaurez une limite de lignes, dès que ce nombre sera atteint, les messages les plus anciens seront effacés au profit des plus récents.

"User account inactivity" : supprime automatiquement certains joueurs de votre base de données dès qu'une certaine durée s'est écoulée sans qu'ils ne se présentent sur votre serveur.

"Auto-logging" : sauvegarde automatiquement un log de votre serveur dès que vous fermez celui-ci. Le log est sauvegardé par défaut dans le répertoire d'installation de NetBattle.

Onglet suivant!

Voir l'image en grand

"Connexion Password" : place un mot de passe sur le serveur. Seuls les joueurs connaissant ce mot de passe pourront se connecter à celui-ci. Vous devez l'entrer également dans "Verify" pour l'activer.

"Default ban message" : il s'agit du message qui sera envoyé à un joueur que vous bannissez temporairement. Attention, si vous le bannissez depuis le Master Server, le message ne lui sera pas envoyé.

"Allow old versions" : autorise les versions de NetBattle antérieures à 9.6 à se connecter à votre serveur.

"Allow new users" : autorise les joueurs qui ne sont pas dans votre base de données à se connecter à votre serveur.

"Use encryption" : permet de stocker automatiquement les mots de passe des joueurs et de les vérifier automatiquement à chaque fois qu'ils se connecteront sur votre serveur. L'activation ou la désactivation de cette option nécéssite de relancer NetBattle et le Master Server.

"Max connections per IP" : vous permet de fixer le nombre différent de comptes associés à la même IP connectés AU MÊME MOMENT (pas de panique si vous avez des comptes différents avec des tags ou autres). Laisser ce nombre à zéro ne fixe aucune limite. Le mettre à 1 interdit toute tentatative de double connexions. Le mettre à un nombre plus élevé fixera la limite à ce nombre...

"Flood tolerance" : le nombre maximum de messages pouvant être postés en un seul envoi par un joueur. Si le nombre de messages excède celui que vous avez pré-défini, le joueur est automatiquement kické.


Voir l'image en grand

L'onglet "Random" vous permet de paramétrer les paramètres selon lesquels seront gérés certains facteurs aléatoires du jeu et de votre serveur. Attention! Il n'est bien évidemment pas possible de retirer tout facteur aléatoire du jeu ni de l'influer de quelque manière que ce soit, mais juste de changer la méthode de tirage aléatoire et ainsi d'éviter certaines abérrations de NetBattle qui peuvent se produire.

"Pseudo Random" : le facteur aléatoire par défaut de NetBattle. Comme son nom l'indique, il ne s'agit pas d'un réél random, mais d'une simple restitution d'un nombre qui est repris d'une liste de nombres sur le main server. Ce "random" engendre de manière assez régulière quelques incohérences (du style 3 coups critiques à la suite, 3 gels à la suite après du bellage, etc).

"True Random" : utilise un véritable facteur aléatoire, qui est transféré depuis le site suivant : http://www.random.org.
Vous pouvez fixer les différentes limites de ce random dans les deux cases inférieures, mais vous ne pouvez pas le supprimer ni réduire le facteur aléatoire en combat de cette manière, inutile d'essayer ^^
Changer la méthode de random affecte cependant certaines fontionalités du serveur via les scripts, en particulier la fonction #Rand(#Maximum, #Minimum)

Lorsque tout vous convient, cliquez sur OK. Votre serveur est désormais en ligne.


2ème partie : intégrer un "mod" à votre serveur.

Qu'est-ce qu'un "mod"?
Un mod vous permet d'implémenter des attaques aux Pokémon.


Voir l'image en grand

Move, [NomDuPokémon], [Attaque] : ajouter une attaque au move-pool d'un Pokémon.
Trait, [NomDuPokémon], [AptitudeSpéciale], [Position] : ajouter une aptitude spéciale au Pokémon en première ou deuxième position.
Illegal, [NomDuPokémon], [Attaque1], [Attaque2], etc. : rendre certaines combinaisons d'attaques illégales (par exemple, combiner des attaques apprises sur Pokémon xd et par accouplement).

Les noms des pokémon, des attaques, et des aptitudes spéciales doivent être insérés en anglais.

Les attaques ainsi ajoutées sont disponibles pour les joueurs en allant sur le team builder depuis le serveur, puis dans version > "mod : NomDuServeur"
Les attaques ainsi implémentées apparaîtront en tant que "DB mod".


3ème partie : modération et autres fonctionalités.

Rendez-vous sur Server > Server Data.
La fenêtre suivante devrait apparaître :

Voir l'image en grand

Ici, rien de bien compliqué : il suffit de cliquer sur un joueur, de choisir un niveau de contrôle et de cliquer sur "Authority" pour appliquer le niveau de contrôle au joueur sélectionné. Les pouvoirs des modérateurs et des administrateurs sur un serveur sont au départ relativement similaires, vous pouvez cependant marquer cette différenciation dans l'accès aux différentes fonctionalités du script.

Cliquez sur un pseudo et sur "Delete" pour l'effacer de la base de données.

"User Name" et "Password" vous permettent de changer le mot de passe d'accès enregistré pour un joueur si l'encryption est activée. Une fois les deux informations complétées, cliquez sur "Change password" pour appliquer les changements.
Cela peut servir si par exemple un joueur a modifié son mdp ou désinstallé NetBattle et qu'il ne parvient plus à accéder sur le serveur avec son pseudo habituel, sans être obligé de l'effacer de la base de données, afin de conserver son rapport victoires/défaites par exemple.

Les autres onglets :

L'onglet "Word Filter" vous permet de proscrire certains mots de votre serveur, comme c'est le cas ici pour "bi*nvenue" et "p*mon".

Les onglets suivants servent à gérer les différents bans, l'IP ban bannit une IP, le SID ban un pseudo, et l'ISP ban l'ensemble des joueurs provenant d'un certain FAI.

Pour ce qui est de la modération sur le serveur en lui-même, il suffit de faire un clic droit sur le joueur a kicker/bannir, puis de sélectionner le choix correspondant (notez que vous pouvez également le faire en tant que main admin depuis l'onglet "Player" du NetBattle Master Server.

Il se peut que certaines personnes mal-intentionnées s'amusent à envoyer massivement des faux identifiants afin de mettre le serveur en surchage et de bloquer tous les sockets disponibles, provoquant ainsi un lag important et des RTE (Run Time Error) 5 ou 7 dans tous les matchs.
Bien que cela se produise très rarement, voici la procédure à suivre pour y remédier :

1) mettre le serveur en privé et y mettre un mot de passe le temps le temps de l'opération. Retirer (temporairement) tous les niveaux de contrôle pour éviter un SID ban accidentel.
2) mettre un IP ban sur le boulzor via le menu "Server Data", mais ne pas le kicker/bannir tout de suite.
3) aller sur Server > Socket status. Le menu suivant devrait apparaitre :


Voir l'image en grand

4) désactiver tous les sockets non occupés par des joueurs "rééls" sauf un (comptez le nombre de vrai joueurs, et désactivez tous les sockets supérieurs à ce nombre + 1).
5) kicker/bannir le boulzor sur le socket restant (ça revient au même, y'a l'IP ban dessus).

Après cela, vous pouvez tout rétablir comme auparavant.

Voilà, votre serveur marche comme sur des roulettes !
Oui, mais voilà, peut-être désireriez-vous que votre serveur affiche un grand nombre d'informations au joueur qui se connecte sur votre serveur, ou bien encore qu'il gère automatiquement les tournois que vous organiserez ?
Si c'est le cas, alors le scriptage vous tend les bras !

/!\ La quatrième partie n'est pas du tout nécéssaire à la création d'un serveur ! Si vous n'êtes pas intéressé par les scripts, que tout ce que vous vouez c'est un serveur tout simple, vous pouvez vous arrêter là.
La partie sur les scripts qui suit est très difficile et très longue, donc si je peux vous éviter quelques maux de tête en vous conseillant de ne pas lire la suite, j'en serais très heureux ! ^^


4ème partie : créer un script pour votre serveur.

STOP

CETTE PARTIE EST DÉCONSEILLÉE AUX DÉBUTANTS !
Si vous vouliez simplement créer un serveur, vous n'avez pas besoin de lire la suite !


Rendez-vous sur Server > Script Window dans le Master Server.
La fenêtre suivante devrait apparaître :

Voir l'image en grand

Vous devriez arriver devant la fenêtre de scriptage, toute blanche.
Quelle est son utilité? On va s'en servir pour rajouter des fonctionalités au serveur.
Qu'est-ce qu'on va y mettre? Principalement des commandes qui seront appliquées par le serveur lui-même dès qu'une condition sera remplie, telle l'entrée d'un mesage sur le serveur par un joueur comme "!commandes".
Bien sûr, il est possible de paramétrer certaines données du script pour que telle ou telle commande ne soit accessible qu'a tel ou tel niveau de contrôle.

/!\ : ce chapitre est particulièrement lourd, avec de nombreuses listes d'évènements, de commandes, et de fonctions. Non, vous n'avez pas à les apprendre par coeur pour le moment, vous pourrez vous y référer lorsque vous créérez vos propres scripts, le plus important est que vous ayez compris l'utilisation de telle ou telle évènement/commande/variable/fonction/condition.
Ça va sans doute vous prendre beaucoup de temps, et la meilleure façon pour s'en sortir sera de tester soi-même les instructions / fonctions jusqu'à ce que ça rentre.
Considérez cette partie comme un espèce de documentation, même si j'ai essayé (parfois maladroitement) de simplifier certaines choses pour ceux qui débutent.
Une fois tout cela maîtrisé, connaître les fonctions principales par coeur vous prodiguera un gain de temps considérable lors du scriptage. %)


===I-Les évènements===

Vous l'aurez compris, pour que telle ou telle partie du script se déclenche, il faut un élément déclencheur. Pour faire simple, on dit à l'ordinateur "si telle chose se produit, fais ça".
Vous devrez donc faire suivre l'événement de commandes (on en parle juste après).
La définition des éléments qui déclencheront ladite partie du script se fait par le biais d'évènements. Un évènement commence par "Event" et se termine par "EndEvent".
Voici la liste des principaux évènements à connaître, d'autres suivront un peu plus loin :

Evènement : Description
ServerStartup : se déclenche dès l'ouverture du serveur
NewMessage : se déclenche dès qu'un nouveau message est posté
ChatMessage : se déclenche dès qu'un message est posté sur le chat
PlayerSignOn : se déclenche dès qu'un joueur se connecte au serveur
PlayerSignOff : se déclenche dès qu'un joueur se déconnecte du serveur
ChallengeIssued : se déclenche dès qu'un match est accepté
BattleBegin : se déclenche au début d'un match
BattleOver : se déclenche à la fin d'un match
PlayerKick : se déclenche lorsqu'un joueur est kické
PlayerBan : se déclenche lorsqu'un joueur est banni
PlayerAway : se déclenche dès qu'un joueur se met en statut "Away"
TeamChange : se déclenche dès qu'un joueur change d'équipe Pokémon

Ces évènements sont toujours précédés d'un "+" ou d'un "-".
Le "+" fait que la partie du script s'exécute juste APRES que l'évènement ait eu lieu.
Le "-" fait que la partie du script s'exécute juste AVANT que l'évènement ait eu lieu.


===II-Les commandes===

Tout ça, c'est bien beau, mais qu'est-ce qu'on va lui faire faire à notre script une fois les évènements déclenchés? On va lui faire éxécuter des commandes.
Les commandes sont les instructions que vous donnez au serveur, ce que vous voulez qu'il fasse. Vous pouvez lui dire d'afficher un message à tous les joueurs, où encore de bannir un joueur...
Nous verrons plus loin avec les conditions qu'il est possible de faire des scripts très pratiques qui permettent par exemple de kicker un joueur si celui-ci poste un grand nombre de message à la fois (on appelle cela flooder un serveur), où d'interdire un participant à un tournoi d'affronter un joueur hors-tournoi, etc.
Bref, voici la liste des commandes les plus importantes :

Commande : Effet
/? !val : affiche la valeur de la variable "!val" sur le chat
/Clear : efface tous les messages dans le chat du Master Server
/SendPM #PNum, $Message : envoie le message enregistré dans la variable littéraire "$Message" au joueur ayant le numéro stocké dans "#PNum" sur le chat.
/SendAll $Message : envoie le message enregistré dans la variable littéraire "$Message" à tous les joueurs sur le chat
/Kick #PNum : kicke le joueur ayant le numéro stocké dans "#PNum"
/Ban #PNum : bannit le joueur ayant le numéro stocké dans "#PNum"
/SIDBan #PNum : bannit le joueur ayant le numéro stocké dans "#PNum" et ajoute son pseudo à la SID ban list
/Run $Path : similaire à ce qu'on appelle une étiquette, à savoir qu'il renvoie à une autre partie du script située à "$Path". Cependant, les fonctions et autres permettent d'obtenir un résultat similaire, cette commande n'est donc pas la plus utile de toutes. d'ailleurs, il me semble qu'elle a été retirée avec la 9.4, mais ayant un doute, je préfère la laiser ici pour le moment.
/SaveValue $Key, !Val : sauvegarde une valeur au Registre Windows. Avec une bonne habitude de Visual Basic, il est ainsi possible d'ajouter des fonctions supplémentaires au serveur. Tout est enregistré sous /NetBattle/Script Values/[$Key]
/SetPlayerInfo #PNum, @Info, !NewVal : Règle l'information "@Info" du joueur "#PNum" sur "!NewVal". "@Info" peut-être les Pokémon du joueur, son nombre de victoires, le résultat qu'il a obtenu en exécutant une commande du script, etc.
/Set !var, !val : Règle une variable à une certaine valeur. On y reviendra un peu plus loin
/Unset !var : RAZ de la variable
/Inc #var, #num : incrémente une variable d'un certain nombre
/StopEvent : arrête un évènement donné
/Exit : arrête le script, cette commande a primauté sur toutes les autres

Avec les évènements et les commandes, vous devriez déjà pouvoir faire quelques petites choses.
En voilà un petit exemple :
Event +PlayerSignOn /SendAll "Saluez notre future victime!" EndEvent
Affichera "Saluez notre future victime!" (sans les guillemets) a tous les joueurs sur le serveur, juste après que le joueur se soit connecté au serveur.

Notez d'ailleurs que les différentes parties de texte, même si pour cela vous devez totalement les séparer l'une de l'autre, doivent TOUJOURS être encadrées par des guillemets, comme ceci : "texte".

Remarquez pour finir que les commandes ci-dessus peuvent-être exécutées directement sur le chat via le Master Server, en parallèle au script, si vous le souhaitez.


===III-Les variables===

Vous aurez noté que la plupart des commandes vous demandent des "#PNum", "#var" et autres "$Message". Mais qu'est-ce que ce charabia? Faut-il les mettre tel quels sur un script? Non, bien évidement, il faut les remplacer par ce que l'on appelle des variables.

Les variables sont de deux types : numériques ou littéraires. Dans le premier cas, il s'agira de nombres, et dans le deuxième de texte. La spécificité des variables est qu'elles n'ont pas de valeur fixe, elles peuvent donc être modifiées par de multiples facteurs, qu'il s'agisse d'une intervention volontaire de votre part, d'un des joueurs, ou bien du script lui-même par le biais de l'exécution d'une commande. Pour paramétrer une variable, on utilise la commande "/Set".

On distingue deux arguments (un argument est ce qui définit la cible d'une commande) pour la commande "/Set":
"!var" : fait appel à une variable et la restitue dans une partie du script. Vous ne pouvez pas introduire directement un nombre/texte avec cet argument. Il doit s'agir obligatoirement d'une variable. Si vous appelez une variable qui n'existe pas, le script la crééra de lui-même.
"!val" : permet d'introduire et de stocker une valeur dans une variable donnée. Il peut également renvoyer à une variable, afin de s'en servir d'opérande pour influer sur une autre variable (en rendant une variable X égale à une variable Y, par exemple).

Pour déterminer le type de la variable, on place avant celle-ci :
-"$" si celle-ci est littéraire
-"#" si celle-ci est numérique

Il existe 3 variables spécifiques : "#Source", "#Target", et "$Message".
Leur effet change suivant le contexte où ils se situent.
Le tableau sur ce lien vous donne ce à quoi ils renvoient dans un évènement donné :



"/SendPM #PNum, $Message" dispose d'une variable numérique, contrairement à "/SendAll $Message". Cela nous permet de définir qui va recevoir le message et qui ne le recevra pas. Comme le montre le tableau ci-dessus, il est possible de remplacer la variable #PNum par #Source:

Event +PlayerSignOn
/SendPM #Source, "Bienvenue sur mon serveur!"
EndEvent

Cet évènement affichera "Bienvenue sur mon serveur!" au joueur qui se connectera et à lui seul, sur la fenêtre de chat.

Les autres commandes se rapportant aux variables sont (pour rappel) :
/Unset !var : sert à remettre à zéro une variable.
/Inc #var, #num : Sert à ajouter un nombre #num à la variable numérique #var.


===IV-Les fonctions===

Si vous avez encore du mal avec les variables, prenez bien votre temps pour les comprendre avant de vous attaquer à ce morceau.

Les fonctions renvoient un nombre, du texte, ou une information quelquonque sur un argument précis, tel une des attaques du 3ème Pokémon du joueur occupant le socket n°12 par exemple.
Les fonctions peuvent également être utilisées à la place des valeurs lors de la définition des arguments de certaines commandes.
Comme pour les variables, les fonctions renvoyant un nombre sont précédées de "#", et celles renvoyant du texte de "$".

La liste suivante contient la plupart des fonctions diponibles sous 9.6, avec les différents arguments qu'il peuvent renvoyer.

#IsLoaded(#PNum) : renvoie 1 si le socket sélectionné est occupé. Sinon, renvoie 0.

$Name(#PNum) : renvoie le pseudo du socket sélectionné.

$Pokemon(#PokeNum) : renvoie le nom du Pokémon n°#PokeNum.

#PokeNum($Pokemon) : renvoie le n°#PokeNum du Pokémon $Pokemon.

#PNumber($PName) renvoie le numéro de socket du pseudo choisi. Si le pseudo choisi n'existe pas/plus, renvoie 0.

#HasPoke(#PNum, #PokeNum) : renvoie 1 si le socket sélectionné a le Pokémon n°#PokeNum. Dans le cas contraire, renvoie 0.

#HasPokeMove(#PNum, #PokeNum, #MoveNum) : renvoie 1 si le socket sélectionné a le Pokémon n°#PokeNum avec l'attaque n°#MoveNum. Dans le cas contraire, renvoie 0.

#GetPokeMove (#PNum, #PokeNum) : renvoie le numéro des attaques du Pokémon n°#PokeNum dans l'équipe du socket n°#PNum.

#MoveNum($Move) : renvoie le numéro de l'attaque $Move.

$Move(#N) : renvoie les attaques du Pokémon #N d'une équipe.

$Item(#N) : renvoie l'objet tenu du Pokémon #N d'une équipe.

#GetPokeLevel(#PNum, #PokeNum) : renvoie le niveau du Pokémon n°#PokeNum dans l'équipe du socket n°#PNum

#GetPokeItem(#PNum, #PokeNum) : renvoie le n° le l'objet du Pokémon n°#PokeNum dans l'équipe du socket n°#PNum.

#GetTeamPoke(#PNum, #N) : renvoie le n° du Pokédex du "#N"ème Pokémon du socket n°#PNum.
"#N" est compris entre 1 et 6.

#GetPlayerInfo(#PNum, @Info) : renvoie l'information spécifiée en @info. Il ne peut s'agir que d'un nombre.
"@Info" est une constante. Les valeurs valides pour celle-ci sont les suivantes :
AUTH (Niveau de contrôle : 0 = joueur, 1 = modérateur, 2 = administrateur)
BWTH (en match : 0 = non, sinon n°#PNum)
SPED (vitesse de réponse du joueur)
HIDE (équipe : 0 = cachée, 1 = révélée)
WINS (matchs gagnés, "WIN*" pour les unrated)
LOSE (matchs perdus, "LOS*" pour les unrated)
TIES (matchs nuls)
DISC (déconnections - invalide depuis la 9.2)

$GetPlayerInfo(#PNum, @Info) : pareil, mais cette fois-ci ce seront des variables littéraires qui seront renvoyées.
Voici les valeurs valides :
NAME (pseudo)
IPAD (adresse IP)
PSID (identifiant)
DNSA (adresse DNS)
EXTR (ce qui est écrit dans "Extra Info" de l'équipe du socket n°#PNum)
VERS (version de NB du socket n°#PNum)

#GetCompat(#PNum, #CompatNum) : vérifie la compatibilité de l'équipe du socket n°#PNum avec le mode #CompatNum.
Voici la liste des valeurs valides de #CompatNum:
0 - RBY avec échanges
1 - GSC avec échanges
2 - RBY sans échanges
3 - GSC sans échanges
4 - RS sans échanges
5 - 386 complet
6 - Mod

#LineNum : renvoie le nombre de lignes affichées dans le chat.

#TrainersNum : renvoie le nombre de joueurs connectés.

#SysTimer renvoie le nombre de secondes écoulées depuis 0:00 am.

$Time : renvoie l'heure sous la forme : HH:MM:SS AM/PM

$Date : renvoie la date sous la forme MM/JJ/AA

$WeekDay : renvoie le jour d'aujourd'hui.

$Month : renvoie le mois actuel.

#Rand(#Maximum, #Minimum) : renvoie un nombre aléatoire entre #Minimum et #Maximum, suivant la méthode random choisie dans "Server Options". Si #Minimum n'est pas défini, zéro est choisi comme valeur par défaut.

#RandPlayer : renvoie le numéro d'un joueur choisi aléatoirement. Si aucun joueur n'est connecté, zéro est renvoyé.

#GetValue($Key) : Recherche la valeur $Key dans le Registre Windows. Si la valeur n'est pas un chiffre, une RTE survient.

$GetValue($Key) : Recherche la valeur $Key dans le Registre Windows. Si la valeur est numérique, elle est convertie en valeur littéraire.

$Msg(#Index) : Renvoie un message pré-défini dans l'onglet "Messages" du "Script Window".

#MaxUsers : renvoie le nombre maximal de joueurs pouvant être accueillis par le serveur.

#FloodTol : renvoie le nombre maximal de messages envoyeés en un seul envoi autorisés par le serveur.

$WelcomeMsg : renvoie le message de bienvenue défini dans "Server options".

$Left($Text, #Number) : renvoie un nombre de caractères défini depuis la gauche du texte.

$Right($Text, #Number) : idem, depuis la droite.

$Mid($Text, #Start, #Length) : Renvoie "#Length" caractères d'un texte "$Text" à partir du caractère n°#Start.

#IsIn($Text, $Check, #Case)
Recherche si "$Check" est quelque part dans "$Text". Si oui, renvoie le nombre de "$Check" dans "$Text". Sinon, renvoie zéro. #Case précise si la recherche est sensible à la casse ou non. 0 = non, 1 = oui. Si cela n'est pas précisé, la recherche ne sera pas sensible à la casse.

#Len($Text) : renvoie le nombre de caractères dans "$Text".

$Replace $SourceText, $Find, $Replace
Cherche le texte "$Find" dans "$SourceText" et le remplace avec "$Replace". Renvoie le texte modifié.

$LCase($Text) : passe le texte "$Text" en minuscules.

$UCase($Text) : passe le texte "$Text" en majuscules.

$Chr(#Code) : renvoie le caractère ASCII n°#Code. Le code est en héxadécimal, mais le n° doit tout de même être rentré en décimal (donc entre 0 et 255).
NOTE: ☺ (1) est utilisé par le système et est remplacé par ☻ (2).

#Asc($Character) renvoie le code ASCII décimal du premier caractère entré en "$Character".

$Str(#Number) : passe le nombre "#Number" en valeur littéraire.

#Val($Text) : l'inverse de ci-dessus.

Les fonctions permettent d'améliorer grandement la qualité d'un script. Voici un petit exemple de ce qu'il est possible de faire avec :

Event +PlayerSignOn
/SendPM #Source, "Bienvenue sur ce serveur, " & $Name(#Source) & "!"
/SendPM #Source, "Aujourd'hui, nous sommes le " & $Date & "."
/SendPM #Source, "Il est actuellement : " & $Time & "."
/SendPM #Source, "Ton numéro porte-bonheur est le " & $Str(#Rand(100, 1)) & "."
EndEvent

NOTE: Le "&" sert à relier deux valeurs littéraires.

Admettons que le nom du joueur se connectant soit Nono.
Cette partie de script affichera donc au joueur, juste après qu'il se soit connecté :
"Bienvenue sur ce serveur, Nono!
Aujourd'hui, nous sommes le 04/14/07.
Il est actuellement 06:59:12 AM.
Ton numéro porte-bonheur est le 13."

"/SendPM #Source" enverra un message visible uniquement de la cible "#Source", à savoir le joueur se connectant.
"&" joint des différentes partie de texte -les valeurs littéraires-.
"$Date" affiche la date, et "$Time" l'heure.
Enfin, la fonction "$Str(#Rand(100, 1))" tire un numéro aléatoire entre 1 et 100 et le renvoie en tant que variable littéraire.

===V-Les conditions===

A- If/Else/EndIf.

Ces commandes servent à vérifier une condition, et à exécuter telle ou telle partie d'un script selon que la condition est vérifiée ou non.
Basiquement, cela donne quelque chose de ce style:

If [Value1] [Operator] [Value2] (c'est à dire si Valeur1 est "opérande" de Valeur2)
[Commandes]
Else (si la condition n'est pas remplie)
[Autres commandes]
EndIf (clot la condition)


[Operator] est un vérificateur de condition. Il utilise les opérandes suivantes :

= : égal à
== : égal à, sensible à la casse pour ce qui s'agit des minuscules/majuscules des variables littéraires
<> : différent de
> : plus grand que
< : plus petit que
>= : plus grand ou égal à
<= : plus petit ou égal à

Si la condition se vérifie, le script exécute les commandes situées après le "If".
Si la condition n'est pas vérifiée, le script exécute les commandes situées après le "Else".
Si le "Else" n'a pas d'exécution définie, le script passe directement à la suite de son exécution après la fin de la condition (à savoir "EndIf").

Voici un exemple de situation où les conditions se révèlent fort utiles : on veut ici exécuter une certaine commande (le kick), si le joueur possède dans son équipe un Pokémon donné (allez, au hasard : Lugia) :


Event -PlayerSignOn
If #HasPoke(#Source, 249) = 1
/SendPM #Source, "Lugia est interdit sur ce serveur!"
/Kick #Source
Else
/SendPM #Source, "Votre équipe est valide!"
EndIf
End Event


Voilà l'explication point par point :
"Event -PlayerSignOn" déclenche l'évènement dès qu'un joueur se connecte, juste avant qu'il ne parvienne au serveur.
"If" ouvre la condition.
"#HasPoke(#Source, 249)" vérifie que le joueur se connectant possède ou non le Pokémon 249 dans son équipe et fixe la variable à 0 ou 1 le cas échéant, Lugia.
"= 1" est le vérificateur de la condition et vérifie que Lugia est présent ou non dans l'équipe. Si la variable correspond (ici 1), alors le script exécute le code ci-après, sinon elle exécute celui situé après "Else".
/Kick #Source kicke le joueur se connectant avant son arrivée sur le serveur.
"Else" : si la condition n'est pas vérifiée.
"/SendPM #Source, "Votre équipe est valide!"" : envoie le message de validité au joueur se connectant.
EndIf : clot la condition.
EndEvent : clot l'évènement.

On peut également inclure des sous-conditions supplémentaires dans une condition qui servent à exécuter telle ou telle partie du script dans tel ou tel cas, une fois de plus. En voici la liste :

AND : renvoie "Vrai" si toutes les conditions sont vérifiées.
OR : renvoie "Vrai" si au moins une des conditions est vérifiée.
XOR : renvoie "Vrai" si une condition est vérifiée et que l'autre ne l'est pas.
EQV : renvoie "Vrai" si toutes les conditions sont vérifiées ou si toutes les conditions ne sont pas vérifiées.

Revenons à notre cher Lugia, et voyons un peu l'application d'une de ces sous-conditions, "AND" :

Event -PlayerSignOn
If #HasPoke(#Source, 249) = 1 AND #GetPlayerInfo(#Source, AUTH) = 0
/SendPM #Source, "Lugia n'est pas autorisé sur ce serveur!"
/Kick #Source
Else
/SendPM #Source, "Votre équipe est valide!"
EndIf
End Event

Maintenant, la condition "If" vérifie deux choses. La première que le Pokémon n°249 est bien présent dans l'équipe du joueur. La seconde est que le joueur ne dispose d'aucun niveau de contrôle sur le serveur.
Si les deux conditions sont vérifiées, la commande /Kick s'active.

Notez que dans l'exemple ci-dessus, le "Else" peut paraître totalement superflu et peut donc être retiré sans dommage aucun. Le joueur n'aura simplement pas son petit message comme quoi son équipe est bien conforme aux règles et tout ça... %)


===VI-Fonctionalités supplémentaires===

*L'évènement "Timer" vous permet de déclencher un évènement a une intervalle donnée. Cet évènement n'a pas besoin d'être précédé par "+" ou par "-" pour fonctionner.
Il peut se déclencher une fois, ou un nombre indéfini de fois, selon vos besoins.

Event Timer 600
/SendAll "N'oubliez pas de vous rendre sur notre site!"
EndEvent

Cet évènement enverra toutes les 10 minutes à tous les joueurs présents sur le chat le message "N'oubliez pas de vous rendre sur notre site!".
La limite originelle pour l'évènement Timer était de 86400, mais la limite de calcul de NetBattle étant limitée à quatre chiffres décimaux, le serveur se plantait lamentablement en une RTE. Ainsi la limite en 9.6 est-elle de 9999.

*Les mesages pré-définis peuvent-être entrés dans le Script Window, à l'onglet "Messages". Ceci est utile lorsqu'un message est appelé un grand nombre de fois dans votre script, et vous permet de l'y faire se référer aisément. Pour appeler un message depuis la liste des Messsages pré-définis, utilisez la fonction $Msg.

*Les StopEvent sont similaires aux évènements dans la mesure où ils se déclenchent lorsqu'un évènement donné à lieu. Leur activation arrête l'évènement en cours.
La liste des StopEvents valides est la suivante :
-NewMessage
-ChatMessage
-PlayerAway
-PlayerKick
-PlayerBan
-ChallengeIssued

*Pour de multiples raisons, il peut vous être nécéssaire de gérer plusieurs variables différentes pour chaque joueur connecté. Pour éviter que votre script ne devienne vite ingérable, il existe des structures de variables, c'est à dire une grosse variable qui en gère plusieurs, chacune de ces sous-variables étant attachées à la même structure et étant appelé distinctement en fonction du joueur concerné par cet appel de variable.
Pour créer un Player array (c'est leur nom), utilisez la commande /SetPA :

/SetPA {#|$}ArrayName

Réglez les variables individuelles avec la commande habituelle /Set :

/Set #ArrayName(#PNum), #Value


Quand un joueur se déconnecte, la variable sera automatiquement effacée pour ce joueur.
Quand un joueur se connecte, une variable lui est automatiquement créée et attribuée.

*Etiquettes et la commande GoTo.
Les étiquettes sont des sortes de marqueurs auquels votre script peut se référer rapidement.
Pour créer un marqueur, commencez une ligne avec l'étiquette ":".
Puis utilisez "GoTo" pour vous y référer.

Event +ChatMessage
If $Message = "!Suicide"
/Set #decompte, 5
/SendAll #decompte
:Boucle
/? $Str(#decompte)
/Inc #decompte, -1
If #decompte <> 0
/SendAll #decompte
GoTo Boucle
EndIf
/SendAll $Name(#Source) & ": Adieu, Ô monde cruel !"
/Kick #Source
EndIf
EndEvent

Dans cet évènement, le joueur qui rentrera la commande "!Suicide" affichera ce message...
"5
4
3
2
1
PseudoDuJoueur: Adieu, Ô monde cruel!"
...et kickera le joueur ayant exécuté cette commande du serveur.

":Boucle" créé l'ettiquette nommée "Boucle", et "GoTo Boucle" s'y réfère.

---------------------------------------------------------------------------------

Voilà. La longueur de ce tutorial pourra en rebuter quelques uns, mais la relative complexité du scriptage oblige à être aussi exhaustif que possible.

Bonne chance dans la création et la gestion de votre serveur!
Recherche
Communauté Pokébip
Journal des rédacteurs
Réseaux sociaux
Calendrier
Jeu 2024
iOS
Android
Pokémon Pocket (JCC)
Jeu 2025
Switch Légendes Pokémon : Z-A
Partenaires



Publicité