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 XP
Autor Wiadomość
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Pią 26 Mar, 2010 18:28
Wymagania broni i pancerza XP
~ Wymagania broni i pancerza XP ~

Krótki opis
Wielokrotnie na forum pojawiały się prośby o skrypt, który umożliwiałby ustawienie wymagań dla broni i pancerza, przykładowo ekwipowanie bohatera w topór dwuręczny byłoby możliwe dopiero po osiągnięciu konkretnego poziomu lub posiadaniu odpowiedniej siły. Otóż po wielu próbach i podejściach wreszcie udało mi się coś takiego zrobić. Mam nadzieję, że skrypt będzie działał bez zarzutów.

Zalecane dokładne testy kompatybilności z innymi (niż domyślny) systemami walki.

Autor skryptu
Ayene [yurika@o2.pl]

Kompatybilność
Tylko XP

Skrypt
Spoiler:

Kod:
#===================================================================
# Wymagania broni i pancerza [XP]
# by Ayene
# 26.03.2010 ver 1.3
# 04.03.2012 - dodano wymóg posiadania 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 należy skonfigurować wymagania (osobno dla każdej
# broni i pancerza) poniżej, zgodnie ze wzorem:
#
# WEAPON [ID broni] = [lv, maxhp, maxsp, str, dex, agi, int, [skill_id, skill_id, ...]]
#
# gdzie:
# LV - wymagany poziom postaci
# MAXHP - maksymalne HP (max HP)
# MAXMP - maksymalne MP (max MP)
# STR - siła (strength)
# DEX - zręczność (dexterity)
# AGI - szybkość (agility)
# INT - inteligencja (intelligence)
# SKILL_ID - ID umiejętności
#
# Przykładowo:
# Jeśli chcesz, by postać mogła ekwipować broń ID 2 na poziomie 6, dodatkowo
# pod warunkiem, że ma 120 max. HP, 40 siły i 70 inteligencji
# poniżej w sekcji BRONIE wpisz:
# WEAPON [2] = [6, 120, 0, 40, 0, 0, 70, []]
#
# Natomiast, aby założyć pancerz ID 3, który "wymaga" odpowiedniej zręczności
# i znajomości umiejętności o ID 10 i 40:
# ARMOR [3] = [0, 0, 0, 0, 70, 0, 0, [10, 40]]
#
#===================================================================

# KONFIGURACJA
module AYENE
  module EQUIP_REQ
   
   WEAPON = []
   ARMOR = []

# ~~~~~~~~~~~~~~~~~BRONIE~~~~~~~~~~~~~~~~
 
  # WEAPON [ID broni] = [lv, maxhp, maxsp, str, dex, agi, int, [skill_id, skill_id, ...]]
   
  WEAPON[1] = [1, 0, 0, 10, 0, 0, 0, []]   
  WEAPON[3] = [3, 500, 20, 0, 0, 0, 0, []]
   
# ~~~~~~~~~~~~~~~~PANCERZE~~~~~~~~~~~~~~~~
   
  # ARMOR [ID pancerza] = [lv, maxhp, maxsp, str, dex, agi, int, [skill_id, skill_id, ...]]
   
  ARMOR[1] = [0, 0, 10, 0, 0, 0, 0, [1, 2]]
  ARMOR[2] = [0, 0, 0, 10, 0, 0, 0, []]
  ARMOR[3] = [3, 400, 0, 0, 0, 0, 0, []]
     
  ACC_TEXT = "By założyć ten przedmiot musisz mieć:"
  PARAM_NAMES = ["Poziom", "Żywotność", "Moc", "Siła", "Zręczność", "Szybkość", "Inteligencja", "Umiejętności:"]   
 
  SHOW_SKILL_REQ = true  # Czy wyświetlać, jakiej umiejętności brakuje?
 
  WLH = 32
  end
end

