RMXP - Désactiver un script de la BDD via event

14 Réponses • 230 Vues

Bonjour tout le monde,

cela faisait longtemps que je n'avais pas posté sur le forum et je ne pouvais pas revenir sans une petit question ahaha :siffle:

Je m'explique: j'utilise un script pour recentrer les animation (je n'ai pas mon projet sous la main-là, il faudra que je le poste) hors combat.
Malheureusement, ça met le gaz dans les animations en combat :S
Ma question, serait de savoir si je pouvait, au début de mon event de combat, faire un disable "script" puis e réactiver ensuite.

J'espère que ma question a été assez claire  :mmh: J'essaierai de la compléter plus tard  :)
Vlad
Ma présentation sous un autre forum bien connu: http://pokemonorigins.xooit.org/t2013-Rem-un-informaticien-passionn-de-RPG.htm sous le pseudonyme "Rem"

Problème PSP Support Général

Nuri Yuri

HostMaster

Faudrait que tu nous montre ton script.
ln(yo) = <3
Yep, avec un peu de retard le voici :)

Script créé par Sihn

#===============================================================================
# Map_Anim
#-------------------------------------------------------------------------------
# Créé par Sihn
# Version: 1.0
#-------------------------------------------------------------------------------
# Ce script permet de réduire les animations jouées sur la map, afin de donner
# un effet plus réaliste.
# A l'inverse, les animations censées être en plein écran sont agrandies,
# toujours lorsqu'elles sont jouées sur la map.
# Les animations conservent leur taille normale durant les combats.
#-------------------------------------------------------------------------------
# Vous pouvez régler l'échelle du redimensionnement ci-dessous.
# ECHELLE_MAP est l'échelle des animations qui ne sont pas en plein écran.
# ECHELLE_SCREEN est l'échelle des animations qui sont en plein écran.
#===============================================================================

ECHELLE_MAP = 0.5
ECHELLE_SCREEN = 1

#-------------------------------------------------------------------------------
# Ce module va permettre aussi te réajuster l'emplacement d'une animation en fonction
# du monstre sur lequel on la lance
#-------------------------------------------------------------------------------

module RPG
 
  class Sprite < ::Sprite
   
    def animation_set_sprites(sprites, cell_data, position)
      for i in 0..15
        sprite = sprites[i]
        pattern = cell_data[i, 0]
        if sprite == nil or pattern == nil or pattern == -1
          sprite.visible = false if sprite != nil
          next
        end
        sprite.visible = true
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        if position == 3
          if $scene.is_a?(Scene_Battle)
            sprite.x = self.viewport.rect.width / 2
            sprite.y = self.viewport.rect.height - 160
          else
            sprite.x = 320
            sprite.y = 240
          end
        else
          sprite.x = self.x - self.ox + self.src_rect.width / 2
          sprite.y = self.y - self.oy + self.src_rect.height / 2
          sprite.y -= self.src_rect.height / 4 if position == 0
          sprite.y += self.src_rect.height / 4 if position == 2
   
          #Modification pour le monstre du lac
          if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
            if self.battler.id == 36
              sprite.x -= 60
              sprite.y += 140
            end
          end
        end         
        if $scene.is_a?(Scene_Map) and position != 3
          sprite.x += (cell_data[i, 1] * ECHELLE_MAP)
          sprite.y += (cell_data[i, 2] * ECHELLE_MAP)
        else
          if $scene.is_a?(Scene_Map)
            sprite.x += (cell_data[i, 1] * ECHELLE_SCREEN)
            sprite.y += (cell_data[i, 2] * ECHELLE_SCREEN)
          else
            sprite.x += cell_data[i, 1]
            sprite.y += cell_data[i, 2]
          end
        end
        sprite.z = 2000
        sprite.ox = 96
        sprite.oy = 96
        sprite.zoom_x = cell_data[i, 3] / 100.0
        sprite.zoom_y = cell_data[i, 3] / 100.0
        if $scene.is_a?(Scene_Map) and position != 3
          sprite.zoom_x *= ECHELLE_MAP
          sprite.zoom_y *= ECHELLE_MAP
        else
          sprite.zoom_x *= ECHELLE_SCREEN if $scene.is_a?(Scene_Map)
          sprite.zoom_y *= ECHELLE_SCREEN if $scene.is_a?(Scene_Map)
        end
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
        sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
        sprite.blend_type = cell_data[i, 7]
      end
    end
  end
 
end
Vlad
Ma présentation sous un autre forum bien connu: http://pokemonorigins.xooit.org/t2013-Rem-un-informaticien-passionn-de-RPG.htm sous le pseudonyme "Rem"

Nuri Yuri

HostMaster

Essaie ça :
#===============================================================================
# Map_Anim
#-------------------------------------------------------------------------------
# Créé par Sihn
# Version: 1.0
#-------------------------------------------------------------------------------
# Ce script permet de réduire les animations jouées sur la map, afin de donner
# un effet plus réaliste.
# A l'inverse, les animations censées être en plein écran sont agrandies,
# toujours lorsqu'elles sont jouées sur la map.
# Les animations conservent leur taille normale durant les combats.
#-------------------------------------------------------------------------------
# Vous pouvez régler l'échelle du redimensionnement ci-dessous.
# ECHELLE_MAP est l'échelle des animations qui ne sont pas en plein écran.
# ECHELLE_SCREEN est l'échelle des animations qui sont en plein écran.
#===============================================================================
 
ECHELLE_MAP = 0.5
ECHELLE_SCREEN = 1
 
#-------------------------------------------------------------------------------
# Ce module va permettre aussi te réajuster l'emplacement d'une animation en fonction
# du monstre sur lequel on la lance
#-------------------------------------------------------------------------------
 
module RPG
 
  class Sprite < ::Sprite
    alias psdk_animation_set_sprites animation_set_sprites
    def animation_set_sprites(sprites, cell_data, position)
      return psdk_animation_set_sprites(sprites, cell_data, position) if $game_temp.in_battle
      for i in 0..15
        sprite = sprites[i]
        pattern = cell_data[i, 0]
        if sprite == nil or pattern == nil or pattern == -1
          sprite.visible = false if sprite != nil
          next
        end
        sprite.visible = true
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        if position == 3
          if $scene.is_a?(Scene_Battle)
            sprite.x = self.viewport.rect.width / 2
            sprite.y = self.viewport.rect.height - 160
          else
            sprite.x = 320
            sprite.y = 240
          end
        else
          sprite.x = self.x - self.ox + self.src_rect.width / 2
          sprite.y = self.y - self.oy + self.src_rect.height / 2
          sprite.y -= self.src_rect.height / 4 if position == 0
          sprite.y += self.src_rect.height / 4 if position == 2
   
          #Modification pour le monstre du lac
          if $game_temp.in_battle and self.battler.is_a?(Game_Enemy)
            if self.battler.id == 36
              sprite.x -= 60
              sprite.y += 140
            end
          end
        end       
        if $scene.is_a?(Scene_Map) and position != 3
          sprite.x += (cell_data[i, 1] * ECHELLE_MAP)
          sprite.y += (cell_data[i, 2] * ECHELLE_MAP)
        else
          if $scene.is_a?(Scene_Map)
            sprite.x += (cell_data[i, 1] * ECHELLE_SCREEN)
            sprite.y += (cell_data[i, 2] * ECHELLE_SCREEN)
          else
            sprite.x += cell_data[i, 1]
            sprite.y += cell_data[i, 2]
          end
        end
        sprite.z = 2000
        sprite.ox = 96
        sprite.oy = 96
        sprite.zoom_x = cell_data[i, 3] / 100.0
        sprite.zoom_y = cell_data[i, 3] / 100.0
        if $scene.is_a?(Scene_Map) and position != 3
          sprite.zoom_x *= ECHELLE_MAP
          sprite.zoom_y *= ECHELLE_MAP
        else
          sprite.zoom_x *= ECHELLE_SCREEN if $scene.is_a?(Scene_Map)
          sprite.zoom_y *= ECHELLE_SCREEN if $scene.is_a?(Scene_Map)
        end
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
        sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
        sprite.blend_type = cell_data[i, 7]
      end
    end
  end
 
end
ln(yo) = <3
Merci d'avoir prit le temps de modifier le script  :)
Malheureusement, maintenant, le "cadre" des animations apparaît lors des combats:

Le même que celui en rouge dans mon screen, sauf qu'il apparaît en blanc. Je ne sais pas si j'ai été bien clair  ;|

« Modifié: 09 septembre 2019, 09:39:24 par vladandgaret »

Vlad
Ma présentation sous un autre forum bien connu: http://pokemonorigins.xooit.org/t2013-Rem-un-informaticien-passionn-de-RPG.htm sous le pseudonyme "Rem"

Nuri Yuri

HostMaster

WTF ?
ln(yo) = <3
Voici un exemple typique de mon problème:

Vlad
Ma présentation sous un autre forum bien connu: http://pokemonorigins.xooit.org/t2013-Rem-un-informaticien-passionn-de-RPG.htm sous le pseudonyme "Rem"

Nuri Yuri

HostMaster

