/***********************************************************************\ * GENERAL * * GENERAL is by Jouster@COOLmud. He can be reached at * * dan@betterbox.net. This file falls under the GPL and the licenses * * of Diku, Merc, ROM, RoT, and any licenses that may apply to any * * portions of any file that this program may modify. * *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^* * If you don't mind, I'd appreciate an email if you use this * * file in your code. Thanks. * * dan@betterbox.net * \***********************************************************************/ /***********************************************************************\ * VERSION HISTORY * * v0.1a--original development * \***********************************************************************/ #ifdef macintosh #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include "merc.h" #include "recycle.h" #include "tables.h" #include "lookup.h" #include "general.h" void gnrl_level( CHAR_DATA *ch, char * argument ) { CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; int cost; if ( argument[0] == '\0' ) { send_to_char( "Syntax: level <character>.\n\r", ch ); return; } if ( ( victim = get_char_world( ch, argument ) ) == NULL ) { send_to_char( "I can't seem to find that person.\n\r", ch ); return; } if ( IS_NPC( victim ) ) { send_to_char( "Not on MOBs!\n\r", ch ); return; } /* if ( !is_same_clan( ch, victim ) ) { send_to_char( "Only for your own clan members, please.\n\r", ch ); return; } */ if ( IS_HERO( victim ) ) { send_to_char( "It'll be hard to make that person any higher without an IMM's help!\n\r", ch ); return; } cost = ( ( victim->level - 1 ) * 10 * ( IS_OMNI( victim ) ? 10 : 1 ) ); if ( ch->pcdata->prestige < cost ) { sprintf( buf, "Sorry, you need at least %d prestige points to do that.\n\r", cost ); send_to_char( buf, ch ); return; } ch->pcdata->prestige -= cost; send_to_char( "{c>>{b)){B!!{RYou just gained a level{B!!{b(({c<<{x\n\r", victim ); send_to_char( "Ok.\n\r", ch ); advance_level( victim ); victim->level++; victim->exp = exp_per_level(victim,victim->pcdata->points) * UMAX( 1, victim->level ); save_char_obj( ch ); save_char_obj( victim ); } void gnrl_advance( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; if ( ch->pcdata->gnrl_rank >= MAX_GENERAL_RANK ) { send_to_char( "Sorry, but you can't go any higher than you already are!\n\r", ch ); return; } /* * Make them pay for it in prestige, then actually advance them one * rank. */ if ( argument[0] == '\0' ) { sprintf( buf, "To advance from rank {W%d{x to rank {W%d{x, you will need:\n\r" "{%c%ld{x platinum\n\r" "{%c%d{x prestige\n\r" "{%c%d{x quest points\n\r", GENERAL_RANK( ch ), GENERAL_RANK( ch ) - 1, ( ch->platinum >= ( 100000 * ch->pcdata->gnrl_rank ) ? 'G' : 'R' ), (long) ( 100000 * ch->pcdata->gnrl_rank ), ( ch->pcdata->prestige >= ( 1500 * ch->pcdata->gnrl_rank ) ? 'G' : 'R' ), ( 1500 * ch->pcdata->gnrl_rank ), ( ch->questpoints >= ( 100 * ch->pcdata->gnrl_rank ) ? 'G' : 'R' ), ( 100 * ch->pcdata->gnrl_rank ) ); send_to_char( buf, ch ); if ( ch->platinum >= ( 100000 * ch->pcdata->gnrl_rank ) && ch->pcdata->prestige >= ( 1500 * ch->pcdata->gnrl_rank ) && ch->questpoints >= ( 100 * ch->pcdata->gnrl_rank ) ) { sprintf( buf, "You are ready to advance. Type {Badvance %d{x to do so.\n\r", GENERAL_RANK( ch ) - 1 ); send_to_char( buf, ch ); } return; } sprintf( buf, "%d", GENERAL_RANK( ch ) - 1 ); if ( str_cmp( argument, buf ) ) { sprintf( buf, "Syntax: {Badvance{x.\n\r" "If you have all needed resources, type: {Badvance %d{x.\n\r", GENERAL_RANK( ch ) - 1 ); send_to_char( buf, ch ); return; } if ( ch->platinum >= ( 100000 * ch->pcdata->gnrl_rank ) && ch->pcdata->prestige >= ( 1500 * ch->pcdata->gnrl_rank ) && ch->questpoints >= ( 100 * ch->pcdata->gnrl_rank ) ) { ch->platinum -= ( 100000 * ch->pcdata->gnrl_rank ); ch->pcdata->prestige -= ( 1500 * ch->pcdata->gnrl_rank ); ch->questpoints -= ( 100 * ch->pcdata->gnrl_rank ); send_to_char( "{BWelcome to your new rank.{x\n\r" " -May you use it wisely- \n\r", ch ); sprintf( buf, "%s has ascended to the %d%s rank.\n\r", ch->name, GENERAL_RANK( ch ) - 1, ( ( ( GENERAL_RANK( ch ) - 1 ) % 10 ) == 3 ? "rd" : ( ( ( GENERAL_RANK( ch ) - 1 ) % 10 ) == 2 ? "nd" : ( ( ( GENERAL_RANK( ch ) - 1 ) % 10 ) == 1 ? "st" : "th" ) ) ) ); send_to_all_chars( buf ); ch->pcdata->gnrl_rank++; save_char_obj( ch ); return; } send_to_char( "You lack the resources needed to advance. Type {Badvance{x to\n\r" "see what you're missing.\n\r", ch ); return; } void gnrl_cash( CHAR_DATA *ch, char *argument ) { send_to_char( "Unimplemented.\n\r", ch ); return; } void gnrl_restore( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; if ( argument[0] == '\0' ) { send_to_char( "Syntax: restore <character>.\n\r", ch ); sprintf( buf, "Restore costs %d prestige points per person for" " %d%s-rank Generals.\n\r", ( ( ( MAX_GENERAL_RANK * 10 ) + 10 ) - ( ch->pcdata->gnrl_rank * 10 ) ), GENERAL_RANK( ch ), ( ( ( GENERAL_RANK( ch ) ) % 10 ) == 3 ? "rd" : ( ( ( GENERAL_RANK( ch ) ) % 10 ) == 2 ? "nd" : ( ( ( GENERAL_RANK( ch ) ) % 10 ) == 1 ? "st" : "th" ) ) ) ); send_to_char( buf, ch ); return; } if ( ( victim = get_char_world( ch, argument ) ) == NULL ) { send_to_char( "I can't seem to find that person.\n\r", ch ); return; } if ( IS_NPC( victim ) ) { send_to_char( "Not on MOBs!\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "Use your points on your members, not yourself!\n\r", ch ); return; } /* if ( !is_same_clan( ch, victim ) ) { send_to_char( "Only for your own clan members, please.\n\r", ch ); return; } */ if ( ch->pcdata->prestige < 100 ) { sprintf( buf, "Sorry, you need at least %d prestige points to do that.\n\r", ( ( ( MAX_GENERAL_RANK * 10 ) + 10 ) - ( ch->pcdata->gnrl_rank * 10 ) ) ); send_to_char( buf, ch ); return; } ch->pcdata->prestige -= ( ( ( MAX_GENERAL_RANK * 10 ) + 10 ) - ( ch->pcdata->gnrl_rank * 10 ) ); sprintf( buf, "{c>>{b)){B!!{R%d%s-rank General %s%s{R%s has" " just restored you{B!!{b(({c<<{x\n\r", GENERAL_RANK( ch ), ( ( ( GENERAL_RANK( ch ) ) % 10 ) == 3 ? "rd" : ( ( ( GENERAL_RANK( ch ) ) % 10 ) == 2 ? "nd" : ( ( ( GENERAL_RANK( ch ) ) % 10 ) == 1 ? "st" : "th" ) ) ), ch->name, ch->pcdata->title, ( ( ch->pcdata->title[0] == ',' ) ? "," : "" ) ); send_to_char( buf, victim ); send_to_char( "Ok.\n\r", ch ); RESTORE_CHAR( victim ); save_char_obj( ch ); save_char_obj( victim ); } void gnrl_spellup( CHAR_DATA *ch, char *argument ) { send_to_char( "Unimplemented.\n\r", ch ); return; } void gnrl_transfer( CHAR_DATA *ch, char *argument ) { send_to_char( "Unimplemented.\n\r", ch ); return; } void gnrl_qp( CHAR_DATA *ch, char *argument ) { send_to_char( "Unimplemented.\n\r", ch ); return; } void do_worship( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; if ( argument[0] == '\0' ) { send_to_char( "Syntax: worship <char>.\n\r", ch ); return; } if ( IS_NPC( ch ) ) { send_to_char( "Sorry, only PCs can worship Generals.\n\r", ch ); return; } if ( ch->pcdata->prestige == 0 ) { send_to_char( "But you have no prestige points to give!\n\r", ch ); return; } if ( ( victim = get_char_world( ch, argument ) ) == NULL ) { send_to_char( "That person isn't here.\n\r", ch ); return; } if ( IS_NPC( victim ) ) { send_to_char( "You can only worship players.\n\r", ch ); return; } /* if ( !is_same_clan( ch, victim ) ) { send_to_char( "You can only worship your OWN clan General!\n\r", ch ); return; } */ if ( !IS_GENERAL( victim ) ) { send_to_char( "That person's not even a General!\n\r", ch ); return; } if ( ch == victim ) { if ( IS_MXP( ch ) ) send_to_char( "Now <I><B>that's</B></I> being vain.\n\r", ch ); else send_to_char( "Now THAT's being vain.\n\r", ch ); return; } send_to_char( "Your body coils into itself, then {rlaunches{x a giant " "{Gglowing{x\n\r{Gsphere of power{x into the sky, where it " "blazes a trail towards\n\ryour General.\n\r", ch ); sprintf( buf, "%s sends a {Gglowing sphere{x to you through the air.\n\r" "Catching it, you discover %ld prestige points inside.\n\r", ch->name, ch->pcdata->prestige ); send_to_char( buf, victim ); victim->pcdata->prestige += ch->pcdata->prestige; ch->pcdata->prestige = 0; }