Files
dsrc/sku.0/sys.server/compiled/game/script/library/objvar_mangle.java
T

287 lines
9.4 KiB
Java

package script.library;
import script.*;
import script.base_class.*;
import script.combat_engine.*;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Vector;
import script.base_script;
public class objvar_mangle extends script.base_script
{
public objvar_mangle()
{
}
public static final int INTS_PER_SEGMENT = 80;
public static final int FLOATS_PER_SEGMENT = 40;
public static final int STRINGS_PER_SEGMENT = 10;
public static final int OBJIDS_PER_SEGMENT = 40;
public static int[] getMangledIntArrayObjVar(obj_id self, String varName) throws InterruptedException
{
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;
}
public static void setMangledIntArrayObjVar(obj_id self, String varName, int[] values) throws InterruptedException
{
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);
}
}
}
public static float[] getMangledFloatArrayObjVar(obj_id self, String varName) throws InterruptedException
{
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;
}
public static void setMangledFloatArrayObjVar(obj_id self, String varName, float[] values) throws InterruptedException
{
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);
}
}
}
public static String[] getMangledStringArrayObjVar(obj_id self, String varName) throws InterruptedException
{
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;
}
public static String[] getBrokenMangledStringArrayObjVar(obj_id self, String varName) throws InterruptedException
{
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;
}
public static void setMangledStringArrayObjVar(obj_id self, String varName, String[] values) throws InterruptedException
{
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);
}
}
}
public static obj_id[] getMangledObjIdArrayObjVar(obj_id self, String varName) throws InterruptedException
{
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;
}
public static void setMangledObjIdArrayObjVar(obj_id self, String varName, obj_id[] values) throws InterruptedException
{
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);
}
}
}
}