//config float scalex = 0.125; //横1文字がテクスチャ全体の1/8。 float scaley = 0.142; //縦1行がテクスチャ全体の1/7 float defaultoffsetx = -0.44; //左上に合わせる float defaultoffsety = 0.43; integer xpics = 8; //横8文字 integer ypics = 7; //縦7文字 //使用可能な文字 string letters="abcdefghijklmnopqrstuvwxyz.,:;@!?()'&-+*/<>=%0123456789 "; integer nowoffsetx = 0;//現在横何文字目か integer nowoffsety = 0; //現在縦何行目か key ownerid; initTexture()//テクスチャの初期化 { llScaleTexture(scalex,scaley,ALL_SIDES); llOffsetTexture(defaultoffsetx,defaultoffsety,ALL_SIDES); } letterToOffset(string str)//文字を座標に変換 { integer nowletternum = llSubStringIndex(letters , llToLower(llGetSubString(str,0,0))); if(nowletternum == -1) { nowletternum = 55; } nowoffsetx = nowletternum%xpics; nowoffsety = nowletternum/xpics; llOwnerSay((string)nowletternum+"->("+(string)nowoffsetx+","+ (string)nowoffsety+")"); } changeOffset() { llOffsetTexture(defaultoffsetx+(float)nowoffsetx*scalex, defaultoffsety-(float)nowoffsety*scaley , ALL_SIDES); } default { state_entry() { initTexture(); ownerid = llGetOwner(); //llSay(0, "Hello, Avatar!"); llListen(0,"",ownerid,""); } listen(integer channel, string name, key id, string message) { llOwnerSay("listened "+message); if (id == ownerid) { letterToOffset(message); changeOffset(); } } }