Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Mouse System
Autor Wiadomość
MrBoomGood 




Preferowany:
RPG Maker VX

Pomógł: 3 razy
Dołączył: 07 Kwi 2011
Posty: 292
Skąd: Katowice
  Wysłany: Pon 16 Lip, 2012 13:27
Mouse System
~ Mouse System ~


Krótki opis:
Skrypt dodaje do gry myszkę.

Autor:
Jet10985

Tłumaczenie:
Nie tłumaczone

Kompatybilność:
RPG Maker VX Ace

Skrypt:
Spoiler:

Kod:
#===============================================================================
# Mouse System (RGSS3)
# By Jet10985(Jet)
# Some Code by: Woratana, Berka
# Uses: ListRA-92's Path Finding
# Super Heavy Testing/Debug Help/Requested By: Nathanial(Beleren)
#===============================================================================
# This script will allow full use of the mouse inside of rmvx for various
# purposes.
# This script has: 7 customization options.
#===============================================================================
# Overwritten Methods:
# Game_Player: move_by_input
#-------------------------------------------------------------------------------
# Aliased methods:
# Scene_Map: update, terminate, update_transfer_player
# Input: update, trigger?, press?, repeat?, dir4, dir8
# Window_Selectable: update, top_row=
# Scene_File: update
# Window_NameInput: update
# Game_Temp: initialize
# Game_Event: initialize, update
#===============================================================================

=begin
Showing text above event when mouse hovers:

If you want a message to appear over an event's head if the mouse is hovering
over the event, put this comment in the event:

MOUSE TEXT MESSAGE HERE

everything after TEXT will be the hovering display.
--------------------------------------------------------------------------------
Change mouse picture above event when mouse hovers:

If you want the mouse's picture to temporarily change whne over an event, put
this comment in the event

MOUSE PIC NAME/NUMBER

if you put a name, the mouse will become that picture, but if you put a number
then the mouse will become the icon that is the id number
--------------------------------------------------------------------------------
Specific mouse click movement routes:

If you want the player to land specifically in a square around an event when
they click to move on the event, put one of these comments in the event:

MOUSE MOVE UP/LEFT/RIGHT/DOWN

only put the direction that you want the player to land on.
--------------------------------------------------------------------------------
Click to activate:

If you want an event to automatically start when it is clicked on, place
this in an event comment:

MOUSE CLICK
--------------------------------------------------------------------------------
Don't stop the player when walking over a touch event:

By default, this script will stop a mouse-caused movement if the player walks
over/under a player touch/event touch event. If you want the event to activate,
but for the player to keep walking to their destination, put this comment in the
event:

MOUSE NOSTOP
--------------------------------------------------------------------------------
Ignore Events:

To have an event be ignored when the mouse makes it's movement path(as if the
event isn't there), put this comment in the event:

MOUSE THROUGH
--------------------------------------------------------------------------------
Extra Notes:

In selectable windows that have more items than what's shown, players can
either put the mouse below the window to scroll down, OR use the mouse's
scroll wheel to scroll up/down.

You can activate action button events by standing next to the event and clicking
on it with the mouse.
=end
module JetMouse
 
  # If you are using a graphic, this is it.
  # It must be in the Graphics/System folder.
  CURSOR_PICTURE = "cursor-mouse"
 
  # If you aren't using a graphic, this icon will be the mouse.
  # To use the icon, just put a non-existant picture as the above config
  ICON_INDEX = 387
 
  # Do you want the player to be able to move by clicking the mouse?
  ALLOW_MOUSE_MOVEMENT = true
 
  # Do you want mouse movement to do 8-dir walking?
  # Requires 8-Dir Walking by Jet.
  DO_8DIR_WALKING = false
 
  # Turning this switch on will make the mouse invisible and unusuable until
  # the switch is turned off
  TURN_MOUSE_OFF_SWITCH = 20
 
  # Do you want the mouse to check for mouse wheel scrolling in selectbale
  # windows? Not using this may reduce some rare cases of lag.
  USE_WHEEL_DETECTION = false
 
  # Do you want to use the Dijkstra formula for pathfinding?
  # This is more accurate, but slower.
  USE_DIJKSTRA = true
 
end

#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================
module Mouse
 
  Get_Message = Win32API.new('user32', 'GetMessage', 'plll', 'l')
  GetAsyncKeyState = Win32API.new("user32", "GetAsyncKeyState", 'i', 'i')
  GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
  SetCursorPos = Win32API.new('user32', 'SetCursorPos', 'nn', 'n')
  GetCursorPo = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
  ScreenToClient = Win32API.new('user32', 'ScreenToClient', 'lp', 'i')
  FindWindowA = Win32API.new('user32', 'FindWindowA', 'pp', 'l')
  GetClientRect = Win32API.new('user32', 'GetClientRect', 'lp', 'i')
  GetWindowRect = Win32API.new('user32', 'GetWindowRect', 'lp', 'i')
  contents = File.open('Game.ini', 'r') { |f| f.read }
  q = contents[/Title=(.+)/].nil? ? "cccc" : $1
  @handle = FindWindowA.call('RGSS Player', q)
  module_function
 
  Point = Struct.new(:x, :y)
 
  Message = Struct.new(:message, :wparam, :lparam, :pt)
 
  Param = Struct.new(:x, :y, :scroll)
 
  Scroll = 0x0000020A
 
  def hiword(dword); return((dword&0xffff0000) >> 16)&0x0000ffff; end
  def loword(dword); return dword&0x0000ffff; end
   
  def word2signed_short(value)
    return value if (value&0x8000) == 0
    return -1 *((~value&0x7fff) + 1)
  end
 
  def unpack_dword(buffer, offset = 0)
    ret = buffer[offset + 0]&0x000000ff
    ret |=(buffer[offset + 1] <<(8 * 1))&0x0000ff00
    ret |=(buffer[offset + 2] <<(8 * 2))&0x00ff0000
    ret |=(buffer[offset + 3] <<(8 * 3))&0xff000000
    return ret
  end
 
  def unpack_msg(buffer)
    msg = Message.new; msg.pt = Point.new
    msg.message=unpack_dword(buffer,4*1)
    msg.wparam = unpack_dword(buffer, 4 * 2)
    msg.lparam = unpack_dword(buffer,4*3)
    msg.pt.x = unpack_dword(buffer, 4 * 5)
    msg.pt.y = unpack_dword(buffer, 4 * 6)
    return msg
  end
 
  def wmcallback(msg)
    return unless msg.message == Scroll
    param = Param.new
    param.x = word2signed_short(loword(msg.lparam))
    param.y = word2signed_short(hiword(msg.lparam))
    param.scroll = word2signed_short(hiword(msg.wparam))
    return [param.x, param.y, param.scroll]
  end
 
  def click?(button)
    return false if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    return true if @keys.include?(button)
    return false
  end
 
  def press?(button)
    return false if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    return true if @press.include?(button)
    return false
  end
 
  def set_pos(x_pos = 0, y_pos = 0)
    width,height = client_size
    if (x_pos.between?(0, width) && y_pos.between?(0, height))
      SetCursorPos.call(client_pos[0] + x_pos,client_pos[1] + y_pos)
    end
  end
 
  def update
    return if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    @pos = Mouse.pos
    @keys, @press = [], []
    @keys.push(1) if GetAsyncKeyState.call(1)&0x01==1
    @keys.push(2) if GetAsyncKeyState.call(2)&0x01==1
    @keys.push(3) if GetAsyncKeyState.call(4)&0x01==1
    @press.push(1) if pressed?(1)
    @press.push(2) if pressed?(2)
    @press.push(3) if pressed?(4)
  end
 
  def pressed?(key)
    return true unless GetKeyState.call(key).between?(0, 1)
    return false
  end
 
  def global_pos
    pos = [0, 0].pack('ll')
    GetCursorPo.call(pos) != 0 ?(return pos.unpack('ll')):(return [0, 0])
  end
 
  def pos
    return 0, 0 if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    x, y = screen_to_client(*global_pos)
    width, height = client_size
    begin
      x = 0 if x <= 0; y = 0 if y <= 0
      x = width if x >= width; y = height if y >= height
      return x, y
    end
  end
 
  def screen_to_client(x, y)
    return nil unless x && y
    pos = [x, y].pack('ll')
    ScreenToClient.call(@handle, pos) != 0 ?(return pos.unpack('ll')):(return [0, 0])
  end
 
  def client_size
    rect = [0, 0, 0, 0].pack('l4')
    GetClientRect.call(@handle, rect)
    right,bottom = rect.unpack('l4')[2..3]
    return right, bottom
  end
 
  def client_pos
    rect=[0, 0, 0, 0].pack('l4')
    GetWindowRect.call(@handle, rect)
    left, upper = rect.unpack('l4')[0..1]
    return left + 4, upper + 30
  end
 
  def grid
    return [-1, -1] if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    return [-1, -1] if @pos.nil?
    return [(@pos[0]/32),(@pos[1]/32)]
  end
 
  def true_grid
    return [grid[0] + $game_map.display_x / 256, grid[1] + $game_map.display_y / 256]
  end
 
  def area?(x, y, width, height)
    return false if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    return false if @pos.nil?
    return @pos[0].between?(x, width + x) && @pos[1].between?(y, height + y)
  end
 
  def scroll
    msg="\0"*32;Get_Message.call(msg,0,0,0);r=wmcallback(unpack_msg(msg))
    return r if !r.nil?
  end
