Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Z19
- STEAL_SKILL = /<steal>/i
- STEAL_OBJ = /<steal(?: |:)[ ](.*)(?: |\[)(.*)[\]]>/i
- NO_STEALABLES = "%s has nothing to steal."
- STEAL_FAIL = "Failed to steal from %s."
- STEAL_GOLD = "Stole %s gold from %s."
- STEAL_ITEM = "Stole %s from %s."
- FORMULA = '(1.5*user.agi - target.agi)*100 / target.agi'
- end
- class RPG::UsableItem < RPG::BaseItem
- def steal?
- return false
- end
- end
- class RPG::Skill < RPG::UsableItem
- def steal?
- self.note.scan(Z19::STEAL_SKILL){
- return true}
- return false
- end
- end
- class Game_Actor < Game_Battler
- def test_steal(target)
- user = self
- value = eval(Z19::FORMULA).to_i
- value = [[5, value].max, 100].min
- return rand(100)+1 <= value
- end
- end
- class Game_Enemy < Game_Battler
- attr_reader :steal_data
- alias z19_initialize initialize
- def initialize(index, enemy_id)
- z19_initialize(index, enemy_id)
- z19_start
- end
- def z19_start
- @steal_data = []
- self.enemy.note.scan(Z19::STEAL_OBJ){|type, id|
- case type
- when /item/i
- @steal_data.push($data_items[id.to_i])
- when /weapon/i
- @steal_data.push($data_weapons[id.to_i])
- when /armor/i
- @steal_data.push($data_armors[id.to_i])
- when /gold/i
- @steal_data.push(id)
- end
- }
- end
- def remove_steal(index)
- @steal_data.delete_at(index)
- end
- end
- class Scene_Battle < Scene_Base
- def display_action_effects(target, obj = nil) #OVERWRITE
- unless target.skipped
- line_number = @message_window.line_number
- wait(5)
- display_critical(target, obj)
- display_damage(target, obj)
- display_steal(target, obj)
- display_state_changes(target, obj)
- if line_number == @message_window.line_number
- display_failure(target, obj) unless target.states_active?
- end
- if line_number != @message_window.line_number
- wait(30)
- end
- @message_window.back_to(line_number)
- end
- end
- def display_steal(target, obj = nil)
- return if target.actor?
- return if obj.nil?
- return unless obj.steal?
- text = steal_object(target)
- @message_window.add_instant_text(text)
- wait(30)
- end
- def steal_object(target)
- if target.steal_data.size == 0
- return sprintf(Z19::NO_STEALABLES, target.name)
- elsif !@active_battler.test_steal(target)
- return sprintf(Z19::STEAL_FAIL, target.name)
- end
- index = rand(target.steal_data.size)
- item = target.steal_data[index]
- target.remove_steal(index)
- if item.is_a?(Integer)
- $game_party.gain_gold(item)
- return sprintf(Z19::STEAL_GOLD, item, target.name)
- else
- $game_party.gain_item(item, 1)
- return sprintf(Z19::STEAL_ITEM, item.name, target.name)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement