Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # Name : Item Stream (RGSS3)
- # Author : biud436 (http://biud436.blog.me)
- # Date : 2015.05.27
- # Version : 1.0.0
- #==============================================================================
- module Stream
- #============================================================================
- # ** Services Class
- #============================================================================
- class Services
- #--------------------------------------------------------------------------
- # * 초기화
- #--------------------------------------------------------------------------
- def initialize(sender,receiver)
- @sender_header = sender[:header]
- @receiver_header = receiver[:header]
- @sender_contents = sender[:contents]
- @receiver_contents = receiver[:contents]
- end
- #--------------------------------------------------------------------------
- # * 메소드 설정
- #--------------------------------------------------------------------------
- def set_method=(m)
- @method = m
- end
- #--------------------------------------------------------------------------
- # * 메소드 호출
- #--------------------------------------------------------------------------
- def call_method(sender_index,receiver_index)
- @method.call(sender_index,@sender_header,@sender_contents)
- @method.call(receiver_index,@receiver_header,@receiver_contents)
- end
- #--------------------------------------------------------------------------
- # * 전송자
- #--------------------------------------------------------------------------
- def sender
- return @sender_contents[:party]
- end
- #--------------------------------------------------------------------------
- # * 수신자
- #--------------------------------------------------------------------------
- def receiver
- return @receiver_contents[:party]
- end
- #--------------------------------------------------------------------------
- # * 아이템 보내기
- #--------------------------------------------------------------------------
- def gain_item(item)
- if sender.has_item?(item)
- sender.gain_item(item,-1)
- receiver.gain_item(item,+1)
- end
- end
- #--------------------------------------------------------------------------
- # * 골드 보내기
- #--------------------------------------------------------------------------
- def gain_gold(value)
- if sender.gold >= value
- sender.lose_gold(value)
- receiver.gain_gold(value)
- end
- end
- end
- #============================================================================
- # ** Sender Class (다른 파일로 아이템 보내기)
- #============================================================================
- class Sender < Services
- #--------------------------------------------------------------------------
- # * 초기화
- #--------------------------------------------------------------------------
- def initialize(sender,receiver)
- super(sender,receiver)
- @sender_header = sender[:header]
- @sender_contents = {:party => $game_party}
- end
- #--------------------------------------------------------------------------
- # * 메소드 호출
- #--------------------------------------------------------------------------
- def call_method(sender_index,receiver_index)
- @method.call(receiver_index,@receiver_header,@receiver_contents)
- end
- #--------------------------------------------------------------------------
- # * 전송자
- #--------------------------------------------------------------------------
- def sender
- return @sender_contents[:party]
- end
- #--------------------------------------------------------------------------
- # * 수신자
- #--------------------------------------------------------------------------
- def receiver
- return @receiver_contents[:party]
- end
- end
- #============================================================================
- # ** Receiver Class (다른 세이브 파일에서 아이템 가져오기)
- #============================================================================
- class Receiver < Sender
- #--------------------------------------------------------------------------
- # * 전송자
- #--------------------------------------------------------------------------
- def sender
- return @receiver_contents[:party]
- end
- #--------------------------------------------------------------------------
- # * 수신자
- #--------------------------------------------------------------------------
- def receiver
- return @sender_contents[:party]
- end
- end
- #--------------------------------------------------------------------------
- # * 세이브 파일 이름 만들기
- #--------------------------------------------------------------------------
- def self.make_filename(index)
- sprintf("Save%02d.rvdata2", index)
- end
- #--------------------------------------------------------------------------
- # * 세이브 파일 불러오기
- #--------------------------------------------------------------------------
- def self.load_game_without_rescue(index)
- if index.between?(-1,0)
- return {:header => "", :contents => {:party => $game_party} }
- end
- file = File.open(make_filename(index), "rb")
- _header = Marshal.load(file)
- _contents = Marshal.load(file)
- file.close
- return {:header => _header, :contents => _contents}
- end
- #--------------------------------------------------------------------------
- # * 세이브 파일 저장하기
- #--------------------------------------------------------------------------
- def self.save_game_without_rescue(index,header,contents)
- File.open(make_filename(index), "wb") do |file|
- Marshal.dump(header, file)
- Marshal.dump(contents, file)
- end
- return true
- end
- #--------------------------------------------------------------------------
- # * 서비스 만들기
- #--------------------------------------------------------------------------
- def self.create_services(sender,receiver)
- @services = Services.new(sender,receiver)
- @services.set_method = method(:save_game_without_rescue)
- end
- #--------------------------------------------------------------------------
- # * 전송자 만들기
- #--------------------------------------------------------------------------
- def self.create_sender(sender,receiver)
- @services = Sender.new(sender,receiver)
- @services.set_method = method(:save_game_without_rescue)
- end
- #--------------------------------------------------------------------------
- # * 수신자 만들기
- #--------------------------------------------------------------------------
- def self.create_receiver(sender,receiver)
- @services = Receiver.new(sender,receiver)
- @services.set_method = method(:save_game_without_rescue)
- end
- #--------------------------------------------------------------------------
- # * 서비스 호출
- #--------------------------------------------------------------------------
- def self.call_services(sender_index,receiver_index)
- @services.call_method(sender_index,receiver_index)
- end
- #--------------------------------------------------------------------------
- # * 서비스 종료
- #--------------------------------------------------------------------------
- def self.destroy_services
- @services = nil
- end
- #--------------------------------------------------------------------------
- # * 서비스 선택
- #--------------------------------------------------------------------------
- def self.select_services(index,sender,receiver)
- case index
- when -1 # 다른 세이브 파일에서 아이템 받기
- create_receiver(sender,receiver)
- when 0 # 자신이 가지고 있는 아이템 전송
- create_sender(sender,receiver)
- else # 세이브파일 간의 전송
- create_services(sender,receiver)
- end
- end
- #--------------------------------------------------------------------------
- # * 아이템 전송
- #--------------------------------------------------------------------------
- def self.send_item(sender_index,receiver_index,sym,id)
- begin
- sender = load_game_without_rescue(sender_index)
- receiver = load_game_without_rescue(receiver_index)
- select_services(sender_index,sender,receiver)
- case sym; when :gold then @services.gain_gold(id)
- else
- item = {}
- item[:item] = $data_items[id]
- item[:weapon] = $data_weapons[id]
- item[:armor] = $data_armors[id]
- @services.gain_item(item[sym])
- end
- call_services(sender_index,receiver_index)
- destroy_services
- rescue
- end
- end
- end
- #==============================================================================
- # ** Game_Interpreter
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # * 아이템 보내기
- #--------------------------------------------------------------------------
- def send_item(save_file1,save_file2,item_id)
- Stream.send_item(save_file1,save_file2,:item,item_id)
- end
- #--------------------------------------------------------------------------
- # * 무기구 보내기
- #--------------------------------------------------------------------------
- def send_weapon(save_file1,save_file2,item_id)
- Stream.send_item(save_file1,save_file2,:weapon,item_id)
- end
- #--------------------------------------------------------------------------
- # * 방어구 보내기
- #--------------------------------------------------------------------------
- def send_armor(save_file1,save_file2,item_id)
- Stream.send_item(save_file1,save_file2,:armor,item_id)
- end
- #--------------------------------------------------------------------------
- # * 골드 보내기
- #--------------------------------------------------------------------------
- def send_gold(save_file1,save_file2,value)
- Stream.send_item(save_file1,save_file2,:gold,value)
- end
- end
Add Comment
Please, Sign In to add comment