From: Dennis Reichel <dennis@starlifter.reichel.net>
>
> I'm working on adding clan levels into the code. Does anyone have an easy
> way to add them to the current system, or am I going to have to rip the
> old stuff out and rewrite it? :) Seems to me the way the structure is
> currently setup there's no way to do it that isn't "hackish" in nature.
> If anyone has any suggestions, please let me know before I begin redoing
> it =)
>
Hackish? Here it is :-) Provides titles by gender... Some stuff
will not be generally applicable - have a PLR_LEADER bit and a
room_leader flag, etc..
Immortals are given the rank <patron> if they are guilded.
Anyways, I think that's most of what I've got set up.. enjoy.
act_info.c
in do_who(...)
/* be sure to test for !IS_NPC( ch ) when accessing ch->pcdata :-) */
is_clan(wch) ?
clan_rank_table[wch->pcdata->clan_rank].title_of_rank[wch->sex]
: "",
merc.h
in pc_data
sh_int clan_rank;/* 0 for unguilded and loner 1-10 otherwise */
tables.h
extern const struct clan_titles clan_rank_table[];
struct clan_titles
{
char *title_of_rank[3];
};
tables.c
const struct clan_titles clan_rank_table[] =
{
{
{"<#OWildthing#n>", "<#OFreeman#n>", "<#OFreewoman#n>" }
},
{
{"<#ORecruit#n>" ,"<#ORecruit#n>" ,"<#ORecruit#n>" }
},
{
{"<#OAcolyte#n>" ,"<#OAcolyte#n>" ,"<#OAcolyte#n>" }
},
{
{"<#OAdept#n>" ,"<#OAdept#n>" ,"<#OAdept#n>" }
},
{
{"<#OOfficer#n>" ,"<#OOfficer#n>" ,"<#OOfficer#n>" }
},
{
{"<#OLieutenant#n>" ,"<#OLieutenant#n>" ,"<#OLieutenant#n>" }
},
{
{"<#OVassal#n>" ,"<#OVassal#n>" ,"<#OVassal#n>" }
},
{
{"<#OAmbassador#n>" ,"<#OAmbassador#n>" ,"<#OAmbassadress#n>"}
},
{
{"<#OMagistrate#n>" ,"<#OMagistrate#n>" ,"<#OMagistrate#n>" }
},
{
{"<#OLord#n>" ,"<#OLord#n>" ,"<#OLady#n>" }
},
{
{"<#OLeader#n>" ,"<#OLeader#n>" ,"<#OLeader#n>" }
},
{
{"<#OPatron#n>" ,"<#OPatron#n>" , "<#OPatron#n>" }
},
{
{ NULL, NULL, NULL }
}
};
act_wiz.c
void do_promote( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH],arg2[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( IS_NPC(ch) )
{
send_to_char( "NPC's can not promote someone.\n\r",ch);
return;
}
if ( ( ch->pcdata->clan_rank < 9 ) && ( !IS_IMMORTAL(ch) ) )
{
send_to_char( "You must be a clan Leader or Magistrate to promote someone.\n\r",ch);
return;
}
if ( arg1[0] == '\0' || arg2[0] == '\0'
|| atoi(arg2) < 1 || atoi(arg2) > 10 )
{
send_to_char( "Syntax: promote <char> <rank 1-10>\n\r",ch);
return;
}
if ( ( victim = get_char_room( ch, arg1 ) ) == NULL )
{
send_to_char( "They must be present to be promoted.\n\r", ch );
return;
}
if ( IS_NPC(victim) )
{
send_to_char("You must be mad.\n\r",ch);
return;
}
if ( (victim->clan != ch->clan ) && (!IS_IMMORTAL(ch) ) )
{
send_to_char("You can not promote a player who is not in your clan.\n\r",ch);
return;
}
if ( !IS_SET(victim->act, PLR_LEADER) && atoi(arg2)==10 )
{
send_to_char("This player is not qualified to lead.\n\r",ch);
return;
}
victim->pcdata->clan_rank = atoi(arg2);
send_to_char( "Rank ceremony complete\n\r", ch);
send_to_char( "Rank ceremony complete\n\r", victim);
return;
}