Les Zones d'ombre du ManiaScript

Parlez de tout ce qui est lié à Shootmania.

Moderator: French Moderator

Post Reply
User avatar
kana00
Posts: 39
Joined: 03 Apr 2014, 17:45
Location: Belgique

Les Zones d'ombre du ManiaScript

Post by kana00 »

Bonjour à tous.

Je fais actuellement un Mode sur Shootmania (Storm pour le moment, peut-etre un title pack plus tard) appelé "BossBattle".
ça fait 2 semaines que je m'y suis mis, presque tous les jours, pour comprendre le ManiaScript. Et, franchement, J'ai eu des phases de découragement, et des phases d'encouragement en fonction de la doc que je trouvais. et le voila le problème, il n'y en a pas beaucoup... et les tutos que j'ai trouvé, sont souvent incomplet, et font appel a des notions non ditent (supposant que celui qui lirait ces tutos, comprendrais la logique tout seul.... _-' ).

Voici mes quelques problemes actuel :

1)j'ai lu le tuto ici =>http://doc.maniaplanet.com/creation/man ... tomui.html
j'ai été voir le script élite pour copier la façon de faire. et je n'ai pas réussi a attaché un manialink sur l'interface du jeu.
ce que j'ai fais :

Code: Select all

#Include "Libs/Nadeo/Layers2.Script.txt" as Layers
#Include "Libs/Nadeo/CustomUI.Script.txt" as CustomUI
MB_LogVersion(CustomUI::GetScriptName(), CustomUI::GetScriptVersion());
***StartServer*** //simplifié
***
CustomUI::Load();
CustomUI::Add("BossInformation",<156., -80.>, <60., 60.>, "center", "center");
CustomUI::Build();
***
***StartMap***
***
CustomUI::Attach();//j'ai pas compris pourquoi j'ai rajouté ça, c'était dans le script élite
***
***PlayLoop***
***
if(bossISNotSpawn)
{
SpawnTheBoss();
Layers::Create("Info", CreateLayerInfo());
bossISNotSpawn=False;
}
***
***EndServer***
***
CustomUI::Unload();
***
Text CreateLayerInfo()
{
	log("createlayerinfo() est lue");
	return """
	<manialink version="1" name="BossInformation">
		<frame halign="center" posn="0 -58 0" class="LibCustomUI_Module" id="BossInformation">
			<gauge halign="center" valign="center" posn="0 -2.5 0" sizen="50 12" color="000f"/>
			<label posn="0 0 0" halign="center" valign="center" style="TextButtonNav" text="Boss PV = $3f0{{{ BossID.Armor/100 }}}$fff/{{{ BossID.ArmorMax/100 }}}" />
			<label posn="0 -5 0" halign="center" valign="center" style="TextButtonNav" text="Rocket = $3f0{{{ BossID.CurAmmo/1500 }}}" />
		</frame> 

	</manialink>""";
}
Juste, avec ce code, j'ai perdu 5h de ma vie (xD) a cherché pour rien, retourné ce code dans toutes les façons possible, j'ai même essayé des choses absurde... Si quelque peut expliqué au complet comment fonctionne CustomUI, je l'en remercie. :3

2)Comment composé avec le TextLib::Compose //microtuto si possible please xD
3)Que signifi _(variable
4)Winner <=> Null //c'est plus le "<=>" qui m’intéresse.
5)je veux installer des custom wearpons sans faire de title park, est-ce possible, et si oui, comment ?
6)Comment faire des convertions de variable ? (exemple, un Integer en Real et inversément)
re:(j'ai trouvé une parade pour le 6

Code: Select all

	declare Real ArmorTotal;
	declare Real ArmorCur;
	declare Real coefArmor;
	ArmorCur=BossID.Armor+0.0;
	ArmorTotal=BossID.ArmorMax+0.0;
	coefArmor = (ArmorCur/ArmorTotal)*100 +0.0;
mais, le code est un peu fastidieux, si quelqu'un a une solution ? :) )
Je vous remercie de m'avoir lue, et j'espère que quelqu'un pourra m'aidé. :)
User avatar
Nerpson
Translator
Translator
Posts: 1555
Joined: 27 Sep 2013, 18:02
Location: France
Contact:

Re: Les Zones d'ombre du ManiaScript

Post by Nerpson »

Je vais répondre à ce que je sais :
2) la fonction Compose() ressemble fortement à printf(), native au langage C. Dans le premier paramètre, tu dois simplement spécifier ta chaine de caractères en y incluant des caractères remarquables qui seront remplacés par les paramètres suivants.
Exemple :

Code: Select all

TextLib::Compose(_("%1 gagne la partie avec un score de %2 !"), Player.Name, Player.Score);
%n indique à la méthode que tu veux insérer à cette position le contenu du nième paramètre.

3) _("") est la représentation du type Text. _NomVariable est une variable paramètre d'une fonction/action respectant la nomenclature.

5) Je te sortirai un exemple de comment faire ça lorsque j'aurai mon script sous la main

6) Pour transformer un entier en réel, tu devras selon moi procéder ainsi :

Code: Select all

Real monReel;
Integer monEntier = 4;

monReel = TextLib::ToReal(TextLib::ToText(monEntier));
La fonction ToReal de la librairie TextLib ne permet que la conversion de texte vers réel. Il n'existe pas de surcharges utilisant un réel en paramètre. On peut alors "tricher" et utiliser une autre fonction ToText toujours dans la librairie TextLib qui elle autorise la conversion d'entiers, de réels, de booléens, ... en texte.

Il est vrai que nos amis de chez Nadeo devraient mettre au point une surcharge de ToReal autorisant la conversion d'entier. Au temps pour moi si cela existe déjà et que je ne l'ai pas vu. :lol:

Pour revenir à ta question, je t'invite aussi à regarder la doc ici :
http://maniascript.tmrankings.com/html/ ... 670da79ebc
ImageImageImageImage
User avatar
kana00
Posts: 39
Joined: 03 Apr 2014, 17:45
Location: Belgique

Re: Les Zones d'ombre du ManiaScript

Post by kana00 »

Merci :D !
c'est super simpat d'avoir répondu aussi vite Nerpson xD
Chui mort de fatigue, je n'ai pas dormis depuis hier parce que je veux absolution finir mon script :D (try harder du code)
J'arrive a penne a penser xD mais je voulais te laissé un petit message pour te remercier avant de tombé dans les pommes xD du sommeil.

J'ai essayé de faire lancé mon serveur en lui disant qu'il existe une custom weapon (tout fonctionne en local, avec l'arme dans le dossier Action), mais, une fois, lancé sur un vrais serveur qui contient l'arme, tous les joueurs sont kické du serveur avec une erreur de debbuging. hum... alors, me suis demandé, s'il n'y avait pas une parade, pour quand même mettre une custom weapon ou action sans passé par la case title pack :) ? est-ce possible ?

NB : je compte faire un tuto de maniascript très prochainement, qui explique tout ce qu'il faut savoir pour faire un mode de jeu complet. Votre savoir aideront beaucoup la communauté.
User avatar
Eole
Nadeo
Nadeo
Posts: 1265
Joined: 26 Apr 2011, 21:08

Re: Les Zones d'ombre du ManiaScript

Post by Eole »

1) Pour afficher une interface, la bibliothèque Layers suffit. CustomUI permet de rajouter quelques fonctionnalités supplémentaires mais pour débuter ce n'est pas nécessaire. Plutôt que le script d'Elite tu devrais essayer de jeter un oeil à celui de TimeAttack qui est plus simple à appréhender je pense.

Voilà un exemple de base:

Code: Select all

#Extends "Modes/ShootMania/ModeBase.Script.txt"

#Include "Libs/Nadeo/Layers2.Script.txt" as Layers

#Const   CompatibleMapTypes   "MeleeArena"
#Const   Version              "2015-03-18"

***StartServer***
***
// On commence par créer le manialink qu'on veut afficher
declare MonManialink = """<label text="Ca marche!" scale="3" />""";

// On crée ensuite un layer qui va contenir le manialink
// La fonction Create() prend deux paramètres en entrée :
// - Le nom du layer (Text)
// - En option, le manialink a afficher dans le layer(Text)
Layers::Create("MonLayer", MonManialink);

// Ensuite on attache le layer à l'UI générale
// De cette manière il sera disponible automatiquement chez tous les joueurs
Layers::Attach("MonLayer");

// Quand on attache un layer il est par défaut visible, mais c'est possible de l'afficher ou le masquer à tout moment
Layers::Hide("MonLayer"); //< Cache le layer
Layers::Show("MonLayer"); //< Affiche le layer
***

***EndServer***
***
// On detache le layer quand on en a plus besoin
Layers::Detach("MonLayer");

// À la fin du mode on détruit le layer quand on en a plus besoin
Layers::Destroy("MonLayer");
***
2) Voir la réponse de Nerpson.

3) _("Chaine de caractère") sert à la traduction de texte. Quand tu passes un texte à la fonction _() elle va chercher dans la base de traduction de Maniaplanet si une traduction existe pour ce texte dans la langue du joueur. Si c'est le cas elle remplace le texte par sa version traduite, sinon elle renvoie le texte original.

4) La différence entre = et <=>. Ça devient un peu plus complexe, tu peux jeter un œil ici pour en apprendre plus.

5) Utiliser des armes custom sans title pack, est-ce possible? Oui et non. Si les joueurs qui rejoignent le serveur possèdent le fichier action de l'arme, ils pourront jouer, sinon ils se feront kick. Utiliser un title pack permet de s'assurer que tous les joueurs qui rejoignent un serveur possèdent le bon fichier action.

6) La conversion de variables.
Depuis un Text ou vers un Text la bibliothèque TextLib contient un tas de fonctions pour ça.
Depuis un Integer vers un Real, n'importe quel opération entre un entier et un réel retourne un réel, on peut donc écrire la fonction suivante si nécessaire :

Code: Select all

Real ToReal(Integer _Input) {
	return _Input * 1.;
}
Depuis un Real vers un Integer. C'est un peu plus compliqué puisqu'il va falloir choisir entre trois possibilités: arrondir à l'entier le plus proche, à l'entier supérieur ou à l'entier inférieur. Les fonctions sont disponibles dans la bibliothèque MathLib.

Code: Select all

#Include "MathLib" as ML

***StartServer***
***
// À l'entier le plus proche
declare A = ML::NearestInteger(3.2); //< A = 3
declare B = ML::NearestInteger(3.7); //< B = 4
// À l'entier inférieur
declare C = ML::FloorInteger(3.2); //< C = 3
declare D = ML::FloorInteger(3.7); //< D = 3
// À l'entier inférieur
declare E = ML::CeilingInteger(3.2); //< E = 4
declare F = ML::CeilingInteger(3.7); //< F = 4
***
Contribute to the ManiaPlanet documentation on GitHub
A question about ManiaScript? Ask it here!
User avatar
kana00
Posts: 39
Joined: 03 Apr 2014, 17:45
Location: Belgique

Re: Les Zones d'ombre du ManiaScript

Post by kana00 »

Merci Eole, ça me servira bcp je pense ^^ :1010 (au final, j'ai décidé de faire un title pack pour les armes et actions).
J'avais déjà regardé les Layers sans mouve/hide
Ton tuto sur les Layers est super !
Je pourrais affiché beacoups d'information sur le boss du jeu.
Mais, y'a t-il moyens de connaitre mon erreur dans mon code, pour ne plus faire l'erreur et pouvoir faire des customUI
avec des plugins qu'on peux move/hide (je suis sur qu'il me manque juste une ligne...)?
User avatar
Eole
Nadeo
Nadeo
Posts: 1265
Joined: 26 Apr 2011, 21:08

Re: Les Zones d'ombre du ManiaScript

Post by Eole »

J'ai mis à jour le tuto, il y avait un petit problème d'affichage qui masquait une partie du code nécessaire au bon fonctionnement de la lib.
:?

Du coup si on reprend ton code il y a un truc à ajouter :

Code: Select all

{{{CustomUI::InjectMLFullScript()}}}

Code: Select all

Text CreateLayerInfo()
{
   log("createlayerinfo() est lue");
   return """
   <manialink version="1" name="BossInformation">
      <frame halign="center" posn="0 -58 0" class="LibCustomUI_Module" id="BossInformation">
         <gauge halign="center" valign="center" posn="0 -2.5 0" sizen="50 12" color="000f"/>
         <label posn="0 0 0" halign="center" valign="center" style="TextButtonNav" text="Boss PV = $3f0{{{ BossID.Armor/100 }}}$fff/{{{ BossID.ArmorMax/100 }}}" />
         <label posn="0 -5 0" halign="center" valign="center" style="TextButtonNav" text="Rocket = $3f0{{{ BossID.CurAmmo/1500 }}}" />
      </frame> 
      {{{CustomUI::InjectMLFullScript()}}} ///< ICI
   </manialink>""";
}
Contribute to the ManiaPlanet documentation on GitHub
A question about ManiaScript? Ask it here!
User avatar
kana00
Posts: 39
Joined: 03 Apr 2014, 17:45
Location: Belgique

