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
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
26 RPGVX 스크립트 3D 그래픽 파티클 스크립트 1 청담 2013.09.29 1272 0
25 RPGVX 스크립트 vx 전용 오토세이브<자동저장> 고진수 2011.08.31 2729 0
24 RPGVX 스크립트 vx 전용 오토세이브<자동저장> 고진수 2011.08.31 2800 0
23 RPGVX 스크립트 1인용메뉴 file A.M.S 2010.07.18 2560 0
22 RPGVX 스크립트 vx 한글이름입력 2 file 가가상 2010.05.21 3061 1
21 RPGVX 스크립트 vx 한글이름입력 1 file 가가상 2010.05.21 2771 1
20 RPGVX 스크립트 Window_Message_Plus v3.2 3 1 file 에존 2009.11.29 2446 1
19 RPGVX 스크립트 Window_Message_Plus v3.2 3 file 에존 2009.11.29 2647 1
18 RPGVX 스크립트 이벤트커맨드 스크립트 조건분기법 모음 1 Evangelista 2009.11.18 2589 2
17 RPGVX 스크립트 이벤트커맨드 스크립트 조건분기법 모음 1 Evangelista 2009.11.18 2533 2
16 RPGVX 스크립트 이벤트커맨드 스크립트 사용법 모음 2 Evangelista 2009.07.21 2530 2
15 RPGVX 스크립트 이벤트커맨드 스크립트 사용법 모음 2 Evangelista 2009.07.21 2645 2
14 RPGVX 스크립트 에너미 아이템 변화 스크립트 1 Evangelista 2009.05.29 2460 1
13 RPGVX 스크립트 에너미 아이템 변화 스크립트 1 Evangelista 2009.05.29 2835 1
12 RPGVX 스크립트 액터선택지이벤트제작 간편화 스크립트 1 Evangelista 2009.04.30 2078 3
11 RPGVX 스크립트 액터선택지이벤트제작 간편화 스크립트 1 Evangelista 2009.04.30 2537 3
10 RPGVX 스크립트 이벤트커맨드 스크립트 관련 설명 3 Evangelista 2009.01.29 2163 3
9 RPGVX 스크립트 이벤트커맨드 스크립트 관련 설명 3 Evangelista 2009.01.29 2655 3
8 RPGVX 스크립트 현재 파티내 캐릭터를 선택지로 처리할 때 간편히 하자. file Evangelista 2009.01.01 1776 1
7 RPGVX 스크립트 현재 파티내 캐릭터를 선택지로 처리할 때 간편히 하자. file Evangelista 2009.01.01 2277 1
Board Pagination Prev 1 2 Next
/ 2






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

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