UltimaForum

Skrypty [VX] - Podział przedmiotów w menu

Ozzma - Pią 09 Paź, 2009 13:17
Temat postu: Podział przedmiotów w menu
Cześć ;-)
Tym razem do listy skryptów VX dodam kolejny. Powoduje on podział przedmiotów na; zwykłe, bronie, pancerze i itemki specjalne.

Jeśli chcemy żeby item był specjalny to w Note danego przedmiotu dajemy informację
:arrow: Specjalne.

Print screen:
Spoiler:




Skrypt wklejamy nad main.

Spoiler:

Kod:
module Ozzma
#==============================================================================
# Podział przedmiotów w menu modyfied by Ozzma
#==============================================================================
module Przedmioty
   
    Key_Note    = "Specjalne"
    All_Text    = "Wszystko"
    Item_Text   = "Przedmiot"
    Weapon_Text = "Broń"
    Armor_Text  = "Pancerz"
    Key_Text    = "Specjalne"
   
#------------------------------------------------------------------------
# Po wejściu w przedmioty naciśnij Shift, żeby wybrać grupę.
# Przy przedmiocie, który chcemy uczynić specjalny, dopisujemy w
# notatkach (Note) w bazie danych (Database) słowo - Specjalne
#------------------------------------------------------------------------
   
    All_Desc = "Pokaż wszystko"
    Item_Desc = "Pokaż zwykłe przedmioty"
    Weapon_Desc = "Pokaż broń"
    Armor_Desc = "Pokaż pancerz"
    Key_Desc = "Pokaż przedmioty specjalne"
   
end
end 

class Game_Party < Game_Unit
 
  def items
    result = []
    for i in @items.keys.sort
      item = $data_items[i]
      unless item.note.include?("Specjalne")
        result.push($data_items[i]) if @items[i] > 0
      end 
    end
    for i in @weapons.keys.sort
      result.push($data_weapons[i]) if @weapons[i] > 0
    end
    for i in @armors.keys.sort
      result.push($data_armors[i]) if @armors[i] > 0
    end
    for i in @items.keys.sort
      item = $data_items[i]
      if @items[i] > 0 and item.note.include?("Specjalne")
        result.push($data_items[i])
      end 
    end   
    return result
  end
end

class Game_Temp
 
  alias puppet_item_enhance_initialize initialize
 
  attr_accessor :show_items               
  attr_accessor :show_weapons             
  attr_accessor :show_armors               
  attr_accessor :show_keys               
 
  def initialize
    puppet_item_enhance_initialize         
    @show_items = false                     # true/false
    @show_weapons = false                   # true/false
    @show_armors = false                    # true/false
    @show_keys = false                      # true/false
  end
end

class Window_Item < Window_Selectable
 
  include Ozzma::Przedmioty
 
  alias puppet_enhance_item_include? include? 
 
  def include?(item)
    puppet_enhance_item_include?(item)
    return false if item == nil
    if $game_temp.show_items
     
      return false if item.note.include?(Key_Note)
     
      return false unless item.is_a?(RPG::Item)
    elsif $game_temp.show_weapons
     
      return false unless item.is_a?(RPG::Weapon)
    elsif $game_temp.show_armors
     
      return false unless item.is_a?(RPG::Armor)
    elsif $game_temp.show_keys
     
      return false unless item.note.include?(Key_Note)
    end 
    if $game_temp.in_battle
      return false unless item.is_a?(RPG::Item)
    end
    return true
  end
 
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      number = $game_party.item_number(item)
      enabled = enable?(item)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y, enabled)
      unless item.note.include?("Specjalne")
        self.contents.draw_text(rect, sprintf(":%2d", number), 2)
      end 
    end
  end
end

class Scene_Item < Scene_Base
 
  include Ozzma::Przedmioty
 
  alias puppet_item_enhance_start start
  alias puppet_item_enhance_terminate terminate
  alias puppet_item_enhance_return_scene return_scene
  alias puppet_item_enhance_update update
 
  def start
    puppet_item_enhance_start
    create_filter_window
    @help_window.y = 56
    @item_window.y = 112
    @item_window.height = 304
  end
 
  def terminate
    puppet_item_enhance_terminate
    @filter_window.dispose
  end
 
  def return_scene
    set_filter(0)
    puppet_item_enhance_return_scene
  end 
 
  def update
    puppet_item_enhance_update
    @filter_window.update
    update_input_filter
    update_help_window
  end
 
  def update_input_filter
    if @item_window.active
      if Input.trigger?(Input::A)
        Sound.play_decision
        @item_window.active = false
        @filter_window.active = true
        @item_window.index = 0
      end
    elsif @filter_window.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        @filter_window.active = false         
        @item_window.active = true
      elsif Input.trigger?(Input::C)
        case @filter_window.index
        when 0;  set_filter(0)
        when 1;  set_filter(1)
        when 2;  set_filter(2) 
        when 3;  set_filter(3) 
        when 4;  set_filter(4) 
        end
      end
    end 
  end 
 
  def update_help_window
    if @filter_window.active
      case @filter_window.index
      when 0;  @help_window.set_text(All_Desc, 1)
      when 1;  @help_window.set_text(Item_Desc, 1)
      when 2;  @help_window.set_text(Weapon_Desc, 1)
      when 3;  @help_window.set_text(Armor_Desc, 1)
      when 4;  @help_window.set_text(Key_Desc, 1)
      end
    end 
  end 
 
  def create_filter_window
    s1 = All_Text
    s2 = Item_Text
    s3 = Weapon_Text
    s4 = Armor_Text
    s5 = Key_Text
    @filter_window = Window_Command.new(544, [s1, s2, s3, s4, s5], 5)
    @filter_window.y = 0
    @filter_window.viewport = @viewport
    @filter_window.active = false
    @filter_window.contents.font.size = 18
    @filter_window.draw_item(0, true, 1)
    @filter_window.draw_item(1, true, 1)
    @filter_window.draw_item(2, true, 1)
    @filter_window.draw_item(3, true, 1)
    @filter_window.draw_item(4, true, 1)
  end 
 
  def set_filter(filter = 0)
    Sound.play_decision
    @filter = filter
    if @filter == 1
      $game_temp.show_items = true
    else
      $game_temp.show_items = false
    end
    if @filter == 2
      $game_temp.show_weapons = true
    else 
      $game_temp.show_weapons = false
    end
    if @filter == 3
      $game_temp.show_armors = true
    else 
      $game_temp.show_armors = false
    end
    if @filter == 4
      $game_temp.show_keys = true
    else 
      $game_temp.show_keys = false
    end
    @item_window.refresh
  end 
end

class Window_Command < Window_Selectable
 
  def draw_item(index, enabled = true, align = 0)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    @align = align
    self.contents.clear_rect(rect)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(rect, @commands[index], @align)
  end
end



PS:
Super pomysł z tym tagiem code :jupi:

Agumon - Sob 13 Lut, 2010 13:08

Ej a da się tak żeby jak jest te małe okienko pośrodku to żeby te same było na dole???
Ayene - Sob 13 Lut, 2010 15:13

Jakie okienko pośrodku? Te z napisem 'restores 500 HP...'?
Agumon - Sob 13 Lut, 2010 15:28

No o to tam gdzie są różne te informacje...
Ayene - Sob 13 Lut, 2010 15:35

Precyzuj się dokładnie i nie pisz półsłówkami. Czyli chcesz przesunąć to okno na sam dół tak, a okno z listą przedmiotów podwyższyć?!
Agumon - Sob 13 Lut, 2010 15:41

Chodzi mi o takie coś:
SCREEN
Spoiler:




Ayene - Sob 13 Lut, 2010 15:45

Ale wówczas ten sam tekst będzie się wyświetlał w obu oknach. Przecież to będzie dziwnie wyglądać.
Agumon - Sob 13 Lut, 2010 15:50

A nie dało by się tak żeby w górnym oknie wyświetlał się ten tekst co jest , a w dolnym że SHIFT - zmiana zakładki ENTER/SPACJA - użycie przedmiotu
Ayene - Sob 13 Lut, 2010 16:07

Aha. To teraz rozumiem. Sprawdź czy działa. Podmień na poniższy skrypt:
Spoiler:

Kod:
module Ozzma
#==============================================================================
# Podział przedmiotów w menu modyfied by Ozzma
#==============================================================================
module Przedmioty
   
    Key_Note    = "Specjalne"
    All_Text    = "Wszystko"
    Item_Text   = "Przedmiot"
    Weapon_Text = "Broń"
    Armor_Text  = "Pancerz"
    Key_Text    = "Specjalne"
   
#------------------------------------------------------------------------
# Po wejściu w przedmioty naciśnij Shift, żeby wybrać grupę.
# Przy przedmiocie, który chcemy uczynić specjalny, dopisujemy w
# notatkach (Note) w bazie danych (Database) słowo - Specjalne
#------------------------------------------------------------------------   
    All_Desc = "Pokaż wszystko"
    Item_Desc = "Pokaż zwykłe przedmioty"
    Weapon_Desc = "Pokaż broń"
    Armor_Desc = "Pokaż pancerz"
    Key_Desc = "Pokaż przedmioty specjalne"   
