Bienvenue visiteur !
|
Désactiver la neige
Statistiques
Liste des membres
Contact
Mentions légales
349 connectés actuellement
30912392 visiteurs depuis l'ouverture
2028 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
7163D -
posté le 16/08/2014 à 21:55:21 (946 messages postés)
| 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:
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:
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)
| 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...
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)
| Votez Minimaliste | Oui oui j'ai mit un $...
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)
| Chose en devenir | Oui, certes, c'est ce que je me suis dit en relisant plus en détail ton problème
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
1
| $data_skills = load_data("Data/Skills.rvdata2") |
en mettant quelque chose du style :
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)
| 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)
| Chose en devenir | Je... Je... Je ne sais pas
|
Sauvez les arbres ! Mangez des castors ! |
7163D -
posté le 16/08/2014 à 22:45:33 (946 messages postés)
| 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)
| 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)
| | 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.
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à :
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)
| 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
en RGSS3?
|
Minimaliste, le "." comme signe de ralliement. |
Wolfylink -
posté le 17/08/2014 à 00:29:15 (198 messages postés)
| 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) :
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)
| | 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
|
Wandering Souls : Jeu complet / Topic sur Oniro |
7163D -
posté le 17/08/2014 à 09:31:50 (946 messages postés)
| 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
|
|
|