/* Filename : master.c
* Description : the guildmaster of the example guild
*
* written : 30-05-1998 - Gunner
* last modified : 31-05-1998 - Gunner
* HTML-Version : 13-02-2000 - Ghorwin
*/
#include "/doc/crashcourse/course13/include/guild.h" // All file definitions
#include "/doc/crashcourse/course13/include/master.h" // All prototypes
inherit I_DAEMON;
/*
* join_guild : Called whenever someone tries to join the guild
*/
int
join_guild(object player)
{
string name;
if (!interactive(player)) // Monsters can't join!
{
tell_object(player,"Don't f**king try it!\n");
return 0;
}
name = Q_RNAME(player);
if (name == "guest") // Guest may NOT join!
{
tell_object(player,"You are merely a guest here, so you're not "
"allowed inside the guild. Get yourself a real player, and "
"come back later...\n");
return 0;
}
if (Q_GUILD(player)) // Only free adventurers may join...
{
if (Q_GUILD(player) == GUILD_MASTER)
tell_object(player,"You're already a member, silly!\n");
else
tell_object(player,"You are already a member of a guild, so why "
"not stick with it?\n");
return 0;
}
if (file_size(JOIN_MSG) > 0)
cat(JOIN_MSG);
player->set_guild(GUILD_MASTER);
player->set_guildinfo(0);
// If there is a channel for the guild.
player->command("turn on magesofdarkness");
player->command("alias cr chat magesofdarkness:");
player->command("alias cer chat emote magesofdarkness:");
player->command("alias cfr chat feeling magesofdarkness:");
player->set_title("the newbie Mage Of Darkness");
check_member(player);
player->save_me();
return 1;
}
/*
* remove_member : This is where the member loses his/her powers. Poor thing...
*/
void
remove_member(object member)
{
member->set_guild(0);
member->set_guildinfo(0);
member->remove_cmdpath(GUILD_COMPATH);
if (member->query_tmp_prop("mod_member_prot"))
{
member->add_tmp_prop("resist_magic",-15);
member->add_tmp_prop("prot_magic",-15);
member->add_tmp_prop("vuln_fire",-15);
member->add_tmp_prop("night_vision",-50);
member->remove_tmp_prop("mod_member_prot");
}
member->save_me();
}
/*
* leave_guild : Called whenever someone leaves the guild
*/
int
leave_guild(object player)
{
string mess;
if (!interactive(player))
{
tell_object(player,"Now, how are you supposed to do that?\n");
return 0;
}
if (!Q_GUILD(player))
{
tell_object(player,"Ehm. Someone ever told you, you're a few "
"sandwiches short of a picnic?\n");
return 0;
}
if (Q_GUILD(player) != GUILD_MASTER)
{
tell_object(player,"How are you going to do that? You're not even "
"a member of this guild.\n");
return 0;
}
if (file_size(LEAVE_MSG) > 0)
cat(LEAVE_MSG);
remove_member(player);
return 1;
}
/*
* check_member : Checks and adds to make sure the player is properly set up
*/
void
check_member(object member)
{
string name = Q_RNAME(member);
if (member_array(GUILD_COMPATH,member->query_cmdpaths()) < 0)
member->add_cmdpath(GUILD_COMPATH);
// Mage's Of Darkness are not very vulnerable to magic, but
// a bit flammable. ;-) Plus they can see in darkness.
if (!member->query_tmp_prop("mod_member_prot")) // Make sure it's not
{ // done more than once...
member->add_tmp_prop("resist_magic",15);
member->add_tmp_prop("prot_magic",15);
member->add_tmp_prop("vuln_fire",15);
member->add_tmp_prop("night_vision",50);
member->add_tmp_prop("mod_member_prot",1);
}
}
/*** The rest are all applies that the mudlib calls whenever certain ***/
/*** events occur. ***/
/*
* member_enter : Called whenever a guildmember enters the game
*/
int
member_enters(object member)
{
if (file_size(ENTERGAME_MSG) > 0) // Display News if member hasn't read it.
{
int filetime = stat(ENTERGAME_MSG)[1];
if (member->query_lastlog() < filetime)
cat(ENTERGAME_MSG);
else
write("Mage Of Darkness news was last updated " + ctime(filetime) +
".\n");
}
check_member(member);
if (!is_wiz(member)) // Move member into guildroom.
member->move(GUILD_CENTER);
return 1;
}
/*
* member_exits : Called whenever a member exits the game
*/
int
member_exits(object member)
{
if (file_size(EXITGAME_MSG) > 0)
cat(EXITGAME_MSG);
return 1;
}
/*
* member_extra_look : Displayed every time someone look at the player
*/
string
member_extra_look(object member)
{
return "This dark figure is enshrouded in a cold darkness.\n";
}
/*
* member_finger_info : Displayed whenever someone fingers the player
*/
string
member_finger_info(string name)
{
return "This is one of the Mages Of Darkness.\n";
}
/*
* query_cmdpath : This should return an array of guild command paths. The
* command parser uses this info to find the guild members'
* commands.
*/
string*
query_cmdpaths()
{
return ({ GUILD_COMPATH });
}