[RMXP] Simple Item, Equip, Status and Skill Menu.

Started by PrinceEndymion88, August 10, 2013, 02:13:32 pm

Previous topic - Next topic

PrinceEndymion88

Hi guys. I'm searching for some very simple script for my new Item, Equip, Status and Skill Menu. Actually I'm using Drago Scene Menu as my Scene Menu and other script like: ccoa's weather script, KH SAVE, ums by ccoa, mode7, CCOA 3.04 RTA, Mog Damage System, DRG - Scene Menu Animated Cursor, Scene into flash, mana title, MOG Scene Shop, mog scene story, Party Changer, Stop the victory ME, Skill Chrono Trigger, shadow text, ,dash, region system, mog battler effects, Light Effects XP 2.1...
These are some pictures with description of what I would.
Spoiler: ShowHide

Scene Item:




Scene Equip:


Scene Status:


Scene Skill (single tech):


I also use a Link Tech system. For example, an hero can use a "special" skill in battle only if there is other (one or more) heroes in battle...
An example: HERO1 can use in battle the tech MAGIC WIND only if HERO2 and HERO3 are in battle.
This is the script used for link tech:
Spoiler: ShowHide
#==============================================================================
# • Tecniche combinate stile Chrono Trigger
# di mikb89
# demo: 2 agosto 2009
# versione 1.2 - CCOA (3.04) compatible
#------------------------------------------------------------------------------
# Per creare una skill combo basta fare una skill normale e poi
# configurare qui ciò che viene richiesto.
# Da notare che nelle skill combo è utilizzato il sistema che c'era
# nell'rm2k, cioè che per usare una tecnica con un attributo, devi
# avere l'equipaggiamento con quell'attributo. Ad esempio lo skill
# "Colpo di spada" con l'attributo "Spada", richiede che devi avere
# equipaggiata un arma con l'attributo "Spada" (una spada, quindi);
# se non usate gli attributi non ci fate caso, ma nell'rm2k era così. Se
# invece li usate e volete lo stesso anche per gli skill normali, copiate
# alla fine di questo script lo script Skill Add-on che segue.
# NEW: Se non volete usare questo sistema degli attributi adesso potete
#      configurarlo tramite il USA_ATTRIBUTI_SKILL sotto impostato a 0
#==============================================================================
# • Configurazioni:
#------------------------------------------------------------------------------
module Impostazioni
class CTCombo

TASTO_CAMBIO_SKILL_E_COMBO = Input::A
# I combo vengono utilizzati scegliendo Skill dal menu (o come l'avete
# tradotto) e premendo un tasto.
# Premendolo nuovamente si torna alle skill normali. Con questa costante
# si specifica il tasto da premere.
# Input::A equivale a SHIFT
# Input::CTRL equivale a CONTROL
# Input::L e Input::R equivalgono a PageUp e PageDown
# e ce ne sono altri, l'importante è che c'è Input:: prima

ARCHIVIAZIONE_VIA_SWITCH = 0
# Occorre spendere due parole...
# In Chrono Trigger ci sono tre membri che vanno in battaglia ma i personaggi
# che sono nel party (oltre quei tre) dal menu possono usare i combo. Questa
# situazione può essere emulata tramite switch mettendo 1. Con 0 per il combo
# saranno considerati validi soltanto i personaggi che vanno in battaglia.

SWITCH_INIZIALE_MEMBRI = 11
# Se la constante sopra è settata a 1 questo valore specifica lo switch che
# viene attivato quando il PRIMO eroe è nel party. Gli altri eroi avranno gli switch
# seguenti a seconda del loro ordine nel database.
# Da notare che se questo metodo è attivo gli switch vanno impostati anche per
# i tre eroi che vanno in battaglia.

USA_ATTRIBUTI_SKILL = 0
# Attiva (1) o disattiva (0) il sistema di abilitazione skill per attributi.
# Dato che non tutti conoscono questa opzione (che era standard nei vecchi
# rpg maker) ho pensato di dare la possibilità di rimuoverla.
# Qualunque sia l'impostazione, varrà solo per le SKILL COMBO!
# Quindi per le skill normali basterà mettere sopra (attivo) o sotto (disattivo)
# il Main lo Skill AddOn incluso in questa demo.
end
end

$combo_skill = [53, 54, 55, 56, 57, 58, 59, 60, 61, 81, 82, 83, 84, 85, 86, 87, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 147, 148, 149, 150, 151, 152, 153, 154]
# Contiene gli id delle skill che sono combo.
# In questo caso le skill dal n° 82 al n° 84 sono combo.
# Quindi vi chiederete: "Sono combo sì, ma chi le usa?"
# Questo viene specificato sotto.

$combo_hero = [[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 9], [1, 8], [1, 7], [1, 10], [2, 3], [2, 4], [2, 5], [2, 6], [2, 8], [2, 7], [3, 4], [3, 5], [3, 7], [4, 5], [4, 6], [4, 9], [5, 10], [9, 8], [9, 7], [7, 8], [7, 9, 8], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [11, 12, 13, 14], [6, 11, 12, 13, 14], [15, 16, 17, 18]]
# Contiene gli id degli eroi che usano le combo (per ogni combo sono tra parentesi quadra).
# In questo caso la prima skill combo (la n° 82 come impostato sopra) sarà eseguita dagli eroi
# n°1 e 8; la seconda skill dagli eroi 5 e 8; la terza da 7 e 8.
# E a questo punto vi chiederete: "E come faccio a specificare gli MP necessari per ogni eroe?"
# E anche questo viene specificato sotto.

$combo_point = [[4, 4], [4, 4], [4, 4], [4, 4], [6, 6], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [8, 8, 8], [10, 10, 10, 10, 10], [12, 12, 12, 12, 12], [16, 16, 16, 16, 16], [20, 20, 20, 20, 20], [22, 22, 22, 22, 22], [16, 16, 16, 16], [16, 16, 16, 16, 16], [20, 20, 20, 20]]
# Contiene i punti necessari per eseguire la combo per ogni eroe.
# Identico a quello sopra, solo che dovete sostituire il numero dell'eroe con gli MP necessari per
# utilizzare la combo. In questo caso nella skill 82 l'eroe 1 necessiterà di 100 MP, l'eroe 8 di 75.
# Nota: gli MP specificati nella scheda della skill, se la skill è combo, non serviranno
#       ad un emerito niente.

# Fine configurazioni

#-----------------VALENTINO------------
SKILL_COMBO = {
147=>SHOOT, #shoot
148=>ARROW,  #arrow
149=>VICTORY, #victory
150=>CLUSTER, #cluster
152=>ARROW  #arrow
}
#----------------VALENTINO-------------


class Window_Combo < Window_Selectable
 #--------------------------------------------------------------------------
 # ● Inizializzazione
 #--------------------------------------------------------------------------
 def initialize(actor)
   super(0, 320, 640, 160)
   @actor = actor
   @column_max = 1
   refresh
   self.index = 0
   if $game_temp.in_battle
     self.y = 64
     self.height = 256
     self.back_opacity = 160
   end
 end
 #--------------------------------------------------------------------------
 # ● Riporta la combo selezionata
 #--------------------------------------------------------------------------
 def skill
   return @data[self.index]
 end
 #--------------------------------------------------------------------------
 # ● Conteggia i combo da disegnare
 #--------------------------------------------------------------------------
 def refresh
   if self.contents != nil
     self.contents.dispose
     self.contents = nil
   end
   @data = []
   for i in 0...@actor.skills.size
     skill = $data_skills[@actor.skills[i]]
     if skill != nil and $combo_skill.include?(skill.id)
       @data.push(skill)
     end
   end
   @item_max = @data.size
   if @item_max > 0
     self.contents = Bitmap.new(width - 32, row_max * 32)
     for i in 0...@item_max
       draw_item(i)
     end
   end
 end
 #--------------------------------------------------------------------------
 # ● Disegna la combo
 #--------------------------------------------------------------------------
 def draw_item(index)
   skill = @data[index]
   for i in 0...$combo_skill.size
     if $combo_skill[i] != nil
     if $combo_skill[i] == skill.id
       n = i
     end
     end
   end
   v = 0
   for h in 0...$combo_hero[n].size
     if $game_actors[$combo_hero[n][h]] != nil
     if $game_actors[$combo_hero[n][h]].combo_can_use?(skill.id)
       v += 1
     end
   end
   end
   
   #VALENTINO
    formation = SKILL_COMBO[skill.id]
    @colore = false
   if formation != nil
     if $battle_formation == formation
       self.contents.font.color = normal_color
     else
       @colore = true
       self.contents.font.color = disabled_color
     end
   end
   #VALENTINO
   
   if v == $combo_hero[n].size
     self.contents.font.color = normal_color
   else
     self.contents.font.color = disabled_color
   end
   
  self.contents.font.color = disabled_color if @colore
   
   
   x = 4
   y = index * 32
   rect = Rect.new(x, y, self.width - 32, 64)
   self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
   bitmap = RPG::Cache.icon(skill.icon_name)
   opacity = self.contents.font.color == normal_color ? 255 : 128
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
   if not $game_temp.in_battle
     self.contents.draw_text(x + 232, y, 48, 32, $combo_point[n][0].to_s, 2)
     self.contents.draw_text(x + 288, y, 48, 32, $combo_point[n][1].to_s, 2) rescue nil
     self.contents.draw_text(x + 344, y, 48, 32, $combo_point[n][2].to_s, 2) rescue nil
     self.contents.draw_text(x + 400, y, 48, 32, $combo_point[n][3].to_s, 2) rescue nil
   else
     po = []
     for i in 0...$game_party.actors.size
       if $combo_hero[n].include?($game_party.actors[i].id)
         po.push $game_party.actors[i].id
       end
     end
     ex = po.size
     for r in 0...$combo_hero[n].size
       if $combo_hero[n][r] != nil
       if not po.include?($combo_hero[n][r])
         po.push $combo_hero[n][r]
       end
       end
     end
     for ach in 0...po.size
       if ach == ex
         self.contents.font.color = self.contents.font.color == normal_color ? knockout_color : Color.new(255, 64, 0, 128)
       end
       for h in 0...$combo_hero[n].size
         if $combo_point[n][h] != nil
         if $combo_hero[n][h] == po[ach]
           punti = $combo_point[n][h]
         end
         end
       end
       self.contents.draw_text(x + 232 + (ach * 56), y, 48, 32, punti.to_s, 2)
     end
   end
 end
 #--------------------------------------------------------------------------
 # ● Finestra con descrizione combo
 #--------------------------------------------------------------------------
 def update_help
   @help_window.set_text(self.skill == nil ? "" : self.skill.description)
 end
