#=================================================
# ■ Simple_Action
#-------------------------------------------------
# Author: Bimilist[비밀소년]
# Desc: 액션 알피지의 간단한 버젼입니다.
# 고의적으로 함수를 한국어로 만들었으므로,
# 일본어로 번역시 작동여부는 불투명합니다.
#=================================================
#───────────────────────
# ♧ 그냥 유용한 함수
#───────────────────────
def 전멸했니?
# 전이벤트의 루프
for event in $game_map.events.values
# 이벤트의 좌표와 트리거가 일치했을 경우
if event.액션하니?
return false
end
end
return true
end
def 파티바꿔!
$game_player.rotate_party
end
# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Game_Event
# Game_Event를 액션용으로 바꾸어 줍니다.
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Game_Event < Game_Event
attr_accessor :gauge
#───────────────────────
# ♧ 프레임 갱신
#───────────────────────
def update
super
return if not 액션하니?
지워져! if 죽었니? and not 지워졌니?
리젠! if 죽었니? and 리젠되니?
어택!
end
#───────────────────────
# ♧ 되살리기 기능 추가
#───────────────────────
def unerase
@erased = false
refresh
end
#───────────────────────
# ♧ moveto(-10,-10)이 안되는 것을 대신.
#───────────────────────
def moveto_outside
@x = -10
@y = -10
@real_x = @x * 128
@real_y = @y * 128
@prelock_direction = 0
end
#───────────────────────
# ♧ 간편함을 위한 함수들
#───────────────────────
def 액션하니?
return (@hp != nil)
end
def 죽었니?
return false if not 액션하니?
return (@hp == 0)
end
def 리젠되니?
return (@regen_time != nil)
end
def 지워졌니?
return (@erased == true)
end
#───────────────────────
# ♧ 생명력과 타격치를 설정함으로서 액션을 시작
#───────────────────────
def 액션(hp, dmg)
return if 액션하니?
@maxhp = @hp = hp
@dmg = dmg
end
#───────────────────────
# ♧ 리젠한다. time은 초단위. 소수점도 가능.
#───────────────────────
def 리젠(time)
return if not 액션하니?
@regen_time = time
@regen_count = 0
end
#───────────────────────
# ♧ 추가로 돈과 경험치도 지급
#───────────────────────
def 상금(gold, exp)
@gold = gold
@exp = exp
end
#───────────────────────
# ♧ 아이템
#───────────────────────
def 아이템(id, rate = 100)
@item_id = id
@item_rate = rate
end
#───────────────────────
# ♧ 무기
#───────────────────────
def 무기(id, rate = 100)
@weapon_id = id
@weapon_rate = rate
end
#───────────────────────
# ♧ 자신에게 데미지를 준다
#───────────────────────
def 데미지(dmg)
return if not 액션하니?
@hp = [@hp - dmg, 0].max
@gauge = @hp.to_f / @maxhp.to_f
end
#───────────────────────
# ♧ 자신을 죽인다
#───────────────────────
def 지워져!
item = nil
if (@item_id and @item_rate)
if rand(100) < @item_rate
item = $data_items[@item_id]
end
end
weapon = nil
if (@weapon_id and @weapon_rate)
if rand(100) < @weapon_rate
weapon = $data_weapons[@weapon_id]
end
end
if (@gold and @exp)
$game_player.보상(@gold, @exp, item, weapon)
elsif (item)
$game_player.보상(0, 0, item)
elsif (weapon)
$game_player.보상(0, 0, weapon)
end
moveto_outside
erase
return if 리젠되니?
@hp = nil
@dmg = nil
@gold = nil
@exp = nil
@item_id = nil
@item_rate = nil
@weapon_id = nil
@weapon_rate = nil
end
#───────────────────────
# ♧ 리젠한다.
#───────────────────────
def 리젠!
return if not 리젠되니?
if @regen_count < @regen_time * 40
@regen_count += 1
return
end
moveto(@event.x, @event.y)
@hp = @maxhp
@regen_count = 0
unerase
end
#───────────────────────
# ♧ 자신이 공격한다
#───────────────────────
def 어택!
단거리_공격_간단히_주인공만
end
#───────────────────────
# ♧ 간단히 주인공만 공격하는 함수
# 간단함을 유지하기 위해서 딜레이를 위한 변수를
# 따로 만들지 않고 1.0초로 고정한다.
# 어택() 함수와 분리한 이유는 장거리 공격으로의
# 확장을 위해서이다.
# ps. 1초에 한번씩 주인공을 바라보며 공격하므로 강하다!!
#───────────────────────
def 단거리_공격_간단히_주인공만
if @delay == nil or @delay == 0
@delay = 40
else
@delay -= 1
return
end
dist = (x - $game_player.x).abs + (y - $game_player.y).abs
if dist == 1
turn_toward_player
$game_player.animation_id = 4
$game_player.데미지(@dmg)
end
end
end
# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Game_Player
# Game_Player를 액션용으로 바꾸어 줍니다.
# 간단함을 유지하기 위해 다음과 같이 만들었습니다.
# 1. 액션에 참여하는 액터는 오로지 파티맴버의
# 첫번째 케릭터가 되겠습니다.
# 2. 죽을 경우 파티 맴버들의 순서를 바꾸며,
# 모두 죽는 경우에는 게임오버로 처리됩니다.
# 3. 파티에 아무도 없는 경우 전투를 하지 않습니다.
# 4. 데미지 공식은 간단히 체력 빼기 타격치입니다.
# 즉, 방어력, 회피율, 힘 등은 모두 무시됩니다.
# 필요에 따라 개조하여 사용하세요.
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Game_Player < Game_Player
attr_accessor :gauge
#───────────────────────
# ♧ 프레임 갱신
#───────────────────────
def update
super
return if not 액션하니?
다이 if 죽었니?
어택
end
#───────────────────────
# ♧ 간편함을 위한 함수들
#───────────────────────
def 파티있니?
return ($game_party.actors.size != 0)
end
def 액션하니?
return 파티있니?
end
def 죽었니?
return false if not 파티있니?
return ($game_party.actors[0].hp == 0)
end
#───────────────────────
# ♧ 보상받고 메세지로 표기
#───────────────────────
def 보상(gold, exp, item, weapon = nil)
if 파티있니?
$game_party.actors[0].exp += exp
$game_party.gain_gold(gold)
case weapon
when RPG::Weapon
$game_party.gain_weapon(weapon.id, 1)
end
end
if not item and not weapon
간단메세지(sprintf("[%d]G / [%d]EXP를 획득!", gold, exp))
elsif not weapon
간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득!", gold, exp, item.name))
elsif not item
간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득!", gold, exp, weapon.name))
elsif not gold and not exp
간단메세지(sprintf("[%s] 획득! / [%s] 획득!", item.name, weapon.name))
else
간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득! / [%s] 획득!", gold, exp, item.name, weapon.name))
end
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
end
end
#───────────────────────
# ♧ 자신에게 데미지를 준다
#───────────────────────
def 데미지(dmg)
return if not 액션하니?
pdef = $game_party.actors[0].pdef
dex = $game_party.actors[0].dex
dmg = (dmg - (dex + pdef))
if dmg <= 0
dmg = 1
end
$game_party.actors[0].hp -= dmg
@gauge = $game_party.actors[0].hp.to_f / $game_party.actors[0].maxhp.to_f
end
#───────────────────────
# ♧ 자신을 죽인다
#───────────────────────
def 다이
# 게임 오버 판정
rotate_party
# $game_temp.gameover = $game_party.all_dead?
end
def rotate_party
return if $game_party.actors.size < 2
actor = $game_party.actors[0]
for i in 0..($game_party.actors.size - 2)
$game_party.actors[i] = $game_party.actors[i + 1]
end
$game_party.actors[$game_party.actors.size - 1] = actor
$game_player.refresh
end
#───────────────────────
# ♧ 자신이 공격한다
#───────────────────────
def 어택
단거리_공격_간단히_주인공만
end
#───────────────────────
# ♧ 적합한 이벤트를 골라내어 공격한다
# 간편함을 위해서 딜레이... 없음...!!!!
#───────────────────────
def 단거리_공격_간단히_주인공만
# 결정키가 눌리면
if Key.repeat?(24)
# 정면의 좌표를 계산
new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 전이벤트의 루프
for event in $game_map.events.values
# 이벤트의 좌표와 트리거가 일치했을 경우
if event.x == new_x and event.y == new_y and
luk= $game_party.actors[0].agi/20
cri= rand(100)
if $game_switches[21] == true
#스킬
event.animation_id = 70
event.데미지(($game_party.actors[0].atk+$game_party.actors[0].str)*2)
$game_switches[21] = false
elsif cri <= luk
#크리티컬
event.데미지(($game_party.actors[0].atk+$game_party.actors[0].str)*2)
event.animation_id = 103
else
#일반공격
event.데미지($game_party.actors[0].atk+$game_party.actors[0].str)
event.animation_id = 7
end
end
end
end
end
end
# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Sprite_Character > 작은게이지
# 케릭터에 작은 게이지를 표시합니다
# ver. SimpleAction
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Sprite_Character < Sprite_Character
def update
super
if @character.gauge != nil
gauge(@character.gauge)
@character.gauge = nil
end
if @_gauge_setup then
@_gauge_duration = [@_gauge_duration - 5, 0].max
@_gauge_sprite_b.x = self.x
@_gauge_sprite_b.y = self.y - self.oy
@_gauge_sprite_b.opacity = @_gauge_duration
@_gauge_sprite.x = self.x
@_gauge_sprite.y = self.y - self.oy
@_gauge_sprite.opacity = @_gauge_duration
end
end
def gauge(p)
setup_gauge if not @_gauge_setup
@_gauge_sprite.src_rect = Rect.new(0, 0, p * 30, 2)
@_gauge_duration = 255
end
def setup_gauge
dispose_gauge
@_gauge_setup = true
@_gauge_sprite = Sprite.new(self.viewport)
@_gauge_sprite.bitmap = Bitmap.new(30, 2)
@_gauge_sprite.bitmap.fill_rect(0, 0, 30, 2, Color.new(255, 255, 0))
@_gauge_sprite.ox = 15
@_gauge_sprite.oy = -1
@_gauge_sprite.z = 1000
@_gauge_sprite_b = Sprite.new(self.viewport)
@_gauge_sprite_b.bitmap = Bitmap.new(32, 4)
@_gauge_sprite_b.bitmap.fill_rect(0, 0, 32, 4, Color.new(0, 0, 0))
@_gauge_sprite_b.bitmap.fill_rect(1, 1, 30, 2, Color.new(255, 0, 0))
@_gauge_sprite_b.ox = 16
@_gauge_sprite_b.oy = 0
@_gauge_sprite_b.z = 999
end
def dispose_gauge
return if not @_gauge_setup
@_gauge_setup = false
@_gauge_sprite.dispose
@_gauge_sprite_b.dispose
end
def dispose
dispose_gauge
super
end
end
---
지우라고하면 바로 지우겠습니다.
크리티컬은 luk(agi였던가 dex였던가;;)이 높을수록 확률이 높아지고,
스킬은 스위치 21번이 켜져있을때 나가게 되어있습니다.
스위치를 병행해서 사용한거죠...
스킬을 더추가시키리면 elsif 게속 써주면 돼겠죠??? ;;;[자신없어서 의문문으로 --ㅋ]
.
.
.
네.. 뭐 그런거죠.[어디서많이본?ㅎㅎ]
# ■ Simple_Action
#-------------------------------------------------
# Author: Bimilist[비밀소년]
# Desc: 액션 알피지의 간단한 버젼입니다.
# 고의적으로 함수를 한국어로 만들었으므로,
# 일본어로 번역시 작동여부는 불투명합니다.
#=================================================
#───────────────────────
# ♧ 그냥 유용한 함수
#───────────────────────
def 전멸했니?
# 전이벤트의 루프
for event in $game_map.events.values
# 이벤트의 좌표와 트리거가 일치했을 경우
if event.액션하니?
return false
end
end
return true
end
def 파티바꿔!
$game_player.rotate_party
end
# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Game_Event
# Game_Event를 액션용으로 바꾸어 줍니다.
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Game_Event < Game_Event
attr_accessor :gauge
#───────────────────────
# ♧ 프레임 갱신
#───────────────────────
def update
super
return if not 액션하니?
지워져! if 죽었니? and not 지워졌니?
리젠! if 죽었니? and 리젠되니?
어택!
end
#───────────────────────
# ♧ 되살리기 기능 추가
#───────────────────────
def unerase
@erased = false
refresh
end
#───────────────────────
# ♧ moveto(-10,-10)이 안되는 것을 대신.
#───────────────────────
def moveto_outside
@x = -10
@y = -10
@real_x = @x * 128
@real_y = @y * 128
@prelock_direction = 0
end
#───────────────────────
# ♧ 간편함을 위한 함수들
#───────────────────────
def 액션하니?
return (@hp != nil)
end
def 죽었니?
return false if not 액션하니?
return (@hp == 0)
end
def 리젠되니?
return (@regen_time != nil)
end
def 지워졌니?
return (@erased == true)
end
#───────────────────────
# ♧ 생명력과 타격치를 설정함으로서 액션을 시작
#───────────────────────
def 액션(hp, dmg)
return if 액션하니?
@maxhp = @hp = hp
@dmg = dmg
end
#───────────────────────
# ♧ 리젠한다. time은 초단위. 소수점도 가능.
#───────────────────────
def 리젠(time)
return if not 액션하니?
@regen_time = time
@regen_count = 0
end
#───────────────────────
# ♧ 추가로 돈과 경험치도 지급
#───────────────────────
def 상금(gold, exp)
@gold = gold
@exp = exp
end
#───────────────────────
# ♧ 아이템
#───────────────────────
def 아이템(id, rate = 100)
@item_id = id
@item_rate = rate
end
#───────────────────────
# ♧ 무기
#───────────────────────
def 무기(id, rate = 100)
@weapon_id = id
@weapon_rate = rate
end
#───────────────────────
# ♧ 자신에게 데미지를 준다
#───────────────────────
def 데미지(dmg)
return if not 액션하니?
@hp = [@hp - dmg, 0].max
@gauge = @hp.to_f / @maxhp.to_f
end
#───────────────────────
# ♧ 자신을 죽인다
#───────────────────────
def 지워져!
item = nil
if (@item_id and @item_rate)
if rand(100) < @item_rate
item = $data_items[@item_id]
end
end
weapon = nil
if (@weapon_id and @weapon_rate)
if rand(100) < @weapon_rate
weapon = $data_weapons[@weapon_id]
end
end
if (@gold and @exp)
$game_player.보상(@gold, @exp, item, weapon)
elsif (item)
$game_player.보상(0, 0, item)
elsif (weapon)
$game_player.보상(0, 0, weapon)
end
moveto_outside
erase
return if 리젠되니?
@hp = nil
@dmg = nil
@gold = nil
@exp = nil
@item_id = nil
@item_rate = nil
@weapon_id = nil
@weapon_rate = nil
end
#───────────────────────
# ♧ 리젠한다.
#───────────────────────
def 리젠!
return if not 리젠되니?
if @regen_count < @regen_time * 40
@regen_count += 1
return
end
moveto(@event.x, @event.y)
@hp = @maxhp
@regen_count = 0
unerase
end
#───────────────────────
# ♧ 자신이 공격한다
#───────────────────────
def 어택!
단거리_공격_간단히_주인공만
end
#───────────────────────
# ♧ 간단히 주인공만 공격하는 함수
# 간단함을 유지하기 위해서 딜레이를 위한 변수를
# 따로 만들지 않고 1.0초로 고정한다.
# 어택() 함수와 분리한 이유는 장거리 공격으로의
# 확장을 위해서이다.
# ps. 1초에 한번씩 주인공을 바라보며 공격하므로 강하다!!
#───────────────────────
def 단거리_공격_간단히_주인공만
if @delay == nil or @delay == 0
@delay = 40
else
@delay -= 1
return
end
dist = (x - $game_player.x).abs + (y - $game_player.y).abs
if dist == 1
turn_toward_player
$game_player.animation_id = 4
$game_player.데미지(@dmg)
end
end
end
# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Game_Player
# Game_Player를 액션용으로 바꾸어 줍니다.
# 간단함을 유지하기 위해 다음과 같이 만들었습니다.
# 1. 액션에 참여하는 액터는 오로지 파티맴버의
# 첫번째 케릭터가 되겠습니다.
# 2. 죽을 경우 파티 맴버들의 순서를 바꾸며,
# 모두 죽는 경우에는 게임오버로 처리됩니다.
# 3. 파티에 아무도 없는 경우 전투를 하지 않습니다.
# 4. 데미지 공식은 간단히 체력 빼기 타격치입니다.
# 즉, 방어력, 회피율, 힘 등은 모두 무시됩니다.
# 필요에 따라 개조하여 사용하세요.
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Game_Player < Game_Player
attr_accessor :gauge
#───────────────────────
# ♧ 프레임 갱신
#───────────────────────
def update
super
return if not 액션하니?
다이 if 죽었니?
어택
end
#───────────────────────
# ♧ 간편함을 위한 함수들
#───────────────────────
def 파티있니?
return ($game_party.actors.size != 0)
end
def 액션하니?
return 파티있니?
end
def 죽었니?
return false if not 파티있니?
return ($game_party.actors[0].hp == 0)
end
#───────────────────────
# ♧ 보상받고 메세지로 표기
#───────────────────────
def 보상(gold, exp, item, weapon = nil)
if 파티있니?
$game_party.actors[0].exp += exp
$game_party.gain_gold(gold)
case weapon
when RPG::Weapon
$game_party.gain_weapon(weapon.id, 1)
end
end
if not item and not weapon
간단메세지(sprintf("[%d]G / [%d]EXP를 획득!", gold, exp))
elsif not weapon
간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득!", gold, exp, item.name))
elsif not item
간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득!", gold, exp, weapon.name))
elsif not gold and not exp
간단메세지(sprintf("[%s] 획득! / [%s] 획득!", item.name, weapon.name))
else
간단메세지(sprintf("[%d]G / [%d]EXP / [%s] 획득! / [%s] 획득!", gold, exp, item.name, weapon.name))
end
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
end
end
#───────────────────────
# ♧ 자신에게 데미지를 준다
#───────────────────────
def 데미지(dmg)
return if not 액션하니?
pdef = $game_party.actors[0].pdef
dex = $game_party.actors[0].dex
dmg = (dmg - (dex + pdef))
if dmg <= 0
dmg = 1
end
$game_party.actors[0].hp -= dmg
@gauge = $game_party.actors[0].hp.to_f / $game_party.actors[0].maxhp.to_f
end
#───────────────────────
# ♧ 자신을 죽인다
#───────────────────────
def 다이
# 게임 오버 판정
rotate_party
# $game_temp.gameover = $game_party.all_dead?
end
def rotate_party
return if $game_party.actors.size < 2
actor = $game_party.actors[0]
for i in 0..($game_party.actors.size - 2)
$game_party.actors[i] = $game_party.actors[i + 1]
end
$game_party.actors[$game_party.actors.size - 1] = actor
$game_player.refresh
end
#───────────────────────
# ♧ 자신이 공격한다
#───────────────────────
def 어택
단거리_공격_간단히_주인공만
end
#───────────────────────
# ♧ 적합한 이벤트를 골라내어 공격한다
# 간편함을 위해서 딜레이... 없음...!!!!
#───────────────────────
def 단거리_공격_간단히_주인공만
# 결정키가 눌리면
if Key.repeat?(24)
# 정면의 좌표를 계산
new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# 전이벤트의 루프
for event in $game_map.events.values
# 이벤트의 좌표와 트리거가 일치했을 경우
if event.x == new_x and event.y == new_y and
luk= $game_party.actors[0].agi/20
cri= rand(100)
if $game_switches[21] == true
#스킬
event.animation_id = 70
event.데미지(($game_party.actors[0].atk+$game_party.actors[0].str)*2)
$game_switches[21] = false
elsif cri <= luk
#크리티컬
event.데미지(($game_party.actors[0].atk+$game_party.actors[0].str)*2)
event.animation_id = 103
else
#일반공격
event.데미지($game_party.actors[0].atk+$game_party.actors[0].str)
event.animation_id = 7
end
end
end
end
end
end
# ━━━━━━━━━━━━━━━━━━━━━━━━
# ♣ Sprite_Character > 작은게이지
# 케릭터에 작은 게이지를 표시합니다
# ver. SimpleAction
# ━━━━━━━━━━━━━━━━━━━━━━━━
class Sprite_Character < Sprite_Character
def update
super
if @character.gauge != nil
gauge(@character.gauge)
@character.gauge = nil
end
if @_gauge_setup then
@_gauge_duration = [@_gauge_duration - 5, 0].max
@_gauge_sprite_b.x = self.x
@_gauge_sprite_b.y = self.y - self.oy
@_gauge_sprite_b.opacity = @_gauge_duration
@_gauge_sprite.x = self.x
@_gauge_sprite.y = self.y - self.oy
@_gauge_sprite.opacity = @_gauge_duration
end
end
def gauge(p)
setup_gauge if not @_gauge_setup
@_gauge_sprite.src_rect = Rect.new(0, 0, p * 30, 2)
@_gauge_duration = 255
end
def setup_gauge
dispose_gauge
@_gauge_setup = true
@_gauge_sprite = Sprite.new(self.viewport)
@_gauge_sprite.bitmap = Bitmap.new(30, 2)
@_gauge_sprite.bitmap.fill_rect(0, 0, 30, 2, Color.new(255, 255, 0))
@_gauge_sprite.ox = 15
@_gauge_sprite.oy = -1
@_gauge_sprite.z = 1000
@_gauge_sprite_b = Sprite.new(self.viewport)
@_gauge_sprite_b.bitmap = Bitmap.new(32, 4)
@_gauge_sprite_b.bitmap.fill_rect(0, 0, 32, 4, Color.new(0, 0, 0))
@_gauge_sprite_b.bitmap.fill_rect(1, 1, 30, 2, Color.new(255, 0, 0))
@_gauge_sprite_b.ox = 16
@_gauge_sprite_b.oy = 0
@_gauge_sprite_b.z = 999
end
def dispose_gauge
return if not @_gauge_setup
@_gauge_setup = false
@_gauge_sprite.dispose
@_gauge_sprite_b.dispose
end
def dispose
dispose_gauge
super
end
end
---
지우라고하면 바로 지우겠습니다.
크리티컬은 luk(agi였던가 dex였던가;;)이 높을수록 확률이 높아지고,
스킬은 스위치 21번이 켜져있을때 나가게 되어있습니다.
스위치를 병행해서 사용한거죠...
스킬을 더추가시키리면 elsif 게속 써주면 돼겠죠??? ;;;[자신없어서 의문문으로 --ㅋ]
.
.
.
네.. 뭐 그런거죠.[어디서많이본?ㅎㅎ]