Compare commits
64 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
ec56bc4325 | ||
|
3b414ef40a | ||
|
b574f4495a | ||
|
a01a1a2cb5 | ||
|
a29f888a54 | ||
|
d2899c8672 | ||
|
0525e26809 | ||
|
cb5305573d | ||
|
9973025ff7 | ||
|
9f1aabfc3a | ||
|
ac8c7f6a30 | ||
|
750802fd00 | ||
|
44f2177a95 | ||
|
74654691dd | ||
|
d5caabe6b4 | ||
|
52e6f40894 | ||
|
b66f560eea | ||
|
796d63d741 | ||
|
20bd1f84f7 | ||
|
6064c2a62c | ||
|
d0cc89f404 | ||
|
711c9ad9f7 | ||
|
7e090ce75d | ||
|
e05dd18d7f | ||
|
08bd42cb39 | ||
|
67b260ce5a | ||
|
6344183aae | ||
|
2aa8e65dcb | ||
|
af4db79642 | ||
|
c311f575c4 | ||
|
1f4c4fa8d7 | ||
|
0b2e1678a9 | ||
|
d94f6fa8b7 | ||
|
0cc9807d04 | ||
|
11305efe59 | ||
|
fbf93ecf2d | ||
|
0664cb9050 | ||
|
a3e0589ca3 | ||
|
50aeecef27 | ||
|
0011c39158 | ||
|
9185079c8b | ||
|
4ee3ef55dd | ||
|
434d2ede0d | ||
|
7ed8b8172a | ||
|
641e7e7613 | ||
|
2798eb6045 | ||
|
9628c8efe2 | ||
|
13013b7aa2 | ||
|
e0b5ea3653 | ||
|
4b32c4c5cd | ||
|
4fa83404d5 | ||
|
158e9bde5d | ||
|
02f4d13af0 | ||
|
e238fe69f5 | ||
|
73183a5a36 | ||
|
a5e36b9c50 | ||
|
25f3bbaba5 | ||
|
66770868f3 | ||
|
8eff58524d | ||
|
931391ea3f | ||
|
fa6e294977 | ||
|
a2ee95fa72 | ||
|
ece313bd7a | ||
|
e0e904c44b |
184
README-ja.md
|
@ -1,77 +1,155 @@
|
|||
# Maidroid
|
||||
|
||||
<img src="http://i.imgur.com/7HTh30v.png" />
|
||||
<img src="http://i.imgur.com/wF1BBe6.gif" />
|
||||
<img src=http://i.imgur.com/oWjrLtK.png>
|
||||
|
||||
## Overview
|
||||
この MOD は Maidroid というメイドのロボットと, その Maidroid に農業やプレイヤーの追跡など, 様々なことをさせるコア, それらに関連する種々のツールを提供します.
|
||||
Minecraft の著名な MOD, littleMaidMob にインスパイアされて開発を始めました.
|
||||
|
||||
Maidroid MOD は, Minecraft のMOD `littleMaidMob` にインスパイアされて開発を始めた, 孤独な Minetest の世界にメイドのロボットを追加する MOD です。
|
||||
## 使い方
|
||||
|
||||
## Usage
|
||||
### Maidroid の卵の作成
|
||||
|
||||
Maidroid を作り出すには, まず空の卵と卵に命を吹き込むための, Maidroid-Egg Writer を作成しなければなりません.
|
||||
それらのレシピを以下に示します.
|
||||
1. 空の卵と Maidroid-Egg Writer を後に示すレシピに従ってクラフトテーブルで作成します.
|
||||
2. Maidroid-Egg Writer を設置し, 右クリックして formspec を開きます.
|
||||
3. `Egg` と書かれたスロットに先に作成しておいた空の卵, `Fuel` と書かれたスロットに石炭, `Dye` と書かれたスロットに染料を配置します.
|
||||
4. すると, Maidroid-Egg Writer が起動し, 浮いた卵が回転を始めます.
|
||||
5. しばらく待つと, 命の吹き込まれた Maidroid の卵が完成しますので, 再度 Maidroid-Egg Writer を右クリックし取り出してください.
|
||||
|
||||
<img src="http://i.imgur.com/6ZGQF4J.png" />
|
||||
<img src="http://i.imgur.com/Y5tzPGM.png" />
|
||||
### コアの作成
|
||||
|
||||
次に, Maidroid-Egg Writer 設置, 右クリックし, `Egg` と書かれたスロットに先ほど作成した空の卵を置きます.
|
||||
また, `Fuel` と書かれたスロットには石炭を, `Dye` と書かれたスロットには染料を設置します.
|
||||
この染料の色によって, 生成される卵の種類が変化します.
|
||||
以下に染料と, 生成される卵の対応を示します.
|
||||
1. 空のコアと Core Writer を後に示すレシピに従ってクラフトテーブルで作成します.
|
||||
2. Core Writer を設置し, 右クリックして formspec を開きます.
|
||||
3. `Core` と書かれたスロットに先に作成しておいた空のコア, `Fuel` と書かれたスロットに石炭, `Dye` と書かれたスロットに染料を配置します.
|
||||
4. すると, Core Writer が起動し, 上のコアが回転を始めます.
|
||||
5. しばらく待つと, 情報が書き込まれたコアが完成しますので, 再度 Core Writer を右クリックし取り出してください.
|
||||
|
||||
|染料|Egg|
|
||||
|:--|:--|
|
||||
|dye:white|maidroid:maidroid_mk1_egg|
|
||||
|dye:grey|maidroid:maidroid_mk2_egg|
|
||||
|dye:dark_grey|maidroid:maidroid_mk3_egg|
|
||||
|dye:black|maidroid:maidroid_mk4_egg|
|
||||
|dye:blue|maidroid:maidroid_mk5_egg|
|
||||
|dye:cyan|maidroid:maidroid_mk6_egg|
|
||||
|dye:green|maidroid:maidroid_mk7_egg|
|
||||
|dye:dark_green|maidroid:maidroid_mk8_egg|
|
||||
|dye:yellow|maidroid:maidroid_mk9_egg|
|
||||
|dye:orange|maidroid:maidroid_mk10_egg|
|
||||
|dye:brown|maidroid:maidroid_mk11_egg|
|
||||
|dye:red|maidroid:maidroid_mk12_egg|
|
||||
|dye:pink|maidroid:maidroid_mk13_egg|
|
||||
|dye:magenta|maidroid:maidroid_mk14_egg|
|
||||
|dye:violet|maidroid:maidroid_mk15_egg|
|
||||
### Maidroid の起動
|
||||
|
||||
しばらく待つと, 空の卵に命が吹き込まれ, 新しい卵に変換されます.
|
||||
この卵を取り出し地面に投げつけると, Maidroid が誕生します.
|
||||
1. 先に作成しておいた, 命の吹き込まれた Maidroid の卵を床に投げつけ, Maidroid を生成します.
|
||||
2. 生成された Maidroid を右クリックし, `Core` と書かれたスロットに先ほど作成したコアを配置します.
|
||||
3. すると, Maidroid はそのコアの情報に従って行動を始めます.
|
||||
|
||||
この状態では, Maidroid は止まったままです.
|
||||
Maidroid を動かすためには, Core, つまり Maidroid の脳を埋め込む必要があります.
|
||||
Core を作り出す手順は Maidroid を作り出す手順と非常に似ています.
|
||||
まず, 空の Core と Core に情報を書き込む為の Core Writer を作成します.
|
||||
それらのレシピを以下に示します.
|
||||
### レシピ / 染料と卵 / 染料とコア
|
||||
|
||||
<img src="http://i.imgur.com/Sxnr38Y.png">
|
||||
<img src="http://i.imgur.com/97VENIl.png">
|
||||
クラフトテーブルで作成するノードやアイテムのレシピを以下に示します.
|
||||
|
||||
Core Writer を設置 & 右クリックし, `Core` スロットに空の Core, `Fuel` スロットに石炭, `Dye` スロットに染料を設置します.
|
||||
Maidroid-Egg Writer 同様, 設置される染料の種類によって, 生成される Core の種類が変化します.
|
||||
以下に染料と, 生成される Core の対応を示します.
|
||||
```
|
||||
b = dye:black c = default:cobble d = default:diamond
|
||||
f = farming:cotton o = default:obsidian p = default:paper
|
||||
s = default:steel_ingot w = bucket:bucket_water z = default:bronze_ingot
|
||||
|
||||
|染料|Core|説明|
|
||||
|:--|:--|:--|
|
||||
|`dye:red`|`maidroid_core:basic`|プレーヤーを追いかけてくる. |
|
||||
|`dye:yellow`|`maidroid_core:farming`|農耕をする. |
|
||||
Core Writer Egg Writer Nametag Empty Core Empty Egg
|
||||
|
||||
Core が生成されたら早速 Maidroid に埋め込みましょう.
|
||||
Maidroid を右クリックし, Core と書かれたスロットに先ほど作成した Core を設置します.
|
||||
すると, Maidroid が動き始めるでしょう.
|
||||
| s | d | s | | d | w | d | | | f | | | s | s | s | | z | z | z |
|
||||
| c | s | c | | c | s | c | | p | p | p | | s | o | s | | z | s | z |
|
||||
| c | c | c | | s | c | s | | s | b | s | | s | s | s | | z | z | z |
|
||||
```
|
||||
|
||||
## Dependencies
|
||||
次に, 染料と対応する卵から生まれる Maidroid について以下に示します.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>White</td><td><img src=http://i.imgur.com/lsdq79e.png> Mk1</td>
|
||||
<td></td>
|
||||
<td>Grey</td><td><img src=http://i.imgur.com/9ffUTjB.png> Mk2</td>
|
||||
<td></td>
|
||||
<td>Dark Grey</td><td><img src=http://i.imgur.com/HWtLvqb.png> Mk3</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Black</td><td><img src=http://i.imgur.com/GoHRTRC.png> Mk4</td>
|
||||
<td></td>
|
||||
<td>Blue</td><td><img src=http://i.imgur.com/JTZTCS9.png> Mk5</td>
|
||||
<td></td>
|
||||
<td>Cyan</td><td><img src=http://i.imgur.com/hHw6mbD.png> Mk6</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Green</td><td><img src=http://i.imgur.com/YdzOgvM.png> Mk7</td>
|
||||
<td></td>
|
||||
<td>Dark Green</td><td><img src=http://i.imgur.com/UXB52Ce.png> Mk8</td>
|
||||
<td></td>
|
||||
<td>Yellow</td><td><img src=http://i.imgur.com/hcd9vk4.png> Mk9</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Orange</td><td><img src=http://i.imgur.com/6UjS63j.png> Mk10</td>
|
||||
<td></td>
|
||||
<td>Brown</td><td><img src=http://i.imgur.com/ayz4uP3.png> Mk11</td>
|
||||
<td></td>
|
||||
<td>Red</td><td><img src=http://i.imgur.com/rqknHh7.png> Mk12</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Pink</td><td><img src=http://i.imgur.com/UNALjMo.png> MK13</td>
|
||||
<td></td>
|
||||
<td>Magenta</td><td><img src=http://i.imgur.com/iorRtmf.png> Mk14</td>
|
||||
<td></td>
|
||||
<td>Violet</td><td><img src=http://i.imgur.com/UX3w1Cx.png> Mk15</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
最後に, 染料とコアとの対応と, 各コアの簡易的な説明を以下に示します.
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Red</td><td><img src=http://i.imgur.com/DlMzSGK.png> Basic Core</td><td>プレイヤーを追跡する. 荷物持ちに使える.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yellow</td><td><img src=http://i.imgur.com/ALor72m.png> Farming Core</td><td>農業を行う.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>White</td><td><img src=http://i.imgur.com/ypI2Fs6.png> OCR Core</td><td>プログラムが書かれた本を読み実行. 要 pdisc MOD.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Orange</td><td>Torcher Core</td><td>プレイヤーを追跡し, 暗い所を松明で照らす.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## 各コアの詳細
|
||||
|
||||
### Basic Core
|
||||
|
||||
このコアが埋め込まれた Maidroid はプレイヤーを追跡します.
|
||||
Maidroid 自体の場所移動に使えますし, あるいは荷物持ちくらいにはなると思われます.
|
||||
|
||||
### Farming Core
|
||||
|
||||
このコアが埋め込まれた Maidroid は農業をします.
|
||||
Farming Core を埋め込んだ状態で種を持たせれば, 土壌に種を植え始めます.
|
||||
また, 収穫の時期になったら自動で回収して回ります.
|
||||
このコアが埋め込まれた状態では柵を飛び越えないので, 農地の周りを柵で囲むことをお勧めします.
|
||||
|
||||
### OCR Core
|
||||
|
||||
pdisc MOD と連携するコアです.
|
||||
このコアが埋め込まれた Maidroid は, 自身のインベントリ内のプログラムが書かれた本を読み, そのプログラムを実行します. 例えば, 以下のようなプログラムが書かれた本を OCR Core が埋め込まれた Maidroid に読ませると, 一秒ごとにビープ音とジャンプをします. 本のタイトルは `main` としなければなりません.
|
||||
|
||||
```
|
||||
start: sleep 1
|
||||
beep
|
||||
jump 0.9
|
||||
jmp start
|
||||
```
|
||||
|
||||
### Torcher Core
|
||||
|
||||
このコアが埋め込まれた Maidroid はプレイヤーを追跡し, 自分の周りが暗いと判断したら松明を設置し, 周りを照らしてくれます.
|
||||
採掘の際には結構役に立つと思われます.
|
||||
|
||||
## 依存 MOD
|
||||
|
||||
- bucket
|
||||
- default
|
||||
- dye
|
||||
- [pdisc?](https://github.com/HybridDog/pdisc)
|
||||
|
||||
## Lisense
|
||||
## 必要条件
|
||||
|
||||
- Minetest v0.4.14 以降
|
||||
|
||||
## ライセンス
|
||||
|
||||
- Source Code : [LGPLv2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) or later
|
||||
- Resources : [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) or later
|
||||
|
||||
## Contributers
|
||||
|
|
149
README.md
|
@ -1,81 +1,130 @@
|
|||
※ This repository has not been actively updated for a long time.
|
||||
|
||||
# Maidroid
|
||||
|
||||
<img src="http://i.imgur.com/7HTh30v.png" />
|
||||
<img src="http://i.imgur.com/wF1BBe6.gif" />
|
||||
<img src=http://i.imgur.com/oWjrLtK.png>
|
||||
|
||||
## Overview
|
||||
This mod is inspired littleMaidMob mod (for Minecraft), and provides maid robots called 'maidroid', cores that command them to do farming, following their owner and so on, involved tools.
|
||||
|
||||
Maidroid MOD is a MOD for Minetest which adds maid robots, inspired by littleMaidMob.
|
||||
## How to Use
|
||||
|
||||
## Usage
|
||||
### Create Maidroid Eggs
|
||||
|
||||
First, in order to create a maidroid, you have to craft an empty egg and an egg writer that convert eggs.
|
||||
Those recipe is as follows.
|
||||
1. Create an empty egg and Maidroid-Egg Writer by following the recipe below.
|
||||
2. Place Maidroid-Egg Writer and open formspec by right-clicking it.
|
||||
3. Put an empty egg into the slot labeled `Egg`, a coal into `Fuel`, and a dye into `Dye`.
|
||||
4. Then, Maidroid-Egg Writer activates.
|
||||
5. A short time later, a new maidroid egg will be created.
|
||||
|
||||
<img src="http://i.imgur.com/6ZGQF4J.png" />
|
||||
<img src="http://i.imgur.com/Y5tzPGM.png" />
|
||||
### Create Cores
|
||||
|
||||
After you place an egg writer node, and rightclick it, you have to place an empty egg to the slot labeled `Egg`, a coal to the slot labeled `Fuel`, and a dye to the slot labeled `Dye`.
|
||||
The kind of the dye placed decides a egg produced.
|
||||
The correspondences are as follows.
|
||||
1. Create an empty core and Core Writer by following the recipe below.
|
||||
2. Place Core Writer and open formspec by right-clicking it.
|
||||
3. Put an empty core into the slot labeled `Core`, a coal into `Fuel`, and a dye into `Dye`.
|
||||
4. Then, Core Writer activates.
|
||||
5. A short time later, a new core will be created.
|
||||
|
||||
|Dye|Egg|
|
||||
|:--|:--|
|
||||
|dye:white|maidroid:maidroid_mk1_egg|
|
||||
|dye:grey|maidroid:maidroid_mk2_egg|
|
||||
|dye:dark_grey|maidroid:maidroid_mk3_egg|
|
||||
|dye:black|maidroid:maidroid_mk4_egg|
|
||||
|dye:blue|maidroid:maidroid_mk5_egg|
|
||||
|dye:cyan|maidroid:maidroid_mk6_egg|
|
||||
|dye:green|maidroid:maidroid_mk7_egg|
|
||||
|dye:dark_green|maidroid:maidroid_mk8_egg|
|
||||
|dye:yellow|maidroid:maidroid_mk9_egg|
|
||||
|dye:orange|maidroid:maidroid_mk10_egg|
|
||||
|dye:brown|maidroid:maidroid_mk11_egg|
|
||||
|dye:red|maidroid:maidroid_mk12_egg|
|
||||
|dye:pink|maidroid:maidroid_mk13_egg|
|
||||
|dye:magenta|maidroid:maidroid_mk14_egg|
|
||||
|dye:violet|maidroid:maidroid_mk15_egg|
|
||||
### Activate Maidroid
|
||||
|
||||
After a while, the empty egg will be converted to an new egg.
|
||||
If you take and use it, a new maidroid will be born.
|
||||
1. Throw the egg created, then a new maidroid will be spawned.
|
||||
2. Open formspec by right-clicking the maidroid, and put the core created into `Core` slot.
|
||||
3. Then, the maidroid will be activated.
|
||||
|
||||
The maidroid, however, doesn't move now.
|
||||
In order to have them move, you have to put a Core that is their brain.
|
||||
You can create a core in a similar way to a maidroid egg.
|
||||
First, you have to create an empty core and a core writer.
|
||||
Those recipe is as follows.
|
||||
### Recipes / Dye and Egg / Dye and Core
|
||||
|
||||
<img src="http://i.imgur.com/Sxnr38Y.png">
|
||||
<img src="http://i.imgur.com/97VENIl.png">
|
||||
```
|
||||
b = dye:black c = default:cobble d = default:diamond
|
||||
f = farming:cotton o = default:obsidian p = default:paper
|
||||
s = default:steel_ingot w = bucket:bucket_water z = default:bronze_ingot
|
||||
|
||||
After you place a core writer node, rightclick it, and place a empty core to the slot labeled `Core`, a coal to the slot labeled `Fuel`, and a dye to the slot labeled `Dye`.
|
||||
The correspondences of dyes and cores are as follows.
|
||||
Core Writer Egg Writer Nametag Empty Core Empty Egg
|
||||
|
||||
|Dye|Core|Description|
|
||||
|:--|:--|:--|
|
||||
|`dye:red`|`maidroid_core:basic`|Following the player.|
|
||||
|`dye:yello`|`maidroid_core:farming`|Farming.|
|
||||
| s | d | s | | d | w | d | | | f | | | s | s | s | | z | z | z |
|
||||
| c | s | c | | c | s | c | | p | p | p | | s | o | s | | z | s | z |
|
||||
| c | c | c | | s | c | s | | s | b | s | | s | s | s | | z | z | z |
|
||||
```
|
||||
|
||||
When a new core is created, put it to the maidroid.
|
||||
Rightclick it, and put the core to the slot labeled `Core`.
|
||||
The maidroid will start.
|
||||
<table>
|
||||
<tr>
|
||||
<td>White</td><td><img src=http://i.imgur.com/lsdq79e.png> Mk1</td>
|
||||
<td></td>
|
||||
<td>Grey</td><td><img src=http://i.imgur.com/9ffUTjB.png> Mk2</td>
|
||||
<td></td>
|
||||
<td>Dark Grey</td><td><img src=http://i.imgur.com/HWtLvqb.png> Mk3</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Black</td><td><img src=http://i.imgur.com/GoHRTRC.png> Mk4</td>
|
||||
<td></td>
|
||||
<td>Blue</td><td><img src=http://i.imgur.com/JTZTCS9.png> Mk5</td>
|
||||
<td></td>
|
||||
<td>Cyan</td><td><img src=http://i.imgur.com/hHw6mbD.png> Mk6</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Green</td><td><img src=http://i.imgur.com/YdzOgvM.png> Mk7</td>
|
||||
<td></td>
|
||||
<td>Dark Green</td><td><img src=http://i.imgur.com/UXB52Ce.png> Mk8</td>
|
||||
<td></td>
|
||||
<td>Yellow</td><td><img src=http://i.imgur.com/hcd9vk4.png> Mk9</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Orange</td><td><img src=http://i.imgur.com/6UjS63j.png> Mk10</td>
|
||||
<td></td>
|
||||
<td>Brown</td><td><img src=http://i.imgur.com/ayz4uP3.png> Mk11</td>
|
||||
<td></td>
|
||||
<td>Red</td><td><img src=http://i.imgur.com/rqknHh7.png> Mk12</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>Pink</td><td><img src=http://i.imgur.com/UNALjMo.png> MK13</td>
|
||||
<td></td>
|
||||
<td>Magenta</td><td><img src=http://i.imgur.com/iorRtmf.png> Mk14</td>
|
||||
<td></td>
|
||||
<td>Violet</td><td><img src=http://i.imgur.com/UX3w1Cx.png> Mk15</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>Red</td><td>Basic Core</td><td>Maidroids embeded this core will follow a player.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Yellow</td><td>Farming Core</td><td>Maidroids embeded this core will do farming. Embed this core and put seed into them, then they will plant the seeds. And the plant will be grown, they mow it. The farmlang should be surrounded by fences, because maidroids embeded this core cannot jump over fences.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>White</td><td>OCR Core</td><td>Maidroids embeded this core will read a book written a program in their inventory, and execute the program. Program example:
|
||||
<pre><code>start: sleep 1
|
||||
beep
|
||||
jump 0.9
|
||||
jmp start
|
||||
</code></pre>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Orange</td><td>Torcher Core</td><td>Maidroids embeded this core will follow a player, and put torch if it is dark.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## Dependencies
|
||||
|
||||
- bucket
|
||||
- default
|
||||
- dye
|
||||
- [pdisc](https://github.com/HybridDog/pdisc)?
|
||||
|
||||
## Requirements
|
||||
|
||||
- Minetest v0.4.14 or later
|
||||
|
||||
## Forum Topic
|
||||
|
||||
The forum topic for this mod on the Minetest Forums is located at:
|
||||
|
||||
* https://forum.minetest.net/viewtopic.php?f=9&t=14808
|
||||
- https://forum.minetest.net/viewtopic.php?f=9&t=14808
|
||||
|
||||
## License
|
||||
|
||||
- The source code of Maidroid is available under the [LGPLv2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt) or later license.
|
||||
- The resouces included in Maidroid are available under the [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) or later license.
|
||||
|
||||
## Contributers
|
||||
|
|
225
maidroid/api.lua
|
@ -61,12 +61,13 @@ end
|
|||
|
||||
-- maidroid.maidroid.get_core_name returns a name of a maidroid's current core.
|
||||
function maidroid.maidroid.get_core_name(self)
|
||||
return self.core_name
|
||||
local inv = self:get_inventory()
|
||||
return inv:get_stack("core", 1):get_name()
|
||||
end
|
||||
|
||||
-- maidroid.maidroid.get_core returns a maidroid's current core definition.
|
||||
function maidroid.maidroid.get_core(self)
|
||||
local name = self:get_core_name(self)
|
||||
local name = self:get_core_name()
|
||||
if name ~= "" then
|
||||
return maidroid.registered_cores[name]
|
||||
end
|
||||
|
@ -94,8 +95,8 @@ function maidroid.maidroid.get_nearest_player(self, range_distance)
|
|||
return player
|
||||
end
|
||||
|
||||
-- maidroid.maidroid.get_front_node returns a node that exists in front of the maidroid.
|
||||
function maidroid.maidroid.get_front_node(self)
|
||||
-- maidroid.maidroid.get_front returns a position in front of the maidroid.
|
||||
function maidroid.maidroid.get_front(self)
|
||||
local direction = self:get_look_direction()
|
||||
if math.abs(direction.x) >= 0.5 then
|
||||
if direction.x > 0 then direction.x = 1 else direction.x = -1 end
|
||||
|
@ -109,7 +110,12 @@ function maidroid.maidroid.get_front_node(self)
|
|||
direction.z = 0
|
||||
end
|
||||
|
||||
local front = vector.add(vector.round(self.object:getpos()), direction)
|
||||
return vector.add(vector.round(self.object:getpos()), direction)
|
||||
end
|
||||
|
||||
-- maidroid.maidroid.get_front_node returns a node that exists in front of the maidroid.
|
||||
function maidroid.maidroid.get_front_node(self)
|
||||
local front = self:get_front()
|
||||
return minetest.get_node(front)
|
||||
end
|
||||
|
||||
|
@ -210,6 +216,25 @@ function maidroid.maidroid.change_direction_randomly(self)
|
|||
self:set_yaw_by_direction(direction)
|
||||
end
|
||||
|
||||
-- maidroid.maidroid.update_infotext updates the infotext of the maidroid.
|
||||
function maidroid.maidroid.update_infotext(self)
|
||||
local infotext = ""
|
||||
local core_name = self:get_core_name()
|
||||
|
||||
if core_name ~= "" then
|
||||
if self.pause then
|
||||
infotext = infotext .. "this maidroid is paused\n"
|
||||
else
|
||||
infotext = infotext .. "this maidroid is active\n"
|
||||
end
|
||||
infotext = infotext .. "[Core] : " .. core_name .. "\n"
|
||||
else
|
||||
infotext = infotext .. "this maidroid is inactive\n[Core] : None\n"
|
||||
end
|
||||
infotext = infotext .. "[Owner] : " .. self.owner_name
|
||||
self.object:set_properties{infotext = infotext}
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
|
||||
-- maidroid.manufacturing_data represents a table that contains manufacturing data.
|
||||
|
@ -243,25 +268,13 @@ do
|
|||
})
|
||||
|
||||
local function on_activate(self, staticdata)
|
||||
-- attach to the nearest maidroid.
|
||||
local all_objects = minetest.get_objects_inside_radius(self.object:getpos(), 0.1)
|
||||
for _, obj in ipairs(all_objects) do
|
||||
local luaentity = obj:get_luaentity()
|
||||
|
||||
if maidroid.is_maidroid(luaentity.name) then
|
||||
self.object:set_attach(obj, "Arm_R", {x = 0.075, y = 0.60, z = -0.20}, {x = 0, y = 90, z = 0})
|
||||
self.object:set_properties{textures={"maidroid:dummy_empty_craftitem"}}
|
||||
return
|
||||
end
|
||||
end
|
||||
self.object:set_properties{textures={"maidroid:dummy_empty_craftitem"}}
|
||||
end
|
||||
|
||||
local function on_step(self, dtime)
|
||||
local all_objects = minetest.get_objects_inside_radius(self.object:getpos(), 0.1)
|
||||
for _, obj in ipairs(all_objects) do
|
||||
local luaentity = obj:get_luaentity()
|
||||
|
||||
if maidroid.is_maidroid(luaentity.name) then
|
||||
if self.maidroid_object then
|
||||
local luaentity = self.maidroid_object:get_luaentity()
|
||||
if luaentity then
|
||||
local stack = luaentity:get_wield_item_stack()
|
||||
|
||||
if stack:get_name() ~= self.itemname then
|
||||
|
@ -276,21 +289,23 @@ do
|
|||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- if cannot find maidroid, delete empty item.
|
||||
self.object:remove()
|
||||
return
|
||||
end
|
||||
|
||||
minetest.register_entity("maidroid:dummy_item", {
|
||||
hp_max = 1,
|
||||
visual = "wielditem",
|
||||
visual_size = {x = 0.025, y = 0.025},
|
||||
collisionbox = {0, 0, 0, 0, 0, 0},
|
||||
physical = false,
|
||||
textures = {"air"},
|
||||
on_activate = on_activate,
|
||||
on_step = on_step,
|
||||
itemname = "",
|
||||
hp_max = 1,
|
||||
visual = "wielditem",
|
||||
visual_size = {x = 0.025, y = 0.025},
|
||||
collisionbox = {0, 0, 0, 0, 0, 0},
|
||||
physical = false,
|
||||
textures = {"air"},
|
||||
on_activate = on_activate,
|
||||
on_step = on_step,
|
||||
itemname = "",
|
||||
maidroid_object = nil
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -300,7 +315,7 @@ end
|
|||
function maidroid.register_core(core_name, def)
|
||||
maidroid.registered_cores[core_name] = def
|
||||
|
||||
minetest.register_craftitem(core_name, {
|
||||
minetest.register_tool(core_name, {
|
||||
stack_max = 1,
|
||||
description = def.description,
|
||||
inventory_image = def.inventory_image,
|
||||
|
@ -311,7 +326,7 @@ end
|
|||
function maidroid.register_egg(egg_name, def)
|
||||
maidroid.registered_eggs[egg_name] = def
|
||||
|
||||
minetest.register_craftitem(egg_name, {
|
||||
minetest.register_tool(egg_name, {
|
||||
description = def.description,
|
||||
inventory_image = def.inventory_image,
|
||||
stack_max = 1,
|
||||
|
@ -323,6 +338,8 @@ function maidroid.register_egg(egg_name, def)
|
|||
new_maidroid:get_luaentity():set_yaw_by_direction(
|
||||
vector.subtract(user:getpos(), new_maidroid:getpos())
|
||||
)
|
||||
new_maidroid:get_luaentity().owner_name = user:get_player_name()
|
||||
new_maidroid:get_luaentity():update_infotext()
|
||||
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
|
@ -341,34 +358,17 @@ function maidroid.register_maidroid(product_name, def)
|
|||
maidroid.manufacturing_data[product_name] = 0
|
||||
end
|
||||
|
||||
local function update_infotext(self)
|
||||
if self.core_name ~= "" then
|
||||
local infotext = ""
|
||||
if self.pause then
|
||||
infotext = infotext .. "this maidroid is paused\n"
|
||||
else
|
||||
infotext = infotext .. "this maidroid is active\n"
|
||||
end
|
||||
infotext = infotext .. "[Core] : " .. self.core_name
|
||||
|
||||
self.object:set_properties{infotext = infotext}
|
||||
return
|
||||
end
|
||||
self.object:set_properties{infotext = "this maidroid is inactive"}
|
||||
end
|
||||
|
||||
-- create_inventory creates a new inventory, and returns it.
|
||||
local function create_inventory(self)
|
||||
self.inventory_name = self.product_name .. "_" .. tostring(self.manufacturing_number)
|
||||
self.inventory_name = product_name .. "_" .. tostring(self.manufacturing_number)
|
||||
local inventory = minetest.create_detached_inventory(self.inventory_name, {
|
||||
on_put = function(inv, listname, index, stack, player)
|
||||
if listname == "core" then
|
||||
local core_name = stack:get_name()
|
||||
local core = maidroid.registered_cores[core_name]
|
||||
core.on_start(self)
|
||||
self.core_name = core_name
|
||||
|
||||
update_infotext(self)
|
||||
self:update_infotext()
|
||||
end
|
||||
end,
|
||||
|
||||
|
@ -386,11 +386,11 @@ function maidroid.register_maidroid(product_name, def)
|
|||
|
||||
on_take = function(inv, listname, index, stack, player)
|
||||
if listname == "core" then
|
||||
local core = maidroid.registered_cores[self.core_name]
|
||||
self.core_name = ""
|
||||
local core_name = stack:get_name()
|
||||
local core = maidroid.registered_cores[core_name]
|
||||
core.on_stop(self)
|
||||
|
||||
update_infotext(self)
|
||||
self:update_infotext()
|
||||
end
|
||||
end,
|
||||
|
||||
|
@ -400,7 +400,37 @@ function maidroid.register_maidroid(product_name, def)
|
|||
end
|
||||
return stack:get_count()
|
||||
end,
|
||||
|
||||
on_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||
if to_list == "core" or from_list == "core" then
|
||||
local core_name = inv:get_stack(to_list, to_index):get_name()
|
||||
local core = maidroid.registered_cores[core_name]
|
||||
|
||||
if to_list == "core" then
|
||||
core.on_start(self)
|
||||
elseif from_list == "core" then
|
||||
core.on_stop(self)
|
||||
end
|
||||
|
||||
self:update_infotext()
|
||||
end
|
||||
end,
|
||||
|
||||
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player)
|
||||
if to_list == "wield_item" then
|
||||
return 0
|
||||
end
|
||||
|
||||
if to_list == "main" then
|
||||
return count
|
||||
elseif to_list == "core" and maidroid.is_core(inv:get_stack(from_list, from_index):get_name()) then
|
||||
return count
|
||||
end
|
||||
|
||||
return 0
|
||||
end,
|
||||
})
|
||||
|
||||
inventory:set_size("main", 16)
|
||||
inventory:set_size("core", 1)
|
||||
inventory:set_size("wield_item", 1)
|
||||
|
@ -427,53 +457,35 @@ function maidroid.register_maidroid(product_name, def)
|
|||
local function on_activate(self, staticdata)
|
||||
-- parse the staticdata, and compose a inventory.
|
||||
if staticdata == "" then
|
||||
self.product_name = product_name
|
||||
self.manufacturing_number = maidroid.manufacturing_data[product_name]
|
||||
maidroid.manufacturing_data[product_name] = maidroid.manufacturing_data[product_name] + 1
|
||||
create_inventory(self)
|
||||
|
||||
-- attach dummy item to new maidroid.
|
||||
minetest.add_entity(self.object:getpos(), "maidroid:dummy_item")
|
||||
else
|
||||
-- if static data is not empty string, this object has beed already created.
|
||||
local data = minetest.deserialize(staticdata)
|
||||
|
||||
self.product_name = data["product_name"]
|
||||
self.manufacturing_number = data["manufacturing_number"]
|
||||
self.nametag = data["nametag"]
|
||||
self.owner_name = data["owner_name"]
|
||||
|
||||
local inventory = create_inventory(self)
|
||||
local core_name = data["inventory"]["core"]
|
||||
local items = data["inventory"]["main"]
|
||||
local wield_item = data["inventory"]["wield_item"]
|
||||
|
||||
if core_name ~= "" then -- set a core
|
||||
local core_stack = ItemStack(core_name)
|
||||
core_stack:set_count(1)
|
||||
inventory:add_item("core", core_stack)
|
||||
self.core_name = core_name
|
||||
for list_name, list in pairs(data["inventory"]) do
|
||||
inventory:set_list(list_name, list)
|
||||
end
|
||||
|
||||
for _, item in ipairs(items) do -- set items
|
||||
local item_stack = ItemStack(item["name"])
|
||||
item_stack:set_count(item["count"])
|
||||
inventory:add_item("main", item_stack)
|
||||
end
|
||||
|
||||
if wield_item["name"] ~= "" then
|
||||
local item_stack = ItemStack(wield_item["name"])
|
||||
item_stack:set_count(wield_item["count"])
|
||||
inventory:add_item("wield_item", item_stack)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
update_infotext(self)
|
||||
self:update_infotext()
|
||||
|
||||
self.object:set_nametag_attributes{
|
||||
text = self.nametag
|
||||
}
|
||||
|
||||
-- attach dummy item to new maidroid.
|
||||
local dummy_item = minetest.add_entity(self.object:getpos(), "maidroid:dummy_item")
|
||||
dummy_item:set_attach(self.object, "Arm_R", {x = 0.065, y = 0.50, z = -0.15}, {x = -45, y = 0, z = 0})
|
||||
dummy_item:get_luaentity().maidroid_object = self.object
|
||||
|
||||
local core = self:get_core()
|
||||
if core ~= nil then
|
||||
core.on_start(self)
|
||||
|
@ -487,33 +499,21 @@ function maidroid.register_maidroid(product_name, def)
|
|||
local function get_staticdata(self)
|
||||
local inventory = self:get_inventory()
|
||||
local data = {
|
||||
["product_name"] = self.product_name,
|
||||
["manufacturing_number"] = self.manufacturing_number,
|
||||
["nametag"] = self.nametag,
|
||||
["inventory"] = {
|
||||
["main"] = {},
|
||||
["core"] = self.core_name,
|
||||
["wield_item"] = nil,
|
||||
},
|
||||
["owner_name"] = self.owner_name,
|
||||
["inventory"] = {},
|
||||
}
|
||||
|
||||
-- set main list.
|
||||
for _, item in ipairs(inventory:get_list("main")) do
|
||||
local count = item:get_count()
|
||||
local itemname = item:get_name()
|
||||
if count ~= 0 then
|
||||
local itemdata = {count = count, name = itemname}
|
||||
table.insert(data["inventory"]["main"], itemdata)
|
||||
-- set lists.
|
||||
for list_name, list in pairs(inventory:get_lists()) do
|
||||
data["inventory"][list_name] = {}
|
||||
|
||||
for i, item in ipairs(list) do
|
||||
data["inventory"][list_name][i] = item:to_string()
|
||||
end
|
||||
end
|
||||
|
||||
do -- set wield_item list.
|
||||
local item = self:get_wield_item_stack()
|
||||
local count = item:get_count()
|
||||
local itemname = item:get_name()
|
||||
local itemdata = {count = count, name = itemname}
|
||||
data["inventory"]["wield_item"] = itemdata
|
||||
end
|
||||
return minetest.serialize(data)
|
||||
end
|
||||
|
||||
|
@ -542,12 +542,17 @@ function maidroid.register_maidroid(product_name, def)
|
|||
|
||||
-- on_step is a callback function that is called every delta times.
|
||||
local function on_step(self, dtime)
|
||||
-- if owner didn't login, the maidroid does nothing.
|
||||
if not minetest.get_player_by_name(self.owner_name) then
|
||||
return
|
||||
end
|
||||
|
||||
-- pickup surrounding item.
|
||||
pickup_item(self)
|
||||
|
||||
-- do core method.
|
||||
if (not self.pause) and self.core_name ~= "" then
|
||||
local core = maidroid.registered_cores[self.core_name]
|
||||
local core = self:get_core()
|
||||
if (not self.pause) and core then
|
||||
core.on_step(self, dtime)
|
||||
end
|
||||
end
|
||||
|
@ -563,21 +568,20 @@ function maidroid.register_maidroid(product_name, def)
|
|||
|
||||
-- on_punch is a callback function that is called when a player punch then.
|
||||
local function on_punch(self, puncher, time_from_last_punch, tool_capabilities, dir)
|
||||
local core = self:get_core()
|
||||
if self.pause == true then
|
||||
self.pause = false
|
||||
if self.core_name ~= "" then
|
||||
local core = maidroid.registered_cores[self.core_name]
|
||||
if core then
|
||||
core.on_resume(self)
|
||||
end
|
||||
else
|
||||
self.pause = true
|
||||
if self.core_name ~= "" then
|
||||
local core = maidroid.registered_cores[self.core_name]
|
||||
if core then
|
||||
core.on_pause(self)
|
||||
end
|
||||
end
|
||||
|
||||
update_infotext(self)
|
||||
self:update_infotext()
|
||||
end
|
||||
|
||||
-- register a definition of a new maidroid.
|
||||
|
@ -599,9 +603,8 @@ function maidroid.register_maidroid(product_name, def)
|
|||
|
||||
-- extra initial properties
|
||||
pause = false,
|
||||
product_name = "",
|
||||
manufacturing_number = -1,
|
||||
core_name = "",
|
||||
owner_name = "",
|
||||
|
||||
-- callback methods.
|
||||
on_activate = on_activate,
|
||||
|
@ -615,6 +618,7 @@ function maidroid.register_maidroid(product_name, def)
|
|||
get_core = maidroid.maidroid.get_core,
|
||||
get_core_name = maidroid.maidroid.get_core_name,
|
||||
get_nearest_player = maidroid.maidroid.get_nearest_player,
|
||||
get_front = maidroid.maidroid.get_front,
|
||||
get_front_node = maidroid.maidroid.get_front_node,
|
||||
get_look_direction = maidroid.maidroid.get_look_direction,
|
||||
set_animation = maidroid.maidroid.set_animation,
|
||||
|
@ -627,6 +631,7 @@ function maidroid.register_maidroid(product_name, def)
|
|||
has_item_in_main = maidroid.maidroid.has_item_in_main,
|
||||
change_direction = maidroid.maidroid.change_direction,
|
||||
change_direction_randomly = maidroid.maidroid.change_direction_randomly,
|
||||
update_infotext = maidroid.maidroid.update_infotext,
|
||||
})
|
||||
|
||||
-- register maidroid egg.
|
||||
|
|
Before Width: | Height: | Size: 667 B |
Before Width: | Height: | Size: 667 B |
Before Width: | Height: | Size: 651 B |
Before Width: | Height: | Size: 670 B |
Before Width: | Height: | Size: 667 B |
Before Width: | Height: | Size: 651 B |
Before Width: | Height: | Size: 670 B |
Before Width: | Height: | Size: 651 B |
Before Width: | Height: | Size: 670 B |
Before Width: | Height: | Size: 667 B |
Before Width: | Height: | Size: 651 B |
Before Width: | Height: | Size: 670 B |
Before Width: | Height: | Size: 667 B |
Before Width: | Height: | Size: 651 B |
Before Width: | Height: | Size: 670 B |
|
@ -1,30 +0,0 @@
|
|||
#/bin/bash
|
||||
|
||||
declare -a arr=()
|
||||
arr[1]='gray92'
|
||||
arr[2]='gray68'
|
||||
arr[3]='gray36'
|
||||
arr[4]='gray17'
|
||||
arr[5]='blue'
|
||||
arr[6]='cyan'
|
||||
arr[7]='green'
|
||||
arr[8]='DarkGreen'
|
||||
arr[9]='yellow'
|
||||
arr[10]='orange'
|
||||
arr[11]='brown'
|
||||
arr[12]='red'
|
||||
arr[13]='pink'
|
||||
arr[14]='magenta'
|
||||
arr[15]='violet'
|
||||
|
||||
for ((i=1; i<16; i++)); do
|
||||
type=$(($i % 3 + 1))
|
||||
maidroid_type="maidroid_type${type}.png"
|
||||
|
||||
output="../maidroid_maidroid_mk${i}.png"
|
||||
color=${arr[i]}
|
||||
convert +level-colors $color,White maidroid_hair.png maidroid_hair_tmp.png
|
||||
composite maidroid_hair_tmp.png $maidroid_type $output
|
||||
|
||||
rm maidroid_hair_tmp.png
|
||||
done
|
Before Width: | Height: | Size: 1008 B |
|
@ -1,5 +1,3 @@
|
|||
#/bin/bash
|
||||
|
||||
declare -a arr=()
|
||||
arr[1]='gray92'
|
||||
arr[2]='gray68'
|
||||
|
@ -16,12 +14,3 @@ arr[12]='red'
|
|||
arr[13]='pink'
|
||||
arr[14]='magenta'
|
||||
arr[15]='violet'
|
||||
|
||||
for ((i=1; i<16; i++)); do
|
||||
output="../maidroid_maidroid_mk${i}_egg.png"
|
||||
color=${arr[i]}
|
||||
convert +level-colors $color,White egg_pattern.png egg_pattern_tmp.png
|
||||
composite egg_pattern_tmp.png egg.png $output
|
||||
|
||||
rm egg_pattern_tmp.png
|
||||
done
|
12
maidroid/script/genEggTextures.sh
Normal file
|
@ -0,0 +1,12 @@
|
|||
#/bin/bash
|
||||
|
||||
. ./colors.sh
|
||||
|
||||
for ((i=1; i<16; i++)); do
|
||||
output="../textures/maidroid_maidroid_mk${i}_egg.png"
|
||||
color=${arr[i]}
|
||||
convert +level-colors $color,White img/maidroid_egg_pattern.png img/maidroid_egg_pattern_tmp.png
|
||||
composite img/maidroid_egg_pattern_tmp.png img/maidroid_empty_egg.png $output
|
||||
|
||||
rm img/maidroid_egg_pattern_tmp.png
|
||||
done
|
15
maidroid/script/genMaidroidTextures.sh
Normal file
|
@ -0,0 +1,15 @@
|
|||
#/bin/bash
|
||||
|
||||
. ./colors.sh
|
||||
|
||||
for ((i=1; i<16; i++)); do
|
||||
type=$(($i % 3 + 1))
|
||||
maidroid_type="img/maidroid_type${type}.png"
|
||||
|
||||
output="../models/maidroid_maidroid_mk${i}.png"
|
||||
color=${arr[i]}
|
||||
convert +level-colors $color,White img/maidroid_hair.png img/maidroid_hair_tmp.png
|
||||
composite img/maidroid_hair_tmp.png $maidroid_type $output
|
||||
|
||||
rm img/maidroid_hair_tmp.png
|
||||
done
|
Before Width: | Height: | Size: 334 B After Width: | Height: | Size: 334 B |
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
Before Width: | Height: | Size: 668 B After Width: | Height: | Size: 668 B |
Before Width: | Height: | Size: 1015 B After Width: | Height: | Size: 1015 B |
Before Width: | Height: | Size: 1008 B After Width: | Height: | Size: 1008 B |
Before Width: | Height: | Size: 963 B After Width: | Height: | Size: 963 B |
23
maidroid/script/instruction_set_doc.lua
Normal file
|
@ -0,0 +1,23 @@
|
|||
-- See also the pdisc mod's instruction list.
|
||||
|
||||
local instr = {
|
||||
{"getpos", "<v x>, <v y>, <v z>", "Gets the maidroid's position."},
|
||||
{"getvelocity", "<v x>, <v y>, <v z>", "Gets the maidroid's velocity."},
|
||||
{"getacceleration", "<v x>, <v y>, <v z>", "Gets the maidroid's acceleration."},
|
||||
{"getyaw", "<v yaw>", "Gets the maidroid's yaw."},
|
||||
|
||||
|
||||
{"setyaw", "<n yaw>", "Sets the maidroid's yaw in radians."},
|
||||
|
||||
{"jump", "[<n heigth>]", "Makes the droid jump, if height is invalid (height ∈ ]0,2]), it's set to 1, if it's a variable, it's set to a bool indicating whether the jump succeeded."},
|
||||
{"beep", "", "Execute this every second while the droid walks backwards, pls."},
|
||||
}
|
||||
|
||||
o = "Instructions:\n\n"
|
||||
for i = 1,#instr do
|
||||
i = instr[i]
|
||||
o = o .. i[1] .. " " .. i[2] .. "\n"
|
||||
.. " " .. i[3] .. "\n\n" -- TODO: max 80 letters each line
|
||||
end
|
||||
|
||||
print(o)
|
BIN
maidroid/xcf/maidroid_logo.xcf
Normal file
|
@ -14,6 +14,7 @@ end
|
|||
local function on_stop(self)
|
||||
self.state = nil
|
||||
self.object:setvelocity{x = 0, y = 0, z = 0}
|
||||
self:set_animation(maidroid.animation_frames.STAND)
|
||||
end
|
||||
|
||||
local function on_step(self, dtime)
|
||||
|
|
|
@ -28,7 +28,7 @@ local function is_plantable_place(pos)
|
|||
local lpos = vector.add(pos, {x = 0, y = -1, z = 0})
|
||||
local lnode = minetest.get_node(lpos)
|
||||
return node.name == "air"
|
||||
and minetest.get_item_group(lnode.name, "wet") > 0
|
||||
and minetest.get_item_group(lnode.name, "soil") > 1
|
||||
end
|
||||
|
||||
-- is_mowable_place reports whether maidroid can mow.
|
||||
|
@ -241,7 +241,14 @@ plant = function(self, dtime)
|
|||
if is_plantable_place(self.destination) then
|
||||
local stack = self:get_wield_item_stack()
|
||||
local itemname = stack:get_name()
|
||||
minetest.add_node(self.destination, {name = itemname, param2 = 1})
|
||||
|
||||
local pointed_thing = {
|
||||
type = "node",
|
||||
under = vector.add(self.destination, {x = 0, y = -1, z = 0}),
|
||||
above = self.destination,
|
||||
}
|
||||
farming.place_seed(stack, minetest.get_player_by_name(self.owner_name), pointed_thing, stack:get_name())
|
||||
|
||||
stack:take_item(1)
|
||||
self:set_wield_item_stack(stack)
|
||||
end
|
||||
|
|
166
maidroid_core/cores/ocr.lua
Normal file
|
@ -0,0 +1,166 @@
|
|||
------------------------------------------------------------
|
||||
-- Copyright (c) 2016 tacigar. All rights reserved.
|
||||
-- https://github.com/tacigar/maidroid
|
||||
------------------------------------------------------------
|
||||
|
||||
local maidroid_instruction_set = {
|
||||
-- popular (similars in lua_api) information gathering functions
|
||||
getpos = function(_, thread)
|
||||
local pos = thread.droid.object:getpos()
|
||||
return true, {pos.x, pos.y, pos.z}
|
||||
end,
|
||||
|
||||
getvelocity = function()
|
||||
local vel = self.vel
|
||||
return true, {vel.x, vel.y, vel.z}
|
||||
end,
|
||||
|
||||
getacceleration = function(_, thread)
|
||||
local acc = thread.droid.object:getacceleration()
|
||||
return true, {acc.x, acc.y, acc.z}
|
||||
end,
|
||||
|
||||
getyaw = function(_, thread)
|
||||
return true, thread.droid.object:getyaw()
|
||||
end,
|
||||
|
||||
-- other info functions
|
||||
|
||||
-- popular actions for changing sth
|
||||
setyaw = function(params, thread)
|
||||
if #params ~= 1 then
|
||||
return false, "wrong number of arguments"
|
||||
end
|
||||
local p = params[1]
|
||||
if type(p) ~= "number" then
|
||||
return false, "unsupported argument"
|
||||
end
|
||||
thread.droid.object:setyaw(p)
|
||||
return true
|
||||
end,
|
||||
|
||||
-- other actions
|
||||
jump = function(params, thread)
|
||||
-- test if it can jump
|
||||
local droid = thread.droid
|
||||
if droid.vel.y ~= 0
|
||||
or droid.vel_prev.y ~= 0 then
|
||||
return true, false
|
||||
end
|
||||
|
||||
-- get the strength of the jump
|
||||
local h = tonumber(params[1])
|
||||
if not h
|
||||
or h <= 0
|
||||
or h > 2 then
|
||||
h = 1
|
||||
end
|
||||
|
||||
-- play sound
|
||||
local p = droid.object:getpos()
|
||||
p.y = p.y - 1
|
||||
local node_under = minetest.get_node(p).name
|
||||
local def = minetest.registered_nodes[node_under]
|
||||
if def
|
||||
and def.sounds then
|
||||
local snd = def.sounds.footstep or def.sounds.dig
|
||||
if snd then
|
||||
p.y = p.y + .5
|
||||
minetest.sound_play(snd.name, {pos = p, gain = snd.gain})
|
||||
end
|
||||
end
|
||||
|
||||
-- perform jump
|
||||
droid.vel.y = math.sqrt(-2 * h * droid.object:getacceleration().y)
|
||||
droid.object:setvelocity(droid.vel)
|
||||
return true, true
|
||||
end,
|
||||
|
||||
beep = function(_, thread)
|
||||
minetest.sound_play("maidroid_beep", {pos = thread.droid.object:getpos()})
|
||||
return true
|
||||
end,
|
||||
}
|
||||
|
||||
|
||||
local function mylog(log)
|
||||
-- This happens to the maidroids messages
|
||||
minetest.chat_send_all("maidroid says " .. log)
|
||||
end
|
||||
|
||||
-- the program is loaded from a "default:book_written" with title "main"
|
||||
-- if it's not present, following program is used in lieu:
|
||||
local dummycode = [[
|
||||
beep
|
||||
print $No book with title "main" found.
|
||||
]]
|
||||
|
||||
local function get_code(self)
|
||||
local list = self:get_inventory():get_list"main"
|
||||
for i = 1,#list do
|
||||
local stack = list[i]
|
||||
if stack:get_name() == "default:book_written" then
|
||||
local data = minetest.deserialize(stack:get_metadata())
|
||||
if data
|
||||
and data.title == "main" then
|
||||
return data.text
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function on_start(self)
|
||||
self.object:setacceleration{x = 0, y = -10, z = 0}
|
||||
self.object:setvelocity{x = 0, y = 0, z = 0}
|
||||
self.vel = {x = 0, y = 0, z = 0}
|
||||
self.vel_prev = self.vel
|
||||
|
||||
local parsed_code = pdisc.parse(get_code(self) or dummycode)
|
||||
self.thread = pdisc.create_thread(function(thread)
|
||||
thread.flush = function(self)
|
||||
mylog(self.log)
|
||||
self.log = ""
|
||||
return true
|
||||
end
|
||||
table.insert(thread.is, 1, maidroid_instruction_set)
|
||||
thread.droid = self
|
||||
end, parsed_code)
|
||||
self.thread:suscitate()
|
||||
end
|
||||
|
||||
local function on_step(self)
|
||||
local thread = self.thread
|
||||
if not thread.stopped then
|
||||
return
|
||||
end
|
||||
self.vel_prev = self.vel
|
||||
self.vel = self.object:getvelocity()
|
||||
|
||||
thread:try_rebirth()
|
||||
end
|
||||
|
||||
local function on_resume(self)
|
||||
self.thread:continue()
|
||||
end
|
||||
|
||||
local function on_pause(self)
|
||||
self.thread:flush()
|
||||
end
|
||||
|
||||
local function on_stop(self)
|
||||
self.thread:exit()
|
||||
self.thread = nil
|
||||
|
||||
self.object:setvelocity{x = 0, y = 0, z = 0}
|
||||
end
|
||||
|
||||
-- register a definition of a new core.
|
||||
maidroid.register_core("maidroid_core:ocr", {
|
||||
description = "OCR programmable maidroid core",
|
||||
inventory_image = "maidroid_core_ocr.png",
|
||||
on_start = on_start,
|
||||
on_stop = on_stop,
|
||||
on_resume = on_resume,
|
||||
on_pause = on_pause,
|
||||
on_step = on_step,
|
||||
})
|
136
maidroid_core/cores/torcher.lua
Normal file
|
@ -0,0 +1,136 @@
|
|||
------------------------------------------------------------
|
||||
-- Copyright (c) 2016 tacigar. All rights reserved.
|
||||
-- https://github.com/tacigar/maidroid
|
||||
------------------------------------------------------------
|
||||
|
||||
local state = {IDLE = 0, ACCOMPANY = 1}
|
||||
|
||||
local PLACE_TIME = 4
|
||||
|
||||
local function on_start(self)
|
||||
self.state = state.IDLE
|
||||
self.object:setacceleration{x = 0, y = -10, z = 0}
|
||||
self.object:setvelocity{x = 0, y = 0, z = 0}
|
||||
self.time_counter = -1
|
||||
self.is_placing = false
|
||||
end
|
||||
|
||||
local function on_stop(self)
|
||||
self.state = nil
|
||||
self.object:setvelocity{x = 0, y = 0, z = 0}
|
||||
self:set_animation(maidroid.animation_frames.STAND)
|
||||
self.time_counter = nil
|
||||
self.is_placing = nil
|
||||
end
|
||||
|
||||
local function is_dark(pos)
|
||||
local light_level = minetest.get_node_light(pos)
|
||||
return light_level <= 5
|
||||
end
|
||||
|
||||
local function on_step(self, dtime)
|
||||
if self.is_placing then
|
||||
if self.time_counter >= PLACE_TIME then
|
||||
self.time_counter = -1
|
||||
if self.state == state.IDLE then
|
||||
self:set_animation(maidroid.animation_frames.STAND)
|
||||
elseif self.state == state.ACCOMPANY then
|
||||
self:set_animation(maidroid.animation_frames.WALK)
|
||||
end
|
||||
|
||||
local owner = minetest.get_player_by_name(self.owner_name)
|
||||
local wield_stack = self:get_wield_item_stack()
|
||||
local front = self:get_front()
|
||||
|
||||
local pointed_thing = {
|
||||
type = "node",
|
||||
under = vector.add(front, {x = 0, y = -1, z = 0}),
|
||||
above = front,
|
||||
}
|
||||
|
||||
if wield_stack:get_name() == "default:torch" then
|
||||
local res_stack, success = minetest.item_place_node(wield_stack, owner, pointed_thing)
|
||||
if success then
|
||||
res_stack:take_item(1)
|
||||
self:set_wield_item_stack(res_stack)
|
||||
end
|
||||
end
|
||||
self.is_placing = false
|
||||
else
|
||||
self.time_counter = self.time_counter + 1
|
||||
end
|
||||
end
|
||||
|
||||
local player = self:get_nearest_player(10)
|
||||
if player == nil then
|
||||
self:set_animation(maidroid.animation_frames.STAND)
|
||||
return
|
||||
end
|
||||
|
||||
local position = self.object:getpos()
|
||||
local player_position = player:getpos()
|
||||
local direction = vector.subtract(player_position, position)
|
||||
local velocity = self.object:getvelocity()
|
||||
|
||||
if vector.length(direction) < 3 then
|
||||
if self.state == state.ACCOMPANY then
|
||||
self:set_animation(maidroid.animation_frames.STAND)
|
||||
self.state = state.IDLE
|
||||
self.object:setvelocity{x = 0, y = velocity.y, z = 0}
|
||||
end
|
||||
|
||||
if not self.is_placing then
|
||||
local front = self:get_front() -- if it is dark, set touch.
|
||||
local wield_stack = self:get_wield_item_stack()
|
||||
|
||||
if is_dark(front)
|
||||
and (wield_stack:get_name() == "default:torch"
|
||||
or self:move_main_to_wield(function (itemname) return itemname == "default:torch" end)) then
|
||||
self.time_counter = 0
|
||||
self.is_placing = true
|
||||
self:set_animation(maidroid.animation_frames.MINE)
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
if self.state == state.IDLE then
|
||||
self:set_animation(maidroid.animation_frames.WALK)
|
||||
self.state = state.ACCOMPANY
|
||||
end
|
||||
self.object:setvelocity{x = direction.x, y = velocity.y, z = direction.z} -- TODO
|
||||
|
||||
if not self.is_placing then
|
||||
local front = self:get_front() -- if it is dark, set touch.
|
||||
local wield_stack = self:get_wield_item_stack()
|
||||
|
||||
if is_dark(front)
|
||||
and (wield_stack:get_name() == "default:torch"
|
||||
or self:move_main_to_wield(function (itemname) return itemname == "default:torch" end)) then
|
||||
self.time_counter = 0
|
||||
self.is_placing = true
|
||||
self:set_animation(maidroid.animation_frames.WALK_MINE)
|
||||
end
|
||||
end
|
||||
end
|
||||
self:set_yaw_by_direction(direction)
|
||||
|
||||
-- if maidroid is stoped by obstacle, the maidroid must jump.
|
||||
if velocity.y == 0 and self.state == state.ACCOMPANY then
|
||||
local front_node = self:get_front_node()
|
||||
if front_node.name ~= "air" and minetest.registered_nodes[front_node.name] ~= nil
|
||||
and minetest.registered_nodes[front_node.name].walkable then
|
||||
self.object:setvelocity{x = direction.x, y = 5, z = direction.z}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- register a definition of a new core.
|
||||
maidroid.register_core("maidroid_core:torcher", {
|
||||
description = "maidroid core : torcher",
|
||||
inventory_image = "maidroid_core_torcher.png",
|
||||
on_start = on_start,
|
||||
on_stop = on_stop,
|
||||
on_resume = on_start,
|
||||
on_pause = on_stop,
|
||||
on_step = on_step,
|
||||
})
|
|
@ -1 +1,2 @@
|
|||
maidroid
|
||||
pdisc?
|
||||
|
|
|
@ -12,3 +12,7 @@ dofile(maidroid_core.modpath .. "/cores/_aux.lua")
|
|||
dofile(maidroid_core.modpath .. "/cores/empty.lua")
|
||||
dofile(maidroid_core.modpath .. "/cores/basic.lua")
|
||||
dofile(maidroid_core.modpath .. "/cores/farming.lua")
|
||||
dofile(maidroid_core.modpath .. "/cores/torcher.lua")
|
||||
if minetest.global_exists("pdisc") then
|
||||
dofile(maidroid_core.modpath .. "/cores/ocr.lua")
|
||||
end
|
||||
|
|
BIN
maidroid_core/sounds/maidroid_beep.ogg
Normal file
BIN
maidroid_core/textures/maidroid_core_ocr.png
Normal file
After Width: | Height: | Size: 559 B |
BIN
maidroid_core/textures/maidroid_core_torcher.png
Normal file
After Width: | Height: | Size: 864 B |
BIN
maidroid_core/xcf/maidroid_core_ocr.xcf
Normal file
BIN
maidroid_core/xcf/maidroid_core_torcher.xcf
Normal file
|
@ -3,9 +3,11 @@
|
|||
-- https://github.com/tacigar/maidroid
|
||||
------------------------------------------------------------
|
||||
|
||||
maidroid_tool._aux = {}
|
||||
|
||||
-- maidroid_tool.shared.generate_writer is a shared
|
||||
-- function called for registering egg writer and core writer.
|
||||
function maidroid_tool.register_writer(nodename, options)
|
||||
function maidroid_tool._aux.register_writer(nodename, options)
|
||||
local description = options.description
|
||||
local formspec = options.formspec
|
||||
local tiles = options.tiles
|
||||
|
@ -16,12 +18,11 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
local on_deactivate = options.on_deactivate
|
||||
local empty_itemname = options.empty_itemname
|
||||
local dye_item_map = options.dye_item_map
|
||||
local is_mainitem = options.is_mainitem
|
||||
local on_metadata_inventory_put_to_main = options.on_metadata_inventory_put_to_main
|
||||
local on_metadata_inventory_take_from_main = options.on_metadata_inventory_take_from_main
|
||||
|
||||
-- can_dig is a common callback.
|
||||
local function can_dig(pos, player)
|
||||
local function can_dig(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inventory = meta:get_inventory()
|
||||
return (
|
||||
|
@ -52,7 +53,7 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
-- if time is positive, this node is active.
|
||||
if time >= 0 then
|
||||
if time <= duration then
|
||||
meta:set_float("time", time + 1)
|
||||
meta:set_float("time", time + elapsed)
|
||||
meta:set_string("formspec", formspec.active(time))
|
||||
else
|
||||
meta:set_float("time", -1)
|
||||
|
@ -94,9 +95,7 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
end
|
||||
|
||||
-- allow_metadata_inventory_put is a common callback.
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inventory = meta:get_inventory()
|
||||
local function allow_metadata_inventory_put(_, listname, _, stack)
|
||||
local itemname = stack:get_name()
|
||||
|
||||
if (listname == "fuel" and itemname == "default:coal_lump") then
|
||||
|
@ -110,7 +109,7 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
end
|
||||
|
||||
-- allow_metadata_inventory_move is a common callback for the node.
|
||||
local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local function allow_metadata_inventory_move(pos, from_list, from_index, _, to_index, _, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inventory = meta:get_inventory()
|
||||
local stack = inventory:get_stack(from_list, from_index)
|
||||
|
@ -130,11 +129,10 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
inventory:set_size("dye", 1)
|
||||
end
|
||||
|
||||
local function on_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
local function on_metadata_inventory_put(pos, listname)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(0.25)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
if listname == "main" then
|
||||
if on_metadata_inventory_put_to_main ~= nil then
|
||||
on_metadata_inventory_put_to_main(pos) -- call on_metadata_inventory_put_to_main callback.
|
||||
|
@ -142,15 +140,16 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
end
|
||||
end
|
||||
|
||||
local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local function on_metadata_inventory_move(pos, from_list, from_index, _, to_index, _, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inventory = meta:get_inventory()
|
||||
local stack = inventory:get_stack(from_list, from_index)
|
||||
|
||||
-- listname is not set here, is it? ~Hybrid Dog
|
||||
on_metadata_inventory_put(pos, listname, to_index, stack, player)
|
||||
end
|
||||
|
||||
local function on_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
local function on_metadata_inventory_take(pos, listname)
|
||||
if listname == "main" then
|
||||
if on_metadata_inventory_take_from_main ~= nil then
|
||||
on_metadata_inventory_take_from_main(pos) -- call on_metadata_inventory_take_from_main callback.
|
||||
|
@ -158,7 +157,7 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
end
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
local function allow_metadata_inventory_take(_, _, _, stack)
|
||||
return stack:get_count() -- maybe add more.
|
||||
end
|
||||
|
||||
|
@ -187,7 +186,7 @@ function maidroid_tool.register_writer(nodename, options)
|
|||
end -- end register inactive node.
|
||||
|
||||
do -- register a definition of an active node.
|
||||
local function allow_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
local function allow_metadata_inventory_take(_, listname, _, stack)
|
||||
if listname == "main" then
|
||||
return 0
|
||||
end
|
132
maidroid_tool/capture_rod.lua
Normal file
|
@ -0,0 +1,132 @@
|
|||
local rod_uses = 100
|
||||
|
||||
minetest.register_tool("maidroid_tool:capture_rod", {
|
||||
description = "maidroid tool : capture rod",
|
||||
inventory_image = "maidroid_tool_capture_rod.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if (pointed_thing.type ~= "object") then
|
||||
return
|
||||
end
|
||||
|
||||
local obj = pointed_thing.ref
|
||||
local luaentity = obj:get_luaentity()
|
||||
if not maidroid.is_maidroid(luaentity.name) then
|
||||
if luaentity.name == "__builtin:item" then
|
||||
luaentity:on_punch(user)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
local drop_pos = vector.add(obj:getpos(), {x = 0, y = 1, z = 0})
|
||||
local maidroid_name = string.split(luaentity.name, ":")[2]
|
||||
local stack = ItemStack("maidroid_tool:captured_" .. maidroid_name .. "_egg")
|
||||
stack:set_metadata(luaentity:get_staticdata())
|
||||
|
||||
obj:remove()
|
||||
minetest.add_item(drop_pos, stack)
|
||||
itemstack:add_wear(65535 / (rod_uses - 1))
|
||||
|
||||
minetest.sound_play("maidroid_tool_capture_rod_use", {pos = drop_pos})
|
||||
minetest.add_particlespawner({
|
||||
amount = 20,
|
||||
time = 0.2,
|
||||
minpos = drop_pos,
|
||||
maxpos = drop_pos,
|
||||
minvel = {x = -1.5, y = 2, z = -1.5},
|
||||
maxvel = {x = 1.5, y = 4, z = 1.5},
|
||||
minacc = {x = 0, y = -8, z = 0},
|
||||
maxacc = {x = 0, y = -4, z = 0},
|
||||
minexptime = 1,
|
||||
maxexptime = 1.5,
|
||||
minsize = 1,
|
||||
maxsize = 2.5,
|
||||
collisiondetection = true,
|
||||
vertical = false,
|
||||
texture = "maidroid_tool_capture_rod_star.png",
|
||||
player = user
|
||||
})
|
||||
|
||||
return itemstack
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
for name, _ in pairs(maidroid.registered_maidroids) do
|
||||
local maidroid_name = string.split(name, ":")[2]
|
||||
local egg_def = maidroid.registered_eggs[name .. "_egg"]
|
||||
local inv_img = "maidroid_tool_capture_rod_plate.png^" .. egg_def.inventory_image
|
||||
|
||||
minetest.register_tool("maidroid_tool:captured_" .. maidroid_name .. "_egg", {
|
||||
description = "maidroid tool : captured " .. egg_def.description,
|
||||
inventory_image = inv_img,
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type ~= "node" then
|
||||
if pointed_thing.type == "object" then
|
||||
local luaentity = pointed_thing.ref:get_luaentity()
|
||||
if luaentity.name == "__builtin:item" then
|
||||
luaentity:on_punch(user)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
local meta = itemstack:get_metadata()
|
||||
local obj = minetest.add_entity(pointed_thing.above, name)
|
||||
local luaentity = obj:get_luaentity()
|
||||
luaentity:set_yaw_by_direction(vector.subtract(user:getpos(), obj:getpos()))
|
||||
luaentity:on_activate(meta)
|
||||
|
||||
-- FIXME: this is workaround
|
||||
maidroid.manufacturing_data[name] = maidroid.manufacturing_data[name] - 1
|
||||
|
||||
local pos = vector.add(obj:getpos(), {x = 0, y = -0.2, z = 0})
|
||||
minetest.sound_play("maidroid_tool_capture_rod_open_egg", {pos = pos})
|
||||
minetest.add_particlespawner({
|
||||
amount = 30,
|
||||
time = 0.1,
|
||||
minpos = pos,
|
||||
maxpos = pos,
|
||||
minvel = {x = -2, y = 1.0, z = -2},
|
||||
maxvel = {x = 2, y = 2.5, z = 2},
|
||||
minacc = {x = 0, y = -5, z = 0},
|
||||
maxacc = {x = 0, y = -2, z = 0},
|
||||
minexptime = 0.5,
|
||||
maxexptime = 1,
|
||||
minsize = 0.5,
|
||||
maxsize = 2,
|
||||
collisiondetection = false,
|
||||
vertical = false,
|
||||
texture = "maidroid_tool_capture_rod_star.png^[colorize:#ff8000:127",
|
||||
player = user
|
||||
})
|
||||
|
||||
local rad = user:get_look_horizontal()
|
||||
minetest.add_particle({
|
||||
pos = pos,
|
||||
velocity = {x = math.cos(rad) * 2, y = 1.5, z = math.sin(rad) * 2},
|
||||
acceleration = {x = 0, y = -3, z = 0},
|
||||
expirationtime = 1.5,
|
||||
size = 6,
|
||||
collisiondetection = false,
|
||||
vertical = false,
|
||||
texture = "(" .. inv_img .. "^[resize:32x32)^[mask:maidroid_tool_capture_rod_mask_right.png",
|
||||
player = user
|
||||
})
|
||||
minetest.add_particle({
|
||||
pos = pos,
|
||||
velocity = {x = math.cos(rad) * -2, y = 1.5, z = math.sin(rad) * -2},
|
||||
acceleration = { x = 0, y = -3, z = 0},
|
||||
expirationtime = 1.5,
|
||||
size = 6,
|
||||
collisiondetection = false,
|
||||
vertical = false,
|
||||
texture = "(" .. inv_img .. "^[resize:32x32)^[mask:maidroid_tool_capture_rod_mask_left.png",
|
||||
player = user
|
||||
})
|
||||
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
end
|
|
@ -8,6 +8,8 @@ do -- register core writer
|
|||
local dye_item_map = {
|
||||
["dye:red"] = "maidroid_core:basic",
|
||||
["dye:yellow"] = "maidroid_core:farming",
|
||||
["dye:white"] = "maidroid_core:ocr",
|
||||
["dye:orange"] = "maidroid_core:torcher"
|
||||
}
|
||||
|
||||
local node_box = {
|
||||
|
@ -148,7 +150,7 @@ do -- register core writer
|
|||
core_entity.object:remove()
|
||||
end
|
||||
|
||||
maidroid_tool.register_writer("maidroid_tool:core_writer", {
|
||||
maidroid_tool._aux.register_writer("maidroid_tool:core_writer", {
|
||||
description = "maidroid tool : core writer",
|
||||
formspec = formspec,
|
||||
tiles = tiles,
|
||||
|
|
|
@ -29,3 +29,13 @@ minetest.register_craft{
|
|||
{"default:steel_ingot", "dye:black", "default:steel_ingot"},
|
||||
},
|
||||
}
|
||||
|
||||
minetest.register_craft{
|
||||
output = "maidroid_tool:capture_rod",
|
||||
recipe = {
|
||||
{ "wool:white", "dye:pink", "default:mese_crystal"},
|
||||
{ "", "default:steel_ingot", "dye:pink"},
|
||||
{"default:steel_ingot", "", "wool:white"},
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
bucket
|
||||
default
|
||||
dye
|
||||
wool
|
||||
maidroid
|
||||
maidroid_core
|
||||
|
|
|
@ -162,10 +162,12 @@ do -- register egg writer
|
|||
|
||||
local function on_metadata_inventory_take_from_main(pos)
|
||||
local egg_entity = get_nearest_egg_entity(pos)
|
||||
egg_entity.object:remove()
|
||||
if egg_entity then
|
||||
egg_entity.object:remove()
|
||||
end
|
||||
end
|
||||
|
||||
maidroid_tool.register_writer("maidroid_tool:egg_writer", {
|
||||
maidroid_tool._aux.register_writer("maidroid_tool:egg_writer", {
|
||||
description = "maidroid tool : egg writer",
|
||||
formspec = formspec,
|
||||
tiles = tiles,
|
||||
|
|
|
@ -8,8 +8,9 @@ maidroid_tool = {}
|
|||
maidroid_tool.modname = "maidroid_tool"
|
||||
maidroid_tool.modpath = minetest.get_modpath(maidroid_tool.modname)
|
||||
|
||||
dofile(maidroid_tool.modpath .. "/api.lua")
|
||||
dofile(maidroid_tool.modpath .. "/_aux.lua")
|
||||
dofile(maidroid_tool.modpath .. "/core_writer.lua")
|
||||
dofile(maidroid_tool.modpath .. "/egg_writer.lua")
|
||||
dofile(maidroid_tool.modpath .. "/crafting.lua")
|
||||
dofile(maidroid_tool.modpath .. "/nametag.lua")
|
||||
dofile(maidroid_tool.modpath .. "/capture_rod.lua")
|
||||
|
|
|
@ -8,7 +8,7 @@ local formspec = "size[4,1.25]"
|
|||
.. default.gui_bg_img
|
||||
.. default.gui_slots
|
||||
.. "button_exit[3,0.25;1,0.875;apply_name;Apply]"
|
||||
.. "field[0.5,0.5;2.75,1;name;name;]"
|
||||
.. "field[0.5,0.5;2.75,1;name;name;%s]"
|
||||
|
||||
local maidroid_buf = {} -- for buffer of target maidroids.
|
||||
|
||||
|
@ -28,14 +28,15 @@ minetest.register_craftitem("maidroid_tool:nametag", {
|
|||
if not obj:is_player() and luaentity then
|
||||
local name = luaentity.name
|
||||
|
||||
if maidroid.registered_maidroids[name] and not luaentity:is_named() then
|
||||
if maidroid.is_maidroid(name) then
|
||||
local player_name = user:get_player_name()
|
||||
local nametag = luaentity.nametag or ""
|
||||
|
||||
minetest.show_formspec(player_name, "maidroid_tool:nametag", formspec)
|
||||
maidroid_buf[player_name] = luaentity
|
||||
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
minetest.show_formspec(player_name, "maidroid_tool:nametag", formspec:format(nametag))
|
||||
maidroid_buf[player_name] = {
|
||||
object = obj,
|
||||
itemstack = itemstack
|
||||
}
|
||||
end
|
||||
end
|
||||
return nil
|
||||
|
@ -47,12 +48,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
return
|
||||
end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
if fields.name then
|
||||
local luaentity = maidroid_buf[player:get_player_name()]
|
||||
luaentity.nametag = fields.name
|
||||
local luaentity = maidroid_buf[player_name].object:get_luaentity()
|
||||
if luaentity then
|
||||
luaentity.nametag = fields.name
|
||||
|
||||
luaentity.object:set_nametag_attributes{
|
||||
text = fields.name,
|
||||
}
|
||||
luaentity.object:set_properties{
|
||||
nametag = fields.name,
|
||||
}
|
||||
|
||||
local itemstack = maidroid_buf[player_name].itemstack
|
||||
itemstack:take_item()
|
||||
player:set_wielded_item(itemstack)
|
||||
end
|
||||
end
|
||||
|
||||
maidroid_buf[player_name] = nil
|
||||
end)
|
||||
|
|
BIN
maidroid_tool/sounds/maidroid_tool_capture_rod_open_egg.ogg
Normal file
BIN
maidroid_tool/sounds/maidroid_tool_capture_rod_use.ogg
Normal file
BIN
maidroid_tool/textures/maidroid_tool_capture_rod.png
Normal file
After Width: | Height: | Size: 304 B |
BIN
maidroid_tool/textures/maidroid_tool_capture_rod_mask_left.png
Normal file
After Width: | Height: | Size: 546 B |
BIN
maidroid_tool/textures/maidroid_tool_capture_rod_mask_right.png
Normal file
After Width: | Height: | Size: 670 B |
BIN
maidroid_tool/textures/maidroid_tool_capture_rod_plate.png
Normal file
After Width: | Height: | Size: 463 B |
BIN
maidroid_tool/textures/maidroid_tool_capture_rod_star.png
Normal file
After Width: | Height: | Size: 712 B |