Etam - Pon 23 Lip, 2012 20:37 Temat postu: MouseOver
~ MouseOver ~
Krótki opis:
Fajny skrypt pozwalający utworzyć wiadomości które będą wyświetlane po najechaniu myszką na zdarzenie. Obsługa jest bardzo prosta więc dema nie potrzeba.
Autor:
Samarium
Tłumaczenie:
Etam (tłumaczenie częściowe - czyli to co potrzeba)
Kompatybilność:
RPG Maker VX
Skrypt:
Spoiler:
Kod:
#------------------------------------------------------------------------
# MouseOver Version 1.3
# RPG Maker VX
#
# Autor : Samarium
#
# Tłumaczenie : Etam
#
# Utworzony 12 Luty 2008
#
# Przetłumaczony 23 Lipiec 2012
#
# Funkcje : Pozwala wyświetlić okno z tekstem
#
# Zastosowanie: Bardzo proste! Dodaj komentarz zaczynajÄ…cy siÄ™ od [M]
# a następnie wpisz tekst który ma być wyświetlony
# Idź do linii 26, aby zmienić niektóre właściwości.
#
#------------------------------------------------------------------------
def element_event_id
return @element_event.keys # Array
end
def element_event_message(event)
return @element_event[event] # String
end
def element_event_size
return @element_event.size # Integer
end
def cod(list)
# initialisation des variables
for index in 0...list.size
parameters = list[index].parameters
# Si la commande est un commentaire et commence par [M]
if list[index].code == 108 and commentaire(parameters[0])
message_text = parameters[0] + "\n"
# Ajoute aux messages les lignes suivantes
for line_count in 1..5
if list[line_count] != nil
if list[index + line_count].code == 408
message_text += text_sub(list[index + line_count].parameters[0]) + "\n"
end
end
end
return true, message_text
end
end
return false, false
end
def commentaire(text)
# Cherche le [M] et l'efface
text.gsub!(/[\[Mm]\]/) { "\001" }
while ((c = text.slice!(/./m)) != nil)
if c == "\001"
text.sub!(/[\[Mm]\]/, "")
text_sub(text)
return true
end
end
return false
end
def mouse_global_pos
pos = [0, 0].pack('ll')
if @cursor_pos.call(pos) != 0
return pos.unpack('ll')
else
return nil
end
end
def mouse_pos(catch_anywhere = false)
x, y = screen_to_client(*mouse_global_pos)
width, height = client_size
# if catch_anywhere or (x >= 0 and y >= 0 and x < width and y < height)
return x, y
# else
# return $m.x, $m.y
# end
end
def del
if @oldcursor == nil
return
else
@SetClassLong.call(handel ,-12, @oldcursor)
@oldcursor = nil
end
end
end
$scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
$client_rect = Win32API.new('user32', 'GetClientRect', %w(l p), 'i')
$readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
$findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
def screen_to_client(x, y)
return nil unless x and y
pos = [x, y].pack('ll')
if $scr2cli.call(hwnd, pos) != 0
return pos.unpack('ll')
else
return nil
end
end
#---------------------------------------------------------------------
# Game_Pos_Screen_Mouse
#
# Retourne les positions de la souris grâce au module Mouse
#---------------------------------------------------------------------
class Game_Pos_Screen_Mouse
def initialize
@pos_x_mouse = @pos_y_mouse = 0
end
def screen_x
return @pos_x_mouse = Mouse.mouse_pos[0]
end
def screen_y
return @pos_y_mouse = Mouse.mouse_pos[1]
end
end
#---------------------------------------------------------------------
# Window_MouseOver
#
# Affichage de la fenêtre MouseOver. Calcule la taille de la feêtre
# selon la taille du texte.
#---------------------------------------------------------------------
ctab = text.scan(/./m)
for i in 0..ctab.size - 1
if ctab[i] == "\n"
# Prend la ligne la plus grande (pour la taille de la fenêtre)
if lign_size > max_size
max_size = lign_size
end
lign_size = x = 0
y += 1
next
end
lign_size += self.contents.text_size(ctab[i]).width
taille_height = self.contents.text_size(ctab[i]).height
# Affichage du texte
self.contents.draw_text(x, taille_height * y, 20, 20, ctab[i])
x += self.contents.text_size(ctab[i]).width
end
# Calcule de la taille de la fenêtre
@height = self.height = taille_height * y + 32
@width = self.width = max_size + 32
elsif @event_memoire == event
@mouseover_window.visible = false
@event_memoire = 0
end
else
@mouseover_window.visible = false
end
end
new_update
end
end
Screeny:
Spoiler:
Dodatkowe informacje:
Aby stworzyć okienko z wiadomością tworzymy w zdarzeniu komentarz o treści :
"[M]wiadomość którą chcemy zobaczyć" (ale bez cudzysłowiu )Loki - Pon 23 Lip, 2012 22:03 To sie nazywa skrypt Szczególnie w grze online by sie świetnie nadał, napewno użyje Etam - Wto 24 Lip, 2012 11:48 Dzięki. Mam nadzieję że tłumaczenie wystarczy. Można go użyć zamiast skryptu "Nazwy zdarzeń na mapach", a wtedy nie będzie to kolidowało z cieniami zdarzeń. master miller - Wto 24 Lip, 2012 17:21 Taki skrypt w połączeniu z użyciem myszki do poruszania bohaterem dałby ciekawy efekt, na pewno lepszy niż oldschoolowe poruszanie strzałkami :Dpw1602 - Sro 25 Lip, 2012 01:52 A mi wyskakuje oto taki błąd:
Spoiler:
Etam - Sro 25 Lip, 2012 09:06 pw1602 - Ja nie pisałem tego skryptu więc za bardzo ci nie pomogę. :D Spróbuj na nowym projekcie a jak nie to napisz jakich innych skryptów używasz.Loki - Sro 25 Lip, 2012 09:47 Problem pewnie leży w tym że możliwe że masz polskiego ,,mejkera''. Jeśli tak to wklej ten skrypt do angielskiego rpg makera vx, albo jak powidział Etam spróbuj na nowym projekcie Etam - Sro 25 Lip, 2012 10:02 To akurat nie jest błąd. Ja też używam polskiego RPG Makera i mi działa. Trzeba poczekać na kogoś kto będzie wiedział na czym polega ten błąd.Loki - Sro 25 Lip, 2012 10:05 Czyli zostaje jeszcze wkleić skrypt na czysty projekt bo innego wytłumaczenia niemam Etam - Sro 25 Lip, 2012 10:21 Niech zapisze tu skrypty jakich używa.
A może nie skopiował dobrze skryptu ???Loki - Sro 25 Lip, 2012 11:30 Skoro ma inne skrypty w swoim projekcie to znaczy że dobrze skopiował i ten
Pozatym zawsze można zmienić wcześniejsze skrypty na takie same tylko od innego autora, a efekt niemalże ten sam a gra wtedy może zadziała prawdiłowo Etam - Sro 25 Lip, 2012 12:36 Dobra. Tylko poczekajmy może na to co on napisze. pw1602 - Sro 25 Lip, 2012 15:10 Dobra wszystko działa :) Źle go skopiowałem, bo na czystym też wyskakiwał błąd, ale jeszcze raz wkleiłem go ze strony to wszystko działa.