march
2007年12月12日 12:25
#libsecondlifeのロード
import clr
clr.AddReferenceToFile("libsecondlife.dll")
import libsecondlife
import time
#ログイン情報の設定
firstName = 'abcd' #苗字
lastName = 'efgh' #名前
passWord = 'ijkl' #パスワード
#各オブジェクトの情報
primSummary = {} #オブジェクトの基本的な情報
sims = {} #オブジェクトの置いてあるSIM
primProperties = {} #オブジェクトのプロパティ情報
#イベント待ち合わせ用クラスの定義
class EventTracker:
def __init__(self):
self.data=False
def Clear(self):
self.data=False
def Set(self):
self.data=True
def Wait(self):
while not self.data:
time.sleep(0.1)
def WaitTimeout(self, s):
t = time.time()
while not self.data:
time.sleep(0.1)
if(t < time.time() - s):
print 'event timeout',
break
else:
#print 'wait,..', t, s, time.time(),
pass
#新規オブジェクト検出イベント処理用のハンドラの定義
def NewPrimHandler(sim, prim, regionHandle, timeDilation):
#オブジェクトの情報を辞書に格納
global sims, primSummary
if(primSummary.has_key(prim.ID)):
return
sims[prim.ID] = sim
primSummary[prim.ID] = prim
#プリムの基本情報の取得
#print client.Objects.RequestObject(sim, prim.LocalID)
#プリムのプロパティ情報の取得
client.Objects.RequestObjectPropertiesFamily(client.Network.CurrentSim, prim.ID)
#オブジェクト情報取得イベント処理用のハンドラの定義
def ObjectPropertiesFamilyHandler(sim, properties):
global primSummary, primProperties #, gItemPointer
if(primProperties.has_key(properties.ObjectID)):
return
primProperties[properties.ObjectID] = properties
#初期設定
event = EventTracker()
client = libsecondlife.SecondLife()
client.Objects.OnNewPrim += libsecondlife.ObjectManager.NewPrimCallback(NewPrimHandler)
client.Objects.OnObjectPropertiesFamily += libsecondlife.ObjectManager.ObjectPropertiesFamilyCallback(ObjectPropertiesFamilyHandler)
#接続
client.Network.Login(firstName, lastName, passWord, '', '')
time.sleep(10)
#実際の処理(10秒まって、周囲のオブジェクトの情報を出力)
client.Objects.OnNewPrim -= libsecondlife.ObjectManager.NewPrimCallback(NewPrimHandler)
time.sleep(10)
for i in primSummary.keys():
#オブジェクトの基本的な情報の出力
print 'sim =', sims[i]
print 'prim.Position =', primSummary[i].Position
print 'prim =', primSummary[i]
#オブジェクトのプロパティ情報の出力
if primProperties.has_key(i):
p = primProperties[i]
print 'Name =', p.Name
print 'Description =', p.Description
print 'SaleType =', p.SaleType
print 'SalePrice =', p.SalePrice #@see ObjectManager.cs #Not / Original / Copy / Contents
print 'Category =', p.Category
print 'GroupID =', p.GroupID
print 'LastOwnerID =', p.LastOwnerID
print 'ObjectID =', p.ObjectID
print 'OwnerID =', p.OwnerID
print 'OwnershipCost =', p.OwnershipCost #0.3.0
print 'Permissions =', p.Permissions #0.3.0
else:
print 'no propertiesFamilly'
print '---'
#切断
client.Network.Logout()