#include "include.h" void do_myell args((CHAR_DATA *victim, char buf[MAX_STRING_LENGTH])); DECLARE_DO_FUN(do_myell); void do_chameleon( CHAR_DATA *ch, char *argument ) { int sn_fog, sn_fire; sn_fog = skill_lookup("faerie fog"); sn_fire = skill_lookup("faerie fire"); if (is_affected(ch,sn_fog) || is_affected(ch,sn_fire) || is_affected(ch,gsn_dew)) { send_to_char("You stand out to much to blend with your surroundings.\n\r",ch); return; } if ((ch->in_room->sector_type == SECT_CITY) || (ch->in_room->sector_type == SECT_INSIDE)) { send_to_char("You would feel too dirty if you took on the colors of civilization.\n\r",ch); return; } if ( IS_AFFECTED(ch, AFF_CAMOUFLAGE) ) return send_to_char("You are already camouflaged.\n\r",ch); { send_to_char( "You change color to blend with your surroundings.\n\r", ch ); SET_BIT(ch->affected_by, AFF_CAMOUFLAGE); check_improve(ch,gsn_chameleon,TRUE,1); WAIT_STATE(ch,12); } return; } void do_insectswarm( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int chance; AFFECT_DATA af; char buf[MAX_STRING_LENGTH]; one_argument(argument,arg); if ( (chance = get_skill(ch,gsn_insect_swarm)) == 0 || (!IS_NPC(ch) && ch->level < skill_table[gsn_insect_swarm].skill_level[ch->class])) { send_to_char("You don't know how to do that.\n\r",ch); return; } if (cabal_down(ch,CABAL_BRIAR)) { send_to_char("You cannot find the cabal power within you!\n\r",ch); return; } if (arg[0] == '\0') { send_to_char("Call insects on who?\n\r",ch); return; } if ((victim = get_char_room(ch,arg)) == NULL) { send_to_char("They aren't here.\n\r",ch); return; } if (is_affected(victim,gsn_insect_swarm)) { send_to_char("They are already being swarmed.\n\r",ch); return; } if (ch->mana < 50) { send_to_char("You can't find the energy.\n\r",ch); return; } if (victim == ch) { send_to_char("You can't call that on yourself!\n\r",ch); return; } if (is_safe(ch,victim)) return; if(!(ch->in_room->sector_type == SECT_FIELD || ch->in_room->sector_type == SECT_FOREST)) { send_to_char("You must be in more of a wilderness area to call insects.\n\r",ch); return; } chance += (ch->drain_level + ch->level - victim->level - victim->drain_level) * 2; if (number_percent( ) < (get_skill(ch,gsn_insect_swarm) - 15)) { sprintf(buf,"Help! %s is calling down insects on me!",PERS(ch,victim)); do_myell(victim,buf); WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 50; init_affect(&af); af.where = TO_AFFECTS; af.aftype = AFT_POWER; af.type = gsn_insect_swarm; af.level = ch->level; af.duration = ch->level / 6; af.location = APPLY_DEX; af.modifier = -3; af.bitvector = 0; affect_to_char( victim, &af ); send_to_char( "You frantically wave your arms as a cloud of insects descends upon you.\n\r", victim ); act("$n waves his arms as a cloud of insects descends upon him.",victim,NULL,NULL,TO_ROOM); check_improve(ch,gsn_insect_swarm,TRUE,1); return; } else { WAIT_STATE(ch,PULSE_VIOLENCE); ch->mana -= 25; send_to_char("You fail to call down insects.\n\r",ch); check_improve(ch,gsn_insect_swarm,FALSE,1); } } void spell_beast_call(int sn, int level, CHAR_DATA *ch, void *vo, int target) { CHAR_DATA *gch; CHAR_DATA *mob, *victim = (CHAR_DATA *) vo, *wolf; char buf[MAX_STRING_LENGTH]; if (cabal_down(ch,CABAL_BRIAR)) { send_to_char("You cannot find the cabal power within you!\n\r",ch); return; } for(wolf=char_list;wolf!=NULL;wolf=wolf->next) { if((wolf->master == ch) && (wolf->pIndexData->vnum == MOB_VNUM_BEAST)) { return send_to_char("You can't call for more than one beast at a time.\n\r",ch); break; } else { break; } } for (gch = char_list; gch != NULL; gch = gch->next) { if (IS_NPC(gch) && IS_AFFECTED(gch,AFF_CHARM) && gch->master == ch && gch->pIndexData->vnum == MOB_VNUM_BEAST) { send_to_char("You cannot call upon more than one beast at a time!\n\r",ch); return; } } if(!(ch->in_room->sector_type == SECT_CITY || ch->in_room->sector_type ==SECT_INSIDE)) { mob = create_mobile(get_mob_index(MOB_VNUM_BEAST)); mob->level = ch->level; mob->max_hit = dice(ch->level, 2*ch->level); mob->hit = mob->max_hit; mob->damroll = dice(ch->level,3); char_to_room(mob,ch->in_room); add_follower(mob,ch); mob->leader = ch; SET_BIT(mob->affected_by,AFF_CHARM); act("You call out to nature and $N responds.",ch,0,mob,TO_CHAR); act("$N responds to $n's call!",ch,0,mob,TO_ROOM); if(!IS_NPC(victim)) { sprintf(buf,"Die, %s, you sorcerous dog!",ch->name); do_myell(victim,buf); } multi_hit(mob,victim,TYPE_UNDEFINED); return; } else { return send_to_char("You must be in a wilderness area to call beasts.\n\r",ch); } } void spell_wall_of_thorns(int sn, int level, CHAR_DATA *ch, void *vo, int target) { AFFECT_DATA af; ROOM_AFFECT_DATA raf; if (cabal_down(ch,CABAL_BRIAR)) { send_to_char("You cannot find the cabal power within you!\n\r",ch); return; } if ( is_affected( ch, sn ) ) { send_to_char("It's too soon to make another wall of thorns.\n\r", ch); return; } if(!(ch->in_room->sector_type == SECT_FIELD || ch->in_room->sector_type == SECT_FOREST)) { send_to_char("There isn't enough foliage here to call a wall of thorns.\n\r",ch); return; } if ( is_affected_room( ch->in_room, sn )) { send_to_char("It's already here.\n\r",ch); return; } if (number_range(1,100) > ch->pcdata->learned[sn]) { send_to_char("You attempt to make the wall of thorns but fail.\n\r",ch); } init_affect(&af); af.where = TO_AFFECTS; af.aftype = AFT_POWER; af.type = sn; af.level = ch->level; af.duration = 48; af.modifier = 0; af.bitvector = 0; affect_to_char( ch, &af ); init_affect(&af); raf.where = TO_ROOM_AFFECTS; raf.aftype = AFT_POWER; raf.type = sn; raf.level = ch->level; raf.duration = ch->level/5; raf.modifier = 0; raf.bitvector = AFF_ROOM_WALL_THORNS; affect_to_room( ch->in_room, &raf ); send_to_char("You command a wall of thorns to grow to attack intruders.\n\r", ch); act("$n commands a wall of thorns to grow to attack intruders.\n\r",ch,NULL,NULL,TO_ROOM); }