ManiaScript et aide

Parlez de tout ce qui est lié à Trackmania 2.

Moderator: French Moderator

Post Reply
User avatar
SurferIX
Posts: 79
Joined: 10 May 2011, 16:14
Contact:

ManiaScript et aide

Post by SurferIX »

Bonjour,

Je viens d'acheter le jeu TM2 et je vois que dans l'éditeur, il y a possibilité de faire des scripts.
Est-ce que c'est bien le "ManiaScript" dont c'est le sujet ici ?
------------------------------------------------------------
Si oui, quelques questions (sachant que je suis développeur, n'hésitez pas à y aller par le droit chemin) :

Code: Select all

declare CBlockModel BlockModelToPlace;
Je comprends que c'est pour déclarer une variable CBlockModel, quels sont tous les types de variables ?
------------------------------------------------------------

Code: Select all

  declare Integer NbBlocksPlaced for ManialinkPage;
  declare Integer NbBlocksToPlace for ManialinkPage;
Que signifie "for ManialinkPage;" ?
------------------------------------------------------------
Et le plus important :

Code: Select all

  declare BlockModelIds = Text[];
  BlockModelIds.add("DecoTreesBig1X1");
  BlockModelIds.add("DecoTreesMedium1X1");
  BlockModelIds.add("DecoRocksMedium1x1");
  BlockModelIds.add("DecoCactusMedium1X1");
  BlockModelIds.add("DecoBushesMedium1X1");
Après ils sont tirés au hasard. Comment fait-on pour avoir la liste de tous les Ids des Blocks ?
------------------------------------------------------------
Enfin, quand je lis ça :

Code: Select all

    declare RandomDir = ::CardinalDirections::North;
    for(I,1,RandomDirInt)
      RandomDir = MapUnits::GetNextDir(RandomDir);
Je me demande pourquoi d'un côté il y a directement les "::" dans "::CardinalDirections::North;" et à l'inverse, pourquoi il y a "MapUnits::GetNextDir(RandomDir);" sans les "::" au début (c'est à dire que j'aurais mieux compris si la chaine avait été : "RandomDir = ::MapUnits::GetNextDir(RandomDir);"


------------------------------------------------------------
Merci encore,

Olivier
http://olivierpons.fr
Mon dernier framework hautes performances : http://www.papdevis.fr
User avatar
jonthekiller
Translator
Translator
Posts: 4629
Joined: 15 Jun 2010, 11:07
Location: In Maniaplanet Alpha
Contact:

Re: ManiaScript et aide

Post by jonthekiller »

Salut,

je te conseille d'attendre la documentation du Maniascript qui expliquera tout en détail. Elle ne devrait pas trop tarder.

Et c'est bien ça le ManiaScript pour ta première question.
Image
krial057
Posts: 57
Joined: 13 Nov 2010, 20:15

Re: ManiaScript et aide

Post by krial057 »

Salut,
je suis aussi très intéressé au "ManiaScript". J'ai déja essayé d'analyser un peu et j'ai écrit quelques plugins et je suis entrain d'écire un petit tutorial en anglais(http://forum.maniaplanet.com/viewtopic.php?f=279&t=4294)

Pour ta première question:
NADEO n'a pas encore publier beaucoup d'informations sur le ManiaScript(sauf les examples) et donc, on sait pas quels types existent. Mais ici tu a une petite liste, des types que j'ai pu conclure:

Code: Select all

Void
Boolean
Integer
Real
Text
Class <- ?
Vec2
Vec3
Int3
Iso4

CBlockModelVariant
CMacroblockModel
CBlock
CBlockModel
CPluginScriptHandler
Pour ta deuxième question:
Si j'ai bien compris, for Manialinkpage fait qu'une variable est déclarée comme globale. Ca veut dire, lorsque tu declare une variable avec "for Manialinkpage ", la variable est accessible dans tout ton script (la déclaration de variables extérieur de la fonction main, est impossible (pas comme dans Ansi-C))
Example:

Code: Select all

#RequireContext CGameCtnEditorPluginScriptHandler
Void ditBonjours()
{
	declare Text a for ManialinkPage;
	DialogDoMessage(a);
}
main()
{
	declare Text a for ManialinkPage;
	a="Hello world";
	ditBonjours();
}

Pour la troisième question:

Dans ManiaScript il semble qu'un Array peut avoir des clés(comme dans php).
Donc on ne peut pas seulement utiliser l'index d'un array pour avoir l'accès à un élément, mais auss un texte. Don tu peut par example déclarer un array comme ceci:

Code: Select all

#RequireContext CGameCtnEditorPluginScriptHandler
main()
{
	declare Text[Text] Couleurs = ["Rouge1"=>"Carreau", "Rouge2"=>"Coeur", "Noire1"=>"Pique", "Noire2"=>"Trefle"];	
	DialogDoMessage(Couleurs["Rouge2"]);
}
Et tu peux avoir l'accès aux éléments avec un String. NADEO a fait le même avecles Blocks,donc l'index et l'id est en fait le texte(p.ex."DecoTreesBig1X1")

Pour ta dernière question:
Je n'ai auccun plan xD. Je suppose que c'est un marquage des namespaces. MapUnits est un scripte que tu as besoin d'inclure. Dans ce script est peut-être un namespace qui s'appelle MapUnits et pour acceder ses fonctions et variables, tu as probalbement besoin de dire au script que tu veux utiliser une fonction dans ce namespace en écrivant le préfix MapUnits::la fonction
Mais je ne comprend aussi pas pourquoi il y a les :: avant CardinalDirections. Il se peut que less :: sans préfix disent que s'est une fonction du namespace actuel.

Si tu es intéressé, tu peux aussi voir le code source de mes plugins (http://forum.maniaplanet.com/viewtopic.php?f=279&t=3381) (Si tu ne comprend pas l'anglais, clique sur le premier lien pour téléecharger les plugins)
Et ici aussi un liste de quelques fonctions utiles :roll:

Code: Select all

/**
*Functions
**
GetStartLineBlock
GetBlockGroundHeight
RemoveTerrainBlocks
GetBlock
PlaceMacroblock
CanPlaceMacroblock
PlaceTerrainBlocks
CanPlaceTerrainBlocks
PlaceRoadBlocks
CanPlaceRoadBlocks
CanPlaceBlock
RemoveAllBlocksAndTerrain
RemoveAllBlocks
UpdateBlocksDisplay
CameraHAngle
CameraVAngle
CursorMacroblockModel
CursorTerrainBlockModel
CursorBlockModel
CursorDir
CursorCoord
SetViewMode_Underground
IsViewMode_Underground
IsPlaceMode_Test
IsPlaceMode_CopyPaste
IsPlaceMode_Skin
IsPlaceMode_Macroblock
IsPlaceMode_Block
IsPlaceMode_Terraform
SetDisplayMode_BlockStock
DialogDoMessage
SaveChallenge
EnterEditMode_FreeLook
EnterEditMode_Pick
EnterEditMode_Erase
EnterEditMode_Place
SwitchViewMode_Underground
EnterPlaceMode_Test
EnterPlaceMode_CopyPaste
EnterPlaceMode_Skin
EnterPlaceMode_Macroblock
EnterPlaceMode_Block
EnterPlaceMode_Terraform
AutoSave
Help
ComputeShadows

/**
*Namespaces:
**
///
MAPUNITS
GetNextDir
GetPreviousDir
GetOpposedDir
AddDirs
GetNeighbourCoord
GetRotatedOffset
GetRotatedOffsetPositive
SubDirs

///
CARDINALDIRECTIONS
::CardinalDirections::North
::CardinalDirections::East
::CardinalDirections::West
::CardinalDirections::South

///
MATH
Sin
Cos
Tan
Exp
RandReal
RandInteger
ToReal
RealToInteger
TextToInteger
meilleures salutations,
Alain :yes:
User avatar
SurferIX
Posts: 79
Joined: 10 May 2011, 16:14
Contact:

Re: ManiaScript et aide

Post by SurferIX »

Petites notes que je fais au cours de mes tests :
- si vous avez deux écrans, faites comme moi : lancez TM2 en mode fenêtré. Pour ce faire, à n'importe quel moment appuyez sur "alt" et "entrée" ; ainsi, lorsque vous changerez de programme, (par exemple je fais des aller retour entre TM2 et mon éditeur de texte vim), TM2 ne se "cachera" pas et restera visible
- si jamais le compilateur émet une erreur, puis que vous revenez en arrière, et qu'il continue à vous sortir une erreur, essayez de quitter et de relancer TM2. Désolé, c'est pas pratique, mais ça fonctionne : malheureusement, des fois, le compilateur est planté de manière irréversible.

- le signe <=> signifie "est un pointeur vers". C'est assez déroutant comme notation mais bon il faut bien s'y faire. Exemple :

Code: Select all

BlockModelRoadRaceStraight <=> BlockModels["RoadRaceStraight"];
signifie que le BlockModelRoadRaceStraight "pointe" vers le tableau de constantes "BlockModels".

- ensuite, il faut absolument rafraichir, après avoir posé des blocs. Pour ce faire, il faut appeler la fonction UpdateBlocksDisplay();

- les coordonnées X,Y,Z ne sont pas celles auxquelles on pense :roflol:

Code: Select all

  declare CoordX = rand(0, Map.Size[0]-1);
  declare CoordY = rand(0, Map.Size[1]-1);
  declare CoordZ = rand(0, Map.Size[2]-1);
Quand on ouvre l'éditeur pour la première fois :

- les coordonnées X sont les gauche-droite (par rapport au curseur) c'est à dire l'axe des X (comme en math)
- les coordonnées Y sont les pg up/pg down (par rapport au curseur) c'est à dire la hauteur
- les coordonnées Z sont les haut-bas (par rapport au curseur)

Moi je me voyais au tout en haut de la map, en regardant, et je me disais : X gauche droite, Y haut bas, et Z = profondeur = hauteur. Pas du tout.
En fait pour arriver à garder le principe des maths, il faut s'imaginer à la place de la voiture qu'on colle au sol : X gauche droit, Y haut bas, c'est à dire la hauteur, et Z = profondeur = devant derrière quand on avance.
J'espère que ça, déjà, ça aidera un peu :mrgreen:

------------------------------------------------------
Ajout
------------------------------------------------------
Conseil très important : des fois ça ne fonctionne plus, on ne sait pas pourquoi. Donc y aller pas à pas, mais vraiment pas à pas et à chaque pas, chaque toute petite modification qui fonctionne, faire une copie de sauvegarde.
http://olivierpons.fr
Mon dernier framework hautes performances : http://www.papdevis.fr
Post Reply

Return to “Trackmania 2”

Who is online

Users browsing this forum: No registered users and 2 guests