UltimaForum

Skrypty [XP] - Produkcja Przedmiotów

Czeliosss - Sob 16 Sty, 2010 22:46
Temat postu: Produkcja Przedmiotów
Witam. Znalazłem ten skrypt na internecie. Polega on na tworzeniu nowych broni mikstur itp.
Screen:
Spoiler:


Skrypt:
Spoiler:

Kod:
#====================================================
# ** System Tworzenia Przedmiotów
#    wersja: 1.00
#    autor: arev (rmxp.pl)
#    wydany: 28-12-2009
#=========================================================
# Instalacja i kompatybilność:
#
# Skopiuj ten skrypt i wklej w nowej zakładce nad 'Main' w swoim projekcie.
# Niniejszy skrypt jest kompatybilny z podstawowym systemem RMXP..
# Skrypt nie nadpisuje żadnych metod ani klas, więc powinien również
# współpracować z innymi skryptami.
#
#
#
# Używanie:
#
# Pod tym wstępem znajdziesz tablicę RECIPES.
# Nowe przepisy dodaje się kolejnymi tablicami jak na przykładzie:
# ['i12', 'i78', 'w3', 'a45', 'a45', 'z', 'i-99']
# i oznacza przedmioty, w - bronie, a - zbroje.
# Zgodnie z przykładowym przepisem - by zrobić przedmiot o ID 99 potrzeba
# jednego przedmiotu o ID 12, jednego przedmiotu o ID 78, jednej broni o ID 3,
# dwóch zbroi o ID 45. Maksymalna ilość składników to 6.
# Jeśli chcesz dodać receptę z mniejszej ilość składników, po prostu uzupełnij
# pozostałe pola znakami 'z' (w cudzysłowiu).
# Ostatni element tablicy to rezultat całej recepty. Pierwszy znak działa jak
# poprzednio, następnie konieczny jest myślnik, a dalej ID przedmiotu,
# który tworzymy.
#
# Aby wejść do ekranu tworzenia przedmiotów wywołaj skrypt:
# $scene = Scene_Craft.new
#
# Kolejność składników podczas tworzenia przedmiotu nie ma znaczenia,
# skrypt sam zajmuje się ich sortowaniem.
#
#
#
# Licencja:
#
# Możesz dowolnie używać tego skryptu w swoin niekomercyjnych projektach.
# Możesz rozpowszechniać ten skrypt (bez pobierania opłat), o ile dołączysz
# informację nt. oryginalnego autora.
# Jeśli chcesz wykorzystać skrypt do celów komercyjnych skontaktuj się ze mną
# za pośrednictwem systemu wiadomości forum www.rmxp.pl lub www.hbgames.org/forums.
#=========================================================

RECIPES = [
          ["i1", "i1", "i2", "z", "z", "z", "i-3"],
          ["i3", "i3", "i3", "i3", "i1", "i2", "i-5"],
          ["i34", "i34" , "i34", "i37","z", "z", "i-20"]
          ]
#------------------------------------------------------------------------------
class Window_Craft_Components < Window_Selectable
 
  attr_accessor :data
 
  def initialize
    super(0, 64, 320, 224)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.index = 0
    self.active = true
    @data = [nil, nil, nil, nil, nil, nil]
    @item_max = 6
    refresh
  end
 
  def item
    return @data[self.index]
  end
 
  def refresh
    self.contents.clear
    for i in 0..5
      x = 0
      y = i * 32
      if @data[i] != nil
        item = @data[i]
        bitmap = RPG::Cache.icon(item.icon_name)
        self.contents.blt(4 + x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 32, y, 160, 32, item.name, 0)
      else
        self.contents.font.color = disabled_color
        self.contents.draw_text(4 + x, y, 160, 32, "Puste", 0)
      end
    end
  end
 
  def update_cursor_rect
    self.cursor_rect.set(0, self.index * 32, 288, 32)
  end
 
  def nullify
    @data = [nil, nil, nil, nil, nil, nil]
  end
 
  def transmutation
    temp = []
    for i in 0..5
      if @data[i] == nil
        temp << "0"
      else
        case @data[i]
        when RPG::Item
          temp << "i" + @data[i].id
        when RPG::Weapon
          temp << "w" + @data[i].id
        when RPG::Armor
          temp << "a" + @data[i].id
        end
      end
    end
    temp = temp.sort
    return temp
  end
 
end
#------------------------------------------------------------------------------
class Window_Craft_Result < Window_Base
 
  attr_accessor :item
 
  def initialize
    super(320,64,320,224)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
    @item_code = ""
    refresh
  end
 
  def refresh
    self.contents.clear
    if @item == nil
      self.contents.font.color = normal_color
      self.contents.draw_text(4,0,288,32, "Wybierz składniki.", 0)
    else
      bitmap = RPG::Cache.icon(@item.icon_name)
      self.contents.font.color = text_color(3)
      self.contents.draw_text(4,0,288,32, "Grauluje!", 0)
      self.contents.blt(4, 65, bitmap, Rect.new(0, 0, 24, 24))
      self.contents.font.color = normal_color
      self.contents.draw_text(32, 65, 288, 32, @item.name, 0)
      self.contents.font.color = disabled_color
      self.contents.draw_text(4,128,288,32, "Aby utworzyć przedmiot naciśnij 'Z'", 0)
      self.contents.draw_text(4,160,288,32, "proces tworzenia!", 0)
    end
  end
 
  def make_item(text="")
    @item_code = text
    if @item_code.include?("-")
      temp = @item_code.split("-")
      @item = (temp[0] == "i" ? $data_items : "w" ? $data_weapons : $data_armors)[temp[1].to_i]
      refresh
    end
  end
 
  def nullify
    @item = nil
    refresh
  end
 
end
#------------------------------------------------------------------------------
class Window_Craft_Item < Window_Selectable

  def initialize
    super(0, 288, 640, 192)
    @column_max = 2
    refresh
    self.active = false
    self.index = -1
  end

  def item
    return @data[self.index]
  end

  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items[i])
      end
    end
    unless $game_temp.in_battle
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0
          @data.push($data_weapons[i])
        end
      end
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0
          @data.push($data_armors[i])
        end
      end
    end
    @data.push(nil)
    @item_max = @data.size
    self.contents = Bitmap.new(width - 32, row_max * 32)
    for i in 0...@item_max-1
      draw_item(i)
    end
  end

  def draw_item(index)
    item = @data[index]
    x = 4 + index % @column_max * 320
    y = index / @column_max * 32
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end

  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end

  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
      return
    end
    row = @index / @column_max
    if row < self.top_row
      self.top_row = row
    end
    if row > self.top_row + (self.page_row_max - 1)
      self.top_row = row - (self.page_row_max - 1)
    end
    x = index % @column_max * 320
    y = index / @column_max * 32 - self.oy
    self.cursor_rect.set(x, y, 288, 32)
  end
 
end
#------------------------------------------------------------------------------
class Scene_Craft
 
  def main
    @components = Window_Craft_Components.new
    @result = Window_Craft_Result.new
    @item_window = Window_Craft_Item.new
    @help_window = Window_Help.new
    @help_window.set_text("Tworzenie Przedmiotów", 1)
    Graphics.transition
    loop do
      Input.update
      Graphics.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @components.dispose
    @result.dispose
    @item_window.dispose
    @help_window.dispose
  end
 
  def update
    @item_window.update
    @components.update   
    if @components.active
      update_comp
      return
    end
    if @item_window.active
      update_item
      return
    end
  end
 
  def update_comp
    if Input.trigger?(Input::A)
      rock_baby
      return
    end
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @components.active = false
      @item_window.active = true
      @item_window.index = 0
    end
    if Input.trigger?(Input::B)
      for i in 0..5
        item = @components.data[i]
        if item != nil
          case item
          when RPG::Item
            $game_party.gain_item(item.id, 1)
          when RPG::Weapon
            $game_party.gain_weapon(item.id, 1)
          when RPG::Armor
            $game_party.gain_armor(item.id, 1)
          end
        end
      end         
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end
  end
 
  def update_item
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      component = @components.data[@components.index]
      if component != nil
        case component
        when RPG::Item
          $game_party.gain_item(component.id, 1)
        when RPG::Weapon
          $game_party.gain_weapon(component.id, 1)
        when RPG::Armor
          $game_party.gain_armor(component.id, 1)
        end
      end
      item = @item_window.item
      @components.data[@components.index] = item
      case item
      when RPG::Item
        $game_party.lose_item(item.id, 1)
      when RPG::Weapon
        $game_party.lose_weapon(item.id, 1)
      when RPG::Armor
        $game_party.lose_armor(item.id, 1)
      end
      @item_window.refresh
      @components.refresh
      check_recipes
     
      @item_window.active = false
      @item_window.index = -1
      @components.active = true
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @item_window.active = false
      @item_window.index = -1
      @components.active = true
    end
  end
 
  def check_recipes
    things_in_the_pot = []
    for i in 0..5
      case @components.data[i]
      when nil
        things_in_the_pot << "z"
      when RPG::Item
        things_in_the_pot << "i#{@components.data[i].id}"
      when RPG::Weapon
        things_in_the_pot << "w#{@components.data[i].id}"
      when RPG::Armor
        things_in_the_pot << "a#{@components.data[i].id}"
      end
    end
   
    things_in_the_pot = things_in_the_pot.sort
    for j in 0...RECIPES.size
      temp = RECIPES[j].dup
      temp[6] = nil
      if things_in_the_pot.size == 6
        things_in_the_pot << nil
      else
        things_in_the_pot[6] = nil
      end
      if things_in_the_pot == temp
        @result.make_item(RECIPES[j][6])
        return
      else
        @result.nullify
      end
    end
  end
 
  def rock_baby
    case @result.item
    when nil
      $game_system.se_play($data_system.buzzer_se)
    when RPG::Item
      $game_party.gain_item(@result.item.id, 1)
      finalize_crafting
    when RPG::Weapon
      $game_party.gain_weapon(@result.item.id, 1)
      finalize_crafting
    when RPG::Armor
      $game_party.gain_armor(@result.item.id, 1)
      finalize_crafting
    end
  end
 
  def finalize_crafting
    $game_system.se_play($data_system.save_se)
    @components.nullify
    @components.refresh
    @item_window.refresh
    @result.nullify
  end
 
end


Malian - Nie 17 Sty, 2010 09:31

Ja mam błąd w linijce 85 spróbuję sam edytować. :-D
Ayene - Nie 17 Sty, 2010 10:55

Nie działa Tobie, bo w linijce z kodem:
Kod:
RECIPES = [
["i1", "i1", "i2", "z", "z", "z", "i-3"],
["i3", "i3", "i3", "i3", "i1", "i2", "i-5"],
["i34", "i34" , "i34", "i37","z", "z", "i-20]
]

jest błąd (brakuje zamknięcia cudzysłowu). Zamień ją na linijkę:
Kod:
RECIPES = [
["i1", "i1", "i2", "z", "z", "z", "i-3"],
["i3", "i3", "i3", "i3", "i1", "i2", "i-5"],
["i34", "i34" , "i34", "i37","z", "z", "i-20"]
]

Malian - Nie 17 Sty, 2010 11:01

A gdzie się to otwiera?
Ayene - Nie 17 Sty, 2010 11:04

Należy wywołać okno, używając polecenia skrypt w edycji zdarzeń i wpisać to:
Kod:
$scene = Scene_Craft.new

Czeliosss - Nie 17 Sty, 2010 21:03

Możesz jaśniej bo nie rozumiem.
Malian - Nie 17 Sty, 2010 21:10

Nie chce mi sie tlumaczyc ale musze: on nie moze zrobic eliksiru z dwoch lisci ale zrobil recepture, a wiec on mysli ze tworzy sie to jakims specjalnym klawiszem przygotowanym do tego skryptu. To tyle.
Czeliosss - Pon 18 Sty, 2010 07:24

Aby zrobić miksturę musisz w skrypcie zrobić recepturę. Zebrać potrzebne przedmioty i w tworzeniu naciśnij 'Z', aby wytworzyć. Skrypt może nie działać z twierdzówką. Niestety ją mam. ;-( A nie mam zamiaru płacić za to co mam za darmo na twierdzówce.

[ Dodano: Nie 24 Sty, 2010 17:52 ]
Mam jedną prośbę, najlepiej dla Ayene. Czy mógłby ktoś go rozbić na 2 skrypty, a dokładnie alchemie i kowalstwo.

Ayene - Czw 28 Sty, 2010 17:28

Czy chodziło Tobie o coś takiego:
Spoiler:

Kod:
#====================================================
# ** System Tworzenia Przedmiotów
# wersja: 1.00
# autor: arev (rmxp.pl)
# wydany: 28-12-2009
#=========================================================
# Instalacja i kompatybilność:
#
# Skopiuj ten skrypt i wklej w nowej zakładce nad 'Main' w swoim projekcie.
# Niniejszy skrypt jest kompatybilny z podstawowym systemem RMXP..
# Skrypt nie nadpisuje żadnych metod ani klas, więc powinien również
# współpracować z innymi skryptami.
#
#
#
# Używanie:
#
# Pod tym wstępem znajdziesz tablicę RECIPES.
# Nowe przepisy dodaje się kolejnymi tablicami jak na przykładzie:
# ['i12', 'i78', 'w3', 'a45', 'a45', 'z', 'i-99']
# i oznacza przedmioty, w - bronie, a - zbroje.
# Zgodnie z przykładowym przepisem - by zrobić przedmiot o ID 99 potrzeba
# jednego przedmiotu o ID 12, jednego przedmiotu o ID 78, jednej broni o ID 3,
# dwóch zbroi o ID 45. Maksymalna ilość składników to 6.
# Jeśli chcesz dodać receptę z mniejszej ilość składników, po prostu uzupełnij
# pozostałe pola znakami 'z' (w cudzysłowiu).
# Ostatni element tablicy to rezultat całej recepty. Pierwszy znak działa jak
# poprzednio, następnie konieczny jest myślnik, a dalej ID przedmiotu,
# który tworzymy.
#
# Aby wejść do ekranu tworzenia przedmiotów wywołaj skrypt:
# $scene = Scene_Craft.new - Kowalstwo
# $scene = Scene_Alchemia.new - Alchemia
#
# Kolejność składników podczas tworzenia przedmiotu nie ma znaczenia,
# skrypt sam zajmuje się ich sortowaniem.
#
#
#
# Licencja:
#
# Możesz dowolnie używać tego skryptu w swoin niekomercyjnych projektach.
# Możesz rozpowszechniać ten skrypt (bez pobierania opłat), o ile dołączysz
# informację nt. oryginalnego autora.
# Jeśli chcesz wykorzystać skrypt do celów komercyjnych skontaktuj się ze mną
# za pośrednictwem systemu wiadomości forum www.rmxp.pl lub www.hbgames.org/forums.
#=========================================================

KOWALSTWO = [
["i1", "i1", "i2", "z", "z", "z", "i-3"],
["i3", "i3", "i3", "i3", "i1", "i2", "i-5"],
["i34", "i34" , "i34", "i37","z", "z", "i-20"]
]

ALCHEMIA = [
["i1", "i1", "i1", "z", "z", "z", "i-3"],
["i3", "i3", "i3", "i3", "i1", "i2", "i-5"],
["i34", "i34" , "i34", "i37","z", "z", "i-20"]
]
#------------------------------------------------------------------------------
class Window_Craft_Components < Window_Selectable

   attr_accessor :data

   def initialize
      super(0, 64, 320, 224)
      self.contents = Bitmap.new(width - 32, height - 32)
      self.index = 0
      self.active = true
      @data = [nil, nil, nil, nil, nil, nil]
      @item_max = 6
      refresh
   end
   def item
      return @data[self.index]
   end
   def refresh
      self.contents.clear
      for i in 0..5
      x = 0
      y = i * 32
      if @data[i] != nil
         item = @data[i]
         bitmap = RPG::Cache.icon(item.icon_name)
         self.contents.blt(4 + x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
         self.contents.font.color = normal_color
         self.contents.draw_text(x + 32, y, 160, 32, item.name, 0)
      else
         self.contents.font.color = disabled_color
         self.contents.draw_text(4 + x, y, 160, 32, "Puste", 0)
      end
      end
   end

   def update_cursor_rect
      self.cursor_rect.set(0, self.index * 32, 288, 32)
   end

   def nullify
      @data = [nil, nil, nil, nil, nil, nil]
   end

   def transmutation
      temp = []
      for i in 0..5
      if @data[i] == nil
         temp << "0"
      else
         case @data[i]
         when RPG::Item
            temp << "i" + @data[i].id
         when RPG::Weapon
            temp << "w" + @data[i].id
         when RPG::Armor
            temp << "a" + @data[i].id
         end
      end
      end
      temp = temp.sort
      return temp
   end
end
#------------------------------------------------------------------------------
class Window_Craft_Result < Window_Base

    attr_accessor :item

   def initialize
      super(320,64,320,224)
      self.contents = Bitmap.new(width - 32, height - 32)
      @item = nil
      @item_code = ""
      refresh
   end

   def refresh
      self.contents.clear
      if @item == nil
         self.contents.font.color = normal_color
         self.contents.draw_text(4,0,288,32, "Wybierz składniki.", 0)
      else
         bitmap = RPG::Cache.icon(@item.icon_name)
         self.contents.font.color = text_color(3)
         self.contents.draw_text(4,0,288,32, "Gratuluje!", 0)
         self.contents.blt(4, 65, bitmap, Rect.new(0, 0, 24, 24))
         self.contents.font.color = normal_color
         self.contents.draw_text(32, 65, 288, 32, @item.name, 0)
         self.contents.font.color = disabled_color
         self.contents.draw_text(4,128,288,32, "Aby utworzyć przedmiot naciśnij 'Z'", 0)
         self.contents.draw_text(4,160,288,32, "proces tworzenia!", 0)
      end
   end

   def make_item(text="")
      @item_code = text
      if @item_code.include?("-")
         temp = @item_code.split("-")
         @item = (temp[0] == "i" ? $data_items : "w" ? $data_weapons : $data_armors)[temp[1].to_i]
         refresh
      end
   end

   def nullify
      @item = nil
      refresh
   end
end
#------------------------------------------------------------------------------
class Window_Craft_Item < Window_Selectable

   def initialize
      super(0, 288, 640, 192)
      @column_max = 2
      refresh
      self.active = false
      self.index = -1
   end

   def item
      return @data[self.index]
   end

   def refresh
      if self.contents != nil
         self.contents.dispose
         self.contents = nil
      end
      @data = []
      for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
         @data.push($data_items[i])
      end
      end
      unless $game_temp.in_battle
      for i in 1...$data_weapons.size
      if $game_party.weapon_number(i) > 0
         @data.push($data_weapons[i])
      end
      end
      for i in 1...$data_armors.size
      if $game_party.armor_number(i) > 0
         @data.push($data_armors[i])
      end
      end
      end
      @data.push(nil)
      @item_max = @data.size
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max-1
      draw_item(i)
      end
   end

   def draw_item(index)
      item = @data[index]
      x = 4 + index % @column_max * 320
      y = index / @column_max * 32
      case item
      when RPG::Item
         number = $game_party.item_number(item.id)
      when RPG::Weapon
         number = $game_party.weapon_number(item.id)
      when RPG::Armor
         number = $game_party.armor_number(item.id)
      end
      bitmap = RPG::Cache.icon(item.icon_name)
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
      self.contents.font.color = normal_color
      self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
      self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
      self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
   end

   def update_help
      @help_window.set_text(self.item == nil ? "" : self.item.description)
   end

   def update_cursor_rect
      if @index < 0
         self.cursor_rect.empty
         return
     end
      row = @index / @column_max
      if row < self.top_row
         self.top_row = row
      end
      if row > self.top_row + (self.page_row_max - 1)
         self.top_row = row - (self.page_row_max - 1)
      end
      x = index % @column_max * 320
      y = index / @column_max * 32 - self.oy
      self.cursor_rect.set(x, y, 288, 32)
   end
end
#------------------------------------------------------------------------------
class Scene_Craft

   def main
      @components = Window_Craft_Components.new
      @result = Window_Craft_Result.new
      @item_window = Window_Craft_Item.new
      @help_window = Window_Help.new
      @help_window.set_text("Tworzenie Przedmiotów", 1)
      Graphics.transition
      loop do
      Input.update
      Graphics.update
      update
      if $scene != self
         break
      end
      end
      Graphics.freeze
      @components.dispose
      @result.dispose
      @item_window.dispose
      @help_window.dispose
   end

   def update
      @item_window.update
      @components.update
      if @components.active
         update_comp
         return
      end
      if @item_window.active
         update_item
         return
      end
   end

   def update_comp
      if Input.trigger?(Input::A)
         rock_baby
         return
      end
      if Input.trigger?(Input::C)
         $game_system.se_play($data_system.decision_se)
         @components.active = false
         @item_window.active = true
         @item_window.index = 0
      end
      if Input.trigger?(Input::B)
         for i in 0..5
      item = @components.data[i]
      if item != nil
         case item
         when RPG::Item
            $game_party.gain_item(item.id, 1)
         when RPG::Weapon
            $game_party.gain_weapon(item.id, 1)
         when RPG::Armor
            $game_party.gain_armor(item.id, 1)
         end
      end
      end
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      end
   end

   def update_item
      if Input.trigger?(Input::C)
         $game_system.se_play($data_system.decision_se)
         component = @components.data[@components.index]
      if component != nil
         case component
         when RPG::Item
            $game_party.gain_item(component.id, 1)
         when RPG::Weapon
            $game_party.gain_weapon(component.id, 1)
         when RPG::Armor
            $game_party.gain_armor(component.id, 1)
         end
      end
      item = @item_window.item
      @components.data[@components.index] = item
      case item
      when RPG::Item
         $game_party.lose_item(item.id, 1)
      when RPG::Weapon
         $game_party.lose_weapon(item.id, 1)
      when RPG::Armor
         $game_party.lose_armor(item.id, 1)
      end
      @item_window.refresh
      @components.refresh
      check_recipes
      @item_window.active = false
      @item_window.index = -1
      @components.active = true
      end
      if Input.trigger?(Input::B)
         $game_system.se_play($data_system.cancel_se)
         @item_window.active = false
         @item_window.index = -1
         @components.active = true
      end
   end

   def check_recipes
      things_in_the_pot = []
      for i in 0..5
      case @components.data[i]
      when nil
         things_in_the_pot << "z"
      when RPG::Item
         things_in_the_pot << "i#{@components.data[i].id}"
      when RPG::Weapon
         things_in_the_pot << "w#{@components.data[i].id}"
      when RPG::Armor
         things_in_the_pot << "a#{@components.data[i].id}"
      end
      end

      things_in_the_pot = things_in_the_pot.sort
      for j in 0...KOWALSTWO.size
      temp = KOWALSTWO[j].dup
      temp[6] = nil
      if things_in_the_pot.size == 6
         things_in_the_pot << nil
      else
         things_in_the_pot[6] = nil
      end
      if things_in_the_pot == temp
          @result.make_item(KOWALSTWO[j][6])
          return
      else
         @result.nullify
      end
      end
   end

   def rock_baby
      case @result.item
      when nil
         $game_system.se_play($data_system.buzzer_se)
      when RPG::Item
         $game_party.gain_item(@result.item.id, 1)
         finalize_crafting
      when RPG::Weapon
         $game_party.gain_weapon(@result.item.id, 1)
         finalize_crafting
      when RPG::Armor
         $game_party.gain_armor(@result.item.id, 1)
         finalize_crafting
      end
   end

   def finalize_crafting
      $game_system.se_play($data_system.save_se)
      @components.nullify
      @components.refresh
      @item_window.refresh
      @result.nullify
  end
end

class Scene_Alchemia

   def main
      @components = Window_Craft_Components.new
      @result = Window_Craft_Result.new
      @item_window = Window_Craft_Item.new
      @help_window = Window_Help.new
      @help_window.set_text("Tworzenie Preparatów", 1)
      Graphics.transition
      loop do
      Input.update
      Graphics.update
      update
      if $scene != self
         break
      end
      end
      Graphics.freeze
      @components.dispose
      @result.dispose
      @item_window.dispose
      @help_window.dispose
   end

   def update
      @item_window.update
      @components.update
      if @components.active
         update_comp
         return
      end
      if @item_window.active
         update_item
         return
      end
   end

   def update_comp
      if Input.trigger?(Input::A)
         rock_baby
         return
      end
      if Input.trigger?(Input::C)
         $game_system.se_play($data_system.decision_se)
         @components.active = false
         @item_window.active = true
         @item_window.index = 0
      end
      if Input.trigger?(Input::B)
         for i in 0..5
      item = @components.data[i]
      if item != nil
         case item
         when RPG::Item
            $game_party.gain_item(item.id, 1)
         when RPG::Weapon
            $game_party.gain_weapon(item.id, 1)
         when RPG::Armor
            $game_party.gain_armor(item.id, 1)
         end
      end
      end
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      end
   end

   def update_item
      if Input.trigger?(Input::C)
         $game_system.se_play($data_system.decision_se)
         component = @components.data[@components.index]
      if component != nil
         case component
         when RPG::Item
            $game_party.gain_item(component.id, 1)
         when RPG::Weapon
            $game_party.gain_weapon(component.id, 1)
         when RPG::Armor
            $game_party.gain_armor(component.id, 1)
         end
      end
      item = @item_window.item
      @components.data[@components.index] = item
      case item
      when RPG::Item
         $game_party.lose_item(item.id, 1)
      when RPG::Weapon
         $game_party.lose_weapon(item.id, 1)
      when RPG::Armor
         $game_party.lose_armor(item.id, 1)
      end
      @item_window.refresh
      @components.refresh
      check_recipes
      @item_window.active = false
      @item_window.index = -1
      @components.active = true
      end
      if Input.trigger?(Input::B)
         $game_system.se_play($data_system.cancel_se)
         @item_window.active = false
         @item_window.index = -1
         @components.active = true
      end
   end

   def check_recipes
      things_in_the_pot = []
      for i in 0..5
      case @components.data[i]
      when nil
         things_in_the_pot << "z"
      when RPG::Item
         things_in_the_pot << "i#{@components.data[i].id}"
      when RPG::Weapon
         things_in_the_pot << "w#{@components.data[i].id}"
      when RPG::Armor
         things_in_the_pot << "a#{@components.data[i].id}"
      end
      end

      things_in_the_pot = things_in_the_pot.sort
      for j in 0...ALCHEMIA.size
      temp = ALCHEMIA[j].dup
      temp[6] = nil
      if things_in_the_pot.size == 6
         things_in_the_pot << nil
      else
         things_in_the_pot[6] = nil
      end
      if things_in_the_pot == temp
          @result.make_item(ALCHEMIA[j][6])
          return
      else
         @result.nullify
      end
      end
   end

   def rock_baby
      case @result.item
      when nil
         $game_system.se_play($data_system.buzzer_se)
      when RPG::Item
         $game_party.gain_item(@result.item.id, 1)
         finalize_crafting
      when RPG::Weapon
         $game_party.gain_weapon(@result.item.id, 1)
         finalize_crafting
      when RPG::Armor
         $game_party.gain_armor(@result.item.id, 1)
         finalize_crafting
      end
   end

   def finalize_crafting
      $game_system.se_play($data_system.save_se)
      @components.nullify
      @components.refresh
      @item_window.refresh
      @result.nullify
  end
end


Użycie:
Kod:
$scene = Scene_Craft.new - Kowalstwo
$scene = Scene_Alchemia.new - Alchemia

Czeliosss - Czw 28 Sty, 2010 20:08

Jesteś boska. Czekaj. Kiedyś już to pisałem. Te forum bez ciebie to jak człowiek bez mózgu.
Malian - Czw 28 Sty, 2010 23:04

Czyli taki jak ja. :-D
Potwierdzam jestes boska, tylko do Zeusa duzo brakuje. ^&^

Arkon2811 - Sro 02 Cze, 2010 21:39
Temat postu: problem
Sory że przywracam dość stary temat ale mam problem mam RPG Maker XP pl
i chodzi o to ze skrypt działa tylko nie mam nazw przedmiotów przy tym ( Jedynie Ikony)
Mogł by mi ktoś pomóc i powiedziec jak to zmienić??

pw115 - Sro 02 Cze, 2010 21:49

Lepiej wyrzuć polaka i to szybko. Radzę zainstalować ang wersję
Napisy w wersji pl się nie wyświetlają

PS: wcale cie nie zmuszam do zmiany makera

Arkon2811 - Sro 02 Cze, 2010 21:55

Jestem w tym nowy a trochę się napracowałem w tworzeni nowych przedmiotów potworków itp.
można wszystko przenieść na angielską wersje tak aby się nie kolidowało ze sobą??

Ayene - Sro 02 Cze, 2010 21:59

Arkon2811, wszędzie tam, gdzie pojawia się linijka :
Kod:
self.contents = Bitmap.new(width - 32, height - 32)

dodaj po niej:
Kod:
self.contents.font.name = $defaultfonttype
self.contents.font.size = $defaultfontsize

Izaya - Czw 03 Cze, 2010 13:03

Arkon2811 napisał/a:
Jestem w tym nowy a trochę się napracowałem w tworzeni nowych przedmiotów potworków itp.
można wszystko przenieść na angielską wersje tak aby się nie kolidowało ze sobą??


Arkon2811 sądzę, że jak masz folder z tą grą, i ściągasz sobie wersję ang.
to otwierasz plik z grą w ang. i powinno być wszystko OK...
:mrgreen:

P.S.: Fajny Skrypt, może użyję!

adzio96 - Sob 05 Cze, 2010 18:06

a skąd mam wiedziec jaka bron ma jakie ID? chodzi o to na ktorym miejscu jest w bazie danych? jeśli tak to coś mi nie działa, bo jak naciskam z to mi nic sie nie dzieje :((((
erienus - Nie 06 Cze, 2010 08:36

adzio - tak, jeżeli przedmiot w bazie danych jest na miejscu 21 to ma ID 21
PaKiTos - Sro 09 Cze, 2010 10:44

Potrzebuję takiego czegoś do VX. Też ma być Kowalstwo i Alchemia osobno.
Draph - Sro 09 Cze, 2010 13:54

Hmm mam pewien problem ze skryptem już zmodyfikowanym przez Ayene. Czy skrypt pozwala tworzyć pancerze? W skrypcie wstawiłem taką oto linijkę:
["i1", "i1", "z", "z", "z", "z", "a-1"]
Jednak w okienku tworzenia pojawia mi się broń o ID 1 . Tworzy także się ona zamiast pancerza o ID 1.

Ayene - Sro 09 Cze, 2010 14:13

Znajdź w kodzie linijkę:
Kod:
@item = (temp[0] == "i" ? $data_items : "a" ? $data_armors : $data_weapons)[temp[1].to_i]

i zamień ją na:
Kod:
if temp[0] == "i"
  @item = $data_items[temp[1].to_i]
elsif temp[0] == "w"
  @item = $data_weapons[temp[1].to_i]
elsif temp[0] == "a"
  @item = $data_armors[temp[1].to_i]
end

Draph - Sro 09 Cze, 2010 14:21

Wielkie dzięki Ayene, nawet coś kombinowałem z tą linijką, ale póki co mam jeszcze problemy z tym językiem :P Jeszcze raz dzięki.
Bulooo - Nie 27 Cze, 2010 10:26

ABS Mr Mo's Coś mi blokuje. Bo jak uzbieram wszystkie składniki i pokazuje mi się żebym nacisnął "z"
Jak naciskam nic się nie dzieje ...

Usunełem Mr Mo's I działa

Ale chce tego abs.
Albo zna ktoś inny skrypt alchemii ?

Pomocy

sitax5 - Sro 11 Sie, 2010 15:21

PaKiTos napisał/a:
Potrzebuję takiego czegoś do VX. Też ma być Kowalstwo i Alchemia osobno.

Ja się pod tym podpisuje bo się już przełączyłem na VXa

Amelanduil - Sro 11 Sie, 2010 16:38

czytaj WSZYSTKIE posty:
Ayene napisał/a:
Znajdź w kodzie linijkę: Kod:
Kod:
@item = (temp[0] == "i" ? $data_items : "a" ? $data_armors : $data_weapons)[temp[1].to_i]



i zamień ją na: Kod:
Kod:
if temp[0] == "i"
  @item = $data_items[temp[1].to_i]
elsif temp[0] == "w"
  @item = $data_weapons[temp[1].to_i]
elsif temp[0] == "a"
  @item = $data_armors[temp[1].to_i]
end

aqwe10 - Pią 03 Gru, 2010 19:06

Możliwe jest żeby Blizz-ABS blokował ten skrypt?
anemone - Pon 21 Mar, 2011 14:07

Jestem nowy więc się nie znam, ale powiedzcie : jak powinna wyglądać formułka i gdzie powinna być BŁAGAM SZYBKO!! :(
Ayene - Pon 21 Mar, 2011 17:54

anemone, przeczytaj dokładnie instrukcję, przejrzyj posty w tym temacie, a na pewno dasz sobie radę ;-)
batista1230 - Pon 03 Paź, 2011 13:42

ja zrobić formułkę robię tak jak w opisie i wyskakuje syntax error linea jakos tak
Spazmbite - Pią 25 Lis, 2011 23:05

Wiele osób powyżej pisało posty lecz nie dostały te osoby odpowiedzi. Wiec ja powtarzam pytanie bo sam nie wiem. Gdy już dodam do craftingu wszystkie wymagane przedmioty to po prawej pokazuje się okno z napisem że udało mi się zrobić ten przedmiot itp. oraz zdanie "Aby utworzyć przedmiot naciśnij 'Z' ". Naciskam Z lecz nic to nie daję. Przeszukałem skrypt aby sprawdzić czy da się zmienić na inny klawisz lecz niestety nie znalazłem. Dlatego zamieszczam tu pytanie ponieważ jest tu więcej osób znających się na tym :-) . Z góry dzięki.

PS. Zapewne to wina posiadanego Blizz ABS więc interesuję mnie jakoś zmiana skryptu tak aby się jedno z drugim nie gryzło.

@EDIT
Ok, znalazlem rozwiązanie - trzeba nacisnąć Shift zamiast Z... Działa to przy Blizz ABS ale nie wiem czy przy innych tez.

Nathaniel125 - Sob 24 Mar, 2012 11:56

Niestety mam pewien problem z tym skryptem: otóż gdy dodam do listy wszystkie przedmioty potrzebne do stworzenia nowego to w okienku po lewej nie pokazuje się "gratulacje! Wciśnij przycisk 'Z' ..." i nie mogę utworzyć przedmiotu. Zauważyłem że dzieje się tak tylko wtedy gdy jakiś składnik ma dwucyfrowe ID.
Wie ktoś jak to naprawić?

Ayene - Pon 26 Mar, 2012 19:10

Co oznacza, że nie możesz utworzyć? Wyświetla się jakiś komunikat błędy, czy po prostu przycisk nie działa?
Nathaniel125 - Pon 26 Mar, 2012 23:07

Dzięki za zainteresowanie Ayene ale problem jest już nieaktualny, natknąłem się w sieci na rozwiązanie. Aby skrypt działał ID muszą być wpisane chronologicznie ale czasami skrypt nie odczytuje ich poprawnie i wtedy trzeba najpierw zapisać liczby dwucyfrowe a następnie te jednocyfrowe np
zamiast
Kod:
['i8', 'i9','i12', 'i13', 'i14', 'z', 'i-15']

powinno być
Kod:
['i12', 'i13', 'i14', 'i8', 'i9','z', 'i-15']


Mam nadzieje że napisałem to zrozumiale ;-)

Rouch - Czw 23 Sie, 2012 22:20

Ktoś zna inny skrypt na produkcję przedmiotów? Ten jest okropny i wizualnie i technicznie.
Tenebris - Pią 07 Wrz, 2012 16:15

Mi tam się on podoba a jak ci się nie podoba to możesz spróbować zrobić sobie coś na zdarzeniówkach ale raczej ci się nie uda
Heron10 - Czw 13 Gru, 2012 06:24

Mam błąd w tym skrypcie. Oczywiście skrypt działa, ale nie pojawiają się teksty. Jest tylko nagłówek "Produkcja Przedmiotów". Być może jest potrzebna jakaś czcionka, którą nie mam. Można jakoś zmienić tą czcionkę w skrypcie?

Jak nie chodzi o czcionkę to powiedzcie czemu nie mam wyrazów w skrypcie!?

Nex - Czw 13 Gru, 2012 21:07

Masz polskiego RM to dlatego
musisz znaleźć
Kod:
  self.contents = Bitmap.new(width - 32, height - 32)

i wpisać pod spodem
Kod:
    self.contents.font.name = $defaultfonttype
    self.contents.font.size = $defaultfontsize

a najlepiej to pobierz normalnego Makera

Gandahor - Pon 24 Gru, 2012 22:56

Witam, mam taką prośbę.
Mógłby ktoś przerobić ten skrypt, bądź podpowiedzieć co należy zmienić aby można było tworzyć 2 różne przedmioty naraz? Chodzi mi mniej więcej o taki efekt:
['i1', 'i2', 'i3', 'z', 'z', 'z', 'i-4', 'i-5']
Ale żeby działał, bo w ten sposób co podałem tworzy tylko pierwszy przedmiot :P

A i żeby nie zakładać osobnego tematu.. Co trzeba wpisać w skrypcie żeby wyświetlało nam zmienną np w menu? Kiedyś gdzieś był fajny poradnik na temat Punktów Nauki i tam było pokazane jak zrobić aby w menu pokazywała się wartość zmiennej, to była jedna linijka Kodu :P

The Big Master - Wto 25 Gru, 2012 09:58

Dzięki Ayene ten twój skrypt na alchemię i kowalswo normalnie cud.

<Pytanie jak zmienić windowskina w tym oknie tworzenia itemów?>


Powered by phpBB modified by Przemo © 2003 phpBB Group