Project1

标题: VA鼠标脚本 6/9 更新 v2.32 by Sion [打印本页]

作者: Sion    时间: 2013-2-7 19:51
标题: VA鼠标脚本 6/9 更新 v2.32 by Sion
本帖最后由 Sion 于 2015-6-3 22:31 编辑
更新日志



主要功能

    1,智能寻路,按住 D 键可以扩大寻路的范围
    2,变量输入框改良
    3,鼠标启动事件:
      在事件中加入“注释”:鼠标启动
      该事件将无法用其它方式启动,只能用鼠标左键点击启动
      
  鼠标指针图片 MouseCursor.png 放入 Graphics\System 文件夹
  路径点指示图片 $Arrow.png 放入 Graphics\Characters 文件夹
  如果未放入会使用RM自带图片代替缺失文件

改良的变量输入框


------- 下载 -------
鼠标2.32 + 指针变换脚本.rar (340.04 KB, 下载次数: 3977) 附件未包含 RGSS300.dll 运行前 Ctrl + S 保存即可。
https://rpg.blue/thread-347535-1-1.html 提供了 dll 支持的鼠标脚本 v3.00,支持鼠标滚轮功能。
------ 额外功能 ------
.rb 文件可以直接用记事本打开。
鼠标选择敌人v1.3.rb (4.27 KB, 下载次数: 1290)
鼠标选择敌人 v1.3 兼容后知后觉横版战斗.rb (4.33 KB, 下载次数: 952) 如果你没有使用这个横版战斗,请下载上面的脚本


八方移动补丁v1.3.rb (18.09 KB, 下载次数: 724)
需要使用八方行走图的话这里有:脚本链接

路径可视化补丁v1.1.rar (5.76 KB, 下载次数: 1176)
感觉蛮鸡肋,需要的话就带走吧。


作者: houyuxiaoyang    时间: 2013-2-7 21:39
支持啊!!!虽然暂时用不到……QAQ
作者: 我爱吴悦淇    时间: 2013-2-7 21:55
先收藏,后购买,以后再下载!这算水么?
作者: 429259591    时间: 2013-2-7 22:12
自动寻路的算法是怎么写的?没写过于是不知道是怎么样的←(喂,其实你是个脚本盲来的,说什么没写过啊,根本就不会写)[是根据地点和角色的位置来判断方向,然后优先判断最近方向能否通过?....打到这都突然发现是不行的了.....于是果断求指教]
咳咳,因为做自动剧情的时候角色移动时一步一步算好麻烦...所以想偷懒看看能不能简单一点来设置...
作者: Sion    时间: 2013-2-7 22:24
429259591 发表于 2013-2-7 22:12
自动寻路的算法是怎么写的?没写过于是不知道是怎么样的←(喂,其实你是个脚本盲来的,说什么没写过啊,根 ...

从起点开始,逐步绘制所有可能的路径,直到覆盖到终点。然后反相移动回去得到路径。具体算法在脚本里780行左右。这个模型还算简单的,都是方格,上个图吧:

作者: q854240045    时间: 2013-2-16 19:36
您好,请问怎样消除此脚本与VA截图存档脚本的冲突呢?
作者: q854240045    时间: 2013-2-16 21:52
q854240045 发表于 2013-2-16 19:36
您好,请问怎样消除此脚本与VA截图存档脚本的冲突呢?

http://rpg.blue/thread-217062-1-1.html

麻烦您了……!
作者: q854240045    时间: 2013-2-17 12:33
q854240045 发表于 2013-2-16 21:52
http://rpg.blue/thread-217062-1-1.html

麻烦您了……!

再麻烦您一次,用脸图战斗无法用鼠标选择单个敌人应该怎么优化?
http://rpg.blue/home.php?mod=spa ... ward=1&id=11278
脸图战斗脚本∧
哈哈,麻烦了,我也是一个“问题”少年…………
作者: Sion    时间: 2013-2-17 13:47
q854240045 发表于 2013-2-17 12:33
再麻烦您一次,用脸图战斗无法用鼠标选择单个敌人应该怎么优化?
http://rpg.blue/home.php?mod=spa ...

脸图战斗.rar (4.02 KB, 下载次数: 281)

用默认的选择框吧。
作者: oott123    时间: 2013-2-19 22:13
本帖最后由 oott123 于 2013-2-19 22:27 编辑

楼主,您的脚本好像不能完美的处理鼠标数值输入。
是这样的,在事件中先接收数值输入,然后再对数值进行判断。
在输入数值的时候,已经跳过当前这行事件执行下面的判断了。
顺便,当事件的位置在不可同行的地方的时候,无法触发事件。
这两个BUG的演示工程在这里:
http://pan.baidu.com/share/link?shareid=329398&uk=3340806281

BUG示意图:


对于第二个BUG,我的解决方案是,在Game_Player的move_by_mouse方法中,修改elsif @mouse_move_path[0].zero?分支,在这个分支的开头加入check_action_event。这个已经在我的演示方案中解决了。
希望作者给出解决方案~

================

好吧我折腾来折腾去已经解决第一个BUG了。
在 Window_NumberInput 的start方法头一行加入$number_input_closed = 0
在close方法的最后一行加入$number_input_closed = 1234
在事件中数值输入处理后加入循环判断$number_input_closed == 1234则跳出循环,否则延时一定时间。

不过不过……我希望作者来一个彻底的解决方案……
作者: 风与炎的旋律    时间: 2013-2-19 22:45
请问,如何可以设置一个事件,直接用鼠标点击就能触发,而不是角色走到事件上才触发。
作者: oott123    时间: 2013-2-19 23:56
本帖最后由 oott123 于 2013-2-20 18:17 编辑

升级版本以后反馈的BUG全部改掉了,赞一下~新的寻路算法很给力,比原版的确实要好一些。
这样的话……就没有什么不好的地方了呢。
如果可能的话,可以把路径绘制到地图上么?也就是说,系统显示出来人物会怎么移动。
我一开始以为附件中的小红叉是用来标记路径的。
作者大大太棒了~
======================
Edit at 2013-02-20 15:28
@Sion 这么说起来确实有些复杂……0.0不过目前的脚本已经相当给力并且暂时没有发现什么BUG了~还是要再次感谢一下的说~
====
Edit at 2013-02-20 15:35
@Sion 嗯,我去试试看~【其实可以在走到目的地以后再移除它们的说0.0
==========
Edit at 2013-02-20 18:12:04
@Sion  Sion大,我把这个坑爹的功能实现了……
脚本 戳 http://pan.baidu.com/share/link?shareid=308022&uk=822553734
作者: 风与炎的旋律    时间: 2013-2-20 23:17
风与炎的旋律 发表于 2013-2-19 22:45
请问,如何可以设置一个事件,直接用鼠标点击就能触发,而不是角色走到事件上才触发。 ...

非常非常之感谢,真诚的希望这个鼠标脚本能够继续完善,实现更多更强大的功能~
作者: 风与炎的旋律    时间: 2013-3-3 13:01
不好意思又来问问题了,想问下判定鼠标移动到了某选项或者物品上上的命令是怎么写的,我想整合一个装备说明的脚本,需要鼠标移动到物品上的时候显示一个框描述物品属性,当鼠标移开时,框就消失。
作者: Sion    时间: 2013-3-3 14:48
本帖最后由 Sion 于 2013-3-3 14:54 编辑
风与炎的旋律 发表于 2013-3-3 13:01
不好意思又来问问题了,想问下判定鼠标移动到了某选项或者物品上上的命令是怎么写的,我想整合一 ...


就参照默认的帮助窗口吧:Window_Help
  1.   #--------------------------------------------------------------------------
  2.   # ● 设置光标位置 (class Window_Selectable)
  3.   #--------------------------------------------------------------------------
  4.   def index=(index)
  5.     @index = index
  6.     update_cursor
  7.     call_update_help # 这是设置好索引之后用来更新帮助窗口的命令
  8.   end
复制代码
要让帮助窗口关闭,不太好弄吧。因为光标总是要停留在某一个物品上的,这个鼠标脚本只是根据鼠标的位置去设置光标的位置而已。你可以在鼠标脚本里搜索
  1. Window_Selectable
复制代码
里面有详细的说明的
作者: qx490135894    时间: 2013-3-5 16:52
来看看!!!
作者: q854240045    时间: 2013-3-5 21:44
再提一个小小建议:
能否让使用键盘移动光标时,鼠标坐标也跟着移动到相应位置上?就如汉之云、云之遥一样的效果。
比如:打开菜单后没有动鼠标,鼠标指针在右上角,光标在物品这里,按一下↓键,光标向下移动一格,鼠标也跟着移动到第二格……
这样就可以避免有时鼠标放到一个地方后,按键盘后处于鼠标的效果光标再次返回而无法很好使用键盘的麻烦。
希望采纳建议,升级鼠标功能,希望早日看到v1.4,哈哈,谢谢!
作者: z963904783    时间: 2013-3-7 18:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: q854240045    时间: 2013-3-8 00:19
怎样才能运用到鼠标中键(滑轮)呢?
哈哈,我他贪婪了,很多脚本都没有……我也扎根儿就不知道这个脚本怎么去改,无从下手啊……
作者: 风与炎的旋律    时间: 2013-3-11 20:31
发现一个BUG,就是设置选项事件的话,如果用了鼠标启动的功能,那么右键取消的时候会默认启动最后一个选项的事件。
例如:设置一个4选项的事件,最后一个选项是更改天气为下雪,那么左键启动事件后,右键关闭的话,会启动下雪的那个选项。
作者: 牲口    时间: 2013-3-12 20:18
感谢楼主的脚本,确实很好用的说。 再次感谢,但是还是有一小点BUG……谢谢!
作者: 风与炎的旋律    时间: 2013-3-13 09:10
突然有个想法,就是说我屏幕的左上方一直有个图标,只要鼠标移到那个位置上点击就能打开对应的界面。就像一些游戏里把物品,状态等窗口的打开用一个小图标的方式放在左边一排。
嗯,这么想的话可以做一个窗口摆在左边,从上到下分别是要的功能,这个窗口在角色移动的时候也得一直处于激活的状态,这样只要鼠标移过去就能点开里面的选项,但是问题是用方向键操作的时候,怎么区分是操作角色移动还是选择窗口里的选项。。。额,好像蛮乱的,只是个初步的想法哈,呵呵。
作者: 为RPG生    时间: 2013-3-14 21:16
首先说下,这真是个不错的脚本!
不过还是希望楼主能加入一个鼠标移动到选项会播放声效的效果——这个应该不难吧?
作者: Sion    时间: 2013-3-14 21:37
为RPG生 发表于 2013-3-14 21:16
首先说下,这真是个不错的脚本!
不过还是希望楼主能加入一个鼠标移动到选项会播放声效的效果——这个应该 ...
  1. class Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 将光标设置到鼠标所在的位置,附带卷动菜单的功能
  4.   #--------------------------------------------------------------------------
  5.   def set_cursor
  6.     mouse_row, mouse_col = mouse_window_area
  7.     if    mouse_row == -1
  8.       @move_state += 1 if need_scroll?
  9.       cursor_up if (@move_state - 1) % 4 == 0 && !is_horzcommand?
  10.     elsif mouse_row == -2
  11.       @move_state += 1 if need_scroll?
  12.       cursor_down if (@move_state - 1) % 4 == 0 && !is_horzcommand?
  13.     elsif mouse_col == -1
  14.       @move_state += 1 if need_scroll?
  15.       cursor_left if (@move_state - 1) % 16 == 0 && is_horzcommand?
  16.     elsif mouse_col == -2
  17.       @move_state += 1 if need_scroll?
  18.       cursor_right if (@move_state - 1) % 16 == 0 && is_horzcommand?
  19.     else
  20.       @move_state = 0
  21.       new_index = (top_row + mouse_row) * col_max + mouse_col
  22.       if new_index < item_max && new_index != @index
  23.         Sound.play_cursor
  24.         select(new_index)
  25.       end
  26.     end
  27.   end
  28. end
复制代码
你可以自己试一试效果,放到鼠标脚本以下就行了;一些特殊的菜单还要另外改
作者: q854240045    时间: 2013-3-16 17:07
游戏中可不可以执行中途更换鼠标指针的指令呢?
比如游戏过程中切换鼠标指针图,或者鼠标移到特别事件上时自动更换的效果。
哈哈,鼠标功能越来越全了呢!
作者: ayano2k    时间: 2013-3-20 16:34
本帖最后由 ayano2k 于 2013-3-21 15:57 编辑

感谢楼主的脚本,很好用~~
但是这个功能想知道该怎么设置??
  [[  1.3a: 代码小修改;
          加入了鼠标点击启动事件的功能,
          在事件中加入“注释”: 鼠标启动  ,<<<?不懂
          该事件将无法用其它方式启动,只能用鼠标左键点击启动。]]
-------------------------------------------------
-------------------------------------------------
另外这个作者有作出8方向移动,不知道和滑鼠系统有没有机会完美整合
artificialprovidence.web.fc2.com/r3usability.html

--------------------------PM 04
传送完成了,请查收~~
作者: tyq4590    时间: 2013-3-23 11:58
本帖最后由 tyq4590 于 2013-3-24 13:26 编辑

这个脚本很不错,手感各方面都很出色。就是遇到一个问题:在其他脚本用到cursor_fix的时候会报错:undefined method 'cursor_fix=' for true:TrueClass 不知道有没有解决办法?(我测试了一下,只要把全鼠标脚本移除就不报错了,所以确定是跟全鼠标脚本的兼容性问题)

附上脚本(画廊),报错的部分是605行‘@list_window.activate.cursor_fix = true’这一句:

RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-18 ギャラリー        by Claimh
  3. #------------------------------------------------------------------------------
  4. # 写真を表示するギャラリーを作ります
  5. # なお、ギャラリーの管理情報は全セーブデータで共通となります。
  6. #------------------------------------------------------------------------------
  7. # ●ギャラリー全体の表示許可
  8. #   DataManager.garally.enable = true
  9. # ●写真の表示許可
  10. #   DataManager.garally[id] = true
  11. # ●写真の追加(LIST以外のスナップショットなどを追加)
  12. #   DataManager.garally.push(id, GFile.new(filename, text))
  13. # ●イベント等から呼び出す
  14. #   SceneManager.call(Scene_ExGarally)
  15. #==============================================================================
  16.  
  17. class GFile
  18.   attr_reader :name
  19.   attr_reader :text
  20.   def initialize(filename, text="")
  21.     @name = filename; @text = text
  22.   end
  23. end
  24.  
  25. module ExGarally
  26.   # 写真の設定
  27.   LIST = {
  28. #  ID => GFile.new("ファイル名(Graphics/Pictures)", 表示文字)
  29.    1  => GFile.new("BlueSky", "青い空\n改行"),
  30.    2  => GFile.new("CloudySky1", "曇った空"),
  31.    3  => GFile.new("CloudySky2"),
  32.    4  => GFile.new("DarkSpace1"),
  33.    5  => GFile.new("DarkSpace2"),
  34.    6  => GFile.new("Mountains1"),
  35.    7  => GFile.new("Mountains2"),
  36.    8  => GFile.new("Mountains3"),
  37.    9  => GFile.new("Mountains4"),
  38.    10 => GFile.new("Mountains5"),
  39.    12 => GFile.new("Ocean2"),
  40.    11 => GFile.new("Ocean1"),
  41.    13 => GFile.new("SeaofClouds"),
  42.    14 => GFile.new("StarlitSky"),
  43. #   15 => GFile.new("Sunset"),
  44.   }
  45.  
  46.   # ヘルプウィンドウの行数(1~3)
  47.   HELP_LINES = 2
  48. end
  49.  
  50.  
  51. #==============================================================================
  52. # ■ ExGarally
  53. #==============================================================================
  54. module ExGarally
  55.   #--------------------------------------------------------------------------
  56.   # ● ギャラリーの表示有効?
  57.   #--------------------------------------------------------------------------
  58.   def self.enable?
  59.     DataManager.garally.enable
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● ファイル名
  63.   #--------------------------------------------------------------------------
  64.   def self.filename
  65.     "exgallary.rvdata2"
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● セーブの実行
  69.   #--------------------------------------------------------------------------
  70.   def self.save_exdata(obj)
  71.     save_data(obj, filename)
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● ロードの実行
  75.   #--------------------------------------------------------------------------
  76.   def self.load_exdata
  77.     exist? ? load_data(filename) : Game_ExGarallyList.new
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ● ファイル削除
  81.   #--------------------------------------------------------------------------
  82.   def self.delete_exdata
  83.     return unless exist?
  84.     File.delete(filename) rescue nil
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● ファイルの有無チェック
  88.   #--------------------------------------------------------------------------
  89.   def self.exist?
  90.     FileTest.exist?(filename)
  91.   end
  92. end
  93.  
  94.  
  95. #==============================================================================
  96. # ■ DataManager
  97. #==============================================================================
  98. class << DataManager
  99.   #--------------------------------------------------------------------------
  100.   # ● 各種ゲームオブジェクトの作成
  101.   #--------------------------------------------------------------------------
  102.   alias create_game_objects_exgrly create_game_objects
  103.   def create_game_objects
  104.     create_game_objects_exgrly
  105.     load_garally
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● セーブの実行
  109.   #--------------------------------------------------------------------------
  110.   alias save_game_exgarally save_game
  111.   def save_game(index)
  112.     r = save_game_exgarally(index)
  113.     save_garally if r
  114.     r
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● ロードの実行
  118.   #--------------------------------------------------------------------------
  119.   alias load_game_exgrly load_game
  120.   def load_game(index)
  121.     r = load_game_exgrly(index)
  122.     load_garally if r
  123.     r
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● ギャラリー情報load
  127.   #--------------------------------------------------------------------------
  128.   def load_garally
  129.     @exgarally = ExGarally.load_exdata
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● ギャラリー情報load
  133.   #--------------------------------------------------------------------------
  134.   def save_garally
  135.     ExGarally.save_exdata(@exgarally)
  136.   end
  137.   #--------------------------------------------------------------------------
  138.   # ● ギャラリー情報削除
  139.   #--------------------------------------------------------------------------
  140.   def delete_garally
  141.     ExGarally.delete_exdata
  142.     load_garally
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● ギャラリー情報参照
  146.   #--------------------------------------------------------------------------
  147.   def garally
  148.     @exgarally
  149.   end
  150. end
  151.  
  152.  
  153. #==============================================================================
  154. # ■ Game_ExGarally
  155. #==============================================================================
  156. class Game_ExGarally
  157.   attr_accessor :name   # ファイル名
  158.   attr_accessor :text   # 表示文字
  159.   attr_accessor :enable # 表示可否
  160.   #--------------------------------------------------------------------------
  161.   # ● オブジェクト初期化
  162.   #--------------------------------------------------------------------------
  163.   def initialize(file, enable=false)
  164.     @name   = file.name
  165.     @text   = file.text
  166.     @enable = enable
  167.   end
  168. end
  169.  
  170. #==============================================================================
  171. # ■ Game_ExGarallyList  : DataManager.garallyで参照可能
  172. #==============================================================================
  173. class Game_ExGarallyList
  174.   LIST = ExGarally::LIST
  175.   attr_accessor :enable
  176.   attr_reader   :size
  177.   #--------------------------------------------------------------------------
  178.   # ● オブジェクト初期化
  179.   #--------------------------------------------------------------------------
  180.   def initialize
  181.     clear
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● クリア
  185.   #--------------------------------------------------------------------------
  186.   def clear
  187.     @size = LIST.size
  188.     @data = {}
  189.     @enable = false
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 参照
  193.   #--------------------------------------------------------------------------
  194.   def [](id)
  195.     return nil if LIST[id].nil? and @data[id].nil?
  196.     return Game_ExGarally.new(LIST[id]) if @data[id].nil?
  197.     @data[id]
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 表示許可/禁止
  201.   #--------------------------------------------------------------------------
  202.   def []=(id, val)
  203.     return nil if LIST[id].nil? and @data[id].nil?
  204.     if val
  205.       @data[id] = Game_ExGarally.new(LIST[id]) if @data[id].nil?
  206.       @data[id].enable = true
  207.     elsif !@data[id].nil?
  208.       @data.delete(id)
  209.     end
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● リスト
  213.   #--------------------------------------------------------------------------
  214.   def list
  215.     (@data.keys+LIST.keys).uniq.sort.collect {|id| self.[](id) }
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 追加ギャラリー
  219.   #--------------------------------------------------------------------------
  220.   def push(id, name, enable=true)
  221.     @data[id] = Game_ExGarally.new(name, enable)
  222.     @size += 1 if LIST[id].nil?
  223.   end
  224. end
  225.  
  226.  
  227. #==============================================================================
  228. # ■ Sprite_ExGrlyPicture
  229. #==============================================================================
  230. class Sprite_ExGrlyPicture < Sprite
  231.   #--------------------------------------------------------------------------
  232.   # ● オブジェクト初期化
  233.   #--------------------------------------------------------------------------
  234.   def initialize(rect=Rect.new(0,0,Graphics.width,Graphics.height))
  235.     super(Viewport.new(rect))
  236.     viewport.z = 100
  237.     create_bitmap
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● オブジェクト解放
  241.   #--------------------------------------------------------------------------
  242.   def dispose
  243.     dispose_bitmap
  244.     super
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● ビットマップ生成
  248.   #--------------------------------------------------------------------------
  249.   def create_bitmap
  250.     self.bitmap = Bitmap.new(vw, vh)
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● ビットマップ下方
  254.   #--------------------------------------------------------------------------
  255.   def dispose_bitmap
  256.     self.bitmap.dispose
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● ピクチャ設定
  260.   #--------------------------------------------------------------------------
  261.   def picture(filename, enabled=true)
  262.     dispose_bitmap
  263.     if enabled
  264.       self.bitmap = Cache.picture(filename)
  265.     else
  266.       create_bitmap
  267.       self.bitmap.fill_rect(0,0,vw,vh,Color.new(0,0,0,160))
  268. #      self.bitmap.draw_text(0,0, vw, vh, filename, 1)
  269.     end
  270.     fit_screen
  271.     resize
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● ズーム倍率再設定
  275.   #--------------------------------------------------------------------------
  276.   def resize(r=Rect.new(0,0,vw,vh))
  277.     self.ox = bitmap.width  / 2
  278.     self.oy = bitmap.height / 2
  279.     self.x = r.width  / 2 + r.x
  280.     self.y = r.height / 2 + r.y
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 画面にフィットさせる
  284.   #--------------------------------------------------------------------------
  285.   def bwz;  (bitmap.width * zoom_x).truncate; end # ズーム後のbitmap幅
  286.   def bhz;  (bitmap.height* zoom_y).truncate; end # ズーム後のbitmap高さ
  287.   def vw;   viewport.rect.width;   end
  288.   def vh;   viewport.rect.height;  end
  289.   def fit_screen(w=vw, h=vh)
  290.     x_zoom = w * 1.0 / bitmap.width
  291.     y_zoom = h * 1.0 / bitmap.height
  292.     zoom = x_zoom < y_zoom ? x_zoom : y_zoom
  293.     self.zoom_x = self.zoom_y = zoom
  294.   end
  295. end
  296.  
  297.  
  298. #==============================================================================
  299. # ■ Sprite_ExGrlyPicture
  300. #==============================================================================
  301. class Sprite_ExGrlyPictFull < Sprite_ExGrlyPicture
  302.   #--------------------------------------------------------------------------
  303.   # ● オブジェクト初期化
  304.   #--------------------------------------------------------------------------
  305.   def initialize
  306.     super
  307.     hide.viewport.z = 200
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ● ウィンドウの表示
  311.   #--------------------------------------------------------------------------
  312.   def show
  313.     self.visible = true
  314.     self
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● ウィンドウの非表示
  318.   #--------------------------------------------------------------------------
  319.   def hide
  320.     self.visible = false
  321.     self
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● ピクチャ設定
  325.   #--------------------------------------------------------------------------
  326.   def picture(filename, enabled=true)
  327.     dispose_bitmap
  328.     b = Cache.picture(filename)
  329.     r = Rect.new(0, 0, b.width, b.height)
  330.     self.bitmap = Bitmap.new(r.width, r.height)
  331.     self.bitmap.stretch_blt(r, b, r)
  332.     fit_screen
  333.     resize
  334.   end
  335. end
  336.  
  337. #==============================================================================
  338. # ■ Grly_Thumbnail
  339. #==============================================================================
  340. class Grly_Thumbnail
  341.   attr_reader :item
  342.   attr_reader :rect
  343.   #--------------------------------------------------------------------------
  344.   # ● オブジェクト初期化
  345.   #--------------------------------------------------------------------------
  346.   def initialize(item, rect)
  347.     @item = item; @rect = rect
  348.   end
  349. end
  350.  
  351. #==============================================================================
  352. # ■ SpritesetExGrlyPictures
  353. #==============================================================================
  354. class SpritesetExGrlyPictures
  355.   #--------------------------------------------------------------------------
  356.   # ● オブジェクト初期化
  357.   #--------------------------------------------------------------------------
  358.   def initialize
  359.     @sprites = []
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ● オブジェクト解放
  363.   #--------------------------------------------------------------------------
  364.   def dispose
  365.     dispose_sprites
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● ピクチャスプライト生成
  369.   #--------------------------------------------------------------------------
  370.   def create_sprites(thumnails)
  371.     thumnails.each do |thm|
  372.       s = Sprite_ExGrlyPicture.new(thm.rect)
  373.       s.picture(thm.item.name, thm.item.enable)
  374.       @sprites.push(s)
  375.     end
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● ピクチャスプライト解放
  379.   #--------------------------------------------------------------------------
  380.   def dispose_sprites
  381.     @sprites.each { |s| s.dispose }
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ● ピクチャスプライト更新
  385.   #--------------------------------------------------------------------------
  386.   def update_sprites(thumnails)
  387.     dispose_sprites
  388.     create_sprites(thumnails)
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ● サムネイル矩形
  392.   #--------------------------------------------------------------------------
  393.   def thm_rect(i)
  394.     @sprites[i].nil? ? nil : @sprites[i].thm
  395.   end
  396. end
  397.  
  398.  
  399. #==============================================================================
  400. # ■ Window_GrlyPicture
  401. #==============================================================================
  402. class Window_GrlyPicture < Window_Selectable
  403.   attr_accessor :thum_sprites
  404.   #--------------------------------------------------------------------------
  405.   # ● オブジェクト初期化
  406.   #--------------------------------------------------------------------------
  407.   def initialize
  408.     @thum_sprites = nil
  409.     make_list
  410.     super(0, help_height, Graphics.width, Graphics.height-help_height)
  411.     activate
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● ヘルプウィンドウの高さ
  415.   #--------------------------------------------------------------------------
  416.   def help_height
  417.     fitting_height(ExGarally::HELP_LINES)
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 桁数の取得
  421.   #--------------------------------------------------------------------------
  422.   def col_max
  423.     return 3
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 横に項目が並ぶときの空白の幅を取得
  427.   #--------------------------------------------------------------------------
  428.   def spacing
  429.     return 16
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ● 項目数の取得
  433.   #--------------------------------------------------------------------------
  434.   def item_max
  435.     DataManager.garally.size
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 項目の高さを取得
  439.   #--------------------------------------------------------------------------
  440.   def item_height
  441.     (Graphics.height - help_height - standard_padding * 2) / 2
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ● 項目を描画する矩形の取得
  445.   #--------------------------------------------------------------------------
  446.   def item_rect(index)
  447.     rect = super(index)
  448.     thm  = calc_thm_rect
  449.     rect.x += (rect.width  - (thm.width  + 8)) / 2
  450.     rect.y += (rect.height - (thm.height + 8)) / 2
  451.     rect.width  = thm.width  + 8
  452.     rect.height = thm.height + 8
  453.     rect
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● サムネイル矩形計算
  457.   #--------------------------------------------------------------------------
  458.   def calc_thm_rect
  459.     r = Rect.new
  460.     r.width  = item_width  - 8
  461.     r.height = item_height - 8
  462.     if (Graphics.width  / r.width) > (Graphics.height / r.height)
  463.       r.height = r.width  * Graphics.height / Graphics.width
  464.     else
  465.       r.width  = r.height * Graphics.width  / Graphics.height
  466.     end
  467.     r
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● サムネイルの表示位置を取得
  471.   #--------------------------------------------------------------------------
  472.   def thum_rect(index)
  473.     r = item_rect_for_text(index)
  474.     r.x += self.x + standard_padding
  475.     r.y += self.y + standard_padding
  476.     r
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● 先頭行のindex
  480.   #--------------------------------------------------------------------------
  481.   def top_i
  482.     (top_row * col_max)
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ● 先頭行からの@index
  486.   #--------------------------------------------------------------------------
  487.   def top_cur_i
  488.     (@index - (top_row * col_max))
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ● サムネイルの表示位置を取得
  492.   #--------------------------------------------------------------------------
  493.   def thumnails
  494.     n = [page_item_max, item_max - top_i].min
  495.     idxs = []
  496.     n.times { |i| idxs.push(i) }
  497.     idxs.collect { |i| Grly_Thumbnail.new(@list[i+top_i], thum_rect(i)) }
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ● リスト生成
  501.   #--------------------------------------------------------------------------
  502.   def make_list
  503.     @list = DataManager.garally.list
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ● 選択中アイテム
  507.   #--------------------------------------------------------------------------
  508.   def item
  509.     @list[@index]
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ● 選択項目の有効状態を取得
  513.   #--------------------------------------------------------------------------
  514.   def current_item_enabled?
  515.     !item.nil? and item.enable
  516.   end
  517.   #--------------------------------------------------------------------------
  518.   # ● ヘルプテキスト更新
  519.   #--------------------------------------------------------------------------
  520.   def update_help
  521.     text = ((!item.nil? and item.enable) ? item.text : "")
  522.     @help_window.set_text(text)
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● カーソルの更新
  526.   #--------------------------------------------------------------------------
  527.   def update_cursor
  528.     super
  529.     @thum_sprites.update_sprites(thumnails) unless @thum_sprites.nil?
  530.   end
  531. end
  532.  
  533.  
  534.  
  535. #==============================================================================
  536. # ■ Scene_ExGarally
  537. #==============================================================================
  538. class Scene_ExGarally < Scene_Base
  539.   #--------------------------------------------------------------------------
  540.   # ● 開始処理
  541.   #--------------------------------------------------------------------------
  542.   def start
  543.     super
  544.     create_background
  545.     @help_window = Window_Help.new(ExGarally::HELP_LINES)
  546.     @thumset = SpritesetExGrlyPictures.new
  547.     @full_pict = Sprite_ExGrlyPictFull.new
  548.     create_list_window
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ● 終了処理
  552.   #--------------------------------------------------------------------------
  553.   def terminate
  554.     super
  555.     dispose_background
  556.     @thumset.dispose
  557.     @full_pict.dispose
  558.   end
  559.   #--------------------------------------------------------------------------
  560.   # ● 背景の作成
  561.   #--------------------------------------------------------------------------
  562.   def create_background
  563.     @background_sprite = Sprite.new
  564.     @background_sprite.bitmap = SceneManager.background_bitmap
  565.     @background_sprite.color.set(16, 16, 16, 128)
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ● 背景の解放
  569.   #--------------------------------------------------------------------------
  570.   def dispose_background
  571.     @background_sprite.dispose
  572.   end
  573.   #--------------------------------------------------------------------------
  574.   # ● ピクチャリストウィンドウ生成
  575.   #--------------------------------------------------------------------------
  576.   def create_list_window
  577.     @list_window = Window_GrlyPicture.new
  578.     @list_window.thum_sprites = @thumset
  579.     @list_window.help_window = @help_window
  580.     set_full_handler
  581.     @list_window.select(0)
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # ● フルスクリーン化用のハンドラ登録
  585.   #--------------------------------------------------------------------------
  586.   def set_full_handler
  587.     @list_window.set_handler(:ok,     method(:cmd_full))
  588.     @list_window.set_handler(:cancel, method(:return_scene))
  589.   end
  590.   #--------------------------------------------------------------------------
  591.   # ● サムネイルリスト用のハンドラ登録
  592.   #--------------------------------------------------------------------------
  593.   def set_thum_handler
  594.     @list_window.set_handler(:ok,     method(:cmd_thum))
  595.     @list_window.set_handler(:cancel, method(:cmd_thum))
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● フルスクリーン化
  599.   #--------------------------------------------------------------------------
  600.   def cmd_full
  601.     Graphics.freeze
  602.     @full_pict.show.picture(@list_window.item.name)
  603.     perform_transition
  604.     set_thum_handler
  605.     @list_window.activate.cursor_fix = true
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● サムネイル化
  609.   #--------------------------------------------------------------------------
  610.   def cmd_thum
  611.     Graphics.freeze
  612.     @full_pict.hide
  613.     perform_transition
  614.     set_full_handler
  615.     @list_window.activate.cursor_fix = false
  616.   end
  617. end
  618.  
  619.  
  620.  
  621.  
  622.  
  623. #module Title
  624.   # 拡張コマンドへ追加
  625.   #EXCMD[3] = ["画廊", Scene_ExGarally, :garally]
  626.  
  627.   # コマンド画像ファイル(Graphics/System)
  628.   # CMD_GRPHIC[コマンド番号] [画像1, 画像2]
  629.   #CMD_GRPHIC[3] = ["garally",  "garally_s"]
  630. #end
  631.  
  632. #==============================================================================
  633. # ■ Scene_ExGarally
  634. #==============================================================================
  635. class Scene_ExGarally < Scene_Base
  636.   #--------------------------------------------------------------------------
  637.   # ● 呼び出し元のシーンへ戻る
  638.   #--------------------------------------------------------------------------
  639.   def return_scene
  640.     super
  641.     return unless SceneManager.scene_is?(Scene_Title)
  642.     SceneManager.scene.prepare(Title::Scene::S_TITLE, false,
  643.                                Title::CMD_BOX.index(4))
  644.   end
  645. end
  646.  
  647.  
  648. #==============================================================================
  649. # ■ Scene_Title
  650. #==============================================================================
  651. class Scene_Title < Scene_Base
  652.   #--------------------------------------------------------------------------
  653.   # ● メイン
  654.   #--------------------------------------------------------------------------
  655.   alias main_reload main
  656.   def main
  657.     DataManager.load_garally # ギャラリーのリロード
  658.     main_reload
  659.   end
  660. end

作者: Sion    时间: 2013-3-23 18:41
本帖最后由 Sion 于 2013-10-28 18:58 编辑
ayano2k 发表于 2013-3-20 16:34
感谢楼主的脚本,很好用~~
但是这个功能想知道该怎么设置??
  [[  1.3a: 代码小修改;


RUBY 代码复制
  1. =begin ========================================================================
  2.  
  3.   八方移动补丁 置于Sion_Mouse_System脚本下
  4.  
  5.   2013.10.28 v1.2 鼠标2.0+更新修正
  6.   2013.5.3 v1.1 修正斜向触发事件
  7.  
  8. =end #=========================================================================
  9.  
  10. class Game_Player
  11.   # ───────────────────────────────────────
  12.   #  † 八方移动
  13.   # ───────────────────────────────────────
  14.   def move_by_input
  15.     return if !movable? || $game_map.interpreter.running?
  16.     case Input.dir8
  17.     when 2,4,6,8; move_straight(Input.dir8)
  18.     when 1
  19.       if diagonal_passable?(x, y, 4, 2); move_diagonal(4, 2)
  20.       elsif passable?(x, y, 4); move_straight(4)
  21.       else; move_straight(2)
  22.       end
  23.     when 3
  24.       if diagonal_passable?(x, y, 6, 2); move_diagonal(6, 2)
  25.       elsif passable?(x, y, 6); move_straight(6)
  26.       else; move_straight(2)
  27.       end
  28.     when 7
  29.       if diagonal_passable?(x, y, 4, 8); move_diagonal(4, 8)
  30.       elsif passable?(x, y, 4); move_straight(4)
  31.       else; move_straight(8)
  32.       end
  33.     when 9
  34.       if diagonal_passable?(x, y, 6, 8); move_diagonal(6, 8)
  35.       elsif passable?(x, y, 6); move_straight(6)
  36.       else; move_straight(6)
  37.       end
  38.     else;   move_by_mouse
  39.     end
  40.   end
  41.   # ───────────────────────────────────────
  42.   #  † 鼠标八方移动
  43.   # ───────────────────────────────────────
  44.   def move_by_mouse
  45.     unless @mouse_move_path.empty? # 移动路线数组不为空则执行移动
  46.       dir = @mouse_move_path.shift
  47.       if passable?(x, y, dir) && !@mouse_move_path.empty?
  48.         if @mouse_move_path[0] == dir
  49.           move_straight(dir)
  50.         else
  51.           if @mouse_move_path.size == 1 &&
  52.               touch_event?(x, y, dir, @mouse_move_path[0])
  53.             move_straight(dir)
  54.           elsif dir == 4 || dir == 6
  55.             move_diagonal(dir, @mouse_move_path.shift)
  56.           else
  57.             move_diagonal(@mouse_move_path.shift, dir)
  58.           end
  59.         end
  60.       elsif @mouse_move_path.empty? # 判断是否是最后一步
  61.         x2 = $game_map.round_x_with_direction(x, dir)
  62.         y2 = $game_map.round_y_with_direction(y, dir)
  63.         move_straight(dir) unless dir.zero?
  64.         unless x == x2 && y == y2 # 如果移动失败,检查是否启动前方事件、上下载具
  65.           check_event_trigger_there([0,1,2])
  66.           get_on_off_vehicle unless $game_map.setup_starting_event
  67.         end
  68.         $mouse_move_sign.transparent = true if $mouse_move_sign.direction == 2
  69.         @mouse_dash = false
  70.       elsif @mouse_move_path[0].zero? # 目标点无法抵达,调整朝向→目标点
  71.         @mouse_move_path.shift
  72.         @direction = dir
  73.         @mouse_dash = false
  74.       else
  75.         draw_move_path
  76.       end
  77.     end
  78.   end
  79.   def touch_event?(x, y, dir, dir_)
  80.     x = $game_map.round_x_with_direction(
  81.       $game_map.round_x_with_direction(x, dir), dir_)
  82.     y = $game_map.round_y_with_direction(
  83.       $game_map.round_y_with_direction(y, dir), dir_)
  84.     if collide_with_events?(x, y)
  85.       return x, y
  86.     else
  87.       return nil, nil
  88.     end
  89.   end
  90.   # ───────────────────────────────────────
  91.   #  † 步行路径
  92.   # ───────────────────────────────────────
  93.   def draw_walk_path
  94.     # 准备绘制路径表格
  95.     sheet = Table.new($game_map.width, $game_map.height)
  96.     chase_path  = []
  97.     new_end_points = [@moveto_x, @moveto_y]
  98.     sheet[@moveto_x, @moveto_y] = 1
  99.     reach_point = false
  100.     step = 2
  101.     loop do #loop1 开始填充表格
  102.       draw_path = false
  103.       check_points = new_end_points
  104.       new_end_points = []
  105.       break if step > KsOfSion::Break_Steps &&
  106.                !Input.press?(KsOfSion::Find_Path_Key)
  107.       loop do #loop3 从终点开始反向填充
  108.         point_x = check_points.shift
  109.         break if point_x == nil
  110.         point_y = check_points.shift
  111.         # 判断路径是否连通
  112.         if point_x == x && point_y == y
  113.           reach_point = true; break; end
  114.         # 以需要抵达该点的步数填充路径表格 #
  115.         left_x  = $game_map.round_x(point_x - 1)
  116.         right_x = $game_map.round_x(point_x + 1)
  117.         up_y    = $game_map.round_y(point_y - 1)
  118.         down_y  = $game_map.round_y(point_y + 1)
  119.         if sheet[left_x, point_y] == 0              &&
  120.            $game_map.passable?(left_x, point_y, 6)  &&
  121.            !collide_with_events?(left_x, point_y)   &&
  122.            $game_map.passable?(point_x, point_y, 4) &&
  123.            !collide_with_vehicles?(left_x, point_y) #judge_end
  124.           sheet[left_x, point_y] = step
  125.           draw_path = true
  126.           new_end_points.push(left_x, point_y)
  127.         end
  128.         if sheet[right_x, point_y] == 0             &&
  129.            $game_map.passable?(right_x, point_y, 4) &&
  130.            !collide_with_events?(right_x, point_y)  &&
  131.            $game_map.passable?(point_x, point_y, 6) &&
  132.            !collide_with_vehicles?(right_x, point_y)#judge_end
  133.           sheet[right_x, point_y] = step
  134.           draw_path = true
  135.           new_end_points.push(right_x, point_y)
  136.         end
  137.         if sheet[point_x, up_y] == 0                &&
  138.            $game_map.passable?(point_x, up_y, 2)    &&
  139.            !collide_with_events?(point_x, up_y)     &&
  140.            $game_map.passable?(point_x, point_y, 8) &&
  141.            !collide_with_vehicles?(point_x, up_y)   #judge_end
  142.           sheet[point_x, up_y] = step
  143.           draw_path = true
  144.           new_end_points.push(point_x, up_y)
  145.         end
  146.         if sheet[point_x, down_y] == 0              &&
  147.            $game_map.passable?(point_x, down_y, 8)  &&
  148.            !collide_with_events?(point_x, down_y)   &&
  149.            $game_map.passable?(point_x, point_y, 2) &&
  150.            !collide_with_vehicles?(point_x, down_y) #judge_end
  151.           sheet[point_x, down_y] = step
  152.           draw_path = true
  153.           new_end_points.push(point_x, down_y)
  154.         end
  155.       end#endOfLoop3
  156.       break if !draw_path || reach_point
  157.       step += 1
  158.     end #endOfLoop1 路径表格填充完毕
  159.     $mouse_move_sign.transparent = false
  160.     # 判断指定地点能否抵达
  161.     if reach_point
  162.       $mouse_move_sign.direction = 2
  163.     else
  164.       return not_reach_point
  165.     end
  166.     # 根据路径表格绘制最短移动路径(正向)
  167.     step -= 1 # 因为需要再填充一次才能判定是否抵达
  168.     point_x, point_y = x, y
  169.     for i in 2..step
  170.     step -= 1
  171.     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs
  172.       if    sheet[point_x, $game_map.round_y(point_y + 1)] == step          &&
  173.             $game_map.passable?(point_x, $game_map.round_y(point_y + 1), 8) &&
  174.             $game_map.passable?(point_x, point_y, 2)                #judge_end
  175.         chase_path.push(2)
  176.         point_y = $game_map.round_y(point_y + 1)
  177.       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step          &&
  178.             $game_map.passable?(point_x, $game_map.round_y(point_y - 1), 2) &&
  179.             $game_map.passable?(point_x, point_y, 8)                #judge_end
  180.         chase_path.push(8)
  181.         point_y = $game_map.round_y(point_y - 1)
  182.       elsif sheet[$game_map.round_x(point_x - 1), point_y] == step          &&
  183.             $game_map.passable?($game_map.round_x(point_x - 1), point_y, 6) &&
  184.             $game_map.passable?(point_x, point_y, 4)                #judge_end
  185.         chase_path.push(4)
  186.         point_x = $game_map.round_x(point_x - 1)
  187.       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step          &&
  188.             $game_map.passable?($game_map.round_x(point_x + 1), point_y, 4) &&
  189.             $game_map.passable?(point_x, point_y, 6)                #judge_end
  190.         chase_path.push(6)
  191.         point_x = $game_map.round_x(point_x + 1)
  192.       end
  193.     else
  194.       if    sheet[$game_map.round_x(point_x - 1), point_y] == step          &&
  195.             $game_map.passable?($game_map.round_x(point_x - 1), point_y, 6) &&
  196.             $game_map.passable?(point_x, point_y, 4)                #judge_end
  197.         chase_path.push(4)
  198.         point_x = $game_map.round_x(point_x - 1)
  199.       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step          &&
  200.             $game_map.passable?($game_map.round_x(point_x + 1), point_y, 4) &&
  201.             $game_map.passable?(point_x, point_y, 6)                #judge_end
  202.         chase_path.push(6)
  203.         point_x = $game_map.round_x(point_x + 1)
  204.       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == step          &&
  205.             $game_map.passable?(point_x, $game_map.round_y(point_y + 1), 8) &&
  206.             $game_map.passable?(point_x, point_y, 2)                #judge_end
  207.         chase_path.push(2)
  208.         point_y = $game_map.round_y(point_y + 1)
  209.       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step          &&
  210.             $game_map.passable?(point_x, $game_map.round_y(point_y - 1), 2) &&
  211.             $game_map.passable?(point_x, point_y, 8)                #judge_end
  212.         chase_path.push(8)
  213.         point_y = $game_map.round_y(point_y - 1)
  214.       end
  215.     end
  216.     end#endOfForLoop
  217.     return chase_path
  218.   end#walk
  219.   # ───────────────────────────────────────
  220.   #  † boat路径
  221.   # ───────────────────────────────────────
  222.   def draw_boat_path
  223.     # 准备绘制路径表格
  224.     sheet = Table.new($game_map.width, $game_map.height)
  225.     chase_path  = []
  226.     new_end_points = [@moveto_x, @moveto_y]
  227.     sheet[@moveto_x, @moveto_y] = 1
  228.     reach_point = false
  229.     step = 2
  230.     loop do #loop1 开始填充表格
  231.       draw_path = false
  232.       check_points = new_end_points
  233.       new_end_points = []
  234.       break if step > KsOfSion::Break_Steps &&
  235.                !Input.press?(KsOfSion::Find_Path_Key)
  236.       loop do #loop3 从终点开始反向填充
  237.         point_x = check_points.shift
  238.         break if point_x == nil
  239.         point_y = check_points.shift
  240.         left_x  = $game_map.round_x(point_x - 1)
  241.         right_x = $game_map.round_x(point_x + 1)
  242.         up_y    = $game_map.round_y(point_y - 1)
  243.         down_y  = $game_map.round_y(point_y + 1)
  244.         # 判断路径是否连通
  245.         if left_x == x && point_y == y
  246.           reach_point = true; break
  247.         elsif right_x == x && point_y == y
  248.           reach_point = true; break
  249.         elsif point_x == x && up_y == y
  250.           reach_point = true; break
  251.         elsif point_x == x && down_y == y
  252.           reach_point = true; break
  253.         end
  254.         # 以需要抵达该点的步数填充路径表格 #
  255.         if sheet[left_x, point_y] == 0                &&
  256.            $game_map.boat_passable?(left_x, point_y)  &&
  257.            !collide_with_events?(left_x, point_y)     &&
  258.            !collide_with_vehicles?(left_x, point_y)   #judge_end
  259.           sheet[left_x, point_y] = step
  260.           draw_path = true
  261.           new_end_points.push(left_x, point_y)
  262.         end
  263.         if sheet[right_x, point_y] == 0               &&
  264.            $game_map.boat_passable?(right_x, point_y) &&
  265.            !collide_with_events?(right_x, point_y)    &&
  266.            !collide_with_vehicles?(right_x, point_y)  #judge_end
  267.           sheet[right_x, point_y] = step
  268.           draw_path = true
  269.           new_end_points.push(right_x, point_y)
  270.         end
  271.         if sheet[point_x, up_y] == 0                  &&
  272.            $game_map.boat_passable?(point_x, up_y)    &&
  273.            !collide_with_events?(point_x, up_y)       &&
  274.            !collide_with_vehicles?(point_x, up_y)     #judge_end
  275.           sheet[point_x, up_y] = step
  276.           draw_path = true
  277.           new_end_points.push(point_x, up_y)
  278.         end
  279.         if sheet[point_x, down_y] == 0                &&
  280.            $game_map.boat_passable?(point_x, down_y)  &&
  281.            !collide_with_events?(point_x, down_y)     &&
  282.            !collide_with_vehicles?(point_x, down_y)   #judge_end
  283.           sheet[point_x, down_y] = step
  284.           draw_path = true
  285.           new_end_points.push(point_x, down_y)
  286.         end
  287.       end#endOfLoop3
  288.       break if !draw_path || reach_point
  289.       step += 1
  290.     end #endOfLoop1 路径表格填充完毕
  291.     $mouse_move_sign.transparent = false
  292.     # 判断指定地点能否抵达
  293.     if reach_point
  294.       $mouse_move_sign.direction = 2
  295.     else
  296.       return not_reach_point
  297.     end
  298.     # 根据路径表格绘制最短移动路径(正向)
  299.     point_x, point_y = x, y
  300.     for i in 2..step # forLoop
  301.     step -= 1
  302.     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs
  303.       if    sheet[point_x, $game_map.round_y(point_y + 1)] == step
  304.         chase_path.push(2)
  305.         point_y = $game_map.round_y(point_y + 1)
  306.       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step
  307.         chase_path.push(8)
  308.         point_y = $game_map.round_y(point_y - 1)
  309.       elsif sheet[$game_map.round_x(point_x - 1), point_y] == step
  310.         chase_path.push(4)
  311.         point_x = $game_map.round_x(point_x - 1)
  312.       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step
  313.         chase_path.push(6)
  314.         point_x = $game_map.round_x(point_x + 1)
  315.       end
  316.     else
  317.       if    sheet[$game_map.round_x(point_x - 1), point_y] == step
  318.         chase_path.push(4)
  319.         point_x = $game_map.round_x(point_x - 1)
  320.       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step
  321.         chase_path.push(6)
  322.         point_x = $game_map.round_x(point_x + 1)
  323.       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == step
  324.         chase_path.push(2)
  325.         point_y = $game_map.round_y(point_y + 1)
  326.       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step
  327.         chase_path.push(8)
  328.         point_y = $game_map.round_y(point_y - 1)
  329.       end
  330.     end
  331.     end #endOfForLoop
  332.     # 如果指定点无法抵达或者登陆
  333.     return not_reach_point unless landable?(@moveto_x, @moveto_y, chase_path)
  334.     return chase_path
  335.   end#boat
  336.   # ───────────────────────────────────────
  337.   #  † ship路径
  338.   # ───────────────────────────────────────
  339.   def draw_ship_path
  340.     # 准备绘制路径表格
  341.     sheet = Table.new($game_map.width, $game_map.height)
  342.     chase_path  = []
  343.     new_end_points = [@moveto_x, @moveto_y]
  344.     sheet[@moveto_x, @moveto_y] = 1
  345.     reach_point = false
  346.     step = 2
  347.     loop do #loop1 开始填充表格
  348.       draw_path = false
  349.       check_points = new_end_points
  350.       new_end_points = []
  351.       break if step > KsOfSion::Break_Steps &&
  352.                !Input.press?(KsOfSion::Find_Path_Key)
  353.       loop do #loop3 从终点开始反向填充
  354.         point_x = check_points.shift
  355.         break if point_x == nil
  356.         point_y = check_points.shift
  357.         left_x  = $game_map.round_x(point_x - 1)
  358.         right_x = $game_map.round_x(point_x + 1)
  359.         up_y    = $game_map.round_y(point_y - 1)
  360.         down_y  = $game_map.round_y(point_y + 1)
  361.         # 判断路径是否连通
  362.         if left_x == x && point_y == y
  363.           reach_point = true; break
  364.         elsif right_x == x && point_y == y
  365.           reach_point = true; break
  366.         elsif point_x == x && up_y == y
  367.           reach_point = true; break
  368.         elsif point_x == x && down_y == y
  369.           reach_point = true; break
  370.         end
  371.         # 以需要抵达该点的步数填充路径表格 #
  372.         if sheet[left_x, point_y] == 0                &&
  373.            $game_map.ship_passable?(left_x, point_y)  &&
  374.            !collide_with_events?(left_x, point_y)     &&
  375.            !collide_with_vehicles?(left_x, point_y)   #judge_end
  376.           sheet[left_x, point_y] = step
  377.           draw_path = true
  378.           new_end_points.push(left_x, point_y)
  379.         end
  380.         if sheet[right_x, point_y] == 0               &&
  381.            $game_map.ship_passable?(right_x, point_y) &&
  382.            !collide_with_events?(right_x, point_y)    &&
  383.            !collide_with_vehicles?(right_x, point_y)  #judge_end
  384.           sheet[right_x, point_y] = step
  385.           draw_path = true
  386.           new_end_points.push(right_x, point_y)
  387.         end
  388.         if sheet[point_x, up_y] == 0                  &&
  389.            $game_map.ship_passable?(point_x, up_y)    &&
  390.            !collide_with_events?(point_x, up_y)       &&
  391.            !collide_with_vehicles?(point_x, up_y)     #judge_end
  392.           sheet[point_x, up_y] = step
  393.           draw_path = true
  394.           new_end_points.push(point_x, up_y)
  395.         end
  396.         if sheet[point_x, down_y] == 0                &&
  397.            $game_map.ship_passable?(point_x, down_y)  &&
  398.            !collide_with_events?(point_x, down_y)     &&
  399.            !collide_with_vehicles?(point_x, down_y)   #judge_end
  400.           sheet[point_x, down_y] = step
  401.           draw_path = true
  402.           new_end_points.push(point_x, down_y)
  403.         end
  404.       end#endOfLoop3
  405.       break if !draw_path || reach_point
  406.       step += 1
  407.     end #endOfLoop1 路径表格填充完毕
  408.     $mouse_move_sign.transparent = false
  409.     # 判断指定地点能否抵达
  410.     if reach_point
  411.       $mouse_move_sign.direction = 2
  412.     else
  413.       not_reach_point
  414.       return
  415.     end
  416.     # 根据路径表格绘制最短移动路径(正向)
  417.     point_x, point_y = x, y
  418.     for i in 2..step
  419.     step -= 1
  420.     if (@moveto_x - point_x).abs < (@moveto_y - point_y).abs
  421.       if    sheet[point_x, $game_map.round_y(point_y + 1)] == step
  422.         chase_path.push(2)
  423.         point_y = $game_map.round_y(point_y + 1)
  424.       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step
  425.         chase_path.push(8)
  426.         point_y = $game_map.round_y(point_y - 1)
  427.       elsif sheet[$game_map.round_x(point_x - 1), point_y] == step
  428.         chase_path.push(4)
  429.         point_x = $game_map.round_x(point_x - 1)
  430.       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step
  431.         chase_path.push(6)
  432.         point_x = $game_map.round_x(point_x + 1)
  433.       end
  434.     else
  435.       if    sheet[$game_map.round_x(point_x - 1), point_y] == step
  436.         chase_path.push(4)
  437.         point_x = $game_map.round_x(point_x - 1)
  438.       elsif sheet[$game_map.round_x(point_x + 1), point_y] == step
  439.         chase_path.push(6)
  440.         point_x = $game_map.round_x(point_x + 1)
  441.       elsif sheet[point_x, $game_map.round_y(point_y + 1)] == step
  442.         chase_path.push(2)
  443.         point_y = $game_map.round_y(point_y + 1)
  444.       elsif sheet[point_x, $game_map.round_y(point_y - 1)] == step
  445.         chase_path.push(8)
  446.         point_y = $game_map.round_y(point_y - 1)
  447.       end
  448.     end
  449.     end #endOfForLoop
  450.     # 如果指定点无法抵达或者登陆
  451.     return not_reach_point unless landable?(@moveto_x, @moveto_y, chase_path)
  452.     return chase_path
  453.   end#ship
  454. end

作者: tyq4590    时间: 2013-3-25 10:49
Sion 发表于 2013-3-23 22:41
8方移动补丁,不需要原来那个了,自己写了个。

发生冲突的脚本我补在28L了,麻烦抽空帮我看看是什么问题吧。多谢了!
作者: tyq4590    时间: 2013-3-25 18:37
tyq4590 发表于 2013-3-25 14:49
发生冲突的脚本我补在28L了,麻烦抽空帮我看看是什么问题吧。多谢了!

1.Graphics\Pictures\里放入和‘module ExGarally’下设定的文件名相同的图片(放一张就可以测试了),比如:
  1  => GFile.new("BlueSky", "123"), 然后在Graphics\Pictures\放一个叫"BlueSky"的图片

2.在事件里添加脚本:DataManager.garally[1] = true 来解锁画廊里的1号图片

3.在事件里添加脚本:SceneManager.call(Scene_ExGarally)来打开画廊(这个时候应该可以看到第一张图片"BlueSky"了,然后用鼠标点该图片会打开大图,就是这个时候会报错跳出)
作者: tyq4590    时间: 2013-3-27 11:06
tyq4590 发表于 2013-3-25 22:37
1.Graphics\Pictures\里放入和‘module ExGarally’下设定的文件名相同的图片(放一张就可以测试了),比 ...

多谢LZ花时间帮我研究画廊脚本冲突的问题!我刚刚下了1.3f并且在一个纯净的新建工程上测试了一下,结果还是会在画廊脚本报错跳出(提示的问题和之前一模一样,还是‘cursor_fix’)。我试了把全鼠标放在画廊上面,也试着放在画廊下面,不过运行起来没有任何区别。不知道是否是我还有哪里操作有问题?
作者: 神秘来客3    时间: 2013-3-29 19:22
呃~话说用了这脚本之后如果按下xxx的……
作者: 神秘来客3    时间: 2013-3-29 19:33
嗯……用了这脚本鼠标移出游戏界面外之后就会没掉,也就是说用了这脚本就不能操作其它的东东,那么如果在不能撤退的战斗中玩家想退出或者玩家想边玩游戏边弄其它东东的话就……那样可能引起玩家的反感啊。。。而且用了这脚本以后推箱子就……
作者: 神秘来客3    时间: 2013-3-29 19:37
另外有时候明明可以走到的地方因为走远了屏幕内没有通过那边的路但那条路的确存在时就会无法过去了-_-
作者: 神秘来客3    时间: 2013-3-29 19:57
我反馈的貌似不是BUG……而是……不足之处
作者: 木下世葉    时间: 2013-3-29 20:43
好赞顶!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!{:2_284:}
作者: 黄濑凉太    时间: 2013-4-2 16:18
不能强制退出这点希望楼主大人改善一下
作者: z963904783    时间: 2013-4-4 22:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: tyq4590    时间: 2013-4-6 19:26
辛苦了!不知道鼠标操作的那个8方行走补丁是否可以考虑支持8方行走图?就是普遍使用的行走图+“_8D”来显示8方向的那个功能?

这个是铅笔写的键盘操作的8D行走图脚本,希望Sion可以参考一下:

RUBY 代码复制
  1. #===============================================================================
  2. #  八方向行走
  3. #    by:铅笔描绘的思念
  4. #    在Characters里添加八方向行走图(命名规范:在四方向上的基础上+_8D)
  5. #    行走动画就为8方向的。否则就会原4方向的代替8方向的。
  6. #
  7. #    八方向:数字键盘方向对应的数字
  8. #     7   8   9
  9. #      ↖ ↑ ↗
  10. #     4← 0 →6
  11. #      ↙ ↓ ↘
  12. #     1   2   3
  13. #===============================================================================
  14. #==============================================================================
  15. # ■ Game_Player
  16. #==============================================================================
  17. class Game_Player < Game_Character
  18.   #--------------------------------------------------------------------------
  19.   # ● 八方向移动
  20.   #    d    :1、3、7、9 对应小键盘的四个方向
  21.   #--------------------------------------------------------------------------
  22.   def move_eight_dir(d)
  23.     move_diagonal(d + 3,2) if d == 1 || d == 3
  24.     move_diagonal(d - 3,8) if d == 7 || d == 9
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 八方向按键
  28.   #--------------------------------------------------------------------------
  29.   def move_by_input
  30.     return if !movable? || $game_map.interpreter.running?
  31.     case Input.dir8
  32.      when 1,3,7,9;  move_eight_dir(Input.dir8)
  33.      when 2,4,6,8;  move_straight(Input.dir4)
  34.     end
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 斜向移动
  38.   #     horz : 横向(4 or 6)
  39.   #     vert : 纵向(2 or 8)
  40.   #--------------------------------------------------------------------------
  41.   def move_diagonal(horz, vert)
  42.     @followers.move if diagonal_passable?(@x, @y, horz, vert)
  43.     @move_succeed = diagonal_passable?(x, y, horz, vert)
  44.     last_steps = $game_party.steps
  45.     if @move_succeed
  46.       @x = $game_map.round_x_with_direction(@x, horz)
  47.       @y = $game_map.round_y_with_direction(@y, vert)
  48.       @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))
  49.       @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))
  50.       increase_steps
  51.       # 八方向移动正确步数计算
  52.       if $game_party.steps - last_steps == 2
  53.         $game_party.decrease_steps
  54.       end
  55.     end
  56.     set_direction(2) if horz == 4 && vert == 2
  57.     set_direction(4) if horz == 4 && vert == 8
  58.     set_direction(6) if horz == 6 && vert == 2
  59.     set_direction(8) if horz == 6 && vert == 8
  60.   end
  61. end
  62. #==============================================================================
  63. # ■ Game_Party
  64. #==============================================================================
  65. class Game_Party < Game_Unit
  66.   def decrease_steps
  67.     @steps -= 1
  68.   end
  69. end
  70. #==============================================================================
  71. # ■ Sprite_Character
  72. #==============================================================================
  73. class Sprite_Character < Sprite_Base
  74.   #--------------------------------------------------------------------------
  75.   # ● 更新源位图(Source Bitmap)
  76.   #--------------------------------------------------------------------------
  77.   alias update_bitmap_8dir update_bitmap
  78.   def update_bitmap
  79.     update_bitmap_8dir
  80.     if @tile_id > 0            
  81.       @enable_slant = false
  82.       return
  83.     end
  84.     unless graphic_changed?
  85.      @enable_slant = true
  86.    end
  87.  
  88.     begin
  89.       @character_name_slant = "#{@character_name}_8D"
  90.       Cache.character(@character_name_slant)  
  91.     rescue
  92.       @enable_slant = false
  93.     end
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 更新源矩形
  97.   #--------------------------------------------------------------------------
  98.   alias update_src_rect_8dir update_src_rect  
  99.   def update_src_rect
  100.     return if @tile_id > 0      
  101.     if @enable_slant && @character != $game_map.events
  102.       update_src_rect_for_slant
  103.     else
  104.       update_src_rect_8dir
  105.     end
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 更新斜方向传送矩形
  109.   #--------------------------------------------------------------------------
  110.   def update_src_rect_for_slant
  111.     index = @character.character_index
  112.     pattern = @character.pattern < 3 ? @character.pattern : 1
  113.     sx = (index % 4 * 3 + pattern) * @cw
  114.     case Input.dir8 % 2
  115.     when 0  # 上下左右
  116.       if @last_slant
  117.         self.bitmap = Cache.character(@character_name)
  118.         @last_slant = false
  119.       end
  120.     else   
  121.       unless @last_slant
  122.         self.bitmap = Cache.character(@character_name_slant)
  123.         @last_slant = true
  124.       end
  125.     end
  126.       sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  127.     self.src_rect.set(sx, sy, @cw, @ch)
  128.   end
  129. end

作者: 黄濑凉太    时间: 2013-4-7 15:45
鼠标的图标怎么变成弓箭了= =问问那个图标要怎么变更
作者: 黄濑凉太    时间: 2013-4-7 20:43
当NPC在柜台后面的时候,主角会绕着走过去NPC那里。。。。。。。。。求解决
作者: xuboy    时间: 2013-4-10 16:51
啊诺。。。范例包没配Cursor.png 这张例图哦?
作者: 曉磊    时间: 2013-4-19 16:18
大神啊,我对脚本一窍不通的,用起来很好的说!太感谢了!
只不过我自制的游戏事件开始画面中不好使,就是那种方向键按一下出现下一张图片什么的,哎呀,这可肿么办
作者: 曉磊    时间: 2013-4-19 16:24
这样或许可以,判定地图上是否有某张图片,如果有的话鼠标移动到上面会将图片发淡光轻微闪烁,然后如果点击的话进入游戏或者读取游戏,额..大神,可不可以加上这些呢?
作者: 千葉玖濑    时间: 2013-4-19 22:56
如果没有响应图片就不是很完整的说……嘛~不过很棒就是了~
作者: 曉磊    时间: 2013-4-20 10:20
曉磊 发表于 2013-4-19 16:24
这样或许可以,判定地图上是否有某张图片,如果有的话鼠标移动到上面会将图片发淡光轻微闪烁,然后如果点击 ...

