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

Project1

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

[已经解决] 流川枫大大的le线型视野脚本求助

[复制链接]

Lv1.梦旅人

梦石
0
星屑
1110
在线时间
6 小时
注册时间
2016-1-11
帖子
4
跳转到指定楼层
1
发表于 2016-1-22 21:39:05 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 camy2832 于 2016-1-22 21:44 编辑

我是VA版本
想要使用大大的脚本
结果一用就出现这个问题





实在搞不懂是出了什么问题,也不是脚本之间冲突
求各位大大帮忙
RUBY 代码复制
  1. # ■ LCF_Leyeshot (linetype eyeshot)ACE 2.21    Creator LCF  Date 2009.7.6
  2.  
  3. #------------------------------------------------------------------------------
  4.  
  5. #  线形视野系统    编者:流川枫   QQ:350773875
  6.  
  7. #==============================================================================
  8.  
  9. #【使用说明】
  10.  
  11. #------------------------------------------------------------------------------
  12.  
  13. # 视野系统开关    $game_map.events[@event_id].le_seeing = true/false
  14.  
  15. # 功能:该值为true表示该NPC视野开启,否则未开启,默认为false。
  16.  
  17. #------------------------------------------------------------------------------
  18.  
  19. # 视野透视开关    $game_map.events[@event_id].le_clairv = true/false
  20.  
  21. # 功能:该值为true表示该NPC视野不扫描视线障碍,否则扫描,默认为false。
  22.  
  23. #------------------------------------------------------------------------------
  24.  
  25. # 视线显示开关    $game_map.events[@event_id].le_show = true/false
  26.  
  27. # 功能:该值为true表示显示该NPC的视线,否则不显示,默认为false。
  28.  
  29. #------------------------------------------------------------------------------
  30.  
  31. # 看见时显示开关    $game_map.events[@event_id].le_ss = true/false
  32.  
  33. # 功能:该值为true表示只有当NPC看见主角时才显示视线,否则一直显示,默认为false。
  34.  
  35. #------------------------------------------------------------------------------
  36.  
  37. # 侧面可视开关    $game_map.events[@event_id].le_side = true/false
  38.  
  39. # 功能:该值为true表示该NPC可以看到侧面一格内的人,否则由斜率决定,默认为true。
  40.  
  41. #------------------------------------------------------------------------------
  42.  
  43. # 视野环绕开关    $game_map.events[@event_id].le_circle = true/false
  44.  
  45. # 功能:该值为true表示该NPC为环绕视野,否则不能看见自己的身后,默认为false。
  46.  
  47. #------------------------------------------------------------------------------
  48.  
  49. # 设置视野深度    $game_map.events[@event_id].le_deepness = 深度值
  50.  
  51. # 功能:该值代表视野的能见度,当视野模型为扇形时应避免设置成奇数,默认为8。
  52.  
  53. #------------------------------------------------------------------------------
  54.  
  55. # 设置视野斜率    $game_map.events[@event_id].le_slope = 斜率值
  56.  
  57. # 功能:该值代表视野的斜率,默认为1.0。
  58.  
  59. #------------------------------------------------------------------------------
  60.  
  61. # 设置显示颜色    $game_map.events[@event_id].le_color = 颜色值
  62.  
  63. # 功能:该值代表视线显示的颜色,默认为0xf0。
  64.  
  65. #------------------------------------------------------------------------------
  66.  
  67. # 设置触发开关    $game_map.events[@event_id].le_skey = "A"/"B"/"C"/"D"(大写)
  68.  
  69. # 功能:该值指定了映射是否看见主角的状态的独立开关,默认为"D"。
  70.  
  71. #------------------------------------------------------------------------------
  72.  
  73. # 设置键开关    $game_map.events[@event_id].le_kw = true/false
  74.  
  75. # 功能:该值表示是否将该NPC触发状态映射到触发开关指定的独立变量中,默认为true。
  76.  
  77. #------------------------------------------------------------------------------
  78.  
  79. # 设置触发确认    $game_map.events[@event_id].le_true = true/false
  80.  
  81. # 功能:该值表示该NPC是否看见了主角,等价于触发开关,默认为false。
  82.  
  83. #------------------------------------------------------------------------------
  84.  
  85. # 设置视野模型    $game_map.events[@event_id].le_mode = 0/1
  86.  
  87. # 功能:该值为0时表示该NPC的视野形状类扇形,为1时类三角形,默认为0。
  88.  
  89. #==============================================================================
  90.  
  91. # 全局视野开关    $le_run = true/false
  92.  
  93. # 功能:该值为true表示系统正常工作,否则终止所有NPC的视野,默认为true。
  94.  
  95. #------------------------------------------------------------------------------
  96.  
  97. # 全局关闭列表    $le_close_table = ["A","B","C","D"]
  98.  
  99. # 功能:不同场景转移时,将自动关闭表里的独立开关。(只针对le_seeing为true的NPC)
  100.  
  101. #==============================================================================
  102.  
  103. # 当NPC看见主角,独立开关(le_skey)便会被打开,否则为关闭状态。
  104.  
  105. #==============================================================================
  106.  
  107.  
  108.  
  109. #==============================================================================
  110.  
  111. # ■ Game_Event
  112.  
  113. #------------------------------------------------------------------------------
  114.  
  115. #  重载事件类
  116.  
  117. #==============================================================================
  118.  
  119. class Game_Event
  120.  
  121.   attr_accessor   :le_seeing                 # 视野系统开关
  122.  
  123.   attr_accessor   :le_clairv                 # 视野透视开关
  124.  
  125.   attr_accessor   :le_show                   # 视线显示开关
  126.  
  127.   attr_accessor   :le_ss                     # 看见时显示开关
  128.  
  129.   attr_accessor   :le_side                   # 侧面可视开关
  130.  
  131.   attr_accessor   :le_circle                 # 视野环绕开关
  132.  
  133.   attr_accessor   :le_deepness               # 视野深度
  134.  
  135.   attr_accessor   :le_slope                  # 视野斜率
  136.  
  137.   attr_accessor   :le_color                  # 显示颜色
  138.  
  139.   attr_accessor   :le_trace                  # 视野痕迹
  140.  
  141.   attr_accessor   :le_skey                   # 触发开关
  142.  
  143.   attr_accessor   :le_kw                     # 键开关
  144.  
  145.   attr_accessor   :le_true                   # 触发确认
  146.  
  147.   attr_accessor   :le_mode                   # 视野模型
  148.  
  149.   #--------------------------------------------------------------------------
  150.  
  151.   LE_DEEPNESS_OFFSET = 1                     # 深度缓存的偏移
  152.  
  153.   #--------------------------------------------------------------------------
  154.  
  155.   # ● 初始化对像
  156.  
  157.   #     map_id : 地图 ID
  158.  
  159.   #     event  : 事件 (RPG::Event)
  160.  
  161.   #--------------------------------------------------------------------------
  162.  
  163.   alias original_le_initialize initialize
  164.  
  165.   def initialize (map_id, event)
  166.  
  167.     original_le_initialize(map_id, event)
  168.  
  169.     @le_seeing   = false
  170.  
  171.     @le_clairv   = false
  172.  
  173.     @le_show     = false
  174.  
  175.     @le_ss       = false
  176.  
  177.     @le_side     = true
  178.  
  179.     @le_circle   = false
  180.  
  181.     @le_deepness = 8
  182.  
  183.     @le_slope    = 1.0
  184.  
  185.     @le_color    = 0xf0
  186.  
  187.     @le_trace = Table.new(@le_deepness-LE_DEEPNESS_OFFSET,2)
  188.  
  189.     @le_trace[0,0] = -1
  190.  
  191.     @le_kw   = true
  192.  
  193.     @le_true = false
  194.  
  195.     @le_mode = 0
  196.  
  197.     @le_skey = "D"
  198.  
  199.   end
  200.  
  201.   #--------------------------------------------------------------------------
  202.  
  203.   # ● 刷新
  204.  
  205.   #--------------------------------------------------------------------------
  206.  
  207.   alias original_le_update update
  208.  
  209.   def update
  210.  
  211.     original_le_update
  212.  
  213.     if @le_seeing and $le_run
  214.  
  215.       @le_trace.resize(@le_deepness-LE_DEEPNESS_OFFSET,2) if @le_trace.xsize+LE_DEEPNESS_OFFSET != @le_deepness
  216.  
  217.       self.see
  218.  
  219.       if @le_kw
  220.  
  221.         $game_map.need_refresh = true if @le_true != $game_self_switches[[$game_map.map_id, @id, @le_skey]]
  222.  
  223.         $game_self_switches[[$game_map.map_id, @id, @le_skey]] = @le_true
  224.  
  225.       end
  226.  
  227.     end
  228.  
  229.   end
  230.  
  231.   #--------------------------------------------------------------------------
  232.  
  233.   # ● 视野检测
  234.  
  235.   #--------------------------------------------------------------------------
  236.  
  237.   def see
  238.  
  239.     @le_true = false
  240.  
  241.     if ($game_player.x-@x).abs<@le_deepness and ($game_player.y-@y).abs<@le_deepness
  242.  
  243.       difference_x = ($game_player.x - @x).abs
  244.  
  245.       difference_y = ($game_player.y - @y).abs
  246.  
  247.       case @direction
  248.  
  249.       when 2
  250.  
  251.         return if @le_circle != true and $game_player.y < @y
  252.  
  253.         unless @le_side and (difference_y == 0 and difference_x == 1)
  254.  
  255.           return if difference_x.to_f/difference_y > @le_slope
  256.  
  257.         end
  258.  
  259.       when 4
  260.  
  261.         return if @le_circle != true and $game_player.x > @x
  262.  
  263.         unless @le_side and difference_y == 1 and difference_x == 0
  264.  
  265.           return if difference_y.to_f/difference_x > @le_slope
  266.  
  267.         end
  268.  
  269.       when 6
  270.  
  271.         return if @le_circle != true and $game_player.x < @x
  272.  
  273.         unless @le_side and difference_y == 1 and difference_x == 0
  274.  
  275.           return if difference_y.to_f/difference_x > @le_slope
  276.  
  277.         end
  278.  
  279.       else
  280.  
  281.         return if @le_circle != true and $game_player.y > @y
  282.  
  283.         unless @le_side and difference_y == 0 and difference_x == 1
  284.  
  285.           return if difference_x.to_f/difference_y > @le_slope
  286.  
  287.         end
  288.  
  289.       end
  290.  
  291.       if @le_mode == 0
  292.  
  293.         return if (difference_x ** 2 + difference_y ** 2) > le_deepness ** 2
  294.  
  295.       end
  296.  
  297.       @le_true = scan_line
  298.  
  299.       if @le_ss and @le_true !=true
  300.  
  301.         @le_trace[0,0] = -1
  302.  
  303.       end
  304.  
  305.     end
  306.  
  307.   end
  308.  
  309.   #--------------------------------------------------------------------------
  310.  
  311.   # ● 视线检测   采用了国际领先的视线扫描算法!
  312.  
  313.   #--------------------------------------------------------------------------
  314.  
  315.   def scan_line
  316.  
  317.     difference_x = $game_player.x - @x
  318.  
  319.     difference_y = $game_player.y - @y
  320.  
  321.     direction_x = (difference_x > 0 ? 1 : -1)
  322.  
  323.     direction_y = (difference_y > 0 ? 1 : -1)
  324.  
  325.     i = 0
  326.  
  327.     if difference_x.abs > difference_y.abs
  328.  
  329.       while difference_x.abs > i+1
  330.  
  331.         i+=1
  332.  
  333.         x = @x+i*direction_x
  334.  
  335.         if direction_y>0
  336.  
  337.           y = @y+i*difference_y/difference_x.to_f*direction_y*direction_x+0.5
  338.  
  339.         else
  340.  
  341.           y = @y-i*difference_y/difference_x.to_f*direction_y*direction_x+0.5
  342.  
  343.         end
  344.  
  345.         x = x.floor
  346.  
  347.         y = y.floor
  348.  
  349.         if @le_clairv != true
  350.  
  351.           unless (direction_x > 0 ? passable?(x-1,y,6) : passable?(x+1,y,4))
  352.  
  353.             @le_trace[i-1,0] = -1
  354.  
  355.             return false
  356.  
  357.           end
  358.  
  359.         end
  360.  
  361.         if @le_show
  362.  
  363.           @le_trace[i-1,0] = x
  364.  
  365.           @le_trace[i-1,1] = y
  366.  
  367.         end
  368.  
  369.       end
  370.  
  371.     else
  372.  
  373.       while difference_y.abs > i+1
  374.  
  375.         i+=1
  376.  
  377.         y = @y+i*direction_y
  378.  
  379.         if direction_x>0
  380.  
  381.           x = @x+i*difference_x/(difference_y+0.0)*direction_x*direction_y+0.5
  382.  
  383.         else
  384.  
  385.           x = @x-i*difference_x/(difference_y+0.0)*direction_x*direction_y+0.5
  386.  
  387.         end
  388.  
  389.         x = x.floor
  390.  
  391.         y = y.floor
  392.  
  393.         if @le_clairv != true
  394.  
  395.           unless (direction_y > 0 ? passable?(x,y-1,2) : passable?(x,y+1,8))
  396.  
  397.             @le_trace[i-1,0] = -1
  398.  
  399.             return false
  400.  
  401.           end
  402.  
  403.         end
  404.  
  405.         if @le_show
  406.  
  407.           @le_trace[i-1,0] = x
  408.  
  409.           @le_trace[i-1,1] = y
  410.  
  411.         end
  412.  
  413.       end
  414.  
  415.     end
  416.  
  417.     @le_trace[i,0] = -1
  418.  
  419.     return true
  420.  
  421.   end
  422.  
  423. end
  424.  
  425. #==============================================================================
  426.  
  427. # ■ Spriteset_Map
  428.  
  429. #------------------------------------------------------------------------------
  430.  
  431. #    重载地图显示
  432.  
  433. #==============================================================================
  434.  
  435. class Spriteset_Map
  436.  
  437.   attr_reader:tilemap
  438.  
  439.   alias :original_le_initialize :initialize
  440.  
  441.   def initialize
  442.  
  443.     original_le_initialize
  444.  
  445.     @tilemap.flash_data=Table.new(@tilemap.map_data.xsize,@tilemap.map_data.ysize)
  446.  
  447.   end
  448.  
  449. end
  450.  
  451. #==============================================================================
  452.  
  453. # ■ Game_Player
  454.  
  455. #------------------------------------------------------------------------------
  456.  
  457. #    重载玩家
  458.  
  459. #==============================================================================
  460.  
  461. class Game_Player < Game_Character
  462.  
  463.   attr_reader:new_map_id
  464.  
  465. end
  466.  
  467. #==============================================================================
  468.  
  469. # ■ Scene_Map
  470.  
  471. #------------------------------------------------------------------------------
  472.  
  473. #    重载地图场景
  474.  
  475. #==============================================================================
  476.  
  477. class Scene_Map
  478.  
  479.   attr_reader:spriteset
  480.  
  481.   #--------------------------------------------------------------------------
  482.  
  483.   # ● 场所移动前的处理
  484.  
  485.   #--------------------------------------------------------------------------
  486.  
  487.   alias original_le_pre_transfer pre_transfer
  488.  
  489.   def pre_transfer
  490.  
  491.     original_le_pre_transfer
  492.  
  493.     # 自动关闭当前地图上le_seeing为true的NPC独立开关
  494.  
  495.     if $game_map.map_id != $game_player.new_map_id
  496.  
  497.       for event in $game_map.events.values
  498.  
  499.         if event.le_seeing
  500.  
  501.           for key in $le_close_table
  502.  
  503.             $game_self_switches[[$game_map.map_id,event.id, key]] =false
  504.  
  505.           end
  506.  
  507.         end
  508.  
  509.       end
  510.  
  511.     end
  512.  
  513.   end
  514.  
  515.   #--------------------------------------------------------------------------
  516.  
  517.   # ● 更新画面
  518.  
  519.   #--------------------------------------------------------------------------
  520.  
  521.   #alias original_le_update update
  522.  
  523.   def update
  524.  
  525.     super
  526.  
  527.       #==========================
  528.  
  529.       # 清除LE视野产生的痕迹
  530.  
  531.       #==========================
  532.  
  533.       for event in $game_map.events.values
  534.  
  535.         for i in 0 .. event.le_trace.xsize-1
  536.  
  537.           break if event.le_trace[i,0] == -1
  538.  
  539.           @spriteset.tilemap.flash_data[event.le_trace[i,0],event.le_trace[i,1]] = 0
  540.  
  541.         end
  542.  
  543.          event.le_trace[0,0] = -1
  544.  
  545.        end
  546.  
  547.       #==========================
  548.  
  549.  
  550.  
  551.     $game_map.update(true)
  552.  
  553.     $game_player.update
  554.  
  555.     $game_timer.update
  556.  
  557.     @spriteset.update
  558.  
  559.     update_scene if scene_change_ok?
  560.  
  561.       #==========================
  562.  
  563.       # 刷新LE视野路径
  564.  
  565.       #==========================
  566.  
  567.       for event in $game_map.events.values
  568.  
  569.         for i in 0 .. event.le_trace.xsize-1
  570.  
  571.           break if event.le_trace[i,0] == -1
  572.  
  573.           @spriteset.tilemap.flash_data[event.le_trace[i,0],event.le_trace[i,1]] = event.le_color
  574.  
  575.         end
  576.  
  577.       end
  578.  
  579.       #==========================
  580.  
  581.   end
  582.  
  583. end
  584.  
  585. #==============================================================================
  586.  
  587. # ■ Scene_Title
  588.  
  589. #------------------------------------------------------------------------------
  590.  
  591. #  处理标题画面的类。
  592.  
  593. #==============================================================================
  594.  
  595. class Scene_Title
  596.  
  597.   alias original_le_main main
  598.  
  599.   def main
  600.  
  601.     $le_run = true
  602.  
  603.     $le_close_table = ["A","B","C","D"]
  604.  
  605.     original_le_main
  606.  
  607.   end
  608.  
  609. end
  610.  
  611. #==============================================================================
  612.  
  613. # ■ DataManager
  614.  
  615. #------------------------------------------------------------------------------
  616.  
  617. #  处理存档。
  618.  
  619. #==============================================================================
  620.  
  621. module DataManager
  622.  
  623.   # 写入两个全局变量
  624.  
  625.   def self.save_game_without_rescue(index)
  626.  
  627.     File.open(make_filename(index), "wb") do |file|
  628.  
  629.       $game_system.on_before_save
  630.  
  631.       Marshal.dump(make_save_header, file)
  632.  
  633.       Marshal.dump(make_save_contents, file)
  634.  
  635.       @last_savefile_index = index
  636.  
  637.       Marshal.dump($le_run,file)
  638.  
  639.       Marshal.dump($le_close_table,file)
  640.  
  641.     end
  642.  
  643.     return true
  644.  
  645.   end
  646.  
  647.   def self.load_game_without_rescue(index)
  648.  
  649.     File.open(make_filename(index), "rb") do |file|
  650.  
  651.       Marshal.load(file)
  652.  
  653.       extract_save_contents(Marshal.load(file))
  654.  
  655.       reload_map_if_updated
  656.  
  657.       @last_savefile_index = index
  658.  
  659.       $le_run         = Marshal.load(file)
  660.  
  661.       $le_close_table = Marshal.load(file)
  662.  
  663.     end
  664.  
  665.     return true
  666.  
  667.   end
  668.  
  669. end
  670.  
  671. #==============================================================================
  672.  
  673. #                                 The End
  674.  
  675. #==============================================================================


Lv1.梦旅人

梦石
0
星屑
1110
在线时间
6 小时
注册时间
2016-1-11
帖子
4
5
 楼主| 发表于 2016-1-23 03:15:52 | 只看该作者
camy2832 发表于 2016-1-23 01:24
都有做,然而还是一样
能不能请您给个范例

可以了!感谢您
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
1110
在线时间
6 小时
注册时间
2016-1-11
帖子
4
4
 楼主| 发表于 2016-1-23 01:24:54 | 只看该作者
本帖最后由 camy2832 于 2016-1-23 01:28 编辑

都有做,然而还是一样
能不能请您给个范例


点评

....兄弟,你这个事件id是8,不是33. 33是名字  发表于 2016-1-23 01:39
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7589
在线时间
1227 小时
注册时间
2008-12-14
帖子
555
3
发表于 2016-1-23 00:08:38 | 只看该作者
# 设置触发开关    $game_map.events[@event_id].le_skey = "A"/"B"/"C"/"D"(大写)
# 功能:该值指定了映射是否看见主角的状态的独立开关,默认为"D"。

你肯定没在事件上加一个新的事件页,这个事件页条件是 独立开关打开,意思是当看见以后,触发这个事件页的内容。
需要购买本人MV插件必须先加wx好友。加不上wx就是本人忙,没时间卖。原则上太久以前的插件也不想卖,因为我也忘了,维护上会不给力。wx名:alskyif    本人插件地址:
   LCK_SRPG梦幻模拟战、火焰纹章类系统
   究极立绘ADV系统

   究极换装统合系统
   究极! 回想与CG系统
   消息文字的距离调整  
   自动返回上一张地图
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7589
在线时间
1227 小时
注册时间
2008-12-14
帖子
555
2
发表于 2016-1-23 00:04:58 | 只看该作者
亲测正常,你事件有没有加独立开关D页?
地图脚本并行处理,然后贴前面4句脚本
需要购买本人MV插件必须先加wx好友。加不上wx就是本人忙,没时间卖。原则上太久以前的插件也不想卖,因为我也忘了,维护上会不给力。wx名:alskyif    本人插件地址:
   LCK_SRPG梦幻模拟战、火焰纹章类系统
   究极立绘ADV系统

   究极换装统合系统
   究极! 回想与CG系统
   消息文字的距离调整  
   自动返回上一张地图
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-6 13:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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