Ogłoszenie 

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


Administracja Forum


Poprzedni temat «» Następny temat
Przesunięty przez: Ayene
Nie 08 Sty, 2012 21:27
Wymagania broni i pancerza [VXAce]
Autor Wiadomość
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Nie 08 Sty, 2012 21:19
Wymagania broni i pancerza [VXAce]
~ 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:

Kod:
#===================================================================
# Wymagania broni i pancerza [VXAce]
# by Ayene
# 08.01.2012 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, 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>
#===================================================================
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." 
    ACC_TEXT = "Nie możesz jeszcze nosić tego przedmiotu."
  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}
    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
    }
  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

#===================================================================
# 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_Help2.new(22,180,500)
    @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
      @spec_window.set_text(item.spec_text)
      @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 < 50 ? @frame += 1 : @frame = 0
    if @frame == 50
      @spec_window.hide
      @item_window.activate
      @spec_window.deactivate
    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)
    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

#===================================================================
# Window_Help
#===================================================================
class Window_Help2 < Window_Help
  def initialize(x, y, width)
    super(1)
    self.x = x
    self.y = y
    self.z = 1000
    self.width = width
    create_contents
  end
 
  def set_text(text)
    if text != @text
      draw_text(0, 0, contents_width, contents_height, text, 1)
      @text = text     
    end
  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


Screeny:
Spoiler:



Dodatkowe informacje:
Instrukcja:
By skorzystać ze skryptu w oknie 'Note' przy danym elemencie ekwipunku w Bazie Danych umieść tekst:
Kod:
<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ć:
Kod:
<wymagania 6, 40, 70, 0, 0, 0, 0>

Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
Kod:
<wymagania 0, 0, 0, 0, 0, 50, 0>
________________________


 
 
 
tracersgta 




Preferowany:
RPG Maker VX

Pomógł: 45 razy
Dołączył: 10 Sty 2011
Posty: 612
Skąd: mam wiedzieć?
Wysłany: Pon 09 Sty, 2012 12:48
No i pierwszy skrypt(na dodatek twój Ayene)...
________________________
I'm a tiger! I roar. I hunt, I climb, I eat, I wash, I sleep!

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




Preferowany:
RPG Maker XP

Pomógł: 1 raz
Dołączył: 07 Sty 2012
Posty: 46
Skąd: Polska
Wysłany: Pon 09 Sty, 2012 13:46
Podobne rozwiązanie zastosowałem już w przygotowaniach do pracy nad grą "Miasteczko Nowoczesne 5". Tu dam fragment wymagań broni. Skrypty są z zewnętrznych plików, które jako jedyne nie są kompresowane do RGSSAD, gdyż nie mogłem znaleźć skryptu, który by to obsłużył.

Kod:
$data_weapons[id].min_level = 1
  $data_weapons[id].min_hp = 0
  $data_weapons[id].min_sp = 0
  $data_weapons[id].min_str = 0
  $data_weapons[id].min_dex = 0
  $data_weapons[id].min_agi = 0
  $data_weapons[id].min_int = 0
  $data_weapons[id].need_abilities[10] = 0

I dla formalności fragment kodu klasy odpowiadający za rozpoznanie tego miejsca:
Kod:
@need_abilities = {}
  @min_level = 0
  @min_hp = 0
  @min_sp = 0
  @min_str = 0
  @min_dex = 0
  @min_agi = 0
  @min_int = 0
________________________
Ryzykując, że zrobisz super gniota, możesz zrobić super hit lub super gniota.
 
 
 
Squall 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 20 Lip 2009
Posty: 107
Skąd: Ogród Balamb :P
Wysłany: Pon 09 Sty, 2012 19:52
Świetny skrypt - jest taki na vx? albo czy da się przerobić go na vx?
________________________

 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Pon 09 Sty, 2012 19:54
Jest :aww: i od prawie roku widnieje na forum ;-) http://www.ultimateam.pl/viewtopic.php?t=5915
________________________


 
 
 
Kiti1000 



Preferowany:
RPG Maker VXAce

Dołączyła: 04 Gru 2010
Posty: 17
Wysłany: Sob 14 Sty, 2012 21:18
Fajny skrypcik ;)
________________________
W trakcie produkcji gry ,,Kalie'' ;]
 
 
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