Code:
# * KLazyWayOut XP
# Scripter : Kyonides Arkanthes
# 2022-06-14
# * A Non Plug & Play Script * #
# Are your players tired of fighting some random mobs?
# Fear not! There is a LAZY way out of such a messy situation!
# A brand new message will show up on the map warning you about the upcoming
# battle. If the player wants to skip it, he or she can pay their way out of it!
# :ox and :oy stands for the X & Y Offsets respectively.
module KLazy
SWITCH_ID = 1
ALERT_SOUND = { :name => "", :volume => 70, :pitch => 100 }
TRANSITION = { :name => "018-Brick02", :frames => 10 }
FONT = { :name => "Arial", :size => 22, :bold => false }
PICTURE = { :name => "app_logo", :ox => 4, :oy => 4 }
MESSAGE_SIZE = { :x => 100, :y => 4, :width => 480 }
MESSAGE = [] # Leave it alone!
MESSAGE << "You are out of luck!"
MESSAGE << "Some random monsters have appeared!"
MESSAGE << "Want to pay them %s%s?"
MESSAGE << ""
# Battle Skip Cost: { MAPID => cost, etc. }
SKIP_COST = { 1 => 10 }
SKIP_COST.default = 20
end
class Spriteset_Map
def make_battle_alert
dimensions = KLazy::MESSAGE_SIZE
mx = dimensions[:x]
my = dimensions[:y]
cost = KLazy::SKIP_COST[$game_map.map_id]
pic = KLazy::PICTURE
message = KLazy::MESSAGE
font = KLazy::FONT
ay = $game_player.y - $game_map.display_y
@alert_sprite = Sprite.new(@viewport2)
@alert_sprite.y = ay < 8 ? 344 : 12
@alert_sprite.z += 1000
@alert_sprite.bitmap = b = Bitmap.new(dimensions[:width], 132)
bit = RPG::Cache.picture(pic[:name])
b.blt(pic[:ox], pic[:oy], bit, bit.rect)
bit.dispose
mw = b.width - mx - 8
b.font.name = font[:name]
b.font.size = font[:size]
b.font.bold = font[:bold]
message.size.times do |n|
text = sprintf(message[n], cost, $data_system.words.gold)
b.draw_text(mx, my, mw, 28, text)
my += 28
end
tr = KLazy::TRANSITION
Graphics.transition(tr[:frames], "Graphics/Transitions/" + tr[:name])
end
def dispose_battle_alert
@alert_sprite.bitmap.dispose
@alert_sprite.dispose
end
end
class Scene_Map
alias :kyon_lf_scn_bttl_up :update
alias :kyon_lf_scn_bttl_call_bttl :call_battle
def dispose_alert
@spriteset.dispose_battle_alert
@battle_alert = nil
end
def update_alert
$game_system.update
$game_screen.update
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
kyon_lf_scn_bttl_call_bttl
dispose_alert
elsif Input.trigger?(Input::C)
cost = KLazy::SKIP_COST[$game_map.map_id]
if $game_party.gold < cost
$game_system.se_play($data_system.buzzer_se)
kyon_lf_scn_bttl_call_bttl
dispose_alert
return
end
$game_system.se_play($data_system.shop_se)
$game_party.lose_gold(cost)
$game_temp.battle_troop_id = nil
dispose_alert
end
end
def update
if @battle_alert
update_alert
return
end
kyon_lf_scn_bttl_up
end
def battle_alert
$game_temp.battle_calling = false
$game_temp.menu_calling = false
$game_temp.menu_beep = false
$game_player.make_encounter_count
$game_player.straighten
sound = KLazy::ALERT_SOUND
alert_se = RPG::AudioFile.new(sound[:name], sound[:volume], sound[:pitch])
$game_system.se_play(alert_se)
$game_player.straighten
Graphics.freeze
@spriteset.make_battle_alert
@battle_alert = true
end
def call_battle
$game_switches[KLazy::SWITCH_ID] ? battle_alert : kyon_lf_scn_bttl_call_bttl
end
end