Плохо! Плохо!:  0
Показано с 1 по 6 из 6

Тема: Помогите c выбором бойцов

  1. #1
    Пользователь Аватар для Devillion
    Информация о пользователе
    Регистрация
    05.11.2009
    Сообщений
    85
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию Помогите c выбором бойцов

    Прошу помочь мне с реализацией элементов,а именно:

    - Ограничение максимального количества бойцов до 3
    - Создании пункта меню где есть список бойцов (ограниченное 20-30,что то вроде статуса,только в отдельном окне)
    - Создание пункта меню возможность выбора конкретных героев для боя(в таком же стиле)

    Заранее спасибо
    Последний раз редактировалось Arnon; 18.07.2012 в 13:42.



  2. #2

    По умолчанию

    Лучше назвать тему конкретно, а не "кое в чем", переименовываю.

    По вопросу: к скриптам.

    Вот например что первое попалось на глаза:

    Этот скрипт позволяет выбирать героев в партии. Позволяет быть 1-4 героям в партии и бесконечному количеству запасных героев.

    Код:
    #===================================
    #  Party Changing System by Leon_Westbrooke
    #   -v 1.2
    #----------------------------------------------------------------------
    #  Instructions:  Place above main, but below all other default scripts.
    #  
    #  Features:  
    #    -Allows the player to make a party from the minimum to maximum size.
    #    -Extra members are limitless.
    #    -You can remove a person from the party and put it into reserve using:
    #          $game_party.remove_actor_to_party(actor_id)
    #    -You can remove a person from the reserve if they exist, and them into
    #        the party:
    #          $game_party.add_actor_to_party(actor_id)
    #    -You can lock a character in reserve or active party by using:
    #          $game_party.locked.push(actor_id)
    #    -You can set the maximum and minimum number of the party in-game using:
    #          $game_party.min_size = x
    #          $game_party.max_size = x
    #          (NOTE: Do NOT make the max size lower than the minimum size.)
    #    -Allows you to use the default add/remove actors command.
    #          (NOTE: If you remove an actor with this method, he is gone from both
    #                         the party and the reserve members.)
    #
    #  Credits:
    #    This setup uses SephirothSpawn's coding to simplify the cursor's position.
    #
    #
    #  Command Quick-list:
    #    $game_party.remove_actor_from_party(actor_id)
    #         -Removes an actor from the party, and puts them in reserve.
    #    $game_party.add_actor_to_party(actor_id)
    #         -Replaces the last actor in the party with the actor in reserve.
    #    $game_party.locked.push(actor_id)
    #         -Locks the actor in place.
    #    $game_party.min_size = x
    #    $game_party.max_size = x
    #         -Sets the minimum and maximum party size.
    #
    #
    #  Notes:
    #    This script rewrites these methods from Game_Party:
    #         add_actor
    #         remove_actor
    #===================================
    
    #==================================================
    #  Game_Party
    #==================================================
    class Game_Party
    
      attr_accessor :party_members
      attr_accessor :move
      attr_accessor :locked
      attr_accessor :min_size
      attr_accessor :max_size
     
      alias leon_partyswitch_gameactor_initialize initialize
    
      def initialize
        leon_partyswitch_gameactor_initialize
        @party_members = []
        #  Edit :This is to change if an actor is locked or not. To lock them, add
        #       their id to the array below.
        @locked = [1]
        @min_size = 1
        @max_size = 4
      end
     
     
      def add_actor(actor_id)
        actor = $game_actors[actor_id]
        if @actors.size < @max_size
              unless @actors.include?(actor)
                unless @party_members.include?(actor.id)
                      @actors.push(actor)
                      $game_player.refresh
                end
              end
        else
              unless @party_members.include?(actor.id)
                unless @actors.include?(actor)
                      @party_members.push(actor.id)
                      $game_player.refresh
                end
              end
        end
      end
     
      def remove_actor(actor_id)
        @actors.delete($game_actors[actor_id])
        @party_members.delete(actor_id)
        $game_player.refresh
      end
     
      def remove_actor_from_party(actor_id)
        if @actors.include?($game_actors[actor_id])
              unless @party_members.include?(actor_id)
                @party_members.push(actor_id)
                @party_members.sort!
              end
        end
                @actors.delete($game_actors[actor_id])
        $game_player.refresh
      end
    
      def add_actor_to_party(actor_id)
        if @party_members.include?(actor_id)
              if @actors[@max_size - 1] != nil
                @party_members.push(@actors[@max_size - 1].id)
                @actors.delete_at(@max_size - 1)
              end
              @actors.push($game_actors[actor_id])
              @party_members.delete(actor_id)
        end
      end
    end
    #==================================================
    #  END Game_Party
    #==================================================
    
    #==============================================================================
    # ** Window_Selectable
    #==============================================================================
    class Window_Selectable < Window_Base
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_accessor :cursor_height
      #--------------------------------------------------------------------------
      # * Alias Initialization
      #--------------------------------------------------------------------------
      alias custom_int initialize
      #--------------------------------------------------------------------------
      # * Object Initialization
      #--------------------------------------------------------------------------
      def initialize(x, y, width, height)
        custom_int(x, y, width, height)
        @cursor_height = 32
      end
      #--------------------------------------------------------------------------
      # * Get Top Row
      #--------------------------------------------------------------------------
      def top_row
        # Divide y-coordinate of window contents transfer origin by 1 row
        # height of @cursor_height
        return self.oy / @cursor_height
      end
      #--------------------------------------------------------------------------
      # * Set Top Row
      # row : row shown on top
      #--------------------------------------------------------------------------
      def top_row=(row)
        # If row is less than 0, change it to 0
        if row < 0
              row = 0
        end
        # If row exceeds row_max - 1, change it to row_max - 1
        if row > row_max - 1
              row = row_max - 1
        end
        # Multiply 1 row height by 32 for y-coordinate of window contents
        # transfer origin
        self.oy = row * @cursor_height
      end
      #--------------------------------------------------------------------------
      # * Get Number of Rows Displayable on 1 Page
      #--------------------------------------------------------------------------
      def page_row_max
        # Subtract a frame height of 32 from the window height, and divide it by
        # 1 row height of @cursor_height
        return (self.height - 32) / @cursor_height
      end
      #--------------------------------------------------------------------------
      # * Update Cursor Rectangle
      #--------------------------------------------------------------------------
      def update_cursor_rect
        # If cursor position is less than 0
        if @index < 0
              self.cursor_rect.empty
              return
        end
        # Get current row
        row = @index / @column_max
        # If current row is before top row
        if row < self.top_row
              # Scroll so that current row becomes top row
              self.top_row = row
        end
        # If current row is more to back than back row
        if row > self.top_row + (self.page_row_max - 1)
              # Scroll so that current row becomes back row
              self.top_row = row - (self.page_row_max - 1)
        end
        # Calculate cursor width
        cursor_width = self.width / @column_max - 32
        # Calculate cursor coordinates
        x = @index % @column_max * (cursor_width + 32)
        y = @index / @column_max * @cursor_height - self.oy
        if self.active == true
              # Update cursor rectangle
              self.cursor_rect.set(x, y, cursor_width, @cursor_height)
        end
      end
    end
    
    #==============================================================================
    # ** Window_Command
    #==============================================================================
    class Window_Command < Window_Selectable
      #--------------------------------------------------------------------------
      # * Unisable Item
      # index : item number
      #--------------------------------------------------------------------------
      def undisable_item(index)
        draw_item(index, normal_color)
      end
    end
    #============================================================
    
    
    #==================================================
    #  Window_Party_Info
    #==================================================
    class Window_Party_Info < Window_Base
      def initialize
        super(0, 0, 640, 64)
        self.contents = Bitmap.new(width - 32, height - 32)
        refresh
      end
    
      def refresh
        self.contents.clear
        self.contents.draw_text(0, 0, 614, 32, "Please make a party of #{$game_party.min_size.to_s} to #{$game_party.max_size.to_s} members.", 1)
      end
    end
    #==================================================
    #  END Window_Party_Info
    #==================================================
    
    
    #==================================================
    #  Window_Party_Slots
    #==================================================
    class Window_Party_Slots < Window_Selectable
    
      def initialize
        super(0, 64, 320, 416)
        @item_max = 4
        self.contents = Bitmap.new(width - 32, height - 32)
        self.index = 0
        self.active = true
        refresh
      end
     
      def actors
        if @data[index] != nil
              return @data[index]
        end
      end
    
      def refresh
        @data = []
        if self.contents != nil
              self.contents.dispose
              self.contents = nil
        end
        for i in 0...$game_party.actors.size
              @data.push($game_party.actors[i])
        end
        @item_max = (@data.size + 1)
        if @item_max > 0
              if @item_max > 4
                @item_max = 4
              end
              self.contents = Bitmap.new(width - 32, row_max * 96)
              for i in 0...@item_max
                draw_item(i)
              end
        end
      end
     
      def draw_item(index)
        @actor = @data[index]
        y = index * 96
        x = 4
        if $game_party.locked.include?(@actor.id)
              self.contents.font.color = disabled_color
              opacity = 128
        else
              self.contents.font.color = normal_color
              opacity = 255
        end
        if @actor != nil
              self.contents.draw_text(x + 100, y, 192, 32, @actor.name)
              draw_actor_hp(@actor, x + 100, y + 32)
              draw_actor_sp(@actor, x + 100, y + 64)
              bitmap = RPG::Cache.character(@actor.character_name, @actor.character_hue)
              cw = bitmap.width / 4
              ch = bitmap.height / 4
              facing = 0
              src_rect = Rect.new(0, facing * ch, cw, ch)
              self.contents.blt(x + 24, y + 32, bitmap, src_rect, opacity)
        end
      end
     
      def update_cursor_rect
        if @index > -1
              x = 0
              y = index * 96
              self.cursor_rect.set(x, y, (self.width - 32), 96)
        else
              self.cursor_rect.empty
        end
      end
     
    end
    #==================================================
    #  END Window_Party_Slots
    #==================================================
    
    
    #==================================================
    #  Window_Party_Extras
    #==================================================
    class Window_Party_Extras < Window_Selectable
      def initialize
        super(320, 64, 320, 416)
        self.cursor_height = 96
        self.contents = Bitmap.new(width - 32, height - 32)
        self.index = -1
        self.active = false
        refresh
      end
     
      def actors
        if @data != nil
              return @data[index]
        end
      end
    
      def refresh
        if self.contents != nil
              self.contents.dispose
              self.contents = nil
        end
        @data = []
        for i in 0...$game_party.party_members.size
              @data.push($game_actors[$game_party.party_members[i]])
        end
        @data.push(nil)
        @item_max = @data.size
        if @item_max > 0
              self.contents = Bitmap.new(width - 32, row_max * 96)
              for i in 0...@item_max
                draw_item(i)
              end
        end
      end
     
      def draw_item(index)
        @actor = @data[index]
        y = index * 96
        x = 4
        if $game_party.locked.include?(@actor.id)
              self.contents.font.color = disabled_color
              opacity = 128
        else
              self.contents.font.color = normal_color
              opacity = 255
        end
        if @actor != nil
              self.contents.draw_text(x + 100, y, 192, 32, @actor.name)
              draw_actor_hp(@actor, x + 100, y + 32)
              draw_actor_sp(@actor, x + 100, y + 64)
              bitmap = RPG::Cache.character(@actor.character_name, @actor.character_hue)
              cw = bitmap.width / 4
              ch = bitmap.height / 4
              facing = 0
              src_rect = Rect.new(0, facing * ch, cw, ch)
              self.contents.blt(x + 24, y + 32, bitmap, src_rect, opacity)
        end
      end
     
    end
    #===================================
    #  END Window_Party_Extras
    #===================================
    
    
    #===================================
    #  Scene_Party_Change
    #===================================
    class Scene_Party_Change
      def main
        
        @info_window = Window_Party_Info.new
        @slot_window = Window_Party_Slots.new
        @extra_window = Window_Party_Extras.new
        
        Graphics.transition
        loop do
              Graphics.update
              Input.update
              update
              if $scene != self
                break
              end
        end
        Graphics.freeze
        
        @info_window.dispose
        @slot_window.dispose
        @extra_window.dispose
      end
     
      def update
        @slot_window.update
        
        if @slot_window.active
              update_slot
              return
        end
        
        if @extra_window.active
              update_extra
              return
        end
      end
     
      def update_slot
        if Input.trigger?(Input::B)
              if $game_party.actors.size >= $game_party.min_size and $game_party.actors.size <= $game_party.max_size
                $game_player.refresh
                $game_system.se_play($data_system.cancel_se)
                $scene = Scene_Map.new
              else
                $game_system.se_play($data_system.buzzer_se)
              end
        end
        
        if Input.trigger?(Input::C)
              if $game_party.locked.include?(@slot_window.actors.id) == true
                $game_system.se_play($data_system.buzzer_se)
              else
                $game_system.se_play($data_system.decision_se)
                @slot_window.active = false
                @extra_window.active = true
                @extra_window.index = 0
              end
        end
      end
     
      def update_extra
        @extra_window.update
        if Input.trigger?(Input::B)
              $game_system.se_play($data_system.cancel_se)
              @slot_window.active = true
              @extra_window.active = false
              @extra_window.index = -1
        end
        
        if Input.trigger?(Input::C)
              $game_system.se_play($data_system.decision_se)
              if $game_party.locked.include?(@extra_window.actors.id)
                $game_system.se_play($data_system.buzzer_se)
                return
              end
              if @extra_window.actors == nil
                if $game_party.actors[@slot_window.index] != nil
                      $game_party.party_members.push($game_party.actors[@slot_window.index].id)
                      $game_party.remove_actor_from_party($game_party.actors[@slot_window.index].id)
                      $game_party.party_members.sort!
                      @slot_window.refresh
                      @extra_window.refresh
                      @slot_window.active = true
                      @extra_window.active = false
                      @extra_window.index = -1
                else
                      @slot_window.active = true
                      @extra_window.active = false
                      @extra_window.index = -1
                end
              else
                if $game_party.actors[@slot_window.index] != nil
                      hold = @extra_window.actors
                      $game_party.party_members.push($game_party.actors[@slot_window.index].id)
                      $game_party.actors[@slot_window.index] = hold
                      $game_party.party_members.delete_at(@extra_window.index)
                      $game_party.party_members.sort!
                      @slot_window.refresh
                      @extra_window.refresh
                      @slot_window.active = true
                      @extra_window.active = false
                      @extra_window.index = -1
                else
                      $game_party.actors[@slot_window.index] = @extra_window.actors
                      $game_party.party_members.delete_at(@extra_window.index)
                      $game_party.party_members.sort!
                      @slot_window.refresh
                      @extra_window.refresh
                      @slot_window.active = true
                      @extra_window.active = false
                      @extra_window.index = -1
                end
              end
        end
      end
     
    end

    Вызов экрана с выбором героев:

    Код:
    $scene = Scene_Party_Change.new


    Dropbox — бесплатное хранилище файлов с прямыми ссылками.

    Humble Bundle — игры, подборки и наборы со скидками.

  3. #3
    Местный Аватар для SethNsk
    Информация о пользователе
    Регистрация
    25.03.2010
    Сообщений
    243
    Записей в дневнике
    7
    Репутация: 12 Добавить или отнять репутацию

    По умолчанию

    А говорили экстрасенсов нет!.. Человеку даже мейкер указывать не пришлось.

  4. #4
    Пользователь Аватар для Devillion
    Информация о пользователе
    Регистрация
    05.11.2009
    Сообщений
    85
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Близко,но немного не то.
    Я имел ввиду,чтобы эти пункты были в меню и выглядели примерно так:

    Untitled-1.jpg

    А в пункте герои в списке героев при нажатии выходил их статус



  5. #5

    По умолчанию

    Создай новую категорию в скриптах или замени Scene_Menu.
    Увы проверить работает ли оно нет возможности, так что придётся самому.

    Код:
    #==============================================================================
    # ** Scene_Menu
    #------------------------------------------------------------------------------
    # This class performs menu screen processing.
    #==============================================================================
    
    class Scene_Menu
     #--------------------------------------------------------------------------
     # * Object Initialization
     # menu_index : command cursor's initial position
     #--------------------------------------------------------------------------
     def initialize(menu_index = 0)
     @menu_index = menu_index
     end
     #--------------------------------------------------------------------------
     # * Main Processing
     #--------------------------------------------------------------------------
     def main
     # Make command window
     s1 = $data_system.words.item
     s2 = $data_system.words.skill
     s3 = $data_system.words.equip
     s4 = "Статус"
     s5 = "Сохранить"
     s6 = "Выйти"
     s7 = "Партия"
     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,s7])
     @command_window.index = @menu_index
     # If number of party members is 0
     if $game_party.actors.size == 0
     # Disable items, skills, equipment, and status
     @command_window.disable_item(0)
     @command_window.disable_item(1)
     @command_window.disable_item(2)
     @command_window.disable_item(3)
     end
     # If save is forbidden
     if $game_system.save_disabled
     # Disable save
     @command_window.disable_item(4)
     end
     # Make steps window
     @steps_window = Window_Steps.new
     @steps_window.x = 0
     @steps_window.y = 320
     # Make gold window
     @gold_window = Window_Gold.new
     @gold_window.x = 0
     @gold_window.y = 416
     # Make status window
     @status_window = Window_MenuStatus.new
     @status_window.x = 160
     @status_window.y = 0
     # Execute transition
     Graphics.transition
     # Main loop
     loop do
     # Update game screen
     Graphics.update
     # Update input information
     Input.update
     # Frame update
     update
     # Abort loop if screen is changed
     if $scene != self
     break
     end
     end
     # Prepare for transition
     Graphics.freeze
     # Dispose of windows
     @command_window.dispose
    
     @steps_window.dispose
     @gold_window.dispose
     @status_window.dispose
     end
     #--------------------------------------------------------------------------
     # * Frame Update
     #--------------------------------------------------------------------------
     def update
     # Update windows
     @command_window.update
    
     @steps_window.update
     @gold_window.update
     @status_window.update
     # If command window is active: call update_command
     if @command_window.active
     update_command
     return
     end
     # If status window is active: call update_status
     if @status_window.active
     update_status
     return
     end
     end
     #--------------------------------------------------------------------------
     # * Frame Update (when command window is active)
     #--------------------------------------------------------------------------
     def update_command
     # If B button was pressed
     if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to map screen
     $scene = Scene_Map.new
     return
     end
     # If C button was pressed
     if Input.trigger?(Input::C)
     # If command other than save or end game, and party members = 0
     if $game_party.actors.size == 0 and @command_window.index < 4
     # Play buzzer SE
     $game_system.se_play($data_system.buzzer_se)
     return
     end
     # Branch by command window cursor position
     case @command_window.index
     when 0 # item
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Switch to item screen
     $scene = Scene_Item.new
     when 1 # skill
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Make status window active
     @command_window.active = false
     @status_window.active = true
     @status_window.index = 0
     when 2 # equipment
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Make status window active
     @command_window.active = false
     @status_window.active = true
     @status_window.index = 0
     when 3 # status
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Make status window active
     @command_window.active = false
     @status_window.active = true
     @status_window.index = 0
     when 4 # save
     # If saving is forbidden
     if $game_system.save_disabled
     # Play buzzer SE
     $game_system.se_play($data_system.buzzer_se)
     return
     end
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Switch to save screen
     $scene = Scene_Save.new
     when 5 # end game
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Switch to end game screen
     $scene = Scene_End.new
     return
     when 6 # party
     $game_system.se_play($sata_system.decision_se)
     #Switch to party screen
     $scene = Scene_Party_Change.new
     end
     return
     end
     end
     #--------------------------------------------------------------------------
     # * Frame Update (when status window is active)
     #--------------------------------------------------------------------------
     def update_status
     # If B button was pressed
     if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Make command window active
     @command_window.active = true
     @status_window.active = false
     @status_window.index = -1
     return
     end
     # If C button was pressed
     if Input.trigger?(Input::C)
     # Branch by command window cursor position
     case @command_window.index
     when 1 # skill
     # If this actor's action limit is 2 or more
     if $game_party.actors[@status_window.index].restriction >= 2
     # Play buzzer SE
     $game_system.se_play($data_system.buzzer_se)
     return
     end
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Switch to skill screen
     $scene = Scene_Skill.new(@status_window.index)
     when 2 # equipment
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Switch to equipment screen
     $scene = Scene_Equip.new(@status_window.index)
     when 3 # status
     # Play decision SE
     $game_system.se_play($data_system.decision_se)
     # Switch to status screen
     $scene = Scene_Status.new(@status_window.index)
     end
     return
     end
     end
    end


    Dropbox — бесплатное хранилище файлов с прямыми ссылками.

    Humble Bundle — игры, подборки и наборы со скидками.

  6. #6
    Пользователь Аватар для Devillion
    Информация о пользователе
    Регистрация
    05.11.2009
    Сообщений
    85
    Репутация: 1 Добавить или отнять репутацию

    По умолчанию

    Попробовал, не работает,но мысли кое-какие появились....



Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Помогите c выбором бойцов