Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Wymagania broni i pancerza VX
Autor Wiadomość
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Czw 27 Sty, 2011 10:43
Wymagania broni i pancerza VX
~ Wymagania broni i pancerza VX ~

Krótki opis
Skrypt umożliwia ustawienie wymagań dla broni i pancerza. Na przykład ekwipowanie bohatera w topór dwuręczny byłoby możliwe dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej statystyki.

04.03.2012 r.
Dodano opcję, dzięki której można wprowadzić wymóg posiadania odpowiedniej umiejętności.

Zalecane dokładne testy.

Autor skryptu
Ayene [yurika@o2.pl]

Kompatybilność
Tylko VX

Skrypt
Spoiler:

Kod:
#===================================================================
# Wymagania broni i pancerza [VX] / Equipment Requirements [VX]
# by Ayene
# 27.01.2010 ver 1.2
# 04.03.2012 - dodano wymóg posiadania odpowiedniej umiejętności
# 10.08.2012 - poprawiono zmianę ekwipunku w Scene_Equip
# www.ultimateam.pl
#===================================================================
# Opis:
# Skrypt umożliwia ustawienie wymagań dla broni i pancerza.
# Na przykład ekwipowanie bohatera w topór dwuręczny byłoby możliwe
# dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej
# statystyki. Ponadto dodano opcję, dzięki której można wprowadzić wymóg
# posiadania odpowiedniej umiejętności.
#
# Instrukcja:
# By skorzystać ze skryptu w oknie 'Note' przy danym elemencie ekwipunku
# w Bazie Danych umieść tekst <wymagania LV, MAXHP, MAXMP, ATK, DEF, SPI, AGI>,
# gdzie:
# LV - wymagany poziom postaci
# MAXHP - maksymalne HP (max HP)
# MAXMP - maksymalne MP (max MP)
# ATK - atak (attack)
# DEF - obrona (defence)
# SPI - wola (spirit)
# AGI - zręczność/zwinność (agility)
#
# Przykładowo:
# Jeśli chcesz, by postać mogła ekwipować broń na poziomie 6, dodatkowo
# pod warunkiem, że ma 120 max. HP, 40 ataku i 70 obrony
# to w oknie 'Note' tej broni należy wpisać:
# <wymagania 6, 120, 0, 40, 70, 0, 0>
#
# Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
# <wymagania 0, 0, 0, 0, 0, 0, 50>
#
# Aby dodać wymóg posiadania umiejętności, wystarczy w oknie notek wpisać:
# <umiejetnosc_wymagana ID, ID, ...>
# gdzie ID to id umiejętności w Bazie Danych
#===================================================================
module AYENE
  module ItemSpec
    ITEM_SPEC = /<(?:WYMAGANIA|wymagania)\s*(\d+)\s*, \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+)>/i
    WEAPON_TEXT = "By założyć tę broń musisz mieć:"
    ARMOR_TEXT = "By założyć ten pancerz musisz mieć:"     
    ACC_TEXT = "By założyć ten przedmiot musisz mieć:"
    PARAM_NAMES = ["Poziom", "Żywotność", "Mana", "Atak", "Obrona", "Wola", "Zwinność", "Umiejętności:"]   
    SKILL_SPEC = /<(?:UMIEJETNOSC_WYMAGANA|umiejetnosc_wymagana)[ ]*(\d+(?:[ ]*,[ ]*\d+)*)>/i
    SHOW_SKILL_REC = true  # Czy wyświetlać, jakiej umiejętności brakuje?
  end
end

#===================================================================
# RPG::BaseItem
#===================================================================
class RPG::BaseItem
  attr_accessor :spec_params   
  def item_spec_ini
    @spec_params = {}
    (0..6).each{|i| @spec_params[i] = 0}
    @spec_params[7] = []
    self.note.split(/[\r\n]+/).each { |line|
      case line
      when AYENE::ItemSpec::ITEM_SPEC
        @spec_params[0] = $1.to_i
        @spec_params[1] = $2.to_i
        @spec_params[2] = $3.to_i
        @spec_params[3] = $4.to_i
        @spec_params[4] = $5.to_i
        @spec_params[5] = $6.to_i
        @spec_params[6] = $7.to_i
      end
    }
    self.note.split(/[\r\n]+/).each { |line|
      case line
      when AYENE::ItemSpec::SKILL_SPEC
        $1.scan(/\d+/).each { |num|
          skill_id = num.to_i
          @spec_params[7].push(skill_id) if $data_skills[skill_id] != nil
        }
      end
    }
  end
end

#===================================================================
# RPG::Weapon
#===================================================================
class RPG::Weapon < RPG::BaseItem
  def spec_text
    return AYENE::ItemSpec::WEAPON_TEXT
  end
end

#===================================================================
# RPG::Armor
#===================================================================
class RPG::Armor < RPG::BaseItem
  def spec_text
    case kind
    when 3
      return AYENE::ItemSpec::ACC_TEXT
    else
      return AYENE::ItemSpec::ARMOR_TEXT
    end   
  end
end

#===================================================================
# Game_Actor
#===================================================================
class Game_Actor < Game_Battler
  def equip_allowed?(item)
    return true if (item.spec_params[0] <= level && item.spec_params[1] <= base_maxhp &&
          item.spec_params[2] <= base_maxmp && item.spec_params[3] <= base_atk &&
          item.spec_params[4] <= base_def && item.spec_params[5] <= base_spi &&
          item.spec_params[6] <= base_agi) && equip_skill_allowed?(item)
    return false
  end
 
  def equip_skill_allowed?(item)   
    item.spec_params[7].each{|skill_id|
      return false if !skill_learn?($data_skills[skill_id])   
    }
    return true 
  end 
end

#===================================================================
# Game_Interpreter
#===================================================================
class Game_Interpreter
   
  def check_change_equip(actor)
    for i in 0..4
      item = actor.equips[i]
      actor.change_equip(i, nil) if !item.nil? && !actor.equip_allowed?(item)
    end
  end
 
  alias aye_command_315 command_315
  def command_315
    aye_command_315
    iterate_actor_id(@params[0]) do |actor|
      check_change_equip(actor)   
    end   
  end

  alias aye_command_316 command_316
  def command_316
    aye_command_316
    iterate_actor_id(@params[0]) do |actor|
      check_change_equip(actor)   
    end
  end   

  alias aye_command_317 command_317
  def command_317
    aye_command_317
    iterate_actor_id(@params[0]) do |actor|
      check_change_equip(actor)   
    end
  end
end

#===================================================================
# Window_Help
#===================================================================
class Window_Equip_Help < Window_Base
  def initialize(item, data, actor, skill)   
    if skill.empty? or !AYENE::ItemSpec::SHOW_SKILL_REC
      height = (data.size+1) / 2 * WLH + WLH + 32
    else
      height = (data.size+1) / 2 * WLH + WLH + 32 + WLH * [skill.size, 7].min
    end     
    super(42, 180 - height/2, 460, height)
    self.back_opacity = 255
    self.contents.font.color = crisis_color
    self.contents.draw_text(4, 0, self.width - 40, WLH, item.spec_text, 1)
    x = 10
    y = WLH   
    data.each_with_index{|array, i|   
      self.contents.font.color = system_color
      self.contents.draw_text(x+i%2*240, y+i/2*WLH, 200, WLH, AYENE::ItemSpec::PARAM_NAMES[array[0]].to_s, 0)     
      self.contents.font.color = normal_color
      self.contents.draw_text(x+120+i%2*240, y+i/2*WLH, 40, WLH, array[1].to_s, 2)
    }
    if !skill.empty? and AYENE::ItemSpec::SHOW_SKILL_REC
      size = (data.size+1)/2*WLH
      self.contents.font.color = system_color
      self.contents.draw_text(x, y+size, 200, WLH, AYENE::ItemSpec::PARAM_NAMES[7].to_s, 0)   
      self.contents.font.color = normal_color
      skill.each_with_index{|id, i|     
        self.contents.draw_text(x+140, y+size+WLH*i, 200, WLH, "- #{$data_skills[id].name}", 0)       
      }
    end
  end
end

#===================================================================
# Window_EquipItem
#===================================================================
class Window_EquipItem < Window_Item
  def enable?(item)
    return @actor.equip_allowed?(item)
  end
end

#===================================================================
# Scene_Title
#===================================================================
class Scene_Title < Scene_Base 
  alias aye_sctit_loaddata load_database
  def load_database
    aye_sctit_loaddata
    for group in [$data_weapons, $data_armors]
      for obj in group
        next if obj.nil?
        obj.item_spec_ini
      end
    end
  end 
end

#===================================================================
# Scene_Equip
#===================================================================
class Scene_Equip < Scene_Base
  alias aye_itspec_sceq_update update
 
  def update       
    if @spec_window != nil
      update_spec_selection
    else
      aye_itspec_sceq_update
    end     
  end
 
  def update_item_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @equip_window.active = true
      @item_window.active = false
      @item_window.index = -1
    elsif Input.trigger?(Input::C)   
      @item = @item_window.item
      if @item != nil and !@actor.equip_allowed?(@item)
        Sound.play_buzzer 
        @item_window.active = false     
        show_spec_window           
      else     
        Sound.play_equip
        @actor.change_equip(@equip_window.index, @item_window.item)
        for i in 0..4
          item = @actor.equips[i]
          @actor.change_equip(i, nil) if !item.nil? && !@actor.equip_allowed?(item)
        end
        @equip_window.active = true
        @item_window.active = false
        @item_window.index = -1
        @equip_window.refresh
        for item_window in @item_windows
          item_window.refresh
        end
      end     
    end
  end
 
  def update_spec_selection
    @frame < 200 ? @frame += 1 : @frame = 0
    if @frame == 200 or Input.trigger?(Input::C) or Input.trigger?(Input::B)
      @spec_window.dispose
      @spec_window = nil     
      @item_window.active = true     
    end
  end
 
  def show_spec_window
    @frame = 0
    data = []
    @item.spec_params.each {|type, value|           
      data.push([type, value]) if value > 0 if type < 7   
    }
    data.sort!{|a,b| a[0] <=> b[0]}   
    skill = @item.spec_params[7]   
    @spec_window = Window_Equip_Help.new(@item, data, @actor, skill)       
  end
end


Demo
niepotrzebne

Screenshot
Spoiler:


Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
2. Reszta instrukcji znajduje się w treści skryptu.

Piszcie w razie problemów.
________________________


 
 
 
MrBoomGood 




Preferowany:
RPG Maker VX

Pomógł: 3 razy
Dołączył: 07 Kwi 2011
Posty: 292
Skąd: Katowice
Wysłany: Pon 02 Maj, 2011 22:16
Super skrypt! Tego szukałem, i w końcu znalazłem! Wielki dzięki, jesteś wielka!!!
 
 
 
pokecath 




Preferowany:
RPG Maker VX

Pomógł: 6 razy
Dołączył: 07 Mar 2011
Posty: 103
Wysłany: Wto 03 Maj, 2011 11:00
Wielkie dzięki! :mrgreen:
________________________
Nazwa:Ostatni Czarny Mag : Pradawna Kopalnia
Fabuła:70%
Questy:0%
Mapy:0,99%
Itemy:0,6%
Skrypty:100%
Muzyka:30%
Reszta:0,04
Ogólnie mało.
 
 
Tony 




Preferowany:
RPG Maker VX

Dołączył: 18 Maj 2011
Posty: 38
Wysłany: Sro 18 Maj, 2011 18:32
Dobre
 
 
DeathFuj 



Preferowany:
RPG Maker VX

Dołączył: 07 Sie 2011
Posty: 12
  Wysłany: Pią 09 Wrz, 2011 17:01
Działa
Działa wszysztko jest ;)[/scroll]
 
 
Narfann 



Preferowany:
RPG Maker VX

Dołączył: 20 Kwi 2010
Posty: 20
Wysłany: Pon 24 Paź, 2011 19:23
Wszystko jest ok, ale jest mały problemik, jeśli np. nasz gracz ma zręczność 51 ( a wymagania są 50) po czym po przez zdarzenie zmienimy jego zręczność na 49 to broń nadal jest zdolna do użytku...
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Sro 26 Paź, 2011 12:11
Skrypt jedynie blokuje ekwipowanie. W przypadku, który opisujesz wystarczy sprawdzić, czy gracz spełnia wymagania i ewentualnie ściągnąć mu ekwipunek. Dodaj na końcu skryptu ten fragment:
Spoiler:

Kod:
#===================================================================
# Game_Interpreter
#===================================================================
class Game_Interpreter 
  def check_change_equip(actor)
    for equip in actor.equips
      unless equip.nil?
        if equip.spec_level > actor.level or
          equip.spec_atk > actor.atk or equip.spec_def > actor.def or
          equip.spec_spi > actor.spi or equip.spec_agi > actor.agi
          case equip
          when RPG::Weapon
            actor.change_equip(0, nil)
          when RPG::Armor
            actor.change_equip(equip.kind+1, nil)             
          end             
        end     
      end 
    end
  end

  alias aye_command_315 command_315
  def command_315
    aye_command_315
    iterate_actor_id(@params[0]) do |actor|     
      check_change_equip(actor)           
    end
  end

  alias aye_command_316 command_316
  def command_316
    aye_command_316
    iterate_actor_id(@params[0]) do |actor|     
      check_change_equip(actor)           
    end
  end   

  alias aye_command_317 command_317
  def command_317
    aye_command_317
    actor = $game_actors[@params[0]]
    if actor != nil
      check_change_equip(actor) 
    end   
  end
