Sujet: Re: Aide pour script personnel Jeu 5 Mar 2009 - 6:59
Bonsoir, voilà j'essaye de faire un système de quête pour m'exercer au rgss2, je voulais pas le poster avant qu'il soit fini mais là je ne voie pas
Je vous explique le système, on créé un objet quête dans la BDD, la description de l'objet correspond au nom de la quête, dans les commentaires on a description,but et gain. Quand l'objet est donné, cette quête passe en active, quand l'objet est perdu,la quête passe en fini. Voilà ensuite c'est juste un affichage banal.
J'ai d'abord essayé avec une BDD en script et ça fonctionne impec mais là, c'est pas bon. Je tiens à dire que je suis parti à la base d'un script de Tonyryu, donc si vous trouvez des ressemblances,c'est normal, quand le script sera fini, je lui demanderai bien sûr l'autorisation.
for line in @commentaire if line.include?("DESC = ") @desc = line.gsub!("DESC = "," ") end if line.include?("BUT = ") @but = line.gsub!("BUT = "," ") end if line.include?("GAIN = ") @gain = line.gsub!("GAIN = "," ") end end
@tab_def_quete = {"nom" => @nom, "etat" => @etat, "desc" => @commentaire, "but" => @but, "gain" => @gain} end end
class Game_Party < Game_Unit attr_accessor :tab_quete
alias quete_initialize initialize def initialize quete_initialize @tab_quete = [] end
def items result = [] for i in @items.keys.sort if $data_items[i].name.include?("Quete") item = $data_items[i] @tab_quete.push(Game_quete.new(item.id)) else result.push($data_items[i]) if @items[i] > 0 end end for i in @weapons.keys.sort result.push($data_weapons[i]) if @weapons[i] > 0 end for i in @armors.keys.sort result.push($data_armors[i]) if @armors[i] > 0 end return result end
#-------------------------------------------------------------------------- # * Gain Items (or lose) # item : Item # n : Number # include_equip : Include equipped items #-------------------------------------------------------------------------- def gain_item(item, n, include_equip = false) number = item_number(item) case item when RPG::Item for i in 0...@tab_quete.size if @tab_quete[i] == item.id @tab_quete[i]["etat"] = 1 end end @items[item.id] = [[number + n, 0].max, 99].min when RPG::Weapon @weapons[item.id] = [[number + n, 0].max, 99].min when RPG::Armor @armors[item.id] = [[number + n, 0].max, 99].min end n += number if include_equip and n < 0 for actor in members while n < 0 and actor.equips.include?(item) actor.discard_equip(item) n += 1 end end end end end
def refresh(etat_quete = 1) self.contents.clear @tab_quete = [] for i in 0...$game_party.tab_quete.size if $game_party.tab_quete[i]["etat"] == etat_quete @tab_quete.push(i) end
end @item_max = @tab_quete.size
if @item_max > 0 for i in 0...@tab_quete.size id_quete = @tab_quete[i] self.contents.font.size = 16 self.contents.draw_text(0, (i * 20) -2, 250, 20,$game_party.tab_quete[id_quete]["nom"]) end
end
end
def nb_quete return @tab_quete.size end
def id_quete return @tab_quete[@index] end
def item_rect(index) rect = Rect.new(0,0,0,0) rect.width = (contents.width + @spacing) / @column_max - @spacing rect.height = WLH rect.x = index % @column_max * (rect.width + @spacing) rect.y = index / @column_max * WLH return rect end
def update_cursor super end
end
class Window_DetailQuete < Window_Base def initialize(x,y) super(x,y,344,341) refresh end
def refresh(id_quete = -1) self.contents.clear return if id_quete == -1 ligne = 0
for i in 0...$game_party.tab_quete[id_quete]["gain"].size gain = $game_party.tab_quete[id_quete]["gain"][i] nbre = gain[1].to_s
if gain[0] =="EXP" ligne +=1 self.contents.draw_text(0,ligne*20,290,20,"Exp : " + nbre) elsif gain[0] =="ARGENT" ligne +=1 self.contents.draw_text(0,ligne*20,290,20,"Argent : "+nbre+Vocab::gold) end
if ["OBJ","ARME","ARMU"].include?(gain[0]) case gain[0] when "OBJ" ligne +=1 item = $data_items[gain[2]] draw_icon(item.icon_index,0,ligne*20) self.contents.draw_text(30,ligne*20,290,20,item.name + " * "+ nbre) when "ARME" ligne +=1 item = $data_weapons[gain[2]] draw_icon(item.icon_index,0,ligne*20) self.contents.draw_text(30,ligne*20,290,20,item.name+ " * " + nbre) when "ARMU" ligne +=1 item = $data_armors[gain[2]] draw_icon(item.icon_index,0,ligne*20) self.contents.draw_text(30,ligne*20,290,20,item.name+ " * " + nbre) end end end end end
class Scene_Quete < Scene_Base def start create_menu_background @window_etat = Window_EtatQuete.new(0,0) @window_liste = Window_ListeQuete.new(0,75) @window_detail = Window_DetailQuete.new(200,75) end
def terminate dispose_menu_background @window_detail.dispose @window_liste.dispose @window_etat.dispose end
def update super update_menu_background @window_etat.update @window_liste.update @window_detail.update
if @window_etat.active gerer_etat elsif @window_liste.active gerer_liste end end
def gerer_etat if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new end
if Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT) @window_liste.refresh(@window_etat.index + 1) end
if Input.trigger?(Input::C) return if @window_liste.nb_quete == 0 Sound.play_decision @window_etat.active = false @window_liste.active = true @window_liste.index = 0 @window_detail.refresh(@window_liste.id_quete) end
end
def gerer_liste if Input.trigger?(Input::DOWN) or Input.trigger?(Input::UP) @window_detail.refresh(@window_liste.id_quete) end
if Input.trigger?(Input::B) Sound.play_cancel @window_liste.active = false @window_etat.active = true @window_liste.index = -1 @window_detail.refresh return end end end
Attention, je ne tiens pas à ce qu'on me le fasse mais plutôt qu'on m'explique ce qui ne vas pas, ici en l'occurrence, mes quêtes ne s'affichent pas,ma question est pourquoi? Merci à vous à l'attention que vous porterez à mon problème. _________________________________________________________
*pleure tout seul dans son coin*
"méthode pratique de faire un petit up dans l'espoir de trouver un peu d'aide" Merci
yamazaki
Illusionniste Lv.12
Age : 34 Inscrit le : 27/12/2008 Messages : 757
Sujet: Re: Aide pour script personnel Jeu 5 Mar 2009 - 11:55
ton code est trop long peux tu me dire la partie que tu soupçonne qui ne fonctionne pas?
Invité
Invité
Sujet: Re: Aide pour script personnel Jeu 5 Mar 2009 - 12:38
Mon code est trop long xD
Je pense que c'est dans le def gain_item,quand je fais le test de l'id de l'objet, j'ai essayé encore plein de chose hier soir,mais niet.
J'essaye d'une autre manière ce soir, mais si tu peux essayer de trouver ce qu'il ne vas pas,je t'en serai reconnaissant.Merci
La Meche
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
Sujet: Re: Aide pour script personnel Jeu 5 Mar 2009 - 13:00
J'ai pas très bien saisie à quoi cela servait... Peux tu un peux mieux expliquer ?
yamazaki
Illusionniste Lv.12
Age : 34 Inscrit le : 27/12/2008 Messages : 757
Sujet: Re: Aide pour script personnel Jeu 5 Mar 2009 - 13:21
je ne comprends pas pourquoi tu as fais ceci
Code:
@tab_quete[i]["etat"] = 1
alors que ton tableau est définie ainsi @tab_quete = [] et non @tab_quete = [][]
Invité
Invité
Sujet: Re: Aide pour script personnel Jeu 5 Mar 2009 - 13:28
En fait, je cherchais un exercice de script, ASHKA m'a proposé un système de quête. Je me suis renseigné sur la chose,et remarqué que dans les scripts de quête,les quêtes devait soit être rajouté dans le script ou soit dans un .txt que le script créé.
Moi,j'ai voulu faire quelque chose de différent, et j'ai décidé de faire de cette manière, tu créé un objet quête dans la BDD, en nom tu mets "Quete" , en description le nom de ta quête, puis en commentaire DESC = ta description BUT = le but de la quête GAIN = le gain de la quête.
Puis pour faire devenir cette quête active, il suffit juste d'ajouter un objet au joueur, pour qu'elle soit finie,je pense le mettre dans def loose_item,c'est à dire quand on te retire un objet.
Ce système en fait permettra au maker de créer ses quêtes,sans toucher aux scripts, idéal pour ceux qui ne comprennent pas ou pour les débutants.
Voilà le fonctonnement du script : -Il vérifie si il y a des objets qui s'appelent quête -Si oui,il stocke ces objets dans un tableau et créé un objet Game_quete -Cette class récupère toutes les données compris dans la BDD -Quand un objet quête est ajouté au joueur, l'état de la quête passe en active -Quand l'objet quête est retiré au joueur,l'état de la quête passe en finie -Après il y a un affichage des quêtes avec rafraichissement de la liste des quêtes selon l'état et du détail des quêtes selon la quête selectionnée.
Voilà,plus en détail ce que je souhaite faire, je suis parti à la base du script de Tonyryu sur XP, j'ai donc commencer comme lui avec une BDD de quête en script et ce week end,le système fonctionnait,je me suis donc attelé à la 2ème parti, le faire mais avec les objets de la BDD.
Merci.
@Yamazaki : pour accéder à état de Game_quete,mais je pense que j'ai tout faut sur la ligne là, il y a plusieurs chose à revoir.
La Meche
Flibustier Lv.21
Age : 30 Inscrit le : 24/05/2008 Messages : 3234
Sujet: Re: Aide pour script personnel Jeu 5 Mar 2009 - 15:51
Donc là c'est quoi le probléme ? Cela bug ou ?
Invité
Invité
Sujet: Re: Aide pour script personnel Ven 6 Mar 2009 - 8:07
LaMeche : le problème ici est que rien ne s'affiche dans mon menu.
J'ai pas trop eu le temps hier soir,mais avec le peu de test que j'ai fait,j'ai remarqué que mon code ne passait pas dans cette boucle
Code:
when RPG::Item for i in 0...@tab_quete.size if @tab_quete[i] == item.id @tab_quete[i]["etat"] = 1
J'ai essayé sans passé par une classe Game_quete pour essayer mais sans résultat. J'y retourne ce soir, je vais bien trouver de toute façon