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

Project1

 找回密码
 注册会员
搜索
楼主: Sion
打印 上一主题 下一主题

[RMVA发布] VA鼠标脚本 6/9 更新 v2.32 by Sion

  [复制链接]

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
1705 小时
注册时间
2011-8-17
帖子
818
61
发表于 2013-5-1 19:22:50 | 只看该作者
报告LZ...使用方向行走图脚本以后发现点击事件日过接近最后事件的位置在斜方的话事件不会触发...........上下左右没问题~
roguelike求生RPG研发中....
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1433
在线时间
1705 小时
注册时间
2011-8-17
帖子
818
62
发表于 2013-5-3 13:09:09 | 只看该作者
汗~上面似乎没写清楚
就是说添加了8方向补丁和8方向行走图脚本以后,点击事件主角自动走到事件旁边的时候,如果是最终站位是在事件的斜面就无法触发事件,求LZ好人做到底,完善一下........
roguelike求生RPG研发中....
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
99 小时
注册时间
2012-3-11
帖子
74
63
发表于 2013-5-5 20:53:14 | 只看该作者

楼主我来报错了 这个和图书馆里的技能冷却有冲突了
在 鼠标单击同一处时间过久 时就会报错……
这种情况偶尔出现……

点评

你上传个范例我有空看看  发表于 2013-5-6 20:19
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
99
在线时间
60 小时
注册时间
2013-1-29
帖子
45
64
发表于 2013-5-18 18:11:17 | 只看该作者
本帖最后由 Mr.红茶 于 2013-5-18 20:17 编辑

鼠标脚本导致跳跃脚本出错了,阁下应如何解决
附上跳跃脚本:
  1. class Game_Map
  2. #--------------------------------------------------------------------------
  3. # ● 计算地图元件ID
  4. #--------------------------------------------------------------------------
  5. def get_tile_id(x, y)
  6. a = data[x, y, 0]
  7. return 0 unless a
  8. a-=2000
  9. map_tile_id_0 = (a >= 0) ? a/48 : (a+593)
  10. map_tile_id_1 = (data[x, y, 1]-2000) / 48
  11. map_tile_id_2 = (data[x, y, 2])

  12. map_tile_id_0 = 0 if map_tile_id_0 == -42 # A
  13. map_tile_id_1 = 0 if map_tile_id_1 == -42 # I
  14. map_tile_id_2 = 0 if map_tile_id_2 == -42 # B~E

  15. # 图块 ID 矫正
  16. map_tile_id_0 = map_tile_id_1 if map_tile_id_1 > 0
  17. unless @events.nil?
  18. for event in @events.values
  19. if event.pos?(x, y) and event.tile_id > 0
  20. # 若是事件使用地图元件,使用该地图元件的ID
  21. map_tile_id_2 = event.tile_id
  22. end
  23. end
  24. end
  25. # 返回 [底层ID, 上层ID]
  26. return [map_tile_id_0, map_tile_id_2]
  27. end
  28. end
  29. class Game_Character < Game_CharacterBase
  30. #--------------------------------------------------------------------------
  31. # ● 获取地图元件ID
  32. #--------------------------------------------------------------------------
  33. def get_map_tile_id(x, y)
  34. return $game_map.get_tile_id(x, y)
  35. end
  36. #--------------------------------------------------------------------------
  37. # ● 判断是否能跳跃
  38. #--------------------------------------------------------------------------
  39. def can_jump?
  40. # 面向与方向键不同时不跳跃
  41. return false if Input.dir4 != @direction
  42. return false if debug_through? # 测试行走(按下Ctrl)时不跳跃
  43. x_f1 = x_f2 = @x
  44. y_f1 = y_f2 = @y

  45. # 计算前两格座标
  46. case @direction
  47. when 2
  48. y_f2 += 2
  49. y_f1 += 1
  50. when 4
  51. x_f2 -= 2
  52. x_f1 -= 1
  53. when 6
  54. x_f2 += 2
  55. x_f1 += 1
  56. when 8
  57. y_f2 -= 2
  58. y_f1 -= 1
  59. end
  60. tile_id_0 = get_map_tile_id(@x, @y) # 获取当前格元件ID
  61. tile_id_1 = get_map_tile_id(x_f1, y_f1) # 获取前一格元件ID
  62. tile_id_2 = get_map_tile_id(x_f2, y_f2) # 获取前两格元件ID
  63. event_1 = $game_map.events_xy(x_f1, y_f1) # 获取前一格事件
  64. event_2 = $game_map.events_xy(x_f2, y_f2) # 获取前两格事件

  65. # 事件判断
  66. if !event_1.empty? # 若前一格有事件
  67. return false if !event_2.empty? # 前两格也有事件则不能跳跃
  68. return check_event_jumpable?(event_1) # 判断是否指定可以跳跃
  69. end

  70. # 前第一格判断
  71. if tile_id_1[1]>1
  72. return false # 前一格的B~E层无法通行时也不能跳跃
  73. elsif $game_map.counter?(x_f1, y_f1)
  74. return false # 前一格为柜台时无法跳跃
  75. end

  76. # 判断面前两格是否相同
  77. return false if tile_id_1 == tile_id_2
  78. return false if tile_id_1 == tile_id_0

  79. # 判断面前一格是否墙壁元件
  80. wall_tile = (89..96).to_a + (105..112).to_a + (121..128).to_a # 获取墙壁元件ID
  81. w_top_tile = (81..88).to_a + (97..104).to_a + (113..120).to_a # 获取墙顶元件ID
  82. return false if wall_tile.include?(tile_id_1[0]) # 前一格为墙壁时无法跳跃
  83. if w_top_tile.include?(tile_id_0[0]) # 若当前格为墙顶
  84. # 前一格非墙顶,而前两格为墙顶时则可以跳跃
  85. if !w_top_tile.include?(tile_id_1[0]) && w_top_tile.include?(tile_id_2[0])
  86. return true
  87. end
  88. end
  89. return false if map_passable?(x_f1, y_f1, @direction) # 前一格能通行时不跳跃
  90. return map_passable?(x_f2, y_f2, @direction) # 判断前两格是否能通行
  91. end
  92. #--------------------------------------------------------------------------
  93. # ● 判断某格的事件是否能跳跃
  94. #--------------------------------------------------------------------------
  95. def check_event_jumpable?(events)
  96. events.each{|event|
  97. return true if event.can_jump?
  98. }
  99. return false
  100. end
  101. #--------------------------------------------------------------------------
  102. # ● 执行跳跃
  103. #--------------------------------------------------------------------------
  104. def do_jump(d=@direction)
  105. # 判断跳跃方向
  106. case d
  107. when 2; jump(0, 2) # 向下跳
  108. when 4; jump(-2, 0) # 向左跳
  109. when 6; jump(2, 0) # 向右跳
  110. when 8; jump(0, -2) # 向上跳
  111. end
  112. end
  113. end
  114. class Game_Event < Game_Character
  115. #--------------------------------------------------------------------------
  116. # ● 判断事件是否能跳跃
  117. #--------------------------------------------------------------------------
  118. def can_jump?
  119. return false if @list[0].code != 108 # 第一个指令不是“注释”时返回 false
  120. return @list[0].parameters[0] == "jumpable"
  121. end
  122. end
  123. class Game_Player < Game_Character
  124. #--------------------------------------------------------------------------
  125. # ● 输入移动处理
  126. #--------------------------------------------------------------------------
  127. alias old_move_by_input move_by_input
  128. def move_by_input
  129. # 不能行动时忽略所有动作
  130. return unless movable?
  131. # 解释器执行时忽略所有动作
  132. return if $game_map.interpreter.running?
  133. d = Input.dir4
  134. if can_jump?# 能够跳跃时
  135. if $game_player.followers.visible # 队伍跟随时
  136. $game_player.followers.gather # 跟随队伍聚集
  137. while !$game_player.followers.gather?
  138. $game_player.followers.update # 跟随队伍刷新
  139. end
  140. # 跟随队员跳跃
  141. $game_player.followers.each{ |follower|
  142. follower.do_jump(d)
  143. }
  144. end
  145. do_jump(d) # 执行跳跃
  146. else
  147. old_move_by_input # 呼叫原有方法
  148. end
  149. end
  150. end
