#include "include.h" void spell_minion_tactics( int sn, int level, CHAR_DATA *ch, void *vo, int target ) { CHAR_DATA *gch; for ( gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room ) { if ( !is_same_group(gch, ch) || !(IS_NPC(gch))) continue; if ((IS_AFFECTED(gch,AFF_CHARM)) && (gch->pIndexData->vnum==MOB_VNUM_ZOMBIE) && (gch->master == ch)) { act("$n's eyes widen with newly-acquired tactics.", gch, NULL, NULL, TO_ROOM ); send_to_char("Your eyes widen with newly-acquired tactics.\n\r", gch ); SET_BIT(gch->off_flags,OFF_BASH); SET_BIT(gch->off_flags,OFF_TRIP); SET_BIT(gch->off_flags,OFF_CRUSH); } } send_to_char( "Ok.\n\r", ch ); return; } void spell_minion_sanc( int sn, int level, CHAR_DATA *ch, void *vo, int target ) { CHAR_DATA *gch; sn = skill_lookup("sanctuary"); for ( gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room ) { if ( !is_same_group(gch, ch) || !(IS_NPC(gch))) continue; if ((IS_AFFECTED(gch,AFF_CHARM)) && (gch->pIndexData->vnum==MOB_VNUM_ZOMBIE) && (gch->master == ch)) { spell_sanctuary(sn,ch->level,ch,gch,TARGET_CHAR); } } spell_sanctuary(sn,ch->level,ch,ch,TARGET_CHAR); send_to_char( "Ok.\n\r", ch ); return; } void spell_minion_flight( int sn, int level, CHAR_DATA *ch, void *vo, int target ) { CHAR_DATA *gch; sn= skill_lookup("fly"); for ( gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room ) { if ( !is_same_group(gch, ch) || !(IS_NPC(gch))) continue; if ((IS_AFFECTED(gch,AFF_CHARM)) && (gch->pIndexData->vnum==MOB_VNUM_ZOMBIE) && (gch->master == ch)) { spell_fly(sn,ch->level,ch,gch,TARGET_CHAR); } } spell_fly(sn,ch->level,ch,ch,TARGET_CHAR); send_to_char( "Ok.\n\r", ch ); return; } void spell_minion_sneak( int sn, int level, CHAR_DATA *ch, void *vo, int target ) { CHAR_DATA *gch; for ( gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room ) { if ( !is_same_group(gch, ch) || !(IS_NPC(gch))) continue; if ((IS_AFFECTED(gch,AFF_CHARM)) && (gch->pIndexData->vnum==MOB_VNUM_ZOMBIE) && (gch->master == ch)) { act("$n begins moving silently.", gch, NULL, NULL, TO_ROOM ); send_to_char("You begin moving silently.\n\r", gch ); SET_BIT(gch->affected_by,AFF_SNEAK); } } SET_BIT(ch->affected_by,AFF_SNEAK); act("$n begins moving silently.", ch, NULL, NULL, TO_ROOM ); send_to_char("You begin moving silently.\n\r", ch ); return; } void spell_minion_recall( int sn, int level, CHAR_DATA *ch, void *vo, int target ) { CHAR_DATA *gch, *gch_next; ROOM_INDEX_DATA *room; sn= skill_lookup("word of recall"); room = ch->in_room; spell_word_of_recall(sn,ch->level,ch,ch,TARGET_CHAR); for ( gch = room->people; gch != NULL; gch = gch_next) { gch_next = gch->next_in_room; if ( !is_same_group(gch, ch) || !(IS_NPC(gch))) continue; if ((IS_AFFECTED(gch,AFF_CHARM)) && (gch->pIndexData->vnum==MOB_VNUM_ZOMBIE) && (gch->master == ch)) { char_from_room(gch); char_to_room(gch,ch->in_room); act("$n appears in the room.", gch, NULL, NULL, TO_ROOM ); } } send_to_char( "Ok.\n\r", ch ); return; } void spell_minion_haste( int sn, int level, CHAR_DATA *ch, void *vo, int target ) { CHAR_DATA *gch; sn= skill_lookup("haste"); for ( gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room ) { if ( !is_same_group(gch, ch) || !(IS_NPC(gch))) continue; if ((IS_AFFECTED(gch,AFF_CHARM)) && (gch->pIndexData->vnum==MOB_VNUM_ZOMBIE) && (gch->master == ch)) { spell_haste(sn,ch->level,ch,gch,TARGET_CHAR); } } spell_haste(sn,ch->level,ch,ch,TARGET_CHAR); send_to_char( "Ok.\n\r", ch ); return; } void spell_minion_trans( int sn, int level, CHAR_DATA *ch, void *vo, int target ) { CHAR_DATA *gch; sn= skill_lookup("pass door"); for ( gch = ch->in_room->people; gch != NULL; gch = gch->next_in_room ) { if ( !is_same_group(gch, ch) || !(IS_NPC(gch))) continue; if ((IS_AFFECTED(gch,AFF_CHARM)) && (gch->pIndexData->vnum==MOB_VNUM_ZOMBIE) && (gch->master == ch)) { spell_pass_door(sn,ch->level,gch,gch,TARGET_CHAR); } } spell_pass_door(sn,ch->level,ch,ch,TARGET_CHAR); send_to_char( "Ok.\n\r", ch ); return; } void do_lich( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; if (IS_NPC(ch)) return; argument = one_argument( argument, arg1 ); if ((ch->level < 56 && ch->pcdata->induct != CABAL_LEADER) || IS_NPC(ch)) { send_to_char("Huh?\n\r", ch); return; } if ( arg1[0] == '\0' ) { buf[0] = '\0'; send_to_char( "Syntax: lich <char>\n\r",ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { send_to_char("They aren't playing.\n\r", ch); return; } if (victim->race==race_lookup("lich")) { send_to_char("They are lich already.\n\r", ch); return; } sprintf(buf,"%s has been qualified into Lich.\n\r", victim->name); send_to_char(buf,ch); sprintf(buf,"You have been qualified into Lich!\n\r"); send_to_char(buf,victim); victim->pcdata->learned[skill_lookup("minion tactics")] = 1; victim->pcdata->learned[skill_lookup("minion sanc")] =1; victim->pcdata->learned[skill_lookup("minion flight")] =1; victim->pcdata->learned[skill_lookup("minion sneak")] =1; victim->pcdata->learned[skill_lookup("minion recall")] =1; victim->pcdata->learned[skill_lookup("minion haste")] =1; victim->pcdata->learned[skill_lookup("minion trans")] =1; victim->race = race_lookup("lich"); victim->perm_stat[STAT_STR]=pc_race_table[ch->race].max_stats[STAT_STR]; victim->perm_stat[STAT_INT]=pc_race_table[ch->race].max_stats[STAT_INT]; victim->perm_stat[STAT_WIS]=pc_race_table[ch->race].max_stats[STAT_WIS]; victim->perm_stat[STAT_DEX]=pc_race_table[ch->race].max_stats[STAT_DEX]; victim->perm_stat[STAT_CON]=pc_race_table[ch->race].max_stats[STAT_CON]; victim->mod_stat[STAT_STR]=0; victim->mod_stat[STAT_INT]=0; victim->mod_stat[STAT_WIS]=0; victim->mod_stat[STAT_DEX]=0; victim->mod_stat[STAT_CON]=0; sprintf(buf, "Your stats are Str: %2d Int: %2d Wis: %2d Dex: %2d Con: %2d\n\r", ch->perm_stat[STAT_STR], ch->perm_stat[STAT_INT], ch->perm_stat[STAT_WIS], ch->perm_stat[STAT_DEX], ch->perm_stat[STAT_CON]); send_to_char(buf,victim); }