Re: Les Zones d'ombre du ManiaScript

Post by kana00 »

^^ je pense qu'il manquait un petit truck en plus :-) (pas réussi avec cette méthode).
J'ai réussi a faire fonctionné CustomUI interface en fusionnant un peut toutes les idées que j'ai trouvé sur le forum et mes analyse des scripts, maintenant ça fonctionne si on fait ça :

Code: Select all

#Include "Libs/Nadeo/CustomUI.Script.txt" as CustomUI  //déclaration du nom de domaine "CustomUI"
#Include "Libs/Nadeo/Layers2.Script.txt" as Layers         //déclaration du nom de domaine "Layers"

//dans ***StartServer*** =>
declare MonManialink = """ //création d'un manialink simple
<manialink version="1">
<frame halign="center" posn="0 0 0" class="LibCustomUI_Module" id="MyModeName_Example"> //baliste paramettre class et id obligatoire dans un frame pour faire fonctionner la CustomUI
<label text="Ca marche!" scale="3" />
</frame>
{{{CustomUI::InjectMLFullScript()}}} //ligne obligatoire qui injecte un script à cette adresse
//=>https://github.com/maniaplanet/game-modes/blob/master/Common/Scripts/Libs/Nadeo/CustomUI.Script.txt
</manialink>""";
Layers::Create("MonLayer", MonManialink); //créatoir d'une couche (=>"Layers") utilisable par CustomUI
Layers::Attach("MonLayer"); //rendre visible la couche pour tous les joueurs.
CustomUI::Load(); //démarre l'interface CustomUI
CustomUI::Add("MyModeName_Example",<0., 0.>, <100., 100.>, "center", "center");//ajoute à la liste des couche de CustomUI
CustomUI::Build(); //construit toutes les couches présente dans la liste de CustomUI

//dans ***EndServer***
Layers::Detach("MonLayer"); //permet de ne plus utilisé cette couche.
Layers::Destroy("MonLayer"); //détruit cette couche (ATTENTION : important de les suppr, sinon, au changement de map, les ancienne couche ne disparaîtront pas. voir, entraîne des bugs).
CustomUI::Unload(); //fermer CustomUI
NB: n'oubliez pas de supprimer les commentaires dans le ManiaLink, sinon, ça ne fonctionne pas.

Je pense maintenant que, CustomUI est plutot un gestionnaire de layers, que créateur d'interface Custom ^^
en tout cas, ça m'aura pris 2 jours pour réussir (xD) mais voila, IT WORK ! :pil

Je tiens a remercier particulièrement Eole pour m'avoir soutenue dans cette aventure.
Ma famille qui, a plusieurs reprise, m'a encouragé.
et mon chien, parce qu'il est beau. (troll :roflol: ).

NB: Si quelqu'un vois une faute dans mon micro tuto, dite le moi, je rééditerais mon poste.
Et euuuu.... Eole, est-ce que ça dérange si je fais plusieurs poste sur le ManiaScript dans le forum ou je mp ?
(Je demande parce que je suis un peu nouveaux xD dans le forum)...
Last edited by kana00 on 23 Mar 2015, 04:37, edited 1 time in total.
User avatar
Eole
Nadeo
Nadeo
Posts: 1265
Joined: 26 Apr 2011, 21:08

Re: Les Zones d'ombre du ManiaScript

Post by Eole »

kana00 wrote:Et euuuu.... Eole, est-ce que ça dérange si je fais plusieurs poste sur le ManiaScript dans le forum ou je mp ?
Aucun soucis, tu peux poster autant que tu veux à propos de ManiaScript, le forum est là pour ça. ;)
Contribute to the ManiaPlanet documentation on GitHub
A question about ManiaScript? Ask it here!
Post Reply

Return to “Shootmania”

Who is online

Users browsing this forum: No registered users and 0 guests