/*--------------------------------------------------------------------------* * ** WolfPaw 1.0 ** * *--------------------------------------------------------------------------* * WolfPaw 1.0 (c) 1997,1998 by Dale Corse * *--------------------------------------------------------------------------* * The WolfPaw Coding Team is headed by: Greywolf * * With the Assitance from: Callinon, Dhamon, Sentra, Wyverns, Altrag * * Scryn, Thoric, Justice, Tricops and Mask. * *--------------------------------------------------------------------------* * Revised Clan Functions 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_CLANS 5 #define MAX_GUILDS 5 #define MAX_ORDERS 5 void pit_monster( OBJ_DATA *pit, 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; return NULL; } 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; ZONE_DATA *in_zone; 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->leader ) && str_cmp( ch->name, clan->deity ) && (clan->clan_type != CLAN_GUILD ) && ch->pcdata->clevel < 8 ) { 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,1 ); level = 40; if ( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { pObjIndex = get_obj_index( clan->clanobj2,1 ); level = 45; } if ( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { pObjIndex = get_obj_index( clan->clanobj3,1 ); level = 50; } if ( !pObjIndex || !is_name( arg, pObjIndex->name ) ) { send_to_char( "You don't know how to make that.\n\r", ch ); return; } in_zone = find_zone(1); obj = create_object( pObjIndex, 1, in_zone ); SET_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_clan( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char buf[MSL]; CHAR_DATA *victim; CLAN_DATA *clan; int level; if ( IS_NPC( ch ) || !ch->pcdata->clan ) { send_to_char( "Huh?\n\r", ch ); return; } clan = ch->pcdata->clan; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); if ( arg[0] == '\0') { send_to_char( "clan <char> <Member|dismember|level #> \n\r", ch); return; } if ( ( victim = get_char_world( 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 ( !str_cmp( arg2, "dismember" ) ) { if ( !IS_IMMORTAL(ch) && victim->pcdata->clan != ch->pcdata->clan ) { send_to_char( " That player isnt even in your clan!", ch); return; } if ( ch->pcdata->clevel <= 7 && ch != victim ) { send_to_char( "Your to Lowly for that!", ch ); return; } if ( !IS_IMMORTAL(ch) && ch->pcdata->clevel <= victim->pcdata->clevel && ch !=victim ) { send_to_char( "You cant do that.", ch ); return; } if ( victim->speaking & LANG_CLAN ) victim->speaking = LANG_COMMON; REMOVE_BIT( victim->speaks, LANG_CLAN ); --clan->members; victim->pcdata->clevel = 1; victim->pcdata->clan = NULL; STRFREE(victim->pcdata->clan_name); victim->pcdata->clan_name = STRALLOC( "" ); act( AT_MAGIC, "You dismember $N from $t", ch, clan->fullname,victim,TO_CHAR); act( AT_MAGIC, "$n dismembers $N from $t", ch, clan->fullname, victim,TO_ROOM); act( AT_MAGIC, "$n has kicked you out of $t",ch,clan->fullname,victim,TO_VICT); victim->pcdata->start_room = 30601; sprintf(buf,"%s has removed %s from %s",QUICKLINK(ch->name), QUICKLINK(victim->name),clan->fullname ); log_string(buf); save_char_obj( victim ); /* clan gets saved when pfile is saved */ return; } else if ( !str_cmp( arg2, "member" ) ) { if ( victim->level < 15 ) { send_to_char( "This player is not worthy of joining yet.\n\r",ch ); return; } if ( IS_SET(victim->act, PLR_OUTCAST) ) { send_to_char("This character may not be membered, they have been outcast\n\r",ch); return; } if ( !IS_IMMORTAL(ch) && victim->pcdata->clan ) { 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 ( ch->pcdata->clevel <= 7 ) { send_to_char( "Your to Lowly for that!", ch ); return; } clan->members++; if ( clan->clan_type != CLAN_ORDER && clan->clan_type != CLAN_GUILD ) SET_BIT(victim->speaks, LANG_CLAN); victim->pcdata->clan = clan; STRFREE(victim->pcdata->clan_name); victim->pcdata->clan_name = QUICKLINK( clan->name ); act( AT_MAGIC, "You member $N into $t",ch,clan->fullname,victim,TO_CHAR ); act( AT_MAGIC, "$n has membered $N into $t", ch,clan->fullname,victim, TO_ROOM); act( AT_MAGIC, "You are now a Member of $t", ch,clan->fullname,victim, TO_VICT); victim->pcdata->clevel = 1; sprintf(buf,"%s has Membered %s into %s",QUICKLINK(ch->name), QUICKLINK(victim->name),clan->fullname ); log_string(buf); save_char_obj( victim ); return; } else if ( !str_cmp( arg2, "level" ) ); { bool raised; if ( ch->pcdata->clevel <= 8 ) { send_to_char( "Your to Lowly for that!", ch ); return; } if ( !IS_IMMORTAL(ch) && victim->pcdata->clan != ch->pcdata->clan ) { send_to_char( " That player isnt even in your clan!", ch); return; } if ( ( level = atoi( arg2 ) ) < 1 || level > 10 ) { send_to_char( "Level must be 1 to 10.\n\r", ch ); return; } if ( ( level = atoi( arg2 ) ) > ch->pcdata->clevel ) { send_to_char( "You cant give away clan ranks you dont have!", ch ); return; } if ( level == victim->pcdata->clevel ) { send_to_char("But that is not higher or lower!\n\r",ch); return; } if ( level > victim->pcdata->clevel ) raised = TRUE; else raised = FALSE; if ( raised ) act( AT_MAGIC, "You advance $N's clan rank.",ch,NULL,victim,TO_CHAR); else act( AT_MAGIC, "You decrease $N's clan rank.",ch,NULL,victim,TO_CHAR); sprintf(buf,"%s to clan rank %d by %s",QUICKLINK(victim->name), level,QUICKLINK(ch->name)); log_string(buf); victim->pcdata->clevel = level; ch_printf(victim,"You clan rank has been %s to %d.\n\r", raised == TRUE ? "raised" : "lowered", victim->pcdata->clevel); save_char_obj( victim ); /* clan gets saved when pfile is saved */ return; } send_to_char("Eh?\n\r",ch); return; } void do_guild( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; CHAR_DATA *victim; CLAN_DATA *guild; int iLevel; int level; if ( IS_NPC( ch ) || !ch->pcdata->guild ) { send_to_char( "Huh?\n\r", ch ); return; } guild = ch->pcdata->guild; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); argument = one_argument( argument, arg3 ); if ( arg[0] == '\0') { send_to_char( "guild <char> <Member|dismember|level #> \n\r", ch); return; } if ( ( victim = get_char_world( 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 ( !str_cmp( arg2, "dismember" ) ) { if ( !IS_IMMORTAL(ch) && victim->pcdata->guild != ch->pcdata->guild ) { send_to_char( " That player isnt even in your guild!", ch); return; } if ( ch->pcdata->guildlevel <= 7 && ch != victim ) { send_to_char( "Your to Lowly for that!", ch ); return; } if ( !IS_IMMORTAL(ch) && ch->pcdata->guildlevel <= victim->pcdata->guildlevel && ch !=victim ) { send_to_char( "You cant do that.", ch ); return; } --guild->members; victim->pcdata->guildlevel = 1; victim->pcdata->guild = NULL; STRFREE(victim->pcdata->guild_name); victim->pcdata->guild_name = STRALLOC( "" ); act( AT_MAGIC, "You dismember $N from $t", ch, guild->name,victim,TO_CHAR ); act( AT_MAGIC, "$n dismembers $N from $t", ch, guild->name,victim,TO_ROOM ); act( AT_MAGIC, "$n has DISMEMBERED YOU FROM $t", ch,guild->name,victim, TO_VICT); victim->pcdata->start_room = 30601; save_char_obj( victim ); /* clan gets saved when pfile is saved */ return; } else if ( !str_cmp( arg2, "member" ) ) { if ( victim->level < 50 && victim->level2 < 50 ) { send_to_char( "This player is not worthy of joining yet.\n\r",ch ); return; } if ( IS_SET(victim->act, PLR_OUTCAST) ) { send_to_char("This character may not be membered, they have been outcast.\n\r",ch); return; } if ( !IS_IMMORTAL(ch) && victim->pcdata->guild ) { if ( victim->pcdata->guild == guild ) send_to_char( "This player already belongs to your guild!\n\r",ch ); else send_to_char( "This player already belongs to a guild!\n\r",ch); return; } if ( ch->pcdata->guildlevel <= 7 ) { send_to_char( "Your to Lowly for that!", ch ); return; } guild->members++; victim->pcdata->guild = guild; STRFREE(victim->pcdata->guild_name); victim->pcdata->guild_name = QUICKLINK( guild->name ); act( AT_MAGIC, "You member $N into $t",ch,guild->name,victim,TO_CHAR); act( AT_MAGIC, "$n has membered $N into $t", ch, guild->name,victim,TO_NOTVICT); act( AT_MAGIC, "You are now a Member of $t", ch, guild->name,victim,TO_VICT); victim->pcdata->guildlevel = 1; save_char_obj( victim ); return; } else if ( !str_cmp( arg2, "level" ) ); { if ( ch->pcdata->guildlevel <= 8 ) { send_to_char( "Your to Lowly for that!", ch ); return; } if ( !IS_IMMORTAL(ch) && victim->pcdata->guild != ch->pcdata->guild ) { send_to_char( " That player isnt even in your guild!", ch); return; } if ( ( level = atoi( arg2 ) ) < 1 || level > 10 ) { send_to_char( "Level must be 1 to 10.\n\r", ch ); return; } if ( ( level = atoi( arg2 ) ) > ch->pcdata->guildlevel ) { send_to_char( "You cant give away guild ranks you dont have!", ch ); return; } act( AT_MAGIC, "You advance $N's guild rank in $t", ch,guild->name,victim, TO_CHAR); for ( iLevel = victim->pcdata->guildlevel ; iLevel < level; iLevel++ ) { if (level < 11 ) send_to_char( "You guild rank advances!!\n\r", victim ); victim->pcdata->guildlevel += 1; } save_char_obj( victim ); /* clan gets saved when pfile is saved */ return; } send_to_char("Eh?\n\r",ch); return; } void do_setclan( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; CLAN_DATA *clan; 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> <deity|leader> <player>\n\r",ch); send_to_char( "\n\rField being one of:\n\r", ch ); send_to_char( "Usage: setclan <clan> <field> <deity|leader> <player>\n\r",ch); send_to_char( "\n\rField being one of:\n\r", ch ); send_to_char( " deity leader align storage recall\n\r", ch ); send_to_char( " members board morgue whoname\n\r", ch ); send_to_char( " obj1 obj2 obj3 guard1 guard2\n\r", ch ); if ( get_trust( ch ) >= LEVEL_GOD ) { send_to_char( " name filename motto desc fullname\n\r", ch ); send_to_char( " favour strikes type associate\n\r", ch ); } return; } clan = get_clan( arg1 ); if ( !clan ) { send_to_char( "No such clan.\n\r", ch ); return; } if ( !strcmp( arg2, "deity" ) ) { STRFREE( clan->deity ); clan->deity = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "associate" ) ) { STRFREE( clan->associate ); clan->associate = 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, "board" ) ) { clan->board = atoi( 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, "recall" ) ) { clan->recall = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "morgue" ) ) { clan->morgue = 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, "obj1" ) ) { clan->clanobj1 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "obj2" ) ) { clan->clanobj2 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "obj3" ) ) { clan->clanobj3 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "guard1" ) ) { clan->guard1 = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( 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 ( !strcmp( arg2, "align" ) ) { clan->alignment = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( 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 ( !strcmp( arg2, "class" ) ) { clan->class = atoi( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "name" ) ) { STRFREE( clan->name ); clan->name = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "fullname" ) ) { STRFREE( clan->fullname ); clan->fullname = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "whoname" ) ) { char *old_clan_name; PK_LIST *first_pk=NULL, *next_pk=NULL, *new_pk=NULL; CLAN_DATA *cln, *next_cln; bool found; old_clan_name = STRALLOC(clan->whoname); STRFREE( clan->whoname ); clan->whoname = STRALLOC( argument ); if ( clan->clan_type == CLAN_PLAIN ) { /* Change the name if its chart */ for ( first_pk=clan->pkdata->first_clan; first_pk; first_pk=next_pk ) { next_pk=first_pk->next; if ( !str_cmp(first_pk->name, old_clan_name) ) { first_pk->name = STRALLOC( argument ); log_string("Pk_List: Name Updated"); break; } } /* Add the name to all other charts, or update as needed */ for ( cln=first_clan; cln; cln=next_cln ) { next_cln = cln->next; if ( cln==clan ) continue; if ( cln->clan_type != CLAN_PLAIN ) continue; found = FALSE; /* Try and update it .. */ for( first_pk=cln->pkdata->first_clan; first_pk; first_pk=next_pk ) { next_pk = first_pk->next; if ( !str_cmp( first_pk->name, old_clan_name ) ) { found = TRUE; first_pk->name = STRALLOC( argument ); save_clan(cln); log_string("Pk_List: Old Name found and Updated."); break; } } if ( found ) continue; /* Can't Update - add it */ CREATE(new_pk,PK_LIST,1); new_pk->name = STRALLOC(argument); new_pk->pkills = 0; LINK(new_pk,cln->pkdata->first_clan,cln->pkdata->last_clan,next,prev); save_clan(cln); log_string("Pk_List: Added new Entry"); } } send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } if ( !strcmp( arg2, "filename" ) ) { DISPOSE( clan->filename ); clan->filename = str_dup( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); write_clan_list( ); return; } if ( !strcmp( arg2, "motto" ) ) { STRFREE( clan->motto ); clan->motto = STRALLOC( argument ); send_to_char( "Done.\n\r", ch ); save_clan( clan ); return; } 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_showclan( CHAR_DATA *ch, char *argument ) { CLAN_DATA *clan; 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, "Fullname: %s\n\r",clan->fullname); ch_printf( ch, "%s : %s\n\rFilename: %s\n\rMotto : %s\n\r", clan->clan_type == CLAN_ORDER ? "Order" : (clan->clan_type == CLAN_GUILD ? "Guild" : "Clan"), clan->name, clan->filename, clan->motto ); ch_printf( ch, "Description: %s\n\rDeity: %s\n\rLeader: %s\n\r", clan->description, clan->deity, clan->leader ); ch_printf( ch, "WhoName: %s\n\rAssociate: %s\n\r", clan->whoname ? clan->whoname : "None", clan->associate ? clan->associate : "None" ); ch_printf(ch, "PKills: %6d PDeaths: %6d\n\r", clan->pkills, clan->pdeaths ); ch_printf( ch, "MKills: %6d MDeaths: %6d\n\r", clan->mkills, clan->mdeaths ); ch_printf( ch, "IllegalPK: %-6d Score: %d\n\r", clan->illegal_pk, clan->score ); ch_printf( ch, "Type: %d Favour: %6d Strikes: %d\n\r", clan->clan_type, clan->favour, clan->strikes ); ch_printf( ch, "Members: %3d Morgue %d Alignment: %d Class: %d\n\r", clan->members, clan->morgue, clan->alignment, clan->class ); ch_printf( ch, "Board: %5d Object1: %5d Object2: %5d Object3: %5d\n\r", clan->board, clan->clanobj1, clan->clanobj2, clan->clanobj3 ); ch_printf( ch, "Recall: %5d Storeroom: %5d Guard1: %5d Guard2: %5d\n\r", clan->recall, clan->storeroom, clan->guard1, clan->guard2 ); return; } void do_makeclan( CHAR_DATA *ch, char *argument ) { char filename[256]; CLAN_DATA *clan=NULL; bool found; if ( !argument || argument[0] == '\0' ) { send_to_char( "Usage: makeclan <clan name>\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_pkill_record_setup( ); clan->name = STRALLOC( argument ); clan->motto = STRALLOC( "" ); clan->description = STRALLOC( "" ); clan->deity = STRALLOC( "" ); clan->leader = STRALLOC( "" ); } void do_clans( CHAR_DATA *ch, char *argument ) { CLAN_DATA *clan; int count = 0; if( argument[0] == '\0' ) { /* Switched deadly clan mobkills/mobdeaths to pkills -- Blodkai */ set_char_color( AT_BLOOD, ch ); send_to_char( "\n\rClan Deity Leader Pkills\n\r",ch); for ( clan = first_clan; clan; clan = clan->next ) { if ( clan->clan_type == CLAN_ORDER || clan->clan_type == CLAN_GUILD ) continue; set_char_color( AT_NOTE, ch ); ch_printf( ch, "%-14s %-14s %-14s", clan->name, clan->deity, clan->leader ); set_char_color( AT_BLOOD, ch ); ch_printf( ch, " %7d\n\r", clan->pkills ); count++; } send_to_char( "\n\r&rFor more information type &R'&rclans <clan>&R'&w\n\r",ch); if ( !count ) { set_char_color( AT_BLOOD, ch); send_to_char( "There are no clans currently formed.\n\r", ch ); return; } } else { clan = get_clan( argument ); if( !clan ) { do_clans( ch, "" ); return; } ch_printf( ch, "&rClan : %s\n\r", clan->fullname ? clan->fullname : clan->whoname ); ch_printf( ch, "&rDeity : &c%s\n\r", clan->deity ); ch_printf( ch, "&rLeader : &c%s\n\r", clan->leader ); ch_printf( ch, "&rMembers : &c%d\n\r", clan->members ); ch_printf( ch, "&rAssociate: &c%s\n\r", clan->associate ? clan->associate : "&cNone" ); } return; } void do_orders( CHAR_DATA *ch, char *argument ) { CLAN_DATA *order; int count = 0; /* Added displaying of mkills and mdeaths - Brittany */ set_char_color( AT_NOTE, ch ); send_to_char( "Order Deity Leader Mkills Mdeaths\n\r",ch); for ( order = first_clan; order; order = order->next ) if ( order->clan_type == CLAN_ORDER ) { ch_printf( ch, "%-16s %-14s %-14s %5d %5d\n\r",order->name, order->deity, order->leader, order->mkills, order->mdeaths); count++; } if ( !count ) { send_to_char( "There are no Orders currently formed.\n\r", ch ); return; } } void do_guilds( CHAR_DATA *ch, char *argument) { CLAN_DATA *guild; int count = 0; /* Added guild mobkills/mobdeaths -- Blodkai */ set_char_color( AT_NOTE, ch ); send_to_char( "\n\rGuild Leader Mkills Mdeaths\n\r",ch); for ( guild = first_clan; guild; guild = guild->next ) if ( guild->clan_type == CLAN_GUILD ) { ++count; set_char_color( AT_YELLOW, ch ); ch_printf( ch, "%-20s %-14s %-6d %6d\n\r",guild->name,guild->leader,guild->mkills,guild->mdeaths); } set_char_color( AT_NOTE, ch ); if ( !count ) send_to_char( "There are no Guilds currently formed.\n\r", ch ); else ch_printf( ch, "%d guilds found.\n\r", count ); } void do_cdonate( CHAR_DATA *ch, char *argument) { OBJ_DATA *pit; OBJ_DATA *obj; ROOM_INDEX_DATA *original; char arg[MAX_INPUT_LENGTH]; CLAN_DATA *clan; bool NO_PIT=FALSE; argument = one_argument(argument, arg); if (ch == NULL ) return; if (ch->pcdata->clan == NULL) return; if (arg[0] == '\0' ) { send_to_char("Donate what to your clan?\n\r",ch); return; } original = ch->in_room; if (ch->position == POS_FIGHTING) { send_to_char(" You're fighting!\n\r",ch); return; } if ( IS_SET(ch->pcdata->flagstwo, MOREPC_HOARDER) ) { send_to_char("No.\n\r",ch); return; } if ( (obj = get_obj_carry (ch, arg)) == NULL) { send_to_char("You do not have that!\n\r",ch); return; } else { if (!can_drop_obj(ch, obj) && ch->level < 51) { send_to_char("Eeek! You can't let go of it!\n\r",ch); return; } if ( !obj ) return; if ((obj->item_type == ITEM_CORPSE_NPC) || (obj->item_type == ITEM_CORPSE_PC)) { send_to_char("You cannot donate that!\n\r",ch); return; } if (obj->timer > 0) { send_to_char("You cannot donate that.\n\r",ch); return; } if ( IS_SET( obj->second_flags, ITEM2_LIMITED ) ) { separate_obj(obj); act(AT_MAGIC,"$p is destroyed as you attempt to donate it.",ch,obj,NULL,TO_CHAR); act(AT_MAGIC,"$p is destroyed as $n attempts to donate it.",ch,obj,NULL,TO_ROOM); extract_obj(obj); return; } if ( obj->item_type == ITEM_CONTAINER ) { send_to_char("Containers cannot be donated.\n\r",ch); return; } if (ch->in_room != get_room_index(ROOM_VNUM_ALTAR,1)) act(AT_PLAIN,"$n donates $p to thier clan.",ch,obj,NULL,TO_ROOM); act(AT_PLAIN,"You donate $p to your clan.",ch,obj,NULL,TO_CHAR); separate_obj(obj); char_from_room(ch); char_to_room(ch,get_room_index(ch->pcdata->clan->storeroom,1)); if ( ( pit = get_obj_here( ch, "donation" ) ) == NULL ) NO_PIT = TRUE; obj_from_char(obj); if ( !NO_PIT ) { obj_to_obj(obj, pit ); pit_monster(pit,ch); } else obj_to_room( obj, ch->in_room ); /* Clan storeroom checks */ if ( IS_SET(ch->in_room->room_flags, ROOM_CLANSTOREROOM) ) for ( clan = first_clan; clan; clan = clan->next ) if ( clan->storeroom == ch->in_room->vnum ) save_clan_storeroom(ch, clan); /* Save-Rooms --GW */ if ( IS_SET(ch->in_room->room_flags, ROOM_SAVE) ) save_save_room(ch); char_from_room(ch); char_to_room(ch,original); return; } } /* * Send the list of prices for clan/guild stones to a character --GW */ void clan_buy_list( CHAR_DATA *ch ) { int clans=0,guilds=0,orders=0; CLAN_DATA *temp, *temp_next; for ( temp = first_clan; temp; temp = temp_next ) { temp_next = temp->next; if ( temp->clan_type == CLAN_ORDER ) orders++; else if ( temp->clan_type == CLAN_GUILD ) guilds++; else clans++; } send_to_char("\n\r",ch); send_to_char(" *-*-* Age of the Ancients Clan/Guild Stone Price Lising *-*-*\n\r",ch); send_to_char("\n\r",ch); send_to_char(" Type Price Petitioners Signers Required\n\r",ch); send_to_char(" ----------------------------------------------------------\n\r",ch); send_to_char(" Guild Stone 400,000,000 25 Signitures\n\r",ch); send_to_char(" Order Stone 750,000,000 35 Signitures\n\r",ch); send_to_char(" PK Clan Stone 900,000,000 50 Signitures\n\r",ch); send_to_char("\n\r",ch); ch_printf(ch, " Availablity: Guilds [%d/%d] Orders [%d/%d] Clans [%d/%d]\n\r", guilds, MAX_GUILDS, orders, MAX_ORDERS, clans, MAX_CLANS ); send_to_char("\n\r",ch); send_to_char("Note: Fees are 10,000,000 per month.\n\r",ch); return; } void clan_buy( CHAR_DATA *ch, char *argument ) { char arg[MSL]; one_argument( argument, arg ); if ( !str_prefix( arg, "guild stone" ) ) { send_to_char("Not Currently Available\n\r",ch); return; } if ( !str_prefix( arg, "pk clan stone" ) ) { send_to_char("Not Currently Available\n\r",ch); return; } if ( !str_prefix( arg, "order stone" ) ) { send_to_char("Not Currently Available\n\r",ch); return; } send_to_char("Buy What?\n\r",ch); return; } /* * Donation Pit Monster - eats limited items if theres more then 2 --GW */ void pit_monster( OBJ_DATA *pit, CHAR_DATA *ch ) { OBJ_DATA *obj, *next_obj; CLAN_DATA *clan; LIMIT_DATA *limit; /* No Pit - try and find it --GW */ if ( !pit && ch ) { if ( ( pit = get_obj_here( ch, "donation" ) ) == NULL ) { bug("Pit_Monster: Null Pit! (V:%d)",ch->in_room->vnum); return; } } act(AT_PLAIN,"&RThe Pit Monster looks in the pit.. licking his lips.&w&W",ch,NULL,NULL,TO_ROOM); act(AT_PLAIN,"&RThe Pit Monster looks in the pit.. licking his lips.&w&W",ch,NULL,NULL,TO_CHAR); for ( obj=pit->first_content; obj; obj=next_obj ) { next_obj = obj->next_content; if ( IS_LIMITED(obj) ) { int delete_cnt=0; OBJ_DATA *delete= NULL; /* over limit eq */ limit=limit_lookup(obj->pIndexData->area->zone->number,obj->pIndexData->vnum); if ( limit->loaded > limit->limit ) { act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,obj,NULL,TO_ROOM); act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,obj,NULL,TO_CHAR); separate_obj(obj); obj_from_obj(obj); extract_obj(obj); continue; } /* Scan the pit for the next occurance(s) */ if ( obj->count > 2 ) obj->count = 2; delete_cnt = obj->count; for ( delete=pit->first_content; delete; delete = delete->next_content ) { if ( ( delete->pIndexData->vnum == obj->pIndexData->vnum ) && delete != obj ) { delete_cnt++; if (delete_cnt > 2 ) { act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,delete,NULL,TO_ROOM); act(AT_PLAIN,"&RThe Pit Monster eats $p! &C*Burp*&w&W",ch,delete,NULL,TO_CHAR); separate_obj(delete); obj_from_obj(delete); extract_obj(delete); } } } } } /* Save our changes --GW */ if ( IS_SET(ch->in_room->room_flags, ROOM_CLANSTOREROOM) ) for ( clan = first_clan; clan; clan = clan->next ) if ( clan->storeroom == ch->in_room->vnum ) save_clan_storeroom(ch, clan); return; }