/*************************************************************************** Star Wars Life 3.0a Leadership Skills/Abilities FOr credits see 'Help Credits' in game. (c) 2001, 2002; FRPG Ltd. All Rights Reserved ****************************************************************************/ #include <math.h> #include <sys/types.h> #include <ctype.h> #include <stdio.h> #include <string.h> #include <time.h> #include "mud.h" int ris_save( CHAR_DATA *ch, int chance, int ris ); void do_reinforcements( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; int chance, credits; if ( IS_NPC( ch ) || !ch->pcdata ) return; strcpy( arg, argument ); switch( ch->substate ) { default: if ( ch->backup_wait ) { send_to_char( "&RYour reinforcements are already on the way.\n\r", ch ); return; } if ( !ch->pcdata->clan ) { send_to_char( "&RYou need to be a member of an organization before you can call for reinforcements.\n\r", ch ); return; } if ( ch->gold < ch->skill_level[LEADERSHIP_ABILITY] * 50 ) { ch_printf( ch, "&RYou dont have enough credits to send for reinforcements.\n\r" ); return; } chance = (int) (ch->pcdata->learned[gsn_reinforcements]); if ( number_percent( ) < chance ) { send_to_char( "&GYou begin making the call for reinforcements.\n\r", ch); act( AT_PLAIN, "$n begins issuing orders into $s comlink.", ch, NULL, argument , TO_ROOM ); add_timer ( ch , TIMER_DO_FUN , 1 , do_reinforcements , 1 ); ch->dest_buf = str_dup(arg); return; } send_to_char("&RYou call for reinforcements but nobody answers.\n\r",ch); learn_from_failure( ch, gsn_reinforcements ); return; case 1: if ( !ch->dest_buf ) return; strcpy(arg, ch->dest_buf); DISPOSE( ch->dest_buf); break; case SUB_TIMER_DO_ABORT: DISPOSE( ch->dest_buf ); ch->substate = SUB_NONE; send_to_char("&RYou are interupted before you can finish your call.\n\r", ch); return; } ch->substate = SUB_NONE; send_to_char( "&GYour reinforcements are on the way.\n\r", ch); credits = ch->skill_level[LEADERSHIP_ABILITY] * 50; ch_printf( ch, "It cost you %d credits.\n\r", credits); ch->gold -= UMIN( credits , ch->gold ); learn_from_success( ch, gsn_reinforcements ); gain_exp( ch, ch->skill_level[LEADERSHIP_ABILITY] * 800, LEADERSHIP_ABILITY); if ( nifty_is_name( "empire" , ch->pcdata->clan->name ) ) ch->backup_mob = MOB_VNUM_STORMTROOPER; else if ( nifty_is_name( "republic" , ch->pcdata->clan->name ) ) ch->backup_mob = MOB_VNUM_NR_TROOPER; else ch->backup_mob = MOB_VNUM_MERCINARY; ch->backup_wait = number_range(1,2); } void do_postguard( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; int chance, credits; if ( IS_NPC( ch ) || !ch->pcdata ) return; strcpy( arg, argument ); switch( ch->substate ) { default: if ( ch->backup_wait ) { send_to_char( "&RYou already have backup coming.\n\r", ch ); return; } if ( !ch->pcdata->clan ) { send_to_char( "&RYou need to be a member of an organization before you can call for a guard.\n\r", ch ); return; } if ( ch->gold < ch->skill_level[LEADERSHIP_ABILITY] * 30 ) { ch_printf( ch, "&RYou dont have enough credits.\n\r", ch ); return; } chance = (int) (ch->pcdata->learned[gsn_postguard]); if ( number_percent( ) < chance ) { send_to_char( "&GYou begin making the call for reinforcements.\n\r", ch); act( AT_PLAIN, "$n begins issuing orders into $s comlink.", ch, NULL, argument , TO_ROOM ); add_timer ( ch , TIMER_DO_FUN , 1 , do_postguard , 1 ); ch->dest_buf = str_dup(arg); return; } send_to_char("&RYou call for a guard but nobody answers.\n\r",ch); learn_from_failure( ch, gsn_postguard ); return; case 1: if ( !ch->dest_buf ) return; strcpy(arg, ch->dest_buf); DISPOSE( ch->dest_buf); break; case SUB_TIMER_DO_ABORT: DISPOSE( ch->dest_buf ); ch->substate = SUB_NONE; send_to_char("&RYou are interupted before you can finish your call.\n\r", ch); return; } ch->substate = SUB_NONE; send_to_char( "&GYour guard is on the way.\n\r", ch); credits = ch->skill_level[LEADERSHIP_ABILITY] * 20; ch_printf( ch, "It cost you %d credits.\n\r", credits); ch->gold -= UMIN( credits , ch->gold ); gain_exp( ch, ch->skill_level[LEADERSHIP_ABILITY] * 400, LEADERSHIP_ABILITY); learn_from_success( ch, gsn_postguard ); ch->backup_mob = MOB_VNUM_BOUNCER; ch->backup_wait = 1; } void do_add_patrol ( CHAR_DATA *ch , char *argument ) { char arg[MAX_INPUT_LENGTH]; int chance, credits; if ( IS_NPC( ch ) || !ch->pcdata ) return; strcpy( arg, argument ); switch( ch->substate ) { default: if ( ch->backup_wait ) { send_to_char( "&RYou already have backup patrol coming.\n\r", ch ); return; } if ( !ch->pcdata->clan ) { send_to_char( "&RYou need to be a member of an organization before you can call for a patrol.\n\r", ch ); return; } if ( ch->gold < ch->skill_level[LEADERSHIP_ABILITY] * 30 ) { ch_printf( ch, "&RYou dont have enough credits.\n\r", ch ); return; } chance = (int) (ch->pcdata->learned[gsn_addpatrol]); if ( number_percent( ) < chance ) { send_to_char( "&GYou begin making the call for a patrol.\n\r", ch); act( AT_PLAIN, "$n begins issuing orders into $s comlink.", ch, NULL, argument , TO_ROOM ); add_timer ( ch , TIMER_DO_FUN , 1 , do_add_patrol , 1 ); ch->dest_buf = str_dup(arg); return; } send_to_char("&RYou call for a patrol but nobody answers.\n\r",ch); learn_from_failure( ch, gsn_addpatrol ); return; case 1: if ( !ch->dest_buf ) return; strcpy(arg, ch->dest_buf); DISPOSE( ch->dest_buf); break; case SUB_TIMER_DO_ABORT: DISPOSE( ch->dest_buf ); ch->substate = SUB_NONE; send_to_char("&RYou are interupted before you can finish your call.\n\r", ch); return; } ch->substate = SUB_NONE; send_to_char( "&GYour patrol is on the way.\n\r", ch); credits = ch->skill_level[LEADERSHIP_ABILITY] * 20; ch_printf( ch, "It cost you %d credits.\n\r", credits); ch->gold -= UMIN( credits , ch->gold ); learn_from_success( ch, gsn_addpatrol ); gain_exp( ch, ch->skill_level[LEADERSHIP_ABILITY] * 600, LEADERSHIP_ABILITY); ch->backup_mob = MOB_VNUM_PATROL; ch->backup_wait = 1; } void do_elite_patrol ( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; int chance, credits; if ( IS_NPC( ch ) || !ch->pcdata ) return; strcpy( arg, argument ); switch( ch->substate ) { default: if ( ch->backup_wait ) { send_to_char( "&RYou already have an elite patrol coming.\n\r", ch ); return; } if ( !ch->pcdata->clan ) { send_to_char( "&RYou need to be a member of an organization before you can call for an elite patrol.\n\r", ch ); return; } if ( ch->gold < ch->skill_level[LEADERSHIP_ABILITY] * 50 ) { ch_printf( ch, "&RYou dont have enough credits.\n\r", ch ); return; } chance = (int) (ch->pcdata->learned[gsn_elitepatrol]); if ( number_percent( ) < chance ) { send_to_char( "&GYou begin making the call for an elite patrol.\n\r", ch); act( AT_PLAIN, "$n begins issuing orders into $s comlink.", ch, NULL, argument , TO_ROOM ); add_timer ( ch , TIMER_DO_FUN , 1 , do_elite_patrol , 1 ); ch->dest_buf = str_dup(arg); return; } send_to_char("&RYou call for an elite patrol but nobody answers.\n\r",ch); learn_from_failure( ch, gsn_elitepatrol ); return; case 1: if ( !ch->dest_buf ) return; strcpy(arg, ch->dest_buf); DISPOSE( ch->dest_buf); break; case SUB_TIMER_DO_ABORT: DISPOSE( ch->dest_buf ); ch->substate = SUB_NONE; send_to_char("&RYou are interupted before you can finish your call.\n\r", ch); return; } ch->substate = SUB_NONE; send_to_char( "&GYour elite patrol is on the way.\n\r", ch); credits = ch->skill_level[LEADERSHIP_ABILITY] * 50; ch_printf( ch, "It cost you %d credits.\n\r", credits); ch->gold -= UMIN( credits , ch->gold ); learn_from_success( ch, gsn_elitepatrol ); gain_exp( ch, ch->skill_level[LEADERSHIP_ABILITY] * 1200, LEADERSHIP_ABILITY); ch->backup_mob = MOB_VNUM_EPATROL; ch->backup_wait = 1; } void do_special_forces ( CHAR_DATA *ch , char *argument ) { char arg[MAX_INPUT_LENGTH]; int chance, credits; if ( IS_NPC( ch ) || !ch->pcdata ) return; strcpy( arg, argument ); switch( ch->substate ) { default: if ( ch->backup_wait ) { send_to_char( "&RYour Special Forces are already on the way.\n\r", ch ); return; } if ( !ch->pcdata->clan ) { send_to_char( "&RYou need to be a member of an organization before you can call for Special Forces.\n\r", ch ); return; } if ( ch->gold < ch->skill_level[LEADERSHIP_ABILITY] * 60 ) { ch_printf( ch, "&RYou dont have enough credits to send for Special forces.\n\r" ); return; } chance = (int) (ch->pcdata->learned[gsn_specialforces]); if ( number_percent( ) < chance ) { send_to_char( "&GYou begin making the call for Special Forces.\n\r", ch); act( AT_PLAIN, "$n begins issuing orders into $s comlink.", ch, NULL, argument , TO_ROOM ); add_timer ( ch , TIMER_DO_FUN , 1 , do_special_forces , 1 ); ch->dest_buf = str_dup(arg); return; } send_to_char("&RYou call for Special Forces but nobody answers.\n\r",ch); learn_from_failure( ch, gsn_specialforces ); return; case 1: if ( !ch->dest_buf ) return; strcpy(arg, ch->dest_buf); DISPOSE( ch->dest_buf); break; case SUB_TIMER_DO_ABORT: DISPOSE( ch->dest_buf ); ch->substate = SUB_NONE; send_to_char("&RYou are interupted before you can finish your call.\n\r", ch); return; } ch->substate = SUB_NONE; send_to_char( "&GYour reinforcements are on the way.\n\r", ch); credits = ch->skill_level[LEADERSHIP_ABILITY] * 60; ch_printf( ch, "It cost you %d credits.\n\r", credits); ch->gold -= UMIN( credits , ch->gold ); learn_from_success( ch, gsn_specialforces ); gain_exp( ch, ch->skill_level[LEADERSHIP_ABILITY] * 2000, LEADERSHIP_ABILITY); ch->backup_mob = MOB_VNUM_SPECIAL; ch->backup_wait = number_range(1,2); } void do_elite_guard ( CHAR_DATA *ch , char *argument ) { char arg[MAX_INPUT_LENGTH]; int chance, credits; if ( IS_NPC( ch ) || !ch->pcdata ) return; strcpy( arg, argument ); switch( ch->substate ) { default: if ( ch->backup_wait ) { send_to_char( "&RYou already have elite backup coming.\n\r", ch ); return; } if ( !ch->pcdata->clan ) { send_to_char( "&RYou need to be a member of an organization before you can call for an elite guard.\n\r", ch ); return; } if ( ch->gold < ch->skill_level[LEADERSHIP_ABILITY] * 50 ) { ch_printf( ch, "&RYou dont have enough credits.\n\r", ch ); return; } chance = (int) (ch->pcdata->learned[gsn_eliteguard]); if ( number_percent( ) < chance ) { send_to_char( "&GYou begin making the call for elite reinforcements.\n\r", ch); act( AT_PLAIN, "$n begins issuing orders into $s comlink.", ch, NULL, argument , TO_ROOM ); add_timer ( ch , TIMER_DO_FUN , 1 , do_elite_guard , 1 ); ch->dest_buf = str_dup(arg); return; } send_to_char("&RYou call for an elite guard but nobody answers.\n\r",ch); learn_from_failure( ch, gsn_eliteguard ); return; case 1: if ( !ch->dest_buf ) return; strcpy(arg, ch->dest_buf); DISPOSE( ch->dest_buf); break; case SUB_TIMER_DO_ABORT: DISPOSE( ch->dest_buf ); ch->substate = SUB_NONE; send_to_char("&RYou are interupted before you can finish your call.\n\r", ch); return; } ch->substate = SUB_NONE; send_to_char( "&GYour elite guard is on the way.\n\r", ch); credits = ch->skill_level[LEADERSHIP_ABILITY] * 50; ch_printf( ch, "It cost you %d credits.\n\r", credits); ch->gold -= UMIN( credits , ch->gold ); learn_from_success( ch, gsn_eliteguard ); gain_exp( ch, ch->skill_level[LEADERSHIP_ABILITY] * 1000, LEADERSHIP_ABILITY); ch->backup_mob = MOB_VNUM_ELITE; ch->backup_wait = 1; } void add_reinforcements( CHAR_DATA *ch ) { MOB_INDEX_DATA * pMobIndex; OBJ_DATA * blaster; OBJ_INDEX_DATA * pObjIndex; if ( ( pMobIndex = get_mob_index( ch->backup_mob ) ) == NULL ) return; if ( ch->backup_mob == MOB_VNUM_STORMTROOPER || ch->backup_mob == MOB_VNUM_NR_TROOPER || ch->backup_mob == MOB_VNUM_MERCINARY ) { CHAR_DATA * mob[3]; int mob_cnt; send_to_char( "Your reinforcements have arrived.\n\r", ch ); for ( mob_cnt = 0 ; mob_cnt < 3 ; mob_cnt++ ) { int ability; mob[mob_cnt] = create_mobile( pMobIndex ); char_to_room( mob[mob_cnt], ch->in_room ); act( AT_IMMORT, "$N has arrived.", ch, NULL, mob[mob_cnt], TO_ROOM ); mob[mob_cnt]->top_level = ch->skill_level[LEADERSHIP_ABILITY]/3; for ( ability = 0 ; ability < MAX_ABILITY ; ability++ ) mob[mob_cnt]->skill_level[ability] = mob[mob_cnt]->top_level; mob[mob_cnt]->hit = mob[mob_cnt]->top_level*15; mob[mob_cnt]->max_hit = mob[mob_cnt]->hit; mob[mob_cnt]->armor = 100- mob[mob_cnt]->top_level*2.5; mob[mob_cnt]->damroll = mob[mob_cnt]->top_level/5; mob[mob_cnt]->hitroll = mob[mob_cnt]->top_level/5; if ( ( pObjIndex = get_obj_index( OBJ_VNUM_BLASTECH_E11 ) ) != NULL ) { blaster = create_object( pObjIndex, mob[mob_cnt]->top_level ); obj_to_char( blaster, mob[mob_cnt] ); equip_char( mob[mob_cnt], blaster, WEAR_WIELD ); } if ( mob[mob_cnt]->master ) stop_follower( mob[mob_cnt] ); add_follower( mob[mob_cnt], ch ); SET_BIT( mob[mob_cnt]->affected_by, AFF_CHARM ); do_setblaster( mob[mob_cnt] , "full" ); if (ch->subclass == SUBCLASS_OFFICER) { if (mob[mob_cnt]->hit <= 16000) { mob[mob_cnt]->hit *= 2; mob[mob_cnt]->max_hit *= 2; } else { mob[mob_cnt]->hit = 32000; mob[mob_cnt]->max_hit = 32000; } if (mob[mob_cnt]->hit <= 16000) { mob[mob_cnt]->hit *= 2; mob[mob_cnt]->max_hit *= 2; } mob[mob_cnt]->armor = -1300; if(mob[mob_cnt]->damroll <= 500) mob[mob_cnt]->damroll = 1000; else mob[mob_cnt]->damroll *= 2; if(mob[mob_cnt]->hitroll <= 500) mob[mob_cnt]->hitroll = 1000; else mob[mob_cnt]->hitroll *= 2; } } return; } if (ch->backup_mob == MOB_VNUM_SPECIAL ) { CHAR_DATA * mob[3]; int mob_cnt; send_to_char( "Your Special Forces have arrived.\n\r", ch ); for ( mob_cnt = 0 ; mob_cnt < 3 ; mob_cnt++ ) { int ability; mob[mob_cnt] = create_mobile( pMobIndex ); char_to_room( mob[mob_cnt], ch->in_room ); act( AT_IMMORT, "$N has arrived.", ch, NULL, mob[mob_cnt], TO_ROOM ); mob[mob_cnt]->top_level = 105; for ( ability = 0 ; ability < MAX_ABILITY ; ability++ ) mob[mob_cnt]->skill_level[ability] = mob[mob_cnt]->top_level; mob[mob_cnt]->hit = mob[mob_cnt]->top_level*30; mob[mob_cnt]->max_hit = mob[mob_cnt]->hit; mob[mob_cnt]->armor = 100- mob[mob_cnt]->top_level*4.5; mob[mob_cnt]->damroll = mob[mob_cnt]->top_level; mob[mob_cnt]->hitroll = mob[mob_cnt]->top_level; if ( ( pObjIndex = get_obj_index( OBJ_VNUM_BLASTECH_E11 ) ) != NULL ) { blaster = create_object( pObjIndex, mob[mob_cnt]->top_level ); obj_to_char( blaster, mob[mob_cnt] ); equip_char( mob[mob_cnt], blaster, WEAR_WIELD ); } if ( mob[mob_cnt]->master ) stop_follower( mob[mob_cnt] ); add_follower( mob[mob_cnt], ch ); SET_BIT( mob[mob_cnt]->affected_by, AFF_CHARM ); do_setblaster( mob[mob_cnt] , "full" ); if (ch->subclass == SUBCLASS_OFFICER) { /* mob[mob_cnt]->hit *= 2; mob[mob_cnt]->max_hit *= 2; mob[mob_cnt]->armor = -1300; mob[mob_cnt]->damroll *= 2; mob[mob_cnt]->hitroll *= 2; */ if (mob[mob_cnt]->hit > 16000) { mob[mob_cnt]->hit = 32000; mob[mob_cnt]->max_hit = 32000; } else { mob[mob_cnt]->hit *= 2; mob[mob_cnt]->max_hit *= 2; } mob[mob_cnt]->armor = -1300; if(mob[mob_cnt]->damroll <= 500) mob[mob_cnt]->damroll = 1000; else mob[mob_cnt]->damroll *= 2; if(mob[mob_cnt]->hitroll <= 500) mob[mob_cnt]->hitroll = 1000; else mob[mob_cnt]->hitroll *= 2; } } return; } if (ch->backup_mob == MOB_VNUM_ELITE ) { CHAR_DATA *mob; int ability; mob = create_mobile( pMobIndex ); char_to_room( mob, ch->in_room ); if ( ch->pcdata && ch->pcdata->clan ) { char tmpbuf[MAX_STRING_LENGTH]; STRFREE( mob->name ); mob->name = STRALLOC( ch->pcdata->clan->name ); sprintf( tmpbuf , "(%s) %s" , ch->pcdata->clan->name , mob->long_descr ); STRFREE( mob->long_descr ); mob->long_descr = STRALLOC( tmpbuf ); } act( AT_IMMORT, "$N has arrived.", ch, NULL, mob, TO_ROOM ); send_to_char( "Your elite guard has arrived.\n\r", ch ); mob->top_level = 105; for ( ability = 0 ; ability < MAX_ABILITY ; ability++ ) mob->skill_level[ability] = mob->top_level; mob->hit = mob->top_level*25; mob->max_hit = mob->hit; mob->armor = 100- mob->top_level*3.5; mob->damroll = mob->top_level; mob->hitroll = mob->top_level; if ( ( pObjIndex = get_obj_index( OBJ_VNUM_BLASTECH_E11 ) ) != NULL ) { blaster = create_object( pObjIndex, mob->top_level ); obj_to_char( blaster, mob ); equip_char( mob, blaster, WEAR_WIELD ); } /* for making this more accurate in the future */ if ( mob->mob_clan ) STRFREE ( mob->mob_clan ); if ( ch->pcdata && ch->pcdata->clan ) mob->mob_clan = STRALLOC( ch->pcdata->clan->name ); if (ch->subclass == SUBCLASS_OFFICER) { /* mob->hit *= 2; mob->max_hit *= 2; mob->armor = -1300; mob->damroll *= 2; mob->hitroll *= 2; */ if (mob->hit <= 16000) mob->hit *= 2; else { mob->hit = 32000; mob->max_hit = 32000; } if (mob->hit <= 16000) { mob->hit *= 2; mob->max_hit *= 2; } mob->armor = -1300; if(mob->damroll <= 500) mob->damroll = 1000; else mob->damroll *= 2; if(mob->hitroll <= 500) mob->hitroll = 1000; else mob->hitroll *= 2; } return; } if (ch->backup_mob == MOB_VNUM_EPATROL ) { CHAR_DATA *mob; int ability; mob = create_mobile( pMobIndex ); char_to_room( mob, ch->in_room ); if ( ch->pcdata && ch->pcdata->clan ) { char tmpbuf[MAX_STRING_LENGTH]; STRFREE( mob->name ); mob->name = STRALLOC( ch->pcdata->clan->name ); sprintf( tmpbuf , "(%s) %s" , ch->pcdata->clan->name , mob->long_descr ); STRFREE( mob->long_descr ); mob->long_descr = STRALLOC( tmpbuf ); } act( AT_IMMORT, "$N has arrived.", ch, NULL, mob, TO_ROOM ); send_to_char( "Your elite patrol has arrived.\n\r", ch ); mob->top_level = 105; for ( ability = 0 ; ability < MAX_ABILITY ; ability++ ) mob->skill_level[ability] = mob->top_level; mob->hit = mob->top_level*25; mob->max_hit = mob->hit; mob->armor = 100- mob->top_level*3.5; mob->damroll = mob->top_level; mob->hitroll = mob->top_level; if ( ( pObjIndex = get_obj_index( OBJ_VNUM_BLASTECH_E11 ) ) != NULL ) { blaster = create_object( pObjIndex, mob->top_level ); obj_to_char( blaster, mob ); equip_char( mob, blaster, WEAR_WIELD ); } /* for making this more accurate in the future */ if ( mob->mob_clan ) STRFREE ( mob->mob_clan ); if ( ch->pcdata && ch->pcdata->clan ) mob->mob_clan = STRALLOC( ch->pcdata->clan->name ); if (ch->subclass == SUBCLASS_OFFICER) { /* mob->hit *= 2; mob->max_hit *= 2; mob->armor = -1300; mob->damroll *= 2; mob->hitroll *= 2; */ if (mob->hit <= 16000) mob->hit *= 2; else { mob->hit = 32000; mob->max_hit = 32000; } if (mob->hit <= 16000) { mob->hit *= 2; mob->max_hit *= 2; } mob->armor = -1300; if(mob->damroll <= 500) mob->damroll = 1000; else mob->damroll *= 2; if(mob->hitroll <= 500) mob->hitroll = 1000; else mob->hitroll *= 2; } return; } if (ch->backup_mob == MOB_VNUM_PATROL ) { CHAR_DATA *mob; int ability; mob = create_mobile( pMobIndex ); char_to_room( mob, ch->in_room ); if ( ch->pcdata && ch->pcdata->clan ) { char tmpbuf[MAX_STRING_LENGTH]; STRFREE( mob->name ); mob->name = STRALLOC( ch->pcdata->clan->name ); sprintf( tmpbuf , "(%s) %s" , ch->pcdata->clan->name , mob->long_descr ); STRFREE( mob->long_descr ); mob->long_descr = STRALLOC( tmpbuf ); } act( AT_IMMORT, "$N has arrived.", ch, NULL, mob, TO_ROOM ); send_to_char( "Your patrol has arrived.\n\r", ch ); mob->top_level = ch->skill_level[LEADERSHIP_ABILITY]; for ( ability = 0 ; ability < MAX_ABILITY ; ability++ ) mob->skill_level[ability] = mob->top_level; mob->hit = mob->top_level*15; mob->max_hit = mob->hit; mob->armor = 100- mob->top_level*2.5; mob->damroll = mob->top_level/5; mob->hitroll = mob->top_level/5; if ( ( pObjIndex = get_obj_index( OBJ_VNUM_BLASTECH_E11 ) ) != NULL ) { blaster = create_object( pObjIndex, mob->top_level ); obj_to_char( blaster, mob ); equip_char( mob, blaster, WEAR_WIELD ); } /* for making this more accurate in the future */ if ( mob->mob_clan ) STRFREE ( mob->mob_clan ); if ( ch->pcdata && ch->pcdata->clan ) mob->mob_clan = STRALLOC( ch->pcdata->clan->name ); if (ch->subclass == SUBCLASS_OFFICER) { /* mob->hit *= 2; mob->max_hit *= 2; mob->armor = -1300; mob->damroll *= 2; mob->hitroll *= 2; */ if (mob->hit <= 16000) mob->hit *= 2; else { mob->hit = 32000; mob->max_hit = 32000; } if (mob->hit <= 16000) { mob->hit *= 2; mob->max_hit *= 2; } mob->armor = -1300; if(mob->damroll <= 500) mob->damroll = 1000; else mob->damroll *= 2; if(mob->hitroll <= 500) mob->hitroll = 1000; else mob->hitroll *= 2; } return; } else { CHAR_DATA *mob; int ability; mob = create_mobile( pMobIndex ); char_to_room( mob, ch->in_room ); if ( ch->pcdata && ch->pcdata->clan ) { char tmpbuf[MAX_STRING_LENGTH]; STRFREE( mob->name ); mob->name = STRALLOC( ch->pcdata->clan->name ); sprintf( tmpbuf , "(%s) %s" , ch->pcdata->clan->name , mob->long_descr ); STRFREE( mob->long_descr ); mob->long_descr = STRALLOC( tmpbuf ); } act( AT_IMMORT, "$N has arrived.", ch, NULL, mob, TO_ROOM ); send_to_char( "Your guard has arrived.\n\r", ch ); mob->top_level = ch->skill_level[LEADERSHIP_ABILITY]; for ( ability = 0 ; ability < MAX_ABILITY ; ability++ ) mob->skill_level[ability] = mob->top_level; mob->hit = mob->top_level*15; mob->max_hit = mob->hit; mob->armor = 100- mob->top_level*2.5; mob->damroll = mob->top_level/5; mob->hitroll = mob->top_level/5; if ( ( pObjIndex = get_obj_index( OBJ_VNUM_BLASTECH_E11 ) ) != NULL ) { blaster = create_object( pObjIndex, mob->top_level ); obj_to_char( blaster, mob ); equip_char( mob, blaster, WEAR_WIELD ); } /* for making this more accurate in the future */ if ( mob->mob_clan ) STRFREE ( mob->mob_clan ); if ( ch->pcdata && ch->pcdata->clan ) mob->mob_clan = STRALLOC( ch->pcdata->clan->name ); if (ch->subclass == SUBCLASS_OFFICER) { /* mob->hit *= 2; mob->max_hit *= 2; mob->armor = -1300; mob->damroll *= 2; mob->hitroll *= 2; */ if (mob->hit <= 16000) mob->hit *= 2; else { mob->hit = 32000; mob->max_hit = 32000; } if (mob->hit <= 16000) { mob->hit *= 2; mob->max_hit *= 2; } mob->armor = -1300; if(mob->damroll <= 500) mob->damroll = 1000; else mob->damroll *= 2; if(mob->hitroll <= 500) mob->hitroll = 1000; else mob->hitroll *= 2; } } } void do_torture( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int chance, dam; bool fail; if ( !IS_NPC(ch) && ch->pcdata->learned[gsn_torture] <= 0 ) { send_to_char( "Your mind races as you realize you have no idea how to do that.\n\r", ch ); return; } if ( IS_NPC(ch) && IS_AFFECTED( ch, AFF_CHARM ) ) { send_to_char( "You can't do that right now.\n\r", ch ); return; } one_argument( argument, arg ); if ( ch->mount ) { send_to_char( "You can't get close enough while mounted.\n\r", ch ); return; } if ( arg[0] == '\0' ) { send_to_char( "Torture 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( "Are you masacistic or what...\n\r", ch ); return; } if ( IS_AWAKE(victim) ) { send_to_char( "Try stunning or sleeping them first!!!\n\r", ch ); return; } if ( is_safe( ch, victim ) ) return; if ( victim->fighting ) { send_to_char( "You can't torture someone whos in combat.\n\r", ch ); return; } ch->alignment = ch->alignment -= 100; ch->alignment = URANGE( -1000, ch->alignment, 1000 ); WAIT_STATE( ch, skill_table[gsn_torture]->beats ); fail = FALSE; chance = ris_save( victim, ch->skill_level[LEADERSHIP_ABILITY], RIS_PARALYSIS ); if ( chance == 1000 ) fail = TRUE; else fail = saves_para_petri( chance, victim ); if ( !IS_NPC(ch) && !IS_NPC(victim) ) chance = sysdata.stun_plr_vs_plr; else chance = sysdata.stun_regular; if ( !fail && ( IS_NPC(ch) || (number_percent( ) + chance) < ch->pcdata->learned[gsn_torture] ) ) { learn_from_success( ch, gsn_torture ); WAIT_STATE( ch, 2 * PULSE_VIOLENCE ); WAIT_STATE( victim, PULSE_VIOLENCE ); act( AT_SKILL, "$N slowly tortures you. The pain is excruciating.", victim, NULL, ch, TO_CHAR ); act( AT_SKILL, "You torture $N, leaving $M screaming in pain.", ch, NULL, victim, TO_CHAR ); act( AT_SKILL, "$n tortures $N, leaving $M screaming in agony!", ch, NULL, victim, TO_NOTVICT ); dam = dice( ch->skill_level[LEADERSHIP_ABILITY]/10 , 4 ); dam = URANGE( 0, victim->max_hit-10, dam ); victim->hit -= dam; victim->max_hit -= dam; ch_printf( victim, "You lose %d permanent hit points." ,dam); ch_printf( ch, "They lose %d permanent hit points." , dam); } else { act( AT_SKILL, "$N tries to cut off your finger!", victim, NULL, ch, TO_CHAR ); act( AT_SKILL, "You mess up big time.", ch, NULL, victim, TO_CHAR ); act( AT_SKILL, "$n tries to painfully torture $N.", ch, NULL, victim, TO_NOTVICT ); WAIT_STATE( ch, 2 * PULSE_VIOLENCE ); if(!IS_NPC(ch)) { if(IS_SET(ch->pcdata->flags, PCFLAG_BOUND)) return; } global_retcode = multi_hit( victim, ch, TYPE_UNDEFINED ); } return; } void do_jail ( CHAR_DATA *ch , char *argument ) { CHAR_DATA *victim =NULL; CLAN_DATA *clan =NULL; ROOM_INDEX_DATA *jail =NULL; if ( IS_NPC (ch) ) return; if ( !ch->pcdata || ( clan = ch->pcdata->clan ) == NULL ) { send_to_char( "Only members of organizations can jail their enemies.\n\r", ch ); return; } jail = get_room_index( clan->jail ); if ( !jail && clan->mainclan ) jail = get_room_index( clan->mainclan->jail ); if ( !jail ) { send_to_char( "Your orginization does not have a suitable prison.\n\r", ch ); return; } /*********** ** Commented out, to make it so ppl can jail from anywhere ************ if ( jail->area && ch->in_room->area && jail->area != ch->in_room->area && ( !jail->area->planet || jail->area->planet != ch->in_room->area->planet ) ) { send_to_char( "Your orginizations prison is to far away.\n\r", ch ); return; } ************ ** End COmmenting ***********/ if ( ch->mount ) { send_to_char( "You can't do that while mounted.\n\r", ch ); return; } if ( argument[0] == '\0' ) { send_to_char( "Jail who?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, argument ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( victim == ch ) { send_to_char( "That's pointless.\n\r", ch ); return; } if ( IS_NPC(victim) ) { send_to_char( "That would be a waste of time.\n\r", ch ); return; } if ( IS_SET( ch->in_room->room_flags, ROOM_SAFE ) ) { set_char_color( AT_MAGIC, ch ); send_to_char( "This isn't a good place to do that.\n\r", ch ); return; } if ( ch->position == POS_FIGHTING ) { send_to_char( "Interesting combat technique.\n\r" , ch ); return; } if ( ch->position <= POS_SLEEPING ) { send_to_char( "In your dreams or what?\n\r" , ch ); return; } if(!IS_SET(victim->pcdata->flags, PCFLAG_BOUND)) { if ( victim->position >= POS_SLEEPING ) { send_to_char( "You will have to stun or bind them first.\n\r" , ch ); return; } } send_to_char( "You have them escorted off to jail.\n\r", ch ); act( AT_ACTION, "You wake up in a jail cell.\n\r", ch, NULL, victim, TO_VICT ); act( AT_ACTION, "$n has $N escorted away.\n\r", ch, NULL, victim, TO_NOTVICT ); char_from_room ( victim ); char_to_room ( victim , jail ); act( AT_ACTION, "The door opens briefly as $n is shoved into the room.\n\r", victim, NULL, NULL, TO_ROOM ); learn_from_success( ch , gsn_jail ); gain_exp( ch,2000000, LEADERSHIP_ABILITY); return; }