Project1

标题: 打架时候怎么把上面的逃跑去掉,并且+到菜单栏里? [打印本页]

作者: dlhCloud    时间: 2008-9-21 00:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2008-9-21 00:24
http://rpg.blue/web/htm/news328.htm
作者: 浩气青天    时间: 2008-9-21 00:45

楼主认可答案吧~~~~{/fd}
作者: 殲滅天使·玲    时间: 2008-9-21 01:00
加入选单
http://rpg.blue/htm/Topic_40619.htm

作者: 黑鏻    时间: 2008-9-21 01:09
把以下脚本替换掉Scene_Battle 2的内容
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 2)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 开始自由战斗回合
  9.   #--------------------------------------------------------------------------
  10.   def start_phase1
  11.     # 转移到回合 1
  12.     @phase = 1
  13.     # 清除全体同伴的行动
  14.     $game_party.clear_actions
  15.     # 设置战斗事件
  16.     setup_battle_event
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 刷新画面 (自由战斗回合)
  20.   #--------------------------------------------------------------------------
  21.   def update_phase1
  22.     # 胜败判定
  23.     if judge
  24.       # 胜利或者失败的情况下 : 过程结束
  25.       return
  26.     end
  27.     # 开始同伴命令回合
  28.     start_phase2
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 开始同伴命令回合
  32.   #--------------------------------------------------------------------------
  33.   def start_phase2
  34.     # 转移到回合 2
  35.     @phase = 2
  36.     # 设置角色为非选择状态
  37.     @actor_index = -1
  38.     @active_battler = nil
  39.     # 有效化同伴指令窗口
  40.   ###########################################################################
  41.     @party_command_window.active = false
  42.     @party_command_window.visible = false
  43.   ###########################################################################
  44.     # 无效化角色指令窗口
  45.     @actor_command_window.active = false
  46.     @actor_command_window.visible = false
  47.     # 清除主回合标志
  48.     $game_temp.battle_main_phase = false
  49.     # 清除全体同伴的行动
  50.     $game_party.clear_actions
  51.     # 不能输入命令的情况下
  52.     unless $game_party.inputable?
  53.       # 开始主回合
  54.       start_phase4
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 刷新画面 (同伴命令回合)
  59.   #--------------------------------------------------------------------------
  60.   def update_phase2
  61.     # 按下 C 键的情况下
  62.     #if Input.trigger?(Input::C)
  63.       # 同伴指令窗口光标位置分支
  64.       #case @party_command_window.index
  65.      # when 0  # 战斗
  66.         # 演奏确定 SE
  67.        # $game_system.se_play($data_system.decision_se)
  68.         # 开始角色的命令回合
  69.         #####################################################################
  70.         start_phase3                                    #只有这个是需要留下的
  71.         #####################################################################
  72.       #when 1  # 逃跑
  73.         # 不能逃跑的情况下
  74.        # if $game_temp.battle_can_escape == false
  75.           # 演奏冻结 SE
  76.           #$game_system.se_play($data_system.buzzer_se)
  77.           #return
  78.         #end
  79.         # 演奏确定 SE
  80.         #$game_system.se_play($data_system.decision_se)
  81.         # 逃走处理
  82.         #update_phase2_escape
  83.       #end
  84.       #return
  85.    # end
  86.    end
  87.   #--------------------------------------------------------------------------
  88.   # ● 画面更新 (同伴指令回合 : 逃跑)
  89.   #--------------------------------------------------------------------------
  90.   def update_phase2_escape
  91.     # 计算敌人速度的平均值
  92.     enemies_agi = 0
  93.     enemies_number = 0
  94.     for enemy in $game_troop.enemies
  95.       if enemy.exist?
  96.         enemies_agi += enemy.agi
  97.         enemies_number += 1
  98.       end
  99.     end
  100.     if enemies_number > 0
  101.       enemies_agi /= enemies_number
  102.     end
  103.     # 计算角色速度的平均值
  104.     actors_agi = 0
  105.     actors_number = 0
  106.     for actor in $game_party.actors
  107.       if actor.exist?
  108.         actors_agi += actor.agi
  109.         actors_number += 1
  110.       end
  111.     end
  112.     if actors_number > 0
  113.       actors_agi /= actors_number
  114.     end
  115.     # 逃跑成功判定
  116.     success = rand(100) < 50 * actors_agi / enemies_agi
  117.     # 成功逃跑的情况下
  118.     if success
  119.       # 演奏逃跑 SE
  120.       $game_system.se_play($data_system.escape_se)
  121.       # 还原为战斗开始前的 BGM
  122.       $game_system.bgm_play($game_temp.map_bgm)
  123.       # 战斗结束
  124.       battle_end(1)
  125.     # 逃跑失败的情况下
  126.     else
  127.       # 清除全体同伴的行动
  128.       $game_party.clear_actions
  129.       # 开始主回合
  130.       start_phase4
  131.     end
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 开始结束战斗回合
  135.   #--------------------------------------------------------------------------
  136.   def start_phase5
  137.     # 转移到回合 5
  138.     @phase = 5
  139.     # 演奏战斗结束 ME
  140.     $game_system.me_play($game_system.battle_end_me)
  141.     # 还原为战斗开始前的 BGM
  142.     $game_system.bgm_play($game_temp.map_bgm)
  143.     # 初始化 EXP、金钱、宝物
  144.     exp = 0
  145.     gold = 0
  146.     treasures = []
  147.     # 循环
  148.     for enemy in $game_troop.enemies
  149.       # 敌人不是隐藏状态的情况下
  150.       unless enemy.hidden
  151.         # 获得 EXP、增加金钱
  152.         exp += enemy.exp
  153.         gold += enemy.gold
  154.         # 出现宝物判定
  155.         if rand(100) < enemy.treasure_prob
  156.           if enemy.item_id > 0
  157.             treasures.push($data_items[enemy.item_id])
  158.           end
  159.           if enemy.weapon_id > 0
  160.             treasures.push($data_weapons[enemy.weapon_id])
  161.           end
  162.           if enemy.armor_id > 0
  163.             treasures.push($data_armors[enemy.armor_id])
  164.           end
  165.         end
  166.       end
  167.     end
  168.     # 限制宝物数为 6 个
  169.     treasures = treasures[0..5]
  170.     # 获得 EXP
  171.     for i in 0...$game_party.actors.size
  172.       actor = $game_party.actors[i]
  173.       if actor.cant_get_exp? == false
  174.         last_level = actor.level
  175.         actor.exp += exp
  176.         if actor.level > last_level
  177.           @status_window.level_up(i)
  178.         end
  179.       end
  180.     end
  181.     # 获得金钱
  182.     $game_party.gain_gold(gold)
  183.     # 获得宝物
  184.     for item in treasures
  185.       case item
  186.       when RPG::Item
  187.         $game_party.gain_item(item.id, 1)
  188.       when RPG::Weapon
  189.         $game_party.gain_weapon(item.id, 1)
  190.       when RPG::Armor
  191.         $game_party.gain_armor(item.id, 1)
  192.       end
  193.     end
  194.     # 生成战斗结果窗口
  195.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  196.     # 设置等待计数
  197.     @phase5_wait_count = 100
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 画面更新 (结束战斗回合)
  201.   #--------------------------------------------------------------------------
  202.   def update_phase5
  203.     # 等待计数大于 0 的情况下
  204.     if @phase5_wait_count > 0
  205.       # 减少等待计数
  206.       @phase5_wait_count -= 1
  207.       # 等待计数为 0 的情况下
  208.       if @phase5_wait_count == 0
  209.         # 显示结果窗口
  210.         @result_window.visible = true
  211.         # 清除主回合标志
  212.         $game_temp.battle_main_phase = false
  213.         # 刷新状态窗口
  214.         @status_window.refresh
  215.       end
  216.       return
  217.     end
  218.     # 按下 C 键的情况下
  219.     if Input.trigger?(Input::C)
  220.       # 战斗结束
  221.       battle_end(0)
  222.     end
  223.   end
  224.   end
