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

Project1

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

[我要招募] 【有偿】招募程序,想做一套VA地图的投掷系统

[复制链接]

Lv2.观梦者

梦石
0
星屑
763
在线时间
190 小时
注册时间
2021-11-7
帖子
6
跳转到指定楼层
1
发表于 2024-1-15 00:16:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
基础是MOG的投掷系统,想要加入投掷物与事件碰撞系统、投掷物碎裂后掉出物品等效果。
有意向加QQ:2225426980
价格线上交流。
RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - 捡起和丢出事件 (v1.2) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]https://atelierrgss.wordpress.com/[/url]
  6. #==============================================================================
  7. # 玩家可以把事件捡起和丢下,可用于解谜.
  8. #==============================================================================
  9. # 事件名带有↓ 的事件,都可以被玩家捡起和丢下.
  10. #
  11. # <ThrowX>
  12. #
  13. # X 事件被丢出去的距离.
  14. #
  15. # 例子:
  16. #
  17. # Event01<Throw4>
  18. #
  19. #==============================================================================
  20. # 在角色捡起事件时改变自身的行走图(可选)
  21. #==============================================================================
  22. # 你可以在角色捡起事件时改变其行走图,方法是在Character文件夹里放上一张类似以下
  23. # 文件名格式的行走图。
  24. #
  25. # 角色行走图名 + _Pickup
  26. #
  27. # 例子
  28. #
  29. # Actor1_Pickup.png
  30. #==============================================================================
  31.  
  32. #==============================================================================
  33. # ● Histórico (Version History)
  34. #==============================================================================
  35. # v 1.2 - Melhor codificação.
  36. # v 1.1 - Melhor compatibilidade com scripts de terceiros.
  37. #==============================================================================
  38.  
  39. module MOG_PICK_THROW
  40.   #被捡起事件的位置.
  41.   SPRITE_POSITION = 20
  42.   #丢出事件时播放的音效.
  43.   THROW_SE = "Jump2"
  44.   #捡起事件时播放的音效.
  45.   PICK_UP_SE = "Jump1"
  46.   #关闭本功能的开关.
  47.   DISABLE_PICKUP_SWITCH_ID = 100
  48.   # 捡起的按键.
  49.   PICKUP_BUTTON = Input::C
  50. end  
  51.  
  52. #==============================================================================
  53. # ■ Game_Temp
  54. #==============================================================================
  55. class Game_Temp
  56.  
  57.   attr_accessor :pickup_lock  
  58.   attr_accessor :pickup_lock_time
  59.   attr_accessor :character_pre_name
  60.   attr_accessor :can_throw
  61.   attr_accessor :throw_position
  62.  
  63.   #--------------------------------------------------------------------------
  64.   # ● initialize
  65.   #--------------------------------------------------------------------------  
  66.   alias mog_pick_initialize initialize
  67.   def initialize
  68.       @pickup_lock = false
  69.       @pickup_lock_time = 0   
  70.       @character_pre_name = ""
  71.       @can_throw = true
  72.       @throw_position = []
  73.       mog_pick_initialize
  74.   end  
  75. end
  76.  
  77. #==============================================================================
  78. # ■ Game_Event
  79. #==============================================================================
  80. class Game_Event < Game_Character
  81.   attr_reader   :jump_count  
  82.   attr_accessor :x
  83.   attr_accessor :y
  84.   attr_accessor :bush_depth
  85.   attr_accessor :direction
  86.  
  87.   #--------------------------------------------------------------------------
  88.   # ● initialize
  89.   #--------------------------------------------------------------------------
  90.   alias mog_pickup_initialize initialize
  91.   def initialize(map_id, event)
  92.       mog_pickup_initialize(map_id, event)   
  93.       @throw_active = false
  94.       if event.name =~ /<Throw(\d+)>/i
  95.          @throw = $1.to_i
  96.       end      
  97.   end      
  98. end
  99.  
  100. #==============================================================================
  101. # ■ Game_CharacterBase
  102. #==============================================================================
  103. class Game_CharacterBase
  104.   attr_accessor :throw_active
  105.   attr_accessor :throw
  106.  
  107.   #--------------------------------------------------------------------------
  108.   # ● initialize
  109.   #--------------------------------------------------------------------------  
  110.   alias x_pickup_initialize initialize
  111.   def initialize
  112.       @throw_active = false
  113.       @throw = 0
  114.       x_pickup_initialize
  115.   end  
  116.  
  117. end
  118.  
  119. #==============================================================================
  120. # ■ Game_Character
  121. #==============================================================================
  122. class Game_Character < Game_CharacterBase
  123.  
  124. #--------------------------------------------------------------------------
  125. # ● Throw Action
  126. #--------------------------------------------------------------------------
  127.   def throw_action(range)   
  128.       moveto($game_player.x,$game_player.y)
  129.       jump_range = range
  130.       moveto($game_player.x,$game_player.y)
  131.       range.times do
  132.       unless jumping?
  133.         case $game_player.direction
  134.            when 6            
  135.              jump(jump_range,0) if throw_range?(jump_range,0,jump_range)
  136.            when 4
  137.              jump(-jump_range,0) if throw_range?(-jump_range,0,jump_range)
  138.            when 2
  139.              jump(0,jump_range) if throw_range?(0,jump_range,jump_range)
  140.            when 8                       
  141.              jump(0,-jump_range) if throw_range?(0,-jump_range,jump_range)
  142.          end         
  143.          if @x == $game_player.x and @y == $game_player.y and jump_range == 1
  144.             $game_temp.can_throw = false
  145.          end
  146.          jump_range -= 1  
  147.       end               
  148.    end     
  149. end  
  150.  
  151. #--------------------------------------------------------------------------
  152. # ● Throw Range?
  153. #--------------------------------------------------------------------------
  154. def throw_range?(x, y,range )  
  155.     x = $game_player.x
  156.     y = $game_player.y
  157.     case $game_player.direction   
  158.         when 2
  159.             y += range
  160.         when 6      
  161.             x += range
  162.         when 4  
  163.             x -= range
  164.         when 8
  165.             y -= range
  166.     end      
  167.     return false if collide_with_characters?(x, y)
  168.     return false unless map_passable?(x, y,$game_player.direction)   
  169.     return true
  170.   end     
  171.  
  172. end  
  173.  
  174. #==============================================================================
  175. # ■ Game_Player
  176. #==============================================================================
  177. class Game_Player < Game_Character  
  178.   include MOG_PICK_THROW
  179.  
  180.   #--------------------------------------------------------------------------
  181.   # ● Update Player Before Movement
  182.   #--------------------------------------------------------------------------  
  183.   alias pickup_update update
  184.   def update
  185.       pickup_update
  186.       update_pickup_command
  187.   end
  188.  
  189.   #--------------------------------------------------------------------------
  190.   # ● Update Pickup Command
  191.   #--------------------------------------------------------------------------  
  192.   def update_pickup_command
  193.       $game_temp.pickup_lock_time -= 1 if $game_temp.pickup_lock_time > 0
  194.       return if $game_temp.pickup_lock_time > 0
  195.       if Input.trigger?(PICKUP_BUTTON)
  196.          throw_event if can_check_throw_event?
  197.          check_event_pickup([0,1,2]) if can_check_pickup_event?
  198.       end
  199.   end
  200.  
  201.   #--------------------------------------------------------------------------
  202.   # ● Check Action Event
  203.   #--------------------------------------------------------------------------
  204.   alias mog_pickup_check_action_event check_action_event
  205.   def check_action_event
  206.       return if $game_temp.pickup_lock_time > 0 or $game_temp.pickup_lock
  207.       mog_pickup_check_action_event
  208.   end  
  209.  
  210.   #--------------------------------------------------------------------------
  211.   # ● Can Check Pickup Event
  212.   #--------------------------------------------------------------------------  
  213.   def can_check_pickup_event?
  214.       return false if $game_temp.pickup_lock
  215.       return false if $game_temp.pickup_lock_time > 0     
  216.       return false if $game_map.interpreter.running?
  217.       return false if $game_message.visible
  218.       return false if $game_switches[DISABLE_PICKUP_SWITCH_ID]
  219.       return true
  220.   end   
  221.  
  222.   #--------------------------------------------------------------------------
  223.   # ● Can Check Throw Event
  224.   #--------------------------------------------------------------------------   
  225.   def can_check_throw_event?
  226.       return false if $game_temp.pickup_lock == false
  227.       return false if $game_temp.pickup_lock_time > 0
  228.       return false if $game_map.interpreter.running?
  229.       return false if $game_message.visible
  230.       return false if $game_switches[DISABLE_PICKUP_SWITCH_ID]
  231.       return true
  232.   end   
  233.  
  234.   #--------------------------------------------------------------------------
  235.   # ● Reserve Transfer
  236.   #--------------------------------------------------------------------------
  237.   alias mog_pickup_reserve_transfer reserve_transfer
  238.   def reserve_transfer(map_id, x, y, direction)
  239.       if $game_temp.pickup_lock == true
  240.          for event in $game_map.events.values
  241.              if event.throw_active == true
  242.                 event.throw_active = false
  243.                 event.moveto(@x,@y)
  244.                 case @direction
  245.                    when 2
  246.                      event.jump(0,-1)     
  247.                    when 4
  248.                      event.jump(1,0)     
  249.                    when 6
  250.                      event.jump(-1,0)     
  251.                    when 8  
  252.                      event.jump(0,1)   
  253.                 end     
  254.              end  
  255.          end      
  256.          $game_temp.pickup_lock = false
  257.          $game_temp.pickup_lock_time = 0
  258.          @character_name = $game_temp.character_pre_name
  259.       end  
  260.       mog_pickup_reserve_transfer(map_id, x, y, direction)
  261.   end
  262.  
  263.   #--------------------------------------------------------------------------
  264.   # ● Movable?
  265.   #--------------------------------------------------------------------------  
  266.   alias mog_pickup_movable movable?
  267.   def movable?
  268.       return false if $game_temp.pickup_lock_time > 0  
  269.       mog_pickup_movable
  270.   end  
  271.  
  272.   #--------------------------------------------------------------------------
  273.   # ● Throw Event
  274.   #--------------------------------------------------------------------------  
  275.   def throw_event
  276.       for event in $game_map.events.values
  277.           if event.throw_active and not jumping?
  278.              $game_temp.can_throw = true
  279.              event.throw_action(event.throw)
  280.              return if $game_temp.can_throw == false
  281.              $game_temp.pickup_lock_time = event.jump_count
  282.              $game_temp.throw_position[0] = event.x
  283.              $game_temp.throw_position[1] = event.y
  284.              event.throw_active = false
  285.              $game_temp.pickup_lock = false           
  286.              Audio.se_play("Audio/SE/" + THROW_SE, 100, 100)
  287.              @character_name = $game_temp.character_pre_name
  288.              break
  289.           end         
  290.       end   
  291.       if event == nil
  292.          $game_map.reset_pickup
  293.       end      
  294.   end
  295.  
  296.   #--------------------------------------------------------------------------
  297.   # ● Check Event Pickup
  298.   #--------------------------------------------------------------------------
  299.   def check_event_pickup(triggers)
  300.       front_x = $game_map.x_with_direction(@x, @direction)
  301.       front_y = $game_map.y_with_direction(@y, @direction)
  302.       for event in $game_map.events_xy(front_x, front_y)
  303.           if event.throw > 0 and not jumping?
  304.              event.throw_active = true
  305.              $game_temp.pickup_lock = true
  306.              event.jump(0,0)
  307.              $game_temp.pickup_lock_time = event.jump_count
  308.              event.x = $game_player.x
  309.              event.y = $game_player.y
  310.              Audio.se_play("Audio/SE/" + PICK_UP_SE, 100, 100)
  311.              $game_temp.character_pre_name = @character_name
  312.              make_pickup_pose
  313.              break
  314.           end
  315.       end
  316.   end
  317.  
  318.   #--------------------------------------------------------------------------
  319.   # ● Img Pickup Exist?
  320.   #--------------------------------------------------------------------------
  321.   def img_pickup_exist?
  322.       Cache.character(@character_name + "_Pickup") rescue return false
  323.   end
  324.  
  325.   #--------------------------------------------------------------------------
  326.   # ● Make Pickup Pose
  327.   #--------------------------------------------------------------------------  
  328.   def make_pickup_pose
  329.       @character_name = @character_name + "_Pickup" if img_pickup_exist?
  330.   end
  331.  
  332. end
  333.  
  334. #==============================================================================
  335. # ■ Sprite_Character
  336. #==============================================================================
  337. class Sprite_Character < Sprite_Base  
  338.   include MOG_PICK_THROW
  339.  
  340.   #--------------------------------------------------------------------------
  341.   # ● Update X Effects
  342.   #--------------------------------------------------------------------------              
  343.   alias mog_pickup_update_position update_position
  344.   def update_position
  345.       mog_pickup_update_position
  346.       update_pickup_position if can_pickup_position?
  347.   end  
  348.  
  349.   #--------------------------------------------------------------------------
  350.   # ● Can Pickup Position
  351.   #--------------------------------------------------------------------------        
  352.   def can_pickup_position?
  353.       return false if $game_temp.pickup_lock_time > 0
  354.       return false if $game_temp.pickup_lock == false      
  355.       return false if @character.throw_active == false      
  356.       return false if @character.is_a?(Game_Player)
  357.       return false if @character.jumping?
  358.       return true
  359.   end   
  360.  
  361.   #--------------------------------------------------------------------------
  362.   # ● Update Pickup Position
  363.   #--------------------------------------------------------------------------      
  364.   def update_pickup_position
  365.       @character.x = $game_player.x
  366.       @character.y = $game_player.y
  367.       @character.bush_depth = 0
  368.       unless @character.direction_fix
  369.           @character.direction = $game_player.direction
  370.       end
  371.       self.x = $game_player.screen_x
  372.       self.y = $game_player.screen_y - SPRITE_POSITION
  373.       self.z = $game_player.screen_z + 1
  374.   end
  375. end  
  376.  
  377. #==============================================================================
  378. # ■ Scene_Map
  379. #==============================================================================
  380. class Scene_Map < Scene_Base
  381.  
  382.   #--------------------------------------------------------------------------
  383.   # ● Call Menu
  384.   #--------------------------------------------------------------------------   
  385.   alias mog_pickup_call_menu call_menu
  386.   def call_menu
  387.       return if $game_temp.pickup_lock == true
  388.       mog_pickup_call_menu
  389.   end
  390.  
  391. end
  392.  
  393. #==============================================================================
  394. # ■ Game Interpreter
  395. #==============================================================================
  396. class Game_Interpreter
  397.  
  398.   #--------------------------------------------------------------------------
  399.   # ● Command 352
  400.   #--------------------------------------------------------------------------      
  401.   alias mog_pickup_command_352 command_352
  402.   def command_352
  403.       return if $game_temp.pickup_lock == true
  404.       mog_pickup_command_352
  405.   end
  406.  
  407. end     
  408.  
  409. #==============================================================================
  410. # ■ Game_Map
  411. #==============================================================================
  412. class Game_Map
  413.  
  414. #--------------------------------------------------------------------------
  415. # ● Setup
  416. #--------------------------------------------------------------------------  
  417.   alias mog_pickup_setup setup
  418.   def setup(map_id)
  419.       mog_pickup_setup(map_id)
  420.       reset_pickup
  421.   end  
  422.  
  423. #--------------------------------------------------------------------------
  424. # ● Reset Pickup
  425. #--------------------------------------------------------------------------  
  426.   def reset_pickup
  427.       for i in $game_map.events.values
  428.           if i.throw_active
  429.              i.throw_active = false
  430.              i.moveto($game_player.x,$game_player.y)
  431.              i.jump(0,0)            
  432.              i.move_backward
  433.              $game_player.character_name = $game_temp.character_pre_name
  434.           end   
  435.       end  
  436.       $game_temp.pickup_lock_time = 0
  437.       $game_temp.pickup_lock = false
  438.   end  
  439. end  
  440.  
  441. $mog_rgss3_pickup_and_throw = true

Lv1.梦旅人

梦石
0
星屑
39
在线时间
7 小时
注册时间
2024-2-2
帖子
3
2
发表于 2024-2-3 11:00:36 | 只看该作者
先留个名,看一眼MOG的代码再说。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-27 21:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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