Variables locales

Voir le sujet précédent Voir le sujet suivant Aller en bas

Variables locales

Message par Kolom le Mar 3 Jan - 1:15

Ce script ajoute un espace nom aux variables et permet de créer une notion de "portée locale".
Elle fonctionne comme la version VX.
Il est possible d'ajouter des commandes en monkeypatchant le module Commandes et en donnant a ses méthodes une portée statique :
Code:
# Utilitaire de variables locales pour RPG MAKER VX ACE
# http://funkywork.blogspot.com
# -------------------------------------------------------------------------------
#Liste des méthodes utilisables
#=============================================================

# get(map_id, evt_id, id) -> retourne la variable n°id de l'evenement n°evt_id de la map n°map_id
# => Alias : get_by_map(map_id, evt_id, id)

# get(evt_id, id) -> retourne la variable n°id de l'evenement n°evt_id de la map courante
# => Alias : get_by_event(evt_id, id)

# get(id) -> retourne la variable n°id de l'evenement courant
# => Alias : get_by_id(id)

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# set(map_id, evt_id, id, valeur) -> attribue valeur à la variable n°id de l'evenement n°evt_id de la map n°map_id
# => Alias : set_by_map(map_id, evt_id, id, valeur)

# set(evt_id, id, valeur) -> attribue valeur à la variable n°id de l'evenement n°evt_id de la map courante
# => Alias : set_by_event(evt_id, id, valeur)

# set(id, valeur) -> attribue valeur à la variable n°id de l'evenement courant
# => Alias : set_by_id(id, valeur)

#=============================================================
# cmd("commande_name", args) => Retourne une opérande des variables
# OU cmd(:commande, args)
#=============================================================

# Liste des commandes utilisables (à appeler comme ceci : cmd(:nom_de_la_commande, parametre1, parametre2 etc...) )
module Commandes
  extend self
  # Random
  def rand(*args)
    return args[0] + Kernel.rand(args[1] - args[0])
  end
  # id Map
  def id_map(*args)
    return $game_map.map_id
  end
  #Taille de l'équipe
  def team_size(*args)
    return $game_party.members.size
  end
  # Argent de l'équipe
  def gold(*args)
    return $game_party.gold
  end
  # Nombre de pas
  def steps(*args)
    return $game_party.steps
  end
  # temps de jeu
  def play_time(*args)
    return Graphics.frame_count / Graphics.frame_rate
  end
  # Chronometre
  def timer(*args)
    return $game_system.timer / Graphics.frame_rate
  end
  # nombre de sauvegarde
  def save_count(*args)
    return $game_system.save_count
  end
  # coord_x evenement
  def event_x(*args)
    return $game_map.events[args[0]].x if args[0] != -1
    return $game_player.x
  end
  # coord_y evenement
  def event_y(*args)
    return $game_map.events[args[0]].y if args[0] != -1
    return $game_player.y
  end
  # coord screen y
  def event_screen_y(*args)
    return $game_map.events[args[0]].screen_y if args[0] != -1
    return $game_player.screen_y
  end
  # coord screen x
  def event_screen_x(*args)
    return $game_map.events[args[0]].screen_x if args[0] != -1
    return $game_player.screen_x
  end
  # coord screen x
  def event_direction(*args)
    return $game_map.events[args[0]].direction if args[0] != -1
    return $game_player.direction
  end
  # coord heros
  def heroes_x(*args)
    return Commandes::event_x(-1)
  end
  def heroes_y(*args)
    return Commandes::event_y(-1)
  end
  def heroes_screen_x(*args)
    return Commandes::event_screen_x(-1)
  end
  def heroes_screen_y(*args)
    return Commandes::event_screen_y(-1)
  end
  def heroes_direction(*args)
    return Commandes::event_direction(-1)
  end
  # Level of an actor
  def level(*args)
    return $game_actors[args[0]].level
  end
  # exp of an actor
  def exp(*args)
    return $game_actors[args[0]].exp
  end
  #hp of an actor
  def hp(*args)
    return $game_actors[args[0]].hp
  end
  # mp of an actor
  def mp(*args)
    return $game_actors[args[0]].mp
  end
  #max hp of an actor
  def max_hp(*args)
    return $game_actors[args[0]].maxhp
  end
  # max mp of an actor
  def max_mp(*args)
    return $game_actors[args[0]].maxmp
  end
  # attaque of an actor
  def atk(*args)
    return $game_actors[args[0]].atk
  end
  # defense of an actor
  def def(*args)
    return $game_actors[args[0]].def
  end
  # attaque of an actor
  def spi(*args)
    return $game_actors[args[0]].spi
  end
  # attaque of an actor
  def agi(*args)
    return $game_actors[args[0]].agi
  end
  # item
  def nb_item(*args)
    return $game_party.item_number($data_items[args[0]])
  end
  # Get a true var value
  def var(*args)
    return  $game_variables[args[0]] 
  end
  def distance_px(*args)
    event1 = (args[0] == 0) ? $game_player : $game_map.events[args[0]]
    event2 = (args[1] == 0) ? $game_player : $game_map.events[args[1]]
    return Math.hypot((event1.screen_x - event2.screen_x), (event1.screen_y-event2.screen_y))
  end
  # donne la distance entre 2 events en case
  def distance_case(*args)
    event1 = (args[0] == 0) ? $game_player : $game_map.events[args[0]]
    event2 = (args[1] == 0) ? $game_player : $game_map.events[args[1]]
    return Math.hypot((event1.x - event2.x), (event1.y-event2.y))
  end
end
class Game_SelfVar
  attr_reader :id, :event_id, :map_id
  attr_accessor :value
  def initialize id, event_id, map_id, value
    @id, @event_id, @map_id, @value = id, event_id, map_id, value
  end
  def +(value)
    @value += value
  end
  def -(value)
    @value -= value
  end
  def *(value)
    @value *= value
  end
  def /(value)
    @value /= value
  end
  def %(value)
    @value %= value
  end
  def **(value)
    @value = @value ** value
  end
  class << self
    def get map_id, event_id, id
      elt = $game_selfVars.find do |var |
        var.id == id and
        var.event_id == event_id and
        var.map_id == map_id
      end
      if elt == nil
        return 0
      else return elt.value
      end
    end
    def set map_id, event_id, id, value
      elt = $game_selfVars.index do |var |
        var.id == id and
        var.event_id == event_id and
        var.map_id == map_id
      end
      if elt == nil
        $game_selfVars << self.new(id, event_id, map_id, value)
      else
        $game_selfVars[elt].value  = value
      end
    end
  end
end
module DataManager
  class << self
    alias ace_create_game_objects create_game_objects
    alias ace_extract_save_contents extract_save_contents
    alias ace_make_save_contents make_save_contents
    def create_game_objects
      ace_create_game_objects
      $game_selfVars = Array.new
    end
    def make_save_contents
      contents = ace_make_save_contents
      contents[:selfVars] = $game_selfVars
      return contents
    end
    def extract_save_contents(contents)
      ace_extract_save_contents contents
      $game_selfVars = contents[:selfVars]
    end
  end
end

class Game_Interpreter
  def set_by_map map_id, event_id, id, value
    Game_SelfVar.set map_id, event_id, id, value
  end
  def set_by_event event_id, id, value
    Game_SelfVar.set @map_id, event_id, id, value
  end
  def set_by_id id, value
    Game_SelfVar.set @map_id, @event_id, id, value
  end
  def get_by_map map_id, event_id, id
    Game_SelfVar.get map_id, event_id, id
  end
  def get_by_event event_id, id
    Game_SelfVar.get @map_id, event_id, id
  end
  def get_by_id id
    Game_SelfVar.get @map_id, @event_id, id
  end
  def set *array
    case array.length
      when 2 then
        set_by_id array[0], array[1]
      when 3 then
        set_by_event array[0], array[1], array[2]
      when 4 then
        set_by_map array[0], array[1], array[2], array[3]
      else return false
    end
  end
  def get *array
    case array.length
      when 1 then
        return (get_by_id array[0])
      when 2 then
        (get_by_event array[0], array[1])
      when 3 then
        (get_by_map array[0], array[1], array[2])
      else return 0
    end
  end
  def cmd(commande, *args)
    case args.length
      when 0
        return Commandes::send(commande)
      when 1
        return Commandes::send(commande, args[0])
      when 2
        return Commandes::send(commande, args[0], args[1])
    end
  end
end

Je n'ai pas testé toutes les commandes Smile qui viennent de l'ancien script de Nuki.
Ce script est utile pour créer des systèmes complexes rapidement Smile
si vous avez besoin d'aide : molok6000_AT_hotmail.com
je ne lis pas souvent mes mails sur cette adresse mais je vais souvent sur MSN.
Bonne année.

Kolom
Poulet trizo Lv.3
Poulet trizo Lv.3

Messages : 16

Fiche
Palmarès: 1
Spécialité: Script
Avertissements: Aucun

Voir le profil de l'utilisateur http://funkywork.blogspot.com/

Revenir en haut Aller en bas

Re: Variables locales

Message par elm6 le Mar 3 Jan - 11:12

Ah yes, le même script que sur la commu' VX!
Merci du partage! =)
(je te met pas de points, on a supprimé toutes les barres ya quelques mois, ça servait à rien Noeliste )

_________________

« Parce que certains mystères ne demandent pas à être compris, ils ont pour seul désir d’être vécus. » - Oskar Fleisjr, Chroniques de Liève.
avatar
elm6
Justicier Lv.Zero
Justicier Lv.Zero

Messages : 2547
Age : 26

Fiche
Palmarès: 2
Spécialité: Ecriture, making
Avertissements: Aucun

Voir le profil de l'utilisateur http://imagin.jeunforum.com/portal.htm

Revenir en haut Aller en bas

Re: Variables locales

Message par Kolom le Mar 3 Jan - 11:32

Je rigole quand je querit des points Smile je m'en fiche un peu Very Happy
Pour les "commandes", je dois avouer que j'ai volé celui de Nuki pour VX donc il manque peut être des commandes PRIMORDIALES pour ACE mais écrire une commande est facile et si vous en avez besoin d'une spécifique, il suffit de demander Smile

Kolom
Poulet trizo Lv.3
Poulet trizo Lv.3

Messages : 16

Fiche
Palmarès: 1
Spécialité: Script
Avertissements: Aucun

Voir le profil de l'utilisateur http://funkywork.blogspot.com/

Revenir en haut Aller en bas

Re: Variables locales

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

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