/*************************************************************************** * STAR WARS REALITY 1.0 * *--------------------------------------------------------------------------* * Star Wars Reality Code Additions and changes from the Smaug Code * * copyright (c) 1997 by Sean Cooper * * -------------------------------------------------------------------------* * Starwars and Starwars Names copyright(c) Lucas Film Ltd. * *--------------------------------------------------------------------------* * SMAUG 1.0 (C) 1994, 1995, 1996 by Derek Snider * * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, * * Scryn, Rennard, Swordbearer, Gorog, Grishnakh and Tricops * * ------------------------------------------------------------------------ * * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * ------------------------------------------------------------------------ * * 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; PLANET_DATA * first_planet; PLANET_DATA * last_planet; GUARD_DATA * first_guard; GUARD_DATA * last_guard; /* 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_planet args( ( PLANET_DATA *planet, FILE *fp ) ); bool load_planet_file args( ( char *planetfile ) ); void write_planet_list args( ( void ) ); void do_carry( CHAR_DATA *ch, char *argument ); void clear_carry (CHAR_DATA *ch); /* * 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 ) ) return clan; for ( clan = first_clan; clan; clan = clan->next ) if ( nifty_is_name( name, clan->name ) ) return clan; for ( clan = first_clan; clan; clan = clan->next ) if ( !str_prefix( name, clan->name ) ) return clan; for ( clan = first_clan; clan; clan = clan->next ) if ( nifty_is_name_prefix( name, clan->name ) ) return clan; return NULL; } PLANET_DATA *get_planet( char *name ) { PLANET_DATA *planet; for ( planet = first_planet; planet; planet = planet->next ) if ( !str_cmp( name, planet->name ) ) return planet; for ( planet = first_planet; planet; planet = planet->next ) if ( nifty_is_name( name, planet->name ) ) return planet; for ( planet = first_planet; planet; planet = planet->next ) if ( !str_prefix( name, planet->name ) ) return planet; for ( planet = first_planet; planet; planet = planet->next ) if ( nifty_is_name_prefix( name, planet->name ) ) return planet; return NULL; } 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_planet_list( ) { PLANET_DATA *tplanet; FILE *fpout; char filename[256]; sprintf( filename, "%s%s", PLANET_DIR, PLANET_LIST ); fpout = fopen( filename, "w" ); if ( !fpout ) { bug( "FATAL: cannot open planet.lst for writing!\n\r", 0 ); return; } for ( tplanet = first_planet; tplanet; tplanet = tplanet->next ) fprintf( fpout, "%s\n", tplanet->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]; int rank; 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" ); if ( clan->name) fprintf( fp, "Name %s~\n", clan->name ); if ( clan->filename ) fprintf( fp, "Filename %s~\n", clan->filename ); if ( clan->description ) fprintf( fp, "Description %s~\n", clan->description ); fprintf( fp, "Leader %s~\n", clan->leader ); fprintf( fp, "NumberOne %s~\n", clan->number1 ); fprintf( fp, "NumberTwo %s~\n", clan->number2 ); fprintf( fp, "Type %d\n", clan->clan_type ); fprintf( fp, "Members %d\n", clan->members ); fprintf( fp, "Memberslist %s~\n", clan->memberslist ); fprintf( fp, "Storeroom %d\n", clan->storeroom ); fprintf( fp, "Funds %ld\n", clan->funds ); fprintf( fp, "Jail %d\n", clan->jail ); fprintf( fp, "Enlist %d\n", clan->enlistroom ); fprintf( fp, "Atwar %s~\n", clan->atwar ); for( rank = 0 ; rank <= ( MAX_RANK - 1 ) ; rank++ ) fprintf( fp, "Rank %d %d %s~\n", rank, clan->ranks[rank].wage, clan->ranks[rank].name ); fprintf( fp, "End\n\n" ); fprintf( fp, "#END\n" ); } fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); return; } void save_planet( PLANET_DATA *planet ) { FILE *fp; char filename[256]; char buf[MAX_STRING_LENGTH]; if ( !planet ) { bug( "save_planet: null planet pointer!", 0 ); return; } if ( !planet->filename || planet->filename[0] == '\0' ) { sprintf( buf, "save_planet: %s has no filename", planet->name ); bug( buf, 0 ); return; } sprintf( filename, "%s%s", PLANET_DIR, planet->filename ); fclose( fpReserve ); if ( ( fp = fopen( filename, "w" ) ) == NULL ) { bug( "save_planet: fopen", 0 ); perror( filename ); } else { AREA_DATA *pArea; fprintf( fp, "#PLANET\n" ); if ( planet->name) fprintf( fp, "Name %s~\n", planet->name ); if ( planet->filename ) fprintf( fp, "Filename %s~\n", planet->filename ); fprintf( fp, "BaseValue %ld\n", planet->base_value ); fprintf( fp, "Flags %d\n", planet->flags ); fprintf( fp, "PopSupport %f\n", planet->pop_support ); fprintf( fp, "X %d\n", planet->x ); fprintf( fp, "Y %d\n", planet->y ); fprintf( fp, "Z %d\n", planet->z ); fprintf( fp, "Code %d\n", planet->code ); if ( planet->controls ) fprintf( fp, "Control %d\n", planet->controls); if ( planet->shields ) fprintf( fp, "Shield %d\n", planet->shields); if ( planet->barracks ) fprintf( fp, "Barracks %d\n", planet->barracks); if ( planet->starsystem && planet->starsystem->name ) fprintf( fp, "Starsystem %s~\n", planet->starsystem->name); if ( planet->governed_by && planet->governed_by->name ) fprintf( fp, "GovernedBy %s~\n", planet->governed_by->name); for( pArea = planet->first_area ; pArea ; pArea = pArea->next_on_planet ) if (pArea->filename) fprintf( fp, "Area %s~\n", pArea->filename ); 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; \ } void fread_clan( CLAN_DATA *clan, FILE *fp ) { char buf[MAX_STRING_LENGTH], *word, *tmp; char arg[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH]; bool fMatch; int place, loop; 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( "Atwar", clan->atwar, fread_string( fp ) ); break; case 'D': KEY( "Description", clan->description, fread_string( fp ) ); break; case 'E': KEY( "Enlist", clan->enlistroom, fread_number( fp ) ); if ( !str_cmp( word, "End" ) ) { if (!clan->name) clan->name = STRALLOC( "" ); if (!clan->leader) clan->leader = STRALLOC( "" ); if (!clan->description) clan->description = STRALLOC( "" ); if (!clan->number1) clan->number1 = STRALLOC( "" ); if (!clan->number2) clan->number2 = STRALLOC( "" ); if (!clan->memberslist) clan->memberslist = STRALLOC( "" ); if (!clan->atwar) clan->atwar = STRALLOC( "" ); for( loop = 0 ; loop >= ( MAX_RANK - 1 ) ; loop++ ) if( !clan->ranks[loop].name ) clan->ranks[loop].name = STRALLOC( "" ); return; } break; case 'F': KEY( "Funds", clan->funds, fread_number( fp ) ); KEY( "Filename", clan->filename, fread_string_nohash( fp ) ); break; case 'J': KEY( "Jail", clan->jail, fread_number( fp ) ); break; case 'L': KEY( "Leader", clan->leader, fread_string( fp ) ); break; case 'M': KEY( "Members", clan->members, fread_number( fp ) ); KEY( "Memberslist", clan->memberslist, fread_string( fp ) ); break; case 'N': KEY( "Name", clan->name, fread_string( fp ) ); KEY( "NumberOne", clan->number1, fread_string( fp ) ); KEY( "NumberTwo", clan->number2, fread_string( fp ) ); break; case 'R': if( !str_cmp( word, "Rank" ) ) { tmp = fread_string( fp ); tmp = one_argument( tmp, arg ); place = atoi( arg ); clan->ranks[place].place = place; tmp = one_argument( tmp, arg2 ); clan->ranks[place].wage = atoi( arg2 ); clan->ranks[place].name = STRALLOC( tmp ); fMatch = TRUE; break; } break; case 'S': KEY( "Storeroom", clan->storeroom, fread_number( fp ) ); break; case 'T': KEY( "Type", clan->clan_type, fread_number( fp ) ); break; } if ( !fMatch ) { sprintf( buf, "Fread_clan: no match: %s", word ); bug( buf, 0 ); } } } void fread_planet( PLANET_DATA *planet, 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 'A': if ( !str_cmp( word, "Area" ) ) { char aName[MAX_STRING_LENGTH]; AREA_DATA *pArea; sprintf (aName, fread_string(fp)); for( pArea = first_area ; pArea ; pArea = pArea->next ) if (pArea->filename && !str_cmp(pArea->filename , aName ) ) { pArea->planet = planet; LINK( pArea, planet->first_area, planet->last_area, next_on_planet, prev_on_planet); } fMatch = TRUE; } break; case 'B': KEY( "Barracks", planet->barracks, fread_number( fp ) ); KEY( "BaseValue", planet->base_value, fread_number( fp ) ); break; case 'C': KEY( "Code", planet->code, fread_number( fp ) ); KEY( "Control", planet->controls, fread_number( fp ) ); break; case 'E': if ( !str_cmp( word, "End" ) ) { if (!planet->name) planet->name = STRALLOC( "un-named planet" ); if ( !planet->controls ) planet->controls = 0; if ( !planet->shields ) planet->shields = 0; if ( planet->barracks ) planet->barracks = 0; fMatch = TRUE; return; } break; case 'F': KEY( "Filename", planet->filename, fread_string_nohash( fp ) ); KEY( "Flags", planet->flags, fread_number( fp ) ); break; case 'G': if ( !str_cmp( word, "GovernedBy" ) ) { planet->governed_by = get_clan ( fread_string(fp) ); fMatch = TRUE; } break; case 'N': KEY( "Name", planet->name, fread_string( fp ) ); break; case 'P': KEY( "PopSupport", planet->pop_support, fread_number( fp ) ); break; case 'S': KEY( "Shield", planet->shields, fread_number( fp )); if ( !str_cmp( word, "Starsystem" ) ) { planet->starsystem = starsystem_from_name ( fread_string(fp) ); if (planet->starsystem) { SPACE_DATA *starsystem = planet->starsystem; LINK( planet , starsystem->first_planet, starsystem->last_planet, next_in_system, prev_in_system ); } fMatch = TRUE; } break; case 'T': KEY( "Taxes", planet->base_value, fread_number( fp ) ); break; case 'X': KEY( "X", planet->x, fread_number(fp) ); break; case 'Y': KEY( "Y", planet->y, fread_number(fp) ); break; case 'Z': KEY( "Z", planet->z, fread_number(fp) ); break; } if ( !fMatch ) { sprintf( buf, "Fread_planet: 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 ); 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 ) { ROOM_INDEX_DATA *storeroom; LINK( clan, first_clan, last_clan, next, prev ); if ( clan->storeroom == 0 || (storeroom = get_room_index( clan->storeroom )) == NULL ) { log_string( "Storeroom not found" ); return found; } sprintf( filename, "%s%s.vault", CLAN_DIR, clan->filename ); if ( ( fp = fopen( filename, "r" ) ) != NULL ) { int iNest; bool found; OBJ_DATA *tobj, *tobj_next; log_string( "Loading clan storage room" ); rset_supermob(storeroom); for ( iNest = 0; iNest < MAX_NEST; iNest++ ) rgObjNest[iNest] = NULL; found = TRUE; for ( ; ; ) { char letter; char *word; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ) { bug( "Load_clan_vault: # not found.", 0 ); bug( clan->name, 0 ); break; } word = fread_word( fp ); if ( !str_cmp( word, "OBJECT" ) ) /* Objects */ fread_obj ( supermob, fp, OS_CARRY ); else if ( !str_cmp( word, "END" ) ) /* Done */ break; else { bug( "Load_clan_vault: bad section.", 0 ); bug( clan->name, 0 ); break; } } fclose( fp ); for ( tobj = supermob->first_carrying; tobj; tobj = tobj_next ) { tobj_next = tobj->next_content; obj_from_char( tobj ); obj_to_room( tobj, storeroom ); } release_supermob(); } else log_string( "Cannot open clan vault" ); } else DISPOSE( clan ); return found; } bool load_planet_file( char *planetfile ) { char filename[256]; PLANET_DATA *planet; FILE *fp; bool found; CREATE( planet, PLANET_DATA, 1 ); planet->governed_by = NULL; planet->next_in_system = NULL; planet->prev_in_system = NULL; planet->starsystem = NULL ; planet->first_area = NULL; planet->last_area = NULL; planet->first_guard = NULL; planet->last_guard = NULL; found = FALSE; sprintf( filename, "%s%s", PLANET_DIR, planetfile ); 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_planet_file: # not found.", 0 ); break; } word = fread_word( fp ); if ( !str_cmp( word, "PLANET" ) ) { fread_planet( planet, fp ); break; } else if ( !str_cmp( word, "END" ) ) break; else { char buf[MAX_STRING_LENGTH]; sprintf( buf, "Load_planet_file: bad section: %s.", word ); bug( buf, 0 ); break; } } fclose( fp ); } if ( !found ) DISPOSE( planet ); else LINK( planet, first_planet, last_planet, next, prev ); 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 ); } } fclose( fpList ); log_string(" Done clans\n\rSorting clans...." ); fpReserve = fopen( NULL_FILE, "r" ); log_string(" Done sorting" ); return; } void load_planets( ) { FILE *fpList; char *filename; char planetlist[256]; char buf[MAX_STRING_LENGTH]; first_planet = NULL; last_planet = NULL; log_string( "Loading planets..." ); sprintf( planetlist, "%s%s", PLANET_DIR, PLANET_LIST ); fclose( fpReserve ); if ( ( fpList = fopen( planetlist, "r" ) ) == NULL ) { perror( planetlist ); exit( 1 ); } for ( ; ; ) { filename = feof( fpList ) ? "$" : fread_word( fpList ); log_string( filename ); if ( filename[0] == '$' ) break; if ( !load_planet_file( filename ) ) { sprintf( buf, "Cannot load planet file: %s", filename ); bug( buf, 0 ); } } fclose( fpList ); log_string(" Done planets " ); fpReserve = fopen( NULL_FILE, "r" ); return; } void do_make( CHAR_DATA *ch, char *argument ) { send_to_char( "Huh?\n\r", ch ); return; } void do_induct( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char buf[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)) || !str_cmp( ch->name, clan->leader ) || !str_cmp( ch->name, clan->number1 ) || !str_cmp( ch->name, clan->number2 ) ) ; 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) ) { do_say(victim,"Why would *I* want to join your stinking clan?"); do_say(victim,"Whats in it for me?"); return; } if ( victim->pcdata->clan ) { if ( victim->pcdata->clan->clan_type == CLAN_CRIME ) { if ( victim->pcdata->clan == clan ) send_to_char( "This player already belongs to your crime family!\n\r", ch ); else send_to_char( "This player already belongs to an organization!\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 organization!\n\r", ch ); return; } else { if ( victim->pcdata->clan == clan ) send_to_char( "This player already belongs to your organization!\n\r", ch ); else send_to_char( "This player already belongs to an organization!\n\r", ch ); return; } } sprintf( buf, "%s %s", clan->memberslist, victim->name ); STRFREE( clan->memberslist ); clan->memberslist = STRALLOC( buf ); clan->members++; victim->pcdata->clan_rank = 0; victim->pcdata->clan = clan; STRFREE(victim->pcdata->clan_name); victim->pcdata->clan_name = QUICKLINK( clan->name ); act( AT_MAGIC, "You induct $N into $t", ch, clan->name, victim, TO_CHAR ); act( AT_MAGIC, "$n inducts $N into $t", ch, clan->name, victim, TO_NOTVICT ); act( AT_MAGIC, "$n inducts you into $t", ch, clan->name, victim, TO_VICT ); save_char_obj( victim ); 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]; DESCRIPTOR_DATA *d; 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)) || !str_cmp( ch->name, clan->leader ) || !str_cmp( ch->name, clan->number1 ) || !str_cmp( ch->name, clan->number2 ) ) ; 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 ( victim == ch ) { send_to_char( "Kick yourself out of your own clan?\n\r", ch ); return; } if ( victim->pcdata->clan != ch->pcdata->clan ) { send_to_char( "This player does not belong to your clan!\n\r", ch ); return; } if ( victim->speaking & LANG_CLAN ) victim->speaking = LANG_COMMON; REMOVE_BIT( victim->speaks, LANG_CLAN ); --clan->members; if ( !str_cmp( victim->name, ch->pcdata->clan->number1 ) ) { STRFREE( ch->pcdata->clan->number1 ); ch->pcdata->clan->number1 = STRALLOC( "" ); } if ( !str_cmp( victim->name, ch->pcdata->clan->number2 ) ) { STRFREE( ch->pcdata->clan->number2 ); ch->pcdata->clan->number2 = STRALLOC( "" ); } victim->pcdata->clan = NULL; STRFREE(victim->pcdata->clan_name); victim->pcdata->clan_name = STRALLOC( "" ); 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 ); for( d = first_descriptor; d; d = d->next ) { CHAR_DATA *vch; vch = d->character; if( d->connected == CON_PLAYING && vch != victim && !IS_NPC(vch) ) { if( !vch->pcdata->clan ) continue; if( (vch->pcdata->clan == clan) ) ch_printf( vch, "&BYou get word that &W%s&B has been outcast from the clan.&w\n\r", victim->name ); } } if ( clan->memberslist[0] != '\0' ) { char arg[MAX_STRING_LENGTH]; char memberslist[MAX_STRING_LENGTH]; char * members; members = str_alloc(clan->memberslist); strcpy(memberslist,""); while ( members[0] != '\0' ) { members = one_argument(members,arg); if (str_cmp(victim->name,arg) ) { arg[0] = UPPER(arg[0]); sprintf(buf, "%s %s",memberslist, arg); sprintf(memberslist,"%s",buf); } } STRFREE( clan->memberslist ); clan->memberslist = STRALLOC( memberslist ); } DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup(""); victim->pcdata->clan_rank = 0; save_clan( clan ); save_char_obj( victim ); /* clan gets saved when pfile is saved */ return; } void do_setclan( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH], arg3[MAX_INPUT_LENGTH]; CLAN_DATA *clan; int rank; if ( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); set_char_color( AT_WHITE, ch); if ( arg1[0] == '\0' ) { send_to_char( "Usage: setclan <clan> <field> <leader|number1|number2> <player>\n\r", ch ); send_to_char( "\n\rField being one of:\n\r", ch ); send_to_char( " leader number1 number2 enlistroom\n\r", ch ); send_to_char( " members storage funds\n\r", ch ); send_to_char( " rank wage \n\r", ch ); if ( get_trust( ch ) >= LEVEL_SUB_IMPLEM ) send_to_char( " name filename desc\n\r", ch ); if ( get_trust(ch) == MAX_LEVEL ) send_to_char( " memberslist\n\r", ch); return; } clan = get_clan( arg1 ); if ( !clan ) { send_to_char( "No such clan.\n\r", ch ); return; } if( !strcmp( arg2, "wage" ) ) { int wage; argument = one_argument( argument, arg3 ); if( arg3[0] == '\0' ) { send_to_char( "syntax: setclan <clan> wage <rank number> <wage>", ch ); return; } wage = atoi(argument); if ( wage >= 10000 ) { send_to_char( "wages must be less then 10000", ch); return; } rank = atoi( arg3 ); clan->ranks[rank].wage = wage; send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if( !strcmp( arg2, "rank" ) ) { argument = one_argument( argument, arg3 ); if( arg3[0] == '\0' ) { send_to_char( "syntax: setclan <clan> rank <rank number> <name>", ch ); return; } rank = atoi( arg3 ); if ( rank >= MAX_RANK ) return; if( clan->ranks[rank].name ); STRFREE( clan->ranks[rank].name ); clan->ranks[rank].name = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "leader" ) ) { STRFREE( clan->leader ); clan->leader = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "enlistroom" ) ) { clan->enlistroom = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "number1" ) ) { STRFREE( clan->number1 ); clan->number1 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "number2" ) ) { STRFREE( clan->number2 ); clan->number2 = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "members" ) ) { clan->members = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "funds" ) ) { clan->funds = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "storage" ) ) { clan->storeroom = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "jail" ) ) { clan->jail = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( get_trust( ch ) < LEVEL_SUB_IMPLEM ) { do_setclan( ch, "" ); return; } if ( !strcmp( arg2, "type" ) ) { if ( !str_cmp( argument, "crime" ) ) clan->clan_type = CLAN_CRIME; else if ( !str_cmp( argument, "crime family" ) ) clan->clan_type = CLAN_CRIME; else if ( !str_cmp( argument, "guild" ) ) clan->clan_type = CLAN_GUILD; else clan->clan_type = 0; send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "name" ) ) { if (strlen(argument) > 25 ) { send_to_char("Too Long, Must Be Under 18 Characters Long\n\r",ch); return; } STRFREE( clan->name ); clan->name = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( 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, "memberslist") ) { STRFREE( clan->memberslist ); clan->memberslist = STRALLOC( argument ); send_to_char( "Done.\n\r",ch); save_clan( clan ); } if ( !strcmp( arg2, "desc" ) ) { STRFREE( clan->description ); clan->description = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } do_setclan( ch, "" ); return; } void do_setplanet( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; PLANET_DATA *planet; 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: setplanet <planet> <field> [value]\n\r", ch ); send_to_char( "\n\rField being one of:\n\r", ch ); send_to_char( " base_value flags\n\r", ch ); send_to_char( " name filename starsystem governed_by\n\r", ch ); send_to_char( " x y z\n\r", ch ); return; } planet = get_planet( arg1 ); if ( !planet ) { send_to_char( "No such planet.\n\r", ch ); return; } if ( !strcmp( arg2, "name" ) ) { STRFREE( planet->name ); planet->name = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_planet( planet ); return; } if ( !strcmp( arg2, "governed_by" ) ) { CLAN_DATA *clan; clan = get_clan( argument ); if ( !strcmp( argument, "none" ) ) { planet->governed_by = NULL; send_to_char( "Done.\n\r", ch ); save_planet( planet ); return; } if ( clan ) { planet->governed_by = clan; send_to_char( "Done.\n\r", ch ); save_planet( planet ); } else send_to_char( "No such clan.\n\r", ch ); return; } if ( !strcmp( arg2, "x" ) ) { planet->x = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_planet( planet ); return; } if ( !strcmp( arg2, "y" ) ) { planet->y = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_planet( planet ); return; } if ( !strcmp( arg2, "z" ) ) { planet->z = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_planet( planet ); return; } if ( !strcmp( arg2, "starsystem" ) ) { SPACE_DATA *starsystem; if ((starsystem=planet->starsystem) != NULL) UNLINK(planet, starsystem->first_planet, starsystem->last_planet, next_in_system, prev_in_system); if ( (planet->starsystem = starsystem_from_name(argument)) ) { starsystem = planet->starsystem; LINK(planet, starsystem->first_planet, starsystem->last_planet, next_in_system, prev_in_system); send_to_char( "Done.\n\r", ch ); } else send_to_char( "No such starsystem.\n\r", ch ); save_planet( planet ); return; } if ( !strcmp( arg2, "filename" ) ) { if ( planet->filename && planet->filename[0] != '\0' ) DISPOSE( planet->filename ); planet->filename = str_dup( argument ); send_to_char( "Done.\n\r", ch ); save_planet( planet ); write_planet_list( ); return; } if ( !strcmp( arg2, "base_value" ) ) { planet->base_value = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_planet( planet ); return; } if ( !strcmp( arg2, "flags" ) ) { char farg[MAX_INPUT_LENGTH]; argument = one_argument( argument, farg); if ( farg[0] == '\0' ) { send_to_char( "Possible flags: nocapture neutral uninhabited\n\r", ch ); return; } for ( ; farg[0] != '\0' ; argument = one_argument( argument, farg) ) { if ( !str_cmp( farg, "nocapture" ) ) TOGGLE_BIT( planet->flags, PLANET_NOCAPTURE); else if ( !str_cmp( farg, "neutral" ) ) { TOGGLE_BIT( planet->flags, PLANET_NEUTRAL ); planet->governed_by = NULL; } else if ( !str_cmp( farg, "uninhabited" ) ) { TOGGLE_BIT( planet->flags, PLANET_UNINHABITED ); planet->governed_by = NULL; } else if ( !str_cmp( farg, "uninhabited" ) ) { TOGGLE_BIT( planet->flags, PLANET_UNINHABITED ); planet->governed_by = NULL; } else if ( !str_cmp( farg, "shield" ) ) { TOGGLE_BIT( planet->flags,PLANET_PSHIELD ); } else ch_printf( ch , "No such flag: %s\n\r" , farg ); } send_to_char( "Done.\n\r", ch ); save_planet( planet ); return; } do_setplanet( ch, "" ); return; } void do_showclan( CHAR_DATA *ch, char *argument ) { CLAN_DATA *clan; int counter; 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.\n\r", ch ); return; } ch_printf( ch, "&G&W"); ch_printf( ch, "%s : %s\n\rFilename: %s\n\r", clan->clan_type == CLAN_CRIME ? "Crime Family " : clan->clan_type == CLAN_GUILD ? "Guild " : "Organization ", clan->name, clan->filename); ch_printf( ch, "&G&W"); ch_printf( ch, "Description: %s\n\r", clan->description ); ch_printf( ch, "Leader: %-10.10s Number1: %-10.10s Number2: %-10.10s\n\r", clan->leader, clan->number1, clan->number2 ); ch_printf( ch, "Type: %d\n\r", clan->clan_type ); ch_printf( ch, "Members: %-3.0d Spacecraft: %-3.0d\n\r", clan->members, clan->spacecraft ); ch_printf( ch, "Jail: %5d\n\r", clan->jail); ch_printf( ch, "Funds: %-8.0ld Enlist Room: %ld\n\r", clan->funds, clan->enlistroom ); if( IS_IMMORTAL(ch) || ch->pcdata->clan == clan ) { ch_printf( ch, "Members list:\n\r %s\n\r", clan->memberslist ); ch_printf( ch, "Ranks:\n\r&B------&G&W\n\r"); for( counter = 0 ; counter <= ( MAX_RANK - 1 ) ; counter++ ) ch_printf( ch, "&WRank:&G %s &WWage:&G %d\n\r", clan->ranks[counter].name, clan->ranks[counter].wage ); } return; } void do_showplanet( CHAR_DATA *ch, char *argument ) { PLANET_DATA *planet; AREA_DATA *area; int num_guards = 0; if ( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } if ( argument[0] == '\0' ) { send_to_char( "Usage: showplanet <planet>\n\r", ch ); return; } planet = get_planet( argument ); if ( !planet ) { send_to_char( "No such planet.\n\r", ch ); return; } ch_printf( ch, "%s\n\rFilename: %s\n\r", planet->name, planet->filename); ch_printf( ch, "Governed By:%s\n\r", planet->governed_by ? planet->governed_by->name : ""); ch_printf( ch, "Worth: %-10ld/%-10ld\n\r", get_taxes(planet),planet->base_value); ch_printf( ch, "Pop Support: %.1f\n\r", planet->pop_support); ch_printf( ch, "Population: %d\n\r", planet->population); ch_printf( ch, "Starsystem: %s\n\r",planet->starsystem ? planet->starsystem->name : "" ); ch_printf( ch, "Controls: %d\n\r",planet->controls ? planet->controls : 0 ); ch_printf( ch, "&WBarracks: &G%d\n\r", planet->barracks ); ch_printf( ch, "&WPatrols: &G%d&W/%d\n\r", num_guards , planet->barracks*5 ); ch_printf( ch, "X: %d\tY: %d\tZ: %d\n\r", planet->x ? planet->x : 0, planet->y ? planet->y : 0, planet->z ? planet->z : 0); ch_printf( ch, "Areas: "); for ( area = planet->first_area ; area ; area = area->next_on_planet ) ch_printf( ch , "%s, ", area->filename ); ch_printf( ch, "\n\r" ); return; } void do_makeclan( CHAR_DATA *ch, char *argument ) { char filename[256]; CLAN_DATA *clan; bool found; int counter; if ( !argument || argument[0] == '\0' ) { send_to_char( "Usage: makeclan <clan name>\n\r", ch ); return; } if (strlen(argument) > 25 ) { send_to_char("Too Long, Must Be Under 18 Characters Long\n\r",ch); return; } found = FALSE; sprintf( filename, "%s%s", CLAN_DIR, strlower(argument) ); CREATE( clan, CLAN_DATA, 1 ); LINK( clan, first_clan, last_clan, next, prev ); clan->name = STRALLOC( argument ); clan->description = STRALLOC( "" ); clan->leader = STRALLOC( "" ); clan->atwar = STRALLOC( "" ); clan->memberslist = STRALLOC( "" ); clan->number1 = STRALLOC( "" ); clan->number2 = STRALLOC( "" ); for( counter = 0 ; counter <= ( MAX_RANK - 1 ) ; counter++ ) { clan->ranks[counter].name = STRALLOC( "" ); clan->ranks[counter].wage = 0; } } void do_makeplanet( CHAR_DATA *ch, char *argument ) { char filename[256]; PLANET_DATA *planet; bool found; if ( !argument || argument[0] == '\0' ) { send_to_char( "Usage: makeplanet <planet name>\n\r", ch ); return; } found = FALSE; sprintf( filename, "%s%s", PLANET_DIR, strlower(argument) ); CREATE( planet, PLANET_DATA, 1 ); LINK( planet, first_planet, last_planet, next, prev ); planet->governed_by = NULL; planet->next_in_system = NULL; planet->prev_in_system = NULL; planet->starsystem = NULL ; planet->first_area = NULL; planet->last_area = NULL; planet->first_guard = NULL; planet->last_guard = NULL; planet->name = STRALLOC( argument ); planet->flags = 0; } void do_clans( CHAR_DATA *ch, char *argument ) { CLAN_DATA *clan; clan = get_clan( argument ); if ( argument[0] == '\0' ) { PLANET_DATA *planet; int count = 0; int small_count = 0; int pCount = 0; int support; long revenue; if ( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } for ( clan = first_clan; clan; clan = clan->next ) { if ( clan->clan_type == CLAN_CRIME || clan->clan_type == CLAN_GUILD ) continue; pCount = 0; support = 0; revenue = 0; for ( planet = first_planet ; planet ; planet = planet->next ) { if ( clan == planet->governed_by ) { support += planet->pop_support; pCount++; revenue += get_taxes(planet); } } if ( pCount > 1 ) support /= pCount; ch_printf( ch, "&CC&clan &CN&came&C: &W%-30.30s &CL&ceader&C: &W%-10.10s &CM&cembers&C: &W%-2d\n\r", clan->name,clan->leader,clan->members); ch_printf( ch , "\n\r" ); count++; } for ( clan = first_clan; clan; clan = clan->next ) { if ( clan->clan_type != CLAN_CRIME && clan->clan_type != CLAN_GUILD ) continue; else small_count++; if (small_count == 1) ch_printf( ch, "&CL&cesser &CK&cnown &CC&clans &CL&ceaders &CM&cembers\n\r"); ch_printf( ch, "&W%-30s &W%-20s &W%-2d\n\r", clan->name, clan->leader, clan->members ); count++; } if ( !count ) { set_char_color( AT_BLOOD, ch); send_to_char( "There are no organizations currently formed.\n\r", ch ); } set_char_color( AT_WHITE, ch ); send_to_char( "\n\rSee also: Planets\n\r", ch ); } else if ( clan != NULL ) { PLANET_DATA *planet; int pCount = 0; send_to_char("&W[&R^zAccessing File...&G^x&G&W]\n\r",ch); send_to_char("&W[&R^zBegining Printout&G^x&G&W]\n\r",ch); ch_printf( ch, "&W%s : %s&W\n\r", clan->clan_type == CLAN_CRIME ? "Crime Family " : clan->clan_type == CLAN_GUILD ? "Guild " : "Organization ", clan->name); ch_printf( ch, "Description: %s\n\r", clan->description ); ch_printf( ch, "Members: %-3.0d Spacecraft: %-3.0d\n\r", clan->members, clan->spacecraft ); for ( planet = first_planet ; planet ; planet = planet->next ) { if ( clan == planet->governed_by ) { if ( pCount == 0 ) { ch_printf(ch,"| Planets Currently Governed by %-20.20s: |\n\r" "+-----------------------------------------------------+\n\r",clan->name); } pCount++; ch_printf(ch, "| Name: %-45.45s |\n\r", planet->name ); } } if ( pCount != 0 ) { send_to_char("+-----------------------------------------------------+\n\r",ch); } else { send_to_char("+-----------------------------------------------------+\n\r",ch); send_to_char("| This clan currently does not govern any planets |\n\r",ch); send_to_char("+-----------------------------------------------------+\n\r",ch); } send_to_char("&W[&R^zEnd Of File&G^x&G&W]\n\r",ch); return; } else if ( clan == NULL ) { send_to_char("Syntax:\n\r" " clans [by it self will list all the clans]\n\r" " clans (clan name) [ will list info about that clan ]\n\r",ch); return; } } void do_planets( CHAR_DATA *ch, char *argument ) { PLANET_DATA *planet; int count = 0; AREA_DATA *area; set_char_color( AT_WHITE, ch ); for ( planet = first_planet; planet; planet = planet->next ) { if ( IS_SET(planet->flags, PLANET_NEUTRAL ) ) { ch_printf( ch, "&CP&clanet: &R%-15s &GN&geutral &GP&glanet\n\r", planet->name ); } else if ( IS_SET(planet->flags, PLANET_UNINHABITED ) ) { ch_printf( ch, "&WPlanet: &G%-15s &RUninhabited\n\r", planet->name); } else { ch_printf( ch, "&CP&clanet: &R%-15s &CG&coverned &CB&cy: &G%s %s\n\r", planet->name , planet->governed_by ? planet->governed_by->name : "", IS_SET(planet->flags, PLANET_NOCAPTURE ) ? "(permanent)" : "" ); ch_printf( ch, "&CV&calue: &R%-10ld&C/&R%-10d ", get_taxes(planet) , planet->base_value); ch_printf( ch, "&CP&copulation: &R%-5d &CP&cop &CS&cupport: &R%.1f\n\r", planet->population , planet->pop_support ); } if ( IS_IMMORTAL(ch) ) { ch_printf( ch, "&CA&creas: &G"); for ( area = planet->first_area ; area ; area = area->next_on_planet ) ch_printf( ch , "%s, ", area->filename ); ch_printf( ch, "\n\r" ); } ch_printf( ch, "\n\r" ); count++; } if ( !count ) { set_char_color( AT_BLOOD, ch); send_to_char( "&CT&chere &Ca&cre &Cn&co &Cp&clanets &Cc¤tly &Cf&cormed.\n\r", ch ); } } 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; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); 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 ( (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) && get_timer(victim, TIMER_SHOVEDRAG) <= 0) { 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 ( IS_NPC(victim) ) { send_to_char("You can only shove player characters.\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; } chance = 50; /* Add 3 points to chance for every str point above 15, subtract for below 15 */ chance += ((get_curr_str(ch) - 15) * 3); chance += (ch->top_level - victim->top_level); /* 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; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); 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) ) { send_to_char("You can only drag player characters.\n\r", ch); return; } if ( victim->fighting ) { send_to_char( "You try, but can't get close enough.\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) && get_timer( victim, TIMER_SHOVEDRAG ) <= 0) { 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 (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; } chance = 50; /* 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_enlist( CHAR_DATA *ch, char *argument ) { char buf[MAX_INPUT_LENGTH]; CLAN_DATA *clan; DESCRIPTOR_DATA *d; if ( IS_NPC(ch) || !ch->pcdata ) { send_to_char( "You can't do that.\n\r", ch ); return; } if ( ch->pcdata->clan ) { ch_printf( ch , "You will have to resign from %s before you can join a new organization.\n\r", ch->pcdata->clan->name ); return; } if ( !xIS_SET( ch->in_room->room_flags , ROOM_RECRUIT ) ) { send_to_char( "You don't seem to be in a recruitment office.\n\r", ch ); return; } for ( clan = first_clan; clan; clan = clan->next ) { if ( ch->in_room->vnum == clan->enlistroom ) { SET_BIT( ch->speaks, LANG_CLAN ); ++clan->members; sprintf( buf, "%s %s", clan->memberslist, ch->name ); STRFREE( clan->memberslist ); clan->memberslist = STRALLOC( buf ); ch->pcdata->clan_rank = 0; STRFREE( ch->pcdata->clan_name ); ch->pcdata->clan_name = QUICKLINK( clan->name ); ch->pcdata->clan = clan; ch_printf( ch, "Welcome to %s.\n\r", clan->name ); save_clan ( clan ); for( d = first_descriptor; d; d = d->next ) { CHAR_DATA *vch; CLAN_DATA *clan; vch = d->character; if( d->connected == CON_PLAYING && !IS_NPC(vch) ) { if( !vch->pcdata->clan ) continue; if( vch->pcdata->clan == clan ) { ch_printf( vch, "&BYou get word that &W%s&B has signed up for %s.&w\n\r", ch->name, clan->name ); continue; } } } return; } } send_to_char( "They don't seem to be recruiting right now.\n\r", ch ); return; } void do_resign( CHAR_DATA *ch, char *argument ) { DESCRIPTOR_DATA *d; CLAN_DATA *clan; char buf[MAX_STRING_LENGTH]; if ( IS_NPC(ch) || !ch->pcdata ) { send_to_char( "You can't do that.\n\r", ch ); return; } clan = ch->pcdata->clan; if ( clan == NULL ) { send_to_char( "You have to join an organization before you can quit it.\n\r", ch ); return; } if ( ch->speaking & LANG_CLAN ) ch->speaking = LANG_COMMON; REMOVE_BIT( ch->speaks, LANG_CLAN ); --clan->members; if ( !str_cmp( ch->name, ch->pcdata->clan->leader ) ) { STRFREE( ch->pcdata->clan->leader ); ch->pcdata->clan->leader = STRALLOC( "" ); } if ( !str_cmp( ch->name, ch->pcdata->clan->number1 ) ) { STRFREE( ch->pcdata->clan->number1 ); ch->pcdata->clan->number1 = STRALLOC( "" ); } if ( !str_cmp( ch->name, ch->pcdata->clan->number2 ) ) { STRFREE( ch->pcdata->clan->number2 ); ch->pcdata->clan->number2 = STRALLOC( "" ); } ch->pcdata->clan = NULL; STRFREE(ch->pcdata->clan_name); ch->pcdata->clan_name = STRALLOC( "" ); ch->pcdata->clan_rank = 0; act( AT_MAGIC, "You resign your position in $t", ch, clan->name, NULL , TO_CHAR ); for( d = first_descriptor; d; d = d->next ) { CHAR_DATA *vch; vch = d->character; if( d->connected == CON_PLAYING && vch != ch && !IS_NPC(vch) ) { if( !vch->pcdata->clan ) continue; if( vch->pcdata->clan == clan ) ch_printf( vch, "&BYou get word that &W%s&B has resigned %s position in %s.&w\n\r", ch->full_name, his_her[ch->sex], clan->name ); } } DISPOSE( ch->pcdata->bestowments ); ch->pcdata->bestowments = str_dup(""); if ( clan->memberslist[0] != '\0' ) { char arg[MAX_STRING_LENGTH]; char memberslist[MAX_STRING_LENGTH]; char * members; members = str_alloc(clan->memberslist); strcpy(memberslist,""); while ( members[0] != '\0' ) { members = one_argument(members,arg); if (str_cmp(ch->name,arg) ) { arg[0] = UPPER(arg[0]); sprintf(buf, "%s %s",memberslist, arg); sprintf(memberslist,"%s",buf); } } STRFREE( clan->memberslist ); clan->memberslist = STRALLOC( memberslist ); } save_clan( clan ); save_char_obj( ch ); /* clan gets saved when pfile is saved */ return; } void do_clan_withdraw( CHAR_DATA *ch, char *argument ) { CLAN_DATA *clan; long amount; if ( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "You don't seem to belong to an organization to withdraw funds from...\n\r", ch ); return; } if (!ch->in_room || !xIS_SET(ch->in_room->room_flags, ROOM_BANK) ) { send_to_char( "You must be in a bank to do that!\n\r", ch ); return; } if ( (ch->pcdata && ch->pcdata->bestowments && is_name("withdraw", ch->pcdata->bestowments)) || !str_cmp( ch->name, ch->pcdata->clan->leader )) ; else { send_to_char( "&RYour organization hasn't seen fit to bestow you with that ability." ,ch ); return; } clan = ch->pcdata->clan; amount = atoi( argument ); if ( !amount ) { send_to_char( "How much would you like to withdraw?\n\r", ch ); return; } if ( amount > clan->funds ) { ch_printf( ch, "%s doesn't have that much!\n\r", clan->name ); return; } if ( amount < 0 ) { ch_printf( ch, "Nice try...\n\r" ); return; } ch_printf( ch, "You withdraw %ld credits from %s's funds.\n\r", amount, clan->name ); clan->funds -= amount; ch->gold += amount; save_clan ( clan ); } void do_clan_donate( CHAR_DATA *ch, char *argument ) { CLAN_DATA *clan; long amount; if ( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "You don't seem to belong to an organization to donate to...\n\r", ch ); return; } if (!ch->in_room || !xIS_SET(ch->in_room->room_flags, ROOM_BANK) ) { send_to_char( "You must be in a bank to do that!\n\r", ch ); return; } clan = ch->pcdata->clan; amount = atoi( argument ); if ( !amount ) { send_to_char( "How much would you like to donate?\n\r", ch ); return; } if ( amount < 0 ) { ch_printf( ch, "Nice try...\n\r" ); return; } if ( amount > ch->gold ) { send_to_char( "You don't have that much!\n\r", ch ); return; } ch_printf( ch, "You donate %ld credits to %s's funds.\n\r", amount, clan->name ); clan->funds += amount; ch->gold -= amount; save_clan ( clan ); } void do_appoint ( CHAR_DATA *ch , char *argument ) { char arg[MAX_STRING_LENGTH], arg2[MAX_STRING_LENGTH]; CHAR_DATA *victim; CLAN_DATA *clan; int counter, rank; char type[MAX_STRING_LENGTH]; if( IS_NPC(ch) ) { send_to_char( "NPCs cant be in clans.\n\r", ch ); return; } if( !ch->pcdata->clan ) { send_to_char( "Join a clan first.\n\r", ch ); return; } if( ch->pcdata->clan_rank <= 2 ) { send_to_char( "Your not high enough of a rank to demote anyone.\n\r", ch ); return; } argument = one_argument( argument, type ); if( type[0] == '\0' ) { send_to_char( "Rank or Position(first/second)?\n\r", ch ); return; } if ( !str_cmp("rank", type ) ) { if( IS_NPC(ch) ) { send_to_char( "NPCs cant be in clans.\n\r", ch ); return; } if( !ch->pcdata->clan ) { send_to_char( "Join a clan first.\n\r", ch ); return; } if( ch->pcdata->clan_rank >= 1 || !str_cmp(ch->pcdata->clan->leader,ch->name)); else { send_to_char( "Your not high enough of a rank to promote anyone.\n\r", ch ); return; } argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if( arg[0] == '\0' ) { send_to_char( "Promote who?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That person is not here.\n\r", ch); return; } if( IS_NPC(victim) ) { do_say(victim,"Oh my god, your promoting me? When did I join?"); return; } if( victim == ch ) { send_to_char( "You can't promote yourself.\n\r", ch); return; } if( ( clan = victim->pcdata->clan ) == NULL ) { send_to_char( "They're not in your clan.\n\r", ch ); return; } if( clan != ch->pcdata->clan ) { send_to_char( "They're not in your clan.\n\r", ch); return; } if( arg2[0] == '\0' ) { send_to_char( "What rank should they be promoted to:\n\r", ch); for( counter = 0 ; counter < ch->pcdata->clan_rank ; counter++ ) ch_printf( ch, " %d - %s wage: %d\n\r", counter + 1, clan->ranks[counter].name, clan->ranks[counter].wage ); ch_printf( ch, "Their current rank is %s.\n\r", clan->ranks[victim->pcdata->clan_rank].name ); return; } if( (ch->pcdata->clan_rank - 1) == victim->pcdata->clan_rank ) { send_to_char( "You cannot promote them any further.\n\r", ch ); return; } rank = atoi( arg2) - 1; if( rank > ( MAX_RANK - 1 ) || rank < 0 ) { send_to_char( "Invalid rank.\n\r", ch ); return; } if( rank == victim->pcdata->clan_rank ) { send_to_char( "They're already at that rank!\n\r", ch ); return; } if( rank < victim->pcdata->clan_rank ) { send_to_char( "To lower their rank demote them.\n\r", ch); return; } victim->pcdata->clan_rank = rank; ch_printf( victim, "You have been promoted to %s.\n\r", clan->ranks[rank].name ); send_to_char( "Done.\n\r", ch); return; } else if ( !str_cmp("position", type ) ) { char name[MAX_STRING_LENGTH]; argument = one_argument( argument, name ); if ( IS_NPC( ch ) || !ch->pcdata ) return; if ( !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } if ( str_cmp( ch->name, ch->pcdata->clan->leader ) ) { send_to_char( "Only your leader can do that!\n\r", ch ); return; } if ( argument[0] == '\0' ) { send_to_char( "Useage: appoint <name> < first | second >\n\r", ch ); return; } if ( !str_cmp( argument , "first" ) ) { if ( ch->pcdata->clan->number1 && str_cmp( ch->pcdata->clan->number1 , "" ) ) { send_to_char( "You already have someone in that position ... demote them first.\n\r", ch ); return; } STRFREE( ch->pcdata->clan->number1 ); ch->pcdata->clan->number1 = STRALLOC( name ); } else if ( !str_cmp( argument , "second" ) ) { if ( ch->pcdata->clan->number2 && str_cmp( ch->pcdata->clan->number2 , "" )) { send_to_char( "You already have someone in that position ... demote them first.\n\r", ch ); return; } STRFREE( ch->pcdata->clan->number2 ); ch->pcdata->clan->number2 = STRALLOC( name ); } else do_appoint( ch , "" ); save_clan ( ch->pcdata->clan ); } else { send_to_char("For Rank:\n\r\tSyntax: Appoint Rank <name> <rank#>\n\r",ch); send_to_char("For Position\n\r\tSyntax: Appoint Position <name>\n\r",ch); return; } } void do_demote ( CHAR_DATA *ch , char *argument ) { char arg[MAX_STRING_LENGTH], arg2[MAX_STRING_LENGTH]; CHAR_DATA *victim; CLAN_DATA *clan; int counter, rank; char type[MAX_STRING_LENGTH]; if( IS_NPC(ch) ) { send_to_char( "NPCs cant be in clans.\n\r", ch ); return; } if( !ch->pcdata->clan ) { send_to_char( "Join a clan first.\n\r", ch ); return; } if( ch->pcdata->clan_rank <= 1 ) { send_to_char( "Your not high enough of a rank to demote anyone.\n\r", ch ); return; } argument = one_argument( argument, type ); if( type[0] == '\0' ) { send_to_char( "Rank or Position(first/second)?\n\r", ch ); return; } if ( !str_cmp("rank", type ) ) { argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if( arg[0] == '\0' ) { send_to_char( "Demote who?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That person is not here.\n\r", ch ); return; } if( victim == ch ) { send_to_char( "You can't demote yourself.\n\r", ch ); return; } if( ( clan = victim->pcdata->clan ) == NULL ) { send_to_char( "They're not in your clan.\n\r", ch ); return; } if( clan != ch->pcdata->clan ) { send_to_char( "They're not in your clan.\n\r", ch); return; } if( arg2[0] == '\0' ) { send_to_char( "What rank should they be demoted to:\n\r", ch); for( counter = 0 ; counter <= ch->pcdata->clan_rank ; counter++ ) ch_printf( ch, " %d - %s wage: %d\n\r", counter + 1, clan->ranks[counter].name, clan->ranks[counter].wage ); ch_printf( ch, "Their current rank is %s.\n\r", clan->ranks[victim->pcdata->clan_rank].name ); return; } if( ch->pcdata->clan_rank >= victim->pcdata->clan_rank ) { send_to_char( "You cannot demote them.\n\r", ch ); return; } if( victim->pcdata->clan_rank == 0 ) { send_to_char( "You cannot demote them any further.\n\r", ch ); return; } rank = atoi( arg2) - 1; if( rank > ( MAX_RANK - 1 ) || rank < 0 ) { send_to_char( "Invalid rank.\n\r", ch ); return; } if( rank == victim->pcdata->clan_rank ) { send_to_char( "They're already at that rank!\n\r", ch ); return; } if( rank > victim->pcdata->clan_rank ) { send_to_char( "To raise their rank promote them.\n\r", ch); return; } victim->pcdata->clan_rank = rank; ch_printf( victim, "You have been demoted to %s.\n\r", clan->ranks[rank].name ); send_to_char( "Done.\n\r", ch); return; } else if ( !str_cmp("position", type ) ) { if ( IS_NPC( ch ) || !ch->pcdata ) return; if ( !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } if ( str_cmp( ch->name, ch->pcdata->clan->leader ) ) { send_to_char( "Only your leader can do that!\n\r", ch ); return; } if ( argument[0] == '\0' ) { send_to_char( "Demote who?\n\r", ch ); return; } if ( !str_cmp( argument , ch->pcdata->clan->number1 ) ) { send_to_char( "Player Demoted!", ch ); STRFREE( ch->pcdata->clan->number1 ); ch->pcdata->clan->number1 = STRALLOC( "" ); } else if ( !str_cmp( argument , ch->pcdata->clan->number2 ) ) { send_to_char( "Player Demoted!", ch ); STRFREE( ch->pcdata->clan->number2 ); ch->pcdata->clan->number2 = STRALLOC( "" ); } else { send_to_char( "They seem to have been demoted already.\n\r", ch ); return; } save_clan ( ch->pcdata->clan ); } else { send_to_char("For Rank:\n\r\tSyntax: Demote Rank <name> <rank#>\n\r",ch); send_to_char("For Position\n\r\tSyntax: Demote Position <name>\n\r",ch); return; } } void do_capture ( CHAR_DATA *ch , char *argument ) { CLAN_DATA *clan; PLANET_DATA *planet; PLANET_DATA *cPlanet; float support = 0.0; int pCount = 0; char buf[MAX_STRING_LENGTH]; if ( !ch->in_room || !ch->in_room->area) return; if ( IS_NPC(ch) || !ch->pcdata ) { send_to_char ( "huh?\n\r" , ch ); return; } if ( !ch->pcdata->clan ) { send_to_char ( "You need to be a member of an organization to do that!\n\r" , ch ); return; } clan = ch->pcdata->clan; if ( clan->clan_type == CLAN_CRIME ) { send_to_char ( "Crime fimilies aren't in the business of controlling worlds.\n\r" , ch ); return; } if ( clan->clan_type == CLAN_GUILD ) { send_to_char ( "Your organization serves a much greater purpose.\n\r" , ch ); return; } if ( ( planet = ch->in_room->area->planet ) == NULL ) { send_to_char ( "You must be on a planet to capture it.\n\r" , ch ); return; } if ( clan == planet->governed_by ) { send_to_char ( "Your organization already controls this planet.\n\r" , ch ); return; } if ( planet->starsystem ) { SHIP_DATA *ship; CLAN_DATA *sClan; for ( ship = planet->starsystem->first_ship ; ship ; ship = ship->next_in_starsystem ) { if (!IS_SET(ship->flags,SHIP_MOB) ) continue; sClan = get_clan(ship->owner); if ( !sClan ) continue; if ( sClan == planet->governed_by ) { send_to_char ( "A planet cannot be captured while protected by orbiting spacecraft.\n\r" , ch ); return; } } } if ( IS_SET( planet->flags, PLANET_NOCAPTURE ) ) { send_to_char ( "This planet cannot be captured.\n\r" , ch); return; } if ( IS_SET( planet->flags, PLANET_NEUTRAL ) ) { send_to_char ( "This planet canot be captured.\n\r" , ch); return; } if ( planet->pop_support > 0 ) { send_to_char ( "The population is not in favour of changing leaders right now.\n\r" , ch ); return; } for ( cPlanet = first_planet ; cPlanet ; cPlanet = cPlanet->next ) if ( clan == cPlanet->governed_by ) { pCount++; support += cPlanet->pop_support; } if ( support < 0 ) { send_to_char ( "There is not enough popular support for your organization!\n\rTry improving loyalty on the planets that you already control.\n\r" , ch ); return; } planet->governed_by = clan; if ( planet->starsystem ) { planet->starsystem->governed_by = clan; planet->starsystem->controls = 0; planet->starsystem->fcz = 0; planet->starsystem->soldiers = 0; save_starsystem(planet->starsystem); } planet->pop_support = 50; sprintf(buf, "%s is now ours!",planet->name/*,clan->name*/); do_chat(ch,buf); save_planet( planet ); return; } void do_empower ( CHAR_DATA *ch , char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[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("empower", ch->pcdata->bestowments)) || !str_cmp( ch->name, clan->leader ) ) ; else { send_to_char( "You clan hasn't seen fit to bestow that ability to you!\n\r", ch ); return; } argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if ( arg[0] == '\0' ) { send_to_char( "Empower whom to do what?\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( "Nice try.\n\r", ch ); return; } if ( victim->pcdata->clan != ch->pcdata->clan ) { send_to_char( "This player does not belong to your clan!\n\r", ch ); return; } if (!victim->pcdata->bestowments) victim->pcdata->bestowments = str_dup(""); if ( arg2[0] == '\0' || !str_cmp( arg2, "list" ) ) { ch_printf( ch, "Current bestowed commands on %s: %s.\n\r", victim->name, victim->pcdata->bestowments ); return; } if ( !str_cmp( arg2, "none" ) ) { DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup(""); ch_printf( ch, "Bestowments removed from %s.\n\r", victim->name ); ch_printf( victim, "%s has removed your bestowed clan abilities.\n\r", ch->name ); return; } else if ( !str_cmp( arg2, "pilot" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to fly clan ships.\n\r", ch->name ); send_to_char( "Ok, they now have the ability to fly clan ships.\n\r", ch ); } else if ( !str_cmp( arg2, "withdraw" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to withdraw clan funds.\n\r", ch->name ); send_to_char( "Ok, they now have the ablitity to withdraw clan funds.\n\r", ch ); } else if ( !str_cmp( arg2, "clanbuyship" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to buy clan ships.\n\r", ch->name ); send_to_char( "Ok, they now have the ablitity to use clanbuyship.\n\r", ch ); } else if ( !str_cmp( arg2, "induct" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to induct new members.\n\r", ch->name ); send_to_char( "Ok, they now have the ablitity to induct new members.\n\r", ch ); } else if ( !str_cmp( arg2, "war" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to declare war on other clans.\n\r", ch->name ); send_to_char( "Ok, they now have the ablitity to declare war on other clans.\n\r", ch ); } else if( !str_cmp( arg2, "sellclanship" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to sell clan ships.\n\r", ch->name ); send_to_char( "Ok, they now have the ablitity to sell clan ships.\n\r", ch ); } else if( !str_cmp( arg2, "setsystemcode" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to set starsystem codes.\n\r", ch->name ); send_to_char( "Ok, they now have the ability to set starsystem codes.\n\r", ch ); } else if( !str_cmp( arg2, "alertstatus" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to change starsystem alert status.\n\r", ch->name ); send_to_char( "Ok, they now have the ability to change starsystem alert status.\n\r", ch ); } else if ( !str_cmp( arg2, "psheild" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to toggle the planetary shield.\n\r", ch->name ); send_to_char( "Ok, they now have the ability to toggle the planetary shield.\n\r",ch); } else if ( !str_cmp( arg2, "empower" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to empower members with power.\n\r", ch->name ); send_to_char( "Ok, they now have the ability to empower members with power.\n\r",ch); } else if ( !str_cmp( arg2, "setcode" ) ) { sprintf( buf, "%s %s", victim->pcdata->bestowments, arg2 ); DISPOSE( victim->pcdata->bestowments ); victim->pcdata->bestowments = str_dup( buf ); ch_printf( victim, "%s has given you permission to set the planetary code.\n\r", ch->name ); send_to_char( "Ok, they now have the ability to set the planetary code.\n\r",ch); } else { send_to_char( "Currently you may empower members with only the following:\n\r\n\r", ch ); send_to_char( " pilot: ability to fly clan ships\n\r", ch ); send_to_char( " withdraw: ability to withdraw clan funds\n\r", ch ); send_to_char( " clanbuyship: ability to buy clan ships\n\r", ch ); send_to_char( " clansellship: ability to sell clan ships\n\r", ch ); send_to_char( " induct: ability to induct new members\n\r", ch ); send_to_char( " war: ability to declare war on onther clans\n\r", ch ); send_to_char( " setsystemcode: ability to set starsystem codes\n\r", ch ); send_to_char( " alertstatus: ability to change starsystem alert status\n\r", ch ); send_to_char( " pshield: ability to change starsystem alert status\n\r", ch ); send_to_char( " empower: ability to empower members\n\r", ch ); send_to_char( " setcode: ability to set the planet code\n\r", ch ); send_to_char( " none: removes bestowed abilities\n\r", ch ); } save_char_obj( victim ); /* clan gets saved when pfile is saved */ return; } long get_taxes( PLANET_DATA *planet ) { long gain; gain = planet->base_value; gain += planet->base_value*planet->pop_support/100; gain += UMAX(0, planet->pop_support/10 * planet->population); return gain; } void do_myclan( CHAR_DATA *ch, char *argument ) { CLAN_DATA *clan; int counter; char listmembers[MAX_STRING_LENGTH]; if ( IS_NPC( ch ) ) { send_to_char( "Huh?\n\r", ch ); return; } if ( !ch->pcdata || !ch->pcdata->clan ) { send_to_char( "You arn't in a clan\n\r", ch); return; } clan = ch->pcdata->clan; if ( !clan ) { send_to_char( "No such clan.\n\r", ch ); return; } listmembers[0] = '\0'; if ( clan->memberslist[0] != '\0' ) { char arg[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; char memberslist[MAX_STRING_LENGTH]; char * members; int x,count; members = str_alloc(clan->memberslist); strcpy(memberslist,""); count = 1; while ( members[0] != '\0' ) { members = one_argument(members,arg); if ( (strlen(memberslist)+(strlen(arg)+1)) > 60 ) { for( x = strlen(memberslist) ; x < 60 ; x++) { strcat(memberslist, " "); } if ( strlen(memberslist) == 60 ) { sprintf(buf,"%s %s&B|\n\r|&G&W ",listmembers ,memberslist); sprintf(listmembers,"%s", buf); strcpy(memberslist,""); } } arg[0] = UPPER(arg[0]); if ( count == 1 ) sprintf(buf, "%s", arg); else sprintf(buf, "%s %s",memberslist, arg); sprintf(memberslist,"%s",buf); count++; } for( x = strlen(memberslist) ; x < 60 ; x++) { strcat(memberslist, " "); } if ( strlen(memberslist) == 60 ) { sprintf(buf,"%s %s&B|\n\r",listmembers ,memberslist); sprintf(listmembers,"%s", buf); strcpy(memberslist,""); } } ch_printf( ch, "&P+&B--------------------------------------------------------------&P+&B\n\r"); ch_printf( ch, "&B| &BL&beadership &B|\n\r"); ch_printf( ch, "&B| &PL&peader: &R%-10.10s&G&W &PF&pirst: &R%-10.10s &PS&pecond: &R%-10.10s &B|\n\r", clan->leader,clan->number1,clan->number2); ch_printf( ch, "&B| &PN&pumber &Po&pf &PM&pembers&P: &R%-3d &PF&punds&P: &R%-20ld &B|\n\r", clan->members,clan->funds ); ch_printf( ch, "&B| &PD&pescription&P: &R%-47.47s &B|\n\r", clan->description ); ch_printf( ch, "&B| &PA&ptwar &Pw&pith&P: %-48.48s &B|\n\r", clan->atwar ); ch_printf( ch, "&B| &PY&pour &PC&plan &PR&pank&P: &R%-2d &P-&R %-20.20s &P(&B$&R%-5d&P) &B|\n\r", ch->pcdata->clan_rank , clan->ranks[ch->pcdata->clan_rank].name, clan->ranks[ch->pcdata->clan_rank].wage); if ( !str_cmp( ch->name, clan->leader ) || !str_cmp( ch->name, clan->number1 ) || !str_cmp( ch->name, clan->number2 ) ) { for( counter = 0 ; counter <= ( MAX_RANK - 1 ) ; counter++ ) { ch_printf( ch, "&B| &PR&pank&P:&R %-20.20s &PW&page&P:&R %-5d &B|\n\r", clan->ranks[counter].name, clan->ranks[counter].wage ); } } ch_printf( ch, "&P+&B--------------------------------------------------------------&P+&B\n\r"); ch_printf( ch, "&B| &PM&pembers&P: &B|\n\r"); if ( listmembers[0] != '\0' ) ch_printf( ch, "&B| &W%s", listmembers ); ch_printf( ch, "&P+&B--------------------------------------------------------------&P+&B\n\r"); return; } void do_overthrow( CHAR_DATA *ch , char * argument ) { CLAN_DATA *clan; if ( IS_NPC( ch ) ) return; if ( !ch->pcdata || !ch->pcdata->clan ) { send_to_char( "You have to be part of an organization before you can claim leadership.\n\r", ch ); return; } clan = ch->pcdata->clan; if ( !clan ) { send_to_char( "No such clan.\n\r", ch ); return; } if ( clan->leader[0] != '\0' ) { send_to_char( "Your organization already has strong leadership...\n\r", ch ); return; } ch_printf( ch, "OK. You are now a leader of %s.\n\r", ch->pcdata->clan->name ); STRFREE( ch->pcdata->clan->leader ); if ( !strcmp(ch->name,ch->pcdata->clan->number1) ) { ch->pcdata->clan->leader = STRALLOC( ch->pcdata->clan->number1 ); STRFREE( ch->pcdata->clan->number1 ); ch->pcdata->clan->number1 = STRALLOC( "" ); } else if ( !strcmp(ch->name,ch->pcdata->clan->number2) ) { ch->pcdata->clan->leader = STRALLOC( ch->pcdata->clan->number2 ); STRFREE( ch->pcdata->clan->number2 ); ch->pcdata->clan->number2 = STRALLOC( "" ); } else ch->pcdata->clan->leader = STRALLOC( ch->name ); ch->pcdata->clan_rank = (MAX_RANK - 1); save_char_obj( ch ); /* clan gets saved when pfile is saved */ } void do_war ( CHAR_DATA *ch , char *argument ) { CLAN_DATA *wclan; CLAN_DATA *clan; char buf[MAX_STRING_LENGTH]; if ( IS_NPC( ch ) || !ch->pcdata || !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } clan = ch->pcdata->clan; if ( ( ch->pcdata->bestowments && is_name("war", ch->pcdata->bestowments)) || nifty_is_name( ch->name, clan->leader ) || nifty_is_name( ch->name, clan->number1 ) || nifty_is_name( ch->name, clan->number2 ) ) ; else { send_to_char( "You clan hasn't empowered you to declare war!\n\r", ch ); return; } if ( argument[0] == '\0' ) { send_to_char( "&G&WCurrently Atwar with:\n\r",ch ); send_to_char( clan->atwar,ch ); send_to_char( "\n\r" , ch); return; } if ( ( wclan = get_clan( argument ) ) == NULL ) { send_to_char( "No such clan.\n\r", ch); return; } if ( wclan == clan ) { send_to_char( "Declare war on yourself?!\n\r", ch); return; } if ( nifty_is_name( wclan->name , clan->atwar ) ) { CLAN_DATA *tclan; strcpy( buf, "" ); for ( tclan = first_clan ; tclan ; tclan = tclan->next ) if ( nifty_is_name( tclan->name , clan->atwar ) && tclan != wclan ) { strcat ( buf, "\n\r " ); strcat ( buf, tclan->name ); strcat ( buf, " " ); } STRFREE ( clan->atwar ); clan->atwar = STRALLOC( buf ); sprintf( buf , "%s has declared a ceasefire with %s!" , clan->name , wclan->name ); echo_to_all( AT_WHITE , buf , ECHOTAR_ALL ); save_char_obj( ch ); /* clan gets saved when pfile is saved */ return; } strcpy ( buf, clan->atwar ); strcat ( buf, "\n\r " ); strcat ( buf, wclan->name ); strcat ( buf, " " ); STRFREE ( clan->atwar ); clan->atwar = STRALLOC( buf ); sprintf( buf , "%s has declared war on %s!" , clan->name , wclan->name ); echo_to_all( AT_RED , buf , ECHOTAR_ALL ); save_char_obj( ch ); /* clan gets saved when pfile is saved */ } /* raises someones rank by one */ void do_promote( CHAR_DATA *ch, char *argument ) { char arg[MAX_STRING_LENGTH], arg2[MAX_STRING_LENGTH]; CHAR_DATA *victim; CLAN_DATA *clan; int counter, rank; send_to_char( "Use appoint instead. and contact an imm to fix this command\n\r",ch); return; if( IS_NPC(ch) ) { send_to_char( "NPCs cant be in clans.\n\r", ch ); return; } if( !ch->pcdata->clan ) { send_to_char( "Join a clan first.\n\r", ch ); return; } if( ch->pcdata->clan_rank >= 1 || !str_cmp(ch->pcdata->clan->leader,ch->name)); else { send_to_char( "Your not high enough of a rank to promote anyone.\n\r", ch ); return; } argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if( arg[0] == '\0' ) { send_to_char( "Promote who?\n\r", ch ); return; } if( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "That person is not here.\n\r", ch); return; } if( IS_NPC(victim) ) { do_say(victim,"Oh my god, your promoting me? When did I join?"); return; } if( victim == ch ) { send_to_char( "You can't promote yourself.\n\r", ch); return; } if( ( clan = victim->pcdata->clan ) == NULL ) { send_to_char( "They're not in your clan.\n\r", ch ); return; } if( clan != ch->pcdata->clan ) { send_to_char( "They're not in your clan.\n\r", ch); return; } if( arg2[0] == '\0' ) { send_to_char( "What rank should they be promoted to:\n\r", ch); for( counter = 0 ; counter < ch->pcdata->clan_rank ; counter++ ) ch_printf( ch, " %d - %s wage: %d\n\r", counter + 1, clan->ranks[counter].name, clan->ranks[counter].wage ); ch_printf( ch, "Their current rank is %s.\n\r", clan->ranks[victim->pcdata->clan_rank].name ); return; } if( ch->pcdata->clan_rank - 1 <= victim->pcdata->clan_rank ) { send_to_char( "You cannot promote them any further.\n\r", ch ); return; } rank = atoi( arg2) - 1; if( rank > ( MAX_RANK - 1 ) || rank < 0 ) { send_to_char( "Invalid rank.\n\r", ch ); return; } if( rank == victim->pcdata->clan_rank ) { send_to_char( "They're already at that rank!\n\r", ch ); return; } if( rank < victim->pcdata->clan_rank ) { send_to_char( "To lower their rank demote them.\n\r", ch); return; } victim->pcdata->clan_rank = rank; ch_printf( victim, "You have been promoted to %s.\n\r", clan->ranks[rank].name ); send_to_char( "Done.\n\r", ch); return; } void do_order_planet( CHAR_DATA *ch, char *argument) { CHAR_DATA *mob; char arg[MAX_INPUT_LENGTH]; int cost; PLANET_DATA *planet; /* check for surgeon */ for ( mob = ch->in_room->first_person; mob; mob = mob->next_in_room ) { if (mob->spec_fun == spec_lookup( "spec_clan_order" ) || mob->spec_2 == spec_lookup( "spec_clan_order" ) ) break; } if ( !ch->in_room->area || ( planet = ch->in_room->area->planet ) == NULL ) { send_to_char("How do you expect to buy things for the planet when your not on a planet?\n\r",ch); return; } /* if there are store keeper*/ if ( mob == NULL ) { ch_printf(ch,"Current Planet Stats:\n\r"); ch_printf(ch," Control Towers : %d\n\r",planet->controls); ch_printf(ch," Shield Generators : %d\n\r",planet->shields); ch_printf(ch," Barracks : %d\n\r",planet->barracks); return; } one_argument(argument,arg); /* if there are a surgeon, give a list*/ if (arg[0] == '\0' && mob != NULL) { /* display price list */ send_to_char("The following parts are available:",ch ); send_to_char(" controls : Control Towers 750000 creds\n\r",ch); send_to_char(" shield : Shield Generators 100000 creds\n\r",ch); send_to_char(" barracks : Barracks 100000 creds\n\r",ch); send_to_char(" Type order_planet <type> to buy one, or help order_planet to get more info.\n\r",ch); return; } /* Lets see what the character wants to have */ if (!str_prefix(arg,"control")) { cost = 750000; if (cost > (ch->gold)) { do_say( mob, "You do not have enough creds for my services." ); return; } planet->controls++; } else if (!str_prefix(arg,"shield")) { cost = 100000; if (cost > (ch->gold)) { do_say( mob, "You do not have enough creds for my services." ); return; } planet->shields++; } else if (!str_prefix(arg,"barracks")) { cost = 100000; if (cost > (ch->gold)) { do_say( mob, "You do not have enough creds for my services." ); return; } planet->barracks++; } else { do_say( mob, "Type 'order_planet' for a list of planetary upgrades." ); return; } WAIT_STATE(ch,PULSE_VIOLENCE); ch->gold -= cost; do_say( mob,"There we go, planetary defences upgraded." ); } void do_setsystemcode( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; SPACE_DATA *system; 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("setsystemcode", ch->pcdata->bestowments)) || !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: setsystemcode <starsystem> <code>\n\r", ch ); return; } if ( ( system = starsystem_from_name( arg ) ) == NULL ) { send_to_char("No such starsystem.\n\r", ch); return; } if ( system->governed_by && str_cmp(system->governed_by->name,clan->name) ) { send_to_char("You do not control that system.\n\r", ch); return; } if ( atoi(argument) < 0 || atoi(argument) > 99999999 ) { send_to_char("Code must be between 0 and 99999999 (0 being safe for all).\n\r", ch); return; } send_to_char("Done.\n\r", ch); system->code = atoi(argument); save_starsystem(system); return; } void do_alertstatus( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; SPACE_DATA *system; CLAN_DATA *clan; int alertstatus = -1; 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("alertstatus", ch->pcdata->bestowments)) || !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: alertstatus <starsystem> <code>\n\r", ch ); send_to_char( " Code being:\n\r" " Peace(attack nobody)\n\r" " Neutral(Attact At war clans)\n\r" " War (Attacts anything not in your clan)\n\r", ch ); return; } if ( ( system = starsystem_from_name( arg ) ) == NULL ) { send_to_char("No such starsystem.\n\r", ch); return; } if ( system->governed_by && str_cmp(system->governed_by->name,clan->name) ) { send_to_char("You do not control that system.\n\r", ch); return; } if ( !str_cmp("peace", argument ) ) { alertstatus = 0; set_char_color(AT_RED + AT_BLINK, ch); send_to_char("[System Status]: ",ch); set_char_color(AT_WHITE, ch); send_to_char("Peace\n\r",ch); } else if ( !str_cmp("neutral", argument ) ) { alertstatus = 1; set_char_color(AT_RED + AT_BLINK, ch); send_to_char("[System Status]: ",ch); set_char_color(AT_WHITE, ch); send_to_char("Neutral\n\r",ch); } else if ( !str_cmp("war", argument ) ) { alertstatus = 2; set_char_color(AT_RED + AT_BLINK, ch); send_to_char("[System Status]: ",ch); set_char_color(AT_WHITE, ch); send_to_char("War\n\r",ch); } else { send_to_char( "syntax: alertstatus <starsystem> <code>\n\r", ch ); send_to_char( " Code being:\n\r" " Peace(attack nobody)\n\r" " Neutral(Attact At war clans)\n\r" " War (Attacts anything not in your clan)\n\r", ch ); return; } send_to_char("Done.\n\r", ch); system->alertstatus = alertstatus; save_starsystem(system); return; } /********************************************************************************************/ void do_carry( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int chance; bool allow = FALSE; argument = one_argument( argument, arg ); if ( IS_NPC(ch) ) { send_to_char( "Huh?\n\r", ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Carry 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 (ch->char_carrying != NULL && ch->char_carrying != victim) { send_to_char( "You can't carry more than one person.\n\r", ch); return; } if (ch->char_carriedby != NULL) { send_to_char( "You can't carry while someone is carrying you.\n\r", ch); return; } if ( victim == ch ) { send_to_char("You try to pick yourself up, but just end up tumbling to the ground.\n\r", ch); ch->position = POS_SITTING; return; } if ( ch->char_carrying == victim ) { clear_carry(ch); clear_carry(victim); victim->position = POS_STANDING; ch->position = POS_STANDING; act( AT_ACTION, "You slowly and carefully put $N down.", ch, NULL, victim, TO_CHAR ); act( AT_ACTION, "$n slowly and carefully puts you down.", ch, NULL, victim, TO_VICT ); act( AT_ACTION, "$n slowly and carefully puts $N down.", ch, NULL, victim, TO_NOTVICT ); return; } if (victim->char_carrying != NULL) { send_to_char( "That person is carrying another.\n\r", ch); return; } if (victim->char_carriedby != NULL) { send_to_char( "That person is already being carried by someone else.\n\r", ch); return; } if ( !IS_NPC(victim) && nifty_is_name( ch->name , victim->pcdata->partner)) allow = TRUE; if ( victim->position > POS_STUNNED && allow != TRUE ) { send_to_char("You can only pick up stunned characters.\n\r", ch); return; } chance = 60; if ( ch->carry_weight + victim->weight > can_carry_w( ch ) ) /*if (chance < number_percent( ))*/ { act( AT_ACTION, "You have trouble balancing $M on your person.", ch, NULL, victim, TO_CHAR ); act( AT_ACTION, "$n tries to pick up you, but can't seem to manage the load.", ch, NULL, victim, TO_VICT ); act( AT_ACTION, "$n tries to pick up $N, but can't seem to manage the load.", ch, NULL, victim, TO_NOTVICT ); return; } victim->char_carriedby = ch; ch->char_carrying = victim; victim->position = POS_CARRIED; ch->position = POS_CARRYING; act( AT_ACTION, "You pick up $N and start carrying $M around.", ch, NULL, victim, TO_CHAR ); act( AT_ACTION, "$n picks up you and starts to carry you around.", ch, NULL, victim, TO_VICT ); act( AT_ACTION, "$n picks up $N and starts to carry $M around.", ch, NULL, victim, TO_NOTVICT ); } void clear_carry ( CHAR_DATA * ch ) { if ( !ch || ch == NULL ) { bug("clear_carry: Null ch",0); return; } ch->char_carriedby = NULL; ch->char_carrying = NULL; return; } void do_pshield(CHAR_DATA *ch, char *argument) { PLANET_DATA *planet; CLAN_DATA *clan; if ( !ch->in_room || !ch->in_room->area) return; if ( IS_NPC(ch) || !ch->pcdata ) { do_say( ch, "I'm not allowed to do this" ); return; } if ( !ch->pcdata->clan ) { send_to_char("Please Join A clan before attempting to lower the shields",ch ); return; } clan = ch->pcdata->clan; if ( (ch->pcdata && ch->pcdata->bestowments && is_name("pshield", ch->pcdata->bestowments)) || !str_cmp( ch->name, clan->leader ) || !str_cmp( ch->name, clan->number1 ) || !str_cmp( ch->name, clan->number2 ) ) ; else { send_to_char( "Huh?\n\r", ch ); return; } if ( ( planet = ch->in_room->area->planet ) == NULL ) { ch_printf( ch, "Note to self, I must be on a planet to toggle the shield\n\r" ); return; } if ( planet->shields <= 0 ) { send_to_char("&W[&R^zFAILURE&W^x] Shield Generators Are Unavailable or Destroyed\n\r",ch); return; } if ( planet->governed_by != clan ) { send_to_char("&W[&R^zERROR&W^x] You do not have access to the shields\n\r",ch); return; } if ( IS_SET(planet->flags, PLANET_PSHIELD) ) { do_say( ch, "Planetary Shield Off now!" ); TOGGLE_BIT(planet->flags, PLANET_PSHIELD); } else { do_say( ch, "Planetary Shield On now!" ); TOGGLE_BIT(planet->flags, PLANET_PSHIELD); } save_planet( planet ); return; }