Advertisement
TheoAllen

ASR Summon Skill

Feb 3rd, 2015
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.37 KB | None | 0 0
  1. #===============================================================================
  2. # Untuk gunain skill summon, tag skillnya pake <summon>
  3. # nanti eventnya bakal jadi in-map event bukan action event
  4. #===============================================================================
  5. class RPG::UsableItem
  6.  
  7.   def summon?
  8.     @summon ||= !note[/<summon>/i].nil?
  9.   end
  10.  
  11. end
  12.  
  13. def spriteset
  14.   SceneManager.scene.instance_variable_get("@spriteset")
  15. end
  16.  
  17. class Game_Map
  18.  
  19.   alias asr_summon_init initialize
  20.   def initialize
  21.     @summoned_events = []
  22.     asr_summon_init
  23.   end
  24.  
  25.   def create_action_events(object, item, user, character)
  26.     case item.action_type
  27.     when 2 then list = [0, 4]
  28.     when 3 then list = [0, 1, 7]
  29.     when 4 then list = [0, 2, 4, 6]
  30.     when 5 then list = [0, 1, 2, 7, 6]
  31.     when 8 then list = [0, 1, 2, 3, 4, 5, 6, 7]
  32.     else list = [0]
  33.     end
  34.     summon = item.summon?
  35.     if summon
  36.       @map_fiber = Fiber.new do
  37.         list.each do |i|
  38.           insert_new_event(item.action_events[0], character, i)
  39.           Fiber.yield
  40.         end
  41.         @map_fiber = nil
  42.       end
  43.       return
  44.     end
  45.     list.collect do |i|
  46.       event = Game_Action_Event.new(@map_id, object, item, user, character, i)
  47.       @action_objects.push(event)
  48.     end
  49.   end
  50.  
  51.   def insert_new_event(id, char, i)
  52.     evid = @events.keys.max + 1
  53.     base_event = Marshal.load(Marshal.dump(@action_events[id]))
  54. #~     base_event = @action_events[id].clone
  55.     base_event.id = evid
  56.     event = Game_Event.new(@map_id, base_event)
  57.     @summoned_events.push(event)
  58.     d   = (char.direction + i) % 10
  59.     offset = event.note =~ /<OFFSET: (\d+)>/i ? $1.to_i : 1
  60.     off = offset * 1.875
  61.     x   = char.fix_position(char.x + (d == 6 ? off : d == 4 ? -off : 0))
  62.     y   = char.fix_position(char.y + (d == 2 ? off : d == 8 ? -off : 0))
  63.     event.moveto(x,y)
  64.     event.set_direction(d)
  65.     event.update
  66.     spriteset.add_char(event)
  67.   end
  68.  
  69.   alias asr_summon_update update
  70.   def update(main = false)
  71.     asr_summon_update(main)
  72.     @map_fiber.resume if @map_fiber
  73.     @summoned_events.each do |event|
  74.       @events[event.id] = event
  75.     end
  76.     @summoned_events.clear
  77.   end
  78.  
  79. end
  80.  
  81. class Game_Event
  82.   attr_accessor :id
  83. end
  84.  
  85. class Spriteset_Map
  86.  
  87.   def add_char(char)
  88.     @character_sprites.push(Sprite_Character.new(@viewport1, char))
  89.   end
  90.  
  91. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement