- ZolticMembre
- Nombre de messages : 165
Age : 68
Localisation : Béarn
Distinction : aucune
Date d'inscription : 26/10/2016
Problèmes de script Ruby/RPGMaker. Appel aux gourous
Mer 9 Nov 2016 - 14:23
Bonjour,
Mes connaissances en Ruby et en RPG Maker VX Ace évoluant à grande vitesse (je me surprends moi même ) j'arrive, comme de juste à des points de blocage.
Afin d'utiliser le script de gestion des boutiques écrit par Tsuki Hime, script qui permet de définir soi-même les prix d'achat et de vente des produits, j'ai réalisé, avec bien du mal, le petit script qui suit :
Sauf que........ J'ai trois problèmes à résoudre :
1 - Comment faire pour le passer en "script ruby" ? J'aimerai pouvoir faire un truc du genre : calcul_prix_w(Id_jeu, Id_shop) (à mettre dans le "script évènement"). Si possible, un exemple, c'est plus clair pour moi que de longues explications.
Où : Id_jeu est, comme son nom l'indique l'Id dans la base de données afin de récupérer le prix "Catalogue".
2 - Récupérer le prix "Catalogue". Je me débrouillerai pour savoir quel "catalogue" utiliser en fonction de la lettre (_w) de l'appel.
3 - Comprendre pourquoi ce ~#&@^$§ de script de Hime refuse de m'affecter les prix de vente et plante le programme sans explication dans la console debug. Impossible de trouver un exemple de syntaxe qui fonctionne.
Si je mets :
rien, ça marche et il me prend l'objet a 50% du prix catalogue
sell_price("w1") ça marche et il me prend l'objet a 50% du prix catalogue
sell_price("w1", 150) ça marche tant que je ne veux pas acheter. Là ça plante.
sell_price("w1", (100 * bonus).to_int) ça plante avant même d'afficher quoi que ce soit.Je ne peux même pas acheter.
Aucune info dans la console debug qui reste obstinément vide.
Possible que ça vienne d'un autre script comme l'affichage des fenêtres, mais je ne pense pas, puisque tout fonctionne si je ne veux pas définir de prix de vente par le joueur.
Voilà. Merci de vos lumières qui éclaireront le dur chemin qu'il me reste à parcourir sur la voie, parsemée d'embûches, du développement de scripts.
PS: Tant qu'on y est, un petit exemple de script qui renvoie une valeur pour pouvoir écrire y = toto(x) me serait bien utile également.
Mes connaissances en Ruby et en RPG Maker VX Ace évoluant à grande vitesse (je me surprends moi même ) j'arrive, comme de juste à des points de blocage.
Afin d'utiliser le script de gestion des boutiques écrit par Tsuki Hime, script qui permet de définir soi-même les prix d'achat et de vente des produits, j'ai réalisé, avec bien du mal, le petit script qui suit :
- Code:
# Variable globale 83 : Réputation locale chez les gens "biens", le Panther's club.
#
reput = $game_variables[83]
# Calcul des coefficient à appliquer au prix indiqué dans la base de données
# en fonction de la réputation
#
# Achat par le joueur. Fonction linéaire de :
# Réputation = 0 => Coeficient = 1,00 (soit prix normal)
# Réputation = 500 => Coeficient = 0,75 (soit 25% de réduction)
#
# Vente par le joueur. Fonction linéaire de :
# Réputation = 0 => Coefficient = 0,50 (moitié du prix de BD)
# Réputation = 500 => Coefficient = 0,75 (soit 25% de mieux sur le prix de BD)
#
# Réputation = 500 => Prix Vente = Prix Achat = 75% prix Catalogue.
#
# rabais : Coeff à appliquer à l'achat par le joueur
# bonus : Coeff à appliquer à la vente par le joueur
rabais = 1.0 - (($game_variables[83] * 0.05)/100)
bonus = 0.5 + (($game_variables[83] * 0.05)/100)
price_good(1, (100 * rabais).to_int)
price_good(2, (200 * rabais).to_int)
price_good(3, (300 * rabais).to_int)
#
# sell_price("w1", (100 * bonus).to_int)
# Plante le programme. Pourquoi ??
Sauf que........ J'ai trois problèmes à résoudre :
1 - Comment faire pour le passer en "script ruby" ? J'aimerai pouvoir faire un truc du genre : calcul_prix_w(Id_jeu, Id_shop) (à mettre dans le "script évènement"). Si possible, un exemple, c'est plus clair pour moi que de longues explications.
Où : Id_jeu est, comme son nom l'indique l'Id dans la base de données afin de récupérer le prix "Catalogue".
2 - Récupérer le prix "Catalogue". Je me débrouillerai pour savoir quel "catalogue" utiliser en fonction de la lettre (_w) de l'appel.
3 - Comprendre pourquoi ce ~#&@^$§ de script de Hime refuse de m'affecter les prix de vente et plante le programme sans explication dans la console debug. Impossible de trouver un exemple de syntaxe qui fonctionne.
Si je mets :
rien, ça marche et il me prend l'objet a 50% du prix catalogue
sell_price("w1") ça marche et il me prend l'objet a 50% du prix catalogue
sell_price("w1", 150) ça marche tant que je ne veux pas acheter. Là ça plante.
sell_price("w1", (100 * bonus).to_int) ça plante avant même d'afficher quoi que ce soit.Je ne peux même pas acheter.
Aucune info dans la console debug qui reste obstinément vide.
Possible que ça vienne d'un autre script comme l'affichage des fenêtres, mais je ne pense pas, puisque tout fonctionne si je ne veux pas définir de prix de vente par le joueur.
Voilà. Merci de vos lumières qui éclaireront le dur chemin qu'il me reste à parcourir sur la voie, parsemée d'embûches, du développement de scripts.
PS: Tant qu'on y est, un petit exemple de script qui renvoie une valeur pour pouvoir écrire y = toto(x) me serait bien utile également.
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Mer 9 Nov 2016 - 19:16
1 : il faudra préciser ta demande, je ne la comprend pas tout à fait.
2 : qu'entend tu par catalogue? le prix dans la base de données RmVxAce
3 : tu peux mettre quelques capture d'écran de l'erreur?
Petite astuce pour avoir le backtrace dans un fichier en cas d'erreur :
Copie ce script, dans un nouveau script qui sera placé en premier de la liste des scripts :
Et dans le script main, qui doit contenir logiquement ceci :
2 : qu'entend tu par catalogue? le prix dans la base de données RmVxAce
3 : tu peux mettre quelques capture d'écran de l'erreur?
Petite astuce pour avoir le backtrace dans un fichier en cas d'erreur :
Copie ce script, dans un nouveau script qui sera placé en premier de la liste des scripts :
- Code:
def mod_error(error)
if $TEST
scripts = load_data('./Data/Scripts.rvdata2')
bt = error.backtrace.clone
bt.each_index do |i|
bt[i] = bt[i].sub(/\{(\d+)}/) { scripts[$1.to_i][1] +" "} + "\n"
end
message = error.message + "\n" + bt.join('')
else
message = error.message + "\n"
end
if ERROR_LOG_FILE != ''
File.open(ERROR_LOG_FILE, 'a') {|f| f.write("#{Time.now.to_s}:\n#{message}\n")}
end
return message
end
Et dans le script main, qui doit contenir logiquement ceci :
- Code:
rgss_main { SceneManager.run }
- Code:
ERROR_LOG_FILE = './Error.log'
begin
rgss_main { SceneManager.run }
rescue SyntaxError
$!.message.sub!($!.message, mod_error($!))
raise
rescue
$!.message.sub!($!.message, mod_error($!))
raise
ensure
end
- ZolticMembre
- Nombre de messages : 165
Age : 68
Localisation : Béarn
Distinction : aucune
Date d'inscription : 26/10/2016
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Mer 9 Nov 2016 - 21:15
Effectivement, le prix "catalogue" c'est celui qui est dans la base de données.
Ben y'a pas de message d'erreur. L'évènement qui est sensé gérer la boutique rend la main au prog général. Circulez y'a rien à voir.
Comme tu peux le voir, il faut une ligne pour récupérer le prix "catalogue", une pour initialiser le prix de vente et une pour initialiser le prix d'achat, donc trois lignes à chaque fois. Or les "scripts ruby" gérés par les évènements sont limités en nombre de lignes, donc je voudrais un "script", à mettre dans les "scripts généraux" qui fasse le boulot, ce qui pourrait me ramener à UNE ligne par produit à vendre dans le "script ruby" géré par l'évènement, celle qui appelle le script général. Oui, je sais, c'est pas évident, il y a des scripts partout.
Après cette routine c'est l'appel "normal" des magasins :
En programmation linéaire ça donnerait l'évènement :
et la routine "calcul" ferait le boulot pour l'initialisation des prix de vente et d'achat.
Ce qu'il me faut c'est juste l'encapsulation de la routine écrite dans mon premier post pour que ça puisse fonctionner dans les "scripts généraux", avec récupération des paramètres passés dans l'appel.
Je viens de la programmation linéaire et je ne programme en ruby que depuis une semaine, je n'ai pas encore tous les réflexes. J'ai mis presque une demi-journée pour traduire :
X = INT(Y) en X = Y.to_int
Il a fallu que je cherche dans une tonne de trucs qui me disaient comment imprimer "Hello World" mais pas comment appeler une fonction de base.
Merci pour la routine de log des erreurs, je vais la mettre partout.
Ben y'a pas de message d'erreur. L'évènement qui est sensé gérer la boutique rend la main au prog général. Circulez y'a rien à voir.
Comme tu peux le voir, il faut une ligne pour récupérer le prix "catalogue", une pour initialiser le prix de vente et une pour initialiser le prix d'achat, donc trois lignes à chaque fois. Or les "scripts ruby" gérés par les évènements sont limités en nombre de lignes, donc je voudrais un "script", à mettre dans les "scripts généraux" qui fasse le boulot, ce qui pourrait me ramener à UNE ligne par produit à vendre dans le "script ruby" géré par l'évènement, celle qui appelle le script général. Oui, je sais, c'est pas évident, il y a des scripts partout.
Après cette routine c'est l'appel "normal" des magasins :
- Code:
Appeler un magasin : [Petite Hache]
: [Hache de guerre]
: etc .......
En programmation linéaire ça donnerait l'évènement :
- Code:
Afficher message : 'toto', 0, Normal, haut
: Bonjour monsieur
Script : call calcul(Id_BdD_1, Id_boutique_1)
: call calcul(Id_BdD_2, Id_boutique_2)
: etc.....
Appeler un magasin :[Nom(Id_BdD_1)]
:[Nom(Id_BdD_2)]
: etc.......
et la routine "calcul" ferait le boulot pour l'initialisation des prix de vente et d'achat.
Ce qu'il me faut c'est juste l'encapsulation de la routine écrite dans mon premier post pour que ça puisse fonctionner dans les "scripts généraux", avec récupération des paramètres passés dans l'appel.
Je viens de la programmation linéaire et je ne programme en ruby que depuis une semaine, je n'ai pas encore tous les réflexes. J'ai mis presque une demi-journée pour traduire :
X = INT(Y) en X = Y.to_int
Il a fallu que je cherche dans une tonne de trucs qui me disaient comment imprimer "Hello World" mais pas comment appeler une fonction de base.
Merci pour la routine de log des erreurs, je vais la mettre partout.
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Mer 9 Nov 2016 - 21:46
dans un nouveau script ou à la suite de celui de Hime :
Quelque cours simple :
http://tonyryudev.com/joomla3/index.php/menu-mes-developpements/menu-cours-ruby-rgss
Attention, les cours RGSS sont pour la version XP, mais peuvent facilement s'adapter à la version VxAce
- Code:
def calcul_prix_w(Id_jeu, Id_shop)
prix_arme = $data_weapons[Id_jeu].price
# reste du code
#...
end
Quelque cours simple :
http://tonyryudev.com/joomla3/index.php/menu-mes-developpements/menu-cours-ruby-rgss
Attention, les cours RGSS sont pour la version XP, mais peuvent facilement s'adapter à la version VxAce
- ZolticMembre
- Nombre de messages : 165
Age : 68
Localisation : Béarn
Distinction : aucune
Date d'inscription : 26/10/2016
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Mer 9 Nov 2016 - 23:40
Ben voilà, c'est exactement ce que je cherchais. Faut donc que j'encapsule dans "def ..... end" et
le prix "catalogue" c'est "$data_weapons[Id].price"
J'imagine qu'il existe aussi "$data_armors[Id].price"
et "$data_items[Id].price"
Et si c'est pas ça, maintenant que je sais ce que je cherche, je trouverai en fouillant dans les scripts
Donc j'ai ce qu'il faut pour créer mes routines. Merci beaucoup.
Et tes cours semblent, pour ce que j'en ai vu en diagonale, parfaits pour moi qui comprend mieux par l'exemple que par l'explication. C'est dommage que tu habites assez loin de chez moi, je t'aurais bien offert un verre. (et pas de sirop de fraise même additionné d'eau).
le prix "catalogue" c'est "$data_weapons[Id].price"
J'imagine qu'il existe aussi "$data_armors[Id].price"
et "$data_items[Id].price"
Et si c'est pas ça, maintenant que je sais ce que je cherche, je trouverai en fouillant dans les scripts
Donc j'ai ce qu'il faut pour créer mes routines. Merci beaucoup.
Et tes cours semblent, pour ce que j'en ai vu en diagonale, parfaits pour moi qui comprend mieux par l'exemple que par l'explication. C'est dommage que tu habites assez loin de chez moi, je t'aurais bien offert un verre. (et pas de sirop de fraise même additionné d'eau).
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Jeu 10 Nov 2016 - 17:52
petite astuce supplémentaire, l'aide du logiciel est extrémement bien fourni, et tu pourras trouver bon nombre d'information sur les structures RGSS:
RGSS Reference Manual -> Game Library -> RPGVXAce Data Structures
sachant que tout ce qui est attrait à la base de données est chargé de la sorte :
En faisait la corrélation des 2, tu pourras facilement retrouver par programmation les informations saisies dans la base de données du projet.
$data_armors est un tableau d'objet de la classe RPG::Armor :
RGSS Reference Manual -> Game Library -> RPGVXAce Data Structures
sachant que tout ce qui est attrait à la base de données est chargé de la sorte :
- Code:
$data_actors = load_data("Data/Actors.rvdata2")
$data_classes = load_data("Data/Classes.rvdata2")
$data_skills = load_data("Data/Skills.rvdata2")
$data_items = load_data("Data/Items.rvdata2")
$data_weapons = load_data("Data/Weapons.rvdata2")
$data_armors = load_data("Data/Armors.rvdata2")
$data_enemies = load_data("Data/Enemies.rvdata2")
$data_troops = load_data("Data/Troops.rvdata2")
$data_states = load_data("Data/States.rvdata2")
$data_animations = load_data("Data/Animations.rvdata2")
$data_tilesets = load_data("Data/Tilesets.rvdata2")
$data_common_events = load_data("Data/CommonEvents.rvdata2")
$data_system = load_data("Data/System.rvdata2")
$data_mapinfos = load_data("Data/MapInfos.rvdata2")
En faisait la corrélation des 2, tu pourras facilement retrouver par programmation les informations saisies dans la base de données du projet.
$data_armors est un tableau d'objet de la classe RPG::Armor :
- Code:
class RPG::Armor < RPG::EquipItem
def initialize
super
@atype_id = 0
@etype_id = 1
@features.push(RPG::BaseItem::Feature.new(22, 1, 0))
end
def performance
params[3] + params[5] + params.inject(0) {|r, v| r += v }
end
attr_accessor :atype_id
end
- Code:
class RPG::EquipItem < RPG::BaseItem
def initialize
super
@price = 0
@etype_id = 0
@params = [0] * 8
end
attr_accessor :price
attr_accessor :etype_id
attr_accessor :params
end
- Code:
class RPG::BaseItem
def initialize
@id = 0
@name = ''
@icon_index = 0
@description = ''
@features = []
@note = ''
end
attr_accessor :id
attr_accessor :name
attr_accessor :icon_index
attr_accessor :description
attr_accessor :features
attr_accessor :note
end
- ZolticMembre
- Nombre de messages : 165
Age : 68
Localisation : Béarn
Distinction : aucune
Date d'inscription : 26/10/2016
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Jeu 10 Nov 2016 - 19:39
Waouuuuuuuuu... N'en jetez plus, la cour est pleine.
Ben si j'arrive pas à me débrouiller avec tout ça, je suis vraiment la reine des pommes pour pas dire le roi des c...
Moult mercis, Noble Seigneur, vous me fîtes là un magnifique cadeau.
Ben si j'arrive pas à me débrouiller avec tout ça, je suis vraiment la reine des pommes pour pas dire le roi des c...
Moult mercis, Noble Seigneur, vous me fîtes là un magnifique cadeau.
- DragonFlyMembre
- Nombre de messages : 513
Age : 22
Localisation : Sous l'escalier des Dursley : ) LOL
Distinction : Relou-man [Mist']
Mon 2eme plus grand fan [Yama']
Cuisto' Maker de la commu' [Gel']
Date d'inscription : 30/08/2016
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Jeu 10 Nov 2016 - 19:56
Ca bosse grave ici on dirais, c'est bien! Ah Zoltic, on dirais que t'as toujours été avec nous, ça fais plaisir de voir des makers qui reste et persiste. Ouais ce que j'ai dis n'as aucun rapport avec le sujet, et alors...
- ZolticMembre
- Nombre de messages : 165
Age : 68
Localisation : Béarn
Distinction : aucune
Date d'inscription : 26/10/2016
Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous
Ven 11 Nov 2016 - 1:52
Vous êtes hors sujet, et je m'en félicite
Car enfin pour une fois, je peux bien l'avouer,
La vu de vos éloges, me lève, me ressuscite
Car la laideur du monde m'avait presque tué.
Autrefois, en ce lieu, je n'étais parvenu
Aujourd'hui c'est ici que je me vois rendu
J'y ai toujours été, non de corps mais de cœur
En ce simple refuge sont mes frères et mes sœurs.
Et si je vous questionne sur bien des chose en somme
C'est avant tout pour être enfin digne de vous
Car je vois réunis ici femmes et hommes
Qui n'ont qu'un point commun et c'est d'être un peu fou
Un peu fou d'aventure et de bien d'autres rêves
Qui peaufinent les histoire et dessinent sans trêve
Afin de nous livrer, à nous simples humains
Les contes merveilleux qu'ils façonnent à la main.
Si ces quelques quatrains ont su vous faire sourire
Dites vous bien qu'un jour cela peut être pire
Je pourrais tour à tour, soit gentil, soit railleur
Écrire tout ce que pense un petit rimailleur
Car enfin pour une fois, je peux bien l'avouer,
La vu de vos éloges, me lève, me ressuscite
Car la laideur du monde m'avait presque tué.
Autrefois, en ce lieu, je n'étais parvenu
Aujourd'hui c'est ici que je me vois rendu
J'y ai toujours été, non de corps mais de cœur
En ce simple refuge sont mes frères et mes sœurs.
Et si je vous questionne sur bien des chose en somme
C'est avant tout pour être enfin digne de vous
Car je vois réunis ici femmes et hommes
Qui n'ont qu'un point commun et c'est d'être un peu fou
Un peu fou d'aventure et de bien d'autres rêves
Qui peaufinent les histoire et dessinent sans trêve
Afin de nous livrer, à nous simples humains
Les contes merveilleux qu'ils façonnent à la main.
Si ces quelques quatrains ont su vous faire sourire
Dites vous bien qu'un jour cela peut être pire
Je pourrais tour à tour, soit gentil, soit railleur
Écrire tout ce que pense un petit rimailleur
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|