AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  



Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

Partagez
 

 Grade Victory screen

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
RitoJS
Modérateur
Modérateur
RitoJS


Masculin Age : 29
Inscrit le : 22/12/2011
Messages : 1600

Grade Victory screen Empty
MessageSujet: Grade Victory screen   Grade Victory screen Icon_minitimeSam 3 Aoû 2013 - 11:08

Crédit: Neon Black

Ce script vous permet d'avoir un système de rang pour vos victoires.
Les rang se définisse par rapport au nombre de dégât infligé, reçu et sur le nombre de tour.
Vous pouvez aussi personnaliser votre score avec quelque commentaire:
-score[x]: Définis les points sur un monstre tué. A placé dans les commentaires des ennemis.
-onehit[x]: Même chose que pour le premier commentaire sauf qu'il agira si vous faites un oneshot. A placé dans les commentaires des ennemis.
-score[+x]: Augmente votre score lorsque vous utilisez une compétence ou un objet. Vous pouvez aussi faire "-x". A placé dans les commentaires des compétences et objets.

Screen:
Grade Victory screen RtpDt

Grade Victory screen E8BQO

Script:
Code:
###--------------------------------------------------------------------------###
#  Victory Ranking script                                                      #
#  Version 2.1a                                                                #
#                                                                              #
#      Credits:                                                                #
#  Original code by: Neon Black                                                #
#  Modified by:                                                                #
#                                                                              #
#  This work is licensed under the Creative Commons Attribution-NonCommercial  #
#  3.0 Unported License. To view a copy of this license, visit                #
#  http://creativecommons.org/licenses/by-nc/3.0/.                            #
#  Permissions beyond the scope of this license are available at              #
#  http://cphouseset.wordpress.com/liscense-and-terms-of-use/.                #
#                                                                              #
#      Contact:                                                                #
#  NeonBlack - neonblack23@live.com (e-mail) or "neonblack23" on skype        #
###--------------------------------------------------------------------------###

###--------------------------------------------------------------------------###
#      Revision information:                                                  #
#  V2.1 - 11.16.2012                                                          #
#  Added grade requirement for drops                                          #
#  Fixed an issue where drop rate was not figured properly                    #
#  V2.0 - Finished 8.11.2012                                                  #
#  Added level up windows                                                    #
#  Created score items and Grade module                                      #
#  Numerous other bugfixes and changes                                        #
#  V1.1b - 6.26.2012                                                          #
#  Fixed an error related to exp gain display                                #
#  V1.1 - 6.21.2012                                                            #
#  Added rank sprite effect                                                  #
#  V1.0 - 6.19.2012                                                            #
#  Wrote and debugged main script                                            #
###--------------------------------------------------------------------------###

###--------------------------------------------------------------------------###
#      Compatibility:                                                          #
#  This script has been tested to work with Yanfly's battle engine (just the  #
#  base engine) and Yami's PCTB.  If you have any issue, let me know and I    #
#  will address them asap.                                                    #
#  Due to the number of new windows, I will only list methods in already      #
#  existing objects here and not any of the newly created objects.            #
#                                                                              #
#  Alias      - BattleManager: setup, play_battle_bgm                        #
#                Game_Battler: execute_damage                                  #
#                Game_Enemy: initialize                                        #
#                Game_Actor: level_up                                          #
#                Scene_Battle: update_pctb_speed, dispose_all_windows,        #
#                              use_item                                        #
#                DataManager: load_database                                    #
#  Overwrites  - BattleManager: process_victory, play_battle_end_me,          #
#                              gain_gold, gain_drop_items, gain_exp          #
#                Game_Troop: make_drop_items                                  #
#                Game_Enemy: make_drop_items                                  #
#                Scene_Battle: update                                          #
#  New Objects - BattleManager: old_levels, old_skills, victory_phase?,        #
#                              skip?, victory_end                            #
#                Game_Troop: check_boss                                        #
#                Game_Actor: gain_exp_cpv, last_level_exp                      #
#                Scene_Battle: close_status_window, exp_window_update,        #
#                              update_window_rates, update_scores,            #
#                              show_victory_windows, create_leveled_windows,  #
#                              pack_and_send, remove_sprite, drop_items        #
#                RPG::UsableItem: karma_modif                                  #
#                RPG::Enemy: add_drops                                        #
#                DataManager: make_extra_drops                                #
###--------------------------------------------------------------------------###

###--------------------------------------------------------------------------###
#      Instructions:                                                          #
#  Place this script in the "Materials" section of the scripts above main.    #
#  This script requires you to set several settings for the script to work    #
#  properly.  The screen modifies the end of battle to allow a victory screen  #
#  to appear.  This script also has several notebox tags that can be added to  #
#  define changes to the grade and one note tag that will allow you to define  #
#  additional monster drops.                                                  #
###-----                                                                -----###
#                                                                              #
#      Monster Notebox Tags:                                                  #
#                                                                              #
#  drop[i:1:1:100] -or- drop[i:1:1]                                          #
#              This allows you to add drops to an enemy.  You can use either  #
#              of the two forms for this.  There are 4 arguments.  The first  #
#              argument is the type of item to drop and must be "i", "a", or  #
#              "w" for "item", "armor", or "weapon".  The second is the ID    #
#              of the item to be dropped.  The third is the drop ratio.      #
#              this is a 1 in "x" chance.  You can use any number with        #
#              higher numbers making the drop more uncommon.  The final      #
#              option does not need to be present.  This is a score option.  #
#              The player's score must be this number or above to have a      #
#              chance to get the drop.                                        #
#  score[1]  - This is the score that you get for killing a monster.  You    #
#              can set the "1" to any value.  When the monster is defeated,  #
#              this value is added to the grade at the end of battle.        #
#  onehit[1]  - This is the score added for killing a monster with a single  #
#                hit.  Note that skills with multiple hits will NOT activate  #
#                this unless the monster is killed with the FIRST hit.  Also  #
#                note that skills with the "death" effect will NOT activate    #
#                this.  You can set the "1" to any value.  The default 1-hit  #
#                kill value is defined in the config section.  This value      #
#                OVERRIDES the default 1-hit kill value on the monster it is  #
#                set on.                                                      #
###-----                                                                -----###
#                                                                              #
#      Item and Skill Notebox Tags:                                            #
#                                                                              #
#  score[+1]  - This can be used in a skill or item notebox to set the        #
#                adjusted score when the skill or item is used.  For example,  #
#                you can use "score[-20]" for a forbidden magic that will      #
#                decrease your grade at the end of battle.  You can use "+"    #
#                or "-" values and you can use any numeric value for the      #
#                score change.                                                #
###--------------------------------------------------------------------------###

###--------------------------------------------------------------------------###
#      Config:                                                                #
#  These are the default values used by several of the functions in the        #
#  script.  You may change these values as you find your game requires in      #
#  order to give the player a better playing experience based on your game.    #
#                                                                              #
module CP      # Do not edit                                                  #
module VICTORY  #  these two lines.                                            #
#                                                                              #
###-----                                                                -----###
# This is the switch used to skip all change in music during a battle.  The    #
# victory screen will still show, but the music will not change when starting  #
# or ending the battle while this switch is on.                                #
SKIP_SWITCH = 5 # Default = 5                                                  #
#                                                                              #
# This determines if a music is played at the end of battle.  If you do not    #
# want a special victory music, set the value below to "false" without the    #
# quotes.  If you just want silence, set the music name to "nil" without the  #
# quotes.  MSX_VOL and MSX_PIT are the volume and pitch of the music.          #
USE_MUSIC = true # Defalt = true                                              #
VICTORY_MUSIC = "Scene4" # Default = "Scene4"                                  #
MSX_VOL = 100 # Default = 100                                                  #
MSX_PIT = 100 # Default = 100                                                  #
#                                                                              #
# This determines if a ME is used at the end of battle.  The ME will be played #
# before the music above.  Set this to false to turn it off.                  #
USE_ME = false # Default = false                                              #
#                                                                              #
# These are the visual settings to use for the victory screen.  The first      #
# three settings are for the colour of the exp gauges.  The first two are the  #
# normal exp gauge colours, the third one is the colour to use for the exp    #
# added at the end of battle.                                                  #
EXP_GAUGE_1 = 30 # Default = 30                                                #
EXP_GAUGE_2 = 31 # Default = 31                                                #
EXP_ADDED = 17 # Default = 17                                                  #
#                                                                              #
# This setting determines if you want to flip the two lower parts of the      #
# victory screen.  By default, rank, exp and money go on the left and spoils  #
# go on the right, but if this is set to true it flips that.                  #
FLIP_LOWER = false # Default = false                                          #
#                                                                              #
# These values define how the player's hp and mp recover after leveling.  You  #
# can change these based on how you want these values to heal when a character #
# levels up.                                                                  #
#  0 = Characters do not heal hp and mp when they level.                      #
#  1 = Current hp or mp is increased based on the new hp or mp.                #
#  2 = Hp and mp are restored to the max value after level up.                #
HP_HEAL_TYPE = 0 # Default = 0                                                #
MP_HEAL_TYPE = 0 # Default = 0                                                #
#                                                                              #
# These are the text settings for the engine.  They are the pieces of info    #
# shown in the different windows at the end of battle.  Set these to the bits  #
# of text you want them to show.                                              #
LEVEL_UP = "Level Up!!" # Default = "Level Up!!"                              #
SPOILS = "Spoils" # Default = "Spoils"                                        #
EXP_NAME = "EXP" # Default = "EXP"                                            #
DEALT_NAME = "Dealt" # Default = "Dealt"                                      #
RECIEVED_NAME = "Recieved" # Default = "Recieved"                              #
TURNS_NAME = "Turns" # Default = "Turns"                                      #
RANK_NAME = "Grade" # Default = "Rank"                                        #
NO_DROPS = "No drops recieved" # Default = "No drops recieved"                #
#                                                                              #
###-----                                                                -----###
# The following are setting related to the level up windows that display after #
# the victory screen.  They can be adjusted as desired.                        #
#                                                                              #
# Sets if level ups should be displayed after the victory screen.  Set this to #
# false if you don't want these to display.                                    #
LVL_UP_ENABLE = true # Default = true                                          #
#                                                                              #
# This is the sound effect and the volume and pitch of the sound effect that  #
# played when a level up screen is displayed.  If you do not want to use a    #
# sound effect, set the first setting to "nil" without the quotes.            #
LVL_SFX = "Item3" # Default = "Item3"                                          #
LVL_VOL = 80 # Default = 80                                                    #
LVL_PIT = 100 # Default = 100                                                  #
#                                                                              #
# These bits of text are the strings that display when a character learns new  #
# skills.  The lower one displays a number in the place of "%s" and will give  #
# an error if you do not have "%s" somewhere in the string.                    #
NEW_SKILLS = "Learned:" # Default = "Learned:"                                #
MORE_SKILLS = "And %s more skills" # Default = "And %s more skills"            #
#                                                                              #
###-----                                                                -----###
# The following are the settings for determining rank and rewards at the end  #
# of battle.  The rank system can get used to reward the player for doing well #
# in battle by increasing exp or drop rate a little.  Each setting is          #
# explained a little bit more below.                                          #
#                                                                              #
# Determines if rank images are being used.  If set to true, an image will be  #
# used for showing the rank instead of the default text.  Image names are      #
# created using the below file name PLUS the rank name.  For example, if you  #
# set the file name to "Rank" and you get rank "C", it will try to find a file #
# named "RankE".                                                              #
USE_IMAGES = false # Default = false                                          #
IMAGE_NAME = "Rank" # Default = "Rank"                                        #
#                                                                              #
# The sound effect to play with images, and it's pitch and volume.  If you do  #
# not want a sound effect, set the name to "nil" without the quotes.          #
IMAGE_SFX = "Shot2" # Default = "Shot2"                                        #
SFX_VOL = 100 # Default = 100                                                  #
SFX_PIT = 100 # Default = 100                                                  #
#                                                                              #
# These are the ranks the player can recieve and the rewards associated with  #
# them.  There are 6 settings for each rank.  Please note however, the ranks  #
# must be IN ORDER from LOWEST to HIGHEST in order to work properly.  The      #
# settings are as follows:                                                    #
#    ["Rank",  points,  exp rate,  gold rate,  drop rate,  colour],            #
# Rank - This is the name of the rank in quotes.  This must be in quotes.      #
# points - The minimum number of points to achieve this rank.  Make sure the  #
#          lowest one is set to "0".                                          #
# exp rate - The rate to increase or decrease exp at the end of battle.  The  #
#            normal value is 100.                                              #
# gold rate - The rate to increase or decrease gold at the end of battle.  The #
#            normal value is 100.                                            #
# drop rate - The rate to increase or decrease drop rate at the end of battle. #
#            The normal value is 100.  Note that this does not increase the  #
#            number of times an item can drop, it just increases the chance  #
#            for it to drop.                                                  #
# colour - This is the colour the rank shows up on the victory screen.        #
RANKS =[ # Do not edit this line.                                              #

  ["E",  0, 100, 100, 100, 18],
  ["D", 100, 100, 105, 100, 20],
  ["C", 150, 100, 110, 105,  4],
  ["B", 250, 105, 110, 110, 21],
  ["A", 400, 115, 115, 115,  3],
  ["S", 700, 125, 125, 125, 17],
 
] # Do not edit this line.                                                    #
#                                                                              #
# These are the damage ratios and the points to recieve for each one.  Points  #
# are ADDED for EACH damage ratio the actual damage is BETTER than.  For      #
# example, if the player takes 140 damage and deals 200 damage, the damage    #
# ratio would be 142 and the player would get any points for values lower than #
# that.  This is the best way to determine the number of points a player gets. #
# Each line is set up with the damage ratio on the left and the points on the  #
# right side, like so:                                                        #
#    [Damage,  Point],                                                        #
DAMAGE_POINTS =[ # Do not edit this line.                                      #

  [ 50,  20],
  [ 80,  30],
  [100,  50],
  [150,  75],
  [200, 100],
  [300, 200],

] # Do not edit this line.                                                    #
#                                                                              #
# These are the point values of certain other things that can be done in      #
# battle.  If you do not want to use these, set them to "0".                  #
#                                                                              #
# Points for killing all foes in a single turn.                                #
SINGLE_TURN = 150 # Default = 150                                              #
# Points for killing a boss (collapse type in features.  Only added once.      #
BOSS_POINTS = 200 # Default = 200                                              #
# Points for taking no damage in the battle.                                  #
NO_DAMAGE = 100 # Default = 100                                                #
# Points for having full HP at the end of battle.                              #
FULL_HP = 50 # Default = 50                                                    #
# Points added for dealing a 1 hit kill to the foe.  Does not work when death  #
# is applied by the skill or item, just 1 hit kill via damage.                #
ONE_HIT = 40 # Default = 40                                                    #
###--------------------------------------------------------------------------###

###--------------------------------------------------------------------------###
#      A note to scripters:                                                    #
#  As of version 2.0 I have made it possible to add custom score items to be  #
#  used in battle.  These scores are handled by the "Grade" module.  If you    #
#  have created a new score item you want to use, you can add it to the Grade  #
#  module by using the script call "Grade.new_score(:foo, Bar)" where ":foo"  #
#  is the key you will use to access the object and "Bar" is the name of the  #
#  new objects class (in this case, the defining line for the object would be  #
#  "class Bar < Score_Base").  You can then reach this score object at any    #
#  time by using the script call "Grade.score[:foo]".  To see the base score  #
#  object or any of the pre-made score object, scroll down.  The score        #
#  objects have been placed at the top of the script.                          #
###--------------------------------------------------------------------------###


###--------------------------------------------------------------------------###
#  The following lines are the actual core code of the script.  While you are  #
#  certainly invited to look, modifying it may result in undesirable results.  #
#  Modify at your own risk!                                                    #
###--------------------------------------------------------------------------###


end  ## Close the VICTORY module.
end  ## Close the CP module.


##-----
## This is a basic score item.  There are 3 main parts to this.  The initialize
## part which defines each of the score variables to be used at the start, the
## update score part, which can be used at any time to get the current score
## the item will add, and the total part, which is used by the Grade module to
## get the final value.  You can use "attr_accessor" to create values that can
## be adjusted at any time or you can create methods to adjust different aspects
## of the score object.
##-----
class Score_Base  ## A score item.  Holds and adjusts an aspect of score.
  def initialize
    @score = 0  ## Sets the score to 0 at the start.
  end
 
  def update_score  ## Objects used to modify the score.
    return 0
  end
 
  def total  ## Create and return the score.
    update_score
    return @score
  end
end

class Score_Damage < Score_Base
  attr_accessor :dealt
  attr_accessor :recieved
  attr_accessor :onehit
 
  def initialize  ## Holds dealt and recieved damage as well as one hit scores.
    super        ## Creates a score based on dealt and recieved ratio.
    @dealt = 0
    @recieved = 0
    @onehit = 0
  end
 
  def update_score
    res = super
    if @recieved == 0
      CP::VICTORY::DAMAGE_POINTS.each {|point| res += point[1]}
    else
      dr = (@dealt * 100 / @recieved)
      CP::VICTORY::DAMAGE_POINTS.each do |point|
        next if dr < point[0]
        res += point[1]
      end
    end
    res += CP::VICTORY::NO_DAMAGE if @recieved == 0
    res += @onehit
    @score = res
  end
end

class Score_HP < Score_Base
  def initialize  ## Holds the hp at the start of battle.
    super        ## Not technically used, but checks max hp at end of battle.
    @start_hp = get_party_hp
  end
 
  def get_party_hp
    return 0 if $game_party.battle_members.empty?
    result = 0
    $game_party.battle_members.each do |member|
      result += member.hp
    end
    return result
  end
 
  def get_max_hp
    return 0 if $game_party.battle_members.empty?
    result = 0
    $game_party.battle_members.each do |member|
      result += member.mhp
    end
    return result
  end
 
  def update_score
    res = super
    res += CP::VICTORY::FULL_HP if get_party_hp == get_max_hp
    @score = res
  end
end

class Score_Troop < Score_Base
  def update_score  ## Gets score values from the existance of boss monsters
    res = super    ## as well as adding custom scores per monster.
    res += CP::VICTORY::BOSS_POINTS if $game_troop.check_boss
    res += CP::VICTORY::SINGLE_TURN if $game_troop.turn_count == 1
    $game_troop.members.each {|foe| res += foe.add_score}
    @score = res
  end
end

class Score_Skill < Score_Base
  attr_accessor :karma
 
  def initialize
    super
    @karma = 0
  end
 
  def update_score
    res = super
    res += @karma
    @score = res
  end
end

module Grade
  def self.reset  ## Holds score objects, score, and grades.
    @rate = CP::VICTORY::RANKS[0]
    @score = 0
    create_score_items
  end
 
  def self.create_score_items  ## Creates the default score items.
    @score_items = {}
    new_score(:damage, Score_Damage)
    new_score(:hp,    Score_HP)
    new_score(:troop,  Score_Troop)
    new_score(:skill,  Score_Skill)
  end
 
  def self.new_score(key, scr)  ## Adds a custom score item.
    @score_items[key] = scr.new
  end
 
  def self.update_score  ## Creates a score.
    return 0 if @score_items.empty?
    val = 0
    @score_items.each do |key, score|
      val += score.total
    end
    @score = val
  end
 
  def self.update_rate  ## Updates the rank and grade.
    update_score
    rank_top = 0
    CP::VICTORY::RANKS.each do |rank|
      next if rank[1] > @score
      if rank[1] > rank_top
        @rate = rank
        rank_top = rank[1]
      end
    end
  end
 
  def self.score  ## Returns the score.
    return @score
  end
 
  def self.rate(key = nil)  ## Gets bits of all of the rate.
    update_rate
    case key
    when :exp
      return @rate[2]
    when :gold
      return @rate[3]
    when :drop
      return @rate[4]
    else
      return @rate
    end
  end
 
  def self.score_items  ## Gets all score items for usage.
    return @score_items
  end
end

##-----
## End of score object.  The rest of the script is below.
##-----

module CP
module VICTORY
SCORE  = /SCORE\[(\d+)\]/i
KARMA  = /SCORE\[(\+|\-)?(\d+)\]/i
DROPS  = /DROP\[(\w+):(\d+):(\d+):?(\d*)\]/i
ONEHIT = /ONEHIT\[(\d+)\]/i
end  ## Used for added drops.
end

$imported = {} if $imported == nil
$imported["CP_VICTORY"] = 2.1

module BattleManager
  class << self
 
  ## Aliased to add certain new settings to the module.
  alias setup_cp_vict setup unless $@
  def setup(troop_id, can_escape = true, can_lose = false)
    Grade.reset
    setup_cp_vict(troop_id, can_escape, can_lose)
    @victory = false
    @played_bgm = 0
    @old_levels = {}; @old_skills = {}
    $game_party.all_members.each do |actr|
      id = actr.actor_id; lvl = actr.level; skl = actr.skills
      @old_levels[id] = lvl; @old_skills[id] = skl
    end
  end
 
  ## Gets the level or skills of the actors from before battle.
  def old_levels(id); return @old_levels[id]; end
  def old_skills(id); return @old_skills[id]; end
 
  ## Helps determine if the victory screen is active.
  def victory_phase?
    @phase == :victory
  end
 
  ## Determine if all musics should be skipped.
  def skip?
    $game_switches[CP::VICTORY::SKIP_SWITCH]
  end
 
  ## Aliased to skip bgm change if the switch is flipped.
  alias play_battle_bgm_cpv play_battle_bgm unless $@
  def play_battle_bgm
    play_battle_bgm_cpv unless skip?
  end
 
  ## Overwritten for the new victory screen.
  def process_victory
    return if @victory; @victory = true
    $game_system.battle_end_me.play if CP::VICTORY::USE_ME && !skip?
    RPG::BGM.fade(500) unless skip? || CP::VICTORY::USE_ME
    20.times do; Graphics.update; end
    SceneManager.scene.close_status_window
    Audio.return_audio if $imported["CP_CROSSFADE"]
    play_battle_end_me unless skip?  ## Skip the bgm change again.
    @phase = :victory
    SceneManager.scene.show_victory_windows
    exp = gain_exp
    gold = gain_gold
    gain_drop_items
    turns = $game_troop.turn_count
    dlt = Grade.score_items[:damage].dealt
    rcv = Grade.score_items[:damage].recieved
    SceneManager.scene.update_scores(dlt, rcv, turns)
    SceneManager.scene.update_window_rates(exp, gold, Grade.rate[4])
    SceneManager.scene.exp_window_update(exp)
    return true
  end
 
  ## Added to actually leave battle.
  def victory_end
    RPG::BGM.fade(500) unless skip?
    20.times do; Graphics.update; end
    SceneManager.return
    battle_end(0)
    replay_bgm_and_bgs unless skip? || $BTEST
  end
 
  ## Skipped if music is not made to change.
  def play_battle_end_me
    return if @played_bgm > 1
    @played_bgm += CP::VICTORY::USE_ME ? 1 : 2
    Audio.bgm_stop
    if CP::VICTORY::USE_MUSIC
      mus = CP::VICTORY::VICTORY_MUSIC
      vol = (CP::VICTORY::USE_ME && @played_bgm == 1) ? 0 : CP::VICTORY::MSX_VOL
      pit = CP::VICTORY::MSX_PIT
      RPG::BGM.new(mus, vol, pit).play unless mus.nil?
    else
      $game_system.battle_end_me.play
      replay_bgm_and_bgs unless $BTEST
    end
  end
 
  ## Adjusts the gold rate.
  def gain_gold
    if $game_troop.gold_total > 0
      rate = Grade.rate(:gold)
      gold = $game_troop.gold_total
      gold = gold * rate / 100
      $game_party.gain_gold(gold)
    else
      gold = 0
    end
    return gold
  end
 
  ## Adjusts the drop rate.
  def gain_drop_items
    drops = []
    rate = Grade.rate(:drop)
    $game_troop.make_drop_items(rate).each do |item|
      $game_party.gain_item(item, 1)
      drops.push(item)
    end
    SceneManager.scene.drop_items(drops)
  end
 
  ## Adjusts the exp rate.
  def gain_exp
    rate = Grade.rate(:exp)
    $game_party.all_members.each do |actor|
      actor.gain_exp_cpv($game_troop.exp_total, rate)
    end
    return $game_troop.exp_total * rate / 100
  end

  end
end

class Game_Troop < Game_Unit
  ## Checks if a monster has the boss kill flag set.
  def check_boss
    members.each do |enemy|
      next unless enemy.collapse_type == 1
      return true
    end
    return false
  end
 
  ## Adjusted drop rate.
  def make_drop_items(rate = 100)
    dead_members.inject([]) {|r, enemy| r += enemy.make_drop_items(rate) }
  end
end

class Game_Battler < Game_BattlerBase
  ## Aliased to add damage dealt and recieved to a value for later.
  alias exec_damage_cpv execute_damage unless $@
  def execute_damage(user)
    if @result.hp_damage > 0
      i = [@result.hp_damage, hp].min
      Grade.score_items[:damage].dealt += i if enemy?
      Grade.score_items[:damage].recieved += i if !enemy?
      if hp == mhp && i >= mhp && enemy?
        Grade.score_items[:damage].onehit += @one_hit
      end
    end
    exec_damage_cpv(user)
  end
end

class Game_Enemy < Game_Battler
  attr_accessor :add_score
  attr_accessor :one_hit
 
  ## Gets the default added points for an enemy.
  alias cp_gbv_initialize initialize unless $@
  def initialize(index, enemy_id)
    cp_gbv_initialize(index, enemy_id)
    enemy = $data_enemies[@enemy_id]
    @add_score = enemy.add_score
    @one_hit = enemy.one_hit
  end
 
  ## The actual adjusted drop rate.
  def make_drop_items(rate = 100)
    cpi = rate.to_f / 100
    enemy.drop_items.inject([]) do |r, di|
      if di.kind > 0 && rand * di.denominator < drop_item_rate * cpi
        if Grade.score >= di.req_grade
          r.push(item_object(di.kind, di.data_id))
        else
          r
        end
      else
        r
      end
    end
  end
end

class Game_Actor < Game_Battler
  attr_reader :actor_id
 
  alias cp_gv_level_up level_up unless $@
  def level_up
    tmp1 = mhp
    tmp2 = mmp
    cp_gv_level_up
    heal1 = mhp - tmp1
    heal2 = mmp - tmp2
    case CP::VICTORY::HP_HEAL_TYPE
    when 1; self.hp += heal1
    when 2; self.hp = mhp
    end
    case CP::VICTORY::MP_HEAL_TYPE
    when 1; self.mp += heal2
    when 2; self.mp = mmp
    end
  end
 
  ## Just made a whole new exp event here.  Adjusts the rate.
  def gain_exp_cpv(exp, vic_rate = 100)
    change_exp(self.exp + (exp * vic_rate * final_exp_rate / 100).to_i, false)
  end
 
  ## Determines the exp for the last level.
  def last_level_exp
    return 0 if @level <= 0
    return exp_for_level(@level - 1)
  end
end

class Scene_Battle < Scene_Base
  if $imported["YSA-PCTB"]
  alias cp_bv_fix_yami_pctb update_pctb_speed unless $@
  def update_pctb_speed
    return if BattleManager.victory_phase?
    cp_bv_fix_yami_pctb
  end
  end
 
  ## Overwritten to stop stuff from happening during the victory phase.
  def update
    super
    if BattleManager.in_turn?
      process_event
      process_action
    end
    BattleManager.judge_win_loss unless BattleManager.victory_phase?
    if BattleManager.victory_phase?
      if @victory_score.done and @victory_score.active
        sfx = CP::VICTORY::IMAGE_SFX
        vol = CP::VICTORY::SFX_VOL
        pit = CP::VICTORY::SFX_PIT
        RPG::SE.new(sfx, vol, pit).play unless sfx.nil?
        @victory_score.active = false
        @victory_item.active = true
      end
    end
  end
 
  ## Terminates the sprites and extra windows at the end of battle.
  alias cp_gv_dispose_all_windows dispose_all_windows unless $@
  def dispose_all_windows
    remove_sprite
    cp_gv_dispose_all_windows
  end
 
  ## Applies score loss/gain when using an item/skill.
  alias cp_gv_use_item use_item unless $@
  def use_item
    item = @subject.current_action.item
    Grade.score_items[:skill].karma += item.add_score
    cp_gv_use_item
  end
 
  ## Closes the status window sorta.
  def close_status_window
    @status_window.openness = 0
  end
 
  ## The next few call stuff.
  def exp_window_update(exp)
    @victory_main.redraw_exp(exp)
    create_leveled_windows
    pack_and_send
  end
 
  def update_window_rates(exp, gold, item)
    @victory_rank.get_rates(exp, gold)
    @victory_item_top.get_rates(item)
  end
 
  def update_scores(dealt, recieved, turns)
    @victory_score.draw_score(CP::VICTORY::DEALT_NAME, dealt, 0)
    @victory_score.draw_score(CP::VICTORY::RECIEVED_NAME, recieved, 24)
    @victory_score.draw_score(CP::VICTORY::TURNS_NAME, turns, 48)
    @victory_score.rank_stuff
  end
 
  def show_victory_windows
    @victory_main = Window_VictoryMain.new
    @victory_top = Window_VictoryTop.new
    @victory_score = Window_VictoryScore.new
    @victory_rank = Window_VictoryRank.new
    @victory_item_top = Window_VictoryItemTop.new
    @victory_item = Window_VictoryItem.new
    @victory_main.openness = 0
    @victory_top.openness = 0
    @victory_score.openness = 0
    @victory_rank.openness = 0
    @victory_item_top.openness = 0
    @victory_item.openness = 0
    @victory_main.open
    @victory_top.open
    @victory_score.open
    @victory_rank.open
    @victory_item_top.open
    @victory_item.open
    if CP::VICTORY::USE_IMAGES
      @victory_score.active = true
    else
      @victory_item.active = true
    end
  end
 
  def create_leveled_windows
    @leveled = []
    return if @victory_main.leveled.empty?
    @victory_main.leveled.each {|actor| @leveled.push(Window_LvlUp.new(actor))}
    @leveled.each {|wind| wind.visible = false}
  end
 
  def pack_and_send
    ar1 = [@victory_main, @victory_top, @victory_score, @victory_rank,
          @victory_item_top, @victory_item]
    @victory_item.get_windows(ar1, @leveled)
  end
 
  def remove_sprite
    @victory_score.remove_sprite unless @victory_score.nil? || @victory_score.disposed?
    return if @leveled.nil? || @leveled.empty?
    @leveled.each {|wind| wind.dispose}
  end
 
  ## This pushes the drop items to the drop window.
  def drop_items(drops)
    @victory_item.get_drops(drops)
  end
end

## The main window with the character faces.
class Window_VictoryMain < Window_Selectable
  attr_reader :leveled
 
  def initialize
    super(0, 48, Graphics.width, 152)
    @index = -1
    @leveled = []
    draw_all_items
  end
 
  def draw_all_items
    item_max.times {|i| draw_item(i) }
  end
 
  def redraw_exp(exp)
    item_max.times {|i| draw_exp(i, exp) }
  end
 
  def draw_item(index)
    actor = $game_party.members[index]
    rect = item_rect(index)
    draw_victory_face(actor, rect)
    draw_actor_exp_info(actor, rect.x, rect.y + 104, rect.width)
  end
 
  def draw_victory_face(actor, orect)
    bitmap = Cache.face(actor.face_name)
    rect = Rect.new(actor.face_index % 4 * 96, actor.face_index / 4 * 96, 96, 96)
    fx = (orect.width - 96) / 2
    temp_bit = Bitmap.new(orect.width, orect.height)
    temp_bit.blt(fx, 0, bitmap, rect)
    contents.blt(orect.x, orect.y, temp_bit, temp_bit.rect)
  end
 
  def draw_exp(index, exp)
    actor = $game_party.members[index]
    rect = item_rect(index)
    draw_actor_exp_info(actor, rect.x, rect.y + 104, rect.width, exp)
  end
 
  def draw_actor_exp_info(actor, x, y, width, aexp = 0)
    x += (width - 96) / 2
    width = [width, 96].min
    aexr = aexp * actor.exr
    cexp = actor.exp - actor.current_level_exp
    nexp = actor.next_level_exp - actor.current_level_exp
    if cexp - aexr >= 0
      rate = cexp.to_f / nexp
      rate = 1.0 if rate > 1.0
      gc1 = text_color(CP::VICTORY::EXP_ADDED)
      gc2 = text_color(CP::VICTORY::EXP_ADDED)
      draw_gauge(x, y, width, rate, gc1, gc2)
      cexp -= aexr
      rate = cexp.to_f / nexp
      rate = 1.0 if rate > 1.0
      rate = 1.0 if actor.level == actor.max_level
      gc1 = text_color(CP::VICTORY::EXP_GAUGE_1)
      gc2 = text_color(CP::VICTORY::EXP_GAUGE_2)
      draw_gauge_clear(x, y, width, rate, gc1, gc2)
    else
      rate = 1.0
      gc1 = text_color(CP::VICTORY::EXP_ADDED)
      gc2 = text_color(CP::VICTORY::EXP_ADDED)
      draw_gauge(x, y, width, rate, gc1, gc2)
      cexp = actor.exp - actor.last_level_exp - aexr
      nexp = actor.current_level_exp - actor.last_level_exp
      rate = cexp.to_f / nexp
      gc1 = text_color(CP::VICTORY::EXP_GAUGE_1)
      gc2 = text_color(CP::VICTORY::EXP_GAUGE_2)
      draw_gauge_clear(x, y, width, rate, gc1, gc2)
      change_color(normal_color)
      draw_text(x, y, width, line_height, CP::VICTORY::LEVEL_UP, 1)
      @leveled.push(actor)
    end
  end
   
  def draw_gauge_clear(x, y, width, rate, color1, color2)
    fill_w = (width * rate).to_i
    gauge_y = y + line_height - 8
    contents.gradient_fill_rect(x, gauge_y, fill_w, 6, color1, color2)
  end
 
  def item_max
    $game_party.battle_members.size
  end
 
  def item_height
    return 128
  end
 
  def col_max
    $game_party.max_battle_members
  end
 
  def spacing
    return 0
  end
end

## The window at the top that says victory stuff.
class Window_VictoryTop < Window_Base
  def initialize
    super(0, 0, Graphics.width, 48)
    draw_title
  end
 
  def draw_title
    title = sprintf(Vocab::Victory, $game_party.name)
    change_color(normal_color)
    draw_text(0, 0, contents.width, line_height, title, 1)
  end
end

## The window that shows rank and score stuff.
class Window_VictoryScore < Window_Base
  attr_accessor :done
 
  def initialize
    side = CP::VICTORY::FLIP_LOWER ? Graphics.width / 2 : 0
    super(side, 200, Graphics.width / 2, Graphics.height - 272)
    @done = false
    setup_image if CP::VICTORY::USE_IMAGES
  end
 
  def update
    super
    unless @rank.nil? or @done or !open?
      @rank.opacity += 25
      @rank.zoom_x -= 0.2
      @rank.zoom_y -= 0.2
      if @rank.zoom_y < 1.0
        @done = true
        @rank.zoom_x = 1.0
        @rank.zoom_y = 1.0
      end
    end
  end
 
  def setup_image
    @rank = Sprite.new
  end
 
  def remove_sprite
    @rank.dispose unless @rank.nil?
  end
 
  def draw_score(name, value, y)
    change_color(system_color)
    draw_text(16, y, contents.width-32, 24, name, 0)
    change_color(normal_color)
    draw_text(16, y, contents.width-32, 24, value, 2)
  end
 
  def rank_stuff
    draw_rank
    draw_image if CP::VICTORY::USE_IMAGES
  end
 
  def draw_image
    ranking = CP::VICTORY::IMAGE_NAME + Grade.rate[0]
    @rank.bitmap = Cache.system(ranking)
    @rank.ox = @rank.bitmap.width / 2
    @rank.oy = @rank.bitmap.height / 2
    @rank.opacity = 0
    @rank.zoom_x = 5.0
    @rank.zoom_y = 5.0
    @rank.x = x + width - padding - 16 - @rank.bitmap.width / 2
    @rank.y = y + height - padding - 16
    @rank.z = z + 10
  end
 
  def draw_rank
    color = Grade.rate[5]
    rank = Grade.rate[0]
    change_color(system_color)
    contents.font.size = 32
    fs = contents.font.size
    draw_text(16, contents.height-fs, contents.width-32, fs, CP::VICTORY::RANK_NAME, 0)
    change_color(normal_color) if color.nil?
    change_color(text_color(color)) unless color.nil?
    draw_text(16, contents.height-fs, contents.width-32, fs, rank, 2) unless CP::VICTORY::USE_IMAGES
  end
end

## The window that shows exp and gold.
class Window_VictoryRank < Window_Base
  def initialize
    side = CP::VICTORY::FLIP_LOWER ? Graphics.width / 2 : 0
    super(side, Graphics.height - 72, Graphics.width / 2, 72)
  end
 
  def get_rates(exp, gold)
    draw_object(Grade.rate[2], CP::VICTORY::EXP_NAME, exp, 0)
    draw_object(Grade.rate[3], Vocab.currency_unit, gold, 24)
  end
 
  def draw_object(rate, name, value, y)
    change_color(normal_color)
    draw_text(16, y, contents.width - 32, 24, value, 0)
    n = contents.text_size(value).width
    change_color(system_color)
    draw_text(n + 20, y, contents.width - n - 36, 24, name, 0)
    change_color(normal_color)
    text = rate.to_s + "%"
    draw_text(16, y, contents.width - 32, 24, text, 2)
  end
end

## The window that shows drop rate.
class Window_VictoryItemTop < Window_Base
  def initialize
    side = CP::VICTORY::FLIP_LOWER ? 0 : Graphics.width / 2
    super(side, 200, Graphics.width / 2, 48)
  end
 
  def get_rates(rate)
    change_color(system_color)
    draw_text(16, 0, contents.width-32, 24, CP::VICTORY::SPOILS, 0)
    change_color(normal_color)
    text = rate.to_s + "%"
    draw_text(16, 0, contents.width-32, 24, text, 2)
  end
end

## The window that shows items.  You can scroll through the items in it.
class Window_VictoryItem < Window_Selectable
  def initialize
    side = CP::VICTORY::FLIP_LOWER ? 0 : Graphics.width / 2
    super(side, 248, Graphics.width / 2, Graphics.height - 248)
    @index = 0
  end
 
  def item_max
    @data ? @data.size : 0
  end
 
  def draw_all_items
    return super if item_max > 0
    draw_null
  end
 
  def draw_item(index)
    item = @data[index]
    if item
      rect = item_rect(index)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y)
      draw_item_number(rect, index)
    end
  end
 
  def draw_null
    rect = item_rect(0)
    rect.width -= 4
    draw_text(rect, CP::VICTORY::NO_DROPS, 1)
  end
 
  def draw_item_number(rect, index)
    draw_text(rect, sprintf(":%2d", @number[index]), 2)
  end
 
  def get_drops(drops)
    @data = []
    @number = []
    for i in 0...drops.size
      ind = @data.index(drops[i])
      if ind.nil?
        @data.push(drops[i])
        @number.push(1)
      else
        @number[ind] += 1
      end
    end
    self.refresh
  end
 
  def get_windows(ar1, ar2)
    @done = 0
    @ar1 = ar1
    @ar2 = ar2
  end
 
  def process_handling
    return unless open? && active
    BattleManager.victory_end if Input.trigger?(:B)
    check_leveled_up if Input.trigger?(:C)
  end
 
  def check_leveled_up
    @done = 0 if @done.nil?; @done += 1
    return BattleManager.victory_end unless CP::VICTORY::LVL_UP_ENABLE
    return BattleManager.victory_end if @ar2.nil?
    return BattleManager.victory_end if @done > @ar2.size
    sfx = CP::VICTORY::LVL_SFX
    vol = CP::VICTORY::LVL_VOL
    pit = CP::VICTORY::LVL_PIT
    RPG::SE.new(sfx, vol, pit).play unless sfx.nil?
    @ar1.each {|wind| wind.visible = false}
    @ar2.each {|wind| wind.visible = false}
    @ar2[@done - 1].visible = true
  end
 
  def update
    super
    if Audio.bgm_pos != 0
      BattleManager.play_battle_end_me
    end
  end
 
  def refresh
    contents.clear
    create_contents
    draw_all_items
  end
end

## Modifies a skill's score modification when used.
class RPG::UsableItem < RPG::BaseItem
  def add_score
    karma_modif if @add_score.nil?
    return @add_score
  end
 
  def karma_modif
    @add_score = 0
    self.note.split(/[\r\n]+/).each do |line|
      case line
      when CP::VICTORY::KARMA
        @add_score = ($1.to_s + $2.to_s).to_i
      end
    end
  end
end

class RPG::Enemy::DropItem
  def req_grade
    return @req_grade ? @req_grade : 0
  end
 
  def req_grade=(val)
    @req_grade = val
  end
end

## Modifies the enemy's drops from the database.
class RPG::Enemy < RPG::BaseItem
  def add_score
    add_drops if @add_score.nil?
    return @add_score
  end
 
  def one_hit
    add_drops if @one_hit.nil?
    return @one_hit
  end
 
  def drop_items
    add_drops if @added_drops.nil?
    return @drop_items
  end
 
  def add_drops
    @added_drops = true
    @add_score = 0
    @one_hit = CP::VICTORY::ONE_HIT
    self.note.split(/[\r\n]+/).each do |line|
      case line
      when CP::VICTORY::DROPS
        temp = RPG::Enemy::DropItem.new
        case $1.to_s
        when "I", "i"
          temp.kind = 1
        when "W", "w"
          temp.kind = 2
        when "A", "a"
          temp.kind = 3
        end
        temp.data_id = $2.to_i
        temp.denominator = $3.to_i
        temp.req_grade = $4.to_i
        @drop_items.push(temp)
      when CP::VICTORY::SCORE
        @add_score = $1.to_i
      when CP::VICTORY::ONEHIT
        @one_hit = $1.to_i
      end
    end
  end
end

## Creates windows at the end of the victory screen that display level up stats.
class Window_LvlUp < Window_Base
  def initialize(actor)
    @actor = actor  ## Gets the actor, old level, and new skills.
    @old_level = BattleManager.old_levels(actor.actor_id)
    @skills = actor.skills - BattleManager.old_skills(actor.actor_id)
    create_params  ## Creates all params.  Here for custom params.
    super(0, 0, box_width, box_height)  ## Creates and moves the box.
    self.x = (Graphics.width - width) / 2
    self.y = (Graphics.height - height) / 2
    refresh
  end
 
  ## Creates the entire list of params.
  def create_params
    @params = []
    8.times do |i|
      p1 = @actor.class.params[i, @old_level]
      p2 = @actor.class.params[i, @actor.level]
      vocab = Vocab.param(i)
      add_param(vocab, p1, p2)
    end
  end
 
  ## Adds a param to the list.
  def add_param(vocab, p1, p2)
    @params.push([vocab, p1, p2])
  end
 
  ## Width of the box based on whether any new skills were learned.
  def box_width
    wd = @skills.empty? ? 240 : 480
    return wd + standard_padding * 2
  end
 
  ## Height of the box based on total params.
  def box_height
    return line_height + 104 + line_height * (@params.size + 1)
  end
 
  ## Refreshed the box contents.
  def refresh
    contents.clear
    draw_header
    draw_face_area(line_height * 1.5)
    draw_attr_area(0, line_height * 2 + 104)
    draw_skill_area(240, line_height * 2 + 104)
  end
 
  ## Draws the level up header.
  def draw_header
    x = (contents.width - 240) / 2
    ml = 0
    p1 = @old_level
    p2 = @actor.level
    ml = contents.text_size(p1).width if contents.text_size(p1).width > ml
    ml = contents.text_size(p2).width if contents.text_size(p2).width > ml
    ml += 4
    mo = 236 - ml
    change_color(system_color)
    draw_text(x + 2, 0, mo - ml - 22, line_height, CP::VICTORY::LEVEL_UP, 0)
    draw_text(x + mo - 22, 0, 22, line_height, "→", 1)
    change_color(normal_color)
    draw_text(x + mo - ml - 22, 0, ml, line_height, p1, 2)
    change_color(power_up_color)
    draw_text(x + mo, 0, ml, line_height, p2, 2)
  end
 
  ## Draws the params section.
  def draw_attr_area(x, y)
    ml = 0
    @params.each do |p|  ## Find the wides param.
      ml = contents.text_size(p[1]).width if contents.text_size(p[1]).width > ml
      ml = contents.text_size(p[2]).width if contents.text_size(p[2]).width > ml
    end
    ml += 4  ## Set params box size.
    mo = 236 - ml  ## Last object's location.
    @params.each_with_index do |para, i|
      ylh = y + i * line_height  ## Gets the y location.
      change_color(system_color)  ## Draws the name and arrow.
      draw_text(x + 2, ylh, mo - ml - 22, line_height, para[0], 0)
      draw_text(x + mo - 22, ylh, 22, line_height, "→", 1)
      change_color(normal_color)  ## Draws the old and new stats.
      draw_text(x + mo - ml - 22, ylh, ml, line_height, para[1], 2)
      change_color(para[2] > para[1] ? power_up_color : power_down_color)
      change_color(normal_color) if para[1] == para[2]
      draw_text(x + mo, ylh, ml, line_height, para[2], 2)
    end
  end
 
  def draw_face_area(y)  ## Draws the area with the face, name, and class.
    xi = (contents.width - 216) / 2
    draw_actor_name(@actor, xi + 104, y + 0 * line_height)
    draw_actor_class(@actor, xi + 104, y + 1 * line_height)
    draw_actor_face(@actor, xi + 4, y + 4)
  end
 
  def draw_skill_area(x, y)  ## Draw skill names.
    change_color(system_color)  ## First, draw the skill message.
    draw_text(x + 18, y, 220, line_height, CP::VICTORY::NEW_SKILLS, 1)
    change_color(normal_color)  ## Next, check if there are too many skills.
    if @skills.size > @params.size - 1
      total = @params.size-3
      total.times do |i|
        item = @skills[i]  ## Draws only so many skills.
        draw_item_name(item, x + 18, y + (i + 1) * line_height, true, 220)
      end  ## Draws the final message.
      draw_text(x + 18, y + (@params.size - 2) * line_height, 220, line_height,
                more_skills, 1)
    else
      @skills.each_with_index do |item, i|  ## Draws all skills.
        draw_item_name(item, x + 18, y + (i + 1) * line_height, true, 220)
      end
    end
  end
 
  def more_skills  ## Gets the more skills text.
    more = @skills.size - @params.size
    return sprintf(CP::VICTORY::MORE_SKILLS, more)
  end
end


###--------------------------------------------------------------------------###
#  End of script.                                                              #
###--------------------------------------------------------------------------###

Vous pouvez aussi utilisez des images pour vos rangs.
Revenir en haut Aller en bas
http://lunarito.wordpress.com/
 

Grade Victory screen

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» [VXace] Victory Aftermath
» [Résolu] Comment faire afficher mon nouveau TileA4
» Screen
» [VX] On-Screen Shop
» Splash screen

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RPG Maker VX :: Entraide :: Scripts :: Scripts VX.Ace - RGSS3 :: Combat-
Créer un forum | ©phpBB | Forum gratuit d'entraide | Signaler un abus | Forum gratuit