Partagez
Aller en bas
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Script de Sanction sur zone à risque

le Mer 29 Aoû 2012 - 12:15
Sanction_Quit


Auteur : Tonyryu

Version du script : 1.00

Principe du script : Le script permet de marquer la sauvegarde utilisée avec une sanction qui sera appliqué si celle-ci n'est pas levé. Cela à pour objectif de punir un joueur qui voudrait quitterle jeu pendant un combat, ou bien après un choix de scenar qu'il n'accepterai pas.

Installation : Copie dans la section Materials

Instructions : Pour ajouter une sanction, ajouter une commande script dans un évènement contenant ce code :
Code:
DataManager.ajouter_sanction({:exp => 2000})

Les différentes sansctions sont :
- :exp : pertes d'expériences
- :level : pertes de niveaux
- :gold : pertes d'argent

En utilisant la valeur -1 pour une sanction, la totalité des gains de celle-ci sont perdu, exemple pour perdre l'intégralité de l'argent
Code:
DataManager.ajouter_sanction({:gold => -1})

Pour mettre plusieurs sanctions, faite comme cela :
Code:
DataManager.ajouter_sanction({:exp => 2000, :gold => 3000})

Pour annuler la sanction après la section critique :
Code:
DataManager.annuler_sanction

Screens :


Script :
Code:
#==============================================================================
# ■ Systeme de gestion de sanction lors d'une fermeture sans sauvegare
#------------------------------------------------------------------------------
#  Ce script a pour but de sanctionner le joueur quittant la partie sans avoir sauvegarder normalement
#
#  Version  Date          Auteur        Commentaires
#  1.00    28/08/2012    Tonyryu      Première release
#
# Attention : Ce script est ma propriété en tant que création et il est donc
# soumis au droit de la propriété intellectuelle.
# En aucun cas, il ne doit être copié ou publié vers un autre forum sans en
# avoir reçu mon accord au préalable.
#
#==============================================================================


#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  Ajout de d'une nouvelle propriété permettant de stocker la sanction
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================

class Game_System
  attr_accessor :sanctions
 
  #--------------------------------------------------------------------------
  # * Constructeur (surcharge)
  #--------------------------------------------------------------------------
  alias sanction_initialize initialize
  def initialize
    sanction_initialize
    @sanctions = {}
  end
end


#==============================================================================
# ■ DataManager
#------------------------------------------------------------------------------
#  Ajout de méthodes permettant d'ajouter ou retirer une sanction à la sauvegarde
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
module DataManager

  #--------------------------------------------------------------------------
  # ● modifier_sauvegarde
  #--------------------------------------------------------------------------
  def self.modifier_sauvegarde(pSanctions = {})
    if $game_system.save_count > 0
      header = {}
      contents = {}
      File.open(make_filename(last_savefile_index), "rb") do |file|
        header = Marshal.load(file)
        contents = Marshal.load(file)
      end
     
      contents[:system].sanctions = pSanctions
     
      File.open(make_filename(last_savefile_index), "wb") do |file|
        Marshal.dump(header, file)
        Marshal.dump(contents, file)
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # ● ajouter_sanction
  #--------------------------------------------------------------------------
  def self.ajouter_sanction(pSanctions)
    modifier_sauvegarde(pSanctions)
  end
 
  #--------------------------------------------------------------------------
  # ● annuler_sanction
  #--------------------------------------------------------------------------
  def self.annuler_sanction
    modifier_sauvegarde
  end
 
end

#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
#  Modification de la sortie de Scene_Load lors de la réussite du chargement de la sauvegarde
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
class Scene_Load
  #--------------------------------------------------------------------------
  # * on_load_success (Surcharge)
  #--------------------------------------------------------------------------
  alias sanction_load_success on_load_success
  def on_load_success
    sanction_load_success
    if $game_system.sanctions.size > 0
      SceneManager.goto(Scene_Sanction)
    end
  end 
end

#==============================================================================
# ■ Sanction_Window
#------------------------------------------------------------------------------
#  Fenêtre d'affichage de la sanction
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
class Sanction_Window < Window_Base
 
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  def initialize
    super(0, (Graphics.height / 2) - 150, Graphics.width, 300)
    refresh
  end
 
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    texte = "Vous avez quitté le jeu lors d'une section à risque\n"+
            "Voici la liste des pertes que vous subissez :\n\n"
           
    $game_system.sanctions.each do |key,value|
      case key
      when :exp
        if value == -1
          texte +=  "Expérience" + " => " + "Tout" + "\n"
        else
          texte +=  "Expérience" + " => " + value.to_s + "\n"
        end
       
      when :gold
        if value == -1
          texte +=  Vocab::currency_unit + " => " + "Tout" + "\n"
        else
          texte += Vocab::currency_unit + " => " + value.to_s + "\n"
        end
       
      when :level
        if value == -1
          texte +=  Vocab::level + " => " + "Tous" + "\n"
        else
          texte += Vocab::level + " => " + value.to_s + "\n"
        end

      end
    end
           
    tabLigne = texte.split("\n")
    idxLigne = -1
    tabLigne.each do |ligne|
      idxLigne += 1
      contents.draw_text(0,32 * idxLigne,contents.width, 30, ligne,1)
    end
   
  end
end


#==============================================================================
# ■ Scene_Sanction
#------------------------------------------------------------------------------
#  Modification de la sortie de Scene_Load lors de la réussite du chargement de la sauvegarde
#
#  Version  Date          Auteur        Commentaires
#  1.00      28/08/2012    Tonyryu      Création
#
#==============================================================================
class Scene_Sanction < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    SceneManager.clear
    @sanction_window = Sanction_Window.new
  end
 
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    goto_map if Input.trigger?(:C)
  end
 
  #--------------------------------------------------------------------------
  # * Input [OK]
  #--------------------------------------------------------------------------
  def goto_map
   
    $game_system.sanctions.each do |key,value|
      case key
      when :exp
        $game_party.members.each do |actor|
          if value == -1
            value = actor.exp
          end
          actor.change_exp(actor.exp - value, false)
        end
       
      when :gold
        if value == -1
          value = $game_party.gold
        end
        $game_party.lose_gold(value)
       
      when :level
        $game_party.members.each do |actor|
          if value == -1
            value = actor.level + 1
          end
          actor.change_level([1,actor.level-value].max, false)
        end

      end
    end
   
    $game_system.sanctions.clear
    SceneManager.goto(Scene_Map)
  end
end

+5 points de participation

avatar
Ezekiel Koening
Membre

Nombre de messages : 413
Age : 20
Localisation : Nantes
Distinction : aucune
Date d'inscription : 17/12/2011

Re: Script de Sanction sur zone à risque

le Mer 29 Aoû 2012 - 14:25
Sympa xD ! Perso, je trouve que c'est très accessoire comme script, et que si tu veux énerver le joueur, y'a pas mieux xD ! Bon, après sa peut être drôle pour des jeux humoristiques, m'enfin bon...
Imagine qu'IRL tes parents te demandent l'ordi, tu es pleins combat, et ils ont pas la patiente de t'écouter expliquer que ce combat est très important. tes obliger de fermer le jeu ! Et tu perdrais tout ton argent juste parce que tes parents t'ont demandé l'ordi ? Perso je mettrais pas ce script dans mon jeu...

M'enfin bon, je dis ça, mais je sais que tu es un très bon scripteur ^^ ! Et puis il y a peut être des gens que ça intéresse, après tout...
avatar
zido
Membre

Nombre de messages : 67
Age : 23
Localisation : France
Distinction : aucune
Date d'inscription : 19/05/2012

Re: Script de Sanction sur zone à risque

le Mer 29 Aoû 2012 - 14:50
Cataclysm a écrit: Imagine qu'IRL tes parents te demandent l'ordi, tu es pleins combat, et ils ont pas la patiente de t'écouter expliquer que ce combat est très important. tes obliger de fermer le jeu ! Et tu perdrais tout ton argent juste parce que tes parents t'ont demandé l'ordi ?
Dans ce cas il faut laisser la fenêtre de jeu ouverte et continuer plus tard Smile

Personnellement je le trouve bien utile ce script pour éviter les tricheries du genre je recharge ma partie pour réessayer un combat à l'infini alors qu'on est sur le point de perdre.
avatar
Jungle
Membre

Nombre de messages : 30
Distinction : aucune
Date d'inscription : 28/08/2012

Re: Script de Sanction sur zone à risque

le Mer 29 Aoû 2012 - 16:06
Si le joueur ne veut pas être sanctioné, mais qu'il veut quitter le jeu à ce moment précis, il sauvegarde, et il peut utiliser alt + f4 non?
avatar
tonyryu
Membre

Nombre de messages : 895
Age : 38
Localisation : Près de Nantes
Distinction : aucune
Date d'inscription : 27/05/2010
http://www.tonyryudev.com

Re: Script de Sanction sur zone à risque

le Mer 29 Aoû 2012 - 17:07
Dès que le joueur utilise une sauvegarde, la sanction enregistré dans la sauvegarde est écrasé par une sanction null. Ce sytème permet de dissuader un joueur à revenir sur un choix de scenar qu'il n'aurait pas souhaité, ou bien de quitter violemment après avoir perdu un combat important.
avatar
Elisa'
Staffeux retraité

Nombre de messages : 2924
Age : 20
Localisation : Par là-bas !
Distinction : Mon héritière que je chéris
[Coco' Smile]
Plus que 2 ans avant d'épouser Coco' ! Compte à rebours lancé !
[Auto-distinction]

Adepte du "Je le savais" alors qu'elle le savait pas.
Date d'inscription : 30/05/2009

Re: Script de Sanction sur zone à risque

le Jeu 30 Aoû 2012 - 11:45
Merci, +5 points de participation Smile

_________________


Cliquez ici pour voter pour la commu'
Contenu sponsorisé

Re: Script de Sanction sur zone à risque

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