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
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
248 RPGMV 플러그인 전투 도중 멤버교체가 가능해지는 플러그인 2 file Wailer 2016.01.13 1298 0
247 RPGMV 플러그인 Multiple HUD 6 file 러닝은빛 2016.01.12 2845 1
246 RPGVX Ace 스크립트 Custom Icon Sheets (커스텀 아이콘 적용 스크립트) plam 2016.01.10 470 0
245 RPGVX Ace 스크립트 Damage Popup by Dargor (데미지 수치 팝업하는 스크립트) plam 2016.01.10 612 0
244 RPGMV 플러그인 Icon Inventory and Details Window (인벤토리 아이템을 아이콘으로 보이게) plam 2016.01.06 903 0
243 RPGMV 플러그인 Advanced Game Time (게임에 시간개념을 적용해주는 플러그인) 2 plam 2016.01.06 1398 0
242 RPGMV 플러그인 Crafting System (아이템 조합 시스템) 3 plam 2016.01.06 1709 0
241 RPGMV 플러그인 MBS - Map Zoom plugin (맵을 확대,축소해주는 플러그인) HT9MAN 2016.01.06 895 0
240 RPGMV 플러그인 Action Sequence Pack 2 (전투모드 액션 플러그인) 2 plam 2016.01.05 1821 0
239 유니티 스크립트 유니티)캐릭터 좌우 이동 (C#) 4 zerosium 2016.01.05 979 0
238 유니티 스크립트 [C#] 보안 64비트 정수 맛난호빵 2016.01.04 382 0
237 RPGMV 플러그인 Weather EX 날씨 확장 플러그인입니다. 2 BeeBee 2016.01.03 1108 0
236 RPGMV 플러그인 발소리 재생 플러그인 6 file 러닝은빛 2015.12.28 1642 0
235 RPGMV 플러그인 스크린샷 파일 만들기 2 file 러닝은빛 2015.12.23 2148 0
234 RPGMV 플러그인 엔딩 후 타이틀과 BGM 변경 6 file 러닝은빛 2015.12.21 2302 0
233 RPGXP 스크립트 RPGXP ATB전투 시스템 예제(스크립트는 예제 안에 포함) 3 MagNesium 2015.11.17 772 0
232 RPGMV 플러그인 Drain Percentage​​ : Hp/Mp Drain 스킬 타입 백분율 계산 플러그인 2 file MKMV 2015.11.15 3017 0
231 RPGVX Ace 스크립트 파티원 기차처럼 줄줄이 붙는 스크립트. 1 file 천무 2015.11.12 3088 0
230 RPGMV 플러그인 Hidden Shop Goods (못사는 물건은 아예 숨겨지게 하는 플러그인) 파란별빛 2015.11.09 1037 0
229 RPGMV 플러그인 Menu Music MV (메뉴를 열때 음악을 콘트롤 하는 플러그인) 1 파란별빛 2015.11.09 964 0
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(김원배) | 사신지(김병국)