Project1
标题:
战斗时表情如何根据状态变更?
[打印本页]
作者:
Cenarf
时间:
2020-3-3 00:35
标题:
战斗时表情如何根据状态变更?
原帖https://rpg.blue/thread-404742-1-1.html
工程也是从那里借的。工程如下
有3个问题:
1.【主要】经测试其他表情都可以正常按条件变更,但受到伤害(6号)和回复(5号)时表情不会变化?
2.【主要】可不可以在角色进入异常状态(中毒,黑暗之类)时也变化至3号(hp≤25%)表情?
3.【次要】经测试在防御时2号角色表情变化正常持续一回合,但1号角色只持续了90帧?
如果可以的话能麻烦直接修改脚本吗...因为不懂脚本,头铁对着原工程看了一个小时也没看出哪有问题...
Project2·改.rar
2020-3-3 00:32 上传
点击文件名下载附件
1.59 MB, 下载次数: 59
作者:
Cenarf
时间:
2020-3-3 07:37
以下是出问题的代码,能直接告诉我代码怎么改也可以,十分感谢
=begin
说明
$vic 战斗胜利时自动开启
$ating 攻击/技能时自动开启
$tffing 回复时自动开启
$hpd 受伤时自动开启
$ging 防御时自动开启
为了方便修改,在关键地方标有注释
下面是关于问题的修复状态
1.请参考我修改过的数据库中对物品的设置
2.经过初步测试修复完毕
3.经过初步测试修复完毕
4.好像没注意到嘛...(还是我对这个问题的理解有问题0w0)
5.因为可无视所以无视了....当然需要的话可以修复一下啦
其余的问题:
战斗胜利后表情显示 √
结束消息移动到上方 √
=end
module BattleManager
def self.process_victory#战斗胜利时的处理
$vic = true
$ating = false
$tffing = false
$hpd = false
$gu = false
$ging = false
play_battle_end_me
replay_bgm_and_bgs
$game_message.position = 1#显示胜利信息的窗口的位置(0 上方,1 中间,2 下方)
$game_message.add(sprintf(Vocab::Victory, $game_party.name))
display_exp
gain_gold
gain_drop_items
gain_exp
SceneManager.return
battle_end(0)
return true
end
def self.process_escape#逃跑时的处理
$ating = false
$tffing = false
$hpd = false
$gu = false
$ging = false
$game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
success = @preemptive ? true : (rand < @escape_ratio)
Sound.play_escape
if success
process_abort
else
@escape_ratio += 0.1
$game_message.add('\.' + Vocab::EscapeFailure)
$game_party.clear_actions
end
wait_for_message
return success
end
def self.process_abort#战斗中止时的处理
$ating = false
$tffing = false
$hpd = false
$gu = false
$ging = false
replay_bgm_and_bgs
SceneManager.return
battle_end(1)
return true
end
end
class Scene_Battle
def start
super
$tffing = false
$vic = false
create_spriteset
create_all_windows
BattleManager.method_wait_for_message = method(:wait_for_message)
end
def use_item
item = @subject.current_action.item
@log_window.display_use_item(@subject, item)
@subject.use_item(item)
refresh_status
targets = @subject.current_action.make_targets.compact
show_animation(targets, item.animation_id)
targets.each {|target| item.repeats.times { invoke_item(target, item)
$tffing = false
$hpd = false
refresh_status
} }
end
def command_guard
$gu = true
BattleManager.actor.input.set_guard
next_command
end
def show_animation(targets, animation_id)
#这一部分的思路是:(觉得不对可以修改,可能考虑的不周全)
if @subject.is_a?(Game_Actor) #如果施法者是我方
if @subject.current_action.targets_for_friends #如果目标是队友
if $gu #如果施法者选择的是防御
targets.each do |target|
$ging = true #正在防御中
$gid = target.id
end
else#如果不是的话(就是说不在防御中,那就是说在攻击或技能或物品)
$ating = true
$atid = @subject.id
end
else
$ating = true
$atid = @subject.id
end
end
refresh_status
if animation_id < 0
show_attack_animation(targets)
else
show_normal_animation(targets, animation_id)
end
@log_window.wait
wait_for_animation
$ating = false
$tffing = false
$hpd = false
refresh_status
end
def update
super
if BattleManager.in_turn?
process_event
process_action
end
BattleManager.judge_win_loss
end
def turn_end
#由于防御是一整个回合都在执行,所以在回合结束才关闭
$gu = false
$ging = false
all_battle_members.each do |battler|
battler.on_turn_end
refresh_status
@log_window.display_auto_affected_status(battler)
@log_window.wait_and_clear
end
BattleManager.turn_end
process_event
start_party_command_selection
end
end
class Window_BattleStatus
def draw_basic_area(rect, actor)
draw_actor_name(actor, rect.x + 96, rect.y, 100)
draw_actor_face(actor, rect.x, rect.y, !actor.dead?)
draw_actor_icons(actor, rect.x, rect.y, rect.width+8)
end
def draw_actor_face(actor, x, y, enabled = true)
#重点部分
#上面的优先于下面的条件
if if $vic && actor.hp != 0 #胜利时
draw_face(actor.face_name, actor.face_index+7, x, y, enabled)
elsif $ating && actor.id == $atid #除了正在防御外,行动者的头像更改
draw_face(actor.face_name, actor.face_index+1, x, y, enabled)
elsif $tffing && actor.id == $tffid #如果受到回复,被回复者的头像更改
draw_face(actor.face_name, actor.face_index+4, x, y, enabled)
elsif $hpd && actor.id == $hpdid # 如果受到伤害,受到伤害者头像更变
draw_face(actor.face_name, actor.face_index+5, x, y, enabled)
elsif $ging && actor.id == $gid #正在防御者的头像更改
draw_face(actor.face_name, actor.face_index+6, x, y, enabled)
else
if (actor.hp.to_f/actor.mhp) >= 0.25 #血量比>=0.25
draw_face(actor.face_name, actor.face_index, x, y, enabled)
elsif (actor.hp.to_f/actor.mhp) < 0.25 && actor.hp != 0 #血量比<0.25并且没死
draw_face(actor.face_name, actor.face_index+2, x, y, enabled)
elsif actor.hp == 0#死了
draw_face(actor.face_name, actor.face_index+3, x, y, enabled)
end
end
end
end
class Game_Battler
def execute_damage(user)
on_damage(@result.hp_damage) if @result.hp_damage > 0
self.hp -= @result.hp_damage
self.mp -= @result.mp_damage
user.hp += @result.hp_drain
user.mp += @result.mp_drain
if @result.hp_damage > 0
if self.is_a?(Game_Actor)
$hpd = true
$hpdid = self.id
end
end
if @result.hp_damage < 0 or @result.mp_damage < 0
if self.is_a?(Game_Actor)
$tffing = true
$tffid = self.id
end
end
end
end
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1