end

class Window_ComboStatus < Window_Base
 #--------------------------------------------------------------------------
 # ● Inizializzazione
 #--------------------------------------------------------------------------
 def initialize(actor, n)
   super(0, 64*n, 640, 64)
   self.contents = Bitmap.new(width - 32, height - 32)
   @actor = actor
   refresh
 end
 #--------------------------------------------------------------------------
 # ● Disegna i valori
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   if @actor != nil
     draw_actor_name(@actor, 4, 0)
     draw_actor_state(@actor, 140, 0)
     draw_actor_hp(@actor, 284, 0)
     draw_actor_sp(@actor, 460, 0)
   end
 end
 #--------------------------------------------------------------------------
 # ● Imposta il personaggio
 #--------------------------------------------------------------------------
 def actor=(actor)
   @actor = actor
   refresh
 end
end

class Scene_Combo
 #--------------------------------------------------------------------------
 # ● Inizializzazione
 #--------------------------------------------------------------------------
 def initialize(actor_index = 0, equip_index = 0)
   @actor_index = actor_index
 end
 #--------------------------------------------------------------------------
 # ● Ciclo principale
 #--------------------------------------------------------------------------
 def main
   @actor = $game_party.actors[@actor_index]
   @help_window = Window_Help.new
   @status_window = Window_ComboStatus.new(@actor, 1)
   @status_window2 = Window_ComboStatus.new(nil, 2)
   @status_window3 = Window_ComboStatus.new(nil, 3)
   @status_window4 = Window_ComboStatus.new(nil, 4)
   @skill_window = Window_Combo.new(@actor)
   @skill_window.help_window = @help_window
   @target_window = Window_Target.new
   @target_window.visible = false
   @target_window.active = false
   Graphics.transition
   loop do
     Graphics.update
     Input.update
     update
     if $scene != self
       break
     end
   end
   Graphics.freeze
   @help_window.dispose
   @status_window.dispose
   @status_window2.dispose
   @status_window3.dispose
   @status_window4.dispose
   @skill_window.dispose
   @target_window.dispose
 end
 #--------------------------------------------------------------------------
 # ● Aggiornamento
 #--------------------------------------------------------------------------
 def update
   @help_window.update
   @status_window.update
   @status_window2.update
   @status_window3.update
   @status_window4.update
   @skill_window.update
   @target_window.update
   if @skill_window.active
     update_skill
     return
   end
   if @target_window.active
     update_target
     return
   end
 end
 #--------------------------------------------------------------------------
 # ● Gestione combo
 #--------------------------------------------------------------------------
 def update_skill
   for i in 0...$combo_skill.size
     if $combo_skill[i] == @skill_window.skill.id
       n = i
     end
   end
   if n != nil
     v = 0
     for h in 0...$combo_hero[n].size
       if $game_actors[$combo_hero[n][h]] != nil
       if $game_actors[$combo_hero[n][h]].combo_can_use?(@skill_window.skill.id)
         v += 1
       end
       end
     end
   end
   @status_window.actor = $game_actors[$combo_hero[n][0]] rescue @status_window.actor = @actor
   @status_window2.actor = $game_actors[$combo_hero[n][1]] rescue @status_window2.actor = nil
   @status_window3.actor = $game_actors[$combo_hero[n][2]] rescue @status_window3.actor = nil
   @status_window4.actor = $game_actors[$combo_hero[n][3]] rescue @status_window4.actor = nil
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     $scene = Scene_Menu.new(1)
     return
   end
   if Input.trigger?(Input::C)
     @skill = @skill_window.skill
     if @skill == nil or not v == $combo_hero[n].size
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     $game_system.se_play($data_system.decision_se)
     if @skill.scope >= 3
       @skill_window.active = false
       @target_window.x = (@skill_window.index + 1) % 2 * 304
       @target_window.visible = true
       @target_window.active = true
       if @skill.scope == 4 || @skill.scope == 6
         @target_window.index = -1
       elsif @skill.scope == 7
         @target_window.index = @actor_index - 10
       else
         @target_window.index = 0
       end
     else
       if @skill.common_event_id > 0
         $game_temp.common_event_id = @skill.common_event_id
         $game_system.se_play(@skill.menu_se)
         for s in 0...$combo_hero[n].size
           if $game_actors[$combo_hero[n][s]] != nil
           $game_actors[$combo_hero[n][s]].sp -= $combo_point[n][s]
         end
         
         end
         @status_window.refresh
         @status_window2.refresh
         @status_window3.refresh
         @status_window4.refresh
         @skill_window.refresh
         @target_window.refresh
         $scene = Scene_Map.new
         return
       end
     end
     return
   end
   if Input.trigger?(Input::R)
     $game_system.se_play($data_system.cursor_se)
     @actor_index += 1
     @actor_index %= $game_party.actors.size
     $scene = Scene_Combo.new(@actor_index)
     return
   end
   if Input.trigger?(Input::L)
     $game_system.se_play($data_system.cursor_se)
     @actor_index += $game_party.actors.size - 1
     @actor_index %= $game_party.actors.size
     $scene = Scene_Combo.new(@actor_index)
     return
   end
   if Input.trigger?(Impostazioni::CTCombo::TASTO_CAMBIO_SKILL_E_COMBO)
     $game_system.se_play($data_system.decision_se)
     $scene = Scene_Skill.new(@actor_index)
     return
   end
 end
 #--------------------------------------------------------------------------
 # ● Scelta personaggio per utilizzare combo di cura
 #--------------------------------------------------------------------------
 def update_target
   for i in 0...$combo_skill.size
     if $combo_skill[i] == @skill_window.skill.id
       n = i
     end
   end
   @status_window.actor = $game_actors[$combo_hero[n][0]] rescue @status_window.actor = @actor
   @status_window2.actor = $game_actors[$combo_hero[n][1]] rescue @status_window2.actor = nil
   @status_window3.actor = $game_actors[$combo_hero[n][2]] rescue @status_window3.actor = nil
   @status_window4.actor = $game_actors[$combo_hero[n][3]] rescue @status_window4.actor = nil
   v = 0
   for h in 0...$combo_hero[n].size
     if $game_actors[$combo_hero[n][h]] != nil
     if $game_actors[$combo_hero[n][h]].combo_can_use?(@skill_window.skill.id)
       v += 1
     end
     end
   end
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     @skill_window.active = true
     @target_window.visible = false
     @target_window.active = false
     return
   end
   if Input.trigger?(Input::C)
     unless v == $combo_hero[n].size
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     if @target_window.index == -1
       used = false
       for i in $game_party.actors
         used |= i.skill_effect(@actor, @skill)
       end
     end
     if @target_window.index <= -2
       target = $game_party.actors[@target_window.index + 10]
       used = target.skill_effect(@actor, @skill)
     end
     if @target_window.index >= 0
       target = $game_party.actors[@target_window.index]
       used = target.skill_effect(@actor, @skill)
     end
     if used
       $game_system.se_play(@skill.menu_se)
       for s in 0...$combo_hero[n].size
         if $game_actors[$combo_hero[n][s]] != nil
         $game_actors[$combo_hero[n][s]].sp -= $combo_point[n][s]
         end
       end
       @status_window.refresh
       @status_window2.refresh
       @status_window3.refresh
       @status_window4.refresh
       @skill_window.refresh
       @target_window.refresh
       if $game_party.all_dead?
         $scene = Scene_Gameover.new
         return
       end
       if @skill.common_event_id > 0
         $game_temp.common_event_id = @skill.common_event_id
         $scene = Scene_Map.new
         return
       end
     end
     unless used
       $game_system.se_play($data_system.buzzer_se)
     end
     return
   end
 end
end

class Game_Actor < Game_Battler
   def combo_can_use?(skill_id)
   for i in 0...$combo_skill.size
     if $combo_skill[i] == skill_id
       n = i
     end
   end
   for i in 0...$combo_hero[n].size
     if $game_actors[$combo_hero[n][i]] != nil
     if not $game_actors[$combo_hero[n][i]].skills.include?(skill_id)
       return false
     end
   end
   end
 
   if Impostazioni::CTCombo::USA_ATTRIBUTI_SKILL == 0
     return super
   else
     @acc = 0
     @times = 0
     for a in $data_skills[skill_id].element_set
       @times +=1
       if ($combo_hero[n][0] != nil and $data_weapons[$game_actors[$combo_hero[n][0]].weapon_id] != nil and $data_weapons[$game_actors[$combo_hero[n][0]].weapon_id].element_set.include?(a)) or
         ($combo_hero[n][1] != nil and $data_weapons[$game_actors[$combo_hero[n][1]].weapon_id] != nil and $data_weapons[$game_actors[$combo_hero[n][1]].weapon_id].element_set.include?(a)) or
         ($combo_hero[n][2] != nil and $data_weapons[$game_actors[$combo_hero[n][2]].weapon_id] != nil and $data_weapons[$game_actors[$combo_hero[n][2]].weapon_id].element_set.include?(a))
         @acc += 1
       else
         if ($combo_hero[n][0] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor1_id] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor1_id].guard_element_set.include?(a)) or
           ($combo_hero[n][1] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor1_id] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor1_id].guard_element_set.include?(a)) or
           ($combo_hero[n][2] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor1_id] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor1_id].guard_element_set.include?(a))
           @acc += 1
         else
           if ($combo_hero[n][0] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor2_id] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor2_id].guard_element_set.include?(a)) or
             ($combo_hero[n][1] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor2_id] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor2_id].guard_element_set.include?(a)) or
             ($combo_hero[n][2] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor2_id] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor2_id].guard_element_set.include?(a))
             @acc += 1
           else
             if ($combo_hero[n][0] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor3_id] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor3_id].guard_element_set.include?(a)) or
               ($combo_hero[n][1] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor3_id] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor3_id].guard_element_set.include?(a)) or
               ($combo_hero[n][2] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor3_id] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor3_id].guard_element_set.include?(a))
               @acc += 1
             else
               if ($combo_hero[n][0] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor4_id] != nil and $data_armors[$game_actors[$combo_hero[n][0]].armor4_id].guard_element_set.include?(a)) or
                 ($combo_hero[n][1] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor4_id] != nil and $data_armors[$game_actors[$combo_hero[n][1]].armor4_id].guard_element_set.include?(a)) or
                 ($combo_hero[n][2] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor4_id] != nil and $data_armors[$game_actors[$combo_hero[n][2]].armor4_id].guard_element_set.include?(a))
                 @acc += 1
               else
                 return false
               end
             end
           end
         end
       end
     end
     if @times == @acc
       return super
     else
       return false
     end
   end
 end
end

class Game_Battler
 def combo_can_use?(skill_id)
   for i in 0...$combo_skill.size
     if $combo_skill[i] == skill_id
       n = i
     end
   end
   for i in 0...$combo_hero[n].size
     if $game_actors[$combo_hero[n][i]] != nil
     if $combo_point[n][i] > $game_actors[$combo_hero[n][i]].sp
       return false
     end
     end
   end
   for i in 0...$combo_hero[n].size
     if $game_actors[$combo_hero[n][i]] != nil
     if $game_actors[$combo_hero[n][i]].hp == 0 and not $game_actors[$combo_hero[n][i]].immortal
       return false
     end
     end
   end
   for i in 0...$combo_hero[n].size
     if $game_actors[$combo_hero[n][i]] != nil
     if $data_skills[skill_id].atk_f == 0 and $game_actors[$combo_hero[n][i]].restriction == 1
       return false
     end
     end
   end
   occasion = $data_skills[skill_id].occasion
   pl = 0
   if $game_temp.in_battle
     for i in 0...$combo_hero[n].size
       if $game_actors[$combo_hero[n][i]] != nil
       if $game_party.actors.include?($game_actors[$combo_hero[n][i]])
         pl += 1
       end
       end
     end
     if pl == $combo_hero[n].size
       return (occasion == 0 or occasion == 1)
     else
       return false
     end
   else
     for i in 0...$combo_hero[n].size
       if $combo_hero[n][i] != nil
       if Impostazioni::CTCombo::ARCHIVIAZIONE_VIA_SWITCH
         if $game_switches[$combo_hero[n][i] + Impostazioni::CTCombo::SWITCH_INIZIALE_MEMBRI - 1] == true
           pl += 1
         end
         end
       else
         if $game_party.actors.include?($combo_hero[n][i])
           pl += 1
         end
       end
     end
     if pl == $combo_hero[n].size
       return (occasion == 0 or occasion == 2)
     else
       return false
     end
   end
 end
end

class Scene_Skill
 alias ctbs_update_skill update_skill
 def update_skill
   ctbs_update_skill
   if Input.trigger?(Impostazioni::CTCombo::TASTO_CAMBIO_SKILL_E_COMBO)
     $game_system.se_play($data_system.decision_se)
     $scene = Scene_Combo.new(@actor_index)
     return
   end
 end
end

class Scene_Battle
 def main
   $game_temp.in_battle = true
   $game_temp.battle_turn = 0
   $game_temp.battle_event_flags.clear
   $game_temp.battle_abort = false
   $game_temp.battle_main_phase = false
   $game_temp.battleback_name = $game_map.battleback_name
   $game_temp.forcing_battler = nil
   $game_system.battle_interpreter.setup(nil, 0)
   @troop_id = $game_temp.battle_troop_id
   $game_troop.setup(@troop_id)
   @party_command_window = Window_PartyCommand.new
   @help_window = Window_Help.new
   @help_window.back_opacity = 160
   @help_window.visible = false
   @status_window = Window_BattleStatus.new
   @message_window = Window_Message.new
   #ccoa
   #s1 = $data_system.words.attack
   #s2 = $data_system.words.skill
   #s3 = $data_system.words.guard
   #s4 = $data_system.words.item
   #@actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
   #@actor_command_window.y = 160
   #@actor_command_window.back_opacity = 160
   #@actor_command_window.active = false
   #@actor_command_window.visible = false
   @help_window2 = Win_Help.new
   @help_window2.visible = false
   @help_window2.contents_opacity = 0
   @help_time = 0
   @actor_command_windows = []
   setup_actor_command_windows
   @cursor_bitmap = Sprite.new
   @cursor_bitmap.bitmap = RPG::Cache.windowskin($game_system.windowskin_name)
   @cursor_bitmap.src_rect.set(128, 96, 32, 32)
   @cursor_bitmap.visible = false
   @blink_count = 0
   #fine ccoa
   @spriteset = Spriteset_Battle.new
   @wait_count = 0
   # compatibilità CCOA
   @extra_sprites = [] if @extra_sprites == nil
  # cp_preset_party
  # @cp_meters = CP_Meters.new
  # @extra_sprites.push(@cp_meters)
   # fine compatibilità
   if $data_system.battle_transition == ""
     Graphics.transition(0)
   else
     Graphics.transition(40, "Graphics/Transitions/" +
       $data_system.battle_transition) #era 40 ora è 100 x ccoa
   end
   start_phase1
   loop do
     Graphics.update
     Input.update
     update
     if $scene != self
       break
     end
   end
   $game_map.refresh
   Graphics.freeze
   #ccoa
   for window in @actor_command_windows
     window.dispose
   end
   #@actor_command_window.dispose
   #fine ccoa
   @party_command_window.dispose
   @help_window.dispose
   @help_window2.dispose #ccoa
   @status_window.dispose
   @message_window.dispose
   if @skill_window != nil
     @skill_window.dispose
   end
   #ccoa
   if @skill_window2 != nil
     @skill_window2.dispose
   end
   #fine ccoa
   if @combo_window != nil
     @combo_window.dispose
   end
   if @item_window != nil
     @item_window.dispose
   end
   if @result_window != nil
     @result_window.dispose
   end
   @spriteset.dispose
   # compatibilità CCOA
   @cursor_bitmap.dispose
   #@cp_meters.dispose
   # fine compatibilità
   if $scene.is_a?(Scene_Title)
     Graphics.transition
     Graphics.freeze
   end
   if $BTEST and not $scene.is_a?(Scene_Gameover)
     $scene = nil
   end
 end

 def update_phase3
   if @enemy_arrow != nil
     update_phase3_enemy_select
     return #ccoa
   elsif @actor_arrow != nil
     update_phase3_actor_select
     return #ccoa
   elsif @skill_window != nil
     update_phase3_skill_select
     return #ccoa
   elsif @combo_window != nil
     update_phase3_combo_select
     return #ccoa
   elsif @item_window != nil
     update_phase3_item_select
     return #ccoa
   end #ccoa
   
   #ccoa
   #elsif @actor_command_window.active
   #  update_phase3_basic_command
   #end
   # If actor command window is enabled
   for i in 0..$game_party.actors.size - 1
     if @actor_command_windows[i].active
         update_phase3_basic_command
       return
     end
   end
   #fine ccoa
 end
 
 alias update_phase3_skill_select_combo update_phase3_skill_select
 def update_phase3_skill_select
   update_phase3_skill_select_combo
   if Input.trigger?(Impostazioni::CTCombo::TASTO_CAMBIO_SKILL_E_COMBO)
       $game_system.se_play($data_system.decision_se)
       @active_battler.current_action.kind = 1
       end_skill_select
       start_combo_select
     return
   end
 end

 def update_phase3_combo_select
   @combo_window.visible = true
   @combo_window.update
   for i in 0...$combo_skill.size
     if $combo_skill[i] == @combo_window.skill.id
       n = i
     end
   end
   for b in 0...$game_party.actors.size
     $game_party.actors[b].blink = false
   end
   if n != nil
     for h in 0...$combo_hero[n].size
       if $game_actors[$combo_hero[n][h]] != nil
       if $game_party.actors.include?($game_actors[$combo_hero[n][h]])
         $game_actors[$combo_hero[n][h]].blink = true
         end
       end
     end
   end
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     end_combo_select
     return
   end
   if Input.trigger?(Input::C)
     @skill = @combo_window.skill
     #VALENTINO
   formation = SKILL_COMBO[@skill.id]
   if formation != nil
     unless $battle_formation == formation
       $game_system.se_play($data_system.buzzer_se)
       return
     end
   end
     #VALENTINO
     
     if n == nil
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     v = 0
     for h in 0...$combo_hero[n].size
       if $game_actors[$combo_hero[n][h]] != nil
       if $game_actors[$combo_hero[n][h]].combo_can_use?(@skill.id)
         v += 1
       end
       end
     end
     if @skill == nil or not v == $combo_hero[n].size
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     $game_system.se_play($data_system.decision_se)
     @active_battler.current_action.skill_id = @skill.id
     @combo_window.visible = false
     if @skill.scope == 1
       start_enemy_select
     elsif @skill.scope == 3 or @skill.scope == 5
       start_actor_select
     else
       end_combo_select
       phase3_next_actor
     end
     return
   end
   if Input.trigger?(Impostazioni::CTCombo::TASTO_CAMBIO_SKILL_E_COMBO)
       $game_system.se_play($data_system.decision_se)
       @active_battler.current_action.kind = 1
       end_combo_select
       start_skill_select
     return
   end    
 end

 def update_phase3_enemy_select
   @enemy_arrow.update
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     end_enemy_select
     return
   end
   if Input.trigger?(Input::C)
     $game_system.se_play($data_system.decision_se)
     @active_battler.current_action.target_index = @enemy_arrow.index
     end_enemy_select
     if @skill_window != nil
       end_skill_select
     end
     if @combo_window != nil
       end_combo_select
     end
     if @item_window != nil
       end_item_select
     end
     phase3_next_actor
   end
 end

 def update_phase3_actor_select
   @actor_arrow.update
   if Input.trigger?(Input::B)
     $game_system.se_play($data_system.cancel_se)
     end_actor_select
     return
   end
   if Input.trigger?(Input::C)
     $game_system.se_play($data_system.decision_se)
     @active_battler.current_action.target_index = @actor_arrow.index
     end_actor_select
     if @skill_window != nil
       end_skill_select
     end
     if @combo_window != nil
       end_combo_select
     end
     if @item_window != nil
       end_item_select
     end
     phase3_next_actor
   end
 end

 def start_combo_select
   @combo_window = Window_Combo.new(@active_battler)
   @combo_window.help_window = @help_window
   #ccoa
   for i in 0..$game_party.actors.size - 1
     @actor_command_windows[i].active = false
     @actor_command_windows[i].visible = false
   end
   #@actor_command_window.active = false
   #@actor_command_window.visible = false
   #fine ccoa
 end
 
 def end_combo_select
   for b in 0...$game_party.actors.size
     $game_party.actors[b].blink = false
   end
   @active_battler.blink = true
   @combo_window.dispose
   @combo_window = nil
   @help_window.visible = false
   #ccoa
   @actor_command_windows[@actor_index].active = true
   @actor_command_windows[@actor_index].visible = true
   #@actor_command_window.active = true
   #@actor_command_window.visible = true
   #fine ccoa
 end

 def make_skill_action_result
   @animate = nil
   @skill = $data_skills[@active_battler.current_action.skill_id]
   for i in 0...$combo_skill.size
     if $combo_skill[i] == @skill.id
       n = i
     end
   end
   if not $combo_skill.include?(@skill.id)
     #ccoa
     if @active_battler.is_a?(Game_Actor)
       if $USING_INDIV_SKILL_ANIM
         @active_battler.set_pose(@active_battler.skill_hash[$data_skills[@active_battler.current_action.skill_id].name], false)
       else # get animation by skill type
         @active_battler.set_pose(@active_battler.skill_type_hash[@active_battler.skill_kind], false)
       end
     else
       @active_battler.set_pose($SKILL, false)
     end
     #fine ccoa
     unless @active_battler.current_action.forcing
       unless @active_battler.skill_can_use?(@skill.id)
         $game_temp.forcing_battler = nil
         @phase4_step = 1
         return
       end
     end
     @active_battler.sp -= @skill.sp_cost
     @status_window.refresh
     #ccoa
     @help_window2.contents_opacity = 0
     @help_window2.y = -200
     $name_help = CCOA_CBS::NAME_SKILL
     @help_window2.set_text(@skill.name, 1)
     #@help_window.set_text(@skill.name, 1)
     #fine ccoa
     @animation1_id = @skill.animation1_id
     @animation2_id = @skill.animation2_id
     @common_event_id = @skill.common_event_id
     set_target_battlers(@skill.scope)
     for target in @target_battlers
       target.skill_effect(@active_battler, @skill)
       #ccoa
       unless target == @active_battler
         reset_pose(target)
       end
       #fine ccoa
     end
   else
     #ccoa
     if n != nil
       for h in 0...$combo_hero[n].size
         if $game_actors[$combo_hero[n][h]] != nil
         if $game_actors[$combo_hero[n][h]].is_a?(Game_Actor)
           if $USING_INDIV_SKILL_ANIM
             $game_actors[$combo_hero[n][h]].set_pose($game_actors[$combo_hero[n][h]].skill_hash[$data_skills[@active_battler.current_action.skill_id].name], false)
           else # get animation by skill type
             $game_actors[$combo_hero[n][h]].set_pose($game_actors[$combo_hero[n][h]].skill_type_hash[$game_actors[$combo_hero[n][h]].skill_kind], false)
           end
           end
         else
           $game_actors[$combo_hero[n][h]].set_pose($SKILL, false) if $game_actors[$combo_hero[n][h]] != nil
         end
       end
     else
       if @active_battler.is_a?(Game_Actor)
         if $USING_INDIV_SKILL_ANIM
           @active_battler.set_pose(@active_battler.skill_hash[$data_skills[@active_battler.current_action.skill_id].name], false)
         else # get animation by skill type
           @active_battler.set_pose(@active_battler.skill_type_hash[@active_battler.skill_kind], false)
         end
       else
         @active_battler.set_pose($SKILL, false)
       end
     end
     #fine ccoa
     unless @active_battler.current_action.forcing
       if n != nil
         v = 0
         for h in 0...$combo_hero[n].size
           if $game_actors[$combo_hero[n][h]] != nil
           if $game_actors[$combo_hero[n][h]].combo_can_use?(@skill.id)
             v +=1
           end
           end
         end
       end
       unless v == $combo_hero[n].size
         $game_temp.forcing_battler = nil
         @phase4_step = 1
         return
       end
     end
     if n != nil
       for h in 0...$combo_hero[n].size
         if $game_actors[$combo_hero[n][h]] != nil
         $game_actors[$combo_hero[n][h]].sp -= $combo_point[n][h]
         @animate = $combo_hero[n]
       end
       end
     end
     @status_window.refresh
     #ccoa
     @help_window2.contents_opacity = 0
     @help_window2.y = -200
     $name_help = CCOA_CBS::NAME_SKILL
     @help_window2.set_text(@skill.name, 1)
     #@help_window.set_text(@skill.name, 1)
     #fine ccoa
     @animation1_id = @skill.animation1_id
     @animation2_id = @skill.animation2_id
     @common_event_id = @skill.common_event_id
     set_target_battlers(@skill.scope)
     for target in @target_battlers
       target.skill_effect(@active_battler, @skill)
       #ccoa
       if n != nil
         for h in 0...$combo_hero[n].size
           if $game_actors[$combo_hero[n][h]] != nil
           unless target == $game_actors[$combo_hero[n][h]]
             reset_pose(target)
           end
           end
         end
       else
         unless target == @active_battler
           reset_pose(target)
         end
       end
       #fine ccoa
     end
   end
 end

 def update_phase4_step3
   if @animate == nil
     if @animation1_id == 0
       @active_battler.white_flash = true
       #ccoa
       if @active_battler.animated
         @wait_count = [@active_battler.attack_frames * 10 - 10, 8].max
       else
         @wait_count = 8
       end
       #fine ccoa
     else
       @active_battler.animation_id = @animation1_id
       @active_battler.animation_hit = true
     end
     #ccoa
     if @active_battler.current_action.kind == 0 and @active_battler.current_action.basic == 0
       @active_battler.set_pose($ATTACK, false)
     end
     #fine ccoa
     @phase4_step = 4
   else
     if @animation1_id == 0
       for b in 0...@animate.size
         $game_actors[@animate[b]].white_flash = true
         #ccoa
         if $game_actors[@animate[b]].animated
           @wait_count = [$game_actors[@animate[b]].attack_frames * 10 - 10, 8].max
         else
           @wait_count = 8
         end
         #fine ccoa
       end
     else
       for b in 0...@animate.size
         $game_actors[@animate[b]].animation_id = @animation1_id
         $game_actors[@animate[b]].animation_hit = true
       end
     end
     #ccoa
     for b in 0...@animate.size
       if $game_actors[@animate[b]].current_action.kind == 0 and $game_actors[@animate[b]].current_action.basic == 0
         $game_actors[@animate[b]].set_pose($ATTACK, false)
       end
     end
     #fine ccoa
     @animate = nil
     @phase4_step = 4
   end
 end
end

class Window_Skill < Window_Selectable
 def refresh
   if self.contents != nil
     self.contents.dispose
     self.contents = nil
   end
   @data = []
   for i in 0...@actor.skills.size
     skill = $data_skills[@actor.skills[i]]
     #ccoa
     if (@skill_kind == -1)
       if skill != nil and not $combo_skill.include?(skill.id)
         @data.push(skill)
       end
     else
       if (skill != nil and skill.element_set.include?(@skill_kind)) and not $combo_skill.include?(skill.id)
         @data.push(skill)
       end
     end
     #if skill != nil and not $combo_skill.include?(skill.id)
     #  @data.push(skill)
     #end
     #fine ccoa
   end
   @item_max = @data.size
   if @item_max > 0
     self.contents = Bitmap.new(width - 32, row_max * 32)
     for i in 0...@item_max
       draw_item(i)
     end
   end
 end
end

#ccoa
class Win_Skill < Window_Selectable
   def refresh
   if self.contents != nil
     self.contents.dispose
     self.contents = nil
   end

   @data = []
   for i in 0...@actor.skills.size
     skill = $data_skills[@actor.skills[i]]
     if (@skill_kind == -1)
       if skill != nil and not $combo_skill.include?(skill.id)
         @data.push(skill)
       end
     else
       if (skill != nil and skill.element_set.include?(@skill_kind)) and not $combo_skill.include?(skill.id)
         @data.push(skill)
       end
     end
   end
   @item_max = @data.size
   if @item_max > 0
     self.contents = Bitmap.new(width - 32, row_max * 32)
     for i in 0...@item_max
       draw_item(i)
     end
   end
 end
end
#fine ccoa

and I would to group these skills in a separate menu if possible, otherwise it will not make them appear in the skill menu.
Spoiler: ShowHide

Scene Skill (Link Tech):

Zexion

Menu's are my specialty, but unfortunately there are a lot of things in this that I simply cannot do. :(
Hopefully someone else can make it, but it's nice to see such a complete and descriptive request! It doesn't happen often.


PrinceEndymion88

August 13, 2013, 01:05:42 pm #3 Last Edit: August 13, 2013, 01:08:21 pm by PrinceEndymion88
I've created my own Scene Equip but I'm not able to change the font of the description of the weapon / armor ... how can I? Or how can I put text on multiple lines? Can anyone help me?
This is my result:

KK20

What class are you using to draw the item description? Window_Help?
Plus, you would probably be better off posting your script so that I don't have to guess.

Blizzard came up with this method called 'slice_text' that you can use for writing multiple lines without having to manually put in the line breaks yourself. You can easily find it via search bar.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Zexion

I'm pretty sure he is using MOG's scene Equip just from the layout I don't know which version he has though because there are several completely different versions :s

PrinceEndymion88

Yes, I've used  MOG_Scene_Equip V1.7! I've only changed the disposition of elements... but I don't know how to make change to the description of the item =(

PrinceEndymion88

Ok i've found it :D I've edited Windows_Help and I've resized the font ^_^ but, How can I split the text on multiple lines? How can I integrate this method of Blizzard: slice_text? Thanks ^^

KK20

Here's my modified version of slice_text. You can put in \n and it will manually make line breaks in addition to the automatic line breaking it already does.
Spoiler: ShowHide

class Bitmap
 
  # Blizzard's slice_text method. This method can be removed if you have another
  # script that already uses it.
  def slice_text(text, width)
    lines = text.split("\n")
    result = []
    lines.each{|text_chunk|
      words = text_chunk.split(' ')
      current_text = words.shift
      if words.empty?
        result.push((current_text == nil ? "" : current_text))
        next
      end
      words.each_index {|i|
        if self.text_size("#{current_text} #{words[i]}").width > width
          result.push(current_text)
          current_text = words[i]
        else
          current_text = "#{current_text} #{words[i]}"
        end
        result.push(current_text) if i >= words.size - 1
      }
    }
    return result
  end
end

And this is an example of how to use it. Don't copy-paste this into your script thinking it will work:

formatted_text = self.bitmap.slice_text(item.description, help_window.width-32)
formatted_text.each_index {|i|
        self.bitmap.draw_text(x, y + i*height, width, height, formatted_text[i], align)
}

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

PrinceEndymion88

Ok but I've to add your script above Main, right? And, Can I use /n into weapon description, for example?

KK20

As long as it's above main. Anything below main won't be loaded into the game until AFTER you exit the game (pointless, right?).
And it's \n, not /n

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

PrinceEndymion88

Yes \n :D I've made a typo, sorry! =) But if I use \n into the description of a weapon, it split the text? 'cause for me doesn't works!

KK20

August 15, 2013, 03:41:22 pm #12 Last Edit: August 15, 2013, 03:44:00 pm by KK20
I guess item descriptions use single quotes instead of double quotes. In that case, you can make the change to the slice_text method by adding another \ to the text.split().
Like so:
lines = text.split("\\n")

But keep using \n in your descriptions.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!