スカルプト作成用ツール SLどっと絵メーカー SLどっと絵ペイント SL一筆書きツール 人気記事 Wings 3D の 操作メモ 星を30秒で、作る? ROKUROで、噴水 シムのジオラマ作成? ヒュ~ヒュ~ 大きいの 小さな世界 |
2008年05月19日
libSLでログイン
シムのジオラマ作成で、libsecondlife使ってみたのですが、
ソースとか見ていたら、SLの操作いろいろとできそうです
libsecondlifeで作られたボットには、評判の悪そうなものも
あるようですが、使い方次第ですよね
How to create a basic libSL bot のページとか、参考にして
ちょっとだけ、使ってみたので、自分用にC#での使い方、メモしてみます
参考ページ
libsecondlife
marchのBLOG
作成環境
Ver.0.4.1.1
準備
・libsecondlifeは必要で、他にいろいろ書き始めるとパッケージとかも使います
using libsecondlife;
using libsecondlife.Packets; // ログイン・ログアウトには、使わないけれど
セカンドライフのクラス
public static SecondLife client = new SecondLife();
ログイン
SLへ接続して、ログインします
if (client.Network.Login( 苗字 , 名前 , パスワード, アプリ名 [,場所], バージョン)){
}
・場所(ロケーション)は、省略可能です
string startLocation = NetworkManager.StartLocation( シム名, X, Y, Z );
・ベータグリッドに、接続する場合はURIを、変更します
LoginParams loginPram
= client.Network.DefaultLoginParams(苗字 , 名前 , パスワード, アプリ名,バージョン);
loginPram.URI = Settings.ADITI_LOGIN_SERVER; // ベータグリッド
// loginPram.URI = Settings.AGNI_LOGIN_SERVER; // メイングリッド
loginPram.Start = 場所;
if (client.Network.Login( loginPram )){
}
ログアウト
終了時に、ログアウトしないと、再接続時に、しばらく待たされます
client.Network.Logout();
テレポート
接続中に、アバターを。指定シムにテレポートさせます
client.Self.Teleport("Japan 02", new LLVector3(128.0f, 128.0f, 50.0f));
テレポ後に、何かさせたい場合は、先ににコールバック関数を定義します
client.Self.OnTeleport += new AgentManager.TeleportCallback(Self_OnTeleport);
static void Self_OnTeleport(string message, AgentManager.TeleportStatus status, AgentManager.TeleportFlags flags){
labelSimName.Text = client.Network.CurrentSim.Name; // シム名の取得
}
位置情報の取得
・アバターのいるシム名の取得
client.Network.CurrentSim.Name
・シム内のアバター数
client.Network.CurrentSim.AvatarPositions.Count
・位置座標(XYZ)
client.Self.SimPosition.X
client.Self.SimPosition.Y
client.Self.SimPosition.Z
client.Self.RelativePosition // これも使えそう
持ち物の取得
・所持金の取得 (クライアントのサンプルからとってきたけど、ちょっと長い)
System.Threading.AutoResetEvent waitBalance = new System.Threading.AutoResetEvent(false);
AgentManager.BalanceCallback del = delegate(int balance) { waitBalance.Set(); };
client.Self.OnBalanceUpdated += del;
client.Self.RequestBalance();
if (waitBalance.WaitOne(10000, false)){
labelMoney.Text = client.Self.Balance ;
}
client.Self.OnBalanceUpdated -= del;
・持ち物一覧(インベントリ)
client.Inventory.RequestFolderContents(client.Inventory.Store.RootFolder.UUID, client.Self.AgentID, true, true, InventorySortOrder.ByName);
SearchFolders[0] ="Clothing"; // 服フォルダを検索
LLUUID inventoryItems = client.Inventory.FindObjectByPath(client.Inventory.Store.RootFolder.UUID, client.Self.AgentID, SearchFolders[0], 1000);
List myObjects = client.Inventory.FolderContents(inventoryItems, client.Self.AgentID, true, true, InventorySortOrder.ByName, 1000);
※持ち物一覧の下のサンプル見つけたけれど、一部しかとれてない
void PrintFolder(InventoryFolder f, StringBuilder result, int indent) {
foreach (InventoryBase i in Manager.FolderContents(f.UUID, client.Self.AgentID, true, true, InventorySortOrder.ByName, 3000)) {
result.AppendFormat("{0}{1} ({2})\n", new String(' ', indent * 2), i.Name, i.UUID);
if (i is InventoryFolder){
InventoryFolder folder = (InventoryFolder)i;
PrintFolder(folder, result, indent + 1);
}
}
}
もう少し、いろいろ、試してみないといけなさそう
ソースとか見ていたら、SLの操作いろいろとできそうです
libsecondlifeで作られたボットには、評判の悪そうなものも
あるようですが、使い方次第ですよね
How to create a basic libSL bot のページとか、参考にして
ちょっとだけ、使ってみたので、自分用にC#での使い方、メモしてみます
参考ページ
libsecondlife
marchのBLOG
作成環境
Ver.0.4.1.1
準備
・libsecondlifeは必要で、他にいろいろ書き始めるとパッケージとかも使います
using libsecondlife;
using libsecondlife.Packets; // ログイン・ログアウトには、使わないけれど
セカンドライフのクラス
public static SecondLife client = new SecondLife();
ログイン
SLへ接続して、ログインします
if (client.Network.Login( 苗字 , 名前 , パスワード, アプリ名 [,場所], バージョン)){
}
・場所(ロケーション)は、省略可能です
string startLocation = NetworkManager.StartLocation( シム名, X, Y, Z );
・ベータグリッドに、接続する場合はURIを、変更します
LoginParams loginPram
= client.Network.DefaultLoginParams(苗字 , 名前 , パスワード, アプリ名,バージョン);
loginPram.URI = Settings.ADITI_LOGIN_SERVER; // ベータグリッド
// loginPram.URI = Settings.AGNI_LOGIN_SERVER; // メイングリッド
loginPram.Start = 場所;
if (client.Network.Login( loginPram )){
}
ログアウト
終了時に、ログアウトしないと、再接続時に、しばらく待たされます
client.Network.Logout();
テレポート
接続中に、アバターを。指定シムにテレポートさせます
client.Self.Teleport("Japan 02", new LLVector3(128.0f, 128.0f, 50.0f));
テレポ後に、何かさせたい場合は、先ににコールバック関数を定義します
client.Self.OnTeleport += new AgentManager.TeleportCallback(Self_OnTeleport);
static void Self_OnTeleport(string message, AgentManager.TeleportStatus status, AgentManager.TeleportFlags flags){
labelSimName.Text = client.Network.CurrentSim.Name; // シム名の取得
}
位置情報の取得
・アバターのいるシム名の取得
client.Network.CurrentSim.Name
・シム内のアバター数
client.Network.CurrentSim.AvatarPositions.Count
・位置座標(XYZ)
client.Self.SimPosition.X
client.Self.SimPosition.Y
client.Self.SimPosition.Z
client.Self.RelativePosition // これも使えそう
持ち物の取得
・所持金の取得 (クライアントのサンプルからとってきたけど、ちょっと長い)
System.Threading.AutoResetEvent waitBalance = new System.Threading.AutoResetEvent(false);
AgentManager.BalanceCallback del = delegate(int balance) { waitBalance.Set(); };
client.Self.OnBalanceUpdated += del;
client.Self.RequestBalance();
if (waitBalance.WaitOne(10000, false)){
labelMoney.Text = client.Self.Balance ;
}
client.Self.OnBalanceUpdated -= del;
・持ち物一覧(インベントリ)
client.Inventory.RequestFolderContents(client.Inventory.Store.RootFolder.UUID, client.Self.AgentID, true, true, InventorySortOrder.ByName);
SearchFolders[0] ="Clothing"; // 服フォルダを検索
LLUUID inventoryItems = client.Inventory.FindObjectByPath(client.Inventory.Store.RootFolder.UUID, client.Self.AgentID, SearchFolders[0], 1000);
List
※持ち物一覧の下のサンプル見つけたけれど、一部しかとれてない
void PrintFolder(InventoryFolder f, StringBuilder result, int indent) {
foreach (InventoryBase i in Manager.FolderContents(f.UUID, client.Self.AgentID, true, true, InventorySortOrder.ByName, 3000)) {
result.AppendFormat("{0}{1} ({2})\n", new String(' ', indent * 2), i.Name, i.UUID);
if (i is InventoryFolder){
InventoryFolder folder = (InventoryFolder)i;
PrintFolder(folder, result, indent + 1);
}
}
}
もう少し、いろいろ、試してみないといけなさそう