Partagez
Aller en bas
KaguraM
KaguraM
Membre

Nombre de messages : 34
Distinction : aucune
Date d'inscription : 16/02/2015

Problème de script + évènement Empty Problème de script + évènement

le Lun 27 Avr 2015 - 15:18
Bonjour !

Me revoilà encore...
Cette fois-ci j'ai trouvé un superbe script pour avoir comme effet une sorte de lampe torche, et puis miracle ça fonctionne. Jusqu'à ce que je décide de changer de map avec mon héro, j'ai essayé presque mille et une façon de tout changer et puis rien n'y fait... Du coup j'aurai vraiment besoin d'aide parce que je ne peux plus rien faire, j'ai aussi cherché un script pour un faisceau lumineux autour du héro ou d'un perso mais sous rmxp j'ai rien trouvé de similaire, donc bon... J'ai ça comme message d'erreur :
Spoiler:
Problème de script + évènement Sans_t11
Le script je l'ai trouvé Ici ou sinon le code c'est là :


Spoiler:

Code:
# Dynamic Light Version 3o
# A script conceived, designed and directed by Fabien - fabien_35@hotmail.com
# The detailed user manual, updates the code and using a will of the author are
# on the forum The Factory: Address
# * Translation from French to English: ArcaneAlchemy & Google Translate
# Purpose: Manage lights are not just white on black night
# But darkness to hunt truly reveal the true colors.
# This is what we call light in this script: a hole in a layer hiding the map.
# But let's be clear:
# Fixed lights is easy without script (see tutorial factory)
# + One moving light is easy without script. (See tutorial factory)
# + By several lights against relative movements with opportunities colision is
# impossible without a script like this.
# => The purpose of this code is to facilitate multiple lights "simultaneously".
# -----------------------------------------
# How to use: Event parallel script to initialize wallpaper_night
# Then lum (name, id) as many times as you want lights,
# With "name" the file name of the image of light and "id" the id of the event
# wearing light.
# The script has much wider possibilities: visit their topic on Factory for powers.

#=====Interface Functions : =========================================================
#-----function initialize script. Created darkness. The arguments are the
# components of the dark colors and transparency
def wallpaper_night(op=150,r=0,v=0,b=0) # (opacity of the night, red, green, blue)
  $lum.img.dispose if $lum.is_a?(Dynamic_lights) # Erase previous light.
  $lum=Dynamic_lights.new(255-r,255-v,255-b,op)
  # creation of a single instance of the script
end
#-------main interface function. Created a light following an event.-------------------------------------
def lum(name,id=0,op=255,dx=0,dy=0,x=nil,y=nil,zx=1,zy=1)      
  $lum.lums[id]=Lum.new(name,id,op,x,y,dx,dy,zx,zy,nil)
end #hand function interface. Created Following a light year event.
#-------install non-editable lights, decor------------------------
def lumF(name,id,op=255,dx=0,dy=0,x=nil,y=nil,zx=1,zy=1)  
  $lum.coller_le_trou(true,name,x,y,op,dx,dy,id,zx,zy) # install the light
end
#-------lumF_tile made ​​lumF all identical tiles from a given example----------
def lum_tile(name,x_tile,y_tile,i_tile,op=255,dx=0,dy=0)
    cherche_tile(x_tile,y_tile,i_tile).each{|tile|  # collect the identical tiles
    $lum.coller_le_trou(true,name,tile[0]*32+dx,tile[1]*32+dy,op)} # installs lights        
  end
#--------antilum guards rectangular areas in the dark-----------------------
def antilum(x1,y1,x2,y2)
  x1*=32
  y1*=32
  x2=(x2+1)*32
  y2=(y2+1)*32
  $lum.antilums.push(Rect.new(x1,y1,(x2-x1).abs,(y2-y1).abs))
end
#------lumF glue all over the map----------------------------------
def lumFMap(name,op=255)
  $lum.coller_le_trou(true,name,$game_map.width*16,$game_map.height*16,255,0,0,1)
end
#--installs special anti-lum light protection. For areas you want to remain
# unaffected by lighting effects.
def protect(name,id=0,op=255,dx=0,dy=0,x=nil,y=nil,zx=1,zy=1)   # very useful in practice
  $lum.proctections.push([name,x,y,id,op,dx,dy,zx,zy])
end
#------ditto on each occurrence of a tile. This one is useful-----------------
def protect_tiles(name,x_tile,y_tile,i_tile,op=255,dx=0,dy=0,zx=1,zy=1)
  $game_map.cherche_tile(x_tile,y_tile,i_tile).each{|tile|  # collect the identical tiles
  $lum.proctections.push([name,tile[0]*32,tile[1]*32,id,op,dx,dy,zx,zy]) }# installs protections
end
#----end of interface functions-----------------------------------------------------------------


#---Class that stores information about the lights (+ allows intuitive access)-----------------
Lum = Struct.new( "Lum", :name, :id, :op, :x, :y, :dx, :dy, :zx, :zy, :stock)
#---------------------------------------------------------------------
#--- Main class, Lum stores and displays all. -----------
class Dynamic_lights
  attr_accessor :lums ,:img ,:id_map ,:antilums ,:proctections ,:repertoire
#---------------------------------------------------------------------  
  def initialize(r,v,b,op) # creation of script variables
    @fixes=false #fixed mode? yes or no, no default
    @lums=Hash.new #Stores the characteristics of Lums
    @antilums=[]
    @reparations=[] #stores to make repairs to the next frame
    @proctections=[]
    @id_map=$game_map.map_id # storing the id map (to manage teleports)
    @periode=1 # econamey power (loss of fluidity)
    @img=Sprite.new # single sprite script, which will all
    @img.bitmap=Bitmap.new(640,480) # it starts in non-fixed mode, so screen size
    @img.blend_type=2 # to be able to dim the screen and make holes
    @img.z=10 # with that sprites z <10 will be obscured
    @img.opacity=op # opacity of the night (and more generally, that the map mask)
    @fond=Color.new(r,v,b,255) #storing the color of the night.
    @repertoire="Pictures/lumieres"#directory inside Graphics/ that will be used for images
    maj # called fct update for all displays live
  end
#------# toggles the non-fixed mode to fixed mode -------------
  def inifixes
    if not @fixes # if not already switched to fixed
      #we will create and fill with the background color of a bitmap the size
      #of the map
      @bmp=Bitmap.new($game_map.width*32,$game_map.height*32)      
      @bmp.fill_rect(@bmp.rect,@fond) # bmp will be our reference, there still stick Lums
      @img.bitmap=Bitmap.new($game_map.width*32,$game_map.height*32)
      @img.bitmap.fill_rect(@img.bitmap.rect,@fond) # we put the bitmap displayed in the correct format
      @fixes=true # we memorized what happened in fixed mode
    end
  end
#----- central function. Is called every frame via Spritesetmap below------------------
  def maj
    if @fixes # if it is fixed mode with lights
      @img.ox=$game_map.display_x/4 # move the image with the map
      @img.oy=$game_map.display_y/4
    end
    @img.visible=true
    return if Graphics.frame_count%@periode != 0 or @id_map != $game_map.map_id # gain fps
    reparer  # holes that have been made to the frame on recorks before
    trouer # we made ​​the necessary holes for the frame (the Lums)
    protect # under protection option "antilum"
  end  
#------recorks holes that have been made to the frame before-----------------------------------------------------
def reparer
  if not @fixes
    @img.bitmap.fill_rect(@img.bitmap.rect,@fond)
    @reparations=[]
  else
    @reparations.each{|reparation|
    @img.bitmap.blt(reparation.x,reparation.y,@bmp,reparation) }  
    @reparations=[]
  end
end
#--------order the required holes each frame-------------------------------------------------------------
def trouer
  @lums.each_value{|lum|
    coller_le_trou(false,
      lum.name,lum.x,lum.y,lum.op,lum.dx,lum.dy,lum.id,lum.zx,lum.zy) }
end
#--------the antilums protect certain area erasing lights
def protect  
  @antilums.each{|antilum|
    x=antilum.x-(@fixes ? 0 : $game_map.display_x/4)
    y=antilum.y-(@fixes ? 0 : $game_map.display_y/4)
    @img.bitmap.fill_rect(Rect.new(x,y,antilum.width,antilum.height),@fond) }
  @proctections.each{|proctection|
    name,x,y,id,op,dx,dy,zx,zy=proctection
    coller_le_trou(false,name,x,y,op,dx,dy,id,zx,zy) }
end
#--------- calculates the coordinates of the hole from its id or lum.x and there
def calculer_coords(x,y,id,dx,dy,image,tx,ty,fixe=false)
  if x==nil # if no x has been entered, it sets the lum on the event id
    return [$game_map.display_x/4,$game_map.display_y/4] if id.is_a?(String)      
    id==0 ? ev=$game_player : ev=$game_map.events[id]
    x=ev.screen_x #So we calculate the x / map this event
    y=ev.screen_y
    x+=dx # precise adjustment of coordinates by a small factor optional
    y+=dy
    return [nil,nil] if (x-tx/2>640 or y-ty/2>480 or x+tx/2<0 or y+ty/2<0) and not fixe
    x-=tx/2 # centering of the image on the coords
    y-=ty/2
  else
    if not id.is_a?(String) # if id is a String, x is a coord / pixel map
      x-=$game_map.display_x/4 # they are converted / Monitor
      y-=$game_map.display_y/4      
    end # else if id is a string, it is a coord / screen pixel
    x+=dx # precise adjustment of coordinates by a small factor optional
    y+=dy
    return [nil,nil] if (x>640 or y>480 or x+tx<0 or y+ty<0) and not fixe
  end  
  x+=$game_map.display_x/4 if @fixes # conversion coords / MAP
  y+=$game_map.display_y/4 if @fixes # but only for fixed mode with Lums
  return [x,y] #the coord are returned from the MAP (and pixels)
end
#--------fct really makes the hole-------------------------------------------------------------
def coller_le_trou(fixe,image,x,y,op=255,dx=0,dy=0,id=0,zx=1,zy=1)
  inifixes if fixe
  image=RPG::Cache.load_bitmap("Graphics/"+@repertoire+"/",image) if image.is_a?(String) # charge de l'image à partir du name de fichier  
  tx,ty=image.width*zx,image.height*zy #simple memo size image  
  x,y=calculer_coords(x,y,id,dx,dy,image,tx,ty,fixe)
  return if x==nil
  op>255 ? op=255 : (op<0 ? op=0 : nil )      
  #Now we go to collage itself.  
  @img.bitmap.stretch_blt(Rect.new(x,y, tx,ty), image,image.rect,op)
  if fixe # backup hole in @ bmp (if it is a fixed light)
          @bmp.stretch_blt(Rect.new(x,y,tx,ty), image,image.rect,op)
  else # if backup in the perforated area to clear the hole later
    @reparations.push(Rect.new(x,y,tx,ty))
  end
end
#---------------------------------------------------------------------
end# End of the Dynamic Lights class
#---------------------------------------------------------------------
#---------------------------------------------------------------------
class Spriteset_Map # Modified for the script to update automatically
  alias lum_update update # aliasing the update function. Renamed to lum_update
  def update # redefinition of update
    lum_update   # update function normal Spriteset_Map    
    if $lum.is_a?(Dynamic_lights) and not $lum.img.disposed?  
      $lum.maj   # maj if the script is running  
      if $lum.id_map != $game_map.map_id# exit the script if we changed map
        $lum.img.dispose
        $lum=nil
      end
    end
  end
#------------------------------------------------------
  alias lum_dispose dispose
    def dispose
    lum_dispose
     $lum.img.visible = $scene.is_a?(Scene_Map) if $lum.is_a?(Dynamic_lights) and not $lum.img.disposed?  
   end
end# end of the Spriteset_Map class
#---------------------------------------------------------------------
#---------------------------------------------------------------------

  def cherche_tile(x,y,i)  #fct to look identical tiles
    tile_cible=$game_map.data[x, y, i] # tile sought we define
    # Now we shall look
    results=[]  #definition of a var to store results
    for x in 0...$game_map.data.xsize # for each cell of the map
      for y in 0...$game_map.data.ysize
        for i in [2, 1, 0] # in each layer
          results.push([x,y,i]) if $game_map.data[x, y, i]==tile_cible # if tile is the same as the example, it stores
        end
      end
    end
    return results # returns in the right tiles
  end
#---------------------------------------------------------------------
#---------------------------------------------------------------------


2e code :
def ecran_decor(nom, op=255)
  $lum2=Dynamic_lights.new(255,255,255,255) # black screen to hide the map
  $lum=Dynamic_lights.new(0,0,0,255) # screen to project the illusion
  $lum.img.blend_type=1
  $lum.coller_le_trou(true,nom,0,0,255,0,0,1) # install the light
end
#-------main interface function. Created a light following an event.-------------------------------------
def decor(nom,id=0,op=255,dx=0,dy=0,x=nil,y=nil)        
$lum.lums[id]=Lum.new(nom,id,op,x,y,dx,dy,1,1)
$lum2.lums[id]=Lum.new(nom,id,op,x,y,dx,dy,1,1)
end #were stored characteristics in a lum Struct
#-------installs unchangeable lights, decor------------------------
def decorF(nom,id,op=255,dx=0,dy=0,x=nil,y=nil)  
  $lum.coller_le_trou(true,nom,x,y,op,dx,dy,id) # install light
  $lum2.coller_le_trou(true,nom,x,y,op,dx,dy,id) # install light
end
#-------lum_tile made ​​lumF all identical tiles from an example----------
def decor_tile(nom,x_tile,y_tile,i_tile,op=255,dx=0,dy=0)
    $game_map.cherche_tile(x_tile,y_tile,i_tile).each{|tile|  # collection identical tiles
    $lum.coller_le_trou(true,nom,tile[0]*32+dx,tile[1]*32+dy,op)
    $lum2.coller_le_trou(true,nom,tile[0]*32+dx,tile[1]*32+dy,op)} # and install the lights      
end
#---------------------------------------------------------------------
#---------------------------------------------------------------------
class Spriteset_Map # Modified for the script to update automatically
  alias lum2_update update # short circuit of the update. It was renamed in lum_update
  def update # redefinition of update
    lum2_update   # update function normal Spriteset_Map
    if $lum2.is_a?(Dynamic_lights) and not $lum2.img.disposed?    # maj if the script is running  
      $lum2.maj
    if $lum2.id_map != $game_map.map_id # exit the script if we changed map    
      $lum2.img.dispose
      $lum2=nil
    end  
    end
  end    
  
  alias lum2_dispose dispose
  def dispose    
    lum2_dispose
    $lum2.img.visible = $scene.is_a?(Scene_Map) if $lum2.is_a?(Dynamic_lights) and not $lum2.img.disposed?  
  end  
  
end# end of the Spriteset_Map class


Dernière édition par KaguraM le Lun 4 Mai 2015 - 13:19, édité 1 fois
Ti-Max
Ti-Max
Membre

Nombre de messages : 1096
Localisation : Canada/Québec
Distinction : Poisson 2018 [Amal']
Date d'inscription : 02/09/2009

Problème de script + évènement Empty Re: Problème de script + évènement

le Lun 27 Avr 2015 - 23:24
As-tu regarder dans la démo, car le script que tu as montré n'y figure pas...
KaguraM
KaguraM
Membre

Nombre de messages : 34
Distinction : aucune
Date d'inscription : 16/02/2015

Problème de script + évènement Empty Re: Problème de script + évènement

le Lun 4 Mai 2015 - 13:18
Oui le script venait directement de la démo... C'était bizarre. Dans tout les cas c'était un problème de variable il me semble, j'ai pu réussir à résoudre mon problème de mes petits bras ! Ce script est vraiment génial haha...

Dans tout les cas, j'ai une autre question (après je referme le sujet ~) j'aimerai savoir si c'est possible de prédéterminer un chemin à un évènement, par exemple un garde qui fait sa ronde. Donc on programme sa ronde et quand il aperçoit le héro à une distance de x (je suppose) et bah qu'il fasse un pas vers lui et quand il arrive devant lui, par exemple il affiche un message puis fait changer le héro de map... Ou quelque chose comme ça... Comme dans genre un the legend of Zelda quand Link doit passer sans se faire voir... Et bah j'aimerai bien refaire quelque chose comme ça, du coup je me creuse un peu la tête sans trouver...

Merci d'avance \o
Ti-Max
Ti-Max
Membre

Nombre de messages : 1096
Localisation : Canada/Québec
Distinction : Poisson 2018 [Amal']
Date d'inscription : 02/09/2009

Problème de script + évènement Empty Re: Problème de script + évènement

le Lun 4 Mai 2015 - 23:10
Oui bien sûr que c'est possible voilà un tutoriel.

Les images vienne de RM2k3, mais il est fesable avec RMXP. ^^

http://www.rpg-maker.fr/tutoriels-177-joke-s-tuts-systeme-d-infiltration-et-gardes.html?Oniro_forum=bd944aeac284efddd276ae3132af0464
KaguraM
KaguraM
Membre

Nombre de messages : 34
Distinction : aucune
Date d'inscription : 16/02/2015

Problème de script + évènement Empty Re: Problème de script + évènement

le Mar 5 Mai 2015 - 21:19
Waaaaaaaaaaaaah c'est magique mais ça marche pas. :c
C'est assez explicite mais comme les commandes changent au vu des conditions et tout, dans tout les cas mon jeu freeze au "nouvelle partie" ahaha...
Ti-Max
Ti-Max
Membre

Nombre de messages : 1096
Localisation : Canada/Québec
Distinction : Poisson 2018 [Amal']
Date d'inscription : 02/09/2009

Problème de script + évènement Empty Re: Problème de script + évènement

le Mar 5 Mai 2015 - 22:46
Ok, je cherche un tuto plus simple sur RMXP et je te l'envoi par MP. Wink
KaguraM
KaguraM
Membre

Nombre de messages : 34
Distinction : aucune
Date d'inscription : 16/02/2015

Problème de script + évènement Empty Re: Problème de script + évènement

le Mar 5 Mai 2015 - 22:47
D'accord, merci éwè
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum