UltimaForum

Wsparcie [VX] - Skrypt na limit przedmiotów

Greed - Czw 24 Lut, 2011 13:03
Temat postu: Skrypt na limit przedmiotów
Witam wszystkich. Poszukuję skryptu na limit danego przedmiotu. Tzn chciałbym móc ustawić by np można było posiadać 99 "mikstur leczniczych" ale tylko maksymalnie 20 "elixirów".
Z góry dziękuję za pomoc.

Ayene - Czw 24 Lut, 2011 17:46

Sprawdź to... nie wiem, czy nie trzeba by było jeszcze kilku rzeczy wrzucić, więc dobrze przetestuj ;-)

Spoiler:

Kod:
module Ayene   
  # Maksymalna ilość każdego  z przedmiotów
  ITEM_MAX_AMOUNT = 99
 
  # By ustawić maksymalną ilość wybranego przedmiotu w jego oknie notatek
  # w bazie danych wpisz np. <MAX_ITEM 23> lub <maxitem 45>
end

class RPG::BaseItem
  def max_amount
    @amount = Ayene::ITEM_MAX_AMOUNT
    @note.split(/[\r\n]+/).each { |line|
      case line
      when /^<(?:MAX_ITEM|maxitem)[ ]*(\d+)>/i
        @amount = $1.to_i
      end
    }
    return @amount
  end
end

class Game_Party < Game_Unit 
  def gain_item(item, n, include_equip = false)
    number = item_number(item)
    case item
    when RPG::Item
      @items[item.id] = [[number + n, 0].max, item.max_amount].min
    when RPG::Weapon
      @weapons[item.id] = [[number + n, 0].max, item.max_amount].min
    when RPG::Armor
      @armors[item.id] = [[number + n, 0].max, item.max_amount].min
    end
    n += number
    if include_equip and n < 0
      for actor in members
        while n < 0 and actor.equips.include?(item)
          actor.discard_equip(item)
          n += 1
        end
      end
    end
  end
end


Greed - Pią 25 Lut, 2011 19:01

Wielkie dzięki Ayene. Jak zawsze niezastąpiona ^ ^
Póki co wszystko działa jak należy, gdyby było coś nie tak dam znać na forum. ;-)

Skrypt ma jedną wadę: mianowicie osiągnę już maksymalną liczbę eliksirów jednak w sklepie nadal pokazuje że mogę je kupić i gracz nie wiedzący o tym straci dużo kasy na darmo :D Fajnie by było gdyby w sklepie po osiągnięciu maksymalnej liczby danego przedmiotu nie mozna było już go kupić. Chociaż ja nawet bez tego zrobię ze skryptu pożytek :3

Ayene - Pią 25 Lut, 2011 21:02

Spróbuj tego: :->
Spoiler:

Kod:
module Ayene   
  # Maksymalna ilość każdego  z przedmiotów
  ITEM_MAX_AMOUNT = 99
 
  # By ustawić maksymalną ilość wybranego przedmiotu w jego oknie notatek
  # w bazie danych wpisz np. <MAX_ITEM 23> lub <maxitem 45>
end

class RPG::BaseItem
  def max_amount
    @amount = Ayene::ITEM_MAX_AMOUNT
    @note.split(/[\r\n]+/).each { |line|
      case line
      when /^<(?:MAX_ITEM|maxitem)[ ]*(\d+)>/i
        @amount = $1.to_i
      end
    }
    return @amount
  end
end

class Game_Party < Game_Unit 
  def gain_item(item, n, include_equip = false)
    number = item_number(item)
    case item
    when RPG::Item
      @items[item.id] = [[number + n, 0].max, item.max_amount].min
    when RPG::Weapon
      @weapons[item.id] = [[number + n, 0].max, item.max_amount].min
    when RPG::Armor
      @armors[item.id] = [[number + n, 0].max, item.max_amount].min
    end
    n += number
    if include_equip and n < 0
      for actor in members
        while n < 0 and actor.equips.include?(item)
          actor.discard_equip(item)
          n += 1
        end
      end
    end
  end
end

class Window_ShopBuy < Window_Selectable 
  def draw_item(index)
    item = @data[index]
    number = $game_party.item_number(item)
    enabled = (item.price <= $game_party.gold and number < item.max_amount)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    draw_item_name(item, rect.x, rect.y, enabled)
    rect.width -= 4
    self.contents.draw_text(rect, item.price, 2)
  end 
end

class Scene_Shop < Scene_Base 
  def update_buy_selection
    @status_window.item = @buy_window.item
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @buy_window.item
      number = $game_party.item_number(@item)
      if @item == nil || @item.price > $game_party.gold or
        number == @item.max_amount
        Sound.play_buzzer
      else
        Sound.play_decision
        max = (@item.price == 0 ? @item.max_amount : $game_party.gold / @item.price)
        max = [max, @item.max_amount - number].min
        @buy_window.active = false
        @buy_window.visible = false
        @number_window.set(@item, max, @item.price)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
end


Greed - Sob 26 Lut, 2011 20:09

Ayene, dziękuję ci :3 Na prawdę mi pomogłaś, wszystko działa jak należy :D
Uszanowanie, jesteś wielka ^ ^


Powered by phpBB modified by Przemo © 2003 phpBB Group