Script: Animlore
From Ultima Online: The Second Age
inherits sk_table;
function void Q557(string Q4Y5, list Q4YF) { int count; int Q5EJ = numInList(Q4YF); for(count = 0x00; count < Q5EJ; count++) { string Q5ZE = Q4YF[count]; if (count == (Q5EJ - 0x01)) { Q4Y5 = Q4Y5 + Q5ZE; } if (count == (Q5EJ - 0x02)) { Q4Y5 = Q4Y5 + Q5ZE + " and "; } if (count < (Q5EJ - 0x02)) { Q4Y5 = Q4Y5 + Q5ZE + ", "; } } return (); }
trigger message("canUseSkill") { return (0x00); }
trigger callback(0x4D) { detachScript(this, "animlore"); return (0x00); }
trigger message("useSkill") { callback(this, 0x0A, 0x4D); systemMessage(this, "What animal should I look at?"); targetObj(this, this); return (0x00); }
trigger targetobj { if (usedon == NULL()) { return (0x00); } if (!isMobile(usedon)) { barkTo(this, this, "That's not an animal!"); return (0x00); } if (isHuman(usedon)) { barkTo(this, this, "That's not an animal!"); return (0x00); } loc Q4VS = getLocation(this); loc there = getLocation(usedon); if (getDistanceInTiles(Q4VS, there) > 0x10) { barkTo(usedon, this, "I am too far away to do that."); return (0x00); } int Q5TE = testSkillReal(this, 0x02); if (Q5TE <= 0x00) { barkTo(usedon, this, "You can't think of anything you know offhand."); return (0x00); } int Q48L = getObjType(usedon); string name; name = getName(usedon); int Q4Q1; int count; list Q4Q7; list Q5RT; list Q5KP; list Q4HM; string Q4YK; string Q5UH; string Q496; string Q4Y5; string Q5ZE; Q4Q1 = getResourcesOnObj(usedon, 0x01, Q5RT); removeSpecificItem(Q5RT, "spookiness"); int Q5EP = numInList(Q5RT); for(count = 0x00; count < Q5EP; count++) { Q4YK = Q5RT[count]; Q5UH = getResourceName(Q4YK, 0x01); setItem(Q5RT, Q5UH, count); } toUpper(name, 0x00, 0x01); Q4Y5 = name + " lives in "; Q557(Q4Y5, Q5RT); Q4Q1 = getResourcesOnObj(usedon, 0x00, Q4Q7); removeSpecificItem(Q4Q7, "spookiness"); removeSpecificItem(Q4Q7, "jungle"); int Q5EK = numInList(Q4Q7); for(count = 0x00; count < Q5EK; count++) { Q4YK = Q4Q7[count]; Q5UH = getResourceName(Q4YK, 0x00); setItem(Q4Q7, Q5UH, count); } Q4Y5 = Q4Y5 + " and eats "; Q557(Q4Y5, Q4Q7); Q4Y5 = Q4Y5 + ". "; Q4Q1 = getResourcesOnObj(usedon, 0x03, Q5KP); removeSpecificItem(Q5KP, "carnivoremeat"); removeSpecificItem(Q5KP, "meat"); removeSpecificItem(Q5KP, "spookiness"); removeSpecificItem(Q5KP, "good"); removeSpecificItem(Q5KP, "neutral"); removeSpecificItem(Q5KP, "evil"); removeSpecificItem(Q5KP, "orccamp"); removeSpecificItem(Q5KP, "magic"); int Q5EM = numInList(Q5KP); for(count = 0x00; count < Q5EM; count++) { Q4YK = Q5KP[count]; Q5UH = getResourceName(Q4YK, 0x03); if (Q5UH == "cloth") { Q5UH = "wool"; } if (Q5UH == "ridable") { Q5UH = "ability to carry"; } if (Q5UH == "leather") { Q5UH = "hide" ); } setItem(Q5KP, Q5UH, count); } if (Q5EM > 0x00) { Q4Y5 = Q4Y5 + "They are sometimes used for their "; Q557(Q4Y5, Q5KP); Q4Y5 = Q4Y5 + ". "; } Q4Q1 = getResourcesOnObj(usedon, 0x02, Q4HM); int Q5EI = numInList(Q4HM); for(count = 0x00; count < Q5EI; count++) { Q4YK = Q4HM[count]; Q5UH = getResourceName(Q4YK, 0x02); setItem(Q5KP, Q5UH, count); } for(count = 0x00; count < Q5EI; count++) { list Q5LT; list Q47D; string Q5N3 = Q4HM[count]; int Q4HK; Q4Q1 = getResource(Q4HK, usedon, Q5N3, 0x02, 0x01); if (Q4HK < 0x00) { if (!(Q5N3 == "danger")) { if (Q5N3 == "meat") { appendToList(Q47D, "carnivores"); } else { appendToList(Q47D, Q5N3); } } } if (Q4HK > 0x00) { if (Q5N3 == "self") { appendToList(Q5LT, "others of their kind"); } else { appendToList(Q5LT, Q5N3); } } } int Q5EO = numInList(Q5LT); if (Q5EO > 0x00) { Q4Y5 = Q4Y5 + "They are usually found near "; Q557(Q4Y5, Q5LT); } int Q5EH = numInList(Q47D); if (Q5EH > 0x00) { if (Q5EO > 0x00) { Q4Y5 = Q4Y5 + " but they will tend to avoid "; } else { Q4Y5 = Q4Y5 + "They will avoid "; } Q557(Q4Y5, Q47D); } string Q4XH; int Q614 = getHungerLevel(usedon); if (!hasHome(usedon)) { Q4Y5 = Q4Y5 + "This one has the worn-down look of a creature that lacks a lair or home to call its own. "; } else { int Q4IJ = getDistanceInTiles(getHome(usedon), getLocation(usedon)); if (Q4IJ < 0x10) { Q4Y5 = Q4Y5 + "This appears to be its home. "; } else { if (Q4IJ > 0x46) { Q4Y5 = Q4Y5 + "It seems to be far from its normal home. "; } else { Q4Y5 = Q4Y5 + "Its home is probably nearby. "; } } } Q614 = Q614 / 0x0A; switch (Q614) { case 0x00 Q4XH = "like it is starving."; break; case 0x01 Q4XH = "near starving."; break; case 0x02 Q4XH = "pretty hungry."; break; case 0x03 Q4XH = "hungry."; break; case 0x04 case 0x05 case 0x06 Q4XH = "moderately well-fed."; break; case 0x07 Q4XH = "well-fed."; break; case 0x08 Q4XH = "plump."; break; case 0x09 Q4XH = "like it gets plenty to eat."; break; case 0x0A Q4XH = "replete, as if it has just eaten."; break; default Q4XH = "moderately well-fed."; break; } if (!hasObjListVar(usedon, "myBoss")) { Q4Y5 = Q4Y5 + "It looks " + Q4XH; } barkTo(this, this, Q4Y5); setObjVar(usedon, "askedMyLoyalty", this); shortCallback(usedon, 0x01, 0x43); return (0x00); }