[Hướng Dẫn] Làm Game Online Thật Đơn Giản Cùng Game Maker Server - Phần 1
namlunthkl
Posts: 66Registered
Làm Game Online cùng Game Maker Server
]Phát huy tiếp loạt bài tutorial, mình lại dội bom Forum một lần nữa
Trước khi vào phần chính, mình muốn lưu ý với các bạn rằng bản thân mình không có điều kiện để Online nhiều nên muốn hỏi gì thì cứ Inbox rồi mình sẽ sớm giải quyết.
Rồi, ta vào phần chính!
Nói đến Game Online, hẳn ai cũng nghĩ đến những hệ thống đầy phức tạp(Mình cũng từng làm việc với 1 engine "Chuẩn" làm game online và nói thật rằng việc mở port cũng đã mệt rồi :dodgy: )
Lục xuống 1 tẹo, mình có đăng 1 Game Online(Grid Shooter) nhiều bạn cũng cho rằng phải thật cao siêu mới làm được nhưng chưa hẳn là vậy. Game Online chỉ đơn thuần như sau: Các máy con kết nối đến máy chủ (gọi là Client) và tất nhiên máy chủ (gọi là Server) sẽ xử lí và gửi đến những Client khác (Truy cập ngang hàng P2P).
Game Maker cũng có khá nhiều Engine để làm việc Online song đều rất khó dùng với các "Newbie". Chính lẽ đó, Game Maker Server được ra đời. So sánh 1 chút, tuy tốc độ không cao nhưng bù lại, bạn không cần bỏ ra 1 cục tiền để duy trì 1 VPS (Virtual Private Server) chạy Server cho Game. Ngoài ra, Game Maker Server cũng hỗ trợ 1 bộ công cụ cực kỳ đầy đủ, thuận tiện cho người dùng.
Nếu vẫn chưa sẵn sàng, bạn có thể ghé 1 chút vào trang chủ để hiểu thêm(Game của mình hiện đang nằm ở trang chủ): Game Maker Server
Trên trang chủ của GMServer, bạn kéo xuống, click download để tải nó về.
Hiện tại, GMServer đến phiên bản 1.8.6, file sau khi tải về có tên:
Giải nén được 3 Folder và 1 file:
Chắc về chuyện nhập extension mình không cần nhắc nữa vì hẳn ai cũng biết. Còn nếu mới tập tành thì có thể search google hoặc nếu có thể mình sẽ hướng dẫn sau.
GMServer hỗ trợ 3 phiên bản của Game Maker:
Tất cả các Function có trong phiên bản GMServer dành cho Game Maker Studio:
Trong Phần 1, mình sẽ tạm thời hướng dẫn các bạn khởi đầu cùng GMServer.
Trước tiên, bạn tạo các object với tên sau:
Ở object GMS, chúng ta tạo các script với Event và nội dung sau:
Event: Create
Event: Step
LƯU Ý CỰC KỲ QUAN TRỌN
Lúc bạn thêm extension, Bạn chọn 1 trong 3 phiên bản, ở tut này làm bằng GMS nên chỉ sử dụng 1 trong 2 cái là bản:
Event: Draw
Trong trường hợp bạn sử dụng bản All thì trong Event Networking(Click tạo event, chọn Asynchronous và chọn Networking)
Thêm đoạn Code sau:
Event: Networking
OK!, giờ tới lượt chỉnh sửa obj_login. Nếu bạn muốn, bạn có thể đặt sprite cho object này. Nhưng trong tut này, để nhanh gọn mình đặt script login vào event nhấn phím L.
Ở Event Step, thêm đoạn script:
Quay lại Event Create, để mở đầu cho mọi thứ, thêm đoạn script này:
Sau khi User đăng nhập, nếu thất bại sẽ trả về Event User Defined 14
Ví dụ, nếu muốn thoát game thì thêm vào script:
Ngược lại, đăng nhập thành công sẽ trả về event User Defined 15 :D
Thêm đoạn code thông báo:
Giờ nếu muốn test thì tạo 1 cái room đặt tên chẳng hạn như: rm_login
Sau đó quẳng obj_login và GMS vào room đó. Giờ thì test thoải mái đi :D
Bài viết còn có phần sau, cập nhật theo dõi và Vote nếu muốn bài ra sớm
Xin cảm ơn đã đọc bài viết "Siêu dài" và "Siêu rối" của mình. Mong các bạn sẽ thực hiện thành công :D
Cheers,
]Phát huy tiếp loạt bài tutorial, mình lại dội bom Forum một lần nữa
Trước khi vào phần chính, mình muốn lưu ý với các bạn rằng bản thân mình không có điều kiện để Online nhiều nên muốn hỏi gì thì cứ Inbox rồi mình sẽ sớm giải quyết.
Rồi, ta vào phần chính!
Nói đến Game Online, hẳn ai cũng nghĩ đến những hệ thống đầy phức tạp(Mình cũng từng làm việc với 1 engine "Chuẩn" làm game online và nói thật rằng việc mở port cũng đã mệt rồi :dodgy: )
Lục xuống 1 tẹo, mình có đăng 1 Game Online(Grid Shooter) nhiều bạn cũng cho rằng phải thật cao siêu mới làm được nhưng chưa hẳn là vậy. Game Online chỉ đơn thuần như sau: Các máy con kết nối đến máy chủ (gọi là Client) và tất nhiên máy chủ (gọi là Server) sẽ xử lí và gửi đến những Client khác (Truy cập ngang hàng P2P).
Game Maker cũng có khá nhiều Engine để làm việc Online song đều rất khó dùng với các "Newbie". Chính lẽ đó, Game Maker Server được ra đời. So sánh 1 chút, tuy tốc độ không cao nhưng bù lại, bạn không cần bỏ ra 1 cục tiền để duy trì 1 VPS (Virtual Private Server) chạy Server cho Game. Ngoài ra, Game Maker Server cũng hỗ trợ 1 bộ công cụ cực kỳ đầy đủ, thuận tiện cho người dùng.
Nếu vẫn chưa sẵn sàng, bạn có thể ghé 1 chút vào trang chủ để hiểu thêm(Game của mình hiện đang nằm ở trang chủ): Game Maker Server
Trên trang chủ của GMServer, bạn kéo xuống, click download để tải nó về.
Hiện tại, GMServer đến phiên bản 1.8.6, file sau khi tải về có tên:
GameMaker Server 1.8.6d.zip
Giải nén được 3 Folder và 1 file:
Folder: Extension, Examples, Custom Windows
1 File cài đặt nhanh (Không biết cơ chế của nó thì không nên dùng nhé): Quick Installation (GM8 and GM81 only).exe
Chắc về chuyện nhập extension mình không cần nhắc nữa vì hẳn ai cũng biết. Còn nếu mới tập tành thì có thể search google hoặc nếu có thể mình sẽ hướng dẫn sau.
GMServer hỗ trợ 3 phiên bản của Game Maker:
Game Maker 8
Game Maker 8.1
Game Maker Studio (Lưu ý: Chỉ sử dụng được với phiên bản Game Maker Studio > 1.4.1130)
Tất cả các Function có trong phiên bản GMServer dành cho Game Maker Studio:
ar_ban
ar_isadmin
ar_kick
ar_none
ar_owner
ar_warn
bdb_f32
bdb_f64
bdb_s16
bdb_s32
bdb_s8
bdb_string
bdb_u16
bdb_u32
bdb_u8
cp_bottom
cp_top
e_accountexists
e_already_logged_in
e_banned
e_global_ban
e_invalid_name
e_kicked
e_local_ban
e_noaccount
e_noconnection
e_ok
e_ping
e_serverfull
e_userloggedin
e_wrongpass
gms_achievement_count
gms_achievement_description
gms_achievement_find
gms_achievement_isreached
gms_achievement_reach
gms_action_get_argument
gms_action_get_argument_name
gms_action_get_argument_real
gms_action_get_argument_string
gms_action_get_id
gms_action_get_sender
gms_action_goto_next
gms_admin_ban
gms_admin_kick
gms_admin_unban
gms_bdb_close
gms_bdb_open
gms_bdb_read
gms_bdb_read_hex
gms_bdb_read_real
gms_bdb_read_string
gms_bdb_seek
gms_bdb_size
gms_bdb_tell
gms_bdb_write
gms_bdb_write_hex
gms_bdb_write_real
gms_bdb_write_string
gms_chat
gms_chat_bind_pos
gms_chat_bind_room
gms_chat_bind_view
gms_chat_colors
gms_chat_draw
gms_chat_get_color
gms_chat_get_sender
gms_chat_get_sendername
gms_chat_get_text
gms_chat_get_time
gms_chat_istyping
gms_chat_keys
gms_chat_local
gms_chat_num
gms_chat_set_font
gms_chat_team_only_get
gms_chat_team_only_set
gms_chat_toggle
gms_connect
gms_debug_enable
gms_debug_hide_errors
gms_draw
gms_draw_toggle
gms_friend_count
gms_friend_get
gms_friend_isonline
gms_friend_name
gms_friend_send_request
gms_global_exists
gms_global_get
gms_global_get_real
gms_global_get_string
gms_global_isreal
gms_global_set
gms_global_set_real
gms_global_set_string
gms_highscore_add
gms_highscore_add_guest
gms_highscore_count
gms_highscore_find_pos
gms_highscore_list_count
gms_highscore_list_exists
gms_highscore_list_id
gms_highscore_list_title
gms_highscore_name
gms_highscore_replace
gms_highscore_score
gms_highscore_self_score
gms_info_isconnected
gms_info_isloggedin
gms_info_isresponding
gms_info_login_count
gms_info_ping
gms_ini_game_delete
gms_ini_game_exists
gms_ini_game_read
gms_ini_game_size
gms_ini_game_size_limit
gms_ini_game_write
gms_ini_player_delete
gms_ini_player_exists
gms_ini_player_read
gms_ini_player_size
gms_ini_player_size_limit
gms_ini_player_write
gms_init
gms_instance_created_by_sync
gms_instance_get
gms_instance_get_owner
gms_instance_get_real
gms_instance_get_string
gms_instance_handover
gms_instance_handover_all
gms_instance_is_owner
gms_instance_isreal
gms_instance_set
gms_instance_set_real
gms_instance_set_string
gms_instance_sync
gms_instance_sync_destroy
gms_instance_sync_destroy_silent
gms_instance_sync_var_add
gms_location_countrycode
gms_location_countryname
gms_location_isonum
gms_location_languages
gms_login_error_tostring
gms_login_errorcode
gms_login_execute
gms_login_player_has_account
gms_login_set_password
gms_login_set_username
gms_logout
gms_master_player
gms_message_reporting
gms_network
gms_optimize_set_max_skip
gms_optimize_set_sendspeed
gms_optimize_set_spc
gms_optimize_variables
gms_other_admin_rights
gms_other_count
gms_other_exists
gms_other_find
gms_other_find_by_name
gms_other_get
gms_other_get_real
gms_other_get_string
gms_other_has_changed
gms_other_isreal
gms_p2p_send
gms_register
gms_register_error_tostring
gms_register_errorcode
gms_request_resource
gms_script_set_chat_receive
gms_script_set_chat_verify
gms_script_set_connection_lost
gms_script_set_drawchat
gms_script_set_kick
gms_script_set_login
gms_script_set_logout
gms_script_set_p2p
gms_script_set_roomid
gms_script_set_session_change
gms_script_set_vs_begin
gms_script_set_vs_end
gms_self_admin_rights
gms_self_isguest
gms_self_ismaster
gms_self_name
gms_self_playerid
gms_self_set
gms_self_set_precision
gms_session_count
gms_session_create
gms_session_current_id
gms_session_exists
gms_session_id
gms_session_join
gms_session_player_count
gms_session_type
gms_settings
gms_setversion
gms_sha512
gms_show_achievements
gms_show_friends
gms_show_highscore
gms_show_isopen
gms_show_keyboard
gms_show_login
gms_show_message
gms_show_register
gms_show_replace
gms_show_set_allowguest
gms_show_set_constant
gms_show_set_fonts
gms_show_set_position
gms_show_statistics
gms_show_toggle_keyboard
gms_show_update
gms_statistic_count
gms_statistic_description
gms_statistic_find
gms_statistic_get
gms_statistic_set
gms_status
gms_step
gms_team_auto_join
gms_team_find_player
gms_team_get_current
gms_team_join
gms_team_player_count
gms_team_player_get
gms_team_player_is_friend
gms_team_score_add
gms_team_score_get
gms_team_score_set
gms_team_set_max
gms_time
gms_uninit
gms_update_apply
gms_update_check
gms_update_has_updated
gms_update_isfinished
gms_update_progress
gms_update_start
gms_version
gms_vs_end
gms_vs_ready
gms_vs_time
is_extended
is_full
is_onetime
isc_local
lt_fullfps
lt_second
lt_supersave
lt_twenty
mt_achievement_get
mt_friend_login
mt_friend_logout
mt_highscore_get
mt_none
mt_player_login
mt_player_logout
re_ip_limit
re_mail_in_use
re_mail_invalid
re_name_in_use
re_name_invalid
re_name_too_short
re_ok
re_pass_not_equal
re_pass_too_short
rs_background
rs_sound
rs_sprite
spc_autocombine
spc_interpolate
spc_interpolate_smoothpredict
spc_none
spc_smooth_interpolate_nopredict
spc_smoothen
spc_smoothen_inerextrapolate
spc_smoothen_interpolate
spc_supersmooth_interpolate
to_server
tt_ease
tt_linear
tt_shake
tt_sin
wle_add
wle_build_cache
wle_build_cache_recursive
wle_close
wle_copy
wle_create
wle_destroy
wle_destroy_internal
wle_draw
wle_element_position
wle_event_dequeue
wle_event_element
wle_event_empty
wle_event_name
wle_find
wle_find_style
wle_focus
wle_get
wle_get_constantdata
wle_get_styledata
wle_grab_element
wle_hashname
wle_init
wle_invalidate_cache
wle_load
wle_parse_layout
wle_parse_styles
wle_parse_value
wle_parse_valuelist
wle_perform
wle_position
wle_register_event
wle_register_handler
wle_replace_children
wle_set
wle_set_constant
wle_set_renderwh
wle_show
wle_step
wle_textbox_select_all
wle_tick
wle_tween
wt_achievements
wt_friends
wt_highscores
wt_keyboard
wt_login
wt_message
wt_register
wt_statistics
wt_update
xGms_bdb_get
xGms_bdb_open
xGms_session_find
Trong Phần 1, mình sẽ tạm thời hướng dẫn các bạn khởi đầu cùng GMServer.
Trước tiên, bạn tạo các object với tên sau:
1. GMS (với tên đó luôn nhé)
2. obj_login
3. obj_player
4. obj_other_player
Ở object GMS, chúng ta tạo các script với Event và nội dung sau:
Event: Create
gms_init(GMS);
Event: Step
gms_step();
LƯU Ý CỰC KỲ QUAN TRỌN
Lúc bạn thêm extension, Bạn chọn 1 trong 3 phiên bản, ở tut này làm bằng GMS nên chỉ sử dụng 1 trong 2 cái là bản:
1. GameMaker Server 1.8.6d - GameMaker Studio (All).gex
2. GameMaker Server 1.8.6d - GameMaker Studio (Windows).gex
Event: Draw
gms_draw();
Trong trường hợp bạn sử dụng bản All thì trong Event Networking(Click tạo event, chọn Asynchronous và chọn Networking)
Thêm đoạn Code sau:
Event: Networking
gms_network();
OK!, giờ tới lượt chỉnh sửa obj_login. Nếu bạn muốn, bạn có thể đặt sprite cho object này. Nhưng trong tut này, để nhanh gọn mình đặt script login vào event nhấn phím L.
Ở Event Step, thêm đoạn script:
gms_show_login(); //Hiện đăng nhập và trả về giá trị vào User Define
Quay lại Event Create, để mở đầu cho mọi thứ, thêm đoạn script này:
gms_settings(1, 1, obj_player, obj_other_player); //con số 1 đầu là chế độ game(tất nhiên là đặt bình thường) còn con số kia là phiên bản của game. obj_player là con mà người chơi sẽ điều khiển cuối cùng là obj_other_player, nó chính là cái xác của những người chơi khác :p nó chẳng có trách nhiệm gì ngoài nhận dữ liệu và biến đổi cho phù hợp :D
Sau khi User đăng nhập, nếu thất bại sẽ trả về Event User Defined 14
Ví dụ, nếu muốn thoát game thì thêm vào script:
game_end();
Ngược lại, đăng nhập thành công sẽ trả về event User Defined 15 :D
Thêm đoạn code thông báo:
show_message("Login Successfully!");
Giờ nếu muốn test thì tạo 1 cái room đặt tên chẳng hạn như: rm_login
Sau đó quẳng obj_login và GMS vào room đó. Giờ thì test thoải mái đi :D
Bài viết còn có phần sau, cập nhật theo dõi và Vote nếu muốn bài ra sớm
Xin cảm ơn đã đọc bài viết "Siêu dài" và "Siêu rối" của mình. Mong các bạn sẽ thực hiện thành công :D
Cheers,
Tagged:
Comments