Project1

标题: 【仿VA任重而道远】TP战斗(RTAB版完美显示怒气更及时) [打印本页]

作者: 阿尔西斯的马甲    时间: 2012-1-18 11:40
标题: 【仿VA任重而道远】TP战斗(RTAB版完美显示怒气更及时)
本帖最后由 阿尔西斯的马甲 于 2012-1-20 19:07 编辑
  1. class Game_Battler
  2.   attr_reader   :tp
  3.   alias beforetp_init initialize
  4.   def initialize
  5.     beforetp_init
  6.     @tp = 0
  7.   end
  8.   def maxtp
  9.     return 100
  10.   end
  11.   def tp
  12.     return [[@tp, self.maxtp].min, 0].max
  13.   end
  14.   def tp=(tp)
  15.     @tp = [[tp, self.maxtp].min, 0].max
  16.   end
  17.   def skill_can_use?(skill_id)#重写了skill_can_use?,注意整合
  18.     if $data_skills[skill_id].element_set.include?(28)#此处是消耗TP属性的编号
  19.       if $data_skills[skill_id].sp_cost > self.tp
  20.         return false
  21.       end
  22.       if not $game_temp.in_battle
  23.         return false
  24.       end
  25.     else
  26.       if $data_skills[skill_id].sp_cost > self.sp
  27.         return false
  28.       end
  29.     end
  30.     if dead?
  31.       return false
  32.     end
  33.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  34.       return false
  35.     end   
  36.     occasion = $data_skills[skill_id].occasion
  37.     if $game_temp.in_battle
  38.       return (occasion == 0 or occasion == 1)
  39.     else
  40.       return (occasion == 0 or occasion == 2)
  41.     end
  42.     return true
  43.   end
  44.   alias beforetp_aft attack_effect
  45.   def attack_effect(attacker)
  46.     a=beforetp_aft(attacker)
  47.     if (self.damage!="Miss")and(self.damage!="")and(self.damage!=nil)
  48.       attacker.tp+=5
  49.       a=50*(self.damage/(self.maxhp.to_f))
  50.       self.tp+=a.to_i
  51.     end
  52.     return a
  53.   end
  54.   alias beforetp_sft skill_effect
  55.   def skill_effect(user, skill)
  56.     a=beforetp_sft(user, skill)
  57.     if (self.damage!="Miss")and(self.damage!="")and(self.damage!=nil)
  58.       a=50*(self.damage/(self.maxhp.to_f))
  59.       self.tp+=a.to_i
  60.     end
  61.     return a
  62.   end
  63.   alias beforetp_ift item_effect
  64.   def item_effect(item)
  65.     a=beforetp_ift(item)
  66.     if (self.damage!="Miss")and(self.damage!="")and(self.damage!=nil)
  67.       a=50*(self.damage/(self.maxhp.to_f))
  68.       self.tp+=a.to_i
  69.     end
  70.     return a
  71.   end
  72.   def recover_all#重写了recover_all,注意整合
  73.     @hp = maxhp
  74.     @sp = maxsp
  75.     @tp = 0
  76.     for i in @states.clone
  77.       remove_state(i)
  78.     end
  79.   end
  80. end
  81. ##########以下非原创!!!非原创!!!作者zhong,来自66RPG.com
  82. class Window_Base
  83.   def draw_hp_store_bar(actor,x,y)
  84.     width = 100
  85.     w = actor.hp_store
  86.     white = Color.new(225,225,225,225)
  87.     black = Color.new(0,0,0,200)
  88.     self.contents.font.color = Color.new(225,-215,-225,200)
  89.     self.contents.fill_rect(x+40,y,width,1,white)
  90.     self.contents.fill_rect(x+40,y+12, width, 1,white)
  91.     self.contents.fill_rect(x+40,y,1,12,white)
  92.     self.contents.fill_rect(x+139,y,1,12,white)
  93.     self.contents.fill_rect(x+42,y+2,width-4,10,black)
  94.     val = 245*actor.tp/100
  95.     green = 255 - val
  96.     blue = 255 - val
  97.     color = Color.new(255,green,blue,200)
  98.     top_color = Color.new(255,green+10,blue+20,200)
  99.     back_color = Color.new(255,green-10,blue-10,200)
  100.     self.contents.fill_rect(x+41,y+5,w-2,3,color)
  101.     self.contents.fill_rect(x+41,y+1,w-2,4,top_color)
  102.     self.contents.fill_rect(x+41,y+7,w-2,5,back_color)
  103.     self.contents.draw_text(x+120,y-10,20,20,"TP")
  104.   end
  105.   def draw_hp_store_bar2(actor,x,y)
  106.     width = 100
  107.     w = actor.tp
  108.     self.contents.fill_rect(x+39,y,width+1,1,Color.new(225,225,225,200))
  109.     self.contents.fill_rect(x+39,y+5,width+2,1,Color.new(225,225,225,200))
  110.     self.contents.fill_rect(x+39,y,1,5,Color.new(225,225,225,200))
  111.     self.contents.fill_rect(x+140,y,1,5,Color.new(225,225,225,200))
  112.     self.contents.fill_rect(x+40,y+1,width,4,Color.new(0,0,0,200))
  113.     self.contents.fill_rect(x+40, y+1, w,1, Color.new(255, 96, 96, 255))
  114.     self.contents.fill_rect(x+40, y+2, w,1, Color.new(255, 0, 0, 255))
  115.     self.contents.fill_rect(x+40, y+3, w,1, Color.new(128, 0, 0, 255))
  116.     self.contents.fill_rect(x+40, y+4, w,1, Color.new(0, 0, 0, 255))
  117.   end
  118. end
  119. class Window_BattleStatus < Window_Base
  120.   def refresh#重写了refresh,注意整合
  121.     self.contents.clear
  122.     @item_max = $game_party.actors.size
  123.     for i in 0...$game_party.actors.size
  124.       actor = $game_party.actors[i]
  125.       actor_x = i * 160 + 4
  126.       draw_actor_name(actor, actor_x, 0)
  127.       draw_actor_hp(actor, actor_x, 32, 120)
  128.       draw_actor_sp(actor, actor_x, 64, 120)
  129.       draw_hp_store_bar2(actor, actor_x-40,113)
  130.       if @level_up_flags[i]
  131.         self.contents.font.color = normal_color
  132.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  133.       else
  134.         draw_actor_state(actor, actor_x, 96)
  135.       end
  136.     end
  137.   end
  138. end
  139. class Scene_Battle
  140.   def make_skill_action_result
  141.     @skill = $data_skills[@active_battler.current_action.skill_id]
  142.     unless @active_battler.current_action.forcing
  143.       unless @active_battler.skill_can_use?(@skill.id)
  144.         $game_temp.forcing_battler = nil
  145.         @phase4_step = 1
  146.         return
  147.       end
  148.     end
  149.     if @skill.element_set.include?(28)
  150.       @active_battler.tp -= @skill.sp_cost
  151.     else
  152.       @active_battler.sp -= @skill.sp_cost
  153.     end
  154.     @status_window.refresh
  155.     @help_window.set_text(@skill.name, 1)
  156.     @animation1_id = @skill.animation1_id
  157.     @animation2_id = @skill.animation2_id
  158.     @common_event_id = @skill.common_event_id
  159.     set_target_battlers(@skill.scope)
  160.     for target in @target_battlers
  161.       target.skill_effect(@active_battler, @skill)
  162.     end
  163.   end
  164. end
复制代码
打人获得的TP与被打获得的TP数量完全与VA一致。
加了一个非原创的TP条。
选中“TP”属性(范例中为28号)后,消耗SP选项的意义就会变为消耗TP。
以上系统没有经过RTAB兼容性处理。
  1. class Game_Battler
  2.   attr_reader   :tp
  3.   alias beforetp_init initialize
  4.   def initialize
  5.     beforetp_init
  6.     @tp = 0
  7.   end
  8.   def maxtp
  9.     return 100
  10.   end
  11.   def tp
  12.     return [[@tp, self.maxtp].min, 0].max
  13.   end
  14.   def tp=(tp)
  15.     @tp = [[tp, self.maxtp].min, 0].max
  16.   end
  17.   def skill_can_use?(skill_id)#重写了skill_can_use?,注意整合
  18.     if $data_skills[skill_id].element_set.include?(28)#此处是消耗TP属性的编号
  19.       if $data_skills[skill_id].sp_cost > self.tp
  20.         return false
  21.       end
  22.       if not $game_temp.in_battle
  23.         return false
  24.       end
  25.     else
  26.       if $data_skills[skill_id].sp_cost > self.sp
  27.         return false
  28.       end
  29.     end
  30.     if dead?
  31.       return false
  32.     end
  33.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  34.       return false
  35.     end   
  36.     occasion = $data_skills[skill_id].occasion
  37.     if $game_temp.in_battle
  38.       return (occasion == 0 or occasion == 1)
  39.     else
  40.       return (occasion == 0 or occasion == 2)
  41.     end
  42.     return true
  43.   end
  44.   alias beforetp_aft attack_effect
  45.   def attack_effect(attacker)
  46.     a=beforetp_aft(attacker)
  47.     if (self.damage[attacker]!="Miss")and(self.damage[attacker]!="")and(self.damage[attacker]!=nil)
  48.       attacker.tp+=5
  49.       a=50*(self.damage[attacker]/(self.maxhp.to_f))
  50.       self.tp+=a.to_i
  51.     end
  52.     return a
  53.   end
  54.   alias beforetp_sft skill_effect
  55.   def skill_effect(user, skill)
  56.     a=beforetp_sft(user, skill)
  57.     if (self.damage[user]!="Miss")and(self.damage[user]!="")and(self.damage[user]!=nil)
  58.       a=50*(self.damage[user]/(self.maxhp.to_f))
  59.       self.tp+=a.to_i
  60.     end
  61.     return a
  62.   end
  63.   alias beforetp_ift item_effect
  64.   def item_effect(item,user)
  65.     a=beforetp_ift(item,user)
  66.     if (self.damage[user]!="Miss")and(self.damage[user]!="")and(self.damage[user]!=nil)
  67.       a=50*(self.damage[user]/(self.maxhp.to_f))
  68.       self.tp+=a.to_i
  69.     end
  70.     return a
  71.   end
  72.   def recover_all#重写了recover_all,注意整合
  73.     @hp = maxhp
  74.     @sp = maxsp
  75.     @tp = 0
  76.     for i in @states.clone
  77.       remove_state(i)
  78.     end
  79.   end
  80. end
  81. class Scene_Battle
  82.   def make_skill_action_preparation(battler)
  83.     # スキルを取得
  84.     @skill = $data_skills[battler.current_action.skill_id]
  85.     # 連携スキルであるかどうか確認
  86.     speller = synthe?(battler)
  87.     # 強制アクションでなければ
  88.     unless battler.current_action.forcing
  89.       # SP 切れなどで使用できなくなった場合
  90.       if speller == nil
  91.         unless battler.skill_can_use?(@skill.id)
  92.           # ステップ 6 に移行
  93.           battler.phase = 6
  94.          return false
  95.         end
  96.       end
  97.     end
  98.     # SP 消費
  99.     temp = false
  100.     if speller != nil
  101.       for spell in speller
  102.         if spell.current_action.spell_id == 0
  103.           if @skill.element_set.include?(28)
  104.             spell.tp -= @skill.sp_cost
  105.           else
  106.             spell.sp -= @skill.sp_cost
  107.           end
  108.         else
  109.           if @skill.element_set.include?(28)
  110.             spell.tp -= $data_skills[spell.current_action.spell_id].sp_cost
  111.           else
  112.             spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost
  113.           end
  114.         end
  115.         # ステータスウィンドウをリフレッシュ
  116.         status_refresh(spell)
  117.       end
  118.     else
  119.       if @skill.element_set.include?(28)
  120.         battler.tp -= @skill.sp_cost
  121.       else
  122.         battler.sp -= @skill.sp_cost
  123.       end
  124.       # ステータスウィンドウをリフレッシュ
  125.       status_refresh(battler)
  126.     end
  127.     # アニメーション ID を設定
  128.     battler.anime1 = @skill.animation1_id
  129.     battler.anime2 = @skill.animation2_id
  130.     # コモンイベント ID を設定
  131.     battler.event = @skill.common_event_id
  132.     # 対象側バトラーを設定
  133.     set_target_battlers(@skill.scope, battler)
  134.     return true
  135.   end
  136. end
  137. class Window_Base < Window
  138.   #--------------------------------------------------------------------------
  139.   # ● ATG の描画
  140.   #     actor : アクター
  141.   #     x     : 描画先 X 座標
  142.   #     y     : 描画先 Y 座標
  143.   #     width : 描画先の幅
  144.   #--------------------------------------------------------------------------
  145.   def draw_actor_atg(actor, x, y, width = 144)
  146.     if @at_gauge == nil
  147.       # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
  148.       # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
  149.       # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
  150.       # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
  151.       # align3:ゲージタイプ 0:左詰め 1:右詰め
  152.       @plus_x = 0
  153.       @rate_x = 0
  154.       @plus_y = 24
  155.       @plus_width = 0
  156.       @rate_width = 100
  157.       @width = @plus_width + width * @rate_width / 100
  158.       @height = 16
  159.       @align1 = 0
  160.       @align2 = 1
  161.       @align3 = 0
  162.       # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
  163.       # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション)
  164.       grade1 = 1
  165.       grade2 = 0
  166.       # 色設定。color1:最外枠,color2:中枠
  167.       # color3:空枠ダークカラー,color4:空枠ライトカラー
  168.       color1 = Color.new(0, 0, 0)
  169.       color2 = Color.new(255, 255, 192)
  170.       color3 = Color.new(0, 0, 0, 192)
  171.       color4 = Color.new(0, 0, 64, 192)
  172.       # ゲージの色設定
  173.       # 通常時の色設定
  174.       color5 = Color.new(0, 64, 80)
  175.       color6 = Color.new(0, 128, 160)
  176.       # ゲージがMAXの時の色設定
  177.       color7 = Color.new(80, 0, 0)
  178.       color8 = Color.new(240, 0, 0)
  179.       # 連携スキル使用時の色設定
  180.       color9 = Color.new(80, 64, 32)
  181.       color10 = Color.new(240, 192, 96)
  182.       # スキル詠唱時の色設定
  183.       color11 = Color.new(80, 0, 64)
  184.       color12 = Color.new(240, 0, 192)
  185.       # ゲージの描画
  186.       gauge_rect_at(@width, @height, @align3, color1, color2,
  187.                   color3, color4, color5, color6, color7, color8,
  188.                   color9, color10, color11, color12, grade1, grade2)
  189.     end
  190.     # 変数atに描画するゲージの幅を代入
  191.     if actor.rtp == 0
  192.       at = (width + @plus_width) * actor.atp * @rate_width / 10000
  193.     else
  194.       at = (width + @plus_width) * actor.rt * @rate_width / actor.rtp / 100
  195.     end
  196.     if at > width
  197.       at = width
  198.     end
  199.     # ゲージの左詰・中央構え等の補正
  200.     case @align1
  201.     when 1
  202.       x += (@rect_width - width) / 2
  203.     when 2
  204.       x += @rect_width - width
  205.     end
  206.     case @align2
  207.     when 1
  208.       y -= @height / 2
  209.     when 2
  210.       y -= @height
  211.     end
  212.     self.contents.blt(x + @plus_x + width * @rate_x / 100, y + @plus_y,
  213.                       @at_gauge, Rect.new(0, 0, @width, @height))
  214.     if @align3 == 0
  215.       rect_x = 0
  216.     else
  217.       x += @width - at - 1
  218.       rect_x = @width - at - 1
  219.     end
  220.     # ゲージの色設定
  221.     if at == width
  222.         # MAX時のゲージ描画
  223.       self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
  224.                         @at_gauge, Rect.new(rect_x, @height * 2, at, @height))
  225.     else
  226.       if actor.rtp == 0
  227.         # 通常時のゲージ描画
  228.         self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
  229.                           @at_gauge, Rect.new(rect_x, @height, at, @height))
  230.       else
  231.         if actor.spell == true
  232.           # 連携スキル使用時のゲージ描画
  233.           self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
  234.                         @at_gauge, Rect.new(rect_x, @height * 3, at, @height))
  235.         else
  236.           # スキル詠唱時のゲージ描画
  237.           self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
  238.                         @at_gauge, Rect.new(rect_x, @height * 4, at, @height))
  239.         end
  240.       end
  241.     end
  242.   end
  243. end
  244. class Window_Base
  245.   def draw_cr(x,y,current,max,txt='',width=100,height=6)
  246.     c1=[219, 222, 223];c2=[186, 20, 7]
  247.     bk_color = Color.new(255,255,255,255)
  248.     num = true
  249.     num_align = 1
  250.     bl = current.to_f / max
  251.     w = (width*bl).round
  252.     r = c1[0];g = c1[1];b = c1[2]
  253.     plus_r = (c2[0]-c1[0])/(width*bl)
  254.     plus_g = (c2[1]-c1[1])/(width*bl)
  255.     plus_b = (c2[2]-c1[2])/(width*bl)
  256.     w.times {|i|
  257.     contents.fill_rect(x+i, y, 1, height, Color.new(r,g,b,255))
  258.     r+=plus_r;g+=plus_g;b+=plus_b}
  259.     contents.fill_rect(x-1, y-1, width+2, 1, bk_color)
  260.     contents.fill_rect(x-1, y+height, width+2, 1, bk_color)
  261.     contents.fill_rect(x-1, y, 1, height, bk_color)
  262.     contents.fill_rect(x+width, y, 1, height, bk_color)
  263.     txt_w = contents.text_size(txt).width + 2
  264.     contents.draw_text(x-txt_w,y+height/2-12, width, 24, txt)
  265.     contents.draw_text(x,y+height/2-12, width, 24,
  266.     current.to_s+'/'+max.to_s,num_align) if num
  267.   end
  268. end
  269. class Window_DetailsStatus < Window_Base
  270.   def refresh(actor, level_up_flags = false)
  271.     self.contents.clear
  272.     case @status_id
  273.     when 0
  274.       draw_actor_name(actor, 4, 0)
  275.     when 1
  276.       draw_actor_hp(actor, 4, 0, 120)
  277.     when 2
  278.       draw_actor_sp(actor, 4, 0, 120)
  279.     when 3
  280.       if level_up_flags
  281.         self.contents.font.color = normal_color
  282.         self.contents.draw_text(4, 0, 120, 32, "LEVEL UP!")
  283.       else
  284.         draw_actor_state(actor, 4, 0)
  285.       end
  286.     when 4
  287.       draw_actor_atg(actor, 4, 0, 120)
  288.       draw_cr(25,8,actor.tp,actor.maxtp,"TP")
  289.     end
  290.   end
  291. end
复制代码
@orzfly额,注释。。。。。。RTAB原本的注释也被我去掉了。不过我是去掉之后才看到你说的话
以上系统兼容RTAB1.07整合大量特效豪华版。请把这脚本放在XRXS38. 属性修正计算数限制的下面,XRXS19. 特殊効果詰め合わせ DamageEX ver.2的上面
以上RTAB版已经修正显示TP。一定要使用RTAB1.07整合大量特效豪华版,不兼容原版RTAB.注意如果希望敌人也能发动TP技能,一定要加一个概率1的不行动选项。否则有可能出错。。。。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1