<META content="Namo WebEditor v6.0" name=generator>캐릭터의 HP/SP상태를 맵화면에 표시해주는 스크립트 입니다. #주의사항 #스윗치의 ID는 게임상에서 이벤트 만들때 쓰이는 "스위치의 조작"의 "스위치 번호"에 해당합니다. #저 같은 경우 15번 스위치가 게임 시작시 제일 먼저 on하도록 만들었기 때문에 스윗치의 ID가 15입니다. #◆◇◆◇◆-----XRXS54. 맵상에서 간이 윈도우 표시 ver1. 0 -----◇◆◇◆◇ # by 각궁 # 「디폴트 기능 & 사양」 # ·WIN_2 = true. (이)라고 해도, 스윗치가 ON로 한편, 엑터가 존재하지 않으면 # 윈도우는 표시되지 않습니다. 이 3 요소가 갖추어졌을 때에 윈도우를 표시합니다. # ·반대로 이 요소가 하나에서도 빠지면(자) 윈도우는 자동적으로 비표시가 됩니다. # ·트크르 개시시는 스윗치는 OFF이므로, ON로 하지 않으면 표시되지 않습니다. #------------------------------------------------------------------ # 커스터마이즈(customize) 포인트 #(*존재하지 않는 스윗치를 지정하시면(자) 에러가 됩니다. ) #---------------------------------------------------------------- WIN_1 = true # 엑터 1용 윈도우를 표시한다면 true, 하지 않으면 false. SWITVH_1 = 15 # 엑터 1용 윈도우의 표시/비표시에 대응하는 스윗치의 ID. #스위치에 관한 설명은 위를 참고해 주세요. OPACITY_1 = 50 # 엑터 1용 윈도우의 투명도(0으로 가까울 정도 투명) X_1 = 0 # 엑터 1용 윈도우의 X좌표 Y_1 = 384 # 엑터 1용 윈도우의 Y좌표 WIN_2 = true # 엑터 2용 윈도우를 표시한다면 true, 하지 않으면 false. SWITVH_2 = 15 # 엑터 2용 윈도우의 표시/비표시에 대응하는 스윗치의 ID. #스위치에 관한 설명은 위를 참고해 주세요. OPACITY_2 = 50 # 엑터 2용 윈도우의 투명도(0으로 가까울 정도 투명) X_2 = 160 # 엑터 2용 윈도우의 X좌표 Y_2 = 384 # 엑터 2용 윈도우의 Y좌표 WIN_3 = true # 엑터 3용 윈도우를 표시한다면 true, 하지 않으면 false. SWITVH_3 = 15 # 엑터 3용 윈도우의 표시/비표시에 대응하는 스윗치의 ID. #스위치에 관한 설명은 위를 참고해 주세요. OPACITY_3 = 50 # 엑터 3용 윈도우의 투명도(0으로 가까울 정도 투명) X_3 = 320 # 엑터 3용 윈도우의 X좌표 Y_3 = 384 # 엑터 3용 윈도우의 Y좌표 WIN_4 = true # 엑터 4용 윈도우를 표시한다면 true, 하지 않으면 false. SWITVH_4 = 15 # 엑터 4용 윈도우의 표시/비표시에 대응하는 스윗치의 ID. #스위치에 관한 설명은 위를 참고해 주세요. OPACITY_4 = 100 # 엑터 4용 윈도우의 투명도(0으로 가까울 정도 투명) X_4 = 480 # 엑터 4용 윈도우의 X좌표 Y_4 = 384 # 엑터 4용 윈도우의 Y좌표 SET_SP = [true, true, true, true] # 각 윈도우의 SP표시 설정. false로 비표시. OPTION = 16 # 「메세지 윈도우 표시시는 간이 윈도우를 소거한다」 # (이)라고 하는 기능의 ON/OFF에 대응하는 스윗치의 ID. #========================================================================= # ■ Scene_Map #========================================================================= class Scene_Map #--------------------------------------------------------------------- # ● 프레임 갱신 #--------------------------------------------------------------------- alias main_tokimiya main def main # 간이 윈도우 1을 작성 @simple_window1 = Window_MapStatus.new(X_1, Y_1, 0) @simple_window1.opacity = OPACITY_1 @simple_window1.visible = $game_switches[SWITVH_1] unless $game_party.actors.size > 0 @simple_window1.visible = false end # 간이 윈도우 2를 작성 @simple_window2 = Window_MapStatus.new(X_2, Y_2, 1) @simple_window2.opacity = OPACITY_2 @simple_window2.visible = $game_switches[SWITVH_2] unless $game_party.actors.size > 1 @simple_window2.visible = false end # 간이 윈도우 3을 작성 @simple_window3 = Window_MapStatus.new(X_3, Y_3, 2) @simple_window3.opacity = OPACITY_3 @simple_window3.visible = $game_switches[SWITVH_3] unless $game_party.actors.size > 2 @simple_window3.visible = false end # 간이 윈도우 4를 작성 @simple_window4 = Window_MapStatus.new(X_4, Y_4, 3) @simple_window4.opacity = OPACITY_4 @simple_window4.visible = $game_switches[SWITVH_4] unless $game_party.actors.size > 3 @simple_window4.visible = false end main_tokimiya # 구메소드의 호출 # 간이 윈도우의 해방 @simple_window1.dispose @simple_window2.dispose @simple_window3.dispose @simple_window4.dispose end #--------------------------------------------------------------------- # ● 프레임 갱신 #--------------------------------------------------------------------- alias update_tokimiya update def update update_tokimiya # 구메소드의 호출 # 이전의 파라미터와 상위가 있으면, 내용을 갱신한다. # # 윈도우 1의 갱신. if WIN_1 == true and $game_party.actors.size > 0 # 데이터의 갱신 actor = $game_party.actors[0] factor_1 = @simple_window1.before_1[0] != actor.name factor_2 = @simple_window1.before_1[1] != actor.hp factor_3 = @simple_window1.before_1[2] != actor.sp if factor_1 or factor_2 or factor_3 @simple_window1.before_1[0] = actor.name @simple_window1.before_1[1] = actor.hp @simple_window1.before_1[2] = actor.sp @simple_window1.refresh(0) end # 비표시 기능의 실행 if @message_window.visible == true and $game_switches[OPTION] == true @simple_window1.before_1[3] = false @simple_window1.visible = false elsif @simple_window1.before_1[3] != $game_switches[SWITVH_1] @simple_window1.before_1[3] = $game_switches[SWITVH_1] @simple_window1.visible = $game_switches[SWITVH_1] end end # 윈도우 2의 갱신. if WIN_2 == true and $game_party.actors.size > 1 # 데이터의 갱신 actor = $game_party.actors[1] factor_1 = @simple_window2.before_2[0] != actor.name factor_2 = @simple_window2.before_2[1] != actor.hp factor_3 = @simple_window2.before_2[2] != actor.sp if factor_1 or factor_2 or factor_3 @simple_window2.before_2[0] = actor.name @simple_window2.before_2[1] = actor.hp @simple_window2.before_2[2] = actor.sp @simple_window2.refresh(1) # 윈도우를 강제적으로 생성 @simple_window2.before_2[3] = true @simple_window2.visible = true end # 비표시 기능의 실행 if @message_window.visible == true and $game_switches[OPTION] == true @simple_window2.before_2[3] = false @simple_window2.visible = false elsif @simple_window2.before_2[3] != $game_switches[SWITVH_2] @simple_window2.before_2[3] = $game_switches[SWITVH_2] @simple_window2.visible = $game_switches[SWITVH_2] end # 엑터가 존재하지 않는데 윈도우가 표시된 채로의 경우. elsif @simple_window2.visible == true and @simple_window2.before_2 != nil # 윈도우를 소거. @simple_window2.before_2[3] = false @simple_window2.visible = false end # 윈도우 3의 갱신. if WIN_3 == true and $game_party.actors.size > 2 # 데이터의 갱신 actor = $game_party.actors[2] factor_1 = @simple_window3.before_3[0] != actor.name factor_2 = @simple_window3.before_3[1] != actor.hp factor_3 = @simple_window3.before_3[2] != actor.sp if factor_1 or factor_2 or factor_3 @simple_window3.before_3[0] = actor.name @simple_window3.before_3[1] = actor.hp @simple_window3.before_3[2] = actor.sp @simple_window3.refresh(2) # 윈도우를 강제적으로 생성 @simple_window3.before_3[3] = true @simple_window3.visible = true end # 비표시 기능의 실행 if @message_window.visible == true and $game_switches[OPTION] == true @simple_window3.before_3[3] = false @simple_window3.visible = false elsif @simple_window3.before_3[3] != $game_switches[SWITVH_3] @simple_window3.before_3[3] = $game_switches[SWITVH_3] @simple_window3.visible = $game_switches[SWITVH_3] end # 엑터가 존재하지 않는데 윈도우가 표시된 채로의 경우. elsif @simple_window3.visible == true and @simple_window3.before_3 != nil # 윈도우를 소거. @simple_window3.before_3[3] = false @simple_window3.visible = false end # 윈도우 4의 갱신. if WIN_4 == true and $game_party.actors.size > 3 # 데이터의 갱신 actor = $game_party.actors[3] factor_1 = @simple_window4.before_4[0] != actor.name factor_2 = @simple_window4.before_4[1] != actor.hp factor_3 = @simple_window4.before_4[2] != actor.sp if factor_1 or factor_2 or factor_3 @simple_window4.before_4[0] = actor.name @simple_window4.before_4[1] = actor.hp @simple_window4.before_4[2] = actor.sp @simple_window4.refresh(3) # 윈도우를 강제적으로 생성 @simple_window4.before_4[3] = true @simple_window4. visible = true end # 비표시 기능의 실행 if @message_window.visible == true and $game_switches[OPTION] == true @simple_window4.before_4[3] = false @simple_window4.visible = false elsif @simple_window4.before_4[3] != $game_switches[SWITVH_4] @simple_window4.before_4[3] = $game_switches[SWITVH_4] @simple_window4.visible = $game_switches[SWITVH_4] end # 엑터가 존재하지 않는데 윈도우가 표시된 채로의 경우. elsif @simple_window4.visible == true and @simple_window4.before_4 != nil # 윈도우를 소거. @simple_window4.before_4[3] = false @simple_window4.visible = false end end end #========================================================================= # ■ Window_MapStatus #========================================================================= class Window_MapStatus < Window_Base #-------------------------------------------------------------------------- # ○공개 인스턴스 변수 #-------------------------------------------------------------------------- attr_accessor :before_1 # 갱신전의 윈도우 1의 파라미터 attr_accessor :before_2 # 갱신전의 윈도우 2의 파라미터 attr_accessor :before_3 # 갱신전의 윈도우 3의 파라미터 attr_accessor :before_4 # 갱신전의 윈도우 4의 파라미터 #--------------------------------------------------------------------- # ● 프레임 갱신 #--------------------------------------------------------------------- def initialize(x, y, id) super(x, y, 160,96) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.size = 18 @before_1=[] @before_2=[] @before_3=[] @before_4=[] # 현단계의 엑터의 파라미터와 가시 상태를 기억. data # 항목의 묘화. refresh(id) end #-------------------------------------------------------------------------- # ● 항목의 묘화 #-------------------------------------------------------------------------- def data # 엑터 1의 기억(다만, 파티가 1명 이상의 경우) if $game_party.actors.size > 0 actor = $game_party.actors[0] @before_1 = [actor.name, actor.hp, actor.sp, true] end # 엑터 2의 기억(다만, 파티가 2명 이상의 경우) if $game_party.actors.size > 1 actor = $game_party.actors[1] @before_2 = [actor.name, actor.hp, actor.sp, true] end # 엑터 3의 기억(다만, 파티가 3명 이상의 경우) if $game_party.actors.size > 2 actor = $game_party.actors[2] @before_3 = [actor.name, actor.hp, actor.sp, true] end # 엑터 3의 기억(다만, 파티가 4명 이상의 경우) if $game_party.actors.size > 3 actor = $game_party.actors[3] @before_4 = [actor.name, actor.hp, actor.sp, true] end end #-------------------------------------------------------------------------- # ● 항목의 묘화 #-------------------------------------------------------------------------- def refresh(id) # 재묘화를 위해서(때문에) 일단 내용을 파기 한다 self.contents.clear # 대응하는 엑터가 없으면, 아무것도하지 않고 종료한다. actor = $game_party.actors[id] if actor == nil return end # 이름의 묘화 draw_actor_name(actor, 0, -5) # HP의 묘화 if SET_SP[id] draw_actor_hp_custom(actor, 0, 18) else draw_actor_hp_custom(actor, 0, 28) end # SP의 묘화 if SET_SP[id] draw_actor_sp_custom(actor, 0, 36) end end #-------------------------------------------------------------------------- # ● HP 의 묘화 # actor : 엑터 # x : 묘화처 X 좌표 # y : 묘화처 Y 좌표 # width : 묘화처의 폭 #-------------------------------------------------------------------------- def draw_actor_hp_custom(actor, x, y, width = 144) # 캐릭터 라인 "HP" 를 묘화 self.contents.font.color = system_color self.contents.draw_text(x, y, 32, 32, $data_system.words.hp) # MaxHP 를 묘화 하는 스페이스가 있을까 계산 if width - 32 >= 108 hp_x = x + width - 108 flag = true elsif width - 32 >= 48 hp_x = x + width - 48 flag = false end # HP 를 묘화 self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color self.contents.draw_text(hp_x - 12, y, 48, 32, actor.hp.to_s, 2) # MaxHP 를 묘화 if flag self.contents.font.color = normal_color self.contents.draw_text(hp_x + 48 - 12, y, 12, 32, "/", 1) self.contents.draw_text(hp_x + 60 - 12, y, 48, 32, actor.maxhp.to_s) end end #-------------------------------------------------------------------------- # ● SP 의 묘화 # actor : 엑터 # x : 묘화처 X 좌표 # y : 묘화처 Y 좌표 # width : 묘화처의 폭 #-------------------------------------------------------------------------- def draw_actor_sp_custom(actor, x, y, width = 144) # 캐릭터 라인 "SP" 를 묘화 self.contents.font.color = system_color self.contents.draw_text(x, y, 32, 32, $data_system.words.sp) # MaxSP 를 묘화 하는 스페이스가 있을까 계산 if width - 32 >= 108 sp_x = x + width - 108 flag = true elsif width - 32 >= 48 sp_x = x + width - 48 flag = false end # SP 를 묘화 self.contents.font.color = actor.sp == 0 ? knockout_color : actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color self.contents.draw_text(sp_x - 12, y, 48, 32, actor.sp.to_s, 2) # MaxSP 를 묘화 if flag self.contents.font.color = normal_color self.contents.draw_text(sp_x + 48 - 12, y, 12, 32, "/", 1) self.contents.draw_text(sp_x + 60 - 12, y, 48, 32, actor.maxsp.to_s) end end end