Partagez
Aller en bas
Berka
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Diriger le hero a la souris Empty Diriger le hero a la souris

le Lun 19 Mai 2008 - 21:02
Suite a une commande d'un membre... bon ce n'etait pas ca ce qu'il souhaitait, mais je me suis dit que ca pouvait etre utile a plus d'un !

a placer au dessus de main, dans l'ordre:
Spoiler:
Code:
#===========================================
#                      Module Keyboard/Mouse
#                        par SephirothSpawn
#===========================================

#===============================================================
#                           
#                www.rpgmakervx-fr.com                                           
#       
#===============================================================

module Keyboard
  @keys = []
  @pressed = []
  Mouse_Left = 1
  Mouse_Right = 2
  State = Win32API.new("user32","GetKeyState",['i'],'i')
  Key = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
  def Keyboard.getstate(key)
    return true unless State.call(key).between?(0, 1)
    return false
  end
  def Keyboard.testkey(key)
    Key.call(key) & 0x01 == 1
  end
  def Keyboard.update
    @keys = []
    @keys.push(Keyboard::Mouse_Left) if Keyboard.testkey(Keyboard::Mouse_Left)
    @keys.push(Keyboard::Mouse_Right) if Keyboard.testkey(Keyboard::Mouse_Right)
    @pressed = []
    @pressed.push(Keyboard::Mouse_Left) if Keyboard.getstate(Keyboard::Mouse_Left)
    @pressed.push(Keyboard::Mouse_Right) if Keyboard.getstate(Keyboard::Mouse_Right)
  end
  def Keyboard.trigger?(key)
    return true if @keys.include?(key)
    return false
  end
  def Keyboard.pressed?(key)
    return true if @pressed.include?(key)
    return false
  end
end

class Mouse
  @mouse_menu = 0
  def click?(button)
    return true if @keys.include?(button)
    return false
  end 
  def press?(button)
    return true if @press.include?(button)
    return false
  end
  def area?(x, y, width=32, height=32)
    return false if @pos == nil
    return true if @pos[0] >= x and @pos[0] <= (x+width) and @pos[1] >= y and @pos[1] <= (y+height)
    return false
  end
  def pixels
    return @pos == nil ? [0, 0] : @pos
  end
  def tiles
    return nil if @pos == nil
    x = @pos[0] / 32
    y = @pos[1] / 32
    return [x, y]
  end
  def set_pos(x_pos=0, y_pos=0)
    width, height = client_size
    if (x_pos.between?(0, width) && y_pos.between?(0, height))
      x = $mouse.client_pos[0] + x_pos; y = $mouse.client_pos[1] + y_pos
      Win32API.new('user32', 'SetCursorPos', 'NN', 'N').call(x, y)
    end
  end
  def update
    @pos = $mouse.pos
    @keys, @press  = [], []
    @keys.push(1)  if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(1) & 0X01 == 1
    @keys.push(2)  if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(2) & 0X01 == 1
    @keys.push(3)  if Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(4) & 0X01 == 1
    @press.push(1)  if Win32API.new("user32","GetKeyState",['i'],'i').call(1) & 0X01 == 1
    @press.push(2)  if Win32API.new("user32","GetKeyState",['i'],'i').call(2) & 0X01 == 1
    @press.push(3)  if Win32API.new("user32","GetKeyState",['i'],'i').call(4) & 0X01 == 1
  end 
  def global_pos
    pos = [0, 0].pack('ll')
    if Win32API.new('user32', 'GetCursorPos', 'p', 'i').call(pos) != 0
      return pos.unpack('ll')
    else
      return nil
    end
  end
  def pos
    @x, @y = screen_to_client(*global_pos)
    width, height = @width,@height
    if @x ==nil or @y== nil
      return 0,0
    end
    if (@x >= 0 and @y >= 0)
      @x = @x==nil ? 0 : @x
      @y = @y==nil ? 0 : @y
      return @x, @y
    else
      return 0,0
    end
  end
  def screen_to_client(x, y)
    return nil unless x and y
    pos = [x, y].pack('ll')
    if Win32API.new('user32', 'ScreenToClient', %w(l p), 'i').call(hwnd, pos) != 0
      return pos.unpack('ll')
    else
      return nil
    end
  end
  def hwnd
    game_name = "\0" * 256
    Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l').call('Game','Title','',game_name,255,".\\Game.ini")
    game_name.delete!("\0")
    return Win32API.new('user32', 'FindWindowA', %w(p p), 'l').call('RGSS Player',game_name)
  end
  def client_size
    rect = [0, 0, 0, 0].pack('l4')
    Win32API.new('user32', 'GetClientRect', %w(l p), 'i').call(hwnd, rect)
    right, bottom = rect.unpack('l4')[2..3]
    return right, bottom
  end
  def client_pos
    rect = [0, 0, 0, 0].pack('l4')
    Win32API.new('user32', 'GetWindowRect', %w(l p), 'i').call(hwnd, rect)
    left, upper = rect.unpack('l4')[0..1]
    return left+4, upper+30
  end 
  def grid
    return nil if @pos == nil
    offsetx = $game_map.display_x / 8
    offsety = $game_map.display_y / 8
    x = (@pos[0] + offsetx) / 32
    y = (@pos[1] + offsety) / 32
    return [x, y]
  end
end
Spoiler:
Code:
#===========================================
#                          Pathfinding
#                    par SephirothSpawn
#===========================================
class Game_Character
  alias nf_pf_game_character_initialize initialize
  alias nf_pf_game_character_update update
  attr_accessor :map
  attr_accessor :runpath
  def initialize
    nf_pf_game_character_initialize
    @map = nil
    @runpath = false
  end
  def update
    run_path if @runpath == true
    nf_pf_game_character_update
  end
  def run_path
    return if moving?
    step = @map[@x,@y]
    if step == 1
      @map = nil
      @runpath = false
      return
    end
    dir = rand(2)
    case dir
    when 0
      move_right if @map[@x+1,@y] == step - 1 and step != 0
      move_down if @map[@x,@y+1] == step - 1 and step != 0
      move_left if @map[@x-1,@y] == step -1 and step != 0
      move_up if @map[@x,@y-1] == step - 1 and step != 0
    when 1
      move_up if @map[@x,@y-1] == step - 1 and step != 0
      move_left if @map[@x-1,@y] == step -1 and step != 0
      move_down if @map[@x,@y+1] == step - 1 and step != 0
      move_right if @map[@x+1,@y] == step - 1 and step != 0
    end
  end
  def find_path(x,y)
    sx, sy = @x, @y
    result = setup_map(sx,sy,x,y)
    @runpath = result[0]
    @map = result[1]
    @map[sx,sy] = result[2] if result[2] != nil
  end
  def clear_path
    @map = nil
    @runpath = false
  end
  def setup_map(sx,sy,ex,ey)
    map = Table.new($game_map.width, $game_map.height)
    map[ex,ey] = 1
    old_positions = []
    new_positions = []
    old_positions.push([ex, ey])
    depth = 2
    depth.upto(100){|step|
      loop do
        break if old_positions[0] == nil
        x,y = old_positions.shift
        return [true, map, step] if x == sx and y+1 == sy
        if $game_player.passable?(x, y) and map[x,y + 1] == 0
          map[x,y + 1] = step
          new_positions.push([x,y + 1])
        end
        return [true, map, step] if x-1 == sx and y == sy
        if $game_player.passable?(x, y) and map[x - 1,y] == 0
          map[x - 1,y] = step
          new_positions.push([x - 1,y])
        end
        return [true, map, step] if x+1 == sx and y == sy
        if $game_player.passable?(x, y) and map[x + 1,y] == 0
          map[x + 1,y] = step
          new_positions.push([x + 1,y])
        end
        return [true, map, step] if x == sx and y-1 == sy
        if $game_player.passable?(x, y) and map[x,y - 1] == 0
          map[x,y - 1] = step
          new_positions.push([x,y - 1])
        end
      end
      old_positions = new_positions
      new_positions = []
    }
    return [false, nil, nil]
  end
end
class Game_Map
  alias pf_game_map_setup setup
  def setup(map_id)
    pf_game_map_setup(map_id)
    $game_player.clear_path
  end
end
Spoiler:
Code:
#===========================================
#                      Mouvement par souris
#                            par berka
#===========================================
#
# clic gauche: definir le point d'arrivée
# clic droit: suivre/ne pas suivre le héros
# touche directionnelles: deplacer la map
#===========================================


Vitesse = 8  #vitesse du scroll de la map
$mouse = Mouse.new

class Scene_Map
  alias scroll_update update
  def update
    Keyboard.update
    $mouse.update
    if Keyboard.trigger?(Keyboard::Mouse_Left)
      $game_player.find_path($mouse.grid[0], $mouse.grid[1])
    end
    scroll_update
  end
end
class Game_Player < Game_Character
  alias scroll_init initialize
  def initialize
    scroll_init
    @scroll = false
  end
  def update
    last_real_x = @real_x
    last_real_y = @real_y
    last_moving = moving?
    move_by_input
    super
    if Keyboard.trigger?(Keyboard::Mouse_Right)
      if @scroll == false
        $game_player.center($game_player.x, $game_player.y)
        @scroll = true
      else
        @scroll = false
      end
    end
    @scroll = false if Input.dir4 != 0
    $game_player.update_scroll(last_real_x, last_real_y) if @scroll == true   
    update_vehicle
    update_nonmoving(last_moving)
  end
  def move_by_input
    return unless movable?
    return if $game_map.interpreter.running?
    case Input.dir4
    when 2; $game_map.start_scroll(2, 1, Vitesse)
    when 4; $game_map.start_scroll(4, 1, Vitesse)
    when 6; $game_map.start_scroll(6, 1, Vitesse)
    when 8; $game_map.start_scroll(8, 1, Vitesse)
    end
  end
end
Gummy
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 28
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Mer 21 Mai 2008 - 14:32
Si c'est bien pour VX, merci beaucoup Berka! Smile
bahamut
bahamut
Membre

Nombre de messages : 434
Age : 30
Localisation : avec mon crayon :love:
Distinction : aucune
Date d'inscription : 19/03/2008

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Mer 21 Mai 2008 - 16:38
Je l' ai testé!
Mais Berka tu es ...tu es...;génial y a pas d' autres mots Diriger le hero a la souris 354280 Diriger le hero a la souris 319323 Diriger le hero a la souris 354280
avatar
Naasmar
Membre

Nombre de messages : 185
Age : 23
Distinction : aucune
Date d'inscription : 15/03/2008

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 22 Mai 2008 - 17:04
Ça pourrait servir.
Korndor
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 106
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 22 Mai 2008 - 18:45
Oui, mais pas le flood! :P
Essaie d'éviter Wink
fabY
fabY
Membre

Nombre de messages : 229
Distinction : aucune
Date d'inscription : 29/01/2008
http://rpg-maker-vx.bbactif.com/index.htm

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Sam 24 Mai 2008 - 11:42
Excellent !
Berka, je te le redis tu est mon dieux Diriger le hero a la souris 153215

Peut-on activer et désactiver le script quand l'on veut ? Avec un appelle de script par exemple.
Comme ça je pourrais crée des minis-jeux avec ce script et le désactiver lorsqu'il aura finit !
Zantetsuken
Zantetsuken
Membre

Nombre de messages : 31
Age : 25
Localisation : finistere
Distinction : aucune
Date d'inscription : 30/04/2008

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Sam 24 Mai 2008 - 11:46
Ouai tu gere Berka Diriger le hero a la souris 418140 !!! Et je trouve que c'est une bonne idée celle pour le mini-jeux avec l'appelle de script
Diriger le hero a la souris 171548
TokAmentia
TokAmentia
Membre

