summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/WearAction.java
diff options
context:
space:
mode:
Diffstat (limited to 'NET/worlds/scape/WearAction.java')
-rw-r--r--NET/worlds/scape/WearAction.java450
1 files changed, 450 insertions, 0 deletions
diff --git a/NET/worlds/scape/WearAction.java b/NET/worlds/scape/WearAction.java
new file mode 100644
index 0000000..a6a28a6
--- /dev/null
+++ b/NET/worlds/scape/WearAction.java
@@ -0,0 +1,450 @@
+/* */ package NET.worlds.scape;
+/* */
+/* */ import NET.worlds.console.Console;
+/* */ import NET.worlds.network.URL;
+/* */ import java.io.IOException;
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public class WearAction
+/* */ extends Action
+/* */ {
+/* 31 */ char limb = 'B';
+/* */
+/* */
+/* 34 */ String val = "";
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public Persister trigger(Event e, Persister seqID)
+/* */ {
+/* 42 */ Object owner = getOwner();
+/* 43 */ if (owner != null) {
+/* 44 */ setAvLimb(this.limb, this.val);
+/* */ }
+/* 46 */ return null;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */ public static void setAvLimb(char limb, String v)
+/* */ {
+/* 66 */ String str = PosableShape.getCurrentAvCustomizable();
+/* */
+/* 68 */ if (str == null) {
+/* 69 */ return;
+/* */ }
+/* 71 */ int pos = str.indexOf(".", 7);
+/* 72 */ String bodyType = str.substring(7, pos).toLowerCase();
+/* */
+/* */ int matStart;
+/* */
+/* */ int matEnd;
+/* 77 */ if ((limb == 'H') || (limb == 'E')) {
+/* 78 */ int head = str.lastIndexOf("NS");
+/* 79 */ if (head < 0) {
+/* 80 */ return;
+/* */ }
+/* */
+/* 83 */ if (v == null) {
+/* 84 */ v = bodyType;
+/* 85 */ if (limb == 'E')
+/* */ {
+/* 87 */ limb = 'H';
+/* */
+/* 89 */ if ((head >= 0) && (str.charAt(head + 5) == 'G')) {
+/* 90 */ v = PosableShape.readName(str, head + 6).toLowerCase();
+/* */ }
+/* */ }
+/* */ }
+/* 94 */ int face = str.lastIndexOf("DgT");
+/* 95 */ int faceEnd = -1;
+/* 96 */ if (face < head) {
+/* 97 */ if (limb == 'E') {
+/* 98 */ Console.println(
+/* 99 */ "Can't change the face of this type of head.");
+/* 100 */ return;
+/* */ }
+/* */
+/* 103 */ face = -1;
+/* */ }
+/* */ else
+/* */ {
+/* 107 */ faceEnd = face + 2;
+/* */ int i;
+/* 109 */ while ((i = PosableShape.skipMat(str, faceEnd)) != faceEnd) { int i;
+/* 110 */ faceEnd = i;
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* 116 */ URL urlVal = PosableShape.getAvURL(v);
+/* 117 */ if (urlVal == null) {
+/* 118 */ return;
+/* */ }
+/* 120 */ String val = urlVal.getAbsolute();
+/* 121 */ if (val == null) {
+/* 122 */ return;
+/* */ }
+/* 124 */ if (limb == 'H')
+/* */ {
+/* 126 */ int newHead = val.lastIndexOf("NS");
+/* 127 */ if (newHead < 0) {
+/* 128 */ return;
+/* */ }
+/* 130 */ String geom = "";
+/* 131 */ pos = str.indexOf(".0E", 7);
+/* 132 */ if (!v.equalsIgnoreCase(str.substring(7, pos))) {
+/* 133 */ geom = "G" + PosableShape.getBodyType(v);
+/* */ }
+/* 135 */ int matStart = head + 5;
+/* 136 */ int matEnd = str.length();
+/* 137 */ v = geom + val.substring(newHead + 5);
+/* */ }
+/* */ else {
+/* 140 */ int newFace = val.lastIndexOf("Dg");
+/* 141 */ if (newFace < 0) {
+/* 142 */ return;
+/* */ }
+/* */
+/* */
+/* 146 */ int newEnd = newFace + 2;
+/* 147 */ int i; while ((i = PosableShape.skipMat(val, newEnd)) != newEnd) { int i;
+/* 148 */ newEnd = i;
+/* */ }
+/* 150 */ int matStart = face;
+/* 151 */ int matEnd = faceEnd;
+/* 152 */ v = val.substring(newFace, newEnd);
+/* */ }
+/* 154 */ } else if (limb == 'Q') {
+/* 155 */ int sInd = str.lastIndexOf("NS");
+/* 156 */ if (sInd < 0) {
+/* 157 */ Console.println("Can't customize this avatar.");
+/* 158 */ return;
+/* */ }
+/* 160 */ int matStart = sInd + 2;
+/* 161 */ int matEnd = sInd + 5;
+/* */
+/* 163 */ if (v == null)
+/* 164 */ v = "000";
+/* 165 */ } else if (limb == 'f')
+/* */ {
+/* */
+/* */
+/* */
+/* */
+/* 171 */ int face = str.lastIndexOf("Dg");
+/* 172 */ if (face > 0)
+/* */ {
+/* */
+/* 175 */ int end = face + 2;
+/* 176 */ int i; while ((i = PosableShape.skipMat(str, end)) != end) { int i;
+/* 177 */ end = i;
+/* */ }
+/* */
+/* 180 */ int len = str.length() - 4;
+/* */
+/* 182 */ String val = "";
+/* */
+/* 184 */ while (i < len)
+/* */ {
+/* 186 */ char c = str.charAt(i);
+/* 187 */ if (c == 'Q')
+/* */ {
+/* 189 */ val = val + c;
+/* 190 */ i++;
+/* */
+/* */ }
+/* 193 */ else if ((c >= '0') && (c <= '9'))
+/* */ {
+/* 195 */ val = val + c;
+/* 196 */ i++;
+/* */
+/* */ }
+/* */ else
+/* */ {
+/* 201 */ int j = PosableShape.skipMat(str, i);
+/* 202 */ if (i != j)
+/* */ {
+/* 204 */ val = val + "f";
+/* 205 */ i = j;
+/* */ }
+/* */ else
+/* */ {
+/* 209 */ i++;
+/* */ }
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* 216 */ if (v == null)
+/* */ {
+/* 218 */ URL origURL = PosableShape.getAvURL(bodyType);
+/* 219 */ String origStr = "";
+/* 220 */ if (origURL != null)
+/* */ {
+/* 222 */ origStr = origURL.getInternal();
+/* */ }
+/* 224 */ int origFace = origStr.lastIndexOf("Dg");
+/* */
+/* 226 */ if (origFace > 0)
+/* */ {
+/* */
+/* 229 */ int origEnd = origFace + 2;
+/* 230 */ int k; while ((k = PosableShape.skipMat(origStr,
+/* 231 */ origEnd)) != origEnd) { int k;
+/* 232 */ origEnd = k; }
+/* 233 */ str =
+/* 234 */ str.substring(0, end) + origStr.substring(origEnd);
+/* */ }
+/* */ }
+/* */ else
+/* */ {
+/* 239 */ str = str.substring(0, end) + val + ".rwg";
+/* */ }
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* */
+/* */
+/* 248 */ int matStart = PosableShape.getMatPosition(str, limb);
+/* 249 */ if (matStart < 0)
+/* 250 */ return;
+/* 251 */ int matEnd = PosableShape.skipMat(str, matStart);
+/* */
+/* 253 */ if (v == null)
+/* */ {
+/* 255 */ URL origURL = PosableShape.getAvURL(bodyType);
+/* */
+/* 257 */ if (origURL == null) {
+/* 258 */ return;
+/* */ }
+/* 260 */ String origStr = origURL.getInternal();
+/* 261 */ int origMat = PosableShape.getMatPosition(origStr, limb);
+/* */
+/* */
+/* 264 */ if (origMat < 0) {
+/* 265 */ return;
+/* */ }
+/* 267 */ int origMatEnd = PosableShape.skipMat(origStr, origMat);
+/* */
+/* 269 */ v = origStr.substring(origMat, origMatEnd);
+/* */ }
+/* */ }
+/* */ else
+/* */ {
+/* 274 */ matStart = PosableShape.getMatPosition(str, limb);
+/* 275 */ if (matStart < 0)
+/* 276 */ return;
+/* 277 */ matEnd = PosableShape.skipMat(str, matStart);
+/* */
+/* 279 */ if (v == null)
+/* */ {
+/* 281 */ URL origURL = PosableShape.getAvURL(bodyType);
+/* 282 */ if (origURL == null)
+/* */ {
+/* 284 */ return;
+/* */ }
+/* */
+/* 287 */ String origStr = origURL.getInternal();
+/* 288 */ int origMat = PosableShape.getMatPosition(origStr, limb);
+/* */
+/* */
+/* 291 */ if (origMat < 0) {
+/* 292 */ return;
+/* */ }
+/* 294 */ int origMatEnd = PosableShape.skipMat(origStr, origMat);
+/* */
+/* 296 */ v = origStr.substring(origMat, origMatEnd);
+/* */ }
+/* */ }
+/* */
+/* 300 */ Console co = Console.getActive();
+/* 301 */ if (co != null)
+/* 302 */ co.setAvatar(URL.make(str.substring(0, matStart) +
+/* 303 */ v + str.substring(matEnd)));
+/* */ }
+/* */
+/* */ public static String makeMatString(int r, int g, int b) {
+/* 307 */ StringBuffer sb = new StringBuffer("C");
+/* 308 */ sb.append(toBase64(r));
+/* 309 */ sb.append(toBase64(g));
+/* 310 */ sb.append(toBase64(b));
+/* 311 */ return sb.toString();
+/* */ }
+/* */
+/* */ public static char toBase64(int i) {
+/* 315 */ return PosableShape.base64.charAt(i);
+/* */ }
+/* */
+/* 318 */ private static String allowedLimbChars = "PBLMORUVIJKXYZabcdefHQE";
+/* */
+/* */
+/* */
+/* */
+/* */ public Object properties(int index, int offset, int mode, Object value)
+/* */ throws NoSuchPropertyException
+/* */ {
+/* 326 */ Object ret = null;
+/* 327 */ switch (index - offset) {
+/* */ case 0:
+/* 329 */ if (mode == 0) {
+/* 330 */ ret = StringPropertyEditor.make(
+/* 331 */ new Property(this, index, "Limb"));
+/* 332 */ } else if (mode == 1) {
+/* 333 */ ret = new String(this.limb);
+/* 334 */ } else if (mode == 2) {
+/* 335 */ String s = (String)value;
+/* 336 */ if ((s.length() != 1) ||
+/* 337 */ (allowedLimbChars.indexOf(s.charAt(0)) < 0)) {
+/* 338 */ Console.println("Limb must one of " + allowedLimbChars);
+/* */ } else {
+/* 340 */ this.limb = s.charAt(0);
+/* 341 */ this.val = null;
+/* */ }
+/* */ }
+/* */
+/* 345 */ break;
+/* */ case 1:
+/* 347 */ if (mode == 0) {
+/* 348 */ ret = StringPropertyEditor.make(
+/* 349 */ new Property(this, index, "Value").allowSetNull());
+/* 350 */ } else if (mode == 1) {
+/* 351 */ ret = this.val;
+/* 352 */ } else if (mode == 2) {
+/* 353 */ String v = (String)value;
+/* 354 */ if (v != null)
+/* */ {
+/* 356 */ if ((this.limb == 'H') || (this.limb == 'E'))
+/* */ {
+/* 358 */ if (PosableShape.readName(v, 0).length() != v.length()) {
+/* 359 */ Console.println("Head and face must be set to all-lowercase name of body type.");
+/* */
+/* 361 */ return ret;
+/* */ }
+/* 363 */ } else if (this.limb == 'Q')
+/* */ {
+/* 365 */ if (v.length() != 3) {
+/* 366 */ Console.println(
+/* 367 */ "Head size must be three letters, usually all the same.");
+/* 368 */ return ret;
+/* */ }
+/* */
+/* 371 */ for (int i = 0; i < 3; i++) {
+/* 372 */ char c = v.charAt(i);
+/* 373 */ if ((c != '0') && ((c < 'a') || (c > 'z')) && (
+/* 374 */ (c < 'A') || (c > 'Z')))
+/* */ {
+/* 376 */ Console.println(
+/* 377 */ "Head size letters must each be one of z-a9A-Z.");
+/* 378 */ return ret;
+/* */ }
+/* */ }
+/* */ }
+/* 382 */ else if (v.length() < 1) {
+/* 383 */ v = null;
+/* 384 */ } else if ((v.charAt(0) != 'C') &&
+/* 385 */ (v.charAt(0) != 'T'))
+/* */ {
+/* 387 */ Console.println(
+/* 388 */ "Material must be C_X, CXYZ, or Ttexname.");
+/* 389 */ return ret;
+/* */ }
+/* */ }
+/* */
+/* 393 */ this.val = v;
+/* */ }
+/* 395 */ break;
+/* */ default:
+/* 397 */ ret = super.properties(index, offset + 2, mode, value);
+/* */ }
+/* 399 */ return ret;
+/* */ }
+/* */
+/* */
+/* */
+/* */
+/* 405 */ private static Object classCookie = new Object();
+/* */
+/* */ public void saveState(Saver s) throws IOException
+/* */ {
+/* 409 */ s.saveVersion(1, classCookie);
+/* 410 */ super.saveState(s);
+/* 411 */ s.saveString(this.val);
+/* 412 */ s.saveString(this.limb);
+/* */ }
+/* */
+/* */ public void restoreState(Restorer r) throws IOException, TooNewException
+/* */ {
+/* 417 */ switch (r.restoreVersion(classCookie)) {
+/* */ case 0:
+/* 419 */ super.restoreState(r);
+/* */
+/* 421 */ int red = r.restoreInt();
+/* 422 */ int green = r.restoreInt();
+/* 423 */ int blue = r.restoreInt();
+/* 424 */ String v = r.restoreString();
+/* */
+/* 426 */ if (v == null) {
+/* 427 */ this.val = makeMatString(red, green, blue); } else { char c;
+/* 428 */ if ((v.length() == 1) && ((c = v.charAt(0)) >= 'A') && (c <= 'Z')) {
+/* 429 */ this.val = ("C_" + v);
+/* */ } else
+/* 431 */ this.val = ("T" + v);
+/* */ }
+/* 433 */ this.limb = r.restoreString().charAt(0);
+/* 434 */ break;
+/* */ case 1:
+/* 436 */ super.restoreState(r);
+/* 437 */ this.val = r.restoreString();
+/* 438 */ this.limb = r.restoreString().charAt(0);
+/* 439 */ break;
+/* */ default:
+/* 441 */ throw new TooNewException();
+/* */ }
+/* */ }
+/* */ }
+
+
+/* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\scape\WearAction.class
+ * Java compiler version: 6 (50.0)
+ * JD-Core Version: 0.7.1
+ */ \ No newline at end of file