From: Dennis Reichel > > 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 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 \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; }