Ogłoszenie 

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


Administracja Forum


Poprzedni temat «» Następny temat
Zapamiętywanie ekwipunku
Autor Wiadomość
Angius 

Nie wkurzać



Preferowany:
RPG Maker VX

Pomógł: 104 razy
Dołączył: 30 Paź 2010
Posty: 1276
Skąd: wROCK
Wysłany: Sob 18 Cze, 2011 14:24
Zapamiętywanie ekwipunku
~Zapamiętywanie Ekwipunku~


Opis:
Skrypt pozwala na szybkie zapamiętanie ekwipunku drużyny, usunięcie go, a także późniejsze przywrócenie. Przydatny gdy nasz bohater zostaje uwięziony, odbierają mu broń, złoto, a potem znajduje je w jakiejś skrzyni, czy coś w ten deseń.

Info:
Autor: BigEd781
Tłumaczenie: Angius
Kompatybilność: Niekompatybilne z KGC Large Party przy usuwaniu założonego ekwipunku

Skrypt:
Spoiler:

Kod:

#==============================================================================
# ** Game_Party implementation
#------------------------------------------------------------------------------
#    aliased methods : initialize
#==============================================================================
class Game_Party
  alias :biged_old_init :initialize
  def initialize
    biged_old_init
    @temp_items = {}        # temp items hash
    @temp_weapons = {}      # temp weapons hash
    @temp_armors = {}       # temp armors hash
    @temp_gold = nil        # tymczasowa zmienna złota
  end
  #--------------------------------------------------------------------------
  # * if the player has picked up some items since their's were wiped
  #   and backed up, we need to combine the totals of any common items
  #--------------------------------------------------------------------------
  def merge_like_key_values(dest, src)
    return if dest == {}       
    for key in dest.keys         
      src[key] += dest[key] if src.has_key?(key)       
    end           
  end
  #--------------------------------------------------------------------------
  # * Zrób kopię ekwipunku
  #--------------------------------------------------------------------------
  def backup_items
    @temp_items   = Marshal::load(Marshal::dump(@items))
    @temp_weapons = Marshal::load(Marshal::dump(@weapons))
    @temp_armors  = Marshal::load(Marshal::dump(@armors))
  end
  #--------------------------------------------------------------------------
  # * Wyczyść ekwipunek gracza
  #--------------------------------------------------------------------------
  def clear_items
    @items.clear
    @weapons.clear
    @armors.clear
  end
  #--------------------------------------------------------------------------
  # * Przywróć ekwipunek jeśli została zrobiona kopia
  #--------------------------------------------------------------------------
  def restore_items
    unless @temp_items == {}
      merge_like_key_values(@items, @temp_items)
      @items = @items.merge(@temp_items)
    end
    unless @temp_weapons == {}
      merge_like_key_values(@weapons, @temp_weapons)
      @weapons = @weapons.merge(@temp_weapons)
    end
    unless @temp_armors == {} 
      merge_like_key_values(@armors, @temp_armors)
      @armors = @armors.merge(@temp_armors)
    end
    @temp_items = @temp_weapons = @temp_armors = {}
  end 
  #--------------------------------------------------------------------------
  # * Zrób kopię całego ekwipunku drużyny
  #--------------------------------------------------------------------------
  def backup_all_equips
    for i in @actors
      $game_actors[i].backup_equips
    end
  end
  #--------------------------------------------------------------------------
  # * Usuń cały ekwipunek drużyny
  #   EKWIPUNEK ZOSTANIE USUNIĘTY NA ZAWSZE
  #   JEŚLI NAJPIERW NIE ZROBISZ KOPII!
  #--------------------------------------------------------------------------
  def unequip_all
    for i in @actors
      $game_actors[i].clear_equips
    end
  end
  #--------------------------------------------------------------------------
  # * Przywróć cały ekwipunek drużyny
  #--------------------------------------------------------------------------
  def restore_all_equips
    for i in @actors
      $game_actors[i].restore_equips
    end
  end
  #--------------------------------------------------------------------------
  # * Zrób kopię posiadanego złota
  #--------------------------------------------------------------------------
  def backup_gold
    @temp_gold = @gold 
  end
  #--------------------------------------------------------------------------
  # * Usuń złoto gracza
  #--------------------------------------------------------------------------
  def clear_gold
    @gold = 0
  end
  #--------------------------------------------------------------------------
  # * Przywróć kopię złota jeśli ta istnieje
  #--------------------------------------------------------------------------
  def restore_gold
    unless @temp_gold == nil
      @gold += @temp_gold
      @temp_gold = nil
    end
  end
 
