0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

4. 撲殺バットMODの作成(レシピ追加)

Posted at

概要

今回追加した撲殺バットにはグレードが3つありました。
今回はアップグレード用のレシピと、レシピ習得のためのアイテムを追加します。1

1. レシピの追加

武器のアップグレードはレシピ機能で実現するものとし、以下の仕様とします。

  • レシピ1
    • ティア2を材料に、ティア1へアップグレードする
    • アップグレードすると材料は消失する
    • 必要なスキルは「鈍器(大型):Lv.6、保守能力:Lv.6」とする
    • 専用のレシピ本からレシピを習得する必要がある
  • レシピ2
    • ティア3を材料に、ティア2へアップグレードする
    • アップグレードすると材料(ティア3)は消失する
    • 必要なスキルは「鈍器(大型):Lv.4、保守能力:Lv.4」とする
    • 専用のレシピ本からレシピを習得する必要がある

定義ファイルの作成

アイテム定義やモデル定義の場合と同様に、下記の通り定義ファイルを作成します。

\media\scripts\P4BokusatsuBat_recipes.txt

定義ファイルのファイル名は任意の名前で問題ありません。
また、アイテム定義やモデル定義と同じファイルに定義しても問題ありません。

レシピ定義の追加

作成した定義ファイルに、レシピの定義を追加します。

P4BokusatsuBat_recipes.txt
module P4BokusatsuBat
{
	imports
	{
		Base
	}

	recipe Upgrade Bokusatsu Bat
	{
		destroy P4BokusatsuBatT2,

		Result:P4BokusatsuBatT1,
		Sound:P4BokusatsuBatUpgrade,
		Time:100.0,
		StopOnWalk:TRUE,
		SkillRequired:Blunt=6;Maintenance=6,
		NeedToBeLearn:TRUE,
		Category:Survivalist,
	}

	recipe Upgrade Bokusatsu Bat
	{
		destroy P4BokusatsuBatT3,

		Result:P4BokusatsuBatT2,
		Sound:P4BokusatsuBatUpgrade,
		Time:100.0,
		StopOnWalk:TRUE,
		SkillRequired:Blunt=4;Maintenance=4,
		NeedToBeLearn:TRUE,
		Category:Survivalist,
	}
}

レシピ名については一意でなくとも構いません。
今回は両レシピを区別する必要が無かったため同一名としています。

レシピ定義の各プロパティ詳細については、下記URLを参照してください。
PZwiki : Recipe Script Guide

プロパティ名から想像が付くと思うので詳細な説明は割愛します。レシピ定義は様々な指定が可能なので、上記の公式情報を一読することをお薦めします。もしくは、バニラや他MODのレシピ定義を参考にするのも良いでしょう。

また、Soundプロパティで、レシピ実行時に任意の効果音を鳴らすことも可能です。実装方法は前回解説した武器の効果音と同様で、今回は下記のファイルを配置しています。

\media\sound\P4BokusatsuBatUpgrade.wav

💾 P4BokusatsuBatUpgrade.wav2(MD5チェックサム:df3a33325c2180dce74230a71c9278fb)

2. レシピ本の追加

先程追加したレシピを習得するためのレシピ本を追加します。

モデル定義の追加

今回は1アイテムの追加ですが、モデルは下記の2定義を追加します。

P4BokusatsuBat_models.txt
	model P4BokusatsuBatBookS
	{
		mesh = Book,
		texture = Model_P4BokusatsuBatBookS,
	}

	model P4BokusatsuBatBookWS
	{
		mesh = P4BokusatsuBatBookWS,
		texture = Model_P4BokusatsuBatBookWS,
	}
  • P4BokusatsuBatBookS
    • 本を読む際に参照されるモデル定義(StaticModel)
    • 3Dモデルはバニラの3Dモデルを流用とし、テクスチャのみ独自のものを指定
  • P4BokusatsuBatBookWS
    • アイテムを地面に配置する際に参照されるモデル定義(WorldStaticModel)
    • 3Dモデルおよびテクスチャに独自のものを指定

また、独自に用意した3Dモデルとテクスチャは、下記のファイルをそれぞれ配置しています。

\media\models_X\P4BokusatsuBatBookWS.fbx

💾 P4BokusatsuBatBookWS.fbx(MD5チェックサム:1db5f0da13149cd148179309ece8808b)

\media\textures\Model_P4BokusatsuBatBookS.png
\media\textures\Model_P4BokusatsuBatBookWS.png

Model_P4BokusatsuBatBookS.png Model_P4BokusatsuBatBookS.png

Model_P4BokusatsuBatBookWS.png Model_P4BokusatsuBatBookWS.png

アイテム定義の追加

バニラのレシピ本の定義を参考に、レシピ本のアイテム定義を追加します。

P4BokusatsuBat_items.txt
	item P4BokusatsuBatBook
	{
		DisplayCategory = SkillBook,
		Weight = 0.8,
		Type = Literature,
		DisplayName = Bokusatsu Bat Book,
		Icon = P4BokusatsuBatBook,
		TeachedRecipes = Upgrade Bokusatsu Bat,
		ReplaceOnUse = P4BokusatsuBatBook,
		StaticModel = P4BokusatsuBat.P4BokusatsuBatBookS,
		WorldStaticModel = P4BokusatsuBat.P4BokusatsuBatBookWS,
	}

