查看: 2828|回复: 9

[已经解决] cp脚本使用速度修正的技能修正无效的问题

[复制链接]
梦石
0
星屑
439
在线时间
197 小时
注册时间
2014-4-18
回帖
181
发表于 2014-11-20 12:37:17 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
我用了这个cp值的战斗脚本,但为什么我用可以速度修正的技能时,没有任何效果呢?哪位大神可以帮忙解决一下,谢谢。

问题.zip

1.55 MB, 下载次数: 71

求解

点评

如果是cp值脚本的话,速度修正要怎样才能产生效果……  发表于 2014-11-20 12:42
怠惰的鸽子

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2014-11-20 14:05:21 | 显示全部楼层
CP值战斗在原理上就放弃了传统回合制的速度概念……
传统中速度是决定本回合中谁先行动,而有速度修正的技能是在指令发出时临时改变角色速度值。
CP制中只有满CP的人物才会在“本回合”中有行动权,速度修正也就没有价值了,所以在CP制中速度值修正的技能是不会有用的,

如果你想要达到类似“动作很快的技能”就是给这个技能设置不同的CP消耗量
比如防御,只消耗1/3的CP。
类似这样就可以。

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2014-11-21 00:14:04 | 显示全部楼层
本帖最后由 百里_飞柳 于 2014-11-21 13:43 编辑

cp制的战斗中对于技能的速度修正似乎没有意义了吧……
不过可以改成技能消耗不同量的cp值
默认应该是全部消耗,
不过在脚本里应该有写自定特定技能消耗不同cp值的吧?

lz的cp制脚本:
[pre lang="ruby" line="1"]
#RTAB战斗系统 For RPG Maker VX Ace 编写者:SLICK

#encoding:utf-8
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  战斗画面
#==============================================================================

class Scene_Battle < Scene_Base
  attr_accessor :cp_quota
  attr_accessor :rtab_wait
  attr_accessor :active_members
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  def start
    super
    @cp_quota = 0
    create_spriteset
    create_all_windows
    BattleManager.method_wait_for_message = method(:wait_for_message)
  end
  #--------------------------------------------------------------------------
  # ● 战斗开始
  #--------------------------------------------------------------------------
  def battle_start
    @rtab_wait = true
    @active_members = []
    BattleManager.battle_start
    set_cp_quota
    process_event
    #start_party_command_selection
  end
  #--------------------------------------------------------------------------
  # ● 获取敌我双方人物的平均行动速度并决定CP槽的Quota值
  #--------------------------------------------------------------------------
  def set_cp_quota
    sss = 0.0
    for iii in $game_party.members
      sss += iii.param(6)
    end
    sss /= $game_party.members.size
    @cp_quota = sss * 200
    @spriteset.cp_quota = @cp_quota
    for iii in $game_party.members + $game_troop.members
      iii.cp_quota = @cp_quota
    end
  end
  #--------------------------------------------------------------------------
  # ● 进行下一个指令输入
  #--------------------------------------------------------------------------
  def next_command
    if BattleManager.next_command
      start_actor_command_selection
    else
      turn_start(@active_members)
    end
  end
  #--------------------------------------------------------------------------
  # ● 返回上一个指令输入
  #--------------------------------------------------------------------------
  def prior_command
    if BattleManager.prior_command
      start_actor_command_selection
    else
      start_party_command_selection
    end
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    if BattleManager.in_turn?
      process_event
      process_action
    else
      if @rtab_wait
        for iii in $game_party.members + $game_troop.members
          iii.in_turn = false
          iii.rtab_cp += iii.param(6)
          if iii.rtab_cp >= iii.cp_quota
            @active_members.push(iii)
            iii.in_turn = true
          end
        end
        if @active_members.size > 0
          @rtab_wait = false
          start_party_command_selection
        end
      end
    end
    BattleManager.judge_win_loss
  end
  #--------------------------------------------------------------------------
  # ● 回合开始
  #--------------------------------------------------------------------------
  def turn_start(members)
    @party_command_window.close
    @actor_command_window.close
    @status_window.unselect
    @subject = nil
    BattleManager.turn_start(members)
    @log_window.wait
    @log_window.clear
  end
  #--------------------------------------------------------------------------
  # ● 回合结束
  #--------------------------------------------------------------------------
  def turn_end
    @active_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
    @rtab_wait = true
    @active_members = []
  end
  #--------------------------------------------------------------------------
  # ● 处理战斗行动
  #--------------------------------------------------------------------------
  def process_action
    return if scene_changing?
    if !@subject || !@subject.current_action
      @subject = BattleManager.next_subject
    end
    return turn_end unless @subject
    if @subject.current_action
      @subject.current_action.prepare
      if @subject.current_action.valid?
        @status_window.open
        execute_action
      end
      @subject.remove_current_action
    end
    process_action_end unless @subject.current_action
  end
  #--------------------------------------------------------------------------
  # ● 开始队伍指令的选择
  #--------------------------------------------------------------------------
  def start_party_command_selection
    unless scene_changing?
      refresh_status
      @status_window.unselect
      @status_window.open
      if BattleManager.input_start
        BattleManager.clear_actor
        BattleManager.next_command
        @status_window.select(BattleManager.actor.index)
        @actor_command_window.setup(BattleManager.actor)
      else
        @party_command_window.deactivate
        @actor_command_window.close
        turn_start(@active_members)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 生成角色指令窗口
  #--------------------------------------------------------------------------
  def create_actor_command_window
    @actor_command_window = Window_ActorCommand.new
    @actor_command_window.viewport = @info_viewport
    @actor_command_window.set_handler(:attack, method(:command_attack))
    @actor_command_window.set_handler(:skill,  method(:command_skill))
    @actor_command_window.set_handler(:guard,  method(:command_guard))
    @actor_command_window.set_handler(:item,   method(:command_item))
    @actor_command_window.set_handler(:cancel, method(:prior_command))
    @actor_command_window.set_handler(:escape, method(:command_escape))
    @actor_command_window.x = Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● 指令“撤退”
  #--------------------------------------------------------------------------
  def command_escape
    unless BattleManager.process_escape
      turn_start(@active_members)
      for iii in @active_members
        iii.rtab_cp = 0
      end
    end
  end
