[Script] [ACE] [VXA] Tổng hợp các lệnh nho nhỏ bằng script

KangKang Posts: 453Registered
Sau đây, mình sẽ giới thiệu những cái mình thu nhặt đc trên mạng về cũng như do mình tự mày mò để các bạn có thể áp dụng cho game của mình hay hơn!
(Hi, now I will show you some "mini" script can make your game more awesome ^^)

[chapter]Mở rộng kích cỡ màn hình[/chapter]
Hiện tại, việc mở rộng kích cỡ màn hình chỉ tối đa là 640x480, các kích cỡ khác phải can thiệp vào Source Code của RPG Maker và như vậy là không-hợp-pháp.

Trước dòng
rgss_main { SceneManager.run }
Dán dòng
Graphics.resize_screen(640, 480)

Bổ sung từ @iPhone69 (chưa test)
keybd = Win32API.new 'user32.dll', 'keybd_event', ['i', 'i', 'l', 'l'], 'v'
keybd.call(0xA4, 0, 0, 0) ; keybd.call(13, 0, 0, 0) 
keybd.call(13, 0, 2, 0) ; keybd.call(0xA4, 0, 2, 0)  
Giải thích: lệnh này giả lập tổ hợp phím Alt+Enter để fullscreen

[chapter]Việt hoá các dòng lệnh[/chapter]
Ngoài việc việt hoá ở Database(F10)/Terms, hãy vào Scripts(F11)/Vocab để việt hoá

[chapter]Thay đổi tên thư mục chứa Audios/Data[/chapter]
Thay đổi những chữ màu tím ở Scripts/Cache

[chapter]Thay đổi tên file lưu dữ liệu trong Data[/chapter]
Thay đổi những chữ màu tím ở Scripts/DataManager

[chapter]Thay đổi số lượng vật phẩm, vũ khí,... bằng script[/chapter]
$game_party.gain_gold(số lượng)
$game_party.gain_item($data_items[id], số lượng)

Tương tự với weapons/armor, thay $data_items bằng $data_weapons hoặc $data_armors

số lượng: âm -> giảm, dương -> tăng

[chapter]Điều khiển Switch, Self-Switch, Varialbe bằng script[/chapter]
Switch:
$game_switches[ID] = true/false

Self-Switch:
key = [map_id, event_id, "A/B/C/D"]
$game_self_switches[key] = true/

Variable: [code]$game_variables[ID]] [phép toán] [Số]
Phép gán (=), Phép so sánh ( == ; > , < , >= , <= , != ), Phép toán ( + , - , * , / , % )

Ngoài ra có thể dùng lệnh for để điều khiển số lượng lớn
for i in [số, số, sô,...] (các số không liên tục)
[lệnh]
end

Hoặc
for i in [số đầu]..[số cuối] (các số liên tục)
[lệnh]
end

[chapter]Timer[/chapter]
Kiểm tra Timer có hoạt động không
$game_timer.working?
, trả về true nếu hoạt động, ngược lại false
Trả về số giây hiện tại hoặc còn lại của Timer:
$game_timer.sec

Chạy Timer:
$game_timer.start([Số giây] * Graphics.frame_rate)

Dừng Timer:
$game_timer.stop

Tạm dừng Timer (cần Mini-Script):
Tạm dừng:
$game_timer.pause
Tiếp tục:
$game_timer.resume
Mini-Script: Bỏ vào trước Main
class Game_Timer
 def pause
   @working = false if @count > 0
 end
 def resume
   @working = true if @count > 0
 end
end

[chapter]Nhân vật[/chapter]
Đổi tên nhân vật:
$game_actors[ID].name = [tên]

Đổi Nickname:
$game_actors[ID].nickname = [tên]

Đổi Class:
$game_actors[ID].class_id = [class_id]

Đổi Level:
$game_actors[ID].level = [số]

Đổi EXP:
$game_actors[ID].exp = [số]

Đổi HP:
$game_actors[ID].hp = [số]

Đổi MP:
$game_actors[ID].mp = [số]

