Sujet n°13160
Posté par Ku'rei le 6 Sep - 16:02 (2013)
Titre : Murets
Bonjour tout le monde,

Voici mon script sur les murets que l'on peut sauter. C'est un petit script qui pourrait servir à plus d'un.

Fonctionnalités


Ce script propose les fonctionnalités suivantes :


Instalation
Copiez/coller ce script dans un nouveau script au-dessus de Main appelé Game_Character.
Script
Code:

#============================
# Script Muret by Ku'rei Jinwu
# Version 0.2
#============================
# Credits obligatoires
#============================
module Kurei
  LOW_WALL_DOWN_RIGHT_TAG   = 6   # tag terrain des murets sautables vers la droite et le bas
  LOW_WALL_LEFT_TAG         = 5   # tag terrain des murets sautables vers la gauche
  LOW_WALL_JUMP_SOUND       = "Audio/SE/064-Swing03.ogg" # Chemin du fichier se a joueur lors du saut
  LOW_WALL_JUMP_SOUND_VOL   = 50  # Volume du son jouer lors du saut
  LOW_WALL_JUMP_SOUND_PITCH = 100 # Tempo du son jouer lors du saut
  LOW_WALL_UNEFFECTED_WORD  = "NO_LOW_WALL_JUMP"  # Mot à entrer en commentaire dans un event pour
                                  # pour qu'il ne puisse pas sauter les murets
end

class Game_Character
  attr_accessor :low_wall_effect # Est true si l'event doit sauter les murets
 
  #--------------------------------------------------------------------------
  # ● 下に移動
  #     turn_enabled : その場での向き変更を許可するフラグ
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # 下を向く
    if turn_enabled
      turn_down
    end
    # 通行可能な場合
    if passable?(@x, @y, 2)
      # 下を向く
      turn_down
      # 座標を更新
      @y += 1
      # 歩数増加
      increase_steps
    # 通行不可能な場合
    else
      # 接触イベントの起動判定
      check_event_trigger_touch(@x, @y+1)
    end
    low_wall_handler
  end
  #--------------------------------------------------------------------------
  # ● 左に移動
  #     turn_enabled : その場での向き変更を許可するフラグ
  #--------------------------------------------------------------------------
  def move_left(turn_enabled = true)
    # 左を向く
    if turn_enabled
      turn_left
    end
    # 通行可能な場合
    if passable?(@x, @y, 4)
      # 左を向く
      turn_left
      # 座標を更新
      @x -= 1
      # 歩数増加
      increase_steps
    # 通行不可能な場合
    else
      # 接触イベントの起動判定
      check_event_trigger_touch(@x-1, @y)
    end
    low_wall_handler
  end
  #--------------------------------------------------------------------------
  # ● 右に移動
  #     turn_enabled : その場での向き変更を許可するフラグ
  #--------------------------------------------------------------------------
  def move_right(turn_enabled = true)
    # 右を向く
    if turn_enabled
      turn_right
    end
    # 通行可能な場合
    if passable?(@x, @y, 6)
      # 右を向く
      turn_right
      # 座標を更新
      @x += 1
      # 歩数増加
      increase_steps
    # 通行不可能な場合
    else
      # 接触イベントの起動判定
      check_event_trigger_touch(@x+1, @y)
    end
    low_wall_handler
  end
 
  # Gère les saut par dessus les murets
  def low_wall_handler()
    if !low_wall_effect      # On quitte la fonction si le personnage ne subit pas
      return                # les effets des murets
    end   
   
    udx = udy = 0           # variable unit delta, valent -1, 0 ou 1. Determinent
                            # a case de devant du personnage
                           
    # Détermination de la case de devant
    case @direction
    when 2                  # Quand le personnage va vers le bas
      udy = 1
    when 4                  # Quand le personnage va vers la gauche
      udx = -1
    when 6                  # Quand le personnage va vers la droite
      udx = 1
    end
   
    # Detection d'un muret et saut si detection
    # saut bloqué automatiquement quand la case cible n'est pas passante
    if !moving? and !$game_map.passable?(@x + udx, @y + udy, @direction)
      if ($game_map.terrain_tag(@x + udx, @y + udy) == Kurei::LOW_WALL_DOWN_RIGHT_TAG and udx != -1) or
         ($game_map.terrain_tag(@x + udx, @y + udy) == Kurei::LOW_WALL_LEFT_TAG and udx == -1)
        #print("jump ! From ", @x, ", ", @y, " to ", @x+2*udx, ", ", @y+2*udy)
        # Lance le saut uniquement si l'atterissage est dégagé
        x = @x+2*udx
        y = @y+2*udy
        if $game_map.passable?(x, y, @direction) and $game_map.terrain_tag(x, y) != 7  and $game_map.check_event(x, y) == nil
          jump(2*udx, 2*udy)
          Audio.se_play(Kurei::LOW_WALL_JUMP_SOUND, Kurei::LOW_WALL_JUMP_SOUND_VOL, Kurei::LOW_WALL_JUMP_SOUND_PITCH)
        end
      end
    end
  end
 
  # Récupère la commande de commentaire. Retourne un string si la commande est trouvée, nil sinon
  # word : string, commande
  def get_commentaire_command(word)
    for page in event.pages
      for command in page.list
        for par in command.parameters
          if par.is_a?(String) and par.include?(word)
            return par
          end
        end
      end
    end
    return nil
  end
end

class Game_Map
  alias old_setup setup
  def setup(map_id)
    old_setup(map_id)    # Appel de l'ancienne fonction
   
    # Application de la commande commentaire d'effet de muret.
    for event in @events.values
      event.low_wall_effect = !(event.get_commentaire_command(Kurei::LOW_WALL_UNEFFECTED_WORD) != nil)
    end
    $game_player.low_wall_effect = true
  end

  # Check s'il y a un event au coordonnées données
  # renvoi nil sinon l'id de l'event présent
  def check_event(x, y)
    for event in $game_map.events.values
      if event.x == x and event.y == y
        return event.id
      end
    end
    return nil
  end
end

ATTENTION ! Ce script modifie les fonctions des scripts d'origines :


Dans la BDD :


Personnalisation :


Utilisation


Rien de spécial, placer vos tiles murets comme vous le souhaitez, le script fera le reste.

Pour désactiver le saut de muret pour un événement, faites Insérer un commentaire, et entrez-y le LOW_WALL_UNEFFECTED_WORD (par défaut : NO_LOW_WALL_JUMP), la valeur est modifiable dans les constantes du script.

Le script Unlimited_Terrain_Tags est parfaitement compatible, je vous conseille de l'utiliser si vous souhaitez économiser des tags terrains.

Historique des mises à jour

Posté par TouzaxA le 6 Sep - 17:57 (2013)
Ça peut être utile, merci du partage. Clin d'œil foireux

Posté par Nuri Yuri le 6 Sep - 17:59 (2013)
Ça a l'air pas mal mais pourquoi avoir un autre tag pour la gauche ?

Posté par Dark_Ray le 6 Sep - 18:12 (2013)
Parce que sinon on pourrait remonter les talus droite et gauche Clin d'œil foireux

Je vois que ça qui nécessite une distinction des 2

Posté par Nuri Yuri le 6 Sep - 18:26 (2013)
Ah oui x)
Ça distingue pas les par les passages. Enfin, c'est un peu bête de consommer du tag comme ça. Le mieux serait d'avoir une config' correcte des passages et vérifier si on est sur le tag 6 Gros matou qui ronronne (Enfin, je le pense comme ça :b)

Posté par Ku'rei le 6 Sep - 22:08 (2013)
C'est on pourrait tester le sens de passage. Je vois ca demain.
Les tags terrains ne sont pas consommé.

Posté par TouzaxA le 7 Sep - 07:15 (2013)
Sinon, j'ai une petite question: est-il possible de désactiver le saut de talus pour certains évents ?

Posté par Ku'rei le 7 Sep - 09:33 (2013)
Je pense qu'on peut faire ça. Mais cela nécessitera quelques modif ^^

EDIT:: Pour Yuri, faire avec les sens de passage ne fonctionnera pas, il y aura toujours un moment ou on pourra passer (quand l'atterissage n'est pas dégagé par exemple). Mais il n'y a pas de problèmes, les tags ne sont pas consomés, on peut toujours les utiliser pour les rencontres.

EDIT2::TouzaxA, c'est fait

Posté par TouzaxA le 7 Sep - 10:17 (2013)
Sinon, pour éviter de consommer des tags terrains de l'éditeur, on peut toujours implanter ceci: ./12640.html

Posté par Ku'rei le 7 Sep - 10:18 (2013)
Oui c'est une combinaison de script possible Imbécile heureux Et même trés intéressante. Au Maker de l'utiliser !

Posté par TouzaxA le 7 Sep - 10:19 (2013)
Oui, bien sûr. Il est possible par contre de le signaler sur la présentation, si les deux scripts cohabitent bien. (Normalement il n'y a pas de raison que ça n'aille pas)

Posté par Ku'rei le 7 Sep - 10:36 (2013)
Je viens de tester, tout fonctionne à merveille ! Merci Imbécile heureux

Posté par TouzaxA le 7 Sep - 10:38 (2013)
Tant mieux. Et comme ça, plus de problèmes de consommation des tags terrains. Clin d'œil foireux