复制代码


然后在Main之前插入下面这段脚本,里面包括“攻击、特技、防守、物品、装备、逃跑”6个选项,可以任君删改,当然我已经改好了~~
  1. #==============================================================================
  2. # 可直接添在 Scene_Battle (分割定义 3)下,或者在Main之前插入
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。下面部分日语有翻译。
  5. #==============================================================================
  6. class Scene_Battle
  7. #--------------------------------------------------------------------------
  8. # ● メイン處理
  9. #--------------------------------------------------------------------------
  10. def main
  11. # 戰鬥用の各種一時データを初期化
  12. $game_temp.in_battle = true
  13. $game_temp.battle_turn = 0
  14. $game_temp.battle_event_flags.clear
  15. $game_temp.battle_abort = false
  16. $game_temp.battle_main_phase = false
  17. $game_temp.battleback_name = $game_map.battleback_name
  18. $game_temp.forcing_battler = nil
  19. # バトルイベント用インタプリタを初期化
  20. $game_system.battle_interpreter.setup(nil, 0)
  21. # トループを準備
  22. @troop_id = $game_temp.battle_troop_id
  23. $game_troop.setup(@troop_id)
  24. # アクターコマンドウィンドウを作成
  25. s1 = $data_system.words.attack
  26. s2 = $data_system.words.skill
  27. s3 = $data_system.words.guard
  28. s4 = $data_system.words.item
  29. #s4= $data_system.words.equip #装备
  30. @actor_command_window = Window_Command.new(150, [s1, s2, s3, s4, "逃跑"])
  31. #@actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  32. @actor_command_window.y =150
  33. @actor_command_window.back_opacity = 160
  34. @actor_command_window.active = false
  35. @actor_command_window.visible = false
  36. # その他のウィンドウを作成
  37. @party_command_window = Window_PartyCommand.new
  38. @help_window = Window_Help.new
  39. @help_window.back_opacity = 160
  40. @help_window.visible = false
  41. @status_window = Window_BattleStatus.new
  42. @message_window = Window_Message.new
  43. # スプライトセットを作成
  44. @spriteset = Spriteset_Battle.new
  45. # ウェイトカウントを初期化
  46. @wait_count = 0
  47. # トランジション实行
  48. if $data_system.battle_transition == ""
  49. Graphics.transition(20)
  50. else
  51. Graphics.transition(40, "Graphics/Transitions/" +
  52. $data_system.battle_transition)
  53. end
  54. # プレバトルフェーズ开始
  55. start_phase1
  56. # メインループ
  57. loop do
  58. # ゲーム畫面を更新
  59. Graphics.update
  60. # 入力情報を更新
  61. Input.update
  62. # フレーム更新
  63. update
  64. # 畫面が切り替わったらループを中斷
  65. if $scene != self
  66. break
  67. end
  68. end
  69. # マップをリフレッシュ
  70. $game_map.refresh
  71. # トランジション準備
  72. Graphics.freeze
  73. # ウィンドウを解放
  74. @actor_command_window.dispose
  75. @party_command_window.dispose
  76. @help_window.dispose
  77. @status_window.dispose
  78. @message_window.dispose
  79. if @skill_window != nil
  80. @skill_window.dispose
  81. end
  82. if @item_window != nil
  83. @item_window.dispose
  84. end
  85. if @result_window != nil
  86. @result_window.dispose
  87. end
  88. # スプライトセットを解放
  89. @spriteset.dispose
  90. # タイトル畫面に切り替え中の場合
  91. if $scene.is_a?(Scene_Title)
  92. # 畫面をフェードアウト
  93. Graphics.transition
  94. Graphics.freeze
  95. end
  96. # 戰鬥テストからゲームオーバー畫面以外に切り替え中の場合
  97. if $BTEST and not $scene.is_a?(Scene_Gameover)
  98. $scene = nil
  99. end
  100. end

  101. #--------------------------------------------------------------------------
  102. # ● 刷新画面 (角色命令回合) [フレーム更新 (アクターコマンドフェーズ)]
  103. #--------------------------------------------------------------------------
  104. def update_phase3
  105. # 敌人光标有效的情况下 [エネミーアローが有效の場合]
  106. if @enemy_arrow != nil
  107. update_phase3_enemy_select
  108. # 角色光标有效的情况下 [アクターアローが有效の場合]
  109. elsif @actor_arrow != nil
  110. update_phase3_actor_select
  111. # 特技窗口有效的情况下 [スキルウィンドウが有效の場合]
  112. elsif @skill_window != nil
  113. update_phase3_skill_select
  114. # 物品窗口有效的情况下 [アイテムウィンドウが有效の場合]
  115. elsif @item_window != nil
  116. update_phase3_item_select
  117. # ★追加 装备变更有效的情况下  [裝備變更ウィンドウが有效の場合]
  118. elsif @right_window != nil
  119. update_phase3_equip_select
  120. # 角色指令窗口有效的情况下 [アクターコマンドウィンドウが有效の場合]
  121. elsif @actor_command_window.active
  122. update_phase3_basic_command
  123. end
  124. end
  125. #--------------------------------------------------------------------------
  126. # ● 刷新画面 (角色命令回合 : 基本命令) [フレーム更新 (アクターコマンドフェーズ : 基本コマンド)]
  127. #--------------------------------------------------------------------------
  128. def update_phase3_basic_command
  129. # 按下 B 键的情况下 [B ボタンが押された場合]
  130. if Input.trigger?(Input::B)
  131. # 演奏取消 SE [キャンセル SE を演奏]
  132. $game_system.se_play($data_system.cancel_se)
  133. # 转向前一个角色的指令输入 [前のアクターのコマンド入力へ]
  134. phase3_prior_actor
  135. return
  136. end
  137. # 按下 C 键的情况下 [C ボタンが押された場合]
  138. if Input.trigger?(Input::C)
  139. # 角色指令窗口光标位置分之 [アクターコマンドウィンドウのカーソル位置で分岐]
  140. case @actor_command_window.index
  141. when 0 # 攻击 [攻擊]
  142. # 演奏确定 SE [決定 SE を演奏]
  143. $game_system.se_play($data_system.decision_se)
  144. # 设置行动 [アクションを設定]
  145. @active_battler.current_action.kind = 0
  146. @active_battler.current_action.basic = 0
  147. # 开始选择敌人 [エネミーの選擇を開始]
  148. start_enemy_select
  149. when 1 # 特技 [スキル]
  150. # 演奏确定 SE [決定 SE を演奏]
  151. $game_system.se_play($data_system.decision_se)
  152. # 设置行动 [アクションを設定]
  153. @active_battler.current_action.kind = 1
  154. # 开始选择特技 [スキルの選擇を開始]
  155. start_skill_select
  156. when 2 # 防御 [防禦]
  157. # 演奏确定 SE [決定 SE を演奏]
  158. $game_system.se_play($data_system.decision_se)
  159. # 设置行动 [アクションを設定]
  160. @active_battler.current_action.kind = 0
  161. @active_battler.current_action.basic = 1
  162. # 转向下一位角色的指令输入 [次のアクターのコマンド入力へ]
  163. phase3_next_actor
  164. when 3# 物品 [アイテム]
  165. # 演奏确定 SE [決定 SE を演奏]
  166. $game_system.se_play($data_system.decision_se)
  167. # 设置行动 [アクションを設定]
  168. @active_battler.current_action.kind = 2
  169. # 开始选择物品 [アイテムの選擇を開始]
  170. start_item_select
  171. =begin
  172. when 3 # 装备 [裝備]
  173. # 演奏确定 SE [決定 SE を演奏]
  174. $game_system.se_play($data_system.decision_se)
  175. # 设置行动 [アクションを設定]
  176. @active_battler.current_action.kind = 0
  177. # 选择开始 [アイテムの選擇を開始]
  178. start_equip_select
  179. =end
  180. when 4
  181.   if $game_temp.battle_can_escape == false
  182.           # 演奏冻结 SE
  183.           $game_system.se_play($data_system.buzzer_se)
  184.           return
  185.         end
  186.         # 演奏确定 SE
  187.         $game_system.se_play($data_system.decision_se)
  188.         # 逃走处理
  189.   update_phase2_escape
  190. end
  191. return
  192. end
  193. end
  194. #--------------------------------------------------------------------------
  195. # ★● 追加 フレーム更新 (アクターコマンドフェーズ : 變更裝備選擇)
  196. #--------------------------------------------------------------------------
  197. def update_phase3_equip_select
  198. # スキルウィンドウを可視狀態にする
  199. @right_window.visible = true

  200. # ウィンドウを更新
  201. @right_window.update
  202. if @right_window.index != @now_right_window
  203. @now_right_window =@right_window.index
  204. if @equip_item_window.index == -1
  205. @equip_item_window.index = 0
  206. @equip_item_window.refresh
  207. @equip_item_window.index = -1
  208. end
  209. end
  210. @equip_item_window.update
  211. equip_item_window_select

  212. # アイテムウィンドウがアクティブの場合
  213. if @equip_item_window.active
  214. update_phase3_equip_i_select
  215. return
  216. end

  217. # B ボタンが押された場合
  218. if Input.trigger?(Input::B)
  219. # キャンセル SE を演奏
  220. $game_system.se_play($data_system.cancel_se)
  221. # 裝備選擇を終了
  222. end_equip_select
  223. return
  224. end
  225. # C ボタンが押された場合
  226. if Input.trigger?(Input::C)
  227. # 裝備固定の場合
  228. if @active_battler.equip_fix?(@right_window.index)
  229. # ブザー SE を演奏
  230. $game_system.se_play($data_system.buzzer_se)
  231. return
  232. end
  233. # 決定 SE を演奏
  234. $game_system.se_play($data_system.decision_se)
  235. # アイテムウィンドウをアクティブ化
  236. @right_window.active = false
  237. @equip_item_window.active = true
  238. @equip_item_window.index = 0
  239. @now_right_window = -1
  240. return
  241. end
  242. end
  243. #--------------------------------------------------------------------------
  244. # ★● 追加 フレーム更新 (アクターコマンドフェーズ : 裝備アイテム選擇)
  245. #--------------------------------------------------------------------------
  246. def update_phase3_equip_i_select
  247. item1 = @right_window.item
  248. item2 = @equip_item_window.item
  249. last_hp = @active_battler.hp
  250. last_sp = @active_battler.sp
  251. @active_battler.equip(@right_window.index, item2 == nil ? 0 : item2.id)
  252. new_atk = @active_battler.atk
  253. new_pdef = @active_battler.pdef
  254. new_mdef = @active_battler.mdef
  255. @active_battler.equip(@right_window.index, item1 == nil ? 0 : item1.id)
  256. @active_battler.hp = last_hp
  257. @active_battler.sp = last_sp
  258. @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
  259. # B ボタンが押された場合
  260. if Input.trigger?(Input::B)
  261. # キャンセル SE を演奏
  262. $game_system.se_play($data_system.cancel_se)
  263. # 裝備アイテム選擇を終了
  264. @now_item_window = -1

  265. @right_window.active = true
  266. @equip_item_window.active = false
  267. @equip_item_window.index = -1
  268. return
  269. end
  270. # C ボタンが押された場合
  271. if Input.trigger?(Input::C)
  272. $game_system.se_play($data_system.equip_se)
  273. # アイテムウィンドウで現在選擇されているデータを取得
  274. item = @equip_item_window.item
  275. # 裝備を變更
  276. @active_battler.equip(@right_window.index, item == nil ? 0 : item.id)
  277. # ライトウィンドウをアクティブ化
  278. @right_window.active = true
  279. @equip_item_window.active = false
  280. @equip_item_window.index = -1
  281. # ライトウィンドウ、アイテムウィンドウの內容を再作成
  282. @right_window.refresh
  283. @equip_item_window.refresh
  284. @left_window.refresh
  285. return
  286. end
  287. end
  288. #--------------------------------------------------------------------------
  289. # ★● 追加 裝備選擇開始
  290. #--------------------------------------------------------------------------
  291. def start_equip_select
  292. # 裝備ウィンドウを作成
  293. #パラメータを呼び出したい時は註釋消す
  294. @left_window = Window_EquipLeft.new(@active_battler)
  295. @right_window = Window_EquipRight.new(@active_battler)
  296. @item_window1 = Window_EquipItem.new(@active_battler, 0)
  297. @item_window2 = Window_EquipItem.new(@active_battler, 1)
  298. @item_window3 = Window_EquipItem.new(@active_battler, 2)
  299. @item_window4 = Window_EquipItem.new(@active_battler, 3)
  300. @item_window5 = Window_EquipItem.new(@active_battler, 4)
  301. @item_window1.z = 9999
  302. @item_window2.z = 9999
  303. @item_window3.z = 9999
  304. @item_window4.z = 9999
  305. @item_window5.z = 9999
  306. # ヘルプウィンドウを關連付け
  307. @right_window.help_window = @help_window
  308. @item_window1.help_window = @help_window
  309. @item_window2.help_window = @help_window
  310. @item_window3.help_window = @help_window
  311. @item_window4.help_window = @help_window
  312. @item_window5.help_window = @help_window

  313. @now_right_window = -1
  314. @right_window.index = 0
  315. equip_item_window_select
  316. # アクターコマンドウィンドウを無效化
  317. @actor_command_window.active = false
  318. @actor_command_window.visible = false
  319. end
  320. #--------------------------------------------------------------------------
  321. # ★● 追加 裝備選擇終了
  322. #--------------------------------------------------------------------------
  323. def end_equip_select
  324. # アイテムウィンドウを解放
  325. #パラメータを呼び出したい時は註釋消す
  326. @left_window.dispose
  327. @right_window.dispose
  328. @item_window1.dispose
  329. @item_window2.dispose
  330. @item_window3.dispose
  331. @item_window4.dispose
  332. @item_window5.dispose
  333. @right_window= nil
  334. @item_window1= nil
  335. @item_window2= nil
  336. @item_window3= nil
  337. @item_window4= nil
  338. @item_window5= nil
  339. # ヘルプウィンドウを隱す
  340. @help_window.visible = false
  341. # アクターコマンドウィンドウを有效化
  342. @actor_command_window.active = true
  343. @actor_command_window.visible = true
  344. end
  345. #--------------------------------------------------------------------------
  346. # ★● 追加 裝備アイテムウインドウのチェック
  347. #--------------------------------------------------------------------------
  348. def equip_item_window_select
  349.   @left_window.set_new_parameters(nil, nil, nil)
  350. # アイテムウィンドウの可視狀態設定
  351. @item_window1.visible = (@right_window.index == 0)
  352. @item_window2.visible = (@right_window.index == 1)
  353. @item_window3.visible = (@right_window.index == 2)
  354. @item_window4.visible = (@right_window.index == 3)
  355. @item_window5.visible = (@right_window.index == 4)
  356. # ーーー★追加(註釋消すとアクセサリ1つ增加)
  357. @item_window5.visible = (@right_window.index == 4) || (@right_window.index == 5)
  358. # ーーー終わり
  359. # 現在のアイテムウィンドウを @item_window に設定
  360. case @right_window.index
  361. when 0
  362. @equip_item_window = @item_window1
  363. when 1
  364. @equip_item_window = @item_window2
  365. when 2
  366. @equip_item_window = @item_window3
  367. when 3
  368. @equip_item_window = @item_window4
  369. when 4
  370. @equip_item_window = @item_window5
  371. # ーーー★追加(註釋消すとアクセサリ1つ增加)
  372. when 5
  373. @equip_item_window = @item_window5
  374. when 6
  375.   if $game_temp.battle_can_escape == false
  376.           # 演奏冻结 SE
  377.           $game_system.se_play($data_system.buzzer_se)
  378.           return
  379.         end
  380.         # 演奏确定 SE
  381.         $game_system.se_play($data_system.decision_se)
  382.         # 逃走处理
  383.   update_phase2_escape
  384. end
  385. end
  386. end
  387. #==============================================================================
  388. #此脚本来自网上,有过修改
  389. #==============================================================================
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~




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