-50%
Le deal à ne pas rater :
-50% Baskets Nike Dunk Low
64.99 € 129.99 €
Voir le deal

Aller en bas
Zoltic
Zoltic
Membre

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 Empty 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 Wink ) 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 ??
Ça marche, oui, oui, oui. Smile Smile

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.
tonyryu
tonyryu
Membre

Nombre de messages : 902
Age : 43
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Problèmes de script Ruby/RPGMaker. Appel aux gourous Empty 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 :
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 }
à remplacer par :
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
Zoltic
Zoltic
Membre

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 Empty 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 :
Code:
Appeler un magasin : [Petite Hache]
                    : [Hache de guerre]
                    : etc .......
et le magasin affiche bien les prix que j'ai calculé.

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. Smile Smile Smile
tonyryu
tonyryu
Membre

Nombre de messages : 902
Age : 43
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Problèmes de script Ruby/RPGMaker. Appel aux gourous Empty 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 :

Code:
def calcul_prix_w(Id_jeu, Id_shop)
   prix_arme = $data_weapons[Id_jeu].price

   # reste du code
   #...
end
et tu l'appels directement dans un event

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
Zoltic
Zoltic
Membre

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 Empty 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). Smile
tonyryu
tonyryu
Membre

Nombre de messages : 902
Age : 43
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Problèmes de script Ruby/RPGMaker. Appel aux gourous Empty 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 :
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
qui hérite de RPG::EquipItem :
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
qui hérite de RPG::BaseItem
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
Zoltic
Zoltic
Membre

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 Empty 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. Smile Smile Smile

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. Smile
DragonFly
DragonFly
Membre

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

Problèmes de script Ruby/RPGMaker. Appel aux gourous Empty 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... :P
Zoltic
Zoltic
Membre

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 Empty 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
Contenu sponsorisé

Problèmes de script Ruby/RPGMaker. Appel aux gourous Empty Re: Problèmes de script Ruby/RPGMaker. Appel aux gourous

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum