Người chơi và nhân vật
Người chơi vào và rời game
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)
endTrong 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ên | Là gì |
|---|---|
name, displayName | Tên tài khoản, và tên hiển thị |
userId | Số tài khoản; -1 với khách (guest) |
health, maxHealth | Máu (ban đầu 100). Đặt health = 0 để giết |
walkSpeed | Unit mỗi giây (ban đầu 20, 0-200) |
jumpPower | Lực nhảy (ban đầu 50, 0-200) |
position | Vị trí; gán từ Script để dịch chuyển |
team, neutral | Đội của họ |
stats | Chỉ số trong bảng người chơi (bên dưới) |
backpack | Công cụ của họ |
character | Cơ thể trong world (bên dưới) |
gui | Bản UI của họ (ClientScript) |
characterModel | Một Model để vẽ họ thay cho cơ thể của KHIM (bên dưới) |
died | Event: 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 |
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):
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êncharacter.body.walkSpeed = 30vàplayer.walkSpeed = 30như 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.
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ểmAi đã 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:
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":
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.
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:
- Dựng một Model nhìn về hướng +Z, đứng trên mặt đất như nó nên đứng.
- Gắn các phần chuyển động vào thân bằng Bone (Animation và rig).
- Đặt tên Model là
StarterCharactervà để nó trong ReplicationService. - Tuỳ chọn: thêm các Animation tên
Idle,Walk,Jump,FallvàClimbbê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
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
player:kick("Bạn đã AFK quá lâu.")Muốn chặn hẳn, hãy cấm họ ở trang Live của Workshop.