Latest topics
Who is online?
In total there are 2 users online :: 0 Registered, 0 Hidden and 2 Guests None
Most users ever online was 22 on Wed Jun 10, 2020 10:07 pm
Top posting users this week
No user |
Most active topic starters
A|L|F|DGI|Wibie Sultan | ||||
Rudy pangabean | ||||
Maman anim | ||||
Adji Satya W | ||||
A|L|F|DGI|Rifki A | ||||
Daniez_Pro | ||||
Yardy Sohei Matri | ||||
AssJikom | ||||
Rock Bima | ||||
Sagay |
VX ace (Tikus system)
Game Design :: Engine :: RPG Maker :: Script RPG Maker IND :: RPG VX ACE
Page 1 of 1
VX ace (Tikus system)
tikus Sistem
oleh Jet
pengantar
Script lain dari saya, Jet. Aku belum pernah melihat ini dilakukan dengan baik, pernah. Selalu kereta atau eksklusif untuk permainan.
Kali ini, saya pikir itu hampir sempurna dengan fungsi besar. Itu bahkan sudah ditampilkan dalam permainan komersial!
fitur
- Mouse!
- Mudah Konfigurasi
- Mouse direpresentasikan oleh gambar ikon ATAU
- Melayang teks acara jika mouse melayang di atas acara
- Mengubah tikus grafis jika mouse melayang di atas jika acara
- Kemampuan untuk mengendalikan peristiwa dengan mouse
- Merintis jalan dekat-Flawless dengan ListRA-92 yang pathfinder
- Aktifkan peristiwa hanya dengan klik
- Menggunakan komentar acara pilihan acara khusus seperti yang tercantum di atas
- Mendukung berjalan di 8-Arah
- Bisa berubah benar-benar off dengan sebuah saklar
- Geser jendela Dipilih dengan scroll wheel mouse ini
- Dan banyak lagi ...!
oleh Jet
pengantar
Script lain dari saya, Jet. Aku belum pernah melihat ini dilakukan dengan baik, pernah. Selalu kereta atau eksklusif untuk permainan.
Kali ini, saya pikir itu hampir sempurna dengan fungsi besar. Itu bahkan sudah ditampilkan dalam permainan komersial!
fitur
- Mouse!
- Mudah Konfigurasi
- Mouse direpresentasikan oleh gambar ikon ATAU
- Melayang teks acara jika mouse melayang di atas acara
- Mengubah tikus grafis jika mouse melayang di atas jika acara
- Kemampuan untuk mengendalikan peristiwa dengan mouse
- Merintis jalan dekat-Flawless dengan ListRA-92 yang pathfinder
- Aktifkan peristiwa hanya dengan klik
- Menggunakan komentar acara pilihan acara khusus seperti yang tercantum di atas
- Mendukung berjalan di 8-Arah
- Bisa berubah benar-benar off dengan sebuah saklar
- Geser jendela Dipilih dengan scroll wheel mouse ini
- Dan banyak lagi ...!
- screenshoot:
- Code:
#===============================================================================
# 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
Similar topics
» NEO MENU SYSTEM V1.04
» Interacting System
» FPSC v1.19 Ardnaline system
» Menu system and Select Difficulty Mode
» Interacting System
» FPSC v1.19 Ardnaline system
» Menu system and Select Difficulty Mode
Game Design :: Engine :: RPG Maker :: Script RPG Maker IND :: RPG VX ACE
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
|
|
Tue Nov 12, 2013 8:11 am by A|L|F|DGI|Wibie Sultan
» perkenalan
Sun Oct 06, 2013 1:39 pm by A|L|F|DGI|Wibie Sultan
» Apasih Keunggulan Forum Ini
Tue Sep 10, 2013 3:54 pm by Rudy pangabean
» Perkenalan member Bima
Tue Sep 10, 2013 3:52 pm by Rudy pangabean
» Scared 1 Topic
Tue Sep 10, 2013 3:51 pm by Rudy pangabean
» Dynamic Class Changer
Thu Aug 29, 2013 8:26 pm by A|L|F|DGI|Wibie Sultan
» Cache Optimasi
Thu Aug 29, 2013 8:26 pm by A|L|F|DGI|Wibie Sultan
» Miscellaneous Options
Thu Aug 29, 2013 8:25 pm by A|L|F|DGI|Wibie Sultan
» XS battle audio
Thu Aug 29, 2013 8:22 pm by A|L|F|DGI|Wibie Sultan
» Teleport free
Thu Aug 29, 2013 8:20 pm by A|L|F|DGI|Wibie Sultan
» Interacting System
Thu Aug 29, 2013 8:15 pm by A|L|F|DGI|Wibie Sultan
» NEO MENU SYSTEM V1.04
Thu Aug 29, 2013 8:10 pm by A|L|F|DGI|Wibie Sultan
» Rules update script
Thu Aug 29, 2013 7:57 pm by A|L|F|DGI|Wibie Sultan
» VX ace (Tikus system)
Thu Aug 29, 2013 7:52 pm by A|L|F|DGI|Wibie Sultan
» Ask update script RPG maker
Tue Aug 27, 2013 9:08 pm by AssJikom