Accueil du SiteAccueil du Site  AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  ConnexionConnexion  S'enregistrerS'enregistrer  




Partagez
 

 [RMXP]Quelques truc à savoir en scripting

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Jin
Ancien staffeux
Ancien staffeux
Jin

Masculin
Messages postés : 8557
Date d'inscription : 08/12/2010
Jauge LPC :
[RMXP]Quelques truc à savoir en scripting 891527140069 / 10069 / 100[RMXP]Quelques truc à savoir en scripting 8915271400

G 1 petit zizi Very Happy
Nn C pa vré Sad
[RMXP]Quelques truc à savoir en scripting Membre15
[RMXP]Quelques truc à savoir en scripting Partag10
[RMXP]Quelques truc à savoir en scripting Travai10
[RMXP]Quelques truc à savoir en scripting Event-10
[RMXP]Quelques truc à savoir en scripting Altrui10
[RMXP]Quelques truc à savoir en scripting Riche_10
[RMXP]Quelques truc à savoir en scripting Couhil10
[RMXP]Quelques truc à savoir en scripting Nain_p11
[RMXP]Quelques truc à savoir en scripting Connar10


[RMXP]Quelques truc à savoir en scripting Empty
MessageSujet: [RMXP]Quelques truc à savoir en scripting   [RMXP]Quelques truc à savoir en scripting EmptyJeu 7 Mar 2013 - 18:32

Bonjour à toutes et à tous.
Aujourd'hui j'vais vous faire une petite liste de 2-3 lignes de code utile pour vos modification de script et / ou amélioration.
Je m'excuse par avance au expert si je dis des conneries Very Happy

Commençons par l'affichage de texte.

Toute les methodes que je vais sortir sont issues de Window_Base.

Pour afficher un simple text :
Code:
self.contents.draw_text(x, y, width,  height , "text", align)

0 = alignement gauche
1 = centre
2 = droite

Le text doit toujours être entre guillemets. Sauf si c'est une variable.
Exemple :
Code:
self.contents.draw_text(32, 96, 128,  64, "Je suis un text", 0)

La on met entre guillemet.

En revanche, si je fais :

Code:
variable = "Je suis un text"
self.contents.draw_text(32, 96, 128,  64, variable, 0)

Ici j'appel une variable donc pas de guillement.

Pour les chiffres, c'est différent.

Si vous faites :

Code:
self.contents.draw_text(32, 96, 128,  64, "4000", 0)

ou

Code:
variable = "4000"
self.contents.draw_text(32, 96, 128,  64, variable, 0)

La pas de soucis, ca marche comme d'habitude. Le text est entre guillement et la valeur de la variable aussi, donc votre texte sera reconnu comme un "String" ( chaine de caractère )

En revanche, si vous faites :

Code:
variable = 4000

self.contents.draw_text(32, 96, 128,  64, variable, 0)

Ici votre variable ne contient pas de "String" mais un entier.
Et vous aurez une erreur du genre : cannot convert fixnum into string ( j'me rappel plus de l'erreur exacte ^^ )

Pour remédier à se PB, il vous suffira de rajouter ".to_s" après votre variable.

Exemple :
Code:
variable = 4000

self.contents.draw_text(32, 96, 128,  64, variable.to_s, 0)

Ainsi votre variable sera reconnu comme un "String".

Maintenant on va passer au methode qui affiche certaine info des personnages.

nous avons :

Code:
draw_actor_graphic(actor, x , y) affiche le charset
draw_actor_name(actor, x, y) affiche le nom
draw_actor_class(actor, x , y) affiche la classe
draw_actor_level(actor, x, y) affiche le niveau
draw_actor_state(actor, x, y ) affiche l'état
draw_actor_exp(actor, x, y) affiche l'expérience
draw_actor_hp(actor, x, y) affiche les hp
draw_actor_sp(actor, x, y) affiche les MP


déjà, "x" et "y" vous savez ce que c'est, mais "actor" non.

pour faire simple, un exemple.

Généralement quand on appel les methodes si dessus, on fait un boucle.

Code:
for i in 0...$game_party.actors.size
   actor = $game_party.actors.size[i]

   draw_actor_graphic(actor, x , y)
   draw_actor_name(actor, x, y)
   draw_actor_class(actor, x , y)
   draw_actor_level(actor, x, y)
   draw_actor_state(actor, x, y )
   draw_actor_exp(actor, x, y)
   draw_actor_hp(actor, x, y)
   draw_actor_sp(actor, x, y)
end

J'vais expliqué rapidement ce que veut dire cette boulce.

Code:
for i in 0...$game_party.actors.size

en gros, à chaque tour de boucle, la variable local "i" sera égale à un héros présent dans votre équipe.

ensuite on fait :

Code:
actor = $game_party.actors.size[i]

on crée une variable "actor" et on la rend égale au tableau (array) $game_party.actors.size[i]
Pourquoi je lui mets "[i]" à la fin ?

tout simplement pour que la variable actor soit égale au héros numéroté "i" dans le tableau $game_party.actors.size
$game_party.actors.size est en fait un tableau (array ).

exemple :

Code:
tableau = [héros1, héros2, héros3, héros4]

for i in 0...tableau
   actor = tableau[i]
end

avant tout, il faut savoir que l'indexation d'un tableau (array) commence toujours à 0
donc

Code:
tableau = [héros1, héros2, héros3, héros4]
             0       1       2       3

reprennons.

Code:
for i in 0...tableau
   actor = tableau[i]
end

au premier tour de boucle, "i" sera égale à 0
deuxieme tour de boule, "i" sera égale à 1

etc etc jusqu'à ce que l'on soit arrivé au bout de tableu ( soit 3 dans notre cas )

donc à chaque tour de boucle, la valeur de "actor" changera

dans le cas ou "i" égale 0

Code:
actor = tableau[0]

actor est égale au premier héros de votre équipe

dans le cas ou "i" égale 1
Code:
actor = tableau[1]


actor est égale au deuxième héros de votre équipe


etc

Je me suis un peu égaré, mais c'pour que vous compreniez un peu le principe d'un tableau puisque que $game_party.actors.size en est un lui aussi.


Code:
for i in 0...$game_party.actors.size
   actor = $game_party.actors.size[i]

   draw_actor_graphic(actor, x , y)
   draw_actor_name(actor, x, y)
   draw_actor_class(actor, x , y)
   draw_actor_level(actor, x, y)
   draw_actor_state(actor, x, y )
   draw_actor_exp(actor, x, y)
   draw_actor_hp(actor, x, y)
   draw_actor_sp(actor, x, y)
end



donc ici, quand "i" égale 0, on affichera le charsets, le nom, la classe, le niveau, l'état, l'expérience, les hp et les MP du héros indexé 0 dans le tableau
soit le premier héros de l'équipe
etc etc

Pour comprend ce que ca fait, ouvrez votre menu in game. j'ai repris ce code de Window_MenuStatus

Bon je n'ai pas d'exemple allechant à vous montrer pour utiliser les methodes montré ci dessus, mais je peux quand même vous donner un petit exemple.

Imaginons qu'en combat vous voulez afficher le niveau des héros à coté de leur pseudo.

Rendez vous dans : Window_BattleStatus et vers la ligne 39 vous devriez reconnaitre les methodes présenté tout à l'heure.

c'est donc ici que vous allez rajouter la methode : draw_actor_level(actor, x, y )

à vous de doser les coordonnées pour le mettre ou vous voulez.

Voici ce que ca donne chez moi.

Sauf que petit problème. (enfin pas pour vous mais pour moi Very Happy )

Quand on modifie des methodes, le mieux est de faire un monkey patching.
Je préviens par avance que je ne suis pas sur que ce soit ca à 100%.
Les connaisseurs du sujet viendront j'espère apporter leur soutiens.

Pour se faire, reprennez la methode que l'on s'apprétait à modifier.

soit "def refresh"

Vous aller faire un ouveau script que vous aller mettre au dessus de main.

et on va faire du singe patché ... =>[]

Déjà il faut que l'on lui définisse la classe dans laquelle on veut agir.
Bah ouai ... des methodes "refresh" il y en a un peu partout ^^
Donc voilà comme on procède.

Code:
class Window_BattleStatus
  alias new_refresh refresh
  def refresh
    new_refresh

alors, le "alias" c'est lui qui va nous permettre de monkey patcher.

c'est assez simple, vous écrivez "alias" suivit du nom de la nouvelle methode et encore suivit du nom de la methode que l'on veut modifier.

donc ici :

Code:
alias new_refresh refresh

le nom que vous donnez à la methode importe peu, mais essayé d'être clair. c'toujours mieux pour s'y retrouver Wink

Une fois fait, vous réécrivez le nom de la methode soit :

Code:
alias new_refresh refresh
def refresh

et encore en dessous vous réécrivez le nom de la nouvelle methode

Code:
alias new_refresh refresh
def refresh
   new_refresh

Voilà. Ensuite vous pouvez copier coller le contenue de la methode que vous voulez modifier.
et rajouter draw_actor_level

voici ce que ca devrait donner :

Code:
class Window_BattleStatus
  alias new_refresh refresh
  def refresh
  new_refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 160 + 4
      draw_actor_name(actor, actor_x, 0)
      draw_actor_hp(actor, actor_x, 32)#, 120)
      draw_actor_sp(actor, actor_x, 64)#, 120)
      draw_actor_level(actor, actor_x + 60, 0)
      if @level_up_flags[i]
        self.contents.font.color = normal_color
        self.contents.draw_text(actor_x, 96, 120, 32, "Niveau + !")
      else
        draw_actor_state(actor, actor_x, 96)
      end
    end
  end
