Wymagania broni i pancerza
Aktualny czas: 20-06-25, 18:43 Witaj! Przejdź do zakładki Logowanie lub Rejestracja


Odpowiedz 
[VXAce] Wymagania broni i pancerza
Crashykk Offline
*


Liczba postów: 368
Dołączył: 30-04-13

Pomógł: 36



Post: #1
Wymagania broni i pancerza

~ Wymagania broni i pancerza [VXAce] ~


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.

Autor:
Ayene [yurika@o2.pl]

Kompatybilność:
RPG Maker VX Ace

Skrypt:
Spoiler: (Otwórz)
Screeny:
Dodatkowe informacje:
Instrukcja:
By skorzystać ze skryptu w oknie 'Note' przy danym elemencie ekwipunku w Bazie Danych umieść tekst:
<wymagania LV, ATK, DEF, SPI, MDEF, AGI, LUCK>

gdzie:
LV - wymagany poziom postaci (level)
ATK - atak (attack)
DEF - obrona (defence)
SPI - wola (spirit)
MDEF - obrona magiczna (magical defence)
AGI - zręczność/zwinność (agility)
LUCK - szczęście (luck)

Przykład:
Jeśli chcesz, by postać mogła ekwipować broń na poziomie 6, dodatkowo pod warunkiem, że ma 40 ataku i 70 obrony, to w oknie 'Note' tej broni należy wpisać:
<wymagania 6, 40, 70, 0, 0, 0, 0>
Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
<wymagania 0, 0, 0, 0, 0, 50, 0>

[Obrazek: oe6WuyS.png]
https://crashykk.itch.io/dunsas-prophecy
(Ten post był ostatnio modyfikowany: 02-05-13 15:22 przez Crashykk.)
02-05-13 15:22
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
MrQubo Offline
*


Liczba postów: 20
Dołączył: 27-07-13

Pomógł: 0



Post: #2
RE: Wymagania broni i pancerza

Dałoby się wyświetlić ile brakuje poszczególnych statów, aby móc założyć/użyć daną rzecz?

Aktualny projekt: Twierdza
28-07-13 00:04
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
Ayene Offline
*


Liczba postów: 758
Dołączył: 09-04-13

Pomógł: 112



Post: #3
RE: Wymagania broni i pancerza

Wersja 2.0 skryptu, dostosowana podobnie jak wersje na XP i VX. Zalecane dokładne testy:
#===================================================================
# Wymagania broni i pancerza [VXAce]
# by Ayene
# 08.01.2012 ver 2.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, MDEF, AGI, LUCK>,
# gdzie:
#   LV - wymagany poziom postaci (level)
#   ATK - atak (attack)
#   DEF - obrona (defence)
#   SPI - wola (spirit)
#   MDEF - obrona magiczna (magical defence)
#   AGI - zręczność/zwinność (agility)
#   LUCK - szczęście (luck)
#
# Przykład:
# Jeśli chcesz, by postać mogła ekwipować broń na poziomie 6, dodatkowo
# pod warunkiem, że ma 40 ataku i 70 obrony, to w oknie 'Note' tej broni
# należy wpisać:
# <wymagania 6, 40, 70, 0, 0, 0, 0>
#
# Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
# <wymagania 0, 0, 0, 0, 0, 50, 0>
#
# 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

module DataManager  
  #--------------------------------------------------------------------------
  # alias method: load_database
  #--------------------------------------------------------------------------
  class << DataManager
    alias aye_dataman_loaddata load_database
  end
  def self.load_database
    aye_dataman_loaddata
    for group in [$data_weapons, $data_armors]
      for obj in group
        next if obj.nil?
        obj.item_spec_ini
      end
    end
  end  
end

#===================================================================
# RPG::BaseItem
#===================================================================
class RPG::EquipItem < 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::EquipItem
  def spec_text
    return AYENE::ItemSpec::WEAPON_TEXT
  end
end

#===================================================================
# RPG::Armor
#===================================================================
class RPG::Armor < RPG::EquipItem
  def spec_text
    case etype_id
    when 4
      return AYENE::ItemSpec::ACC_TEXT
    else
      return AYENE::ItemSpec::ARMOR_TEXT
    end    
  end
end

#===================================================================
# Game_Actor
#===================================================================
class Game_Actor < Game_Battler
  
  def optimize_equipments
    clear_equipments
    equip_slots.size.times do |i|
      next if !equip_change_ok?(i)      
      items = $game_party.equip_items.select do |item|        
        item.etype_id == equip_slots[i] &&
        equippable?(item) && item.performance >= 0 &&
        equip_allowed?(item)
      end        
      change_equip(i, items.max_by {|item| item.performance})
    end
  end
  
  def equip_allowed?(item)
    item.spec_params[7].each{|skill_id|
      return false if !@skills.include?(skill_id)}
    return true if (item.spec_params[0] <= level && item.spec_params[1] <= param(2) &&
          item.spec_params[2] <= param(3) && item.spec_params[3] <= param(4) &&
          item.spec_params[4] <= param(5) && item.spec_params[5] <= param(6) &&
          item.spec_params[6] <= param(7))  
    return false
  end  
end

#===================================================================
# Game_Interpreter
#===================================================================
class Game_Interpreter
    
  def check_change_equip(actor)
    actor.equips.each_with_index do |item, 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_var(@params[0], @params[1]) do |actor|    
      check_change_equip(actor)          
    end    
  end

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

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

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

#===================================================================
# Scene_Equip
#===================================================================
class Scene_Equip < Scene_MenuBase
  alias aye_itspec_sceq_start start
  alias aye_itspec_sceq_ter terminate
  alias aye_itspec_sceq_update update

  def start    
    @frame = 0  
    @spec_window = Window_Equip_Help.new
    @spec_window.deactivate
    @spec_window.hide
    aye_itspec_sceq_start
  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 on_item_ok
    item = @item_window.item
    if item != nil and !@actor.equip_allowed?(item)
      Sound.play_buzzer
      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.set_stats(item, data, @actor, skill)
      @spec_window.show
      @spec_window.activate    
      @item_window.deactivate      
    else  
      Sound.play_equip
      @actor.change_equip(@slot_window.index, item)
      @slot_window.activate
      @slot_window.refresh
      @item_window.unselect
      @item_window.refresh
    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)
      @frame = 0
      @spec_window.hide
      @item_window.activate
      @spec_window.deactivate
    end
  end
end

[Obrazek: aye_furniture_pres.png]
28-07-13 13:51
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
MrQubo Offline
*


Liczba postów: 20
Dołączył: 27-07-13

Pomógł: 0



Post: #4
RE: Wymagania broni i pancerza

Nowy skrypcik u mnie w ogóle nie działa. :-/

Aktualny projekt: Twierdza
28-07-13 14:35
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
Ayene Offline
*


Liczba postów: 758
Dołączył: 09-04-13

Pomógł: 112



Post: #5
RE: Wymagania broni i pancerza

A prawidłowo go konfigurujesz?

[Obrazek: aye_furniture_pres.png]
28-07-13 16:24
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
MrQubo Offline
*


Liczba postów: 20
Dołączył: 27-07-13

Pomógł: 0



Post: #6
RE: Wymagania broni i pancerza

Raczej tak wpisuję w notatkach w Bazie Danych np. <wymagania 2, 50, 50, 50, 50, 50, 50> lub <wymagania 1, 0, 0, 0, 0, 0, 0> i nie działa, przedmioty mogę normalnie używać, bronie zakładać. Nie wyświetlają się żadne okna związane ze skryptem.

Aktualny projekt: Twierdza
29-07-13 14:57
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
Ayene Offline
*


Liczba postów: 758
Dołączył: 09-04-13

Pomógł: 112



Post: #7
RE: Wymagania broni i pancerza

Ten skrypt blokuje jedynie ekwipowanie broni i pancerza, a nie używanie przedmiotów. Patrząc na demko, które mi przesłałeś miałeś w bazie danych wpisane
<wymagania LV, ATK, DEF, SPI, MDEF, AGI, LUCK>
a nie wartości:
<wymagania 2, 50, 50, 50, 50, 50, 50>
jeśli wpiszesz te drugie w notatki Topora i po wejściu w grę, zdejmiesz broń Erykowi, po czym będziesz chciał znowu ekwipować, wyskoczy informacja o tym, że nie spełniasz wymagań.

[Obrazek: aye_furniture_pres.png]
29-07-13 15:44
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
X-Tech Offline


Liczba postów: 876
Dołączył: 03-05-13

Pomógł: 23



Post: #8
RE: Wymagania broni i pancerza

NA TO JEST niepotrzebny skrypt ruby. Wystarczy usuwać z ekwipunku broń kiedy spełnia te warunki jako typowy event, ale spoko xd
(Ten post był ostatnio modyfikowany: 29-07-13 15:50 przez X-Tech.)
29-07-13 15:50
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
Ayene Offline
*


Liczba postów: 758
Dołączył: 09-04-13

Pomógł: 112



Post: #9
RE: Wymagania broni i pancerza

Nie, bo event zadziała dopiero po ekwipowaniu broni, a zadaniem tego skryptu jest właśnie do tego nie dopuścić. Ponadto event nie wykaże Tobie w przystępny sposób jakich statystyk i ewentualnie jakiej umiejętności potrzebujesz, aby władać bronią lub nosić pancerz.

[Obrazek: aye_furniture_pres.png]
29-07-13 15:54
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
X-Tech Offline


Liczba postów: 876
Dołączył: 03-05-13

Pomógł: 23



Post: #10
RE: Wymagania broni i pancerza

TAK.


Gdyby stworzyć własne menu to no problemo - na podstawowym można też inaczej ekwipowanie broni można zrobić jako common event i tam uniemożliwiać ekwipunek odpowiednika przy odpowiednich statsach i wyświetlić dane oczywiście kupowało by się common eventy, a nie broń do ekwipowania common by ekwipował bądź nie - tę umieszczał by common.

W zasadzie wszystko się da obejść. Można np: uniemożliwić w ogóle gromadzenie broni/kupienie jeśli nie ma się odpowiedniego lvl i tak dalej i tak dalej. Co kto lubi.
(Ten post był ostatnio modyfikowany: 29-07-13 16:01 przez X-Tech.)
29-07-13 15:59
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
"Pomógł" przyznał(a):
Odpowiedz 


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości

Kontakt | Ultima Forum | Wróć do góry | Wróć do forów | Wersja bez grafiki | RSS
Powered By MyBB. © 2013 MyBB Group. All Rights Reserved.
Skórka by Ayene.