/* 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;
}