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

Project1

 找回密码
 注册会员
搜索
查看: 2004|回复: 1
打印 上一主题 下一主题

[已经过期] 如何操作B-E型的图块ID

[复制链接]

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6543
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

跳转到指定楼层
1
发表于 2013-8-29 11:20:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
还是被动跳跃脚本,只不过有小幅度修正
以下脚本允许从木桶 牌子 墓碑上跳过(从一边跳到另一边) 但是 也允许从树的左边跳跃到右边
但我不想允许从树上跳跃 于是在脚本中找到如下代码段
RUBY 代码复制
  1. # 前第一格判断
  2.     if tile_id_1[1]>1
  3.       return false # 前一格的B~E层无法通行时也不能跳跃
  4.     end

然后尝试改成了这样(其实就是取消了这段判定)
RUBY 代码复制
  1. # 前第一格判断
  2.     #if tile_id_1[1]>1
  3.     #  return false # 前一格的B~E层无法通行时也不能跳跃
  4.     #end

结果 确实不能再从树上跃过,可是也不能跳跃其他的地图元件
我想设定为允许跳跃特定的图块 或者禁止跳跃特定图块 可是不知道怎么做……
另外有几个帖子可以参考http://rpg.blue/thread-330027-1-1.html
http://rpg.blue/thread-325209-1-1.html

放脚本:
RUBY 代码复制
  1. #2013.8 影有小幅度修改
  2. class Game_Map
  3.   #--------------------------------------------------------------------------
  4.   # ● 计算地图元件ID
  5.   #--------------------------------------------------------------------------
  6.   def get_tile_id(x, y)
  7.     a = data[x, y, 0]
  8.     return 0 unless a
  9.     a-=2000
  10.     map_tile_id_0 = (a >= 0) ? a/48 : (a+593)
  11.     map_tile_id_1 = (data[x, y, 1]-2000) / 48
  12.     map_tile_id_2 = (data[x, y, 2])
  13.  
  14.     map_tile_id_0 = 0 if map_tile_id_0 == -42 # A
  15.     map_tile_id_1 = 0 if map_tile_id_1 == -42 # I
  16.     map_tile_id_2 = 0 if map_tile_id_2 == -42 # B~E
  17.  
  18.     # 图块 ID 矫正
  19.     map_tile_id_0 = map_tile_id_1 if map_tile_id_1 > 0
  20.     unless @events.nil?
  21.       for event in @events.values
  22.         if event.pos?(x, y) and event.tile_id > 0
  23.           # 若是事件使用地图元件,使用该地图元件的ID
  24.           map_tile_id_2 = event.tile_id
  25.         end
  26.       end
  27.     end
  28.     # 返回 [底层ID, 上层ID]
  29.     return [map_tile_id_0, map_tile_id_2]
  30.   end
  31. end
  32. class Game_Character < Game_CharacterBase
  33.   #--------------------------------------------------------------------------
  34.   # ● 获取地图元件ID
  35.   #--------------------------------------------------------------------------
  36.   def get_map_tile_id(x, y)
  37.     return $game_map.get_tile_id(x, y)
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ● 判断是否能跳跃
  41.   #--------------------------------------------------------------------------
  42.   def can_jump?
  43.     # 面向与方向键不同时不跳跃
  44.     return false if Input.dir4 != @direction
  45.     return false if debug_through? # 测试行走(按下Ctrl)时不跳跃
  46.  
  47.     #判断是否步行,不是步行的时候不跳跃
  48.     return false if @vehicle_type != :walk
  49.  
  50.     x_f1 = x_f2 = @x
  51.     y_f1 = y_f2 = @y
  52.  
  53.     # 计算前两格座标
  54.     case @direction
  55.     when 2
  56.       y_f2 += 2
  57.       y_f1 += 1
  58.     when 4
  59.       x_f2 -= 2
  60.       x_f1 -= 1
  61.     when 6
  62.       x_f2 += 2
  63.       x_f1 += 1
  64.     when 8
  65.       y_f2 -= 2
  66.       y_f1 -= 1
  67.     end
  68.  
  69.     #落地判断
  70.     return false if !(map_passable?(x_f2, y_f2, 2)|map_passable?(x_f2, y_f2, 4)|map_passable?(x_f2, y_f2, 6)|map_passable?(x_f2, y_f2, 8))
  71.  
  72.     tile_id_0 = get_map_tile_id(@x, @y)       # 获取当前格元件ID
  73.     tile_id_1 = get_map_tile_id(x_f1, y_f1)   # 获取前一格元件ID
  74.     tile_id_2 = get_map_tile_id(x_f2, y_f2)   # 获取前两格元件ID
  75.     event_1 = $game_map.events_xy(x_f1, y_f1) # 获取前一格事件
  76.     event_2 = $game_map.events_xy(x_f2, y_f2) # 获取前两格事件
  77.  
  78.     return false if $game_map.counter?(x_f1, y_f1) # 前一格为柜台时无法跳跃
  79.     return false if !event_2.empty? # 前两格也有事件则不能跳跃
  80.  
  81.     # 判断面前一格是否墙壁元件
  82.     # 获取墙壁元件ID
  83.     wall_tile = (57..64).to_a + (73..80).to_a + (89..96).to_a + (105..112).to_a + (121..128).to_a + (241..243).to_a + (246..251).to_a + (254..256).to_a
  84.     # 获取墙顶元件ID
  85.     w_top_tile = (49..56).to_a + (65..72).to_a + (81..88).to_a + (97..104).to_a + (113..120).to_a + (217..240).to_a + (244..245).to_a + (252..253).to_a
  86.  
  87.     return false if wall_tile.include?(tile_id_2[0]) # 前两格为墙壁时无法跳跃
  88.  
  89.     if w_top_tile.include?(tile_id_0[0])
  90.       if w_top_tile.include?(tile_id_2[0])
  91.         return true if !event_1.empty?&&check_event_jumpable?(event_1)
  92.         return true if !map_passable?(@x, @y, @direction)
  93.         return true if !map_passable?(x_f1, y_f1, @direction)
  94.         return true if !map_passable?(x_f1, y_f1, 8)&&@direction==2
  95.       end
  96.       return false
  97.     end
  98.  
  99.  
  100.     return false if w_top_tile.include?(tile_id_1[0])
  101.     return false if wall_tile.include?(tile_id_1[0])
  102.     return false if w_top_tile.include?(tile_id_2[0]) #前两格是墙顶不能跳
  103.  
  104.     if !event_1.empty? # 若前一格有事件
  105.       return false if w_top_tile.include?(tile_id_1[0]) #事件在墙顶不能跳
  106.       return false if !map_passable?(x_f1, y_f1, @direction)
  107.       return check_event_jumpable?(event_1) # 判断是否指定可以跳跃
  108.     end
  109.  
  110.     # 前第一格判断
  111.     if tile_id_1[1]>1
  112.       return false # 前一格的B~E层无法通行时也不能跳跃
  113.     end
  114.  
  115.     # 判断面前两格是否相同
  116.     return false if tile_id_1 == tile_id_2
  117.     return false if tile_id_1 == tile_id_0
  118.     return false if map_passable?(x_f1, y_f1, 4)
  119.  
  120.     return true
  121.  
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 判断某格的事件是否能跳跃
  125.   #--------------------------------------------------------------------------
  126.   def check_event_jumpable?(events)
  127.     events.each{|event|
  128.       return true if event.can_jump?
  129.     }
  130.     return false
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 执行跳跃
  134.   #--------------------------------------------------------------------------
  135.   def do_jump(d=@direction)
  136.     # 判断跳跃方向
  137.     Audio.se_play("Audio/SE/"+"Jump1",80,100)
  138.     case d
  139.     when 2;  jump(0, 2)  # 向下跳
  140.     when 4;  jump(-2, 0) # 向左跳
  141.     when 6;  jump(2, 0)  # 向右跳
  142.     when 8;  jump(0, -2) # 向上跳
  143.     end
  144.   end
  145. end
  146. class Game_Event < Game_Character
  147.   #--------------------------------------------------------------------------
  148.   # ● 判断事件是否能跳跃
  149.   #--------------------------------------------------------------------------
  150.   def can_jump?
  151.     return false if @list[0].code != 108 # 第一个指令不是“注释”时返回 false
  152.     return @list[0].parameters[0] == "jump"
  153.   end
  154. end
  155. class Game_Player < Game_Character
  156.   #--------------------------------------------------------------------------
  157.   # ● 输入移动处理
  158.   #--------------------------------------------------------------------------
  159.   alias old_move_by_input move_by_input
  160.   def move_by_input
  161.     # 不能行动时忽略所有动作
  162.     return unless movable?
  163.     # 解释器执行时忽略所有动作
  164.     return if $game_map.interpreter.running?
  165.     d = Input.dir4
  166.     if can_jump?# 能够跳跃时
  167.       if $game_player.followers.visible # 队伍跟随时
  168.         $game_player.followers.gather   # 跟随队伍聚集
  169.         while !$game_player.followers.gather?
  170.           $game_player.followers.update # 跟随队伍刷新
  171.         end
  172.         # 跟随队员跳跃
  173.         $game_player.followers.each{ |follower|
  174.           follower.do_jump(d)
  175.         }
  176.       end
  177.       do_jump(d) # 执行跳跃
  178.     else
  179.       old_move_by_input # 呼叫原有方法
  180.     end
  181.   end
  182. end

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6543
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

2
 楼主| 发表于 2013-8-29 11:25:28 | 只看该作者
另外@gaogs123456 ,这个脚本可以从悬崖上跳下——只要前面的图块是A5区域的就行
说实话,我记得好像有改动,但好像又真的没改什么,貌似只加了一个载具不允许跳跃@.@ 果然不擅长这个

点评

辛苦了!加油!  发表于 2013-8-30 00:39
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-10-1 12:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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