Advertisement
Zetu

Z19 Steal v1.01

Jul 9th, 2011
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.87 KB | None | 0 0
  1. module Z19
  2.  
  3.   STEAL_SKILL = /<steal>/i
  4.   STEAL_OBJ   = /<steal(?: |:)[ ](.*)(?: |\[)(.*)[\]]>/i
  5.  
  6.   NO_STEALABLES = "%s has nothing to steal."
  7.   STEAL_FAIL    = "Failed to steal from %s."
  8.   STEAL_GOLD    = "Stole %s gold from %s."
  9.   STEAL_ITEM    = "Stole %s from %s."
  10.  
  11.   FORMULA       = '(1.5*user.agi - target.agi)*100 / target.agi'
  12.  
  13. end
  14.  
  15. class RPG::UsableItem < RPG::BaseItem
  16.  
  17.   def steal?
  18.     return false
  19.   end
  20.  
  21. end
  22.  
  23. class RPG::Skill < RPG::UsableItem
  24.  
  25.   def steal?
  26.     self.note.scan(Z19::STEAL_SKILL){
  27.     return true}
  28.     return false
  29.   end
  30.  
  31. end
  32.  
  33. class Game_Actor < Game_Battler
  34.  
  35.   def test_steal(target)
  36.     user = self
  37.     value = eval(Z19::FORMULA).to_i
  38.     value = [[5, value].max, 100].min
  39.     return rand(100)+1 <= value
  40.   end
  41.  
  42. end
  43.  
  44. class Game_Enemy < Game_Battler
  45.   attr_reader :steal_data
  46.  
  47.   alias z19_initialize initialize
  48.   def initialize(index, enemy_id)
  49.     z19_initialize(index, enemy_id)
  50.     z19_start
  51.   end
  52.  
  53.   def z19_start
  54.     @steal_data = []
  55.     self.enemy.note.scan(Z19::STEAL_OBJ){|type, id|
  56.       case type
  57.       when /item/i
  58.         @steal_data.push($data_items[id.to_i])
  59.       when /weapon/i
  60.         @steal_data.push($data_weapons[id.to_i])
  61.       when /armor/i
  62.         @steal_data.push($data_armors[id.to_i])
  63.       when /gold/i
  64.         @steal_data.push(id)
  65.       end
  66.     }
  67.   end
  68.  
  69.   def remove_steal(index)
  70.     @steal_data.delete_at(index)
  71.   end
  72.  
  73. end
  74.  
  75. class Scene_Battle < Scene_Base
  76.  
  77.   def display_action_effects(target, obj = nil)                       #OVERWRITE
  78.     unless target.skipped
  79.       line_number = @message_window.line_number
  80.       wait(5)
  81.       display_critical(target, obj)
  82.       display_damage(target, obj)
  83.       display_steal(target, obj)
  84.       display_state_changes(target, obj)
  85.       if line_number == @message_window.line_number
  86.         display_failure(target, obj) unless target.states_active?
  87.       end
  88.       if line_number != @message_window.line_number
  89.         wait(30)
  90.       end
  91.       @message_window.back_to(line_number)
  92.     end
  93.   end
  94.  
  95.   def display_steal(target, obj = nil)
  96.     return if target.actor?
  97.     return if obj.nil?
  98.     return unless obj.steal?
  99.     text = steal_object(target)
  100.     @message_window.add_instant_text(text)
  101.     wait(30)
  102.   end
  103.  
  104.   def steal_object(target)
  105.     if target.steal_data.size == 0
  106.       return sprintf(Z19::NO_STEALABLES, target.name)
  107.     elsif !@active_battler.test_steal(target)
  108.       return sprintf(Z19::STEAL_FAIL, target.name)
  109.     end
  110.     index = rand(target.steal_data.size)
  111.     item = target.steal_data[index]
  112.     target.remove_steal(index)
  113.     if item.is_a?(Integer)
  114.       $game_party.gain_gold(item)
  115.       return sprintf(Z19::STEAL_GOLD, item, target.name)
  116.     else
  117.       $game_party.gain_item(item, 1)
  118.       return sprintf(Z19::STEAL_ITEM, item.name, target.name)
  119.     end
  120.   end
  121.  
  122. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement