Sujet n°809
Posté par Solfay1 le 14 Mai - 15:11 (2008)
Titre : Reflet dans l'eau
bonjour bonjours je croit que tout le mode cherche ce script ???? en parcourant google je suis tomber sur sa ( c'est la que j'ai trouver ce tuto)http://www.rpg-maker.fr/
Voilaaa :

faites un évènement ayant comme commentaire :

- hero_r pour mettre le reflet du héros

- r pour mettre le reflet d'un évènement quelconque.

Pour afficher le reflet, allez dans la base de données et ensuite dans "gestion de chipset". Sélectionnez le tileset, cliquez sur "Terrain" et mettez "7" pour le carreau où vous voulez qu'il y est un reflet. Par exemple, mettez "7" sur le carreau représentant l'eau pour avoir un reflet dans l'eau (comme l'image ci-dessus)

Mettez le dans un nouveau script

Portion de code:
Code:
#==============================================================================
# ■ Sprite_Reflection
# Based on Sprite_Mirror, Modified By: JmsPlDnl, rewritten entirely by Rataime
#==============================================================================
CATERPILLAR_COMPATIBLE = true

class Game_Party
  attr_reader :characters
end

class Sprite_Reflection < RPG::Sprite

 attr_accessor :character

 def initialize(viewport=nil, character=nil,self_angle = 180)
   super(viewport)
   @character = character
   @self_angle=self_angle
   self.opacity=0
   @reflected=false
   @former=false
   @moving=false
   if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)==7
     @reflected=true
     @former=true
   end
   update
 end

 def update
   super
   if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_hue != @character.character_hue
     @tile_id = @character.tile_id
     @character_name = @character.character_name
     @character_hue = @character.character_hue
     if @tile_id >= 384
       self.bitmap = RPG::Cache.tile($game_map.tileset_name,
         @tile_id, @character.character_hue)
       self.src_rect.set(0, 0, 32, 32)
       self.ox = 16
       self.oy = 32
     else
       self.bitmap = RPG::Cache.character(@character.character_name,
         @character.character_hue)
       @cw = bitmap.width / 4
       @ch = bitmap.height / 4
       self.ox = @cw / 2
       self.oy = @ch
     end
   end
   
   self.visible = (not @character.transparent)
   if @tile_id == 0
     sx = (@character.pattern) * @cw
     sy = (@character.direction - 2) / 2 * @ch
     if @character.direction== 6
           sy = ( 4- 2) / 2 * @ch
     end
     if @character.direction== 4
           sy = ( 6- 2) / 2 * @ch
    end
    if @character.direction != 4 and @character.direction != 6
          sy = (@character.direction - 2) / 2 * @ch
    end
   end
   
   self.x = @character.screen_x
   self.y = @character.screen_y-5
   @moving=!(@character.real_x%128==0 and @character.real_y%128==0)
   @d=@character.direction
   @rect=[sx, sy, @cw, @ch„
   if !(@moving)
     if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)==7 
       @reflected=true
       @former=true
     else
       @reflected=false  
       @former=false
     end
     
   else
       case @d
       
       when 2
       if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+2)==7
         @reflected=true
         if @former==false
           @offset = (@character.screen_y%32)*@ch/32
           @rect=[sx, sy, @cw, @offset„
           self.y=@character.screen_y-5
         end
       else
         @reflected=false  
       end
       
       when 4
       if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)!=7
         @offset = ((@character.screen_x-@cw/2)%32)*@cw/32
         @rect=[sx, sy, @offset, @ch„
         self.x=@character.screen_x
       else
         @reflected=true
         if @former==false
           @offset = ((@character.screen_x-@cw/2)%32)*@cw/32
           @rect=[sx+@offset, sy, @cw-@offset, @ch„
           self.x=@character.screen_x-@offset
         end
       end
       
       when 6
       if $game_map.terrain_tag(@character.real_x/128+1,@character.real_y/128+1)!=7
         @offset = ((@character.screen_x-@cw/2)%32)*@cw/32
         @rect=[sx+@offset, sy, @cw-@offset, @ch„
         self.x=@character.screen_x-@offset
       else
         @reflected=true
         if @former==false
           @offset = ((@character.screen_x-@cw/2)%32)*@cw/32
           @rect=[sx, sy, @offset, @ch„
           self.x=@character.screen_x
         end
       end
       
       when 8
       if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+2)==7
         @reflected=true
         if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)!=7
           @offset = (@character.screen_y%32)*@ch/32
           @rect=[sx, sy, @cw, @offset„
           self.y=@character.screen_y-5
         end
       else
         @reflected=false  
       end
       
       end

   end
   if @reflected
     self.opacity=128
   else
    @rect=[sx, sy, @cw, @ch„
    self.opacity=0
   end
   
   if $game_map.terrain_tag((@character.real_x+64)/128,@character.real_y/128+2)!=7
     if $game_map.terrain_tag((@character.real_x+64)/128,@character.real_y/128+2)!=7
       @rect[1„= @rect[1„+@ch/2
       @rect[3„= @rect[3„/2
       self.y = self.y - @ch/2
     else
       @reflected=false
     end
   end
     
   self.src_rect.set(@rect[0„,@rect[1„,@rect[2„,@rect[3„)
   
   @character.is_a?(Game_Player) ? self.z = 9 : self.z = 5
   self.blend_type = @character.blend_type
   self.bush_depth = @character.bush_depth
   if @character.animation_id != 0
     animation = $data_animations[@character.animation_id„
     animation(animation, true)
     @character.animation_id = 0
   end

   self.angle = @self_angle
 end
end

#===================================================
# ▼ CLASS Sprite_Character edit
#===================================================

class Sprite_Character < RPG::Sprite
  alias reflect_initialize initialize
  
  def initialize(viewport, character = nil)
    @character = character
    @reflection = [„
    super(viewport)
    if (character.is_a?(Game_Event) and character.list!=nil and character.list[0„.code == 108 and character.list[0„.parameters == ["r"„)
     @reflection.push(Sprite_Reflection.new(viewport,@character))
    end
    if (character.is_a?(Game_Event) and character.list!=nil and character.list[0„.code == 108 and character.list[0„.parameters == ["hero_r"„)
     @reflection.push(Sprite_Reflection.new(viewport,$game_player))
#===================================================
# ● Compatibility with fukuyama's caterpillar script
#===================================================
if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil

  for member in $game_party.characters
    @reflection.push(Sprite_Reflection.new(viewport,member))
  end

end
#===================================================
# ● End of the compatibility
#===================================================
    end
    reflect_initialize(viewport, @character)
  end
  
  alias reflect_update update
  
  def update
   reflect_update
   if @reflection!=nil
     for reflect in @reflection
       reflect.update
     end
   end
  end
  
end






Posté par Slash le 14 Mai - 16:22 (2008)
script intéressant mais avec beaucoup d'erreur que je me suis permis de modifier
donc voic la modification :
Spoiler

Code:
#============================================================================== # ■ Sprite_Reflection 
# Based on Sprite_Mirror, Modified By: JmsPlDnl, rewritten entirely by Rataime 
#============================================================================== 
CATERPILLAR_COMPATIBLE = true 
class Game_Party 
  attr_reader :characters 
end 
class Sprite_Reflection < RPG::Sprite 
 attr_accessor :character 
 def initialize(viewport=nil, character=nil,self_angle = 180) 
   super(viewport) 
   @character = character 
   @self_angle=self_angle 
   self.opacity=0 
   @reflected=false 
   @former=false 
   @moving=false 
   if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)==7 
     @reflected=true 
     @former=true 
   end 
   update 
 end 
 def update 
   super 
   if @tile_id != @character.tile_id or 
      @character_name != @character.character_name or 
      @character_hue != @character.character_hue 
     @tile_id = @character.tile_id 
     @character_name = @character.character_name 
     @character_hue = @character.character_hue 
     if @tile_id >= 384 
       self.bitmap = RPG::Cache.tile($game_map.tileset_name, 
         @tile_id, @character.character_hue) 
       self.src_rect.set(0, 0, 32, 32) 
       self.ox = 16 
       self.oy = 32 
     else 
       self.bitmap = RPG::Cache.character(@character.character_name, 
         @character.character_hue) 
       @cw = bitmap.width / 4 
       @ch = bitmap.height / 4 
       self.ox = @cw / 2 
       self.oy = @ch 
     end 
   end 
    
   self.visible = (not @character.transparent) 
   if @tile_id == 0 
     sx = (@character.pattern) * @cw 
     sy = (@character.direction - 2) / 2 * @ch 
     if @character.direction== 6 
           sy = ( 4- 2) / 2 * @ch 
     end 
     if @character.direction== 4 
           sy = ( 6- 2) / 2 * @ch 
    end 
    if @character.direction != 4 and @character.direction != 6 
          sy = (@character.direction - 2) / 2 * @ch 
    end 
   end 
    
   self.x = @character.screen_x 
   self.y = @character.screen_y-5 
   @moving=!(@character.real_x%128==0 and @character.real_y%128==0) 
   @d=@character.direction 
   @rect=[sx, sy, @cw, @ch]
  if !(@moving) 
     if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)==7  
       @reflected=true 
       @former=true 
     else 
       @reflected=false   
       @former=false 
     end 
      
   else 
       case @d 
        
       when 2 
       if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+2)==7 
         @reflected=true 
         if @former==false 
           @offset = (@character.screen_y%32)*@ch/32 
           @rect=[sx, sy, @cw, @offset]
           [url=mailto:self.y=@character.screen_y-5]self.y=@character.screen_y-5[/url] 
         end 
       else 
         @reflected=false   
       end 
        
       when 4 
       if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)!=7 
         @offset = ((@character.screen_x-@cw/2)%32)*@cw/32 
         @rect=[sx, sy, @offset, @ch]
         [url=mailto:self.x=@character.screen_x]self.x=@character.screen_x[/url] 
       else 
         @reflected=true 
         if @former==false 
           @offset = ((@character.screen_x-@cw/2)%32)*@cw/32 
           @rect=[sx+@offset, sy, @cw-@offset, @ch]
           [url=mailto:self.x=@character.screen_x-@offset]self.x=@character.screen_x-@offset[/url] 
         end 
       end 
        
       when 6 
       if $game_map.terrain_tag(@character.real_x/128+1,@character.real_y/128+1)!=7 
         @offset = ((@character.screen_x-@cw/2)%32)*@cw/32 
         @rect=[sx+@offset, sy, @cw-@offset, @ch]
         [url=mailto:self.x=@character.screen_x-@offset]self.x=@character.screen_x-@offset[/url] 
       else 
         @reflected=true 
         if @former==false 
           @offset = ((@character.screen_x-@cw/2)%32)*@cw/32 
           @rect=[sx, sy, @offset, @ch]
           [url=mailto:self.x=@character.screen_x]self.x=@character.screen_x[/url] 
         end 
       end 
        
       when 8 
       if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+2)==7 
         @reflected=true 
         if $game_map.terrain_tag(@character.real_x/128,@character.real_y/128+1)!=7 
           @offset = (@character.screen_y%32)*@ch/32 
           @rect=[sx, sy, @cw, @offset]
           [url=mailto:self.y=@character.screen_y-5]self.y=@character.screen_y-5[/url] 
         end 
       else 
         @reflected=false   
       end 
        
       end 
   end 
   if @reflected 
     self.opacity=128 
   else 
    @rect=[sx, sy, @cw, @ch]
    self.opacity=0 
   end 
    
   if $game_map.terrain_tag((@character.real_x+64)/128,@character.real_y/128+2)!=7 
     if $game_map.terrain_tag((@character.real_x+64)/128,@character.real_y/128+2)!=7 
       @rect[1]= @rect[1]+@ch/2 
       @rect[3]= @rect[3]/2 
       self.y = self.y - @ch/2 
     else 
       @reflected=false 
     end 
   end 
      
   self.src_rect.set(@rect[0],@rect[1],@rect[2],@rect[3]) 
    
   @character.is_a?(Game_Player) ? self.z = 9 : self.z = 5 
   self.blend_type = @character.blend_type 
   self.bush_depth = @character.bush_depth 
   if @character.animation_id != 0 
     animation = $data_animations[@character.animation_id]
     animation(animation, true) 
     @character.animation_id = 0 
   end 
   self.angle = @self_angle 
 end 
end 
#=================================================== 
# ▼ CLASS Sprite_Character edit 
#=================================================== 
class Sprite_Character < RPG::Sprite 
  alias reflect_initialize initialize 
   
  def initialize(viewport, character = nil) 
    @character = character 
    @reflection = []
    super(viewport) 
    if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["r"]) 
     @reflection.push(Sprite_Reflection.new(viewport,@character)) 
    end 
    if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["hero_r"]) 
     @reflection.push(Sprite_Reflection.new(viewport,$game_player)) 
#=================================================== 
# ● Compatibility with fukuyama's caterpillar script 
#=================================================== 
if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil 
  for member in $game_party.characters 
    @reflection.push(Sprite_Reflection.new(viewport,member)) 
  end 
end 
#=================================================== 
# ● End of the compatibility 
#=================================================== 
    end 
    reflect_initialize(viewport, @character) 
  end 
   
  alias reflect_update update 
   
  def update 
   reflect_update 
   if @reflection!=nil 
     for reflect in @reflection 
       reflect.update 
     end 
   end 
  end 
   
end




Posté par Brendan75 le 14 Mai - 16:22 (2008)
J'ai pas compris les histoires d'événement :cry:
tu peut me réespliquer (et mettre des screen) s'il te plait

Posté par Slash le 14 Mai - 16:48 (2008)
pour les event : tu créé sur chaque map ou tu a de l'eau 1 evt en processus parallele
et tu ecrit ds celui ci un commentaire avec



Code:
hero_r



Affiche le reflet du héros dansl'eau
et dans tes evt de perso tu met un commentaire au debut ou tu ecrit  



Code:




affiche le reflet des evt dans l'eau

et voici le résultat :

Posté par Brendan75 le 14 Mai - 16:52 (2008)
Ok j'ai tous compris :D !!
merci!

Posté par FdRstar le 14 Mai - 17:55 (2008)
Bizarre ...
Avec moi il y a 1 erreur :
"Syntax error" à la ligne 86.

Posté par Slash le 14 Mai - 17:59 (2008)
fait voir la ligne 85, 86 et 87 stp Fdstar
c'est peut etre une loprie de crochet qui passe pas
au fait, ce script est ajouté a PSP4G 1.4 si tu ne vois pas d'inconveignant Gobou

Posté par FdRstar le 14 Mai - 18:01 (2008)
Les voici :



Code:

           @rect=[sx, sy, @cw, @offset]
           [url=mailto:self.y=@character.screen_y-5]self.y=@character.screen_y-5[/url] 
         end 
 


J'espère que tu trouveras le problème.

Posté par Slash le 14 Mai - 18:10 (2008)
t' a touché a quelque chose dans le script ?
car moi j'ai pas ca a ces lignes

prenle script que j'ai modifié
ou remplace par ca :




Code:
  @rect=[sx, sy, @cw, @offset]   
 self.y=@character.screen_y-5 


  end  










et dit moi si ca marche

Posté par Solfay1 le 15 Mai - 12:13 (2008)
c'est pas mon script ^^' slash53 donc merci de l'avoir améliorer !

Posté par FdRstar le 15 Mai - 17:26 (2008)
Cette fois-ci ,il y a un problème à la ligne 104, voici les lignes 103, 104 et 105 :


 
 
Code:
         @rect=[sx, sy, @offset, @ch]
         [url=mailto:self.x=@character.screen_x]self.x=@character.screen_x[/url]
       else  

Je pense que ça vient de la balise "[/url]" à la fin...

Posté par Slash le 15 Mai - 17:32 (2008)
meme souci cest le [url= mil to.... qui deconne
c'est bizarre que ca t'est ecrit des truc comme ca dans le script.
je pense que meme en corrigeant tu va retomber plus loin sur le meme souci donc pour t'expliquer la demarche géneral, tu doit suprimer:

Code:
[url = mail to ............]
 

puis tu garde ce qu'il y'a ensuite : ligne de code

puis tu suprimme :
Code:
[/url]
 

Posté par FdRstar le 15 Mai - 17:42 (2008)
Ca marche parfaitement mais ...
Il n'y aurait pas une méthode moins couteuse en événement car là ca rame à mort...
Et aussi pour les PNJ le reflet ne s'affiche pas.

Posté par Solfay1 le 17 Mai - 22:02 (2008)
bon voila j'ai trouvé un autre tuto : http://rpgmakerxpprojet.centerblog.net/
PS : les démo sont les bienvenues !

Posté par valpokbest le 18 Mai - 08:09 (2008)
slash53 a écrit:
et voici le résultat :


Le seul défaut c'est que le reflet se fait aussi sur le bord :mdr:

Posté par Droledami le 18 Mai - 08:15 (2008)
J'avais pas remarqué...

Posté par valpokbest le 18 Mai - 08:18 (2008)
Pourtant c'est bien visible.

Slash=>Au fait dans un autre de tes scripts j'ai un truc mailto qui me fait buguer le script donc je dois l'enlever c'est ça?

Posté par Slash le 18 Mai - 10:59 (2008)
oui oui comme j'ai expliqué précedemment

Posté par bibiantonio le 25 Mai - 13:24 (2008)
c'est trés bien fait et en plus c'est intégrés à psp 4G v1.4 ^^

Posté par Pio le 25 Mai - 14:34 (2008)
et pour voir les reflets, dès qu'il ya de l'eau ou faut mettre des events ?

Posté par Dark' le 25 Mai - 15:12 (2008)
Slash à tout expliqué... Tu met UN event pour le héros, avec le commentaire approprié, et un commentaire sur chacun de tes CPU.

Posté par Newtiteuf le 31 Mai - 12:58 (2008)
J'ai une erreur ligne 151 !

Posté par Suicune31 le 12 Aoû - 20:11 (2008)
On pe pas faire bouger le reflet Sur l'eau ?. comme des vagues ? :(

Posté par Happy le 23 Aoû - 01:27 (2008)
Heu,j'utilise PSP4G,j'ai crée un evenement en processus parellèle,j'ai decoché animé quand il se déplace,mais je n'ai pas de reflet...

Posté par Louro le 24 Aoû - 21:04 (2008)
C'est vrai qu'un script de reflet avec les 4 directions qui sont fausses, c'est très intéressant.

De face/dos : image inversée
De profil : mauvais pattern, si un gars a une epaulette à gauche par exemple, elle appaitra sur le reflet quand il est tourné vers la droite, au lieu de la gauche.

Donc si les persos sont pas symétriques, ben ça fait un effet assez gênant.

Bref, à revoir quoi.

Posté par mogura le 4 Sep - 18:33 (2008)
moi il marche pas ton script desolé

Posté par Slash le 4 Sep - 20:18 (2008)
telecharge PSP4G mogura mais je crois que tu l'a deja
ce script est intégré deja dedans

Posté par mogura le 4 Sep - 20:20 (2008)
désoler je suis désoler en fait je me suis trompé comme une M..... .  Clin d'œil foireux

Posté par Happy le 4 Sep - 22:41 (2008)
Moi non plus marche pas...

Posté par Ink' le 18 Sep - 12:38 (2008)
S'il ne marche pas, c'est que vous avez mal suivi les commandes à faire Clin d'œil foireux.

Pour éviter le rebord, rien de plus simple. Mettez l'eau en première couche, et le rebord en seconde. Seule l'eau reflètera.

A noter que ce script a toujours été décrié par les scripteurs, car il est bugué sur plusieurs points que je ne saurai citer, étant absolument moisi en rubying...
Il me semble qu'un script de torsion de reflet (ou "ondes", je ne sais plus en quel terme cela avait été désigné) a été posté sur mon forum de making. Je chercherai à l'occasion, mais je ne garantis pas la compatibilité entre les deux.

Posté par Jordan le 18 Sep - 17:43 (2008)
moi il marche trés bien!

Posté par Suicune31 le 25 Sep - 13:14 (2008)
Serait-il possible de modifié ce script Pour le tag : 6 ?

Posté par ~Blue~ le 25 Sep - 22:24 (2008)
valpokbest a écrit:
slash53 a écrit:
et voici le résultat :


Le seul défaut c'est que le reflet se fait aussi sur le bord :mdr:


Avant les bords met un évènement dans une condition "si le hero avance a gauche/droite désactiver le script" puis dans le bords un évènement pour le réactiver.
Enfin je me comprend ...

Posté par Suicune31 le 26 Sep - 11:16 (2008)
Bonjour je voudrais savoir si c'est possible d'avoir le reflet sur 2 tag de terrain différent ? (6 et 7 en l'occurrence)  vous voyer de quoi je parle xD

Posté par Pαlвσlѕку le 27 Sep - 16:56 (2008)
Le script tous seul ne peut sans doute pas mais si tu fais une copie de lui même (donc 2 fois le même script dans le jeu). Tu lui change juste les tags terrain pour éviter les bugs.

Ce n'est qu'une idée, qui ne marchera sans doute pas car Mr Ruby passe son temps à refuser ce qu'on lui demande.

Posté par Suicune31 le 27 Sep - 20:46 (2008)
Bin j'ai modifié tout les 7 par des 6 ça passe pas :(