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
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
288 RPGMV 플러그인 타이틀 커맨드에 '게임종료'를 추가해줍니다. file 파란별빛 2015.10.26 114006 0
287 RPGVX Ace 스크립트 추천 스크립트 모음 2 철창노틸 2015.03.26 5850 1
286 RPGMV 플러그인 해상도 변경 플러그인 v0.1 4 file 카리스 2015.10.24 5685 2
285 RPGXP 스크립트 물가에가면 캐릭터를 반사시켜주는 스크립트 4 file 창조도시 2007.12.02 4994 7
284 RPGMV 플러그인 Mirror Area - RPG Maker MV 2 file 러닝은빛 2017.01.03 4728 0
283 RPGXP 스크립트 물가에가면 캐릭터를 반사시켜주는 스크립트 4 file 창조도시 2007.12.02 4489 6
282 RPGXP 스크립트 대화창에 이름&얼굴 띄우기 새로운방식. file 창조도시 2007.11.06 3594 3
281 RPGXP 스크립트 대화창에 이름&얼굴 띄우기 새로운방식. file 창조도시 2007.11.06 3462 3
280 RPGXP 스크립트 안티 렉 스크립트 2 2013.09.26 3327 1
279 RPGMV 플러그인 Item Stream 2 file 러닝은빛 2016.03.08 3196 0
278 RPGXP 스크립트 퀘스트 스크립트 21  운 2013.10.12 3100 2
277 RPGVX Ace 스크립트 파티원 기차처럼 줄줄이 붙는 스크립트. 1 file 천무 2015.11.12 3086 0
276 RPGXP 스크립트 특정범위내에들어오면이동하기 2 file A.M.S 2010.10.14 3082 0
275 RPGVX 스크립트 vx 한글이름입력 2 file 가가상 2010.05.21 3061 1
274 RPGXP 스크립트 2D 마인크래프트 프로젝트 7 2013.09.26 3047 2
273 RPGMV 플러그인 Drain Percentage​​ : Hp/Mp Drain 스킬 타입 백분율 계산 플러그인 2 file MKMV 2015.11.15 3017 0
272 RPGMV 플러그인 Multiple HUD 6 file 러닝은빛 2016.01.12 2839 1
271 RPGVX 스크립트 에너미 아이템 변화 스크립트 1 Evangelista 2009.05.29 2835 1
270 RPGXP 스크립트 대화창에 얼굴 띄우기& 대화창 명령어 모음. 1 file 창조도시 2008.12.31 2817 1
269 RPGXP 스크립트 3D스크립트!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6 공박사 2014.01.18 2805 2
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15






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

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