end
end

class Game_Party < Game_Unit
  def items
    result = []
    for i in @items.keys.sort
      item = $data_items[i]
      unless item.note.include?("Specjalne")
        result.push($data_items[i]) if @items[i] > 0
      end
    end
    for i in @weapons.keys.sort
      result.push($data_weapons[i]) if @weapons[i] > 0
    end
    for i in @armors.keys.sort
      result.push($data_armors[i]) if @armors[i] > 0
    end
    for i in @items.keys.sort
      item = $data_items[i]
      if @items[i] > 0 and item.note.include?("Specjalne")
        result.push($data_items[i])
      end
    end   
    return result
  end
end

class Game_Temp
 
  alias puppet_item_enhance_initialize initialize
 
  attr_accessor :show_items               
  attr_accessor :show_weapons             
  attr_accessor :show_armors               
  attr_accessor :show_keys               
 
  def initialize
    puppet_item_enhance_initialize         
    @show_items = false                     # true/false
    @show_weapons = false                   # true/false
    @show_armors = false                    # true/false
    @show_keys = false                      # true/false
  end
end

class Window_Item < Window_Selectable
 
  include Ozzma::Przedmioty
 
  alias puppet_enhance_item_include? include?
 
  def include?(item)
    puppet_enhance_item_include?(item)
    return false if item == nil
    if $game_temp.show_items
     
      return false if item.note.include?(Key_Note)
     
      return false unless item.is_a?(RPG::Item)
    elsif $game_temp.show_weapons
     
      return false unless item.is_a?(RPG::Weapon)
    elsif $game_temp.show_armors
     
      return false unless item.is_a?(RPG::Armor)
    elsif $game_temp.show_keys
     
      return false unless item.note.include?(Key_Note)
    end
    if $game_temp.in_battle
      return false unless item.is_a?(RPG::Item)
    end
    return true
  end
 
  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      number = $game_party.item_number(item)
      enabled = enable?(item)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y, enabled)
      unless item.note.include?("Specjalne")
        self.contents.draw_text(rect, sprintf(":%2d", number), 2)
      end
    end
  end
end

class Scene_Item < Scene_Base
 
  include Ozzma::Przedmioty
 
  alias puppet_item_enhance_start start
  alias puppet_item_enhance_terminate terminate
  alias puppet_item_enhance_return_scene return_scene
  alias puppet_item_enhance_update update
 
  def start
    puppet_item_enhance_start
    create_filter_window
    @info_window = Window_Help.new
    @info_window.y = 360
    @info_window.set_text("SHIFT - zmiana zakładki; ENTER/SPACJA - użycie przedmiotu",1)
    @help_window.y = 56     
    @item_window.y = 112
    @item_window.height = 248
  end
 
  def terminate
    puppet_item_enhance_terminate
    @filter_window.dispose
    @info_window.dispose
  end
 
  def return_scene
    set_filter(0)
    puppet_item_enhance_return_scene
  end
 
  def update
    puppet_item_enhance_update
    @filter_window.update
    @info_window.update
    update_input_filter
    update_help_window
  end
 
  def update_input_filter
    if @item_window.active
      if Input.trigger?(Input::A)
        Sound.play_decision
        @item_window.active = false
        @filter_window.active = true
        @item_window.index = 0
      end
    elsif @filter_window.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        @filter_window.active = false         
        @item_window.active = true
      elsif Input.trigger?(Input::C)
        case @filter_window.index
        when 0;  set_filter(0)
        when 1;  set_filter(1)
        when 2;  set_filter(2)
        when 3;  set_filter(3)
        when 4;  set_filter(4)
        end
      end
    end
  end
 
  def update_help_window
    if @filter_window.active
      case @filter_window.index
      when 0;  @help_window.set_text(All_Desc, 1)
      when 1;  @help_window.set_text(Item_Desc, 1)
      when 2;  @help_window.set_text(Weapon_Desc, 1)
      when 3;  @help_window.set_text(Armor_Desc, 1)
      when 4;  @help_window.set_text(Key_Desc, 1)
      end
    end
  end
 
  def create_filter_window
    s1 = All_Text
    s2 = Item_Text
    s3 = Weapon_Text
    s4 = Armor_Text
    s5 = Key_Text
    @filter_window = Window_Command.new(544, [s1, s2, s3, s4, s5], 5)
    @filter_window.y = 0
    @filter_window.viewport = @viewport
    @filter_window.active = false
    @filter_window.contents.font.size = 18
    @filter_window.draw_item(0, true, 1)
    @filter_window.draw_item(1, true, 1)
    @filter_window.draw_item(2, true, 1)
    @filter_window.draw_item(3, true, 1)
    @filter_window.draw_item(4, true, 1)
  end
 
  def set_filter(filter = 0)
    Sound.play_decision
    @filter = filter
    if @filter == 1
      $game_temp.show_items = true
    else
      $game_temp.show_items = false
    end
    if @filter == 2
      $game_temp.show_weapons = true
    else
      $game_temp.show_weapons = false
    end
    if @filter == 3
      $game_temp.show_armors = true
    else
      $game_temp.show_armors = false
    end
    if @filter == 4
      $game_temp.show_keys = true
    else
      $game_temp.show_keys = false
    end
    @item_window.refresh
  end
