arz Nitelyってシステム屋どうよ?

SecondLifeとWebとの融合を模索するセミプロWeb屋の挑戦

数値を書式化する

2008年09月20日 – 20:56

数値を3桁ずつに半角コンマで区切り、接頭語と接尾語を付記して返すユーザ関数

string uuNumberFormat(string prefix, integer num, string suffix);

string prefix … 接頭語
integer num … 数値
string suffix … 接尾語

// Number Format :: 2008-09-20
string uuNumberFormat(string prefix, integer num, string suffix){
    string temp_num = (string)num;
    integer place = llStringLength(temp_num);
    integer times = (integer)(place / 3);
    integer head = place % 3;
    if (!head){
        head = 3;
        times --;
    }
    integer i;
    for (i=0; i<times; i++){
        if (i == times && head != 3){
            temp_num = llInsertString(temp_num, head, ",");
        }else{
            temp_num = llInsertString(temp_num, head + 3 * i + i, ",");
        }
    }
    return prefix + temp_num + suffix;
}

例:uuNumberFormat(”L$”, 19800, “-”); → L$19,800-
例:uuNumberFormat(”", 1024, “m”); → 1,024m
例:uuNumberFormat(”Memory: “, llGetFreeMemory(), ” bytes free”);



日本時間取得

2008年07月28日 – 23:57

── 2008-07-28 特定の時間帯に日付がずれる不具合を改善 ──

現在の日本時間をリスト形式で取得するユーザ関数

list uuGetJpTime();

戻り値:list [year, month, day, hour, minute, second](リスト内の各要素は整数型)

// Get Japan Local Time &amp; Date :: 2008-07-28
list uuGetJpTime(){
    integer t = (integer)llGetGMTclock();
    integer hour = t / 3600 + 9;
    integer minute = (t % 3600) / 60;
    integer second = t % 60;
    string date = llGetDate();
    list raw_data = llParseString2List(date, ["-"], []);
    integer year = llList2Integer(raw_data, 0);
    integer month = llList2Integer(raw_data, 1);
    integer day = llList2Integer(raw_data, 2);
    string am_pm;
    // Adjust Hour
   if (hour &gt;= 24){
       hour -= 24;
       day ++;
    }
    // Adjust Date
    if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) &amp;&amp; day &gt; 31){
        day -= 31;
        month ++;
    }else if ((month == 4 || month == 6 || month == 9 || month == 11) &amp;&amp; day &gt; 30){
        day -= 30;
        month ++;
    }else if (month == 2 &amp;&amp; year % 4 != 0 &amp;&amp; day &gt; 28){
        day -= 28;
        month ++;
    }else if (month == 2 &amp;&amp; year %4 == 0 &amp;&amp; day &gt; 29){
        day -= 29;
        month ++;
    }
    // Adjust Month
   if (month &gt; 12){
       month -= 12;
       year ++;
    }
    // Return Data
    return [year, month, day, hour, minute, second];
}


リスト形式の日時データをテキストに変換

2008年05月23日 – 19:30

入力:list [year, month, day, hour, minute, second]

出力:「year年month月day日hour時minute分second秒」(和暦 / 西暦対応)

string uuTime2String(list date, integer jp_era);

jp_eraにTRUEを指定すると和暦を戻す

jp_eraにFALSEを指定すると西暦を戻す

// Time to String :: 2008-05-23
string uuTime2String(list date, integer jp_era){
    string era = "";
    integer year = llList2Integer(date, 0);
    if (jp_era){
        if (year &gt; 1988){
            era = "平成";
            year -= 1988;
        }else if (year &gt; 1925){
            era = "昭和";
            year -= 1925;
        }else if (year &gt; 1911){
            era = "大正";
            year -= 1911;
        }else if (year &gt; 1866){
            era = "明治";
            year -= 1866;
        }
    }
    return era + (string)year + "年" + llList2String(date, 1) + "月" + llList2String(date, 2) + "日" + llList2String(date, 3) + "時" + llList2String(date, 4) + "分" + llList2String(date, 5) + "秒";
}

注)明治以前には未対応



角度の変換

2008年05月21日 – 19:34

DEG → ROT

// Deg2Rot :: 2008-05-21
rotation uuDeg2Rot(vector deg){
    return llEuler2Rot(deg * DEG_TO_RAD);
}

ROT → DEG

// Rot2Deg :: 2008-05-21
vector uuRot2Deg(rotation rot){
    return llRot2Euler(rot) * RAD_TO_DEG;
}


色コード変換(16進数 → LSL)

2008年05月18日 – 22:09

【2008-09-23】you Xiaoさんから処理を簡略化させる方法を教えて頂き大幅に書き換えました。ありがとうございました。
vector uuHEX2Vector(string HEX);

16進数表記のカラーコードをvectorに変換するユーザ関数

例:uuHEX2Vector(”#FFFFFF”) → 返り値=<1.00000, 1.00000, 1.00000>

// Color Conversion :: HEX2Vector :: 2008-09-23
vector uuHEX2Vector(string HEX){
    vector color;
    color.x = (float)("0x" + llGetSubString(HEX, 1, 2)) / 255;
    color.y = (float)("0x" + llGetSubString(HEX, 3, 4)) / 255;
    color.z = (float)("0x" + llGetSubString(HEX, 5, 6)) / 255;
    return color;
}