Nombre de messages : 48
Age : 25
Localisation : Ishimura
Distinction : aucune
Date d'inscription : 17/05/2008
https://www.youtube.com/channel/UC5gMR8EfhtH-bS7gkWgJPsA

Diriger le hero a la souris Empty ca marche pas

le Sam 24 Mai 2008 - 14:08
j'inssere mes trois scripts jusque la tous marche bien mais quand je veut ouvrir le jeu avant même d'avoir attein l'écran titre j'ai un message d'erreur donc je pense que c'est un probléme de langue des script si quelqu'un pouvez les traduires ca me servirer beaucoup.
merci


Dernière édition par 4rantedooz le Sam 24 Mai 2008 - 14:18, édité 1 fois
Gummy
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 28
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Sam 24 Mai 2008 - 14:10
Non. Donne un descriptif plus détaillé du problème et après on en reparle.
TokAmentia
TokAmentia
Membre

Nombre de messages : 48
Age : 25
Localisation : Ishimura
Distinction : aucune
Date d'inscription : 17/05/2008
https://www.youtube.com/channel/UC5gMR8EfhtH-bS7gkWgJPsA

Diriger le hero a la souris Empty voila

le Sam 24 Mai 2008 - 15:16
4rantedooz a écrit:j'inssere mes trois scripts jusque la tous marche bien mais quand je veut ouvrir le jeu avant même d'avoir attein l'écran titre j'ai un message d'erreur donc je pense que c'est un probléme de langue des script si quelqu'un pouvez les traduires ca me servirer beaucoup.
merci

c'est ca mon probléme
Gummy
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 28
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Sam 24 Mai 2008 - 15:19
Et le message d'erreur, il dit quoi?

Si tu ne nous donnes pas l'info on peut pas t'aider...
TokAmentia
TokAmentia
Membre

Nombre de messages : 48
Age : 25
Localisation : Ishimura
Distinction : aucune
Date d'inscription : 17/05/2008
https://www.youtube.com/channel/UC5gMR8EfhtH-bS7gkWgJPsA

Diriger le hero a la souris Empty il dit

le Sam 24 Mai 2008 - 15:39
le message d'erreur dit :
script 'deplacer sourit 3' line 13: name error occured.
uninitialized constant Mouse
Gummy
Gummy
Staffeux retraité

Nombre de messages : 2666
Age : 28
Localisation : Belgique
Distinction : Modérateur imprévisible

Papy Lolo' [Nabots Nimousse]


Date d'inscription : 27/01/2008

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Sam 24 Mai 2008 - 19:20
Maintenant on sait que c'est la ligne 13 qui plante, reste à savoir pourquoi.

Berkaaaaaaaaa? Diriger le hero a la souris 621135
avatar
Az'
Membre

Nombre de messages : 3318
Age : 74
Date d'inscription : 22/12/2007

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Sam 24 Mai 2008 - 20:17
Où est-ce que tu as placé les scripts ?
Au-dessus de main, ailleurs, précise.

Sinon, je ne voies pas réellement ce qui peut y avoir, as-tu ajouté d'autres scripts récemment ?


Dernière édition par Mist' le Ven 17 Mar 2017 - 14:33, édité 1 fois
Sianobel
Sianobel
Membre

Nombre de messages : 25
Age : 32
Localisation : Bruxelles
Distinction : aucune
Date d'inscription : 24/06/2008
http://perhiliel.evoconcept.net/

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Mer 2 Juil 2008 - 12:49
Bonjour, ton script est génial. Y a t il moyen que le mode clic droit soit enclenché dès le début et reste? Ça serait vraiment super.


Sinon, joli travail. Je prend tout de suite.
Berka
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Mer 2 Juil 2008 - 15:35
il te suffit juste de rajouter, dans le troisieme script:
@scroll = true
apres
super
et avant
if Keyboard.trigger?(Keyboard::Mouse_Right)
Sianobel
Sianobel
Membre