end


Zalecane testy. Nie wiem, czy przewidziałam wszelkie zmiany parametrów. Pozdrawiam.
________________________


 
 
 
AvenCrazy 




Preferowany:
RPG Maker VX

Dołączył: 27 Lip 2011
Posty: 6
Wysłany: Pią 28 Paź, 2011 15:53
Świetny skrypt, ale dodałbym taki bajer, że od razu pokazuje, jakie statystyki są wymagane do itemka. ;-)
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Pią 28 Paź, 2011 17:37
A jakieś sugestie, gdzie miałoby się coś takiego wyświetlać? :aww:
________________________


 
 
 
tracersgta 




Preferowany:
RPG Maker VX

Pomógł: 45 razy
Dołączył: 10 Sty 2011
Posty: 612
Skąd: mam wiedzieć?
Wysłany: Pią 28 Paź, 2011 17:40
@AvenCrazy Możesz to po prostu napisać w opisie przedmiotu... Np. Długi żelazny miecz. Wymaga 20 siły i 10 zwinności. ;-)
________________________
I'm a tiger! I roar. I hunt, I climb, I eat, I wash, I sleep!

Gość, jeżeli pomogłem daj "Pomógł" ;-)
 
 
 
AvenCrazy 




Preferowany:
RPG Maker VX

Dołączył: 27 Lip 2011
Posty: 6
Wysłany: Pią 28 Paź, 2011 23:26
Ayene, wraz z komunikatem, który się wyświetla, mogłoby to wygląda w ten sposób - "Nie potrafisz jeszcze korzystać z tej broni, brakuje ci x siły i y zręczności". Coś w ten deseń ;)

tracersgta, fakt, pomyślałem o tym, ale zdaje mi się, że im dłuższy jest opis, tym jest mniej estetyczny.
 
 
doa1996 



Preferowany:
RPG Maker VX

Dołączył: 23 Lis 2011
Posty: 7
Wysłany: Pią 25 Lis, 2011 11:12
Fajny skrypt :D Działa mi w 100%
 
 
 
przemusiek25 



Pomógł: 21 razy
Dołączył: 26 Sty 2012
Posty: 84
Wysłany: Nie 05 Lut, 2012 14:29
a można by tak dodać do skryptu ograniczenie względem Max HP i Max MP?
 
 
przemusiek25 



Pomógł: 21 razy
Dołączył: 26 Sty 2012
Posty: 84
Wysłany: Wto 07 Lut, 2012 10:05
Jako iż nie pomogłaś mi Ayene, wykorzystałem swoją początkową wiedzę z tworzenia skryptów. I sam dodałem sobie wymagania.
Chyba nie masz nic przeciwko, dla zainteresowanych skrypt:
Spoiler:

Kod:
#===================================================================
# Wymagania broni i pancerza [VX]
# by Ayene
# Dodatkowo wymagania HP i MP by Przemusiek25
# 27.01.2010 ver 1.0
# www.ultimateam.pl
#===================================================================
# Opis:
# Skrypt umożliwia ustawienie wymagań dla broni i pancerza.
# Na przykład ekwipowanie bohatera w topór dwuręczny byłoby możliwe
# dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej
# statystyki.
#
# Instrukcja:
# By skorzystać ze skryptu w oknie 'Note' przy danym elemencie ekwipunku
# w Bazie Danych umieść tekst <wymagania LV, ATK, DEF, SPI, AGI, MAXHP, MAXMP>,
# gdzie:
# LV - wymagany poziom postaci
# ATK - atak (attack)
# DEF - obrona (defence)
# SPI - wola (spirit)
# AGI - zręczność/zwinność (agility)
# MAXHP - maksymalne HP (max. HP)
# MAXMP - maksymalne MP (max. MP)
#
# Przykładowo:
# Jeśli chcesz, by postać mogła ekwipować broń na poziomie 6, dodatkowo
# pod warunkiem, że ma 40 ataku i 70 obrony, oraz 60 Maksymalnego HP
# to w oknie 'Note' tej broni należy wpisać:
# <wymagania 6, 40, 70, 0, 0, 60, 0>
#
# Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
# <wymagania 0, 0, 0, 0, 50, 0, 0>
#===================================================================
module AYENE
  module ItemSpec
    ITEM_SPEC = /<(?:WYMAGANIA|wymagania)\s*(\d+)\s*, \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+), \s*(\d+)>/i
    WEAPON_TEXT = "Nie potrafisz jeszcze korzystać z tej broni."
    ARMOR_TEXT = "Nie potrafisz jeszcze nosić tego pancerza."     
  end
end

#===================================================================
# RPG::BaseItem
#===================================================================
class RPG::BaseItem
  def item_spec_ini
    @spec_level = 0
    @spec_atk = 0
    @spec_def = 0
    @spec_spi = 0
    @spec_agi = 0
    @spec_maxhp = 0
    @spec_maxmp = 0
    self.note.split(/[\r\n]+/).each { |line|
      case line
      when AYENE::ItemSpec::ITEM_SPEC       
        @spec_level = $1.to_i
        @spec_atk = $2.to_i
        @spec_def = $3.to_i
        @spec_spi = $4.to_i
        @spec_agi = $5.to_i
        @spec_maxhp = $6.to_i
        @spec_maxmp = $7.to_i
      end
    }
  end   
  def spec_level
    item_spec_ini if @spec_level == nil
    return @spec_level
  end 
  def spec_atk
    item_spec_ini if @spec_atk == nil
    return @spec_atk
  end
  def spec_def
    item_spec_ini if @spec_def == nil
    return @spec_def
  end
  def spec_spi
    item_spec_ini if @spec_spi == nil
    return @spec_spi
  end
  def spec_agi
    item_spec_ini if @spec_agi == nil
    return @spec_agi
  end
  def spec_maxhp
    item_spec_ini if @spec_maxhp == nil
    return @spec_maxhp
  end
  def spec_maxmp
    item_spec_ini if @spec_maxmp == nil
    return @spec_maxmp
  end
end

#===================================================================
# RPG::Weapon
#===================================================================
class RPG::Weapon < RPG::BaseItem
  def spec_text
    return AYENE::ItemSpec::WEAPON_TEXT
  end
end

#===================================================================
# RPG::Armor
#===================================================================
class RPG::Armor < RPG::BaseItem
  def spec_text
    return AYENE::ItemSpec::ARMOR_TEXT
  end
end

#===================================================================
# Scene_Equip
#===================================================================
class Scene_Equip < Scene_Base
  alias aye_itspec_sceq_start start
  alias aye_itspec_sceq_ter terminate
  alias aye_itspec_sceq_update update
 
  def start
    aye_itspec_sceq_start
    @frame = 0   
    @spec_window = Window_Help.new(22,180,500) 
    @spec_window.active = false
    @spec_window.visible = false
  end
 
  def terminate
    aye_itspec_sceq_ter
    @spec_window.dispose
  end
 
  def update     
    @spec_window.update
    if @spec_window.active
      update_spec_selection   
    end   
    aye_itspec_sceq_update
  end 
 
  def update_item_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @equip_window.active = true
      @item_window.active = false
      @item_window.index = -1
    elsif Input.trigger?(Input::C)     
      @item = @item_window.item
      if @item != nil and !(@item.spec_level <= @actor.level and
        @item.spec_atk <= @actor.atk and @item.spec_def <= @actor.def and
        @item.spec_spi <= @actor.spi and @item.spec_agi <= @actor.agi and
        @item.spec_maxhp <= @actor.maxhp and @item.spec_maxmp <= @actor.maxmp)
        Sound.play_buzzer               
        @spec_window.set_text(@item.spec_text, 1)
        @spec_window.visible = true
        @spec_window.active = true       
        @item_window.active = false       
      else     
        Sound.play_equip
        @actor.change_equip(@equip_window.index, @item_window.item)
        @equip_window.active = true
        @item_window.active = false
        @item_window.index = -1
        @equip_window.refresh
        for item_window in @item_windows
          item_window.refresh
        end
      end     
    end
  end
 
  def update_spec_selection 
    @frame < 50 ? @frame += 1 : @frame = 0
    if @frame == 50
      @spec_window.visible = false
      @item_window.active = true
      @spec_window.active = false     
    end
  end
end

#===================================================================
# Window_Help
#===================================================================
class Window_Help < Window_Base
  def initialize(x=0, y=0, w=544, h=WLH + 32)
    super(x, y, w, h)
  end
end



[ Komentarz dodany przez: Ayene: Wto 07 Lut, 2012 10:52 ]
Brawa :klaszcze:
 
 
Weeto 



Dołączył: 08 Maj 2010
Posty: 26
Wysłany: Sob 03 Mar, 2012 11:03
Dało by się zmienić ten skrypt tak aby nałożyć broń trzeba mieć odpowiednie umiejętności
np. Długi żelazny miecz : wymagania Broń dwuręczna II ?
________________________
http://www.taern.pl/user/Morfek/
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene