// *** 土地のX座標 minX 〜 maxX float minX = 0; float maxX = 256; // *** 土地のY座標 minY 〜 maxY float minY = 0; float maxY = 256; // *** 利用するヒュージプリムの大きさ float primX = 0; float primY = 0; float primZ = 0; // それぞれを 0 にするとプリムのサイズを最大限に使用します。 // 20x20m の土地のスカルプを作る際に、手持ちのヒュージプリムのサイズが 24x24m など // 丁度の大きさが無い場合に 0 以外を指定してください。 // 利用するプリムは土地の広さより大きいサイズを指定してください。(高さも同様) // ========================================================== float maxZ; float minZ; vector vPos; float GetZ(float i, float j) { float k = llGround(); return k; } SCheck() { float i; float j; float k; float scaleX = 1.0; float scaleY = 1.0; float scaleZ = 1.0; string sTmp = "P3\n33 33 255\n"; maxZ = 0.0; minZ = 4096.0; vPos = llGetPos(); for (i=0; i<=32; i++) { for (j=0; j<=32; j++) { k = GetZ(i, j); if (maxZ < k) maxZ = k; if (minZ > k) minZ = k; } } if (primX) scaleX = (maxX-minX)/primX; if (primY) scaleY = (maxY-minY)/primY; if (primZ) scaleZ = (maxZ-minZ)/primZ; if (scaleX > 1.0) scaleX = 1.0; if (scaleY > 1.0) scaleY = 1.0; if (scaleZ > 1.0) scaleZ = 1.0; for (i=0; i<=32; i++) { for (j=0; j<=32; j++) { k = GetZ(i, j); sTmp += (string)llRound(scaleX*i*255/32) + " "; sTmp += (string)llRound(scaleY*j*255/32) + " "; sTmp += (string)llRound(scaleZ*(k-minZ)*255/(maxZ-minZ)); if (llFloor(i*33+j+1)%84 == 0 || (i==32&&j==32)) { llOwnerSay("*** " + (string)llCeil((i*33+j)/84) + " ***\n" + sTmp); sTmp = ""; llSleep(0.5); } else sTmp += " "; } } vPos = ; llOwnerSay("Ground Size: " + (string)vPos); } default { touch_start(integer total_number) { if (llGetOwner() == llDetectedKey(0)) SCheck(); } }