[VXAce] Przerobienie Skryptu - Wersja do druku
Ultima Forum
[VXAce] Przerobienie Skryptu - Wersja do druku

+- Ultima Forum (https://forum.ultimateam.pl)
+-- Dział: RPG Maker (/Forum-RPG-Maker)
+--- Dział: Wsparcie (/Forum-Wsparcie)
+--- Wątek: [VXAce] Przerobienie Skryptu (/Thread-VXAce-Przerobienie-Skryptu--568)



Przerobienie Skryptu - Dragon - 13-08-13 18:42

Witam. Nie znam się na pisaniu skryptów więc zapytam was :) Czy jest ktoś kto podejmie się zadania przerobienia skryptu ? Jeśli tak, czytaj dalej. Chodzi tutaj o to by dodać do "Wymagań" jeszcze jedną małą rzecz :) chciałbym, aby to była zmienna.
Przykład :
zmienna \v[0001] == 1 - Jeśli spełnia to można (teraz uwaga ładne słowo) ekwipować dany przedmiot.

Pozdrawiam Dragon

Spoiler: (Otwórz)



RE: Przerobienie Skryptu - Ayene - 13-08-13 19:14

Nie za bardzo rozumiem. Ekwipować jaki przedmiot? W jaki sposób chcesz przypisać zmienną do przedmiotu? Czy miałaby być dodatkowym warunkiem, czy wyłącznym? Innymi słowy, czy gdy zmienna będzie wynosić 1, to od razu przedmiot można założyć?


RE: Przerobienie Skryptu - Dragon - 13-08-13 19:21

Tak dokładnie ma być to dodatkowy warunek. Zmienna będzie zmieniać swoją wartość więc dobrze by było gdyby warunek przyjmował równe lub większe


RE: Przerobienie Skryptu - Ayene - 13-08-13 20:39

Więc znajdź fragment:
Kod:
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))
i zamień go na:
Kod:
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) && $game_variables[1] >= 1)



RE: Przerobienie Skryptu - Dragon - 14-08-13 08:00

Ok, a jak teraz zdefiniować warunek w przedmiocie ? Jakiś Note ?


RE: Przerobienie Skryptu - Ayene - 14-08-13 10:30

No to właśnie o to pytałam wcześniej. Wyjaśnij dokładnie, co chcesz zrobić z tą zmienną. Po co Ci notatki, co chcesz w nich deklarować?


RE: Przerobienie Skryptu - Dragon - 14-08-13 11:01

Droga koleżanko :) Skrypt polega na tym, że dodaje nam do gry wymagania ekwipowania broni i pancerza, z przedmiotami (item) to nie działa. Definiuje się wszystko w Note przy broni,lub pancerzu :
# 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>

Ja chce by do tych wymagań dodać zmienną, którą również będzie się uwzględniać w note danej broni lub zbroi :) Podchodzimy do NPC on daje nam przedmiot, którego nie możemy ekwpować. Przedmiot ten ma zapisane w Note coś takiego :
<wymagania 1, 0, 0, 0, 0, 0, 0, 1> Gdzie ostatnia cyfra to wartośc zmiennej \v[XXXX]
Po wykonaniu zadania zmienna \v[XXXX] zmienia wartość na 1 i wtedy możemy nosić Broń

Mam nadzieję, że teraz zrozumiałaś :)


RE: Przerobienie Skryptu - Ayene - 14-08-13 11:33

Działanie skryptu rozumiem, bo sama jestem jego autorką wink

Ale teraz sposób konfigurowania, jaki chciałeś mieć, wyjaśniłeś, więc przeróbka będzie prosta.

Zamień cały skrypt na poniższy:

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, VAR>,
# 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)
#   VAR - zmienna (variable)
#
# Przykład:
# Jeśli chcesz, by postać mogła ekwipować broń na poziomie 6, dodatkowo
# pod warunkiem, że ma 40 ataku i 70 obrony oraz że zmienna 1 jest większa od 1
# to w oknie 'Note' tej broni należy wpisać:
# <wymagania 6, 40, 70, 0, 0, 0, 0, 1>
#
# Natomiast, gdy bohater ma mieć tylko odpowiednią zręczność:
# <wymagania 0, 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+), \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..7).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
        @spec_params[7] = $8.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) && (item.spec_params[7] == 0 or $game_variables[item.spec_params[7]] >= 1))
    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  
      contents.clear
      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



RE: Przerobienie Skryptu - Dragon - 14-08-13 12:34

Dziękuję :* idę się bawić w RPG Maker :) Dziękuję koleżanko.