Skrypty [XP] - Ulepszony system wpisywania imienia...
spino333 - Czw 21 Sty, 2010 01:31 Temat postu: Ulepszony system wpisywania imienia...Skrypt ulepsza system wpisywania imienia...
Skrypt:
Spoiler:
No zaczynajmy:
Otwieramy edytor skryptów...Szukamy po lewej zakładki: Class Scene_Name , gdy ją znajdziemy usuwamy całą jej zawartość...
Następnie wklejamy do niej nowy kod:
Kod:
class Scene_Name
# -------------------------
def main
@actor = $game_actors[$game_temp.name_actor_id]
@edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char)
@input_window = Window_NameInput.new
@alert_window = Window_Base.new(188, 208, 264, 64)
@alert_window.contents = Bitmap.new(228, 32)
@alert_window.contents.font.name = "Arial"
@alert_window.contents.font.size = 24
@alert_window.contents.draw_text(0, 0, 228, 32, "You must enter a name.")
@alert_window.z = 1001
@alert_window.visible = false
c1 = "English"
c2 = "Chinese"
c3 = "Japanese"
c4 = "Space"
c5 = "Backspace"
c6 = "Default"
c7 = "Done"
commands = [c1, c2, c3, c4, c5, c6, c7]
@command_window = Window_NameCommand.new(160, commands)
@input_window.active = false
@input_window.visible = true
@command_window.index = 0
@command_window.visible = true
@command_window.active = true
@command_window.x = 0
@command_window.y = 128
@command_window.z = 1000
@alert_count = 0
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@edit_window.dispose
@input_window.dispose
@command_window.dispose
@alert_window.dispose
end
# -------------------------
def update
@edit_window.update
@input_window.update
@command_window.update
@alert_window.update
if @alert_window.visible == true && @alert_count > 0
@alert_count -= 1
if @alert_count <= 0
@command_window.active = true
@alert_window.visible = false
end
return
end
if @input_window.active == false
@command_window.active = true
end
if @command_window.active == false
@input_window.active = true
end
if Input.repeat?(Input::B) && @input_window.active == true
if @edit_window.index == 0
return
else
$game_system.se_play($data_system.cancel_se)
@edit_window.back
end
end
if Input.repeat?(Input::B) && @command_window.active == true
$game_system.se_play($data_system.buzzer_se)
return
end
if Input.trigger?(Input::C)
if @command_window.active == true
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
@input_window.mode = 1
@input_window.refresh
@command_window.active = false
@input_window.active = true
@input_window.index = 0
return
when 1
$game_system.se_play($data_system.decision_se)
@input_window.mode = 2
@input_window.refresh
@command_window.active = false
@input_window.active = true
@input_window.index = 0
return
when 2
$game_system.se_play($data_system.decision_se)
@input_window.mode = 3
@input_window.refresh
@command_window.active = false
@input_window.active = true
@input_window.index = 0
return
when 3
if @edit_window.index < $game_temp.name_max_char
$game_system.se_play($data_system.decision_se)
@edit_window.add("")
else
$game_system.se_play($data_system.buzzer_se)
end
return
when 4
$game_system.se_play($data_system.decision_se)
@edit_window.back
return
when 5
$game_system.se_play($data_system.decision_se)
@edit_window.restore_default
return
when 6
if @edit_window.name == ""
$game_system.se_play($data_system.buzzer_se)
@alert_window.visible = true
@command_window.active = false
@alert_count = 60
return
end
$game_system.se_play($data_system.decision_se)
@actor.name = @edit_window.name
$game_system.se_play($data_system.decision_se)
$scene = Scene_Map.new
return
end
end
if @edit_window.index == $game_temp.name_max_char &&
@input_window.active == true
$game_system.se_play($data_system.buzzer_se)
return
end
if @input_window.character == "" && @input_window.active == true
$game_system.se_play($data_system.buzzer_se)
return
end
if @input_window.character != nil && @input_window.active == true &&
@edit_window.index <= $game_temp.name_max_char
$game_system.se_play($data_system.decision_se)
if @input_window.mode == 1
@edit_window.char_type[@edit_window.index] = 1
else
@edit_window.char_type[@edit_window.index] = 2
end
@edit_window.add(@input_window.character)
end
return
end
end
end
Teraz czas na kolejny krok szukamy zakładki : Window Name_Edit i zamieniamy jej zawartość na :
Cytat:
class Window_NameEdit < Window_Base
# ---------------------------
attr_accessor :char_type
attr_reader :name
attr_reader :index
# ---------------------------
def initialize(actor, max_char)
super(0, 0, 640, 128)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
@name = actor.name
@max_char = max_char
@char_type = []
name_array = @name.split(//)[0...@max_char]
@name = ""
for i in 0...name_array.size
@name += name_array[i]
@char_type[i] = 1
end
@default_name = @name
@index = name_array.size
refresh
update_cursor_rect
end
# ---------------------------
def restore_default
@name = @default_name
for i in 0..@default_name.size
@char_type[i] = 1
end
@index = @name.split(//).size
refresh
update_cursor_rect
end
# ---------------------------
def add(character)
if @index < @max_char and character != ""
@name += character
@index += 1
refresh
update_cursor_rect
end
end
# ---------------------------
def back
if @index > 0
name_array = @name.split(//)
@name = ""
for i in 0...name_array.size-1
@name += name_array[i]
end
@index -= 1
refresh
update_cursor_rect
end
end
# ---------------------------
def refresh
self.contents.clear
name_array = @name.split(//)
for i in 0...@max_char
c = name_array[i]
if c == nil
c = "�"
end
x = 320 - @max_char * 14 + i * 28
if @char_type[i] == 1
self.contents.font.name = "Arial"
self.contents.font.size = 24
else
self.contents.font.name = "Arial"
self.contents.font.size = 22
end
self.contents.draw_text(x, 32, 28, 32, c, 1)
end
draw_actor_graphic(@actor, 320 - @max_char * 14 - 40, 80)
end
# ---------------------------
def update_cursor_rect
x = 320 - @max_char * 14 + @index * 28
self.cursor_rect.set(x, 32, 28, 32)
end
# ---------------------------
def update
super
update_cursor_rect
end
end
Następnie szukamy zakładki Window Name_Input i orbimy z nią to samo tym razem wklejamy jednak ten kod:
# ----------------------------------
def initialize
super(160, 128, 480, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.active = false
@index = -1
@mode = 1
refresh
update_cursor_rect
end
# ----------------------------------
def index=(value)
@index = value
update_cursor_rect
end
#--------------------------------------
def character
if @mode == 1
return ENGLISH_TABLE[@index]
elsif @mode == 2
return HIRAGANA_TABLE[@index]
else
return KATAKANA_TABLE[@index]
end
end
# ----------------------------------
def refresh
self.contents.clear
for i in 0..134
x = 4 + i / 5 / 9 * 152 + i % 5 * 28
y = i / 5 % 9 * 32
if @mode == 1
self.contents.font.name = "Arial"
self.contents.font.size = 24
self.contents.draw_text(x, y, 28, 32, ENGLISH_TABLE[i], 1)
elsif @mode == 2
self.contents.font.name = "Arial"
self.contents.font.size = 22
self.contents.draw_text(x, y, 28, 32, HIRAGANA_TABLE[i], 1)
else
self.contents.font.name = "Arial"
self.contents.font.size = 22
self.contents.draw_text(x, y, 28, 32, KATAKANA_TABLE[i], 1)
end
end
end
# ----------------------------------
def update_cursor_rect
if self.active == false
self.cursor_rect.empty
else
x = 4 + @index / 5 / 9 * 152 + @index % 5 * 28
y = @index / 5 % 9 * 32
self.cursor_rect.set(x, y, 28, 32)
end
end
# ----------------------------------
def update
super
if @index >= 0 && @index <= 134
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
if @index % 5 == 4
if @index < 94
@index += 41
end
else
@index += 1
end
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
if @index % 5 == 0
if @index < 45
self.active = false
@index = -999
return
else
@index -= 41
end
else
@index -= 1
end
end
if Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
if @index % 45 < 40
@index += 5
end
end
if Input.repeat?(Input::UP)
if Input.trigger?(Input::UP) or @index % 45 >= 5
$game_system.se_play($data_system.cursor_se)
if @index % 45 >= 5
@index -= 5
end
end
end
end
update_cursor_rect
end
end
W tabelach English table, hiregana table itd. Są znaki, które wyświetlą się po wybraniu języka...angielski będzie tu językiem standardowym...Oczywiście znaki musicie sobie zedytować...
Teraz tworzymy nową zakładke jak? klikamy prawym klawiszem myszy na liscie i wybieramy wstaw(add).
Nazwa zakładki to : Window_NameCommand
A jej zawartość to:
Kod:
class Window_NameCommand < Window_Command
# -------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
if i == 1 or i == 2
font = 1
self.contents.font.name = "Arial"
self.contents.font.size = 22
else
font = 0
self.contents.font.name = "Arial"
self.contents.font.size = 24
end
draw_item(i, normal_color, font)
end
end
# -------------------------------
def draw_item(index, color, f)
if f == 0
self.contents.font.color = color
self.contents.font.name = "Arial"
self.contents.font.size = 24
else
self.contents.font.name = "Arial"
self.contents.font.size = 22
end
rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.draw_text(rect, @commands[index])
end
end
No i powinno działać...Mam nadzieję, że opisałem to wystarczjąco łatwo....
Screen:
Spoiler:
R.I.P. - Nie 28 Mar, 2010 22:44 Jak dla mnie może być tylko stary też dobry, tutaj zmienia się tylko językowy ;p.RtaMag2 - Sob 03 Kwi, 2010 19:53 To się czymś wywołuje czy coś?Melvin - Sob 03 Kwi, 2010 19:59 To zastępuje zwykły system wpisywania imienia...RtaMag2 - Sob 03 Kwi, 2010 20:03 I jak włączę grę to odrazu się pojawia?Melvin - Sob 03 Kwi, 2010 20:05 Nie.
Masz w edycji zdarzeń: "Wprowadź imię bohatera"...
I to zastępuje podstawowy system wpisywania imienia...RtaMag2 - Sob 03 Kwi, 2010 20:12 A moge zrobić tak że na początku gry pojawia mi się to wpisywanie imienia jak tak to podaj mi dokładniusi prodanik Melvin - Sob 03 Kwi, 2010 20:15 Tam gdzie pozycja startowa bohatera ustawiasz zdarzenie(równoległe) z poleceniem "Wprowadź imię bohatera" a po tym dajesz usuń zdarzenie... I już! Czeliosss - Sob 03 Kwi, 2010 20:16 1 strona zdarzenia. Robisz zdarzenie na równoległe i dajesz Zmień imię Bohatera, i główny przełącznik A.
2 strona zdarzenia. Ustawiasz warunek A=OnIzaya - Nie 11 Lip, 2010 09:16 Bardzo przydatny Skrypt.
Mało "Mejkerowców" wybiera wpisywanie imienia bohatera,
ponieważ uważają że ich Imię jest bardzo dobre.
Lecz niektórym graczom nie podoba się imię i chcieliby to zmienić...
Jestem jednym właśnie z takich
Nie wykluczone że ten skrypt pojawi się w mojej grze
Dobrze wykombinowane z językami Angielskim, Chińskim i Japońskim,
urozmaica to to całą grę
Pozdrawiam vikki - Nie 12 Cze, 2011 09:27 Ops...Nie, nie działa:(Feniks - Nie 12 Cze, 2011 12:16 co ci dokładnie nie działa?... Jakiś błąd?vikki - Nie 12 Cze, 2011 15:45 @darknessXII
Tak 1.Wyskakuje mi błąd 2.Opcja nie działaAyene - Nie 12 Cze, 2011 16:31 Jakiej treści jest błąd, w którym momencie się pokazuje?vikki - Nie 12 Cze, 2011 17:03 @Ayene
Kiedy włączam grę...vikki - Nie 12 Cze, 2011 17:04 jakiej treści?Nie pamiętam ale pisze coś z "SYntax Error"Ayene - Nie 12 Cze, 2011 20:30 Spakuj swój projekt, zhostuj go na www.mediafire.com i wyślij mi link na PW.vikki - Wto 14 Cze, 2011 21:55 Ayene, niestety dopiero robię gre ale wyśle kiedy skończe, bardzo dziękuje:)