====== VirtualCast1.5.4a VCI更新 ======
* メッセージシステムを実装しました
----
===== vci.message.Emit =====
* メッセージを送信します。
* メッセージは、自分自身を含む全ユーザーの全VCIに送信されます。
function onUse(self)
-- メッセージ名: MSG_NAME
-- メッセージの内容: 1
vci.message.Emit('MSG_NAME', 1)
end
===== vci.message.On =====
* メッセージを受信します。
* メッセージを送信したのと同じVCIでも、別のVCIでもOK。
* Onの第1引数と Emitの第1引数 が一致したものを受け取ることができます。
受信関数は3つの引数を受けます。
* sender: 送信者情報(システムが設定します)
* name: メッセージの名前。Emit 関数の第1引数です。
* message: メッセージの内容。Emit 関数の第2引数です。
function onMessage(sender, name, message)
-- senderはテーブルになっています。vci.message.Emit関数を実行したvciの情報
-- {
-- type: "vci"
-- name: "vciの名前"
-- }
-- 今後の更新で sender が違うメッセージを実装予定です
for k, v in pairs(sender) do
print(k .. ":" .. v)
end
print(name)
print(message)
end
vci.message.On('MSG_NAME', onMessage)
===== 機能について =====
* 主にあるVCIから別のVCIにメッセージを送ることを想定しています
* スイッチのVCIと、爆発のVCIを分けて作るなど
* システムからのメッセージをVCIで受け取ることを想定しています(今後のバージョンアップで実装予定)
共有変数との違い。
* 共有変数は値をすべてクリアする方法を実装していませんでした。
* 変数の持ち主がわからないので全部消していいのかどうか。
* アイテム固有の変数の名前を付けるのが難しい
* 同じアイテムを複数のユーザーが出したときにどうしよう?
* メッセージは、投げっぱなしで値を保存しません(途中で凸した場合には過去のメッセージは来ない)
* アイテム変数 `vci.state` とメッセージシステムを組み合わせることでほぼ同じ機能を実装できます
* アイテム変数は、アイテムを削除して作り直すことでクリアできます