#if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" #include "player.h" void do_enroll( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_SHATAN)) { send_to_char("Huh?\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Enroll who in the ways of the devils.\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_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "You already follow the all mighty satan.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_MAGE)) { send_to_char( "You are unnable to transform a mage.\n\r", ch ); return; } if ( IS_CLASS(victim, CLASS_HIGHLANDER) ) { send_to_char( "You are unnable to transform a highlander.\n\r", ch ); return; } if (victim->max_hit < 5001) { act("$n tried to enroll you in the arts of the shatan, but you do not have the required 5,000 hitpoints.", ch, NULL, victim, TO_VICT); act("$N does not have the 5,000 uired hp to enroll in the ranks of the shatan.", ch, NULL, victim, TO_CHAR); return; } act("You begin to inform $N in the way of the Shatan.", ch, NULL, victim, TO_CHAR); act("$n has enrolled $N into the ranks of the Shatan.", ch, NULL, victim, TO_NOTVICT); act("$n begins to chant as your body begins to transform into a follower of the shatan.", ch, NULL, victim, TO_VICT); victim->class=CLASS_SHATAN; victim->pcdata->powers[SHATAN_POWER] = 0; victim->special=0; if (IS_CLASS(victim, CLASS_VAMPIRE)) do_mortalvamp(victim,""); REMOVE_BIT(victim->act, PLR_HOLYLIGHT); REMOVE_BIT(victim->act, PLR_WIZINVIS); REMOVE_BIT(victim->special, SPC_SIRE); REMOVE_BIT(victim->special, SPC_ANARCH); victim->pcdata->stats[UNI_RAGE] = 0; SET_BIT(victim->act, PLR_HOLYLIGHT); free_string(victim->morph); victim->clan=str_dup(""); free_string(victim->clan); victim->clan=str_dup(""); free_string(victim->lord); save_char_obj(ch); save_char_obj(victim); return; } void do_warps( CHAR_DATA *ch, char *argument ) { char buf[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_SHATAN)) { send_to_char("Huh?\n\r",ch); return; } send_to_char("#2-=#0(#6**#0)#2=- #6Attained Warps#2-=#0(#6**#0)#2=-#n\n\r",ch); sprintf(buf, (".%s."), ch->pcdata->warp); send_to_char(buf, ch); if (IS_SET(ch->pcdata->warp, WARP_CBODY )) send_to_char("Your body is protected by a indestructable crystal shell.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_SBODY )) send_to_char("Your skin is as hard as steel.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_STRONGARMS )) send_to_char("Your arms are incredibly strong.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_STRONGLEGS )) send_to_char("Your legs are incredibly strong.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_VENOMTONG )) send_to_char("Your tongue is long and venomous.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_SPIKETAIL )) send_to_char("Your tail fires deadly spikes during combat.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_BADBREATH )) send_to_char("Your breath is putrid and deadly.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_QUICKNESS )) send_to_char("You have incredible speed.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_STAMINA )) send_to_char("You have increased stamina,reducing the damage you take.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_HUNT )) send_to_char("Your heightened senses enable you to hunt people.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_DEVOUR )) send_to_char("You have the ability to devour your opponents, sending them into the pits of Hell.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_TERROR )) send_to_char("Your features are so horrid that they may stun those who look at you.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_REGENERATE )) send_to_char("Your body has the ability to regenerate incredibly fast.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_STEED )) send_to_char("Your mounts transform into hideous shatans.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_WEAPON )) send_to_char("You have the power to transform into a deadly battle axe.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_INFIRMITY )) send_to_char("Your body has been afflicted by a terrible infirmity.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_GBODY )) send_to_char("Your skin is made of a fragile glass.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_SCARED )) send_to_char("You are incredibly scared of combat.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_MAGMA )) send_to_char("Your body is composed of deadly magma.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_WEAK )) send_to_char("Your muscles are severely weakened.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_SLOW )) send_to_char("Your body moves very slowly.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_VULNER )) send_to_char("Your skin is very vulnerable to magic.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_SHARDS )) send_to_char("Your skin is covered with shards of ice.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_WINGS )) send_to_char("A pair of leathery wings protrude from your back.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_CLUMSY )) send_to_char("You are incredibly clumsy, enabling you to be disarmed.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_STUPID )) send_to_char("Your intelligence is extremely low, preventing you from casting spells.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_FORK )) send_to_char("You have a fork stuck in your nose.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_KNIFE )) send_to_char("You have a knife hanging out of your ear.\n\r",ch); if (IS_SET(ch->pcdata->warp, WARP_SALADBOWL )) send_to_char("Your head is made out of a salad bowl.\n\r",ch); if (ch->pcdata->warp < 1) send_to_char("You haven't obtained any warp powers.\n\r",ch); return; } void do_redeem( CHAR_DATA *ch, char *argument ) { int warpnum = number_range(1,19); int newwarp = 0; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_SHATAN)) { send_to_char("Huh?\n\r", ch); return; } if (ch->pcdata->stats[SHATAN_CURRENT] < 20000 ) { send_to_char("You need 20000 shatan points to redeem warps!\n\r",ch); return; } { if (warpnum == 1) newwarp = WARP_CBODY; else if (warpnum == 2) newwarp = WARP_SBODY; else if (warpnum == 3) newwarp = WARP_STRONGARMS; else if (warpnum == 4) newwarp = WARP_STRONGLEGS; else if (warpnum == 5) newwarp = WARP_VENOMTONG; else if (warpnum == 6) newwarp = WARP_SPIKETAIL; else if (warpnum == 7) newwarp = WARP_BADBREATH; else if (warpnum == 8) newwarp = WARP_QUICKNESS; else if (warpnum == 9) newwarp = WARP_STAMINA; else if (warpnum == 11) newwarp = WARP_HUNT; else if (warpnum == 12) newwarp = WARP_DEVOUR; else if (warpnum == 13) newwarp = WARP_TERROR; else if (warpnum == 14) newwarp = WARP_REGENERATE; else if (warpnum == 15) newwarp = WARP_STEED; else if (warpnum == 16) newwarp = WARP_WEAPON; else if (warpnum == 17) newwarp = WARP_SHARDS; else if (warpnum == 18) newwarp = WARP_WINGS; else if (warpnum == 19) newwarp = WARP_MAGMA; } if (ch->pcdata->warp == 12877823) newwarp = 0; if (IS_SET(ch->pcdata->warp, newwarp) && ch->pcdata->warp != 12877823) { do_redeem(ch,""); return; } { if (IS_SET(ch->pcdata->warp, WARP_INFIRMITY)) { REMOVE_BIT(ch->pcdata->warp, WARP_INFIRMITY); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_GBODY)) { REMOVE_BIT(ch->pcdata->warp, WARP_GBODY); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_SCARED)) { REMOVE_BIT(ch->pcdata->warp, WARP_SCARED); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_WEAK)) { REMOVE_BIT(ch->pcdata->warp, WARP_WEAK); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_SLOW)) { REMOVE_BIT(ch->pcdata->warp, WARP_SLOW); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_VULNER)) { REMOVE_BIT(ch->pcdata->warp, WARP_VULNER); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_CLUMSY)) { REMOVE_BIT(ch->pcdata->warp, WARP_CLUMSY); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_STUPID)) { REMOVE_BIT(ch->pcdata->warp, WARP_STUPID); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_SPOON)) { REMOVE_BIT(ch->pcdata->warp, WARP_SPOON); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_FORK)) { REMOVE_BIT(ch->pcdata->warp, WARP_FORK); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else if (IS_SET(ch->pcdata->warp, WARP_KNIFE)) { REMOVE_BIT(ch->pcdata->warp, WARP_KNIFE); SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 10000; send_to_char("You pray to Satan and a warp is cleansed.\n\r",ch); save_char_obj(ch); return; } else send_to_char("You have no evil warps to redeem!\n\r",ch); } return; } void do_obtain( CHAR_DATA *ch, char *argument ) { int newwarp = 0; int warpnum = number_range(1,30); if (IS_NPC(ch)) return; if ( !IS_CLASS(ch, CLASS_SHATAN)) { send_to_char("Huh?\n\r", ch); return; } if (ch->pcdata->stats[SHATAN_CURRENT] < 15000) { send_to_char("You need 15000 shatan points to obtain a new warp!\n\r",ch); return; } if (ch->pcdata->warpcount >= 5) { send_to_char("You have already obtained as many warps as possible.\n\r",ch); return; } if (warpnum == 1) newwarp = WARP_CBODY; else if (warpnum == 2) newwarp = WARP_SBODY; else if (warpnum == 3) newwarp = WARP_STRONGARMS; else if (warpnum == 4) newwarp = WARP_STRONGLEGS; else if (warpnum == 5) newwarp = WARP_VENOMTONG; else if (warpnum == 6) newwarp = WARP_SPIKETAIL; else if (warpnum == 7) newwarp = WARP_BADBREATH; else if (warpnum == 8) newwarp = WARP_QUICKNESS; else if (warpnum == 9) newwarp = WARP_STAMINA; else if (warpnum == 11) newwarp = WARP_HUNT; else if (warpnum == 12) newwarp = WARP_DEVOUR; else if (warpnum == 13) newwarp = WARP_TERROR; else if (warpnum == 14) newwarp = WARP_REGENERATE; else if (warpnum == 15) newwarp = WARP_STEED; else if (warpnum == 16) newwarp = WARP_WEAPON; else if (warpnum == 17) newwarp = WARP_INFIRMITY; else if (warpnum == 18) newwarp = WARP_GBODY; else if (warpnum == 19) newwarp = WARP_SCARED; else if (warpnum == 20) newwarp = WARP_MAGMA; else if (warpnum == 21) newwarp = WARP_WEAK; else if (warpnum == 22) newwarp = WARP_SLOW; else if (warpnum == 23) newwarp = WARP_VULNER; else if (warpnum == 24) newwarp = WARP_SHARDS; else if (warpnum == 25) newwarp = WARP_WINGS; else if (warpnum == 26) newwarp = WARP_CLUMSY; else if (warpnum == 27) newwarp = WARP_STUPID; else if (warpnum == 28) newwarp = WARP_SPOON; else if (warpnum == 29) newwarp = WARP_FORK; else if (warpnum == 30) newwarp = WARP_KNIFE; if (IS_SET(ch->pcdata->warp, newwarp)) { do_obtain(ch,""); return; } SET_BIT(ch->pcdata->warp, newwarp); ch->pcdata->stats[SHATAN_CURRENT] -= 15000; ch->pcdata->warpcount += 1; send_to_char("You have obtained a new warp!\n\r",ch); save_char_obj(ch); return; } void do_legions( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; char lord[MAX_INPUT_LENGTH]; CHAR_DATA *gch; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_SHATAN)) { send_to_char("Huh?\n\r",ch); return; } if (IS_CLASS(ch, CLASS_SHATAN)) strcpy(lord,ch->name); else strcpy(lord,ch->lord); sprintf( buf, "The followers of %s:\n\r", lord ); send_to_char( buf, ch ); send_to_char("#G[ #gName #G] [ #gHits #G] [ #gMana #G] [ #gMove #G][#gPower#G]\n\r",ch); for ( gch = char_list; gch != NULL; gch = gch->next ) { if ( IS_NPC(gch) ) continue; if ( !IS_CLASS(gch, CLASS_SHATAN)) continue; if ( !str_cmp(ch->clan,gch->clan) ) { sprintf( buf, "#8[#1%-12s#8] [#1%-6d#8] [#1%-6d#8] [#1%-6d#8] [#1%7d#8]\n\r", capitalize( gch->name ), gch->hit,gch->mana,gch->move, gch->pcdata->stats[SHATAN_CURRENT]); send_to_char( buf, ch ); } } return; } void do_leech(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim = NULL; char buf[MAX_STRING_LENGTH]; if (!IS_CLASS(ch,CLASS_SHATAN)) { send_to_char("Huh?\n\r",ch); return; } if (argument[0] == '\0') { send_to_char("Who's life do you wish to leech off of?\n\r", ch); return; } if ((victim = get_char_room(ch, argument)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (is_safe(ch, victim)) return; WAIT_STATE(ch, 10); act("$n stares intently at $N.", ch, NULL, victim, TO_NOTVICT); act("You stare intently at $N.", ch, NULL, victim, TO_CHAR); act("$n stares intently at you.", ch, NULL, victim, TO_VICT); if (victim->hit >= 300) { sh_int power; sh_int dam; power = 100; dam = dice(power, power + 2); if (dam > 300) dam = 300 + (dam / 10); if (dam < 0) dam = 0; if (dam > ch->max_hit) dam = (ch->max_hit / 2); if (dam > 1500) dam = 1500; victim->hit -= dam; ch->hit += dam; if (ch->hit >= ch->max_hit + 250) ch->hit = ch->max_hit + 250; sprintf(buf,"#1You absorb %d hitpoints.#n\n\r",dam); send_to_char(buf,ch); sprintf(buf,"#1%s absorbed %d of your hitpoints!#n\n\r",ch->name,dam); send_to_char(buf,victim); } else send_to_char("Nothing seemed to happen.\n\r",ch); return; }