RPGVX Ace 스크립트
2016.02.14 18:49

지속데미지 스크립트(MBS)

조회 수 1516 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

제가 사용해봤을때는 문제가 없었기에 올려봅니다

 

저작권자 : 한소영님

#==============================================================================
# ■ Mother Battle System
#------------------------------------------------------------------------------
# [사용법]
#  스킬이나 아이템의 메모 란에 아래 문구를 입력해주세요.
# <mbs: {type}, {interval}, {rate}>
#
# 1. {type} - 체력이 변동하는 타입을 설정합니다. 타입에는 두 가지가 존재합니다.
#   (1) lin - 선형 타입 Linear = 일정한 값이 더해지거나 감소합니다.
#   (2) pro - 비례 타입 Proportional = 남은 값에 비례하여 더해지거나 감소합니다.
# 2. {interval} - 체력이 변하는 간격을 설정합니다. (프레임 단위)
# 3. {rate} - 소수점을 포함하여 할푼리(0.xxx)를 적어주세요.
#
# [사용 예]
# <mbs: lin, 10, 0.01>
#
# [주의사항]
# 턴 종료 후에만 갱신되는 턴제 전투 시스템을 억지로 개조한 것인 만큼
# 어떤 오류가 있을지 장담할 수 없습니다.
#==============================================================================

class Game_ActionResult
 
  attr_accessor :mbs_type
  attr_accessor :mbs_interval
  attr_accessor :mbs_rate
 
  alias mother_battle_system_make_damage_sndp make_damage
  def make_damage(value, item)
    mother_battle_system_make_damage_sndp(value, item)
    if item.note =~ /<\s*mbs\s*:\s*(\S+)\s*\,\s*(\d+)\s*\,\s*(\d+\.?\d*)\s*>/mi
      @mbs_type = $1
      @mbs_interval = $2.to_i
      @mbs_rate = $3.to_f
    end
  end
 
end

class Game_Battler
 
  attr_accessor :mbs_death
  attr_accessor :mbs_damages
 
  alias mother_battle_system_execute_damage_sndp execute_damage
  def execute_damage(user)
    if @result.mbs_type.nil?
      mother_battle_system_execute_damage_sndp(user)
    else
      on_damage(@result.hp_damage) if @result.hp_damage > 0
      @mbs_damages = [] if @mbs_damages.nil?
      @mbs_damages.push({
        :type => @result.mbs_type,
        :frame => -1,
        :interval => @result.mbs_interval,
        :rate => @result.mbs_rate,
        :init => @result.hp_damage,
        :left => @result.hp_damage,
        :damage => true
      })
      self.mp -= @result.mp_damage
      user.mbs_damages = [] if user.mbs_damages.nil?
      user.mbs_damages.push({
        :type => @result.mbs_type,
        :frame => -1,
        :interval => @result.mbs_interval,
        :rate => @result.mbs_rate,
        :init => @result.hp_drain,
        :left => @result.hp_drain,
        :damage => false
      })
      user.mp += @result.mp_drain
    end
  end
 
  alias mother_battle_system_item_effect_recover_hp_sndp item_effect_recover_hp
  def item_effect_recover_hp(user, item, effect)
    if @result.mbs_type.nil?
      mother_battle_system_item_effect_recover_hp_sndp(user, item, effect)
    else
      value = (mhp * effect.value1 + effect.value2) * rec
      value *= user.pha if item.is_a?(RPG::Item)
      value = value.to_i
      @result.hp_damage -= value
      @result.success = true
      if item.note =~ /<\s*mbs\s*:\s*(\S+)\s*\,\s*(\d+)\s*\,\s*(\d+\.?\d*)\s*>/mi
        @mbs_damages = [] if @mbs_damage.nil?
        @mbs_damages.push({
          :type => $1,
          :frame => -1,
          :interval => $2.to_i,
          :rate => $3.to_f,
          :init => value,
          :left => value,
          :damage => false
        })
      end
    end
  end
 
  def refresh_mbs
    return if @mbs_damages.nil?
    @mbs_damages.each_with_index do |mbs_damage, index|
      mbs_damage[:frame] += 1
      next unless mbs_damage[:frame] % mbs_damage[:interval] == 0
      type = mbs_damage[:type]
      rate = mbs_damage[:rate]
      init = mbs_damage[:init]
      left = mbs_damage[:left]
      if type == "lin"
        hp_d = [[(init * rate).round, left].min, 1].max
      elsif type == "pro"
        hp_d = [[(left * rate).round, left].min, 1].max
      else
        next
      end
      if mbs_damage[:damage]
        self.hp -= hp_d
      elsif not mbs_damage[:damage] and not dead?
        self.hp += hp_d
      end
      mbs_damage[:left] -= hp_d
      @mbs_damages[index] = nil if mbs_damage[:left] <= 0
    end
    @mbs_damages.compact!
  end
 
end

class Scene_Battle
 
  alias mother_battle_system_update_basic_sndp update_basic
  def update_basic
    for battler in all_battle_members
      next if battler.mbs_damages.nil?
      battler.refresh_mbs
      if battler.dead? and not battler.mbs_death
        battler.mbs_death = true
        battler.perform_collapse_effect
      end
    end
    @actor_window.refresh
    @enemy_window.refresh
    refresh_status
    mother_battle_system_update_basic_sndp
  end
 
end

Who's 天下太平

제작기간이 있다. 그래서 뭐할것인가, 중요한건 완성인데. -취미 : 게임, 피아노, 애니 -반도에 사는 흔한 인간 -알만툴 접한 기간 : 4년(활동 : 2년) -기타사항 : 이벤터, 폐인

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
22 RPGVX Ace 스크립트 VXA에서 XBOX360 컨트롤러 사용 여부 체크 file 러닝은빛 2018.07.15 689 0
21 RPGVX Ace 스크립트 LuD Script Package 1 file LuD 2017.08.16 1218 0
20 RPGVX Ace 스크립트 [VXAce] 레이어 맵 <layer> 시스템 file LuD 2017.08.07 785 0
19 RPGVX Ace 스크립트 VX Ace 용 8방향 이동 스크립트 1 도라지power 2016.03.17 1653 0
» RPGVX Ace 스크립트 지속데미지 스크립트(MBS) 天下太平 2016.02.14 1516 0
17 RPGVX Ace 스크립트 Custom Icon Sheets (커스텀 아이콘 적용 스크립트) plam 2016.01.10 470 0
16 RPGVX Ace 스크립트 Damage Popup by Dargor (데미지 수치 팝업하는 스크립트) plam 2016.01.10 612 0
15 RPGVX Ace 스크립트 파티원 기차처럼 줄줄이 붙는 스크립트. 1 file 천무 2015.11.12 3086 0
14 RPGVX Ace 스크립트 타이틀 메뉴 위치 바꾸기 vx 및 vx ace 여줄가리 2015.09.21 1995 0
13 RPGVX Ace 스크립트 Mog Hunter 스페셜 철창노틸 2015.03.26 762 1
12 RPGVX Ace 스크립트 추천 스크립트 모음 2 철창노틸 2015.03.26 5850 1
11 RPGVX Ace 스크립트 Random Dungeon Generator - Random Room 7 JunkMan 2014.10.11 928 0
10 RPGVX Ace 스크립트 Random Dungeon Generator - Random Cave JunkMan 2014.10.08 607 0
9 RPGVX Ace 스크립트 RPG Maker VX Lite Maze(미로) 만들기 (DFS 사용) 1 JunkMan 2014.10.06 965 2
8 RPGVX Ace 스크립트 Ace로 만든 습작 랜덤 위치로 지형변환. JunkMan 2014.10.04 511 0
7 RPGVX Ace 스크립트 VX Ace 스크립트 사이트 1 제피 2014.08.07 2672 0
6 RPGVX Ace 스크립트 RPG Maker VX Ace용 640*480 리사이징 스크립트 3 HUR 2014.08.04 1267 0
5 RPGVX Ace 스크립트 RPG Maker VX Ace용 로고 스크립트 3 HUR 2014.08.04 1179 0
4 RPGVX Ace 스크립트 Rpg Vx Ace 에서 이벤트 이름 팝업 3 빙냥이 2014.01.17 1892 0
3 RPGVX Ace 스크립트 텍스트 파일생성 1 휴리드 2013.09.30 654 0
Board Pagination Prev 1 2 Next
/ 2






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)