Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: "Dread Mac Farlane", (...) / Tutos: Checklist de la composition (...) / Sorties: Dread Mac Farlane - episode 8 / Sorties: Dread Mac Farlane - episode 7 / Jeux: Ce qui vit Dessous / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

503 connectés actuellement

29434497 visiteurs
depuis l'ouverture

8873 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

RPG Maker - La Communauté

Zarok

Le Temple de Valor

Leo-Games

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [RMVXA] Modifier $data_skill au cours de la partie


7163D - posté le 16/08/2014 à 21:55:21 (946 messages postés)

❤ 0

Votez Minimaliste

Domaine concerné: RGSS3
Logiciel utilisé: RMVXA
Bonjour,
Je vais tacher d'être clair.

Mon projet de jeu actuelle souhaite proposer à l'utilisateur de personnaliser des sorts. Il faut donc qu'en cour de partie je puisse modifier les classes skill, rangé dans $data_skills.

Voilà mon problème:
J'ai au dessus de main:

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
class RPG::Skill < RPG::UsableItem
 
   attr reader :pa_cost
   (...)
 
  alias ini initialize
  def initialize
    build
    ini
   end
   
  def build
    @pa_cost = 6
    (...)
  end
 
  def tp_cost
     @pa_cost
  end
 
  def set_pa_cost(n)
     @pa_cost = n
  end
 
  (...)
end
 



Mon héro apprend au niveau 1 le sort id=1.
Lorsque j'ouvre la fenêtre des sorts, le jeu appelle la variable @pa_cost de la classe $data_skills[1]. Et plante ("not attribut 'pa_cost' for class RPG::Skill")

Par contre, si je l'initialise "à la main" avant d'ouvrir la fenêtre:

Portion de code : Tout sélectionner

1
$data_skills[1].build


Je n'ai plus d'erreur...

Là me diriez vous:ben tu l'initialises comme ça à chaque fois!

Premièrement, ça fait pas propre
Deuxièmement, chaque sort contient pas mal d'info, donc si je pouvais me contenter de l'initialiser une seule fois ce serait plus simple!

J'espère que vous avez compris mon problème, et si vous avez la solutions...merci d'avance!

Minimaliste, le "." comme signe de ralliement.


Wolfylink - posté le 16/08/2014 à 22:02:39 (198 messages postés)

❤ 0

Chose en devenir

Déjà, pour être sur, tu parles de data_skills. Tu as bien mis le $ devant ?
Sinon, effectivement ça risque de pas marcher... :p

Et d'ailleurs ça expliquerait pourquoi tu as une erreur si tu n'initialises pas.

Sauvez les arbres ! Mangez des castors !


7163D - posté le 16/08/2014 à 22:07:11 (946 messages postés)

❤ 0

Votez Minimaliste

Oui oui j'ai mit un $... :rit2
Si j'en avait pas mit, j'aurais eu une erreur en appelant la méthode build.

Minimaliste, le "." comme signe de ralliement.


Wolfylink - posté le 16/08/2014 à 22:15:26 (198 messages postés)

❤ 0

Chose en devenir

Oui, certes, c'est ce que je me suis dit en relisant plus en détail ton problème :F

Ce que je vais dire est peut-être faux (j'ai pas encore une expérience incroyable en scripts) mais à mon avis c'est pas si simple de rajouter des attributs à un objet de la BDD.

Parce que le script DataManager charge les données de Data/Skills.rvdata2 et que ce fichier ne prend en compte que ce que tu as dans ta bdd, et pas ce que tu rajoutes par script.
A mon avis (tu peux essayer, mais je garantis pas que ça soit la solution), dans ce même script DataManager, il faut que tu ajoutes "à la main" pour chaque sort les attributs que tu veux ajouter, après la ligne

Portion de code : Tout sélectionner

1
$data_skills        = load_data("Data/Skills.rvdata2")



en mettant quelque chose du style :

Portion de code : Tout sélectionner

1
$data_skills[1].set_pa_cost(5)



...

Sauvez les arbres ! Mangez des castors !


7163D - posté le 16/08/2014 à 22:21:44 (946 messages postés)

❤ 0

Votez Minimaliste

Je vais essayer de bidouiller un truc comme ça...
Mais ce que je ne comprend vraiment pas, c'est pourquoi ma modification de l'initialisation n'est pas prise en compte par rm.

Minimaliste, le "." comme signe de ralliement.


Wolfylink - posté le 16/08/2014 à 22:29:39 (198 messages postés)

❤ 0

Chose en devenir

Je... Je... Je ne sais pas :leure2

Sauvez les arbres ! Mangez des castors !


7163D - posté le 16/08/2014 à 22:45:33 (946 messages postés)

❤ 0

Votez Minimaliste

Bon, si d'autre on le même problème... (on ne sait jamais, je suis peut être pas le seul psycopathe sado-machorubyste)

J'ai carrément créé une autre classe skill (je l'ai pas appelé RPG::Skill, hein) avec les même id que la classe skill de base.

