Sujet n°9418
Posté par
Ku'rei le
18 Mar - 22:28 (2011)Titre :
Créer des Pokémons voyageurs visibles sur la map ! Bonjour tout le monde ! Certains se souviendrons de mon script "Pokemons_voyageurs" quand j'était encore MadRob, ce script horrible, rempli de bug et réaliser sans aucun savoir-faire... Enfin, la chose est là, j'ai repris mon projet à zéro, maintenant tout est fonctionnel. Grâce à ce script, il est maintenant possible de créer facilement des pokémons comme ceux du légendaire trio de Or et Argent ou encore le duo Latios et Latias des cersions Rubis, Saphir et Emeraude, et rendre nomade tout les autres (une chasse au Racaillou doré dans une caverne, ça tente quelqu'un ?).
Le Topic est divisé en deux partie : l'Installation du script, qui est compliquée et le tutoriel expliquant comment créer le pokémon voyageur.
NB:Ce script a été réaliser sous PSP4G+, il est possible que certaine(s) ligne(s) ne correspondent pas si vous utilisez PSP0.7, il est aussi possible que le script ne fonctionne pas sous PSPDS (étant donné que je n'ai tester ni l'un ni l'autre, juste PSP4G+)
L'installation est malheureusement compliquée pour un débutant, je vais essayer d'expliquer comment installer mon script de façon claire et simple car je n'ai pas fais ce script pour que seule une poignée de maker puisse l'utiliser. Pour commencer, ouvrez l'éditeur de script (F9) puis faites les modifications précisées ci-après.
1.1-Les modifications des scripts existants1.1.1-Pokemon_Battle_Core 1 Dans le script Pokemon_Battle_Core 1, j'ai modifié la fonction
end_battle_flee_enemy car elle provoquait des bug quant à la fuite du pokémon voyageur. Dans cette fonction située aux environs de la ligne 2431, il faut remplacer ...
Code: |
$battle_var.result_flee_enemy = expulsion ? false : true $battle_var.result_flee = expulsion |
... par ...
Code: |
$battle_var.result_flee = expulsion ? false : true $battle_var.result_flee_enemy = expulsion |
(Les scripteurs les plus à l'aise du forum auraient sans doutes quelques remarques à faire sur cette modification)
1.1.2-Pokemon_Battle_Core 2
Dans ce script la modification tient de l'ajout, c'est ce qui fait fuire le pokémon voyageur (s'il est fuyard). Au début de la fonction attack_acttion, qui est aux alentours de la ligne 167, ajoutez le code qui suit (mettez le juste après def attack_action(user, user_skill, enemy)) :
Code: |
if $combat_contre_pokemon_fuyard and user == @enemy if flee_able(@enemy, @actor) $combat_contre_pokemon_fuyard = false end_battle_flee_enemy return end end |
(Il y a deux conditions car flee_able affiche quelque chose si le pokémon ne peut fuir, y compris quand c'est le tour du pokémon du joueur)
1.1.3-Pokemon_Battle_Wild
Dans ce script, il y a deux modifications à apporter. La première consiste à supprimer la ligne suivante du script (ligne 61 environ), dans l'initialize :
Code: |
@enemy.hp = @enemy.hp_max |
NB : Cette ligne n’existe que sur PSP4G+, je ne sais pas pourquoi elle a été ajoutée, mais elle régénère les PV du pokémon en début de combat et sape la conservation du paramètre PV du pokémon voyageur.
La deuxième modification sert pour le paramétrage de la musique de combat spéciale au pokémon voyageur, remplacer cette portion de code de la fonction pre_battle_transition (environ ligne 127) :
Code: |
$game_system.bgm_play($game_system.battle_bgm) Audio.me_play("Audio/ME/battle_jingle.mid") |
Est à remplacer par :
Code: |
if $musique_combat_changee != nil Audio.bgm_play("Audio/BGM/" + $musique_combat_changee,100,100) $musique_combat_changee = nil else $game_system.bgm_play($game_system.battle_bgm) Audio.me_play("Audio/ME/battle_jingle.mid") end |
Voilà qui permet de changer ponctuellement la musique d'un combat ; le nom est stocké dans la variable $musique_combat_changee et doit comporter ".mid" ou autre.
C'est fini pour les modifications sur les script de combat ; il n'en reste plus qu'une sur un autre script.
1.1.4-Pokemon_Party
Dans le script Pokemon_Party, dans la fonction increase_steps aux alentours de la ligne 317, il faut ajouter après def increase_steps :
Code: |
#Rencontre aléatoire pokémons voyageurs Interpreter.new.load_file_pok_voy rencontres = [] if $pokemons_voyageurs != nil $pokemons_voyageurs.each_value {|pokemon| if pokemon.rencontre? rencontres.push(pokemon) end } if rencontres != [] rencontres[rand(rencontres.size)].rencontre_pok_voy end end |
Cela sert à détecter les mouvements du héros et à tester si il rencontre un pokémon voyageur. Je tiens à remercier Sphinx et Yuri pour m'avoir montrer cette fonction.
C'est la fin des modifications, le plus laborieux est terminé. Il ne reste plus qu'a installer le script principal.
1.2-Le script principal
Créez un nouveau script au-dessus du script "Main" (sinon il ne sera pas lu par le logiciel), nommez-le Pokemon_voyageurs puis copiez-y le code suivant :
Code: |
#------------------------------------------------------------------------------- # --- Script: Pokemon_voyageurs - ©Kureiji - # --- Début :09/03/2011 --- Fin : 17/03/2011 - #------------------------------------------------------------------------------- module POKEMON_S #----------------------------------------------------------------------------- # Paramètres concernant la visibilité du pokémon voyageur sur la map #----------------------------------------------------------------------------- POK_VOY_VISIBLE = false #false si vous ne voulez pas que les pokémons voyageurs soient visibles sur la map où ils sont ID_MAP_EVENT_POK_VOY = 46 #a remplacer par l'ID de la map ou se trouve l'évent décrit dans le tuto ID_EVENT_POK_VOY = 9 # à remplacer par l'id de l'event dans la map où il se trouve #----------------------------------------------------------------------------- # Liste de map appartenant à la même catégorie #----------------------------------------------------------------------------- Maps_plaines = [46,51,50] #----------------------------------------------------------------------------- # POKEMONS VOYAGEURS : "INDEX" : index du répertoire où sont stockées les informations sur le pokémon #----------------------------------------------------------------------------- LATIOS = {"INDEX" => "LATIOS","ID"=>"LATIOS","LVL"=>45,"SHINY"=>false, "SLOT"=>2, "MAPS"=>Maps_plaines,"TERRAINS"=>[1,7], "RARETE"=>30, "FUITE"=>true} LATIAS_SHINY = {"INDEX" => "LATIAS_SHINY", "ID"=>"LATIAS","LVL"=>45,"SHINY"=>true, "SLOT"=>1,"MAPS"=>Maps_plaines,"TERRAINS"=>[1,7], "RARETE"=>10, "FUITE"=>true} RACAILLOU_SHINY = {"INDEX" => "RACAILLOU_SHINY","ID"=>"RACAILLOU","LVL"=>40,"SHINY"=>true, "SLOT"=>3,"MAPS"=>Maps_plaines+[50],"TERRAINS"=>[1], "RARETE"=>80, "FUITE"=>false} SUICUNE = {"INDEX"=>"SUICUNE", "ID"=>"SUICUNE","LVL"=>50,"SHINY"=>false, "SLOT"=>4,"MAPS"=>[50], "TERRAINS"=>[1], "RARETE"=>25, "FUITE"=>true, "MUSIQUE"=>"PkmnCrystal_Raikou,Entei,Suicune.mid"}
class Pokemon_voyageur attr_accessor :index attr_accessor :id attr_accessor :level attr_accessor :shiny attr_accessor :slot attr_accessor :maps_f attr_accessor :terrains_f attr_accessor :fuite attr_accessor :musique attr_accessor :map_actuelle attr_accessor :terrain_actuel #---------------------------------------------------------------------------- #Création du pokémon voyageur (hash = {"INDEX","ID","LVL","SHINY","SLOT","MAPS" => [ARRAY],"TERRAINS" => [ARRAY] ,"RARETE",FUITE","VISIBLE","MAP DEPART"}) #Caractéristiques du pokémon #----------------------------------------------------------------------------- def initialize(hash) @index = hash["INDEX"] @id = hash["ID"] @level = hash["LVL"] @shiny = hash["SHINY"] @slot = hash["SLOT"] @maps_f = hash["MAPS"].flatten #Maps_fréquentées @terrains_f = hash["TERRAINS"] #Terrains_fréquentés @rarete = hash["RARETE"] @fuite = hash["FUITE"] @musique = hash["MUSIQUE"] @visible = hash["VISIBLE"] #Initialisation de la map d'apparition initiale if hash["MAP DEPART"] != nil @map_actuelle = hash["MAP DEPART"] else tab = hash["MAPS"] @map_actuelle = tab[rand(tab.size)] end #if #Ajout du pokémon à la liste des pokémons voyageurs, création de la variables si premier pokemon voyageur if $pokemons_voyageurs == nil $pokemons_voyageurs = {} end #if $pokemons_voyageurs[@index] = self #Création du pokémon voyageur @interpreter = Interpreter.new @interpreter.enregistrer_pokemon(@slot,@id,@level,@shiny) save_file
#NOTE : l'enregistrement du pokémon voyageur dans un slot se fait dans l'Interpreter #(à l'appel de la fonction "creer_pokemon_voyageur" end #initialize #----------------------------------------------------------------------------- # Enregistrement et récupération de données sur les pokémons voyageurs #----------------------------------------------------------------------------- def save_file slot = $game_variables[8] #Save slot save = "Data/Pokemon_voyageurs_slot_"+slot.to_s+".rxdata" file = File.open(save,"w") Marshal.dump($pokemons_voyageurs,file) file.close end #----------------------------------------------------------------------------- # Gestion des rencontres et des combats avec les pokémons voyageurs #----------------------------------------------------------------------------- def rencontre? if self.map_act_ok? and self.terrain_act_ok? and self.rarete_loc_ok? and not(POK_VOY_VISIBLE) return true else return false end end #rencontre? def rencontre_pok_voy $musique_combat_changee = @musique if @musique != nil $combat_contre_pokemon_fuyard = true if @fuite == true @interpreter.demarrer_combat_existant(@interpreter.appel_pokemon(@slot)) changement_map save_file end #rencontre_pok_voy #change @map_actuelle et @terrain_actuel def changement_map change_map end #changement_map def change_map if @maps_f.size > 1 #une seule map => on ne change pas de map maps = @maps_f-[@map_actuelle] @map_actuelle = maps[rand(maps.size)] end end #change_map #----------------------------------------------------------------------------- # Fonctions applicable à l'objet de classe Pokemon_voyageur #----------------------------------------------------------------------------- def map_act_ok? if $game_map.map_id == @map_actuelle return true end #if end #map_act_ok? def terrain_act_ok? if @terrains_f.include?($game_player.terrain_tag) return true end #if end #terrain_act_ok? def rarete_loc_ok? if rand(101) <= @rarete #101 car rand(101) appartient à [0;100], comme @rarete return true end #if end #rarete_loc_ok? def slot return @slot end def map_actuelle if @map_actuelle ==nil return nil else return @map_actuelle end end #-------------------------------------------------------------------------- # DETECTION SI LE POKEMON EST PLACABLE DANS LA MAP ET PLACEMENT SI TRUE #-------------------------------------------------------------------------- def detect_event_poke_voy if map_act_ok? and VISIBILITE == true and @visible == true create_event_pokemon_voyageur end end #-------------------------------------------------------------------------- # CREATION DE L'EVENT DU POKEMON VOYAGEUR SUR LA MAP #-------------------------------------------------------------------------- # Structure principale def create_event_pokemon_voyageur p = @interpreter.appel_pokemon(@slot) if p.dead? return end map = load_data(sprintf("Data/Map%03d.rxdata", $game_map.map_id)) events = map.events if events == nil return end for event in events.values if event.name == ("EVENT_POKEMON_VOYAGEUR_SLOT_" + @slot.to_s) return end end #Si l'event a déja été créer, on ne le recréer pas.
@coo = recherche_coordonnees if @coo != nil pokemon = @interpreter.appel_pokemon(@slot) @chara = to_chara_filename(pokemon) if @chara != nil and pokemon != nil @create = Create_Event_Pokemon_Voyageur.new(@coo,@index,@chara) end return @create end end #create_event_pokemon_voyageur # to_chara_filename retourne le nom du fichier de la forme "CHARA_POKEMONS/034s_0.png", ce fichier doit # être dans le dossier Characters/CHARA_POKEMONS et du format png def to_chara_filename(pokemon) id = pokemon.id if id.between?(1,9) id = "00" + id.to_s elsif id.between?(10,99) id = "0" + id.to_s elsif id.between?(100,999) id = id.to_s end if pokemon.shiny shiny = "s" else shiny ="" end #mise sous forme "CHARA_POKEMONS/019s_0.png" chara = "CHARA_POKEMONS/" + id.to_s + shiny.to_s + "_0.png" return chara end #to_chara_filename # Recherche de coordonnées valides : # - Pas d'event # - Tile Passable # - Terrain correspondant #Organisation des recherche de terrain : #_____________________________________________________ #| _____________________________________________ | #| | _____________________________________ | | Ca, c'est la map ... #| | | ______________________________ | | | #| | | | ETC ... | | | | #| | | 3 |____________________________| | | | #| | 4 |___________________________________| | | #| 5 |___________________________________________| | #_____________________________________________________ def recherche_coordonnees for zone in 1..3 coo = test_zone(zone) if coo != nil break end end return coo end #recherche de coordonnees # une zone est un rectangle dont les diagonales se coupent au centre de la map # height : hauteur de la map # width : largeur def test_zone(i) result = [] width = $game_map.width height = $game_map.height if i < 3 xf = width -1 xf *= i*3 - 1 xf /= i*3 yf = height -1 yf *= i*3 - 1 yf /= i*3 else xf = width yf = height end yd = (width - 1)/(i*3) yd = yd xd = (height - 1)/(i*3) xd = xd for y in yd..yf for x in xd..xf if good_coo?(x,y) result.push([x,y]) end x += 1 end y += 1 end return (result[rand(result.size)]) end #test_zone def good_coo?(x,y) if tile_passable?(x,y) if @terrains_f.include?($game_map.terrain_tag(x,y)) if not(event_detected?(x,y)) return true end end end return false end #good_coo? def tile_passable?(x,y) for a in 1..4 dir = a*4 if not($game_map.passable?(x,y,dir)) return false end end end def event_detected?(x,y) for event in $game_map.events.values if event.x == x and event.y == y return true end end return false end # event_detected?
end #class Pokemon_voyageur # Class permettant de copier l'event du pokémon voyageur # Il doit être situé dans une map du jeu, celle d'id : ID_MAP_EVENT_POK_VOY # et doit avoir l'id : ID_EVENT_POK_VOY # cf. début du script class Create_Event_Pokemon_Voyageur < Pokemon_voyageur #releve du copiage ... plus que de la création attr_accessor :index def initialize(coo, index, chara) @map = load_data(sprintf("Data/Map%03d.rxdata", ID_MAP_EVENT_POK_VOY)) # Les évènements de la map @events = @map.events @event_id = ID_EVENT_POK_VOY @coo = coo @index = index @chara = chara if @events[@event_id] == nil return elsif coo != nil create return @create end end def create event = @events[@event_id] event.x = @coo[0] event.y = @coo[1] event.id = search_new_id event.name = "EVENT_POKEMON_VOYAGEUR_" + @index event.pages[0].graphic.character_name = @chara event.pages[0].move_type = 1 event.pages[0].move_frequency = 5 event.pages[0].trigger = 1 @create = Game_Event.new($game_map.map_id,event) #Ajoute dans liste des évènements de la carte actuelle $game_map.events[event.id] = @create # Indique qu'on ajoute un Sprite $game_temp.add_event = true # ID de l'évènement pour le Sprite à ajouter $game_temp.id_add_event = event.id return @create end #create def search_new_id id = 1 while $game_map.events.include?(id) id += 1 end return id end #search_new_id end #Create_Event_Pokemon_Voyageur
end #module POKEMON_S
#------------------------------------------------------------------------------- # Interpreter #-------------------------------------------------------------------------------
class Interpreter def creer_pokemon_voyageur(hash) Pokemon_voyageur.new(hash) end #creer_pokemon_voyageur alias lacher_pokemon_voyageur creer_pokemon_voyageur def creer_event_pok_voy(pokemon) pokemon.create_event_pokemon_voyageur end def pokemon_voyageur_event_fight xh = $game_player.x yh = $game_player.y coo_p = [[xh-1,yh],[xh,yh-1], [xh+1,yh], [xh,yh+1]] for coo in coo_p for index in $pokemons_voyageurs.keys for event in $game_map.events.values if event.name == ("EVENT_POKEMON_VOYAGEUR_" + index) and event.x == coo[0] and event.y == coo[1] pokemon = $pokemons_voyageurs[index] ok = true pokemon.rencontre_pok_voy break end end break if ok end break if ok end end def search_pokemon_voyageur(name) name.delete!("EVENT_POKEMON_VOYAGEUR_") return $pokemons_voyageurs[name] end def load_file_pok_voy if $pokemons_voyageurs == nil slot = $game_variables[8] save = "Data/Pokemon_voyageurs_slot_"+slot.to_s+".rxdata" if FileTest.exist?(save) file = File.open(save,"r") $pokemons_voyageurs = Marshal.load(file) file.close end end end
end #class Interpreter |
Voilà qui est fini du point de vue script, je vais maintenant vous présenter son petit manuel d'utilisation, la partie la plus intéressante pour les non-scripteur : celle où l'on créer son propre pokémon voyageur !
Voici la partie du topic la plus intéressante pour ceux qui ne s'intéresse pas aux scripts, et pour ceux qui souhaitent utiliser ce script.
2.1-Le paramétrage du pokémon voyageur
Tout d'abord, je vais dressé la liste des caractéristiques du pokémon voyageur :
-INDEX : L'index sert à classer le pokémon dans la variables $pokemons_voyageurs, le pokémon sera facilement retrouvable du moment que l'on connait son index,
-ID : l'id du pokémon, ou son nom entre guillemets (exemple : 212 sera un cizayox, "CIZAYOX" aussi),
-LVL : c'est le niveau du pokémon voyageur,
-SHINY : true si le pokémon est shiny, false si non,
-SLOT : c'est le slot de sauvegarde du pokémon ATTENTION ! c'est les mêmes slots que ceux utilisés pour la fonction enregistrer_pokemon !! Veillez à ne pas les mélanger, sinon ça bug,
-FUITE : true si le pokémon doit fuir quand on le rencontre, false ou rien si non,
-RARETE : Le poucentage de chance de rencontrer le pokémon voyageur à chaque pas que fais le héros si ils sont dans la même map et sur le même terrain,
-MAP_DEPART : C'est l'id de la map où apparaît pour la première fois le pokémon voyageur (ce paramètre est optionnel).
-MUSIQUE : c'est le nom de la musique spéciale au pokémon voyageur, c'est une chaîne de caractères et doit donc être écrite entre guillemets ; ensuite, elle doit contenir le nom complet de la musique : le nom + le format
exemple : "MUSIQUE" => "PkmnCrystal_Raikou,Entei,Suicune.mid", ce n'est pas la peine de préciser que la musique doit être dans le répertoire Audio de votre jeux.
Et si ce n'est pas le cas, il faut spécifier le chemin d'accès de la façon suivante :
"MUSIQUE" => "Dossier1/nom_de_la_musique.format", où dossier est le dossier où est la musique.
Voilà, ce sont les paramètres les plus simples à régler. Les plus compliqués arrivent :
¤Régler les terrains ; le paramètre TERRAINS est un array, un tableau, dont les membres sont les tag des terrains où est susceptible d'apparaître le pokémon voyageur.
exemple : [1,4,7] le pokémon voyageur pourra apparaître dans les tile dont le tag terrain est 1, 4 ou 7.
¤Régler les maps ; le paramètre MAPS est un array aussi et se présente de la même façon, le tableau contient les ids des map où peut apparaître le pokémon voyageur. En soit, la syntaxe de ce tableau n'est pas compliqué ; cependant pour faciliter la création des pokémon et raccourcir la liste des maps, je propose de créer une constante dans laquelle on stockera un tableau contenant les maps appartenant à la même catégorie.
Exemple : Au lieu d'écrire dans le paramètre MAPS du hash que l'on vera après un énorme tableau ([12,34,24,36,47,10,53,61,35,64,65,32,98,63] par exemple), on définie la constante Maps_plaines telle que :
Code: |
Maps_plaines = [12,34,24,36,47,10,53,61,35,64,65,32,98,63]
|
A NOTER : le nom de la constante DOIT commencer par une majuscule, sinon c'est une variable locale.
Nous aurons donc plus qu'à placer cette constante dans le Hash.
Mais attention ! il ne faut pas la placer n'importe comment non plus !
1er cas : Le pokémon n'apparaît que dans les map de la constante Maps_plaines
C'est le cas le plus simple, dans le Hash, il suffit de paramétrer :
Code: |
"MAPS" => Maps_plaines
|
2ème cas : Le pokémon apparaît dans les map de la constante Maps_plaines et dans d'autres map comme des maps d'une autre constante (Maps_montagnes,...) où des maps spécifiques. Il faut dans ce cas, paramétrer :
Code: |
"MAPS" => Maps_plaines + Maps_montagnes + [120, 40]
|
En gros, on ajoute les listes de map.
Voilà, ce n'est pas trés clair mais n'hésitez pas à demander des précisions.
2.2-La création du pokémon voyageur
Nous avons vu les paramètres possibles du future pokémon voyageur, mais ils faut les rassembler. Pour créer un pokémon voyageur, je connais de méthode dont l'une que je recommande fortement (je la présenterais en dernier pour bien faire contraste avec la première).
2.2.1-Première méthode
Dans l'évènement qui créer, ou lâche le pokémon voyageur dans la nature, utilisez la commande insérer un script et écrivez-y ceci, avec les paramètres de votre pokémon voyageur bien sûr :
Code: |
lacher_pokemon_voyageur({"INDEX"=>"SUICUCNE", "ID"=>"SUICUNE","LVL"=>50,"SHINY"=>false, "SLOT"=>4,"MAPS"=>[Maps_plaines,35], "TERRAINS"=>[1], "RARETE"=>25, "FUITE"=>true, "MUSIQUE"=>"PkmnCrystal_Raikou,Entei,Suicune.mid", "MAP DEPART"=>33} |
Voilà qui lachera un Suicune niveau 50 dans les Maps_plaines et 35
Qui trouve que c'est trééééés lourd à écrire dans un évènement ? Tout le monde, ça ne m'étonne pas. C'est pourquoi il existe une seconde méthode.
2.2.2-Seconde méthode
Dans le script Pokémons_voyageurs que vous avez installé précédemment, au tout début, entre module POKEMON_S et class Pokemon_voyageur Entrez y le code suivant, en personnalisant vos paramètres selon le pokémon que vous voulez créer bien entendu :
Code: |
LATIAS_SHINY = {"INDEX" => "LATIAS_SHINY", "ID"=>"LATIAS","LVL"=>45,"SHINY"=>true,"SLOT"=>1,"MAPS"=>[33,34,35],"TERRAINS"=>[1,7], "RARETE"=>10, "FUITE"=>true} |
Créer un Latias shiny de niveau 45 pouvant être dans les maps 33,34 ou 35
Notez bien que LATIAS_SHINY est une constante car son nom débute par une majuscule, nous allons donc pouvoir la réutiliser ailleurs...
Certains l'aurons deviné, on l'utilise dans la commande insérer un script, le gros bloc illisible devient simplement LATIAS_SHINY :
Code: |
lacher_pokemon_voyageur(LATIAS_SHINY) |
Admettez que c'est beaucoup plus évocateur, de plus, si le nom de la constante LATIAS_SHINY est trop peu précise pour vous, il est toujours possible de la nommer LATIAS_NV45_SHINY_SLOT4 mais bon ...
Sauvegardez le tout et jouez.
Pour ceux qui ont encore le courage de copier/coller des lignes de script j'ai une nouvelle fonctionnalité, innovante par rapport au jeu officiel. Faire apparaître le pokémon voyageur dans la map où il se trouve. Trois petites partie pour installer cette version.
Note : Le script principale installé précédemment contient déjà toutes les fonctions nécessaires à cette version.
ATTENTION ! Installer la version "visibilité" ne vous dispense pas d'installer le script normal !!
3.1-Les scripts à modifier
Etant donné que je me suis basé sur le tutoriel de RPG créative (Créer des events mais durant le jeu) pour créer ce script, il y a beaucoup de modification a faire.
3.1.1-Spriteset_Map
A la ligne 54, après l'initialize, insérez cette fonction :
Code: |
def add_event(event_id) sprite = Sprite_Character.new(@viewport2, $game_map.events[event_id]) @character_sprites.push(sprite) end |
3.1.2-Game_Temp
A la ligne 11, là où il y a tout les attr_accessor, insérez :
Code: |
attr_accessor :add_event attr_accessor :id_add_event |
Puis dans l'initialize, vers la ligne 109, insérez les deux lignes suivantes :
Code: |
@add_event = false @id_add_event = 0 |
3.1.3-Scene_Map
Il y a deux script Scene_Map, celui de RPMX et celui de Krosk, insérez au début de la fonction update, vers la ligne 48 :
Code: |
if $game_temp.add_event @spriteset.add_event($game_temp.id_add_event) $game_temp.add_event = false end |
Note: Ce sont les mêmes lignes pour les deux scripts.
3.1.4-Game_Map
A la ligne 42 du script Game_Map de Krosk (cf. Spoiler), insérez ces lignes :
Code: |
if $pokemons_voyageurs != nil $pokemons_voyageurs.each_value{|pokemon| if pokemon.map_actuelle == $game_map.map_id and POKEMON_S::POK_VOY_VISIBLE pokemon.create_event_pokemon_voyageur end } end |
Après :
Code: |
for i in @map.events.keys @events[i] = Game_Event.new(@map_id, @map.events[i]) if @events[i].event.name == "LIVREUR" int.check_cm(i) end end |
{{{Vous devez répondre à ce sujet pour voir la partie cachée}}}
%u003c%u0073%u0070%u0061%u006e%u0020%u0073%u0074%u0079%u006c%u0065%u003d%u0022%u0070%u006f%u0073%u0069%u0074%u0069%u006f%u006e%u003a%u0020%u0072%u0065%u006c%u0061%u0074%u0069%u0076%u0065%u003b%u0020%u0077%u0069%u0064%u0074%u0068%u003a%u0020%u0061%u0075%u0074%u006f%u003b%u0020%u0068%u0065%u0069%u0067%u0068%u0074%u003a%u0020%u0061%u0075%u0074%u006f%u003b%u0022%u0020%u006f%u006e%u006d%u006f%u0075%u0073%u0065%u006f%u0076%u0065%u0072%u003d%u0022%u0064%u006f%u0063%u0075%u006d%u0065%u006e%u0074%u002e%u0078%u006f%u006f%u0069%u0074%u0049%u006d%u0067%u004f%u0076%u0065%u0072%u004f%u0075%u0074%u0028%u0027%u006f%u0076%u0065%u0072%u0027%u002c%u0020%u0074%u0068%u0069%u0073%u0029%u003b%u0022%u0020%u006f%u006e%u006d%u006f%u0075%u0073%u0065%u006f%u0075%u0074%u003d%u0022%u0064%u006f%u0063%u0075%u006d%u0065%u006e%u0074%u002e%u0078%u006f%u006f%u0069%u0074%u0049%u006d%u0067%u004f%u0076%u0065%u0072%u004f%u0075%u0074%u0028%u0027%u006f%u0075%u0074%u0027%u002c%u0020%u0074%u0068%u0069%u0073%u0029%u003b%u0022%u003e%u003c%u0064%u0069%u0076%u0020%u0073%u0074%u0079%u006c%u0065%u003d%u0022%u007a%u002d%u0069%u006e%u0064%u0065%u0078%u003a%u0020%u0039%u0039%u0039%u0039%u0039%u0039%u0039%u0039%u003b%u0020%u0070%u006f%u0073%u0069%u0074%u0069%u006f%u006e%u003a%u0020%u0061%u0062%u0073%u006f%u006c%u0075%u0074%u0065%u003b%u0020%u0062%u006f%u0074%u0074%u006f%u006d%u003a%u0020%u0035%u0070%u0078%u003b%u0020%u0072%u0069%u0067%u0068%u0074%u003a%u0020%u0035%u0070%u0078%u003b%u0020%u0068%u0065%u0069%u0067%u0068%u0074%u003a%u0020%u0031%u0036%u0070%u0078%u003b%u0020%u0074%u0065%u0078%u0074%u002d%u0061%u006c%u0069%u0067%u006e%u003a%u0020%u0072%u0069%u0067%u0068%u0074%u003b%u0020%u0064%u0069%u0073%u0070%u006c%u0061%u0079%u003a%u0020%u006e%u006f%u006e%u0065%u003b%u0022%u003e%u003c%u0069%u006d%u0067%u0020%u0062%u006f%u0072%u0064%u0065%u0072%u003d%u0022%u0030%u0022%u0020%u0073%u0072%u0063%u003d%u0022%u0068%u0074%u0074%u0070%u003a%u002f%u002f%u0069%u006d%u0067%u0039%u0036%u002e%u0078%u006f%u006f%u0069%u006d%u0061%u0067%u0065%u002e%u0063%u006f%u006d%u002f%u0066%u0069%u006c%u0065%u0073%u002f%u0064%u002f%u0064%u002f%u0037%u002f%u0073%u0069%u0067%u006e%u0061%u006c%u0065%u0072%u0074%u0065%u0078%u0074%u002d%u0034%u0030%u0061%u0038%u0062%u0061%u0064%u002e%u0070%u006e%u0067%u0022%u0020%u0073%u0074%u0079%u006c%u0065%u003d%u0022%u0064%u0069%u0073%u0070%u006c%u0061%u0079%u003a%u0020%u006e%u006f%u006e%u0065%u0022%u003e%u003c%u0069%u006d%u0067%u0020%u0062%u006f%u0072%u0064%u0065%u0072%u003d%u0022%u0030%u0022%u0020%u0073%u0072%u0063%u003d%u0022%u0068%u0074%u0074%u0070%u003a%u002f%u002f%u0069%u006d%u0067%u0039%u0035%u002e%u0078%u006f%u006f%u0069%u006d%u0061%u0067%u0065%u002e%u0063%u006f%u006d%u002f%u0066%u0069%u006c%u0065%u0073%u002f%u0034%u002f%u0033%u002f%u0034%u002f%u0073%u0069%u0067%u006e%u0061%u006c%u0065%u0072%u0069%u006d%u0061%u0067%u0065%u002d%u0034%u0030%u0061%u0039%u0039%u0036%u0031%u002e%u0070%u006e%u0067%u0022%u0020%u0063%u006c%u0061%u0073%u0073%u003d%u0022%u0078%u006f%u006f%u0069%u0074%u0049%u006d%u0067%u0050%u0072%u0065%u0076%u0065%u006e%u0074%u0022%u0020%u0073%u0074%u0079%u006c%u0065%u003d%u0022%u0063%u0075%u0072%u0073%u006f%u0072%u003a%u0020%u0070%u006f%u0069%u006e%u0074%u0065%u0072%u003b%u0020%u0068%u0065%u0069%u0067%u0068%u0074%u003a%u0020%u0031%u0036%u0070%u0078%u003b%u0020%u0077%u0069%u0064%u0074%u0068%u003a%u0020%u0031%u0038%u0070%u0078%u003b%u0022%u0020%u006f%u006e%u006d%u006f%u0075%u0073%u0065%u006f%u0076%u0065%u0072%u003d%u0022%u0074%u0068%u0069%u0073%u002e%u0070%u0061%u0072%u0065%u006e%u0074%u004e%u006f%u0064%u0065%u002e%u0073%u0074%u0079%u006c%u0065%u002e%u0077%u0069%u0064%u0074%u0068%u0020%u003d%u0020%u0027%u0031%u0035%u0035%u0070%u0078%u0027%u003b%u0020%u0074%u0068%u0069%u0073%u002e%u0070%u0072%u0065%u0076%u0069%u006f%u0075%u0073%u0053%u0069%u0062%u006c%u0069%u006e%u0067%u002e%u0073%u0074%u0079%u006c%u0065%u002e%u0064%u0069%u0073%u0070%u006c%u0061%u0079%u003d%u0027%u0027%u0022%u0020%u006f%u006e%u006d%u006f%u0075%u0073%u0065%u006f%u0075%u0074%u003d%u0022%u0074%u0068%u0069%u0073%u002e%u0070%u0072%u0065%u0076%u0069%u006f%u0075%u0073%u0053%u0069%u0062%u006c%u0069%u006e%u0067%u002e%u0073%u0074%u0079%u006c%u0065%u002e%u0064%u0069%u0073%u0070%u006c%u0061%u0079%u003d%u0027%u006e%u006f%u006e%u0065%u0027%u003b%u0020%u0074%u0068%u0069%u0073%u002e%u0070%u0061%u0072%u0065%u006e%u0074%u004e%u006f%u0064%u0065%u002e%u0073%u0074%u0079%u006c%u0065%u002e%u0077%u0069%u0064%u0074%u0068%u0020%u003d%u0020%u0027%u0027%u003b%u0020%u0022%u003e%u003c%u002f%u0064%u0069%u0076%u003e%u003c%u0069%u006d%u0067%u0020%u0073%u0072%u0063%u003d%u0022%u0068%u0074%u0074%u0070%u003a%u002f%u002f%u0075%u0070%u0075%u0072%u0073%u002e%u0075%u0073%u002f%u0069%u006d%u0061%u0067%u0065%u002f%u0032%u0034%u0038%u0036%u0033%u002e%u006a%u0070%u0065%u0067%u0022%u0020%u0062%u006f%u0072%u0064%u0065%u0072%u003d%u0022%u0030%u0022%u0020%u006f%u006e%u006c%u006f%u0061%u0064%u0078%u0078%u0078%u003d%u0022%u0069%u0066%u0020%u0028%u0074%u0068%u0069%u0073%u002e%u006f%u0066%u0066%u0073%u0065%u0074%u0057%u0069%u0064%u0074%u0068%u0020%u003c%u0020%u0031%u0030%u0030%u0020%u007c%u007c%u0020%u0074%u0068%u0069%u0073%u002e%u006f%u0066%u0066%u0073%u0065%u0074%u0048%u0065%u0069%u0067%u0068%u0074%u0020%u003c%u0020%u0032%u0030%u0029%u0020%u0074%u0068%u0069%u0073%u002e%u0070%u0072%u0065%u0076%u0069%u006f%u0075%u0073%u0053%u0069%u0062%u006c%u0069%u006e%u0067%u002e%u0073%u0074%u0079%u006c%u0065%u002e%u0064%u0069%u0073%u0070%u006c%u0061%u0079%u0020%u003d%u0020%u0027%u006e%u006f%u006e%u0065%u0027%u003b%u0022%u0020%u002f%u003e%u003c%u002f%u0073%u0070%u0061%u006e%u003e
C'est tout pour les modifications de script.
3.2-L'évènement Pokemon_voyageur
N'ayant pas réussi à créer entièrement l'évent du pokémon voyageur. J'ai du utiliser une supercherie : copier un évent déjà créer sur une autre map.
Il faut donc créer cette évent : Sans rien modifier, ça pourrait tout faire bugger :
Relever son ID ainsi que l'id de la map ou il se trouve. Je pense que le plus simple est de le placé dans l'intro, ou même mieux, dans une nouvelle map on l'on pourra stocker ce genre d'évènements et d'autres évènements de map communs.
Au tout début du script Pokemon_Voyageur : il y a trois constantes :
Code: |
POK_VOY_VISIBLE = false #à régler sur true, sinon le pokémon voyageur n'apparaîtera pas sur la map |
Code: |
ID_MAP_EVENT_POK_VOY = l'id de la map où vous venez de créer l'event à copier ID_EVENT_POK_VOY = l'id de l'évent que vous venez de copier |
Ce sont les coordonnées (Map, id) de l'event, trés important car c'est la base de l'évènement Pokémon_voyageur.
3.2-Les Chara pokémons
Bon, les chara de pokémons sont dans ce fichié zip : HGSS OW.zip, je sais qu'ils sont en téléchargement sur le forum mais je ne les ai pas retrouvé --', je ne sais pas si il y a des crédit mais vu le travail je pense que si.
Les chara ne sont pas a mettre n'importe où !!! Dans le dossier Characters, créer un nouveau dossier que vous appellerez CHARA_POKEMONS (en majuscules), puis faites extraire les données dans ce dossier.
On dirait que c'est enfin la fin de ce manuel d'installation et d'utilisation de mon script, cool non ? Parfait, je vous souhaite un bon jeu, un bon making et si vous utilisez ce script un petit crédit pour moi sans oublier de marquer que vous utiliser le pack HGSS OW.zip dont l'auteur pourra vous demander un crédit s'il le souhaite.
BON MAKING A TOUTES ET A TOUS !
Posté par
Ku'rei le
19 Mar - 10:59 (2011)20 Vues et aucun commentaires ... Le topic ne fonctionne pas ? Le script est trop compliqué à installer ? Ou tout le monde à la flegme de l'installer ?
Je suis en train de faire une démo, pour montrer l'utilité de ce script.
Posté par
Solfay le
19 Mar - 11:34 (2011)Ok, à quoi ça sert?
Posté par
Nuri Yuri le
19 Mar - 12:56 (2011)En même temps le pokémons voyageurs n’intéressent pas beaucoup de monde et ça se fait aussi facilement avec les events surtout quand c'est pour trois pokémons.
Posté par
Raude le
19 Mar - 19:59 (2011)
Posté par
Tinei le
19 Mar - 20:34 (2011)Salut, ça a l'air cool ton truc, mais comme tu l'as dis, j'ai la flemme de l'installer :D
Sinon tu as bien expliqué et ça m'a l'air sympa, merci.
Posté par
Ku'rei le
20 Mar - 12:41 (2011)Je suis désolé pour le double-post, je croyais que le grand message ne comptait pas, je ferais attention la prochaine fois.
Solfay : Ca sert à créer de pokémons qui se baladent de map en map comme Suicune, Entei, Raiku, Latios et Latias (mais rien ne t'empêche d'en faire d'autre)
Yuri : Je sais que c'est une petite partie d'un jeu, mais ça me plait beaucoup de poursuivre des pokémon comme ça. Et ça faciliterais la création de tels pokémons si le script était incorporé à PSP 50.7 ou 4G+) mais cela ne dépend pas de moi.
Tinei : Oui, c'est dommage, j'aimerais trouver une solution pour simplifier l'installation du script ...
Posté par
Tinei le
21 Mar - 09:06 (2011)Pas grave, j'attend la démo :D
Posté par
Ku'rei le
21 Mar - 20:12 (2011)Bah en fait, j'ai plusieurs script en réalisation, quand ils seront tous prêt je les installerais sur une version de PSP4G+ et la mettrait en téléchargement dans un topic.
Posté par
maror le
21 Mar - 20:18 (2011)Tu crois qu'il y a un moyen pour le mettre sur PSPDS?
Posté par
Ku'rei le
21 Mar - 21:22 (2011)Je ne sais pas, mais alors pas du tout... Je ne connais pas PSPDS, mais si les script n'ont pas trop variés d'une version à l'autre il ne devrait pas y avoir de problème.
Posté par
IamTheAdic le
23 Mar - 00:33 (2011)PSPDS est fait à partir de 0.7, donc les scripts sont différents. Fin bref je ne connais pas le 4G+ de Sphinxinou.
Posté par
Nuri Yuri le
23 Mar - 13:01 (2011)Dans PSP DS il y a certainement plus de fonctions dans la classe Pokémon.
Dans 4G+ il y a plus de fonctions, mais les ancienne n'ont pas vraiment changer donc ça devrais marcher et puis pour savoir si le script fonctionne faut tester.
Posté par
maror le
23 Mar - 20:57 (2011)j'ai testé mais quand je lâche le pokémon avec une des deux méthodes, je les trouves pas (pas de combat).
Posté par
Ku'rei le
24 Mar - 21:25 (2011)J'essaie de l'installer sur PSPDS, je tente de corriger le bug et j'édite.
PS : Y aurait-il des intéressé pour que le pokémon voyageur apparaisse sur la map ? Comme ceci :
Car l'installation du script est compliqué, il faut télécharger les chara pokémons. Mais si ça intéresse quelqu'un je modifie mon topic et je refait le tuto
EDIT : J'ai fais quelque test, notamment sur les trois façon de déterminer les maps où apparaissent les pokémons voyageurs. Si tu utilise une constante et d'autre id dans ta liste de map, il semblerait qu'il y ai des bugs.
Voilà, il faut transformer (dans la définition de la constante du pokémon) :
Code: |
"MAPS"=>[Maps_plaines, 45, 66] |
en :
Code: |
"MAPS"=>Maps_plaines + [45,66] |
En espérant que ce soit ça
EDIT 2 : C'est ça, et on a le même problème dans PSP4G+, merci maror
J'édite le sujet tout de suite
Posté par
maror le
25 Mar - 08:06 (2011)J'avoue que le pokémon voyageur sur la map serait marrant, se serait plus dure à l'attrapé, que si on voyage dans les hautes-herbes.
Sinon, j'ai pas trop compris le reste de se que tu as dit dans tes édits.
EDIT: Tu as raison (en fait j'ai compris), j'ai fait :
"MAPS"=>Ville + [11]
ça marche, même sur PSPDS
Merci pour l'aide Kureiji :D
EDIT2: (oui je sais, je suis embêtant)
Je lâche mon suicune j'ai fais le combat, il fuit, je sauvegarde et j'arrete, je reprend la partie, aucun moyen de le trouver, dans TOUTE les map où
j'ai mis pour qu'il apparaisse (une seul car je vien de tester), aucun combat contre le fuyard...
Posté par
Tinei le
25 Mar - 17:33 (2011) Kureiji a écrit: |
PS : Y aurait-il des intéressé pour que le pokémon voyageur apparaisse sur la map ? Comme ceci : |
Ça m’intéresse ! Merci !
Posté par
Ku'rei le
25 Mar - 20:11 (2011)à maror : Bon je crois savoir d'où vient le problème, les pokémon lâchés ne sont pas enregistrer ...
àTinei : Je règle le problème majeur de maror et je m'occupe de cette version du script.
EDIT:C'est un gros soucis que tu as découvert maror --' ... Ca va mettre plus de temps que prévue, à moins qu'un scripteur plus expérimenté m'aide...
EDIT 2 : J'y arrive pas désolé ... Faut demander de l'aide
EDIT 3 : J'y suis arrivé ! Alors il faut que tu copie/colle le nouveau script Pokemons_voyageurs (j'y ai juste ajouter quelques nouvelle fonctions) :
Code: |
#------------------------------------------------------------------------------- # --- Script: Pokemon_voyageurs - ©Kureiji - # --- Début :09/03/2011 --- Fin : 17/03/2011 - #------------------------------------------------------------------------------- module POKEMON_S #----------------------------------------------------------------------------- # Paramètres concernant la visibilité du pokémon voyageur sur la map #----------------------------------------------------------------------------- POK_VOY_VISIBLE = true #false si vous ne voulez pas que les pokémons voyageurs soient visibles sur la map où ils sont ID_MAP_EVENT_POK_VOY = 46 #a remplacer par l'ID de la map ou se trouve l'évent décrit dans le tuto ID_EVENT_POK_VOY = 9 # à remplacer par l'id de l'event dans la map où il se trouve POK_VOY_VAR_SAVE = 36 #----------------------------------------------------------------------------- # Liste de map appartenant à la même catégorie #----------------------------------------------------------------------------- Maps_plaines = [46,51,50] #----------------------------------------------------------------------------- # POKEMONS VOYAGEURS : "INDEX" : index du répertoire où sont stockées les informations sur le pokémon #----------------------------------------------------------------------------- LATIOS = {"INDEX" => "LATIOS","ID"=>"LATIOS","LVL"=>45,"SHINY"=>false, "SLOT"=>2, "MAPS"=>Maps_plaines,"TERRAINS"=>[1,7], "RARETE"=>30, "FUITE"=>true} LATIAS_SHINY = {"INDEX" => "LATIAS_SHINY", "ID"=>"LATIAS","LVL"=>45,"SHINY"=>true, "SLOT"=>1,"MAPS"=>Maps_plaines,"TERRAINS"=>[1,7], "RARETE"=>10, "FUITE"=>true} RACAILLOU_SHINY = {"INDEX" => "RACAILLOU_SHINY","ID"=>"RACAILLOU","LVL"=>40,"SHINY"=>true, "SLOT"=>3,"MAPS"=>Maps_plaines+[50],"TERRAINS"=>[1], "RARETE"=>80, "FUITE"=>false} SUICUNE = {"INDEX"=>"SUICUNE", "ID"=>"SUICUNE","LVL"=>50,"SHINY"=>false, "SLOT"=>4,"MAPS"=>[50], "TERRAINS"=>[1], "RARETE"=>25, "FUITE"=>true, "MUSIQUE"=>"PkmnCrystal_Raikou,Entei,Suicune.mid"}
class Pokemon_voyageur attr_accessor :index attr_accessor :id attr_accessor :level attr_accessor :shiny attr_accessor :slot attr_accessor :maps_f attr_accessor :terrains_f attr_accessor :fuite attr_accessor :musique attr_accessor :map_actuelle attr_accessor :terrain_actuel #---------------------------------------------------------------------------- #Création du pokémon voyageur (hash = {"INDEX","ID","LVL","SHINY","SLOT","MAPS" => [ARRAY],"TERRAINS" => [ARRAY] ,"RARETE",FUITE","VISIBLE","MAP DEPART"}) #Caractéristiques du pokémon #----------------------------------------------------------------------------- def initialize(hash) @index = hash["INDEX"] @id = hash["ID"] @level = hash["LVL"] @shiny = hash["SHINY"] @slot = hash["SLOT"] @maps_f = hash["MAPS"].flatten #Maps_fréquentées @terrains_f = hash["TERRAINS"] #Terrains_fréquentés @rarete = hash["RARETE"] @fuite = hash["FUITE"] @musique = hash["MUSIQUE"] @visible = hash["VISIBLE"] #Initialisation de la map d'apparition initiale if hash["MAP DEPART"] != nil @map_actuelle = hash["MAP DEPART"] else tab = hash["MAPS"] @map_actuelle = tab[rand(tab.size)] end #if #Ajout du pokémon à la liste des pokémons voyageurs, création de la variables si premier pokemon voyageur if $pokemons_voyageurs == nil $pokemons_voyageurs = {} end #if $pokemons_voyageurs[@index] = self #Création du pokémon voyageur @interpreter = Interpreter.new @interpreter.enregistrer_pokemon(@slot,@id,@level,@shiny) save_file
#NOTE : l'enregistrement du pokémon voyageur dans un slot se fait dans l'Interpreter #(à l'appel de la fonction "creer_pokemon_voyageur" end #initialize #----------------------------------------------------------------------------- # Enregistrement et récupération de données sur les pokémons voyageurs #----------------------------------------------------------------------------- def save_file slot = $game_variables[8] #Save slot save = "Data/Pokemon_voyageurs_slot_"+slot.to_s+".rxdata" file = File.open(save,"w") Marshal.dump($pokemons_voyageurs,file) file.close end #----------------------------------------------------------------------------- # Gestion des rencontres et des combats avec les pokémons voyageurs #----------------------------------------------------------------------------- def rencontre? if self.map_act_ok? and self.terrain_act_ok? and self.rarete_loc_ok? and not(POK_VOY_VISIBLE) return true else return false end end #rencontre? def rencontre_pok_voy $musique_combat_changee = @musique if @musique != nil $combat_contre_pokemon_fuyard = true if @fuite == true @interpreter.demarrer_combat_existant(@interpreter.appel_pokemon(@slot)) changement_map save_file end #rencontre_pok_voy #change @map_actuelle et @terrain_actuel def changement_map change_map end #changement_map def change_map if @maps_f.size > 1 #une seule map => on ne change pas de map maps = @maps_f-[@map_actuelle] @map_actuelle = maps[rand(maps.size)] end end #change_map #----------------------------------------------------------------------------- # Fonctions applicable à l'objet de classe Pokemon_voyageur #----------------------------------------------------------------------------- def map_act_ok? if $game_map.map_id == @map_actuelle return true end #if end #map_act_ok? def terrain_act_ok? if @terrains_f.include?($game_player.terrain_tag) return true end #if end #terrain_act_ok? def rarete_loc_ok? if rand(101) <= @rarete #101 car rand(101) appartient à [0;100], comme @rarete return true end #if end #rarete_loc_ok? def slot return @slot end def map_actuelle if @map_actuelle ==nil return nil else return @map_actuelle end end #-------------------------------------------------------------------------- # DETECTION SI LE POKEMON EST PLACABLE DANS LA MAP ET PLACEMENT SI TRUE #-------------------------------------------------------------------------- def detect_event_poke_voy if map_act_ok? and VISIBILITE == true and @visible == true create_event_pokemon_voyageur end end #-------------------------------------------------------------------------- # CREATION DE L'EVENT DU POKEMON VOYAGEUR SUR LA MAP #-------------------------------------------------------------------------- # Structure principale def create_event_pokemon_voyageur p = @interpreter.appel_pokemon(@slot) if p.dead? return end map = load_data(sprintf("Data/Map%03d.rxdata", $game_map.map_id)) events = map.events if events == nil return end for event in events.values if event.name == ("EVENT_POKEMON_VOYAGEUR_SLOT_" + @slot.to_s) return end end #Si l'event a déja été créer, on ne le recréer pas.
@coo = recherche_coordonnees if @coo != nil pokemon = @interpreter.appel_pokemon(@slot) @chara = to_chara_filename(pokemon) if @chara != nil and pokemon != nil @create = Create_Event_Pokemon_Voyageur.new(@coo,@index,@chara) end return @create end end #create_event_pokemon_voyageur # to_chara_filename retourne le nom du fichier de la forme "CHARA_POKEMONS/034s_0.png", ce fichier doit # être dans le dossier Characters/CHARA_POKEMONS et du format png def to_chara_filename(pokemon) id = pokemon.id if id.between?(1,9) id = "00" + id.to_s elsif id.between?(10,99) id = "0" + id.to_s elsif id.between?(100,999) id = id.to_s end if pokemon.shiny shiny = "s" else shiny ="" end #mise sous forme "CHARA_POKEMONS/019s_0.png" chara = "CHARA_POKEMONS/" + id.to_s + shiny.to_s + "_0.png" return chara end #to_chara_filename # Recherche de coordonnées valides : # - Pas d'event # - Tile Passable # - Terrain correspondant #Organisation des recherche de terrain : #_____________________________________________________ #| _____________________________________________ | #| | _____________________________________ | | Ca, c'est la map ... #| | | ______________________________ | | | #| | | | ETC ... | | | | #| | | 3 |____________________________| | | | #| | 4 |___________________________________| | | #| 5 |___________________________________________| | #_____________________________________________________ def recherche_coordonnees for zone in 1..3 coo = test_zone(zone) if coo != nil break end end return coo end #recherche de coordonnees # une zone est un rectangle dont les diagonales se coupent au centre de la map # height : hauteur de la map # width : largeur def test_zone(i) result = [] width = $game_map.width height = $game_map.height if i < 3 xf = width -1 xf *= i*3 - 1 xf /= i*3 yf = height -1 yf *= i*3 - 1 yf /= i*3 else xf = width yf = height end yd = (width - 1)/(i*3) yd = yd xd = (height - 1)/(i*3) xd = xd for y in yd..yf for x in xd..xf if good_coo?(x,y) result.push([x,y]) end x += 1 end y += 1 end return (result[rand(result.size)]) end #test_zone def good_coo?(x,y) if tile_passable?(x,y) if @terrains_f.include?($game_map.terrain_tag(x,y)) if not(event_detected?(x,y)) return true end end end return false end #good_coo? def tile_passable?(x,y) for a in 1..4 dir = a*4 if not($game_map.passable?(x,y,dir)) return false end end end def event_detected?(x,y) for event in $game_map.events.values if event.x == x and event.y == y return true end end return false end # event_detected?
end #class Pokemon_voyageur # Class permettant de copier l'event du pokémon voyageur # Il doit être situé dans une map du jeu, celle d'id : ID_MAP_EVENT_POK_VOY # et doit avoir l'id : ID_EVENT_POK_VOY # cf. début du script class Create_Event_Pokemon_Voyageur < Pokemon_voyageur #releve du copiage ... plus que de la création attr_accessor :index def initialize(coo, index, chara) @map = load_data(sprintf("Data/Map%03d.rxdata", ID_MAP_EVENT_POK_VOY)) # Les évènements de la map @events = @map.events @event_id = ID_EVENT_POK_VOY @coo = coo @index = index @chara = chara if @events[@event_id] == nil return elsif coo != nil create return @create end end def create event = @events[@event_id] event.x = @coo[0] event.y = @coo[1] event.id = search_new_id event.name = "EVENT_POKEMON_VOYAGEUR_" + @index event.pages[0].graphic.character_name = @chara event.pages[0].move_type = 1 event.pages[0].move_frequency = 5 event.pages[0].trigger = 1 @create = Game_Event.new($game_map.map_id,event) #Ajoute dans liste des évènements de la carte actuelle $game_map.events[event.id] = @create # Indique qu'on ajoute un Sprite $game_temp.add_event = true # ID de l'évènement pour le Sprite à ajouter $game_temp.id_add_event = event.id return @create end #create def search_new_id id = 1 while $game_map.events.include?(id) id += 1 end return id end #search_new_id end #Create_Event_Pokemon_Voyageur def search_new_id id = 1 while $game_map.events.include?(id) id += 1 end return id end
end #module POKEMON_S
#------------------------------------------------------------------------------- # Interpreter #-------------------------------------------------------------------------------
class Interpreter def creer_pokemon_voyageur(hash) Pokemon_voyageur.new(hash) end #creer_pokemon_voyageur alias lacher_pokemon_voyageur creer_pokemon_voyageur def creer_event_pok_voy(pokemon) pokemon.create_event_pokemon_voyageur end def pokemon_voyageur_event_fight x = $event_coo[0] y = $event_coo[1] for index in $pokemons_voyageurs.keys for event in $game_map.events.values if event.name == ("EVENT_POKEMON_VOYAGEUR_" + index) and event.x == x and event.y ==y pokemon = $pokemons_voyageurs[index] ok = true pokemon.rencontre_pok_voy break end end break if ok == true end end def search_pokemon_voyageur(name) name.delete!("EVENT_POKEMON_VOYAGEUR_") return $pokemons_voyageurs[name] end def add_event_coo(coo = 0, index = 0) $event_coo = [0,0] if $event_coo == nil case coo when "x" $event_coo[0] = $game_variables[index] when "y" $event_coo[1] = $game_variables[index] when 0 $event_coo = [0,0] end end def load_file_pok_voy if $pokemons_voyageurs == nil slot = $game_variables[8] save = "Data/Pokemon_voyageurs_slot_"+slot.to_s+".rxdata" if FileTest.exist?(save) file = File.open(save,"r") $pokemons_voyageurs = Marshal.load(file) file.close end end end
end #class Interpreter |
Et que tu ajoute cette ligne de code au dessus des modification daites au script Pokemon_Party :
Code: |
Interpreter.new.load_file_pok_voy |
Voici tout fonctionne correctement. J'ai plus qu'à installer ça dans le Topic
EDIT 4 : toute les modifications sont incorporé au topic et pour Tinei, j'ai aussi écris le Manuel d'installation du script gérant la visibilité sur la map du pokémon voyageur
Posté par
Sphinx le
27 Mar - 14:04 (2011) Kureiji a écrit: |
Code 1 : Code: | "MAPS"=>[Maps_plaines, 45, 66] |
Code 2 : Code: | "MAPS"=>Maps_plaines + [45,66] |
|
Voici la différence entre ces deux codes, et ce qui explique probablement les erreurs que tu as eu :
Résultat du code 1 : Code: |
[[12, 34, 24, 36, 47, 10, 53, 61, 35, 64, 65, 32, 98, 63], 45, 66]
|
Résultat du code 2 : Code: |
[12, 34, 24, 36,47,10,53,61,35,64,65,32,98,63, 45,66] |
D'ou des bugs de type NoMethodError ou encore TypeError :p
PS : Pour les constantes, je vous conseille vivement de les nommer entièrement en majuscule vos constantes (ma_variable, Ma_Classe, MA_CONSTANTE )
PS2 : ^^ Je suis impatient de voir une démo du système, parce qu'à mon avis ca vaudra le détour
Posté par
RevengeOfShadow le
27 Mar - 15:23 (2011)Excellent boulot, je vais intégrer ça au jeu Coeur de Platine.
EDIT: Bug à cette ligne :
Code: |
@terrains_f = hash["TERRAINS"] |
(Sur PSP DS) ...
Autre chose: j'ai vu que tu utilisais un fichier .rxdata dans DATA pour sauver les paramètres du pokémon. Si j'en prends un et que je le copie sur un autre PC avec le même jeu, le pokémon sera pareil ? Si oui comme ça je pourrais faire des évènements pour mon jeu !
Posté par
maror le
27 Mar - 16:20 (2011)génial, je vais tester ça pour voir si ça marche chez moi.
Posté par
Ku'rei le
27 Mar - 16:25 (2011)Sphinx : Dans l'initialize, j'utilisais .flatten! qui devait "aplatir" le tableau ... sauf que j'ai du mal comprendre la fonction ou juste que ça ne marche pas --' Et oui, utiliser des nom entièrement en majuscules c'est mieux pour les constantes (on voit le scripteur débutant là XP). Quand à la vidéo, je dois régler un dernier bug : le combat se déclanche quand le personnage est à moitié dans l'herbes et les combats peuvent se déclancher à la suite si plusieurs pokémons sont dans la même map :/
RL77LUC : Tout fonctionne bien sur PSPDS (cf. 4message plus haut), pour ton bug, soit tu as mal écris "TERRAINS" dans ton hash de définition du pokémon voyageur, soit tu a oublié d'écrire l'unique terrain sur lequel est le pokémon
Code: |
"TERRAINS"=>1 #est totalement différent de : "TERRAINS"=>[1] |
Si c'est autre chose, tu pourrais me donner le log d'erreur ? ou un screen de l'erreur ?
EDIT : Je pense que oui, mais attention ! N'ayant pas réussi a écrire dans la sauvegarde je créer un fichier "Pokemons_voyageurs_X.rxdata" par sauvegarde, X est le slot (numero) de la sauvegarde.
Posté par
RevengeOfShadow le
27 Mar - 16:50 (2011)Kureiji, merci de te pencher sur mon soucis, malheureusement, je n'ai même pas le temps de lancer le jeu, ça le fait juste après l'intro en noir. je n'ai pas défini de pokémons et ceux dans le script sont bien avec des crochets.
PS: Si tu veux rejoindre l'équipe de dev de pokémon CDP, y'a pas de soucis
.
Posté par
Ku'rei le
27 Mar - 16:58 (2011)C'est simpa de m'invité
Mais j'ai pas envie de me lancer dans un projet tout de suite, j'ai bien envie de mettre au point mon interface perso :D
Tu peut mettre le log ? ou un screen ? du bug, sans ça je peux rien faire :/
Posté par
maror le
27 Mar - 16:59 (2011)Le pokémon voyageur marche merci, mais pour qu'il soit en event, c'est moi qui est mal mis les scripts car à la ligne
if p.dead?
ça met une erreur des que je marche.---------- Erreur de script : Pokemon_voyageur ----------
----- Type
NoMethodError
----- Message
- ARGS - []
undefined method `dead?' for nil:NilClass
----- Position dans Pokemon_voyageur
Ligne 196
----- Backtrace
Script : Pokemon_voyageur | Ligne : 196 | Méthode : in `create_event_pokemon_voyageur'
Script : Game_Map | Ligne : 65 | Méthode : in `passable?'
Script : Game_Map | Ligne : 63 | Méthode : in `each_value'
Script : Game_Map | Ligne : 63 | Méthode : in `passable?'
Script : Game_Character | Ligne : 25 | Méthode : in `passable?'
Script : Game_Player | Ligne : 34 | Méthode : in `passable?'
Script : Follow me | Ligne : 137 | Méthode : in `move_left'
Script : Deplacement | Ligne : 16 | Méthode : in `update'
Script : Scene_Map | Ligne : 54 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 51 | Méthode : in `loop'
Script : Scene_Map | Ligne : 64 | Méthode : in `alias_update'
Script : MAPPANEL* | Ligne : 89 | Méthode : in `oldUpdate'
Script : Bouton_Rouge* | Ligne : 54 | Méthode : in `follow_me_update'
Script : Follow me | Ligne : 113 | Méthode : in `update'
Script : Scene_Map | Ligne : 29 | Méthode : in `main'
Script : Scene_Map | Ligne : 24 | Méthode : in `loop'
Script : Scene_Map | Ligne : 37 | Méthode : in `main'
Script : Main | Ligne : 59
Voila, sinon tout marche
.
Posté par
Nuri Yuri le
27 Mar - 17:15 (2011)Pokemon.dead est une variable et non une methode donc pas de "?" à la fin.
Mettez p.dead au lieu de p.dead?
Posté par
Ku'rei le
27 Mar - 17:24 (2011)Bien vu Yuri ! Je pensait que "dead?" était une fonction applicable aux objets de classe pokémon ... mais non, elle s'utilise dans "Insérer un script".
EDIT : Cependant, le log dis qu'on applique dead? à NilClass ... Donc le problème ne vient pas de là, je cherche.
EDIT2: Je viens de vérifié, on peut appliquer dead?, ça marche
Posté par
maror le
27 Mar - 19:27 (2011)Quoi? j'ai pas tout compris se que tu as dit... Il faut mettre juste dead c'est ça?
Posté par
RevengeOfShadow le
28 Mar - 06:16 (2011)Pour le log j'en ai pas. Pour le screen je peux t'en faire un mais tu verras rien de plus, il y a un simple 'Syntax Error' à la ligne indiquée au dessus ...
PS: Si tu as un peu de temps, tu pourrais m'aider, car je voudrais réaliser une interface avec le tuto de Palb' (toute bête, heure et argent uniquement ... pour le moment) sauf que ça fonctionne pas.
Posté par
Ku'rei le
28 Mar - 18:19 (2011)maror : les deux marchent
RL77 : bah je sais pas ... Je comprend pas ce bug => essaie de réinstaller le script :/
Posté par
maror le
28 Mar - 18:28 (2011)dac, meric encore, et super script
Posté par
RevengeOfShadow le
29 Mar - 20:15 (2011)OK, j'essayerai à l'occasion. Si tu es OK pour m'aider (un tout petit peu) sur l'interface, pourrais-tu m'envoyer un MP ? Merci en tous cas.
Posté par
Ku'rei le
30 Mar - 18:23 (2011)J'ai pas étudié cette interface... mais je vais le faire, de toute façon j'en ai besoin pour faire mon début de projet. Envoie moi ton probleme par MP je verrai ce que je peux faire
Posté par
RevengeOfShadow le
31 Mar - 06:18 (2011)Merci beaucoup !
Posté par
Sphinx le
31 Mar - 16:18 (2011) Juste par pure curiosité, tu prévois une démo ?
Posté par
Ku'rei le
31 Mar - 19:25 (2011)Si par démo tu entend une portion de jeu jouable, c'est en cours de making mais je ne peux pas trop trop maker en ce moment mon bac blanc approche
Posté par
Giratinaprimal le
9 Avr - 16:17 (2011)J'ai SyntaxError sur cette ligne (vers la 60) :
@terrains_f = hash["TERRAINS"] #Terrains_fréquentés
Cette erreur survient dès le démarrage.
Posté par
Ku'rei le
9 Avr - 19:28 (2011)Je ne comprend pas ce bug ... C'est la même syntaxe que les autres ligne et pourtant ...
Essaie de supprimer le '.flatten' de la ligne juste au-dessus, sinon, le souligné entre terrains et f ( 'terrain_f') a peut-être été remplacer par un espace tout bête --'
Sinon c'est autre chose
Posté par
Giratinaprimal le
9 Avr - 19:32 (2011)Ca s'arrange pas... La même ligne bugue après les modifs...
C'est bien un "_" et non pas un " " qui est présent pourtant.
Posté par
Ku'rei le
9 Avr - 20:55 (2011)Ben ... Je ne sais pas, désolé ... Essaie de réinstaller le script, mais je vois vraiment pas où est l'erreur de suntaxe --'
Posté par
Sphinx le
12 Avr - 16:02 (2011)Quel est le message d'erreur ?
Posté par
Giratinaprimal le
12 Avr - 16:19 (2011)Il dit : "Syntax Error" et la ligne buguée. Et c'est tout.
Posté par
Sphinx le
12 Avr - 18:09 (2011)Il ne te donne pas plus de détails ?
Posté par
Nuri Yuri le
12 Avr - 20:28 (2011)Généralement un syntaxe error ne se couronne pas d'un log vue que le script qui gère ça n'est pas actif.
Posté par
Giratinaprimal le
12 Avr - 23:00 (2011)Bon ben... tant pis...
Posté par
Sphinx le
16 Avr - 05:09 (2011) Yuri-岼 a écrit: |
Généralement un syntaxe error ne se couronne pas d'un log vue que le script qui gère ça n'est pas actif. |
Certes mais le message d'erreur contient - la plupart du temps - la réponse avec entre autre : la cause de l'erreur, le script qui la contient, ainsi que la ligne buggée. Ce sont ces détails qui m'intéressent
Posté par
Conan Edogawa le
8 Juin - 06:59 (2011)Bonjour
Kureiji,
J'ai installé ton script ,mais j' ai un bug.Le voici:
Et rien dans Log.
Posté par
Newtiteuf le
8 Juin - 20:50 (2011)Personnellement ... et sans avoir étudié pplus que ca le script, je dirais de remplacer
@terrains_f = hash["TERRAINS"]
par
@terrains_f = hash["TERRAINS"].flatten
Après advienne que pourra ... ce n'est qu'un hypothèses non fondée.
Posté par
Ku'rei le
11 Juin - 15:06 (2011)@Newtiteuf : Ce n'est pas possible que l'erreur vienne de là, car c'est une erreur de syntaxe. De plus, la variable @terrain_f n'a absolument rien à voir avec les script Pokemon_Battle_Core
@pikachu5000 : C'est normal qu'il n'y ai rien dans le log, par contre je ne vois pas ce qui bug ailleurs ... Mais comme c'est une erreur de syntaxe, ça doit être facile à repérer. Tu peux poster le morceau du script qui bug ? Genre de la ligne 2264(vers def launch_enemy_pokemon) à 2380 (vers def end_battle_flee). Sinon, je pense qu'il manque un end quelque part dans la fonction lauch_enemy_pokemon, je te laisse vérifier que le nombre d'ouverture (if, each, unless, ...) et le nombre de end est bon.
Posté par
Conan Edogawa le
15 Juil - 23:57 (2011)J'ai un bug
log:
---------- Erreur de script : Pokemon_Battle_Trainer ----------
----- Type
NoMethodError
----- Message
- ARGS - []
undefined method `dead?' for nil:NilClass
----- Position dans Pokemon_Battle_Trainer
Ligne 155
----- Backtrace
Script : Pokemon_Battle_Trainer | Ligne : 155 | Méthode : in `qu_initialize'
Script : Fonctions quêtes | Ligne : 26 | Méthode : in `initialize'
Script : Interpreter | Ligne : 62 | Méthode : in `new'
Script : Interpreter | Ligne : 62 | Méthode : in `call_battle_trainer'
Script : Interpreter Bis | Ligne : 181 | Méthode : in `command_301'
Script : Interpreter 2 | Ligne : 151 | Méthode : in `execute_command'
Script : Interpreter 1 | Ligne : 199 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 113 | Méthode : in `loop'
Script : Interpreter 1 | Ligne : 204 | Méthode : in `update'
Script : Scene_Map | Ligne : 51 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 48 | Méthode : in `loop'
Script : Scene_Map | Ligne : 67 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `old_update'
Script : TempsJourNuit | Ligne : 248 | Méthode : in `update_passminimap'
Script : Minimap | Ligne : 44 | Méthode : in `follow_me_update'
Script : Follow Me | Ligne : 99 | Méthode : in `update'
Script : Scene_Map | Ligne : 24 | Méthode : in `old_main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 29 | Méthode : in `old_main'
Script : TempsJourNuit | Ligne : 237 | Méthode : in `main_passminimap'
Script : Minimap | Ligne : 31 | Méthode : in `main'
Script : Main | Ligne : 49
Posté par
Ku'rei le
17 Juil - 20:08 (2011)Je sais pas d'où viens ce bug et je suis désolé de ne pas pouvoir t'aider car ça fait vraiment longtemps que je ne me suis pas plongé dans ce script et que j'ai beaucoup de travail sur mon projet... Désolé, dis moi quand se déclenche le bug, si ça cible bien je pourrais peut-être t'aider.
Posté par
Conan Edogawa le
22 Juil - 20:24 (2011)en lancant le jeu. :guillotine:
Posté par
arthurmaker le
25 Aoû - 20:44 (2011)Titre :
Plz, demo!Demo, pleaase *-*
I need this system for my game *u*
Posté par
Disccat le
16 Fév - 02:57 (2012)Titre :
Créer des Pokémons voyageurs visibles sur la map !Bonsoir, ou bonjour, on verra,
J'ai installé les deux premières parties du script (donc sans la version visible), et ça semble fonctionner nickel.
Le Pokémon est trouvé avec sa musique, il fuit, on le retrouve, on le blesse, on le paralyse, il fuit, on le retrouve, on le capture... Et là, on le retrouve encore avec ses blessures dans les hautes herbes... Je le mets KO, ne voulant pas le capturer infiniment, et la musique des combats semble ne plus se réinitialiser non plus pour la rencontre normale des Pokémon... De plus, la musique du lieu où le Pokémon apparait (je n'avais mis qu'un lieu) disparait quand on marche sur le tag terrain concerné.
Si tu peux trouver le problème vis à vis des musiques et du Pokémon réapparaissant, ce serait le top !
Et j'ajoute à cela une petite suggestion ; je modifie de temps en temps le taux de capture de certains Pokémon, rendre par exemple un Racaillou doré plus difficile à attraper que les Racaillou normaux, si tu vois ce que je veux dire, ce serait encore plus top ! ^^
Merci d'avoir retravaillé ce script, si je trouve encore des soucis techniques, je t'en fais part.
"travaille sous PSP_0.7"
Posté par
couga le
20 Avr - 12:44 (2012)Je ne sais pas si cela compte comme un "necropost" mais, possibilité de re-up les fichiers ou bien d'en divulguer le contenue pour y appliquer les même noms de fichiers ?