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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 峰星
打印 上一主题 下一主题

[已经过期] 如何制作技能等级?

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1140
在线时间
381 小时
注册时间
2010-10-9
帖子
386

开拓者

11
发表于 2011-1-31 15:36:42 | 只看该作者
总之公共事件就是不懂脚本的同学的福音啊~~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1896
在线时间
896 小时
注册时间
2010-11-13
帖子
406
12
发表于 2011-1-31 21:34:39 | 只看该作者
不会出错吧= =?而且哪来的BUG,纯事件诶……
想也一直在把精力放在自认为重要的事上,可能一会,可能一辈子不会填坑,失态
回复 支持 反对

使用道具 举报

Lv3.寻梦者

永久的旅行者

梦石
1
星屑
110
在线时间
404 小时
注册时间
2006-12-13
帖子
3091

开拓者贵宾第3届短篇游戏大赛主流游戏组季军第5届短篇游戏比赛季军

13
发表于 2011-1-31 21:54:07 | 只看该作者
另外补充脚本...
http://rpg.blue/portal.php?mod=view&aid=40145
不过个人还是挺推荐用事件制作的...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
59
在线时间
31 小时
注册时间
2009-1-30
帖子
207
14
发表于 2011-2-1 00:53:40 | 只看该作者
:( 何必那么麻烦真的让他LV1 LV2
你要明白  大火球lv1 是一个技能
大火球LV2是另外个完全不一样的技能
有LV2  LV1就得卷铺盖走人就可以了
简单来说就是等级达到 学会新技能LV2 忘记老技能LV1  
恩恩 就是这么回事
蚊香
回复 支持 反对

使用道具 举报

Lv1.梦旅人

赤瞳

梦石
0
星屑
50
在线时间
132 小时
注册时间
2010-11-28
帖子
515
15
发表于 2011-2-1 11:09:39 | 只看该作者
本帖最后由 银·乌尔 于 2011-2-1 11:11 编辑

不要无视银发布的那个范例...5555~~
银发布过的,简单的战技的升级系统~~

http://rpg.blue/thread-164819-1-1.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
31 小时
注册时间
2009-7-6
帖子
107
16
发表于 2011-2-1 14:23:46 | 只看该作者
本帖最后由 OWOWOW 于 2011-2-1 14:31 编辑

琢磨了下,纯事件的话,我的思路:




PS:没有测试,而且忘记加开关了,想法仅供参考,谢谢合作= =||。

点评

这不是XP么??  发表于 2011-2-1 19:37
汝的VX版本的界面为什么这么Q?  发表于 2011-2-1 18:19
我叫“竹笋
:①
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
5 小时
注册时间
2010-9-17
帖子
22
17
发表于 2011-2-1 14:51:07 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
295
在线时间
7 小时
注册时间
2011-2-2
帖子
1
18
发表于 2011-2-2 16:18:03 | 只看该作者
这个好像可以试试


#=====================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#====================================================================


#====================================================================
# ■ スキルアップデート   Ver. 4.4.0                     by Claimh
#---------------------------------------------------------------
#     スキルごとにレベル制を導入する
#     戦闘中にスキルを使用するほど、威力上昇、消費SP減少、命中率上昇
#==============================================================

module Skill_updata
  S_MIGHT = []
  S_COST = []
  S_HIT = []
  S_LEVEL = []
  S_INTER = []
  S_SLOPE = []
  S_ANIME = []
  S_ELEMENT = []
  S_STATE_P = []
  S_STATE_N = []
#=============================================================
# □ 自定义内容
#==============================================================
  # 威力上升使用true/false
  SKILL_MIGHT_UP = true
  
  # SP消耗减少使用true/false
  SP_COST_DOWN = true      
  
  # 命中率上升使用true/false
  SKILL_HIT_UP = true      
  
  # 属性变化的使用true/false
  ELEMENT_CHANGE = true   
  
  # 状态变化的使用true/false
  STATE_CHANGE = true
  
  # 显示特技等级上升true/false
  SHOW_SKILL_LV_UP = true
  
  # 等级上升的声效,不用的时候就=nil
  SKILLUP_SE = "056-Right02"
  
  # 菜单使用计数true/false
  MENU_COUNT = false

  # 升级所需次数
  UPDATA_INTERVAL = 2
  
  # 等级上限
  LEVEL_LIMIT = 10

  # 威力上升率(%%)
  MIGHT_RATE = 2
  
  # SP消耗减少率(%)
  COST_RATE = 10
  
  # 命中上升率(%)
  HIT_RATE = 10

  #-------------------------------------------------------------
  # 特别技能的详细设定,57和61号特技分别是十字斩和扫荡,大家最熟悉的两个招数
  #----------------------------------------------------------------
  
  # 界限水平
  # S_LEVEL[技艺ID]=[角色ID=>界限,…]
  S_LEVEL[57] = {1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  S_LEVEL[61] = {1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
     
  # 技艺&actor威力上升率
  # S_MIGHT[技艺ID]=[角色ID=>威力上升率,…]
  S_MIGHT[57] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  S_MIGHT[61] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

  # 技艺&actorSP消费减少率
  # S_COST[技艺ID]=[角色ID=>SP消费减少率,…]
  S_COST[57] = {1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  S_COST[61] = {1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

  # 技艺&actor命中率
  # S_HIT[技艺ID]=[角色ID=>命中上升率,…]
  S_HIT[57] = {1=>2, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  S_HIT[61] = {1=>1, 2=>2, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}

  #-----------------------------------------------------------------
  # 技能成长的具体调节
  #-----------------------------------------------------------------
  # 技艺的增长图形
  # 0:使用技艺一定回数的话提高水平
  # 1:技艺一定回数+每水平の使用提高水平
  SKILL_PATTERN = 0
  
  # 技艺水平上升间隔每(使用几回Lv提高)
  #   ※没有设定的情况→基本设定被适应
  # S_INTER[技艺ID]=[actorID=>上升间隔,…]
  S_INTER[57] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
  
  # スキルレベル上昇の傾き(パターン1を使用する場合のみ必要)
  #   ※設定がない場合は1となります。
  # S_SLOPE[スキルID] = [アクターID=>上昇の傾き, …]
  S_SLOPE[57] = {1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}

  #-------------------------------------------------------------
  # 技艺增长的话使之动画变化
  #  记录格式: S_ANIME[技艺ID] = [角色ID=>[[等级, 动画ID]], ・・・]
  #------------------------------------------------------------
  # 实施技艺增长的动画变化?
  USE_S_ANIME = true
  
  # 設定例
  # 1号角色,57号特技,lv5,lv10动画变化
  # 2号角色,Lv.11动画变化
  S_ANIME[57] = {1=>[[5, 69], [10, 70]], 2=>[[11, 70]]}

  #-------------------------------------------------------------------
  # 属性変化/状态変化
  #------------------------------------------------------------------
  # 属性変化
  # S_ELEMENT[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  S_ELEMENT[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  # 状态変化+
  # S_STATE_P[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  S_STATE_P[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  # 状态変化-
  # S_STATE_N[技艺ID] = {角色ID=>{水平=>[属性ID,属性ID…]}, ・・・・}
  S_STATE_N[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

#==================================================================
# □ 自定义内容终了
#==================================================================
end


class Game_Actor
  include Skill_updata
  attr_accessor   :skill_use      # スキル使用回数
  attr_accessor   :skill_level    # スキルレベル
  attr_accessor   :skill_power    # スキル威力更新値
  attr_accessor   :skill_sp_cost  # スキルSP消費更新値
  attr_accessor   :skill_hit      # スキル命中率
  attr_accessor   :skill_up       # レベルアップフラグ
  attr_accessor   :skill_list     # スキルEXPリスト
  alias skill_updata_init setup
  def setup(actor_id)
    skill_updata_init(actor_id)
    @skill_use = []
    @skill_level = []
    @skill_power = []
    @skill_sp_cost = []
    @skill_hit = []
    @skill_up = false
    @skill_list = []
    for id in 1...$data_skills.size
      @skill_use[id] = 0
      @skill_level[id] = 0
      @skill_power[id] = $data_skills[id].power
      @skill_sp_cost[id] = $data_skills[id].sp_cost
      @skill_hit[id] = $data_skills[id].hit
      @skill_list[id] = make_skill_list(id)
    end
  end

  #-------------------------------------------------------------
  # ● スキルEXP 計算
  #------------------------------------------------------------
  def make_skill_list(skill_id)
    interval = S_INTER[skill_id]
    up_interval = ( (interval != nil and interval[@actor_id] != nil) ? interval[@actor_id] : UPDATA_INTERVAL )
    slope = S_SLOPE[skill_id]
    up_slope = ( (slope != nil and slope[@actor_id] != nil) ? slope[@actor_id] : 1 )
    limit = S_LEVEL[skill_id]
    limit_lv = ( (limit != nil and limit[@actor_id] != nil) ? limit[@actor_id] : LEVEL_LIMIT )
    list = []
    list[0] = 0
    for lv in 1...limit_lv+1
      exp = 0
      case SKILL_PATTERN
      when 0
        exp = up_interval * lv
      when 1
        exp = list[lv-1] + up_slope * lv + up_interval
      end
      list[lv] = exp.truncate
    end
    return list
  end
end


class Game_Battler
  include Skill_updata
  #-----------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #-------------------------------------------------------------
  alias skill_effect_update skill_effect
  def skill_effect(user, skill)
    up_flag = false
    if user.is_a?(Game_Actor) and ($scene.is_a?(Scene_Battle) or MENU_COUNT)
      skill_update_main(user, skill)
      skill_base = skill.dup
      # 威力上昇
      if SKILL_MIGHT_UP
        skill.power = user.skill_power[skill.id]
      end
      # 命中率上昇
      if SKILL_HIT_UP
        skill.hit = user.skill_hit[skill.id]
      end
      # 属性変化
      if ELEMENT_CHANGE and S_ELEMENT != []
        ele1 = S_ELEMENT[skill.id]
        if ele1 != nil and ele1[user.id] != nil
          ele2 = ele1[user.id]
          if ele2 != [] and ele2[user.skill_level[skill.id]] != nil
            skill.element_set = ele2[user.skill_level[skill.id]]
          end
        end
      end
      # ステート変化
      if STATE_CHANGE
        if S_STATE_P != []
          pst1 = S_STATE_P[skill.id]
          if pst1 != nil and pst1[user.id] != nil
            pst2 = pst1[user.id]
            if pst2 != nil and pst2[user.skill_level[skill.id]] != nil
              skill.plus_state_set = pst2[user.skill_level[skill.id]]
#              p skill.plus_state_set
            end
          end
        end
        if S_STATE_N != []
          nst1 = S_STATE_N[skill.id]
          if nst1 != nil and nst1[user.id] != nil
            nst2 = nst1[user.id]
            if nst1 != nil and nst2[user.skill_level[skill.id]] != nil
              skill.minus_state_set = nst2[user.skill_level[skill.id]]
            end
          end
        end
      end
      up_flag = true
    end
    ret = skill_effect_update(user, skill)    # 原物
    if up_flag
      skill = skill_base
      # Miss時には後戻し
      if self.damage == "Miss"
        skill_use_recount(user, skill)
      end
    end
    return ret
  end
  
  #------------------------------------------------------------
  # ● スキルアップデータメイン
  #-------------------------------------------------------------
  def skill_update_main(actor, skill)
    # スキル使用回数のカウント
    actor.skill_use[skill.id] += 1
    # リミット取得
    limit = S_LEVEL[skill.id]
    s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
    # 書き換え限界到達
    if s_limit == false or actor.skill_level[skill.id] < s_limit
      # レベルアップ間隔取得
      interval = actor.skill_list[skill.id]
      # 書き換え回数到達
      if actor.skill_use[skill.id] == interval[actor.skill_level[skill.id]+1]
        # スキルレベル上昇
        actor.skill_level[skill.id] += 1
        actor.skill_up = true
        # 威力上昇 = 有効
        if SKILL_MIGHT_UP
          might = S_MIGHT[skill.id]
          might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
          # 補正値更新
          actor.skill_power[skill.id] += skill.power * might_rate / 100
          actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
        end
        # SP消費減少 = 有効
        if SP_COST_DOWN
          cost = S_COST[skill.id]
          cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
          actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
          actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
          # SP消費が0以下はありえない
          if actor.skill_sp_cost[skill.id] < 0
            actor.skill_sp_cost[skill.id] = 0
          end
        end
        # 命中率上昇 = 有効
        if SKILL_HIT_UP
          hit = S_HIT[skill.id]
          hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
          actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
          actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
          # 100以上はありえない
          if actor.skill_hit[skill.id] > 100
            actor.skill_hit[skill.id] = 100
          end
        end
      end
    end
  end
  
  #---------------------------------------------------------
  # ● 再カウント
  #------------------------------------------------------
  def skill_use_recount(actor, skill)
    if actor.skill_up
      actor.skill_level[skill.id] -= 1
      # 威力を再計算
      if SKILL_MIGHT_UP
        actor.skill_power[skill.id] = skill.power
        might = S_MIGHT[skill.id]
        might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
        for i in 1...actor.skill_level[skill.id]
          actor.skill_power[skill.id] += skill.power * might_rate / 100
          actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
        end
      end
      # SP消費再計算
      if SP_COST_DOWN
        actor.skill_sp_cost[skill.id] = skill.sp_cost
        cost = S_COST[skill.id]
        cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
        for i in 1...actor.skill_level[skill.id]
          actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
          actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
        end
        # SP消費が0以下はありえない
        if actor.skill_sp_cost[skill.id] < 0
          actor.skill_sp_cost[skill.id] = 0
        end
      end
      # 命中率再計算
      if SKILL_HIT_UP
        actor.skill_hit[skill.id] = skill.hit
        hit = S_HIT[skill.id]
        hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
        for i in 1...actor.skill_level[skill.id]
          actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
          actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
        end
        # 100以上はありえない
        if actor.skill_hit[skill.id] > 100
          actor.skill_hit[skill.id] = 100
        end
      end
      actor.skill_up = false
    end
    actor.skill_use[skill.id] -= 1
  end
end

#=================================================================
# スキル成長によるアニメーション変化
#=================================================================
class Scene_Battle
  include Skill_updata
  #--------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  #-----------------------------------------------------------
  alias update_phase4_step4_skillup update_phase4_step4
  def update_phase4_step4
    update_phase4_step4_skillup
    if @active_battler.is_a?(Game_Actor) and USE_S_ANIME
      s_anime = S_ANIME[@skill.id]
      # 設定がないなら無視
      if s_anime != nil and s_anime[@active_battler.id] != nil
        s_anime_set = s_anime[@active_battler.id]
        for i in 0...s_anime_set.size
          s_anime_def = s_anime_set
          # 規定レベル以上
          if @active_battler.skill_level[@skill.id] >= s_anime_def[0]
            # 対象側アニメーション
            for target in @target_battlers
              target.animation_id = s_anime_def[1]
            end
          end
        end
      end
    end
  end
end

#=================================================================
# 以下、レベルアップ表示部分(レベルアップ表示がいらないなら消してもOK)
#=================================================================
class Scene_Battle
  include Skill_updata
  if SHOW_SKILL_LV_UP
  #----------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #----------------------------------------------------------
  alias update_phase4_step2_skillup update_phase4_step2
  def update_phase4_step2
    if @active_battler.is_a?(Game_Actor)
      @active_battler.skill_up = false
    end
    @skillup = false
    update_phase4_step2_skillup   # 原物
  end

  #-------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  #-----------------------------------------------------------
  alias update_phase4_step3_skillup update_phase4_step3
  def update_phase4_step3
    if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up != false
      @skillup = true
      @skill_up_window = Window_Skillup.new(@active_battler)
      if SKILLUP_SE != nil
        Audio.se_play("Audio/SE/" + SKILLUP_SE)
        sleep(0.1)
      end
    end
    update_phase4_step3_skillup
  end

  #--------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------
  alias update_phase4_step5_skillup update_phase4_step5
  def update_phase4_step5
    if @active_battler.is_a?(Game_Actor) and @skillup
      @skill_up_window.dispose
      @active_battler.skill_up = false
      @skillup = false
    end
    update_phase4_step5_skillup     # 原物
  end

  #---------------------------------------------------------------
  # ● フレーム更新
  #----------------------------------------------------------------
  alias update_skillup update
  def update
    if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up and @skillup
      @skill_up_window.contents_opacity -= 4
    end
    update_skillup              # 原物
  end
  end # if SHOW_SKILL_LV_UP
end

class Window_Skillup < Window_Base
  #--------------------------------------------------------------
  # ● オブジェクト初期化
  #     actor : アクター
  #-------------------------------------------------------------
  def initialize(actor)
    super(actor.screen_x-140, 260, 250, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.contents.font.color = Color.new(255, 64, 0)
    self.contents.draw_text(80, 0, 150, 32, "升级!")
  end
end



#====================================================================
# 以下、再定義部分を含む(SP消費減少の機能がいらないなら消してもOK)
#====================================================================
class Window_Skill < Window_Selectable
  #----------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #-----------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
#-修正-----
    @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
    name_level = skill.name + "(Lv" + @actor.skill_level[skill.id].to_s + ")"
    self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
    @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
    self.contents.draw_text(x + 232, y, 48, 32, @actor.skill_sp_cost[skill.id].to_s, 2)
#----------
  end
end

class Scene_Skill
  #----------------------------------------------------------
  # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  #-------------------------------------------------------------
  def update_target
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ターゲットウィンドウを消去
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # SP 切れなどで使用できなくなった場合
      unless @actor.skill_can_use?(@skill.id)
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # ターゲットが全体の場合
      if @target_window.index == -1
        # パーティ全体にスキルの使用効果を適用
        used = false
        for i in $game_party.actors
          used |= i.skill_effect(@actor, @skill)
        end
      end
      # ターゲットが使用者の場合
      if @target_window.index <= -2
        # ターゲットのアクターにスキルの使用効果を適用
        target = $game_party.actors[@target_window.index + 10]
        used = target.skill_effect(@actor, @skill)
      end
      # ターゲットが単体の場合
      if @target_window.index >= 0
        # ターゲットのアクターにスキルの使用効果を適用
        target = $game_party.actors[@target_window.index]
        used = target.skill_effect(@actor, @skill)
      end
      # スキルを使った場合
      if used
        # スキルの使用時 SE を演奏
        $game_system.se_play(@skill.menu_se)
#-----修正---------------------------------------------
        @actor.skill_sp_cost[@skill.id] = @skill.sp_cost if @actor.skill_sp_cost[@skill.id] == nil
        # SP 消費
        @actor.sp -= @actor.skill_sp_cost[@skill.id]
#------------------------------------------------
        # 各ウィンドウの内容を再作成
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        # 全滅の場合
        if $game_party.all_dead?
          # ゲームオーバー画面に切り替え
          $scene = Scene_Gameover.new
          return
        end
        # コモンイベント ID が有効の場合
        if @skill.common_event_id > 0
          # コモンイベント呼び出し予約
          $game_temp.common_event_id = @skill.common_event_id
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
      end
      # スキルを使わなかった場合
      unless used
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end

class Scene_Battle
  include Skill_updata
  #------------------------------------------------------
  # ● スキルアクション 結果作成
  #-------------------------------------------------------
  alias make_skill_action_result_skill_update make_skill_action_result
  def make_skill_action_result
    make_skill_action_result_skill_update
    # SP 消費
    if SP_COST_DOWN and @active_battler.is_a?(Game_Actor)
      @active_battler.sp += @skill.sp_cost
      @active_battler.sp -= @active_battler.skill_sp_cost[@skill.id]
    end
  end
end

class Game_Battler
  #--------------------------------------------------------
  # ● スキルの使用可能判定
  #     skill_id : スキル ID
  #------------------------------------------------------
  alias skill_update_can_use? skill_can_use?
  def skill_can_use?(skill_id)
    ret = skill_update_can_use?(skill_id)
    if !ret and SP_COST_DOWN
      # SP が足りない場合は使用不可となった?
      if $data_skills[skill_id].sp_cost > self.sp
        if self.is_a?(Game_Actor)
          skill_sp_cost = self.skill_sp_cost[skill_id]
          if skill_sp_cost < self.sp
            ret = true
          end
        end
      end
    end
    return ret
  end
end

#===============================================================
# イベントスクリプト操作
#===============================================================
class Interpreter
  include Skill_updata
  #-----------------------------------------------------------
  # ● スキルレベル設定(レベルセット)
  #     actor_id  :   アクターID
  #     skill_id  :   スキルID
  #     level     :   設定レベル
  #-----------------------------------------------------------
  def set_skill_level(actor_id, skill_id, level)
    actor = $game_actors[actor_id]
    skill = $data_skills[skill_id]
    # リミット取得
    limit = S_LEVEL[skill_id]
    s_limit = ( (limit != nil and limit[actor.id] != nil) ? limit[actor.id] : LEVEL_LIMIT)
    if level > s_limit or level < 0
      return
    end
    # レベル
    actor.skill_level[skill.id] = level
    # 使用回数
    use_list = actor.skill_list[skill.id]
    actor.skill_use[skill.id] = use_list[level]
    # 威力を再計算
    if SKILL_MIGHT_UP
      actor.skill_power[skill.id] = skill.power
      might = S_MIGHT[skill.id]
      might_rate = ((might != nil and might[actor.id] != nil) ? might[actor.id] : MIGHT_RATE)
      for i in 0...level
        actor.skill_power[skill.id] += skill.power * might_rate / 100
        actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
      end
    end
    # SP消費再計算
    if SP_COST_DOWN
      actor.skill_sp_cost[skill.id] = skill.sp_cost
      cost = S_COST[skill.id]
      cost_rate = ((cost != nil and cost[actor.id] != nil) ? cost[actor.id] : COST_RATE)
      for i in 0...level
        actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
        actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
      end
      # SP消費が0以下はありえない
      if actor.skill_sp_cost[skill.id] < 0
        actor.skill_sp_cost[skill.id] = 0
      end
    end
    # 命中率再計算
    if SKILL_HIT_UP
      actor.skill_hit[skill.id] = skill.hit
      hit = S_HIT[skill.id]
      hit_rate = ((hit != nil and hit[actor.id] != nil) ? hit[actor.id] : HIT_RATE)
      for i in 0...level
        actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
        actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
      end
      # 100以上はありえない
      if actor.skill_hit[skill.id] > 100
        actor.skill_hit[skill.id] = 100
      end
    end
  end
  
  #---------------------------------------------------------
  # ● スキルレベル設定(レベルアップ)
  #     actor_id  :   アクターID
  #     skill_id  :   スキルID
  #--------------------------------------------------------
  def skill_level_up(actor_id, skill_id)
    actor = $game_actors[actor_id]
    set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]+1)
  end
  
  #-------------------------------------------------------
  # ● スキルレベル設定(レベルダウン)
  #     actor_id  :   アクターID
  #     skill_id  :   スキルID
  #--------------------------------------------------------
  def skill_level_down(actor_id, skill_id)
    actor = $game_actors[actor_id]
    set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]-1)
  end
end

#==================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==================================================================
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
164 小时
注册时间
2010-6-19
帖子
289
19
发表于 2011-3-29 18:36:41 | 只看该作者
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
164 小时
注册时间
2010-6-19
帖子
289
20
发表于 2011-3-29 18:36:58 | 只看该作者
看看这个思路吧

点评

初犯扣分%5,这里是技术论坛,是有规矩的地方。  发表于 2011-3-29 20:05

评分

参与人数 1星屑 -400 收起 理由
fux2 -400 多次无视版规

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 12:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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