Project1

标题: 升级时自动回复的HP、MP如何取整? [打印本页]

作者: 姬文翔    时间: 2008-3-15 21:57
标题: 升级时自动回复的HP、MP如何取整?
我现在用的脚本基于经典的升级提示脚本。改为5人制+一定条件下经验翻倍+升级后自动回复部分HP、MP。但是我不想是完全回复,只想回复一半。现在当MaxHP为单数时升级回复后就会出现小数。为了美观我想在出现小数的情况下四舍五入取整。请教各位这应该怎么弄呢?

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


  4. # ————————————————————————————————————

  5. # ▼▲▼ XRXS_BP10. LEVEL UP!能力上昇表示ウィンドウ plus ▼▲▼
  6. # by 桜雅 在土

  7. #——以下3个如果需要修改,直接输入文件名即可
  8. $data_system_level_up_se = "Audio/SE/LEVELUP" #升级时的音效设置
  9. $data_system_level_up_me = "" # 升级时播放的ME
  10. $data_system_skilllearn_se = "Audio/SE/106-Heal02" # 学会特技时播放的声效。
  11. $data_system_双倍经验开关号 = 70 # TODO: 请调整开关号。

  12. #==============================================================================
  13. # ■ Window_LevelUpWindow
  14. #------------------------------------------------------------------------------
  15. #  バトル終了時、レベルアップした場合にステータスを表示するウィンドウです。
  16. #==============================================================================
  17. class Window_LevelUpWindow < Window_Base
  18.   #--------------------------------------------------------------------------
  19.   # ● オブジェクト初期化
  20.   #--------------------------------------------------------------------------
  21.   def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  22.     super(0, 128, 160, 192)
  23.     self.contents = Bitmap.new(width - 32, height - 32)
  24.     self.visible = false
  25.     self.back_opacity = 160
  26.     refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● リフレッシュ
  30.   #--------------------------------------------------------------------------
  31.   def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  32.     self.contents.clear
  33.     self.contents.font.color = system_color
  34.     self.contents.font.size = 14
  35.     self.contents.draw_text( 0, 0, 160, 24, "等级上升!")
  36.     self.contents.font.size = 18
  37.     self.contents.draw_text( 0, 28, 160, 24, $data_system.words.hp)
  38.     self.contents.draw_text( 0, 50, 160, 24, $data_system.words.sp)
  39.     self.contents.font.size = 14
  40.     self.contents.draw_text( 0, 72, 80, 24, $data_system.words.str)
  41.     self.contents.draw_text( 0, 94, 80, 24, $data_system.words.dex)
  42.     self.contents.draw_text( 0, 116, 80, 24, $data_system.words.agi)
  43.     self.contents.draw_text( 0, 138, 80, 24, $data_system.words.int)
  44.     self.contents.draw_text(92, 0, 128, 24, "→")
  45.     self.contents.draw_text(76, 28, 128, 24, "=")
  46.     self.contents.draw_text(76, 50, 128, 24, "=")
  47.     self.contents.draw_text(76, 72, 128, 24, "=")
  48.     self.contents.draw_text(76, 94, 128, 24, "=")
  49.     self.contents.draw_text(76, 116, 128, 24, "=")
  50.     self.contents.draw_text(76, 138, 128, 24, "=")
  51.     self.contents.font.color = normal_color
  52.     self.contents.draw_text( 0, 0, 88, 24, last_lv.to_s, 2)
  53.     self.contents.draw_text( 0, 28, 72, 24, "+" + up_hp.to_s, 2)
  54.     self.contents.draw_text( 0, 50, 72, 24, "+" + up_sp.to_s, 2)
  55.     self.contents.draw_text( 0, 72, 72, 24, "+" + up_str.to_s, 2)
  56.     self.contents.draw_text( 0, 94, 72, 24, "+" + up_dex.to_s, 2)
  57.     self.contents.draw_text( 0, 116, 72, 24, "+" + up_agi.to_s, 2)
  58.     self.contents.draw_text( 0, 138, 72, 24, "+" + up_int.to_s, 2)
  59.     self.contents.font.size = 20
  60.     self.contents.draw_text( 0, 0, 128, 24, actor.level.to_s, 2)
  61.     self.contents.draw_text( 0, 26, 128, 24, actor.maxhp.to_s, 2)
  62.     self.contents.draw_text( 0, 48, 128, 24, actor.maxsp.to_s, 2)
  63.     self.contents.draw_text( 0, 70, 128, 24, actor.str.to_s, 2)
  64.     self.contents.draw_text( 0, 92, 128, 24, actor.dex.to_s, 2)
  65.     self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2)
  66.     self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2)
  67.   end
  68. end
  69. #==============================================================================
  70. # ■ Window_SkillLearning
  71. #------------------------------------------------------------------------------
  72. #  レベルアップ時などにスキルを習得した場合にそれを表示するウィンドウです。
  73. #==============================================================================
  74. class Window_SkillLearning < Window_Base
  75.   #--------------------------------------------------------------------------
  76.   # ● 公開インスタンス変数
  77.   #--------------------------------------------------------------------------
  78.   attr_reader :learned # スキルを習得したかどうか
  79.   #--------------------------------------------------------------------------
  80.   # ● オブジェクト初期化
  81.   #--------------------------------------------------------------------------
  82.   def initialize(class_id, last_lv, now_lv)
  83.     super(160, 64, 320, 64)
  84.     self.contents = Bitmap.new(width - 32, height - 28) # わざと▽を表示
  85.     self.visible = false
  86.     self.back_opacity = 160
  87.     @learned = false
  88.     refresh(class_id, last_lv, now_lv)
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● リフレッシュ
  92.   #--------------------------------------------------------------------------
  93.   def refresh(class_id, last_lv, now_lv)
  94.     for i in 0...$data_classes[class_id].learnings.size
  95.       learn_lv = $data_classes[class_id].learnings[i].level
  96.       # 今回のレベルアップ範囲で習得するスキルの場合
  97.       if learn_lv > last_lv and learn_lv <= now_lv
  98.         @learned = true
  99.         # SEの再生
  100.         if $data_system_skilllearn_se != ""
  101.           Audio.se_play($data_system_skilllearn_se)
  102.         end
  103.         # 各描写
  104.         skill_name = $data_skills[$data_classes[class_id].learnings[i].skill_id].name
  105.         self.contents.clear
  106.         self.contents.font.color = text_color(0)
  107.         self.contents.draw_text(0,0,448,32, "习得绝技:"+skill_name)
  108.         self.contents.font.color = text_color(6)
  109.         self.contents.draw_text(0,0,448,32, "          "+skill_name)
  110.         self.contents.font.color = text_color(0)
  111.         self.visible = true
  112.         # メインループ
  113.         loop do
  114.           # ゲーム画面を更新
  115.           Graphics.update
  116.           # 入力情報を更新
  117.           Input.update
  118.           # フレーム更新
  119.           update
  120.           # 画面が切り替わったらループを中断
  121.           if @learned == false
  122.             break
  123.           end
  124.         end
  125.       # メインループここまで
  126.       end
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● フレーム更新
  131.   #--------------------------------------------------------------------------
  132.   def update
  133.     # C ボタンが押された場合
  134.     if Input.trigger?(Input::C)
  135.       @learned = false
  136.       self.visible = false
  137.     end
  138.   end
  139. end
  140. #==============================================================================
  141. # ■ Window_BattleStatus
  142. #==============================================================================
  143. class Window_BattleStatus < Window_Base
  144.   #--------------------------------------------------------------------------
  145.   # ● 追加?公開インスタンス変数
  146.   #--------------------------------------------------------------------------
  147.   attr_accessor :level_up_flags # LEVEL UP!表示
  148. end
  149. #==============================================================================
  150. # ■ Game_Battler
  151. #==============================================================================
  152. class Game_Battler
  153.   #--------------------------------------------------------------------------
  154.   # ● 追加?公開インスタンス変数
  155.   #--------------------------------------------------------------------------
  156.   attr_accessor :exp_gain_ban # EXP取得一時禁止
  157.   #--------------------------------------------------------------------------
  158.   # ● オブジェクト初期化
  159.   #--------------------------------------------------------------------------
  160.   alias xrxs_bp10_initialize initialize
  161.   def initialize
  162.     @exp_gain_ban = false
  163.     xrxs_bp10_initialize
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● ステート [EXP を獲得できない] 判定
  167.   #--------------------------------------------------------------------------
  168.   alias xrxs_bp10_cant_get_exp? cant_get_exp?
  169.   def cant_get_exp?
  170.     if @exp_gain_ban == true
  171.       return true
  172.     else
  173.       return xrxs_bp10_cant_get_exp?
  174.     end
  175.   end
  176. end
  177. #==============================================================================
  178. # ■ Scene_Battle
  179. #==============================================================================
  180. class Scene_Battle
  181.   #--------------------------------------------------------------------------
  182.   # ● アフターバトルフェーズ開始
  183.   #--------------------------------------------------------------------------
  184.   alias xrxs_bp10_start_phase5 start_phase5
  185.   def start_phase5
  186.     # EXP 獲得禁止
  187.     for i in 0...$game_party.actors.size
  188.       $game_party.actors[i].exp_gain_ban = true
  189.     end
  190.     xrxs_bp10_start_phase5
  191.     # EXP 獲得禁止の解除
  192.     for i in 0...$game_party.actors.size
  193.       $game_party.actors[i].exp_gain_ban = false
  194.     end
  195.     # EXPを初期化
  196.     @exp_gained = 0
  197.     for enemy in $game_troop.enemies
  198.       # 獲得 EXPを追加 # エネミーが隠れ状態でない場合
  199.       if $game_switches[$data_system_双倍经验开关号] == true
  200.         @exp_gained += enemy.exp*2 if not enemy.hidden
  201.       else
  202.         @exp_gained += enemy.exp if not enemy.hidden
  203.       end
  204.     end
  205.     # 設定
  206.     @phase5_step = 1
  207.     @exp_gain_actor = -1
  208.     # リザルトウィンドウを表示
  209.     @result_window.visible = true
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● フレーム更新 (アフターバトルフェーズ)
  213.   #--------------------------------------------------------------------------
  214.   #alias xrxs_bp10_update_phase5 update_phase5
  215.   def update_phase5
  216.     case @phase5_step
  217.     when 1
  218.       update_phase5_step1
  219.     else
  220.     # ウェイトカウントが 0 より大きい場合
  221.       if @phase5_wait_count > 0
  222.         # ウェイトカウントを減らす
  223.         @phase5_wait_count -= 1
  224.         # ウェイトカウントが 0 になった場合
  225.         if @phase5_wait_count == 0
  226.           # リザルトウィンドウを表示
  227.           #@result_window.visible = true
  228.           # メインフェーズフラグをクリア
  229.           $game_temp.battle_main_phase = false
  230.           # ステータスウィンドウをリフレッシュ
  231.           @status_window.refresh
  232.         end
  233.       return
  234.       end
  235.       # C ボタンが押された場合
  236.       if Input.trigger?(Input::C)
  237.         # バトル終了
  238.         battle_end(0)
  239.       end
  240.     # レベルアップしている場合は強制バトル終了
  241.     battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0
  242.     end
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● フレーム更新 (アフターバトルフェーズ 1 : レベルアップ)
  246.   #--------------------------------------------------------------------------
  247.   def update_phase5_step1
  248.     # C ボタンが押された場合
  249.     if Input.trigger?(Input::C)
  250.       # ウィンドウを閉じて次のアクターへ
  251.       @levelup_window.visible = false if @levelup_window != nil
  252.       @status_window.level_up_flags[@exp_gain_actor] = false
  253.       phase5_next_levelup
  254.     end
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● 次のアクターのレベルアップ表示へ
  258.   #--------------------------------------------------------------------------
  259.   def phase5_next_levelup
  260.     begin
  261.       # 次のアクターへ
  262.       @exp_gain_actor += 1
  263.       # 最後のアクターの場合
  264.       if @exp_gain_actor >= $game_party.actors.size
  265.         # アフターバトルフェーズ開始
  266.         @phase5_step = 0
  267.         return
  268.       end
  269.       actor = $game_party.actors[@exp_gain_actor]
  270.       if actor.cant_get_exp? == false
  271.         # 現在の能力値を保持
  272.         last_level = actor.level
  273.         last_maxhp = actor.maxhp
  274.         last_maxsp = actor.maxsp
  275.         last_str = actor.str
  276.         last_dex = actor.dex
  277.         last_agi = actor.agi
  278.         last_int = actor.int
  279.         # 経験値取得の決定的瞬間(謎
  280.         actor.exp += @exp_gained
  281.         # 判定
  282.         if actor.level > last_level
  283.           actor.hp += actor.maxhp*0.5;          actor.sp += actor.maxsp*0.5
  284.           # レベルアップした場合
  285.           @status_window.level_up(@exp_gain_actor)
  286.           # リザルトウィンドウを消す
  287.           @result_window.visible = false
  288.           # SEの再生
  289.           if $data_system_level_up_se != ""
  290.             Audio.se_play($data_system_level_up_se)
  291.           end
  292.           # MEの再生
  293.           if $data_system_level_up_me != ""
  294.             Audio.me_stop
  295.             Audio.me_play($data_system_level_up_me)
  296.           end
  297.           # LEVEL-UPウィンドウの設定
  298.           @levelup_window = Window_LevelUpWindow.new(actor, last_level,
  299.           actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str,
  300.           actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int)
  301.           @levelup_window.x = 120 * @exp_gain_actor
  302.           @levelup_window.visible = true
  303.           # ステータスウィンドウをリフレッシュ
  304.           @status_window.refresh
  305.           # スキル習得ウィンドウの設定
  306.           @skilllearning_window = Window_SkillLearning.new(actor.class_id, last_level, actor.level)
  307.           # ウェイトカウントを設定
  308.           @phase5_wait_count = 40
  309.           @phase5_step = 1
  310.           return
  311.         end
  312.       end
  313.     end until false
  314.   end
  315. end


  316. #==============================================================================
  317. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  318. #==============================================================================
复制代码
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 禾西    时间: 2008-3-15 22:00
在後面加上
.round
就OK了

p 100.98412.round #=> 101

作者: 此ID只用一次    时间: 2008-3-15 22:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: 姬文翔    时间: 2008-3-15 23:00
谢谢两位。解决了{/wx}




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