end

#encoding:utf-8
#==============================================================================
# ■ Window_ActorCommand
#------------------------------------------------------------------------------
#  战斗画面中,选择角色行动的窗口。
#==============================================================================

class Window_ActorCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● 生成指令列表
  #--------------------------------------------------------------------------
  def make_command_list
    return unless @actor
    add_attack_command
    add_skill_commands
    add_guard_command
    add_item_command
    add_escape_command
  end
  #--------------------------------------------------------------------------
  # ● 添加撤退指令
  #--------------------------------------------------------------------------
  def add_escape_command
    add_command(Vocab::escape, :escape, BattleManager.can_escape?)
  end
end

#encoding:utf-8
#==============================================================================
# ■ BattleManager
#------------------------------------------------------------------------------
#  战斗过程的管理器。
#==============================================================================

module BattleManager
  #--------------------------------------------------------------------------
  # ● 战斗开始
  #--------------------------------------------------------------------------
  def self.battle_start
    $game_system.battle_count += 1
    $game_party.on_battle_start
    $game_troop.on_battle_start
    $game_troop.enemy_names.each do |name|
      $game_message.add(sprintf(Vocab::Emerge, name))
    end
    if @preemptive
      $game_message.add(sprintf(Vocab::Preemptive, $game_party.name))
    elsif @surprise
      $game_message.add(sprintf(Vocab::Surprise, $game_party.name))
    end
    wait_for_message
  end
  #--------------------------------------------------------------------------
  # ● 遇敌时的处理
  #--------------------------------------------------------------------------
  def self.on_encounter
    @preemptive = false
    @surprise = false
  end
  #--------------------------------------------------------------------------
  # ● 回合开始
  #--------------------------------------------------------------------------
  def self.turn_start(members)
    @phase = :turn
    clear_actor
    $game_troop.increase_turn(members)
    make_action_orders(members)
  end
  #--------------------------------------------------------------------------
  # ● 生成行动顺序
  #--------------------------------------------------------------------------
  def self.make_action_orders(members)
    @action_battlers = []
    for iii in $game_party.members
      if members.include?(iii)
        @action_battlers.push(iii) unless @surprise
      end
    end
    for iii in $game_troop.members
      if members.include?(iii)
        @action_battlers.push(iii) unless @preemptive
      end
    end
    @action_battlers.each {|battler| battler.make_speed }
    @action_battlers.sort! {|a,b| b.speed - a.speed }
  end
end

#encoding:utf-8
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  处理战斗者的类。Game_Actor 和 Game_Enemy 类的父类。
#==============================================================================

class Game_Battler < Game_BattlerBase
  attr_accessor :turn_count
  attr_accessor :rtab_cp
  attr_accessor :cp_quota
  attr_accessor :in_turn
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias neoinitialize initialize
  def initialize
    @turn_count = 0
    @rtab_cp = 0
    @cp_quota = 100
    @in_turn = false
    neoinitialize
  end
  #--------------------------------------------------------------------------
  # ● 战斗开始处理
  #--------------------------------------------------------------------------
  def on_battle_start
    @turn_count = 0
    @rtab_cp = 0
    @cp_quota = 100
    @in_turn = false
    init_tp unless preserve_tp?
  end
  #--------------------------------------------------------------------------
  # ● 处理伤害
  #    调用前需要设置好
  #    @result.hp_damage   @result.mp_damage
  #    @result.hp_drain    @result.mp_drain
  #--------------------------------------------------------------------------
  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
    # 受伤后计算CP退后量
    cpback = @result.hp_damage + @result.mp_damage
    cpback = (cpback < 0 ? 0 : cpback)
    pent = 100.0 * cpback / self.mhp
    cppentback = ((5 + pent / 10) * self.cp_quota / 100).to_i
    @rtab_cp -= cppentback
    @rtab_cp = (@rtab_cp < 0 ? 0 : @rtab_cp)
  end
  #--------------------------------------------------------------------------
  # ● 判定是否可以输入指令
  #--------------------------------------------------------------------------
  def inputable?
    normal? && !auto_battle? && @in_turn
  end
  #--------------------------------------------------------------------------
  # ● 回合结束处理
  #--------------------------------------------------------------------------
  def on_turn_end
    @result.clear
    regenerate_all
    update_state_turns
    update_buff_turns
    remove_states_auto(2)
    # 该角色的回合计数加1并清空CP
    @turn_count += 1
    @rtab_cp = 0
  end
end

#encoding:utf-8
#==============================================================================
# ■ Game_Troop
#------------------------------------------------------------------------------
#  管理敌群和战斗相关资料的类,也可执行如战斗事件管理之类的功能。
#   本类的实例请参考 $game_troop 。
#==============================================================================

class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● 增加回合
  #--------------------------------------------------------------------------
  def increase_turn(members)
    troop.pages.each {|page| @event_flags= false if page.span == 1 }
    turnmax = []
    for iii in members
      turnmax.push(iii.turn_count)
    end
    @turn_count = turnmax.max
  end
end

#encoding:utf-8
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
#  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。
#==============================================================================

class Spriteset_Battle
  attr_accessor :icons
  attr_accessor :cp_quota
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    @cp_quota = 100
    create_viewports
    create_battleback1
    create_battleback2
    create_enemies
    create_actors
    create_pictures
    create_timer
    create_rtabcp_gauge
    update
  end
  #--------------------------------------------------------------------------
  # ● 生成战斗CP条
  #--------------------------------------------------------------------------
  def create_rtabcp_gauge
    @cpgauge_back = Sprite.new(@viewport3)
    @cpgauge_back.bitmap = Bitmap.new(400, 8)
    @cpgauge_back.bitmap.gradient_fill_rect(0, 0, 400, 16, Color.new(0, 255, 0), Color.new(255, 0, 0))
    @cpgauge_back.x = 16
    @cpgauge_back.y = 16
    # 为战斗中的各个角色生成其图标
    @icons = {}
    for iii in $game_party.members
      @icons[iii] = Sprite.new(@viewport3)
      @icons[iii].bitmap = Bitmap.new("Graphics/System/bicon1.png")
      @icons[iii].ox = 12
      @icons[iii].oy = 12
      @icons[iii].x = 16
      @icons[iii].y = 20
    end
    for iii in $game_troop.members
      @icons[iii] = Sprite.new(@viewport3)
      @icons[iii].bitmap = Bitmap.new("Graphics/System/bicon2.png")
      @icons[iii].ox = 12
      @icons[iii].oy = 12
      @icons[iii].x = 16
      @icons[iii].y = 20
    end
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    dispose_battleback1
    dispose_battleback2
    dispose_enemies
    dispose_actors
    dispose_pictures
    dispose_timer
    dispose_viewports
    dispose_rtabcp_gauge
  end
  #--------------------------------------------------------------------------
  # ● 消灭战斗CP条
  #--------------------------------------------------------------------------
  def dispose_rtabcp_gauge
    @cpgauge_back.bitmap.dispose
    @cpgauge_back.dispose
    for iii in $game_party.members
      @icons[iii].bitmap.dispose
      @icons[iii].dispose
    end
    for iii in $game_troop.members
      @icons[iii].bitmap.dispose
      @icons[iii].dispose
    end
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    update_battleback1
    update_battleback2
    update_enemies
    update_actors
    update_cp
    update_pictures
    update_timer
    update_viewports
  end
  #--------------------------------------------------------------------------
  # ● 更新CP条
  #--------------------------------------------------------------------------
  def update_cp
    for iii in $game_party.members + $game_troop.members
      @icons[iii].x = 16 + 400 * iii.rtab_cp / @cp_quota
      @icons[iii].visible = iii.alive?
    end
  end
end[/pre]

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
439
在线时间
197 小时
注册时间
2014-4-18
回帖
181
 楼主| 发表于 2014-11-21 13:12:54 | 显示全部楼层
百里_飞柳 发表于 2014-11-21 00:14
cp制的战斗中对于技能的速度修正似乎没有意义了吧……
不过可以改成技能消耗不同量的cp值
默认应该是全部消 ...

但是我是个脚本渣,看不懂啊。。。。。。所以你能帮我再仔细说明一下要改哪里好吗?另外附带弱弱的问一个问题:怎么才能让普通攻击至少造成一点伤害,还有怎么样才能让受到伤害时增加的TP量为固定值,比如固定为5,那敌人进行攻击时,无论伤害多大都只会增加角色5的TP量

点评

我帮你把脚本贴到三楼,等大神来看吧~  发表于 2014-11-21 13:43
怠惰的鸽子
回复

使用道具 举报

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2014-11-21 13:30:45 | 显示全部楼层
2498126422 发表于 2014-11-21 13:12
但是我是个脚本渣,看不懂啊。。。。。。所以你能帮我再仔细说明一下要改哪里好吗?另外附带弱弱的问一个 ...

普通攻击至少是1你可以通过阅读 图书馆-伤害公式的妙用 来习得原理

在这里我先提供一个方法,把1号技能的技能公式中改成
  1. [a.atk * 4 - b.def * 2, 1].max
复制代码
它的效果就是最小输出1点伤害。

点评

.max 就是输出数组中的最大值的意思,在这里的效果就是当计算效果小于1,则输出1。  发表于 2014-11-21 13:46
大神带飞~我就是不知道怎么让它判定值算出来小于0就取1……  发表于 2014-11-21 13:40
回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2014-11-21 13:31:32 | 显示全部楼层
2498126422 发表于 2014-11-21 13:12
但是我是个脚本渣,看不懂啊。。。。。。所以你能帮我再仔细说明一下要改哪里好吗?另外附带弱弱的问一个 ...

我看了下……发现这个cp脚本没有自定技能cp消耗……Σ( ° △ °|||)︴然后之后的问题:至少造成一点伤害就在伤害计算公式最后加上 +1 就可以了……

然后tp增加量,在脚本里搜索tp,然后有这一句
  #--------------------------------------------------------------------------
  # ● 受到伤害时增加的 TP
  #--------------------------------------------------------------------------
  def charge_tp_by_damage(damage_rate)
    self.tp += 50 * damage_rate * tcr
  end

中间改成
self.tp +=5

应该就可以了吧?
本人其实也不会脚本_(:зゝ∠)_

点评

对了,如果是miss的话……就没有伤害了  发表于 2014-11-21 13:39

评分

参与人数 1星屑 +23 收起 理由
三途亚梦 + 23 我很赞同,但是技能公式+1是没用的嗷.

查看全部评分

回复

使用道具 举报

闇吼者の災悪眷族

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
回帖
6408
发表于 2014-11-21 13:59:12 | 显示全部楼层
这个CP值脚本的确没有设置技能不同效果的效果,对CP的操作是在回合结束的时候将该角色的CP归零。

不做一些调整是没法做出不同消耗的效果。
回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2014-11-21 14:25:22 | 显示全部楼层
本帖最后由 百里_飞柳 于 2014-11-21 14:26 编辑

推荐用这个……
https://rpg.blue/thread-220872-1-1.html

这个脚本里有写技能自定制cp消耗,lz可以看看

在175行左右
回复

使用道具 举报

梦石
0
星屑
439
在线时间
197 小时
注册时间
2014-4-18
回帖
181
 楼主| 发表于 2014-11-28 20:35:46 | 显示全部楼层
百里_飞柳 发表于 2014-11-21 14:25
推荐用这个……
https://rpg.blue/thread-220872-1-1.html

但是前面基本能力消耗的TP值怎么那么高,到底是消耗越高越快还是越低行动越快?

点评

有个总数,消耗之后再重新按速度加回总数,就又轮到角色行动了  发表于 2014-11-28 21:32
脚本作者预设的消耗就很高,消耗多少取决于作者自身的设计,和技能本身的功能没有任何关系的。  发表于 2014-11-28 20:57
怠惰的鸽子
回复

使用道具 举报

梦石
0
星屑
439
在线时间
197 小时
注册时间
2014-4-18
回帖
181
 楼主| 发表于 2014-11-29 12:22:27 | 显示全部楼层
谢谢了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部