#include #include #include #include inherit LIB_ACTIVATE; inherit LIB_INSTALL; inherit LIB_WORN_STORAGE; static int active = 0; int lupus; mapping SpecialFuns = ([]); int CheckPanel(){ if(this_object()->GetClosed()){ write("The wrist computer is closed. The panel is not accessible."); } else { write("A panel you can read."); } return 1; } static void create() { worn_storage::create(); SetKeyName("wrist computer"); SetId( ({ "computer", "bracer","comp","wristcomp","system" }) ); SetAdjectives( ({ "wrist","odd","odd looking","complex","tough","rugged", "tactical", "tactical data" }) ); SetShort("a Yautja wrist computer"); SetLong("An odd looking bracer intended to be worn on the arm. It looks " "extremely complex yet also very tough and rugged. One may perhaps " "\"activate bracer\". It appears that one can access special functions " "by opening it."); SetDamagePoints(75); SetVendorType(VT_ARMOR); SetMass(10); SetBaseCost("silver", 1000); SetArmorType(A_CUSTOM); SetProtection(BLUNT, 10); SetProtection(BLADE, 10); SetProtection(KNIFE, 20); SetProtection(HEAT, 30); SetRestrictLimbs(({"left arm"})); SetMaxCarry(100); SetCanClose(1); SetClosed(1); SetLanguage("Yautja"); SetItems( ([ ({"panel","functions"}) : (: CheckPanel :), ]) ); SetRead( ([ ({ "panel", "default" }) :"Yautja tactical data system, version .09", //"panel": (: eventRead :), ]) ); SetMaxClones(2); } int eventInitialize(){ object env; if(!(env = environment()) || !living(env)) return 0; foreach(object module in all_inventory()){ if(module) module->eventInstall(env, this_object()); } return 1; } void init(){ ::init(); eventInitialize(); } int eventMove(mixed arg){ eventInitialize(); return ::eventMove(arg); } varargs int YautLang(object whom){ if(!whom) whom = this_player(); if(!whom) return 0; if(whom->GetPolyglot()) return 100; return whom->GetLanguageLevel("Yautja"); } varargs void yaut_write(string str, object whom){ if(!str || !sizeof(str)) return; if(!whom) write("%^MAGENTA%^"+translate(str,YautLang())+"%^RESET%^"); else tell_object(whom,"%^MAGENTA%^"+translate(str,YautLang(whom))+"%^RESET%^"); } varargs void yaut_say(string str, mixed whom){ object *exclude = ({}); object *include = get_livings(environment(this_player())); if(whom){ if(objectp(whom)) exclude = ({ whom }); else exclude = whom; } include -= exclude; if(sizeof(include)) foreach(object dude in include){ yaut_write(str, dude); } } int eventTurnOn(){ object *contents = all_inventory(); if(!(this_object()->GetWorn()) || !this_player() || environment(this_object()) != this_player()){ write("You are not wearing the wrist computer."); return 1; } write("You activate the wrist computer. The computer says:"); say(this_player()->GetName()+" operates "+possessive(this_player())+" " "wrist computer. You hear the computer say: "); yaut_say("Computer online."); if(sizeof(contents)) contents->eventPowerOn(); active = 1; return 1; } int eventTurnOff(){ object *contents = all_inventory(); write("You deactivate the wrist computer. The computer says:"); say(this_player()->GetName()+" operates "+possessive(this_player())+" " "wrist computer. You hear the computer say: "); yaut_say("Computer offline."); if(sizeof(contents)) contents->eventPowerOff(); active = 0; return 1; } varargs mixed eventInstall(object what, object where){ write("The wrist computer is not installable anywhere"); return 1; } int CanReceive(object ob){ if(!answers_to("yautja data module",ob)){ write("That is not a proper data module for this computer."); return 0; } else return 1; } varargs mixed eventUninstallModule(object which, int auto){ object *contents = all_inventory(); object module = previous_object(); if(which) module = which; if(!auto) say(this_player()->GetName()+" operates "+possessive(this_player())+" " "wrist computer."); if(!active){ if(!auto) write("The computer is not active."); return 1; } if(!auto){ write("You attempt to uninstall a module from the wrist computer. The computer says:"); say(this_player()->GetName()+"'s wrist computer says: "); yaut_say("Uninstalling..."); } if(SpecialFuns[module]) foreach(mixed key, mixed val in SpecialFuns[module]){ remove_action("foo",SpecialFuns[module][key]["hook"]); if(!auto){ yaut_say(key+" successfully uninstalled."); } } map_delete(SpecialFuns, module); return 1; } varargs mixed eventInstallModule(mapping ModuleData, int auto){ string *contents = ({}); object module = previous_object(); if(member_array("eventInitialize",call_stack(2)) != -1) auto = 1; if(!auto) say(this_player()->GetName()+" operates "+possessive(this_player())+" " "wrist computer."); if(!answers_to("Yautja data module",module)){ if(!auto) write("That is not a proper data module for this computer."); return 0; } if(!active){ if(!auto) write("The computer is not active."); return 1; } if(this_object()->GetClosed()){ write("The computer is closed."); return 1; } if(sizeof(all_inventory())) foreach(object element in all_inventory()){ contents += ({ base_name(element) }); } if(member_array(base_name(module),contents) != -1){ if(!auto){ write("The wrist computer already contains that type of module."); return 0; } } SpecialFuns[module] = ModuleData; if(!auto){ write("You install a module into the wrist computer. The computer says:"); say(this_player()->GetName()+"'s wrist computer says: "); yaut_say("Installing..."); } foreach(mixed key, mixed val in SpecialFuns[module]){ add_action(SpecialFuns[module][key]["function"],SpecialFuns[module][key]["hook"]); if(!auto){ yaut_say(key+" successfully installed."); module->eventMove(this_object()); } } return 1; } mixed CanPutInto(object who, object item){ return "This is a wrist computer. One can install modules on it."; } mixed CanGetFrom(object who, object item){ return "This is a wrist computer. One can uninstall modules from it."; } varargs mixed eventRead(mixed who, mixed str){ object dude; string what; string ret = "Yautja tactical data system display. Installed modules:\n"; if(stringp(who)){ what = who; dude = this_player(); } else { dude = who; what = str; } if(this_object()->GetClosed()){ write("The wrist computer is closed. There is nothing to read."); return 1; } if(!active){ write("The wrist computer is not activated."); return 1; } foreach(mixed ob in all_inventory()){ if(ob->Report()) ret += ob->Report(); } if(!lupus && random(99) > 95){ lupus = 1; ret = "BAD WOLF"; } SetRead( ([ ({ "panel", "default" }) :ret, ]) ); return ::eventRead(dude, what); } varargs mixed eventOpen(object who, object tool){ SetProtection(BLUNT, 1); SetProtection(BLADE, 1); SetProtection(KNIFE, 2); SetProtection(HEAT, 3); ::eventOpen(who || 0, tool || 0); if(!(this_object()->GetClosed())){ write("Opening the wrist computer yields a panel you can read."); return 1; } return 0; } mixed eventClose(object who){ SetProtection(BLUNT, 10); SetProtection(BLADE, 10); SetProtection(KNIFE, 20); SetProtection(HEAT, 30); return ::eventClose(who || 0); } string GetInternalDesc(){ return "This is the interface for the wrist computer. You may try to \"read computer\""; } varargs mixed eventUnequip(object who){ object *contents = all_inventory(); if(sizeof(contents)) contents->eventPowerOff(); ::eventUnequip(who||0); }