Posté par gogos778 le 10 Oct - 21:43 (2014)
Je comprend pas pourquoi ça marche pas chez moi.
Pourtant j'ai tout réglé pour les tags terrains, il me met erreur de syntaxe dès la ligne 8...

Posté par Nuri Yuri le 11 Oct - 08:51 (2014)
Script mal installé, copié collé depuis le navigateur Web (l'afficheur de script injecte des codes corrompus).

Posté par joeyw le 11 Oct - 12:58 (2014)
Nuri Yuri a écrit:
Script mal installé, copié collé depuis le navigateur Web (l'afficheur de script injecte des codes corrompus).


D'ailleurs c'est assez étrange, car ce genre de problème ne m'arrive sur Chrome que depuis plusieurs semaines. Je suis obligé de remettre un coup avec Notepad++ Interrogation man

Posté par Nuri Yuri le 11 Oct - 13:01 (2014)
Moi ça m'arrive depuis que Chrome est sorti :D
Dans tous les cas, le système de code du Forum n'est pas compatible avec les navigateurs modernes donc faudrait qu'on le supprime...

Posté par Voltix le 16 Oct - 20:29 (2014)
Merci beaucoup du partage, le script fonctionne parfaitement chez moi Imbécile heureux

Posté par Kr0mos le 19 Oct - 23:26 (2014)
Salut, j'ai un petit problème en utilisant ton script, j'ai suivi la manip à la lettre, pourtant lorsque je met les tags et que je fait le test, rien n'y fait, les murets agissent comme des murs normaux. Si vous auriez une solution ça serait sympa ^^

Posté par Girakoth le 20 Oct - 06:23 (2014)
Tu as correctement réglé la passabilité et placé le script au dessus du Main?

Posté par Voltix le 22 Oct - 16:28 (2014)
Bon, le script fonctionnait parfaitement mais depuis hier mon personnage peut (en plus des murrets) sauter au dessus de TOUT autre objet de taile 1x1 qui n'est pas collé à un autre ou à une parois. Par exemple des petites rochers, des mini-pancartes, des chaises, etc.. et cela uniquement en sautant vers la gauche. Pourtant ils sont en tag 0 et me suffit de mettre en tag 1 pour résoudre le bug, c'est zarbi! (flemme de passer tout mes tilesets en tag 1, que faire?)

et oui le script est au dessus de main. :/

Posté par Girakoth le 22 Oct - 16:48 (2014)
Passer tes tiles en tag 1, c'est pas forcément une solution puisque le tag 1 correspond aux zones où tu peux tomber sur des Pokémon sauvages XD
As-tu d'autres scripts d'installés en parallèle, et qui gèrent aussi les tags?

J'ai installé le script sur mon projet et je n'ai pas ce genre de problème :/

Posté par Voltix le 22 Oct - 17:51 (2014)
Girakoth a écrit:
Passer tes tiles en tag 1, c'est pas forcément une solution puisque le tag 1 correspond aux zones où tu peux tomber sur des Pokémon sauvages XD


Aussi

Girakoth a écrit:
As-tu d'autres scripts d'installés en parallèle, et qui gèrent aussi les tags?


Non

Edit : C'est bon j'ai trouvé d'où venait le bug! Le fond sur lequel étaient placés les objets sautables avait comme tag 5, du coup on pouvait sauter au dessus des objets placé dessus! Merci quand même pour ton aide! Peut-être que quelqu'un aura un jour ce problème et que je n'aurai pas posté ceci pour rien, sait-on jamais!

Edit: Désolé du double-post, j'avais oublié qu'en postant un nouveau message on ne pouvait delete celui d'avant!

Posté par Girakoth le 22 Oct - 18:35 (2014)
J'ai corrigé ton double-post.

Oui, il faut toujours faire attention à avoir un fond neutre, sinon bah c'est moche XD

Posté par Kr0mos le 22 Oct - 19:18 (2014)
En fait le script a fini par remarcher en réessayant quelques jours après.. Merci beaucoup en tous cas pour ce magnifique script et merci
Girakoth pour ton aide mais le problème devait surement venir de PsP 0.7 qui ne lisait même pas le script Follow Me. D'ailleurs, pourriez vous me donner une modif de script pour que le Pokémon qui vous suit saute également ? Ca serait vraiment sympa, encore merci ! ^^

Posté par Girakoth le 22 Oct - 23:57 (2014)
Je connais pas trop le script du Follow Me puisque je ne l'utilise pas, donc je vais pas vraiment pouvoir t'aider pour le coup ^^'

Posté par Kr0mos le 23 Oct - 01:21 (2014)
D'acc pas de soucis. Si quelqu'un d'autre a la solution il est le bienvenu Clin d'œil foireux