RPG Creator : créez votre MMORPG ou RPG sans aucune connaissance en programmation


Disponible le 4 Juin !




- Jouez à votre jeu sur tablettes tactiles, Smartphones et navigateurs Web
- Personnalisez vos menus
- Dessinez facilement et rapidement vos cartes
- Créez des actions pour le combat A-RPG


www.rpgcreator.net


Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 3 messages ] 
Auteur Message
 Sujet du message: Particuleur[Super script ;) ]
MessagePublié: 03 Déc 2009, 15:21 
Villageois (Nv 5)

Inscrit le: 19 Juin 2009, 00:00
Messages: 99
Niveau RPG Maker: Bon
Logiciel(s) préféré(s): Rmxp
Points d'aide: 1/60

Créations :

Voir ses créations

Bonjours!
J'ai tester et c'est fonctionnel^^
je n'ai ni copié le post sur un autre forum ni crée le script.
l'auteur c'est >>>>>>>>>>Fabien<<<<<<<<<<<<

Utilités:Permet d'afficher plusieur effet spéciaux sur la map c'est vraiment d'enfer!!
Utilisation:il sufit de crée un evenement puis apeller un scripte:
Code: Tout sélectionner
particuleur("feu",1)

-feu est le nom de l'effet speciau.il ya aussi orbite, fumee, feu, explosion, aura, orbite2, orbite3,lance_flamme,projectile
-1 est l'ID de l'evenement ou il va se passer l'effet speciau.
Image(s):
Image

Image

Conseil:Si vous jouez les effet speciau en boucle preparé un script anti lag^^'
Ressource nessecairs:
Image<<<<C'est une image^^ a nommé Blanc
Image<<<< a nommé boule
Image<<<< a nommé brume
Image<<<< a nommé fla
Image<<<< a nommé flam
Image<<<< a nommé flamme
Image<<<< a nommé flamme2
Image<<<< a nommé smoke

Scripte:
Code: Tout sélectionner
# Par Fabien
#Nom : Particuleur
#Version :1.0j
#Demandeur : Kimono
#Auteur, Concepteur : Fabien (fabien_35@hotmail.com)
#Mode d'emploi : "inserer script" > particuleur(type,cible)
#                 exemple : particuleur("feu",3)
#liste des types d'effets : orbite, fumee, feu, explosion, aura, orbite2, orbite3
#lance_flamme,projectile
#==Interface=============================
def particuleur(type,cible,*params)
  $effets_particules[cible]=[type,cible,params,true,[]]
end
#----------------------------------------
def particuleur2(nom,type,cible,*params)
  $effets_particules[nom]=[type,cible,params,true,[]]
end
#note :un effet c'est donc : [type,cible,parms,initialisé?,id_colisions]
#==Code==================================
$effets_particules=Hash.new
EffetP = Struct.new( "EffetP", :nom, :type, :cible, :params, :particules)
Particule = Struct.new( "Particule", :x, :y, :z, :vx, :vy, :vz, :sprite, :aleas, :dsprite_z, :stock )
class Spriteset_Map
  alias initialize_particuleur initialize
  alias dispose_particuleur dispose
  alias update_particuleur update
#----------------------------------------
  def initialize
    @effets=Hash.new
    initialize_particuleur
  end
#----------------------------------------
  def dispose
    dispose_particuleur
    @effets.each_value{|struct|struct.particules.each{|particule|particule.sprite.dispose}}
    @effets=Hash.new
  end
#----------------------------------------
  def update
    update_particuleur
    $effets_particules.each_pair{|nom,effet| # INI de chaque effet
      if effet.at(3)
        effet[3] = false
        effetP=EffetP.new(nom,effet[0],effet[1],effet[2],Array.new)
        @effets[nom] = effetP
      end  }
    @effets.each_value{|effet| eval effet.type+"_maj(effet)" } #MAJ
  end
#-Suivent quelques outils pour les effets----------------------------
def ev(id=0)
  return (id==0 ? $game_player : $game_map.events[id] )
end
#----------------------------------------
def coords(cible)
  cible=cible[0] if cible.is_a?(Array)
  if cible.is_a?(Sprite)
    return [cible.x,cible.y]
  else
    return [ev(cible).screen_x,ev(cible).screen_y]
  end
end   
#----------------------------------------
def sgn(x)
   return 0 if x==0
   return x/x.abs
end
#----------------------------------------
def pix_visible_aleatoire(cible) # renvoie l'un des pixels visibles d'une image
   cible = cible[0] if cible.is_a?(Array)
   cible = @character_sprites[cible] if not cible.is_a?(Sprite)
   loop do # ici on prend un pixel au hasard et on verif qu'il est non-transparent
     x = rand(cible.src_rect.width)
     y = rand(cible.src_rect.height)
     return [x,y] if cible.bitmap.get_pixel(x,y).alpha != 0
   end
end
#---------------------------------------
def pix_visible?(cible,x,y) # ici le x,y est la distance au coin 7 de l'image
   cible = cible[0] if cible.is_a?(Array)
   cible = @character_sprites[cible] if not cible.is_a?(Sprite)
   x += cible.ox
   y += cible.oy
   return false if x<0 or y<0
   return false if x>cible.src_rect.width or y>cible.src_rect.height
   return (cible.bitmap.get_pixel(x,y).alpha != 0)
end
#--------------------------------------
def colisions_evt?(id,particule)
   return false if particule.z > 48
   ev = (id==0 ? $game_player : $game_map.events[id])   
   dx,dy=particule.x-ev.screen_x,particule.y-ev.screen_y
   dx-=$game_map.display_x/4
   dy-=$game_map.display_y/4
   if (dx.abs<16 and dy.abs<16)
     if pix_visible?(id,dx,dy-particule.z*2)
       particule.vx=particule.vy=particule.vz=0
       return true
     end     
   end
   return false
end     
#----------------------------------------
def ini_classique(effet,bitmap)
   particule = Particule.new
   particule.sprite = Sprite.new(@viewport1)
   particule.sprite.bitmap=RPG::Cache.picture(bitmap)
   particule.vx, particule.vy, particule.vz = 0, 0, 0
   x,y=coords(effet.cible)
   particule.x, particule.y, particule.z = x, y, 0
   particule.sprite.blend_type=1
   particule.sprite.origine 5
   particule.sprite.zoom_x=particule.sprite.zoom_y=0
   particule.aleas=rand
   particule.dsprite_z = 0
   return particule
end
#----------------------------------------
def maj_classique(type,particule,ax=0,ay=0,az=0)
     particule.x += particule.vx
     particule.y += particule.vy
     particule.z += particule.vz
     particule.vx += ax
     particule.vy += ay
     particule.vz += az
     particule.sprite.x = particule.x
     particule.sprite.y = particule.y
     particule.sprite.z = (particule.sprite.y*4 + 3) / 4 + 32 + particule.dsprite_z
     if type==0
       particule.sprite.x -= $game_map.display_x/4
       particule.sprite.y -= $game_map.display_y/4
     end
     zoom_max = (particule.aleas.is_a?(Array) ? particule.aleas[0] : particule.aleas)     
     if particule.sprite.zoom_x < zoom_max
       particule.sprite.zoom_x+=0.05
       particule.sprite.zoom_y+=0.05
     end     
   end

#########################################################################
# A partir de maintenant sont stockés les différents effets.
#########################################################################
def orbite_maj(effet)
   n=0
     for particule in effet.particules
       angle=360*n/(effet.particules.size+1)+Graphics.frame_count/particule.aleas
       n+=1
       particule.x = ev(effet.cible).screen_x + 30*Math.cos(angle)
       particule.y = ev(effet.cible).screen_y - 25 + 20*Math.sin(angle)
       particule.sprite.angle = 90-angle*180/Math::PI
     end
end
#-----------------------------------------------------------   
def orbite_nouvelle_particule(effet,n=10)
  n.times {
   particule=ini_classique(effet,"flamme")
   particule.sprite.blend_type = 1
   particule.aleas = 10+rand(360)*Math::PI/180
   particule.sprite.origine 5
   particule.sprite.zoom_y=0.6
   effet.particules.push particule}
end
#---------------------------------------------------------
def fumee_maj(effet)
   fumee_nouvelle_particule(effet) if Graphics.frame_count%1==0
   for particule in effet.particules
    maj_classique(0,particule,(rand-0.5)**9,-(0.5+particule.vy)/40.0)
    particule.sprite.opacity-=Math.hypot(particule.vx,particule.vy)
    if particule.sprite.zoom_x < particule.aleas
       particule.sprite.zoom_x-=0.04
       particule.sprite.zoom_y-=0.04
     end   
     particule.sprite.tone.red+=1
     particule.sprite.tone.blue+=1
     particule.sprite.tone.green+=1
   end   
   effet.particules.delete_if{|particule|particule.sprite.opacity<=0}
end
#-----------------------------------------------------------
def fumee_nouvelle_particule(effet)
   particule = ini_classique(effet,"Blanc")
   particule.sprite.blend_type = 0
   particule.sprite.tone=Tone.new(-250,-250,-250)
   particule.aleas=rand*2/3
   particule.dsprite_z=rand(500)
   particule.x=ev(effet.cible).screen_x+$game_map.display_x/4+rand(8)-4
   particule.y=ev(effet.cible).screen_y+$game_map.display_y/4-rand(8)-20
   particule.sprite.angle=rand(360)
   effet.particules.push particule
end
#---------------------------------------------------------
def feu_maj(effet)
   feu_nouvelle_particule(effet)# if Graphics.frame_count%1==0
   for particule in effet.particules
     maj_classique(0,particule, (rand-0.5)**5, -(0.5+particule.vy)/20.0)
     particule.sprite.tone.green+=10 if particule.sprite.tone.green<50
     particule.sprite.opacity-=Math.hypot(particule.vx,particule.vy)*9
   end   
   effet.particules.delete_if{|particule|particule.sprite.opacity<=0}
end
#---------------------------------------------------------
def feu_nouvelle_particule(effet)
   particule = ini_classique(effet,"flamme")
   particule.aleas=rand/2
   particule.sprite.tone=Tone.new(255,-100,0)
   particule.sprite.opacity=200
   particule.x=ev(effet.cible).screen_x+$game_map.display_x/4+rand(15)-5
   particule.y=ev(effet.cible).screen_y+$game_map.display_y/4-rand(10)-14
   particule.vx,particule.vy=0,(-rand)
   effet.particules.push particule
end
#-------------------------------------------------------------
  def explosion_maj(effet)
   effet.params[0]=0 if effet.params[0]==nil
   effet.params[0]+=1
   50.times {explosion_nouvelle_particule(effet)} if effet.params[0]<10
   for particule in effet.particules
     maj_classique(0,particule)     
     particule.sprite.opacity-=Math.hypot(particule.vx,particule.vy)*3     
   end   
   effet.particules.delete_if{|particule|particule.sprite.opacity<=0}
   ev=ev(0)
   effet.particules.delete_if{|particule|Math.hypot(ev.screen_x-particule.sprite.x,ev.screen_y-particule.sprite.y-16)<16 }
end
#---------------------------------------------------------
def explosion_nouvelle_particule(effet)
   particule = ini_classique(effet,"fla")
   particule.sprite.z=300
   particule.sprite.tone=Tone.new(255,50,30)
   particule.x=ev(effet.cible).screen_x+$game_map.display_x/4+rand(8)-4
   particule.y=ev(effet.cible).screen_y+$game_map.display_y/4-rand(10)-14
   angle=rand
   particule.vx= 3*Math.cos(angle*2*Math::PI)
   particule.vy= 3*Math.sin(angle*2*Math::PI)
   particule.sprite.angle=rand*360
   effet.particules.push particule
end
#------------------------------------------------------------
def aura_maj(effet)
   aura_nouvelle_particule(effet)# if Graphics.frame_count%1==0
   aura_nouvelle_particule(effet)# if Graphics.frame_count%1==0
   for particule in effet.particules
     maj_classique(1,particule,(rand-0.5)**5,(-0.5-particule.vy)/20.0)   
     particule.sprite.x=ev(effet.cible).screen_x+particule.x#-$game_map.display_x/4
     particule.sprite.y=ev(effet.cible).screen_y+particule.y#-$game_map.display_y/4
     #particule.sprite.tone.green+=10 if particule.sprite.tone.green<50
     particule.sprite.opacity-=Math.hypot(particule.vx,particule.vy)*7
   end   
   effet.particules.delete_if{|particule|particule.sprite.opacity<=0}
end
#---------------------------------------------------------
def aura_nouvelle_particule(effet)
   particule = ini_classique(effet,"flamme")
   particule.sprite.tone=Tone.new(-255,0,255)
   particule.sprite.opacity=200   
   particule.x=+rand(20)-10
   particule.y=-rand(32)
   particule.aleas = rand/4
   particule.dsprite_z = rand(500)
   effet.particules.push particule
end
#-------------------------------------------------------------
def orbite2_maj(effet)
   orbite2_nouvelle_particule(effet,1) if Graphics.frame_count%4==0
     for particule in effet.particules
       particule.x+=particule.aleas/6.0
       particule.z+=particule.aleas*((particule.z-50)/50.0)**2+0.05

       x = particule.z*Math.cos(particule.y)*Math.cos(particule.x)
       y = particule.z*Math.cos(particule.y)*Math.sin(particule.x)
       z = particule.z*Math.sin(particule.y)
       
       particule.sprite.x = x + ev(effet.cible).screen_x
       particule.sprite.y = (y-z)/2 + ev(effet.cible).screen_y - 20
       particule.sprite.z = (y < 0 ? 10 : 1000)
       particule.sprite.opacity=63*(3+y/particule.z)
       if particule.sprite.zoom_x<particule.aleas
         particule.sprite.zoom_x+=0.02
         particule.sprite.zoom_y+=0.02
       end
     end
    effet.particules.delete_if{|particule|particule.z>640}
end
#-----------------------------------------------------------   
def orbite2_nouvelle_particule(effet,n=100)
  n.times {
   particule = Particule.new
   particule.sprite = Sprite.new(@viewport1)
   particule.sprite.bitmap = RPG::Cache.picture("smoke")
   particule.sprite.blend_type = 1
   particule.aleas = 10+rand(360)*Math::PI/180
   particule.sprite.origine 5
   particule.sprite.zoom_x=particule.sprite.zoom_y=0
   particule.aleas=0.5+rand/2
   particule.x = 2*Math::PI*rand # angle phi
   particule.y = (rand-0.5)*Math::PI #angle theta
   particule.z = 0# rayon
   effet.particules.push particule}
end
#------------------------------------------------------------
  def orbite3_maj(effet)
   20.to_i.times {orbite3_nouvelle_particule(effet)} if effet.particules.size<200
   for particule in effet.particules
     particule.x+=particule.vx
     particule.y+=particule.vy   
     particule.vx/=1.03
     particule.vy/=1.03
     particule.vx=10*sgn(particule.vx) if particule.vx.abs>10
     particule.vy=10*sgn(particule.vy) if particule.vy.abs>10
     particule.sprite.x=particule.x-$game_map.display_x/4
     particule.sprite.y=particule.y-$game_map.display_y/4
     particule.sprite.z=(particule.sprite.y*4 + 3) / 4 + 32
    for cible in effet.cible
     dx=particule.sprite.x-ev(cible).screen_x
     dy=particule.sprite.y-ev(cible).screen_y+20
     dy*=1.3
     distance=((dx*dx+dy*dy)/6000.0)**2-0.1
     distance=distance/(1+distance/200.0)**4     
     
     particule.vx+= dy/300.0 - sgn(dx)*distance +(rand-0.5)/10.0   
     particule.vy+= - dx/300.0 - sgn(dy)*distance +(rand-0.5)/10.0   
   end   
     
     if particule.sprite.zoom_x<1
       particule.sprite.zoom_x+=0.05
       particule.sprite.zoom_y+=0.05
     end       
   end   
  # effet.particules.delete_if{|particule|particule.sprite.opacity<=0}
  # ev=ev(0)
  # effet.particules.delete_if{|particule|Math.hypot(ev.screen_x-particule.sprite.x,ev.screen_y-particule.sprite.y-16)<16 }
end
#---------------------------------------------------------
def orbite3_nouvelle_particule(effet)
   particule=ini_classique(effet,"fla")
   particule.sprite.z=300
   particule.sprite.tone=Tone.new(255,40,5)
   effet.cible=[effet.cible] if not effet.cible.is_a?(Array)
   particule.x=ev(effet.cible[0]).screen_x+$game_map.display_x/4
   particule.y=ev(effet.cible[0]).screen_y+$game_map.display_y/4-20
   particule.aleas=rand*2*Math::PI
   particule.aleas=[Math.cos(particule.aleas),Math.sin(particule.aleas)]
   particule.vx= particule.aleas[0]
   particule.vy= particule.aleas[1]
   particule.sprite.angle=rand*360
   effet.particules.push particule
end
#-----------------------------------------------------------
   def lance_flamme_maj(effet)
   10.times {lance_flamme_nouvelle_particule(effet)}
   for particule in effet.particules     
     maj_classique 0,particule     
     particule.sprite.tone.red+=30 if particule.sprite.tone.green<255
     particule.sprite.tone.green+=5 if particule.sprite.tone.green<50     
     particule.sprite.tone.blue-=20 if particule.sprite.tone.green>20
     particule.sprite.opacity-=Math.hypot(particule.vx,particule.vy)*3   
   end   
   effet.particules.delete_if{|particule|particule.sprite.opacity<=0}
   ev=ev(1)
   effet.particules.delete_if{|particule|Math.hypot(ev.screen_x-particule.sprite.x,ev.screen_y-particule.sprite.y-16)<16 }
end
#---------------------------------------------------------
def lance_flamme_nouvelle_particule(effet)
   particule=ini_classique(effet,"fla")
   particule.aleas=rand
   particule.sprite.tone=Tone.new(-255,0,255)
   particule.x=ev(effet.cible).screen_x+$game_map.display_x/4+rand(8)-4
   particule.y=ev(effet.cible).screen_y+$game_map.display_y/4-rand(10)-14
   angle=[135,90,45,180,0,0,-135,-90,-45][ev(effet.cible).direction-1]*Math::PI/180
   angle+=(rand-0.5)/8.0
   particule.vx= 5*Math.cos(angle)
   particule.vy= 5*Math.sin(angle)   
   effet.particules.push particule
end
  #--------------------------------------------------------
def brume_maj(effet)
     200.times {brume_nouvelle_particule(effet)} if effet.particules.size<200
     for particule in effet.particules
       maj_classique(0,particule,(rand-0.5)**5,(rand-0.5)**5)       
       particule.vx/=1.1
       particule.vy/=1.1
       for cible in effet.cible
          next if not ev(cible).moving?
          dx=particule.sprite.x-ev(cible).screen_x
          dy=particule.sprite.y-ev(cible).screen_y+20
          next if dx.abs+dy.abs>200
          dy*=1.3
          distance=0.2*Math.hypot(dx,dy)**2+1     
          vx,vy=ev(effet.cible).vitesse_event
          particule.vx+= sgn(dx)/distance + vx/distance
          particule.vy+= sgn(dy)/distance + vy/distance
        end   
     end   
   effet.particules.delete_if{|particule|particule.sprite.opacity<=0}   
end
#---------------------------------------------------------
def brume_nouvelle_particule(effet)
   particule = ini_classique(effet,"fla")   
   particule.sprite.tone=Tone.new(0,255,250)
   particule.sprite.opacity=rand*200+55
   particule.aleas = 1
   effet.cible=[effet.cible] if not effet.cible.is_a?(Array)
   particule.x= ev(effet.cible[0]).screen_x+$game_map.display_x/4+rand(200)-100
   particule.y=ev(effet.cible[0]).screen_y+$game_map.display_y/4+rand(200)-100
          particule.dsprite_z = 0
   particule.sprite.blend_type=0
   effet.particules.push particule
end
#---------------------------------------------------------
def traine_sprite_maj(effet)
  traine_sprite_nouvelle_particule(effet)
   for particule in effet.particules
     particule.sprite.opacity-=20
     particule.sprite.x=particule.x-$game_map.display_x/4
     particule.sprite.y=particule.y-$game_map.display_y/4
   end
  effet.particules.delete_if{|particule|particule.sprite.opacity<=0}   
end
#---------------------------------------------------------
def traine_sprite_nouvelle_particule(effet)   
  return if Graphics.frame_count%2==0
  if effet.particules.empty?
    particule = Particule.new
    particule.sprite=Sprite.new(effet.cible.viewport)
    particule.sprite.bitmap = effet.cible.bitmap
    for truc in ["x","y","ox","oy","angle","opacity","blend_type","zoom_x","zoom_y"]
     eval("particule.sprite."<<truc<<" = effet.cible."<<truc)   
     particule.x= particule.sprite.x + $game_map.display_x/4
     particule.y= particule.sprite.y + $game_map.display_y/4
     effet.particules.push particule
   end
end

  antecedent = effet.particules[-1].sprite
  n=16
  for i in 1..n
   particule = Particule.new
   particule.sprite=Sprite.new(effet.cible.viewport)
   particule.sprite.bitmap = effet.cible.bitmap
   j=n-i
   for truc in ["x","y","ox","oy","angle","opacity","blend_type","zoom_x","zoom_y"]
     eval("particule.sprite."<<truc<<" = (effet.cible."<<truc<<"*i +  antecedent."<<truc<<"*j)/n.to_f")   
   end
   particule.x= particule.sprite.x + $game_map.display_x/4
   particule.y= particule.sprite.y + $game_map.display_y/4
   effet.particules.push particule
end
end
#---------------------------------------------------------
def saupoudrage_maj(effet)
  saupoudrage_nouvelle_particule(effet)
   for particule in effet.particules
     particule.sprite.opacity-=2
     maj_classique(0,particule,(rand-0.5)**5,0,-0.05)
     particule.vx/=1.1
     particule.vy/=1.1
     particule.vz/=1.1
     particule.z=0 if particule.z<0
     particule.vz=particule.vx=particule.vy=0 if particule.z==0     
     particule.sprite.y-= particule.z
   end
  effet.particules.delete_if{|particule|particule.sprite.opacity<=0}   
end
#---------------------------------------------------------
def saupoudrage_nouvelle_particule(effet)   
   #création du sprite
   particule=ini_classique(effet,"blue")
   #calcul de position
   sprite_cible=@character_sprites[effet.cible-1]
   x,yz=pix_visible_aleatoire(effet.cible-1)
   y = rand(sprite_cible.src_rect.width) - sprite_cible.src_rect.width/2 + 4
   particule.x = ev(effet.cible).screen_x+$game_map.display_x/4 + x - sprite_cible.src_rect.width/2
   particule.y = ev(effet.cible).screen_y+$game_map.display_y/4 - y
   particule.z =  yz - y
   #divers
   particule.aleas=rand/2
   particule.dsprite_z=rand(500)
   #calcul des vitesses initiales
   particule.vx,particule.vy=ev(effet.cible).vitesse_event
   particule.vz=0   
   effet.particules.push particule
end
#-----------------------------------------------------------
def projectile_maj(effet)
   while not effet.params.empty?  #pour cette effet, params contient les projo à lancer
     projectile_nouvelle_particule(effet)
   end
   for doublet in effet.particules
     particule,ombre=doublet
     maj_classique 0,particule     
     particule.vz-=0.3
     if particule.z<=0
       particule.z = 0
       particule.vx=particule.vy=particule.vz=0
     elsif particule.stock != nil
       particule.vx,particule.vy = ev(particule.stock).vitesse_event       
       particule.vz=0
       particule.stock=nil if ev(particule.stock).mort
     else
       particule.sprite.angle=57.3*Math.atan2(-particule.vy+particule.vz*2,particule.vx)
       ombre.sprite.angle=57.3*Math.atan2(-particule.vy,particule.vx)       
        for id in $effets_particules[effet.nom][4]
          if colisions_evt?(id,particule)
             particule.stock=id
             (id==0 ? $game_player : $game_map.events[id]).pv-=1
          end
        end
         
     end     
     ombre.sprite.x=particule.sprite.x
     ombre.sprite.y=particule.sprite.y
     ombre.sprite.zoom_x=1.0/(particule.vz.abs/2+1)
     particule.sprite.y-=particule.z*2   
     ombre.sprite.opacity=particule.sprite.opacity/Math.sqrt(2+particule.z.abs/3)
   end   
   effet.particules.delete_if{|particule|
           particule[0].sprite.opacity-=effet.particules.size/20 if particule[0].z<=0
           particule[0].sprite.opacity<=0 }

end
#---------------------------------------------------------
def projectile_nouvelle_particule(effet)
   id_tireur,vx,vy,vz = effet.params.shift
   particule=ini_classique(effet,"Arrow")
   particule.sprite.origine(6)
   particule.sprite.zoom_x=particule.sprite.zoom_y=particule.aleas=1
   particule.sprite.blend_type=0
   particule.x = ev(id_tireur).screen_x+$game_map.display_x/4
   particule.y = ev(id_tireur).screen_y+$game_map.display_y/4
   angle=[135,90,45,180,0,0,-135,-90,-45][ev(id_tireur).direction-1]*Math::PI/180
   angle+=(rand-0.5)/30.0
   particule.vx = vx
   particule.vy = vy
   particule.vz = vz
   particule.z=10
   particule.sprite.angle = 57.3*Math.atan2(-particule.vy+particule.vz*2,particule.vx)
   ombre = ini_classique(effet,"Arrow")
   ombre.sprite.origine(6)
   ombre.sprite.zoom_x=ombre.sprite.zoom_y=ombre.aleas=1
   ombre.sprite.blend_type=2
   effet.particules.push [particule,ombre]
end
#======================================================================   
end
class Sprite
  def origine(direction=5)
    self.ox = self.oy = 0
    self.ox = self.bitmap.width if direction %3==0
    self.ox = self.bitmap.width/2 if direction %3==2
    self.oy = self.bitmap.height if direction < 7
    self.oy /=2 if direction < 4
  end
end
#----------------------------------------------------
class Game_Character
   def vitesse_event
   v = (2 ** @move_speed)/4 # vitesse du perso emetteur
   v = 0 if not moving?
   vx = [0, -v, 0, v, -v, 0, v, -v, 0, v][@direction]
   vy = [0, v, v, v, 0, 0, 0, -v ,-v, -v][@direction]
   return [vx,vy]
end
end
#---------------------------------------------------
#---------------------------------------------------------   
# La fonction qui suit part de la portée max du tireur et de la constante de gravité "g"
# pour calculer selon des lois physiques le vecteur vitesse initiale
# Elle touchera sa cible même en mouvement, sauf si celle-ci accélère(ralentit,tourne...)
# Postulat : le tireur tire tj de toute ses forces (plausible : les dégats st max)
def calcul_ballistique(id_tireur,id_cible,portee_tireur=15,g=0.3) #la portée est en carreaux
   portee_tireur*=32.0 # conversion de la portée de carreaux en pixels
   v0 = Math.sqrt(g*portee_tireur.to_f) #calcul de la vitesse initiale
   tireur = (id_tireur==0 ? $game_player : $game_map.events[id_tireur])
   cible = (id_cible==0 ? $game_player : $game_map.events[id_cible])
   dx = cible.screen_x-tireur.screen_x
   dy = cible.screen_y-tireur.screen_y
   distance = Math.hypot(dx,dy)
   argument = distance / portee_tireur # g = v0²/portée et arg= d*g/v0²=d/portee
   if argument.abs>1
    # p "Hors de portée ! "<<distance.round.to_s<<" > "<<portee_tireur.to_s
     angle=3.1415/4
   else
     angle=0.5*Math.asin(argument)
   end   
   #L'angle est calculé, maintenant le temps de trajet :
   tau = (Math.cos(angle) != 0 ? tau=distance/(v0*Math.cos(angle)) : 999)
   #Ici intervient une subtilité : et si la cible se déplace ?
   if cible.moving?
      #Faisons l'approximation que le tau sera le même. Calcul new cible
      vx,vy=cible.vitesse_event
      dx += vx*tau
      dy += vy*tau
      #et on recalcule l'angle
      distance = Math.hypot(dx,dy)
      argument = distance / portee_tireur # g = v0²/portée et arg= d*g/v0²=d/portee
      if argument.abs>1
      #  p "Hors de portée ! "<<distance.round.to_s<<" > "<<portee_tireur.to_s
        angle=3.1415/4
       else
        angle=0.5*Math.asin(argument)
      end   
      tau = (Math.cos(angle) != 0 ? tau=distance/(v0*Math.cos(angle)) : 999)     
    end   
   # On a tout ce qu'il faut pour calculer les composantes de la vitesse ini
   vx=dx/tau
   vy=dy/tau
   vz=v0*Math.sin(angle)
   return [vx,vy,vz]
end
#----------------------------------------------------------------------
def tirer(id_tireur,id_cible,portee_tireur=15,cibles=[])
  vx,vy,vz = calcul_ballistique(id_tireur,id_cible,portee_tireur,0.3)
if not $effets_particules.has_key?("Projectiles")
     particuleur2("Projectiles","projectile",id_tireur)
end   
$effets_particules["Projectiles"][2].push([id_tireur,vx,vy,vz])
$effets_particules["Projectiles"][4].concat(cibles)
$effets_particules["Projectiles"][4].uniq!
end
#-----------------------------------------------------------------------
def arroser(id_tireur,id_cible,portee_tireur=15)
  vx,vy,vz = calcul_ballistique(id_tireur,id_cible,portee_tireur,0.3)
1.times do
if not $effets_particules.has_key?("Projectiles")
     particuleur2("Projectiles","projectile",id_tireur)
end   
$effets_particules["Projectiles"][2].push([id_tireur,vx+rand-0.5,vy+rand-0.5,vz+rand-0.5])
end


end

_________________


1 PA donné(s) par Samarium le 04 Décembre 2009
Raison : Partage de script

Haut
 Profil  
 
 Sujet du message: Re: Particuleur[Super script ;) ]
MessagePublié: 29 Avr 2012, 14:48 
Villageois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 25 Avr 2012, 19:39
Messages: 2
Niveau RPG Maker: Se Débrouille
Logiciel(s) préféré(s): RMXP et 2003
Point(s) Fort(s): Dessin
Sexe: Féminin
Points d'aide: 0/60

Créations :

Voir ses créations

Se scripte a l'aire super je viens de l'installer sauf que moi je ne voit rien sur ma map , enfin si je voit des truc minuscule qui bouge , mais pas de grand effets du coup sa donne rien , Que dois-je faire ?


Haut
 Profil  
 
 Sujet du message: Re: Particuleur[Super script ;) ]
MessagePublié: 29 Avr 2012, 16:05 
Garde
Garde
Avatar de l’utilisateur

Inscrit le: 27 Fév 2007, 01:00
Messages: 1438
Localisation: France
Niveau RPG Maker: Plutôt bon
Logiciel(s) préféré(s): RMXP
Point(s) Fort(s): Event Making
Sexe: Masculin
Points d'aide: Illimité

Créations :

Voir ses créations

-As-tu bien mis les ressources nécessaires dans ton projet, et est-ce que tu les as renommé comme indiqué ?

- Vérifie que tu n'as fait aucune erreur dans la typographie de l'appel de script.

- Utilises-tu bien RPG Maker XP ?

_________________
« Travailler en collaboration, cela veut dire prendre la moitié de son temps à expliquer aux autres que leurs idées sont stupides. »
- Georges Molinski

« J'adore aider les gens mais je deteste aider des personnes qui n'en valent pas la peine. »
- Lidenvice


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 3 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728