/
lib/banish/
lib/d/coronos/
lib/d/coronos/w/alena/
lib/d/coronos/w/angel/
lib/d/coronos/w/angel/caves/
lib/d/coronos/w/angel/caves/monst/
lib/d/coronos/w/angel/city/chambers/
lib/d/coronos/w/angel/city/monst/
lib/d/coronos/w/angel/city/obj/
lib/d/coronos/w/angel/city/streets/
lib/d/coronos/w/angel/farms/plains/
lib/d/coronos/w/angel/monst/
lib/d/tempus/
lib/d/tempus/w/angel/
lib/d/tempus/w/kingbill/
lib/d/tempus/w/mirak/
lib/d/tempus/w/mirak/monst/
lib/d/tempus/w/mirak/obj/
lib/d/tempus/w/relgar/planes/baat/
lib/d/tempus/w/sarak/
lib/d/tempus/w/serepion/mon/
lib/d/tempus/w/valrejn/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/include/fn_specs/
lib/info/
lib/inherit/base/
lib/log/
lib/log/mailbox/
lib/log/main/
lib/news/
lib/obj/party/
lib/objects/componen/
lib/open/
lib/open/party/
lib/open/paste/
lib/open/spells/
lib/open/valrejn/
lib/players/
lib/players/alena/
lib/players/alena/obj/
lib/players/alena/open/
lib/players/alena/private/
lib/players/angel/
lib/players/angel/obj/
lib/players/ash/
lib/players/biggs/
lib/players/biggs/food/
lib/players/biggs/gobkeep/
lib/players/biggs/mnstr/
lib/players/biggs/town/caves/
lib/players/biggs/town/tower/
lib/players/biggs/wpns/
lib/players/calris/
lib/players/deathurg/
lib/players/deathurg/open/
lib/players/deathurg/private/thief/
lib/players/dogberry/
lib/players/dogberry/library/
lib/players/dogberry/open/
lib/players/epsilon/
lib/players/epsilon/private/
lib/players/farewell/
lib/players/hippo/
lib/players/hippo/open/
lib/players/hippo/tools/
lib/players/jimpa/
lib/players/josh/
lib/players/josh/room/
lib/players/josh/room/mage/dungeon/
lib/players/josh/room/mage/dungeon/obj/
lib/players/josh/wep/
lib/players/kingbill/
lib/players/metatron/
lib/players/miette/
lib/players/mirak/
lib/players/mirak/open/
lib/players/parsilan/
lib/players/relgar/
lib/players/relgar/private/
lib/players/sarak/
lib/players/sarak/bugs/
lib/players/sarak/feelings/
lib/players/sarak/magical/
lib/players/sarak/minotaur/island/
lib/players/sarak/open/
lib/players/sarak/private/
lib/players/serepion/
lib/players/serepion/open/
lib/players/serepion/private/
lib/players/spike/
lib/players/spike/open/
lib/players/spike/private/
lib/players/spike/seaworld/
lib/players/valrejn/
lib/players/valrejn/open/
lib/players/valrejn/private/
lib/players/virus/
lib/players/wrath/
lib/players/wrath/arm/
lib/players/wrath/mon/
lib/players/wrath/room/
lib/players/wrath/room/entry/
lib/players/wrath/room/zolgath/
lib/players/wrath/weap/
lib/players/zil/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/library/
lib/room/city/library/open/books/
lib/room/city/shop/
lib/room/death/
lib/room/death/open/
lib/room/island/
lib/room/keeps/
lib/room/registry/
lib/room/ships/crew/
lib/room/ships/open/
lib/room/ships/open/types/bounty/
lib/room/ships/open/types/nebula/
lib/room/ships/open/types/phoenix/
lib/secure/udp_cmd_/
lib/skills/
lib/skills/fighter/
lib/skills/psionici/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/no_banis/
lib/usr/players/
/* This is the Monk/Psi Sub-Class skill advancement room.
 * Psionicist as a monk sub-class was originally developed by Zilanthius
 * in his AD&D campaign world of Ivory, and reproduced here for H7.
 * Psi. v1.0 Angel '96
 */


#include <mudlib.h>
#include <linewrap.h>

#define GUILD_OB		"skills/obj/monk"
#define GUILD_STR		"Brotherhood of the Mind"
#define VALID_PSI_POWER	"/skills/psionicist/valid"

inherit GUILD;


void reset(status arg) {
    if(!guild_master) {
     guild_master = clone_object(MONSTER);
     move_object(guild_master,this_object());
     guild_master->set_name("brother mind");
     guild_master->set_alias("brother");
     guild_master->set_alignment(1000);
     guild_master->set_short("Brother Mind");
     guild_master->set_long(
	"Brother Mind is a humble disciple of the order of Contemplation.    \n"+
	"He seeks inner peace, harmony, and above all enlightenment through  \n"+
	"the perfection of his mind, through intense training and discipline.\n"+
	"Brother Mind gladly teaches those who wish to follow his path. \n");
     guild_master->set_gender(1);
     guild_master->set_race("human");
     guild_master->set_level(10000);
     guild_master->add_class("fighter");
     guild_master->add_class("psionicist");
     guild_master->add_class("monk");
     guild_master->add_class("cleric");
     guild_master->load_a_chat(25,({ 
	"Brother Mind says: My mind is superior to your.\n",
	"Brother Mind says: Your weapons can not harm me.\n",
	"Brother Mind says: I shall destroy your body, then your mind.\n",
     }));
     guild_master->set_magic_resist(50);
    }

    if(arg) return;
    set_short("the halls of the brotherhood of the mind");
    set_long(
	);

    set_items(({
    }));

    set_weather(2, 1, 0);
    set_guild_name(GUILD_STR);

    set_exits(({
    }));

    set_races(({ "human", "grey elf", "high elf", "half elf",
      "gray elf", "dark elf", "gnome", "halfling", 
      "forest gnome", "deep gnome",
      "hill dwarf", "moutain dwarf",
    }));


    set_classes(({
     "general",        ({
       "climb", "swim",
     }),

     "primary",        ({
       "strength", "intelligence", "wisdom", "dexterity", 
       "combat",   "constitution", "charisma",
     }),


     "psionicist",        ({
	"clairsentient", "psychokinetic", "psychometabolic",
	"psychoportive", "telepathic", "metapsionic",
      }),

   }));

    set_exp(({
     0,       1014,    1522,    2283,    3425,    5138,
     7707,    11561,   17341,   26012,   39018,   58527,
     87791,   131687,  197530,  296296,  444444,  666666,
     1000000, 1500000, 2000000, 2500000, 3000000, 3500000,
     4000000, 4500000, 5000000, 5500000, 6000000, 6500000,
    }));

    set_skill_exp(({
     30,      50,      75,      100,     175,     250,
     400,     600,     900,     1200,    2000,    3000,
     4500,    6500,    10000,   15000,   20000,   30000,
     50000,   75000,   100000,  125000,  150000,  175000,
     200000,  225000,  250000,  275000,  300000,  325000,
    }));

    set_titles(({ 
     ({}), /* no neuter characters now but possible */


     /* male titles */ 
     ({
      }),

     /* female titles */
     ({

     }),
   }));

    /*** get a new pretitle one in four levels after 30 ***/
    set_pretitles(({
     ({}), /* no neuter pretitles */

     /* male pretitles */
     ({

     }),

     /* female pretitles */
     ({

     }),
   }));

}


void init() {
  if(guild_master) {
    object attacker;
    if((attacker = (object)guild_master->query_primary_attack())) {
      if(present(attacker, this_object())) {
        call_out("no_guild_mess",1,this_player());
        return;
      }
    }
  }
  if((string)this_player()->query_guild_string() ==
     (string)this_object()->query_guild_name()) {
     if(!present("guild_object", this_player()))
       move_object(clone_object(GUILD_OB),this_player());
  }
  add_action("train_mind", "learn");
  ::init();
}

void no_guild_mess(object ob) {
    tell_object(ob,"Brother Mind is busy defending himself.\n");
    tell_object(ob,"He is too busy to train anybody.\n");
}