#===================================================================
# Game_Actor
#===================================================================
class Game_Actor < Game_Battler
  include AYENE::EQUIP_REQ
  #--------------------------------------------------------------------------
  # * Determine if Item can be Equiped (Actor's Parameters)
  #     stat    : stats
  #--------------------------------------------------------------------------
  def equip_allowed?(stat)
    return true if stat[0] <= level && stat[1] <= base_maxhp &&
          stat[2] <= base_maxsp && stat[3] <= base_str &&
          stat[4] <= base_dex && stat[5] <= base_agi &&
          stat[6] <= base_int && equip_skill_allowed?(stat)
    return false
  end
  #--------------------------------------------------------------------------
  # * Determine if Item can be Equiped (Actor's Skills )
  #     stat    : stats
  #--------------------------------------------------------------------------
  def equip_skill_allowed?(stat)   
    return true if stat[7].empty?
    stat[7].each{|skill_id|
      return false if !skill_learn?(skill_id)   
    }
    return true
  end   
  #--------------------------------------------------------------------------
  # * Check Change Equip
  #--------------------------------------------------------------------------
  def check_change_equip
    for i in 0..4
      case i
      when 0
        item = $data_weapons[@weapon_id]
        stat = WEAPON[item.id]
        if !stat.nil? && !equip_allowed?(stat)
          $game_party.gain_weapon(@weapon_id, 1)
          @weapon_id = 0       
        end
      when 1
        item = $data_armors[@armor1_id]
        stat = ARMOR[item.id]
        if !stat.nil? && !equip_allowed?(stat)
          $game_party.gain_armor(@armor1_id, 1)
          @armor1_id = 0       
        end
      when 2
        item = $data_armors[@armor2_id]
        stat = ARMOR[item.id]
        if !stat.nil? && !equip_allowed?(stat)
          $game_party.gain_armor(@armor2_id, 1)
          @armor2_id = 0       
        end
      when 3
        item = $data_armors[@armor3_id]
        stat = ARMOR[item.id]
        if !stat.nil? && !equip_allowed?(stat)
          $game_party.gain_armor(@armor3_id, 1)
          @armor3_id = 0       
        end
      when 4
        item = $data_armors[@armor4_id]
        stat = ARMOR[item.id]
        if !stat.nil? && !equip_allowed?(stat)
          $game_party.gain_armor(@armor4_id, 1)
          @armor4_id = 0       
        end
      end   
    end
  end 
end

