Jump to content
Rpg²S Forum

Sylaer

Utenti
  • Posts

    287
  • Joined

  • Last visited

Posts posted by Sylaer

  1. Quello che voglio fare è una finestra apribile da menu o da altro, che mostra una serie di missioni, divise in tre categorie: Missioni in Corso, Missioni Completate e Missioni Fallite.

    Per ogni missione c'è un pannello apposito, scorrevole ovviamente, che mostra i dialoghi dei png o dei pg. Il tutto in maniera automatica, senza il bisogno di riscrivere i dialoghi, solo con l'ausilio dei commenti per dire quando comincia, viene completata o fallita una missione e dove cominciare e finire di memorizzare i dialoghi.

    Prima di postare lo script vorrei sapere che ne pensate e se avete qualche consiglio o suggerimento o semplicemente se l'idea interessa a qualcuno.

    P.S. L'idea l'ho presa da Gothic III.

  2. Secondo me è un buon progetto, ma dovresti realizzarlo davvero con RMXP, visto che tutte queste cose si possono realizzare benissimo il sistema degli script.

    Inoltre mi sembra da pazzi programmare un gioco in c++ partendo assolutamente dal nulla, cioè se ci riesci sei davvero un grande, ma secondo me è una perdita di tempo quando lo puoi benissimo realizzare con RMXP.

    Per quanto riguarda la grafica, ti conviene farla tutta in 2d è più facile, rapido e si adatta meglio a un progetto tipo final fantasy tactics, secondo me.

  3. Ho trovato questo script su RMXP. E' di Sephiroth Spawn, ma c'è stato tolto l'SDK.

    Non lo so se funziona.

    Vedi te.

     

     

    #==============================================================================
    # ** Equipment Skills
    #------------------------------------------------------------------------------
    # SephirothSpawn
    # 2006-04-05
    # Version 2
    #------------------------------------------------------------------------------
    # * Instructions
    #
    #   ~ Skill Learning Types (Choose 1, or neither for cannot learn)
    #	 - Learn_By_Level = true (On) or false (Off)
    #	 - Learn_By_AP = true (On) or false (Off)
    #
    #   ~ Disabling Moves Until Learned
    #	 - Disable_Until_Learned = true (On) or false (Off)
    #	 - Only Required For Learn By AP
    #
    #   ~ Learn One Skill At A Time
    #	 - Learn_One_Skill = true (On) or false (Off)
    #
    #   ~ Victory Window Options
    #	 - Show Victory Window
    #	   Show_Victory_Skills = true (On) or false (Off)
    #	 - Show Only Newly Mastered Skills
    #	   Show_Only_Mastered = true (On) or false (Off)
    #
    #   ~ Enemy AP Values
    #	 - Default_Enemy_AP = Default Enemy AP
    #	 - Enemy_AP_Values = { enemy_id => ap given, ... }
    #
    #   ~ Weapon Skills & Armor Skills
    #	 - Weapon_Skills or Armor_Skills
    #	 - = { equipment_id => { skill_id => Ap or Level Required, ... }, ... }
    #------------------------------------------------------------------------------
    # ~ One Skill At a Time Feature Requires 
    #	 Near Fantastica's Keyboard Input Module
    #------------------------------------------------------------------------------
    # Do not edit the script in any manner to remove the SDK
    # The Script was designed for usage with SDK only
    #==============================================================================
    
    #------------------------------------------------------------------------------
    # * SDK Log Script
    #------------------------------------------------------------------------------
    
    
    #------------------------------------------------------------------------------
    # * Begin SDK Enable Test
    #------------------------------------------------------------------------------
    
    #==============================================================================
    # ** Equipment_Skills
    #==============================================================================
    
    module Equipment_Skills
     #--------------------------------------------------------------------------
     # * Learning Types
     #   (If Both are false, you cannot learn skills)
     #--------------------------------------------------------------------------
     Learn_By_Level = false
     Learn_By_AP = true
     #--------------------------------------------------------------------------
     # * Disable Until Learned
     #--------------------------------------------------------------------------
     Disable_Until_Learned = false
     #--------------------------------------------------------------------------
     # * Only Learn One Skill at a time
     #   (Must assign the current skill each time)
     #--------------------------------------------------------------------------
     Learn_One_Skill = false
     #--------------------------------------------------------------------------
     # * Show Victory Skills Window after Battle
     # * Show Only Newly Learned Skills
     #--------------------------------------------------------------------------
     Show_Victory_Skills = false
     Show_Only_Mastered = false
     #--------------------------------------------------------------------------
     # * Default AP Given By Enemy
     #--------------------------------------------------------------------------
     Default_Enemy_AP = 1
     #--------------------------------------------------------------------------
     # * Assigned AP for enemies
     #   ~ enemy_id => ap
     #--------------------------------------------------------------------------
     Enemy_AP_Values = {
    1 => 2,
    2 => 3
     }
     #--------------------------------------------------------------------------
     # * Weapon Skills
     #   ~ weapon_id => { skill_id, required_ap }
     #--------------------------------------------------------------------------
     Weapon_Skills = {
    1 => { 1 => 5 },
    2 => { 1 => 5 } 
      }
     #--------------------------------------------------------------------------
     # * Armor Skills
     #   ~ armor_id => { skill_id, required_ap }
     #--------------------------------------------------------------------------
     Armor_Skills = {}
    
    end
    
    #==============================================================================
    # ** Game_Actor
    #==============================================================================
    
    class Game_Actor < Game_Battler
     #--------------------------------------------------------------------------
     # * Include Equipment_Skills
     #--------------------------------------------------------------------------
     include Equipment_Skills
     #--------------------------------------------------------------------------
     # * Public Instance Variables
     #--------------------------------------------------------------------------
     attr_accessor :skill_ap_totals
     attr_accessor :weapon_skill_target
     attr_accessor :armor1_skill_target
     attr_accessor :armor2_skill_target
     attr_accessor :armor3_skill_target
     attr_accessor :armor4_skill_target
     #--------------------------------------------------------------------------
     # * Alias Listings
     #--------------------------------------------------------------------------
     alias seph_weaponskills_gameactor_setup setup
     alias seph_weaponskills_gameactor_equip equip
     alias seph_weaponskills_gameactor_skills skills
     alias seph_weaponskills_gameactor_scu skill_can_use?
     #--------------------------------------------------------------------------
     # * Setup
     #	 actor_id : actor ID
     #--------------------------------------------------------------------------
     def setup(actor_id)
    # Creates Equipment AP 
    @skill_ap_totals = {}
    # Mastered Skills
    @mastered_skills = []
    # Sets Equipment Skill Targets to Nil
    @weapon_skill_target = nil
    @armor1_skill_target = nil
    @armor2_skill_target = nil
    @armor3_skill_target = nil
    @armor4_skill_target = nil
    # Adds In Weapon Skills and AP Amounts
    for skill_data in Weapon_Skills.values + Armor_Skills.values
      for skill_id in skill_data.keys
    	unless @skill_ap_totals.has_key?(skill_id)
    	  @skill_ap_totals[skill_id] = 0
    	end
      end
    end
    # Original Initialization
    seph_weaponskills_gameactor_setup(actor_id)
     end
     #--------------------------------------------------------------------------
     # * Change Equipment
     #	 equip_type : type of equipment
     #	 id	: weapon or armor ID (If 0, remove equipment)
     #--------------------------------------------------------------------------
     def equip(equip_type, id)
    # Original Equip Method
    seph_weaponskills_gameactor_equip(equip_type, id)
    # Clears Skill Targets
    case equip_type
    when 0  # Weapon
      if id == 0 or $game_party.weapon_number(id) > 0
    	@weapon_skill_target = nil
      end
    when 1  # Shield
      if id == 0 or $game_party.armor_number(id) > 0
    	@armor1_skill_target = nil
      end
    when 2  # Head
      if id == 0 or $game_party.armor_number(id) > 0
    	@armor2_skill_target = nil
      end
    when 3  # Body
      if id == 0 or $game_party.armor_number(id) > 0
    	@armor3_skill_target = nil
      end
    when 4  # Accessory
      if id == 0 or $game_party.armor_number(id) > 0
    	@armor4_skill_target = nil
      end
    end
     end
     #--------------------------------------------------------------------------
     # * Determine if Skill can be Used
     #	 skill_id : skill ID
     #--------------------------------------------------------------------------
     def skill_can_use?(skill_id)
    if self.skills.include?(skill_id)
      return super
    end
    # Original Skill Can use Method
    seph_weaponskills_gameactor_scu(skill_id)
     end
     #--------------------------------------------------------------------------
     # * Skills
     #--------------------------------------------------------------------------
     def skills
    # Gets Previous Skills
    s = seph_weaponskills_gameactor_skills.dup
    # Adds in Equipped Skills
    s << get_current_equipped_skills
    # Adds in Mastered Skills
    s << get_mastered_skills
    # Returns New Skills
    return s.flatten.sort.uniq.dup
     end
     #--------------------------------------------------------------------------
     # * Get Current Equipped Skills
     #--------------------------------------------------------------------------
     def get_current_equipped_skills
    # Returns Empty if Cannot Learn Until Mastered
    return [] if Disable_Until_Learned
    # Creates Skills Array
    skills = []
    # Checks For Equipped Weapon
    unless @weapon_id == 0
      # If Weapon Has Skill
      if Weapon_Skills.has_key?(@weapon_id)
    	# Adds Weapon Skills
    	Weapon_Skills[@weapon_id].each do | skill_id, value |
    	  if Learn_By_Level
    		unless skills.include?(skill_id)
    		  skills << skill_id if @level >= value
    		end
    	  else
    		skills << skill_id unless skills.include?(skill_id)
    	  end
    	end
      end
    end
    # Checks For Equipped Armor
    for i in 1..4
      unless (eval "@armor#{i}_id") == 0
    	# If Armor Has Skill
    	if Armor_Skills.has_key?(eval "@armor#{i}_id")
    	  Armor_Skills[(eval "@armor#{i}_id")].each do | skill_id, value |
    		if Learn_By_Level
    		  unless skills.include?(skill_id)
    			skills << skill_id if @level >= value
    		  end
    		else
    		  skills << skill_id unless skills.include?(skill_id)
    		end
    	  end
    	end
      end
    end
    # Sends Skills Array
    return skills
     end
     #--------------------------------------------------------------------------
     # * Get Mastered Skills
     #--------------------------------------------------------------------------
     def get_mastered_skills
    # Returns Empty if Cannot Learn Skills
    return [] unless Learn_By_AP
    # Starts Skills Array
    skills = []
    # Checks for Mastered AP
    for skill_data in Weapon_Skills.values + Armor_Skills.values
      # Checks Skill Data
      skill_data.each do | skill_id, master |
    	# Unless 0
    	unless master == 0
    	  # If AP Total is Reached
    	  if @skill_ap_totals[skill_id] == master
    		# Adds Skills
    		skills << skill_id unless skills.include?(skill_id)
    	  end
    	end
      end
    end
    # Sends Skills Array
    return skills
     end
     #--------------------------------------------------------------------------
     # * Earn AP
     #--------------------------------------------------------------------------
     def earn_ap(amount = 0)
    # Exits if Cannot Learn Skills or Learns By Level
    return unless Learn_By_AP
    # Earns Weapon AP
    unless @weapon_id == 0
      # If Weapon Has Skills
      if Weapon_Skills.has_key?(@weapon_id)
    	# If One at a time
    	if Learn_One_Skill
    	  # If Skill has been Set
    	  unless @weapon_skill_target.nil?
    		# Gets Current And Max
    		current = @skill_ap_totals[@weapon_skill_target]
    		max = Weapon_Skills[@weapon_id][@weapon_skill_target]
    		# Increases AP
    		@skill_ap_totals[@weapon_skill_target] = [current + amount, max].min
    	  end
    	# If Learn All 
    	else
    	  Weapon_Skills[@weapon_id].each do | skill_id, max |
    		# Gets Current AP
    		current = @skill_ap_totals[skill_id]
    		# Increases AP
    		@skill_ap_totals[skill_id] = [current + amount, max].min
    	  end
    	end
      end
    end
    # Earns Armor AP
    for i in 1..4
      # If Armor Equipped
      unless (eval "@armor#{i}_id") == 0
    	# If Armor Has Skills
    	if Armor_Skills.has_key?(eval "@armor#{i}_id")
    	  # If One at a time
    	  if Learn_One_Skill
    		# If Skill has been Set
    		unless (eval "@armor#{i}_skill_target.nil?")
    		  # Gets Current And Max
    		  current = @skill_ap_totals[(eval "@armor#{i}_skill_target")]
    		  max = Armor_Skills[(eval "@armor#{i}_id")][(eval "@armor#{i}_skill_target")]
    		  # Increases AP
    		  @skill_ap_totals[(eval "@armor#{i}_skill_target")] = [current + amount, max].min
    		end
    	  # If Learn All 
    	  else
    		Armor_Skills[(eval "@armor#{i}_id")].each do | skill_id, max |
    		  # Gets Current AP
    		  current = @skill_ap_totals[skill_id]
    		  # Increases AP
    		  @skill_ap_totals[skill_id] = [current + amount, max].min
    		end
    	  end
    	end
      end
    end
     end
     #--------------------------------------------------------------------------
     # * Get Newly Mastered Skills
     #--------------------------------------------------------------------------
     def get_learning_skills
    # Unless Learn By AP
    return [] unless Learn_By_AP
    skills = []
    unless @weapon_id == 0
      if Weapon_Skills.has_key?(@weapon_id)
    	Weapon_Skills[@weapon_id].each do |skill_id, max|
    	  unless max == 0
    		skills << skill_id unless skills.include?(skill_id)
    	  end
    	end
      end
    end
    for i in 1..4
      unless (eval "@armor#{i}_id") == 0
    	if Armor_Skills.has_key?(eval "@armor#{i}_id")
    	  Armor_Skills[(eval "@armor#{i}_id")].each do |skill_id, max|
    		unless max == 0
    		  skills << skill_id unless skills.include?(skill_id)
    		end
    	  end
    	end
      end
    end
    return skills.uniq.sort
     end
     #--------------------------------------------------------------------------
     # * Get Newly Mastered Skills
     #--------------------------------------------------------------------------
     def get_newly_mastered_skills
    # Unless Learn By AP
    return [] unless Learn_By_AP
    mastered = []
    for skill_id in get_mastered_skills.dup.uniq.sort
      unless @mastered_skills.include?(skill_id)
    	mastered << skill_id
    	@mastered_skills << skill_id
      end
    end
    return mastered.sort
     end
    end
    
    #==============================================================================
    # ** Window_Base
    #==============================================================================
    
    class Window_Base < Window
     #--------------------------------------------------------------------------
     # * Include Equipment_Skills
     #--------------------------------------------------------------------------
     include Equipment_Skills
     #--------------------------------------------------------------------------
     # Draw Bar
     #--------------------------------------------------------------------------
     def draw_bar(x, y, min, max, width = 152, height = 6,
    bar_color = Color.new(150, 0, 0), end_color = Color.new(255, 255, 60))
    # Draw Background
    self.contents.fill_rect(x, y, width, height, Color.new(50, 50, 50, 255))
    # Draws Bar
    for i in 1..( (min.to_f / max.to_f) * width - 3)
      r = bar_color.red * (width - i) / width + end_color.red * i / width
      g = bar_color.green * (width - i) / width + end_color.green * i / width
      b = bar_color.blue * (width - i) / width + end_color.blue * i / width
      a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
      self.contents.fill_rect(x + 1 + i, y + 1, 1, height - 2, 
    	Color.new(r, g, b, a))
    end
     end
    end
    
    #==============================================================================
    # ** Window_Skill
    #==============================================================================
    
    class Window_Skill < Window_Selectable
     #--------------------------------------------------------------------------
     # * Alias Listings
     #--------------------------------------------------------------------------
     alias seph_weaponskills_windskill_drawitem draw_item
     #--------------------------------------------------------------------------
     # * Draw Item
     #	 index : item number
     #--------------------------------------------------------------------------
     def draw_item(index)
    # If Learn By AP
    unless Learn_By_AP
      # Original Draw Item Method
      seph_weaponskills_windskill_drawitem(index)
      return
    end
    # If Equipment Skill
    skill = @data[index]
    # Unless In Battle
    unless $game_temp.in_battle
      # If Skill is a Equipment Skill
      if @actor.skill_ap_totals.has_key?(skill.id)
    	# Gets AP
    	ap = @actor.skill_ap_totals[skill.id]
    	# Alters Font Properties
    	self.contents.font.size = 16
    	self.contents.font.bold = true
    	# Original Draw Item Method
    	seph_weaponskills_windskill_drawitem(index)
    	# Location Coordinate
    	x, y = 4 + index % 2 * (288 + 32), index / 2 * 32
    	# Default Max
    	max = 0
    	# Searches for Max
    	for weapon in Weapon_Skills.keys
    	  Weapon_Skills[weapon].each do | skill_id, m |
    		max = m if skill.id == skill_id
    	  end
    	end
    	for armor in Armor_Skills.keys
    	  Armor_Skills[armor].each do | skill_id, m |
    		max = m if skill.id == skill_id
    	  end
    	end
    	# Draws Status Bar
    	draw_bar(x + 132, y + 10, ap, max, 96, 14)
    	# Draws Progress
    	text = ap == max ? 'Mastered' : "#{ap} / #{max}"
    	temp_font = contents.font.dup
    	self.contents.font.color = Color.new(0, 0, 0)
    	self.contents.draw_text(x + 133, y + 1, 92, 32, text, 2)
    	self.contents.font = temp_font
    	self.contents.draw_text(x + 132, y, 92, 32, text, 2)
      end
      return
    end
    # Alters Font Properties
    self.contents.font.size = 22
    self.contents.font.bold = false
    # Original Draw Item Method
    seph_weaponskills_windskill_drawitem(index)
     end
    end
    
    #==============================================================================
    # ** Window_BattleStatus
    #==============================================================================
    
    class Window_BattleStatus < Window_Base
     #--------------------------------------------------------------------------
     # * Refresh Skill Status
     #--------------------------------------------------------------------------
     def refresh_skills_status
    # Unless Can Learn By AP
    unless Learn_By_AP
      refresh
      return
    end
    # Actors Skills
    @actors_skills = []
    # Alters Windows Contents
    if Show_Only_Mastered
      for i in 0...$game_party.actors.size
    	actor = $game_party.actors[i]
    	@actors_skills << actor.get_newly_mastered_skills
      end
    else
      for i in 0...$game_party.actors.size
    	actor = $game_party.actors[i]
    	@actors_skills << actor.get_learning_skills
      end
    end
    max = 128
    for i in 0..3
      max = [max, @actors_skills[i].size * 32 + 32].max
    end
    self.contents = Bitmap.new(width - 32, max)
    # Draws Skill Stuff
    for i in 0...$game_party.actors.size
      # Gets Actor
      actor = $game_party.actors[i]
      actor_x = i * 160 + 4
      # Sets Font
      self.contents.font.size = 22
      self.contents.font.bold = false
      # If No Skills
      if @actors_skills[i].size == 0
    	draw_actor_name(actor, actor_x, 0)
    	draw_actor_hp(actor, actor_x, 32, 120)
    	draw_actor_sp(actor, actor_x, 64, 120)
    	if @level_up_flags[i]
    	  self.contents.font.color = normal_color
    	  self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
    	else
    	  draw_actor_state(actor, actor_x, 96)
    	end
    	next
      end
      # Draws Heading
      self.contents.draw_text(actor_x, 0, 120, 32, 'Skill Progress', 1)
      # Fixes Font
      self.contents.font.size = 14
      self.contents.font.bold = true
      # Draws Skills
      for j in 0...@actors_skills[i].size
    	y = j * 32 + 32
    	# Gets AP Amouts
    	ap = actor.skill_ap_totals[@actors_skills[i][j]]
    	max = get_max_ap(@actors_skills[i][j])
    	# Draws Progress
    	draw_skill_progress(@actors_skills[i][j], ap, max, actor_x, y, 120)
      end
    end
     end
     #--------------------------------------------------------------------------
     # * Get Max AP Points
     #--------------------------------------------------------------------------
     def get_max_ap(skill_id)
    for weapon_id in Weapon_Skills.keys
      Weapon_Skills[weapon_id].each do |s_id, value|
    	if s_id == skill_id
    	  return value
    	end
      end
    end
    for armor_id in Armor_Skills.keys
      Armor_Skills[armor_id].each do |s_id, value|
    	if s_id == skill_id
    	  return value
    	end
      end
    end
    return 0
     end
     #--------------------------------------------------------------------------
     # * Draw Skill Progress
     #--------------------------------------------------------------------------
     def draw_skill_progress(skill_id, min, max, x, y, width)
    # Gets Skill
    skill = $data_skills[skill_id]
    # Gets Icon
    bitmap = RPG::Cache.icon(skill.icon_name)
    # Draws Icon
    self.contents.blt(x + 4, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    # Draws Skill Name
    self.contents.draw_text(x + 32, y, width - 32, 16, skill.name)
    # Draws Status Bar
    draw_bar(x + width - 64, y + 16, min, max, 64, 14)
    # Draws Progress
    text = min == max ? 'Mastered' : "#{min} / #{max}"
    self.contents.font.color = Color.new(0, 0, 0)
    self.contents.draw_text(x + width - 63, y + 16, 60, 14, text, 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + width - 64, y + 16, 60, 14, text, 2)
     end
    end
    
    #==============================================================================
    # ** Window_BattleResult_AP
    #==============================================================================
    
    class Window_BattleResult_AP < Window_Base
     #--------------------------------------------------------------------------
     # * Object Initialization
     #--------------------------------------------------------------------------
     def initialize(y)
    super(160, y, 320, $game_troop.enemies.size * 24 + 56)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
    self.visible = false
    self.z = 9999
    refresh
     end
     #--------------------------------------------------------------------------
     # * Refresh
     #--------------------------------------------------------------------------
     def refresh
    self.contents.clear
    # Gets Troop ID
    troop_id = $game_temp.battle_troop_id
    # Gets AP Earned
    ap = 0
    for enemy in $data_troops[troop_id].members
      enemy = $data_enemies[enemy.enemy_id]
      ap += (Enemy_AP_Values.has_key?(enemy.id) ?
    	Enemy_AP_Values[enemy.id] : Default_Enemy_AP)
    end
    # Draws Heading
    self.contents.font.color = system_color
    self.contents.draw_text(16, 0, contents.width - 32, 24, 'AP Aquired:')
    self.contents.draw_text(16, 0, contents.width - 32, 24, ap.to_s, 2)
    # Draws Enemies Names, and AP Given
    self.contents.font.color = normal_color
    enemies = $data_troops[troop_id].members
    for i in 0...enemies.size
      enemy = $data_enemies[enemies[i].enemy_id]
      self.contents.draw_text(4, i * 24 + 24, 280, 24, enemy.name)
      ap = Enemy_AP_Values.has_key?(enemy.id) ? 
    	Enemy_AP_Values[enemy.id] : Default_Enemy_AP
      self.contents.draw_text(4, i * 24 + 24, contents.width - 8, 24, 
    	ap.to_s, 2)
    end
     end
    end
    
    #==============================================================================
    # ** Window_EquipmentSkills
    #==============================================================================
    
    class Window_EquipmentSkills < Window_Base
     #--------------------------------------------------------------------------
     # * Public Instance Variables
     #--------------------------------------------------------------------------
     attr_reader :item_max
     attr_reader :skills
     attr_accessor :target_index
     #--------------------------------------------------------------------------
     # * Object Initialization
     #--------------------------------------------------------------------------
     def initialize
    super(0, 64, 272, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9999
     end
     #--------------------------------------------------------------------------
     # * Refresh
     #--------------------------------------------------------------------------
     def refresh(actor_id, equipment)
    # Gets Actor
    @actor = $game_party.actors[actor_id]
    # Sets Up Skills & Target index
    @skills = []
    @target_index = nil
    @item_max = 0
    # Clears & Sets Up Contents 
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.font.size = 22
    self.contents.font.bold = false
    # If No Equipment
    if equipment.nil?
      self.contents.draw_text(0, 0, 240, 32, 'Nothing Equipped', 1)
      return
    end
    # If Equipment is a item
    if equipment.is_a?(RPG::Item)
      self.contents.draw_text(0, 0, 240, 32, 'No Skills for Items', 1)
      return
    end
    # Draws Equipment
    bitmap = RPG::Cache.icon(equipment.icon_name)
    self.contents.blt(4, 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.draw_text(32, 0, 208, 32, equipment.name, 1)
    # Gets Equipment Skills
    if equipment.is_a?(RPG::Weapon)
      equipment_skills = Weapon_Skills.has_key?(equipment.id) ?
    	Weapon_Skills[equipment.id] : []
    elsif equipment.is_a?(RPG::Armor)
      equipment_skills = Armor_Skills.has_key?(equipment.id) ?
    	Armor_Skills[equipment.id] : []
    end
    # Draws Skills
    self.contents.font.color = normal_color
    self.contents.font.size = 14
    self.contents.font.bold = true
    if equipment_skills.size == 0
      self.contents.draw_text(0, 32, 240, 32, 'None', 1)
      return
    else
      equipment_skills.each {| skill_id, max | @skills << [skill_id, max]}
      @skills.sort! {|a, b| a[0] <=> b[0]}
      for i in 0...@skills.size
    	# Gets AP Total
    	actor = $game_party.actors[actor_id]
    	skill_id = @skills[i][0]
    	ap = actor_id == - 1 ? 0 :actor.skill_ap_totals[skill_id]
    	max = @skills[i][1]
    	draw_skill_progress(skill_id, ap, max, 0, 40 + i * 24, 236)
      end
    end
    @item_max = @skills.size
    # If One Target
    if Learn_One_Skill
      case equipment
      when RPG::Weapon
    	skill_target = @actor.weapon_skill_target
      when RPG::Armor
    	case equipment.kind
    	when 0
    	  skill_target = @actor.armor1_skill_target
    	when 1
    	  skill_target = @actor.armor2_skill_target
    	when 2
    	  skill_target = @actor.armor3_skill_target
    	when 3
    	  skill_target = @actor.armor4_skill_target
    	end
      end
      for i in 0...@skills.size
    	if @skills[i][0] == skill_target
    	  @target_index = i + 1
    	end
      end
    end
     end
     #--------------------------------------------------------------------------
     # * Frame Update
     #--------------------------------------------------------------------------
     def update
    super
    if Learn_One_Skill
      update_cursor_rect
    end
     end
     #--------------------------------------------------------------------------
     # * Cursor Rectangle Update
     #--------------------------------------------------------------------------
     def update_cursor_rect
    if @target_index.nil?
      self.cursor_rect.empty
    else
      self.cursor_rect.set(0, 40 + (@target_index - 1) * 24, 240, 24)
    end
     end
     #--------------------------------------------------------------------------
     # * Draw Skill Progress
     #--------------------------------------------------------------------------
     def draw_skill_progress(skill_id, min, max, x, y, width)
    # Gets Skill
    skill = $data_skills[skill_id]
    # Gets Icon
    bitmap = RPG::Cache.icon(skill.icon_name)
    # Draws Icon
    self.contents.blt(x + 4, y, bitmap, Rect.new(0, 0, 24, 24))
    # Draws Skill Name
    self.contents.draw_text(x + 32, y, 240 - x - 32, 24, skill.name)
    # Draws Status Bar
    draw_bar(x + width - 96, y + 2, min, max, 96, 20)
    # Draws Progress
    text = min == max ? 'Mastered' : "#{min} / #{max}"
    self.contents.font.color = Color.new(0, 0, 0, 255)
    self.contents.draw_text(x + width - 99, y + 1, 96, 24, text, 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + width - 100, y, 96, 24, text, 2)
     end
    end
    
    #==============================================================================
    # ** Scene_Equip
    #==============================================================================
    
    class Scene_Equip
     #--------------------------------------------------------------------------
     # * Alias Listings
     #--------------------------------------------------------------------------
     alias seph_weaponskills_sceneequip_main main
     alias seph_weaponskills_sceneequip_update update
     #--------------------------------------------------------------------------
     # * Main Processing
     #--------------------------------------------------------------------------
     def main
    # Equipment Skill Status Window
    @equipment_skill_status = Window_EquipmentSkills.new
    # Stores Indexes
    @r_index, @i_index = @equip_index, 0
    # Original Main Method
    seph_weaponskills_sceneequip_main
    # Disposes Skill Status Window
    @equipment_skill_status.dispose
     end
     #--------------------------------------------------------------------------
     # * Frame Update
     #--------------------------------------------------------------------------
     def update
    # Update Keyboard Input Module
    #Keyboard.update
    # Updates Equipment Skills Window
    @equipment_skill_status.update
    # If A Button is Pressed
    if Input.trigger?(Input::A)
      # Play Cursor SE
      $game_system.se_play($data_system.cursor_se)
      # If Window is off
      unless @equipment_skill_status.visible
    	# Turn On Window
    	@equipment_skill_status.visible = true
    	# Refresh Window
    	refresh_equipment_skills
      else
    	# Turns Off Window
    	@equipment_skill_status.visible = false
      end
    end
    # If Window On
    if @equipment_skill_status.visible
      # If Right Window Active
      if @right_window.active
    	# If Index is different
    	unless @right_window.index == @r_index
    	  @r_index = @right_window.index
    	  # Refresh Weappn Skills
    	  refresh_equipment_skills
    	end
      elsif @item_window.active
    	# If Index is different
    	unless @item_window.index == @i_index
    	  @i_index = @item_window.index
    	  # Refresh Equipment Skills
    	  refresh_equipment_skills
    	end
      end
    end
    # Original Update Method
    seph_weaponskills_sceneequip_update
    # One Skill Assignment
    if Equipment_Skills::Learn_One_Skill
      if @equipment_skill_status.visible
    	max = @equipment_skill_status.item_max
    	return if max == 0
    	@help_window.set_text("Press 1 - #{max} to Assign Skill Target")
    	# If Key is Pressed
    	for i in 1..max
    	  if Keyboard.trigger?(Keyboard::Numberkeys[i])
    		@equipment_skill_status.target_index = i
    		skill_id = @equipment_skill_status.skills[i - 1][0]
    		case @right_window.item
    		when RPG::Weapon
    		  @actor.weapon_skill_target = skill_id
    		when RPG::Armor
    		  case @right_window.item.kind
    		  when 0
    			@actor.armor1_skill_target = skill_id
    		  when 1
    			@actor.armor2_skill_target = skill_id
    		  when 2
    			@actor.armor3_skill_target = skill_id
    		  when 3
    			@actor.armor4_skill_target = skill_id
    		  end
    		end
    	  end
    	end
      end
    end
     end
     #--------------------------------------------------------------------------
     # * Refresh : Weappn Skills Window
     #--------------------------------------------------------------------------
     def refresh_equipment_skills
    # Refresh Window
    if @right_window.active
      @equipment_skill_status.refresh(@actor_index, @right_window.item)
    elsif @item_window.active
      @equipment_skill_status.refresh(@actor_index, @item_window.item)
    end
     end
    end
    
    #==============================================================================
    # ** Scene_Battle
    #==============================================================================
    
    class Scene_Battle
     #--------------------------------------------------------------------------
     # * Include Equipment_Skills
     #--------------------------------------------------------------------------
     include Equipment_Skills
     #--------------------------------------------------------------------------
     # * Alias Listings
     #--------------------------------------------------------------------------
     alias seph_weaponskills_scenebattle_main main
     alias seph_weaponskills_scenebattle_sp5 start_phase5
     alias seph_weaponskills_scenebattle_up5 update_phase5
     #--------------------------------------------------------------------------
     # * Main Processing
     #--------------------------------------------------------------------------
     def main
    # Original Main Method
    seph_weaponskills_scenebattle_main
    # Disposes AP Aquired Window
    @ap_result_window.dispose unless @ap_result_window.nil?
     end
     #--------------------------------------------------------------------------
     # * Start After Battle Phase
     #--------------------------------------------------------------------------
     def start_phase5
    # Orignal Start Phase 5 Method
    seph_weaponskills_scenebattle_sp5
    # If Learn By AP
    if Learn_By_AP
      # Gets AP Total
      ap = 0
      for enemy in $data_troops[@troop_id].members
    	enemy = $data_enemies[enemy.enemy_id]
    	ap += (Enemy_AP_Values.has_key?(enemy.id) ?
    	  Enemy_AP_Values[enemy.id] : Default_Enemy_AP)
      end
      # Earns AP
      for actor in $game_party.actors
    	actor.earn_ap(ap)
      end
      # Creates Aquired Ap Window
      @ap_result_window = Window_BattleResult_AP.new(160 + @result_window.height / 2)
    end
     end
     #--------------------------------------------------------------------------
     # * Frame Update (after battle phase)
     #--------------------------------------------------------------------------
     def update_phase5
    # Orignal Update Phase 5 Method
    seph_weaponskills_scenebattle_up5
    # Show AP Result Window
    unless @ap_result_window.nil?
      @ap_result_window.visible = @result_window.visible
    end
    # Show Victory Skills Window
    if Show_Victory_Skills
      if @phase5_wait_count == 0
    	@phase5_wait_count -= 1
    	@status_window.refresh_skills_status
      end
      if @status_window.contents.height > 128
    	if Input.press?(Input::UP)
    	  if @status_window.oy > 0
    		@status_window.oy -= 8
    	  end
    	elsif Input.press?(Input::DOWN)
    	  if @status_window.oy < @status_window.contents.height - 128
    		@status_window.oy += 8
    	  end
    	end
      end
    end
     end
    end
    
    #==============================================================================
    # ** Scene_Shop
    #==============================================================================
    
    class Scene_Shop
     #--------------------------------------------------------------------------
     # * Alias Listings
     #--------------------------------------------------------------------------
     alias seph_weaponskills_sceneshop_main main
     alias seph_weaponskills_sceneshop_update update
     #--------------------------------------------------------------------------
     # * Main Processing
     #--------------------------------------------------------------------------
     def main
    # Weapon Skill Status Window
    @equipment_skill_status = Window_EquipmentSkills.new
    @equipment_skill_status.x = 368
    @equipment_skill_status.y = 288
    # Stores Index
    @b_index, @s_index = 0, 0
    # Original Main Method
    seph_weaponskills_sceneshop_main
    # Disposes Skill Status Window
    @equipment_skill_status.dispose
     end
     #--------------------------------------------------------------------------
     # * Frame Update
     #--------------------------------------------------------------------------
     def update
    # If buy window is active: call update_buy
    if @buy_window.active || @sell_window.active
      # Update Weapon Skills
      update_seph_equipment_skills
    else
      if @equipment_skill_status.visible
    	@equipment_skill_status.visible = false
      end
    end
    # Orignal Update Method
    seph_weaponskills_sceneshop_update
     end
     #--------------------------------------------------------------------------
     # * Frame Update : Equipment Skills
     #--------------------------------------------------------------------------
     def update_seph_equipment_skills
    # If A Button is Pressed
    if Input.trigger?(Input::A)
      # Play Cursor SE
      $game_system.se_play($data_system.cursor_se)
      # If Window is off
      unless @equipment_skill_status.visible
    	# Turn On Window
    	@equipment_skill_status.visible = true
    	# Refresh Equipment Skills
    	refresh_equipment_skills
      else
    	# Turns Off Window
    	@equipment_skill_status.visible = false
      end
    end
    # If Equipment Skills On
    if @equipment_skill_status.visible
      # If Right Window Active
      if @buy_window.active
    	# If Index is different
    	unless @buy_window.index == @b_index
    	  @b_index = @buy_window.index
    	  # Refresh Equipment Skills
    	  refresh_equipment_skills
    	end
      elsif @sell_window.active
    	# If Index is different
    	unless @sell_window.index == @s_index
    	  @s_index = @sell_window.index
    	  # Refresh Equipment Skills
    	  refresh_equipment_skills
    	end
      end
    end
     end
     #--------------------------------------------------------------------------
     # * Refresh : Equipment Skills Window
     #--------------------------------------------------------------------------
     def refresh_equipment_skills
    # Refresh Window
    if @buy_window.active
      @equipment_skill_status.refresh(-1, @buy_window.item)
    elsif @sell_window.active
      @equipment_skill_status.refresh(-1, @sell_window.item)
    end
     end
    end
    
    #--------------------------------------------------------------------------
    # * End SDK Enable Test
    #--------------------------------------------------------------------------

     

     

  4. Ho modificato quello script tenendo conto di quello che volevi e penso di essere riuscito a fare quello che volevi, Raldon.

     

     

     

    #===================================================
    # ■ AMS - Advanced Message Script - R4 [Update #2]
    #===================================================
    # Per informazioni e aggiornamenti sullo script visitate:
    # www.dubealex.com (Creation Asylum)
    #
    # Modificato, aggiustato e migliorato da: Dubealex
    # Original Script Core by: XRXS Scripter (Jap Dudes)
    # HTML Hexadecimal color feature from: Phylomorphis
    #
    # Ringraziamenti:
    # Rabu: Per aver aggiunto l'opzione Mostra face
    #
    # Traduzione in italiano by Tio
    # Per più informazioni visitate www.rpgshrine.altervista.org
    # Per trovare gli ultimi aggiornamenti nello script cercate:  #NEW
    # Per configurare il bottone che fa saltare il dialogo cercare:  #SKIP_TEXT_CODE
    #
    # May 18, 2005
    #===================================================
    
    LETTER_BY_LETTER_MODE = true   #Setta la modalità di lettura lettera per lettera
    #(per toglierla modificare true in false)
    HERO_FACE_ID = 1
    class Game_Event
    attr_reader   :character_name
    end
    class Interpreter
     def setup_starting_event
    if $game_map.need_refresh
      $game_map.refresh
    end
    if $game_temp.common_event_id > 0
      setup($data_common_events[$game_temp.common_event_id].list, 0)
      $game_temp.common_event_id = 0
      return
    end
    for event in $game_map.events.values
      if event.starting
    	if event.trigger < 3
    	  event.clear_starting
    	  event.lock
    	end
    	$game_temp.event_graphic = event.character_name
    	setup(event.list, event.id)
    	return
      end
    end
    for common_event in $data_common_events.compact
      if common_event.trigger == 1 and
    	 $game_switches[common_event.switch_id] == true
    	setup(common_event.list, 0)
    	return
      end
    end
     end
    end
    
    class Game_Temp
     attr_accessor :event_graphic
     alias sylaer_mod_personalize_messages_game_temp_initialize initialize
     def initialize
    @event_graphic = ""
    sylaer_mod_personalize_messages_game_temp_initialize
     end
    end
    #===================================================
    # ▼ Inizio CLASSE AMS
    #===================================================
    
    class AMS
    
    attr_accessor :name_box_x_offset
    attr_accessor :name_box_y_offset
    attr_accessor :font_type
    attr_accessor :name_font_type
    attr_accessor :font_size
    attr_accessor :name_font_size
    attr_accessor :message_box_opacity
    attr_accessor :name_box_skin
    attr_accessor :name_box_text_color
    attr_accessor :message_box_text_color
    attr_accessor :message_box_skin
    attr_accessor :name_box_width
    attr_accessor :name_box_height
    attr_accessor :message_width
    attr_accessor :message_height
    attr_accessor :message_x
    attr_accessor :message_y_bottom
    attr_accessor :message_y_middle
    attr_accessor :message_y_top
    attr_accessor :event_message_x_ofset
    attr_accessor :event_message_y_ofset
     
    def initialize
     
    @name_box_x_offset = 0	   #Sceglie la posizione X della finestra col nome. Iniziale= 0
    @name_box_y_offset = -10	#Sceglie la posizione Y della finestra col nome. Iniziale= -10
    @name_box_width = 8		   #Sceglie la larghezza della finestra col nome. Iniziale= 8  
    @name_box_height = 26		#Sceglie l'altezza della finestra col nome. Iniziale= 26
    
    @font_type = "Tahoma"		   #Sceglie il font per la finestra dei messaggi
    @name_font_type = "Tahoma" #Sceglie il font per la finestra col nome
    @font_size = 22					  #Sceglie la grandezza del font nella finestra dei messaggi
    @name_font_size = 22			#Sceglie la grandezza del font per la finestra col nome
    @name_box_text_color=0		#Sceglie il colore del font per la finestra dei messaggi
    @message_box_text_color=0   #Sceglie il colore del font per la finestra col nome
    
    @message_box_opacity = 160			#Sceglie l'opacità della finestra dei messaggi.Iniziale=160
    @message_box_skin = "001-Blue01"   #Nome della Windowskin della finestra dei messaggi.
    @name_box_skin = "001-Blue01"	   #Nome della Windowskin della finestra col nome.
    
    @message_width = 480		  #Sceglie la larghezza della finestra dei messaggi. Iniziale=480
    @message_height = 160		 #Sceglie l'altezza della finestra dei messaggi. Iniziale=160
    @message_x = 80				  #Sceglie la posizione X della finestra dei messaggi. Iniziale=80
    @message_y_bottom = 304	#Sceglie la posizione Y della finestra a partire dal basso. Iniziale=304
    @message_y_middle = 160	#Sceglie la posizione Y della finestra a partire dall'alto. Iniziale=160
    @message_y_top = 16		   #Sceglie la posizione della finestra del nome in alto. Iniziale=16
    
    @event_message_x_ofset = 0   #Sceglie la posizione X della finestra orientata agli eventi. Iniziale=0
    @event_message_y_ofset = 48   #Sceglie la posizione Y della finestra orientata agli eventi. Iniziale=48
    
    end
    end
    #===================================================
    # ▲ Finisce CLASSE AMS
    #===================================================
    
    
    #===================================================
    # ▼ Inizia Classe Window_Message
    #===================================================
    class Window_Message < Window_Selectable  
    
    alias xrxs9_initialize initialize
    
    def initialize
    @hero_face = ""
    @alex_skip = false
    
    xrxs9_initialize
    
    if $soundname_on_speak == nil then
     $soundname_on_speak = ""
    end
    
    $gaiji_file = "./Graphics/Gaiji/sample.png"
    
    if FileTest.exist?($gaiji_file)
     @gaiji_cache = Bitmap.new($gaiji_file)
    else
     @gaigi_cache = nil
    end
    @opacity_text_buf = Bitmap.new(32, 32)
    end
    
    
    #--------------------------------------------------------------------------
    
    alias xrxs9_terminate_message terminate_message
    
    def terminate_message
    
    if @name_window_frame != nil
     @name_window_frame.dispose
     @name_window_frame = nil
    end
    
    if @name_window_text  != nil
     @name_window_text.dispose
     @name_window_text  = nil
    end
    xrxs9_terminate_message
    end
    
    #--------------------------------------------------------------------------
    
    def refresh
    
    self.contents.clear
    self.contents.font.color = text_color($ams.message_box_text_color)
    self.contents.font.name = $ams.font_type
    self.contents.font.size = $ams.font_size
    self.windowskin = RPG::Cache.windowskin($ams.message_box_skin)
    @x = @y = @max_x = @max_y = @indent = @lines = 0
    @face_indent = 0
    @opacity = 255
    @cursor_width = 0
    @write_speed = 0
    @write_wait = 0
    @mid_stop = false
    @face_file = nil
    @popchar = -2
    
    if $game_temp.choice_start == 0
     @x = 8
    end
    
    if $game_temp.message_text != nil
     @now_text = $game_temp.message_text
     if FileTest.exist?("Graphics/Pictures/" + $game_temp.event_graphic + ".png")
    @face_file = $game_temp.event_graphic + ".png"
    @x = @face_indent = 128
    self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
     end 
     if (/\A\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then
     @face_file = $1 + ".png"
     @x = @face_indent = 128
    if FileTest.exist?("Graphics/Pictures/" + $1 + ".png")
      self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
    end
    @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" }
     end
    
     begin
     last_text = @now_text.clone
     @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
     end until @now_text == last_text
     @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
    @face_file = @hero_face + ".png" unless @hero_face == ""
    @x = @face_indent = 128
    if FileTest.exist?("Graphics/Pictures/" + @hero_face + ".png")
      self.contents.blt(16, 16, RPG::Cache.picture(@hero_face + ".png"), Rect.new(0, 0, 96, 96))
    end 
    $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
     
     #NEW
     #Dubealex's Stop Skip Text ON-OFF
     @now_text.gsub!(/\\[%]/) { "\100" }
     #Fine nuovo comando
     
     #NEW
     #Dubealex's Show Monster Name Feature
      @now_text.gsub!(/\\[Mm]\[([0-9]+)\]/) do
      $data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : ""
      end
      #Fine nuovo comando
     
     #NEW
     #Dubealex's Show Item Price Feature
      @now_text.gsub!(/\\[Pp]rice\[([0-9]+)\]/) do
      $data_items[$1.to_i] != nil ? $data_items[$1.to_i].price : ""
      end
      #Fine nuovo comando
     
     #NEW
     #Dubealex's Show Hero Class Name Feature
      @now_text.gsub!(/\\[Cc]lass\[([0-9]+)\]/) do
      $data_classes[$data_actors[$1.to_i].class_id] != nil ? $data_classes[$data_actors[$1.to_i].class_id].name : ""
      end
      #Fine nuovo comando
     
     #NEW
     #Dubealex's Show Current Map Name Feature
      @now_text.gsub!(/\\[Mm]ap/) do
      $game_map.name	!= nil ? $game_map.name	: ""
      end
      #Fine nuovo comando
     
     #NEW
     #Dubealex's Choose Name Box Text Color
      @now_text.gsub!(/\\[Zz]\[([0-9]+)\]/) do
      $ams.name_box_text_color=$1.to_i
      @now_text.sub!(/\\[Zz]\[([0-9]+)\]/) { "" }
      end
      #FIne nuovo comando
     
     name_window_set = false
     if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil
    name_window_set = true
    name_text = $1
    @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }
     end
    
     if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then
    @popchar = $1.to_i
    if @popchar == -1
      @x = @indent = 48
      @y = 4
    end
    @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" }
     end
    
     @max_choice_x = 0
     if @popchar >= 0
    @text_save = @now_text.clone
    @max_x = 0
    @max_y = 4
    for i in 0..3
      line = @now_text.split(/\n/)[3-i]
      @max_y -= 1 if line == nil and @max_y <= 4-i
      next if line == nil
      line.gsub!(/\\\w\[(\w+)\]/) { "" }
      cx = contents.text_size(line).width
      @max_x = cx if cx > @max_x
      if i >= $game_temp.choice_start
    	@max_choice_x = cx if cx > @max_choice_x
      end
    end
    self.width = @max_x + 32 + @face_indent
    self.height = (@max_y - 1) * 32 + 64
    @max_choice_x -= 68
    @max_choice_x -= @face_indent*216/128
     else
    @max_x = self.width - 32 - @face_indent
    for i in 0..3
      line = @now_text.split(/\n/)[i]
      next if line == nil
      line.gsub!(/\\\w\[(\w+)\]/) { "" }
      cx = contents.text_size(line).width
      if i >= $game_temp.choice_start
    	@max_choice_x = cx if cx > @max_choice_x
      end
    end
    @max_choice_x += 8
     end
     @cursor_width = 0
     @now_text.gsub!(/\\\\/) { "0" }
     @now_text.gsub!(/\\[Cc]\[([0123456789ABCDEF#]+)\]/) { "1[#{$1}]" }
     @now_text.gsub!(/\\[Gg]/) { "2" }
     @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "3[#{$1}]" }
     @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "4[#{$1}]" }
     
      #NEW
      #Dubealex's Permanent Color Change
      @now_text.gsub!(/\\[Cc]olor\[([0-9]+)\]/) do
     $ams.message_box_text_color= $1.to_i
    @now_text.sub!(/\\[Cc]\[([0-9]+)\]/) { "" }
     end
      #Fine nuovo comando
     
      #NEW
      #Dubealex's Font Change Feature
    @now_text.gsub(/\\[Tt]\[(.*?)\]/) do
     buftxt = $1.to_s
     $ams.font_type = buftxt
     @now_text.sub!(/\\[Tt]\[(.*?)\]/) { "" }
     end
      #Fine nuovo comando
     
     @now_text.gsub!(/\\[.]/) { "5" }
     @now_text.gsub!(/\\[|]/) { "6" }
     @now_text.gsub!(/\\[>]/) { "16" }
     @now_text.gsub!(/\\[<]/) { "17" }
     @now_text.gsub!(/\\[!]/) { "20" }
     @now_text.gsub!(/\\[~]/) { "21" }
     @now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "22[#{$1}]" }
     @now_text.gsub!(/\\[Ii]/) { "23" }
     @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "24[#{$1}]" }
     @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "25[#{$1}]" }
     @now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "26[#{$1}]" }
     @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "27[#{$1}]" }
     
     reset_window
     
     if name_window_set
    color=$ams.name_box_text_color
    off_x =  $ams.name_box_x_offset
    off_y =  $ams.name_box_y_offset
    space = 2
    x = self.x + off_x - space / 2
    y = self.y + off_y - space / 2
    w = self.contents.text_size(name_text).width + $ams.name_box_width + space
    h = $ams.name_box_height + space
    @name_window_frame = Window_Frame.new(x, y, w, h)
    @name_window_frame.z = self.z + 1
    x = self.x + off_x + 4
    y = self.y + off_y
    @name_window_text  = Air_Text.new(x, y, name_text, color)
    @name_window_text.z = self.z + 2
     end
    end
    
    reset_window
    
    if $game_temp.choice_max > 0
     @item_max = $game_temp.choice_max
     self.active = true
     self.index = 0
    end
    
    if $game_temp.num_input_variable_id > 0
     digits_max = $game_temp.num_input_digits_max
     number = $game_variables[$game_temp.num_input_variable_id]
     @input_number_window = Window_InputNumber.new(digits_max)
     @input_number_window.number = number
     @input_number_window.x = self.x + 8
     @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
    end
    
    #--------------------------------------------------------------------------
    
    def update
    
    super
    case $game_variables[HERO_FACE_ID]
     when 1
    @hero_face = "UmanoM"
     when 2
     when 3
     when 4
     when 5
     when 6
     when 7
     when 8
     when 9
     when 10
     when 11
     when 12
     when 13
     when 14
     end
    if @fade_in
     self.contents_opacity += 24
     if @input_number_window != nil
    @input_number_window.contents_opacity += 24
     end
     if self.contents_opacity == 255
    @fade_in = false
     end
     return
    end
    @now_text = nil if @now_text == ""
    
    if @now_text != nil and @mid_stop == false
     if @write_wait > 0
    @write_wait -= 1
    return
     end
     text_not_skip = LETTER_BY_LETTER_MODE
     while true
    @max_x = @x if @max_x < @x
    @max_y = @y if @max_y < @y
    if (c = @now_text.slice!(/./m)) != nil
      if c == "0"
    	c = "\\"
      end
      
      if c == "1"
    	@now_text.sub!(/\[([0123456789ABCDEF#]+)\]/, "")
    	temp_color = $1
    	color = temp_color.to_i
    	leading_x = temp_color.to_s.slice!(/./m)
    	if leading_x == "#"
    	  self.contents.font.color = hex_color(temp_color)
    	  next
    	end
    	if color >= 0 and color <= 7
    	  self.contents.font.color = text_color(color)
    	end
    	next
      end
    
      if c == "2"
    	if @gold_window == nil and @popchar <= 0
    	  @gold_window = Window_Gold.new
    	  @gold_window.x = 560 - @gold_window.width
    	  if $game_temp.in_battle
    		@gold_window.y = 192
    	  else
    		@gold_window.y = self.y >= 128 ? 32 : 384
    	  end
    	  @gold_window.opacity = self.opacity
    	  @gold_window.back_opacity = self.back_opacity
    	end
    	c = ""
      end
    
      if c == "3"
    	@now_text.sub!(/\[([0-9]+)\]/, "")
    	speed = $1.to_i
    	if speed >= 0 and speed <= 19
    	  @write_speed = speed
    	end
    	c = ""
      end
    
      if c == "4"
    	@now_text.sub!(/\[(.*?)\]/, "")
    	buftxt = $1.dup.to_s
    	if buftxt.match(/\//) == nil and buftxt != "" then
    	  $soundname_on_speak = "Audio/SE/" + buftxt
    	else
    	  $soundname_on_speak = buftxt.dup
    	end
    	c = ""
      elsif c == "4"
    	c = ""
      end
      
      if c == "5"
    	@write_wait += 5
    	c = ""
      end
      
      if c == "6"
    	@write_wait += 20
    	c = ""
      end
      
      if c == "16"
    	text_not_skip = false
    	c = ""
      end
      
      if c == "17"
    	text_not_skip = true
    	c = ""
      end
      
      if c == "20"
    	@mid_stop = true
    	c = ""
      end
      
      if c == "21"
    	terminate_message
    	return
      end
      
      if c == "23"
    	@indent = @x
    	c = ""
      end
    
      if c == "24"
    	@now_text.sub!(/\[([0-9]+)\]/, "")
    	@opacity = $1.to_i
    	color = self.contents.font.color
    	self.contents.font.name = $ams.font_type
    	self.contents.font.size = $ams.font_size
    	self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255)
    	c = ""
      end
    
      if c == "25"
    	@now_text.sub!(/\[([0-9]+)\]/, "")
    	self.contents.font.size = [[$1.to_i, 6].max, 32].min
    	c = ""
      end
    
      if c == "26"
    	@now_text.sub!(/\[([0-9]+)\]/, "")
    	@x += $1.to_i
    	c = ""
      end
      
      if c == "27"
    	@now_text.sub!(/\[(.*?)\]/, "")
    	@x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity)
    	if $soundname_on_speak != ""
    	  Audio.se_play($soundname_on_speak)
    	end
      c = ""
      end
    
      if c == "30"
    	@now_text.sub!(/\[(.*?)\]/, "")
    	self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))
    	if $soundname_on_speak != ""
    	  Audio.se_play($soundname_on_speak)
    	end
    	@x += 24
    	c = ""
      end
    
      if c == "\n"
    	@lines += 1
    	@y += 1
    	@x = 0 + @indent + @face_indent
    	if @lines >= $game_temp.choice_start
    	  @x = 8 + @indent + @face_indent
    	  @cursor_width = @max_choice_x
    	end
    	c = ""
      end
      
      if c == "22"
    	@now_text.sub!(/\[([0-9]+)\]/, "")
    	@x += gaiji_draw(4 + @x, @y * line_height + (line_height - self.contents.font.size), $1.to_i)
    	c = ""
      end
      
      #NEW
      #Dubealex's Text Skip On/OFF Command
       if c == "\100"
    	  if @alex_skip==false
    		 @alex_skip=true
    	  else
    		@alex_skip=false
    	  end
    	 c = ""
       end  
       #Fine nuovo comando
    							  
      if c != ""
    	self.contents.draw_text(0+@x, 32 * @y, 40, 32, c)
    	@x += self.contents.text_size(c).width
    	if $soundname_on_speak != "" then
    	  Audio.se_play($soundname_on_speak)
    	end
      end
      
    #SKIP_TEXT_CODE
    
    # B = Esc, 0 (tastiera numerica), X
    # C = Invio, Barra spaziatrice e C
    # A = Shift, Z
    
     if Input.press?(Input::C) # <-- Cambia il valore in quella linea
    if @alex_skip==false	  
    text_not_skip = false
    end
      end
    else
      text_not_skip = true
      break
    end
    
    if text_not_skip
      break
    end
     end
     @write_wait += @write_speed
     return
    end
    
    if @input_number_window != nil
     @input_number_window.update
     if Input.trigger?(Input::C)
    $game_system.se_play($data_system.decision_se)
    $game_variables[$game_temp.num_input_variable_id] =
      @input_number_window.number
    $game_map.need_refresh = true
    @input_number_window.dispose
    @input_number_window = nil
    terminate_message
     end
     return
    end
    
    if @contents_showing
     if $game_temp.choice_max == 0
    self.pause = true
     end
     
     if Input.trigger?(Input::B)
    if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
      $game_system.se_play($data_system.cancel_se)
      $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
      terminate_message
    end
     end
     
     if Input.trigger?(Input::C)
    if $game_temp.choice_max > 0
      $game_system.se_play($data_system.decision_se)
      $game_temp.choice_proc.call(self.index)
    end
    if @mid_stop
      @mid_stop = false
      return
    else
      terminate_message
    end
     end
     return
    end
    
    if @fade_out == false and $game_temp.message_text != nil
     @contents_showing = true
     $game_temp.message_window_showing = true
     refresh
     Graphics.frame_reset
     self.visible = true
     self.contents_opacity = 0
     if @input_number_window != nil
    @input_number_window.contents_opacity = 0
     end
     @fade_in = true
     return
    end
    
    if self.visible
     @fade_out = true
     self.opacity -= 48
     if self.opacity == 0
    self.visible = false
    @fade_out = false
    $game_temp.message_window_showing = false
     end
     return
    end
    end
    
    #--------------------------------------------------------------------------
    
    def get_character(parameter)
    
    case parameter
    when 0  
     return $game_player
    else
     events = $game_map.events
     return events == nil ? nil : events[parameter]
    end
    end
    
    #--------------------------------------------------------------------------
    
    def reset_window
    
    #GRANDEZZA_MESSAGGIO
    #POSIZIONE_MESSAGGIO
    
    if @popchar >= 0
     events = $game_map.events
     if events != nil
    character = get_character(@popchar)
    x = [[character.screen_x -  $ams.event_message_x_ofset - self.width / 2, 4].max, 636 - self.width].min
    y = [[character.screen_y - $ams.event_message_y_ofset - self.height, 4].max, 476 - self.height].min
    self.x = x
    self.y = y
     end
    elsif @popchar == -1
     self.x = -4
     self.y = -4
     self.width = 648
     self.height = 488
    else
     if $game_temp.in_battle
    self.y = 16
     else
    case $game_system.message_position
    when 0  
      self.y = $ams.message_y_top
    when 1  
      self.y = $ams.message_y_middle
    when 2  
      self.y = $ams.message_y_bottom
    end
    self.x = $ams.message_x
    if @face_file == nil
      self.width = $ams.message_width
      self.x = $ams.message_x
    else
      if self.width <= 600
    	self.width = 600
    	self.x -=60
       end
    end
    self.height = $ams.message_height
     end
    end
    self.contents = Bitmap.new(self.width - 32, self.height - 32)
    self.contents.font.color = text_color($ams.message_box_text_color)
    self.contents.font.name = $ams.font_type
    self.contents.font.size = $ams.font_size
    if @face_file != nil
     self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
    end
    if @popchar == -1
     self.opacity = 255
     self.back_opacity = 0
    elsif $game_system.message_frame == 0
     self.opacity = 255
     self.back_opacity = $ams.message_box_opacity
    else
     self.opacity = 0
     self.back_opacity = $ams.message_box_opacity
    end
    end
    
    #--------------------------------------------------------------------------
    
    def gaiji_draw(x, y, num)
    
    if @gaiji_cache == nil
     return 0
    else
     if @gaiji_cache.width < num * 24
    return 0
     end
    
     if self.contents.font.size >= 20 and self.contents.font.size <= 24
    size = 24
     else
    size = self.contents.font.size * 100 * 24 / 2200
     end
    
     self.contents.stretch_blt(Rect.new(x, y, size, size), @gaiji_cache, Rect.new(num * 24, 0, 24, 24))
    
     if $soundname_on_speak != "" then
    Audio.se_play($soundname_on_speak)
     end
     return size
    end
    end
    
    #--------------------------------------------------------------------------
    
    def line_height
    return 32
    
    if self.contents.font.size >= 20 and self.contents.font.size <= 24
     return 32
    else
     return self.contents.font.size * 15 / 10
    end
    end
    
    #--------------------------------------------------------------------------
    
    def ruby_draw_text(target, x, y, str,opacity)
    
    sizeback = target.font.size
    target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2
    rubysize = [rubysize, 6].max
    opacity = [[opacity, 0].max, 255].min
    split_s = str.split(/,/)
    split_s[0] == nil ? split_s[0] = "" : nil
    split_s[1] == nil ? split_s[1] = "" : nil
    
    height = sizeback + rubysize
    width  = target.text_size(split_s[0]).width
    
    target.font.size = rubysize
    ruby_width = target.text_size(split_s[1]).width
    target.font.size = sizeback
    
    buf_width = [target.text_size(split_s[0]).width, ruby_width].max
    
    width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0
    
    if opacity == 255
     target.font.size = rubysize
     target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1])
     target.font.size = sizeback
     target.draw_text(x, y, width, target.font.size, split_s[0])
     return width
    else
     if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height
    @opacity_text_buf.dispose
    @opacity_text_buf = Bitmap.new(buf_width, height)
     else
    @opacity_text_buf.clear
     end
     @opacity_text_buf.font.size = rubysize
     @opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1)
     @opacity_text_buf.font.size = sizeback
     @opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1)
     if sub_x >= 0
    target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
     else
    target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
     end
     return width
    end
    end
    
    #--------------------------------------------------------------------------
    
    def convart_value(option, index)
    option == nil ? option = "" : nil
    option.downcase!
    
    case option
    when "i"
     unless $data_items[index].name == nil
    r = sprintf("30[%s]%s", $data_items[index].icon_name, $data_items[index].name)
     end
    when "w"
     unless $data_weapons[index].name == nil
    r = sprintf("30[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)
     end
    when "a"
     unless $data_armors[index].name == nil
    r = sprintf("30[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)
     end
    when "s"
     unless $data_skills[index].name == nil
    r = sprintf("30[%s]%s", $data_skills[index].icon_name, $data_skills[index].name)
     end
    else
     r = $game_variables[index]
    end
    
    r == nil ? r = "" : nil
    return r
    end
    
    #--------------------------------------------------------------------------
    
    def dispose
    terminate_message
    
    if @gaiji_cache != nil
     unless @gaiji_cache.disposed?
    @gaiji_cache.dispose
     end
    end
    
    unless @opacity_text_buf.disposed?
     @opacity_text_buf.dispose
    end
    
    $game_temp.message_window_showing = false
    if @input_number_window != nil
     @input_number_window.dispose
    end
    super
    end
    
    #--------------------------------------------------------------------------
    
    def update_cursor_rect
    if @index >= 0
     n = $game_temp.choice_start + @index
     self.cursor_rect.set(8 + @indent + @face_indent, n * 32, @cursor_width, 32)
    else
     self.cursor_rect.empty
    end
    end
    end
    #=========================================
    # ▲ Finisce CLASSE Window_Message
    #=========================================
    
    
    #=========================================
    # ▼ Inizia Classe Window_Frame
    #=========================================
    class Window_Frame < Window_Base
    
    def initialize(x, y, width, height)
    super(x, y, width, height)
    self.windowskin = RPG::Cache.windowskin($ams.name_box_skin)
    self.contents = nil
    end
    
    #--------------------------------------------------------------------------
    
    def dispose
    super
    end
    end
    #=========================================
    # ▲ Esci CLASSE Window_Frame
    #=========================================
    
    
    #=========================================
    # ▼ Inizia aggiunte classe Game_Map
    #=========================================
    class Game_Map
    
    #Dubealex's Addition (from XRXS), mostra nome della mappa nel gioco
    def name
    $map_infos[@map_id]
    end
    end
    #=========================================
    # ▲ Finisce aggiunte classe Game_Map
    #=========================================
    
    
    #=========================================
    # ▼ Inizia aggiunte classe Scene_Title
    #=========================================
    class Scene_Title
    
    #Dubealex's Addition (from XRXS)  mostra nome della mappa nel gioco
    $map_infos = load_data("Data/MapInfos.rxdata")
    for key in $map_infos.keys
      $map_infos[key] = $map_infos[key].name
    end
    
    #Dubealex's addition, salva i dati dei messaggi quando salvi il gioco
    $ams = AMS.new
    
    end
    #=========================================
    # ▲ Finisce aggiunte classe Scene_Title
    #=========================================
    
    
    #=========================================
    # ▼ Inizia aggiunte classe Window_Base
    #=========================================
    class Window_Base < Window
    
    #Dubealex Addition (from Phylomorphis) per usare i codici dei colori HTML
    def hex_color(string)
     red = 0
     green = 0
     blue = 0
     if string.size != 6
    print("Vengono usati sei carrateri.")
    print("Sarà usato il colore bianco per il testo.")
    return Color.new(255, 255, 255, 255)
     end
     for i in 1..6
    s = string.slice!(/./m)
    if s == "#"
      print("Potrebbe non essere prensete il carattere \"#\".")
      print("Sarà usato il colore bianco per il testo.")
      return Color.new(255, 255, 255, 255)
    end
    value = hex_convert(s)
    if value == -1
      print("Errore nel convertire il valore.")
      print("Sarà usato il colore bianco per il testo.")
      return Color.new(255, 255, 255, 255)
    end
    case i
    when 1
      red += value * 16
    when 2
      red += value
    when 3
      green += value * 16
    when 4
      green += value
    when 5
      blue += value * 16
    when 6
      blue += value
    end
     end
     return Color.new(red, green, blue, 255)
    end
    
    #--------------------------------------------------------------------------
    
    def hex_convert(character)
     case character
      when "0"
     return 0
     when "1"
     return 1
     when "2"
     return 2
     when "3"
     return 3
     when "4"
     return 4
     when "5"
     return 5
     when "6"
     return 6
     when "7"
     return 7
     when "8"
     return 8
     when "9"
     return 9
     when "A"
     return 10
     when "B"
     return 11
     when "C"
     return 12
     when "D"
     return 13
     when "E"
     return 14
     when "F"
     return 15
      end
     return -1
    end
    end
    #=========================================
    # ▲ Finisce aggiunte classe Window_Base
    #=========================================
    
    
    #=========================================
    # ▼ Inizia classe Air_Text
    #=========================================
    class Air_Text < Window_Base
    
    def initialize(x, y, designate_text, color=0)
    
    super(x-16, y-16, 32 + designate_text.size * 12, 56)
    self.opacity	  = 0
    self.back_opacity = 0
    self.contents = Bitmap.new(self.width - 32, self.height - 32)
    w = self.contents.width
    h = self.contents.height
    self.contents.font.name = $ams.name_font_type
    self.contents.font.size = $ams.name_font_size
    self.contents.font.color = text_color(color)
    self.contents.draw_text(0, 0, w, h, designate_text)
    end
    
    #--------------------------------------------------------------------------
    
    def dispose
    self.contents.clear
    super
    end
    end
    #==========================================
    # ▲ Finisce classe Air_Text
    #==========================================
    
    
    #===================================================
    # ▼ Inizia aggiunte classe Scene_Save
    #===================================================
    class Scene_Save < Scene_File
    
    alias ams_original_write_save_data write_save_data
    
    def write_save_data(file)
      ams_original_write_save_data(file)
      Marshal.dump($ams, file)
    end
    
    end
    #===================================================
    # ▲ Finisce aggiunte classe Scene_Save
    #===================================================
    
    
    #===================================================
    # ▼ Inizia aggiunte classe Scene_Load
    #===================================================
    class Scene_Load < Scene_File
    
    alias ams_original_read_save_data read_save_data
    
    def read_save_data(file)
      ams_original_read_save_data(file)
      $ams	  = Marshal.load(file)
    end
    
    end
    #===================================================
    # ▲ Finisce aggiunte classe Scene_Load
    #===================================================

     

     

     

    Tutto quello che devi fare è mettere le faces dei png nella cartella Pictures per quanto riguarda i png, invece per l'eroe devi, oltre alle faces in Pictures, mettere il nome dell'eroe in cima al discorso, ovviamente con la formula: \n[NUMEROEROE].

    Tutto qua.

  5. Ho fatto una nuova versione del diario, quella vecchia aveva troppi problemi e non era proprio un diario era più una lunga pergamena.

    Adesso nella nuova vesione non c'è lo scorrimento verticale, bensì a pagine.

    Non l'ho ancora terminato, però qui ho uno screen.

     

    http://img167.imageshack.us/img167/2475/diariozl3.png

     

     

×
×
  • Create New...