Skip to content

lua classes

LISPCoC edited this page Jul 12, 2018 · 4 revisions

gameクラス

ゲームのコア部分を統括するクラスです。UIの制御、クリーチャーの生成など様々な機能を持ちます。

クラスの生成

グローバル変数"g"が最初から定義されています。LUA側から新たに生成することはできません。(する必要もない)

関数

critter_at(tripoint, [allow_hallucination])

指定したtripointのタイルにクリーチャー(モンスター、NPC、プレイヤー)が存在すれば、そのクリーチャーを指すCreatureクラスを返します。
存在しない場合はnilを返します。
allow_hallucinationは対象のクリーチャーとして幻覚を許可するかどうかを決定し、bool型で与えます。(省略可)
以下のサンプルはプレイヤーの右隣にいるクリーチャーの名前を取得します。

local pos = player:pos()
pos.x = pos.x + 1
local creature = g:critter_at(pos)
game.add_msg(creature:disp_name())

この関数の本体はgame.cppにあります。

handle_liquid(item)

プレイヤーが指定したitemで指定したものを入手(飲む、容器、捨てる等)するメニューを呼び出します。
itemに液体ではないアイテムが渡された場合はエラーになります。
メニューを呼び出した時点でLUA側の処理は一旦止まり、プレイヤーの選択を待ちます。
プレイヤーが飲む、容器、捨てるを選んだ場合はtrue、キャンセルした場合はfalseを返します。
以下のサンプルは牛乳の入手メニューを呼び出します。

local calendar = game.get_calendar_turn()
local milk = item("milk", calendar:get_turn(), 1)
g:handle_liquid(milk)

この関数の本体はgame.cppにあります。


mapクラス

クラスの生成

現在のマップを表すグローバル変数"map"が最初から定義されています。LUA側から新たに生成することはできません。

関数

place_npc(x, y, type)

typeの内容に沿ったNPCを生成します。
x, yにはそれぞれ生成先となるマップ内のx, y座標、typeにはnpc_template_idクラスを渡します。
生成に成功した場合は、そのNPCのID(playerクラスのgetID関数で得られるもの)を返します。
生成に失敗した場合は-1を返します。
この関数の本体はmapgen.cppにあります。


Characterクラス

クリーチャーのうち、キャラクターを表すクラスです。(現状では実質的にキャラクター=プレイヤーorNPCですが)
Creatureクラスのサブクラスであり、Creatureクラスが持つ変数や関数と同じものが使えるほか、Characterに特有の変数や関数を持ちます。

クラスの生成

CharacterクラスはLUA側から新たに生成することはできません。あくまでplayerクラスへの繋ぎとして存在します。

関数


playerクラス

キャラクターのうち、プレイヤーおよびNPCを表すクラスです。
Characterクラスのサブクラスであり、Characterクラスが持つ変数や関数と同じものが使えるほか、playerに特有の変数や関数を持ちます。
また、引数としてCharacterクラスが求められた場合にはplayerクラスを渡すことも可能です。(逆は不可)

クラスの生成

グローバル変数"player"が最初から定義されています。これは操作するプレイヤーの情報を表すクラスです。
プレイヤーではないNPCに対しこのクラスを得たい場合は、少し裏技的な手順が必要であり、以下のコードで得ることができます。

local pos = tripoint(x, y, z) -- x, y, zはNPCの座標
local npc = g:critter_at(pos)
if npc:is_npc() then
  npc = debug.setmetatable(npc, debug.getmetatable(player))
else
  npc = nil
end

上のコードではまずNPCに対するCreatureクラスを取得し、それに付帯しているメタテーブル(LUAのオブジェクト情報を表すもの)をplayerのものと入れ替えることで、NPCに対するplayerクラスを得ています。
当然ですが、playerクラスに適さないモンスター等に対してこれを行うと不具合が発生するので注意しましょう。

関数


Clone this wiki locally