Nombre de messages : 25
Age : 32
Localisation : Bruxelles
Distinction : aucune
Date d'inscription : 24/06/2008
http://perhiliel.evoconcept.net/

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Mer 2 Juil 2008 - 15:51
Génial, un tout grand merci!
longhost
longhost
Membre

Nombre de messages : 12
Distinction : aucune
Date d'inscription : 20/12/2007

Diriger le hero a la souris Empty bug

le Jeu 3 Juil 2008 - 13:44
Le script bug au niveau des moyens de transport (barque, bateau, etc...).
Le déplacement a la souris devient impossible et les flèches font juste défiler la map.

Mais très bon script sinon.
Ultimate
Ultimate
Membre

Nombre de messages : 105
Age : 27
Distinction : aucune
Date d'inscription : 25/06/2008
http://www.sydrus.fr

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 3 Juil 2008 - 13:50
Héhé ! Couplé avec mon système de T-RPG ca peut être énorme ! Merci beaucoup pour ton travail Berka ça ne sera pas inutile Diriger le hero a la souris 263772 Diriger le hero a la souris 938117

:1010: Diriger le hero a la souris 434126
Sianobel
Sianobel
Membre

Nombre de messages : 25
Age : 32
Localisation : Bruxelles
Distinction : aucune
Date d'inscription : 24/06/2008
http://perhiliel.evoconcept.net/

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 3 Juil 2008 - 13:55
Je sais que j'abuse peut être un peu mais serait il possible d'enlever l'action des flèches (donc déplacer la carte) afin de laisser la possibilité de ce déplacer avec?

De plus, je crois que ça résoudrais le problème qu'a invoqué longhost.


Bien à toi
Berka
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 3 Juil 2008 - 15:20
tu as juste a supprimer, dans le dernier script:

Code:
def move_by_input
    return unless movable?
    return if $game_map.interpreter.running?
    case Input.dir4
      when 2; $game_map.start_scroll(2, 1, Vitesse)
      when 4; $game_map.start_scroll(4, 1, Vitesse)
      when 6; $game_map.start_scroll(6, 1, Vitesse)
      when 8; $game_map.start_scroll(8, 1, Vitesse)
    end
  end
attention, tu dois avoir un truc comme ca apres (compte le nombre de end)

Code:
@scroll = false if Input.dir4 != 0
    $game_player.update_scroll(last_real_x, last_real_y) if @scroll == true 
    update_vehicle
    update_nonmoving(last_moving)
  end
end
longhost
longhost
Membre

Nombre de messages : 12
Distinction : aucune
Date d'inscription : 20/12/2007

Diriger le hero a la souris Empty suite

le Jeu 3 Juil 2008 - 15:26
Berka le code est bon a présent mais la caméra ne suis plus le véhicule.
Sinon comment peut-on réassigner le clic droit en touche action,
je pense que cela serait plus utile pour un T-rpg ou a A-rpg.

Excellent boulot Berka dont je ne suis qu'un humble testeur.
Berka
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 3 Juil 2008 - 15:33
bon... ca me donne une idee !
je re !

edit: t'entends quoi par touche action ?
le hero se deplacer et declenche l'event cible ?
ou il declanche juste l'event sans bouger ?
longhost
longhost
Membre

Nombre de messages : 12
Distinction : aucune
Date d'inscription : 20/12/2007

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 3 Juil 2008 - 15:54
ouep quand tu clic sur la cible alors que tu est a coter sa le déclenche.

Dans un combat a-rpg, si tu est équipé d'une épée tu attaque direct au
contact du monstre avec le bouton droit enclencher.

Le problème est de déterminer la position de l'event qui t'interresse
(certainement en variable dans le system vu que le probleme ce pose aussi avec les touche standart clavier).
Berka
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

le Jeu 3 Juil 2008 - 16:37
t'utilises quel script de a-rpg ?
Contenu sponsorisé

Diriger le hero a la souris Empty Re: Diriger le hero a la souris

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum