Hitoshina — Language

Hitoshina - Languageについて

Hitoshina - Languageは、Second Life向けのプログラミング言語です。
Hitoshinaの理念である「より良いSecond Lifeへの貢献」という理念に沿って、
メモリ使用量の削減や高速化といった最適化のノウハウを集約し、様々な人が意識せずにそれらの恩恵を受けられるようにすることを目標としています。
ビルドするとスクリプト言語 LSL(Linden Scripting Language)のコードを出力します。

特徴

  • 最適化 — 定数畳み込み、インライン展開、デッドコード削除などの自動最適化。
  • 関数とプロシージャの分離 — 純粋な関数と副作用のあるプロシージャを文法的に区別。
  • テスト機能 — 関数の単体テストとモック機能。
  • 静的解析 — 送信チャンネルに対する受信チャンネルが存在しないなどの意味的な誤りを検出。

Second Life の基本概念

Hitoshina - Languageを理解するために、Second Lifeの以下の概念を知っておくと役立ちます。

  • オブジェクト: ワールド内に存在する3Dモデル。1つ以上のプリム(パーツ)で構成され、プリムをリンクしたものをリンクセットと呼びます。
  • スクリプト: オブジェクトに埋め込まれるプログラム。イベント(初期化、タッチ、メッセージ受信等)に応じて動作します。
  • アバター: プレイヤーのキャラクター。UUID で一意に識別されます。
  • チャンネル: スクリプト間通信のための番号付きメッセージバス。チャンネル0はワールドチャット。
  • プリム: オブジェクトを構成する個々のパーツ。リンクセット内ではリンク番号で識別されます。HLの prim 宣言はこのプリムに対応します。

クイックスタート

最小限の.hlファイル例

  • script main; — main という名前のスクリプトインスタンスを宣言します。コンパイル時に output/main.lsl として出力されます。
  • main #init { ... } — main スクリプトの初期化イベントハンドラーです。スクリプトが開始されたときに1度だけ実行されます。
  • "Hello, World!" -> world; — 文字列をワールドチャット(チャンネル0の公開チャット)に送信します。-> はメッセージ送信演算子、world は送信先です。

このスクリプトをコンパイルすると、script main; の宣言に対応する output/main.lsl が生成されます。

コンパイル手順

生成された .lsl ファイルをSecond Lifeのオブジェクトに設置して使用します。

プロジェクト作成

以下のディレクトリ構造が作成されます。

各ディレクトリ・ファイルの役割は以下の通りです。

  • lib/ — 複数のスクリプトで共有する関数や定数を .hlib ファイルとして格納します。import math_lib; のように読み込みます。
  • prc/ — 再利用可能なプロシージャ(副作用を伴う処理)を .hprc ファイルとして格納します。include common_proc; のように読み込みます。
  • msg/ — スクリプト間のメッセージ受信時に実行される処理を .hmsg ファイルとして分離・定義します。メインファイルからメッセージ送信時に -> sub @handler_name の形式で指定します。
  • output/ — hl main.hl でコンパイルすると、ここにLSLファイルが生成されます。このファイルをSecond Lifeに設置します。
  • tests/ — .hltest ファイルで単体テストを記述します。hl test コマンドで実行できます。
  • main.hl — プロジェクトのエントリポイントとなるメインスクリプト。以下の初期テンプレートが書き込まれた状態で生成されます。

文法概要

この章では、Hitoshina - Languageの全体像を簡潔に紹介します。各トピックの詳細な構文仕様は後続のセクションを参照してください。

プログラムの構造

HLプログラムは、メインファイル(.hl)を中心に構成されます。メインファイルにはスクリプトの定義、イベントハンドラー、そして処理の本体を記述します。

データ型

基本型として int, float, str, bool, key(UUID), vec(3Dベクター), rot(回転)があります。リストは ilist, slist 等の型付きリストで安全に操作できます。詳細は型システムを参照してください。

変数と定数

関数とプロシージャ

HLでは関数とプロシージャを明確に区別します。

  • 関数: 値を計算して返します。式のみで構成されます。
  • プロシージャ: 副作用(※)のある処理を実行します。ブロック構文を持ちます。

※副作用とは、関数の外部に影響を与える操作のことです。メッセージ送信(->)やグローバル変数の書き換えなどが副作用に当たります。HLでは関数に副作用を持たせることができないため、どこから呼び出しても同じ入力に対して同じ結果が保証されます。

詳細は基本構文を参照してください。

イベント駆動モデル

Second Lifeのスクリプトはイベント駆動で動作します。HLでは #init(初期化)、#timer(タイマー)、#listen(メッセージ受信)、#touch_start(タッチ)などのイベントハンドラーを定義できます。

詳細は基本構文 — イベントハンドラーを参照してください。

メッセージの送受信

-> 演算子でメッセージを送信します。送信先は world(公開チャット)、owner(オーナー)、またはユーザー定義のスクリプト・アバターを指定できます。

詳細はメッセージ送信を参照してください。

条件分岐とループ

詳細はブロック構文を参照してください。

ファイル構成

コードを用途別のファイルに分割できます。

拡張子用途主な内容
.hlメインファイルスクリプト定義、イベントハンドラー
.hlib関数ライブラリ再利用可能な関数・定数
.hprcプロシージャライブラリ再利用可能なプロシージャ
.hmsgメッセージハンドラーメッセージ受信時の処理
.hltestテストファイル単体テスト・モック

詳細はファイルタイプを参照してください。

ファイルタイプ

Hitoshina - Languageでは、用途に応じて5種類のファイルタイプを使い分けます。

メインファイル(.hl)

メインファイルはLSLスクリプトを生成するためのエントリーポイントとなるファイルです。

