カワリモノ息子の技術メモ的な~

カワリモノ息子とその母の技術メモ的な〜

学校が苦手な息子くんの作品とその母の作品、はたまた日常などいろいろを在宅エンジニア母が綴る

小6息子くんRobloxで自作モジュール公開!とエラーの対処

いろいろな開発に興味をもちつつ、ロブロックスをほとんどやらない日はない息子くん。

ROBLOX(ロブロックス)とは

siroitori.hatenablog.com

ゲームプラットフォームであり、開発環境も無料で使えるおもしろいものです。

自作モジュールを作った

今回、ゲーム開発環境(Roblox Studio)で使えるモジュールを作って公開していました。
別の開発者がRoblox Studioでゲームを作るときに、このモジュールを読み込ませてゲームに組み込むことが可能になります。組み込み方については後述します。

内容がザ・シュールなので、実はちょっとためらいましたが…書いちゃいました。

どんなの作ったの?

これを組み込んで実行させると、
キャラクターめがけてパトカーが走ってきて警察官に囲まれます。
そのあとばーんと拳銃で撃たれます。。。
ね、シュールでしょ・・・ひかないで!リアルの息子くんは気持ちの優しい子なの!

f:id:toriko0413:20190612235410p:plain

ソースコード

公開されているモジュールを読み込ませれば誰でも見れるようになるので、メインスクリプトのみ公開します。

いつもはあまり自分のソースコードを見せたくない息子くんですが、公開しようと思ってから、ソースをきれいにしてコメントもちゃんと入れたって。
念のためコメントの英語が間違ってないか見ておいてって言われ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です。
そしたら、今回の件。うまくいきました。

根本的な解決にはなってないのですが、、、
もしどうしても困っているならこんな手もありましたよとご紹介でした。

あなたのゲームで使ってね

こういう配布モジュールってウイルスが入ったものが多いらしいです。
息子くん今まで何個もウイルスが入っているモジュールを見てきたそうな。
これは悪いコード入ってないので安心してください。

関連記事

siroitori.hatenablog.com


ううう倒れちゃった。
かわいそうな私・・・


スター・はてブとても嬉しいです!