设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3549|回复: 3
打印 上一主题 下一主题

[已经过期] 【悬赏】请求帮忙移植一个XP的CP条脚本

[复制链接]

Lv4.逐梦者

醉啸 长风万里

梦石
0
星屑
6167
在线时间
6593 小时
注册时间
2007-12-16
帖子
4501

贵宾

跳转到指定楼层
1
发表于 2014-2-26 16:54:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 仲秋启明 于 2014-2-26 20:14 编辑

首先贴出原脚本http://www.66rpg.com/articles/3004
要求什么的没有吧,只要能在VA里面像原版一样运行就可以了
自己弄了好长时间,没弄明白,主体没问题,只不过判定的时候各种不行

如果有人顺手帮忙把http://moonpearl-gm.blogspot.fr/2012/11/monnpearls-animated-battlers.html里面的

场景移动效果也移植过来的话就再加悬赏好了

谢谢

最好私下给我啦

还在龟速填坑中

Lv1.梦旅人

梦石
0
星屑
70
在线时间
80 小时
注册时间
2014-4-12
帖子
167
4
发表于 2014-5-8 16:04:17 | 只看该作者
本帖最后由 影风枪圣 于 2014-5-8 16:06 编辑

突然看到了最后发帖时间,我好像挖坟了,求删。。。

嗯,让我想想。。。
是这个吗?
注:这不是我原创的,是我从以前的游戏里翻出来的
贴脚本:
#==============================================================================
# ●CP制战斗
# 原作者:桜雅 在土, 和希 (XP版CP制),韩云溪(AT即时战斗)
# 修改:pigsss
# 更新日期:2012.05.09
# 一个简单的cp战斗系统
# 好吧,我还是不明白为什么那么多人喜欢用…

# ·加强兼容性
# ·修正先制/被偷袭bug
# ·修正敌人隐藏bug
# ·修正逃跑失败bug

# ■✖ !注意-------------------------
# ·敌人特殊能力【增加行动次数】不可用│
#   ---------------------------------
#==============================================================================
module CP
#
# 基本能力消耗的CP值
#
CP_COST_SKILL_ITEM_ACTION = 65535 # 技能 物品
CP_COST_BASIC_ATTACK = 32768 # 攻撃
CP_COST_BASIC_GUARD = 32768 # 防御
CP_COST_BASIC_ESCAPE = 65535 #逃跑
end
#==============================================================================
# □ CP_Thread
#==============================================================================
class CP_Thread

# 战斗速度
#
BATTLE_SPEED = 1.0
#
# 战斗开始的时候气槽百分比
#
START_CP_PERCENT = 10
#
# CP满时的音效
#
FULL_SE = "Audio/SE/open1"
#--------------------------------------------------------------------------
# ○ 变量公开
#--------------------------------------------------------------------------
attr_accessor :stop # CP加算ストップ
#----------------------------------------------------------------------------
# ○ 初始化
#----------------------------------------------------------------------------
def initialize
@battlers = []
@cancel = false
@stop = false
@agi_total = 0
# 配列 count_battlers を初期化
count_battlers = []
# エネミーを配列 count_battlers に追加
for enemy in $game_troop.members
count_battlers.push(enemy)
end
# アクターを配列 count_battlers に追加
for actor in $game_party.battle_members
count_battlers.push(actor)
end
for battler in count_battlers
@agi_total += battler.agi
end

for battler in count_battlers
    battler.cp = [[65535 * START_CP_PERCENT * (rand(15) + 85) * 4 * battler.agi / @agi_total / 10000, 0].max, 65535].min
    battler.turn_count = 0
end
end
#----------------------------------------------------------------------------
# ○ CP更新
#----------------------------------------------------------------------------
def update
# 停止刷新
return if @stop
#
for battler in $game_party.battle_members + $game_troop.members
# 行動出来なければ無視
if battler.dead? || battler.hidden?
battler.cp = 0
next
end


battler.cp = [[battler.cp + BATTLE_SPEED * 2048 * battler.agi / @agi_total, 0].max, 65535].min

# CP满时

    if battler.cp >= battler.max_cp
        Audio.se_play(FULL_SE)
        BattleManager.set_enable_go(battler)
        battler.my_turn = true
        BattleManager.input_start
        break
      end
    unless BattleManager.cp_updating?
      return
    end