Mais c'est un combat sous PSP '^' ?
ln(yo) = <3
Oui oui, sous PSP 0.9.2 Remastered  :mmh:
Vlad
Ma présentation sous un autre forum bien connu: http://pokemonorigins.xooit.org/t2013-Rem-un-informaticien-passionn-de-RPG.htm sous le pseudonyme "Rem"

Nuri Yuri

HostMaster

Ah, bah dans ce cas je peux pas plus t'aider x)
ln(yo) = <3

Amras Anárion

Scénariste

C'est pour cela qu'on demande de préciser le starter kit utilisé pour les topics de demande d'aide. :)
(En tout cas, c'est joli ton battleback.)
Oui, pardon, je n'avais pas vu que j'avais oublié de le préciser le ST  :siffle:
Merci Amras pour le battleback. L'aspect graphique des interface est encore en réflexion/test, mais ça viendra  :)
Merci à toi aussi Nuri d'avoir prit le temps de regarder mon pb  :3
Vlad
Ma présentation sous un autre forum bien connu: http://pokemonorigins.xooit.org/t2013-Rem-un-informaticien-passionn-de-RPG.htm sous le pseudonyme "Rem"

Metaiko

Graphiste

Retire ce script et rend-toi dans le script Module RPG :
Vers la ligne 205, tu as :
sprite.x = self.x - self.ox + self.src_rect.width / 2
          sprite.y = self.y - self.oy + self.src_rect.height / 2
          sprite.y -= self.src_rect.height / 4 if position == 0
          sprite.y += self.src_rect.height / 4 if position == 2
ajoute en-dessous :
if not $battle_var.in_battle
#décallage de l'animation si on est hors combats
sprite.x += N #Remplace N par le décallage sur l'axe x de l'animation
sprite.y += M #Remplace M par le décallage sur l'axe y de l'animation
end
OUCH, ça me plante le jeu dès le chargement d'une map:

---------- Erreur de script : Module RPG ----------
----- Type
NameError

----- Message
uninitialized constant RPG::Sprite::N

----- Position dans Module RPG
Ligne 211

----- Backtrace
Script : Module RPG | Ligne : 211 | Méthode : in `animation_set_sprites'
Script : Module RPG | Ligne : 185 | Méthode : in `each'
Script : Module RPG | Ligne : 185 | Méthode : in `animation_set_sprites'
Script : Loading | Ligne : 1 | Méthode : in `update_animation'
Script : Module RPG | Ligne : 77 | Méthode : in `animation'
Script : Sprite_Character | Ligne : 93 | Méthode : in `reflect_update'
Script : Sprite_Reflection | Ligne : 209 | Méthode : in `update'
Script : Sprite_Character | Ligne : 53 | Méthode : in `reflect_initialize'
Script : Sprite_Reflection | Ligne : 203 | Méthode : in `initialize'
Script : MAPLINK | Ligne : 126 | Méthode : in `new'
Script : MAPLINK | Ligne : 126 | Méthode : in `follow_me_initialize'
Script : MAPLINK | Ligne : 125 | Méthode : in `each'
Script : MAPLINK | Ligne : 125 | Méthode : in `follow_me_initialize'
Script : Follow Me | Ligne : 105 | Méthode : in `initialize'
Script : Scene_Map | Ligne : 192 | Méthode : in `new'
Script : Scene_Map | Ligne : 192 | Méthode : in `follow_me_transfer_player'
Script : Follow Me | Ligne : 118 | Méthode : in `transfer_player'
Script : Scene_Map | Ligne : 55 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map | Ligne : 59 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `old_update'
Script : Système Jour/Nuit | Ligne : 248 | Méthode : in `follow_me_update'
Script : Follow Me | Ligne : 123 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `old_main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `old_main'
Script : Système Jour/Nuit | Ligne : 237 | Méthode : in `main'
Script : Main | Ligne : 57

 :mmh:

Mais n'y a-t-il pas un moyen de ne justement pas toucher aux script mais de tout simplement en désactiver un via un event ou event commun?  :mmh: :<

« Modifié: 15 septembre 2019, 19:46:18 par vladandgaret »

Vlad
Ma présentation sous un autre forum bien connu: http://pokemonorigins.xooit.org/t2013-Rem-un-informaticien-passionn-de-RPG.htm sous le pseudonyme "Rem"

Metaiko

Graphiste

Tu n'as pas remplacé N et M par des valeurs (comme suggéré dans les commentaires) ^^. Non tu ne peux pas désactiver l'exécution d'un script via event ^^' . Le problème de ton script c'est qu'il est basé sur le système d'animations de base de RMXP, il remplace donc complètement celui de PSP. Faudrait le réécrire entièrement pour l'adapter à PSP ^^

« Modifié: 15 septembre 2019, 20:59:58 par Metaiko »


There was an error while thanking
Thanking...