Sujet n°13160
Posté par
Ku'rei le
6 Sep - 16:02 (2013)Titre :
MuretsBonjour 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 :
- Le script gère les talus sautables vers le bas, la droite et la gauche (si ça intéresse quelqu'un, il est trés facile d'ajouter les talus sautables vers le haut).
- Il empêche le saut quand la zone d'atterissage n'est pas dégagée.
- Il s'applique à tout les Game_Character, donc le joueur pourra sauter les talus mais les event aussi.
- Possibilité de personnaliser les tags terrains utilisés et le son joué.
- Les tags terrains utilisés restent utilisable pour les rencontres aléatoires.
InstalationCopiez/coller ce script dans un nouveau script au-dessus de Main appelé Game_Character.
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 :
- Game_Character.move_right
- Game_Character.move_down
- Game_Character.move_left
Dans la BDD :
- Passabilité : les tiles murets doivent tous être non passant.
- Tags terrain : Voir le début du script pour la personnalisation des tags utilisés. Par défaut, les muret passable vers la droite et le bas sont ont le tag 6, les murets passable vers la gauche ont le tag 5.
Personnalisation :
- LOW_WALL_DOWN_RIGHT_TAG : Tag des muret passables vers le bas et la droite
- LOW_WALL_LEFT_TAG : Tag des murets passables vers la gauche.
- LOW_WALL_JUMP_SOUND : Chemin du son jouer au moment du saut.
- LOW_WALL_JUMP_SOUND_VOL : Volume du son jouer.
- LOW_WALL_JUMP_SOUND_PITCH : Tempo du son jouer.
- LOW_WALL_UNEFFECTED_WORD : Mot à placer dans un commentaire d'événement afin de désactiver le saut de muret pour l'événement.
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
- 06/09/13
- 07/09/13
- Mise à jour 0.1 : possibilité de désactiver les saut de murets pour certain events, correction bug de son lorsqu'on tentait de sauter vers de l'eau
- 13/09/13
- Mise_à jour 0.2 : correction du bruit répéter lors d'un saut de murets vers une case occupée par un event
Posté par
TouzaxA le
6 Sep - 17:57 (2013)Ça peut être utile, merci du partage.
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
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
(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
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
Posté par
TouzaxA le
7 Sep - 10:38 (2013)Tant mieux. Et comme ça, plus de problèmes de consommation des tags terrains.
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++
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
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