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
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
)
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
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.