// /bin/high_mortal/_create.c
// from the Nightmare mudlib
// The power of creation for mages
// created by Descartes of Borg 02 march 1993
// fixed directories Bohemund of New Hampshire 19 march 1994
// Lowered values somewhat 09 July 94 - Zaknaifen of Approval
#include <std.h>
inherit DAEMON;
object make_it(string what, int x);
object do_weapon(int x);
object do_armour(int x);
int cmd_create(string str) {
int cost, can;
object ob;
if(!str) {
notify_fail("Create what?\n");
return 0;
}
if((int)this_player()->query_skill("conjuring") < 90) {
notify_fail("You are not quite adept enough at conjuring.\n");
return 0;
}
if(environment(this_player())->query_property("no magic")) {
notify_fail("A supernatural force prevents your magic.\n");
return 0;
}
if(str != "weapon" && str != "armour" && str != "bag") {
notify_fail("You cannot create that!\n");
return 0;
}
if((int)this_player()->query_mp() < 70) {
notify_fail("Too low on magic power.\n");
return 0;
}
this_player()->add_mp(-70);
say(this_player()->query_cap_name()+" utters a spell of conjuring.\n");
can = (int)this_player()->query_skill("conjuring");
can -= random(101);
if(can < 0) {
write("You fail to create anything.\n");
return 1;
}
ob = make_it(str, can);
if(ob->move(this_player())) {
write("You drop "+ob->query_short()+".\n");
say(this_player()->query_cap_name()+" drops "+ob->query_short()+".\n");
ob->move(environment(this_player()));
}
write("You create a "+(string)ob->query_name()+".\n");
say(this_player()->query_cap_name()+" creates a "+(string)ob->query_name()+".\n");
this_player()->add_skill_points("conjuring", random(100));
return 1;
}
object make_it(string str, int x) {
object ob;
switch(str) {
case "bag":
ob = new(BAG);
ob->set_name("bag");
ob->set_id( ({ "bag", "bag of holding" }) );
ob->set_short((string)this_player()->query_cap_name()+"'s bag of holding");
ob->set_long(
"It is a magic bag created by "+(string)this_player()->query_cap_name()+".\n"
);
ob->set_weight(50);
ob->set_value(60);
ob->set_max_internal_encumbrance(1500);
ob->set_destroy();
break;
case "armour":
ob = do_armour(x);
break;
default:
ob = do_weapon(x);
}
return ob;
}
object do_weapon(int x) {
string what;
object ob;
ob = new(WEAPON);
if(random(100) > x) what = "throwing star";
else what = "mace";
ob->set_name(what);
ob->set_id( ({ (string)this_player()->query_name()+"'s "+what, what }) );
ob->set_short((string)this_player()->query_cap_name()+"'s "+what);
ob->set_long("A "+what+" created by "+(string)this_player()->query_cap_name()+".\n");
if(what == "mace") ob->set_type("blunt");
else ob->set_type("projectile");
if(x > 17) x = 17;
ob->set_wc(random(x)+2);
ob->set_weight(567);
ob->set_value(random(50)+10);
return ob;
}
object do_armour(int x) {
object ob;
ob = new(ARMOUR);
ob->set_name("helm");
ob->set_id( ({ "helm", "mage's helm" }) );
ob->set_short("Mage's helm");
ob->set_long("A helm of mage conjuring.\n");
ob->set_limbs( ({ "head" }) );
ob->set_type("helm");
if(x > 30) x = 30;
x = x/2;
ob->set_ac(random(x));
ob->set_value(random(50)+10);
ob->set_weight(700);
ob->set_destroy();
return ob;
}
void help() {
write("Syntax: <create [weapon | armour | bag]>\n\n");
write("Creates from nothing an armour or bag or weapon.\n");
}