end

def update?
  return !@stop
end
end

#----------------------------------------------------------------------------
# ○ CPカウントの開始
#----------------------------------------------------------------------------
def stop
@cancel = true
if @cp_thread != nil then
@cp_thread.join
@cp_thread = nil
end
end
end
#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
#  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
#==============================================================================
class Game_BattlerBase
  attr_reader   :cp                       # CP
  attr_accessor :turn_count
  attr_accessor :my_turn
  include CP
  #------------------------------
  alias old_initialize initialize
  def initialize
    old_initialize
    @cp = 0
    @turn_count = 0
    @my_turn = false
  end
  #------------------------------
  def inputable?
    if @my_turn
      return normal? && !auto_battle?# && @cp >= 65535
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  # ● 更改 CP
  #--------------------------------------------------------------------------
  def cp=(cp)
    @cp = [[cp, max_cp].min, 0].max
  end
  #--------------------------------------------------------------------------
  # ● 获取 CP 的最大值
  #--------------------------------------------------------------------------
  def max_cp
    return 65535
  end
  #--------------------------------------------------------------------------
  # ● 获取 CP 的比率
  #--------------------------------------------------------------------------
  def cp_rate
    @cp.to_f / 65535
  end
  #--------------------------------------------------------------------------
  # ● 扣除技能的使用消耗
  #--------------------------------------------------------------------------
  alias :old_pay_skill_cost :pay_skill_cost
  def pay_skill_cost(skill)
    old_pay_skill_cost(skill)
    ###########
    case skill.id
    when 1
     @cp -= CP_COST_BASIC_ATTACK
    when 2
     @cp -= CP_COST_BASIC_GUARD
    when 3...999 # 可自订不同消耗的技能
     @cp -= CP_COST_SKILL_ITEM_ACTION
    else
     @cp = 0
    end
    ###########
  end
end
#--------------------------------------------------------
class Game_Battler < Game_BattlerBase
  include CP
  #--------------------------------------------------------------------------
  # ● 消耗物品
  #--------------------------------------------------------------------------
  alias :old_consume_item :consume_item
  def consume_item(item)
    old_consume_item(item)
    ###########
    case item.id
    when 0...999 # 可自订不同消耗的物品
     @cp -= CP_COST_SKILL_ITEM_ACTION
    else
     @cp = 0
    end
    ###########
  end
end
#-------------------------------------
class Game_Party < Game_Unit
  def make_action(member)
    unless member == nil
      member.make_actions unless member.inputable?
    end
  end
end
#-------------------------------------
class Game_Troop < Game_Unit
  def make_action(member)
    member.make_actions unless member == nil
  end

  def increase_turn(enemy)
    troop.pages.each {|page| @event_flags= false if page.span == 1 }
    enemy.turn_count += 1
    aaa = []
    for iii in $game_troop.members
      aaa.push(iii.turn_count)
    end
    @turn_count = aaa.max
  end
end
#-------------------------------------
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))
      for b in $game_troop.members
        if !b.hidden?
          b.cp = 0
        end
      end
      for b in $game_party.battle_members
        if !b.hidden?
          b.cp = b.max_cp
        end
      end
    elsif @surprise
      $game_message.add(sprintf(Vocab::Surprise, $game_party.name))
      for b in $game_troop.members
        if !b.hidden?
          b.cp = b.max_cp
        end
      end
      for b in $game_party.battle_members
        if !b.hidden?
          b.cp = 0
        end
      end
    end
    wait_for_message
  end

  def self.enable_go
    @enable_go
  end

  def self.set_enable_go(b)
    @enable_go = b
  end

  def self.enable_go_clear
    @enable_go = nil
  end

  def self.max_agi
    @max_agi
  end

  def self.cp_updation
    @phase = :cp_update
  end

  def self.cp_updating?
    @phase == :cp_update
  end
  #--------------------------------------------------------------------------
  # ● 重定义:开始输入指令
  #--------------------------------------------------------------------------
  def self.input_start
    if @phase != :input
      @phase = :input
      $game_party.make_actions
      $game_troop.make_actions
      clear_actor
    end
    return $game_party.inputable?
  end
  #-------------------------------------------------------------------------
  # ● 重定义:回合开始
  #------------------------------------------------------------------------
  def self.turn_start
    @phase = :turn
    clear_actor
    make_action_orders
  end
  #-------------------------------------------------------------------------
  # ● 重定义:行动顺序
  #------------------------------------------------------------------------
  def self.make_action_orders
    @action_battlers = []
    for b in $game_troop.members + $game_party.battle_members
      if b.my_turn
        @action_battlers.push(b)
      end
    end
    exclude_battler = []
    for battler in @action_battlers
     if battler.cp < 65535
       exclude_battler.push(battler)
     end
    end
    @action_battlers -= exclude_battler
  end
end
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中所有窗口的父类
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 获取颜色
  #--------------------------------------------------------------------------
  def cp_gauge_color1;   Color.new(200,200,120); end;    # CP 值槽 1
  def cp_gauge_color2;   Color.new(100,100,70);  end;    # CP 值槽 2
  #--------------------------------------------------------------------------
  # ● 绘制值槽(长宽自由版)
  #     rate   : 比率(1.0 为满值)
  #     color1 : 渐变色的左端
  #     color2 : 渐变色的右端
  #--------------------------------------------------------------------------
  def draw_gauge_free(x, y, width, rate, color1, color2, height)
    fill_w = (width * rate).to_i
    gauge_y = y + line_height - 8
    contents.fill_rect(x, gauge_y, width, height, gauge_back_color)
    contents.gradient_fill_rect(x, gauge_y, fill_w, height, color1, color2)
  end
  #--------------------------------------------------------------------------
  # ● 绘制 CP
  #--------------------------------------------------------------------------
  def draw_actor_cp(actor, x, y, width = 124, height)
    draw_gauge_free(x, y, width, actor.cp_rate, cp_gauge_color1, cp_gauge_color2, height)
    change_color(system_color)
  end
end
####################################

class Window_CP < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, window_height)
    refresh
    self.openness = 0
    self.opacity = 200
    self.contents_opacity = 200
  end


  #--------------------------------------------------------------------------
  # ● 获取窗口的宽度
  #--------------------------------------------------------------------------
  def window_width
    64
  end
  #--------------------------------------------------------------------------
  # ● 获取窗口的高度
  #--------------------------------------------------------------------------
  def window_height
    fitting_height(visible_line_number)
  end
  #--------------------------------------------------------------------------
  # ● 获取显示行数
  #--------------------------------------------------------------------------
  def visible_line_number
    return 4
  end
  #--------------------------------------------------------------------------
  # ● 获取项目数
  #--------------------------------------------------------------------------
  def item_max
    $game_party.battle_members.size
  end

  #--------------------------------------------------------------------------
  # ● 获取值槽区域的宽度
  #--------------------------------------------------------------------------
  def gauge_area_width
    return 40
  end
  #--------------------------------------------------------------------------
  # ● 获取值槽区域的矩形
  #--------------------------------------------------------------------------
  def gauge_area_rect(index)
    rect = item_rect_for_text(index)
    rect.x += rect.width - gauge_area_width
    rect.width = gauge_area_width
    rect
  end
#~   #--------------------------------------------------------------------------
#~   # ● 绘制项目
#~   #--------------------------------------------------------------------------
#~   def draw_item(index)
#~     actor = $game_party.battle_members[index]
#~     rect = gauge_area_rect(index) ##
#~     draw_actor_cp(actor, rect.x - 165, rect.y - 10, 100, 16) ##
#~     draw_basic_area(basic_area_rect(index), actor)
#~     draw_gauge_area(gauge_area_rect(index), actor)
#~   end
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  def draw_cp(index)
    actor = $game_party.battle_members[index]
    rect = gauge_area_rect(index) ##
    draw_actor_cp(actor, rect.x , rect.y - 10, 40, 16) ##
  end
  #--------------------------------------------------------------------------
  # ● 绘制所有项目
  #--------------------------------------------------------------------------
  def draw_all_items_cp
    item_max.times {|i| draw_cp(i) }
  end

  def refresh_cp
    contents.clear
    draw_all_items_cp
  end

end
#---------------------------------------------------------------------------

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 重定义:开始处理
  #--------------------------------------------------------------------------
  def start
    super
    create_spriteset
    create_all_windows
    BattleManager.method_wait_for_message = method(:wait_for_message)
    @cp_thread = CP_Thread.new
  end
  #--------------------------------------------------------------------------
  # ● 重定义:开始后处理
  #--------------------------------------------------------------------------
  def post_start
    super
    battle_start
    @cp_thread.stop = false #
  end
  #--------------------------------------------------------------------------
  # ● 重定义:信息窗口打开时的更新
  #    在状态窗口关闭完成前,信息窗口的打开度设置为 0 。
  #--------------------------------------------------------------------------
  def update_message_open
    if $game_message.busy? && !@status_window.close?
      @message_window.openness = 0
      @status_window.close
      @party_command_window.close
      @actor_command_window.close
      @cp_window.close
    end
  end
  #--------------------------------------------------------------------------
  # ● 生成所有窗口
  #--------------------------------------------------------------------------
  alias :o_create_all_windows :create_all_windows
  def create_all_windows
    o_create_all_windows
    create_CP_window
    create_name_window
  end
  #--------------------------------------------------------------------------
  # ● 生成名字窗口
  #--------------------------------------------------------------------------
  def create_name_window
    @name_window = Window_Name.new
    @name_window.y = 250 + Graphics.height - 416
  end
  #--------------------------------------------------------------------------
  # ● 生成状态窗口
  #--------------------------------------------------------------------------
  def create_CP_window
    @cp_window = Window_CP.new
    @cp_window.x = 0
    @cp_window.y = Graphics.height - 120
  end
  #--------------------------------------------------------------------------
  # ● 重定义:开始角色指令的选择
  #--------------------------------------------------------------------------
  def start_actor_command_selection
    @status_window.select(BattleManager.actor.index)
    @party_command_window.close
    @actor_command_window.setup(BattleManager.actor)
    @name_window.setup(BattleManager.actor)
    @name_window.open
  end

  #-------------------------------------------------------------------------
  # ● 当cp满时的操作
  #------------------------------------------------------------------------
  def on_cp_full
    BattleManager.cp_updation
    if BattleManager.enable_go.is_a?(Game_Actor) and
      BattleManager.enable_go.inputable?
      BattleManager.enable_go.on_turn_end
      refresh_status
      start_party_command_selection
      @cp_window.close
    else
      if BattleManager.enable_go.is_a?(Game_Actor)
        BattleManager.enable_go.on_turn_end
        $game_party.make_action(BattleManager.enable_go)
        turn_start
      elsif BattleManager.enable_go.is_a?(Game_Enemy)
        BattleManager.enable_go.on_turn_end
        $game_troop.make_action(BattleManager.enable_go)
        $game_troop.increase_turn(BattleManager.enable_go)
        turn_start
      end
    end
    BattleManager.enable_go_clear
  end
  #-------------------------------------------------------------------------
  # ● 重定义:战斗开始
  #------------------------------------------------------------------------
  def battle_start
    BattleManager.battle_start
    process_event
    unless scene_changing?
      @status_window.unselect
      @status_window.open
      @cp_window.unselect
      @cp_window.open
    end
    on_cp_full
  end
  #-------------------------------------------------------------------------
  # ● cp刷新
  #------------------------------------------------------------------------
  def refresh_cp
    if @cp_thread.update?
      @cp_window.refresh_cp
    end
  end
  #--------------------------------------------------------------------------
  # ● 指令“撤退”
  #--------------------------------------------------------------------------
  def command_escape
    turn_start unless BattleManager.process_escape
    for a in $game_party.battle_members
      a.cp -= CP::CP_COST_BASIC_ESCAPE
    end
  end
  #-------------------------------------------------------------------------
  # ● 重定义:画面更新
  #------------------------------------------------------------------------
  def update
    super
    if BattleManager.cp_updating?
      @cp_thread.update
      #refresh_status
      refresh_cp
      on_cp_full
    elsif BattleManager.in_turn?
      process_event
      on_cp_full
      process_action
    end

    BattleManager.judge_win_loss

  end
  #--------------------------------------------------------------------------
  # ● 重定义:处理战斗行动
  #--------------------------------------------------------------------------
  def process_action
    @cp_thread.stop = true
    return if scene_changing?
    if !@subject || [email protected]_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 process_action_end
    @subject.on_action_end
    @subject.my_turn = false
    if @subject.cp >= 65535
      @subject.cp = 0
    end
    refresh_status
    @log_window.display_auto_affected_status(@subject)
    @log_window.wait_and_clear
    @log_window.display_current_state(@subject)
    @log_window.wait_and_clear
    BattleManager.judge_win_loss
    @subject =  nil
    @cp_thread.stop = false ###########
  end
  #--------------------------------------------------------------------------
  # ● 重定义:回合开始
  #--------------------------------------------------------------------------
  def turn_start
    @party_command_window.close
    @actor_command_window.close
    @name_window.close
    @cp_window.open #
    @status_window.unselect
    BattleManager.turn_start
    @log_window.wait
    @log_window.clear
  end
  #-------------------------------------------------------------------------
  # ● 重定义:回合结束
  #------------------------------------------------------------------------
   def turn_end
     all_battle_members.each do |battler|
       refresh_status
       @log_window.display_auto_affected_status(battler)
       @log_window.wait_and_clear
     end
     BattleManager.turn_end
     process_event
     on_cp_full
   end