好的{:2_270:} 希望能早日完成游戏,早日添加新功能,哈
作者: muyumuyulnny    时间: 2013-4-20 15:56
楼主您好,可以请问一下如何使一个事件的启动条件为鼠标移动到事件处就启动,而不需要点击鼠标来启动呢?
作者: Sion    时间: 2013-4-21 14:17
本帖最后由 Sion 于 2013-4-21 15:09 编辑

@曉磊@米酒獭酱@muyumuyulnny

这是区域响应的代码,因为时间比较紧,所以没有把它弄成傻瓜式的,需要大家自己动手设置了。
要使用它的话,预先在事件中执行脚本
  1. area_response(type, ox, oy, width, height, switch_id)
复制代码
参数规范:
---------------------------------------------------------------------
其中type是区域响应类型
type = 0:鼠标移动到屏幕对应区域后开启对应的开关(只执行一次)
type = 1:鼠标在屏幕对应区域按下按键后,对应的开关开启(只执行一次)
type = 2:鼠标移动到屏幕对应区域时开关开启,移动到区域外时开关关闭,并行的处理。如果需要关闭响应,在事件脚本中执行代码
  1. $area_responses.delete_if {|rsp| rsp.type == 2 }# 关闭全部类型为2的响应
复制代码
ox,oy  为区域左上角坐标 width,height 为区域宽度 switch_id为操作的公共开关id

例子:鼠标移动到屏幕左上角32*32区域内,按下鼠标左键,启动开关3(只响应一次)
  1. area_response(1, 0, 0, 32, 32, 3)
复制代码
---------------------------------------------------------------------
type = 3:鼠标移动到地图坐标指定的事件上,则启动该区域上的事件(只执行一次)
type = 4;鼠标移动到地图坐标指定的事件上,则启动该事件(可以反复触发)如果需要关闭响应,在事件脚本中执行代码
  1. $area_responses.delete_if {|rsp| rsp.type == 4 } # 关闭全部类型为4的响应
复制代码
例子:鼠标移动到地图坐标(0, 5) 时,启动位于该格子的事件
  1. area_response(4, 0, 5) #启动事件只使用3个参数
复制代码
---------------------------------------------------------------------

以下代码放到鼠标脚本之下
  1. ####泥煤的height
  2. # [url=home.php?mod=space&uid=291977]@height[/url] = height

  3. class Area_Response
  4.   attr_accessor :type
  5.   attr_reader :ox
  6.   attr_reader :oy
  7.   attr_reader :width
  8.   attr_reader :height
  9.   attr_reader :switch_id
  10.   def initialize(type, ox, oy, width = 32, height = 32, switch_id = nil)
  11.     @type = type
  12.     @ox = ox
  13.     @oy = oy
  14.     @width = width
  15.     @height = height
  16.     @switch_id = switch_id
  17.   end
  18. end

  19. $area_responses = []

  20. class Scene_Map
  21.   alias update_mouse_2013421 update_mouse_action
  22.   def update_mouse_action
  23.     update_area_response
  24.     update_mouse_2013421
  25.   end
  26.   def update_area_response
  27.     responses = $area_responses
  28.     responses.each {|response|
  29.       ox = response.ox
  30.       oy = response.oy
  31.       width = response.width
  32.       height = response.height
  33.       switch_id = response.switch_id
  34.       case response.type
  35.       when 0
  36.         if mouse_in_area?(ox, oy, width, height)
  37.           $game_switches[switch_id] = true
  38.           $area_responses.delete(response)
  39.         end
  40.       when 1
  41.         if mouse_in_area?(ox, oy, width, height) && Mouse.trigger?(0x01)
  42.           $game_switches[switch_id] = true
  43.           $area_responses.delete(response)
  44.         end
  45.       when 2
  46.         if mouse_in_area?(ox, oy, width, height)
  47.           $game_switches[switch_id] = true
  48.         else
  49.           $game_switches[switch_id] = false
  50.         end
  51.       when 3
  52.         if mouse_in_area?((ox - $game_map.display_x) * 32 ,
  53.             (oy - $game_map.display_y) * 32, width, height)
  54.           $game_map.events_xy(ox, oy).each {|event|
  55.           event.start
  56.           $area_responses.delete(response)
  57.           return
  58.           }
  59.         end
  60.       when 4
  61.         if mouse_in_area?((ox - $game_map.display_x) * 32,
  62.             (oy - $game_map.display_y) * 32, width, height)
  63.           $game_map.events_xy(ox, oy).each {|event|
  64.             event.start
  65.             return
  66.           }
  67.         end
  68.       end
  69.     }
  70.   end
  71.   def mouse_in_area?(ox, oy, width, height)
  72.     Mouse.mouse_x >= ox && Mouse.mouse_x <= ox + width &&
  73.     Mouse.mouse_y >= oy && Mouse.mouse_y <= oy + height
  74.   end
  75. end
  76. class Game_Interpreter
  77.   def area_response(*arg)
  78.     $area_responses.push(Area_Response.new(*arg))
  79.   end
  80. end
复制代码

作者: 千葉玖濑    时间: 2013-4-21 21:53
http://rpg.blue/thread-306819-1-1.html
这个是我移植的另一个鼠标系统的图片响应……能不能把乃的鼠标系统加上这个功能?
作者: 黑舞嗜    时间: 2013-4-25 15:03
非常棒的鼠标脚本~可惜不支持八方向,说实话鼠标不配合8方向走起路来真的很变扭....
作者: 潇灵可    时间: 2013-4-25 15:55
问一个问题,我试了这个脚本后,怎样才能将鼠标移动除去,去提一下窗口呢~
作者: 潇灵可    时间: 2013-4-25 15:57
另外,大神,有没有可以将DIR4改成WASD键盘的脚本呢?
作者: ayano2k    时间: 2013-4-25 18:01
本帖最后由 ayano2k 于 2013-4-25 18:14 编辑

52楼这句
>>>>问一个问题,我试了这个脚本后,""怎样才能将鼠标移动除去"",去""提一下窗口呢""~<<
他说的大概是像欧美的游戏一样
1.WSAD来控制上下左右移动
2.用鼠标来调查画面触发事件
这个可能需要额外关闭鼠标移动和增大区域判定来触发鼠标事件
区域判定49楼楼主就有放了
作者: 黑舞嗜    时间: 2013-4-25 20:59
楼主好人,不过不能弄搭配8方行走图的那种么...
作者: 潇灵可    时间: 2013-4-26 09:13
抱歉吶~ 我打错字了。我想说,我用了这个脚本后,
一旦打开游戏,无法移动视窗。比如我想把游戏提到左上角,或者右下角之类的。鼠标出不去。
作者: 潇灵可    时间: 2013-4-26 12:20
本帖最后由 潇灵可 于 2013-4-26 12:24 编辑

找到了,谢谢。好了。
作者: 黑舞嗜    时间: 2013-4-29 20:08
没法配合8方行走图的脚本啊...把def move_by_input 到下一个 end 还有它们之间的内容都删掉也不行啊
作者: Sion    时间: 2013-4-30 14:58
本帖最后由 Sion 于 2013-4-30 16:37 编辑
黑舞嗜 发表于 2013-4-29 20:08
没法配合8方行走图的脚本啊...把def move_by_input 到下一个 end 还有它们之间的内容都删掉也不行啊 ...


八方行走图补丁,鼠标八方移动补丁见29楼
  1. #===============================================================================
  2. #  八方向行走
  3. #    by:铅笔描绘的思念
  4. #    在Characters里添加八方向行走图(命名规范:在四方向上的基础上+_8D)
  5. #    行走动画就为8方向的。否则就会原4方向的代替8方向的。
  6. #
  7. #    八方向:数字键盘方向对应的数字
  8. #     7   8   9
  9. #      ↖ ↑ ↗
  10. #     4← 0 →6
  11. #      ↙ ↓ ↘
  12. #     1   2   3
  13. #
  14. #  2013.4.30 Edited by me
  15. #   
  16. #    各种bug修正 + 各种效率优化
  17. #    8d行走图需用.png格式
  18. #
  19. #    这个脚本可以独立正常工作
  20. #    注意:同鼠标脚本配合使用,需要置于·八方移动补丁·上方!
  21. #
  22. #===============================================================================

  23. class Game_Player
  24.   def move_by_input
  25.     return if !movable? || $game_map.interpreter.running?
  26.     case Input.dir8
  27.     when 2,4,6,8; move_straight(Input.dir8)
  28.     when 1; move_diagonal(4, 2)
  29.     when 3; move_diagonal(6, 2)
  30.     when 7; move_diagonal(4, 8)
  31.     when 9; move_diagonal(6, 8)
  32.     end
  33.   end
  34. end

  35. class Game_CharacterBase

  36.   def move_diagonal(horz, vert)
  37.     @move_succeed = diagonal_passable?(x, y, horz, vert)
  38.     if @move_succeed
  39.       @x = $game_map.round_x_with_direction(@x, horz)
  40.       @y = $game_map.round_y_with_direction(@y, vert)
  41.       @real_x = $game_map.x_with_direction(@x, reverse_dir(horz))
  42.       @real_y = $game_map.y_with_direction(@y, reverse_dir(vert))
  43.       increase_steps
  44.     end
  45.     if horz == 4
  46.       vert == 2 ? set_direction(1) : set_direction(7)
  47.     else
  48.       vert == 2 ? set_direction(3) : set_direction(9)
  49.     end
  50.   end
  51. end

  52. class Sprite_Character < Sprite_Base

  53.   def set_character_bitmap
  54.     if File.exist?("Graphics/Characters/#{@character_name}_8D.png")
  55.       @_8d = true
  56.       bitmap1 = Cache.character(@character_name)
  57.       bitmap2 = Cache.character(@character_name + "_8D")
  58.       width = bitmap1.width
  59.       height = bitmap1.height
  60.       rect = Rect.new(0, 0, width, height)
  61.       self.bitmap = Bitmap.new(width * 2, height * 2)
  62.       self.bitmap.blt(0, 0, bitmap1, rect)
  63.       self.bitmap.blt(width, 0, bitmap2, rect)
  64.       sign = @character_name[/^[\!\$]./]
  65.       if sign && sign.include?("$")
  66.         @cw = width / 3
  67.         @ch = height / 4
  68.       else
  69.         @cw = width / 12
  70.         @ch = height / 8
  71.       end
  72.       self.ox = @cw / 2
  73.       self.oy = @ch
  74.     else
  75.       self.bitmap = Cache.character(@character_name)
  76.       sign = @character_name[/^[\!\$]./]
  77.       if sign && sign.include?("$")
  78.         @cw = bitmap.width / 3
  79.         @ch = bitmap.height / 4
  80.       else
  81.         @cw = bitmap.width / 12
  82.         @ch = bitmap.height / 8
  83.       end
  84.       self.ox = @cw / 2
  85.       self.oy = @ch
  86.     end
  87.   end

  88.   def update_src_rect
  89.     return if @tile_id != 0
  90.     index = @character.character_index
  91.     pattern = @character.pattern < 3 ? @character.pattern : 1
  92.     sx = (index % 4 * 3 + pattern) * @cw
  93.     if @character.direction % 2 == 1
  94.       sx += self.bitmap.width / 2 if @_8d
  95.       row = case @character.direction
  96.       when 1; 0
  97.       when 3; 2
  98.       when 7; 1
  99.       when 9; 3
  100.       end
  101.       sy = (index / 4 * 4 + row) * @ch
  102.     else
  103.       sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
  104.     end
  105.     self.src_rect.set(sx, sy, @cw, @ch)
  106.   end
  107. end
