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

Project1

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

[转载发布] 一个很实用的遇敌脚本

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1422
在线时间
245 小时
注册时间
2019-1-18
帖子
190
跳转到指定楼层
1
发表于 2019-3-10 11:02:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
首先创造一个事件,移动频率最高,移动类型自定义,然后选择脚本,输入enable_symbol_encount(此处填你设置的编号)
事件就会根据你设定的数据在一定范围内追击你,或在你达到某个等级后远离你,十分实用
BUBY 代码复制
  1. module SymbolEncount
  2.   FOLLOWER_CONTACT = true
  3.   SYMBOL_SETTING_LIST = {
  4.     0 => [
  5.           5,#怪物逃跑时玩家的等级
  6.           0,#玩家等级的判断种类(默认0)
  7.           3,#怪物逃跑时离玩家的距离
  8.           5,#怪物逃跑时离玩家的距离(玩家加速时)
  9.           0,#玩家没有反应时的移动模式
  10.           0,#与透明度变化时的玩家之间的距离
  11.           2,#反应前的移动速度
  12.           4,#反应后的移动速度
  13.           5,#反应前的移动频率
  14.           5,#反应后的移动频率
  15.           1,#反应时显示心情的ID
  16.           [10]#无法移动符号的版本ID
  17.          ],
  18.  
  19.   }
  20. end
  21.  
  22. $rsi ||= {}
  23. $rsi["单位计算辅助"] = true
  24.  
  25. class RPG::UsableItem < RPG::BaseItem
  26.   def stealth_obj_count
  27.     self.note.each_line{|line|
  28.       return $1.to_i if line =~ /无视:(\d+)/i
  29.     }
  30.     0
  31.   end
  32. end
  33.  
  34. class << BattleManager
  35.   attr_writer   :run_event
  36.   @run_event = nil
  37.   alias _symbol_encount_setup setup
  38.   def setup(troop_id, can_escape = true, can_lose = false)
  39.     _symbol_encount_setup(troop_id, can_escape, can_lose)
  40.     set_battle_condition
  41.   end
  42.   def set_battle_condition
  43.     if @run_event && @run_event.symbol_encount
  44.       @run_event.set_contact_condition
  45.       case @run_event.contact_condition
  46.       when 1
  47.         @preemptive = true
  48.       when 2
  49.         @surprise = true
  50.       end
  51.     end
  52.     @run_event = nil
  53.   end
  54. end
  55.  
  56. class Game_Actor < Game_Battler
  57.   def use_item(item)
  58.     stealth_effect(item)
  59.     super
  60.   end
  61.   def stealth_effect(item)
  62.     result = item.stealth_obj_count
  63.     $game_player.stealth_count = result if result > 0
  64.   end
  65. end
  66.  
  67. class Game_Party < Game_Unit
  68.   def get_player_level(type)
  69.     case type
  70.     when 0
  71.       members.inject(0){|r, actor| r += actor.level} / members.size
  72.     when 1
  73.       members.max_by{|actor| actor.level}
  74.     when 2
  75.       $game_party.members.first.level
  76.     end
  77.   end
  78. end
  79.  
  80. class Game_Character < Game_CharacterBase
  81.   alias _symbol_init_private_members init_private_members
  82.   def init_private_members
  83.     _symbol_init_private_members
  84.     @origin_opacity = @opacity
  85.   end
  86.   alias _symbol_process_move_command process_move_command
  87.   def process_move_command(command)
  88.     params = command.parameters
  89.     @origin_opacity = params[0] if command.code == ROUTE_CHANGE_OPACITY
  90.     _symbol_process_move_command(command)
  91.   end
  92.   def positional_relationship(character)
  93.     if character.real_x == real_x
  94.       character.real_y > real_y ? 1 : 0
  95.     elsif character.real_y == real_y
  96.       character.real_x > real_x ? 2 : 3
  97.     else
  98.       -1
  99.     end
  100.   end
  101.   def update_symbol_opacity
  102.   end
  103.   alias _symbol_opacity_update update
  104.   def update
  105.     _symbol_opacity_update
  106.     update_symbol_opacity
  107.   end
  108. end
  109.  
  110. class Game_Player < Game_Character
  111.   attr_writer :stealth_count
  112.   def init_public_members
  113.     super
  114.     reset_stealth
  115.   end
  116.   def reset_stealth
  117.     @stealth_count = 0
  118.   end
  119.   def stealth?
  120.     !@stealth_count.zero?
  121.   end
  122.   alias _increase_stealth_count increase_steps
  123.   def increase_steps
  124.     _increase_stealth_count
  125.     @stealth_count -= 1 if stealth?
  126.   end
  127.   def update_symbol_opacity
  128.     if stealth? && !$game_map.interpreter.running?
  129.       @opacity = 128
  130.     else
  131.       @opacity = @origin_opacity
  132.     end
  133.   end
  134. end
  135.  
  136. class Game_Follower < Game_Character
  137.   attr_reader :member_index
  138. end
  139.  
  140. class Game_Event < Game_Character
  141.   include SymbolEncount
  142.   attr_reader :symbol_encount
  143.   attr_reader :contact_condition
  144.   alias _symbol_encount_ini init_private_members
  145.   def init_private_members
  146.     _symbol_encount_ini
  147.     init_symbol_encount
  148.   end
  149.   alias _symbol_encount_setup_page setup_page
  150.   def setup_page(new_page)
  151.     init_symbol_encount
  152.     _symbol_encount_setup_page(new_page)
  153.   end
  154.   def init_symbol_encount
  155.     @forming = false
  156.     @symbol_encount = false
  157.     @symbol_away_level = 0
  158.     @symbol_away_level_type = 0
  159.     @reaction_distance = 0
  160.     @reaction_distance_with_dash = 0
  161.     @nonreaction_move_type = 0
  162.     @visibility_distance = 0
  163.     @reaction_before_speed = 0
  164.     @reaction_after_speed = 0
  165.     @reaction_before_speed = 0
  166.     @reaction_after_frequency = 0
  167.     @reaction_balloon_id = 0
  168.     @unpassable_region = []
  169.     @contact_index = -1
  170.     @contact_condition = 0
  171.   end
  172.   def enable_symbol_encount(id)
  173.     data = SYMBOL_SETTING_LIST[id]
  174.     @symbol_encount = true
  175.     @symbol_away_level = data[0]
  176.     @symbol_away_level_type = data[1]
  177.     @reaction_distance = data[2]
  178.     @reaction_distance_with_dash = data[3]
  179.     @nonreaction_move_type = data[4]
  180.     @visibility_distance = data[5]
  181.     @reaction_before_speed = data[6]
  182.     @reaction_after_speed = data[7]
  183.     @reaction_before_frequency = data[8]
  184.     @reaction_after_frequency = data[9]
  185.     @reaction_balloon_id = data[10]
  186.     @unpassable_region = data[11].dup
  187.   end
  188.   def passable?(x, y, d)
  189.     if @symbol_encount
  190.       x2 = $game_map.round_x_with_direction(x, d)
  191.       y2 = $game_map.round_y_with_direction(y, d)
  192.       return false if @unpassable_region.include?($game_map.region_id(x2, y2))
  193.     end
  194.     super
  195.   end
  196.   def lock
  197.     unless @locked
  198.       @prelock_direction = @direction
  199.       turn_toward_player unless @symbol_encount
  200.       @locked = true
  201.     end
  202.   end
  203.   def player_level
  204.     $game_party.get_player_level(@symbol_away_level_type)
  205.   end
  206.   def distance_from_player
  207.     distance_x_from($game_player.x).abs + distance_y_from($game_player.y).abs
  208.   end
  209.   def distance_from_character(character)
  210.     distance_x_from(character.x).abs + distance_y_from(character.y).abs
  211.   end
  212.   def reaction_distance
  213.     if @forming
  214.       @reaction_distance_with_dash.next
  215.     elsif $game_player.dash? && $game_player.moving?
  216.       @reaction_distance_with_dash
  217.     else
  218.       @reaction_distance
  219.     end
  220.   end
  221.   def active_symbol_encount?
  222.     if $game_map.interpreter.running?
  223.       false
  224.     elsif @erased || $game_player.stealth?
  225.       @forming = false
  226.       false
  227.     else
  228.       true
  229.     end
  230.   end
  231.   def direction_as_player?
  232.     direction == $game_player.direction
  233.   end
  234.   def contact?(character)
  235.     distance_from_character(character) <= 1
  236.   end
  237.   def reaction?
  238.     distance_from_player <= reaction_distance
  239.   end
  240.   def away?
  241.     player_level > @symbol_away_level
  242.   end
  243.   def set_contact_condition
  244.     @contact_index = -1
  245.     @contact_condition = 0
  246.     if contact?($game_player)
  247.       @contact_index = 0
  248.     elsif FOLLOWER_CONTACT
  249.       $game_player.followers.visible_folloers.each{|follower|
  250.         @contact_index = follower.member_index if contact?(follower)
  251.       }
  252.     end
  253.     if @contact_index.zero?
  254.       @contact_condition = direction_and_positional
  255.     elsif $game_player.followers.visible_folloers.size == @contact_index
  256.       @contact_condition = 2
  257.     else
  258.       @contact_condition = 0
  259.     end
  260.   end
  261.   def direction_and_positional
  262.     position = positional_relationship($game_player)
  263.     if position == -1
  264.       0
  265.     else
  266.       case direction
  267.       when 2
  268.         direction_as_player? ? (position == 0 ? 1 : 2) : 0
  269.       when 4
  270.         direction_as_player? ? (position == 2 ? 1 : 2) : 0
  271.       when 6
  272.         direction_as_player? ? (position == 3 ? 1 : 2) : 0
  273.       when 8
  274.         direction_as_player? ? (position == 1 ? 1 : 2) : 0
  275.       else
  276.         0
  277.       end
  278.     end
  279.   end
  280.   alias _symbol_encount_trigger check_event_trigger_touch
  281.   def check_event_trigger_touch(x, y)
  282.     if @symbol_encount && FOLLOWER_CONTACT
  283.       unless $game_map.interpreter.running?
  284.         if @trigger == 2 && collide_with_player_characters?(x, y)
  285.           start unless jumping?
  286.         end
  287.       end
  288.     else
  289.       _symbol_encount_trigger(x, y)
  290.     end
  291.   end
  292.   def start_forming
  293.     @move_speed = @reaction_after_speed
  294.     @move_frequency = @reaction_after_frequency
  295.     unless @reaction_balloon_id.zero?
  296.       Audio.se_play('Audio/SE/Absorb1', 70, 100)
  297.       @balloon_id = @reaction_balloon_id
  298.     end
  299.   end
  300.   def end_forming
  301.     @move_speed = @reaction_before_speed
  302.     @move_frequency = @reaction_before_frequency
  303.   end
  304.   def reaction_movement
  305.     @move_speed = @reaction_after_speed
  306.     @move_frequency = @reaction_after_frequency
  307.     if @symbol_away_level.zero?
  308.       move_type_toward_player
  309.     elsif away?
  310.       move_away_from_player
  311.     else
  312.       move_type_toward_player
  313.     end
  314.   end
  315.   def nonreaction_movement
  316.     @move_speed = @reaction_before_speed
  317.     @move_frequency = @reaction_before_frequency
  318.     case @nonreaction_move_type
  319.     when 0
  320.       move_type_random
  321.     when 1
  322.     end
  323.   end
  324.   alias _update_with_symbol update
  325.   def update
  326.     update_symbol_reaction if @symbol_encount && @wait_count <= 0 && !@move_route_forcing
  327.     _update_with_symbol
  328.   end
  329.   def update_symbol_reaction
  330.     if active_symbol_encount?
  331.       if !@forming && reaction?
  332.         start_forming
  333.       elsif @forming && !reaction?
  334.         end_forming
  335.       end
  336.       @forming = reaction?
  337.     end
  338.   end
  339.   def update_symbol_opacity
  340.     if @visibility_distance.zero?
  341.       @opacity = @origin_opacity
  342.     else
  343.       @opacity = @origin_opacity - 50 * (distance_from_player - @visibility_distance)
  344.     end
  345.   end
  346.   alias _update_self_movement_with_symbol update_self_movement
  347.   def update_self_movement
  348.     if @symbol_encount
  349.       update_symbol_movement if near_the_screen? && @stop_count > stop_count_threshold
  350.     else
  351.       _update_self_movement_with_symbol
  352.     end
  353.   end
  354.   def update_symbol_movement
  355.     if near_the_screen? && @stop_count > stop_count_threshold
  356.       if active_symbol_encount?
  357.         @forming ? reaction_movement : nonreaction_movement
  358.       else
  359.         nonreaction_movement
  360.       end
  361.     end
  362.   end
  363. end
  364.  
  365. class Game_Interpreter
  366.   alias _command_301_with_symbol_encount command_301
  367.   def command_301
  368.     unless $game_party.in_battle
  369.       BattleManager.run_event = $game_map.events[@event_id]
  370.       _command_301_with_symbol_encount
  371.     end
  372.   end
  373.   def reset_stealth
  374.     $game_player.reset_stealth
  375.   end
  376. end

Lv6.析梦学徒

老鹰

梦石
40
星屑
33407
在线时间
6552 小时
注册时间
2012-5-26
帖子
3178

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2019-3-10 12:25:46 | 只看该作者
这个脚本在优秀游戏区里的Glimmer第二作娑罗双树中可以找到完整的
你这个删去了下述的版权信息,推荐翻墙去作者博客找
  1. =begin
  2.       RGSS3
  3.       
  4.       ★ シンボルエンカウント補助 ★

  5.       イベントでのシンボルエンカウントの動作を補助します。
  6.       
  7.       ● 仕様 ●==========================================================
  8.       シンボルエンカウント有効後は、
  9.       イベントページの自律移動の項で設定されたものは全て無効になります。
  10.       --------------------------------------------------------------------
  11.       一度有効になったシンボルエンカウントを無効にするには、
  12.       シンボルエンカウント設定のないイベントページに切り替えてください。
  13.       ====================================================================
  14.       
  15.       ● 機能 ●==========================================================
  16.       シンボルエンカウントイベントから戦闘を起動した場合、
  17.       シンボルとプレイヤーの位置関係により先制攻撃or不意打ちが発生します。
  18.           ・イベントの背後を取った場合           => 先制攻撃
  19.           ・イベントに背後を取られた場合         => 不意打ち
  20.           ・イベントが隊列の最後尾に接触した場合 => 不意打ち
  21.       --------------------------------------------------------------------
  22.       プレイヤーとの距離が一定内になるとプレイヤーを追跡するようになります。
  23.       --------------------------------------------------------------------
  24.       プレイヤーとの距離によりシンボルの透明度を変化させることができます。
  25.       --------------------------------------------------------------------
  26.       プレイヤーのレベルによりシンボルが逃走したりします。
  27.       --------------------------------------------------------------------
  28.       ダッシュしているとシンボルが反応しやすくなったりします。
  29.       --------------------------------------------------------------------
  30.       シンボルが反応した瞬間フキダシアイコンが表示されたりします。
  31.       --------------------------------------------------------------------
  32.       シンボルが反応しなくなるアイテムやスキルを作ることができます。
  33.       --------------------------------------------------------------------
  34.       シンボルが通行できないリージョンを設定することができます。
  35.       ====================================================================
  36.       
  37.       ● シンボルエンカウントイベントの設定方法 ●========================
  38.       シンボルの動作を設定箇所にてあらかじめ定義しておきます。
  39.       --------------------------------------------------------------------
  40.       イベント>自律移動>頻度を最高に設定してください。
  41.       --------------------------------------------------------------------
  42.       イベント>自律移動>カスタム>移動ルート>スクリプトに
  43.         enable_symbol_encount(id)
  44.       と記述します。idには設定箇所で定義したものを指定します。
  45.       --------------------------------------------------------------------
  46.       後はイベントのトリガーを"イベントから接触"にして戦闘を起動するだけ!
  47.       ====================================================================
  48.       
  49.       ● ステルス機能について ●==========================================
  50.       メモ欄に「ステルス:n」と記述されたスキル・アイテムを使用すると
  51.       ステルス状態となり、一定期間シンボルが反応しなくなります。
  52.       nにはステルス状態が維持されるプレイヤーの歩数を指定します。
  53.       --------------------------------------------------------------------
  54.       イベントのスクリプトから下記のコードを実行することで、
  55.       ステルスを強制的に解除することができます。
  56.         reset_stealth
  57.       --------------------------------------------------------------------
  58.       操作キャラクターの変更時や、シナリオ上で長い時間が経過した際などに
  59.       使用してください。
  60.       ====================================================================
  61.       
  62.       ● 注意 ●==========================================================
  63.       ニューゲームから始めないとエラーを吐きます。
  64.       ====================================================================
  65.       
  66.       ver1.01

  67.       Last Update : 2012/03/04
  68.       03/04 : 追跡中のイベントが存在する際にイベントが発生すると、
  69.               追跡状態がおかしくなる不具合を修正
  70.       ----------------------2012--------------------------
  71.       12/23 : RGSS2からの移植
  72.       ----------------------2011--------------------------
  73.       
  74.       ろかん   http://kaisou-ryouiki.sakura.ne.jp/
  75. =end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1422
在线时间
245 小时
注册时间
2019-1-18
帖子
190
3
 楼主| 发表于 2019-3-10 12:33:22 | 只看该作者
百里_飞柳 发表于 2019-3-10 12:25
这个脚本在优秀游戏区里的Glimmer第二作娑罗双树中可以找到完整的
你这个删去了下述的版权信息,推荐翻墙去 ...

我这个是隔壁大佬给我
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-26 11:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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