#===================================================================
# Window_Help
#===================================================================
class Window_EquipReq < Window_Base
  include AYENE::EQUIP_REQ
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     item       : item
  #     data       : parameters (array)
  #     actor      : actor
  #     skill      : skill
  #--------------------------------------------------------------------------
  def initialize(item, data, actor, skill)   
    if skill.empty? or !SHOW_SKILL_REQ
      height = (data.size+1) / 2 * WLH + WLH + 32
    else
      height = (data.size+1) / 2 * WLH + WLH + 32 + WLH * [skill.size, 7].min
    end     
    super(100, 200 - height/2, 460, height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.z = 1000
    self.opacity = 255
    self.contents.font.color = crisis_color
    self.contents.draw_text(4, 0, self.width - 40, WLH, ACC_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, 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 SHOW_SKILL_REQ
      size = (data.size+1)/2*WLH
      self.contents.font.color = system_color
      self.contents.draw_text(x, y+size, 200, WLH, 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
 
#===================================================================
# Scene_Equip
#===================================================================
class Scene_Equip
  include AYENE::EQUIP_REQ
  #--------------------------------------------------------------------------
  # * Aliased Definitions
  #--------------------------------------------------------------------------
  alias ayene_item_stats_sceq_update update
  alias ayene_item_stats_sceq_update_item update_item
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update   
    @req_window != nil ? update_spec_selection : ayene_item_stats_sceq_update
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when item window is active)
  #--------------------------------------------------------------------------
  def update_item
    @stat = nil
    item = @item_window.item
    case item
    when RPG::Weapon
      @stat = WEAPON[item.id]
    else
      @stat = ARMOR[item.id]
    end
    unless @stat == nil
      if Input.trigger?(Input::C) && !@actor.equip_allowed?(@stat)
        $game_system.se_play($data_system.buzzer_se)       
        @item_window.active = false
        show_spec_window   
        return
      end
    end
    ayene_item_stats_sceq_update_item 
    check_change_equip if Input.trigger?(Input::C)
  end
  #--------------------------------------------------------------------------
  # * Check Change Equip
  #--------------------------------------------------------------------------
  def check_change_equip
    @actor.check_change_equip
    @right_window.refresh
    @item_window1.refresh
    @item_window2.refresh
    @item_window3.refresh
    @item_window4.refresh
    @item_window5.refresh
  end 
  #--------------------------------------------------------------------------
  # * Frame Update (when requirements window is active)
  #--------------------------------------------------------------------------
  def update_spec_selection
    @frame < 100 ? @frame += 1 : @frame = 0
    if @frame == 100 or Input.trigger?(Input::C) or Input.trigger?(Input::B)
      @req_window.dispose
      @req_window = nil     
      @item_window.active = true
    end
  end
  #--------------------------------------------------------------------------
  # * Show Requirements Window
  #--------------------------------------------------------------------------
  def show_spec_window
    @frame = 0
    data = []
    @stat.each_with_index {|value, type|
      data.push([type, value]) if value > 0 if type < 7   
    }   
    data.sort!{|a,b| a[0] <=> b[0]}   
    skill = @stat[7]
    @req_window = Window_EquipReq.new(@item, data, @actor, skill)       
  end
end

#===================================================================
# Game_Interpreter
#===================================================================
class Interpreter
  include AYENE::EQUIP_REQ
  #--------------------------------------------------------------------------
  # * Aliased Definitions
  #--------------------------------------------------------------------------
  alias aye_command_315 command_315
  alias aye_command_316 command_316
  alias aye_command_317 command_317
  alias aye_command_318 command_318
  #--------------------------------------------------------------------------
  # * Change EXP
  #--------------------------------------------------------------------------
  def command_315
    aye_command_315
    iterate_actor(@parameters[0]) do |actor|
      check_change_equip(actor)   
    end   
  end
  #--------------------------------------------------------------------------
  # * Change Level
  #--------------------------------------------------------------------------
  def command_316
    aye_command_316
    iterate_actor(@parameters[0]) do |actor|
      check_change_equip(actor)   
    end
  end
  #--------------------------------------------------------------------------
  # * Change Parameters
  #--------------------------------------------------------------------------
  def command_317
    aye_command_317
    iterate_actor(@parameters[0]) do |actor|
      check_change_equip(actor)   
    end
  end
  #--------------------------------------------------------------------------
  # * Change Skills
  #--------------------------------------------------------------------------
  def command_318
    aye_command_318
    iterate_actor(@parameters[0]) do |actor|
      check_change_equip(actor)   
    end
  end
  #--------------------------------------------------------------------------
  # * Check Equipment
  #     actor       : actor
  #--------------------------------------------------------------------------
  def check_change_equip(actor)   
    for i in 0..4
      case i
      when 0
        item = $data_weapons[actor.weapon_id]
        stat = WEAPON[item.id]
      when 1
        item = $data_armors[actor.armor1_id]
        stat = ARMOR[item.id]
      when 2
        item = $data_armors[actor.armor2_id]
        stat = ARMOR[item.id]
      when 3
        item = $data_armors[actor.armor3_id]
        stat = ARMOR[item.id]
      when 4
        item = $data_armors[actor.armor4_id]
        stat = ARMOR[item.id]
      end
      actor.equip(i, 0) if !stat.nil? && !actor.equip_allowed?(stat)
    end
  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.
________________________


 
 
 
dominikos 




Preferowany:
RPG Maker XP

Dołączył: 15 Lut 2010
Posty: 24
Wysłany: Nie 28 Mar, 2010 18:17
Mogłabyś zamieścić to w demie?

[ Dodano: Czw 01 Kwi, 2010 08:51 ]
Mogłabyś zamieścić to w demie? Bo jak włączam ekwipunek to wyskakuje błąd a pisze tam : ?????????????????????
________________________
(\_/)
(o.o)
(><)
 
 
maksymilian 



Preferowany:
RPG Maker XP

Dołączył: 05 Kwi 2010
Posty: 1
Wysłany: Pon 05 Kwi, 2010 19:02
fajny skrypcik właśnie gre MMORPG robie i wszelka pomoc mi się przyda :oops:
________________________
właśnie tworze gre MMORPG z kumplem premiera gry 2010
 
 
Sabikku 




Nagrody:
UF i UFT2 Winner

Ranga RM:
4 gry

Pomógł: 73 razy
Dołączył: 04 Kwi 2010
Posty: 428
Wysłany: Pon 05 Kwi, 2010 19:16
Cytat:
Mogłabyś zamieścić to w demie? Bo jak włączam ekwipunek to wyskakuje błąd a pisze tam : ?????????????????????

Najpewniej korzystasz z dziurawej polskiej wersji, która ma problemy z niektórymi skryptami.
 
 
 
RtaMag2 




Preferowany:
RPG Maker XP

Dołączył: 11 Lut 2010
Posty: 137
Skąd: Piechy
Wysłany: Pon 05 Kwi, 2010 21:43
Ja mam tą polską i mi działa niewiem co uwas takiego jest :shock:
________________________

 
 
 
Bezel 




Dołączył: 08 Lis 2009
Posty: 84
Wysłany: Sob 10 Kwi, 2010 13:52
możliwe że nie współgra ze skryptem albo musisz jeszcze raz pobrać rm (zdarza się)
________________________
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Sob 10 Kwi, 2010 14:03
Skrypt działa w polskiej wersji bez zarzutów. Najwyraźniej ponownie pojawił się problem kompatybilności. Należałoby przejrzeć wszystkie skrypty i sprawdzić, które z nich ingerują w Scene_Equip w trzy najważniejsze definicje: main, update i update_item. Można również spróbować przesunąć po prostu skrypt tak, aby był najbliżej Main (pod innymi dodatkowymi skryptami).
Jest tylko jeden malutki błąd, jeśli ktoś chce użyć skryptu w polskiej wersji RM. Nie wyświetla się napis informujący o tym, że nie można jeszcze używać przedmiotu.
Aby to zmienić należy odnaleźć linijkę:
Kod:
self.contents = Bitmap.new(width - 32, height - 32)

i po niej dodać:
Kod:
self.contents.font.name = $defaultfonttype
    self.contents.font.size = $defaultfontsize


Wszystko powinno działać.
________________________


 
 
 
Bezel 




Dołączył: 08 Lis 2009
Posty: 84
Wysłany: Wto 13 Kwi, 2010 14:01
łapcie demo uwielbiam wam je dawać ^^ http://www.mediafire.com/?zjfjmmdyldj
________________________
 
 
poko67 




Preferowany:
RPG Maker VX

Pomógł: 6 razy
Dołączył: 21 Lis 2009
Posty: 141
Wysłany: Pią 09 Lip, 2010 08:48
A ja uwiebiam je brać... :faja:

[ Dodano: Pią 09 Lip, 2010 09:51 ]
ej pisze ze plik skasowany...
 
 
sitax5 



Preferowany:
RPG Maker VX

Dołączył: 08 Cze 2010
Posty: 32
Wysłany: Sro 11 Sie, 2010 15:13
a mogłabyś taki zrobić do VX bo się na niego przerzuciłem.
________________________
Kliknij albo giń!!!
http://www.glitery.pl/polecam,sitax5
 
 
cj2 




Preferowany:
RPG Maker VXAce

Ranga RM:
1 gra

Pomógł: 6 razy
Dołączył: 07 Mar 2010
Posty: 261
Skąd: Gliwice
Wysłany: Pon 23 Sie, 2010 19:40
@up
http://www.ultimateam.pl/viewtopic.php?t=4566
________________________
Porady dla twórców gier
Nie ma śniegu, a zgubiłem normalny avatar :I
 
 
Nikoś 



Preferowany:
RPG Maker XP

Dołączył: 22 Kwi 2010
Posty: 28
Wysłany: Sob 04 Wrz, 2010 09:52
Pobierz wszystkie biblioteki i wgraj do C:\Windows\System32\

Powinno zadziałać :p
 
 
sebastiankuklicz 



Preferowany:
RPG Maker VX

Dołączył: 18 Paź 2010
Posty: 1
Skąd: Czarna Bialostocka
Wysłany: Wto 16 Lis, 2010 15:16
Hej mam prośbe bo jak czsytam to co piszesz to za ch^j niewiem oco kaman mugłbyś zrobic by było napisane konkretnie gdzie co bo nieczaje gdzie kody wpisywac co to module te by broni wymóg zrobic plisss!!!!!!!!!!
________________________
:)
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Wto 16 Lis, 2010 19:16
Faktycznie do d^py taka robota, że musisz się k^wa głowić nad jakimś skryptem. "Mugłbym" zrobić by było konkretnie napisane, choć wystarczy postępować zgodnie ze wzorem:
Kod:
# ~~~~~~~~~~~~~~~~~BRONIE~~~~~~~~~~~~~~~~
 
  # WEAPON [ID broni] = [lv, str, dex, agi, int]
   
  WEAPON[2] = [2, 0, 0, 0, 0]   
  WEAPON[3] = [3, 0, 0, 0, 0]     
   
# ~~~~~~~~~~~~~~~~PANCERZE~~~~~~~~~~~~~~~~
   # ARMOR [ID pancerza] = [lv, str, dex, agi, int]   

   
  ARMOR[2] = [1, 0, 0, 0, 0]
  ARMOR[3] = [3, 0, 0, 0, 0]


Schemat na przykładzie:
Kod:
ARMOR[2] = [1, 0, 0, 0, 0]

Gdzie [2] to id pancerza
[1, 0, 0, 0, 0] to kolejno wymagane parametry [lv, str, dex, agi, int]

Mam nadzieję, że teraz wiesz o co kaman.
________________________


 
 
 
rpgmigara 



Preferowany:
RPG Maker XP

Dołączył: 23 Gru 2010
Posty: 39
Wysłany: Pią 14 Sty, 2011 13:22
Nie wiem jak to obsłużyć ;D??
________________________
Tworze gre potrzbuje pomocy przy skryptach .
 
 
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