Project1

标题: 仿黃金太陽跳格子 [打印本页]

作者: 雪流星    时间: 2010-12-20 21:26
标题: 仿黃金太陽跳格子
本帖最后由 雪流星 于 2012-2-25 15:07 编辑

更新日誌︰
  1. class Game_Map
  2.   def get_tile_id(x, y)
  3.     a = data[x, y, 0]
  4.     return 0 unless a
  5.     a-=2000
  6.     map_tile_id_0 = (a >= 0) ? a/48 : (a+593)
  7.     map_tile_id_1 = (data[x, y, 1]-2000) / 48
  8.     map_tile_id_2 = (data[x, y, 2])
  9.          
  10.     map_tile_id_0 = 0 if map_tile_id_0 == -42 # A
  11.     map_tile_id_1 = 0 if map_tile_id_1 == -42 # I
  12.     map_tile_id_2 = 0 if map_tile_id_2 == -42 # B~E
  13.    
  14.     # 图块 ID 矫正
  15.     map_tile_id_0 = map_tile_id_1 if map_tile_id_1 > 0
  16.     unless @events.nil?
  17.       for event in @events.values
  18.         if event.pos?(x, y) and event.tile_id > 0
  19.           # 若是事件使用地图元件,使用该地图元件的ID
  20.           map_tile_id_2 = event.tile_id
  21.         end
  22.       end
  23.     end
  24.     # 返回 [底层ID, 上层ID]
  25.     return [map_tile_id_0, map_tile_id_2]
  26.   end
  27. end
  28. class Game_Character
  29.   def get_map_tile_id(x, y)
  30.     return $game_map.get_tile_id(x, y)
  31.   end
  32.   def can_jump?
  33.     # 面向與方向鍵不同時不跳躍
  34.     return false if Input.dir4 != @direction
  35.     # 測試行走(按下Ctrl)時不跳躍
  36.     return false if debug_through?
  37.     x_f1 = x_f2 = @x
  38.     y_f1 = y_f2 = @y
  39.     case @direction
  40.     when 2
  41.       y_f2 += 2
  42.       y_f1 += 1
  43.     when 4
  44.       x_f2 -= 2
  45.       x_f1 -= 1
  46.     when 6
  47.       x_f2 += 2
  48.       x_f1 += 1
  49.     when 8
  50.       y_f2 -= 2
  51.       y_f1 -= 1
  52.     end
  53.     # 前第一格判斷
  54.     if can_walk?(x_f1, y_f1)# 判斷前一格是否能行走
  55.       return false
  56.     elsif [18, 19, 22, 26, 27, 30, 34, 35, 38, 42, 43, 46].include?(get_map_tile_id(x_f1, y_f1)[0])
  57.       return false # 前一格的A層為山、森林、欄杆元件時不能跳躍
  58.     elsif get_map_tile_id(x_f1, y_f1)[1]>1
  59.       return false # 前一格的B~E層無法通行時也不能跳躍
  60.     elsif $game_map.counter?(x_f1, y_f1)
  61.       return false # 前一格為櫃台時無法跳躍
  62.     elsif !$game_map.events_xy(x_f1, y_f1).empty?
  63.       return false
  64.     end
  65.     # 判斷面前兩格是否相同
  66.     return false if get_map_tile_id(x_f1, y_f1) == get_map_tile_id(x_f2, y_f2)
  67.     # 判斷面前一格是否牆壁元件
  68.     wall_tile = (89..96).to_a + (105..112).to_a + (121..128).to_a # 獲取牆壁元件ID
  69.     w_top_tile = (81..88).to_a + (97..104).to_a + (113..120).to_a # 獲取牆頂元件ID
  70.     if wall_tile.include?(get_map_tile_id(x_f1, y_f1)[0]) # 若前一格為牆壁元件
  71.       # 判斷當前格是否為牆(此功能需配合四方通行判斷腳本才能看出效用)
  72.       if w_top_tile.include?(get_map_tile_id(@x, @y)[0])
  73.         return get_map_tile_id(@x, @y) == get_map_tile_id(x_f2, y_f2)
  74.       else
  75.         return false
  76.       end
  77.     end
  78.     # 判斷前二格是否能行走
  79.     return can_walk?(x_f2, y_f2)
  80.   end
  81. end
  82. class Game_Event < Game_Character
  83.   def can_jump?
  84.     return false if @list[0].code != 108 # 第一个指令不是“注释”时返回 false
  85.     return @list[0].parameters[0] == "jumpable"
  86.   end
  87. end
  88. class Game_Player < Game_Character
  89.   alias old_move_by_input move_by_input
  90.   def move_by_input
  91.     # 不能行動時忽略所有動作
  92.     return unless movable?
  93.     # 解釋器執行時忽略所有動作
  94.     return if $game_map.interpreter.running?
  95.     d = Input.dir4
  96.     # 能夠跳躍時
  97.     if can_jump?
  98.       # 判斷跳躍方向
  99.       case d
  100.       when 2;  jump(0, 2)  # 向下跳
  101.       when 4;  jump(-2, 0) # 向左跳
  102.       when 6;  jump(2, 0)  # 向右跳
  103.       when 8;  jump(0, -2) # 向上跳
  104.       end
  105.     end
  106.     # 呼叫原有方法
  107.     old_move_by_input
  108.   end
  109. end
复制代码
插入 main 前面,地圖上若空一格無法通行,就會像黃金太陽那樣跳過去
範例工程︰ GS_Jump.rar (238.73 KB, 下载次数: 12055)

作者: DeathKing    时间: 2010-12-20 22:18
或许想法不一样,流行姐可考虑针对这个脚本的建议:
http://rpg.blue/thread-139905-1-1.html
作者: 雪流星    时间: 2010-12-20 23:36
回复 DeathKing 的帖子

嗯~~~兩個腳本功能類似,但是效果不同,可以考慮合併使用︰小間隔直接跳,大間隔用技能。

那個 FSL 的全文有嗎?你那個帖子裡面的連結打不開?
作者: DeathKing    时间: 2010-12-21 13:15
回复 雪流星 的帖子

那个只是类似与CC或是GPL之类的版权约定,准备重新起草。

http://rpg.blue/group-115-1.html
作者: 雪流星    时间: 2011-1-12 11:07
更新日誌︰



雪流星于2011-1-12 22:35补充以下内容:
2011-01-12
    * 增加使用元件ID判斷,修改中間無法通行的元件是櫃台、欄杆等元件時也會跳躍的 BUG
作者: 【哔—】LOLI控    时间: 2012-1-18 08:59
为毛测试时系统会说“64行发生了SyntaxError”…………

新人求解…………
作者: 344143370    时间: 2013-2-8 15:57
不能下载了.....




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