end
#==============================================================================
# ** Game_Actor implementation
#------------------------------------------------------------------------------
#    aliased methods : initialize
#==============================================================================
class Game_Actor < Game_Battler
  alias :biged_old_init :initialize
  def initialize(actor_id)
    biged_old_init(actor_id) 
    @temp_weapons = []  #Tymczasowe przechowywanie broni
    @temp_armors = []   #Tymczasowe przechowywanie pancerza
  end
  #--------------------------------------------------------------------------
  # * Zrób kopię założonych przedmiotów
  #--------------------------------------------------------------------------
  def backup_equips   
    @temp_weapons = weapons
    @temp_armors = armors     
  end
  #--------------------------------------------------------------------------
  # * Przywróć założone przedmioty jeśli istnieje kopia
  #--------------------------------------------------------------------------
  def restore_equips
    #zdejmij założony ekwipunek i umieść go w plecaku
    unless @temp_weapons == [] && @temp_armors == []  #Nie ma kopii zapasowej
      for i in 0...5 do
        change_equip(i, nil)
      end
    end
    #-------------------------------------------------------------#
    #               Jakieś wyjasnienia techniczne
    #-------------------------------------------------------------#
    #we check each one individually here because if any slot      # 
    #is set to nil, a default value is used (not nil).  This      #
    #default value does actually correspond to an item, and we    #
    #don't want that, so we check.                                #
    #-------------------------------------------------------------#
    #the incrementor is there because the armor array size will be#
    #different depending on whether the player is using 2 swords  #
    #-------------------------------------------------------------#
    @weapon_id = @temp_weapons[0].id if @temp_weapons[0] != nil   
    if two_swords_style
      @armor1_id = @temp_weapons[1].id if @temp_weapons[1] != nil     
      i = 0
    else
      @armor1_id = @temp_armors[0].id if @temp_armors[0] != nil   
      i = 1
    end
    @armor2_id = @temp_armors[i].id if @temp_armors[i] != nil
    @armor3_id = @temp_armors[i+1].id if @temp_armors[i+1] != nil
    @armor4_id = @temp_armors[i+2].id if @temp_armors[i+2] != nil
    @temp_weapons = @temp_armors = []   
  end
  #--------------------------------------------------------------------------
  # * Clear the currently equipped item set.
  #   THIS DOES NOT PLACE THE ITEMS IN INVENTORY!
  #   THEY WILL BE GONE FOREVER UNLESS YOU MAKE A BACKUP FIRST!
  #-------------------------------------------------------------------------- 
  def clear_equips
    @weapon_id = 0
    @armor1_id = 0
    @armor2_id = 0
    @armor3_id = 0
    @armor4_id = 0
  end
end



Instrukcje (nieprzetłumaczone)
________________________
"Na trolla pewne są tylko dwie pewne metody, jedna samopowtarzalna i druga, wymagająca przeładowania ręcznego."


 
 
bartek2940 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 10 Kwi 2010
Posty: 88
Wysłany: Sob 18 Cze, 2011 19:22
Ciekawy skrypt, można go użyć.
Przykład dałeś rodem z "Fable". :mrgreen:
________________________
Obecny projekt - Chwilowo brak
 
 
 
MrDawnok 




Preferowany:
RPG Maker VX

Pomógł: 1 raz
Dołączył: 22 Maj 2010
Posty: 217
Wysłany: Nie 19 Cze, 2011 09:50
W wiedźminie też był taki motyw :)
Super skrypt napewno się przyda 6/6
________________________



http://www.forumgalonum.pun.pl/viewtopic.php?id=5

"Bliski przyjaciel, czy to nie właściwe określenie dla kogoś, kto już przestał być bliski?"
 
 
 
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