Drop Global! NP Master

    Compartilhe
    avatar
    jiraya
    Administrador
    Administrador

    Mensagens : 1299
    Credibilidade : 54

    Drop Global! NP Master

    Mensagem por jiraya em Seg Abr 16, 2012 9:10 pm

    Tópico criado por RD12 todos os creditos a ele .
    RD12 escreveu:Primeiramente, só irei postar por que a Emily disse que o Félix irá fazer para ela um. E por que quero ganhar o concurso Melhor Scripter xD.

    [Você precisa estar registrado e conectado para ver esta imagem.]
    NP Master - RD12
    Sistema que permite que você jogo Itens no chão e para outros jogadores pegarem, Já está Global, mas em fases de testes.

    Usa os Script SephirothSpawn, ele cria eventos em Run time(tempo de execução)
    Eu fiz ele Ontem, e já vou postar aqui por causa do concurso, mas ainda irei editar mais ele, pois pode dar esse bug:

    Você joga um drop fora, aí cria um evento de ID=5, aí um cara entra no jogo, e vc joga outro Drop fora, e cria um Evento de ID=6 pra você, mas pro Cara cria de ID=5, aí ele irá deletar outro evento.. Mas isso irei corrigir. Irei fazer para criar o mesmo ID, mesmo não existindo o ID=5, irá criar o ID=6.
    Espero que vocês usem, nada no NP é perfeito Né.

    [Você precisa estar registrado e conectado para ver esta imagem.]
    Usei o Wof pra fazer o sistema. Não tinha cópia do Netplay e tavo sem net na hora, espero que a emily não ache rui...

    Spoiler:
    Você puxa o Item até a mãozinha, to puxando um cutelo.
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Aí você solta '-', e o item aparece no chão para todos.
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Soltando vários itens :P
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Aí eu peguei uns itens, e você pode por para não poder soltar uns itens.(Veja Chat)
    [Você precisa estar registrado e conectado para ver esta imagem.]

    [Você precisa estar registrado e conectado para ver esta imagem.]

    Scripts + Tutorial.

    Vamos começar do Simples, abra seu Netplay Master, procure o script Interpreter 3, Vá na linha 357, procure por $game_map.events[@event_id].erase, em baixo dessa linha, coloque esse script:
    Código:
          @mapp = $game_map.map_id
          Network::Main.socket.send("<23>eventdel(#{@event_id},#{@mapp})</23>\n")
    Isso fará que quando o evento ser deletado, será deletado para todos. Não é só isso, é só o começo pra deletar..

    Agora crie um Novo Script em cima do [Main] Netplay, dê o nome de Drop Global, e cole esse script:

    Código:
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    #|Drop Global|      | Parte do Script de Drop Global          |
    #|Autor: RD12|      | É necessário adicionar alguns scripts    |
    #|Versão: 1.0|      | Em [WIN]Window_Equip & Interpreter 3    |
    #|_____________________________________________________________|
    #|      Necessário o script Event Spawner - SephirothSpawn    |
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

    class Game_Character
      attr_accessor    :opacity
    end

    module Itens_Undropables
    ITENS = [33,34] #Itens que não podem ser dropados(33 = moeda)
    end

    #Cria o Drop com os dados recebidos.
    def drop(x, y, id, map, nome, tipo)
     if map == $game_map.map_id
     Event_Spawner.create_event(x, y, '#{nome}')
     Event_Spawner.add_event_command(108, ["Name #{nome}"])
     #Gráfico do Drop, Modifique "Item 5" pelo seu gráfico.
     Event_Spawner.set_page_graphic({'c_name' => 'Item 5'})#Item 5
     Event_Spawner.add_event_command(355, ["$game_temp.chat_log.push('Você pegou 1 #{nome}')"])
     Event_Spawner.add_event_command(355, ["$game_party.gain_#{tipo}(#{id},1)"])
     Event_Spawner.add_event_command(116, [])
     Event_Spawner.end_event
     end
    end

    #Se alguém pegar o Drop, Deletar Para todos
    def eventdel(id, map)
    #Verifica se o evento que será apagado existe, Se não o dará erro.
    #Pois um player pode criar varios eventos e depois outro entrar no jogo, aí os IDs serão diferentes.
        for event in $game_map.events.values
          next if event = id
        if event = id
      if map == $game_map.map_id
      $game_map.events[id].erase #Apaga o Evento Drop.
        end
    end
    end
    end
     
     

    Agora crie um script com o nome Sephiroth Spawner em cima do main, ele criará os eventos que serão os drops.

    Código:
    #==============================================================================
    # ** Event Spawner
    #------------------------------------------------------------------------------
    # SephirothSpawn
    # Version 2
    # 2006-12-09
    #------------------------------------------------------------------------------
    #==============================================================================

    #------------------------------------------------------------------------------
    # * SDK Log Script
    #------------------------------------------------------------------------------
    SDK.log('Event Spawner', 'SephirothSpawn', 2, '2006-12-09')

    #------------------------------------------------------------------------------
    # * Begin SDK Enable Test
    #------------------------------------------------------------------------------
    if SDK.state('Event Spawner') == true

    #==============================================================================
    # ** Event_Spawner
    #==============================================================================

    module Event_Spawner
     
      #============================================================================
      # ** Presets
      #============================================================================
     
      module Presets
        #------------------------------------------------------------------------
        # * Sample Event A
        #
        #  Event Basics:  x = 0, y = 0, name = Sample Event A
        #  Event Graphics: character_name = 002-Fighter02
        #  Event Command: Show Message = 'I am a spawned event'
        #  End Event (Save unless Save Passed as false)
        #------------------------------------------------------------------------
        def self.sample_event_a(x = 0, y = 0, save = true)
          Event_Spawner.create_event(x, y, 'Sample Event A')
          Event_Spawner.set_page_graphic({'c_name' => '002-Fighter02'})
          Event_Spawner.add_event_command(101, ['I am a spawned event'])
          Event_Spawner.end_event(save)
        end
        #------------------------------------------------------------------------
        # * Clone Event A
        #
        #  Original Event: event_id = 1
        #  Event Basics:  x = 0, y = 1, name = Clone Event A
        #  End Event Automatically (No Save)
        #------------------------------------------------------------------------
        def self.clone_event_a(event_id = 1, x = 0, y = 1)
          Event_Spawner.clone_event(event_id, x, y, 'Clone Event A', true)
        end
      end
     
      #--------------------------------------------------------------------------
      # * Create Event
      #--------------------------------------------------------------------------
      def self.create_event(x = 0, y = 0, name = '', flag = 0)
        # Creates New Event
        @event = RPG::Event.new(x, y)
        @event.name = name
    #    @event.event_item_flag = flag
        # Generates ID
        id = 1
        id += 1 while $game_map.events.keys.include?(id)
        id += 1 while self.saved_events($game_map.map_id).keys.include?(id)
        @event.id = id
      end
      #--------------------------------------------------------------------------
      # * Add Event Command (See Script Heading for Event Command Details)
      #--------------------------------------------------------------------------
      def self.add_event_command(code, parameters = [], indent = 0)
        # Creates New Event Command
        event_command = RPG::EventCommand.new
        # Sets Code, Parameters & Indent
        event_command.code = code
        event_command.parameters = parameters
        event_command.indent = indent
        # Adds Event Command To Page List
        self.get_current_page.list.insert(-2, event_command)
      end
      #--------------------------------------------------------------------------
      # * Set Page Condition
      #
      #  'switch1'    => switch_id
      #  'switch2'    => switch_id
      #  'selfswitch' => 'A', 'B', 'C' or 'D'
      #  'variable'  => [variable_id, value]
      #--------------------------------------------------------------------------
      def self.set_page_condition(parameters = {})
        # Gets Last Page Condition Settings
        page_c = self.get_current_page.condition
        # If 'switch1' Found
        if parameters.has_key?('switch1')
          # Turns Switch 1 On & Sets ID
          page_c.switch1_valid = true
          page_c.switch1_id    = parameters['switch1']
        end
        # If 'switch2' Found
        if parameters.has_key?('switch2')
          # Turns Switch 2 On & Sets ID
          page_c.switch2_valid = true
          page_c.switch2_id    = parameters['switch1']
        end
        # If 'selfswitch' Found
        if parameters.has_key?('selfswitch')
          # Turns Self Switch ON & Sets Switch Variable
          page_c.self_switch_valid = true
          page_c.self_switch_ch    = parameters['selfswitch']
        end
        # If 'variable' Found
        if parameters.has_key?('variable')
          # Turns Variable On, Sets Variable ID & Sets Value
          page_c.variable_valid = true
          page_c.variable_id    = parameters['variable'][0]
          page_c.variable_value = parameters['variable'][1]
        end
      end
      #--------------------------------------------------------------------------
      # * Set Page Graphic
      #
      #  'tileid'  => id
      #  'c_name'  => 'character_filename'
      #  'c_hue'  => 0..360
      #  'dir'    => 2 : Down, 4 : Left, 6 : Right, 8 : Up
      #  'pattern' => 0..3
      #  'opacity' => 0..255
      #  'blend'  => 0 : Normal, 1 : Addition, 2 : Subtraction
      #--------------------------------------------------------------------------
      def self.set_page_graphic(parameters = {})
        # Gets Last Page Graphic Settings
        page_g = self.get_current_page.graphic
        # Tile ID
        if parameters.has_key?('tileid')
          page_g.tile_id = parameters['tileid']
        end
        # Character Name
        if parameters.has_key?('c_name')
          page_g.character_name = parameters['c_name']
        end
        # Character Hue
        if parameters.has_key?('c_hue')
          page_g.character_hue = parameters['c_hue']
        end
        # Direction
        if parameters.has_key?('dir')
          page_g.direction = parameters['dir']
        end
        # Pattern
        if parameters.has_key?('pattern')
          page_g.pattern = parameters['pattern']
        end
        # Opacity
        if parameters.has_key?('opacity')
          page_g.opacity = parameters['opacity']
        end
        # Blend Type
        if parameters.has_key?('blend')
          page_g.blend_type = parameters['blend']
        end
      end
      #--------------------------------------------------------------------------
      # * Set Page Trigger
      #
      #  0 - Action Button
      #  1 - Contact With Player
      #  2 - Contact With Event
      #  3 - Autorun
      #  4 - Parallel Processing
      #--------------------------------------------------------------------------
      def self.set_page_trigger(trigger = 0)
        # Sets Last Page Trigger
        self.get_current_page.trigger = trigger
      end
      #--------------------------------------------------------------------------
      # * Set Page Move Settings
      #
      #  'type'  => 0 : fixed, 1 : random, 2 : approach, 3 : custom).
      #  'speed' => 1 : slowest ... 6 : fastest
      #  'freq'  => 1 : lowest  ... 6 : highest
      #  'route' => RPG::MoveRoute (See Generate Move Route)
      #--------------------------------------------------------------------------
      def self.set_page_move_settings(parameters = {})
        # Gets Last Page
        page = self.get_current_page
        # Type
        if parameters.has_key?('type')
          page.move_type = parameters['type']
        end
        # Speed
        if parameters.has_key?('speed')
          page.move_speed = parameters['speed']
        end
        # Frequency
        if parameters.has_key?('freq')
          page.move_frequency = parameters['freq']
        end
        # Route
        if parameters.has_key?('route')
          if parameters['route'].is_a?(RPG::MoveRoute)
            page.move_route = parameters['route']
          end
        end
      end
      #--------------------------------------------------------------------------
      # * Set Page Options
      #
      #  'walk_anime'    => true or false
      #  'step_anime'    => true or false
      #  'direction_fix' => true or false
      #  'through'      => true or false
      #  'always_on_top' => true or false
      #--------------------------------------------------------------------------
      def self.set_page_options(parameters = {})
        # Gets Last Page
        page = self.get_current_page.graphic
        # Walk Animation
        if parameters.has_key?('walk_anime')
          page.walk_anime = parameters['walk_anime']
        end
        # Step Animation
        if parameters.has_key?('step_anime')
          page.step_anime = parameters['step_anime']
        end
        # Direction Fix
        if parameters.has_key?('direction_fix')
          page.direction_fix = parameters['direction_fix']
        end
        # Through
        if parameters.has_key?('through')
          page.through = parameters['through']
        end
        # Always On Top
        if parameters.has_key?('always_on_top')
          page.always_on_top = parameters['always_on_top']
        end
      end
      #--------------------------------------------------------------------------
      # * Add New Page
      #--------------------------------------------------------------------------
      def self.add_page
        @event.pages << RPG::Event::Page.new
      end
      #--------------------------------------------------------------------------
      # * Generate Move Route
      #
      #  list = [ <move_command>, ... ]
      #
      #  <move_command> : [code, parameters]
      #
      #  If no parameters required :
      #
      #  <move_command> : code
      #--------------------------------------------------------------------------
      def self.generate_move_route(list = [], repeat = true, skippable = false)
        # Creates New Move Route
        move_route = RPG::MoveRoute.new
        # Sets Repeat & Skipable
        move_route.repeat    = repeat
        move_route.skippable = skippable
        # Passes Through List
        for move_command in list
          if move_command.is_a?(Array)
            code, parameters = move_command[0], move_command[1]
          else
            code, parameters = move_command, []
          end
          # Crates New MoveCommand
          move_command = RPG::MoveCommand.new
          # Adds MoveCommand to List
          move_route << move_command
          # Sets MoveCommand Properties
          move_command.parameters = parameters
          move_command.code = code
        end
        # Add Blank Move Command
        move_route << RPG::MoveCommand.new
        # Return Move Route
        return move_route
      end
      #--------------------------------------------------------------------------
      # * End Event
      #--------------------------------------------------------------------------
      def self.end_event(save_event = false)
        # Stop If nil Event Created
        return if @event.nil?
        # Add Event to Map & Spriteset Data
        $game_map.add_event(@event)
        # If Save Event Data
        if save_event
          # Creates Map Event Data (If none Present)
          unless @saved_events.has_key?((map_id = $game_map.map_id))
            @saved_events[map_id] = {}
          end
          # Saves Event Data
          @saved_events[map_id][@event.id] = @event
        end
        # Clear Event Data
        @event = nil
      end
      #--------------------------------------------------------------------------
      # * Clone Event
      #--------------------------------------------------------------------------
      def self.clone_event(target_id, new_x, new_y, new_name,
          end_event = false, save_event = false)
        # Stops If Event Not Found
        return unless $game_map.events.has_key?(target_id)
        # Gets Event Data
        @event = $game_map.events[target_id].event
        # Changes X, Y & name
        @event.x    = new_x
        @event.y    = new_y
        @event.name = new_name
        # Generates New ID
        id = 1
        id += 1 while $game_map.events.keys.include?(id)
        id += 1 while self.saved_events($game_map.map_id).keys.include?(id)
        @event.id = id
        # If End Event
        if end_event
          # Ends Event Creation
          self.end_event(save_event)
        end
      end
      #--------------------------------------------------------------------------
      # * Saved Events { map_id => { event_id => name }, ... }
      #--------------------------------------------------------------------------
      @saved_events = {}
      #--------------------------------------------------------------------------
      # * Saved Events (Read)
      #--------------------------------------------------------------------------
      def self.saved_events(map_id = nil)
        # If Map ID not Defined
        if map_id.nil?
          # Return All Saved Event Data
          return @saved_events
        end
        # If Map Data Saved
        if @saved_events.has_key?(map_id)
          # Return Map Saved Event Data
          return @saved_events[map_id]
        end
        # Return Blank Hash
        return {}
      end
      #--------------------------------------------------------------------------
      # * Saved Events (Write)
      #--------------------------------------------------------------------------
      def self.saved_events=(saved_events)
        @saved_events = saved_events
      end
      #--------------------------------------------------------------------------
      # * Current Page
      #--------------------------------------------------------------------------
      def self.get_current_page
        return @event.pages.last
      end
    end

    #==============================================================================
    # ** Game_Map
    #==============================================================================

    class Game_Map
      #--------------------------------------------------------------------------
      # * Alias Listings
      #--------------------------------------------------------------------------
      alias seph_eventspawner_gmap_setup setup
      #--------------------------------------------------------------------------
      # * Setup
      #--------------------------------------------------------------------------
      def setup(map_id)
        # Original Map Setup
        seph_eventspawner_gmap_setup(map_id)
        # Passes Through All Saved Events
        Event_Spawner.saved_events(@map_id).values.each do |event|
          # Add Event
          add_event(event)
        end
      end
      #--------------------------------------------------------------------------
      # * Add Event
      #--------------------------------------------------------------------------
      def add_event(event)
        # Unless Event ID Already Taken
        unless @events.has_key?(event.id)
          # Creates New Event
          @events[event.id] = Game_Event.new(@map_id, event)
          # Adds To Spriteset
          $scene.spriteset.add_event(@events[event.id])
        end
      end
    end

    #==============================================================================
    # ** Game_Event
    #==============================================================================

    class Game_Event < Game_Character
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_reader :event
    end

    #==============================================================================
    # ** Spriteset_Map
    #==============================================================================

    class Spriteset_Map
      #--------------------------------------------------------------------------
      # * Add Event
      #--------------------------------------------------------------------------
      def add_event(game_event)
        # Adds New Sprite
        @character_sprites << Sprite_Character.new(@viewport1, game_event)
      end
    end

    #==============================================================================
    # ** Scene_Map
    #==============================================================================

    class Scene_Map
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_accessor :spriteset
    end

    #==============================================================================
    # ** Scene_Save
    #==============================================================================

    class Scene_Save
      #--------------------------------------------------------------------------
      # * Alias Listings
      #--------------------------------------------------------------------------
      alias seph_eventspawner_scnsave_wd write_data
      #--------------------------------------------------------------------------
      # * Command : New Game
      #--------------------------------------------------------------------------
      def write_data(file)
        # Original Write Data
        seph_eventspawner_scnsave_wd(file)
        # Saves Saved Event Data
        Marshal.dump(Event_Spawner.saved_events, file)
      end
    end

    #==============================================================================
    # ** Scene_Load
    #==============================================================================

    class Scene_Load
      #--------------------------------------------------------------------------
      # * Alias Listings
      #--------------------------------------------------------------------------
      alias seph_eventspawner_scnload_rd read_data
      #--------------------------------------------------------------------------
      # * Command : New Game
      #--------------------------------------------------------------------------
      def read_data(file)
        # Original Write Data
        seph_eventspawner_scnload_rd(file)
        # Load Saved Event Data
        Event_Spawner.saved_events = Marshal.load(file)
      end
    end

    #--------------------------------------------------------------------------
    # * End SDK Enable Test
    #--------------------------------------------------------------------------
    end

    Agora vá no Script [WIN] Window_Equip, na linha 387, procure por @actor = $game_party.actors[0], em baixo cole esse script:

    Código:

    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
    #Drop De Itens - Autor: RD12
    #Parte do script - Essa parte joga o Item Fora.
    #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

    if $pegando_item == true
    if !Input.pressed(Input::Mouse_Left) and in_area?([130, 21+65, 31, 31])
     
      for i in 1..(Itens_Undropables::ITENS.size-1)
               
      if item.id == Itens_Undropables::ITENS[i]
      $game_temp.chat_log.push("Você não pode jogar esse item fora.")
    else
        if item.id != 0
        if item.is_a?(RPG::Weapon)
          $game_party.lose_weapon(item.id, 1)
          $tipo = "weapon"
        elsif item.is_a?(RPG::Armor)
          $game_party.lose_armor(item.id, 1)
          $tipo = "armor"
        elsif item.is_a?(RPG::Item)
          $game_party.lose_item(item.id, 1)
          $tipo = "item"
        else
          return
        end
            @X = $game_player.x
            @Y = $game_player.y
            $itemId = item.id
            @nome = item.name
            @mapa = $game_map.map_id
            Network::Main.socket.send("<23> drop(#{@X},#{@Y},#{$itemId},#{@mapa},'#{@nome}','#{$tipo}') </23>\n")
            $item_w.refresh
            $equip_w.refresh
            $mouse_active = true
            $pegando_item = false
            $mouse_iconfor = "arrow"
            $game_temp.atualizar_mouse = true
              return
            end   
            end
          end
        end
        end
    #/=/=/=/=/=/=/=/=/=/=/=/DROP/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=\

    Obs: Nesse script acima, você irá por os itens não dropáveis no module.

    Agora vá na sua pasta Pictures, e mude a imagem Equips, coloque essa:

    [Você precisa estar registrado e conectado para ver esta imagem.]

    O lugar da mão é onde irá soltar o Ícone

    Agradecimentos ao nanzin pela Ideia do Module
    e Agradecimentos ao *~ReborN~* por mostrar um Bug(Já corrigido)

    [Você precisa estar registrado e conectado para ver esta imagem.]
    RD12
    SephirothSpawn

    Não poste em outro fórum sem minha autorização.

      Data/hora atual: Ter Out 16, 2018 9:26 am