Penny commented on the height script and pointed out to me that there is a bug, in the height detection of SL itself. I was not aware about that, and have here now the adjusted version of the script....
However...
the result is.. stunning:
"you are 6 ft. 1in. tall, that equals 1.868088 m "
for comparing: my old script said, 5.7 ft.....
However, the Firestorm height meter shows the same like this script, plus:
if i rezz a prim and make it that high, then it is as tall as my avatar, almost exactly.
Going from here, then, we all have been giants and still are.... a detailed article about the avatar proportions can be found here:
http://pennycow.blogspot.com/2011/08/matter-of-proportion.html
Here is now the corrected script version:
//************************************************************************
string name;
string saeheight = "";
vector size;
float heightfeet;
key id;
string round_float(float value) {
string result = (string)value;
return llGetSubString(result, 0, llSubStringIndex(result, ".") + 2);
}
default
{
state_entry()
{
//llSetStatus(STATUS_PHANTOM, TRUE);
llSetText( "", < 1,1,1>, 1 );
}
collision_start (integer total_number)
{
id=(llDetectedKey(0));
string name;
string saeheight = "";
vector size;
float heightfeet;
name = (llKey2Name(id));
size = llGetAgentSize(id);
float m = size.z;
m *= 1.1057; // Multiplier
float f = m * 3.28083;
integer ft = (integer)f;
float f2 = f - (float)ft;
integer in = (integer)(12.0 * f2);
heightfeet = size.z * 3.28083;
saeheight = (string)((integer) llFloor(heightfeet)) + " ft. ";
heightfeet -= llFloor(heightfeet);
saeheight += (string)((integer)(llRound(heightfeet * 12))) + " in.";
//llSay(0, llKey2Name(id) + " is " + (string)m + " m (" + (string)ft + " ft. " + (string)in + "in.) tall. (counting shoes) - Accurate SL Height");
vector junk = llGetScale();
llInstantMessage(id, "you are " + (string)ft + " ft. " + (string)in + "in. "+ " tall, that equals " + (string)m + " m ");
if (size.z*100<150)
{
llInstantMessage(id, "Your size is small. This is just a hint. Nothing else.");
}
else if (size.z*100>200)
{
llInstantMessage(id, "Your size is very tall. This is just a hint. Nothing else.");
}
}
}
//********************************************************
In fact, there isn't a single 'rule' to go from the llGetAgentSize().z height to the actual height measured by comparing to a prim's height.
ReplyDeleteBesides multiplying by 1.25, as I have seen (not very good) and 1.1 (like you do) I've seen adding of 6 inch (somewhere between 14 and 15 cm works quite well). I also found combinations like multiplying by 1.03, then adding 8 cm.
Turns out that it all depends on which sliders you used to achieve your height. Just moving one, like leg length, will be consistent with a 'formula', but if you then change the size of your head, or of your torso, you need a new formula, to describe the effect of the change in leg length. In short, there is no way to determine the avatar height in a script, as it can't determine the setting of all the 6 to 8 sliders.
Yet an other way to put it, 2 shapes, with the same size as reported by llGetAgentSize may have different actual sizes (though probably close) and vice versa.