Minimaliste, le "." comme signe de ralliement.


Wolfylink - posté le 16/08/2014 à 23:02:12 (198 messages postés)

❤ 0

Chose en devenir

Pour mon information, ma "technique" n'a pas marché ?

Sauvez les arbres ! Mangez des castors !


Estheone - posté le 16/08/2014 à 23:15:37 (312 messages postés)

❤ 0

L'avantage de RM VX Ace c'est les notes en bas à droite pour chaque onglet de la base de données, on peut s'en servir de manière très pratique pour initialiser des variables.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
class RPG::Skill < RPG::UsableItem
  
   attr_reader :pa_cost
   # (...)
   
  def setup
    @pa_cost = 0
    # (...)
    eval(note)
  end
end


Grâce à la fonction eval, le contenu de la note des skills sera considéré comme du script et tu peux donc y initialiser tes variables (@pa_cost = 6 par exemple).
Fais juste bien attention à n'utiliser la note que pour ça par la suite.


Ensuite tu vas dans DataManager et tu remplaces la fonction load_database par celle-là :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
  def self.load_database
    if $BTEST
      load_battle_test_database
    else
      load_normal_database
      check_player_location
    end
    $data_skills.each do |s| s.setup if s end
  end


Ca va permettre d'initaliser tout d'un coup au démarrage du jeu et t'auras plus à t'en soucier.

Wandering Souls : Jeu complet / Topic sur Oniro


7163D - posté le 16/08/2014 à 23:39:45 (946 messages postés)

❤ 0

Votez Minimaliste

@Wolfylink : non, ça plantait

@Estheone : Vu que ces valeurs sont amenées à évoluer au cour du jeu, je vais garder ma méthode mais merci du renseignement, je retient pour d'autre choses!

Petit HS, mais je ne vais pas ouvrir un topic pour ça, que signifie

Portion de code : Tout sélectionner

1
 =~ 


en RGSS3?

Minimaliste, le "." comme signe de ralliement.


Wolfylink - posté le 17/08/2014 à 00:29:15 (198 messages postés)

❤ 0

Chose en devenir

Je connais un intérêt, mais je ne sais pas si c'est le seul :
Quand tu veux faire une recherche regex (en gros, une recherche de texte) :

Portion de code : Tout sélectionner

1
/texte/ =~ 'Voici du texte.'



Eh ben ici ça retourne 9 (le numéro du caractère où débute le texte qu'on cherche, ici le t).
Si il trouve pas, ça retourne nil.

Et je n'avais pas pensé aux notes. Bien vu.

Sauvez les arbres ! Mangez des castors !


Estheone - posté le 17/08/2014 à 00:29:55 (312 messages postés)

❤ 0

Ah oui si t'as des variables qui n'ont pas de valeur fixe, il te faut créer une nouvelle classe.

=~ est utilisé pour comparer un string avec une expression régulière. Fais une recherche regular expressions dans la doc de RM VX Ace (F1) pour en savoir plus.

Edit : Grillé de 40 secondes par Wolfylink :D

Wandering Souls : Jeu complet / Topic sur Oniro


7163D - posté le 17/08/2014 à 09:31:50 (946 messages postés)

❤ 0

Votez Minimaliste

Ok merci!

@Estheone : j'ai en fait ajouté une méthode dans RPG::Skill qui renvoie à un tableau de classe initialisé au début du jeu et modifiableà loisir

Minimaliste, le "." comme signe de ralliement.

Index du forum > Entraide > [RESOLU] [RMVXA] Modifier $data_skill au cours de la partie

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers