SHOW:
|
|
- or go back to the newest paste.
| 1 | #============================================================================== | |
| 2 | - | # • Sensor Event |
| 2 | + | # • Ultimate Sensor Event |
| 3 | #============================================================================== | |
| 4 | # Autor: Dax | |
| 5 | # Requerimento: Dax Core | |
| 6 | - | # Versão: 2.0 |
| 6 | + | # Versão: 2.5 |
| 7 | # Site: www.dax-soft.weebly.com | |
| 8 | #============================================================================== | |
| 9 | # @tiagoms : Feedback que ajudou a incrementar mais. | |
| 10 | #============================================================================== | |
| 11 | # • Descrição: | |
| 12 | #------------------------------------------------------------------------------ | |
| 13 | # Um sistema de sensor, onde permite diferentes tipos de formas dos eventos | |
| 14 | # "sentir" a presença do jogador. | |
| 15 | #============================================================================== | |
| 16 | # • Como usar: Utilze os comandos em condições. | |
| 17 | #------------------------------------------------------------------------------ | |
| 18 | # a : área em quadrados(tiles) em que o sensor será ativado. Por padrão é 1 | |
| 19 | # b : ID do evento. Se definir nada, é o evento local. Por padrão é o evento local. | |
| 20 | #------------------------------------------------------------------------------ | |
| 21 | # 1 * Primeiro tipo de sensor, e o sensor de área. O comando para calcular esse | |
| 22 | # tipo de sensor é o : sarea?(a, b) : | |
| 23 | # 2 * Sensor que verifica se está em baixo do evento..: sfront?(a, b) | |
| 24 | # 3 * Sensor que verifica se está em cima do evento..: sago?(a, b) | |
| 25 | # 4 * Sensor que verifica se está a esquerda do evento: sleft?(a, b) | |
| 26 | # 5 * Sensor que verifica se está a direita do evento: sright?(a, b) | |
| 27 | # 6 * Sensor que faz uma verificação em forma de cruz: scross?(a, b) | |
| 28 | - | # 9 * Sensor que verifica se está dentro da área de um círculo(formato de um |
| 28 | + | |
| 29 | - | # círculo) : scircle?(a, b) |
| 29 | + | |
| 30 | - | # 10 * Sensor que verifica se está somente atrás do evento. sbehind?(a, b) |
| 30 | + | # 9 * Sensor que verifica se está somente atrás do evento. sbehind?(a, b) |
| 31 | # 10 * Sensor que verifica se está somente a esquerda do evento. vleft?(a, b) | |
| 32 | - | Dax.register(:sensor_event, "Dax", 2.0, "12/07/14") |
| 32 | + | # 11 * Sensor que verifica se está somente a direita do evento. vright?(a, b) |
| 33 | #------------------------------------------------------------------------------ | |
| 34 | # * Atenção, o item 2 á 5 são estáticos, ou seja, | |
| 35 | # serão fixos independente da direção em que o evento esteja | |
| 36 | # * Os itens 7, 9, 10, 11: Em uma linha reta | |
| 37 | #------------------------------------------------------------------------------ | |
| 38 | #============================================================================== | |
| 39 | Dax.register(:sensor_event, "Dax", 2.5, "12/07/14") | |
| 40 | #============================================================================== | |
| 41 | # • Game_Interpreter | |
| 42 | #============================================================================== | |
| 43 | class Game_Interpreter | |
| 44 | #---------------------------------------------------------------------------- | |
| 45 | # • Pega as coordenadas do evento é do player. | |
| 46 | #---------------------------------------------------------------------------- | |
| 47 | def block_sensor(b=nil) | |
| 48 | event = $game_map.events[b.nil? ? @event_id : Integer(b)] | |
| 49 | yield(event.x, event.y, $game_player.x, $game_player.y) | |
| 50 | end | |
| 51 | #---------------------------------------------------------------------------- | |
| 52 | # • Sensor por área. | |
| 53 | #---------------------------------------------------------------------------- | |
| 54 | def sarea?(a=1, b=nil) | |
| 55 | a = a < 0 || a.nil? ? 1 : Integer(a).abs | |
| 56 | distance = DMath.distance_sensor($game_player, $game_map.events[b.nil? ? @event_id : Integer(b)]) | |
| 57 | return (distance <= a) | |
| 58 | end | |
| 59 | #---------------------------------------------------------------------------- | |
| 60 | # • Sensor na frente do evento. | |
| 61 | #---------------------------------------------------------------------------- | |
| 62 | def sfront?(a=1, b=nil) | |
| 63 | a = a < 0 || a.nil? ? 1 : Integer(a).abs | |
| 64 | block_sensor(b) { |ex, ey, px, py|
| |
| 65 | return unless px == ex | |
| 66 | (ey..(ey + a)).each { |y|
| |
| 67 | break unless $game_map.passable?(ex, y, 2) | |
| 68 | return true if py == y | |
| 69 | } | |
| 70 | } | |
| 71 | return false | |
| 72 | end | |
| 73 | #---------------------------------------------------------------------------- | |
| 74 | # • Sensor atrás do evento. | |
| 75 | #---------------------------------------------------------------------------- | |
| 76 | def sago?(a=1, b=nil) | |
| 77 | a = a < 0 || a.nil? ? 1 : Integer(a).abs | |
| 78 | block_sensor(b) { |ex, ey, px, py|
| |
| 79 | return unless px == ex | |
| 80 | ey.downto(ey - a).each { |y|
| |
| 81 | break unless $game_map.passable?(ex, y, 8) | |
| 82 | return true if py == y | |
| 83 | } | |
| 84 | } | |
| 85 | return false | |
| 86 | end | |
| 87 | #---------------------------------------------------------------------------- | |
| 88 | # • Sensor quando estiver sobre o evento. | |
| 89 | #---------------------------------------------------------------------------- | |
| 90 | def sabout?(b=nil) | |
| 91 | block_sensor(b) { |ex, ey, px, py| return true if px == ex && py == ey }
| |
| 92 | return false | |
| 93 | end | |
| 94 | #---------------------------------------------------------------------------- | |
| 95 | # • Sensor quando estiver a direita do evento. | |
| 96 | #---------------------------------------------------------------------------- | |
| 97 | def sright?(a=1, b=nil) | |
| 98 | a = a < 0 || a.nil? ? 1 : Integer(a).abs | |
| 99 | block_sensor(b) {|ex, ey, px, py|
| |
| 100 | return unless py == ey | |
| 101 | (ex..(ex + a)).each { |x|
| |
| 102 | break unless $game_map.passable?(x, ey, 6) | |
| 103 | return true if px == x | |
| 104 | } | |
| 105 | } | |
| 106 | return false | |
| 107 | end | |
| 108 | #---------------------------------------------------------------------------- | |
| 109 | # • Sensor quando estiver a esquerda do evento. | |
| 110 | #---------------------------------------------------------------------------- | |
| 111 | def sleft?(a=1, b=nil) | |
| 112 | a = a < 0 || a.nil? ? 1 : Integer(a).abs | |
| 113 | block_sensor(b) {|ex, ey, px, py|
| |
| 114 | return unless py == ey | |
| 115 | ex.downto(ex - a).each { |x|
| |
| 116 | break unless $game_map.passable?(x, ey, 4) | |
| 117 | return true if px == x | |
| 118 | } | |
| 119 | } | |
| 120 | return false | |
| 121 | end | |
| 122 | #---------------------------------------------------------------------------- | |
| 123 | # • Sensor em forma de cruz. | |
| 124 | #---------------------------------------------------------------------------- | |
| 125 | def scross?(a=1, b=nil) | |
| 126 | sfront?(a, b) || sago?(a, b) || sright?(a, b) || sleft?(a, b) | |
| 127 | end | |
| 128 | #---------------------------------------------------------------------------- | |
| 129 | # • Sensor que verifica somente a visão do evento. | |
| 130 | #---------------------------------------------------------------------------- | |
| 131 | def svision?(a=1, b=nil) | |
| 132 | case $game_map.events[b.nil? ? @event_id : Integer(b)].direction | |
| 133 | - | # • Sensor que verifica em forma de círculo. |
| 133 | + | |
| 134 | when 4 then sleft?(a, b) | |
| 135 | - | def scircle?(a=1, b=nil) |
| 135 | + | |
| 136 | when 8 then sago?(a, b) | |
| 137 | end | |
| 138 | - | sr = [ (px - ex).abs, (py - ey).abs ] |
| 138 | + | |
| 139 | - | return true if sr[0] + sr[1] <= a |
| 139 | + | |
| 140 | # • Sensor que verifica se está somente atrás do evento. | |
| 141 | #---------------------------------------------------------------------------- | |
| 142 | def sbehind?(a=1, b=nil) | |
| 143 | case $game_map.events[b.nil? ? @event_id : Integer(b)].direction | |
| 144 | when 2 then sago?(a, b) | |
| 145 | when 4 then sright?(a, b) | |
| 146 | when 6 then sleft?(a, b) | |
| 147 | when 8 then sfront?(a, b) | |
| 148 | end | |
| 149 | end | |
| 150 | #---------------------------------------------------------------------------- | |
| 151 | # • Sensor que verifica se está somente a esquerda do evento. | |
| 152 | #---------------------------------------------------------------------------- | |
| 153 | def vleft?(a=1, b=nil) | |
| 154 | case $game_map.events[b.nil? ? @event_id : Integer(b)].direction | |
| 155 | when 2 then sright?(a, b) | |
| 156 | when 4 then sfront?(a, b) | |
| 157 | when 6 then sago?(a, b) | |
| 158 | when 8 then sleft?(a, b) | |
| 159 | end | |
| 160 | end | |
| 161 | #---------------------------------------------------------------------------- | |
| 162 | # • Sensor que verifica se está somente a direita do evento. | |
| 163 | #---------------------------------------------------------------------------- | |
| 164 | def vright?(a=1, b=nil) | |
| 165 | case $game_map.events[b.nil? ? @event_id : Integer(b)].direction | |
| 166 | when 2 then sleft?(a, b) | |
| 167 | when 4 then sfront?(a, b) | |
| 168 | when 6 then sago?(a, b) | |
| 169 | when 8 then sright?(a, b) | |
| 170 | end | |
| 171 | end | |
| 172 | end |