diff options
Diffstat (limited to 'NET/worlds/scape/WearAction.java')
| -rw-r--r-- | NET/worlds/scape/WearAction.java | 450 |
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 |