FiveMのサーバーとクライアントの通信
1.はじめに
FiveMのスクリプトを作成する際、サーバーとクライアントの通信を適切に扱うことが重要です。サーバーは全プレイヤーのデータを管理し、クライアントは個々のプレイヤーの操作を処理します。本記事では、サーバーとクライアント間の通信方法を学び、スクリプトをより高度に制御できるようにしていきます。
2.サーバーとクライアントの役割
FiveMでは、クライアントスクリプトとサーバースクリプトの2種類のスクリプトが存在します。それぞれの役割を理解することで、適切な処理を分担できます。
クライアントスクリプト(client.lua)
クライアントスクリプトは、各プレイヤーの操作や描画、UIの制御を担当します。
例: プレイヤーがボタンを押したときの処理
例: UIを表示する処理
例: 車両のスポーン処理
サーバースクリプト(server.lua)
サーバースクリプトは、全プレイヤーのデータ管理や、ゲームロジックの処理を担当します。
例: お金の管理
例: ログの保存
例: 他プレイヤーとの同期
3.クライアントとサーバーの通信方法
クライアントとサーバーは、イベントを使って通信します。主に TriggerServerEvent
や TriggerClientEvent
を利用します。
クライアント → サーバー通信(TriggerServerEvent)
クライアントからサーバーへデータを送る場合、TriggerServerEvent
を使用します。
例: クライアントでコマンドを実行したら、サーバー側に通知ツル
-- クライアント側 (client.lua)
RegisterCommand('send_message', function()
TriggerServerEvent('my_script:sendMessage', 'こんにちは、サーバー!')
end, false)
-- サーバー側 (server.lua)
RegisterNetEvent('my_script:sendMessage')
AddEventHandler('my_script:sendMessage', function(message)
print('受信したメッセージ: ' .. message)
end)
このスクリプトでは、クライアントが /send_message
コマンドを実行すると、サーバーに「こんにちは、サーバー!」というメッセージが送信されます。
サーバー → クライアント通信(TriggerClientEvent)
サーバーから特定のクライアントにメッセージを送るには、TriggerClientEvent
を使用します。
例: サーバーが特定のプレイヤーに通知を送る
-- サーバー側 (server.lua)
RegisterCommand('notify', function(source)
TriggerClientEvent('my_script:showNotification', source, 'サーバーからの通知!')
end, false)
-- クライアント側 (client.lua)
RegisterNetEvent('my_script:showNotification')
AddEventHandler('my_script:showNotification', function(message)
SetNotificationTextEntry('STRING')
AddTextComponentString(message)
DrawNotification(false, true)
end)
このスクリプトでは、サーバーで /notify
コマンドを入力すると、通知がクライアント側に表示されます。
4.全プレイヤーに通知を送る
全プレイヤーに同じメッセージを送る場合は、sourceに-1
を指定します。
-- サーバー側 (server.lua)
RegisterCommand('broadcast', function()
TriggerClientEvent('my_script:showNotification', -1, '全プレイヤーに通知!')
end, false)
このスクリプトを実行すると、すべてのプレイヤーに「全プレイヤーに通知!」が表示されます。
5.よくあるエラーと対処法
エラー1: イベントが反応しない
対策: クライアント側とサーバー側で、同じイベント名を使っているか確認しましょう。
エラー2: メッセージが送られない
対策: server.cfg
にリソースが正しく登録されているかチェックしてください。
6.まとめ
サーバーとクライアントの通信を適切に制御することで、より高度なスクリプトを作成できます。次回は、FiveMのデバッグと運用について解説していこうと思います。