いろいろな開発に興味をもちつつ、ロブロックスをほとんどやらない日はない息子くん。
自作モジュールを作った
今回、ゲーム開発環境(Roblox Studio)で使えるモジュールを作って公開していました。
別の開発者がRoblox Studioでゲームを作るときに、このモジュールを読み込ませてゲームに組み込むことが可能になります。組み込み方については後述します。
内容がザ・シュールなので、実はちょっとためらいましたが…書いちゃいました。
どんなの作ったの?
これを組み込んで実行させると、
キャラクターめがけてパトカーが走ってきて警察官に囲まれます。
そのあとばーんと拳銃で撃たれます。。。
ね、シュールでしょ・・・ひかないで!リアルの息子くんは気持ちの優しい子なの!
ソースコード
公開されているモジュールを読み込ませれば誰でも見れるようになるので、メインスクリプトのみ公開します。
いつもはあまり自分のソースコードを見せたくない息子くんですが、公開しようと思ってから、ソースをきれいにしてコメントもちゃんと入れたって。
念のためコメントの英語が間違ってないか見ておいてって言われOK出しました。
私自身きちんとコメントをいれておきたいタイプ。
あのめんどくさがりの息子くんが!よく育ってくれたと思いました。なーんて。
ま、いらないよねっていうコメントもありますが(waitにwaitのコメントとか)
-- -- Main Script. -- --Do not Change Script. local PoliceSets = script:FindFirstChild("PoliceSetLocate").Value -- police set location local PoliceArrest = { ArrestPlayer = function(_,Player) if Player.Character then warn("--- Police Script ---") -- print infomation warn("# Arresting Player #") warn(Player.Name) warn("---------------------") -- Stop Move Player -- Player.Character.Humanoid.JumpPower = 0 Player.Character.Humanoid.WalkSpeed = 0 Player.Character.HumanoidRootPart.Anchored = true -- -- wait(.1) local Set = PoliceSets:Clone() -- create new police set. Set.Parent = workspace -- set parent workspace. Set.Cops.Parent = Set.Car -- temporarily change the parent to calculate the position of the car including cops Set.Car:SetPrimaryPartCFrame(CFrame.new(Player.Character.HumanoidRootPart.Position + Vector3.new(300,0,0))) -- calculate car and cops position ( change X pos 300 studs ) Set.Car.Cops.Parent = Set -- Undo temporary parent changes local Cops = {} -- create cops list for _,Cop in pairs(Set.Cops:GetChildren()) do table.insert(Cops,{Cop}) -- cop insert cops list Cop.Parent = nil -- hide cop end Set.Siren.Parent = Set.Car.PrimaryPart -- change siren sound parent. Set.Car.PrimaryPart.Siren:Play() -- play siren for _=0,299 do --move car (299 studs) Set.Car:SetPrimaryPartCFrame(CFrame.new(Set.Car.PrimaryPart.Position - Vector3.new(1,0,0))) -- move car wait(0) -- wait end for _,Cop in pairs(Cops) do Cop[1].Parent = Set.Cops -- show cop local model = Cop[1] -- cop model:TranslateBy(Vector3.new(-300,0,0)) -- move cop end wait(3) -- wait -- FIRE GUN! Set.FireSound:Clone().Parent = Player.Character.Head -- Move FireSound to player head. Player.Character.Head.FireSound:Play() -- Fire Sound Play Set.Ragdoll:Clone().Parent = Player.Character -- Play Ragdoll Player.Character.HumanoidRootPart.Anchored = false -- unlock the player wait() Player.Character.Humanoid.Health = 0 -- DEATH PLAYER! for i=0,10 do -- blood. that is all. local Red = Instance.new("Part") Red.Anchored = false Red.Size = Vector3.new(.1,.1,.1) Red.BrickColor = BrickColor.Red() Red.Parent = Player.Character Red.Name = "Red" Red.Position = Player.Character.HumanoidRootPart.Position end wait(5) -- wait respawn player Set.Parent = nil -- delete car and cops. end end } return PoliceArrest
どんな処理が書いてあるかって?
私ゲームプログラミングって専門外で、Lua言語でもあり、えっと、なんとなくしかわかりませーん。
もし質問あれば息子くんが答えます(汗)
モジュールの組み込み方
では気になる方も多いか多くないかわかりませんが、モジュールの組み込ませ方です。
Roblox Studio を準備
まず、Roblox Studio を起動してFILE - Newを選択。
右側のExplorerウインドウから、Lightingを選択後、その下のPropertiesウインドウで
Technology = Compatibility
になっていない場合は、そう設定する。
息子くんによると最近インストールしたRoblox Studio以外はデフォルトでCompatibilityになってないとのこと。
今後はCompatibilityが推奨??ということらしいです。↓ 公式サイト(英語)
devforum.roblox.com
モジュールを取得
次に、WEB画面に戻って、下記サイトを開きます。
web.roblox.com
「Police Arrest Module!」っていうのが開きます。これが息子くん作モジュールです。
緑色の「Get」を押して
「Get Now」をクリック
これでOK。
Roblox Studioに戻ります。
左側のInventoryタブの中を見ると、「Police Arrest Module!」が追加されてます。
この「Police Arrest Module!」が表示された部分をクリックすると、モジュールがインポートされます。
では動かしてみたい
モジュール内にReadMe的な説明が入っています。これを読んでください。
「How To Use PoliceArrest Module」というのがそうです。
アイコン部分をダブルクリックすると開きます。
説明全文は、以下のとおり。
How to use Police Arrest Module!
This Tutorial is easy!
1.Play Game
2.Go to the Test Menu
3.Click Client
4.Type CommandBar 'require(workspace.PoliceArrest):ArrestPlayer(game.Players:GetChildren()[1])'
5.Click Server
or
1.Create Script
2.Enter Script
-- script --
local Module = require(workspace.PoliceArrest)
game.Players.PlayerAdded:Connect(function(Player)
Player.CharacterAdded:Wait()
wait(3)
Module:ArrestPlayer(Player)
end)
-- end of script --
3.Play Game
息子くんの書いた文章。英語おかしかったら…ごめんなさい(;^ω^)
説明文前半の1~5の手順をふむか(コマンドバーに入れるタイプの実行方法)
もしくは説明文後半の1~3の手順のスクリプトを埋め込む方法か、で実行ができます。
と、書きましたが…!
じつは公開後、私のRoblox Studioで組み込もうとしたらやたらとエラーが続出・・・うまく動きませんでした。
かなり試行錯誤した結果どうやって解決したのか、、後述します。もしもうまく動かない方いらっしゃったら参考にされてください。
コマンドバーに入れるタイプの実行方法(説明文前半1~5)
コマンドバーにコマンドをコピッてから、Playボタンをクリック
コマンドは以下
require(workspace.PoliceArrest):ArrestPlayer(game.Players:GetChildren()[1])
TESTタブに切り替えて、「Current:Client」と書かれたボタンをクリック。
そのあとにすかさずコマンドバーの内容をEnterで実行。
実行後すぐに今度は「Current:Server」ボタンをクリック
実行できました。
スクリプトを埋め込む方法(説明文後半1~3)
ExplorerのWorkSpaceの右側の+ボタンをクリックしてから表示されるメニューでScriptを選択すると、WorkSpaceにスクリプトが追加されます。
このScriptに、説明文中にあったサンプルロジックをかぶせます。
サンプルロジックは以下
local Module = require(workspace.PoliceArrest) game.Players.PlayerAdded:Connect(function(Player) Player.CharacterAdded:Wait() wait(3) Module:ArrestPlayer(Player) end)
その後、「Play」で実行すればOK。
エラーが出たときの対処
今回、息子くんのPCで開発したモジュールを私のPC、私のアカウントでのRoblox Studioに組み込もうとしたらこんなエラーがたくさん出てきました。
XXXXX is not a valid member of CorePackages
コアパッケージの配下のものが全部エラーなんです。
コアパッケージが読み込めてないみたい。。。どうすることもできない・・・。
実は以前、状況は違ってましたが、息子くんがどうしてもRoblox Studioのツールボックスの表示がおかしくなってて開発ができないって言って何か月も開発できず悩んでたこともあったんです。
結局はそのあと、新しく買ったノートPCにセットアップしたらうまくいったと。
サポートに問い合わせたら、「その問題は解決しているからインストールしなおせ」と言われるんですけど、一度入れたRoblox Studio、アンインストールして再インストールしてもどうもきれいにはならないんですよね。テンポラリファイルとかレジストリとかが残ってるんだろうと色々調べて何度もインストールしたんですけど結局わからずじまいで。
新しくインストールしたらいいってことは、もしかすると…と思って、同じPCながら別のアカウントでインストールしてみたんです。別のアカウントは新規で作成しました。ちなみにWindowsです。
そしたら、今回の件。うまくいきました。
根本的な解決にはなってないのですが、、、
もしどうしても困っているならこんな手もありましたよとご紹介でした。
あなたのゲームで使ってね
こういう配布モジュールってウイルスが入ったものが多いらしいです。
息子くん今まで何個もウイルスが入っているモジュールを見てきたそうな。
これは悪いコード入ってないので安心してください。