Project1
标题:
怎样限制战斗中每个队友只能选择攻击不同的敌人
[打印本页]
作者:
黑舞嗜
时间:
2011-10-15 11:05
标题:
怎样限制战斗中每个队友只能选择攻击不同的敌人
本帖最后由 黑舞嗜 于 2011-10-15 11:40 编辑
一般情况下所有队友都能选择攻击同一个敌人进行攻击或使用特技,如何做到让每个角色攻击不同的敌人呢(就是说一个敌人只能被一个角色选择)?
5VIP求脚本大神帮助
作者:
各种压力的猫君
时间:
2011-10-15 11:05
本帖最后由 各种压力的猫君 于 2011-10-15 14:32 编辑
#==============================================================================
# ■ Scene_Battle 各种压力的猫君_改_v1.3
#------------------------------------------------------------------------------
# 同一回合中同一敌人只能被一个主角定为目标。
#------------------------------------------------------------------------------
# v1.3 将全局变量改为局部变量,
# 新增当所有敌人均已被定位目标时,攻击指令无效化。
# 特技指令依然有效,但对敌人的攻击无效。
# 注:全体攻击特技不受此限制,但考虑到用了这个脚本
# 应该不会设置此类特技,因此未作屏蔽。
# v1.2 修正敌人队伍人数小于主角队伍人数导致的,
# 所有敌人均被选中时不能结束回合(感谢 赵灵儿)
# v1.1 修正转向前一个角色时丢掉的部分(感谢 禾西)
# v1.0 初版
#------------------------------------------------------------------------------
# 将本脚本插入到 Scene_Battle 4 脚本以下。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 主处理(Scene_Battle 1)
#--------------------------------------------------------------------------
alias old_main main
def main
# 初始化记录已选择敌人的数组
@selected_enemy = []
@exist_enemy = []
# 原主处理
old_main
end
#--------------------------------------------------------------------------
# ● 转向前一个角色的命令输入(Scene_Battle 3)
#--------------------------------------------------------------------------
alias old_phase3_prior_actor phase3_prior_actor
def phase3_prior_actor
# 删除记录已选择敌人中的最后一个
@selected_enemy.pop
# 原转向前一个角色的命令输入
old_phase3_prior_actor
end
#--------------------------------------------------------------------------
# ● 刷新画面 (角色命令回合 : 基本命令)(Scene_Battle 3)
#--------------------------------------------------------------------------
def update_phase3_basic_command
# 清空现在存在的敌人数组
@exist_enemy.clear
# 将现在存在的敌人丢入数组
for enemy in $game_troop.enemies
if enemy.exist?
@exist_enemy.push(enemy)
end
end
# 刷新命令窗口
@actor_command_window.refresh
# 如果所有敌人均被选中
if @selected_enemy.size == @exist_enemy.size
# 将攻击无效化
@actor_command_window.disable_item(0)
# 设置不可攻击标志
@cant_attack = true
else
# 清除不可攻击标志
@cant_attack = false
end
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 转向前一个角色的指令输入
phase3_prior_actor
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 角色指令窗口光标位置分之
case @actor_command_window.index
when 0 # 攻击
if @cant_attack == true
# 演奏不可用 SE
$game_system.se_play($data_system.buzzer_se)
else
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 0
# 开始选择敌人
start_enemy_select
end
when 1 # 特技
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
# 开始选择特技
start_skill_select
when 2 # 防御
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 1
# 转向下一位角色的指令输入
phase3_next_actor
when 3 # 物品
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 2
# 开始选择物品
start_item_select
end
return
end
end
#--------------------------------------------------------------------------
# ● 刷新画面画面 (角色命令回合 : 选择敌人)(Scene_Battle 3)
#--------------------------------------------------------------------------
def update_phase3_enemy_select
# 刷新敌人箭头
@enemy_arrow.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 选择敌人结束
end_enemy_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 判断敌人是否本回合已被选过
for i in @selected_enemy
@enemy_cant_select = true if [@enemy_arrow.index] == i
end
# 敌人已被选过的情况下
if @enemy_cant_select == true
# 演奏不可用 SE
$game_system.se_play($data_system.buzzer_se)
# 清除不可选标记
@enemy_cant_select = false
else
# 演奏确定 SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.target_index = @enemy_arrow.index
# 记录选择的敌人
@selected_enemy.push [@enemy_arrow.index]
# 选择敌人结束
end_enemy_select
# 显示特技窗口中的情况下
if @skill_window != nil
# 结束特技选择
end_skill_select
end
# 显示物品窗口的情况下
if @item_window != nil
# 结束物品选择
end_item_select
end
# 转到下一位角色的指令输入
phase3_next_actor
end
end
end
#--------------------------------------------------------------------------
# ● 刷新画面 (主回合步骤 1 : 准备行动)(Scene_Battle 4)
#--------------------------------------------------------------------------
alias old_update_phase4_step1 update_phase4_step1
def update_phase4_step1
# 清空记录已选择敌人的数组
@selected_enemy.clear
# 原刷新画面
old_update_phase4_step1
end
end
复制代码
哥德巴赫猜想要是如此简单就好了……
作者:
赵灵儿
时间:
2011-10-15 11:25
本帖最后由 赵灵儿 于 2011-10-15 11:28 编辑
可以说,你这5V是浪费了。此问题的难度相当于在数学上的哥德巴赫猜想。
给100V或许有某个超版会花上两三个月的时间解答。
5V得不到答案的。
放弃吧!送你一点经验来抚平你受伤的心灵。
如果真的要答案,就买一个置顶卡置顶24小时,然后把所有剩下VIP悬赏上吧
作者:
盈盈
时间:
2011-10-15 12:00
感觉好像难度没有LS说的这么夸张,虽然改动会蛮多的样子。
作者:
忧郁
时间:
2011-10-15 13:43
我回帖为了看哥德巴赫猜想
作者:
黑舞嗜
时间:
2011-10-15 13:56
本帖最后由 黑舞嗜 于 2011-10-15 14:14 编辑
各种压力的猫君 发表于 2011-10-15 13:40
哥德巴赫猜想要是如此简单就好了……
黑舞嗜于2011-10-15 14:14补充以下内容:
新问题:怎样固定角色和怪物的攻击顺序
版主君把这个问题告诉我就好了,那个不要了....不好意思
作者:
禾西
时间:
2011-10-15 14:21
本帖最后由 禾西 于 2011-10-15 14:30 编辑
我祇是來說明一下這個東西不難= =
CP 制會卽時release,所以這個東西沒有意義……
class Scene_Battle
alias update_phase3_enemy_select_sdjsh update_phase3_enemy_select
def update_phase3_enemy_select
if Input.trigger?(Input::C)
$game_party.actors.each do |battler|
if battler == @active_battler
break
end
if battler.current_action.target_index == @enemy_arrow.index
return
end
end
end
update_phase3_enemy_select_sdjsh
end
end
复制代码
固定角色和怪物的攻擊順序。回合制本來就是固定的不是嗎= =b
CP制的話,重定義出手速度就行了。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1