复制代码

作者: 黑舞嗜    时间: 2013-4-30 15:33
Sion 发表于 2013-4-30 14:58
八方行走图补丁,鼠标八方移动补丁见29楼

98行报错...LZ自己试过么?
作者: 公牛大冒险    时间: 2013-5-1 14:23
本帖最后由 公牛大冒险 于 2013-5-5 20:53 编辑

楼主楼主能不能在游戏里把键盘功能屏蔽了……
作者: 黑舞嗜    时间: 2013-5-1 19:22
报告LZ...使用方向行走图脚本以后发现点击事件日过接近最后事件的位置在斜方的话事件不会触发...........上下左右没问题~
作者: 黑舞嗜    时间: 2013-5-3 13:09
汗~上面似乎没写清楚
就是说添加了8方向补丁和8方向行走图脚本以后,点击事件主角自动走到事件旁边的时候,如果是最终站位是在事件的斜面就无法触发事件,求LZ好人做到底,完善一下........
作者: 公牛大冒险    时间: 2013-5-5 20:53

楼主我来报错了 这个和图书馆里的技能冷却有冲突了
在 鼠标单击同一处时间过久 时就会报错……
这种情况偶尔出现……
作者: Mr.红茶    时间: 2013-5-18 18:11
本帖最后由 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

作废!!!


作者: Sion    时间: 2013-5-19 18:42
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
作者: hacklanbing    时间: 2013-5-20 13:35
过来支持一下 ,貌似好像少了一张图片素材!!
作者: Yophs    时间: 2013-6-2 16:24
战斗等操作会很卡。。求解决 @Sion
作者: ai5wei    时间: 2013-6-10 19:50
这个必须有~~~~学习了
作者: liminglun    时间: 2013-6-15 10:33
@sion
问下如何在事件分歧中判断“当鼠标点击时”
作者: good66    时间: 2013-6-20 14:31
樓主 我真的覺得你超強的!好長的程式碼  看了都想睡了xd
加油~剛剛套用了一下很好用耶{:2_287:}
我要繼續使用下去
作者: 331766133    时间: 2013-6-20 16:59
好一个鼠标操作,正需要这个呢。不知道效果好不好。
作者: 蓝焰。    时间: 2013-6-22 10:21
作者...
这么好的东西要卖贵点!!!!要卖2经验!!!或者你想卖多少卖多少!!反正我买过了~

作者: RPG.在    时间: 2013-6-28 20:38
厉害!支持一下!
作者: 倾灬城    时间: 2013-6-29 20:54
发现bug:使用了VA图书馆的截图存档脚本【http://rpg.blue/thread-217062-4-1.html】之后,点击继续游戏和存档之后会报错QUQ

搜狗截图13年06月29日2050_9.png (8.91 KB, 下载次数: 30)

错误信息

错误信息

作者: 平行线    时间: 2013-7-1 18:18
本帖最后由 平行线 于 2013-7-1 19:00 编辑

     脚本1123行错误,是怎么回事啊?   @sion
    unless @mouse_move_path.empty? # 移动路线数组不为空则执行移动
    帮忙调试下,我已经把Sion_Mouse_System放在新加脚本的最前面了。
作者: 平行线    时间: 2013-7-1 19:11
本帖最后由 平行线 于 2013-7-1 19:32 编辑
平行线 发表于 2013-7-1 18:18
脚本1123行错误,是怎么回事啊?   @sion
    unless @mouse_move_path.empty? # 移动路线数组不为空 ...


啊,我终于知道了,现在可以了。不用了,谢谢。
原来是存档的问题。
重大BUG:载入存档会出错。@Sion
作者: Ayahiyano    时间: 2013-7-8 15:22
本帖最后由 Ayahiyano 于 2013-7-8 16:37 编辑

版主,我用这个鼠标脚本,测试游戏的时候,事件会·自己飞起来,怎么会这样啊,

QQ图片20130707201449.jpg (6.41 KB, 下载次数: 26)

QQ图片20130707201449.jpg

Project1.rar

721.42 KB, 下载次数: 115


作者: ooii    时间: 2013-7-22 18:17
这个好这个好,现在鼠标用习惯了,用键盘真心不习惯啊
作者: 伪3D春哥    时间: 2013-7-24 13:03
尝试过用事件弄
但是over了
作者: A龙之翱翔A    时间: 2013-8-5 14:21
看看再说。
作者: david_ng223    时间: 2013-8-10 10:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: ~(daily)    时间: 2013-8-21 21:11
赶脚好强大的说~
作者: chd114    时间: 2013-8-22 16:20
加入你的脚本后我的鼠标没法离开游戏的边框了···我要截图怎么办?
作者: chd114    时间: 2013-8-22 16:23
我的意思是说···如何做到在运行游戏的时候就不是锁屏···
作者: 627759311    时间: 2013-8-28 11:45
鼠标要自己弄啊……
作者: 627759311    时间: 2013-8-28 17:49
黄濑凉太 发表于 2013-4-2 16:18
不能强制退出这点希望楼主大人改善一下

在脚本里ctrl+f搜索lock,相关的直接删去吧……感觉锁定在窗口内挺鸡肋的。不想的话可以在脚本一开始设定各种变量的时候有一个含lock的变量(忘了……),旁边有注释说锁定在窗口的,设置为false就好了
作者: 我在孤岛等你    时间: 2013-8-28 18:19
鼠标党的福音啊……
作者: awu3000    时间: 2013-8-29 17:00
谢谢,我来试试
作者: xx2005531    时间: 2013-9-15 04:04
本帖最后由 xx2005531 于 2013-9-15 04:28 编辑

好像有一个问题,游戏加密输出后鼠标似乎就读不到了

能做的出滑鼠的输入元处理吗

左键单击 右键单击来响应事件吗
作者: 水壶里的阶梯    时间: 2013-9-18 00:11
之前下载了v1.3a版本的觉得不错,就是卷动地图的时候卷不过去,今天下载了v1.3f版本的(标题是1.3e但是貌似确实是到f了)但是不知道为什么在地图上怎么点,人物就是不动......(菜单里的存档什么的都能很正常的店)而且地图图块在点击的时候也是各种“××”(就是之前表示不能走的那个红叉)到底是什么问题呢......我应该没删什么东西吧......(悲伤的脚本盲)
作者: 新子酱    时间: 2013-9-21 15:15
有xp的吗?
作者: 水壶里的阶梯    时间: 2013-10-6 12:32
试试更新的,bug我会再补,前一阵太忙了


哦哦!马上去试新版本,楼主辛苦了!
作者: deng5254    时间: 2013-10-23 13:46
好久没回论坛 ,都更新了!
作者: 不会脚本    时间: 2013-10-25 19:16

v2.1的BUG,不知道怎么回事

