Project1
标题:
地图技能和援助技能无法使用
[打印本页]
作者:
wly611341
时间:
2014-1-1 23:59
标题:
地图技能和援助技能无法使用
本帖最后由 wly611341 于 2014-1-2 00:01 编辑
我用的战斗系统是ARPG系统 v1.0 ,因为这个脚本是从别的游戏中拷贝出来的,所以他多多少少带了些东西,其中就包括了地图技能,援助技能和危机技能。
但是,这些技能在那个游戏中就可以使用,在我的游戏中就无法使用。也不知道是哪里出了错,求前辈们帮帮忙。不按技能键没事,一按就挂。
会弹出对话框"no implicit conversion from nil to integer"
出错的是这句’ check_event_skill($data_skills[SKILL_IN_MENU[$game_party.actors[1].id-1]], $game_party.actors[1])‘
就是下面代码的第160句
全代码如下
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# 处理主角的类。事件启动的判定、以及地图的滚动等功能。
# 本类的实例请参考 $game_player。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
# 同伴人数为 0 的情况下
if $game_party.actors.size == 0
# 清除角色的文件名及对像
@character_name = ""
@character_hue = 0
# 分支结束
return
end
# 获取带头的角色
actor = $game_party.actors[0]
# 设置角色的文件名及对像
@character_name = actor.character_name
if $game_map.battle?
@need_move_speed = 4 + $game_party.actors[0].agi / 80
if @need_move_speed > 7
@need_move_speed = 7
end
else
@need_move_speed = 5
end
@character_hue = actor.character_hue
# 初始化不透明度和合成方式子
[url=home.php?mod=space&uid=316553]@opacity[/url] = 255
@blend_type = 0
end
#--------------------------------------------------------------------------
# ● 画面更新
#--------------------------------------------------------------------------
def update
# 本地变量记录移动信息
last_moving = moving?
# 移动中、事件执行中、强制移动路线中、
# 信息窗口一个也不显示的时候
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing or !$game_party.actors[0].movable?
# 如果方向键被按下、主角就朝那个方向移动
case Input.dir4
when 2
if @move_speed < @need_move_speed
@move_speed += 1
end
move_down
when 4
if @move_speed < @need_move_speed
@move_speed += 1
end
move_left
when 6
if @move_speed < @need_move_speed
@move_speed += 1
end
move_right
when 8
if @move_speed < @need_move_speed
@move_speed += 1
end
move_up
end
end
# 本地变量记忆坐标
last_real_x = @real_x
last_real_y = @real_y
super
if Input.dir4 == 0
@move_speed = 4
end
# 角色向下移动、画面上的位置在中央下方的情况下
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
# 画面向下卷动
$game_map.scroll_down(@real_y - last_real_y)
end
# 角色向左移动、画面上的位置在中央左方的情况下
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
# 画面向左卷动
$game_map.scroll_left(last_real_x - @real_x)
end
# 角色向右移动、画面上的位置在中央右方的情况下
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
# 画面向右卷动
$game_map.scroll_right(@real_x - last_real_x)
end
# 角色向上移动、画面上的位置在中央上方的情况下
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
# 画面向上卷动
$game_map.scroll_up(last_real_y - @real_y)
end
# 不在移动中的情况下
unless moving?
# 上次主角移动中的情况
if last_moving
# 与同位置的事件接触就判定为事件启动
result = check_event_trigger_here([1,2])
# 没有可以启动的事件的情况下
if result == false
# 调试模式为 ON 并且按下 CTRL 键的情况下除外
unless $DEBUG and Input.press?(Input::CTRL)
# 遇敌计数下降
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
if @action_wait_count > 0
@action_wait_count -= 1
end
if $game_map.battle?
if Kboard.trigger?($R_Key_1)
use_item($data_items[$game_party.set_items[0]])
return
end
if Kboard.trigger?($R_Key_2)
use_item($data_items[$game_party.set_items[1]])
return
end
if Kboard.trigger?($R_Key_3)
use_item($data_items[$game_party.set_items[2]])
return
end
if Kboard.trigger?($R_Key_4)
use_item($data_items[$game_party.set_items[3]])
return
end
end
# 以下为不能行动的状况
unless $game_party.actors.size > 0 and $game_party.actors[0].movable?
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 判定为同位置以及正面的事件启动
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
if $game_map.battle?
check_event_attack
end
return
end
if Kboard.trigger?(MAP_SKILL_KEY)
check_event_skill($data_skills[SKILL_IN_MAP[$game_party.actors[0].id-1]])
return
end
if $game_map.battle?
if $game_party.actors[0].hp <= $game_party.actors[0].maxhp / 5 and
check_event_skill($data_skills[SKILL_IN_DANGER[$game_party.actors[0].id-1]])
end
if Kboard.trigger?(MENU_SKILL_KEY)
check_event_skill($data_skills[SKILL_IN_MENU[$game_party.actors[1].id-1]], $game_party.actors[1])
return
end
if Input.trigger?(Input::X)
check_event_skill($data_skills[$game_party.actors[0].set_skills[0]])
return
end
if Input.trigger?(Input::Y)
check_event_skill($data_skills[$game_party.actors[0].set_skills[1]])
return
end
if Input.trigger?(Input::Z)
check_event_skill($data_skills[$game_party.actors[0].set_skills[2]])
return
end
if Kboard.trigger?($R_Key_F)
check_event_skill($data_skills[$game_party.actors[0].set_skills[3]])
return
end
if Kboard.trigger?($R_Key_G)
check_event_skill($data_skills[$game_party.actors[0].set_skills[4]])
return
end
if Kboard.trigger?(JUMP_KEY) and @action_wait_count == 0
dis = 4
if $game_party.actors[0].id == 3
dis = 6
end
case @direction
when 2
$game_player.jump(0,dis)
when 4
$game_player.jump(-dis,0)
when 6
$game_player.jump(dis,0)
when 8
$game_player.jump(0,-dis)
end
@action_wait_count = 45 - $game_party.actors[0].dex / 5 + BASE_ACTION_COUNT
Audio.se_play(JUMP_SE)
return
end
end
end
end
#===========================================================================
# 物品判定
#===========================================================================
def use_item(item)
if item.id == 0 or item == nil
return
end
# 如果物品用完的情况下
if $game_party.item_number(item.id) == 0
# 演奏冻结 SE
$game_system.se_play($data_system.buzzer_se)
return
end
# 目标是全体的情况下
if item.scope == 4
# 对同伴全体应用物品使用效果
used = false
for i in $game_party.actors
used |= i.item_effect(item)
end
end
# 目标是单体的情况下
if item.scope == 3
# 对目标角色应用物品的使用效果
target = $game_party.actors[0]
used = target.item_effect(item)
end
# 使用物品的情况下
if used
# 演奏物品使用时的 SE
$game_system.se_play(item.menu_se)
# 消耗品的情况下
if item.consumable
# 使用的物品数减 1
$game_party.lose_item(item.id, 1)
# 再描绘物品窗口的项目
$skill_window_need_refresh = true
end
# 公共事件 ID 有效的情况下
if item.common_event_id > 0
# 预约调用公共事件
$game_temp.common_event_id = item.common_event_id
# 切换到地图画面
return
end
end
# 无法使用物品的情况下
unless used
# 演奏冻结 SE
$game_system.se_play($data_system.buzzer_se)
end
return
end
#===========================================================================
# 技能判定
#===========================================================================
def check_event_skill(skill,actor = $game_party.actors[0])
# 事件执行中的情况下
if skill.id == 0 or skill == nil
return
end
if $game_system.map_interpreter.running?
return
end
unless actor.current_action.forcing
# 因为 SP 耗尽而无法使用的情况下
unless actor.skill_can_use?(skill.id)
return
end
end
if skill.scope == 1
# 全部事件的循环
for event in $game_map.events.values
case @direction
when 2
attack_able = (event.y - @y > 0 and event.y - @y < skill.range and (@x - event.x).abs < 2)
when 4
attack_able = (@x - event.x > 0 and @x - event.x < skill.range and (@y - event.y).abs < 2)
when 6
attack_able = (event.x - @x > 0 and event.x - @x < skill.range and (@y - event.y).abs < 2)
when 8
attack_able = (@y - event.y > 0 and @y - event.y < skill.range and (@x - event.x).abs < 2)
end
if attack_able
# 事件坐标与目标一致的情况下
# 跳跃中以外的情况下、启动判定是正面的事件
if not event.jumping? and not event.over_trigger? and event.enemy != nil and @action_wait_count <= 0
if skill.animation1_id == 0
self.white_flash = true
else
self.animation_id = skill.animation1_id
end
$game_variables[TARGET] = event.id
event.damage = event.enemy.skill_effect(actor, skill) if event.enemy.id != 100
event.damage_pop = event.enemy.id != 100
event.animation_id = skill.animation2_id
actor.sp -= skill.sp_cost
if skill.cold.to_i != 0
actor.cold[skill.id] = skill.cold.to_i
end
@action_wait_count = 45 - $game_party.actors[0].dex / 5 + BASE_ACTION_COUNT
end
end
end
end
if skill.scope == 2
####============================
range = skill.range
####============================
# 全部事件的循环
$target = []
for event in $game_map.events.values
# 事件坐标与目标一致的情况下
# 事件坐标与目标一致的情况下
sx = @x - event.x
sy = @y - event.y
# 求得差的绝对值
abs_sx = sx > 0 ? sx : -sx
abs_sy = sy > 0 ? sy : -sy
# 跳跃中以外的情况下、启动判定是正面的事件
if not event.jumping? and not event.over_trigger? and event.enemy != nil and @action_wait_count <= 0 and abs_sx + abs_sy < range and event.enemy.id != 100
if skill.animation1_id == 0
self.white_flash = true
else
self.animation_id = skill.animation1_id
end
$target.push(event.id)
event.damage = event.enemy.skill_effect(actor, skill)
event.damage_pop = true
unless $data_animations[skill.animation2_id].position == 3
event.animation_id = skill.animation2_id
else
event.animation_id = 102
end
end
end
if $target == []
return
end
if $data_animations[skill.animation2_id].position == 3
self.animation_id = skill.animation2_id
end
@action_wait_count = 45 - $game_party.actors[0].dex / 5 + BASE_ACTION_COUNT
actor.sp -= skill.sp_cost
if skill.cold.to_i != 0
actor.cold[skill.id] = skill.cold.to_i
end
end
if skill.scope == 3
# 全部事件的循环
# if $game_party.actors[0].hp == $game_party.actors[0].maxhp
# return
# end
if skill.animation1_id == 0
self.white_flash = true
else
self.animation_id = skill.animation1_id
end
self.damage = $game_party.actors[0].skill_effect(actor, skill)
self.damage_pop = true
self.animation_id = skill.animation2_id if skill.animation2_id != 0
@action_wait_count = 45 - actor.dex / 5 + BASE_ACTION_COUNT
actor.sp -= skill.sp_cost
if skill.cold.to_i != 0
actor.cold[skill.id] = skill.cold.to_i
end
end
if skill.scope > 3 or skill.scope == 0
if skill.animation1_id == 0
self.white_flash = true
else
self.animation_id = skill.animation1_id
end
self.animation_id = skill.animation1_id
@action_wait_count = 45 - $game_party.actors[0].dex / 5 + BASE_ACTION_COUNT
actor.sp -= skill.sp_cost
if skill.cold.to_i != 0
actor.cold[skill.id] = skill.cold.to_i
end
end
if skill.common_event_id > 0
# 设置事件
common_event = $data_common_events[skill.common_event_id]
$game_system.map_interpreter.setup(common_event.list, 0)
end
$skill_window_need_refresh = true
return# result
end
#===========================================================================
# 攻击判定
#===========================================================================
def check_event_attack
result = false
# 事件执行中的情况下
if $game_system.map_interpreter.running?
return result
end
# 全部事件的循环
for event in $game_map.events.values
# 武器射程判定
attack_able = false
# 全部事件的循环
for event in $game_map.events.values
# 事件坐标与目标一致的情况下
case @direction
when 2
attack_able = (event.y - @y > 0 and event.y - @y < $game_party.actors[0].range and @x == event.x)
when 4
attack_able = (@x - event.x > 0 and @x - event.x < $game_party.actors[0].range and @y == event.y)
when 6
attack_able = (event.x - @x > 0 and event.x - @x < $game_party.actors[0].range and @y == event.y)
when 8
attack_able = (@y - event.y > 0 and @y - event.y < $game_party.actors[0].range and @x == event.x)
end
if attack_able
# 跳跃中以外的情况下、启动判定是正面的事件
if not event.jumping? and not event.over_trigger? and event.enemy != nil and @action_wait_count <= 0 and event.enemy.id != 100
make_attack(event)
result = true
@action_wait_count = 45 - $game_party.actors[0].dex / 5 + BASE_ACTION_COUNT
end
end
end
end
return result
end
def make_attack(event)
# 设置攻击 ID
if $game_party.actors[0].animation1_id == 0
self.white_flash = true
else
self.animation_id = $game_party.actors[0].animation1_id
end
event.damage = event.enemy.attack_effect($game_party.actors[0])
event.critical = event.enemy.critical
event.damage_pop = true
event.animation_id = $game_party.actors[0].animation2_id
return
end
end
复制代码
和这个有关的
#==============================================================================
#ARPG系统 v1.0 按键设置
#==============================================================================
#KEY = [$R_Key_A,$R_Key_S,$R_Key_D,$R_Key_F,$R_Key_G]
#招式\物品快捷键的设置,因为全键盘脚本本身的冲突放弃了= =
KEY_NAME = ["A","S","D","F","G"] #招式\物品快捷键的名字
KEY_NAME_2 = ["1", "2", "3", "4"]
MAP_KEY = $R_Key_TAB #小地图是否显示的快捷键的设置
MAP_SKILL_KEY = $R_Key_T #地图技能键
MENU_SKILL_KEY = $R_Key_P #援助技能键
MENU_KEY = [$R_Key_Z,$R_Key_X,$R_Key_C,$R_Key_V] #快速呼叫各场景菜单使用的按键,从左到右分别为menu, equip, status, skill
BASE_TURN_COUNT = 100 #状态的基础持续祯数
BASE_ACTION_COUNT = 10
JUMP_KEY = $R_Key_E
JUMP_SE = "Audio/se/015-jump01"
SKILL_IN_DANGER = [180, 181, 182] #三个主角分别的危机技能
SKILL_IN_MAP = [170, 171, 172] #三个主角分别的地图技能
SKILL_IN_MENU = [175, 176,177] #三个主角分别的援助技能
TARGET = 5 #储存敌人ID的变量
#==============================================================================
#ARPG系统 v1.0 系统说明
#==============================================================================
=begin
本游戏系统经过大幅度更改,提取并使用其中单个脚本极其有可能出错。
如果需要其中的插件脚本,请自行上66RPG站点搜索。
名字前边带!的地图是战斗地图。
为了方便设置,一个地图如果带!,它下边的地图就全部是战斗地图了。
=end
复制代码
求前辈帮帮忙啊!谢谢!
作者:
wly611341
时间:
2014-1-9 20:41
自己解决了,原来是初始人数的关系啊……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1