end

class Sprite_Cursor < Sprite_Base
 
  attr_accessor :current_cursor, :not_default
 
  include JetMouse
 
  def initialize
    super
    @current_cursor = ""
    @not_default = false
    Win32API.new('user32', 'ShowCursor', 'i', 'i').call(0)
    self.z = 5004
    create_cursor(CURSOR_PICTURE)
    $game_switches = []
    update
  end
 
  def create_cursor(cursor = "")
    self.bitmap.dispose unless self.bitmap.nil?
    self.bitmap = nil
    begin
      self.bitmap = Cache.system(cursor)
      @current_cursor = cursor
    rescue
      self.bitmap = Bitmap.new(24, 24)
      bitmap = Cache.system("Iconset")
      rect = Rect.new(ICON_INDEX % 16 * 24, ICON_INDEX / 16 * 24, 24, 24)
      self.bitmap.blt(0, 0, bitmap, rect)
      @current_cursor = ICON_INDEX
    end
    @not_default = false
  end
 
  def change_cursor(cursor)
    self.bitmap.dispose unless self.bitmap.nil?
    self.bitmap = nil
    begin
      self.bitmap = Cache.system(cursor)
      @current_cursor = cursor
      @not_default = true
    rescue
      begin
        self.bitmap = Bitmap.new(24, 24)
        bitmap = Cache.system("Iconset")
        rect = Rect.new(cursor % 16 * 24, cursor / 16 * 24, 24, 24)
        self.bitmap.blt(0, 0, bitmap, rect)
        @current_cursor = cursor
        @not_default = true
      rescue
        create_cursor(CURSOR_PICTURE)
      end
    end
  end

  def update
      return if self.disposed?
    if $game_switches[TURN_MOUSE_OFF_SWITCH]
      self.opacity = 0 unless self.opacity == 0
    end
    self.opacity = 255 unless self.opacity == 255
    super
    x = self.x
    y = self.y
    self.x, self.y = Mouse.pos
    self.x -= 8 if @not_default
    self.y -= 8 if @not_default
  end
end

$cursor = Sprite_Cursor.new

module Input
 
  class << self
   
    alias jet5888_press? press? unless $@
    def press?(arg)
      if arg == Input::C
        return true if Mouse.press?(1)
      elsif arg == Input::B
        return true if Mouse.press?(2)
      end
      jet5888_press?(arg)
    end
   
    alias jet5888_repeat? repeat? unless $@
    def repeat?(arg)
      if arg == Input::C
        return true if Mouse.click?(1)
      elsif arg == Input::B
        return true if Mouse.click?(2)
      end
      jet5888_repeat?(arg)
    end
   
    alias jet5888_trigger? trigger? unless $@
    def trigger?(arg)
      if arg == Input::C
        return true if Mouse.click?(1)
      elsif arg == Input::B
        return true if Mouse.click?(2)
      end
      jet5888_trigger?(arg)
    end
   
    alias jet8432_update update unless $@
    def update(*args, &block)
      jet8432_update(*args, &block)
      if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH] && $cursor.opacity != 0
        $cursor.opacity = 0
      end
      $cursor.update unless $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
      Mouse.update unless $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    end
 
    alias jet1626_dir4 dir4 unless $@
    def dir4(*args, &block)
      if !$game_temp.nil?
        if $game_temp.move_because_of_mouse
          if !$game_temp.mouse_path.empty? && $game_player.movable? &&
              !$game_map.interpreter.running? && SceneManager.scene_is?(Scene_Map) &&
              jet1626_dir4(*args, &block) == 0
            f = $game_temp.mouse_path.reverse!.pop
            $game_temp.mouse_path.reverse!
            return f * 2
          else
            $game_temp.move_because_of_mouse = false
            $game_temp.mouse_path = []
          end
        end
      end
      jet1626_dir4(*args, &block)
    end
   
    alias jet1626_dir8 dir8 unless $@
    def dir8(*args, &block)
      if !$game_temp.nil?
        if $game_temp.move_because_of_mouse
          if !$game_temp.mouse_path.empty? && $game_player.movable? &&
              !$game_map.interpreter.running? && SceneManager.scene_is?(Scene_Map) &&
              jet1626_dir8(*args, &block) == 0
            f = $game_temp.mouse_path.reverse!.pop
            $game_temp.mouse_path.reverse!
            if [1, 2, 3, 4].include?(f)
              return f * 2
            else
              case f
              when 5
                return 1
              when 6
                return 3
              when 7
                return 7
              when 8
                return 9
              end
            end
          else
            $game_temp.move_because_of_mouse = false
            $game_temp.mouse_path = []
          end
        end
      end
      jet1626_dir8(*args, &block)
    end
  end
end

class Game_Player
   
    def move_by_input
    return if !movable? || $game_map.interpreter.running?
    move = Input.dir4
    move_straight(move) if move > 0
  end
end

class Game_Character
 
  def find_mouse_path(trgt_x, trgt_y)
      fake_char = Game_Character.new
      fake_char.moveto(self.x, self.y)
        fake_char.set_direction(self.direction)
      path = []
      g = MGraph.new(JetMouse::DO_8DIR_WALKING ? 8 : 4)
    until fake_char.x == trgt_x && fake_char.y == trgt_y
      if JetMouse::USE_DIJKSTRA
        path.push(g.Dijkstra(fake_char.x, fake_char.y, trgt_x, trgt_y))
      else
        path.push(g.AStar(fake_char.x, fake_char.y, trgt_x, trgt_y))
      end
      if path[-1] != 0
        fake_char.move_straight(path[-1] * 2)
      else
        path = []
        break
      end
    end
    Graphics.frame_reset
    return path.reverse
  end
end

class PQueue < Array

  def addEl(ii)
    iii = 0
    while iii < self.length && self[iii] < ii
      iii += 1
    end
    self.insert(iii,ii)
  end

  def remEl(ii)
    iii = 0
    while iii < self.length && self[iii] < ii
      iii += 1
    end
    self.delete_at(iii)
  end

  def found?(ii)
    i = 0
    j = self.length-1
    ff = false
    while (not ff) && i <= j
      mid = (i+j)/2
      if self[mid] == ii
        ff = true
      else
        if self[mid] < ii
          i = mid+1
        else
          j = mid-1
        end
      end
    end
    return ff
  end
end

class MGraph

  attr_accessor :w, :h
  attr_accessor :neighbors
  attr_accessor :passage_table

  def initialize(nh, char = $game_player)
    @w = $game_map.width
    @h = $game_map.height
    @neighbors = nh
    @passage_table = Table.new(@w,@h,nh)
    for i in 0..@w
      for j in 0..@h
        for k in 1..nh
          @passage_table[i,j,k-1] = char.passable?(i, j, k * 2) ? 1 : 0
          if not neighborExist?(nodeOf(i, j), k)
            @passage_table[i, j, k - 1] = 0
          end
        end
      end
    end
  end

  def nodeOf(x,y)
    return y*@w+x+1
  end

  def xNode(idxNode)
    return (idxNode-1) % @w
  end
 
  def yNode(idxNode)
    return (idxNode-1)/@w
  end

  def neighborOf(idxNode,dir)
    case dir
      when 1
        return (idxNode+@w)
      when 2
        return (idxNode-1)
      when 3
        return (idxNode+1)
      when 4
        return (idxNode-@w)
    end
  end

  def neighborExist?(idxNode,dir)
    case dir
      when 1
        return (yNode(idxNode)<@h-1)
      when 2
        return (xNode(idxNode)>0)
      when 3
        return (xNode(idxNode)<@w-1)
      when 4
        return (yNode(idxNode)>0)
    end
  end

  def reconstruct_path(s,t,vertices_prev)
    u=t
    while vertices_prev[u] != s && vertices_prev[u] != 0
      u = vertices_prev[u]
    end
    case u
      when s+@w
        return 1
      when s-1
        return 2
      when s+1
        return 3
      when s-@w
        return 4
    end
    return 0
  end

  def heuristic_dist(u,v)
    dx = xNode(v)-xNode(u)
    dy = yNode(v)-yNode(u)
    return (dx.abs+dy.abs)
  end
 
  def Dijkstra(x1, y1, x2, y2)
    s = nodeOf(x1, y1)
    t = nodeOf(x2, y2)
    q = PQueue.new(1, 0)
    q.addEl(s)
    vertices_dist = Array.new(@w * @h + 1, 9999)
    vertices_prev = Array.new(@w * @h + 1, 0)
    vertices_dist[s] = 0
    while q.length > 1
      d = vertices_dist[q[1]]
      u = q[1]
      if q.length > 2
        for ii in 2..q.length-1
          if vertices_dist[q[ii]] < d
            d = vertices_dist[q[ii]]
            u = q[ii]
          end
        end
      end
      if u == t
        return reconstruct_path(s,t,vertices_prev)
      end
      q.remEl(u)
      for i in 1..@neighbors
        if @passage_table[xNode(u), yNode(u), i - 1] == 1
          v = neighborOf(u, i)
          alt = vertices_dist[u] + 1
          if alt < vertices_dist[v]
            q.addEl(v)
            vertices_dist[v] = alt
            vertices_prev[v] = u
          end
        end
      end
    end
    return 0
  end
 
  def AStar(x1, y1, x2, y2)
    s = nodeOf(x1, y1)
    t = nodeOf(x2, y2)
    q = PQueue.new(1, 0)
    q.addEl(s)
    q1 = Array.new(@w * @h + 1, false)
    vertices_prev = Array.new(@w * @h + 1, 0)
    vertices_dist = Array.new(@w * @h + 1, 9999)
    h_score = Array.new(@w * @h + 1, 0)
    f_score = Array.new(@w * @h + 1, 9999)
    vertices_dist[s] = 0
    h_score[s] = heuristic_dist(s, t)
    f_score[s] = h_score[s]
    while q.length > 1
      d = f_score[q[1]]
      u = q[1]
      if q.length > 2
        for ii in 2..q.length-1
          if f_score[q[ii]] < d
            d = f_score[q[ii]]
            u = q[ii]
          end
        end
      end
      if u == t
        return reconstruct_path(s, t, vertices_prev)
      end
      q.remEl(u)
      q1[u] = true
      for i in 1..@neighbors
        if @passage_table[xNode(u), yNode(u), i - 1] == 1
          v = neighborOf(u, i)
          if !q1[v]
            tentative_g_score = vertices_dist[u] + 1
            if !q.found?(v)
              q.addEl(v)
              tentative_is_better = true
            elsif tentative_g_score < vertices_dist[v]
              tentative_is_better = true
            else
              tentative_is_better = false
            end
            if tentative_is_better
              if vertices_prev[v] != 0
                if f_score[u] < f_score[vertices_prev[v]]
                  vertices_prev[v] = u
                end
              else
                vertices_prev[v] = u
              end
              vertices_dist[v] = tentative_g_score
              h_score[v] = heuristic_dist(v, t)
              f_score[v] = vertices_dist[v] + h_score[v]
            end
          end
        end
      end
    end
    return 0
  end
end

class Game_Temp
 
  attr_accessor :move_because_of_mouse
  attr_accessor :mouse_controlled_object
  attr_accessor :making_path
  attr_accessor :mouse_path
  attr_accessor :did_mouse_change
 
  alias jet6742_initialize initialize unless $@
  def initialize(*args, &block)
    jet6742_initialize(*args, &block)
    @move_because_of_mouse = false
    @making_path = false
    @mouse_path = []
  end
end

class Window_Selectable
 
  alias jet6742_update update unless $@
  def update(*args, &block)
    jet6742_update(*args, &block)
    update_mouse if self.active && self.visible
  end
 
  alias jet7222_top_row top_row= unless $@
  def top_row=(*args, &block)
    @last_cursor_move = 0 if @last_cursor_move.nil?
    @last_cursor_move -= 1
    return if @in_rect_loop || @last_cursor_move > 0
    jet7222_top_row(*args, &block)
    @last_cursor_move = 10
  end
 
  def update_mouse
    if JetMouse::USE_WHEEL_DETECTION
      f = Mouse.scroll
      if !f.nil?
        if f[2] < 0
          if contents.height > self.height && self.oy - contents.height < -self.height + 32
            self.top_row = self.top_row + 1
          end
        else
          self.top_row = self.top_row - 1 if contents.height > self.height
        end
      end
    end
    original_index = @index
    fake_index = -2
    add_x = self.viewport.nil? ? 0 : self.viewport.ox
    add_y = self.viewport.nil? ? 0 : self.viewport.oy
    self.item_max.times {|i|
      rect = item_rect(i)
      if Mouse.area?(self.x - self.ox + rect.x + 16 + add_x, self.y - self.oy + rect.y + 16 + add_y, rect.width, rect.height)
        fake_index = i
      end
    }
    @index = fake_index == -2 ? original_index : fake_index
    update_cursor
  end
end

class Scene_File
 
  alias wor_scefil_upd_mouse update unless $@
  def update(*args, &block)
    (0..self.item_max - 1).each do |i|
      ix = @savefile_windows[i].x
      iy = @savefile_windows[i].y + 48
      iw = @savefile_windows[i].width
      ih = @savefile_windows[i].height
      if Mouse.area?(ix, iy, iw, ih)
        @savefile_windows[@index].selected = false
        @savefile_windows[i].selected = true
        @index = i
      end
    end
    wor_scefil_upd_mouse(*args, &block)
  end
end

class Window_NameInput
 
  alias wor_winnam_upd_mouse update unless $@
  def update(*args, &block)
    wor_winnam_upd_mouse(*args, &block)
    if self.active and self.visible
      (0..self.table[@page].size - 1).each do |i|
      irect = item_rect(i)
      irx = self.x + 16 + irect.x - self.ox
      iry = self.y + 16 + irect.y - self.oy
      @index = i if Mouse.area?(irx, iry, irect.width, irect.height)
      end
    end
  end
end

class Window_PartyCommand
 
  def update_mouse
    (0..self.item_max - 1).each do |i|
    irect = item_rect(i)
    irx = self.viewport.ox + 16 + irect.x - self.ox
    iry = 288 + 16 + irect.y - self.oy + 64
    self.index = i if Mouse.area?(irx, iry, irect.width, irect.height)
    end
  end
end

class Window_ActorCommand
 
  def update_mouse
    (0..self.item_max - 1).each do |i|
    irect = item_rect(i)
    irx = self.viewport.ox + 288 + 16 + irect.x + 96
    iry = 288 + 16 + irect.y + 64
    self.index = i if Mouse.area?(irx, iry, irect.width, irect.height)
    end
  end
end

class Window_EventPopUp < Window_Base
 
  def initialize(x, y, width, height, text)
    super(x, y, width, height)
    self.opacity = 0
    @text = text
    refresh
  end
 
  def refresh
    self.contents.clear
    self.contents.draw_text(0, 0, self.width, 24, @text)
  end
end

class Game_Event
 
  attr_accessor :popup_window, :page
 
  def check_for_comment(regexp)
    return false if @list.nil?
    for item in @list
      if item.code == 108 or item.code == 408
        if !item.parameters[0][regexp].nil?
          return $1.nil? ? true : $1
        end
      end
    end
    return false
  end
 
  def through
    return true if check_for_comment(/MOUSE THROUGH/i) && $game_temp.making_path
    return @through
  end
 
  alias jet2734_update update unless $@
  def update(*args, &block)
    jet2734_update(*args, &block)
    update_mouse_popup
    update_mouse_change
  end
 
  def update_mouse_popup
    switch = $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    if Mouse.true_grid == [self.x, self.y] && !switch && !@erased
      f = self.check_for_comment(/MOUSE TEXT(.+)/i)
      if f != false
        q = Bitmap.new(1, 1)
        size = q.text_size(f)
        x = self.screen_x - 16 - size.width / 2
        y = self.screen_y - 52 - size.height / 2
        if self.popup_window != nil
          self.popup_window.dispose
          self.popup_window = nil
        end
        self.popup_window = Window_EventPopUp.new(x, y,
          size.width + 34, size.height + 34, f)
        q.dispose
        q = nil
      end
    else
      if self.popup_window != nil
        self.popup_window.dispose
        self.popup_window = nil
      end
    end
  end
 
  def update_mouse_change
    if Mouse.true_grid == [self.x, self.y]
      f =(self.check_for_comment(/MOUSE PIC(.+)/i) rescue false)
      if f != false
        if f.to_i != 0
          $cursor.change_cursor(f.to_i) unless $cursor.current_cursor == f.to_i
        else
          $cursor.change_cursor(f) unless $cursor.current_cursor == f
        end
        $game_temp.did_mouse_change = true
      end
    end
  end
end


class Scene_Map
 
  alias jet6742_update update unless $@
  def update(*args, &block)
    if !$game_message.visible
      update_mouse_left_click
    end
    jet6742_update(*args, &block)
    check_mouse_change
  end
 
  alias jet7811_terminate terminate unless $@
  def terminate(*args, &block)
    for event in $game_map.events.values
      next if event.popup_window.nil?
      event.popup_window.dispose unless event.popup_window.disposed?
      event.popup_window = nil
    end
    $cursor.create_cursor(JetMouse::CURSOR_PICTURE) if ![JetMouse::CURSOR_PICTURE,
      JetMouse::ICON_INDEX].include?($cursor.current_cursor)
    $cursor.opacity = 0
    jet7811_terminate(*args, &block)
    $cursor.opacity = 255 unless $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
  end
 
  alias jet8887_update_transfer_player update_transfer_player unless $@
  def update_transfer_player(*args, &block)
    if $game_player.transfer?
      $cursor.create_cursor(JetMouse::CURSOR_PICTURE) if ![JetMouse::CURSOR_PICTURE,
        JetMouse::ICON_INDEX].include?($cursor.current_cursor)
    end
    jet8887_update_transfer_player(*args, &block)
  end
 
  def check_mouse_change
    return if $game_switches[JetMouse::TURN_MOUSE_OFF_SWITCH]
    if $game_message.visible || $game_player.transfer?
      $cursor.create_cursor(JetMouse::CURSOR_PICTURE) if ![JetMouse::CURSOR_PICTURE,
        JetMouse::ICON_INDEX].include?($cursor.current_cursor)
      return
    end
    $cursor.create_cursor(JetMouse::CURSOR_PICTURE) if $game_temp.did_mouse_change.nil? &&
      ![JetMouse::CURSOR_PICTURE, JetMouse::ICON_INDEX].include?($cursor.current_cursor)
    $game_temp.did_mouse_change = nil
  end

  def update_mouse_left_click
    return if $game_map.interpreter.running? || $game_player.transfer?
    if Mouse.click?(1)
      event_activated = false
      for event in $game_map.events_xy(*Mouse.true_grid)
        if event.check_for_comment(/MOUSE CLICK/i)
          event.start
          event_activated = true
        elsif (event.x - $game_player.x).abs + (event.y - $game_player.y).abs == 1
          if ![3, 4].include?(event.trigger) &&
               (![0, 2].include?(event.priority_type) || event.trigger == 0) &&
                  ![0, 1].include?(event.page.list.size)
            if (event.y - $game_player.y).abs >
               (event.x - $game_player.x).abs
              if event.y - $game_player.y > 0
                $game_player.set_direction(2)
              else
                $game_player.set_direction(8)
              end
            else
              if event.x - $game_player.x > 0
                $game_player.set_direction(6)
              else
                $game_player.set_direction(4)
              end
            end
            event.start
            event_activated = true
            break
          end
        end
        if !event_activated
          for i in ["UP", "DOWN", "RIGHT", "LEFT"]
            if event.check_for_comment(/MOUSE MOVE #{i}/i)
              event_activated = true
              case i
              when "UP"
                x, y = event.x, event.y - 1
              when "DOWN"
                x, y = event.x, event.y + 1
              when "LEFT"
                x, y = event.x - 1, event.y
              when "RIGHT"
                x, y = event.x + 1, event.y
              end
              break
            end
          end
        end
      end
      if !event_activated
        x, y = *Mouse.true_grid
      end
      if !x.nil?
        $game_temp.move_because_of_mouse = true
        g = $game_player.find_mouse_path(x, y)
        $game_temp.mouse_path = g
      end
    end
  end
end


Screeny:
Spoiler:




Dodatkowe informacje:
Jeśli skrypt chcemy użyć do Credis trzeba dodać: Jet, ListRA-92Berka i Woratana.
 
 
 
makerowiec64 




Preferowany:
RPG Maker 95

Pomógł: 2 razy
Dołączył: 02 Wrz 2012
Posty: 181
Skąd: się tu wziąłem?
Wysłany: Sob 20 Paź, 2012 10:13
Super skrypt!Tylko...jak go przenieść na VX Ace'a?
________________________
99 % świrów czyta mój podpis z ręką na myszce.
Nie odchylaj ręki - jest już za późno :haha:

Wiem,to mogłem zrobić w większym rozmiarze.Przypatrz się bardziej!
 
 
 
Finwe 




Preferowany:
RPG Maker VXAce

Pomógł: 34 razy
Dołączył: 30 Lip 2011
Posty: 322
Skąd: Rzeszów
Wysłany: Sob 20 Paź, 2012 13:40
@UP
To jest dział do Ace'a właśnie. Jak nie działa to znaczy że autor się rąbnął. :-P
 
 
 
ModziarzPL 



Preferowany:
RPG Maker VXAce

Dołączył: 21 Paź 2012
Posty: 14
Skąd: się wzioleś?
Wysłany: Wto 23 Paź, 2012 14:11
Może sprawdze.Bardzo ciekawe...
Tylko mam taki sam problem co Makerowiec
________________________
,,Możesz być z kamienia ale syna nie opuścisz
Po za golemami, te bezlitosne potwory robią wiele..."
 
 
matitus09 




Preferowany:
RPG Maker XP

Dołączył: 01 Wrz 2010
Posty: 53
Wysłany: Wto 06 Lis, 2012 16:26
Wklejiłem nad Main.
Niby spoko tylko kiedy chcę iść to po kliknięciu łażą mi bohaterowie jak chcą.
Również w walce mi opci nie zmienia. :cry:
________________________
Moja strona:
http://rm-xp.manifo.com/
 
 
Ramez 




Preferowany:
RPG Maker VXAce

Dołączył: 23 Lut 2013
Posty: 21
Wysłany: Pon 25 Lut, 2013 18:54
Ogólnie niby wszystko ok, ale nie mogę przez ten skrypt chodzić w 8 kierunkach, ale tak to dość dobry skrypt.
________________________
http://mfo3.pl/198610
http://www.plemiona.pl/90...r_invite_linkrl
http://pl.grepolis.com/in..._invite_to_ally
 
 
Avara 





Pomogła: 32 razy
Dołączyła: 15 Gru 2010
Posty: 331
Skąd: Łódź
Wysłany: Pon 25 Lut, 2013 18:56
Ramez, możesz używając skryptu Jet'a na ruch w ośmiu kierunkach:
Kod:
  # Do you want mouse movement to do 8-dir walking?
  # Requires 8-Dir Walking by Jet.
  DO_8DIR_WALKING = false
Wystarczy wrzucić skrypt do projektu i tą opcję ustawić na "true" ;-)
________________________


Drakensang - przeglądarkowa gra RPG online
Spoiler:

 
 
 
Ramez 




Preferowany:
RPG Maker VXAce

Dołączył: 23 Lut 2013
Posty: 21
Wysłany: Sro 27 Lut, 2013 10:45
Wyświetla, że w line 737 jest błąd. :-(
________________________
http://mfo3.pl/198610
http://www.plemiona.pl/90...r_invite_linkrl
http://pl.grepolis.com/in..._invite_to_ally
 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Czw 28 Lut, 2013 16:47
Jakiej treści jest błąd? Dobrze by było żebyś również podał namiary na skrypt Jeta.
________________________


 
 
 
Nex 




Preferowany:
RPG Maker XP

Pomógł: 15 razy
Dołączył: 27 Paź 2012
Posty: 145
Wysłany: Czw 28 Lut, 2013 16:53
Moja teoria:

Nie masz kółka w myszce :gokulol:
trochę dziwna ta moja teoria no ale cóż

a jeśli masz to sprawdź czy tu masz false czy true

Kod:
 USE_WHEEL_DETECTION = false
 
 
Ramez 




Preferowany:
RPG Maker VXAce

Dołączył: 23 Lut 2013
Posty: 21
Wysłany: Pią 01 Mar, 2013 11:13
Nex, znaczy kółka od myszki nie mam po ja jej nie używam ale mam panel czy jak to się nazywa, który jest odpowiednikiem tego kółka. Podaj line tego kodu.

Ayene, a propo skryptu nie jestem pewny bo go wyrzuciłem z projektu:
Kod:
if f[2] < 0
________________________
http://mfo3.pl/198610
http://www.plemiona.pl/90...r_invite_linkrl
http://pl.grepolis.com/in..._invite_to_ally
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene