Skip to content

Người chơi và nhân vật ​

Người chơi vào và rời game ​

lua
players.joined:connect(function(player)
    print(player.name .. " đã vào")
end)

players.left:connect(function(player)
    print(player.name .. " đã rời")
end)

for _, player in players.all() do   -- mọi người đang trong game
    print(player.displayName)
end

Trong ClientScript, players.me là người chơi sở hữu thiết bị đang chạy script.

Một người chơi ​

Thành viênLà gì
name, displayNameTên tài khoản, và tên hiển thị
userIdSố tài khoản; -1 với khách (guest)
health, maxHealthMáu (ban đầu 100). Đặt health = 0 để giết
walkSpeedUnit mỗi giây (ban đầu 20, 0-200)
jumpPowerLực nhảy (ban đầu 50, 0-200)
positionVị trí; gán từ Script để dịch chuyển
team, neutralĐội của họ
statsChỉ số trong bảng người chơi (bên dưới)
backpackCông cụ của họ
characterCơ thể trong world (bên dưới)
guiBản UI của họ (ClientScript)
characterModelMột Model để vẽ họ thay cho cơ thể của KHIM (bên dưới)
diedEvent: họ chết
teleport(position)Đưa họ tới đó
damage(amount)Trừ máu
kick(reason)Đuổi khỏi game kèm lời nhắn (server)
equipTool(tool), unequipTools()Cầm một công cụ lên tay, hoặc cất đi
lua
players.joined:connect(function(player)
    player.walkSpeed = 30
    player.died:connect(function()
        chat.send(player.displayName .. " đã ngã!")
    end)
end)

Đặt tốc độ từ Script

walkSpeed và jumpPower thuộc về server: server di chuyển mọi nhân vật và kiểm tra chuyển động theo giá trị của chính nó. Hãy đặt từ Script; ClientScript đổi thì không giữ được.

Bảng người chơi: stats ​

player.stats đặt số (hoặc chữ) cạnh tên người chơi trong bảng người chơi (Tab):

lua
players.joined:connect(function(player)
    player.stats.Coins = 0
    player.stats.Level = 1
end)

-- sau đó, trên server
player.stats.Coins += 10
print(player.stats.Coins)
player.stats.Level = nil   -- bỏ đi
  • Chỉ số đầu tiên dùng để xếp hạng bảng, cao nhất trước.
  • Số lớn được rút gọn: 12.3K, 807K, 34.5M, 1.2B.
  • Stats do Script trên server giữ. Chúng không tự được lưu khi người chơi rời - xem Lưu dữ liệu.

Nhân vật ​

player.character là một Model mang tên người chơi, bên trong có hai thứ:

  • character.body - máu và di chuyển: health, maxHealth, walkSpeed, jumpPower, damage(amount), died, state. Cùng giá trị với trên người chơi, nên character.body.walkSpeed = 30 và player.walkSpeed = 30 như nhau.
  • character.root - chiếc hộp vô hình 2 x 5 x 1 mà nhân vật di chuyển và va chạm theo: position (gán để dịch chuyển), transform, size, velocity.
lua
character:moveTo(vec3(0, 10, 0))                       -- đặt nó ở đó
character:pivotTo(transform.lookAt(vec3(0, 5, 0), vec3(10, 5, 0)))  -- ở đó, nhìn về một điểm

Ai đã chạm vào? ​

Khi người chơi đi vào một part, touched của part chạy với một phần của nhân vật họ. players.fromPart đổi nó thành người chơi:

lua
script.parent.touched:connect(function(hit)
    local player = players.fromPart(hit)   -- nil nếu là thùng gỗ chạm, không phải người chơi
    if player then
        player:damage(10)
    end
end)

Nhân vật đang làm gì ​

body.state là "Idle", "Walking", "Jumping", "Falling", "Climbing", "Sitting" hoặc "Dead":

lua
player.character.body.stateChanged:connect(function(new, old)
    if new == "Jumping" then print(player.name .. " vừa nhảy") end
end)

Chết và hồi sinh ​

Khi máu về 0, nhân vật đổ xuống như búp bê vải và đứng dậy ở điểm hồi sinh (hoặc Checkpoint chạm gần nhất) khoảng 3 giây sau. player.died chạy mỗi lần như vậy.

lua
players.joined:connect(function(player)
    player.died:connect(function()
        player.stats.Deaths = (player.stats.Deaths or 0) + 1
    end)
end)

Leo trèo ​

Nhân vật leo được mọi part có tag Climbable - thang, dây leo, giàn. Thêm tag trong mục Tags của Inspector, hoặc part:addTag("Climbable").

Cơ thể riêng cho người chơi ​

Một world có thể vẽ người chơi thành model của riêng nó - một con cáo, một robot, một quả bóng có mắt:

  1. Dựng một Model nhìn về hướng +Z, đứng trên mặt đất như nó nên đứng.
  2. Gắn các phần chuyển động vào thân bằng Bone (Animation và rig).
  3. Đặt tên Model là StarterCharacter và để nó trong ReplicationService.
  4. Tuỳ chọn: thêm các Animation tên Idle, Walk, Jump, Fall và Climb bên trong.

Mọi người chơi sẽ được vẽ thành model đó. Hộp va chạm vẫn là 2 x 5 x 2 của KHIM, nên model cỡ đó là vừa nhất. Script trên server có thể cho một người chơi model khác: player.characterModel = shared.Wolf (và nil để bỏ).

Tin nhắn trong chat ​

lua
chat.send("Vòng 2 bắt đầu sau 10 giây!")   -- một dòng hệ thống cho mọi người (Script trên server)

Đuổi người chơi ​

lua
player:kick("Bạn đã AFK quá lâu.")

Muốn chặn hẳn, hãy cấm họ ở trang Live của Workshop.