[Script]Modifier les interrupteurs locaux à distance

  • 1 Réponses
  • 118 Vues
*

Hors ligne Leikt

Bonjour à tous,

Dans le but d'éviter d'utiliser des interrupteurs de jeu pour tout et rien que ça devienne chaotique quand le jeu prend de l'ampleur, je fais ce petit tutoriel pour montrer à tout le monde comment modifier les interrupteurs locaux des évènement à partir d'autres évènements. Je pense à pas mal de cas utile :
 - Combat contre des jumaux (deux évents pour un combat)
 - Mécanisme de bouton (j'appuie sur le bouton, ça ouvre une porte)
 - ...

Comment faire ?

Pour modifier l'interrupteur local d'un évènement il vous faut :
 - le nom de l'interrupteur local
 - l'id de l'évènement
 - la map dans laquelle se trouve l'évènement

Et voici la commande de script à Insérer dans l'évènement voulant modifier l'interrupteur local d'un autre élément :
$game_self_switches[[map_id, event_id, self_switch]] = true # ou false si vous voulez le désactiver
$game_map.events[event_id].refresh if map_id == $game_map.map_id #Pour que l'event prenne en compte le changement
avec
map_id : l'id de la map
event_id : l'id de l’événement à modifier
self_switch : 'A', 'B', 'C' ou 'D'

Exemple :
# Je suis sur la map 12
$game_self_switches[[12, 4, 'A']] = true # Active l'interrupteur local A de l'évent 4 de la map 12
$game_map.events[4].refresh # L'event prend en compte la modification
$game_self_switches[[25, 5, 'B']] = false # Désactive l'interrupteur local B de l'évent 5 de la map 25
# Le rafraichissement se fera lors du chargement de la map 25

Pour aller plus loin
Le script tapé ci-dessus n'est pas très friendly. Je vous propose de rendre la modification d'interrupteurs locaux plus sympathique via un script qui s'occupera de tout :)

Ouvrez la fenêtre de script, insérez un nouveau script au-dessus de Main. Appelez le Self_Switches_Control et copiez-collez-y ce script :
class Interpreter # Classe gérant les commandes d'évènement
  # Pour changer un interrupteur local
  def set_self_switch(value, self_switch, event_id, map_id = @map_id) # Notre fonction
    key = [map_id, event_id, self_switch]  # Clef pour retrouver l'interrupteur local que l'on veut modifier
    $game_self_switches[key] = (value == true) # Modification de l'interrupteur local (on le veut à True ou à False)
    $game_map.events[event_id].refresh if $game_map.map_id == map_id # On rafraichi l'event s'il est sur la même map, pour qu'il prenne en compte la modification
  end
  alias set_ss set_self_switch # Création d'un alias : on peut appeler notre fonction par set_ss ou par set_self_switch (comme vous préférer)
 
  # Pour récupérer par script un interrupteur local
  def get_self_switch(self_switch, event_id, map_id = @map_id)
    key = [map_id, event_id, self_switch]  # Clef pour retrouver l'interrupteur local que l'on veut modifier
    return $game_self_switches[key]
  end
  alias get_ss get_self_switch
end

Un petit bout de code faisant tout à votre place, pour modifier un interrupteur local, insérez ce script dans l'evenement modifiant :
set_ss(value, self_switch, event_id, map_id)
avec
value : true (activé) ou false (désactivé)
self_switch : 'A', 'B', 'C' ou 'D'
event_id : id de l'évent à modifier
map_id : id de la map où se trouve l'évènement (ne pas mettre si l'event est sur la meme map que le joueur au moment de l'éxécution du script)

C'et quand même plus simple ^^ Voici quelques exemples :
set_ss(true, 'A', 4) # Modifiera l'interrupteur local A de l'event 4 de la map sur laquelle se trouve le joueur (plus besoin de mettre l'id de la map où se trouve le joueur)
set_ss(false, 'B', 5, 25) # Désactive l'interrupteur local B de l'event 5 de la map 25

# On peut même pousser très loin et faire un toogle (si l'interrupteur est actif alors il devient desactivé et s'il est désactivé il s'active)
set_ss(! get_ss('C', 32, 2), 'C', 32, 2) # Fait un toogle sur l'interrupteur C de l'event 32 de la map 2

Et voilà, un petit tuto qui peut servir et faire économiser beaucoup d'interrupteur ^^
« Modifié: 28 mai 2017, 10:17:36 par Leikt »
"Je n'échoue jamais, soit je gagne, soit j'apprend"
- Nelson Mandela -
 
Utilisateurs ayant remercié ce post : Nuri Yuri, Yumekua, Metaiko, Bentoxx, romnair

*

Hors ligne Yumekua

[Script]Modifier les interrupteurs locaux à distance
« Réponse #1 le: 25 mai 2017, 13:57:56 »
Je connaissais l'astuce de base des interrupteurs qui s'active à distance merci de l'amélioration ^^
 
Utilisateurs ayant remercié ce post : Leikt