基本的な内容は撲殺バットの定義と同じですが、今回特有の項目は下記になります。

  • TeachedRecipes:使用することで習得可能なレシピ名を指定する
  • ReplaceOnUse:使用後もアイテムを残存させるため、自身のアイテムタイプを指定する
  • StaticModel:モデル定義で追加したStaticModelのモデル名を指定する
  • WorldStaticModel:モデル定義で追加したWorldStaticModelのモデル名を指定する

また、アイコンは、下記のファイルを配置しています。

\media\textures\Item_P4BokusatsuBatBook.png

Item_P4BokusatsuBatBook.png Item_P4BokusatsuBatBook.png

3. レシピ本の湧き設定の追加

レシピ本はアイテム湧きでの取得とし、湧き設定を追加します。

湧き設定について

アイテムの湧き設定は、バニラでは下記のLuaファイルで実装されています。

C:\Program Files (x86)\Steam\steamapps\common\ProjectZomboid\media\lua\server\Items\ProceduralDistributions.lua

このファイルに、湧き場所に対してどのようなアイテムがどの程度湧くかが設定されています。例として、発電機本(ElectronicsMag4)の湧き設定の一部を下記に示します。

ProceduralDistributions.lua LL.8109-8130
ElectronicStoreMagazines = {
	rolls = 4,
	items = {
		"Magazine", 20,
		"ElectronicsMag1", 8,
		"ElectronicsMag2", 8,
		"ElectronicsMag3", 8,
		"ElectronicsMag4", 8,
		"ElectronicsMag5", 8,
		"EngineerMagazine1", 8,
		"EngineerMagazine2", 8,
		"Radio.RadioMag1", 8,
		"Radio.RadioMag2", 8,
		"Radio.RadioMag3", 8,
	},
	junk = {
		rolls = 1,
		items = {
			
		}
	}
},

湧き設定の詳細については、下記URLを参照してください。
PZwiki : Procedural distributions

バニラ実装の湧き設定を参照し、類似アイテムの湧き場所などから湧き設定を追加していきます。追加は、MOD側に独自のLuaファイルを作成し、湧き場所のテーブルに対して、アイテムタイプと湧き率を追加します。今回は、書籍が湧く場所(ただし、電子機器点などの明らかにそぐわない場所を除く)に対して、発電機本と同程度の確率で湧くように設定しました。

\media\lua\server\Items\P4BokusatsuBatDistributions.lua
P4BokusatsuBatDistributions.lua
require 'Items/ProceduralDistributions'

table.insert(ProceduralDistributions.list["BookstoreBooks"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["BookstoreBooks"].items, 2)

table.insert(ProceduralDistributions.list["BookstoreMisc"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["BookstoreMisc"].items, 2)

table.insert(ProceduralDistributions.list["CrateMagazines"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["CrateMagazines"].items, 1)

table.insert(ProceduralDistributions.list["LibraryBooks"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["LibraryBooks"].items, 1)

table.insert(ProceduralDistributions.list["LivingRoomShelf"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["LivingRoomShelf"].items, 0.1)

table.insert(ProceduralDistributions.list["LivingRoomShelfNoTapes"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["LivingRoomShelfNoTapes"].items, 0.1)

table.insert(ProceduralDistributions.list["LivingRoomSideTable"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["LivingRoomSideTable"].items, 0.1)

table.insert(ProceduralDistributions.list["LivingRoomSideTableNoRemote"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["LivingRoomSideTableNoRemote"].items, 0.1)

table.insert(ProceduralDistributions.list["MagazineRackMixed"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["MagazineRackMixed"].items, 1)

table.insert(ProceduralDistributions.list["PostOfficeMagazines"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["PostOfficeMagazines"].items, 1)

table.insert(ProceduralDistributions.list["ShelfGeneric"].items, "P4BokusatsuBat.P4BokusatsuBatBook")
table.insert(ProceduralDistributions.list["ShelfGeneric"].items, 0.1)

湧き率はパーセントではありません。実際の湧き状況は、他のアイテムの湧き設定やサンドボックス設定などに依存するため、相対的なものと捉えるのが良いでしょう。

4. レシピ追加の確認

まず、湧き設定で追加した場所にレシピ本が湧いているかを確認します。発電機本と同レベルにしたので中々見つかりませんでしたが、正しく湧いていることが確認できました。また、この本を読むことで「Upgrade Bokusatsu Bat」のレシピを習得できることも確認できます。
04-01.png

次に、レシピ本を読んでみます。StaticModel、WorldStaticModelともに正しくモデル定義が反映されていることが確認できます。また、読み終わるとレシピを習得できることが確認できます。
04-02.png

レシピ一覧画面で、レシピが追加されていることが確認できます。レシピ定義で指定した通り、製作に必要な材料やスキル、成果物なども設定どおりになっていることが確認できます。では、実際にレシピを実行して、アップグレードをしてみましょう。
04-03.png

今回追加した2つのレシピを使って、現在所持しているティア3をティア2、ティア1へとアップグレードできました。
04-04.png

あとがき

ここでは、レシピの追加やアイテムの湧き設定について解説しました。
次回はアイテム名やレシピ名の多言語対応として翻訳を追加します。


索引:Project ZomboidのMODを開発する
前:3. 撲殺バットMODの作成(各種差替え)
次:5. 撲殺バットMODの作成(翻訳追加)

  1. 今回の内容を反映したMODファイルは下記。
    💾 P4BokusatsuBat_04.zip(MD5チェックサム:073b549d34ee6d312bac439b89d86575)

  2. 効果音ラボ」様の「演出・アニメ[1] > アニメ > 可愛く輝く1」を拝借。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?