(Có thể dùng các phép so sánh)

Kiểm tra xem có trang bị vũ khí [w_id] không:
$game_actors[ID]weapons.include?($data_weapons[w_id])

Kiểm tra xem có trang bị giáp [a_id] không:
$game_actors[ID]armors.include?($data_armors[a_id])

Kiểm tra xem có vật phẩm [i_id] không:
$game_party.has_item?($data_items[i_id])

Kiểm tra xem có vũ khí [w_id] không:
$game_party.has_item?($data_weapons[w_id])

Kiểm tra xem có giáp [a_id] không:
$game_party.has_item?($data_armors[a_id])

Thêm thành viên:
$game_party.add_actor(ID)

Bớt thành viên:
$game_party.remove_actor(ID)

Dịch chuyển nhân vật:
$game_player.reserve_transfer(map_id, x, y)

Lên/Xuống phương tiện:
$game_player.get_on_off_vehicle
(đang lên => xuống và ngược lại)

Điều khiển nhân vật đến vị trí ô (x,y) trên bản đồ hiện tại:
$game_player.moveto(x, y)

Độ mờ của nhân vật:
$game_player.transparent = [số]

Đang giữ phím? :
Input.trigger?(Input::A/B/C/X/Y/Z/R/L)

Đang lặp lại phím? :
Input.repeat?(:A/B/C/X/Y/Z/R/L)

Đang bấm phím? :  
Input.press?(:A/B/C/X/Y/Z/R/L)

Toạ độ nhân vật:
$game_player.x
  và  
$game_player.y

Sự kiện [id] có gần nhân vật không? (bán kính 12 ô):
$game_map.events[id].near_the_player? == true/false

Đổi ảnh thành viên:
$game_actors[ID].set_graphic("Tên ảnh", character_index(0=top-left | 1= top-center | ... | 11= bottom-right), "Tên ảnh Faceset", faceset_index(0-7) )
$game_player.refresh

Đổi ảnh phương tiện:
$game_map.vehicles[ID].set_graphic("Tên ảnh", character_index(0=top-left | 1= top-center | ... | 11= bottom-right) )

[chapter]Truy xuất số lượng[/chapter]
Tiền:
$game_party.gold

Vật phẩm:
$game_party.item_number($data_items[ID])

Vũ khí:
$game_party.item_number($data_weapons[ID])

Giáp:
$game_party.item_number($data_armors[ID])

Có thể dùng cho phép so sánh ( == , >= , <= , < , > , != ) nhưng KHÔNG dùng trong phép gán

[chapter]Truy xuất thông tin khác[/chapter]
Map ID:
$game_map.map_id

Số thành viên trong nhóm:
$game_party.members.size

Số bước đã đi:
[code]$game_party.steps
[/code]

Thời gian đã chơi:
Graphics.frame_count / Graphics.frame_rate

Số lần lưu:  
$game_system.save_count

Số lần chiến đấu:
$game_system.battle_count

[chapter]Lệnh chờ[/chapter]
wait(frame)

[chapter]Ảnh[/chapter]
Hiện ảnh:
screen.pictures[số thứ tự].show( "Tên", [0=top-left|1=center], x, y, width, heigh, opacity, blend type(0-2) )

Chuyển ảnh:
screen.pictures[số thứ tự]].move( "Tên", [0=top-left|1=center], x, y, zoom_width, zoom_heigh, opacity, blend type(0-2) )

Xoay ảnh:
screen.pictures[số thứ tự].rotate(góc) ;=> Có thể tuỳ biến tốc độ, không bị giới hạn

Chuyển màu ảnh:
screen.pictures[Số thứ tự].start_tone_change(Tone.new(R, B, G, Gray), wait)

Xoá ảnh:
screen.pictures[số thứ tự].erase

Thời tiết:
$game_map.screen.change_weather(type(:none, :rain, :storm, :snow), power(0-9), duration)

[chapter]Âm thanh[/chapter]
Chạy nhạc:
RPG::SE.new("SE Name", volume, pitch).play
RPG::ME.new("ME Name", volume, pitch).play
RPG::BGS.new("BGS Name", volume, pitch).play
RPG::BGM.new("BGM Name", volume, pitch).play

Dừng nhạc:
RPG::BGM.stop
RPG::BGS.stop
RPG::ME.stop

Giữ BGM:
$game_system.save_bgm

Giữ BGM và BGS:
BattleManager.save_bgm_and_bgs

Chạy lại BGM lần nữa:
$game_system.replay_bgm

Chạy lại BGM và BGS lần nữa:
BattleManager.replay_bgm_and_bgs

Hiệu ứng Fade:
RPG::BGM.fade(seconds * 1000)
RPG::BGS.fade(seconds * 1000)
RPG::ME.fade(seconds * 1000)

[chapter]Sự kiện[/chapter]
Gọi Common Event:
$game_temp.reserve_common_event(ID)

Xoá tạm thời event:
$game_map.events[event_id].erase

Toạ độ sự kiện:
$game_map.events[event_id].x   và   $game_map.events[event_id].y

Đổi ảnh sự kiện:
$game_map.events[id].set_graphic("Tên ảnh", character_index(0=top-left | 1= top-center | ... | 11= bottom-right) )

Điều khiển sự kiện di chuyển tới vị trí ô (x,y) trên bản đồ hiện tại:
$game_map.events[ID].moveto(x, y)

[chapter]Bản đồ[/chapter]
ID:
$game_map.map_id

Tên:
$game_map.name

Hiện tên hay không? :
$game_map.name_display = true/false

Đổi Tileset:
$game_map.change_tileset(ID)

Đổi ảnh Parallax:
$game_map.change_parallax("Tên", lặp ngang?(true/false), lặp dọc(true/false), HScroll(số), VScroll(số)])

[chapter]Region ID[/chapter]
Kiểm tra người chơi có trong vùng có ID là [n] không:
$game_player.region_id == n

Kiểm tra sự kiện [event_id] có trong vùng có ID là [n] không:
$game_map.events[event_id].region_id == n

[chapter]Chạy Video OGV[/chapter]
Graphics.play_movie('đường dẫn')

[chapter]Nhập tên và tăng giới hạn ký tự[/chapter]
SceneManager.call(Scene_Name)
SceneManager.scene.prepare(actor_id, số ký tự tối đa)
Fiber.yield

Bỏ hẳn giới hạn ký tự:
Ở Script "Window_NameEdit", Bỏ dòng
42. return false if @index >= @max_char

[chapter]Cửa hàng[/chapter]
Gọi cửa hàng:
[code]goods = [[type, id, price_override_flag(, price)]]
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare(goods, true)
[/code]

Ẩn hẳn lệnh "Sell" nếu shop được đặt là "Chỉ mua":
Script "Window_ShopCommand", dòng 33. add_command(Vocab::ShopSell, :sell, !@purchase_only)
Thay bằng:
if !@purchase_only
add_command(Vocab::ShopSell, :sell)
end

[chapter]Mở Cửa sổ lệnh[/chapter]
Mở:
SceneManager.call(scene)
Với scene là Scene_Menu, Scene_Item, Scene_Skill, Scene_Status, Scene_Title, Scene_Save, Scene_Load, Scene_Name, Scene_Debug, v.v...

Thoát game:
SceneManager.exit

[chapter]Bỏ lệnh Skill, Equip,... trong menu[/chapter]
Script "Window_MenuCommand", các dòng:
add_main_commands
add_formation_command
add_original_commands
add_save_command
add_game_end_command
add_command(Vocab::item,   :item,   main_commands_enabled)
add_command(Vocab::skill,  :skill,  main_commands_enabled)
add_command(Vocab::equip,  :equip,  main_commands_enabled)
add_command(Vocab::status, :status, main_commands_enabled)
add_command(Vocab::formation, :formation, formation_enabled)
add_command(Vocab::save, :save, save_enabled)
add_command(Vocab::game_end, :game_end)
Bỏ lệnh nào bỏ dòng tương ứng với lệnh đó

[chapter]Bỏ tab Item/Weapon/Armor/Key Item trong Lựa chọn Item[/chapter]
Script "Window_ItemCategory", các dòng:
add_command(Vocab::item,     :item)
add_command(Vocab::key_item, :key_item)
add_command(Vocab::weapon,   :weapon)
add_command(Vocab::armor,    :armor)
Bỏ lệnh nào bỏ dòng tương ứng với lệnh đó

[chapter]Hệ thống Message[/chapter]
Hiện Text:
$game_message.face_name = 'Tên ảnh Face'
$game_message.face_index = face_index(0-7)
$game_message.background = [0] Normal, [1] Faded, [2] Transparent
$game_message.position = [0] Normal, [1] Faded, [2] Transparent
$game_message.add("Text")

Nhập số:
$game_message.num_input_variable_id = x
$game_message.num_input_digits_max = y

Chọn vật phẩm khoá:
$game_message.item_choice_variable_id = x

Văn bản cuộn:
$game_message.scroll_mode = true
$game_message.scroll_speed = 1
$game_message.scroll_no_fast = false
$game_message.add("A long time ago,")
$game_message.add("in a galaxy far, far away ...")
$game_message.add("")
$game_message.add("")
$game_message.add("")
$game_message.add("...")

[chapter]Lệnh điều kiện[/chapter]
Cơ bản:
if <điều kiện>
<làm nếu đúng>
else
<làm nếu sai>
end

Nâng cao:
if <điều kiện 1>
<làm nếu đúng>
elsif <điều kiện 2 nếu điều kiện 1 sai>
<làm nếu đúng>
elsif <điều kiện 3 nếu điều kiện 2 sai>
<làm nếu đúng>
...
elsif <điều kiện n nếu điều kiện n-1 sai>
<làm nếu đúng>
end

[chapter]Hiệu ứng[/chapter]
Cho nhân vật:
$game_player.animation_id = n
Cho sự kiện:
$game_map.events[eventid].animation_id = n

[chapter]Bong bóng Cảm xúc[/chapter]
Cho nhân vật:
$game_player.balloon_id = n
Cho sự kiện:
$game_map.events[eventid].balloon_id = n

[chapter]Hiệu ứng màn hình[/chapter]
Fade Out:
Fiber.yield while $game_message.visible
screen.start_fadeout(frame)
wait(frame)

Fade In:
Fiber.yield while $game_message.visible
screen.start_fadein(frame)
wait(frame)

[chapter]Kiểm tra di chuyển[/chapter]
$game_player.moving?
$game_player.dash?
$game_player.jumping?
$game_map.events[event_id].moving?
$game_map.events[event_id].jumping?

[chapter]Di chuyển nhân vật tới toạ độ x,y[/chapter]
Bổ sung của @TkTs (chưa test)

Bỏ trên Main:
class Game_Character < Game_CharacterBase
   def mtxy(posx, posy)
    sx = distance_x_from(posx)
    sy = distance_y_from(posy)
    if sx.abs > sy.abs
      move_straight(sx > 0 ? 4 : 6)
      move_straight(sy > 0 ? 8 : 2) if !@move_succeed and sy != 0
    elsif sy != 0
      move_straight(sy > 0 ? 8 : 2)
      move_straight(sx > 0 ? 4 : 6) if !@move_succeed and sx != 0
    end
  end    
end

Cách dùng: dùng Script Call sau trong Set Move Route
mtxy(x, y)
hoặc
mtxy($game_variables[x], $game_variables[y])

[chapter]Khác[/chapter]
Tiền tệ hiện tại:
$data_system.currency_unit

[chapter]Nếu còn...[/chapter]
...sẽ bổ sung sau!

[chapter]Nguồn[/chapter]
Tự tìm hiểu
http://www.rpgmakerweb.com/
http://rpgmaker.net
Và một số nguồn chưa xác định hoặc quên nguồn :v

[chapter]Tổng hợp bởi Kang, Copy xin ghi nguồn![/chapter]
«1345

Comments

Sign In or Register to comment.