之前v2.0a的BUG,好像是我把地图换成横向循环后出现的(没什么关系(?)

作者: TageDimo    时间: 2013-10-28 18:30
楼主辛苦~~
有个小问题,就是在加入 八方移动补丁 和 八方行走图 的脚本后,用鼠标点击可以到达的地方是没有问题,一旦点击一个不可到达的地方就会直接提示

要怎么解决呢~~非常感谢楼主

作者: TageDimo    时间: 2013-10-28 18:57
TageDimo 发表于 2013-10-28 18:30
楼主辛苦~~
有个小问题,就是在加入 八方移动补丁 和 八方行走图 的脚本后,用鼠标点击可以到达的地方是没 ...

忘了说,其他脚本都没有加就会出现这个情况
我是ACE
作者: 雷欧亦炫    时间: 2013-11-10 08:08
普通的自然实用,我顶。可是大概XAS又不能用吧......
作者: 怪蜀黍    时间: 2013-11-10 09:50
这个庞大而实用的工程,按标准评分:
[200]一般而言, 具有发布价值 的作品至少具有 200 exp 奖励。这里的发布价值是指作品至少具备一定的功能。
[30] 详细的介绍可以增加 20-100 exp 。
[50]可以提供图片的,如果提供具有可以体现作品功能的图片可以增加 15-80 exp 。
[200]可以提供工程的,如果提供具有可以体现作品功能的工程可以增加 30-250 exp 。
[100]具备多个版本的兼容的可以增加 80-120 exp 。
[40]具备一定的与其他脚本的兼容能力的可以增加 10-50 exp 。
[100]具备新颖、让人耳目一新的题材的可以增加 50-300 exp 。
[0]详细的注释,简洁的语法,方便让其他会员学习的可以增加 80-200 exp 。
[1500]规模比较巨大、完整的系统工程可以增加 500-3000 exp 。
[0]为作品提供自己制作的素材的可以增加 200-500 exp 。

总计:2220 = 1好人卡 + 1970糖
作者: longshili    时间: 2013-11-12 22:43
本帖最后由 longshili 于 2013-11-12 22:44 编辑

鼠标直接选择敌人补丁. 测试暂时没有发现问题。
不过,希望加入能够同样直接选择队友的功能,这样技能和物品的使用就方便多啦
另外和以下光标脚本冲突,希望能同时使用,或者直接加入光标功能就完美啦
  1. #==============================================================================
  2. # +++ MOG - Battle Cursor (1.0) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # http://www.atelier-rgss.com/
  6. #==============================================================================
  7. # Sistema de cursor animado de batalha nos sprites dos battlers.
  8. #==============================================================================
  9. # Arquivo necessário. (Graphics/System)
  10. #
  11. # Battle_Cursor.png
  12. #
  13. #==============================================================================

  14. #==============================================================================
  15. # ■ CURSOR SETTING
  16. #==============================================================================
  17. module MOG_BATTLE_CURSOR
  18.   #Definição da posição do cursor em relação ao alvo.
  19.   CURSOR_POSITION = [-45, 8]
  20.   #Definição da posição do nome do alvo.
  21.   CURSOR_NAME_POSITION = [-10, 35]
  22.   #Ativar efeito deslizar.
  23.   CURSOR_SLIDE_EFFECT = true
  24.   #Ativar animação de levitação.
  25.   CURSOR_FLOAT_EFFECT = true
  26.   #Definição da prioridade do cursor.
  27.   CURSOR_Z = 0
  28.   ACTOR_POSITION = [[435,180],[455,210],[475,240],[495,270]]
  29. end

  30. #==============================================================================
  31. # ■ Game Temp
  32. #==============================================================================
  33. class Game_Temp
  34.   
  35.   attr_accessor :battle_cursor
  36.   
  37.   #--------------------------------------------------------------------------
  38.   # ● Initialize
  39.   #--------------------------------------------------------------------------  
  40.   alias mog_battle_cursor_initialize initialize
  41.   def initialize
  42.       @battle_cursor = [0,0,false,""]
  43.       mog_battle_cursor_initialize
  44.   end  
  45.   
  46. end

  47. #==============================================================================
  48. # ■ Spriteset Battle Cursor
  49. #==============================================================================
  50. class Sprite_Battle_Cursor < Sprite
  51.   include MOG_BATTLE_CURSOR
  52.   
  53.   #--------------------------------------------------------------------------
  54.   # ● Initialize
  55.   #--------------------------------------------------------------------------        
  56.   def initialize(viewport = nil)
  57.       super(viewport)
  58.       $game_temp.battle_cursor = [0,0,false,""]
  59.       self.bitmap = Cache.system("Battle_Cursor")
  60.       self.visible = $game_temp.battle_cursor[2]
  61.       self.z = CURSOR_Z
  62.       self.z = 10 if $mog_rgss3_battle_hud != nil
  63.       @cursor_name = Sprite.new
  64.       @cursor_name.bitmap = Bitmap.new(120,32)
  65.       @cursor_name.z = self.z + 1
  66.       @cursor_name.bitmap.font.size = 16
  67.       @cursor_name_enemy = $game_temp.battle_cursor[3]
  68.       @cursor_name_position = [CURSOR_NAME_POSITION[0] ,CURSOR_NAME_POSITION[1]]
  69.       @cursor_float = [0,0]
  70.       refresh_cursor_name
  71.   end
  72.   
  73.   #--------------------------------------------------------------------------
  74.   # ● Dispose Sprite
  75.   #--------------------------------------------------------------------------         
  76.   def dispose
  77.       super
  78.       dispose_sprite_cursor
  79.   end
  80.   
  81.   #--------------------------------------------------------------------------
  82.   # ● Dispose Sprite Cursor
  83.   #--------------------------------------------------------------------------            
  84.   def dispose_sprite_cursor
  85.       if @cursor_name != nil
  86.          @cursor_name.bitmap.dispose
  87.          @cursor_name.dispose
  88.       end
  89.       self.bitmap.dispose
  90.   end

  91.   #--------------------------------------------------------------------------
  92.   # ● Refresh Cursor Name
  93.   #--------------------------------------------------------------------------              
  94.   def refresh_cursor_name
  95.       @cursor_name_enemy = $game_temp.battle_cursor[3]
  96.       @cursor_name.bitmap.clear
  97.       @cursor_name.bitmap.draw_text(0,0,120,32,@cursor_name_enemy.to_s,1)
  98.   end

  99.   #--------------------------------------------------------------------------
  100.   # ● Update
  101.   #--------------------------------------------------------------------------            
  102.   def update
  103.       super
  104.       update_sprite_cursor
  105.   end

  106.   #--------------------------------------------------------------------------
  107.   # ● Update Sprite Cursor
  108.   #--------------------------------------------------------------------------              
  109.   def update_sprite_cursor
  110.       update_visible
  111.       update_cursor_float_effect
  112.       execute_move(0,self.x,$game_temp.battle_cursor[0])
  113.       execute_move(1,self.y,$game_temp.battle_cursor[1] + @cursor_float[1])
  114.       update_sprite_name
  115.   end

  116.   #--------------------------------------------------------------------------
  117.   # ● Update Visible
  118.   #--------------------------------------------------------------------------               
  119.   def update_visible
  120.       self.visible = $game_temp.battle_cursor[2]
  121.       if !self.visible
  122.          self.x = -64
  123.          self.y = -64
  124.       end  
  125.   end  
  126.   
  127.   #--------------------------------------------------------------------------
  128.   # ● Update Sprite Name
  129.   #--------------------------------------------------------------------------               
  130.   def update_sprite_name
  131.       return if @cursor_name == nil
  132.       refresh_cursor_name  if @cursor_name_enemy != $game_temp.battle_cursor[3]
  133.       @cursor_name.x = self.x + @cursor_name_position[0]
  134.       @cursor_name.y = self.y + @cursor_name_position[1]
  135.       @cursor_name.opacity = self.opacity
  136.       @cursor_name.visible = self.visible
  137.   end  
  138.   
  139.   #--------------------------------------------------------------------------
  140.   # ● Update Cursor Float Effect
  141.   #--------------------------------------------------------------------------              
  142.   def update_cursor_float_effect
  143.       return if !CURSOR_FLOAT_EFFECT
  144.       @cursor_float[0] += 1
  145.       case @cursor_float[0]
  146.         when 0..20
  147.           @cursor_float[1] += 1
  148.         when 21..40
  149.           @cursor_float[1]  -= 1
  150.         else
  151.           @cursor_float[0] = 0
  152.           @cursor_float[1] = 0
  153.       end        
  154.   end  
  155.   
  156.   #--------------------------------------------------------------------------
  157.   # ● Execute Move
  158.   #--------------------------------------------------------------------------      
  159.   def execute_move(type,cp,np)
  160.       sp = 5 + ((cp - np).abs / 5)
  161.       if cp > np
  162.          cp -= sp
  163.          cp = np if cp < np
  164.       elsif cp < np
  165.          cp += sp
  166.          cp = np if cp > np
  167.       end     
  168.       self.x = cp if type == 0
  169.       self.y = cp if type == 1
  170.   end      
  171.   
  172. end

  173. #==============================================================================
  174. # ■ Spriteset Battle
  175. #==============================================================================
  176. class Spriteset_Battle
  177.   
  178.   #--------------------------------------------------------------------------
  179.   # ● Initialize
  180.   #--------------------------------------------------------------------------      
  181.   alias mog_battle_cursor_initialize initialize
  182.   def initialize
  183.       mog_battle_cursor_initialize
  184.       create_cursor
  185.   end
  186.   
  187.   #--------------------------------------------------------------------------
  188.   # ● Dispose
  189.   #--------------------------------------------------------------------------      
  190.   alias mog_battle_cursor_dispose dispose
  191.   def dispose
  192.       mog_battle_cursor_dispose
  193.       dispose_cursor
  194.   end
  195.   
  196.   #--------------------------------------------------------------------------
  197.   # ● Update
  198.   #--------------------------------------------------------------------------         
  199.   alias mog_battle_cursor_update update
  200.   def update
  201.       mog_battle_cursor_update
  202.       update_battle_cursor
  203.   end  
  204.   
  205.   #--------------------------------------------------------------------------
  206.   # ● Create_Cursor
  207.   #--------------------------------------------------------------------------        
  208.   def create_cursor
  209.       return if @battle_cursor != nil
  210.       @battle_cursor = Sprite_Battle_Cursor.new      
  211.   end
  212.   
  213.   #--------------------------------------------------------------------------
  214.   # ● Dispose Cursor
  215.   #--------------------------------------------------------------------------        
  216.   def dispose_cursor
  217.       return if @battle_cursor == nil
  218.       @battle_cursor.dispose
  219.   end  
  220.   
  221.   #--------------------------------------------------------------------------
  222.   # ● Update Battle Cursor
  223.   #--------------------------------------------------------------------------         
  224.   def update_battle_cursor
  225.       return if @battle_cursor == nil
  226.       @battle_cursor.update      
  227.   end
  228.   
  229. end

  230. #==============================================================================
  231. # ■ Battle Cursor Index
  232. #==============================================================================
  233. module Battle_Cursor_index
  234.   include MOG_BATTLE_CURSOR
  235.   #--------------------------------------------------------------------------
  236.   # ● Check Index Limit
  237.   #--------------------------------------------------------------------------      
  238.   def check_index_limit
  239.       self.index = 0 if self.index >= item_max
  240.       self.index = (item_max - 1) if self.index < 0
  241.   end      
  242.   
  243.   #--------------------------------------------------------------------------
  244.   # ● Set Cursor Position Enemy
  245.   #--------------------------------------------------------------------------   
  246.   def set_cursor_position_enemy
  247.       return if !self.active
  248.       $game_temp.battle_cursor[0] = $game_troop.alive_members[self.index].screen_x + CURSOR_POSITION[0] rescue nil
  249.       $game_temp.battle_cursor[1] = $game_troop.alive_members[self.index].screen_y + CURSOR_POSITION[1] rescue nil
  250.       $game_temp.battle_cursor[3] = $game_troop.alive_members[self.index].name rescue nil
  251.       $game_temp.battle_cursor = [0,0,false,0] if $game_temp.battle_cursor[0] == nil
  252.   end
  253.   
  254.   #--------------------------------------------------------------------------
  255.   # ● Set Cursor Position Actor
  256.   #--------------------------------------------------------------------------   
  257.   def set_cursor_position_actor
  258.       return if !self.active
  259.       $game_temp.battle_cursor[0] = ACTOR_POSITION[self.index][0] + CURSOR_POSITION[0] rescue nil
  260.       $game_temp.battle_cursor[1] = ACTOR_POSITION[self.index][1] + CURSOR_POSITION[1] rescue nil
  261.       $game_temp.battle_cursor[3] = $game_party.members[self.index].name rescue nil
  262.       $game_temp.battle_cursor = [0,0,false,0] if $game_temp.battle_cursor[0] == nil
  263.   end  
  264.   
  265.   #--------------------------------------------------------------------------
  266.   # ● Process Cursor Move
  267.   #--------------------------------------------------------------------------
  268.   def process_cursor_move
  269.       return unless cursor_movable?
  270.       last_index = @index
  271.       cursor_move_index(+1) if Input.repeat?(:DOWN)
  272.       cursor_move_index(-1) if Input.repeat?(:UP)
  273.       cursor_move_index(+1) if Input.repeat?(:RIGHT)
  274.       cursor_move_index(-1) if Input.repeat?(:LEFT)
  275.       if [url=home.php?mod=space&uid=370741]@Index[/url] != last_index
  276.          Sound.play_cursor
  277.       end
  278.   end

  279.   #--------------------------------------------------------------------------
  280.   # ● Process Cursor Move Index
  281.   #--------------------------------------------------------------------------  
  282.   def cursor_move_index(value = 0)
  283.       self.index += value
  284.       check_index_limit
  285.   end

  286.   
  287. end

  288. #==============================================================================
  289. # ■ Window_BattleActor
  290. #==============================================================================
  291. class Window_BattleActor < Window_BattleStatus
  292.   include Battle_Cursor_index
  293.   
  294.   #--------------------------------------------------------------------------
  295.   # ● Update
  296.   #--------------------------------------------------------------------------  
  297.   def update
  298.       super
  299.       set_cursor_position_actor
  300.   end  

  301.   #--------------------------------------------------------------------------
  302.   # ● Show
  303.   #--------------------------------------------------------------------------
  304.   alias mog_battle_cursor_show show
  305.   def show
  306.       if @info_viewport
  307.          set_cursor_position_actor
  308.          $game_temp.battle_cursor[2] = true
  309.       end
  310.       mog_battle_cursor_show
  311.   end

  312.   #--------------------------------------------------------------------------
  313.   # ● Hide
  314.   #--------------------------------------------------------------------------
  315.   alias mog_battle_cursor_hide hide
  316.   def hide
  317.       if @info_viewport
  318.           $game_temp.battle_cursor[2] = false
  319.       end
  320.       mog_battle_cursor_hide
  321.   end  
  322.   
  323. end

  324. #==============================================================================
  325. # ■ Window_BattleEnemy
  326. #==============================================================================
  327. class Window_BattleEnemy < Window_Selectable
  328.   include Battle_Cursor_index
  329.   
  330.   #--------------------------------------------------------------------------
  331.   # ● Update
  332.   #--------------------------------------------------------------------------  
  333.   def update
  334.       super
  335.       set_cursor_position_enemy
  336.   end

  337.   #--------------------------------------------------------------------------
  338.   # ● Show
  339.   #--------------------------------------------------------------------------
  340.   alias mog_battle_cursor_show show
  341.   def show
  342.       if @info_viewport
  343.          set_cursor_position_enemy
  344.          $game_temp.battle_cursor[2] = true
  345.       end
  346.       mog_battle_cursor_show
  347.   end

  348.   #--------------------------------------------------------------------------
  349.   # ● Hide
  350.   #--------------------------------------------------------------------------
  351.   alias mog_battle_cursor_hide hide
  352.   def hide
  353.       if @info_viewport
  354.           $game_temp.battle_cursor[2] = false
  355.       end
  356.       mog_battle_cursor_hide
  357.   end  
  358.   
  359. end

  360. $mog_rgss3_battle_cursor = true
复制代码

Battle_Cursor.png (5.86 KB, 下载次数: 34)

Battle_Cursor.png

Battle_Cursor.png

作者: longshili    时间: 2013-11-13 21:37
longshili 发表于 2013-11-12 22:43
鼠标直接选择敌人补丁. 测试暂时没有发现问题。
不过,希望加入能够同样直接选择队友的功能,这样技能和物 ...

光标提示,而且显示名字等级等信息,很有用的吧。。




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