Sujet: [VX] Reserve d'objet Jeu 7 Aoû 2008 - 14:03
Nom : Script pour avoir une reserve d'objets Auteur : ASHKA Nombre de script : 1 plus une insertion de script obligatoire Info : ce systeme est semblable à celui de fat chocobo dans les vieux FF. C'est-à-dire que la reserve n'est pas accessible par le menu mais plutôt par un PNJ.
L'appel se fait par l'insertion de script suivante :
Code:
$scene = Scene_Reserve.new
Utilisation :
Il faut placer ceci en insertion de script au debut du jeu pour initialiser les valeurs :
Code:
for i in $data_items $reserve_objet[i.id] = 0 end for i in $data_weapons $reserve_arme[i.id] = 0 end for i in $data_armors $reserve_armure[i.id] = 0 end
Créez un nouveau script dans " Materials " et collez y ceci :
Code:
################################################################################ =begin Script de reserve d'objet
Important !!
Placer ceci en insertion de script au tout debut du jeu ( premiere map ) ( Dans un event en demarrage auto, puis apres activation d'un interrupteur local )
for i in $data_items $reserve_objet[i.id] = 0 end for i in $data_weapons $reserve_arme[i.id] = 0 end for i in $data_armors $reserve_armure[i.id] = 0 end
Appel en insertion de script = $scene = Scene_Reserve.new =end ################################################################################ class Scene_Reserve < Scene_Base
def initialize(menu_index = 0) @menu_index = menu_index end
def update super if self.active last_number = @number if Input.repeat?(Input::RIGHT) and @number < @max unless @type == "reserve" and ($game_party.item_number(@depart) + @number) == 99 @number += 1 end end if Input.repeat?(Input::LEFT) and @number >= 1 @number -= 1 end if Input.repeat?(Input::UP) and (@number + 10) <= @max unless @type == "reserve" and ($game_party.item_number(@depart) + @number + 10) > 99 @number += 10 end end if Input.repeat?(Input::DOWN) and (@number - 10) >= 0 @number -= 10 end if @number != last_number Sound.play_cursor refresh end end end end ################################################################################ class Window_Reserve < Window_Selectable
def include?(item) return false if item == nil if $game_temp.in_battle return false unless item.is_a?(RPG::Item) end return true end
def enable?(item) return $game_party.item_can_use?(item) end
def refresh @data = [] for item in $data_items if $reserve_objet[item.id] != 0 next unless include?(item) @data.push(item) if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id self.index = @data.size - 1 end end end for item in $data_weapons if $reserve_arme[item.id] != 0 next unless include?(item) @data.push(item) end end for item in $data_armors if $reserve_armure[item.id] != 0 next unless include?(item) @data.push(item) end end @data.push(nil) if include?(nil) @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end
def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) item = @data[index] if item != nil if item.is_a?(RPG::Item) number = $reserve_objet[item.id] elsif item.is_a?(RPG::Weapon) number = $reserve_arme[item.id] elsif item.is_a?(RPG::Armor) number = $reserve_armure[item.id] end enabled = enable?(item) rect.width -= 4 draw_item_name(item, rect.x, rect.y, enabled) self.contents.draw_text(rect, sprintf(":%2d", number), 2) end end
def update_help @help_window.set_text(item == nil ? "" : item.description) end end ################################################################################ class Window_Entete < Window_Selectable
def refresh self.contents.clear @data = ["Inventaire", "Reserve"] for i in 0..@data.size self.contents.draw_text(i * 256, 0, 256, 32, @data[i].to_s, 1) end end
def update_cursor if @index < 0 self.cursor_rect.empty else row = @index / @column_max if row < top_row self.top_row = row end if row > bottom_row self.bottom_row = row end rect = Rect.new(0, 0, 0, 0) rect.width = 256 rect.height = WLH rect.x = @index * 256 rect.y = 5 self.cursor_rect = rect end end
def update_help text = "" case @index when 0 text = "Permet de gerer les objets de l'inventaire." when 1 text = "Permet de gerer les objets mis en reserve." end @help_window.set_text(text, 1) end
end # class Window_Detection ################################################################################ class Scene_Title < Scene_Base def start super $reserve_objet = Hash.new(0) $reserve_arme = Hash.new(0) $reserve_armure = Hash.new(0) load_database # Load database create_game_objects # Create game objects check_continue # Determine if continue is enabled create_title_graphic # Create title graphic create_command_window # Create command window play_title_music # Play title screen music end end ################################################################################ class Scene_File < Scene_Base def write_save_data(file) characters = [] for actor in $game_party.members characters.push([actor.character_name, actor.character_index]) end $game_system.save_count += 1 $game_system.version_id = $data_system.version_id @last_bgm = RPG::BGM::last @last_bgs = RPG::BGS::last Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) Marshal.dump(@last_bgm, file) Marshal.dump(@last_bgs, file) Marshal.dump($game_system, file) Marshal.dump($game_message, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) Marshal.dump($reserve_objet, file) Marshal.dump($reserve_arme, file) Marshal.dump($reserve_armure, file) end
Désolé, je sais que tu l'explique, et que c'est expliquer dans le script aussi, mais je suis idiot ! :p Pourrais tu m'expliquer plus précisément s'il te plait ? Et aussi comment on gère cette option ? je veux dire, ce "stock" d'objet se présente comment ? et comment esqu'on peux l'ajouter dans une ville par exemple, etc Merci !
Nom : Script pour avoir une reserve d'objets Auteur : ASHKA Nombre de script : 1 plus une insertion de script obligatoire Info : ce systeme est semblable à celui de fat chocobo dans les vieux FF. C'est-à-dire que la reserve n'est pas accessible par le menu mais plutôt par un PNJ.
Qu'est-ce que tu ne comprends pas ? C'est un script permettant d'accèder à ton menu grâce à un autre event ...
Déjà, je pense que j'ai bien compris que c'était comme un espèce de stock d'objets, pour quand on en a trop sur nous (ou que la limite d'objets est atteinte). Hier j'ai compris ce qu'était "l'appel de script", mais je comprends pas la suite :
Citation :
Utilisation :
Il faut placer ceci en insertion de script au debut du jeu pour initialiser les valeurs :
Code:
for i in $data_items $reserve_objet[i.id] = 0 end for i in $data_weapons $reserve_arme[i.id] = 0 end for i in $data_armors $reserve_armure[i.id] = 0 end
Créez un nouveau script dans " Materials " et collez y ceci :
C'est quoi l'insertion de script ? Et pour le 2eme script, il faut le créer dans matérials, donc je pense que c'est la ou ya marqué "insert here".
Alors mon chère alala. L'insertion de script, il me semble que c'est la même chose que appeller un script. Ensuite, Il faut que dans la rubrique Matérial, tu clique sur Insert here, ensuite click droit et insérer. Sa vas te mettre une barre en plus, et c'est là que tu colleras ce script.
-il faut que je fasse un évènement avec un appel de script avec sa:
Code:
$scene = Scene_Reserve.new
mais cet évènement seulement a chaque fois que je voudrais un personnage qui donne le stock
-Un évènement avec un appel de script avec sa :
Code:
for i in $data_items $reserve_objet[i.id] = 0 end for i in $data_weapons $reserve_arme[i.id] = 0 end for i in $data_armors $reserve_armure[i.id] = 0 end
Que je met juste un fois au début du jeu (sur la premiere map)
Et esqu'il faut que je change les valeurs de 0 ? ces valeurs sont la limite maximum pour chaque catégories d'objets stockées non ?
-il faut que je fasse un évènement avec un appel de script avec sa:
Code:
$scene = Scene_Reserve.new
mais cet évènement seulement a chaque fois que je voudrais un personnage qui donne le stock
-Un évènement avec un appel de script avec sa :
Code:
for i in $data_items $reserve_objet[i.id] = 0 end for i in $data_weapons $reserve_arme[i.id] = 0 end for i in $data_armors $reserve_armure[i.id] = 0 end
Que je met juste un fois au début du jeu (sur la premiere map)
Et esqu'il faut que je change les valeurs de 0 ? ces valeurs sont la limite maximum pour chaque catégories d'objets stockées non ?
- Et le script dans matérial
Oui, mais pas fichu nimporte où sur cette map. A la première téléportation, je te conseille. Quant au valeurs de zéro...Essaye sans modifier, et vice-versa mais sincèrement, je ne pense pas, celui qui a posté ce script l'aurais précisé, non?
Bonjour tous le monde. Veuillez m'excuser de relancer ce sujet mais j'ais j'ais une question : et il possible de mettre des items à l'avence dans la réserve ?
Non, mais les gens ont trop souvent l'habitude de confondre nécroposts inutiles et utiles... Ils ne savent pas que lorsque l'on demande de l'aide sur un script ou un évènement dans la section dans laquelle il est posté (ce qui est normal), le "nécropost" n'est pas inutile... Il sert juste à t'aider à mieux comprendre telle ou telle partie que tu n'as pas compris. Et un nécropost inutile est un message posté au moins un mois après le dernier posté et qui ne sert, lui, strictement à rien, du type: "Woah, c koul!", "SupR, simèr, t tro for!"... Même on peut considérer que "où le met où le script?" c'est un nécropost... Normalement, à partir d'un moment, en cherchant un peu, on sait qu'on met les nouveaux scripts au dessus de Main...
Mais revenons à ta question ^^' Normalement c'est possible, et je vais chercher ça
Edit: C'est bon j'ai trouvé, en fait, en début de jeu, tu dois donc écrire ce code:
Code:
for i in $data_items $reserve_objet[i.id] = 0 end for i in $data_weapons $reserve_arme[i.id] = 0 end for i in $data_armors $reserve_armure[i.id] = 0 end
Si tu veux rajouter des items, tu modifies ça:
Code:
for i in $data_items $reserve_objet[i.id] = 0 end
tu remplaces i par l'id de l'objet que tu veux rajouter (par exemple 1 pour des potions) et tu remplaces le nombre après le = pour définir la quantité...
$reserve_objet[1.id] = 5 donne donc 5 potions.
Après tu as dans l'ordre weapons, les armes, puis armors, les armures, tu définis donc tous les objets que tu veux
Ne met pas $reserve_objet[1.id] = 5 mais $reserve_objet[1] = 5
Quand je fais avec la méthode de Gothor je me retrouve avec l'item 3 de ma base de données dans la réserve en mettant directement l'ID je me retrouve bien avec l'item 1 de ma base de données.
Par contre étrange que ca marche pas du tout, peux tu montrer comment tu as appelé ca?
pour la première image j'ai rien a dire, pour la seconde si ^^ Il ne faut pas faire comme ca. tu crée un event en processus parallèle qui appelle (sans modification) :
Code:
for i in $data_items $reserve_objet[i.id] = 0 end for i in $data_weapons $reserve_arme[i.id] = 0 end for i in $data_armors $reserve_armure[i.id] = 0 end
et tu rajoutes en dessous:
Code:
$reserve_objet[1] = 5
et enfin tu active l'interrupteur local A et créé une nouvelle page qui requiert l'activation de l'interrupteur local A
Parce qu'il me semble que vu que c'est en processus parallèle ça continuera de rajouter des potions (enfin l'objet) à l'infini. Activer l'interrupteur A permettra d'arriver sur la prochaine page où il ne se passe rien.