status train_mind(string str) {
  int i, j;

  if((string)this_player()->query_guild_string() != GUILD_STR){
    notify_fail("Brother Mind says: Sorry, you can't train here.\n");
    return 0;
  }
  
  i = (int)this_player()->query_max_psp(); /* max skill pts for ab. */
  j = (int)this_player()->query_max_psi_skill_points();
  if((i-j) > 0) {
    this_player()->adj_psi_skill_points((i-j));
    this_player()->set_max_psi_skill_points(i);
  }

  if((int)this_player()->query_psi_skill_points()) {
    write("Brother Mind says: You still have skills of the mind to learn.  \n"+
	   "\tDo you wish to learn more? (press 'n' to learn a weapon skill)?\n"+
	   " (y/n) > ");
    input_to("train_mind2");
    return 1;
  }
  ::train_weapon(str);
  return 1;
}

status train_mind2(string str) {
  string *skills, tmp1, tmp2;

  
  skills = (string *)this_player()->query_all_psi_skills();

  if(!str || str == "" || str == "n") {
    writelw("\nBrother Mind says: Very well, perhaps you will like to train "+
	"your mind some other time.\n");
    return ::train_weapon(str);
  }

  write("\n\nBrother Mind says: There are many ways in which to improve "+
	"your mind.\n");
  if(sizeof(skills)) tmp1 = implode(skills, ", ");
  if(tmp1) {
    write("Brother Mind says: You already know the following psionic "+
    "skills: \n\n");
    writelw(tmp1+"\n");
  }
  else {
    write("Brother Mind says: You currently do not know any skills. \n");
    write("\n\tA devotion costs 1 pt to learn, a science 3 pts.\n"+
    "\tYou may learn as many, or as few skills, so long as you have \n"+
    "\tsome points remaining to spend.\n"+
    "\n\tYou should consult your help files to learn what powers are \n"+
    "\tavailable as once you learn a psionic power, you are unable \n"+
    "\tto change it.\n");
  }

  write("Brother Mind says: If you wish to learn more skills, type 'y'.\n"+
        " > ");
  input_to("train_mind3");
  return 1;
}

status train_mind3(string str) {
  if(!str || str == "" || str != "y") {
    write("Brother Mind says: Perhaps another time then.\n");
    return 1;
  }

  write("\n\nBrother Mind says: What new power can I teach you? \n"+
        "Write the name of the skill > ");
  input_to("train_mind4");
  return 1;
}

status train_mind4(string str) {
  int cost;

  if(!str || str == "") {
    write("Brother Mind asks: Perhaps another time then?\n");
    return 1;
  }
  if(this_player()->query_psi_skills(str)) {
    write("Brother Mind says: You already know that power. Choose another.\n"+
          " > ");
    input_to("train_mind4");
    return 1;
  }

  str = lower_case(str);
  if(!cost=VALID_PSI_POWER->valid_power(str)) {
    write("Brother Mind says: I can not teach you that power. Choose another.\n"+
          " > ");
    input_to("train_mind4");
    return 1;
  }
  if((int)this_player()->query_psi_skill_points() < cost) {
    write("Brother Mind says: It is not yet time for you to learn that power.\n"+
    "\tChoose another. > ");
    input_to("train_mind4");
    return 1;
  }

  this_player()->adj_psi_skill_points(-cost);
  this_player()->add_psi_skills(str);
  write("Brother Mind teaches you the power of "+str+"\n");
  write("Your mind feels stronger and enlightened.\n");
  return 1;
}


status leave(string str) {
  object obj;

  if(str != "psi" && str != "monk" && str != "psionicist") {
    write("Brother Mind says: Leave what?\n");
    return 1;
  }
  if(!this_player()->query_class("psi")) {
    write("Brother Mind says: Only members of the brotherhood of the mind \n\t"+
	"can stop their studies here.\n");
    return 1;
  }
  if(query_guild_name() != (string)this_player()->query_guild_string()) {
    write("Brother Mind says: Only the "+query_guild_name()+" can do that here.\n");
    return 1;
  }

  obj = present("guild_object", this_player());
  if(obj) destruct(obj);
  obj = this_player()->query_monk_aura_object();
  if(obj) destruct(obj);
  this_player()->save_me(1);
  ::leave(str);
  return 1;
}