Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Disabling & Enabling Scripts

Hi, I was wondering if someone can help me on this problem I'm having....

I have a script, that displays the Enemy's HP/SP.

I am turning the script On and Off like so:

1 - Player uses an Item in battle
2 - Item triggers a "Common Event"
3 - "Common Event" turns On Switch ie: Enemy_Stats_Enabled = 51

Problem:

When I use the item during battle, the script is off (which is right), it turns on the switch (using the item in battle) to enable the script, but I get an error message on line #109 the error line is:

@enemy_hpsp_window.visible = @battler_visible

Error Message: Script 'Enemy HP/SP' line 109: NoMethodError occurred.
undefined method 'visible=' for nil:NilClass

Is there any way I can fix this? Or is there some other way of Enabling / Disabling this script while during battle so I don't get errored out?


Any help is greatful

Script 1: Enemy HP/SP -

#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
# ■ エネミーHP&SP(ver 0.98)

# □ カスタマイズポイント
#==============================================================================
#-------------------------------------------------------------------------------
# Below Added By: Fenwick - Show Enable/Disable Enemy's Stats
#-------------------------------------------------------------------------------
# Fenwick - Switche # 51 if ON: Show Enemy's Stats, if OFF: Hide Enemy's Stats.
Scene_Battle::Enemy_Stats_Enabled = 51
Sprite_Battler::Enemy_Stats_Enabled = 51
#-------------------------------------------------------------------------------
# Above Added By: Fenwick - Show Enable/Disable Enemy's Stats
#-------------------------------------------------------------------------------


module PLAN_HPSP_DRAW
FONT_NAME = ["Arial"] # フォント
FONT_SIZE = 18 # フォントサイズ
FONT_BOLD = true # 太字
FONT_ITALIC = true # 斜体

DRAW_NAME = true # 名前の描画
DRAW_HP = true # HP の描画
DRAW_SP = true # SP の描画

DRAW_WIDTH = 80 # 描画幅
DRAW_HEIGHT = 3 * 32 # 描画高さ
DRAW_SPACE = 0 # 行間
DRAW_Y = 24 # Y 座標修正値
end


#==============================================================================
# â–  Sprite_Battler
#==============================================================================

class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_initialize initialize
def initialize(viewport, battler = nil)
# 元のメソッドに戻す
plan_enemy_hpsp_draw_initialize(viewport, battler)
# エネミーの場合
if $game_switches[Enemy_Stats_Enabled] # Added By: Fenwick - Show Enable/Disable Enemy's Stats
if @battler.is_a?(Game_Enemy)
width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
height = PLAN_HPSP_DRAW::DRAW_HEIGHT + 32
x = @battler.screen_x - width / 2
y = @battler.screen_y - height + 32 + PLAN_HPSP_DRAW::DRAW_Y
@enemy_hpsp_window = Window_Base.new(x, y, width, height)
@enemy_hpsp_window.contents = Bitmap.new(width - 32, height - 32)
@enemy_hpsp_window.contents.font.name = PLAN_HPSP_DRAW::FONT_NAME
@enemy_hpsp_window.contents.font.size = PLAN_HPSP_DRAW::FONT_SIZE
@enemy_hpsp_window.contents.font.bold = PLAN_HPSP_DRAW::FONT_BOLD
@enemy_hpsp_window.contents.font.italic = PLAN_HPSP_DRAW::FONT_ITALIC
y = 0
@old_enemy_hpsp = []
one_line = ((PLAN_HPSP_DRAW::FONT_SIZE * 100 / 28) * 32) / 100
if PLAN_HPSP_DRAW::DRAW_NAME
@enemy_hpsp_window.draw_actor_name(@battler, 0, y, width - 32)
y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
@old_enemy_hpsp.push(@battler.name)
end
if PLAN_HPSP_DRAW::DRAW_HP
@enemy_hpsp_window.draw_actor_hp(@battler, 0, y, width - 32)
y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
@old_enemy_hpsp.push(@battler.hp)
end
if PLAN_HPSP_DRAW::DRAW_SP
@enemy_hpsp_window.draw_actor_sp(@battler, 0, y, width - 32)
@old_enemy_hpsp.push(@battler.sp)
end
@enemy_hpsp_window.opacity = 0
@enemy_hpsp_window.contents_opacity = 0
@enemy_hpsp_window.z = -2
end
end #if
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_dispose dispose
def dispose
# エネミーの場合
if $game_switches[Enemy_Stats_Enabled] # Added By: Fenwick - Show Enable/Disable Enemy's Stats
if @battler.is_a?(Game_Enemy)
@enemy_hpsp_window.dispose
end
end #if
# 元のメソッドに戻す
plan_enemy_hpsp_draw_dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_update update
def update
# 元のメソッドに戻す
plan_enemy_hpsp_draw_update
# エネミーの場合
if $game_switches[Enemy_Stats_Enabled] # Added By: Fenwick - Show Enable/Disable Enemy's Stats
if @battler.is_a?(Game_Enemy)
@enemy_hpsp_window.visible = @battler_visible
# スプライトの座標を設定
width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
@enemy_hpsp_window.x = self.x - width / 2
@now_enemy_hpsp = []
if PLAN_HPSP_DRAW::DRAW_NAME
@now_enemy_hpsp.push(@battler.name)
end
if PLAN_HPSP_DRAW::DRAW_HP
@now_enemy_hpsp.push(@battler.hp)
end
if PLAN_HPSP_DRAW::DRAW_SP
@now_enemy_hpsp.push(@battler.sp)
end
if @old_enemy_hpsp != @now_enemy_hpsp and $game_temp.enemy_hpsp_refresh
@old_enemy_hpsp = @now_enemy_hpsp
@enemy_hpsp_window.contents.clear
y = 0
width = PLAN_HPSP_DRAW::DRAW_WIDTH + 32
one_line = ((PLAN_HPSP_DRAW::FONT_SIZE * 100 / 28) * 32) / 100
if PLAN_HPSP_DRAW::DRAW_NAME
@enemy_hpsp_window.draw_actor_name(@battler, 0, y, width - 32)
y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
end
if PLAN_HPSP_DRAW::DRAW_HP
@enemy_hpsp_window.draw_actor_hp(@battler, 0, y, width - 32)
y += one_line + PLAN_HPSP_DRAW::DRAW_SPACE
end
if PLAN_HPSP_DRAW::DRAW_SP
@enemy_hpsp_window.draw_actor_sp(@battler, 0, y, width - 32)
end
Graphics.frame_reset
end
end
end #if
end
#--------------------------------------------------------------------------
# ● visible の設定
#--------------------------------------------------------------------------
if !method_defined?("plan_enemy_hpsp_draw_visible=")
alias plan_enemy_hpsp_draw_visible= visible=
end
def visible=(bool)
#if $game_switches[Enemy_Stats_Enabled] # Added By: Fenwick - Show Enable/Disable Enemy's Stats
# エネミーの場合
if @battler.is_a?(Game_Enemy)
@enemy_hpsp_window.visible = bool
end
#end #if
# 元のメソッドに戻す
self.plan_enemy_hpsp_draw_visible=(bool)
end
#--------------------------------------------------------------------------
# ● 不透明度の設定
#--------------------------------------------------------------------------
if !method_defined?("plan_enemy_hpsp_draw_opacity=")
alias plan_enemy_hpsp_draw_opacity= opacity=
end
def opacity=(n)
# 元のメソッドに戻す
self.plan_enemy_hpsp_draw_opacity=(n)
# エネミーの場合
if $game_switches[Enemy_Stats_Enabled] # Added By: Fenwick - Show Enable/Disable Enemy's Stats
if @battler.is_a?(Game_Enemy)
@enemy_hpsp_window.contents_opacity = n
end
end #if
end
#--------------------------------------------------------------------------
# ● ダメージ
#--------------------------------------------------------------------------

#--------------------------------------------------------------------------
# ● ダメージ解放
#--------------------------------------------------------------------------
def dispose_damage
if @_damage_sprite != nil
@_damage_sprite.viewport.dispose
end
super
end
end





#==============================================================================
# â–  Game_Temp
#==============================================================================

class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :enemy_hpsp_refresh
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_initialize initialize
def initialize
# 元のメソッドに戻す
plan_enemy_hpsp_draw_initialize
@enemy_hpsp_refresh = false
end
end

#==============================================================================
# â–  Scene_Battle
#==============================================================================

class Scene_Battle
#--------------------------------------------------------------------------
# ● プレバトルフェーズ開始 (エネミー名+アルファベット用)
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_start_phase1 start_phase1
def start_phase1
$game_temp.enemy_hpsp_refresh = true
# 元のメソッドに戻す
plan_enemy_hpsp_draw_start_phase1
end
#--------------------------------------------------------------------------
# ● パーティコマンドフェーズ開始 (エネミー名+アルファベット用)
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_start_phase2 start_phase2
def start_phase2
$game_temp.enemy_hpsp_refresh = false
# 元のメソッドに戻す
plan_enemy_hpsp_draw_start_phase2
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_update_phase4_step5 update_phase4_step5
def update_phase4_step5(battler)
# 元のメソッドに戻す
plan_enemy_hpsp_draw_update_phase4_step5(battler)
$game_temp.enemy_hpsp_refresh = true
end
#--------------------------------------------------------------------------
# ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
#--------------------------------------------------------------------------
alias plan_enemy_hpsp_draw_update_phase4_step6 update_phase4_step6
def update_phase4_step6(battler)
# 元のメソッドに戻す
plan_enemy_hpsp_draw_update_phase4_step6(battler)
$game_temp.enemy_hpsp_refresh = false
end
end


#==============================================================================
# â–  Window_Base
#==============================================================================

class Window_Base < Window
#--------------------------------------------------------------------------
# ● 名前の描画
#--------------------------------------------------------------------------
def draw_actor_name(actor, x, y, width = 220, align = 0)
if $scene.is_a?(Scene_Battle)
flag = actor.name.sub!(/\*f/, '').nil? ? false : true
self.contents.font.color = Color.new(0, 0, 0, 192)
self.contents.draw_text_shadow(x+1, y, width, 32, actor.name, align)
self.contents.draw_text_shadow(x, y+1, width, 32, actor.name, align)
end
self.contents.font.color = normal_color
self.contents.draw_text_shadow(x, y, width, 32, actor.name, align) #32
end

alias draw_actor_hp_original draw_actor_hp
def draw_actor_hp(actor, x, y, width = 144) #144
# Calculate if there is draw space for MaxHP
if width - 32 >= 108
hp_x = x + width - 108
flag = true
elsif width - 32 >= 48
hp_x = x + width - 48
flag = false
end
flag = true # Fenwick for test
# Draw Shadow Effects for Battles
if $scene.is_a?(Scene_Battle)
self.contents.font.color = Color.new(0, 0, 0, 192)
self.contents.draw_text_shadow(x, y+1, 32, 32, $data_system.words.hp)
self.contents.draw_text_shadow(x+1, y, 32, 32, $data_system.words.hp)
self.contents.draw_text_shadow(hp_x, y+1, 48, 32, actor.hp.to_s, 2)
self.contents.draw_text_shadow(hp_x+1, y, 48, 32, actor.hp.to_s, 2)
if flag
self.contents.draw_text_shadow(hp_x + 49, y, 12, 32, "/", 1)
self.contents.draw_text_shadow(hp_x + 48, y+1, 12, 32, "/", 1)
self.contents.draw_text_shadow(hp_x + 60, y+1, 48, 32, actor.maxhp.to_s)
self.contents.draw_text_shadow(hp_x + 61, y, 48, 32, actor.maxhp.to_s)
end
end
# Draw "HP" text string
self.contents.font.color = system_color
self.contents.draw_text_shadow(x, y, 32, 32, $data_system.words.hp)
# Draw HP
self.contents.font.color = actor.hp == 0 ? knockout_color :
actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
self.contents.draw_text_shadow(hp_x, y, 48, 32, actor.hp.to_s, 2)
# Draw MaxHP
if flag
self.contents.font.color = normal_color
self.contents.draw_text_shadow(hp_x + 48, y, 12, 32, "/", 1)
self.contents.draw_text_shadow(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
end
end

alias draw_actor_sp_original draw_actor_sp
def draw_actor_sp(actor, x, y, width = 144)
# Calculate if there is draw space for MaxHP
if width - 32 >= 108
sp_x = x + width - 108
flag = true
elsif width - 32 >= 48
sp_x = x + width - 48
flag = false
end
# Draw Shadow Effects for Battles
if $scene.is_a?(Scene_Battle)
self.contents.font.color = Color.new(0, 0, 0, 192)
self.contents.draw_text_shadow(x, y+1, 32, 32, $data_system.words.sp)
self.contents.draw_text_shadow(x+1, y, 32, 32, $data_system.words.sp)
self.contents.draw_text_shadow(sp_x, y+1, 48, 32, actor.sp.to_s, 2)
self.contents.draw_text_shadow(sp_x+1, y, 48, 32, actor.sp.to_s, 2)
if flag
self.contents.draw_text_shadow(sp_x + 49, y, 12, 32, "/", 1)
self.contents.draw_text_shadow(sp_x + 48, y+1, 12, 32, "/", 1)
self.contents.draw_text_shadow(sp_x + 60, y+1, 48, 32, actor.maxsp.to_s)
self.contents.draw_text_shadow(sp_x + 61, y, 48, 32, actor.maxsp.to_s)
end
end
# Draw "SP" text string
self.contents.font.color = system_color
self.contents.draw_text_shadow(x, y, 32, 32, $data_system.words.sp)
# Draw SP
self.contents.font.color = actor.sp == 0 ? knockout_color :
actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
self.contents.draw_text_shadow(sp_x, y, 48, 32, actor.sp.to_s, 2)
# Draw MaxSP
if flag
self.contents.font.color = normal_color
self.contents.draw_text_shadow(sp_x + 48, y, 12, 32, "/", 1)
self.contents.draw_text_shadow(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
end
end

#--------------------------------------------------------------------------
# ● ステートの描画
#--------------------------------------------------------------------------
def draw_actor_state(actor, x, y, width = 120)
# 元のメソッドに戻す
text = make_battler_state_text(actor, width, true)
self.contents.draw_text_shadow(x, y, width, 32, text, 1)
end
end


Thanks again.

And Yes, I would like to turn on and off the Script (Script 1 Enemy HP/SP) via a Switch.

Fenwick Lorecarver

Sorry about posting the scripts this way, not sure how to make the Script Content Hidden in a button.
 

Abbey

Member

Do you want it to be controlled by a switch?
If you do, just put them in a new script in this format:
Code:
If $game_switches[[i]Switch Number[/i]] == 0
[i]Script 1[/i]
else
[i]Script 2[/i]
end

Put it just above Main, like almost every other script. I obviously haven't tested, but I don't see why it wouldn't work...Okay, so I do, but I don't have the scripts, so I can't test it.

EDIT: Ignore me, I wasn't thinking
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top