复制代码

跳跃脚本.rar

20 Bytes, 阅读权限: 255, 下载次数: 4

作废!!!

点评

不扯 = =  发表于 2013-5-19 07:07
这个是接触事件以后跳到它后面去,你不觉得用鼠标来操作这个很扯吗...  发表于 2013-5-18 22:10
可以了  发表于 2013-5-18 20:18
可能是我忘记放了,等一下  发表于 2013-5-18 20:08
里面没有脚本  发表于 2013-5-18 19:16
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

65
 楼主| 发表于 2013-5-19 18:42:23 | 只看该作者
Mr.红茶 发表于 2013-5-18 18:11
鼠标脚本导致跳跃脚本出错了,阁下应如何解决
附上跳跃脚本:


改好了
使用时在事件内插入脚本jump_over 触发事件就会跳过去
  1. class Game_Map
  2. #--------------------------------------------------------------------------
  3. # ● 计算地图元件ID
  4. #--------------------------------------------------------------------------
  5. def get_tile_id(x, y)
  6. a = data[x, y, 0]
  7. return 0 unless a
  8. a-=2000
  9. map_tile_id_0 = (a >= 0) ? a/48 : (a+593)
  10. map_tile_id_1 = (data[x, y, 1]-2000) / 48
  11. map_tile_id_2 = (data[x, y, 2])

  12. map_tile_id_0 = 0 if map_tile_id_0 == -42 # A
  13. map_tile_id_1 = 0 if map_tile_id_1 == -42 # I
  14. map_tile_id_2 = 0 if map_tile_id_2 == -42 # B~E

  15. # 图块 ID 矫正
  16. map_tile_id_0 = map_tile_id_1 if map_tile_id_1 > 0
  17. unless @events.nil?
  18. for event in @events.values
  19. if event.pos?(x, y) and event.tile_id > 0
  20. # 若是事件使用地图元件,使用该地图元件的ID
  21. map_tile_id_2 = event.tile_id
  22. end
  23. end
  24. end
  25. # 返回 [底层ID, 上层ID]
  26. return [map_tile_id_0, map_tile_id_2]
  27. end
  28. end


  29. class Game_Character < Game_CharacterBase
  30. #--------------------------------------------------------------------------
  31. # ● 获取地图元件ID
  32. #--------------------------------------------------------------------------
  33. def get_map_tile_id(x, y)
  34. return $game_map.get_tile_id(x, y)
  35. end
  36. #--------------------------------------------------------------------------
  37. # ● 判断是否能跳跃
  38. #--------------------------------------------------------------------------
  39. def can_jump?
  40. # 面向与方向键不同时不跳跃
  41. return false if Input.dir4 != @direction
  42. return false if debug_through? # 测试行走(按下Ctrl)时不跳跃
  43. x_f1 = x_f2 = @x
  44. y_f1 = y_f2 = @y

  45. # 计算前两格座标
  46. case @direction
  47. when 2
  48. y_f2 += 2
  49. y_f1 += 1
  50. when 4
  51. x_f2 -= 2
  52. x_f1 -= 1
  53. when 6
  54. x_f2 += 2
  55. x_f1 += 1
  56. when 8
  57. y_f2 -= 2
  58. y_f1 -= 1
  59. end
  60. tile_id_0 = get_map_tile_id(@x, @y) # 获取当前格元件ID
  61. tile_id_1 = get_map_tile_id(x_f1, y_f1) # 获取前一格元件ID
  62. tile_id_2 = get_map_tile_id(x_f2, y_f2) # 获取前两格元件ID
  63. event_1 = $game_map.events_xy(x_f1, y_f1) # 获取前一格事件
  64. event_2 = $game_map.events_xy(x_f2, y_f2) # 获取前两格事件

  65. # 事件判断
  66. if !event_1.empty? # 若前一格有事件
  67. return false if !event_2.empty? # 前两格也有事件则不能跳跃
  68. return check_event_jumpable?(event_1) # 判断是否指定可以跳跃
  69. end

  70. # 前第一格判断
  71. if tile_id_1[1]>1
  72. return false # 前一格的B~E层无法通行时也不能跳跃
  73. elsif $game_map.counter?(x_f1, y_f1)
  74. return false # 前一格为柜台时无法跳跃
  75. end

  76. # 判断面前两格是否相同
  77. return false if tile_id_1 == tile_id_2
  78. return false if tile_id_1 == tile_id_0

  79. # 判断面前一格是否墙壁元件
  80. wall_tile = (89..96).to_a + (105..112).to_a + (121..128).to_a # 获取墙壁元件ID
  81. w_top_tile = (81..88).to_a + (97..104).to_a + (113..120).to_a # 获取墙顶元件ID
  82. return false if wall_tile.include?(tile_id_1[0]) # 前一格为墙壁时无法跳跃
  83. if w_top_tile.include?(tile_id_0[0]) # 若当前格为墙顶
  84. # 前一格非墙顶,而前两格为墙顶时则可以跳跃
  85. if !w_top_tile.include?(tile_id_1[0]) && w_top_tile.include?(tile_id_2[0])
  86. return true
  87. end
  88. end
  89. return false if map_passable?(x_f1, y_f1, @direction) # 前一格能通行时不跳跃
  90. return map_passable?(x_f2, y_f2, @direction) # 判断前两格是否能通行
  91. end
  92. #--------------------------------------------------------------------------
  93. # ● 判断某格的事件是否能跳跃
  94. #--------------------------------------------------------------------------
  95. def check_event_jumpable?(events)
  96. events.each{|event|
  97. return true if event.can_jump?
  98. }
  99. return false
  100. end
  101. #--------------------------------------------------------------------------
  102. # ● 执行跳跃
  103. #--------------------------------------------------------------------------
  104. def do_jump(d=@direction)
  105. # 判断跳跃方向
  106. case d
  107. when 2; jump(0, 2) # 向下跳
  108. when 4; jump(-2, 0) # 向左跳
  109. when 6; jump(2, 0) # 向右跳
  110. when 8; jump(0, -2) # 向上跳
  111. end
  112. end
  113. end


  114. class Game_Interpreter
  115.   def jump_over
  116.                 d = $game_player.direction
  117.                         if $game_player.followers.visible # 队伍跟随时
  118.                                 $game_player.followers.gather # 跟随队伍聚集
  119.                                 while !$game_player.followers.gather?
  120.                                         $game_player.followers.update # 跟随队伍刷新
  121.                                 end
  122.                                 # 跟随队员跳跃
  123.                                 $game_player.followers.each{|follower| follower.do_jump(d)}
  124.                         end
  125.                         $game_player.do_jump(d) # 执行跳跃
  126.         end
  127. end
复制代码
吐槽:这是哪个大神写的脚本啊.....都不带缩进的- -b
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2010-10-7
帖子
45
66
发表于 2013-5-20 13:35:33 | 只看该作者
过来支持一下 ,貌似好像少了一张图片素材!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
57 小时
注册时间
2012-7-19
帖子
39
67
发表于 2013-6-2 16:24:02 | 只看该作者
战斗等操作会很卡。。求解决 @Sion

点评

你是不是加了别的脚本?  发表于 2013-6-2 16:29
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
84
在线时间
27 小时
注册时间
2013-5-28
帖子
20
68
发表于 2013-6-10 19:50:26 | 只看该作者
这个必须有~~~~学习了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
137 小时
注册时间
2012-8-27
帖子
109
69
发表于 2013-6-15 10:33:36 | 只看该作者
@sion
问下如何在事件分歧中判断“当鼠标点击时”

点评

左键:Mouse.press?(0x01), 右键:Mouse.press?(0x02)  发表于 2013-6-15 11:49


回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
189
在线时间
3 小时
注册时间
2013-6-20
帖子
2
70
发表于 2013-6-20 14:31:46 | 只看该作者
樓主 我真的覺得你超強的!好長的程式碼  看了都想睡了xd
加油~剛剛套用了一下很好用耶{:2_287:}
我要繼續使用下去
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-21 21:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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