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.[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]Sistema que permite que você jogo Itens no chão e para outros jogadores pegarem, Já está Global, mas em fases de testes.
NP Master - RD12
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é.[Tens de ter uma conta e sessão iniciada para poderes visualizar 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.
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Aí você solta '-', e o item aparece no chão para todos.
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Soltando vários itens :P
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
Aí eu peguei uns itens, e você pode por para não poder soltar uns itens.(Veja Chat)
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem][Tens de ter uma conta e sessão iniciada para poderes visualizar 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:
Isso fará que quando o evento ser deletado, será deletado para todos. Não é só isso, é só o começo pra deletar..
- Código:
@mapp = $game_map.map_id
Network::Main.socket.send("<23>eventdel(#{@event_id},#{@mapp})</23>\n")
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:
Obs: Nesse script acima, você irá por os itens não dropáveis no module.
- 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/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=\
Agora vá na sua pasta Pictures, e mude a imagem Equips, coloque essa:[Tens de ter uma conta e sessão iniciada para poderes visualizar 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)
[Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]
RD12
SephirothSpawn
Não poste em outro fórum sem minha autorização.