Sujet n°14031
Posté par Therand le 2 Aoû - 00:32 (2014)
Titre : Le Cherch'Objet + détection de case!
Bonjour à tous,

J'ai remarqué que plusieurs d'entre vous ne seraient pas contre un petit tuto pour le Cherch'Objet amélioré.
Celui que je vous propose ici détecte l'objet en question sur la map et vous fournit trois messages selon trois critères:
-Si l'objet est présent sur la map
-Si l'objet est à moins de X pas
-Si l'objet est à plus de X pas

Il détecte l'objet comme suit:

Vous pouvez bien-entendu régler la distance X (nombre de case) (sur l'image, la distance est de 5)

Place aux explications...

1- En premier lieu, préparer trois interrupteurs:
-CHERCH'OBJET
-CHERCHPROCHE
-CHERCHLOIN

2-Pour la BDD, on va partir sur quelque chose de très basique:
-Onglet objet, crée un objet... CHERCH'OBJET qui appellera notre futur évènement commun
-Onglet évènement commun, créer un évènement commun comme ceci:

<>Interrupteur(s) [XXXX: CHERCHPROCHE] désactivé
<>Interrupteur(s) [XXXX: CHERCHLOIN] désactivé
<>Interrupteur(s) [XXXX: CHERCH'OBJET] désactivé
<>Attendre 20 Frames
<>Jouer un effet sonore (SE) : 'select', volume : 100, tempo : 100
<>Attendre 1 Frames
<>Jouer un effet sonore (SE) : 'select', volume : 100, tempo : 100
<>Attendre 1 Frames
<>Jouer un effet sonore (SE) : 'select', volume : 100, tempo : 100
<>Attendre 1 Frames
<>Jouer un effet sonore (SE) : 'select', volume : 100, tempo : 100
<>Attendre 1 Frames
<>Jouer un effet sonore (SE) : 'select', volume : 100, tempo : 100
<>Attendre 1 Frames
<>Jouer un effet sonore (SE) : 'select', volume : 100, tempo : 100
<>Attendre 1 Frames
<>Condition : si l'interrupteur [XXXX: CHERCHPROCHE] activé
<>Message : Le CHERCH'OBJET trouve quelque chose,
: c'est tout proche!
<>Interrupteur(s) [XXXX: CHERCH'OBJET] activé
<>Sinon
<>Condition : si l'interrupteur [XXXX: CHERCHLOIN] activé
<>Message : Le CHERCH'OBJET trouve quelque chose!
<>Interrupteur(s) [XXXX: CHERCH'OBJET] activé
<>Sinon
<>Message : Le CHERCH'OBJET n'a rien trouvé...
<>Fin
<>Fin


Et voilà pour l’évènement commun!
N'oublier pas d'englober l’évènement commun avec une condition pour invalider l'utilisation du Cherch'Objet si le joueur est en surf, vélo,...

3-L'Event sur la carte:

L'Event à donc trois page, sans apparence, la première et la troisième sont en processus parallèle, la deuxième quant à elle est en appuie sur la touche action.
La page deux possède en condition d'activation, l’interrupteur CHERCH'OBJET
La page trois possède en condition d'activation, l’interrupteur local A

-PAGE 1:
<>Condition : si Script : 'cherchobjet(6)'
<>Interrupteur(s) [XXXX: CHERCHPROCHE] activé
<>Fin
<>Interrupteur(s) [XXXX: CHERCHLOIN] activé
<>Attendre 10 Frames
<>Interrupteur(s) [XXXX: CHERCH'OBJET] activé

-PAGE 2:
<>Objet : "l'objet en question..." + 1
<>Jouer un effet musical (ME) : 'Item', volume : 100, tempo : 100
<>Message : Vous trouvez "Objet"
<>Interrupteur local A activé

-PAGE 3:
<>Interrupteur(s) [XXXX: CHERCH'OBJET] désactivé
<>Effacer cet évènement


4-Ici on va apporter une petite modification au script Interpreter..
Donc rendez-vous dans les script, localiser le script "Interpreter" et au environ de la ligne 1397 vous trouverez ceci:
Code:

  def player_front_passable?
    coord = $game_player.front_tile
    return $game_map.passable?(coord[0],coord[1], 10 - $game_player.direction)
  end


JUSTE EN DESSOUS, copier ceci:
Code:

  #-----------------------------------------------------------------------------
  # cherchobjet
  #-----------------------------------------------------------------------------
  def cherchobjet(distance)
    character = $game_map.events[@event_id]
    if $game_player.moving?
      return false
    end
    case character.direction
    when 4 # Tourné vers la gauche
      if character.y <= $game_player.y + 6 and
          character.x <= $game_player.x + 6 and
          (character.x - $game_player.x).abs <= distance
        return true
      end
    when 8 # Tourné vers le haut
      if character.x <= $game_player.x + 6 and
          character.y <= $game_player.y + 6 and
          (character.y - $game_player.y).abs <= distance
        return true
      end
    when 6 # Tourné vers la droite
      if character.y <= $game_player.y + 6 and
          character.x <= $game_player.x + 6 and
          (character.x - $game_player.x).abs <= distance
        return true
      end
    when 2 # Tourné vers le bas
      if character.x <= $game_player.x + 6 and
          character.y <= $game_player.y + 6 and
          (character.y - $game_player.y).abs <= distance
        return true
      end
    end
  end



Vous avez à présent un systeme "Cherch'Objet" fonctionnel Imbécile heureux
Pour changer le rayon X, remplacez simplement les chiffres "6" par le chiffre de votre choix

Posté par TouzaxA le 2 Aoû - 07:14 (2014)
Utile pour les personnes qui ont la flemme de coder le leur. Merci du partage. Imbécile heureux

Posté par Ku'rei le 3 Aoû - 16:45 (2014)
Bien vu, une erreur reste : ton objet réaparaîtra dès que tu quittera la map. Je parle de la commande Effacer cet évènement, tu devrais utiliser un interrupteur local activant une page vide Clin d'œil foireux

EDIT:: Je ne comprend pas ton évènement (le premier), tu désactive tout les interrupteurs avant de les tester ?

Posté par Therand le 3 Aoû - 16:55 (2014)
Ha oui, moi qui pensais que cette commande effaçait définitivement l'Event :/
Je vais changer cela! Merci

Je désactive tout les interrupteur, sinon il te donne le dernier message vu,
donc en gros si a la première utilisation tu étais loin et qu'à la deuxième tu est proche, il te diras quand même que tu es loin..

Il y a un temps d'attente après la désactivation, ce qui lui laisse le temps de vérifier si l'objet au sol est proche ou loin.

EDIT: l'Event ne réapparaitra pas au changement de map car l’interrupteur "A" reste activé
J'ai testé pour en avoir la certitude.