定義可能な要素:

  • script/avatar/prim定義(script main;、avatar player = "UUID";等)
  • イベントハンドラー(#init、#timer、#listen、#touch、#linkmsg等)
  • プロシージャ定義(#proc { ... }形式)
  • 関数定義(int add(int a, int b) = a + b;形式)
  • 定数定義(const int MAX = 100;形式)
  • context定義(グローバル状態管理用の構造体)
  • プロパティ定義(#attachable、#animable、#cache_linknum、#memory_limit_kb)
  • import文(.hlibファイルの参照)
  • include文(.hprcファイルの参照)

定義できない要素:

  • ref文(.hmsgファイル専用)
  • test定義(.hltestファイル専用)

重要: メインファイルのイベントハンドラーやプロシージャ内ではブロック構文を使用します。関数呼び出しは式として使用できますが、void関数(戻り値なし関数)は存在しません。副作用を伴う処理にはプロシージャを使用してください。

例:

ライブラリファイル(.hlib)

ライブラリファイルは、再利用可能な関数と定数を定義します。

定義可能な要素:

  • 関数定義(int add(int a, int b) = a + b;)
  • 定数定義(const int MAX_VALUE = 100;)
  • 他のライブラリのimport

定義できない要素:

  • script/avatar/prim定義
  • イベントハンドラー
  • プロシージャ定義
  • プロパティ定義

例:

プロシージャライブラリファイル(.hprc)

プロシージャライブラリファイルは、再利用可能なプロシージャを定義します。

定義可能な要素:

  • プロシージャ定義(#proc_name { ... } または #proc_name|params| { ... })
  • 他のライブラリのimport
  • 他のプロシージャライブラリのinclude

定義できない要素:

  • script/avatar/prim定義
  • イベントハンドラー
  • 関数定義
  • 定数定義
  • プロパティ定義

例:

メッセージハンドラーファイル(.hmsg)

メッセージハンドラーファイルは、メッセージ送信時に呼び出される処理を分離して定義します。

定義可能な要素:

  • ref文(参照先のスクリプトファイル指定)
  • import文
  • include文(.hprcファイルの参照)
  • 定数定義
  • 関数定義
  • プロシージャ定義
  • linkmsgイベントハンドラー

定義できない要素:

  • script/avatar/prim定義
  • context定義
  • その他のイベントハンドラー(#init、#timer、#listen、#touch等)

例:

contextパラメータの使用:

.hmsgファイル内のlinkmsgハンドラでは、親.hlファイルで定義されたcontextフィールドにcontextパラメータ経由でアクセスできます。

テストファイル(.hltest)

テストファイルは、単体テストを記述するためのファイルです。

定義可能な要素:

  • import文
  • テスト式(比較式形式)
  • モック定義

定義できない要素:

  • script/avatar/prim定義
  • イベントハンドラー
  • 関数定義
  • プロシージャ定義・呼び出し
  • 定数定義
  • メッセージ送信
  • context定義
  • プロパティ定義

例:

テスト対象のライブラリとテスト例:

テスト結果:

ファイルタイプ対照表

各ファイルタイプで使用可能な構文の一覧です。

トップレベル宣言・定義

構文.hl.hlib.hprc.hmsg.hltest
import文 (import lib;)✅✅✅✅✅
include文 (include proc;)✅❌✅✅❌
ref文 (ref main;)❌❌❌✅❌
インスタンス定義 (script main;)✅❌❌❌❌
primsグループ定義 (prims btn***)✅❌❌❌❌
定数定義 (const int MAX = 100;, 定数式対応)✅✅❌✅❌
context定義 (context @script_id { ... })✅❌❌❌❌
関数定義 (int f(int x) = x;)✅✅❌✅❌
プロシージャ定義 (#proc { ... })✅❌✅✅❌
プロパティ: #attachable✅❌❌❌❌
プロパティ: #animable✅❌❌❌❌
プロパティ: #cache_linknum✅❌❌❌❌
プロパティ: #memory_limit_kb✅❌❌❌❌
テスト式 (1 + 1 == 2;)❌❌❌❌✅
モック定義 (!!func() = val;)❌❌❌❌✅

イベントハンドラー定義

構文.hl.hlib.hprc.hmsg.hltest
#init✅❌❌❌❌
#timer✅❌❌❌❌
#listen✅❌❌❌❌
#linkmsg✅❌❌✅❌
#touch_start / #touch✅❌❌❌❌
#sensor✅❌❌❌❌
#no_sensor✅❌❌❌❌
#run_time_permissions✅❌❌❌❌
#dataserver✅❌❌❌❌
#changed✅❌❌❌❌

ブロック内構文

イベントハンドラーやプロシージャのブロック{ }内で使用可能な構文。

構文.hl.hlib.hprc.hmsg.hltest
変数定義 (int x = 1;)✅❌✅✅❌
変数再代入 (x = 2;)✅❌✅✅❌
メッセージ送信 (exp -> target;)✅❌✅✅❌
if/elif/else✅❌✅✅❌
switch文✅❌✅✅❌
for-toループ✅❌✅✅❌
for-eachループ✅❌✅✅❌
プリムメソッド呼び出し✅❌✅✅❌
プロシージャ呼び出し✅❌✅✅❌
ダイアログ構文✅❌✅✅❌
早期リターン (end;)✅❌✅✅❌

※ .hlibは関数が式ベース(ブロックなし)、.hltestはテスト式とモック定義のみ。

関数式構文

関数定義の本体(=の右辺)で使用可能な式形式。

構文.hl.hlib.hprc.hmsg.hltest
式 (a + b)✅✅❌✅❌
三項演算子 (exp ? exp : exp)✅✅❌✅❌
match (exp ? pat => val : default)✅✅❌✅❌
map (map type id in exp : exp)✅✅❌✅❌
map range (map int id = exp to exp : exp)✅✅❌✅❌
fold (fold type id in exp : exp)✅✅❌✅❌
fold range (fold int id = exp to exp : exp)✅✅❌✅❌
fold accumulator (fold ... , type acc = exp : exp, exp)✅✅❌✅❌

※ 関数定義が可能なファイルタイプ(.hl, .hmsg, .hlib)でのみ使用可能。

switch単一文形式

switch文の=>後にブロック{}なしで記述する場合の構文。ブロック内構文のサブセット。

構文.hl.hlib.hprc.hmsg.hltest
変数定義✅❌✅✅❌
変数再代入✅❌✅✅❌
メッセージ送信✅❌✅✅❌
プリムメソッド呼び出し✅❌✅✅❌
プロシージャ呼び出し✅❌✅✅❌
ダイアログ構文✅❌✅✅❌

※ 制御構文(if, switch, for)と早期リターン(end)は単一文形式では不可。ブロック形式{}で全構文が使用可能。

基本構文

この章では、HLプログラムを構成する基本的な構文要素を詳しく説明します。

import文

外部ライブラリファイル(.hlib)で定義された関数・定数を現在のファイルで使用可能にします。

例:

include文

外部プロシージャライブラリファイル(.hprc)で定義されたプロシージャを現在のファイルで使用可能にします。

例:

識別子の命名規則

通常識別子(変数名、関数名、スクリプト名等)

  • 小文字英字、数字、アンダースコアのみ使用可能。
  • 先頭に数字は使用不可。
  • 例: main, my_variable, count_items, user_id_123

定数識別子

  • 大文字英字、数字、アンダースコアのみ使用可能。
  • 先頭に数字は使用不可。
  • 例: MAX_COUNT, DEFAULT_MESSAGE, CH_PUBLIC, API_KEY_1

script/avatar/prim定義

Second Lifeのエンティティに対応するインスタンスを宣言します。

  • script: LSLスクリプトに対応。script main; は output/main.lsl を生成します。1つの .hl ファイルから複数スクリプトのコードを生成できます(例: script main; script sub; → output/main.lsl, output/sub.lsl)。
  • avatar: プレイヤーキャラクター。定義時にUUIDを指定して識別します(UUID必須)。
  • prim: リンクセット内の個々のプリム(パーツ)。リンク番号で識別され、色変更やタッチ検出などの操作対象となります。

prims定義(primのグループ化)

複数のprimをワイルドカードパターンでグループ化します。

制約:

  • ワイルドカードは後置のみ(btn***は可、***btnは不可)。
  • 宣言時に代入が必須(prims btn***;のみは不可)。
  • パターンに一致する全primの代入が必須。
  • prim型とprims型は相互変換不可。

イベントハンドラー

Second Lifeのスクリプトはイベント駆動で動作します。HLでは スクリプト識別子 #イベント名 の形式でイベントハンドラーを定義します。

イベント発火タイミングパラメータ
#initスクリプト開始時(1回のみ)context
#timerタイマー間隔ごとcontext
#listen指定チャンネルのメッセージ受信時str name, key id, str msg(全て省略可), context
#linkmsgリンクメッセージ受信時str msg, context
#touch_startプリムがタッチされた時prim, context
#touchプリムがタッチされている間prim, context
#sensorセンサーがオブジェクト/エージェントを検出した時int num_detected, context
#no_sensorセンサーが何も検出しなかった時context
#run_time_permissionsパーミッション要求の結果を受信した時int perm, context
#dataserver非同期データリクエスト(request_agent_data()等)が完了した時key queryid, str data, context
#changedオブジェクトに変化があった時int change_flags, context
#on_rezオブジェクトがrezされた・装着された時int start_param, context

init イベント

スクリプトの開始時(リセット時や装着時)に1度だけ実行されます。

bool パラメータ(任意): #attachable が指定されたスクリプトでは、#init の内容は LSL の state_entry と attach(key id) の両方に展開されます。bool パラメータを宣言すると、その変数は state_entry 経路では false、装着時の attach 経路では true として参照可能となり、装着時にのみ実行したい処理を分岐できます。#attachable が指定されていない場合、bool 変数は常に false となります。

timer イベント

設定された間隔で繰り返し実行されます。標準プロシージャの set_timer() でタイマーを設定します。

listen イベント

指定チャンネルのチャットメッセージを受信します。チャンネル0はワールドチャット(公開チャット)で、それ以外の番号はスクリプト間通信に使用します。

パラメータ(全て省略可能、順序固定):

  • str <変数名> — 送信者名
  • key <変数名> — 送信者UUID
  • str <変数名> — メッセージ本文
  • context <変数名> — contextアクセス(末尾に指定)

指定可能な組み合わせ:

  • |str name, key id, str msg| — 送信者名・UUID・メッセージ
  • |str name, key id| — 送信者名・UUID
  • |str name, str msg| — 送信者名・メッセージ
  • |key id, str msg| — UUID・メッセージ
  • |key id| — UUID のみ
  • |str msg| — メッセージのみ
  • 省略可
  • 上記いずれにも , context <変数名> を末尾に追加可能

※ 単独の str パラメータはメッセージ本文として解釈されます。

チャンネル番号:

  • リテラル値: #listen :0、#listen :123
  • 定数名: #listen :PUBLIC_CHANNEL
  • ライブラリ定数: #listen :const::CH_PUBLIC

オーナーフィルタ (+ owner):

  • オーナーからのメッセージのみを受信。

linkmsg イベント

同一オブジェクト内の他スクリプトからリンクメッセージを受信したときに実行されます。

touch_start イベント

プレイヤーがプリムをクリック(タッチ)した瞬間に1回実行されます。プリム識別子で受け取り対象を指定し、@ でスクリプトを紐付けます。

primパラメータのメソッド:

  • <変数名>.name(): プリムの識別子名を取得(str型)。
  • <変数名>.desc(): プリムのDescriptionを取得(str型)。

LSL変換時の展開例:

※ メソッドがブロック内で参照されていない場合は、該当コードは生成されません(最適化)。

touch イベント

プレイヤーがプリムをタッチしている間、継続的に実行されます。パラメータは#touch_startと同様です。

#touch_startとの違い:

項目#touch_start#touch
実行タイミングタッチした瞬間(1回)タッチしている間(継続)
パラメータprim, contextprim, context
LSLイベントtouch_start()touch()

sensorイベント

標準プロシージャの sensor_repeat() / sensor() で開始されたセンサーがオブジェクト/エージェントを検出した時に実行されます。

no_sensorイベント

センサーが何も検出しなかった時に実行されます。

run_time_permissionsイベント

標準プロシージャの request_permissions() で要求したパーミッションが許可/拒否された時に実行されます。パーミッション変数(int型)はビットマスクで、付与されたパーミッションを表します。

dataserverイベント

標準ライブラリの request_agent_data() / get_notecard_line() 等の非同期データリクエストが完了した時に実行されます。クエリID変数(key型)でリクエストを識別し、データ変数(str型)に返却データが入ります。

changed イベント

オブジェクトに何らかの変化(インベントリ追加、リンク変更、リージョン移動など)があった時に実行されます。int 変数には変化の種類を表すビットフィールドが渡されます。

LSL 変換:

on_rez イベント

オブジェクトがインワールドに rez された時、またはアバターが装着した時に実行されます。int 変数には llRezObject() 等で渡された start_param 値が入り、ユーザーや別オブジェクトから手動で rez された場合は通常 0 です。

LSL 変換:

プロシージャと関数の違い

項目プロシージャ関数
定義方法#name { ... }type name(...) = expr;
戻り値なし必須(式の評価結果)
本体ブロック(文の列)式のみ
呼び出し#name;name()
定義場所.hl, .hprc, .hmsg.hl, .hlib, .hmsg
用途副作用を伴う処理値を計算して返す

プロシージャ定義

例:

プロシージャ呼び出し

関数定義

関数は値を計算して返すために使用します。.hl、.hlib、.hmsgファイルで定義できます。

例:

重要: 関数本体は式のみで構成されます。以下の構文は使用できません:

  • 変数定義・再代入。
  • プロシージャ呼び出し。
  • メッセージ送信。
  • 制御構文(if文、while文、for each文)。

関数専用の式

関数本体では、通常の式に加えて以下の特殊な式を使用できます。これらは関数定義内でのみ使用可能で、ブロック構文(イベントハンドラーやプロシージャ)では使用できません。

式用途構文
三項演算子条件分岐条件 ? 真の値 : 偽の値
match式パターンマッチング値 ? パターン1 => 結果1 ? パターン2 => 結果2 : デフォルト
map式リスト/str変換map 型 変数 in コレクション : 変換式
map式(レンジ)レンジ変換map int 変数 = 開始 to 終了 : 変換式
find式リスト検索find 型 変数 in リスト : (パターンマッチ形式 または 三項演算子形式)
find式(レンジ)レンジ検索find int 変数 = 開始 to 終了 : 三項演算子形式
fold式リスト/str集約fold 型 変数 in コレクション : 集約式
fold式(レンジ)レンジ集約fold int 変数 = 開始 to 終了 : 集約式
fold式(アキュムレータ付き)状態追跡付き集約fold ... , 型 acc = 初期値 : 集約式, 更新式

三項演算子

条件に基づいて値を返します。

match式

値に対してパターンマッチングを行い、一致したパターンに対応する結果を返します。

as句を使用した変数束縛:

match式の対象となる値に名前を付けて、パターンの結果式で参照できます。

map式

コレクション(リスト型またはstr型)の各要素を変換して新しいリストを返します。str型の場合、1文字ずつイテレーションされます。

find式

リストから条件に一致する最初の要素を検索し、対応する値を返します。パターンマッチ形式と三項演算子形式の2つの構文をサポートしています。

fold式

コレクション(リスト型またはstr型)の各要素を集約して単一の値を返します。str型の場合、1文字ずつイテレーションされます。

定数定義

定数式にはリテラル値、他の定数参照、およびそれらの演算式を使用できます。 変数参照、関数呼び出し、メソッド呼び出し等の非定数式は使用できません(E0602エラー)。

整数定数式の計算結果が int の範囲(-2147483648〜2147483647)を超える場合は E0308 エラーになります。リテラル同士の式(const int BAD = 2147483647 + 1;)に加え、同一ファイル内の非ライブラリ定数を参照する式(const int MAX = 2147483647; const int BAD = MAX + 1;)も検出対象です。コンパイル時(定数畳み込み)に評価されるため、overflow を含むファイルは LSL 生成がスキップされます。なお、ライブラリ定数(lib::MAX)を介した overflow は現時点では検出されません。この検査は定数定義に限らず、通常の文の中の整数定数式(例: int x = 2147483647 + 1;)にも適用されます。

例:

変数定義

例:

ビット演算子

整数(int型)に対してビット演算を行います。Second Lifeのパーミッション処理などで使用します。

演算子説明
&ビットAND
|ビットOR
^ビットXOR

注意: ダイアログ構文でボタンのグルーピングに|を使用する場合、ビットOR演算子と構文が衝突するため、演算式を括弧で囲む必要があります。

context定義

スクリプトごとのコンテキスト情報を定義します。@スクリプト名で所属スクリプトを指定します。 同一スクリプトに対して複数のcontext定義を行うとE1003エラーになります。 @スクリプト名で指定したスクリプトがscript文で定義されていない場合はE1004エラーになります。

フィールド初期化子には以下を指定可能:

  • リテラル(int / float / str / key / bool / vec / rot / list)
  • 定数参照(CONST または lib::CONST)
  • 上記を組み合わせた算術式(+, -, *, /, %、ビット演算 & / ^ / |、論理演算、比較、単項 !、括弧)

省略時は型のゼロ値(int=0, str="", bool=false 等)。関数呼び出しや変数参照は使用できない(E0602 InvalidConstExpression)。LSL 生成時、これらの初期化子は定数畳み込みされて単一のリテラル値として出力される(LSL のグローバル変数初期化子は他のグローバル変数を参照できないため)。

例:

プロパティ定義

#cache_linknumを指定すると、primインスタンスのリンク番号をキャッシュする_cache_linknum()関数が生成されます。この関数はstate_entryとattachイベントハンドラの先頭で自動的に呼び出されます。関数の先頭でllLinksetDataDeleteFound("^\\$", "")により$プレフィックス付きの既存キャッシュを全削除してから再キャッシュするため、プリム名の変更にも対応します。

primsグループが定義されている場合、グループに属するprimは個別の名前比較ではなく、プレフィックス+長さによるパターンマッチ条件でまとめて処理されます。これにより生成コードのメモリ使用量が削減されます。グループに属さないprimは従来通り個別の名前比較で処理されます。

#memory_limit_kbを指定すると、state_entryの先頭でllSetMemoryLimitが呼び出されます。値はKB単位で指定し、1024倍されてバイト単位に変換されます。リテラル値のほか、const intで定義した定数を参照することもできます。

primメソッド呼び出し

primインスタンスに対してメソッドを呼び出すことができます。

set_colorメソッド

primのカラーを設定します。

パラメータ:

  • face: 面番号(int)。ALL_SIDESで全面を指定。
  • color: 色(vec)。<R, G, B>形式(各値は0.0〜1.0)。
  • alpha: 透明度(float)。0.0〜1.0。

使用例:

descメソッド

primの説明(Description)を取得します。

戻り値: str型(プリムの説明文字列)。

使用例:

注意: primメソッドを使用するには#cache_linknum属性が必要です。

早期リターン文

イベントハンドラーおよびプロシージャの実行を早期に終了します。関数では使用できません。

型システム

基本型

  • bool: 真偽値型(true/false)。LSLではinteger型に変換(true=1, false=0)。
  • int: 整数型(32bit 符号付き。範囲は -2147483648〜2147483647)。定数式の計算結果がこの範囲を超える場合はコンパイルエラー(E0308)。
  • float: 浮動小数点数型。
  • str: 文字列型。
  • key: UUID型。
  • vec: ベクター型(3次元)。
  • rot: 回転型(4次元クォータニオン)。

型付きリスト

型安全なリスト操作のため、以下の型付きリスト型をサポートしています:

  • ilist: 整数リスト型(要素型: int)。
  • flist: 浮動小数点数リスト型(要素型: float)。
  • slist: 文字列リスト型(要素型: str)。
  • vlist: ベクターリスト型(要素型: vec)。
  • rlist: 回転リスト型(要素型: rot)。
  • klist: キーリスト型(要素型: key)。

例:

型互換性ルール

許可される暗黙変換

変換元変換先説明
intfloat整数から浮動小数点数への変換
keystrUUID型から文字列型への変換
klistslistキーリストから文字列リストへの変換(key → str のリスト版)
[](空リスト)任意のリスト型空リストは ilist, slist, flist, vlist, rlist, klist のいずれとも互換

禁止される暗黙変換

変換元変換先説明
strkey文字列型からUUID型への変換は禁止
slistklist文字列リストからキーリストへの変換は禁止(str → key と同様)
floatint浮動小数点数から整数への変換は禁止

式と演算子

式の構造

項

  • リテラル値(数値、文字列、リスト等)
  • 識別子
  • 関数呼び出し: <関数名>(<引数リスト>)
  • ライブラリ関数呼び出し: <エイリアス名>::<関数名>(<引数リスト>)
  • メソッド呼び出し: <プリム>.<メソッド名>(<引数リスト>)
  • フィールドアクセス: <プリム>.<フィールド名>
  • ライブラリ定数アクセス: <エイリアス名>::<定数名>
  • インクリメント・デクリメント: ++<変数>, <変数>++, --<変数>, <変数>--
  • 括弧式: (<式>)

演算子(優先順位順)

  1. 高優先度: *, /, %
  2. 加減算: +, -
  3. 比較: <, <=, >, >= (戻り値型: bool)
  4. 等価: ==, != (戻り値型: bool)
  5. 論理: &&, || (戻り値型: bool)
  6. ビット: &, |, ^
  7. 代入: +=, -=, *=, /=, %=

単項演算子

  • 論理否定: !<式>

リテラル

文字列エスケープシーケンス:

  • \": ダブルクォート
  • \\: バックスラッシュ
  • \/: スラッシュ
  • \n: 改行
  • \r: キャリッジリターン
  • \t: タブ
  • \b, \f: LSL非サポートのため変換されず、\b / \f の2文字のまま出力される
  • \uXXXX: Unicode文字(4桁16進数)※LSL非サポートのため変換されない

メソッド

メソッド呼び出し・チェーン

例:

組み込みメソッド

str型メソッド

メソッド説明戻り値
str.substr(int start, int end)部分文字列を取得str
str.delete(int start, int end)指定範囲を削除str
str.index_of(str pattern)パターンの位置を検索int
str.replace(str pattern, str replacement)パターンを置換str
str.to_int()整数に変換int
str.to_key()キーに変換key
str.split(str separator)区切り文字で分割slist
str.len()文字列の長さint
str.format(...)フォーマット(可変引数)str
str.json_value(str specifiers)JSON値を取得str
str.insert(int pos, str src)文字列を挿入str
str.to_upper()大文字に変換str
str.to_lower()小文字に変換str

型付きリスト型メソッド(共通)

全ての型付きリスト(ilist, flist, slist, vlist, rlist, klist)で使用可能なメソッドです。

メソッド説明戻り値
.at(int index)型安全に要素取得要素型
.len()リストの長さint
.index_of(要素型 test)要素の位置を検索int
.exists(要素型 test)要素の存在確認bool
.join(str separator)要素を結合str
.slice(int start, int end)部分リストを取得同じリスト型
.delete(int start, int end)指定範囲を削除同じリスト型
.replace(同型リスト src, int start, int end)指定範囲を置換同じリスト型

int型メソッド

メソッド説明戻り値
int.to_str()文字列に変換str
int.link_key()リンクのUUIDを取得key

key型メソッド

メソッド説明戻り値
key.to_str()文字列に変換str
key.attached_list()アタッチリストを取得klist

float型メソッド

メソッド説明戻り値
float.to_int()整数に変換(切り捨て)int
float.to_str()文字列に変換str

vec型メソッド

メソッド説明戻り値
vec.euler_to_rot()回転に変換rot

rot型メソッド

メソッド説明戻り値
rot.to_euler()オイラー角に変換vec

フィールドアクセス

vec型フィールド

フィールド型説明
xfloatX成分
yfloatY成分
zfloatZ成分

rot型フィールド

フィールド型説明
xfloatX成分
yfloatY成分
zfloatZ成分
sfloatS成分(スカラー部分)

例:

ブロック構文

使用可能な文

ブロック {} 内で使用可能な構文要素:

  • 変数定義文
  • 変数再代入文
  • メッセージ送信文
  • プロシージャ呼び出し文
  • 条件分岐文(if/elif/else)
  • switch文
  • for toループ文
  • for eachループ文
  • 早期リターン文

制御構文

if/elif/else

while

for to

例:

for each

コレクションにはリスト型(ilist, slist, flist等)またはstr型を指定できます。str型の場合、1文字ずつイテレーションされます。

例:

str型コレクションの例:

switch

単一文として使用可能なもの:メッセージ送信、変数定義、変数再代入、プロシージャ呼び出し、プリムメソッド呼び出し。

例:

デフォルトパターン _:

_(ワイルドカード)を使用すると、どのパターンにも一致しなかった場合の処理を記述できます。

早期リターン

イベントハンドラーおよびプロシージャの実行を早期に終了します。関数では使用できません。

例:

標準ライブラリ

使用方法

標準ライブラリ関数を使用するには、standardライブラリをimportし、プレフィックス付きで呼び出す必要があります。

各関数の説明では 戻り値型 関数名(引数型 引数名, ...) の形式(Hitoshina Language の宣言と同じ)でシグネチャを示します。

数学関数

int abs(int value)

絶対値を返す。

  • 引数:
    • value (int): 対象となる整数値
  • 戻り値: int — 絶対値

float fabs(float value)

浮動小数点の絶対値を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 浮動小数点の絶対値

float sin(float value)

正弦値を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 正弦値

float cos(float value)

余弦値を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 余弦値

float tan(float value)

正接値を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 正接値

float asin(float value)

逆正弦値を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 逆正弦値

float acos(float value)

逆余弦値を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 逆余弦値

float atan2(float y, float x)

逆正接値を返す。

  • 引数:
    • y (float): Y成分
    • x (float): X成分
  • 戻り値: float — 逆正接値

float log(float value)

自然対数を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 自然対数

float log10(float value)

常用対数を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 常用対数

float pow(float base, float exponent)

累乗を返す。

  • 引数:
    • base (float): 底
    • exponent (float): 指数
  • 戻り値: float — 累乗

float sqrt(float value)

平方根を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: float — 平方根

int ceil(float value)

天井関数(切り上げ)。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: int — 整数

int floor(float value)

床関数(切り下げ)。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: int — 整数

int round(float value)

四捨五入した値を返す。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: int — 四捨五入した値

float frand(float range)

0からrange未満の乱数を返す。

  • 引数:
    • range (float): 乱数の上限(この値未満が返される)
  • 戻り値: float — 0からrange未満の乱数

int mod_pow(int a, int b, int c)

モジュラべき乗 (a^b) mod c を計算。

  • 引数:
    • a (int): 底
    • b (int): 指数
    • c (int): 法(モジュロ)
  • 戻り値: int — (a の b 乗) を c で割った剰余

文字列関数

int string_length(str text)

文字列の長さを返す。

  • 引数:
    • text (str): 対象の文字列
  • 戻り値: int — 文字列の長さ

str get_sub_string(str source, int start, int end)

部分文字列を返す。

  • 引数:
    • source (str): 元の文字列
    • start (int): 開始インデックス(0始まり)
    • end (int): 終了インデックス(0始まり、負値で末尾からの位置)
  • 戻り値: str — 部分文字列

str string_trim(str text, int type)

文字列の前後の空白を削除。

  • 引数:
    • text (str): 対象の文字列
    • type (int): 種別を指定するフラグ値
  • 戻り値: str — 文字列

str to_lower(str text)

文字列を小文字に変換。

  • 引数:
    • text (str): 対象の文字列
  • 戻り値: str — 文字列

str to_upper(str text)

文字列を大文字に変換。

  • 引数:
    • text (str): 対象の文字列
  • 戻り値: str — 文字列

int substring_index(str source, str pattern)

部分文字列の位置を検索。

  • 引数:
    • source (str): 元の文字列
    • pattern (str): 検索パターン文字列
  • 戻り値: int — 部分文字列の位置

str insert_string(str dst, int pos, str src)

文字列を挿入。

  • 引数:
    • dst (str): 対象の文字列
    • pos (int): 挿入位置(0始まりのインデックス)
    • src (str): 元の文字列
  • 戻り値: str — 文字列

str delete_sub_string(str src, int start, int end)

部分文字列を削除。

  • 引数:
    • src (str): 元の文字列
    • start (int): 開始インデックス(0始まり)
    • end (int): 終了インデックス(0始まり、負値で末尾からの位置)
  • 戻り値: str — 文字列

str replace_sub_string(str src, str pattern, str replacement, int count)

部分文字列を置換。

  • 引数:
    • src (str): 元の文字列
    • pattern (str): 検索パターン文字列
    • replacement (str): 置換後の文字列
    • count (int): 置換回数(0で全件置換)
  • 戻り値: str — 文字列

slist parse_string(str src, slist separators, slist spacers)

文字列をリストに分割。

  • 引数:
    • src (str): 元の文字列
    • separators (slist): 区切り文字のリスト
    • spacers (slist): スペーサー文字のリスト(区切りつつ結果に含める)
  • 戻り値: slist — 文字列リスト

slist parse_string_keep_nulls(str src, slist separators, slist spacers)

文字列をリストに分割(空要素保持)。

  • 引数:
    • src (str): 元の文字列
    • separators (slist): 区切り文字のリスト
    • spacers (slist): スペーサー文字のリスト(区切りつつ結果に含める)
  • 戻り値: slist — 文字列リスト

slist csv_to_list(str src)

CSVをリストに変換。

  • 引数:
    • src (str): 元の文字列
  • 戻り値: slist — 文字列リスト

str list_to_csv(slist src)

リストをCSVに変換。

  • 引数:
    • src (slist): 元のリスト
  • 戻り値: str — 文字列

str dump_list_to_string(slist src, str separator)

リストを文字列に結合。

  • 引数:
    • src (slist): 元のリスト
    • separator (str): 区切り文字列
  • 戻り値: str — 文字列

str char(int val)

Unicodeコードポイントから文字を生成。

  • 引数:
    • val (int): 文字を生成するUnicodeコードポイント
  • 戻り値: str — 生成された1文字の文字列

int ord(str val, int index)

文字列中の指定位置の文字のUnicodeコードポイントを取得。

  • 引数:
    • val (str): 対象の文字列
    • index (int): コードポイントを取得する文字位置(0始まり)
  • 戻り値: int — 指定位置の文字のUnicodeコードポイント

リスト関数

int get_list_length(ilist list)

リストの長さを返す(非推奨: .len()メソッドを使用してください)。

  • 引数:
    • list (ilist): 対象の整数リスト
  • 戻り値: int — 整数

int list_find(slist src, slist test)

リスト内のリストを検索。

  • 引数:
    • src (slist): 元のリスト
    • test (slist): 検索対象のリスト
  • 戻り値: int — リスト内のリスト

slist list_sort(slist src, int stride, int ascending)

リストをソート。

  • 引数:
    • src (slist): 元のリスト
    • stride (int): ストライド(処理単位)
    • ascending (int): 昇順なら1、降順なら0
  • 戻り値: slist — 文字列リスト

slist list_random(slist src, int stride)

リストをランダム化。

  • 引数:
    • src (slist): 元のリスト
    • stride (int): ストライド(処理単位)
  • 戻り値: slist — 文字列リスト

slist list_insert(slist dst, slist src, int pos)

リストにリストを挿入。

  • 引数:
    • dst (slist): 対象のリスト
    • src (slist): 元のリスト
    • pos (int): 挿入位置(0始まりのインデックス)
  • 戻り値: slist — 文字列リスト

slist list_replace(slist dst, slist src, int start, int end)

リストの要素を置換。

  • 引数:
    • dst (slist): 対象のリスト
    • src (slist): 元のリスト
    • start (int): 開始インデックス(0始まり)
    • end (int): 終了インデックス(0始まり、負値で末尾からの位置)
  • 戻り値: slist — 文字列リスト

int get_list_entry_type(slist src, int index)

リスト要素の型を取得。

  • 引数:
    • src (slist): 元のリスト
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: int — リスト要素の型

int list_to_int(slist src, int index)

リストから整数を取得。

  • 引数:
    • src (slist): 元のリスト
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: int — リストから整数

float list_to_float(slist src, int index)

リストから浮動小数点を取得。

  • 引数:
    • src (slist): 元のリスト
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: float — リストから浮動小数点

str list_to_string(slist src, int index)

リストから文字列を取得。

  • 引数:
    • src (slist): 元のリスト
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: str — リストから文字列

key list_to_key(slist src, int index)

リストからキーを取得。

  • 引数:
    • src (slist): 元のリスト
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: key — リストからキー

vec list_to_vec(slist src, int index)

リストからベクトルを取得。

  • 引数:
    • src (slist): 元のリスト
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: vec — リストからベクトル

rot list_to_rot(slist src, int index)

リストから回転を取得。

  • 引数:
    • src (slist): 元のリスト
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: rot — リストから回転

float list_statistics(int operation, flist src)

リストの統計値を計算。

  • 引数:
    • operation (int): 統計操作の種別(std::LIST_STAT_*定数を指定)
    • src (flist): 元のリスト
  • 戻り値: float — リストの統計値

slist list_slice(slist src, int start, int end, int stride, int slice_index)

リストからストライド単位でスライスを抽出。

  • 引数:
    • src (slist): スライス対象のリスト
    • start (int): 抽出開始インデックス
    • end (int): 抽出終了インデックス
    • stride (int): ストライド(要素グループのサイズ)
    • slice_index (int): 各ストライド内で抽出する要素のインデックス
  • 戻り値: slist — 抽出された要素のリスト

slist list_strided(slist src, int start, int end, int stride)

リストからストライド単位で部分リストを取得。

  • 引数:
    • src (slist): 部分リスト抽出対象のリスト
    • start (int): 抽出開始インデックス
    • end (int): 抽出終了インデックス
    • stride (int): ストライド(要素グループのサイズ)
  • 戻り値: slist — ストライド抽出された部分リスト

int list_find_next(slist src, slist test, int instance)

リスト内で指定インスタンス番目の一致位置を検索。

  • 引数:
    • src (slist): 検索対象のリスト
    • test (slist): 検索するリスト
    • instance (int): 取得する一致のインスタンス番号(0始まり、-1で最後)
  • 戻り値: int — 一致開始インデックス(見つからなければ -1)

int list_find_strided(slist src, slist test, int start, int end, int stride)

ストライド境界でリスト内の一致位置を検索。

  • 引数:
    • src (slist): 検索対象のリスト
    • test (slist): 検索するリスト
    • start (int): 検索開始インデックス
    • end (int): 検索終了インデックス
    • stride (int): ストライド(一致を許可する境界の間隔)
  • 戻り値: int — 一致開始インデックス(見つからなければ -1)

slist list_sort_strided(slist src, int stride, int stride_index, int ascending)

ストライド単位でリストをソート。

  • 引数:
    • src (slist): ソート対象のリスト
    • stride (int): ストライド(要素グループのサイズ)
    • stride_index (int): ソートキーとするストライド内のインデックス
    • ascending (int): 昇順なら TRUE、降順なら FALSE
  • 戻り値: slist — ソート済みのリスト

型変換関数

int str_to_int(str text)

文字列を整数に変換。

  • 引数:
    • text (str): 対象の文字列
  • 戻り値: int — 整数

float str_to_float(str text)

文字列を浮動小数点に変換。

  • 引数:
    • text (str): 対象の文字列
  • 戻り値: float — 浮動小数点数

str int_to_str(int value)

整数を文字列に変換。

  • 引数:
    • value (int): 対象となる整数値
  • 戻り値: str — 文字列

str float_to_str(float value)

浮動小数点を文字列に変換。

  • 引数:
    • value (float): 対象となる浮動小数点数
  • 戻り値: str — 文字列

検出関数

センサーイベントやタッチイベントで使用する、検出情報を取得する関数群です。num 引数はイベント内の検出インデックス(0始まり)を指定します。

int detected_face(int num)

タッチされた面番号を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: int — タッチされた面番号

str detected_name(int num)

検出されたアバター/オブジェクトの名前を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: str — 検出されたアバター/オブジェクトの名前

key detected_key(int num)

検出されたアバター/オブジェクトのキーを取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: key — 検出されたアバター/オブジェクトのキー

vec detected_pos(int num)

検出されたアバター/オブジェクトの位置を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — 検出されたアバター/オブジェクトの位置

rot detected_rot(int num)

検出されたアバター/オブジェクトの回転を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: rot — 検出されたアバター/オブジェクトの回転

vec detected_vel(int num)

検出されたアバター/オブジェクトの速度を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — 検出されたアバター/オブジェクトの速度

vec detected_grab(int num)

検出されたグラブオフセットを取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — 検出されたグラブオフセット

int detected_type(int num)

検出されたアバター/オブジェクトのタイプを取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: int — 検出されたアバター/オブジェクトのタイプ

key detected_group(int num)

検出されたアバター/オブジェクトのグループキーを取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: key — 検出されたアバター/オブジェクトのグループキー

key detected_owner(int num)

検出されたオブジェクトの所有者キーを取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: key — 検出されたオブジェクトの所有者キー

検出されたリンク番号を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: int — 検出されたリンク番号

vec detected_touch_st(int num)

タッチされたテクスチャ座標(ST)を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — タッチされたテクスチャ座標(ST)

vec detected_touch_uv(int num)

タッチされたテクスチャ座標(UV)を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — タッチされたテクスチャ座標(UV)

vec detected_touch_normal(int num)

タッチされた面の法線を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — タッチされた面の法線

vec detected_touch_binormal(int num)

タッチされた面の従法線を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — タッチされた面の従法線

vec detected_touch_pos(int num)

タッチされたワールド座標を取得。

  • 引数:
    • num (int): イベント内の検出インデックス(0始まり)
  • 戻り値: vec — タッチされたワールド座標

プリムプロパティ関数

key get_owner()

プリムの所有者のキーを取得。

  • 引数: なし
  • 戻り値: key — プリムの所有者のキー

key get_owner_key(key id)

指定されたオブジェクトの所有者キーを取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: key — 指定されたオブジェクトの所有者キー

key get_key()

プリムのキーを取得。

  • 引数: なし
  • 戻り値: key — プリムのキー

str get_prim_name()

プリムの名前を取得。

  • 引数: なし
  • 戻り値: str — プリムの名前

スクリプトが収められているプリムのリンク番号を取得。

  • 引数: なし
  • 戻り値: int — スクリプトが収められているプリムのリンク番号

リンク番号からリンク名を取得。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
  • 戻り値: str — リンク番号からリンク名

vec get_pos()

プリムのワールド位置を取得。

  • 引数: なし
  • 戻り値: vec — プリムのワールド位置

rot get_rot()

プリムのワールド回転を取得。

  • 引数: なし
  • 戻り値: rot — プリムのワールド回転

vec get_scale()

プリムのスケールを取得。

  • 引数: なし
  • 戻り値: vec — プリムのスケール

vec get_local_pos()

プリムのローカル位置を取得。

  • 引数: なし
  • 戻り値: vec — プリムのローカル位置

rot local_rot()

プリムのローカル回転を取得。

  • 引数: なし
  • 戻り値: rot — プリムのローカル回転

vec get_root_pos()

ルートプリムの位置を取得。

  • 引数: なし
  • 戻り値: vec — ルートプリムの位置

rot get_root_rot()

ルートプリムの回転を取得。

  • 引数: なし
  • 戻り値: rot — ルートプリムの回転

float get_alpha(int face)

プリムのアルファ値を取得。

  • 引数:
    • face (int): 面番号(-1で全面)
  • 戻り値: float — プリムのアルファ値

vec get_color(int face)

プリムの色を取得。

  • 引数:
    • face (int): 面番号(-1で全面)
  • 戻り値: vec — プリムの色

str get_texture(int face)

テクスチャ名を取得。

  • 引数:
    • face (int): 面番号(-1で全面)
  • 戻り値: str — テクスチャ名

str get_object_desc()

オブジェクトの説明を取得。

  • 引数: なし
  • 戻り値: str — オブジェクトの説明

key get_creator()

オブジェクトの作成者キーを取得。

  • 引数: なし
  • 戻り値: key — オブジェクトの作成者キー

int get_number_of_prims()

リンクセット内のプリム数を取得。

  • 引数: なし
  • 戻り値: int — リンクセット内のプリム数

int get_number_of_sides()

プリムの面数を取得。

  • 引数: なし
  • 戻り値: int — プリムの面数

リンク番号からキーを取得。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
  • 戻り値: key — リンク番号からキー

int get_object_prim_count(key id)

オブジェクトのプリム数を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: int — オブジェクトのプリム数

float get_mass()

プリムの質量を取得。

  • 引数: なし
  • 戻り値: float — プリムの質量

float get_object_mass(key id)

オブジェクトの質量を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: float — オブジェクトの質量

リンクプリムのパラメータリストを取得。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
    • rules (ilist): ルールリスト(プリムパラメータ定数列)
  • 戻り値: slist — リンクプリムのパラメータリスト

slist get_object_details(key id, ilist params)

オブジェクトの詳細情報を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
    • params (ilist): パラメータリスト
  • 戻り値: slist — オブジェクトの詳細情報

slist get_bounding_box(key object)

オブジェクトのバウンディングボックスを取得。

  • 引数:
    • object (key): バウンディングボックスを取得する対象のキー
  • 戻り値: slist — 最小コーナーと最大コーナーの2ベクトルのリスト

vec get_center_of_mass()

オブジェクトの質量中心を取得。

  • 引数: なし
  • 戻り値: vec — オブジェクトの質量中心のワールド座標

vec get_geometric_center()

オブジェクトの幾何中心を取得。

  • 引数: なし
  • 戻り値: vec — ルートプリム基準の幾何中心オフセット

リンクプリムの面数を取得。

  • 引数:
    • link (int): 対象のリンク番号またはLINK定数
  • 戻り値: int — リンクプリムの面(サイド)数

float get_mass_mks()

オブジェクトの質量をMKS単位(kg)で取得。

  • 引数: なし
  • 戻り値: float — オブジェクトの質量(kg)

float get_max_scale_factor()

オブジェクトを拡大できる最大係数を取得。

  • 引数: なし
  • 戻り値: float — 拡大可能な最大の倍率

float get_min_scale_factor()

オブジェクトを縮小できる最小係数を取得。

  • 引数: なし
  • 戻り値: float — 縮小可能な最小の倍率

slist get_primitive_params(slist params)

プリムのパラメータリストを取得。

  • 引数:
    • params (slist): 取得するPRIM_*定数の指定子リスト
  • 戻り値: slist — 要求したPRIM_*パラメータの値リスト

int scale_by_factor(float scaling_factor)

オブジェクト全体を係数倍にリサイズ。

  • 引数:
    • scaling_factor (float): オブジェクト全体を拡大縮小する係数
  • 戻り値: int — リサイズの成否を示すステータス(成功でTRUE)

vec get_texture_offset(int face)

面のテクスチャオフセットを取得。

  • 引数:
    • face (int): 対象の面番号(ALL_SIDESで全面)
  • 戻り値: vec — 面のテクスチャオフセット(U/Vのベクトル)

float get_texture_rot(int face)

面のテクスチャ回転を取得。

  • 引数:
    • face (int): 対象の面番号(ALL_SIDESで全面)
  • 戻り値: float — 面のテクスチャ回転角(ラジアン)

vec get_texture_scale(int face)

面のテクスチャスケールを取得。

  • 引数:
    • face (int): 対象の面番号(ALL_SIDESで全面)
  • 戻り値: vec — 面のテクスチャスケール(U/Vのベクトル)

slist get_prim_media_params(int face, slist params)

面のメディアパラメータを取得。

  • 引数:
    • face (int): 対象の面番号
    • params (slist): 取得するPRIM_MEDIA_*定数のリスト
  • 戻り値: slist — 要求したメディアパラメータの値リスト

int set_prim_media_params(int face, slist params)

面のメディアパラメータを設定。

  • 引数:
    • face (int): 対象の面番号
    • params (slist): PRIM_MEDIA_*定数と値のパラメータリスト
  • 戻り値: int — 設定の成否を示すステータス(STATUS_OK等)

int clear_prim_media(int face)

面のメディアを消去。

  • 引数:
    • face (int): メディアを消去する面番号
  • 戻り値: int — 消去の成否を示すステータス(STATUS_OK等)

リンクプリムの面のメディアパラメータを取得。

  • 引数:
    • link (int): 対象のリンク番号またはLINK定数
    • face (int): 対象の面番号
    • params (slist): 取得するPRIM_MEDIA_*定数のリスト
  • 戻り値: slist — 要求したメディアパラメータの値リスト

リンクプリムの面のメディアパラメータを設定。

  • 引数:
    • link (int): 対象のリンク番号またはLINK定数
    • face (int): 対象の面番号
    • params (slist): PRIM_MEDIA_*定数と値のパラメータリスト
  • 戻り値: int — 設定の成否を示すステータス(STATUS_OK等)

リンクプリムの面のメディアを消去。

  • 引数:
    • link (int): 対象のリンク番号またはLINK定数
    • face (int): メディアを消去する面番号
  • 戻り値: int — 消去の成否を示すステータス(STATUS_OK等)

インベントリ関数

int get_inventory_type(str name)

指定された名前のインベントリアイテムのタイプを取得。

  • 引数:
    • name (str): 対象の名前
  • 戻り値: int — 指定された名前のインベントリアイテムのタイプ

int get_inventory_num(int type)

指定されたタイプのインベントリアイテム数を取得。

  • 引数:
    • type (int): 種別を指定するフラグ値
  • 戻り値: int — 指定されたタイプのインベントリアイテム数

str get_inventory_name(int type, int index)

指定されたタイプとインデックスのインベントリアイテム名を取得。

  • 引数:
    • type (int): 種別を指定するフラグ値
    • index (int): リスト内のインデックス(0始まり)
  • 戻り値: str — 指定されたタイプとインデックスのインベントリアイテム名

key get_inventory_key(str name)

インベントリアイテムのキーを取得。

  • 引数:
    • name (str): 対象の名前
  • 戻り値: key — インベントリアイテムのキー

key get_inventory_creator(str name)

インベントリアイテムの作成者を取得。

  • 引数:
    • name (str): 対象の名前
  • 戻り値: key — インベントリアイテムの作成者

int get_inventory_perm_mask(str name, int category)

インベントリアイテムのパーミッションマスクを取得。

  • 引数:
    • name (str): 対象の名前
    • category (int): カテゴリを指定する定数値
  • 戻り値: int — インベントリアイテムのパーミッションマスク

int give_agent_inventory(key agent, str folder, slist inventory, slist options)

アバターにインベントリをフォルダで渡す。

  • 引数:
    • agent (key): インベントリを渡す相手のキー
    • folder (str): 渡す際に作成するフォルダ名
    • inventory (slist): 渡すインベントリアイテム名のリスト
    • options (slist): 受け渡しオプションのリスト
  • 戻り値: int — 受け渡しの成否を示すステータス(成功でTRUE)

str get_inventory_desc(str item)

インベントリアイテムの説明を取得。

  • 引数:
    • item (str): 対象のインベントリアイテム名
  • 戻り値: str — インベントリアイテムの説明文字列

str get_inventory_acquire_time(str item)

インベントリアイテムの取得時刻を取得。

  • 引数:
    • item (str): 対象のインベントリアイテム名
  • 戻り値: str — アイテムが追加された日時のタイムスタンプ文字列

key request_inventory_data(str name)

インベントリアイテムのデータをリクエスト。

  • 引数:
    • name (str): データをリクエストするインベントリアイテム名
  • 戻り値: key — インベントリデータ要求の識別キー(dataserverイベントで結果が返る)

アバター/エージェント関数

key name_to_key(str name)

アバター名からキーを取得。

  • 引数:
    • name (str): 対象の名前
  • 戻り値: key — アバター名からキー

str key_to_name(key id)

キーから名前を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: str — キーから名前

int get_agent_info(key id)

エージェント情報フラグを取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: int — エージェント情報フラグ

str get_agent_language(key id)

エージェントの言語設定を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: str — エージェントの言語設定

klist get_agent_list(int scope, ilist options)

エージェントリストを取得。

  • 引数:
    • scope (int): 対象スコープ(AGENT_LIST_*定数)
    • options (ilist): オプションリスト
  • 戻り値: klist — エージェントリスト

vec get_agent_size(key id)

アバターのサイズを取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: vec — アバターのサイズ

str get_display_name(key id)

表示名を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: str — 表示名

str get_username(key id)

ユーザー名を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: str — ユーザー名

key avatar_on_sit_target()

シットターゲット上のアバターキーを取得。

  • 引数: なし
  • 戻り値: key — シットターゲット上のアバターキー

リンクシットターゲット上のアバターキーを取得。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
  • 戻り値: key — リンクシットターゲット上のアバターキー

int get_permissions()

現在のパーミッションフラグを取得。

  • 引数: なし
  • 戻り値: int — 現在のパーミッションフラグ

key get_permissions_key()

パーミッションを付与したアバターのキーを取得。

  • 引数: なし
  • 戻り値: key — パーミッションを付与したアバターのキー

int get_attached()

アタッチメントポイントを取得。

  • 引数: なし
  • 戻り値: int — アタッチメントポイント

int same_group(key id)

同じグループかどうかを判定。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: int — 同じグループかどうか

str get_animation(key id)

アバターのアニメーション名を取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: str — アバターのアニメーション名

klist get_animation_list(key id)

アバターのアニメーションリストを取得。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: klist — アバターのアニメーションリスト

vec get_camera_pos()

カメラのワールド位置を取得。

  • 引数: なし
  • 戻り値: vec — カメラのワールド位置ベクトル

rot get_camera_rot()

カメラのワールド回転を取得。

  • 引数: なし
  • 戻り値: rot — カメラのワールド回転

float get_camera_aspect()

カメラのアスペクト比を取得。

  • 引数: なし
  • 戻り値: float — カメラのアスペクト比(幅÷高さ)

float get_camera_fov()

カメラの視野角(FOV)を取得。

  • 引数: なし
  • 戻り値: float — カメラの視野角(ラジアン)

int is_friend(key agent_id)

指定アバターがフレンドか判定。

  • 引数:
    • agent_id (key): フレンド判定するアバターのキー
  • 戻り値: int — 対象がフレンドなら TRUE、そうでなければ FALSE

int agent_in_experience(key agent)

指定アバターがExperienceに参加しているか判定。

  • 引数:
    • agent (key): Experience参加を判定するアバターのキー
  • 戻り値: int — ExperienceにOptInしていれば TRUE、そうでなければ FALSE

slist get_object_animation_names()

オブジェクトで再生中のアニメーション名一覧を取得。

  • 引数: なし
  • 戻り値: slist — 再生中のオブジェクトアニメーション名のリスト

str get_animation_override(str anim_state)

アニメーション状態のオーバーライド名を取得。

  • 引数:
    • anim_state (str): オーバーライドを取得するアニメーション状態名
  • 戻り値: str — 指定状態に設定されたアニメーション名

slist get_attached_list_filtered(key avatar, slist options)

フィルタ付きでアバターのアタッチメント一覧を取得。

  • 引数:
    • avatar (key): 対象アバターのキー
    • options (slist): フィルタオプションのリスト(ATTACH_*等)
  • 戻り値: slist — フィルタ条件に一致するアタッチメントのリスト

key request_display_name(key id)

アバターの表示名をリクエスト。

  • 引数:
    • id (key): 名前を取得するアバターのキー
  • 戻り値: key — 表示名リクエストの識別キー(dataserverイベントで結果が返る)

key request_username(key id)

アバターのユーザー名をリクエスト。

  • 引数:
    • id (key): 名前を取得するアバターのキー
  • 戻り値: key — ユーザー名リクエストの識別キー(dataserverイベントで結果が返る)

key request_user_key(str username)

ユーザー名からキーをリクエスト。

  • 引数:
    • username (str): キーを取得するユーザー名
  • 戻り値: key — キーリクエストの識別キー(dataserverイベントで結果が返る)

ベクトル/回転関数

float vec_dist(vec a, vec b)

2つのベクトル間の距離を計算。

  • 引数:
    • a (vec): 1つ目のベクトル
    • b (vec): 2つ目のベクトル
  • 戻り値: float — 2つのベクトル間の距離

float vec_mag(vec v)

ベクトルの大きさを計算。

  • 引数:
    • v (vec): 対象のベクトル
  • 戻り値: float — ベクトルの大きさ

vec vec_norm(vec v)

ベクトルを正規化。

  • 引数:
    • v (vec): 対象のベクトル
  • 戻り値: vec — 3次元ベクトル

rot rot_between(vec start, vec end)

2つのベクトル間の回転を計算。

  • 引数:
    • start (vec): 開始ベクトル
    • end (vec): 終了ベクトル
  • 戻り値: rot — 2つのベクトル間の回転

rot euler_to_rot(vec v)

オイラー角を回転に変換。

  • 引数:
    • v (vec): 対象のベクトル
  • 戻り値: rot — 回転(クォータニオン)

vec rot_to_euler(rot r)

回転をオイラー角に変換。

  • 引数:
    • r (rot): 対象の回転
  • 戻り値: vec — 3次元ベクトル

rot axes_to_rot(vec fwd, vec left, vec up)

3軸から回転を生成。

  • 引数:
    • fwd (vec): 前方ベクトル
    • left (vec): 左方ベクトル
    • up (vec): 上方ベクトル
  • 戻り値: rot — 3軸から回転

vec rot_to_fwd(rot r)

回転の前方ベクトルを取得。

  • 引数:
    • r (rot): 対象の回転
  • 戻り値: vec — 回転の前方ベクトル

vec rot_to_left(rot r)

回転の左方ベクトルを取得。

  • 引数:
    • r (rot): 対象の回転
  • 戻り値: vec — 回転の左方ベクトル

vec rot_to_up(rot r)

回転の上方ベクトルを取得。

  • 引数:
    • r (rot): 対象の回転
  • 戻り値: vec — 回転の上方ベクトル

float angle_between(rot a, rot b)

2つの回転間の角度を計算。

  • 引数:
    • a (rot): 1つ目の回転
    • b (rot): 2つ目の回転
  • 戻り値: float — 2つの回転間の角度

rot axis_angle_to_rot(vec axis, float angle)

軸と角度から回転を生成。

  • 引数:
    • axis (vec): 回転軸ベクトル
    • angle (float): angle(float型)
  • 戻り値: rot — 軸と角度から回転

vec linear_to_srgb(vec linear)

リニア色空間をsRGB色空間に変換。

  • 引数:
    • linear (vec): 変換元のリニア色空間ベクトル
  • 戻り値: vec — sRGB色空間のベクトル

vec srgb_to_linear(vec srgb)

sRGB色空間をリニア色空間に変換。

  • 引数:
    • srgb (vec): 変換元のsRGB色空間ベクトル
  • 戻り値: vec — リニア色空間のベクトル

HTTP関数

key http_request(str url, slist params, str body)

HTTPリクエストを送信。

  • 引数:
    • url (str): 対象のURL
    • params (slist): パラメータリスト
    • body (str): HTTPボディ
  • 戻り値: key — HTTPリクエスト

int get_free_urls()

利用可能なURL数を取得。

  • 引数: なし
  • 戻り値: int — 利用可能なURL数

str get_http_header(key request_id, str header)

HTTPヘッダーを取得。

  • 引数:
    • request_id (key): HTTPリクエストID
    • header (str): ヘッダー名
  • 戻り値: str — HTTPヘッダー

str escape_url(str url)

URLをエスケープ。

  • 引数:
    • url (str): 対象のURL
  • 戻り値: str — 文字列

str unescape_url(str url)

URLをアンエスケープ。

  • 引数:
    • url (str): 対象のURL
  • 戻り値: str — 文字列

key request_url()

URLをリクエスト。

  • 引数: なし
  • 戻り値: key — キー(UUID)

key request_secure_url()

セキュアURLをリクエスト。

  • 引数: なし
  • 戻り値: key — キー(UUID)

物理/移動関数

vec get_force()

プリムに加わる力を取得。

  • 引数: なし
  • 戻り値: vec — プリムに加わる力

vec get_torque()

プリムに加わるトルクを取得。

  • 引数: なし
  • 戻り値: vec — プリムに加わるトルク

vec get_vel()

プリムの速度を取得。

  • 引数: なし
  • 戻り値: vec — プリムの速度

vec get_accel()

プリムの加速度を取得。

  • 引数: なし
  • 戻り値: vec — プリムの加速度

vec get_omega()

プリムの角速度を取得。

  • 引数: なし
  • 戻り値: vec — プリムの角速度

slist get_physics_material()

プリムの物理マテリアルを取得。

  • 引数: なし
  • 戻り値: slist — 重力係数・反発・摩擦・密度を含む物理マテリアルのリスト

土地/環境関数

float ground(vec offset)

地面の高さを取得。

  • 引数:
    • offset (vec): オフセット位置
  • 戻り値: float — 地面の高さ

float water(vec offset)

水面の高さを取得。

  • 引数:
    • offset (vec): オフセット位置
  • 戻り値: float — 水面の高さ

vec wind(vec offset)

風のベクトルを取得。

  • 引数:
    • offset (vec): オフセット位置
  • 戻り値: vec — 風のベクトル

vec get_sun_direction()

太陽の方向を取得。

  • 引数: なし
  • 戻り値: vec — 太陽の方向

str get_region_name()

リージョン名を取得。

  • 引数: なし
  • 戻り値: str — リージョン名

vec get_region_corner()

リージョンのコーナー座標を取得。

  • 引数: なし
  • 戻り値: vec — リージョンのコーナー座標

float get_region_fps()

リージョンのFPSを取得。

  • 引数: なし
  • 戻り値: float — リージョンのFPS

float get_region_time_dilation()

リージョンのタイムディレーションを取得。

  • 引数: なし
  • 戻り値: float — リージョンのタイムディレーション

int get_region_agent_count()

リージョン内のエージェント数を取得。

  • 引数: なし
  • 戻り値: int — リージョン内のエージェント数

float get_sim_stats(int stat_type)

シミュレーター統計を取得。

  • 引数:
    • stat_type (int): 統計種別を指定する定数
  • 戻り値: float — シミュレーター統計

str get_env(str name)

環境変数を取得。

  • 引数:
    • name (str): 対象の名前
  • 戻り値: str — 環境変数

int get_parcel_flags(vec pos)

パーセルフラグを取得。

  • 引数:
    • pos (vec): 位置(リージョン座標)
  • 戻り値: int — パーセルフラグ

slist get_parcel_details(vec pos, ilist params)

パーセル詳細情報を取得。

  • 引数:
    • pos (vec): 位置(リージョン座標)
    • params (ilist): パラメータリスト
  • 戻り値: slist — パーセル詳細情報

int get_parcel_prim_count(vec pos, int category, int sim_wide)

パーセルのプリム数を取得。

  • 引数:
    • pos (vec): 位置(リージョン座標)
    • category (int): カテゴリを指定する定数値
    • sim_wide (int): リージョン全体を対象とするなら1、パーセル内なら0
  • 戻り値: int — パーセルのプリム数

int get_day_length()

パーセルの一日の長さ(秒)を取得。

  • 引数: なし
  • 戻り値: int — パーセルの一日の長さ(秒)

int get_day_offset()

パーセルの一日のオフセット(秒)を取得。

  • 引数: なし
  • 戻り値: int — パーセルの一日のオフセット(秒)

float get_time_of_day()

パーセルの一日の中の現在時刻(秒)を取得。

  • 引数: なし
  • 戻り値: float — パーセルの一日の中の経過秒数

int get_region_day_length()

リージョンの一日の長さ(秒)を取得。

  • 引数: なし
  • 戻り値: int — リージョンの一日の長さ(秒)

int get_region_day_offset()

リージョンの一日のオフセット(秒)を取得。

  • 引数: なし
  • 戻り値: int — リージョンの一日のオフセット(秒)

float get_region_time_of_day()

リージョンの一日の中の現在時刻(秒)を取得。

  • 引数: なし
  • 戻り値: float — リージョンの一日の中の経過秒数

vec get_moon_direction()

パーセルの月の方向ベクトルを取得。

  • 引数: なし
  • 戻り値: vec — パーセルの月の方向を示す単位ベクトル

rot get_moon_rotation()

パーセルの月の回転を取得。

  • 引数: なし
  • 戻り値: rot — パーセルの月に適用される回転

rot get_sun_rotation()

パーセルの太陽の回転を取得。

  • 引数: なし
  • 戻り値: rot — パーセルの太陽に適用される回転

vec get_region_moon_direction()

リージョンの月の方向ベクトルを取得。

  • 引数: なし
  • 戻り値: vec — リージョンの月の方向を示す単位ベクトル

rot get_region_moon_rotation()

リージョンの月の回転を取得。

  • 引数: なし
  • 戻り値: rot — リージョンの月に適用される回転

vec get_region_sun_direction()

リージョンの太陽の方向ベクトルを取得。

  • 引数: なし
  • 戻り値: vec — リージョンの太陽の方向を示す単位ベクトル

rot get_region_sun_rotation()

リージョンの太陽の回転を取得。

  • 引数: なし
  • 戻り値: rot — リージョンの太陽に適用される回転

slist get_environment(vec pos, slist params)

指定位置の環境設定を取得。

  • 引数:
    • pos (vec): 環境を取得する位置ベクトル
    • params (slist): 取得する環境パラメータの指定子リスト
  • 戻り値: slist — 要求した環境パラメータの値リスト

int set_environment(vec position, slist params)

指定位置に環境設定を適用。

  • 引数:
    • position (vec): 環境を適用する位置ベクトル
    • params (slist): 適用する環境パラメータのリスト
  • 戻り値: int — 適用の成否を示すステータス(成功でTRUE)

int replace_environment(vec position, str environment, int track_no, int day_length, int day_offset)

指定位置の環境を昼サイクルごと置換。

  • 引数:
    • position (vec): 環境を置換する位置ベクトル
    • environment (str): 適用する環境設定アセット名またはUUID
    • track_no (int): 対象の環境トラック番号
    • day_length (int): 一日の長さ(秒)
    • day_offset (int): 一日のオフセット(秒)
  • 戻り値: int — 置換の成否を示すステータス(成功でTRUE)

int set_agent_environment(key agent_id, float transition, slist params)

エージェントの環境設定を適用。

  • 引数:
    • agent_id (key): 対象エージェントのキー
    • transition (float): 環境遷移にかける時間(秒)
    • params (slist): 適用する環境パラメータのリスト
  • 戻り値: int — 適用の成否を示すステータス(成功でTRUE)

int replace_agent_environment(key agent_id, float transition, str environment)

エージェントの環境を置換。

  • 引数:
    • agent_id (key): 対象エージェントのキー
    • transition (float): 環境遷移にかける時間(秒)
    • environment (str): 適用する環境設定アセット名またはUUID
  • 戻り値: int — 置換の成否を示すステータス(成功でTRUE)

int set_ground_texture(slist changes)

リージョンの地形テクスチャを設定。

  • 引数:
    • changes (slist): 地形テクスチャの変更内容リスト
  • 戻り値: int — 地形テクスチャ設定の結果ステータス

slist parcel_media_query(slist query)

パーセルメディアの状態を問い合わせ。

  • 引数:
    • query (slist): 問い合わせるPARCEL_MEDIA_COMMAND_*定数のリスト
  • 戻り値: slist — 問い合わせ結果の値リスト

int manage_estate_access(int action, key avatar)

Estateアクセスリストを管理。

  • 引数:
    • action (int): 操作種別を示すESTATE_ACCESS_*定数
    • avatar (key): 対象のアバターまたはグループのキー
  • 戻り値: int — 操作の成否を示すステータス(成功でTRUE)

int return_objects_by_id(klist objects)

指定IDのオブジェクト群を所有者へ返却。

  • 引数:
    • objects (klist): 返却するオブジェクトのキーリスト
  • 戻り値: int — 返却したオブジェクト数、またはエラー時の負の値

int return_objects_by_owner(key owner, int scope)

指定所有者のオブジェクト群を返却。

  • 引数:
    • owner (key): 返却対象オブジェクトの所有者キー
    • scope (int): 返却範囲を示す定数(OBJECT_RETURN_*)
  • 戻り値: int — 返却したオブジェクト数、またはエラー時の負の値

int get_parcel_max_prims(vec pos, int sim_wide)

パーセルの最大プリム数を取得。

  • 引数:
    • pos (vec): 対象パーセル内の位置ベクトル
    • sim_wide (int): リージョン全体の合計ならTRUE、パーセル単体ならFALSE
  • 戻り値: int — パーセルに配置可能な最大プリム数

slist get_parcel_prim_owners(vec pos)

パーセル上のプリム所有者一覧を取得。

  • 引数:
    • pos (vec): 対象パーセル内の位置ベクトル
  • 戻り値: slist — 所有者キーとプリム数が交互に並ぶリスト

str get_parcel_music_url()

パーセルの音楽ストリームURLを取得。

  • 引数: なし
  • 戻り値: str — パーセルの音楽ストリームURL(権限がなければ空文字列)

vec ground_slope(vec offset)

指定位置の地面の傾きを取得。

  • 引数:
    • offset (vec): オブジェクト位置からのオフセットベクトル
  • 戻り値: vec — 指定位置の地面の傾きを示すベクトル

vec ground_normal(vec offset)

指定位置の地面の法線を取得。

  • 引数:
    • offset (vec): オブジェクト位置からのオフセットベクトル
  • 戻り値: vec — 指定位置の地面の法線ベクトル

vec ground_contour(vec offset)

指定位置の地面の輪郭ベクトルを取得。

  • 引数:
    • offset (vec): オブジェクト位置からのオフセットベクトル
  • 戻り値: vec — 指定位置の地面の輪郭(等高線方向)ベクトル

int edge_of_world(vec pos, vec dir)

指定方向にリージョン境界があるか判定。

  • 引数:
    • pos (vec): 判定の起点となる位置ベクトル
    • dir (vec): 判定する方向ベクトル
  • 戻り値: int — 指定方向にリージョン境界があれば TRUE、なければ FALSE

エンコーディング/暗号関数

str md5(str src, int nonce)

MD5ハッシュを計算。

  • 引数:
    • src (str): 元の文字列
    • nonce (int): ノンス値(0で無し)
  • 戻り値: str — MD5ハッシュ

str sha1(str src)

SHA1ハッシュを計算。

  • 引数:
    • src (str): 元の文字列
  • 戻り値: str — SHA1ハッシュ

str sha256(str src)

SHA256ハッシュを計算。

  • 引数:
    • src (str): 元の文字列
  • 戻り値: str — SHA256ハッシュ

str base64_encode(str src)

文字列をBase64エンコード。

  • 引数:
    • src (str): 元の文字列
  • 戻り値: str — 文字列

str base64_decode(str src)

Base64文字列をデコード。

  • 引数:
    • src (str): 元の文字列
  • 戻り値: str — 文字列

str integer_to_base64(int number)

整数をBase64エンコード。

  • 引数:
    • number (int): 対象の整数
  • 戻り値: str — 文字列

int base64_to_integer(str src)

Base64文字列を整数にデコード。

  • 引数:
    • src (str): 元の文字列
  • 戻り値: int — 整数

str xor_base64(str s1, str s2)

XOR Base64エンコード。

  • 引数:
    • s1 (str): 1つ目の文字列
    • s2 (str): 2つ目の文字列
  • 戻り値: str — 文字列

str json_get_value(str json, slist specifiers)

JSON値を取得。

  • 引数:
    • json (str): JSON文字列
    • specifiers (slist): JSONパス指定子のリスト
  • 戻り値: str — JSON値

str json_set_value(str json, slist specifiers, str value)

JSON値を設定。

  • 引数:
    • json (str): JSON文字列
    • specifiers (slist): JSONパス指定子のリスト
    • value (str): 対象となる文字列
  • 戻り値: str — 文字列

slist json_to_list(str src)

JSON文字列をリストに変換。

  • 引数:
    • src (str): リストに変換するJSON文字列
  • 戻り値: slist — JSONの要素を展開したリスト

str list_to_json(str json_type, slist values)

リストをJSON文字列に変換。

  • 引数:
    • json_type (str): 生成するJSONの種別(JSON_ARRAY または JSON_OBJECT)
    • values (slist): JSONに変換する値のリスト
  • 戻り値: str — 生成されたJSON文字列

str json_value_type(str json, slist specifiers)

JSON内の指定位置の値の型を取得。

  • 引数:
    • json (str): 型を調べるJSON文字列
    • specifiers (slist): JSON内の参照先を示す指定子のリスト
  • 戻り値: str — 値の型を示すJSON_*定数文字列

int hash(str val)

文字列の32ビットハッシュ値を計算。

  • 引数:
    • val (str): ハッシュを計算する文字列
  • 戻り値: int — 32ビットのハッシュ整数

str hmac(str private_key, str msg, str algorithm)

メッセージのHMACを計算。

  • 引数:
    • private_key (str): HMACに用いる秘密鍵
    • msg (str): HMACを計算する対象メッセージ
    • algorithm (str): 使用するハッシュアルゴリズム(md5/sha1/sha256等)
  • 戻り値: str — 16進数エンコードされたHMACダイジェスト

str compute_hash(str message, str algorithm)

指定アルゴリズムでメッセージのハッシュを計算。

  • 引数:
    • message (str): ハッシュを計算する対象メッセージ
    • algorithm (str): 使用するハッシュアルゴリズム(md5/sha1/sha256等)
  • 戻り値: str — 16進数エンコードされたハッシュダイジェスト

key generate_key()

ランダムなUUIDキーを生成。

  • 引数: なし
  • 戻り値: key — 生成されたランダムなキー

str sign_rsa(str private_key, str msg, str algorithm)

RSA秘密鍵でメッセージに署名。

  • 引数:
    • private_key (str): 署名に用いるRSA秘密鍵
    • msg (str): 署名する対象メッセージ
    • algorithm (str): 使用するハッシュアルゴリズム
  • 戻り値: str — Base64エンコードされた署名

int verify_rsa(str public_key, str msg, str signature, str algorithm)

RSA公開鍵で署名を検証。

  • 引数:
    • public_key (str): 検証に用いるRSA公開鍵
    • msg (str): 検証する対象メッセージ
    • signature (str): 検証する署名
    • algorithm (str): 署名生成に使用したハッシュアルゴリズム
  • 戻り値: int — 署名が有効なら TRUE、無効なら FALSE

時間/日付関数

float get_time()

スクリプト実行時間を取得。

  • 引数: なし
  • 戻り値: float — スクリプト実行時間

float get_and_reset_time()

スクリプト実行時間を取得しリセット。

  • 引数: なし
  • 戻り値: float — 浮動小数点数

str get_timestamp()

タイムスタンプ文字列を取得。

  • 引数: なし
  • 戻り値: str — タイムスタンプ文字列

int get_unix_time()

Unix時間を取得。

  • 引数: なし
  • 戻り値: int — Unix時間

float get_gmt_time()

GMT時間を取得。

  • 引数: なし
  • 戻り値: float — GMT時間

float get_wall_clock()

ウォールクロック時間を取得。

  • 引数: なし
  • 戻り値: float — ウォールクロック時間

str get_date()

日付文字列を取得。

  • 引数: なし
  • 戻り値: str — 日付文字列

システム関数

str script_name()

スクリプト名を取得。

  • 引数: なし
  • 戻り値: str — スクリプト名

str read_from_lsd(str name)

linksetデータストアの値を取得。

  • 引数:
    • name (str): 対象の名前
  • 戻り値: str — linksetデータストアの値

slist find_lsd_keys(str pattern)

linksetデータストアからパターンに一致するキー名のリストを取得。

  • 引数:
    • pattern (str): 検索パターン文字列
  • 戻り値: slist — linksetデータストアからパターンに一致するキー名のリスト

int used_mem_kb()

使用中メモリをKB単位で取得。

  • 引数: なし
  • 戻り値: int — 整数

int free_mem_kb()

空きメモリをKB単位で取得。

  • 引数: なし
  • 戻り値: int — 整数

int free_lsd_kb()

LSD空き容量をKB単位で取得。

  • 引数: なし
  • 戻り値: int — 整数

key get_notecard_line(str name, int line)

ノートカードの行を読み取り。

  • 引数:
    • name (str): 対象の名前
    • line (int): 行番号(0始まり)
  • 戻り値: key — ノートカードの行

key get_number_of_notecard_lines(str name)

ノートカードの行数を取得。

  • 引数:
    • name (str): 対象の名前
  • 戻り値: key — ノートカードの行数

key request_agent_data(key id, int data)

エージェントデータをリクエスト。

  • 引数:
    • id (key): 対象のキー(UUID)
    • data (int): データ種別を指定する定数
  • 戻り値: key — キー(UUID)

key request_simulator_data(str sim_name, int data)

シミュレーターデータをリクエスト。

  • 引数:
    • sim_name (str): シミュレーター名
    • data (int): データ種別を指定する定数
  • 戻り値: key — キー(UUID)

int over_my_land(key id)

指定キーのオブジェクトが自分の土地上にあるか判定。

  • 引数:
    • id (key): 対象のキー(UUID)
  • 戻り値: int — 整数

key get_land_owner_at(vec pos)

指定位置の土地所有者キーを取得。

  • 引数:
    • pos (vec): 位置(リージョン座標)
  • 戻り値: key — 指定位置の土地所有者キー

int delete_from_lsd(str name)

linksetデータストアから非保護のキーを削除。

  • 引数:
    • name (str): 削除するキー名
  • 戻り値: int — 削除の成否を示すステータスコード(LINKSETDATA_*)

int delete_protected_from_lsd(str name, str pass)

linksetデータストアからパスフレーズ付き保護キーを削除。

  • 引数:
    • name (str): 削除する保護キー名
    • pass (str): 保護キーのパスフレーズ
  • 戻り値: int — 削除の成否を示すステータスコード(LINKSETDATA_*)

slist delete_found_from_lsd(str pattern, str pass)

linksetデータストアからパターンに一致するキーを一括削除。

  • 引数:
    • pattern (str): 削除対象キーに一致する正規表現パターン
    • pass (str): 保護キーのパスフレーズ(非保護のみ削除なら空文字列)
  • 戻り値: slist — 削除されたキー数とスキップされたキー数の2要素リスト

str read_protected_from_lsd(str name, str pass)

linksetデータストアからパスフレーズ付き保護キーの値を取得。

  • 引数:
    • name (str): 値を取得する保護キー名
    • pass (str): 保護キーのパスフレーズ
  • 戻り値: str — キーに対応する値(存在しないか認証失敗なら空文字列)

int write_protected_to_lsd(str name, str value, str pass)

linksetデータストアにパスフレーズ付き保護キーと値を書き込む。

  • 引数:
    • name (str): 書き込む保護キー名
    • value (str): キーに対応する値
    • pass (str): 保護キーのパスフレーズ
  • 戻り値: int — 書き込みの成否を示すステータスコード(LINKSETDATA_*)

int count_lsd_keys()

linksetデータストアのキー総数を取得。

  • 引数: なし
  • 戻り値: int — 格納されているキーの総数

int count_found_lsd_keys(str pattern)

linksetデータストアでパターンに一致するキー数を取得。

  • 引数:
    • pattern (str): 数える対象キーに一致する正規表現パターン
  • 戻り値: int — パターンに一致するキーの個数

slist list_lsd_keys(int first, int count)

linksetデータストアのキー一覧を取得。

  • 引数:
    • first (int): 取得を開始するキーのインデックス(0以上)
    • count (int): 取得するキーの最大個数
  • 戻り値: slist — キー名の文字列リスト

Experience キーバリューストア関数

Experience に紐付くキーバリューストアを操作する関数群です。いずれもトランザクション ID(key 型)を返す非同期関数で、結果は #dataserver イベントで受け取ります。Experience の利用許可と接続が必要です。

key create_key_value(str k, str v)

Experienceキーバリューストアにキーと値を新規作成。

  • 引数:
    • k (str): キー文字列
    • v (str): 値文字列
  • 戻り値: key — キー(UUID)

key read_key_value(str k)

Experienceキーバリューストアからキーに対応する値を取得。

  • 引数:
    • k (str): キー文字列
  • 戻り値: key — Experienceキーバリューストアからキーに対応する値

key update_key_value(str k, str v, int checked, str ovalue)

Experienceキーバリューストアのキーに対応する値を更新。

  • 引数:
    • k (str): キー文字列
    • v (str): 値文字列
    • checked (int): 1なら旧値検証あり、0なら無条件更新
    • ovalue (str): 旧値(checked=1時に照合)
  • 戻り値: key — キー(UUID)

key delete_key_value(str k)

Experienceキーバリューストアからキーを削除。

  • 引数:
    • k (str): キー文字列
  • 戻り値: key — キー(UUID)

key data_size_key_value()

Experienceキーバリューストアの使用バイト数と上限を取得。

  • 引数: なし
  • 戻り値: key — Experienceキーバリューストアの使用バイト数と上限

key keys_key_value(int first)

Experienceキーバリューストアのキー一覧を取得。

  • 引数:
    • first (int): 取得開始インデックス(0始まり)
  • 戻り値: key — Experienceキーバリューストアのキー一覧

key key_count_key_value()

Experienceキーバリューストアのキー総数を取得。

  • 引数: なし
  • 戻り値: key — Experienceキーバリューストアのキー総数

標準ライブラリ定数

標準ライブラリには、LSL組み込み定数に対応する定数が定義されています。import standard as std; でインポート後、std::ZERO_VECTOR のようにアクセスします。

ベクトル・回転定数:

定数型値説明
ZERO_VECTORvec<0.0, 0.0, 0.0>ゼロベクトル
ZERO_ROTATIONrot<0.0, 0.0, 0.0, 1.0>単位回転
TOUCH_INVALID_TEXCOORDvec<-1.0, -1.0, 0.0>タッチ無効テクスチャ座標
TOUCH_INVALID_VECTORvec<0.0, 0.0, 0.0>タッチ無効ベクトル

上記以外の LSL 組み込み定数(LIST_STAT_MEAN、AGENT_LIST_REGION、PARCEL_DETAILS_NAME など)も、同じ名前に std:: を付けて参照できます(例: std::LIST_STAT_MEAN)。LSL 出力では同名の LSL 定数になります。

注: ライブラリ関数内で標準ライブラリ定数を使用し、その関数を .hltest でテストする場合も、定数は正しく解決されます。

標準プロシージャ

使用方法

標準プロシージャを使用するには、standardをincludeし、エイリアス付きで呼び出す必要があります。

各プロシージャの説明では プロシージャ名(引数型 引数名, ...) の形式でシグネチャを示します。プロシージャは戻り値を持ちません。

デバッグ/ロギング

debug_say(str message)

デバッグメッセージをオーナーに送信します。

  • 引数:
    • message (str): 送信するメッセージ

log(str level, ...str args)

ログレベル付きメッセージを出力します(可変引数対応)。

  • 引数:
    • level (str): ログレベル(INFO/WARN/ERROR等)
    • ...args (str, 可変長): 追加の引数(0個以上)

通信

say(str message)

チャンネル0でメッセージを発言します。

  • 引数:
    • message (str): 送信するメッセージ

say_channel(int channel, str message)

指定チャンネルでメッセージを発言します。

  • 引数:
    • channel (int): チャンネル番号
    • message (str): 送信するメッセージ
  • 別名: say_on_channel

whisper(str message)

チャンネル0でささやきます。

  • 引数:
    • message (str): 送信するメッセージ

shout(str message)

チャンネル0で叫びます。

  • 引数:
    • message (str): 送信するメッセージ

region_say(int channel, str message)

リージョン全体にメッセージを送信します。

  • 引数:
    • channel (int): チャンネル番号
    • message (str): 送信するメッセージ

owner_say(str message)

オーナーにのみメッセージを送信します。

  • 引数:
    • message (str): 送信するメッセージ

im(key avatar, str message)

アバターにIMを送信します。

  • 引数:
    • avatar (key): 対象アバターのキー
    • message (str): 送信するメッセージ

リンクセット内のスクリプトにメッセージを送信します。

  • 引数:
    • link_num (int): リンク番号(LINK_*定数も使用可)
    • num (int): イベント内の検出インデックス(0始まり)
    • str (str): str(str型)
    • id (key): 対象のキー(UUID)

listen(int channel, str name, key id, str message)

チャンネルをリッスンします。

  • 引数:
    • channel (int): チャンネル番号
    • name (str): 対象の名前
    • id (key): 対象のキー(UUID)
    • message (str): 送信するメッセージ

listen_remove(int handle)

リッスンハンドルを削除します。

  • 引数:
    • handle (int): 操作対象のハンドル

listen_control(int handle, int active)

リッスンハンドルを有効/無効にします。

  • 引数:
    • handle (int): 操作対象のハンドル
    • active (int): 1で有効、0で無効

play_sound(str sound, float volume)

指定したサウンドを再生します。

  • 引数:
    • sound (str): サウンドアイテム名またはUUID文字列
    • volume (float): 音量(0.0〜1.0)

タイマー

set_timer(float seconds)

タイマーイベントの間隔を秒単位で設定します。

  • 引数:
    • seconds (float): 秒数

sleep(float seconds)

指定した秒数スクリプトの実行を一時停止します。

  • 引数:
    • seconds (float): 秒数

reset_time()

スクリプト実行時間をリセット。

  • 引数: なし

プリム操作

set_text(str text, vec color, float alpha)

プリムのフローティングテキストを設定します。

  • 引数:
    • text (str): 対象の文字列
    • color (vec): 色(RGB各0.0〜1.0)
    • alpha (float): アルファ値(0.0〜1.0)

set_color(vec color, int face)

プリムの色を設定します。

  • 引数:
    • color (vec): 色(RGB各0.0〜1.0)
    • face (int): 面番号(-1で全面)

set_alpha(float alpha, int face)

プリムの透明度を設定します。

  • 引数:
    • alpha (float): アルファ値(0.0〜1.0)
    • face (int): 面番号(-1で全面)

set_pos(vec pos)

プリムの位置を設定します。

  • 引数:
    • pos (vec): 位置(リージョン座標)

set_rot(rot rot)

プリムの回転を設定します。

  • 引数:
    • rot (rot): 回転(クォータニオン)

set_scale(vec scale)

プリムのスケールを設定します。

  • 引数:
    • scale (vec): スケール(各軸のサイズ)

set_local_rot(rot rotation)

ローカル座標系でプリムの回転を設定します。

  • 引数:
    • rotation (rot): 対象の回転

リンクの色とアルファを設定します。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
    • face (int): 面番号(-1で全面)
    • color (vec): 色(RGB各0.0〜1.0)
    • alpha (float): アルファ値(0.0〜1.0)

リンクプリムのアルファを設定。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
    • alpha (float): アルファ値(0.0〜1.0)
    • face (int): 面番号(-1で全面)

リンクプリムのテクスチャを設定。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
    • texture (str): テクスチャ名またはUUID
    • face (int): 面番号(-1で全面)

リンクプリムのパラメータを設定。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
    • rules (slist): ルールリスト(プリムパラメータ定数列)

set_texture(str texture, int face)

プリムのテクスチャを設定。

  • 引数:
    • texture (str): テクスチャ名またはUUID
    • face (int): 面番号(-1で全面)

set_object_name(str name)

オブジェクト名を設定。

  • 引数:
    • name (str): 対象の名前

set_object_desc(str desc)

オブジェクトの説明を設定。

  • 引数:
    • desc (str): 説明文

set_region_pos(vec pos)

リージョン内位置を設定。

  • 引数:
    • pos (vec): 位置(リージョン座標)

set_status(int status, int value)

プリムステータスフラグを設定。

  • 引数:
    • status (int): 状態フラグ
    • value (int): 対象となる整数値

set_click_action(int action)

クリックアクションを設定。

  • 引数:
    • action (int): クリックアクション定数(CLICK_ACTION_*)

set_sit_text(str text)

シットテキストを設定。

  • 引数:
    • text (str): 対象の文字列

set_touch_text(str text)

タッチテキストを設定。

  • 引数:
    • text (str): 対象の文字列

set_buoyancy(float buoyancy)

浮力を設定。

  • 引数:
    • buoyancy (float): 浮力(0で無効、1で重力相殺)

target_omega(vec axis, float spinrate, float gain)

回転アニメーションを設定。

  • 引数:
    • axis (vec): 回転軸ベクトル
    • spinrate (float): 回転速度(ラジアン/秒)
    • gain (float): ゲイン

volume_detect(int detect)

ボリューム検出を設定。

  • 引数:
    • detect (int): 1で検出、0で無効

die()

プリムを削除します。

  • 引数: なし

sit_target(vec offset, rot rot)

シットターゲットを設定します。

  • 引数:
    • offset (vec): オフセット位置
    • rot (rot): 回転(クォータニオン)

unsit(key id)

アバターを強制的に立たせます。

  • 引数:
    • id (key): 対象のキー(UUID)

オブジェクト操作

rez_object(str inventory, vec pos, vec vel, rot rot, int param)

オブジェクトをRez。

  • 引数:
    • inventory (str): インベントリアイテム名
    • pos (vec): 位置(リージョン座標)
    • vel (vec): 速度ベクトル
    • rot (rot): 回転(クォータニオン)
    • param (int): パラメータ識別子(または起動パラメータ)

rez_at_root(str inventory, vec pos, vec vel, rot rot, int param)

オブジェクトをルート位置でRez。

  • 引数:
    • inventory (str): インベントリアイテム名
    • pos (vec): 位置(リージョン座標)
    • vel (vec): 速度ベクトル
    • rot (rot): 回転(クォータニオン)
    • param (int): パラメータ識別子(または起動パラメータ)

give_inventory(key destination, str inventory)

インベントリアイテムを渡す。

  • 引数:
    • destination (key): 送信先のキー
    • inventory (str): インベントリアイテム名

remove_inventory(str name)

インベントリアイテムを削除。

  • 引数:
    • name (str): 対象の名前

break_link(int linknum)

リンクを解除。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)

全リンクを解除。

  • 引数: なし

create_link(key target, int parent)

リンクを作成。

  • 引数:
    • target (key): 対象オブジェクトのキー
    • parent (int): 親リンクなら1、子リンクなら0

allow_inventory_drop(int add)

インベントリドロップを許可。

  • 引数:
    • add (int): 1で許可、0で禁止

give_money(key destination, int amount)

リンデンドルを送金。

  • 引数:
    • destination (key): 送信先のキー
    • amount (int): 金額(リンデンドル)

set_pay_price(int price, slist buttons)

支払い価格を設定。

  • 引数:
    • price (int): 価格(リンデンドル)
    • buttons (slist): ボタンラベル文字列のリスト

clear_camera_params()

カメラパラメータをクリア。

  • 引数: なし

set_camera_params(slist rules)

カメラパラメータを設定。

  • 引数:
    • rules (slist): CAMERA_*定数と値のパラメータリスト

set_camera_at_offset(vec offset)

シット時のカメラ注視点オフセットを設定。

  • 引数:
    • offset (vec): カメラ注視点のローカルオフセット

set_camera_eye_offset(vec offset)

シット時のカメラ視点オフセットを設定。

  • 引数:
    • offset (vec): カメラ視点のローカルオフセット

リンクプリムのカメラ視点・注視点を設定。

  • 引数:
    • link (int): 対象のリンク番号またはLINK定数
    • eye (vec): カメラ視点のローカルオフセット
    • at (vec): カメラ注視点のローカルオフセット

set_primitive_params(slist rules)

プリムのパラメータを設定。

  • 引数:
    • rules (slist): PRIM_*定数と値のパラメータリスト

リンクプリムのパラメータを設定(順序保証)。

  • 引数:
    • link (int): 対象のリンク番号またはLINK定数
    • rules (slist): PRIM_*定数と値のパラメータリスト

offset_texture(float u, float v, int face)

面のテクスチャオフセットを設定。

  • 引数:
    • u (float): U方向のオフセット
    • v (float): V方向のオフセット
    • face (int): 対象の面番号(ALL_SIDESで全面)

rotate_texture(float angle, int face)

面のテクスチャ回転を設定。

  • 引数:
    • angle (float): テクスチャ回転角(ラジアン)
    • face (int): 対象の面番号(ALL_SIDESで全面)

scale_texture(float u, float v, int face)

面のテクスチャスケールを設定。

  • 引数:
    • u (float): U方向のスケール
    • v (float): V方向のスケール
    • face (int): 対象の面番号(ALL_SIDESで全面)

parcel_media_command_list(slist commands)

パーセルメディアにコマンドを送信。

  • 引数:
    • commands (slist): PARCEL_MEDIA_COMMAND_*定数と値のリスト

set_velocity(vec velocity, int local)

プリムの速度を設定。

  • 引数:
    • velocity (vec): 設定する速度ベクトル
    • local (int): ローカル座標系ならTRUE、リージョン座標系ならFALSE

set_angular_velocity(vec angular_velocity, int local)

プリムの角速度を設定。

  • 引数:
    • angular_velocity (vec): 設定する角速度ベクトル
    • local (int): ローカル座標系ならTRUE、リージョン座標系ならFALSE

set_force_and_torque(vec force, vec torque, int local)

プリムに力とトルクを設定。

  • 引数:
    • force (vec): 加える力ベクトル
    • torque (vec): 加えるトルクベクトル
    • local (int): ローカル座標系ならTRUE、リージョン座標系ならFALSE

set_hover_height(float height, int water, float tau)

ホバー高さを設定。

  • 引数:
    • height (float): ホバー高さ
    • water (int): 水面基準ならTRUE、地面基準ならFALSE
    • tau (float): 目標到達までの時定数(秒)

stop_hover()

ホバーを停止。

  • 引数: なし

set_physics_material(int mask, float gravity_multiplier, float restitution, float friction, float density)

プリムの物理マテリアルを設定。

  • 引数:
    • mask (int): 適用する項目のビットマスク(DENSITY等)
    • gravity_multiplier (float): 重力倍率
    • restitution (float): 反発係数
    • friction (float): 摩擦係数
    • density (float): 密度

set_keyframed_motion(slist keyframes, slist options)

キーフレームモーションを設定。

  • 引数:
    • keyframes (slist): キーフレーム(移動/回転/時間)のリスト
    • options (slist): KFM_*定数と値のオプションリスト

rot_look_at(rot target_direction, float strength, float damping)

目標方向へ回転を向ける。

  • 引数:
    • target_direction (rot): 向ける目標方向の回転
    • strength (float): 向ける強さ
    • damping (float): 減衰

add_to_land_ban_list(key avatar, float hours)

土地のBANリストにアバターを追加。

  • 引数:
    • avatar (key): BANリストに追加するアバターのキー
    • hours (float): BANする時間(時間単位、0で無期限)

add_to_land_pass_list(key avatar, float hours)

土地のPASSリストにアバターを追加。

  • 引数:
    • avatar (key): PASSリストに追加するアバターのキー
    • hours (float): アクセス許可する時間(時間単位、0で無期限)

remove_from_land_ban_list(key avatar)

土地のBANリストからアバターを削除。

  • 引数:
    • avatar (key): BANリストから削除するアバターのキー

remove_from_land_pass_list(key avatar)

土地のPASSリストからアバターを削除。

  • 引数:
    • avatar (key): PASSリストから削除するアバターのキー

reset_land_ban_list()

土地のBANリストをリセット。

  • 引数: なし

reset_land_pass_list()

土地のPASSリストをリセット。

  • 引数: なし

eject_from_land(key avatar)

アバターを土地から退去させる。

  • 引数:
    • avatar (key): 退去させるアバターのキー

modify_land(int action, int brush)

地形を変更。

  • 引数:
    • action (int): 地形変更操作(LAND_LEVEL等の定数)
    • brush (int): ブラシサイズ(LAND_SMALL_BRUSH等の定数)

ground_repel(float height, int water, float tau)

地面/水面から反発してホバー。

  • 引数:
    • height (float): ホバーする高さ
    • water (int): 水面基準ならTRUE、地面基準ならFALSE
    • tau (float): 目標到達までの時定数(秒)

set_parcel_music_url(str url)

パーセルの音楽ストリームURLを設定。

  • 引数:
    • url (str): 設定する音楽ストリームのURL

set_animation_override(str anim_state, str anim)

アニメーション状態のオーバーライドを設定。

  • 引数:
    • anim_state (str): 上書きするアニメーション状態名
    • anim (str): 再生するアニメーション名

reset_animation_override(str anim_state)

アニメーションオーバーライドをリセット。

  • 引数:
    • anim_state (str): リセットするアニメーション状態名(ALLで全て)

start_object_animation(str anim)

オブジェクトアニメーションを再生。

  • 引数:
    • anim (str): 再生するアニメーション名

stop_object_animation(str anim)

オブジェクトアニメーションを停止。

  • 引数:
    • anim (str): 停止するアニメーション名

teleport_agent_global_coords(key agent, vec global_coordinates, vec region_coordinates, vec look_at)

アバターをグローバル座標へテレポート。

  • 引数:
    • agent (key): テレポートするアバターのキー
    • global_coordinates (vec): 宛先のグローバル座標
    • region_coordinates (vec): 宛先リージョン内のローカル座標
    • look_at (vec): 到着時に向く方向

give_inventory_list(key target, str folder, slist inventory)

インベントリアイテムをフォルダでまとめて渡す。

  • 引数:
    • target (key): 渡す相手のアバター/プリムのキー
    • folder (str): 作成するフォルダ名
    • inventory (slist): 渡すインベントリアイテム名のリスト

set_remote_script_access_pin(int pin)

リモートスクリプトアクセスPINを設定。

  • 引数:
    • pin (int): リモートスクリプトロードを許可するPIN(0で無効)

remote_load_script_pin(key target, str name, int pin, int running, int start_param)

PIN付きでリモートにスクリプトをロード。

  • 引数:
    • target (key): スクリプトを送る対象プリムのキー
    • name (str): 送るスクリプト名
    • pin (int): 対象が設定したアクセスPIN
    • running (int): 起動状態にするならTRUE、停止ならFALSE
    • start_param (int): スクリプトに渡す開始パラメータ

データストレージ

write_to_lsd(str name, str value)

Linkset Dataストレージに値を書き込みます。

  • 引数:
    • name (str): 対象の名前
    • value (str): 対象となる文字列

reset_lsd()

すべてのLinkset Dataをクリアします。

  • 引数: なし

アニメーション

start_anim(str anim)

アニメーションを開始します。

  • 引数:
    • anim (str): アニメーション名

stop_anim(str anim)

アニメーションを停止します。

  • 引数:
    • anim (str): アニメーション名

センサー

sensor(str name, key id, int type, float range, float arc)

周囲のオブジェクト・アバターをセンサーで検出します。

  • 引数:
    • name (str): 対象の名前
    • id (key): 対象のキー(UUID)
    • type (int): 種別を指定するフラグ値
    • range (float): 乱数の上限(この値未満が返される)
    • arc (float): 検出円錐の半角(ラジアン)

sensor_repeat(str name, key id, int type, float range, float arc, float rate)

周囲のオブジェクト・アバターを繰り返しセンサーで検出します。

  • 引数:
    • name (str): 対象の名前
    • id (key): 対象のキー(UUID)
    • type (int): 種別を指定するフラグ値
    • range (float): 乱数の上限(この値未満が返される)
    • arc (float): 検出円錐の半角(ラジアン)
    • rate (float): 繰り返し間隔(秒)

sensor_remove()

繰り返しセンサーを停止します。

  • 引数: なし

アバター操作

request_permissions(key agent, int perm)

パーミッションをリクエストします。

  • 引数:
    • agent (key): 対象エージェントのキー
    • perm (int): perm(int型)

attach_to_avatar(int attach_point)

アバターにアタッチ。

  • 引数:
    • attach_point (int): アタッチメントポイント(ATTACH_*定数)

detach_from_avatar()

アバターからデタッチ。

  • 引数: なし

teleport_agent(key avatar, str landmark, vec pos, vec look_at)

アバターをテレポート。

  • 引数:
    • avatar (key): 対象アバターのキー
    • landmark (str): ランドマーク名(空文字列で省略)
    • pos (vec): 位置(リージョン座標)
    • look_at (vec): 注視点(リージョン座標)

teleport_agent_home(key avatar)

アバターをホームにテレポート。

  • 引数:
    • avatar (key): 対象アバターのキー

物理/移動

apply_impulse(vec force, int local)

インパルスを適用。

  • 引数:
    • force (vec): 力ベクトル
    • local (int): ローカル座標系で適用するなら1、ワールド座標系なら0

apply_rotational_impulse(vec force, int local)

回転インパルスを適用。

  • 引数:
    • force (vec): 力ベクトル
    • local (int): ローカル座標系で適用するなら1、ワールド座標系なら0

set_force(vec force, int local)

力を設定。

  • 引数:
    • force (vec): 力ベクトル
    • local (int): ローカル座標系で適用するなら1、ワールド座標系なら0

set_torque(vec torque, int local)

トルクを設定。

  • 引数:
    • torque (vec): トルクベクトル
    • local (int): ローカル座標系で適用するなら1、ワールド座標系なら0

move_to_target(vec target, float tau)

ターゲットに移動。

  • 引数:
    • target (vec): 目標位置
    • tau (float): 応答時間定数

stop_move_to_target()

ターゲット移動を停止。

  • 引数: なし

look_at(vec target, float strength, float damping)

指定方向を向く。

  • 引数:
    • target (vec): 目標位置
    • strength (float): 強さ
    • damping (float): 減衰

stop_look_at()

方向固定を停止。

  • 引数: なし

push_object(key id, vec impulse, vec angular, int local)

オブジェクトを押す。

  • 引数:
    • id (key): 対象のキー(UUID)
    • impulse (vec): インパルスベクトル
    • angular (vec): 角インパルス
    • local (int): ローカル座標系で適用するなら1、ワールド座標系なら0

ビークル

set_vehicle_type(int type_id)

ビークルタイプを設定。

  • 引数:
    • type_id (int): ビークルタイプ定数(VEHICLE_TYPE_*)

set_vehicle_float_param(int param, float value)

ビークル浮動小数点パラメータを設定。

  • 引数:
    • param (int): パラメータ識別子(または起動パラメータ)
    • value (float): 対象となる浮動小数点数

set_vehicle_vector_param(int param, vec value)

ビークルベクトルパラメータを設定。

  • 引数:
    • param (int): パラメータ識別子(または起動パラメータ)
    • value (vec): value(vec型)

set_vehicle_rot_param(int param, rot value)

ビークル回転パラメータを設定。

  • 引数:
    • param (int): パラメータ識別子(または起動パラメータ)
    • value (rot): value(rot型)

set_vehicle_flags(int flags)

ビークルフラグを設定。

  • 引数:
    • flags (int): フラグ値(ビット和)

remove_vehicle_flags(int flags)

ビークルフラグを削除。

  • 引数:
    • flags (int): フラグ値(ビット和)

HTTP

http_response(key request_id, int status, str body)

HTTPレスポンスを返す。

  • 引数:
    • request_id (key): HTTPリクエストID
    • status (int): 状態フラグ
    • body (str): HTTPボディ

release_url(str url)

URLを解放。

  • 引数:
    • url (str): 対象のURL

set_content_type(key request_id, int content_type)

コンテンツタイプを設定。

  • 引数:
    • request_id (key): HTTPリクエストID
    • content_type (int): コンテンツタイプ定数

load_url(key avatar, str message, str url)

URLをブラウザで開く。

  • 引数:
    • avatar (key): 対象アバターのキー
    • message (str): 送信するメッセージ
    • url (str): 対象のURL

テクスチャ/パーティクル

set_texture_anim(int mode, int face, int sx, int sy, float start, float length, float rate)

テクスチャアニメーションを設定。

  • 引数:
    • mode (int): アニメーションモードフラグ(ANIM_ON等の定数)
    • face (int): 面番号(-1で全面)
    • sx (int): 横方向の分割数
    • sy (int): 縦方向の分割数
    • start (float): start(float型)
    • length (float): アニメーション長
    • rate (float): 繰り返し間隔(秒)

リンクプリムのテクスチャアニメーションを設定。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
    • mode (int): アニメーションモードフラグ(ANIM_ON等の定数)
    • face (int): 面番号(-1で全面)
    • sx (int): 横方向の分割数
    • sy (int): 縦方向の分割数
    • start (float): start(float型)
    • length (float): アニメーション長
    • rate (float): 繰り返し間隔(秒)

particle_system(slist rules)

パーティクルシステムを設定。

  • 引数:
    • rules (slist): ルールリスト(プリムパラメータ定数列)

リンクプリムのパーティクルシステムを設定。

  • 引数:
    • linknum (int): リンク番号(LINK_*定数も使用可)
    • rules (slist): ルールリスト(プリムパラメータ定数列)

サウンド

loop_sound(str sound, float volume)

サウンドをループ再生。

  • 引数:
    • sound (str): サウンドアイテム名またはUUID文字列
    • volume (float): 音量(0.0〜1.0)

stop_sound()

サウンドを停止。

  • 引数: なし

preload_sound(str sound)

サウンドをプリロード。

  • 引数:
    • sound (str): サウンドアイテム名またはUUID文字列

adjust_sound_volume(float volume)

サウンドボリュームを調整。

  • 引数:
    • volume (float): 音量(0.0〜1.0)

trigger_sound(str sound, float volume)

サウンドをトリガー。

  • 引数:
    • sound (str): サウンドアイテム名またはUUID文字列
    • volume (float): 音量(0.0〜1.0)

trigger_sound_limited(str sound, float volume, vec top_north_east, vec bottom_south_west)

範囲限定でサウンドをトリガー。

  • 引数:
    • sound (str): サウンドアイテム名またはUUID文字列
    • volume (float): 音量(0.0〜1.0)
    • top_north_east (vec): top_north_east(vec型)
    • bottom_south_west (vec): bottom_south_west(vec型)

collision_sound(str sound, float volume)

衝突サウンドを設定。

  • 引数:
    • sound (str): サウンドアイテム名またはUUID文字列
    • volume (float): 音量(0.0〜1.0)

UI/その他

map_destination(str sim_name, vec pos, vec look_at)

マップ上の目的地を表示。

  • 引数:
    • sim_name (str): シミュレーター名
    • pos (vec): 位置(リージョン座標)
    • look_at (vec): 注視点(リージョン座標)

force_mouselook(int mouselook)

マウスルックを強制。

  • 引数:
    • mouselook (int): 1で強制マウスルック、0で解除

take_controls(int controls, int accept, int pass_on)

コントロールを取得。

  • 引数:
    • controls (int): 対象コントロール(CONTROL_*定数のビット和)
    • accept (int): 受け取るなら1、無視なら0
    • pass_on (int): 他へ受け流すなら1

release_controls()

コントロールを解放。

  • 引数: なし

pass_touches(int pass)

タッチイベントの受け渡しを設定。

  • 引数:
    • pass (int): 受け流すなら1

pass_collisions(int pass)

衝突イベントの受け渡しを設定。

  • 引数:
    • pass (int): 受け流すなら1

collision_filter(str name, key id, int accept)

衝突フィルターを設定。

  • 引数:
    • name (str): 対象の名前
    • id (key): 対象のキー(UUID)
    • accept (int): 受け取るなら1、無視なら0

set_damage(float damage)

ダメージ値を設定。

  • 引数:
    • damage (float): ダメージ量

set_memory_limit(int limit)

メモリ制限を設定。

  • 引数:
    • limit (int): 上限値

スクリプト制御

reset()

スクリプトをリセットします。

  • 引数: なし
  • 別名: reset_script

reset_other(str name)

他のスクリプトをリセットします。

  • 引数:
    • name (str): 対象の名前
  • 別名: reset_other_script

set_script_state(str name, int running)

スクリプトの実行状態を設定します。

  • 引数:
    • name (str): 対象の名前
    • running (int): 1で実行中、0で停止

ターゲット

target(vec position, float range)

位置ターゲットを登録。

  • 引数:
    • position (vec): 目標位置
    • range (float): 乱数の上限(この値未満が返される)

target_remove(int handle)

位置ターゲットを削除。

  • 引数:
    • handle (int): 操作対象のハンドル

rot_target(rot rot, float error)

回転ターゲットを登録。

  • 引数:
    • rot (rot): 回転(クォータニオン)
    • error (float): 許容誤差

rot_target_remove(int handle)

回転ターゲットを削除。

  • 引数:
    • handle (int): 操作対象のハンドル

テスト/アサーション

テストファイル(*.test.hl)で使用するアサーションプロシージャ群です。詳細は テスト を参照してください。

assert_eq(int actual, int expected, str expr_text)

2つの値が等しいことをアサートします。

  • 引数:
    • actual (int): 実測値(任意の型を受け付ける)
    • expected (int): 期待値(任意の型を受け付ける)
    • expr_text (str): 式の文字列表現(エラーメッセージ用)

assert_ne(int actual, int expected, str expr_text)

2つの値が等しくないことをアサートします。

  • 引数:
    • actual (int): 実測値(任意の型を受け付ける)
    • expected (int): 期待値(任意の型を受け付ける)
    • expr_text (str): 式の文字列表現(エラーメッセージ用)

assert_lt(int actual, int expected, str expr_text)

actualがexpectedより小さいことをアサートします。

  • 引数:
    • actual (int): 実測値(任意の型を受け付ける)
    • expected (int): 期待値(任意の型を受け付ける)
    • expr_text (str): 式の文字列表現(エラーメッセージ用)

assert_le(int actual, int expected, str expr_text)

actualがexpected以下であることをアサートします。

  • 引数:
    • actual (int): 実測値(任意の型を受け付ける)
    • expected (int): 期待値(任意の型を受け付ける)
    • expr_text (str): 式の文字列表現(エラーメッセージ用)

assert_gt(int actual, int expected, str expr_text)

actualがexpectedより大きいことをアサートします。

  • 引数:
    • actual (int): 実測値(任意の型を受け付ける)
    • expected (int): 期待値(任意の型を受け付ける)
    • expr_text (str): 式の文字列表現(エラーメッセージ用)

assert_ge(int actual, int expected, str expr_text)

actualがexpected以上であることをアサートします。

  • 引数:
    • actual (int): 実測値(任意の型を受け付ける)
    • expected (int): 期待値(任意の型を受け付ける)
    • expr_text (str): 式の文字列表現(エラーメッセージ用)

test_report()

テスト結果のサマリーを表示します。

  • 引数: なし

メッセージ送信

基本構文

送信例

構文説明
"msg" -> world;チャンネル0の公開チャット。周囲のユーザー全員に聞こえる
"msg" -> owner;スクリプトの所有者にのみ届くプライベートメッセージ
"msg" -> debug;デバッグチャンネルへの出力(開発時のログに使用)
"msg":100 -> sub;スクリプト識別子 sub へチャンネル100でメッセージ送信
"msg":0 ->> avatar;同一リージョン内の特定アバターまたはオブジェクトのみにチャンネル0でメッセージ送信

ターゲット指定

-> の右辺に送信先を指定します。

組み込み識別子

  • world: ワールドチャット(チャンネル0の公開チャット。周囲のプレイヤー全員に聞こえます)。
  • owner: オーナーチャット(スクリプトの所有者にのみ表示されます)。
  • debug: デバッグチャンネル(DEBUG_CHANNEL。開発時のログ出力に使用)。

ユーザー定義識別子

  • script <識別子>; で定義されたスクリプト識別子。
  • avatar <識別子>; で定義されたアバター識別子。

hmsgファイル指定

複数ターゲットメッセージ送信

RegionSayToメッセージ送信

->> 演算子はavatar識別子またはkey型変数にのみ使用可能です。

例:

ダイアログ構文

ダイアログの見た目と同じ配置でコーディングできる専用構文で、各ボタン行が|...|で囲まれ、視覚的にダイアログのレイアウトと一致します。

基本構文

1行形式でも記述可能(||は閉じ|と開き|の連続):

構文要素

要素型説明
メッセージstrダイアログに表示するメッセージ(|を除く加算式レベルの式。+, -, &, ^が使用可能)
ボタンstr / slistボタンラベル(termレベルの式、1-4行)。slist型も指定可能
対象keyowner、key型変数、key型定数
チャンネルintリテラル、int型変数、int型定数
-> world;-固定(必須)

※ メッセージ式は+, -, &, ^を含む加算式が使用可能(|はボタン区切りと衝突するため除外)。||, &&等の論理演算子を含む式は括弧()で囲む。

ボタンの制約

制約動作エラーコード
空文字列 ""コンパイルエラーE0403
24バイト超警告を出力し、24バイトに自動切り詰め(UTF-8文字境界考慮)W0305

※ これらの検査対象は文字列リテラルで書いたボタンです。slist の要素は検査されません(空文字列もエラーにならず、24バイト超の要素は警告なしで扱われます)。

slistボタン

ボタンにslist型の変数を指定すると、リスト要素がボタンとしてインライン展開されます。

展開後のボタンは3個ずつの行に分けられ、行の順序が逆転されます(LSLのllDialogの表示順に対応)。3個に満たない最終行は空白ボタン " " で補われます。ボタンに slist を1つでも含む場合、|...| で書いた行の区切りは使われず、すべてのボタンを連結してから3個ずつの行に分け直します(例: "M"|"A", "B"||one| で one が ["x"] なら ["A", "B", "x"] の1行になる)。

  • 展開: ["A", "1", "2", "3", "4", "5", "B"](7個)
  • 行分割: ["A", "1", "2"], ["3", "4", "5"], ["B", " ", " "]
  • 行逆転: ["B", " ", " ", "3", "4", "5", "A", "1", "2"]

slistの値がコンパイル時に確定できない場合(関数戻り値、メソッド呼び出し等)は、実行時にリスト連結と行逆転が行われます。

使用例

LSL変換

ボタン行は逆順に展開され、llDialog関数に変換されます(LSLのllDialogはリスト末尾から表示するため)。

→

slistボタン(コンパイル時に確定する場合)は、インライン展開後に行分割・行逆転されたリストになります。

→

対象の変換

HLLSL
ownerllGetOwner()
変数変数識別子
定数定数参照

テスト機能

テスト例

以下の例は lib/math_utils.hlib に定義された関数をテストします。

テスト結果:

テストファイル形式

比較式形式

テストは比較式を直接記述する形式で書きます。

サポートされる比較演算子:

  • == : 等しい。
  • != : 等しくない。
  • < : より小さい。
  • > : より大きい。
  • <= : 以下。
  • >= : 以上。

例:

モック機能

外部リソースに依存する関数をテストする際に、モック定義を使用して戻り値を指定できます。

純粋関数はモック不要: 環境状態に依存しない決定的な標準ライブラリ関数(std::list_find、std::dump_list_to_string、std::abs、std::str_to_int、std::escape_url 等)は、テストランナーが LSL 関数の挙動をエミュレートして実行するため、モック定義なしでテストできます。

副作用のある関数(std::get_owner、std::read_from_lsd、std::frand、std::detected_*、HTTP系、インベントリ系等)はモック定義が必須です。

例:

以下のライブラリが read_from_lsd(標準ライブラリ関数)を内部で使用している場合:

テストでモックを使用して read_from_lsd の戻り値を差し替えます:

テスト結果:

インターリーブ形式:

モック定義とテスト式を交互に配置することで、同じ関数に対して異なるモック値でテストできます。

テスト結果:

テスト実行

--lsl オプションを指定すると、テストを実行せずにテストファイルをLSLコードに変換して出力します。

--with-lsl オプションを指定すると、テストを実行しつつ、LSLコードも生成して出力します。

テスト結果

テスト実行時、各テスト式の結果が表示されます。

全テスト成功時:

テスト失敗時(multiply関数にバグがある場合):

CLIコマンド

コンパイル

コンパイルオプション

オプション説明
--show-memory-usageメモリ使用量表示を追加(デバッグ用)
--debugコンパイル後のLSLコードの各イベントハンドラ先頭に llSay(DEBUG_CHANNEL, ...) を挿入。スクリプト名・イベント名・パラメータをデバッグチャンネルに出力します
--no-optimizeデフォルトの最適化(定数インライン展開・定数伝搬・定数畳み込み・関数インライン展開・プロシージャインライン展開)を無効化
--no-warn-unused-exports.hlファイル経由でインポートしたライブラリファイル(.hlib/.hprc)内の未使用関数・定数・プロシージャの警告を抑制。スタンドアロン(.hlib/.hprcを直接指定)コンパイル時はクロスファイル参照情報がないため、このフラグに関わらずW0202/W0203/W0204は自動抑制される
--lang <LANG>エラーメッセージの出力言語を指定(ja/en、デフォルト: 自動検出)
-V, --versionバージョン情報(hl <バージョン番号>)を表示して終了

テスト実行

テスト実行オプション

オプション説明
--lslテストを実行せずにLSLコードに変換して出力
--with-lslテストを実行しつつLSLコードも生成して出力

プロジェクト作成

生成されるディレクトリには prc/ サブディレクトリと、main.hl の初期テンプレートが含まれます。

コードフォーマット

ソースコードの整形は Language Server hl-lsp の textDocument/formatting として提供されます。対応エディタ(coc.nvim / VS Code 等)の「ドキュメントのフォーマット」操作で、ファイル全体を整形します。CLI の hl-fmt は廃止されました。

対応ファイル: .hl / .hlib / .hmsg / .hprc / .hltest(拡張子から自動判別)

  • インデント正規化(4 スペース固定)
  • 改行コードの LF 統一(CRLF / CR の入力も LF で出力)
  • 行コメント // / ブロックコメント /* */ と空行の保持
  • switch の =>、msg / dialog 式の ->、行末コメントの列整列
  • prims 定義の 200 文字折返しとカンマ位置整列
  • 冪等(再フォーマットしても結果は変わらない)

Language Server の導入方法はダウンロードページの Language Server セクションを参照してください。Playground でも「フォーマット」ボタンで同じ整形を利用できます。

多言語対応(i18n)

エラーメッセージは日本語と英語に対応しています。言語の優先順位は以下の通りです:

  1. --lang オプション(最優先)
  2. HL_LANG 環境変数
  3. OS言語設定(LANG → LC_MESSAGES → LC_ALL)
  4. デフォルト: 英語

組み込み識別子

以下の識別子は言語レベルで定義され、特別な意味を持ちます。

  • world: ワールドチャットへのメッセージ送信先。
  • owner: オーナーチャットへのメッセージ送信先。
  • debug: デバッグチャンネル(DEBUG_CHANNEL)へのメッセージ送信先。

エラーコード一覧

エラーレベル

コンパイルに失敗するエラーです。

コード説明
E0001構文エラー(パースエラー)
E0002重複する変数定義(同一スコープ内)
E0003重複する関数定義
E0004重複するプロシージャ定義
E0005重複する定数定義
E0006重複する型定義(script / avatar)
E0007#cache_linknumの重複定義
E0008#initイベントの重複定義
E0009#timerイベントの重複定義
E0010#sensorイベントの重複定義
E0011#no_sensorイベントの重複定義
E0012#run_time_permissionsイベントの重複定義
E0013#dataserverイベントの重複定義
E0014#changedイベントの重複定義
E0015#on_rezイベントの重複定義
E0101未定義変数
E0102未定義関数
E0103未定義プロシージャ
E0104未定義定数
E0105未定義のライブラリエイリアス
E0106未定義primインスタンス
E0107primsパターン不一致
E0108prims割り当て不完全
E0110未定義primsグループ参照
E0301型の不一致
E0302比較演算子の型不一致
E0303代入の型不一致
E0304パターンマッチの型不一致
E0305ループ変数型の不一致
E0306レンジイテレーションでint以外の型を使用
E0307コレクションにリスト型またはstr型が必要
E0308整数定数式の計算結果がintの範囲(-2147483648〜2147483647)外(overflow)
E0401無効なメッセージターゲット
E0402hmsgファイル指定が不正
E0403ダイアログボタンに空文字列を使用
E0404RegionSayToのターゲットが不正
E0502primメソッド使用時に#cache_linknumが未指定
E0601定数への代入
E0602定数定義および context フィールド初期値での非定数式使用
E0701メソッドが見つからない
E0702無効なフィールドアクセス
E0703プロシージャの引数数不一致
E0704プロシージャ引数型の不一致
E0705関数の引数数不一致
E0706関数引数型の不一致
E0707メソッド引数数の不一致
E0708メソッド引数型の不一致
E0709primメソッドが見つからない
E0801必須識別子定義の欠如、または空リストの型推論不可
E0802リスト要素の型不一致
E0803リスト化できない型
E0804リスト型の不一致
E0901importエラー
E0902ライブラリファイルで禁止されている要素
E0903チャンネルに変数を使用
E0904hmsgファイルでの無効な構文使用、またはincludeエラー
E0905hmsgファイル以外でのref文使用
E0906refで指定されたファイルが見つからない
E0907hmsgファイルが見つからない
E0908hmsgファイル内にlinkmsgハンドラーがない
E0909.hprcファイルでの関数定義
E0910.hprcファイルでの定数定義
E0911hmsgファイルにref文がない
E0912hmsgファイルに複数のref文がある
E0913ref文がimport/include文の後に宣言されている
E0914別の.hmsgファイルで定義されたプロシージャの呼び出し
E1001context未定義エラー
E1002contextフィールド未定義エラー
E1003context定義の重複
E1004未定義スクリプトへのcontext定義
E1301二項演算子の型不一致
E1302同一型に対する無効な二項演算子
E1401テスト名の重複
E1402アサーション引数の型不一致
E1403モック関数が存在しない
E1404モック関数の引数数不一致
E1405モック関数の引数型不一致
E1406モック関数の戻り値型不一致

警告レベル

コンパイルは成功しますが、注意が必要な警告です。

コード説明
W0201未使用変数
W0202未使用関数(※1)
W0203未使用プロシージャ(※1)
W0204未使用定数(※1)
W0205未使用import
W0206冗長import(.hmsgファイルで親.hlと重複)
W0207未使用include
W0208未使用スクリプト
W0209未使用アバター
W0210未使用プリム
W0211冗長include(.hmsgファイルで親.hlと重複)
W0212未使用linkmsgハンドラ
W0213未使用primsグループ
W0301linkmsgハンドラーが未定義(@hmsg指定時は指定ファイル内のみを検索)
W0302ワイルドカードパターンのみのswitch文
W0303暗黙の精度低下変換(float → int)
W0304sensor系プロシージャ呼び出し元スクリプトに#sensor/#no_sensorハンドラが未定義
W0305ダイアログのボタンが24バイト超(自動切り詰め)
W0306ダイアログのチャンネルに対応する#listenハンドラーが未定義
W0307request_permissionsプロシージャ呼び出し元スクリプトに#run_time_permissionsハンドラが未定義
W0401debugターゲットへのチャンネル指定は無視される

※1: W0202/W0203/W0204は.hlib/.hprcファイルをスタンドアロンでコンパイルした場合、クロスファイル参照情報がないため自動抑制されます(W0201のimport警告のみ表示)。.hlファイル経由のインポート時にのみ検出されます。