Files
dsrc/sku.0/sys.server/compiled/game/script/library/objvar_mangle.scriptlib
T
2013-09-10 23:17:15 -07:00

267 lines
7.1 KiB
Plaintext

// ======================================================================
//
// objvar_mangle.scriptlib
//
// Copyright 2003 Sony Online Entertainment
//
// ======================================================================
const int INTS_PER_SEGMENT = 80;
const int FLOATS_PER_SEGMENT = 40;
const int STRINGS_PER_SEGMENT = 10;
const int OBJIDS_PER_SEGMENT = 40;
// ======================================================================
int[] getMangledIntArrayObjVar(obj_id self, string varName)
{
if (hasObjVar(self, varName))
return getIntArrayObjVar(self, varName);
int count = getIntObjVar(self, varName + "_mangled.count");
if (count <= 0)
return null;
int[] values = new int[count];
int segment = 0;
int valuePos = 0;
while (valuePos < count)
{
int[] segmentValues = getIntArrayObjVar(self, varName + "_mangled.segment." + segment);
if (segmentValues == null)
break;
++segment;
for (int i = 0; i < segmentValues.length && valuePos < count; ++i)
values[valuePos++] = segmentValues[i];
}
if (valuePos != count)
return null;
return values;
}
// ----------------------------------------------------------------------
void setMangledIntArrayObjVar(obj_id self, string varName, int[] values)
{
removeObjVar(self, varName);
removeObjVar(self, varName + "_mangled.segment");
setObjVar(self, varName + "_mangled.count", values.length);
int pos, segment;
for (pos = 0, segment = 0; pos < values.length; pos += INTS_PER_SEGMENT, ++segment)
{
int segmentLength = values.length-pos;
if (segmentLength > INTS_PER_SEGMENT)
segmentLength = INTS_PER_SEGMENT;
int[] segmentValues = new int[segmentLength];
for (int i = 0; i < segmentLength; ++i)
segmentValues[i] = values[pos+i];
if(segmentValues.length > 0)
setObjVar(self, varName + "_mangled.segment." + segment, segmentValues);
}
}
// ----------------------------------------------------------------------
float[] getMangledFloatArrayObjVar(obj_id self, string varName)
{
if (hasObjVar(self, varName))
return getFloatArrayObjVar(self, varName);
int count = getIntObjVar(self, varName + "_mangled.count");
if (count <= 0)
return null;
float[] values = new float[count];
int segment = 0;
int valuePos = 0;
while (valuePos < count)
{
float[] segmentValues = getFloatArrayObjVar(self, varName + "_mangled.segment." + segment);
if (segmentValues == null)
break;
++segment;
for (int i = 0; i < segmentValues.length && valuePos < count; ++i)
values[valuePos++] = segmentValues[i];
}
if (valuePos != count)
return null;
return values;
}
// ----------------------------------------------------------------------
void setMangledFloatArrayObjVar(obj_id self, string varName, float[] values)
{
removeObjVar(self, varName);
removeObjVar(self, varName + "_mangled.segment");
setObjVar(self, varName + "_mangled.count", values.length);
int pos, segment;
for (pos = 0, segment = 0; pos < values.length; pos += FLOATS_PER_SEGMENT, ++segment)
{
int segmentLength = values.length-pos;
if (segmentLength > FLOATS_PER_SEGMENT)
segmentLength = FLOATS_PER_SEGMENT;
float[] segmentValues = new float[segmentLength];
for (int i = 0; i < segmentLength; ++i)
segmentValues[i] = values[pos+i];
if(segmentValues.length > 0)
setObjVar(self, varName + "_mangled.segment." + segment, segmentValues);
}
}
// ----------------------------------------------------------------------
string[] getMangledStringArrayObjVar(obj_id self, string varName)
{
if (hasObjVar(self, varName))
return getStringArrayObjVar(self, varName);
int count = getIntObjVar(self, varName + "_mangled.count");
if (count <= 0)
return null;
string[] values = new string[count];
int segment = 0;
int valuePos = 0;
while (valuePos < count)
{
string[] segmentValues = getStringArrayObjVar(self, varName + "_mangled.segment." + segment);
if (segmentValues == null)
break;
++segment;
for (int i = 0; i < segmentValues.length && valuePos < count; ++i)
values[valuePos++] = segmentValues[i];
}
if (valuePos != count)
return null;
return values;
}
string[] getBrokenMangledStringArrayObjVar(obj_id self, string varName)
{
if (hasObjVar(self, varName))
return getStringArrayObjVar(self, varName);
int count = getIntObjVar(self, varName + "_mangled.count");
if (count <= 0)
return null;
string[] values = new string[count];
int segment = 0;
int valuePos = 0;
while (valuePos < count)
{
string[] segmentValues = getStringArrayObjVar(self, varName + "_mangled.segment." + segment);
if (segmentValues == null)
break;
++segment;
for (int i = 0; i < segmentValues.length && valuePos < count; ++i)
values[valuePos++] = segmentValues[i];
}
if (valuePos !=count)
{
string[] strNewStrings = new string[valuePos];
for(int intI = 0; intI< valuePos; intI++)
{
strNewStrings[intI] = values[intI];
}
return strNewStrings;
}
return values;
}
// ----------------------------------------------------------------------
void setMangledStringArrayObjVar(obj_id self, string varName, string[] values)
{
removeObjVar(self, varName);
removeObjVar(self, varName + "_mangled.segment");
setObjVar(self, varName + "_mangled.count", values.length);
int pos, segment;
for (pos = 0, segment = 0; pos < values.length; pos += STRINGS_PER_SEGMENT, ++segment)
{
int segmentLength = values.length-pos;
if (segmentLength > STRINGS_PER_SEGMENT)
segmentLength = STRINGS_PER_SEGMENT;
string[] segmentValues = new string[segmentLength];
for (int i = 0; i < segmentLength; ++i)
segmentValues[i] = values[pos+i];
if(segmentValues.length > 0)
setObjVar(self, varName + "_mangled.segment." + segment, segmentValues);
}
}
// ----------------------------------------------------------------------
obj_id[] getMangledObjIdArrayObjVar(obj_id self, string varName)
{
if (hasObjVar(self, varName))
return getObjIdArrayObjVar(self, varName);
int count = getIntObjVar(self, varName + "_mangled.count");
if (count <= 0)
return null;
obj_id[] values = new obj_id[count];
int segment = 0;
int valuePos = 0;
while (valuePos < count)
{
obj_id[] segmentValues = getObjIdArrayObjVar(self, varName + "_mangled.segment." + segment);
if (segmentValues == null)
break;
++segment;
for (int i = 0; i < segmentValues.length && valuePos < count; ++i)
values[valuePos++] = segmentValues[i];
}
if (valuePos != count)
return null;
return values;
}
// ----------------------------------------------------------------------
void setMangledObjIdArrayObjVar(obj_id self, string varName, obj_id[] values)
{
removeObjVar(self, varName);
removeObjVar(self, varName + "_mangled.segment");
setObjVar(self, varName + "_mangled.count", values.length);
int pos, segment;
for (pos = 0, segment = 0; pos < values.length; pos += OBJIDS_PER_SEGMENT, ++segment)
{
int segmentLength = values.length-pos;
if (segmentLength > OBJIDS_PER_SEGMENT)
segmentLength = OBJIDS_PER_SEGMENT;
obj_id[] segmentValues = new obj_id[segmentLength];
for (int i = 0; i < segmentLength; ++i)
segmentValues[i] = values[pos+i];
if(segmentValues.length > 0)
setObjVar(self, varName + "_mangled.segment." + segment, segmentValues);
}
}
// ======================================================================