go light go light
Pages: [1]

Author Topic: Synthesis Shop (VX)  (Read 3776 times)

0 Members and 1 Guest are viewing this topic.
Zylos Male
*
My shadow...
Rep: +462/-212
Offline Offline
Level 91 (91%)
Why do you follow me still?
For frequently finding and reporting spam and spam bots2012 Best RPG Maker User (Mapping)2012 Best RPG Maker User (Programming)Secret Santa 2012 ParticipantGold - GIAW 9Project of the Month winner for September 2008For taking a crack at the RMRK Wiki2011 Best RPG Maker User (Programming)2011 Best Veteran2011 Kindest Member2010 Best RPG Maker User (Story)2010 Best RPG Maker User (Events)2010 Most Deserving Of A Promotion2010 Best RPG Maker User (Technical)
Synthesis Shop (VX)
« on: February 26, 2011, 04:10:02 AM »

  • Synthesis Shop (VX)
    Version: 1.0
    Author: Zylos
    Date: February 25, 2011


    Description


    This is a simple script for a Final Fantasy IX synthesis shop. In a synthesis shop, the player can combine two materials (along with some money) to create new weapons. This script allows the user to easily turn the synthesis shop on and off with a switch, and set up what items can be made, how much they cost, and what materials are needed, simply by typing the numbers on the item's notebox in the database. No need to edit anything in the script except possibly what switch you'd like to use to turn it on.

    Features

    • Combine two materials to make rarer or better items.
    • Easily customizable using item notes. No need to edit the script
    • As near to the exact synthesis system from FFIX as RPG Maker VX can get.

    Screenshots





    Instructions
    • Place this script in the materials section, above Main.
    • Check the number for the switch you'd like to use to turn the synthesis shops on or off. The default switch ID is 20.
    • Check or create the items, weapons, or armors you want to be able to synthesize in the synthesis shop. In the Notes section in the bottom-right corner of your desired item, add in the following data:

      • \cost[] - This is the price of the item.
      • \type1[] - The type of object for the first required material.
        Use 0 for item, 1 for weapon, and 2 for armor.
      • \type2[] - The type of object for the second required material.
        Use 0 for item, 1 for weapon, and 2 for armor.
      • \id1[] - The ID of the first required material.
      • \id2[] - The ID of the second required material.

    • So for example, if you wanted to create a broad sword with two long swords for 150G under the default database settings, you would type in \cost[150], \type1[1], \type2[1], \id1[2], and \id2[2]. Do this for every item you wish to synthesize in the shop.
    • To create a synthesis shop in the game, simply flip on the synthesis switch that you designated earlier and set up a shop like you normally would, using only the goods you have already marked for synthesis. Be sure to remember to turn the switch off again afterward too.

    Script


    Code: [Select]
    #==============================================================================
    #  Synthesis Shop (VX)
    #  Version: 1.0
    #  Author: Zylos (rmrk.net)
    #  Date: February 25, 2011
    #------------------------------------------------------------------------------
    #  Description:
    #
    #   This is a simple script for a Final Fantasy IX synthesis shop. In a synthesis
    #   shop, the player can combine two materials (along with some money) to create
    #   new weapons. This script allows the user to easily turn the synthesis shop
    #   on and off with a switch, and set up what items can be made, how much they
    #   cost, and what materials are needed, simply by typing the numbers on the
    #   item's notebox in the database. No need to edit anything in the script except
    #   for what switch you'd like to use.
    #
    #------------------------------------------------------------------------------
    #  Instructions:
    #   
    #     - Place this script in the materials section, above Main.
    #     - Check the number for the switch you'd like to use to turn the synthesis
    #       shops on or off. The default switch ID is 20, and can be changed just
    #       below these instructions.
    #     - Check or create the items, weapons, or armors you want to be able to
    #       synthesize in the synthesis shop. In the Notes section in the bottom-right
    #       corner of your desired item, add in the following data:
    #     
    #           \cost[] - This is the price of the item.
    #           \type1[] - The type of object for the first required material.
    #                      Use 0 for item, 1 for weapon, and 2 for armor.
    #           \type2[] - The type of object for the second required material.
    #                      Use 0 for item, 1 for weapon, and 2 for armor.
    #           \id1[] - The ID of the first required material.
    #           \id2[] - The ID of the second required material.
    #
    #       So for example, if you wanted to create a broad sword with two long swords
    #       for 150G under the default database settings, you would type in
    #       \cost[150], \type1[1], \type2[1], \id1[2], and \id2[2]. Do this for every
    #       item you wish to synthesize in the shop.
    #     - To create a synthesis shop in the game, simply flip on the synthesis
    #       switch that you designated earlier and set up a shop like you normally
    #       would, using only the goods you have already marked for synthesis. Be
    #       sure to remember to turn the switch off again afterward too.
    #
    #==============================================================================

    module Synth_Switch
      #============================================================================
      #  IMPORTANT! Edit this to change the switch that calls up the synthesis
      #  screen. If this switch is off, nothing will happen. If this switch is on,
      #  then normal shops will changed into synthesis shops instead.
      #
      #  Editable switch:
      #============================================================================
     
      Synthesis_Switch = 20   #Synthesis Switch
     
      #============================================================================
      #  Other than this bit here, you won't need to edit anything in the script
      #  itself. Everything else can be done in the noteboxes of the database.
      #============================================================================
    end

    #==============================================================================
    # ** Module RPG
    #------------------------------------------------------------------------------
    #  The coding used in checking the noteboxes of the synthesizable items.
    #==============================================================================

    module RPG 
      class BaseItem
        def s_cost    # The price of the synthesized good.
          @s_cost = self.note[/\\COST\[(\d+)\]/i] != nil ? $1.to_i : 0 if @s_cost == nil
          return @s_cost
        end
        def s_req_1_type    # The object type of the first required material.
          @s_req_1_type = self.note[/\\TYPE1\[(\d+)\]/i] != nil ? $1.to_i : 0 if @s_req_1_type == nil
          return @s_req_1_type
        end
        def s_req_1_id    # The ID of the first required material.
          @s_req_1_id = self.note[/\\ID1\[(\d+)\]/i] != nil ? $1.to_i : 1 if @s_req_1_id == nil
          return @s_req_1_id
        end
        def s_req_2_type    # The object type of the second required material.
          @s_req_2_type = self.note[/\\TYPE2\[(\d+)\]/i] != nil ? $1.to_i : 0 if @s_req_2_type == nil
          return @s_req_2_type
        end
        def s_req_2_id    # The ID of the second required material.
          @s_req_2_id = self.note[/\\ID2\[(\d+)\]/i] != nil ? $1.to_i : 1 if @s_req_2_id == nil
          return @s_req_2_id
        end
      end
    end

    #==============================================================================
    # ** Scene_Map
    #------------------------------------------------------------------------------
    #  The switch redirecting a normal shop call to a synthesis shop.
    #==============================================================================

    class Scene_Map < Scene_Base
      def call_shop
        $game_temp.next_scene = nil
        if $game_switches[Synth_Switch::Synthesis_Switch]
          $scene = Scene_Synthesis.new
        else
          $scene = Scene_Shop.new
        end
      end
    end

    #==============================================================================
    # ** Window_Base
    #------------------------------------------------------------------------------
    #  Adding a bit to the window base to add transparency to faces.
    #==============================================================================

    class Window_Base < Window
     
      def draw_face(face_name, face_index, x, y, size = 96, opacity = 255)
        bitmap = Cache.face(face_name)
        rect = Rect.new(0, 0, 0, 0)
        rect.x = face_index % 4 * 96 + (96 - size) / 2
        rect.y = face_index / 4 * 96 + (96 - size) / 2
        rect.width = size
        rect.height = size
        self.contents.blt(x, y, bitmap, rect,opacity)
        bitmap.dispose
      end
      def draw_actor_face(actor, x, y, size = 96, opacity = 255)
        draw_face(actor.face_name, actor.face_index, x, y, size, opacity)
      end
     
    end

    #==============================================================================
    # ** Window_SynthBuy
    #------------------------------------------------------------------------------
    #  This window displays the synthesizable goods in the synthesis shop.
    #==============================================================================

    class Window_SynthBuy < Window_Selectable
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x : window X coordinate
      #     y : window Y coordinate
      #--------------------------------------------------------------------------
      def initialize(x, y)
        super(x, y, 304, 232)
        @shop_goods = $game_temp.shop_goods
        refresh
        self.index = 0
      end
      #--------------------------------------------------------------------------
      # * Get Item
      #--------------------------------------------------------------------------
      def item
        return @data[self.index]
      end
      #--------------------------------------------------------------------------
      # * Get Required Material One
      #--------------------------------------------------------------------------
      def req1
        type1 = item.s_req_1_type
        id1 = item.s_req_1_id
        case type1
        when 0
          @req1 = $data_items[id1]
        when 1
          @req1 = $data_weapons[id1]
        when 2
          @req1 = $data_armors[id1]
        end
        return @req1
      end
      #--------------------------------------------------------------------------
      # * Get Required Material Two
      #--------------------------------------------------------------------------
      def req2
        type2 = item.s_req_2_type
        id2 = item.s_req_2_id
        case type2
        when 0
          @req2 = $data_items[id2]
        when 1
          @req2 = $data_weapons[id2]
        when 2
          @req2 = $data_armors[id2]
        end
        return @req2
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        @data = []
        for goods_item in @shop_goods
          case goods_item[0]
          when 0
            item = $data_items[goods_item[1]]
          when 1
            item = $data_weapons[goods_item[1]]
          when 2
            item = $data_armors[goods_item[1]]
          end
          if item != nil
            @data.push(item)
          end
        end
        @item_max = @data.size
        create_contents
        for i in 0...@item_max
          draw_item(i)
        end
      end
      #--------------------------------------------------------------------------
      # * Draw Item
      #--------------------------------------------------------------------------
      def draw_item(index)
        item = @data[index]
        number = $game_party.item_number(item)
        type1 = item.s_req_1_type
        id1 = item.s_req_1_id
        case type1
        when 0
          req1 = $data_items[id1]
        when 1
          req1 = $data_weapons[id1]
        when 2
          req1 = $data_armors[id1]
        end
        type2 = item.s_req_2_type
        id2 = item.s_req_2_id
        case type2
        when 0
          req2 = $data_items[id2]
        when 1
          req2 = $data_weapons[id2]
        when 2
          req2 = $data_armors[id2]
        end
        if req1 == req2
          enabled = (item.s_cost <= $game_party.gold and number < 99 and $game_party.item_number(req1) > 1)
        else
          enabled = (item.s_cost <= $game_party.gold and number < 99 and $game_party.item_number(req1) > 0 and $game_party.item_number(req2) > 0)
        end
        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.s_cost, 2)
      end
      #--------------------------------------------------------------------------
      # * Help Text Update
      #--------------------------------------------------------------------------
      def update_help
        @help_window.set_text(item == nil ? "" : item.description)
      end
    end

    #==============================================================================
    # ** Window_SynthStatus1
    #------------------------------------------------------------------------------
    #  This window displays the current amount of gold, the number of items
    #  possessed, and the number of items currently equiped.
    #==============================================================================

    class Window_SynthStatus1 < Window_Base
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x : window X coordinate
      #     y : window Y coordinate
      #--------------------------------------------------------------------------
      def initialize(x, y)
        super(x, y, 240, 116)
        @item = nil
        refresh
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        self.contents.font.color = system_color
        self.contents.draw_text(4, 0, 200, WLH*1.5, "Funds")
        cd = contents.text_size(Vocab::gold).width
        self.contents.font.color = normal_color
        self.contents.draw_text(4, 0, 200-cd-2, WLH*1.5, $game_party.gold, 2)
        self.contents.font.color = system_color
        self.contents.draw_text(4, 0, 200, WLH*1.5, Vocab::gold, 2)
        number = $game_party.item_number(@item)
        self.contents.font.color = system_color
        self.contents.draw_text(4, 0, 190, WLH*3.5, "Stock")
        self.contents.font.color = normal_color
        self.contents.draw_text(4, 0, 190, WLH*3.5, number, 2)
        number2 = 0
        for actor in $game_party.members
          if actor.equips.include?(@item) then number2 = number2 + 1
          end
        end
        self.contents.font.color = system_color
        self.contents.font.color.alpha = @item.is_a?(RPG::Item) ? 128 : 255
        self.contents.draw_text(4, 0, 190, WLH*5.5, "Equiped")
        self.contents.font.color = normal_color
        self.contents.font.color.alpha = @item.is_a?(RPG::Item) ? 128 : 255
        self.contents.draw_text(4, 0, 190, WLH*5.5, number2, 2)
      end
      #--------------------------------------------------------------------------
      # * Set Item
      #--------------------------------------------------------------------------
      def item=(item)
        if @item != item
          @item = item
          refresh
        end
      end
    end

    #==============================================================================
    # ** Window_SynthRequire
    #------------------------------------------------------------------------------
    #  This window displays the items necessary to synthesize.
    #==============================================================================

    class Window_SynthRequire < Window_Base
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x : window X coordinate
      #     y : window Y coordinate
      #--------------------------------------------------------------------------
      def initialize(x, y)
        super(x, y, 240, 116)
        @item = nil
        @req1 = nil
        @req2 = nil
        refresh
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        if @item != nil
          self.contents.font.color = system_color
          self.contents.draw_text(4, 0, 200, WLH, "Requires")
          enabled = ($game_party.item_number(@req1) > 0)
          draw_item_name(@req1, 15, 25, enabled)
          enabled = @req1==@req2 ? ($game_party.item_number(@req2) > 1) : ($game_party.item_number(@req2) > 0)
          draw_item_name(@req2, 15, 52, enabled)
        end
      end
      #--------------------------------------------------------------------------
      # * Set Item
      #--------------------------------------------------------------------------
      def item=(item)
        if @item != item
          @item = item
          type1 = item.s_req_1_type
          id1 = item.s_req_1_id
          case type1
          when 0
            @req1 = $data_items[id1]
          when 1
            @req1 = $data_weapons[id1]
          when 2
            @req1 = $data_armors[id1]
          end
          type2 = item.s_req_2_type
          id2 = item.s_req_2_id
          case type2
          when 0
            @req2 = $data_items[id2]
          when 1
            @req2 = $data_weapons[id2]
          when 2
            @req2 = $data_armors[id2]
          end
          refresh
        end
      end
    end

    #==============================================================================
    # ** Window_SynthStatus2
    #------------------------------------------------------------------------------
    #  This displays how much of an improvement or disadvantage the equipment gives
    #  to the individual actors in the current party. If the selection is an item
    #  rather than equipment, then nothing will happen.
    #==============================================================================

    class Window_SynthStatus2 < Window_Base
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x : window X coordinate
      #     y : window Y coordinate
      #--------------------------------------------------------------------------
      def initialize(x, y)
        super(x, y, 544, 128)
        @item = nil
        refresh
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        if @item != nil
          number = $game_party.item_number(@item)
          for actor in $game_party.members
            #--------------------------------------------------------------------
            # This can be used to center the actor's pictures instead, if it looks
            # awkward with more or less than four actors in a party at one time.
            #--------------------------------------------------------------------
            #o = $game_party.members.size
            #x = ((actor.index+1)*((self.width-32)/o))-(((self.width-32)/o)/2)-48
            x = actor.index*136
            y = 0
            draw_actor_parameter_change(actor, x, y)
          end
        end
      end
      #--------------------------------------------------------------------------
      # * Draw Actor's Current Equipment and Parameters
      #     actor : actor
      #     x     : draw spot x-coordinate
      #     y     : draw spot y-coordinate
      #--------------------------------------------------------------------------
      def draw_actor_parameter_change(actor, x, y)
        return if @item.is_a?(RPG::Item)
        enabled = actor.equippable?(@item)
        draw_actor_face(actor, x, y, size = 96, opacity = enabled ? 255 : 100)
        self.contents.font.color = text_color(15)
        self.contents.font.color.alpha = enabled ? 180 : 60
        self.contents.draw_text(x+2, y+2, 200, WLH, actor.name)
        self.contents.font.color = normal_color
        self.contents.font.color.alpha = enabled ? 255 : 100
        self.contents.draw_text(x, y, 200, WLH, actor.name)
            if @item.is_a?(RPG::Weapon)
          item1 = weaker_weapon(actor)
        elsif actor.two_swords_style and @item.kind == 0
          item1 = nil
        else
          item1 = actor.equips[1 + @item.kind]
        end
        if enabled
          if @item.is_a?(RPG::Weapon)
            atk1 = item1 == nil ? 0 : item1.atk
            atk2 = @item == nil ? 0 : @item.atk
            change = atk2 - atk1
          else
            def1 = item1 == nil ? 0 : item1.def
            def2 = @item == nil ? 0 : @item.def
            change = def2 - def1
          end
          self.contents.font.color = text_color(15)
          self.contents.font.color.alpha = enabled ? 180 : 60
          self.contents.draw_text(x, y + 72, 96, WLH, sprintf("%+d", change), 2)
          if change == 0
            self.contents.font.color = normal_color
          end
          if change > 0
            self.contents.font.color = power_up_color
          end
          if change < 0
            self.contents.font.color = power_down_color
          end
          self.contents.draw_text(x, y + 70, 96, WLH, sprintf("%+d", change), 2)
        end
      end
      #--------------------------------------------------------------------------
      # * Get Weaker Weapon Equipped by the Actor (for dual wielding)
      #     actor : actor
      #--------------------------------------------------------------------------
      def weaker_weapon(actor)
        if actor.two_swords_style
          weapon1 = actor.weapons[0]
          weapon2 = actor.weapons[1]
          if weapon1 == nil or weapon2 == nil
            return nil
          elsif weapon1.atk < weapon2.atk
            return weapon1
          else
            return weapon2
          end
        else
          return actor.weapons[0]
        end
      end
      #--------------------------------------------------------------------------
      # * Set Item
      #     item : new item
      #--------------------------------------------------------------------------
      def item=(item)
        if @item != item
          @item = item
          refresh
        end
      end
    end

    #==============================================================================
    # ** Window_SynthNumber
    #------------------------------------------------------------------------------
    #  This window is for inputting quantity of items to synthesize on the
    # synth screen.
    #==============================================================================

    class Window_SynthNumber < Window_Base
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x : window X coordinate
      #     y : window Y coordinate
      #--------------------------------------------------------------------------
      def initialize(x, y)
        super(x, y, 304, 232)
        @item = nil
        @max = 1
        @price = 0
        @number = 1
        @req1 = nil
        @req2 = nil
      end
      #--------------------------------------------------------------------------
      # * Set Items, Max Quantity, and Price
      #--------------------------------------------------------------------------
      def set(item, max, price)
        @item = item
        @max = max
        @price = item.s_cost
        type1 = item.s_req_1_type
        id1 = item.s_req_1_id
        case type1
        when 0
          @req1 = $data_items[id1]
        when 1
          @req1 = $data_weapons[id1]
        when 2
          @req1 = $data_armors[id1]
        end
        type2 = item.s_req_2_type
        id2 = item.s_req_2_id
        case type2
        when 0
          @req2 = $data_items[id2]
        when 1
          @req2 = $data_weapons[id2]
        when 2
          @req2 = $data_armors[id2]
        end
        @number = 1
        refresh
      end
      #--------------------------------------------------------------------------
      # * Set Inputted Quantity
      #--------------------------------------------------------------------------
      def number
        return @number
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        y = 20
        self.contents.clear
        draw_item_name(@item, 0, y)
        self.contents.font.color = normal_color
        self.contents.draw_text(212, y, 20, WLH, "×")
        self.contents.draw_text(248, y, 20, WLH, @number, 2)
        self.cursor_rect.set(244, y, 28, WLH)
        self.contents.font.color = system_color
        self.contents.draw_text(0, y + (2.5*WLH), 200, WLH, "Requires:")
        self.contents.font.color = normal_color
        draw_item_name(@req1, 10, y + (3.5*WLH))
        self.contents.draw_text(212, y + (3.5*WLH), 20, WLH, "×")
        self.contents.draw_text(248, y + (3.5*WLH), 20, WLH, @number, 2)
        draw_item_name(@req2, 10, y + (4.5*WLH))
        self.contents.draw_text(212, y + (4.5*WLH), 20, WLH, "×")
        self.contents.draw_text(248, y + (4.5*WLH), 20, WLH, @number, 2)
        draw_currency_value(@price * @number, 4, y + (6.5*WLH), 264)
      end
      #--------------------------------------------------------------------------
      # * Frame Update
      #--------------------------------------------------------------------------
      def update
        super
        if self.active
          last_number = @number
          if Input.repeat?(Input::RIGHT) and @number < @max
            @number += 1
          end
          if Input.repeat?(Input::LEFT) and @number > 1
            @number -= 1
          end
          if Input.repeat?(Input::UP) and @number < @max
            @number = [@number + 10, @max].min
          end
          if Input.repeat?(Input::DOWN) and @number > 1
            @number = [@number - 10, 1].max
          end
          if @number != last_number
            Sound.play_cursor
            refresh
          end
        end
      end
    end


    #==============================================================================
    # ** Scene_Synthesis
    #------------------------------------------------------------------------------
    #  This class performs the actual synthesis, much like a shop.
    #==============================================================================

    class Scene_Synthesis < Scene_Base
      #--------------------------------------------------------------------------
      # * Start processing
      #--------------------------------------------------------------------------
      def start
        super
        create_menu_background
        @help_window = Window_Help.new
        @buy_window = Window_SynthBuy.new(0, 56)
        @buy_window.active = true
        @buy_window.visible = true
        @buy_window.help_window = @help_window
        @number_window = Window_SynthNumber.new(0, 56)
        @number_window.active = false
        @number_window.visible = false
        @status1_window = Window_SynthStatus1.new(304, 56)
        @status1_window.item = @buy_window.item
        @status1_window.visible = true
        @status2_window = Window_SynthStatus2.new(0, 288)
        @status2_window.item = @buy_window.item
        @status2_window.visible = true
        @require_window = Window_SynthRequire.new(304, 172)
        @require_window.visible = true
        @require_window.item = @buy_window.item
      end
      #--------------------------------------------------------------------------
      # * Termination Processing
      #--------------------------------------------------------------------------
      def terminate
        super
        dispose_menu_background
        @help_window.dispose
        @buy_window.dispose
        @number_window.dispose
        @status1_window.dispose
        @status2_window.dispose
        @require_window.dispose
      end
      #--------------------------------------------------------------------------
      # * Frame Update
      #--------------------------------------------------------------------------
      def update
        super
        update_menu_background
        @help_window.update
        @buy_window.update
        @number_window.update
        @status1_window.update
        @status2_window.update
        @require_window.update
        if @buy_window.active
          update_buy_selection
        elsif @number_window.active
          update_number_input
        end
      end
      #--------------------------------------------------------------------------
      # * Update Buy Item Selection
      #--------------------------------------------------------------------------
      def update_buy_selection
        @status1_window.item = @buy_window.item
        @status2_window.item = @buy_window.item
        @require_window.item = @buy_window.item
        if Input.trigger?(Input::B)
            Sound.play_decision
            $scene = Scene_Map.new
        end
        if Input.trigger?(Input::C)
          @item = @buy_window.item
          @req1 = @buy_window.req1
          @req2 = @buy_window.req2
          if @req1 == @req2 and $game_party.item_number(@req1) <= 1
            req3 = true
          end
          number = $game_party.item_number(@item)
          if @item == nil or @item.s_cost > $game_party.gold or number == 99 or $game_party.item_number(@req1) == 0 or $game_party.item_number(@req2) == 0 or req3 == true
            Sound.play_buzzer
          else
            Sound.play_decision
            max = @item.s_cost == 0 ? 99 : $game_party.gold / @item.s_cost
            if @req1 != @req2
              if max > $game_party.item_number(@req1) or max > $game_party.item_number(@req2)
                max = $game_party.item_number(@req1) <= $game_party.item_number(@req2) ? $game_party.item_number(@req1) : $game_party.item_number(@req2)
              end
            else
              if max > ($game_party.item_number(@req1)/2)
                max = ($game_party.item_number(@req1)/2)
              end
            end
            max = [max, 99 - number].min
            @buy_window.active = false
            @buy_window.visible = false
            @number_window.set(@item, max, @item.s_cost)
            @number_window.active = true
            @number_window.visible = true
          end
        end
      end
      #--------------------------------------------------------------------------
      # * Update Number Input
      #--------------------------------------------------------------------------
      def update_number_input
        if Input.trigger?(Input::B)
          cancel_number_input
        elsif Input.trigger?(Input::C)
          decide_number_input
        end
      end
      #--------------------------------------------------------------------------
      # * Cancel Number Input
      #--------------------------------------------------------------------------
      def cancel_number_input
        Sound.play_cancel
        @number_window.active = false
        @number_window.visible = false
        @buy_window.active = true
        @buy_window.visible = true
      end
      #--------------------------------------------------------------------------
      # * Confirm Number Input
      #--------------------------------------------------------------------------
      def decide_number_input
        Sound.play_shop
        @number_window.active = false
        @number_window.visible = false
        $game_party.lose_gold(@number_window.number * @item.s_cost)
        $game_party.gain_item(@item, @number_window.number)
        $game_party.lose_item(@req1, @number_window.number)
        $game_party.lose_item(@req2, @number_window.number)
        @buy_window.refresh
        @status1_window.refresh
        @status2_window.refresh
        @require_window.refresh
        @buy_window.active = true
        @buy_window.visible = true
      end
    end

    Credit


    • Zylos

    Thanks

    • dartdaman, for requesting this.
    • Final Fantasy IX...? Sure, thanks Square.

    Known Issues

    I'll be honest, I have absolutely no idea if this will work with any of the other custom item scripts. It should work for most scripts save for things like MA's Grid Inventory script, I imagine, but let me know if you find something it doesn't work with that it should.

    Demo


    See Attached.

    Author's Notes


    Yes, I'm perfectly aware that there are other (and probably better) synthesis scripts out there. However, I made this anyways for two reasons. One, I wanted something as close as possible to the system they had in Final Fantasy IX, and two, I just wanted to see if I had learned enough to make a full custom script on my own. I think I succeeded, so yay me.
    « Last Edit: February 26, 2011, 04:29:23 AM by Zylos »
    Grafikal Male
    ********
    Resource Artist
    Rep: +190/-136
    Offline Offline
    Level 92 (64%)
    \\\\\
    Project of the Month winner for June 2009
    Re: Synthesis Shop (VX)
    « Reply #1 on: February 26, 2011, 04:11:56 AM »

  • yay Zylos :D
    Bravo2Kilo Male
    **
    Rep: +0/-0
    Offline Offline
    Level 68 (21%)
    Contestant - GIAW 9
    Re: Synthesis Shop (VX)
    « Reply #2 on: February 26, 2011, 02:40:02 PM »

  • awesome Zylos
    thanks alot
    I have a blog now where I will be posting my scripts that I create.

    My Favorite Animes:
        1. Full Metal Panic (all 3 seasons)
        2. Dragonaut the Resonance
        3. The Legend of the Legendary Heroes
        4. Spice and Wolf
        5. Rosario + Vampire
    modern algebra Male
    *
    Rep: +782/-121
    Offline Offline
    Level 95 (46%)
    2012 Favorite Staff Member2012 Most Mature Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best RPG Maker User (Scripting)2011 Best Veteran2011 Favourite Staff Member2011 Most Mature Member2011 Best Use of Avatar and Signature Space2010 Favourite Staff Member2010 Most Mature Member2010 Best RPG Maker User (Scripting)2010 Best Use Of Avatar And Signature Space
    Re: Synthesis Shop (VX)
    « Reply #3 on: February 28, 2011, 01:25:39 AM »

  • Nice Zylos. A great first script!
    fenicearcana
    **
    Rep: +0/-0
    Offline Offline
    Level 60 (65%)
    RMRK Junior
    Re: Synthesis Shop (VX)
    « Reply #4 on: September 16, 2011, 06:19:02 PM »

  • Hello Zylos, nice script! ^^ i've tested it with my  game and its gret.
    My only wonder is a little question, if you mind to answer ^^

    You can set 2 different item to forge one.
    It is possible to set also an item 3,4 and so on, to use more item to forge just one synthetis object?
    Something like, to say, 10 iron ore to get a broad sword?
    It is? And if it is possible, how? ^^
    Thanks for your time, grat job!
    Pages: [1]
     

    hi

    RMRK.net Theme Super Ultra Mega Beta

    Follow RMRK on Twitter Ask RMRK Questions on Formspring Get RMRK Updates via Windows Live

    Page created in 0.283 seconds with 24 queries.