end

class Window_Command < Window_Selectable
  def draw_item(index, enabled = true, align = 0)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    @align = align
    self.contents.clear_rect(rect)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    self.contents.draw_text(rect, @commands[index], @align)
  end
end


Agumon - Sob 13 Lut, 2010 16:26

Wszystko działa... Dzięki Ayene ... Jesteś moim "Number One" xD
Dark lordek - Wto 27 Kwi, 2010 16:42

Błąd linijki 201. Wrong number of arguments (3 for 2)
Taki błąd. Czy można by to naprawić? :-x

Ayene - Wto 27 Kwi, 2010 17:39

Ale w jakim skrypcie wyskakuje Tobie błąd, bo przyglądając się temu z tego tematu, nie ma w linijce 201 żadnego odwołania do argumentów klasy. Podaj dokładną treść komunikatu, albo wklej screenshota.
Dark lordek - Czw 29 Kwi, 2010 15:36

Błąd pokazuje się w tym skrypcie. Nie wiem, może ja coś źle zrobiłem. :-/

Poniżej wklejam screen.
Spoiler:



Ayene - Czw 29 Kwi, 2010 17:25

Przede wszystkim widać, że masz polskiego RMVX. Na to wygląda, że program ma problem z argumentami Window_Command. Spróbuj więc fragment:
Kod:
    @filter_window.draw_item(0, true, 1)
    @filter_window.draw_item(1, true, 1)
    @filter_window.draw_item(2, true, 1)
    @filter_window.draw_item(3, true, 1)
    @filter_window.draw_item(4, true, 1)

zamienić na:
Kod:
    @filter_window.draw_item(0, true)
    @filter_window.draw_item(1, true)
    @filter_window.draw_item(2, true)
    @filter_window.draw_item(3, true)
    @filter_window.draw_item(4, true)

Dark lordek - Pią 30 Kwi, 2010 19:11

Wszystko działa, dzięki Ayene. :-D
Valdali - Wto 25 Maj, 2010 14:15

a jak zrobić z tymi specjalnymi przedmiotami bo nie wiem
PaKiTos - Sro 26 Maj, 2010 08:31

A czy ktoś mógłby zrobić, żeby był taki podział:
Wszystko, Leczące, Bronie, Pancerze, Akcesoria, Trofea i Specjalne?

Ayene - Sro 26 Maj, 2010 10:41

cadek, wejdź w bazę danych, zakładka Przedmioty/Items i w okienku Note/Notatka wpisz słowo "Specjalne" dla tego przedmiotu, który ma być specjalny.

PaKiTos, nazwy można zmienić tutaj:
Kod:
 Key_Note    = "Specjalne"
    All_Text    = "Wszystko"
    Item_Text   = "Przedmiot"
    Weapon_Text = "Broń"
    Armor_Text  = "Pancerz"
    Key_Text    = "Specjalne"

Ale z tymi trofeami i akcesoriami, to trzeba by było przerobić skrypt. Tylko że nie zmieściłyby się wszystkie komendy w poziomie, więc kolejna modyfikacja musiałaby dotyczyć zwiększenia wymiarów okna i poprzesuwaniu reszty.

PaKiTos - Sro 26 Maj, 2010 13:06

Bym chciał, żeby się przewijało...
Theron - Wto 11 Paź, 2011 19:11

Mały problem... Czy da się połączyć ten skrypt i skrypt z limitem przedmiotów "Modern Algebry" ( ten z wyrzucaniem i podmienianiem ) i zmianą drużyny prexusa ?
Mi jeśli mam coś w ekwipunku się kłóci z 71 linijką zmiany drużyny prexusa -
" draw_icon(item.icon_index, x, y, enabled) "


Powered by phpBB modified by Przemo © 2003 phpBB Group