Pomógł: 1 raz Dołączył: 21 Gru 2009 Posty: 85 Skąd: Nie pamiÄtam
Wysłany: Czw 21 Sty, 2010 01:31
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:
________________________ _________________
_________________
Jak kraĹÄ to milinony...
Jak ruchaÄ to ksiÄĹźniczki...
_________________
_________________
_________________
Ostatnio zmieniony przez Ayene Nie 04 Kwi, 2010 15:29, w całości zmieniany 2 razy
Tam gdzie pozycja startowa bohatera ustawiasz zdarzenie(rĂłwnolegĹe) z poleceniem "WprowadĹş imiÄ bohatera" a po tym dajesz usuĹ zdarzenie... I juĹź!
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=On
________________________ ...Amelanduil & FireBlade words will be remembered... ...Amelanduil & FireBlade acts will be remembered... ...Amelanduil & FireBlade never gonna die...
Pomógł: 2 razy Dołączył: 20 Mar 2010 Posty: 127 Skąd: z Netaa !
Wysłany: 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
________________________ PadĹ mi laptop ... wszystko, RPG Maker i projekty, wszystko siÄ skoĹczyĹo. Nie bawiÄ siÄ juĹź w RPGM'a, Zmieniam wizerunek.
Nowa strona, szukam tĹumaczy, edytorĂłw, korektorĂłw i HTMLowcĂłw ! :D
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