biud436

Item Stream - RGSS3 Scripts

May 27th, 2015
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 10.40 KB | None | 0 0
  1. #==============================================================================
  2. #   Name      : Item Stream (RGSS3)
  3. #   Author    : biud436 (http://biud436.blog.me)
  4. #   Date      : 2015.05.27
  5. #   Version   : 1.0.0
  6. #==============================================================================
  7. module Stream
  8.   #============================================================================
  9.   # ** Services Class
  10.   #============================================================================
  11.   class Services
  12.     #--------------------------------------------------------------------------
  13.     # * 초기화
  14.     #--------------------------------------------------------------------------      
  15.     def initialize(sender,receiver)
  16.       @sender_header = sender[:header]
  17.       @receiver_header = receiver[:header]
  18.       @sender_contents = sender[:contents]
  19.       @receiver_contents = receiver[:contents]
  20.     end
  21.     #--------------------------------------------------------------------------
  22.     # * 메소드 설정
  23.     #--------------------------------------------------------------------------    
  24.     def set_method=(m)
  25.       @method = m
  26.     end
  27.     #--------------------------------------------------------------------------
  28.     # * 메소드 호출
  29.     #--------------------------------------------------------------------------    
  30.     def call_method(sender_index,receiver_index)
  31.       @method.call(sender_index,@sender_header,@sender_contents)
  32.       @method.call(receiver_index,@receiver_header,@receiver_contents)  
  33.     end
  34.     #--------------------------------------------------------------------------
  35.     # * 전송자
  36.     #--------------------------------------------------------------------------    
  37.     def sender
  38.       return @sender_contents[:party]
  39.     end
  40.     #--------------------------------------------------------------------------
  41.     # * 수신자
  42.     #--------------------------------------------------------------------------    
  43.     def receiver
  44.       return @receiver_contents[:party]
  45.     end
  46.     #--------------------------------------------------------------------------
  47.     # * 아이템 보내기
  48.     #--------------------------------------------------------------------------    
  49.     def gain_item(item)
  50.       if sender.has_item?(item)
  51.         sender.gain_item(item,-1)
  52.         receiver.gain_item(item,+1)      
  53.       end
  54.     end
  55.     #--------------------------------------------------------------------------
  56.     # * 골드 보내기
  57.     #--------------------------------------------------------------------------    
  58.     def gain_gold(value)
  59.       if sender.gold >= value
  60.         sender.lose_gold(value)
  61.         receiver.gain_gold(value)    
  62.       end
  63.     end
  64.   end  
  65.  
  66.   #============================================================================
  67.   # ** Sender Class (다른 파일로 아이템 보내기)
  68.   #============================================================================  
  69.   class Sender < Services
  70.     #--------------------------------------------------------------------------
  71.     # * 초기화
  72.     #--------------------------------------------------------------------------      
  73.     def initialize(sender,receiver)
  74.       super(sender,receiver)
  75.       @sender_header = sender[:header]
  76.       @sender_contents = {:party => $game_party}
  77.     end    
  78.     #--------------------------------------------------------------------------
  79.     # * 메소드 호출
  80.     #--------------------------------------------------------------------------    
  81.     def call_method(sender_index,receiver_index)
  82.       @method.call(receiver_index,@receiver_header,@receiver_contents)  
  83.     end
  84.     #--------------------------------------------------------------------------
  85.     # * 전송자
  86.     #--------------------------------------------------------------------------    
  87.     def sender
  88.       return @sender_contents[:party]
  89.     end
  90.     #--------------------------------------------------------------------------
  91.     # * 수신자
  92.     #--------------------------------------------------------------------------    
  93.     def receiver
  94.       return @receiver_contents[:party]
  95.     end    
  96.   end
  97.  
  98.   #============================================================================
  99.   # ** Receiver Class (다른 세이브 파일에서 아이템 가져오기)
  100.   #============================================================================  
  101.   class Receiver < Sender
  102.     #--------------------------------------------------------------------------
  103.     # * 전송자
  104.     #--------------------------------------------------------------------------    
  105.     def sender
  106.       return @receiver_contents[:party]
  107.     end
  108.     #--------------------------------------------------------------------------
  109.     # * 수신자
  110.     #--------------------------------------------------------------------------    
  111.     def receiver
  112.       return @sender_contents[:party]
  113.     end
  114.   end
  115.  
  116.   #--------------------------------------------------------------------------
  117.   # * 세이브 파일 이름 만들기
  118.   #--------------------------------------------------------------------------    
  119.   def self.make_filename(index)
  120.     sprintf("Save%02d.rvdata2", index)
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # * 세이브 파일 불러오기
  124.   #--------------------------------------------------------------------------    
  125.   def self.load_game_without_rescue(index)
  126.     if index.between?(-1,0)
  127.       return {:header => "", :contents => {:party => $game_party} }
  128.     end
  129.     file = File.open(make_filename(index), "rb")
  130.     _header = Marshal.load(file)
  131.     _contents = Marshal.load(file)
  132.     file.close
  133.     return {:header => _header, :contents => _contents}
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # * 세이브 파일 저장하기
  137.   #--------------------------------------------------------------------------    
  138.   def self.save_game_without_rescue(index,header,contents)
  139.     File.open(make_filename(index), "wb") do |file|
  140.       Marshal.dump(header, file)
  141.       Marshal.dump(contents, file)
  142.     end
  143.     return true
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # * 서비스 만들기
  147.   #--------------------------------------------------------------------------    
  148.   def self.create_services(sender,receiver)
  149.     @services = Services.new(sender,receiver)
  150.     @services.set_method = method(:save_game_without_rescue)
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # * 전송자 만들기
  154.   #--------------------------------------------------------------------------    
  155.   def self.create_sender(sender,receiver)
  156.     @services = Sender.new(sender,receiver)
  157.     @services.set_method = method(:save_game_without_rescue)
  158.   end  
  159.   #--------------------------------------------------------------------------
  160.   # * 수신자 만들기
  161.   #--------------------------------------------------------------------------    
  162.   def self.create_receiver(sender,receiver)
  163.     @services = Receiver.new(sender,receiver)
  164.     @services.set_method = method(:save_game_without_rescue)
  165.   end    
  166.   #--------------------------------------------------------------------------
  167.   # * 서비스 호출
  168.   #--------------------------------------------------------------------------    
  169.   def self.call_services(sender_index,receiver_index)
  170.     @services.call_method(sender_index,receiver_index)
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # * 서비스 종료
  174.   #--------------------------------------------------------------------------    
  175.   def self.destroy_services
  176.     @services = nil
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # * 서비스 선택
  180.   #--------------------------------------------------------------------------    
  181.   def self.select_services(index,sender,receiver)
  182.     case index
  183.     when -1 # 다른 세이브 파일에서 아이템 받기
  184.       create_receiver(sender,receiver)
  185.     when 0  # 자신이 가지고 있는 아이템 전송
  186.       create_sender(sender,receiver)
  187.     else    # 세이브파일 간의 전송
  188.       create_services(sender,receiver)
  189.     end
  190.   end  
  191.   #--------------------------------------------------------------------------
  192.   # * 아이템 전송
  193.   #--------------------------------------------------------------------------    
  194.     def self.send_item(sender_index,receiver_index,sym,id)
  195.     begin
  196.       sender = load_game_without_rescue(sender_index)
  197.       receiver = load_game_without_rescue(receiver_index)
  198.       select_services(sender_index,sender,receiver)
  199.       case sym; when :gold then @services.gain_gold(id)
  200.       else
  201.         item = {}
  202.         item[:item]   = $data_items[id]
  203.         item[:weapon] = $data_weapons[id]
  204.         item[:armor]  = $data_armors[id]
  205.         @services.gain_item(item[sym])
  206.       end
  207.       call_services(sender_index,receiver_index)
  208.       destroy_services
  209.     rescue
  210.     end
  211.   end  
  212. end
  213.  
  214. #==============================================================================
  215. # ** Game_Interpreter
  216. #==============================================================================
  217. class Game_Interpreter
  218.   #--------------------------------------------------------------------------
  219.   # * 아이템 보내기
  220.   #--------------------------------------------------------------------------    
  221.   def send_item(save_file1,save_file2,item_id)
  222.     Stream.send_item(save_file1,save_file2,:item,item_id)
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # * 무기구 보내기
  226.   #--------------------------------------------------------------------------    
  227.   def send_weapon(save_file1,save_file2,item_id)
  228.     Stream.send_item(save_file1,save_file2,:weapon,item_id)    
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # * 방어구 보내기
  232.   #--------------------------------------------------------------------------    
  233.   def send_armor(save_file1,save_file2,item_id)
  234.     Stream.send_item(save_file1,save_file2,:armor,item_id)    
  235.   end  
  236.   #--------------------------------------------------------------------------
  237.   # * 골드 보내기
  238.   #--------------------------------------------------------------------------    
  239.   def send_gold(save_file1,save_file2,value)
  240.     Stream.send_item(save_file1,save_file2,:gold,value)
  241.   end
  242. end
Add Comment
Please, Sign In to add comment