赞 | 2 |
VIP | 33 |
好人卡 | 2 |
积分 | 14 |
经验 | 34317 |
最后登录 | 2024-11-5 |
在线时间 | 1705 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1433
- 在线时间
- 1705 小时
- 注册时间
- 2011-8-17
- 帖子
- 818
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 黑舞嗜 于 2013-1-24 11:18 编辑
用了这个“远程系职业攻击消耗品”的脚本发现一个问题,就是如果没有装备武器的话268行出错,求脚本大神指点,如果可以让角色只能更换武器不能卸载武器也行
这个脚本的说明是数据库职业后面加上数字这个数字就是消耗的道具id,然后武器后面加上的数字是当前武器没有远程属性的时候播放的动画id
对于这个出错我的理解是,268行直接判断角色当前武器是否有远程属性而没有考虑角色有没有装备武器
所以我的思路是:
在此判定前先判断角色是否有装备武器,如果没有,直接播放数据库中制定的一个攻击动画
没有很复杂吧?召唤一下大神@Wind2010- #==============================================================================
- # ■ 远程系职业攻击消耗品 EDIT BY:亿万星辰
- #------------------------------------------------------------------------------
- # 远程系的职业,如弓箭手、枪手等,使用普通攻击或物理攻击时,都会消耗一些特定
- # 的消耗品。
- #==============================================================================
- # 远程系的属性,数据库系统里填加。
- # 对应的远程系职业把此属性设置为A,对应的远程系使用的技能,此属性勾选。
- $STARS_远程属性 = 17
- module RPG
- class Class
- def name
- if @element_ranks[$STARS_远程属性] == 1
- return @name.split(/,/)[0]
- else
- return @name
- end
- end
- def arrow_id
- if @element_ranks[$STARS_远程属性] == 1
- return @name.split(/,/)[1].to_i
- else
- return 0
- end
- end
- end
- class Weapon
- def name
- if @element_set.include?($STARS_远程属性)
- return @name.split(/,/)[0]
- else
- return @name
- end
- end
- def animation2_id(flag = false)
- if flag
- return @name.split(/,/)[1].to_i
- else
- return @animation2_id
- end
- end
- end
- end
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 可以使用特技的判定
- # skill_id : 特技 ID
- #--------------------------------------------------------------------------
- def skill_can_use?(skill_id)
- # SP 不足的情况下不能使用
- if $data_skills[skill_id].sp_cost > self.sp
- return false
- end
- # 战斗不能的情况下不能使用
- if dead?
- return false
- end
- # 沉默状态的情况下、物理特技以外的特技不能使用
- if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
- return false
- end
- if self.is_a?(Game_Actor) and
- $data_skills[skill_id].element_set.include?($STARS_远程属性) and
- $game_party.item_number($data_classes[self.class_id].arrow_id) == 0
- return false
- end
- # 获取可以使用的时机
- occasion = $data_skills[skill_id].occasion
- # 战斗中的情况下
- if $game_temp.in_battle
- # [平时] 或者是 [战斗中] 可以使用
- return (occasion == 0 or occasion == 1)
- # 不是战斗中的情况下
- else
- # [平时] 或者是 [菜单中] 可以使用
- return (occasion == 0 or occasion == 2)
- end
- end
- #--------------------------------------------------------------------------
- # ● 应用通常攻击效果
- # attacker : 攻击者 (battler)
- #--------------------------------------------------------------------------
- def attack_effect(attacker)
- # 清除会心一击标志
- self.critical = false
- # 第一命中判定
- hit_result = (rand(100) < attacker.hit)
- # 命中的情况下
- if hit_result == true
- # 计算基本伤害
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (20 + attacker.str) / 20
- # 属性修正
- self.damage *= elements_correct(attacker.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 会心一击修正
- if rand(100) < 4 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- # 防御修正
- if self.guarding?
- self.damage /= 2
- end
- end
- # 分散
- if self.damage.abs > 0
- amp = [self.damage.abs * 15 / 100, 1].max
- self.damage += 0
- end
- # 第二命中判定
- eva = 8 * self.agi / attacker.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- end
- # 命中的情况下
- if hit_result == true
- # 状态冲击解除
- remove_states_shock
- # HP 的伤害计算
- if attacker.is_a?(Game_Actor) and $data_classes[attacker.class_id].element_ranks[$STARS_远程属性] == 1
- if $game_party.item_number($data_classes[attacker.class_id].arrow_id) == 0
- self.damage += attacker.int
- else
- $game_party.lose_item($data_classes[attacker.class_id].arrow_id, 1)
- end
- end
- self.hp -= self.damage
- # 状态变化
- @state_changed = false
- states_plus(attacker.plus_state_set)
- states_minus(attacker.minus_state_set)
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- # 清除会心一击标志
- self.critical = false
- end
- # 过程结束
- return true
- end
- #--------------------------------------------------------------------------
- # ● 应用特技效果
- # user : 特技的使用者 (battler)
- # skill : 特技
- #--------------------------------------------------------------------------
- def skill_effect(user, skill)
- # 清除会心一击标志
- self.critical = false
- # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
- # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
- if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
- ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
- # 过程结束
- return false
- end
- # 清除有效标志
- effective = false
- # 公共事件 ID 是有效的情况下,设置为有效标志
- effective |= skill.common_event_id > 0
- # 第一命中判定
- hit = skill.hit
- if skill.atk_f > 0
- hit *= user.hit / 100
- end
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- # 命中的情况下
- if hit_result == true
- # 计算威力
- power = skill.power + user.atk * skill.atk_f / 100
- if power > 0
- power -= self.pdef * skill.pdef_f / 200
- power -= self.mdef * skill.mdef_f / 200
- power = [power, 0].max
- end
- # 计算倍率
- rate = 20
- rate += (user.str * skill.str_f / 100)
- rate += (user.dex * skill.dex_f / 100)
- rate += (user.agi * skill.agi_f / 100)
- rate += (user.int * skill.int_f / 100)
- # 计算基本伤害
- self.damage = power * rate / 20
- # 属性修正
- self.damage *= elements_correct(skill.element_set)
- self.damage /= 100
- # 伤害符号正确的情况下
- if self.damage > 0
- # 防御修正
- if self.guarding?
- self.damage /= 2
- end
- end
- # 分散
- if skill.variance > 0 and self.damage.abs > 0
- amp = [self.damage.abs * skill.variance / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / user.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- # 不确定的特技的情况下设置为有效标志
- effective |= hit < 100
- end
- # 命中的情况下
- if hit_result == true
- # 威力 0 以外的物理攻击的情况下
- if skill.power != 0 and skill.atk_f > 0
- # 状态冲击解除
- remove_states_shock
- # 设置有效标志
- effective = true
- end
- # HP 的伤害减法运算
- last_hp = self.hp
- self.hp -= self.damage
- if user.is_a?(Game_Actor) and
- skill.element_set.include?($STARS_远程属性)
- $game_party.lose_item($data_classes[user.class_id].arrow_id, 1)
- end
- effective |= self.hp != last_hp
- # 状态变化
- @state_changed = false
- effective |= states_plus(skill.plus_state_set)
- effective |= states_minus(skill.minus_state_set)
- # 威力为 0 的场合
- if skill.power == 0
- # 伤害设置为空的字串
- self.damage = ""
- # 状态没有变化的情况下
- unless @state_changed
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- end
- # Miss 的情况下
- else
- # 伤害设置为 "Miss"
- self.damage = "Miss"
- end
- # 不在战斗中的情况下
- unless $game_temp.in_battle
- # 伤害设置为 nil
- self.damage = nil
- end
- # 过程结束
- return effective
- end
- end
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 普通攻击 获取对像方动画 ID
- #--------------------------------------------------------------------------
- def animation2_id
- weapon = $data_weapons[@weapon_id]
- if weapon.element_set.include?($STARS_远程属性)
- ani = weapon != nil ? weapon.animation2_id($game_party.item_number($data_classes[@class_id].arrow_id) == 0) : 0
- else
- ani = weapon != nil ? weapon.animation2_id : 0
- end
- return ani
- end
- end
复制代码 |
|