end
class Window_Name < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    super(Graphics.width - 128, 0, window_width, fitting_height(1))
    self.openness = 0
    @actor = nil
  end
  #--------------------------------------------------------------------------
  # ● 获取窗口的宽度
  #--------------------------------------------------------------------------
  def window_width
    return 128
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_actor_name(@actor, 0 , 0, 100)
  end
  #--------------------------------------------------------------------------
  # ●
  #--------------------------------------------------------------------------
  def setup(actor)
    @actor = actor
  end
  #--------------------------------------------------------------------------
  # ● 打开窗口
  #--------------------------------------------------------------------------
  def open
    refresh
    super
  end
end
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中所有窗口的父类
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 绘制角色肖像图
  #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  #--------------------------------------------------------------------------
  def draw_face_b(face_name, face_index, x, y, enabled = false)
    bitmap = Cache.face(face_name)
    rect = Rect.new(face_index % 4 * 96 ,face_index / 4 * 96 + 40, 96, 20)
    contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
    bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # ● 绘制角色肖像图
  #--------------------------------------------------------------------------
  def draw_actor_face_b(actor, x, y, enabled = true)
    draw_face_b(actor.face_name, actor.face_index, x, y, enabled)
  end
end
#==============================================================================
# ■ Window_BattleStatus
#------------------------------------------------------------------------------
#  战斗画面中,显示“队伍成员状态”的窗口。
#==============================================================================
class Window_BattleStatus < Window_Selectable


  #--------------------------------------------------------------------------
  # ● 绘制基本区域
  #--------------------------------------------------------------------------
  def draw_basic_area(rect, actor)
    index = $game_party.members.index(actor)
    draw_actor_face_b(actor, rect.x , rect.y + index * (0) + 4)
    #draw_actor_name(actor, rect.x , rect.y, 100)
    draw_actor_icons(actor, rect.x + 104, rect.y, rect.width - 104)
  end
end
  
回复 支持 反对

使用道具 举报

Lv4.逐梦者

醉啸 长风万里

梦石
0
星屑
6167
在线时间
6593 小时
注册时间
2007-12-16
帖子
4501

贵宾

3
 楼主| 发表于 2014-2-27 09:54:14 | 只看该作者
本帖最后由 仲秋启明 于 2014-2-27 10:30 编辑
国产吃货 发表于 2014-2-26 23:57
接单
如果是移植其他脚本请出示原版脚本。


谢谢~
原版脚本都在两个连接里了
PS:那张图片的效果在那个范例里的[SM] MP Animated Battlers到[SM] * Window_BattleStatus实现的
PS2:我希望图片的效果我可以自己移动屏幕视角,做特殊效果用
PS3:还有一个连携技效果要不要也帮忙下?(泥垢了!)

还在龟速填坑中
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
218 小时
注册时间
2013-12-17
帖子
386
2
发表于 2014-2-26 23:57:51 | 只看该作者
接单
如果是移植其他脚本请出示原版脚本。
RM脚本定制/修改/整合 群:143356012(入群注明来意)
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 21:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表