/**************************************************************************** * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | \\._.// * * -----------------------------------------------------------| (0...0) * * SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by Derek Snider | ).:.( * * -----------------------------------------------------------| {o o} * * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, | / ' ' \ * * Scryn, Rennard, Swordbearer, Gorog, Grishnakh, Nivek, |~'~.VxvxV.~'~* * Tricops and Fireblade | * * ------------------------------------------------------------------------ * * Special clan module * ****************************************************************************/ #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <string.h> /* #include <stdlib.h> */ #include <time.h> #include "mud.h" #define MAX_NEST 100 //static OBJ_DATA * rgObjNest [MAX_NEST]; CLAN_DATA *first_clan; CLAN_DATA *last_clan; COUNCIL_DATA *first_council; COUNCIL_DATA *last_council; MEMBER_LIST *first_member_list; MEMBER_LIST *last_member_list; CENSOR_DATA *first_censor; CENSOR_DATA *last_censor; ALLIANCE_DATA *first_alliance; ALLIANCE_DATA *last_alliance; /* local routines */ void fread_clan args( ( CLAN_DATA * clan, FILE * fp ) ); bool load_clan_file args( ( char *clanfile ) ); void write_clan_list args( ( void ) ); void fread_council args( ( COUNCIL_DATA * council, FILE * fp ) ); bool load_council_file args( ( char *councilfile ) ); void write_council_list args( ( void ) ); void save_member_list args( ( MEMBER_LIST * members_list ) ); void show_members args( ( CHAR_DATA * ch, char *argument, char *format ) ); /*void remove_member args( ( CHAR_DATA *ch ) );*/ char *const clan_alliance_type[] = { "&wNeutral", "&cFriendly", "&CAllied", "&YHostile", "&RAt War" }; char *get_clanTitle( CHAR_DATA * ch ) { if( IS_NPC( ch ) ) return ( "" ); if( !ch->pcdata->clan ) return ( "" ); if( ch->sex == SEX_FEMALE ) { switch ( ch->pcdata->clanRank ) { default: return ( "" ); case 1: return ch->pcdata->clan->fRank1; case 2: return ch->pcdata->clan->fRank2; case 3: return ch->pcdata->clan->fRank3; case 4: return ch->pcdata->clan->fRank4; case 5: return ch->pcdata->clan->fRank5; case 6: return ch->pcdata->clan->fRank6; case 7: return ch->pcdata->clan->fRank7; } } else { switch ( ch->pcdata->clanRank ) { default: return ( "" ); case 1: return ch->pcdata->clan->mRank1; case 2: return ch->pcdata->clan->mRank2; case 3: return ch->pcdata->clan->mRank3; case 4: return ch->pcdata->clan->mRank4; case 5: return ch->pcdata->clan->mRank5; case 6: return ch->pcdata->clan->mRank6; case 7: return ch->pcdata->clan->mRank7; } } return ( "" ); } /* * Get pointer to alliance structure for 2 clans. */ ALLIANCE_DATA *get_alliance( CLAN_DATA * clan, CLAN_DATA * vclan ) { ALLIANCE_DATA *alliance; bool found = FALSE; if( clan == vclan ) return NULL; for( alliance = first_alliance; alliance; alliance = alliance->next ) { if( alliance->clan == clan && alliance->vclan == vclan ) { found = TRUE; break; } } if( !found ) { bug( "get_alliance: No alliance data found for %s and %s", clan->name, vclan->name ); return NULL; } return alliance; } /* * Adds alliance data to all clans when a new clan is created */ void newClanAlliance( CLAN_DATA * newClan ) { ALLIANCE_DATA *alliance; CLAN_DATA *clan; for( clan = first_clan; clan; clan = clan->next ) { if( clan == newClan ) continue; CREATE( alliance, ALLIANCE_DATA, 1 ); alliance->clan = clan; alliance->vclan = newClan; alliance->status = 0; alliance->vclanStatus = 0; alliance->votes = 0; alliance->leader1Vote = STRALLOC( "None" ); alliance->leader2Vote = STRALLOC( "None" ); LINK( alliance, first_alliance, last_alliance, next, prev ); } return; } /* * Checks to make sure that one clan is totaly agreed on war */ bool clan_agreed_war( CLAN_DATA * clan, CLAN_DATA * vclan ) { ALLIANCE_DATA *alliance; ALLIANCE_DATA *valliance; alliance = get_alliance( clan, vclan ); valliance = get_alliance( vclan, clan ); if( !alliance ) return FALSE; if( !valliance ) return FALSE; if( alliance->status != ALLIANCE_ATWAR ) return FALSE; if( valliance->status != ALLIANCE_ATWAR ) return FALSE; return TRUE; /* * if ((!str_cmp(alliance->leader1Vote, clan->leader1) * || !str_cmp(alliance->leader1Vote, clan->leader2) * || !str_cmp(alliance->leader1Vote, clan->leader3) * || !str_cmp(alliance->leader1Vote, clan->leader4) * || !str_cmp(alliance->leader1Vote, clan->leader5) * || !str_cmp(alliance->leader1Vote, clan->leader6)) * &&(!str_cmp(alliance->leader2Vote, clan->leader1) * || !str_cmp(alliance->leader2Vote, clan->leader2) * || !str_cmp(alliance->leader2Vote, clan->leader3) * || !str_cmp(alliance->leader2Vote, clan->leader4) * || !str_cmp(alliance->leader2Vote, clan->leader5) * || !str_cmp(alliance->leader2Vote, clan->leader6)) * && alliance->votes >= 2) * return TRUE; */ return FALSE; } /* * Returns the alliance status for game affects (like if truly at war) */ int allianceStatus( CLAN_DATA * clan, CLAN_DATA * vclan ) { ALLIANCE_DATA *alliance; ALLIANCE_DATA *valliance; alliance = get_alliance( clan, vclan ); valliance = get_alliance( vclan, clan ); if( !alliance || !valliance ) { if( clan == vclan ) { return ALLIANCE_ALLIED; } else { bug( "allianceStatus: couldn't get alliance data." ); return ALLIANCE_NEUTRAL; } } if( alliance->status == ALLIANCE_ALLIED ) { if( alliance->vclanStatus == ALLIANCE_ALLIED ) return ALLIANCE_ALLIED; else return ALLIANCE_FRIENDLY; } if( alliance->status == ALLIANCE_ATWAR ) { if( clan_agreed_war( clan, vclan ) && clan_agreed_war( vclan, clan ) ) return ALLIANCE_ATWAR; else return ALLIANCE_HOSTILE; } switch ( alliance->status ) { case ALLIANCE_FRIENDLY: return ALLIANCE_NEUTRAL; case ALLIANCE_ALLIED: return ALLIANCE_ALLIED; case ALLIANCE_HOSTILE: return ALLIANCE_HOSTILE; case ALLIANCE_ATWAR: return ALLIANCE_ATWAR; default: return ALLIANCE_NEUTRAL; } return ALLIANCE_NEUTRAL; } /* To check if ch is the leader of a clan */ bool is_leader( CHAR_DATA * ch ) { CLAN_DATA *clan; clan = ch->pcdata->clan; if( !clan ) return FALSE; if( !str_cmp( ch->name, clan->leader1 ) || !str_cmp( ch->name, clan->leader2 ) || !str_cmp( ch->name, clan->leader3 ) || !str_cmp( ch->name, clan->leader4 ) || !str_cmp( ch->name, clan->leader5 ) || !str_cmp( ch->name, clan->leader6 ) ) return TRUE; return FALSE; } /* To check if ch is the admin of a clan */ bool is_deity( CHAR_DATA * ch ) { CLAN_DATA *clan; clan = ch->pcdata->clan; if( !clan ) return FALSE; if( !str_cmp( ch->name, clan->deity ) ) return TRUE; return FALSE; } /* * Changes alliance status for clans */ bool change_alliance( CLAN_DATA * clan, CLAN_DATA * vclan, int newStatus ) { ALLIANCE_DATA *alliance; ALLIANCE_DATA *valliance; char buf[MAX_STRING_LENGTH]; if( ( alliance = get_alliance( clan, vclan ) ) == NULL ) return FALSE; if( ( valliance = get_alliance( vclan, clan ) ) == NULL ) return FALSE; if( alliance->changeTimer > 0 || valliance->changeTimer > 0 ) { sprintf( buf, "The clan alliance cannot be changed till the current change timer reaches 0 again." ); echo_to_clan( clan, buf ); return FALSE; } alliance->changeTimer = ALLIANCE_WAIT_TIME; alliance->newStatus = newStatus; sprintf( buf, "%s has decided to change their alliance with your clan to %s.", clan->name, clan_alliance_type[alliance->newStatus] ); echo_to_clan( vclan, buf ); sprintf( buf, "This status change will take effect in %d minutes.", alliance->changeTimer ); echo_to_clan( vclan, buf ); sprintf( buf, "Your clan has decided to change their alliance with %s to %s.", vclan->name, clan_alliance_type[alliance->newStatus] ); echo_to_clan( clan, buf ); sprintf( buf, "This status change will take effect in %d minutes.", alliance->changeTimer ); echo_to_clan( clan, buf ); save_clan( clan ); save_clan( vclan ); return TRUE; } /* * Does all the stuff when war status is voted for */ void alliance_towar( CHAR_DATA * ch, CLAN_DATA * clan, CLAN_DATA * vclan ) { ALLIANCE_DATA *alliance; ALLIANCE_DATA *valliance; char buf[MAX_STRING_LENGTH]; alliance = get_alliance( clan, vclan ); valliance = get_alliance( vclan, clan ); alliance->votes++; if( alliance->votes >= 2 && valliance->votes >= 2 ) { pager_printf( ch, "Your clan is now at war with %s.\n\r", vclan->name ); sprintf( buf, "%s and %s have begun a massive clan war!\n\r", clan->name, vclan->name ); echo_to_all( AT_RED, buf, ECHOTAR_ALL ); } else { pager_printf( ch, "You have put your vote in for war with %s, but both clans have yet to agree on war.\n\r", vclan->name ); sprintf( buf, "%s has voted to go to war with %s!", ch->name, clan->name ); echo_to_clan( clan, buf ); sprintf( buf, "%s has voted to go to war with %s!", clan->name, vclan->name ); echo_to_clan( vclan, buf ); } if( !str_cmp( alliance->leader1Vote, "None" ) ) { STRFREE( alliance->leader1Vote ); alliance->leader1Vote = STRALLOC( ch->name ); } else if( !str_cmp( alliance->leader2Vote, "None" ) ) { STRFREE( alliance->leader2Vote ); alliance->leader2Vote = STRALLOC( ch->name ); } save_clan( clan ); return; } /* * Prints a clans alliances with other clans */ void show_alliances( CHAR_DATA * ch, CLAN_DATA * clan ) { ALLIANCE_DATA *alliance; bool found = FALSE; char buf[MAX_STRING_LENGTH]; pager_printf( ch, "&cClan Alliance Status Their Status\n\r" ); pager_printf( ch, "&g------------------------------------------- --------------- ------------\n\r" ); for( alliance = first_alliance; alliance; alliance = alliance->next ) { if( alliance->clan != clan ) continue; if( alliance->vclan == NULL ) continue; found = TRUE; pager_printf( ch, "&w%-43s %15s %12s\n\r", alliance->vclan->name, clan_alliance_type[alliance->status], clan_alliance_type[alliance->vclanStatus] ); if( alliance->changeTimer ) { sprintf( buf, "&RStatus changing to %s in %d minutes\n\r", clan_alliance_type[alliance->newStatus], alliance->changeTimer ); pager_printf( ch, "%72s", buf ); } } if( !found ) pager_printf( ch, "No clan alliances formed.\n\r" ); else pager_printf( ch, "&g------------------------------------------------------------------------\n\r" ); return; } /* * Get pointer to clan structure from clan name. */ CLAN_DATA *get_clan( char *name ) { CLAN_DATA *clan; for( clan = first_clan; clan; clan = clan->next ) if( !str_cmp( name, clan->name ) || !str_cmp( name, clan->short_name ) ) return clan; return NULL; } COUNCIL_DATA *get_council( char *name ) { COUNCIL_DATA *council; for( council = first_council; council; council = council->next ) if( !str_cmp( name, council->name ) ) return council; return NULL; } void save_alliance( ) { ALLIANCE_DATA *alliance; FILE *fp; CLAN_DATA *clan; char buf[MAX_STRING_LENGTH]; sprintf( buf, "%salliance", CLAN_DIR ); if( ( fp = fopen( buf, "w" ) ) == NULL ) { bug( "Cannot open alliance file for writing", 0 ); perror( buf ); return; } /* * Sorts and saves alliance data */ for( clan = first_clan; clan; clan = clan->next ) { for( alliance = first_alliance; alliance; alliance = alliance->next ) { if( clan == alliance->clan ) fprintf( fp, "Alliance %s~ %s~ %d %d %d %s~ %s~\n", alliance->clan->short_name, alliance->vclan->short_name, alliance->status, alliance->vclanStatus, alliance->votes, alliance->leader1Vote, alliance->leader2Vote ); } } fprintf( fp, "End\n\n" ); fclose( fp ); return; } bool load_alliance( ) { FILE *fp; char buf[MAX_STRING_LENGTH]; ALLIANCE_DATA *alliance = NULL; log_string( "Loading alliance data" ); sprintf( buf, "%salliance", CLAN_DIR ); if( ( fp = fopen( buf, "r" ) ) == NULL ) { bug( "Cannot open alliance list for reading" ); return FALSE; } for( ;; ) { char *word; word = fread_word( fp ); if( !str_cmp( word, "Alliance" ) ) { CREATE( alliance, ALLIANCE_DATA, 1 ); alliance->clan = get_clan( fread_string( fp ) ); alliance->vclan = get_clan( fread_string( fp ) ); alliance->status = fread_number( fp ); alliance->vclanStatus = fread_number( fp ); alliance->votes = fread_number( fp ); alliance->leader1Vote = fread_string( fp ); alliance->leader2Vote = fread_string( fp ); if( !alliance->leader1Vote || alliance->leader1Vote[0] == '\0' || alliance->leader1Vote == NULL ) alliance->leader1Vote = STRALLOC( "None" ); if( !alliance->leader2Vote || alliance->leader2Vote[0] == '\0' || alliance->leader2Vote == NULL ) alliance->leader2Vote = STRALLOC( "None" ); LINK( alliance, first_alliance, last_alliance, next, prev ); continue; } else if( !str_cmp( word, "End" ) ) { LINK( alliance, first_alliance, last_alliance, next, prev ); fclose( fp ); return TRUE; } else { bug( "load_alliance: bad section" ); fclose( fp ); return FALSE; } } } void write_clan_list( ) { CLAN_DATA *tclan; FILE *fpout; char filename[256]; sprintf( filename, "%s%s", CLAN_DIR, CLAN_LIST ); fpout = fopen( filename, "w" ); if( !fpout ) { bug( "FATAL: cannot open clan.lst for writing!\n\r", 0 ); return; } for( tclan = first_clan; tclan; tclan = tclan->next ) fprintf( fpout, "%s\n", tclan->filename ); fprintf( fpout, "$\n" ); fclose( fpout ); } void write_council_list( ) { COUNCIL_DATA *tcouncil; FILE *fpout; char filename[256]; sprintf( filename, "%s%s", COUNCIL_DIR, COUNCIL_LIST ); fpout = fopen( filename, "w" ); if( !fpout ) { bug( "FATAL: cannot open council.lst for writing!\n\r", 0 ); return; } for( tcouncil = first_council; tcouncil; tcouncil = tcouncil->next ) fprintf( fpout, "%s\n", tcouncil->filename ); fprintf( fpout, "$\n" ); fclose( fpout ); } /* * Save a clan's data to its data file */ void save_clan( CLAN_DATA * clan ) { FILE *fp; char filename[256]; char buf[MAX_STRING_LENGTH]; if( !clan ) { bug( "save_clan: null clan pointer!", 0 ); return; } if( !clan->filename || clan->filename[0] == '\0' ) { sprintf( buf, "save_clan: %s has no filename", clan->name ); bug( buf, 0 ); return; } sprintf( filename, "%s%s", CLAN_DIR, clan->filename ); fclose( fpReserve ); if( ( fp = fopen( filename, "w" ) ) == NULL ) { bug( "save_clan: fopen", 0 ); perror( filename ); } else { fprintf( fp, "#CLAN\n" ); fprintf( fp, "Name %s~\n", clan->name ); fprintf( fp, "ShortName %s~\n", clan->short_name ); fprintf( fp, "Filename %s~\n", clan->filename ); fprintf( fp, "Motto %s~\n", clan->motto ); fprintf( fp, "Description %s~\n", clan->description ); if( clan->clanHQ ) fprintf( fp, "ClanHQ %s~\n", clan->clanHQ->filename ); fprintf( fp, "Deity %s~\n", clan->deity ); fprintf( fp, "Owner %s~\n", clan->owner ); fprintf( fp, "Leader1 %s~\n", clan->leader1 ); fprintf( fp, "Leader2 %s~\n", clan->leader2 ); fprintf( fp, "Leader3 %s~\n", clan->leader3 ); fprintf( fp, "Leader4 %s~\n", clan->leader4 ); fprintf( fp, "Leader5 %s~\n", clan->leader5 ); fprintf( fp, "Leader6 %s~\n", clan->leader6 ); fprintf( fp, "Badge %s~\n", clan->badge ); fprintf( fp, "MaleRank1 %s~\n", clan->mRank1 ); fprintf( fp, "MaleRank2 %s~\n", clan->mRank2 ); fprintf( fp, "MaleRank3 %s~\n", clan->mRank3 ); fprintf( fp, "MaleRank4 %s~\n", clan->mRank4 ); fprintf( fp, "MaleRank5 %s~\n", clan->mRank5 ); fprintf( fp, "MaleRank6 %s~\n", clan->mRank6 ); fprintf( fp, "MaleRank7 %s~\n", clan->mRank7 ); fprintf( fp, "FemaleRank1 %s~\n", clan->fRank1 ); fprintf( fp, "FemaleRank2 %s~\n", clan->fRank2 ); fprintf( fp, "FemaleRank3 %s~\n", clan->fRank3 ); fprintf( fp, "FemaleRank4 %s~\n", clan->fRank4 ); fprintf( fp, "FemaleRank5 %s~\n", clan->fRank5 ); fprintf( fp, "FemaleRank6 %s~\n", clan->fRank6 ); fprintf( fp, "FemaleRank7 %s~\n", clan->fRank7 ); fprintf( fp, "MaleRank1C %d\n", clan->mRank1Count ); fprintf( fp, "MaleRank2C %d\n", clan->mRank2Count ); fprintf( fp, "MaleRank3C %d\n", clan->mRank3Count ); fprintf( fp, "MaleRank4C %d\n", clan->mRank4Count ); fprintf( fp, "MaleRank5C %d\n", clan->mRank5Count ); fprintf( fp, "MaleRank6C %d\n", clan->mRank6Count ); fprintf( fp, "MaleRank7C %d\n", clan->mRank7Count ); fprintf( fp, "FemaleRank1C %d\n", clan->fRank1Count ); fprintf( fp, "FemaleRank2C %d\n", clan->fRank2Count ); fprintf( fp, "FemaleRank3C %d\n", clan->fRank3Count ); fprintf( fp, "FemaleRank4C %d\n", clan->fRank4Count ); fprintf( fp, "FemaleRank5C %d\n", clan->fRank5Count ); fprintf( fp, "FemaleRank6C %d\n", clan->fRank6Count ); fprintf( fp, "FemaleRank7C %d\n", clan->fRank7Count ); fprintf( fp, "PKillRangeNew %d %d %d %d %d %d %d\n", clan->pkills[0], clan->pkills[1], clan->pkills[2], clan->pkills[3], clan->pkills[4], clan->pkills[5], clan->pkills[6] ); fprintf( fp, "PDeathRangeNew %d %d %d %d %d %d %d\n", clan->pdeaths[0], clan->pdeaths[1], clan->pdeaths[2], clan->pdeaths[3], clan->pdeaths[4], clan->pdeaths[5], clan->pdeaths[6] ); fprintf( fp, "SparWinsRangeNew %d %d %d %d %d %d %d\n", clan->spar_wins[0], clan->spar_wins[1], clan->spar_wins[2], clan->spar_wins[3], clan->spar_wins[4], clan->spar_wins[5], clan->spar_wins[6] ); fprintf( fp, "SparLossRangeNew %d %d %d %d %d %d %d\n", clan->spar_loss[0], clan->spar_loss[1], clan->spar_loss[2], clan->spar_loss[3], clan->spar_loss[4], clan->spar_loss[5], clan->spar_loss[6] ); fprintf( fp, "MKills %d\n", clan->mkills ); fprintf( fp, "MDeaths %d\n", clan->mdeaths ); fprintf( fp, "IllegalPK %d\n", clan->illegal_pk ); fprintf( fp, "Score %d\n", clan->score ); /* * fprintf( fp, "ClanPL %.0Lf\n", clan->clanPL ); */ fprintf( fp, "Type %d\n", clan->clan_type ); fprintf( fp, "Class %d\n", clan->class ); fprintf( fp, "Favour %d\n", clan->favour ); fprintf( fp, "Strikes %d\n", clan->strikes ); fprintf( fp, "Members %d\n", clan->members ); fprintf( fp, "Active %d\n", clan->activeMem ); fprintf( fp, "MemLimit %d\n", clan->mem_limit ); fprintf( fp, "Alignment %d\n", clan->alignment ); fprintf( fp, "Board %d\n", clan->board ); fprintf( fp, "ClanObjOne %d\n", clan->clanobj1 ); fprintf( fp, "ClanObjTwo %d\n", clan->clanobj2 ); fprintf( fp, "ClanObjThree %d\n", clan->clanobj3 ); fprintf( fp, "ClanObjFour %d\n", clan->clanobj4 ); fprintf( fp, "ClanObjFive %d\n", clan->clanobj5 ); fprintf( fp, "Recall %d\n", clan->recall ); fprintf( fp, "Storeroom %d\n", clan->storeroom ); fprintf( fp, "DeathRecall %d\n", clan->deathRecall ); fprintf( fp, "Morgue %d\n", clan->clanMorgue ); fprintf( fp, "Donate %d\n", clan->clanDonate ); fprintf( fp, "Jail %d\n", clan->clanJail ); fprintf( fp, "GuardOne %d\n", clan->guard1 ); fprintf( fp, "GuardTwo %d\n", clan->guard2 ); fprintf( fp, "ClanSkill1 %d\n", clan->clanSkill1 ); fprintf( fp, "ClanSkill2 %d\n", clan->clanSkill2 ); fprintf( fp, "ClanSkill3 %d\n", clan->clanSkill3 ); fprintf( fp, "URL %s~\n", clan->clanWebSite ); fprintf( fp, "TaxRate %d\n", clan->tax ); fprintf( fp, "Bank %.0Lf\n", clan->bank ); fprintf( fp, "End\n\n" ); fprintf( fp, "#END\n" ); } fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); return; } /* * Save a council's data to its data file */ void save_council( COUNCIL_DATA * council ) { FILE *fp; char filename[256]; char buf[MAX_STRING_LENGTH]; if( !council ) { bug( "save_council: null council pointer!", 0 ); return; } if( !council->filename || council->filename[0] == '\0' ) { sprintf( buf, "save_council: %s has no filename", council->name ); bug( buf, 0 ); return; } sprintf( filename, "%s%s", COUNCIL_DIR, council->filename ); fclose( fpReserve ); if( ( fp = fopen( filename, "w" ) ) == NULL ) { bug( "save_council: fopen", 0 ); perror( filename ); } else { fprintf( fp, "#COUNCIL\n" ); if( council->name ) fprintf( fp, "Name %s~\n", council->name ); if( council->filename ) fprintf( fp, "Filename %s~\n", council->filename ); if( council->description ) fprintf( fp, "Description %s~\n", council->description ); if( council->head ) fprintf( fp, "Head %s~\n", council->head ); if( council->head2 != NULL ) fprintf( fp, "Head2 %s~\n", council->head2 ); fprintf( fp, "Members %d\n", council->members ); fprintf( fp, "Board %d\n", council->board ); fprintf( fp, "Meeting %d\n", council->meeting ); if( council->powers ) fprintf( fp, "Powers %s~\n", council->powers ); fprintf( fp, "End\n\n" ); fprintf( fp, "#END\n" ); } fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); return; } /* * Read in actual clan data. */ #if defined(KEY) #undef KEY #endif #define KEY( literal, field, value ) \ if ( !str_cmp( word, literal ) ) \ { \ field = value; \ fMatch = TRUE; \ break; \ } /* * Reads in PKill and PDeath still for backward compatibility but now it * should be written to PKillRange and PDeathRange for multiple level pkill * tracking support. --Shaddai * Added a hardcoded limit memlimit to the amount of members a clan can * have set using setclan. --Shaddai */ void fread_clan( CLAN_DATA * clan, FILE * fp ) { char buf[MAX_STRING_LENGTH]; char *word; bool fMatch; clan->mem_limit = 0; /* Set up defaults */ for( ;; ) { word = feof( fp ) ? "End" : fread_word( fp ); fMatch = FALSE; switch ( UPPER( word[0] ) ) { case '*': fMatch = TRUE; fread_to_eol( fp ); break; case 'A': KEY( "Alignment", clan->alignment, fread_number( fp ) ); KEY( "Active", clan->activeMem, fread_number( fp ) ); break; case 'B': KEY( "Badge", clan->badge, fread_string( fp ) ); KEY( "Bank", clan->bank, fread_number_ld( fp ) ); /* * KEY( "Bank", clan->bank, fread_number_skill( fp ) ); //used skill since it reads doubles */ KEY( "Board", clan->board, fread_number( fp ) ); break; case 'C': if( !str_cmp( word, "ClanHQ" ) ) { AREA_DATA *clanHQ; char fname[MAX_STRING_LENGTH]; sprintf( fname, "%s", fread_string( fp ) ); for( clanHQ = first_area; clanHQ; clanHQ = clanHQ->next ) { if( !str_cmp( clanHQ->filename, fname ) ) { clan->clanHQ = clanHQ; break; } } fMatch = TRUE; } KEY( "ClanSkill1", clan->clanSkill1, fread_number( fp ) ); KEY( "ClanSkill2", clan->clanSkill2, fread_number( fp ) ); KEY( "ClanSkill3", clan->clanSkill3, fread_number( fp ) ); KEY( "ClanObjOne", clan->clanobj1, fread_number( fp ) ); KEY( "ClanObjTwo", clan->clanobj2, fread_number( fp ) ); KEY( "ClanObjThree", clan->clanobj3, fread_number( fp ) ); KEY( "ClanObjFour", clan->clanobj4, fread_number( fp ) ); KEY( "ClanObjFive", clan->clanobj5, fread_number( fp ) ); KEY( "Class", clan->class, fread_number( fp ) ); /* * KEY( "ClanPL", clan->clanPL, fread_number_ld( fp ) ); */ break; case 'D': KEY( "DeathRecall", clan->deathRecall, fread_number( fp ) ); KEY( "Donate", clan->clanDonate, fread_number( fp ) ); KEY( "Deity", clan->deity, fread_string( fp ) ); KEY( "Description", clan->description, fread_string( fp ) ); break; case 'E': if( !str_cmp( word, "End" ) ) { if( !clan->name ) clan->name = STRALLOC( "" ); if( !clan->leader1 ) clan->leader1 = STRALLOC( "" ); if( !clan->leader2 ) clan->leader2 = STRALLOC( "" ); if( !clan->leader3 ) clan->leader3 = STRALLOC( "" ); if( !clan->leader4 ) clan->leader4 = STRALLOC( "" ); if( !clan->leader5 ) clan->leader5 = STRALLOC( "" ); if( !clan->leader6 ) clan->leader6 = STRALLOC( "" ); if( !clan->description ) clan->description = STRALLOC( "" ); if( !clan->motto ) clan->motto = STRALLOC( "" ); if( !clan->deity ) clan->deity = STRALLOC( "" ); if( !clan->badge ) clan->badge = STRALLOC( "" ); if( !clan->clanWebSite ) clan->clanWebSite = STRALLOC( "" ); if( !clan->clanHQ ) clan->clanHQ = NULL; if( !clan->mRank1 ) clan->mRank1 = STRALLOC( "" ); if( !clan->mRank2 ) clan->mRank2 = STRALLOC( "" ); if( !clan->mRank3 ) clan->mRank3 = STRALLOC( "" ); if( !clan->mRank4 ) clan->mRank4 = STRALLOC( "" ); if( !clan->mRank5 ) clan->mRank5 = STRALLOC( "" ); if( !clan->mRank6 ) clan->mRank6 = STRALLOC( "" ); if( !clan->mRank7 ) clan->mRank7 = STRALLOC( "" ); if( !clan->fRank1 ) clan->fRank1 = STRALLOC( "" ); if( !clan->fRank2 ) clan->fRank2 = STRALLOC( "" ); if( !clan->fRank3 ) clan->fRank3 = STRALLOC( "" ); if( !clan->fRank4 ) clan->fRank4 = STRALLOC( "" ); if( !clan->fRank5 ) clan->fRank5 = STRALLOC( "" ); if( !clan->fRank6 ) clan->fRank6 = STRALLOC( "" ); if( !clan->fRank7 ) clan->fRank7 = STRALLOC( "" ); clan->members = clan->fRank1Count + clan->fRank2Count + clan->fRank3Count + clan->fRank4Count; clan->members += clan->fRank5Count + clan->fRank6Count + clan->fRank7Count; clan->members += clan->mRank1Count + clan->mRank2Count + clan->mRank3Count + clan->mRank4Count; clan->members += clan->mRank5Count + clan->mRank6Count + clan->mRank7Count; return; } break; case 'F': KEY( "Favour", clan->favour, fread_number( fp ) ); KEY( "Filename", clan->filename, fread_string_nohash( fp ) ); KEY( "FemaleRank1", clan->fRank1, fread_string( fp ) ); KEY( "FemaleRank2", clan->fRank2, fread_string( fp ) ); KEY( "FemaleRank3", clan->fRank3, fread_string( fp ) ); KEY( "FemaleRank4", clan->fRank4, fread_string( fp ) ); KEY( "FemaleRank5", clan->fRank5, fread_string( fp ) ); KEY( "FemaleRank6", clan->fRank6, fread_string( fp ) ); KEY( "FemaleRank7", clan->fRank7, fread_string( fp ) ); KEY( "FemaleRank1C", clan->fRank1Count, fread_number( fp ) ); KEY( "FemaleRank2C", clan->fRank2Count, fread_number( fp ) ); KEY( "FemaleRank3C", clan->fRank3Count, fread_number( fp ) ); KEY( "FemaleRank4C", clan->fRank4Count, fread_number( fp ) ); KEY( "FemaleRank5C", clan->fRank5Count, fread_number( fp ) ); KEY( "FemaleRank6C", clan->fRank6Count, fread_number( fp ) ); KEY( "FemaleRank7C", clan->fRank7Count, fread_number( fp ) ); break; case 'G': KEY( "GuardOne", clan->guard1, fread_number( fp ) ); KEY( "GuardTwo", clan->guard2, fread_number( fp ) ); break; case 'I': KEY( "IllegalPK", clan->illegal_pk, fread_number( fp ) ); break; case 'J': KEY( "Jail", clan->clanJail, fread_number( fp ) ); break; case 'L': KEY( "Leader1", clan->leader1, fread_string( fp ) ); KEY( "Leader2", clan->leader2, fread_string( fp ) ); KEY( "Leader3", clan->leader3, fread_string( fp ) ); KEY( "Leader4", clan->leader4, fread_string( fp ) ); KEY( "Leader5", clan->leader5, fread_string( fp ) ); KEY( "Leader6", clan->leader6, fread_string( fp ) ); break; case 'M': KEY( "MDeaths", clan->mdeaths, fread_number( fp ) ); KEY( "Members", clan->members, fread_number( fp ) ); KEY( "MemLimit", clan->mem_limit, fread_number( fp ) ); KEY( "MKills", clan->mkills, fread_number( fp ) ); KEY( "Motto", clan->motto, fread_string( fp ) ); KEY( "MaleRank1", clan->mRank1, fread_string( fp ) ); KEY( "MaleRank2", clan->mRank2, fread_string( fp ) ); KEY( "MaleRank3", clan->mRank3, fread_string( fp ) ); KEY( "MaleRank4", clan->mRank4, fread_string( fp ) ); KEY( "MaleRank5", clan->mRank5, fread_string( fp ) ); KEY( "MaleRank6", clan->mRank6, fread_string( fp ) ); KEY( "MaleRank7", clan->mRank7, fread_string( fp ) ); KEY( "MaleRank1C", clan->mRank1Count, fread_number( fp ) ); KEY( "MaleRank2C", clan->mRank2Count, fread_number( fp ) ); KEY( "MaleRank3C", clan->mRank3Count, fread_number( fp ) ); KEY( "MaleRank4C", clan->mRank4Count, fread_number( fp ) ); KEY( "MaleRank5C", clan->mRank5Count, fread_number( fp ) ); KEY( "MaleRank6C", clan->mRank6Count, fread_number( fp ) ); KEY( "MaleRank7C", clan->mRank7Count, fread_number( fp ) ); KEY( "Morgue", clan->clanMorgue, fread_number( fp ) ); break; case 'N': KEY( "Name", clan->name, fread_string( fp ) ); break; case 'O': KEY( "Owner", clan->owner, fread_string( fp ) ); break; case 'P': KEY( "PDeaths", clan->pdeaths[6], fread_number( fp ) ); KEY( "PKills", clan->pkills[6], fread_number( fp ) ); /* * Addition of New Ranges */ if( !str_cmp( word, "PDeathRange" ) ) { fMatch = TRUE; fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); } if( !str_cmp( word, "PDeathRangeNew" ) ) { fMatch = TRUE; clan->pdeaths[0] = fread_number( fp ); clan->pdeaths[1] = fread_number( fp ); clan->pdeaths[2] = fread_number( fp ); clan->pdeaths[3] = fread_number( fp ); clan->pdeaths[4] = fread_number( fp ); clan->pdeaths[5] = fread_number( fp ); clan->pdeaths[6] = fread_number( fp ); } if( !str_cmp( word, "PKillRangeNew" ) ) { fMatch = TRUE; clan->pkills[0] = fread_number( fp ); clan->pkills[1] = fread_number( fp ); clan->pkills[2] = fread_number( fp ); clan->pkills[3] = fread_number( fp ); clan->pkills[4] = fread_number( fp ); clan->pkills[5] = fread_number( fp ); clan->pkills[6] = fread_number( fp ); } if( !str_cmp( word, "PKillRange" ) ) { fMatch = TRUE; fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); fread_number( fp ); } break; case 'R': KEY( "Recall", clan->recall, fread_number( fp ) ); break; case 'S': KEY( "ShortName", clan->short_name, fread_string( fp ) ); KEY( "Score", clan->score, fread_number( fp ) ); if( !str_cmp( word, "SparLossRangeNew" ) ) { fMatch = TRUE; clan->spar_loss[0] = fread_number( fp ); clan->spar_loss[1] = fread_number( fp ); clan->spar_loss[2] = fread_number( fp ); clan->spar_loss[3] = fread_number( fp ); clan->spar_loss[4] = fread_number( fp ); clan->spar_loss[5] = fread_number( fp ); clan->spar_loss[6] = fread_number( fp ); } if( !str_cmp( word, "SparWinsRangeNew" ) ) { fMatch = TRUE; clan->spar_wins[0] = fread_number( fp ); clan->spar_wins[1] = fread_number( fp ); clan->spar_wins[2] = fread_number( fp ); clan->spar_wins[3] = fread_number( fp ); clan->spar_wins[4] = fread_number( fp ); clan->spar_wins[5] = fread_number( fp ); clan->spar_wins[6] = fread_number( fp ); } KEY( "Strikes", clan->strikes, fread_number( fp ) ); KEY( "Storeroom", clan->storeroom, fread_number( fp ) ); break; case 'T': KEY( "TaxRate", clan->tax, fread_number( fp ) ); KEY( "Type", clan->clan_type, fread_number( fp ) ); break; case 'U': KEY( "URL", clan->clanWebSite, fread_string( fp ) ); break; } if( !fMatch ) { sprintf( buf, "Fread_clan: no match: %s", word ); bug( buf, 0 ); } } /* * Why the FUCK was this put down here?! * clan->members = clan->fRank1Count + clan->fRank2Count + clan->fRank3Count + clan->fRank4Count; * clan->members+= clan->fRank5Count + clan->fRank6Count + clan->fRank7Count; * clan->members+= clan->mRank1Count + clan->mRank2Count + clan->mRank3Count + clan->mRank4Count; * clan->members+= clan->mRank5Count + clan->mRank6Count + clan->mRank7Count; */ } /* * Read in actual council data. */ #if defined(KEY) #undef KEY #endif #define KEY( literal, field, value ) \ if ( !str_cmp( word, literal ) ) \ { \ field = value; \ fMatch = TRUE; \ break; \ } void fread_council( COUNCIL_DATA * council, FILE * fp ) { char buf[MAX_STRING_LENGTH]; char *word; bool fMatch; for( ;; ) { word = feof( fp ) ? "End" : fread_word( fp ); fMatch = FALSE; switch ( UPPER( word[0] ) ) { case '*': fMatch = TRUE; fread_to_eol( fp ); break; case 'B': KEY( "Board", council->board, fread_number( fp ) ); break; case 'D': KEY( "Description", council->description, fread_string( fp ) ); break; case 'E': if( !str_cmp( word, "End" ) ) { if( !council->name ) council->name = STRALLOC( "" ); if( !council->description ) council->description = STRALLOC( "" ); if( !council->powers ) council->powers = STRALLOC( "" ); return; } break; case 'F': KEY( "Filename", council->filename, fread_string_nohash( fp ) ); break; case 'H': KEY( "Head", council->head, fread_string( fp ) ); KEY( "Head2", council->head2, fread_string( fp ) ); break; case 'M': KEY( "Members", council->members, fread_number( fp ) ); KEY( "Meeting", council->meeting, fread_number( fp ) ); break; case 'N': KEY( "Name", council->name, fread_string( fp ) ); break; case 'P': KEY( "Powers", council->powers, fread_string( fp ) ); break; } if( !fMatch ) { sprintf( buf, "Fread_council: no match: %s", word ); bug( buf, 0 ); } } } /* * Load a clan file */ bool load_clan_file( char *clanfile ) { char filename[256]; CLAN_DATA *clan; FILE *fp; bool found; CREATE( clan, CLAN_DATA, 1 ); /* * Make sure we default these to 0 --Shaddai */ clan->pkills[0] = 0; clan->pkills[1] = 0; clan->pkills[2] = 0; clan->pkills[3] = 0; clan->pkills[4] = 0; clan->pkills[5] = 0; clan->pkills[6] = 0; clan->pdeaths[0] = 0; clan->pdeaths[1] = 0; clan->pdeaths[2] = 0; clan->pdeaths[3] = 0; clan->pdeaths[4] = 0; clan->pdeaths[5] = 0; clan->pdeaths[6] = 0; clan->spar_wins[0] = 0; clan->spar_wins[1] = 0; clan->spar_wins[2] = 0; clan->spar_wins[3] = 0; clan->spar_wins[4] = 0; clan->spar_wins[5] = 0; clan->spar_wins[6] = 0; clan->spar_loss[0] = 0; clan->spar_loss[1] = 0; clan->spar_loss[2] = 0; clan->spar_loss[3] = 0; clan->spar_loss[4] = 0; clan->spar_loss[5] = 0; clan->spar_loss[6] = 0; clan->bank = 0; found = FALSE; sprintf( filename, "%s%s", CLAN_DIR, clanfile ); if( ( fp = fopen( filename, "r" ) ) != NULL ) { found = TRUE; for( ;; ) { char letter; char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "Load_clan_file: # not found.", 0 ); break; } word = fread_word( fp ); if( !str_cmp( word, "CLAN" ) ) { fread_clan( clan, fp ); break; } else if( !str_cmp( word, "END" ) ) break; else { char buf[MAX_STRING_LENGTH]; sprintf( buf, "Load_clan_file: bad section: %s.", word ); bug( buf, 0 ); break; } } fclose( fp ); } if( found ) { LINK( clan, first_clan, last_clan, next, prev ); } else DISPOSE( clan ); return found; } /* * Load a council file */ bool load_council_file( char *councilfile ) { char filename[256]; COUNCIL_DATA *council; FILE *fp; bool found; CREATE( council, COUNCIL_DATA, 1 ); found = FALSE; sprintf( filename, "%s%s", COUNCIL_DIR, councilfile ); if( ( fp = fopen( filename, "r" ) ) != NULL ) { found = TRUE; for( ;; ) { char letter; char *word; letter = fread_letter( fp ); if( letter == '*' ) { fread_to_eol( fp ); continue; } if( letter != '#' ) { bug( "Load_council_file: # not found.", 0 ); break; } word = fread_word( fp ); if( !str_cmp( word, "COUNCIL" ) ) { fread_council( council, fp ); break; } else if( !str_cmp( word, "END" ) ) break; else { bug( "Load_council_file: bad section.", 0 ); break; } } fclose( fp ); } if( found ) LINK( council, first_council, last_council, next, prev ); else DISPOSE( council ); return found; } /* * Load in all the clan files. */ void load_clans( ) { FILE *fpList; char *filename; char clanlist[256]; char buf[MAX_STRING_LENGTH]; first_clan = NULL; last_clan = NULL; log_string( "Loading clans..." ); sprintf( clanlist, "%s%s", CLAN_DIR, CLAN_LIST ); fclose( fpReserve ); if( ( fpList = fopen( clanlist, "r" ) ) == NULL ) { perror( clanlist ); exit( 1 ); } for( ;; ) { filename = feof( fpList ) ? "$" : fread_word( fpList ); log_string( filename ); if( filename[0] == '$' ) break; if( !load_clan_file( filename ) ) { sprintf( buf, "Cannot load clan file: %s", filename ); bug( buf, 0 ); } } load_alliance( ); fclose( fpList ); log_string( " Done clans " ); fpReserve = fopen( NULL_FILE, "r" ); return; } /* * Load in all the council files. */ void load_councils( ) { FILE *fpList; char *filename; char councillist[256]; char buf[MAX_STRING_LENGTH]; first_council = NULL; last_council = NULL; log_string( "Loading councils..." ); sprintf( councillist, "%s%s", COUNCIL_DIR, COUNCIL_LIST ); fclose( fpReserve ); if( ( fpList = fopen( councillist, "r" ) ) == NULL ) { perror( councillist ); exit( 1 ); } for( ;; ) { filename = feof( fpList ) ? "$" : fread_word( fpList ); log_string( filename ); if( filename[0] == '$' ) break; if( !load_council_file( filename ) ) { sprintf( buf, "Cannot load council file: %s", filename ); bug( buf, 0 ); } } fclose( fpList ); log_string( " Done councils " ); fpReserve = fopen( NULL_FILE, "r" ); return; } void do_savealliances( CHAR_DATA * ch, char *argument ) { if( ch->level < 63 ) { ch_printf( ch, "Access denied.\n\r" ); return; } save_alliance( ); ch_printf( ch, "Done.\n\r" ); return; } void do_make( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; CLAN_DATA *clan; int level; if( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } clan = ch->pcdata->clan; if( !is_leader( ch ) && !is_deity( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg ); if( arg[0] == '\0' ) { send_to_char( "Make what?\n\r", ch ); return; } pObjIndex = get_obj_index( clan->clanobj1 ); level = 40; if( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { pObjIndex = get_obj_index( clan->clanobj2 ); level = 45; } if( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { pObjIndex = get_obj_index( clan->clanobj3 ); level = 50; } if( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { pObjIndex = get_obj_index( clan->clanobj4 ); level = 35; } if( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { pObjIndex = get_obj_index( clan->clanobj5 ); level = 1; } if( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { send_to_char( "You don't know how to make that.\n\r", ch ); return; } obj = create_object( pObjIndex, level ); xSET_BIT( obj->extra_flags, ITEM_CLANOBJECT ); if( CAN_WEAR( obj, ITEM_TAKE ) ) obj = obj_to_char( obj, ch ); else obj = obj_to_room( obj, ch->in_room ); act( AT_MAGIC, "$n makes $p!", ch, obj, NULL, TO_ROOM ); act( AT_MAGIC, "You make $p!", ch, obj, NULL, TO_CHAR ); return; } void do_induct( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; CLAN_DATA *clan; if( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } clan = ch->pcdata->clan; if( ( ch->pcdata && ch->pcdata->bestowments && is_name( "induct", ch->pcdata->bestowments ) ) || is_deity( ch ) || is_leader( ch ) ) ; else { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg ); if( arg[0] == '\0' ) { send_to_char( "Induct whom?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That player is not here.\n\r", ch ); return; } if( IS_NPC( victim ) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if( IS_IMMORTAL( victim ) ) { send_to_char( "Not on imms.\n\r", ch ); return; } if( clan->clan_type == CLAN_GUILD ) { if( victim->class != clan->class ) { send_to_char( "This player's will is not in accordance with your guild.\n\r", ch ); return; } } else { if( victim->exp < 5000 ) { send_to_char( "This player is not worthy of joining yet (5,000 PL min).\n\r", ch ); return; } } /* * if( !xIS_SET( victim->act, PLR_CAN_CHAT ) ) * { * send_to_char( "That player needs their bio authorized before they can join.\n\r", ch ); * return; * } */ if( victim->pcdata->clan ) { if( victim->pcdata->clan->clan_type == CLAN_ORDER ) { if( victim->pcdata->clan == clan ) send_to_char( "This player already belongs to your order!\n\r", ch ); else send_to_char( "This player already belongs to an order!\n\r", ch ); return; } else if( victim->pcdata->clan->clan_type == CLAN_GUILD ) { if( victim->pcdata->clan == clan ) send_to_char( "This player already belongs to your guild!\n\r", ch ); else send_to_char( "This player already belongs to an guild!\n\r", ch ); return; } else { if( victim->pcdata->clan == clan ) send_to_char( "This player already belongs to your clan!\n\r", ch ); else send_to_char( "This player already belongs to a clan!\n\r", ch ); return; } } /* if( clan->mem_limit && clan->members >= clan->mem_limit ) { send_to_char( "Your clan is too big to induct anymore players.\n\r", ch ); return; }*/ /* * clan->members++; */ if( clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_GUILD ) SET_BIT( victim->speaks, LANG_CLAN ); if( clan->clan_type != CLAN_NOKILL && clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_GUILD ) SET_BIT( victim->pcdata->flags, PCFLAG_DEADLY ); if( clan->clan_type != CLAN_GUILD && clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_NOKILL ) { int sn; for( sn = 0; sn < top_sn; sn++ ) { if( skill_table[sn]->guild == clan->class && skill_table[sn]->name != NULL ) { victim->pcdata->learned[sn] = GET_ADEPT( victim, sn ); ch_printf( victim, "%s instructs you in the ways of %s.\n\r", ch->name, skill_table[sn]->name ); } } } victim->pcdata->clanRank = 7; victim->pcdata->clanZeniDonated = 0; victim->pcdata->clanZeniClanTax = 0; victim->pcdata->clanItemsDonated = 0; if( victim->sex == SEX_FEMALE ) clan->fRank7Count++; else clan->mRank7Count++; victim->pcdata->clan = clan; STRFREE( victim->pcdata->clan_name ); victim->pcdata->clan_name = QUICKLINK( clan->name ); /* * clan->clanPL += victim->exp; */ if( xIS_SET( victim->act, PLR_OUTCAST ) ) xREMOVE_BIT( victim->act, PLR_OUTCAST ); update_member( victim ); act( AT_MAGIC, "You recruit $N into $t", ch, clan->name, victim, TO_CHAR ); act( AT_MAGIC, "$n recruits $N into $t", ch, clan->name, victim, TO_NOTVICT ); act( AT_MAGIC, "$n recruits you into $t", ch, clan->name, victim, TO_VICT ); clan->members = clan->fRank1Count + clan->fRank2Count + clan->fRank3Count + clan->fRank4Count; clan->members += clan->fRank5Count + clan->fRank6Count + clan->fRank7Count; clan->members += clan->mRank1Count + clan->mRank2Count + clan->mRank3Count + clan->mRank4Count; clan->members += clan->mRank5Count + clan->mRank6Count + clan->mRank7Count; save_char_obj( victim ); save_clan( clan ); return; } void do_council_induct( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; COUNCIL_DATA *council; if( IS_NPC( ch ) || !ch->pcdata->council ) { send_to_char( "Huh?\n\r", ch ); return; } council = ch->pcdata->council; if( ( council->head == NULL || str_cmp( ch->name, council->head ) ) && ( council->head2 == NULL || str_cmp( ch->name, council->head2 ) ) && str_cmp( council->name, "mortal council" ) ) { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg ); if( arg[0] == '\0' ) { send_to_char( "Induct whom into your council?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That player is not here.\n\r", ch ); return; } if( IS_NPC( victim ) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } /* if ( victim->level < 51 ) { send_to_char( "This player is not worthy of joining any council yet.\n\r", ch ); return; } */ if( victim->pcdata->council ) { send_to_char( "This player already belongs to a council!\n\r", ch ); return; } council->members++; victim->pcdata->council = council; STRFREE( victim->pcdata->council_name ); victim->pcdata->council_name = QUICKLINK( council->name ); act( AT_MAGIC, "You induct $N into $t", ch, council->name, victim, TO_CHAR ); act( AT_MAGIC, "$n inducts $N into $t", ch, council->name, victim, TO_ROOM ); act( AT_MAGIC, "$n inducts you into $t", ch, council->name, victim, TO_VICT ); save_char_obj( victim ); save_council( council ); return; } void do_outcast( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; CLAN_DATA *clan; char buf[MAX_STRING_LENGTH]; if( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } clan = ch->pcdata->clan; if( ( ch->pcdata && ch->pcdata->bestowments && is_name( "outcast", ch->pcdata->bestowments ) ) || is_deity( ch ) || is_leader( ch ) ) ; else { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg ); if( arg[0] == '\0' ) { send_to_char( "Outcast whom?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That player is not here.\n\r", ch ); return; } if( IS_NPC( victim ) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if( IS_IMMORTAL( victim ) ) { send_to_char( "Not on imms.\n\r", ch ); return; } if( xIS_SET( victim->act, PLR_WAR1 ) || xIS_SET( victim->act, PLR_WAR2 ) ) { send_to_char( "You want to outcast in the middle of a war!?\n\r", ch ); return; } if( victim == ch ) { if( ch->pcdata->clan->clan_type == CLAN_ORDER ) { send_to_char( "Kick yourself out of your own order?\n\r", ch ); return; } else if( ch->pcdata->clan->clan_type == CLAN_GUILD ) { send_to_char( "Kick yourself out of your own guild?\n\r", ch ); return; } else { send_to_char( "Kick yourself out of your own clan?\n\r", ch ); return; } } if( victim->pcdata->clan != ch->pcdata->clan ) { if( ch->pcdata->clan->clan_type == CLAN_ORDER ) { send_to_char( "This player does not belong to your order!\n\r", ch ); return; } else if( ch->pcdata->clan->clan_type == CLAN_GUILD ) { send_to_char( "This player does not belong to your guild!\n\r", ch ); return; } else { send_to_char( "This player does not belong to your clan!\n\r", ch ); return; } } if( is_leader( victim ) || is_deity( victim ) ) { send_to_char( "You can't outcast that player.\n\r", ch ); return; } if( clan->clan_type != CLAN_GUILD && clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_NOKILL ) { int sn; for( sn = 0; sn < top_sn; sn++ ) if( skill_table[sn]->guild == victim->pcdata->clan->class && skill_table[sn]->name != NULL ) { victim->pcdata->learned[sn] = 0; ch_printf( victim, "You forget the ways of %s.\n\r", skill_table[sn]->name ); } } if( victim->speaking & LANG_CLAN ) victim->speaking = LANG_COMMON; REMOVE_BIT( victim->speaks, LANG_CLAN ); clan->members--; switch ( victim->pcdata->clanRank ) { default: break; case 7: if( victim->sex == SEX_FEMALE ) clan->fRank7Count--; else clan->mRank7Count--; break; case 6: if( victim->sex == SEX_FEMALE ) clan->fRank6Count--; else clan->mRank6Count--; break; case 5: if( victim->sex == SEX_FEMALE ) clan->fRank5Count--; else clan->mRank5Count--; break; case 4: if( victim->sex == SEX_FEMALE ) clan->fRank4Count--; else clan->mRank4Count--; break; case 3: if( victim->sex == SEX_FEMALE ) clan->fRank3Count--; else clan->mRank3Count--; break; case 2: if( victim->sex == SEX_FEMALE ) clan->fRank2Count--; else clan->mRank2Count--; break; case 1: if( victim->sex == SEX_FEMALE ) clan->fRank1Count--; else clan->mRank1Count--; break; } victim->pcdata->clanRank = 0; victim->pcdata->clan = NULL; remove_member( victim ); STRFREE( victim->pcdata->clan_name ); victim->pcdata->clan_name = STRALLOC( "" ); /* * clan->clanPL -= victim->exp; */ xSET_BIT( victim->act, PLR_OUTCAST ); act( AT_MAGIC, "You outcast $N from $t", ch, clan->name, victim, TO_CHAR ); act( AT_MAGIC, "$n outcasts $N from $t", ch, clan->name, victim, TO_ROOM ); act( AT_MAGIC, "$n outcasts you from $t", ch, clan->name, victim, TO_VICT ); if( clan->clan_type != CLAN_GUILD && clan->clan_type != CLAN_ORDER ) { sprintf( buf, "%s has been outcast from %s!", victim->name, clan->name ); echo_to_all( AT_MAGIC, buf, ECHOTAR_ALL ); } save_char_obj( victim ); /* clan gets saved when pfile is saved */ save_clan( clan ); return; } void do_council_outcast( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; COUNCIL_DATA *council; if( IS_NPC( ch ) || !ch->pcdata->council ) { send_to_char( "Huh?\n\r", ch ); return; } council = ch->pcdata->council; if( ( council->head == NULL || str_cmp( ch->name, council->head ) ) && ( council->head2 == NULL || str_cmp( ch->name, council->head2 ) ) && str_cmp( council->name, "mortal council" ) ) { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg ); if( arg[0] == '\0' ) { send_to_char( "Outcast whom from your council?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That player is not here.\n\r", ch ); return; } if( IS_NPC( victim ) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if( victim == ch ) { send_to_char( "Kick yourself out of your own council?\n\r", ch ); return; } if( victim->pcdata->council != ch->pcdata->council ) { send_to_char( "This player does not belong to your council!\n\r", ch ); return; } --council->members; victim->pcdata->council = NULL; STRFREE( victim->pcdata->council_name ); victim->pcdata->council_name = STRALLOC( "" ); act( AT_MAGIC, "You outcast $N from $t", ch, council->name, victim, TO_CHAR ); act( AT_MAGIC, "$n outcasts $N from $t", ch, council->name, victim, TO_ROOM ); act( AT_MAGIC, "$n outcasts you from $t", ch, council->name, victim, TO_VICT ); save_char_obj( victim ); save_council( council ); return; } bool is_owner( CHAR_DATA * ch, CLAN_DATA * clan ) { if( ch->pcdata->clan == clan ) { if( !str_cmp( ch->name, clan->owner ) ) return TRUE; } return FALSE; } void do_setclan( CHAR_DATA * ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; CLAN_DATA *clan; set_char_color( AT_PLAIN, ch ); if( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if( arg1[0] == '\0' ) { send_to_char( "Usage: setclan <clan> <field> <#/player>\n\r", ch ); send_to_char( "\n\rField being one of:\n\r", ch ); send_to_char( " admin leader1-6 mrank1-7 frank1-7\n\r", ch ); send_to_char( " members board recall storage guard1 guard2\n\r", ch ); send_to_char( " align memlimit deathrecall morgue donate\n\r", ch ); send_to_char( " jail skill1-3 url tax bank active\n\r", ch ); send_to_char( " obj1 obj2 obj3 obj4 obj5\n\r", ch ); send_to_char( " mrankc1-7 frankc1-7\n\r", ch ); if( get_trust( ch ) >= LEVEL_GOD ) { send_to_char( " name filename motto desc clanhq\n\r", ch ); send_to_char( " short favour strikes type class\n\r", ch ); send_to_char( " owner \n\r", ch ); } if( get_trust( ch ) >= LEVEL_IMPLEMENTOR ) send_to_char( " pkill1-7 pdeath1-7 clanpl\n\r", ch ); return; } clan = get_clan( arg1 ); if( !clan ) { send_to_char( "No such clan.\n\r", ch ); return; } if( !str_cmp( arg2, "clanhq" ) ) { AREA_DATA *clanHQ; for( clanHQ = first_area; clanHQ; clanHQ = clanHQ->next ) { if( !str_cmp( clanHQ->filename, argument ) ) { clan->clanHQ = clanHQ; send_to_char( "Done.\n\r", ch ); return; } } send_to_char( "Area filename not found.\n\r", ch ); return; } if( !str_cmp( arg2, "active" ) ) { clan->activeMem = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } /* * Leave this uncommented unless there is a need to fix the alliance * data in the game. -Karma * if( !str_cmp(arg2,"fixalliance") ) * { * newClanAlliance(clan); * ch_printf(ch,"Done.\n\r"); * save_clan(clan); * return; * } */ /* * if ( !str_cmp( arg2, "clanpl" ) ) * { * clan->clanPL = atof( argument ); * send_to_char( "Done.\n\r", ch ); * save_clan( clan ); * return; * } */ if( !str_cmp( arg2, "admin" ) ) { STRFREE( clan->deity ); clan->deity = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "leader1" ) ) { STRFREE( clan->leader1 ); clan->leader1 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "owner" ) ) { STRFREE( clan->owner ); clan->owner = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "leader2" ) ) { STRFREE( clan->leader2 ); clan->leader2 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "leader3" ) ) { STRFREE( clan->leader3 ); clan->leader3 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "leader4" ) ) { STRFREE( clan->leader4 ); clan->leader4 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "leader5" ) ) { STRFREE( clan->leader5 ); clan->leader5 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "leader6" ) ) { STRFREE( clan->leader6 ); clan->leader6 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrankc1" ) ) { clan->mRank1Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrankc2" ) ) { clan->mRank2Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrankc3" ) ) { clan->mRank3Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrankc4" ) ) { clan->mRank4Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrankc5" ) ) { clan->mRank5Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrankc6" ) ) { clan->mRank6Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrankc7" ) ) { clan->mRank7Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRankc1" ) ) { clan->fRank1Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRankc2" ) ) { clan->fRank2Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRankc3" ) ) { clan->fRank3Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRankc4" ) ) { clan->fRank4Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRankc5" ) ) { clan->fRank5Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRankc6" ) ) { clan->fRank6Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRankc7" ) ) { clan->fRank7Count = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrank1" ) ) { STRFREE( clan->mRank1 ); clan->mRank1 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrank2" ) ) { STRFREE( clan->mRank2 ); clan->mRank2 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrank3" ) ) { STRFREE( clan->mRank3 ); clan->mRank3 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrank4" ) ) { STRFREE( clan->mRank4 ); clan->mRank4 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrank5" ) ) { STRFREE( clan->mRank5 ); clan->mRank5 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrank6" ) ) { STRFREE( clan->mRank6 ); clan->mRank6 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "mrank7" ) ) { STRFREE( clan->mRank7 ); clan->mRank7 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRank1" ) ) { STRFREE( clan->fRank1 ); clan->fRank1 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRank2" ) ) { STRFREE( clan->fRank2 ); clan->fRank2 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRank3" ) ) { STRFREE( clan->fRank3 ); clan->fRank3 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRank4" ) ) { STRFREE( clan->fRank4 ); clan->fRank4 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRank5" ) ) { STRFREE( clan->fRank5 ); clan->fRank5 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRank6" ) ) { STRFREE( clan->fRank6 ); clan->fRank6 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "fRank7" ) ) { STRFREE( clan->fRank7 ); clan->fRank7 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "badge" ) ) { STRFREE( clan->badge ); clan->badge = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "url" ) ) { STRFREE( clan->clanWebSite ); clan->clanWebSite = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "tax" ) ) { clan->tax = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "bank" ) ) { clan->bank = atof( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "board" ) ) { clan->board = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "memlimit" ) ) { clan->mem_limit = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "members" ) ) { clan->members = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "recall" ) ) { clan->recall = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "storage" ) ) { clan->storeroom = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "deathrecall" ) ) { clan->deathRecall = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "jail" ) ) { clan->clanJail = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "morgue" ) ) { clan->clanMorgue = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "donate" ) ) { clan->clanDonate = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "skill1" ) ) { clan->clanSkill1 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "skill2" ) ) { clan->clanSkill2 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "skill3" ) ) { clan->clanSkill3 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "obj1" ) ) { clan->clanobj1 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "obj2" ) ) { clan->clanobj2 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "obj3" ) ) { clan->clanobj3 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "obj4" ) ) { clan->clanobj4 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "obj5" ) ) { clan->clanobj5 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "guard1" ) ) { clan->guard1 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "guard2" ) ) { clan->guard2 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( get_trust( ch ) < LEVEL_GOD ) { do_setclan( ch, "" ); return; } if( !str_cmp( arg2, "align" ) ) { clan->alignment = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "type" ) ) { if( !str_cmp( argument, "order" ) ) clan->clan_type = CLAN_ORDER; else if( !str_cmp( argument, "guild" ) ) clan->clan_type = CLAN_GUILD; else clan->clan_type = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "class" ) ) { clan->class = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "name" ) ) { STRFREE( clan->name ); clan->name = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "short" ) ) { STRFREE( clan->short_name ); clan->short_name = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "filename" ) ) { if( clan->filename && clan->filename[0] != '\0' ) DISPOSE( clan->filename ); clan->filename = str_dup( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); write_clan_list( ); return; } if( !str_cmp( arg2, "motto" ) ) { STRFREE( clan->motto ); clan->motto = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg2, "desc" ) ) { STRFREE( clan->description ); clan->description = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( get_trust( ch ) < LEVEL_IMPLEMENTOR ) { do_setclan( ch, "" ); return; } if( !str_prefix( "pkill", arg2 ) ) { int temp_value; if( !str_cmp( arg2, "pkill1" ) ) temp_value = 0; else if( !str_cmp( arg2, "pkill2" ) ) temp_value = 1; else if( !str_cmp( arg2, "pkill3" ) ) temp_value = 2; else if( !str_cmp( arg2, "pkill4" ) ) temp_value = 3; else if( !str_cmp( arg2, "pkill5" ) ) temp_value = 4; else if( !str_cmp( arg2, "pkill6" ) ) temp_value = 5; else if( !str_cmp( arg2, "pkill7" ) ) temp_value = 6; else { do_setclan( ch, "" ); return; } clan->pkills[temp_value] = atoi( argument ); send_to_char( "Ok.\n\r", ch ); return; } if( !str_prefix( "spar_wins", arg2 ) ) { int temp_value; if( !str_cmp( arg2, "spar_wins1" ) ) temp_value = 0; else if( !str_cmp( arg2, "spar_wins2" ) ) temp_value = 1; else if( !str_cmp( arg2, "spar_wins3" ) ) temp_value = 2; else if( !str_cmp( arg2, "spar_wins4" ) ) temp_value = 3; else if( !str_cmp( arg2, "spar_wins5" ) ) temp_value = 4; else if( !str_cmp( arg2, "spar_wins6" ) ) temp_value = 5; else if( !str_cmp( arg2, "spar_wins7" ) ) temp_value = 6; else { do_setclan( ch, "" ); return; } clan->spar_wins[temp_value] = atoi( argument ); send_to_char( "Ok.\n\r", ch ); return; } if( !str_prefix( "spar_loss", arg2 ) ) { int temp_value; if( !str_cmp( arg2, "spar_loss1" ) ) temp_value = 0; else if( !str_cmp( arg2, "spar_loss2" ) ) temp_value = 1; else if( !str_cmp( arg2, "spar_loss3" ) ) temp_value = 2; else if( !str_cmp( arg2, "spar_loss4" ) ) temp_value = 3; else if( !str_cmp( arg2, "spar_loss5" ) ) temp_value = 4; else if( !str_cmp( arg2, "spar_loss6" ) ) temp_value = 5; else if( !str_cmp( arg2, "spar_loss7" ) ) temp_value = 6; else { do_setclan( ch, "" ); return; } clan->spar_loss[temp_value] = atoi( argument ); send_to_char( "Ok.\n\r", ch ); return; } if( !str_prefix( "pdeath", arg2 ) ) { int temp_value; if( !str_cmp( arg2, "pdeath1" ) ) temp_value = 0; else if( !str_cmp( arg2, "pdeath2" ) ) temp_value = 1; else if( !str_cmp( arg2, "pdeath3" ) ) temp_value = 2; else if( !str_cmp( arg2, "pdeath4" ) ) temp_value = 3; else if( !str_cmp( arg2, "pdeath5" ) ) temp_value = 4; else if( !str_cmp( arg2, "pdeath6" ) ) temp_value = 5; else if( !str_cmp( arg2, "pdeath7" ) ) temp_value = 6; else { do_setclan( ch, "" ); return; } clan->pdeaths[temp_value] = atoi( argument ); send_to_char( "Ok.\n\r", ch ); return; } do_setclan( ch, "" ); return; } void do_setcouncil( CHAR_DATA * ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; COUNCIL_DATA *council; set_char_color( AT_PLAIN, ch ); if( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); if( arg1[0] == '\0' ) { send_to_char( "Usage: setcouncil <council> <field> <deity|leader|number1|number2> <player>\n\r", ch ); send_to_char( "\n\rField being one of:\n\r", ch ); send_to_char( " head head2 members board meeting\n\r", ch ); if( get_trust( ch ) >= LEVEL_GOD ) send_to_char( " name filename desc\n\r", ch ); if( get_trust( ch ) >= LEVEL_SUB_IMPLEM ) send_to_char( " powers\n\r", ch ); return; } council = get_council( arg1 ); if( !council ) { send_to_char( "No such council.\n\r", ch ); return; } if( !str_cmp( arg2, "head" ) ) { STRFREE( council->head ); council->head = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } if( !str_cmp( arg2, "head2" ) ) { if( council->head2 != NULL ) STRFREE( council->head2 ); if( !str_cmp( argument, "none" ) || !str_cmp( argument, "clear" ) ) council->head2 = NULL; else council->head2 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } if( !str_cmp( arg2, "board" ) ) { council->board = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } if( !str_cmp( arg2, "members" ) ) { council->members = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } if( !str_cmp( arg2, "meeting" ) ) { council->meeting = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } if( get_trust( ch ) < LEVEL_GOD ) { do_setcouncil( ch, "" ); return; } if( !str_cmp( arg2, "name" ) ) { STRFREE( council->name ); council->name = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } if( !str_cmp( arg2, "filename" ) ) { if( council->filename && council->filename[0] != '\0' ) DISPOSE( council->filename ); council->filename = str_dup( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); write_council_list( ); return; } if( !str_cmp( arg2, "desc" ) ) { STRFREE( council->description ); council->description = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } if( get_trust( ch ) < LEVEL_SUB_IMPLEM ) { do_setcouncil( ch, "" ); return; } if( !str_cmp( arg2, "powers" ) ) { STRFREE( council->powers ); council->powers = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_council( council ); return; } do_setcouncil( ch, "" ); return; } /* * Added multiple levels on pkills and pdeaths. -- Shaddai */ void do_showclan( CHAR_DATA * ch, char *argument ) { CLAN_DATA *clan; set_char_color( AT_PLAIN, ch ); if( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } if( argument[0] == '\0' ) { send_to_char( "Usage: showclan <clan>\n\r", ch ); return; } clan = get_clan( argument ); if( !clan ) { send_to_char( "No such clan, guild or order.\n\r", ch ); return; } ch_printf( ch, "\n\r&w%s : &W%s\t\t&wShort Name: &W%s\t\t&wBadge: %s\n\r&wFilename : &W%s\n\r&wMotto : &W%s\n\r", clan->clan_type == CLAN_ORDER ? "Order" : ( clan->clan_type == CLAN_GUILD ? "Guild" : "Clan " ), clan->name, clan->short_name, clan->badge ? clan->badge : "(not set)", clan->filename, clan->motto ); ch_printf( ch, "&wDesc : &W%s\n\r&wDeity : &W%s\n\r", clan->description, clan->deity ); ch_printf( ch, "&wOwner: &W%-15.15s\n\r", clan->owner ); ch_printf( ch, "&wLeader1: &W%-15.15s &wLeader2: &W%-15.15s &wLeader3: &W%-15.15s", clan->leader1, clan->leader2, clan->leader3 ); ch_printf( ch, "&wLeader4: &W%-15.15s &wLeader5: &W%-15.15s &wLeader6: &W%-15.15s", clan->leader4, clan->leader5, clan->leader6 ); ch_printf( ch, "&wPKills : &w 5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m :&W%-3d &w 1m-10m :&W%-3d\n : &w 10m-100m:&W%-3d &w100m-1b :&W%-3d &w +1b :&W%-3d\n\r", clan->pkills[0], clan->pkills[1], clan->pkills[2], clan->pkills[3], clan->pkills[4], clan->pkills[5], clan->pkills[6] ); ch_printf( ch, "&wPDeaths : &w 5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m :&W%-3d &w 1m-10m :&W%-3d\n : &w 10m-100m:&W%-3d &w100m-1b :&W%-3d &w +1b :&W%-3d\n\r", clan->pdeaths[0], clan->pdeaths[1], clan->pdeaths[2], clan->pdeaths[3], clan->pdeaths[4], clan->pdeaths[5], clan->pdeaths[6] ); ch_printf( ch, "&wSpar_Wins: &w 5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m :&W%-3d &w 1m-10m :&W%-3d\n : &w 10m-100m:&W%-3d &w100m-1b :&W%-3d &w +1b :&W%-3d\n\r", clan->spar_wins[0], clan->spar_wins[1], clan->spar_wins[2], clan->spar_wins[3], clan->spar_wins[4], clan->spar_wins[5], clan->spar_wins[6] ); ch_printf( ch, "&wSpar_Loss: &w 5k-10k :&W%-3d &w 10k-100k:&W%-3d &w100k-1m :&W%-3d &w 1m-10m :&W%-3d\n : &w 10m-100m:&W%-3d &w100m-1b :&W%-3d &w +1b :&W%-3d\n\r", clan->spar_loss[0], clan->spar_loss[1], clan->spar_loss[2], clan->spar_loss[3], clan->spar_loss[4], clan->spar_loss[5], clan->spar_loss[6] ); ch_printf( ch, "&wIllegalPK: &W%-6d\n\r", clan->illegal_pk ); ch_printf( ch, "&wMKills : &W%-6d &wMDeaths: &W%-6d\n\r", clan->mkills, clan->mdeaths ); ch_printf( ch, "&wScore : &W%-6d &wFavor : &W%-6d &wStrikes: &W%d\n\r", clan->score, clan->favour, clan->strikes ); ch_printf( ch, "&wMembers : &W%-6d &wMemLimit: &W%-6d &wActive: &W%-6d &wAlign : &W%-6d", clan->members, clan->mem_limit, clan->activeMem, clan->alignment ); if( clan->clan_type == CLAN_GUILD ) ch_printf( ch, " &wClass : &W%d &w(&W%s&w)", clan->class, clan->class < MAX_PC_CLASS ? class_table[clan->class]->who_name : "unknown" ); send_to_char( "\n\r", ch ); ch_printf( ch, "&wBoard : &W%-5d &wRecall : &W%-5d &wStorage: &W%-5d\n\r", clan->board, clan->recall, clan->storeroom ); ch_printf( ch, "&wDeathRecall: &W%-5d &wMorgue : &W%-5d &wDonate: &W%-5d\n\r", clan->board, clan->recall, clan->storeroom ); ch_printf( ch, "&wJail: &W%-5d &wTax: &W%-5d", clan->clanJail, clan->tax ); ch_printf( ch, "&wBank: &W%s", num_punct_ld( clan->bank ) ); ch_printf( ch, "&wGuard1 : &W%-5d &wGuard2 : &W%-5d\n\r", clan->guard1, clan->guard2 ); ch_printf( ch, "&wObj1( &W%d &w) Obj2( &W%d &w) Obj3( &W%d &w) Obj4( &W%d &w) Obj5( &W%d &w)\n\r", clan->clanobj1, clan->clanobj2, clan->clanobj3, clan->clanobj4, clan->clanobj5 ); ch_printf( ch, "&wSkill1( &W%d &w) Skill2( &W%d &w) Skill3( &W%d &w)\n\r", clan->clanSkill1, clan->clanSkill2, clan->clanSkill3 ); /* * ch_printf(ch, "&wTotal Clan Power Level: &W%s", num_punct_ld(clan->clanPL)); */ ch_printf( ch, " Male Rankings Female Rankings\n\r" ); ch_printf( ch, " [ %-20.20s ] [ %-20.20s ]\n\r", clan->mRank1, clan->fRank1 ); ch_printf( ch, " [ %-20.20s ] [ %-20.20s ]\n\r", clan->mRank2, clan->fRank2 ); ch_printf( ch, " [ %-20.20s ] [ %-20.20s ]\n\r", clan->mRank3, clan->fRank3 ); ch_printf( ch, " [ %-20.20s ] [ %-20.20s ]\n\r", clan->mRank4, clan->fRank4 ); ch_printf( ch, " [ %-20.20s ] [ %-20.20s ]\n\r", clan->mRank5, clan->fRank5 ); ch_printf( ch, " [ %-20.20s ] [ %-20.20s ]\n\r", clan->mRank6, clan->fRank6 ); ch_printf( ch, " [ %-20.20s ] [ %-20.20s ]\n\r", clan->mRank7, clan->fRank7 ); ch_printf( ch, "show clan alliances here\n\r" ); return; } void do_showcouncil( CHAR_DATA * ch, char *argument ) { COUNCIL_DATA *council; set_char_color( AT_PLAIN, ch ); if( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } if( argument[0] == '\0' ) { send_to_char( "Usage: showcouncil <council>\n\r", ch ); return; } council = get_council( argument ); if( !council ) { send_to_char( "No such council.\n\r", ch ); return; } ch_printf_color( ch, "\n\r&wCouncil : &W%s\n\r&wFilename: &W%s\n\r", council->name, council->filename ); ch_printf_color( ch, "&wHead: &W%s\n\r", council->head ); ch_printf_color( ch, "&wHead2: &W%s\n\r", council->head2 ); ch_printf_color( ch, "&wMembers: &W%-d\n\r", council->members ); ch_printf_color( ch, "&wBoard: &W%-5d\n\r&wMeeting: &W%-5d\n\r&wPowers: &W%s\n\r", council->board, council->meeting, council->powers ); ch_printf_color( ch, "&wDescription:\n\r&W%s\n\r", council->description ); return; } void do_makeclan( CHAR_DATA * ch, char *argument ) { CLAN_DATA *clan; CLAN_DATA *aclan; ALLIANCE_DATA *alliance; set_char_color( AT_IMMORT, ch ); if( !argument || argument[0] == '\0' ) { send_to_char( "Usage: makeclan <clan name>\n\r", ch ); return; } set_char_color( AT_PLAIN, ch ); clan = get_clan( argument ); if( clan ) { send_to_char( "There is already a clan with that name.\n\r", ch ); return; } CREATE( clan, CLAN_DATA, 1 ); LINK( clan, first_clan, last_clan, next, prev ); clan->name = STRALLOC( argument ); clan->short_name = STRALLOC( "None" ); /* * clan->filename = str_dup( "" ); */ clan->motto = STRALLOC( "" ); clan->description = STRALLOC( "" ); clan->bank = 0; clan->deity = STRALLOC( "None" ); clan->owner = STRALLOC( "None" ); clan->leader1 = STRALLOC( "None" ); clan->leader2 = STRALLOC( "None" ); clan->leader3 = STRALLOC( "None" ); clan->leader4 = STRALLOC( "None" ); clan->leader5 = STRALLOC( "None" ); clan->leader6 = STRALLOC( "None" ); clan->badge = STRALLOC( "" ); clan->mRank1 = STRALLOC( "Leader" ); clan->mRank2 = STRALLOC( "Rank2" ); clan->mRank3 = STRALLOC( "Rank3" ); clan->mRank4 = STRALLOC( "Rank4" ); clan->mRank5 = STRALLOC( "Rank5" ); clan->mRank6 = STRALLOC( "Rank6" ); clan->mRank7 = STRALLOC( "Rank7" ); clan->fRank1 = STRALLOC( "Leader" ); clan->fRank2 = STRALLOC( "Rank2" ); clan->fRank3 = STRALLOC( "Rank3" ); clan->fRank4 = STRALLOC( "Rank4" ); clan->fRank5 = STRALLOC( "Rank5" ); clan->fRank6 = STRALLOC( "Rank6" ); clan->fRank7 = STRALLOC( "Rank7" ); clan->clanWebSite = STRALLOC( "" ); for( aclan = first_clan; aclan; aclan = aclan->next ) { if( aclan == clan ) continue; CREATE( alliance, ALLIANCE_DATA, 1 ); alliance->clan = clan; alliance->vclan = aclan; alliance->status = 0; alliance->vclanStatus = 0; alliance->votes = 0; alliance->leader1Vote = STRALLOC( "None" ); alliance->leader2Vote = STRALLOC( "None" ); LINK( alliance, first_alliance, last_alliance, next, prev ); } newClanAlliance( clan ); save_alliance( ); return; } void do_makecouncil( CHAR_DATA * ch, char *argument ) { char filename[256]; COUNCIL_DATA *council; bool found; set_char_color( AT_IMMORT, ch ); if( !argument || argument[0] == '\0' ) { send_to_char( "Usage: makecouncil <council name>\n\r", ch ); return; } found = FALSE; sprintf( filename, "%s%s", COUNCIL_DIR, strlower( argument ) ); CREATE( council, COUNCIL_DATA, 1 ); LINK( council, first_council, last_council, next, prev ); council->name = STRALLOC( argument ); council->head = STRALLOC( "" ); council->head2 = NULL; council->powers = STRALLOC( "" ); } void do_claninfo( CHAR_DATA * ch, char *argument ) { CLAN_DATA *clan; char buf[MAX_STRING_LENGTH]; if( IS_NPC( ch ) ) return; if( argument[0] == '\0' ) { pager_printf( ch, "Syntax: claninfo (clan short name)\n\r" ); return; } clan = get_clan( argument ); if( !clan ) { pager_printf( ch, "No such clan.\n\r" ); return; } switch ( clan->alignment ) { default: sprintf( buf, "&WNeutral" ); break; case CLANALIGN_GOOD: sprintf( buf, " &CGood" ); break; case CLANALIGN_EVIL: sprintf( buf, " &REvil" ); break; } pager_printf( ch, "&cClan Name : &W[ &R%s &W]\n\r", clan->name ); pager_printf( ch, "&cShort Name: &W[ &R%s &W]\n\r", clan->short_name ); pager_printf( ch, "&g-----------------------------------------------------------------\n\r" ); pager_printf( ch, "&cAdmin : &W[ &R%-29s &W] &cMembers : &W[ &R%7d &W]\n\r", clan->deity, clan->members ); pager_printf( ch, "&cOwner : &W[ &R%-29s &W]\n\r", clan->owner ); pager_printf( ch, "&cLeaders: &W[ &R%-12s &W] [ &R%-12s &W] &cTax Rate: &W[ &R%6d%% &W]\n\r", clan->leader1, clan->leader4, clan->tax ); pager_printf( ch, " &W[ &R%-12s &W] [ &R%-12s &W] &cAlign : &W[ %7s &W]\n\r", clan->leader2, clan->leader5, buf ); /* * pager_printf(ch, " &W[ &R%-12s &W] [ &R%-12s &W] &cClan PL : &W[ &R%7s &W]\n\r", clan->leader3, clan->leader6, abbNumLD(clan->clanPL)); */ pager_printf( ch, " &W[ &R%-12s &W] [ &R%-12s &W]\n\r", clan->leader3, clan->leader6 ); pager_printf( ch, "&g-----------------------------------------------------------------\n\r" ); pager_printf( ch, "&c Male Rankings Female Rankings\n\r" ); if( IS_IMMORTAL( ch ) || ch->pcdata->clan == clan ) { pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W] &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank1Count, clan->mRank1, clan->fRank1Count, clan->fRank1 ); pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W] &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank2Count, clan->mRank2, clan->fRank2Count, clan->fRank2 ); pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W] &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank3Count, clan->mRank3, clan->fRank3Count, clan->fRank3 ); pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W] &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank4Count, clan->mRank4, clan->fRank4Count, clan->fRank4 ); pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W] &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank5Count, clan->mRank5, clan->fRank5Count, clan->fRank5 ); pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W] &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank6Count, clan->mRank6, clan->fRank6Count, clan->fRank6 ); pager_printf( ch, "&c(%3d&c)&W[ &R%-20s &W] &c(%3d&c)&W[ &R%-20s &W]\n\r", clan->mRank7Count, clan->mRank7, clan->fRank7Count, clan->fRank7 ); } else { pager_printf( ch, " &W[ &R%-20s &W] [ &R%-20s &W]\n\r", clan->mRank1, clan->fRank1 ); pager_printf( ch, " &W[ &R%-20s &W] [ &R%-20s &W]\n\r", clan->mRank2, clan->fRank2 ); pager_printf( ch, " &W[ &R%-20s &W] [ &R%-20s &W]\n\r", clan->mRank3, clan->fRank3 ); pager_printf( ch, " &W[ &R%-20s &W] [ &R%-20s &W]\n\r", clan->mRank4, clan->fRank4 ); pager_printf( ch, " &W[ &R%-20s &W] [ &R%-20s &W]\n\r", clan->mRank5, clan->fRank5 ); pager_printf( ch, " &W[ &R%-20s &W] [ &R%-20s &W]\n\r", clan->mRank6, clan->fRank6 ); pager_printf( ch, " &W[ &R%-20s &W] [ &R%-20s &W]\n\r", clan->mRank7, clan->fRank7 ); } pager_printf( ch, "&g-----------------------------------------------------------------\n\r" ); pager_printf( ch, "&cClan Recall? : &W[%s&W] &cClan Donate Room? : &W[%s&W]\n\r", clan->recall ? "&RY" : "&rN", clan->clanDonate ? "&RY" : "&rN" ); pager_printf( ch, "&cClan Death Recall? : &W[%s&W] &cClan Jail? : &W[%s&W]\n\r", clan->deathRecall ? "&RY" : "&rN", clan->clanJail ? "&RY" : "&rN" ); pager_printf( ch, "&cClan Morgue? : &W[%s&W] &cClan Skill? : &W[&rNone&W]\n\r", clan->clanMorgue ? "&RY" : "&rN" ); if( IS_IMMORTAL( ch ) || ch->pcdata->clan == clan ) pager_printf( ch, "&cClan Bank Account : &W[ &R%s &W] &czeni\n\r", num_punct_ld( clan->bank ) ); pager_printf( ch, "&g-----------------------------------------------------------------\n\r" ); send_to_pager_color( "&wVictories (&zsorted by power level&w):&w\n\r", ch ); send_to_pager_color( "&w Player Kills Sparing&w\n\r", ch ); pager_printf_color( ch, " &w5k-10k... &r[&R%4d&r] &w5k-10k... &r[&R%4d&r]\n\r &w10k-100k...&r[&R%4d&r] &w10k-100k...&r[&R%4d&r]\n\r &w100k-1m... &r[&R%4d&r] &w100k-1m... &r[&R%4d&r]\n\r &w1m-10m... &r[&R%4d&r] &w1m-10m... &r[&R%4d&r]\n\r", clan->pkills[0], clan->spar_wins[0], clan->pkills[1], clan->spar_wins[1], clan->pkills[2], clan->spar_wins[2], clan->pkills[3], clan->spar_wins[3] ); pager_printf_color( ch, " &w10m-100m...&r[&R%4d&r] &w10m-100m...&r[&R%4d&r]\n\r &w100m-1b... &r[&R%4d&r] &w100m-1b... &r[&R%4d&r]\n\r &w+1b... &r[&R%4d&r] &w+1b... &r[&R%4d&r]\n\r", clan->pkills[4], clan->spar_wins[4], clan->pkills[5], clan->spar_wins[5], clan->pkills[6], clan->spar_wins[6] ); send_to_pager_color( "&w --------------------------------------\n\r", ch ); pager_printf_color( ch, "&C &WTOTAL... &r[&R%4d&r]&C &WTOTAL... &r[&R%4d&r]&w\n\r", ( clan->pkills[0] + clan->pkills[1] + clan->pkills[2] + clan->pkills[3] + clan->pkills[4] + clan->pkills[5] + clan->pkills[6] ), ( clan->spar_wins[0] + clan->spar_wins[1] + clan->spar_wins[2] + clan->spar_wins[3] + clan->spar_wins[4] + clan->spar_wins[5] + clan->spar_wins[6] ) ); pager_printf( ch, "&g------------------------------------------------------------------------\n\r" ); pager_printf( ch, "&cWeb Page : &W[ &w%s &W]\n\r", clan->clanWebSite ); pager_printf( ch, "&cMotto : &W\"&w%s&W\"\n\r", clan->motto ); pager_printf( ch, "&cDescription : \n\r &w%s\n\r", clan->description ); pager_printf( ch, "&g------------------------------------------------------------------------&w\n\r" ); show_alliances( ch, clan ); return; } void do_clans( CHAR_DATA * ch, char *argument ) { CLAN_DATA *clan; int count = 0; pager_printf( ch, "\n\r&RClan name Short Members Active\n\r", ch ); /* * pager_printf(ch,"&r------------------------------------------- ----------- ------- ------ ------\n\r", ch ); */ pager_printf( ch, "&r------------------------------------------- ----------- ------- ------\n\r", ch ); for( clan = first_clan; clan; clan = clan->next ) { pager_printf( ch, "&c%-43s &w%-11s &g%7d &c%6d\n\r", clan->name, clan->short_name, clan->members, clan->activeMem /*, abbNumLD(clan->clanPL) */ ); count++; } if( !count ) send_to_pager_color( "&wThere are no Clans currently formed.\n\r", ch ); else { send_to_pager_color( "&r------------------------------------------------------------------------------&c\n\r", ch ); pager_printf( ch, "For more information on each clan, use : 'Claninfo (short name)'\n\r" ); pager_printf( ch, "Default inactive days is 30. Use 'Clans <days>' change. [NOT FUNCTIONAL]\n\r" ); pager_printf( ch, "For clan membership listings, see 'Help Roster' [NOT FUNCTIONAL]\n\r" ); } return; /* clan = get_clan( argument ); if ( !clan || clan->clan_type == CLAN_GUILD || clan->clan_type == CLAN_ORDER ) { set_char_color( AT_BLOOD, ch ); send_to_pager_color( "No such clan.\n\r", ch ); return; } pager_printf_color( ch, "&r\n\r%s, '&R%s&r'\n\r\n\r", clan->name, clan->motto ); send_to_pager_color ( "&wVictories (&zsorted by power level&w):&w\n\r", ch ); send_to_pager_color ( "&w Player Kills Sparing&w\n\r", ch ); pager_printf_color( ch, " &w5k-10k... &r[&R%4d&r] &w5k-10k... &r[&R%4d&r]\n\r &w10k-100k...&r[&R%4d&r] &w10k-100k...&r[&R%4d&r]\n\r &w100k-1m... &r[&R%4d&r] &w100k-1m... &r[&R%4d&r]\n\r &w1m-10m... &r[&R%4d&r] &w1m-10m... &r[&R%4d&r]\n\r", clan->pkills[0], clan->spar_wins[0], clan->pkills[1], clan->spar_wins[1], clan->pkills[2], clan->spar_wins[2], clan->pkills[3], clan->spar_wins[3] ); pager_printf_color( ch, " &w10m-100m...&r[&R%4d&r] &w10m-100m...&r[&R%4d&r]\n\r &w100m-1b... &r[&R%4d&r] &w100m-1b... &r[&R%4d&r]\n\r &w+1b... &r[&R%4d&r] &w+1b... &r[&R%4d&r]\n\r", clan->pkills[4], clan->spar_wins[4], clan->pkills[5], clan->spar_wins[5], clan->pkills[6], clan->spar_wins[6] ); send_to_pager_color("&w --------------------------------------\n\r", ch); pager_printf_color( ch, "&C &WTOTAL... &r[&R%4d&r]&C &WTOTAL... &r[&R%4d&r]\n\r", (clan->pkills[0]+clan->pkills[1]+clan->pkills[2]+clan->pkills[3]+clan->pkills[4]+clan->pkills[5]+clan->pkills[6]), (clan->spar_wins[0]+clan->spar_wins[1]+clan->spar_wins[2]+clan->spar_wins[3]+clan->spar_wins[4]+clan->spar_wins[5]+clan->spar_wins[6]) ); pager_printf_color( ch, "&wClan Leader: &W%s\n\r&wNumber One : &W%s\n\r&wNumber Two : &W%s\n\r&wClan Admin : &W%s\n\r", clan->leader1, clan->leader2, clan->leader3, clan->deity ); if ( !str_cmp( ch->name, clan->deity ) || !str_cmp( ch->name, clan->leader1 ) || !str_cmp( ch->name, clan->leader2 ) || !str_cmp( ch->name, clan->leader3 ) ) pager_printf_color( ch, "&wMembers : &W%d\n\r", clan->members ); set_char_color( AT_BLOOD, ch ); pager_printf_color( ch, "\n\rDescription:&R %s&D\n\r", clan->description ); return; */ } void do_orders( CHAR_DATA * ch, char *argument ) { CLAN_DATA *order; int count = 0; if( argument[0] == '\0' ) { set_char_color( AT_DGREEN, ch ); send_to_char ( "\n\rOrder Deity Leader Mkills Mdeaths\n\r____________________________________________________________________\n\r\n\r", ch ); set_char_color( AT_GREEN, ch ); for( order = first_clan; order; order = order->next ) if( order->clan_type == CLAN_ORDER ) { ch_printf( ch, "%-16s %-14s %-14s %-7d %5d\n\r", order->name, order->deity, order->leader1, order->mkills, order->mdeaths ); count++; } set_char_color( AT_DGREEN, ch ); if( !count ) send_to_char( "There are no Orders currently formed.\n\r", ch ); else send_to_char ( "____________________________________________________________________\n\r\n\rUse 'orders <order>' for more detailed information.\n\r", ch ); return; } order = get_clan( argument ); if( !order || order->clan_type != CLAN_ORDER ) { set_char_color( AT_DGREEN, ch ); send_to_char( "No such Order.\n\r", ch ); return; } set_char_color( AT_DGREEN, ch ); ch_printf( ch, "\n\rOrder of %s\n\r'%s'\n\r\n\r", order->name, order->motto ); set_char_color( AT_GREEN, ch ); ch_printf( ch, "Deity : %s\n\rLeader : %s\n\rNumber One : %s\n\rNumber Two : %s\n\r", order->deity, order->leader1, order->leader2, order->leader3 ); if( !str_cmp( ch->name, order->deity ) || !str_cmp( ch->name, order->leader1 ) || !str_cmp( ch->name, order->leader2 ) || !str_cmp( ch->name, order->leader3 ) ) ch_printf( ch, "Members : %d\n\r", order->members ); set_char_color( AT_DGREEN, ch ); ch_printf( ch, "\n\rDescription:\n\r%s\n\r", order->description ); return; } void do_councils( CHAR_DATA * ch, char *argument ) { COUNCIL_DATA *council; set_char_color( AT_CYAN, ch ); if( !first_council ) { send_to_char( "There are no councils currently formed.\n\r", ch ); return; } if( argument[0] == '\0' ) { send_to_char_color( "\n\r&cTitle Head\n\r", ch ); for( council = first_council; council; council = council->next ) { if( council->head2 != NULL ) ch_printf_color( ch, "&w%-24s %s and %s\n\r", council->name, council->head, council->head2 ); else ch_printf_color( ch, "&w%-24s %-14s\n\r", council->name, council->head ); } send_to_char_color( "&cUse 'councils <name of council>' for more detailed information.\n\r", ch ); return; } council = get_council( argument ); if( !council ) { send_to_char_color( "&cNo such council exists...\n\r", ch ); return; } ch_printf_color( ch, "&c\n\r%s\n\r", council->name ); if( council->head2 == NULL ) ch_printf_color( ch, "&cHead: &w%s\n\r&cMembers: &w%d\n\r", council->head, council->members ); else ch_printf_color( ch, "&cCo-Heads: &w%s &cand &w%s\n\r&cMembers: &w%d\n\r", council->head, council->head2, council->members ); ch_printf_color( ch, "&cDescription:\n\r&w%s\n\r", council->description ); return; } void do_guilds( CHAR_DATA * ch, char *argument ) { char buf[MAX_STRING_LENGTH]; CLAN_DATA *guild; int count = 0; if( argument[0] == '\0' ) { set_char_color( AT_HUNGRY, ch ); send_to_char ( "\n\rGuild Leader Mkills Mdeaths\n\r_____________________________________________________________\n\r\n\r", ch ); set_char_color( AT_YELLOW, ch ); for( guild = first_clan; guild; guild = guild->next ) if( guild->clan_type == CLAN_GUILD ) { ++count; ch_printf( ch, "%-20s %-14s %-6d %6d\n\r", guild->name, guild->leader1, guild->mkills, guild->mdeaths ); } set_char_color( AT_HUNGRY, ch ); if( !count ) send_to_char( "There are no Guilds currently formed.\n\r", ch ); else send_to_char ( "_____________________________________________________________\n\r\n\rUse guilds <class>' for specifics. (ex: guilds thieves)\n\r", ch ); return; } sprintf( buf, "guild of %s", argument ); guild = get_clan( buf ); if( !guild || guild->clan_type != CLAN_GUILD ) { set_char_color( AT_HUNGRY, ch ); send_to_char( "No such Guild.\n\r", ch ); return; } set_char_color( AT_HUNGRY, ch ); ch_printf( ch, "\n\r%s\n\r", guild->name ); set_char_color( AT_YELLOW, ch ); ch_printf( ch, "Leader: %s\n\rNumber 1: %s\n\rNumber 2: %s\n\rMotto: %s\n\r", guild->leader1, guild->leader2, guild->leader3, guild->motto ); if( !str_cmp( ch->name, guild->deity ) || !str_cmp( ch->name, guild->leader1 ) || !str_cmp( ch->name, guild->leader2 ) || !str_cmp( ch->name, guild->leader3 ) ) ch_printf( ch, "Members: %d\n\r", guild->members ); set_char_color( AT_HUNGRY, ch ); ch_printf( ch, "Guild Description:\n\r%s\n\r", guild->description ); return; } void do_victories( CHAR_DATA * ch, char *argument ) { char filename[256]; if( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } if( ch->pcdata->clan->clan_type != CLAN_ORDER && ch->pcdata->clan->clan_type != CLAN_GUILD ) { sprintf( filename, "%s%s.record", CLAN_DIR, ch->pcdata->clan->short_name ); set_pager_color( AT_PURPLE, ch ); if( !str_cmp( ch->name, ch->pcdata->clan->leader1 ) && !str_cmp( argument, "clean" ) ) { FILE *fp = fopen( filename, "w" ); if( fp ) fclose( fp ); send_to_pager( "\n\rVictories ledger has been cleared.\n\r", ch ); return; } else { send_to_pager( "\n\rLVL Character LVL Character\n\r", ch ); show_file( ch, filename ); return; } } else { send_to_char( "Huh?\n\r", ch ); return; } } void do_shove( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; int exit_dir; EXIT_DATA *pexit; CHAR_DATA *victim; bool nogo; ROOM_INDEX_DATA *to_room; int chance = 0; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if( IS_NPC( ch ) || !IS_SET( ch->pcdata->flags, PCFLAG_DEADLY ) ) { send_to_char( "Only deadly characters can shove.\n\r", ch ); return; } if( get_timer( ch, TIMER_PKILLED ) > 0 ) { send_to_char( "You can't shove a player right now.\n\r", ch ); return; } if( arg[0] == '\0' ) { send_to_char( "Shove whom?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if( victim == ch ) { send_to_char( "You shove yourself around, to no avail.\n\r", ch ); return; } if( IS_NPC( victim ) || !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) ) { send_to_char( "You can only shove deadly characters.\n\r", ch ); return; } if( ch->level - victim->level > 5 || victim->level - ch->level > 5 ) { send_to_char( "There is too great an experience difference for you to even bother.\n\r", ch ); return; } if( get_timer( victim, TIMER_PKILLED ) > 0 ) { send_to_char( "You can't shove that player right now.\n\r", ch ); return; } if( ( victim->position ) != POS_STANDING ) { act( AT_PLAIN, "$N isn't standing up.", ch, NULL, victim, TO_CHAR ); return; } if( arg2[0] == '\0' ) { send_to_char( "Shove them in which direction?\n\r", ch ); return; } exit_dir = get_dir( arg2 ); if( xIS_SET( victim->in_room->room_flags, ROOM_SAFE ) ) { send_to_char( "That character cannot be shoved right now.\n\r", ch ); return; } victim->position = POS_SHOVE; nogo = FALSE; if( ( pexit = get_exit( ch->in_room, exit_dir ) ) == NULL ) nogo = TRUE; else if( IS_SET( pexit->exit_info, EX_CLOSED ) && ( !IS_AFFECTED( victim, AFF_PASS_DOOR ) || IS_SET( pexit->exit_info, EX_NOPASSDOOR ) ) ) nogo = TRUE; if( nogo ) { send_to_char( "There's no exit in that direction.\n\r", ch ); victim->position = POS_STANDING; return; } to_room = pexit->to_room; if( xIS_SET( to_room->room_flags, ROOM_DEATH ) ) { send_to_char( "You cannot shove someone into a death trap.\n\r", ch ); victim->position = POS_STANDING; return; } if( ch->in_room->area != to_room->area && !in_hard_range( victim, to_room->area ) ) { send_to_char( "That character cannot enter that area.\n\r", ch ); victim->position = POS_STANDING; return; } /* Check for class, assign percentage based on that. */ /* Add 3 points to chance for every str point above 15, subtract for below 15 */ chance += ( get_curr_str( ch ) - 10 ); chance += ( get_attmod( ch, victim ) ); /* Debugging purposes - show percentage for testing */ /* sprintf(buf, "Shove percentage of %s = %d", ch->name, chance); act( AT_ACTION, buf, ch, NULL, NULL, TO_ROOM ); */ if( chance < number_percent( ) ) { send_to_char( "You failed.\n\r", ch ); victim->position = POS_STANDING; return; } act( AT_ACTION, "You shove $M.", ch, NULL, victim, TO_CHAR ); act( AT_ACTION, "$n shoves you.", ch, NULL, victim, TO_VICT ); move_char( victim, get_exit( ch->in_room, exit_dir ), 0 ); if( !char_died( victim ) ) victim->position = POS_STANDING; WAIT_STATE( ch, 12 ); /* * Remove protection from shove/drag if char shoves -- Blodkai */ if( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) && get_timer( ch, TIMER_SHOVEDRAG ) <= 0 ) add_timer( ch, TIMER_SHOVEDRAG, 10, NULL, 0 ); } void do_drag( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; int exit_dir; CHAR_DATA *victim; EXIT_DATA *pexit; ROOM_INDEX_DATA *to_room; bool nogo; int chance = 0; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if( IS_NPC( ch ) ) /* * || !IS_SET( ch->pcdata->flags, PCFLAG_DEADLY ) ) */ { send_to_char( "Only characters can drag.\n\r", ch ); return; } if( get_timer( ch, TIMER_PKILLED ) > 0 ) { send_to_char( "You can't drag a player right now.\n\r", ch ); return; } if( arg[0] == '\0' ) { send_to_char( "Drag whom?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if( victim == ch ) { send_to_char( "You take yourself by the scruff of your neck, but go nowhere.\n\r", ch ); return; } if( IS_NPC( victim ) ) /* * || !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) ) */ { send_to_char( "You can only drag characters.\n\r", ch ); return; } if( !xIS_SET( victim->act, PLR_SHOVEDRAG ) && !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) ) { send_to_char( "That character doesn't seem to appreciate your attentions.\n\r", ch ); return; } if( get_timer( victim, TIMER_PKILLED ) > 0 ) { send_to_char( "You can't drag that player right now.\n\r", ch ); return; } if( victim->fighting ) { send_to_char( "You try, but can't get close enough.\n\r", ch ); return; } if( !IS_SET( ch->pcdata->flags, PCFLAG_DEADLY ) && IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) ) { send_to_char( "You cannot drag a deadly character.\n\r", ch ); return; } if( !IS_SET( victim->pcdata->flags, PCFLAG_DEADLY ) && victim->position > 3 ) { send_to_char( "They don't seem to need your assistance.\n\r", ch ); return; } if( arg2[0] == '\0' ) { send_to_char( "Drag them in which direction?\n\r", ch ); return; } exit_dir = get_dir( arg2 ); if( xIS_SET( victim->in_room->room_flags, ROOM_SAFE ) ) { send_to_char( "That character cannot be dragged right now.\n\r", ch ); return; } nogo = FALSE; if( ( pexit = get_exit( ch->in_room, exit_dir ) ) == NULL ) nogo = TRUE; else if( IS_SET( pexit->exit_info, EX_CLOSED ) && ( !IS_AFFECTED( victim, AFF_PASS_DOOR ) || IS_SET( pexit->exit_info, EX_NOPASSDOOR ) ) ) nogo = TRUE; if( nogo ) { send_to_char( "There's no exit in that direction.\n\r", ch ); return; } to_room = pexit->to_room; if( xIS_SET( to_room->room_flags, ROOM_DEATH ) ) { send_to_char( "You cannot drag someone into a death trap.\n\r", ch ); return; } if( ch->in_room->area != to_room->area && !in_hard_range( victim, to_room->area ) ) { send_to_char( "That character cannot enter that area.\n\r", ch ); victim->position = POS_STANDING; return; } /* Check for class, assign percentage based on that. */ /* Add 3 points to chance for every str point above 15, subtract for below 15 */ chance += ( get_curr_str( ch ) - 10 ); chance += ( get_attmod( ch, victim ) ); /* sprintf(buf, "Drag percentage of %s = %d", ch->name, chance); act( AT_ACTION, buf, ch, NULL, NULL, TO_ROOM ); */ if( chance < number_percent( ) ) { send_to_char( "You failed.\n\r", ch ); victim->position = POS_STANDING; return; } if( victim->position < POS_STANDING ) { sh_int temp; temp = victim->position; victim->position = POS_DRAG; act( AT_ACTION, "You drag $M into the next room.", ch, NULL, victim, TO_CHAR ); act( AT_ACTION, "$n grabs your hair and drags you.", ch, NULL, victim, TO_VICT ); move_char( victim, get_exit( ch->in_room, exit_dir ), 0 ); if( !char_died( victim ) ) victim->position = temp; /* Move ch to the room too.. they are doing dragging - Scryn */ move_char( ch, get_exit( ch->in_room, exit_dir ), 0 ); WAIT_STATE( ch, 12 ); return; } send_to_char( "You cannot do that to someone who is standing.\n\r", ch ); return; } void do_promote( CHAR_DATA * ch, char *argument ) { /* CHAR_DATA *victim; CLAN_DATA *clan; char arg[MAX_INPUT_LENGTH]; if ( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } clan = ch->pcdata->clan; if (!str_cmp( ch->name, clan->deity ) || !str_cmp( ch->name, clan->leader )) ; else { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg ); if ( arg[0] == '\0' ) { send_to_char( "Syntax: promote <name> <leader/number1/number2>\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That player is not here.\n\r", ch); return; } if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if (!victim->pcdata->clan) { send_to_char( "They must already be in your clan.\n\r", ch ); return; } clan = ch->pcdata->clan; if (victim->pcdata->clan != clan) { send_to_char( "They must already be in your clan.\n\r", ch ); return; } if (!str_cmp( argument, "leader" )) { STRFREE( clan->leader ); clan->leader = STRALLOC( victim->name ); pager_printf_color( ch, "&w%s has been promoted to leader.\n\r", victim->name ); pager_printf_color( victim, "&wYou have been promoted to leader.\n\r", victim->name ); return; } if (!str_cmp( argument, "number1" )) { STRFREE( clan->number1 ); clan->number1 = STRALLOC( victim->name ); pager_printf_color( ch, "&w%s has been promoted to first officer.\n\r", victim->name ); pager_printf_color( victim, "&wYou have been promoted to first officer.\n\r", victim->name ); return; } if (!str_cmp( argument, "number2" )) { STRFREE( clan->number2 ); clan->number2 = STRALLOC( victim->name ); pager_printf_color( ch, "&w%s has been promoted to second officer.\n\r", victim->name ); pager_printf_color( victim, "&wYou have been promoted to second officer.\n\r", victim->name ); return; } send_to_char( "You that isn't a rank.\n\r", ch ); */ return; } void show_members( CHAR_DATA * ch, char *argument, char *format ) { MEMBER_LIST *members_list; MEMBER_DATA *member; CLAN_DATA *clan; for( members_list = first_member_list; members_list; members_list = members_list->next ) { if( !str_cmp( members_list->name, argument ) ) break; } if( !members_list ) return; clan = get_clan( argument ); if( !clan ) return; pager_printf( ch, "\n\r&cMembers of &W%s\n\r", clan->name ); pager_printf( ch, "&z------------------------------------------------------------&c\n\r" ); pager_printf( ch, "Admin: &w%s\n\r", clan->deity ); pager_printf( ch, "Leaders:&w\n\r" ); pager_printf( ch, " %-12s %-12s\n\r", clan->leader1, clan->leader2 ); pager_printf( ch, " %-12s %-12s\n\r", clan->leader3, clan->leader4 ); pager_printf( ch, " %-12s %-12s\n\r", clan->leader5, clan->leader6 ); pager_printf( ch, "&z------------------------------------------------------------&c\n\r" ); pager_printf( ch, "&cName Race Kills Deaths Since\n\r\n\r" ); if( format ) { if( !str_cmp( format, "kills" ) || !str_cmp( format, "deaths" ) || !str_cmp( format, "alpha" ) ) { MS_DATA *insert = NULL; MS_DATA *sort; MS_DATA *first_member = NULL; MS_DATA *last_member = NULL; CREATE( sort, MS_DATA, 1 ); sort->member = members_list->first_member; LINK( sort, first_member, last_member, next, prev ); for( member = members_list->first_member->next; member; member = member->next ) { insert = NULL; for( sort = first_member; sort; sort = sort->next ) { if( !str_cmp( format, "kills" ) ) { if( member->kills > sort->member->kills ) { CREATE( insert, MS_DATA, 1 ); insert->member = member; INSERT( insert, sort, first_member, next, prev ); break; } } else if( !str_cmp( format, "deaths" ) ) { if( member->deaths > sort->member->deaths ) { CREATE( insert, MS_DATA, 1 ); insert->member = member; INSERT( insert, sort, first_member, next, prev ); break; } } else if( !str_cmp( format, "alpha" ) ) { if( strcmp( member->name, sort->member->name ) < 0 ) { CREATE( insert, MS_DATA, 1 ); insert->member = member; INSERT( insert, sort, first_member, next, prev ); break; } } } if( insert == NULL ) { CREATE( insert, MS_DATA, 1 ); insert->member = member; LINK( insert, first_member, last_member, next, prev ); } } for( sort = first_member; sort; sort = sort->next ) if( !is_leader( ch ) ) pager_printf( ch, "&w%-12s %13s %6d %8d %10s\n\r", capitalize( sort->member->name ), class_table[sort->member->race]->who_name, sort->member->kills, sort->member->deaths, sort->member->since ); } for( member = members_list->first_member; member; member = member->next ) if( !str_prefix( format, member->name ) ) pager_printf( ch, "&w%-12s %13s %6d %8d %10s\n\r", capitalize( member->name ), class_table[member->race]->who_name, member->kills, member->deaths, member->since ); } else { for( member = members_list->first_member; member; member = member->next ) if( !is_leader( ch ) ) pager_printf( ch, "&w%-12s %13s %6d %7d %10s\n\r", capitalize( member->name ), class_table[member->race]->who_name, member->kills, member->deaths, member->since ); } pager_printf( ch, "&z------------------------------------------------------------&c\n\r" ); } void remove_member( CHAR_DATA * ch ) { MEMBER_LIST *members_list; MEMBER_DATA *member; if( !ch->pcdata ) return; for( members_list = first_member_list; members_list; members_list = members_list->next ) { if( !str_cmp( members_list->name, ch->pcdata->clan_name ) ) break; } if( !members_list ) { /* * bug("Remove_member: No members list",0); */ return; } for( member = members_list->first_member; member; member = member->next ) { if( !str_cmp( member->name, ch->name ) ) { UNLINK( member, members_list->first_member, members_list->last_member, next, prev ); STRFREE( member->name ); STRFREE( member->since ); DISPOSE( member ); save_member_list( members_list ); /* if (ch->pcdata) { ch->pcdata->clan->members--; save_clan( ch->pcdata->clan ); } */ break; } } } void do_roster( CHAR_DATA * ch, char *argument ) { if( IS_NPC( ch ) || !ch->pcdata->clan || ( !is_leader( ch ) /*|| !is_deity(ch) */ ) ) { send_to_char( "Huh?\n\r", ch ); return; } show_members( ch, ch->pcdata->clan->name, argument ); return; } void do_members( CHAR_DATA * ch, char *argument ) { char arg1[MAX_STRING_LENGTH]; argument = one_argument( argument, arg1 ); if( argument[0] == '\0' || arg1[0] == '\0' ) { send_to_char( "Do what?\n\r", ch ); return; } if( !str_cmp( arg1, "show" ) ) { if( !str_cmp( argument, "all" ) ) { MEMBER_LIST *members_list; for( members_list = first_member_list; members_list; members_list = members_list->next ) show_members( ch, members_list->name, NULL ); return; } show_members( ch, argument, NULL ); return; } if( !str_cmp( arg1, "create" ) ) { MEMBER_LIST *members_list; CREATE( members_list, MEMBER_LIST, 1 ); members_list->name = STRALLOC( argument ); LINK( members_list, first_member_list, last_member_list, next, prev ); save_member_list( members_list ); ch_printf( ch, "Member lists \"%s\" created.\n\r", argument ); return; } if( !str_cmp( arg1, "delete" ) ) { MEMBER_LIST *members_list; MEMBER_DATA *member; for( members_list = first_member_list; members_list; members_list = members_list->next ) if( !str_cmp( argument, members_list->name ) ) { while( members_list->first_member ) { member = members_list->first_member; STRFREE( member->name ); STRFREE( member->since ); UNLINK( member, members_list->first_member, members_list->last_member, next, prev ); DISPOSE( member ); } STRFREE( members_list->name ); UNLINK( members_list, first_member_list, last_member_list, next, prev ); DISPOSE( members_list ); ch_printf( ch, "Member list \"%s\" destroyed.\n\r", argument ); return; } send_to_char( "No such list.\n\r", ch ); return; } } void save_member_list( MEMBER_LIST * members_list ) { MEMBER_DATA *member; FILE *fp; CLAN_DATA *clan; char buf[MAX_STRING_LENGTH]; if( !members_list ) { bug( "save_member_list: NULL members_list" ); return; } if( ( clan = get_clan( members_list->name ) ) == NULL ) { bug( "save_member_list: no such clan: %s", members_list->name ); return; } sprintf( buf, "%s%s.mem", CLAN_DIR, clan->filename ); if( ( fp = fopen( buf, "w" ) ) == NULL ) { bug( "Cannot open clan.mem file for writing", 0 ); perror( buf ); return; } fprintf( fp, "Name %s~\n", members_list->name ); for( member = members_list->first_member; member; member = member->next ) fprintf( fp, "Member %s %s %d %d %d %d\n", member->name, member->since, member->kills, member->deaths, member->level, member->race ); fprintf( fp, "End\n\n" ); fclose( fp ); } bool load_member_list( char *filename ) { FILE *fp; char buf[MAX_STRING_LENGTH]; MEMBER_LIST *members_list; MEMBER_DATA *member; sprintf( buf, "%s%s.mem", CLAN_DIR, filename ); if( ( fp = fopen( buf, "r" ) ) == NULL ) { bug( "Cannot open member list for reading", 0 ); return FALSE; } CREATE( members_list, MEMBER_LIST, 1 ); for( ;; ) { char *word; word = fread_word( fp ); if( !str_cmp( word, "Name" ) ) { members_list->name = fread_string( fp ); continue; } else if( !str_cmp( word, "Member" ) ) { CREATE( member, MEMBER_DATA, 1 ); member->name = STRALLOC( fread_word( fp ) ); member->since = STRALLOC( fread_word( fp ) ); member->kills = fread_number( fp ); member->deaths = fread_number( fp ); member->level = fread_number( fp ); member->race = fread_number( fp ); LINK( member, members_list->first_member, members_list->last_member, next, prev ); continue; } else if( !str_cmp( word, "End" ) ) { LINK( members_list, first_member_list, last_member_list, next, prev ); fclose( fp ); return TRUE; } else { bug( "load_members_list: bad section", 0 ); fclose( fp ); return FALSE; } } } void update_member( CHAR_DATA * ch ) { MEMBER_LIST *members_list; MEMBER_DATA *member; if( IS_NPC( ch ) || !ch->pcdata->clan ) return; for( members_list = first_member_list; members_list; members_list = members_list->next ) if( !str_cmp( members_list->name, ch->pcdata->clan_name ) ) { for( member = members_list->first_member; member; member = member->next ) if( !str_cmp( member->name, ch->name ) ) { if( ch->pcdata->clan->clan_type == CLAN_PLAIN ) { member->kills = ch->pcdata->pkills; member->deaths = ch->pcdata->pdeaths; } else { member->kills = ch->pcdata->mkills; member->deaths = ch->pcdata->mdeaths; } member->level = ch->level; return; } if( member == NULL ) { struct tm *t = localtime( ¤t_time ); char buf[MAX_STRING_LENGTH]; CREATE( member, MEMBER_DATA, 1 ); member->name = STRALLOC( ch->name ); member->level = ch->level; member->race = ch->race; sprintf( buf, "[%02d|%02d|%04d]", t->tm_mon + 1, t->tm_mday, t->tm_year + 1900 ); member->since = STRALLOC( buf ); if( ch->pcdata->clan->clan_type == CLAN_PLAIN ) { member->kills = ch->pcdata->pkills; member->deaths = ch->pcdata->pdeaths; } else { member->kills = ch->pcdata->mkills; member->deaths = ch->pcdata->mdeaths; } LINK( member, members_list->first_member, members_list->last_member, next, prev ); save_member_list( members_list ); ch->pcdata->clan->members++; save_clan( ch->pcdata->clan ); } } } void do_clandeposit( CHAR_DATA * ch, char *argument ) { char buf[MAX_STRING_LENGTH]; int amount = 0; if( IS_NPC( ch ) ) { send_to_char( "NPC's can't deposit zeni.\n\r", ch ); return; } if( !ch->pcdata->clan ) { send_to_char( "You're not in a clan.\n\r", ch ); return; } if( argument[0] == '\0' ) { send_to_char( "Deposit how much?\n\r", ch ); return; } if( !is_number( argument ) ) { send_to_char( "You must donate zeni.\n\r", ch ); return; } amount = atoi( argument ); if( amount <= 0 ) { send_to_char( "You must donate zeni.\n\r", ch ); return; } if( amount > ch->gold ) { send_to_char( "That's more than you have!\n\r", ch ); return; } ch->pcdata->clan->bank += amount; ch->gold -= amount; ch->pcdata->clanZeniDonated += amount; save_clan( ch->pcdata->clan ); save_char_obj( ch ); pager_printf( ch, "You deposit %s zeni into your clans bank account.\n\r", num_punct( amount ) ); sprintf( buf, "%s has deposited %s zeni into the clan bank account.\n\r", ch->name, num_punct( amount ) ); echo_to_clan( ch->pcdata->clan, buf ); return; } void do_clanwithdraw( CHAR_DATA * ch, char *argument ) { char buf[MAX_STRING_LENGTH]; int amount = 0; if( IS_NPC( ch ) ) { send_to_char( "NPC's can't withdraw zeni.\n\r", ch ); return; } if( !ch->pcdata->clan ) { send_to_char( "You're not in a clan.\n\r", ch ); return; } if( !is_owner( ch, ch->pcdata->clan ) ) { ch_printf( ch, "Only the owner may withdraw funds from the clan bank account.\n\r" ); return; } if( IS_IMMORTAL( ch ) && ch->level < 63 ) { ch_printf( ch, "Access denied.\n\r" ); return; } if( argument[0] == '\0' ) { send_to_char( "Withdraw how much?\n\r", ch ); return; } if( !is_number( argument ) ) { send_to_char( "You must withdraw zeni only.\n\r", ch ); return; } amount = atoi( argument ); if( amount <= 0 ) { send_to_char( "You must WITHDRAW zeni.\n\r", ch ); return; } if( amount > ch->pcdata->clan->bank ) { send_to_char( "That's more than the clan has!\n\r", ch ); return; } if( ( amount + ch->gold ) > 2000000000 ) { send_to_char( "You can't carry that much!\n\r", ch ); return; } ch->pcdata->clan->bank -= amount; ch->gold += amount; save_clan( ch->pcdata->clan ); save_char_obj( ch ); pager_printf( ch, "You withdraw %s zeni from your clans bank account.\n\r", num_punct( amount ) ); sprintf( buf, "%s has withdrawn %s zeni from the clan bank account.\n\r", ch->name, num_punct( amount ) ); echo_to_clan( ch->pcdata->clan, buf ); return; } void do_clanadmin( CHAR_DATA * ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; CLAN_DATA *clan; CLAN_DATA *vclan; ALLIANCE_DATA *alliance; /* * ROOM_INDEX_DATA *location; */ bool L1 = FALSE; bool L2 = FALSE; bool L3 = FALSE; bool L4 = FALSE; bool L5 = FALSE; bool L6 = FALSE; /* * int tax = 0; */ if( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } if( !ch->pcdata->clan ) { send_to_char( "You're not in a clan.\n\r", ch ); return; } if( !is_leader( ch ) && !is_deity( ch ) ) { send_to_char( "Only the leaders of your clan can do this.\n\r", ch ); return; } argument = one_argument( argument, arg ); if( arg[0] == '\0' ) { ch_printf( ch, "\n\rSyntax: clanadmin (field) (value)\n\r", ch ); ch_printf( ch, "\n\rField being one of the following:\n\r\n\r" ); if ( IS_IMMORTAL(ch) ) ch_printf( ch, " www | recruit | outcast | promote | demote | taxrate\n\r" ); else ch_printf( ch, " www | outcast | promote | demote | taxrate\n\r" ); ch_printf( ch, " jail | release | evict | evictrank | status | &Rowner&D\n\r" ); ch_printf( ch, " mrank1-7 | frank1-7 | motto | desc \n\r" ); ch_printf( ch, "\n\r&RWarning: You can only transfer ownership of the clan to another clan leader,\n\r" ); ch_printf( ch, "and if you do, you will not be able to get it back, till whenever the owner\n\rtransfers it back to you.&D\n\r" ); return; } clan = ch->pcdata->clan; if( !str_cmp( arg, "recruit" ) ) { if ( IS_IMMORTAL(ch) ) { do_induct( ch, argument ); return; } if ( !IS_IMMORTAL(ch) ) { do_say( ch, "I like boys." ); return; } } if( !str_cmp( arg, "owner" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner may bestow ownership of this clan to another.\n\r" ); return; } if( ( victim = get_char_room( ch, argument ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if( is_deity( victim ) ) { ch_printf( ch, "You can't make the clan admin the owner too.\n\r" ); return; } if( !is_leader( victim ) ) { ch_printf( ch, "You can only give ownership to someone who is a leader.\n\r" ); return; } STRFREE( clan->owner ); clan->owner = STRALLOC( victim->name ); save_clan( clan ); ch_printf( ch, "You have given ownership of the clan to %s.\n\r", victim->name ); ch_printf( victim, "%s has given you ownership of the clan.\n\r", ch->name ); return; } if( !str_cmp( arg, "outcast" ) ) { do_outcast( ch, argument ); return; } if( !str_cmp( arg, "mrank1" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->mRank1 ); clan->mRank1 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "mrank2" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->mRank2 ); clan->mRank2 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "mrank3" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->mRank3 ); clan->mRank3 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "mrank4" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->mRank4 ); clan->mRank4 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "mrank5" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->mRank5 ); clan->mRank5 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "mrank6" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->mRank6 ); clan->mRank6 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "mrank7" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->mRank7 ); clan->mRank7 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "fRank1" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->fRank1 ); clan->fRank1 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "fRank2" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->fRank2 ); clan->fRank2 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "fRank3" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->fRank3 ); clan->fRank3 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "fRank4" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->fRank4 ); clan->fRank4 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "fRank5" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->fRank5 ); clan->fRank5 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "fRank6" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->fRank6 ); clan->fRank6 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "fRank7" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change rank names.\n\r" ); return; } STRFREE( clan->fRank7 ); clan->fRank7 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "motto" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change the clan motto.\n\r" ); return; } STRFREE( clan->motto ); clan->motto = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "desc" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change the clan description.\n\r" ); return; } STRFREE( clan->description ); clan->description = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !str_cmp( arg, "evict" ) || !str_cmp( arg, "evictrank" ) ) { send_to_char( "This feature isn't implemented yet.\n\r", ch ); return; } /* * if(!str_cmp(arg, "jail")) * { * if (!clan->clanJail) * { * send_to_char( "Your clan hasn't built a jail yet.\n\r", ch ); * return; * } * * if ((victim = get_char_room(ch, argument)) == NULL) * { * send_to_char( "They are not here.\n\r", ch ); * return; * } * * if (IS_NPC(ch) || !ch->pcdata->clan || ch->pcdata->clan != clan) * { * send_to_char( "They are not a member of your clan.\n\r", ch ); * return; * } * * if (is_deity(victim) || is_leader(victim)) * { * send_to_char( "You can't jail that person.\n\r", ch ); * return; * } * * location = get_room_index(clan->clanJail); * act( AT_RED, "$n is hauled off to jail.", victim, NULL, NULL, TO_ROOM ); * char_from_room( victim ); * char_to_room( victim, location ); * save_char_obj( victim ); * act( AT_RED, "$n is tossed into the jail cell.", victim, NULL, NULL, TO_ROOM ); * act( AT_RED, "You are hauled off to jail and tossed into the jail cell.", ch, NULL, victim, TO_VICT ); * do_look( victim, "auto" ); * } */ /* * if(!str_cmp(arg, "release")) * { * if (!clan->clanJail) * { * send_to_char( "Your clan hasn't built a jail yet.\n\r", ch ); * return; * } * * if ((victim = get_char_world(ch, argument)) == NULL) * { * send_to_char( "Wait until they are online.\n\r", ch ); * return; * } * * if (IS_NPC(ch) || !ch->pcdata->clan || ch->pcdata->clan != clan) * { * send_to_char( "They are not a member of your clan.\n\r", ch ); * return; * } * * if (victim->in_room->vnum != clan->clanJail) * { * send_to_char( "They are not in your jail.\n\r", ch ); * return; * } * * act( AT_RED, "$n is released from jail.", victim, NULL, NULL, TO_ROOM ); * char_from_room( victim ); * char_to_room( victim, ch->in_room ); * save_char_obj( victim ); * act( AT_RED, "$n is brought in from jail.", victim, NULL, NULL, TO_ROOM ); * act( AT_RED, "You've been released from jail.", ch, NULL, victim, TO_VICT ); * do_look( victim, "auto" ); * } */ if( !str_cmp( arg, "www" ) ) { if( !is_owner( ch, clan ) ) { ch_printf( ch, "Only the owner can change the clan website address.\n\r" ); return; } STRFREE( clan->clanWebSite ); clan->clanWebSite = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } /* * if (!str_cmp( arg, "taxrate" )) * { * if (!is_number(argument)) * { * send_to_char( "Tax rate must be a number between 0 and 25.\n\r", ch ); * return; * } * tax = atoi(argument); * if (tax > 25 || tax < 0) * { * send_to_char( "Tax rate must be a number between 0 and 25.\n\r", ch ); * return; * } * if (clan->bank < 250000) * { * send_to_char( "It costs 250,000 zeni to change the tax rate.\n\r", ch ); * return; * } * clan->tax = tax; * clan->bank -= 250000; * send_to_char( "Done.\n\r", ch ); * save_clan( clan ); * return; * } */ if( !str_cmp( arg, "promote" ) ) { if( ( victim = get_char_room( ch, argument ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if( ch == victim ) { ch_printf( ch, "You can't promote yourself.\n\r" ); return; } if( IS_NPC( ch ) || !ch->pcdata->clan || ch->pcdata->clan != clan ) { send_to_char( "They are not a member of your clan.\n\r", ch ); return; } if( is_deity( victim ) ) { send_to_char( "You can't promote your clans admin.\n\r", ch ); return; } if( victim->pcdata->clanRank <= 2 && !is_leader( victim ) && !is_owner( ch, ch->pcdata->clan ) && !is_deity( ch ) ) { /* * send_to_char( "You can't promote someone to a leader without contacting your clan admin.\n\r", ch ); */ ch_printf( ch, "Only the clan admin or owner may promote others to a leader.\n\r" ); return; } if( !str_cmp( clan->leader1, "None" ) ) L1 = TRUE; else L1 = FALSE; if( !str_cmp( clan->leader2, "None" ) ) L2 = TRUE; else L2 = FALSE; if( !str_cmp( clan->leader3, "None" ) ) L3 = TRUE; else L3 = FALSE; if( !str_cmp( clan->leader4, "None" ) ) L4 = TRUE; else L4 = FALSE; if( !str_cmp( clan->leader5, "None" ) ) L5 = TRUE; else L5 = FALSE; if( !str_cmp( clan->leader6, "None" ) ) L6 = TRUE; else L6 = FALSE; switch ( victim->pcdata->clanRank ) { default: send_to_char( "Unknown rank.\n\r", ch ); bug( "clanadmin: undknown rank set for %s(%d)", victim->name, victim->pcdata->clanRank ); return; case 7: if( victim->sex == SEX_FEMALE ) { clan->fRank7Count--; clan->fRank6Count++; } else { clan->mRank7Count--; clan->mRank6Count++; } break; case 6: if( victim->sex == SEX_FEMALE ) { clan->fRank6Count--; clan->fRank5Count++; } else { clan->mRank6Count--; clan->mRank5Count++; } break; case 5: if( victim->sex == SEX_FEMALE ) { clan->fRank5Count--; clan->fRank4Count++; } else { clan->mRank5Count--; clan->mRank4Count++; } break; case 4: if( victim->sex == SEX_FEMALE ) { clan->fRank4Count--; clan->fRank3Count++; } else { clan->mRank4Count--; clan->mRank3Count++; } break; case 3: if( victim->sex == SEX_FEMALE ) { clan->fRank3Count--; clan->fRank2Count++; } else { clan->mRank3Count--; clan->mRank2Count++; } break; case 2: if( !L1 && !L2 && !L3 && !L4 && !L5 && !L6 ) { ch_printf( ch, "You can't promote any more leaders now. The leader ranks are full.\n\r" ); return; } if( L1 ) clan->leader1 = STRALLOC( victim->name ); else if( L2 ) clan->leader2 = STRALLOC( victim->name ); else if( L3 ) clan->leader3 = STRALLOC( victim->name ); else if( L4 ) clan->leader4 = STRALLOC( victim->name ); else if( L5 ) clan->leader5 = STRALLOC( victim->name ); else if( L6 ) clan->leader6 = STRALLOC( victim->name ); else { ch_printf( ch, "A bug has occured in clanadmin promote. Contact an imm immediately.\n\r" ); return; } if( victim->sex == SEX_FEMALE ) { clan->fRank2Count--; clan->fRank1Count++; } else { clan->mRank2Count--; clan->mRank1Count++; } break; } victim->pcdata->clanRank--; send_to_char( "Done.\n\r", ch ); save_clan( clan ); save_char_obj( victim ); sprintf( buf, "%s has been promoted to %s", victim->name, get_clanTitle( victim ) ); echo_to_clan( clan, buf ); return; } if( !str_cmp( arg, "demote" ) ) { if( ( victim = get_char_room( ch, argument ) ) == NULL ) { send_to_char( "They are not here.\n\r", ch ); return; } if( ch == victim ) { ch_printf( ch, "You can't demote yourself.\n\r" ); return; } if( IS_NPC( ch ) || !ch->pcdata->clan || ch->pcdata->clan != clan ) { send_to_char( "They are not a member of your clan.\n\r", ch ); return; } if( is_deity( victim ) ) { send_to_char( "You can't demote your clans admin.\n\r", ch ); return; } if( victim->pcdata->clanRank <= 1 && !is_owner( ch, ch->pcdata->clan ) ) { /* * send_to_char( "You can't demote a leader without contacting your clan admin.\n\r", ch ); */ ch_printf( ch, "Only the clan admin or owner may demote leaders.\n\r" ); return; } switch ( victim->pcdata->clanRank ) { default: send_to_char( "Unknown rank.\n\r", ch ); bug( "clanadmin: undknown rank set for %s(%d)", victim->name, victim->pcdata->clanRank ); return; case 6: if( victim->sex == SEX_FEMALE ) { clan->fRank7Count++; clan->fRank6Count--; } else { clan->mRank7Count++; clan->mRank6Count--; } break; case 5: if( victim->sex == SEX_FEMALE ) { clan->fRank6Count++; clan->fRank5Count--; } else { clan->mRank6Count++; clan->mRank5Count--; } break; case 4: if( victim->sex == SEX_FEMALE ) { clan->fRank5Count++; clan->fRank4Count--; } else { clan->mRank5Count++; clan->mRank4Count--; } break; case 3: if( victim->sex == SEX_FEMALE ) { clan->fRank4Count++; clan->fRank3Count--; } else { clan->mRank4Count++; clan->mRank3Count--; } break; case 2: if( victim->sex == SEX_FEMALE ) { clan->fRank3Count++; clan->fRank2Count--; } else { clan->mRank3Count++; clan->mRank2Count--; } break; case 1: if( !str_cmp( victim->name, clan->leader1 ) ) { STRFREE( clan->leader1 ); clan->leader1 = STRALLOC( "None" ); } else if( !str_cmp( victim->name, clan->leader2 ) ) { STRFREE( clan->leader2 ); clan->leader2 = STRALLOC( "None" ); } else if( !str_cmp( victim->name, clan->leader3 ) ) { STRFREE( clan->leader3 ); clan->leader3 = STRALLOC( "None" ); } else if( !str_cmp( victim->name, clan->leader4 ) ) { STRFREE( clan->leader4 ); clan->leader4 = STRALLOC( "None" ); } else if( !str_cmp( victim->name, clan->leader5 ) ) { STRFREE( clan->leader5 ); clan->leader5 = STRALLOC( "None" ); } else if( !str_cmp( victim->name, clan->leader6 ) ) { STRFREE( clan->leader6 ); clan->leader6 = STRALLOC( "None" ); } else { ch_printf( ch, "A bug has occured in clanadmin demote. Contact an imm immediately.\n\r" ); } if( victim->sex == SEX_FEMALE ) { clan->fRank2Count++; clan->fRank1Count--; } else { clan->mRank2Count++; clan->mRank1Count--; } break; } victim->pcdata->clanRank++; send_to_char( "Done.\n\r", ch ); save_clan( clan ); save_char_obj( victim ); sprintf( buf, "%s has been demoted to %s", victim->name, get_clanTitle( victim ) ); echo_to_clan( clan, buf ); return; } if( !str_cmp( arg, "status" ) ) { argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); if( arg2[0] == '\0' || arg3[0] == '\0' ) { send_to_char( "\n\rTo change status type 'clanadmin status [clan] [allied|friendly|neutral|hostile|atwar]'.\n\r", ch ); show_alliances( ch, clan ); return; } if( ( vclan = get_clan( arg2 ) ) == NULL ) { send_to_char( "That's not a clan. Type 'clans' for a list.\n\r", ch ); return; } if( clan == vclan ) { send_to_char( "Your clan already has a perfect alliance with its self.\n\r", ch ); return; } if( !str_cmp( arg3, "neutral" ) ) { if( allianceStatus( clan, vclan ) == ALLIANCE_NEUTRAL ) { ch_printf( ch, "Your clan already is neutral with them!\n\r" ); return; } alliance = get_alliance( clan, vclan ); alliance->votes = 0; if( str_cmp( alliance->leader1Vote, "None" ) ) { STRFREE( alliance->leader1Vote ); alliance->leader1Vote = STRALLOC( "None" ); } if( str_cmp( alliance->leader2Vote, "None" ) ) { STRFREE( alliance->leader2Vote ); alliance->leader2Vote = STRALLOC( "None" ); } if( !change_alliance( clan, vclan, ALLIANCE_NEUTRAL ) ) { /* * send_to_char( "Error changing status. Please notify your clan admin.\n\r", ch ); */ return; } /* * else * send_to_char( "Status changed.\n\r", ch ); */ } else if( !str_cmp( arg3, "friendly" ) ) { if( allianceStatus( clan, vclan ) == ALLIANCE_FRIENDLY ) { ch_printf( ch, "Your clan already is friendly with them!\n\r" ); return; } alliance = get_alliance( clan, vclan ); alliance->votes = 0; if( str_cmp( alliance->leader1Vote, "None" ) ) { STRFREE( alliance->leader1Vote ); alliance->leader1Vote = STRALLOC( "None" ); } if( str_cmp( alliance->leader2Vote, "None" ) ) { STRFREE( alliance->leader2Vote ); alliance->leader2Vote = STRALLOC( "None" ); } if( !change_alliance( clan, vclan, ALLIANCE_FRIENDLY ) ) { /* * send_to_char( "Error changing status. Please notify your clan admin.\n\r", ch ); */ return; } /* * else * send_to_char( "Status changed.\n\r", ch ); */ } else if( !str_cmp( arg3, "allied" ) ) { if( allianceStatus( clan, vclan ) == ALLIANCE_ALLIED ) { ch_printf( ch, "Your clan already is allied with them!\n\r" ); return; } alliance = get_alliance( clan, vclan ); alliance->votes = 0; if( str_cmp( alliance->leader1Vote, "None" ) ) { STRFREE( alliance->leader1Vote ); alliance->leader1Vote = STRALLOC( "None" ); } if( str_cmp( alliance->leader2Vote, "None" ) ) { STRFREE( alliance->leader2Vote ); alliance->leader2Vote = STRALLOC( "None" ); } if( !change_alliance( clan, vclan, ALLIANCE_ALLIED ) ) { /* * send_to_char( "Error changing status. Please notify your clan admin.\n\r", ch ); */ return; } /* * else * send_to_char( "Status changed.\n\r", ch ); */ /* * if (allianceStatus( clan, vclan) == ALLIANCE_ALLIED) * { * sprintf(buf, "&C%s and %s are now allies.\n\r", clan->name, vclan->name); * echo_to_clan(clan, buf); * echo_to_clan(vclan, buf); * } */ } else if( !str_cmp( arg3, "hostile" ) ) { if( allianceStatus( clan, vclan ) == ALLIANCE_HOSTILE ) { ch_printf( ch, "Your clan already is hostile with them!\n\r" ); return; } alliance = get_alliance( clan, vclan ); alliance->votes = 0; if( str_cmp( alliance->leader1Vote, "None" ) ) { STRFREE( alliance->leader1Vote ); alliance->leader1Vote = STRALLOC( "None" ); } if( str_cmp( alliance->leader2Vote, "None" ) ) { STRFREE( alliance->leader2Vote ); alliance->leader2Vote = STRALLOC( "None" ); } if( !change_alliance( clan, vclan, ALLIANCE_HOSTILE ) ) { /* * send_to_char( "Error changing status. Please notify your clan admin.\n\r", ch ); */ return; } /* * else * send_to_char( "Status changed.\n\r", ch ); */ } else if( !str_cmp( arg3, "atwar" ) ) { if( allianceStatus( clan, vclan ) == ALLIANCE_ATWAR ) { ch_printf( ch, "Your clan already is at war with them!\n\r" ); return; } alliance = get_alliance( clan, vclan ); if( !alliance ) { CREATE( alliance, ALLIANCE_DATA, 1 ); alliance->clan = clan; alliance->vclan = vclan; alliance->status = 0; alliance->vclanStatus = 0; alliance->votes = 0; alliance->leader1Vote = STRALLOC( "" ); alliance->leader2Vote = STRALLOC( "" ); LINK( alliance, first_alliance, last_alliance, next, prev ); } if( alliance->votes < 2 ) { if( alliance->votes == 1 ) { if( !str_cmp( alliance->leader1Vote, ch->name ) ) { ch_printf( ch, "You can't vote twice!\n\r" ); return; } STRFREE( alliance->leader2Vote ); alliance->leader2Vote = STRALLOC( ch->name ); alliance->votes++; sprintf( buf, "%s has voted to go to war with %s!", ch->name, vclan->name ); echo_to_clan( clan, buf ); ch_printf( ch, "You have cast the second of two votes neccessary to go to war. You may now change the alliance to AT WAR status.\n\r" ); return; } else { STRFREE( alliance->leader1Vote ); alliance->leader1Vote = STRALLOC( ch->name ); alliance->votes++; sprintf( buf, "%s has voted to go to war with %s!", ch->name, vclan->name ); echo_to_clan( clan, buf ); ch_printf( ch, "You have cast the first of two votes neccessary to go to war.\n\r" ); return; } } else { if( !change_alliance( clan, vclan, ALLIANCE_ATWAR ) ) { /* * send_to_char( "Error changing status. Please notify your clan admin.\n\r", ch ); */ return; } /* * else * alliance_towar(ch, clan, vclan); */ } } else { send_to_char( "Choices are: allied, friendly, neutral, hostile, atwar.\n\r", ch ); return; } return; } /* * send_to_char( "Syntax: [www|recruit|outcast|promote|demote|taxrate|jail|release|evict|evictrank|status]\n\r", ch ); */ do_clanadmin( ch, "" ); return; } void do_resetalliances( CHAR_DATA * ch, char *argument ) { CLAN_DATA *clan; CLAN_DATA *aclan; ALLIANCE_DATA *alliance; for( clan = first_clan; clan; clan = clan->next ) { for( aclan = first_clan; aclan; aclan = aclan->next ) { if( aclan == clan ) continue; CREATE( alliance, ALLIANCE_DATA, 1 ); alliance->clan = clan; alliance->vclan = aclan; alliance->status = 0; alliance->vclanStatus = 0; alliance->votes = 0; alliance->leader1Vote = STRALLOC( "" ); alliance->leader2Vote = STRALLOC( "" ); LINK( alliance, first_alliance, last_alliance, next, prev ); } } save_alliance( ); return; } void do_clanrecall( CHAR_DATA * ch, char *argument ) { CLAN_DATA *clandata = NULL; char buf[MAX_STRING_LENGTH]; if( !ch->desc ) return; clandata = ch->pcdata->clan; if( !clandata ) { send_to_char( "You don\'t have a clan.\n\r", ch ); return; } if( !clandata->recall ) { send_to_char( "Your clan doesn\'t have a recall point.", ch ); return; } if( xIS_SET( ch->in_room->room_flags, ROOM_NO_RECALL ) || IS_AFFECTED( ch, AFF_DEAD ) ) { send_to_char_color( "&C&wYou can\'t go to your clan from here.\n\r", ch ); return; } if( ch->in_room->vnum == 8 ) { send_to_char( "You're in hell--you can't go to your clan.\n\r", ch ); return; } if( ch->pcdata->gohometimer > 0 ) { ch_printf( ch, "You can't go to your clan for another %d minutes", ch->pcdata->gohometimer ); return; } switch ( ch->position ) { default: break; case POS_MORTAL: case POS_INCAP: case POS_DEAD: case POS_STUNNED: send_to_char_color( "&C&wYou can\'t do that, you\'re hurt too badly.\n\r", ch ); return; case POS_SITTING: case POS_RESTING: case POS_SLEEPING: do_wake( ch, "auto" ); return; case POS_FIGHTING: case POS_DEFENSIVE: case POS_AGGRESSIVE: case POS_BERSERK: case POS_EVASIVE: send_to_char_color( "&C&wNo way! You are still fighting!\n\r", ch ); return; } sprintf( buf, "%s disappears to their clan\'s headquarters.", ch->name ); act( AT_GREY, buf, ch, NULL, ch, TO_ROOM ); char_from_room( ch ); char_to_room( ch, get_room_index( clandata->recall ) ); sprintf( buf, "As a vortex of luminescent light forms, %s slides gracefully through into their clan headquarters.", ch->name ); act( AT_GREY, buf, ch, NULL, ch, TO_ROOM ); do_look( ch, "" ); return; }