end

nb : Ne jamais oublié de fermer une methode, une class, une boucle ou une condition d'un "end
Maintenant, lancé le combat et vous verrez le lvl afficher à coté du nom du héros.


Bon il n'y a pas que ces methodes là qui pourrait nous être utile.

Je vais maintenant vous donner seulement les methodes. l'utilisation est pareil que pour les autres.

petit info avant, "self" veut dire "lui même " donc les modifs n'agierons que sur la class ou vous avez fait la modif.

http://rpgcreative.net/programmation/ruby_utilitaire-1-utilitaire-pour-rpg-maker-xp.html

pas la peine de tout refaire, Samarium l'a fait pour nous =)

Ah et euh ... une petite astuce aussi, si vous avez un doute sur ce que contient une variable
ou si vous voulez afficher un message pour vous assurez d'une chose,
faite un :
Code:
print(la_variable)
ou
Code:
print("coucou")

ca peut aider dans certain cas.

Voilà.
C'est ptete un peu bordelique et mal expliqué, mais si il y a des questions c'est plus bas =)
Et pour les critiques => Soyez aimable et contructif.


Dernière édition par Jin le Jeu 7 Mar 2013 - 18:58, édité 1 fois
Revenir en haut Aller en bas
KuroFidy
Paladin (niveau 1)
Paladin (niveau 1)
KuroFidy

Masculin
Messages postés : 525
Date d'inscription : 05/09/2012
Jauge LPC :
[RMXP]Quelques truc à savoir en scripting 8915271400100 / 100100 / 100[RMXP]Quelques truc à savoir en scripting 8915271400

[RMXP]Quelques truc à savoir en scripting Membre-assidu_imagesia-com_1ped_large
[RMXP]Quelques truc à savoir en scripting Graphiste_imagesia-com_1pea_large
[RMXP]Quelques truc à savoir en scripting Charamaker
[RMXP]Quelques truc à savoir en scripting Dessinateurq
[RMXP]Quelques truc à savoir en scripting Collectionneurbronze
[RMXP]Quelques truc à savoir en scripting Victimedupanda


[RMXP]Quelques truc à savoir en scripting Empty
MessageSujet: Re: [RMXP]Quelques truc à savoir en scripting   [RMXP]Quelques truc à savoir en scripting EmptyJeu 7 Mar 2013 - 18:52

Jin a écrit:
( pour être franc je ne sais pas trop ce que c'est "align" dans le doute je le mets toujours à 0 )

Je crois que c'est
0 = alignement gauche
1 = centre
2 = droite
Revenir en haut Aller en bas
Jin
Ancien staffeux
Ancien staffeux
Jin

Masculin
Messages postés : 8557
Date d'inscription : 08/12/2010
Jauge LPC :
[RMXP]Quelques truc à savoir en scripting 891527140069 / 10069 / 100[RMXP]Quelques truc à savoir en scripting 8915271400

G 1 petit zizi Very Happy
Nn C pa vré Sad
[RMXP]Quelques truc à savoir en scripting Membre15
[RMXP]Quelques truc à savoir en scripting Partag10
[RMXP]Quelques truc à savoir en scripting Travai10
[RMXP]Quelques truc à savoir en scripting Event-10
[RMXP]Quelques truc à savoir en scripting Altrui10
[RMXP]Quelques truc à savoir en scripting Riche_10
[RMXP]Quelques truc à savoir en scripting Couhil10
[RMXP]Quelques truc à savoir en scripting Nain_p11
[RMXP]Quelques truc à savoir en scripting Connar10


[RMXP]Quelques truc à savoir en scripting Empty
MessageSujet: Re: [RMXP]Quelques truc à savoir en scripting   [RMXP]Quelques truc à savoir en scripting EmptyJeu 7 Mar 2013 - 18:56

Oui j'y ai réfléchis après ^^
Je vais corrigé ca =)
Revenir en haut Aller en bas
Contenu sponsorisé




[RMXP]Quelques truc à savoir en scripting Empty
MessageSujet: Re: [RMXP]Quelques truc à savoir en scripting   [RMXP]Quelques truc à savoir en scripting Empty

Revenir en haut Aller en bas
 
[RMXP]Quelques truc à savoir en scripting
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Faits divers à savoir sur RMXP
» [RMXP]SHER (cliquez pour savoir ce que c'est)
» [resolu][VXAce][Scripting] Fermer des scenes.
» Vieux RMXP -> Récent RMXP
» PA et modification de ressources: Exposition

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Palais Créatif :: ~ APPRENTISSAGE ~ :: Initiation :: Systèmes-
Sauter vers: