Exemplo n.º 1
0
void soul_sword (CHAR_DATA *ch)
{
	//Soul Sword can rarely kill victims outright, and does 1 dmg, and is VERY unlikely to hit. UNGODLY Expensive
	CHAR_DATA *victim;
	OBJ_DATA *katana;
	char buf[MAX_STRING_LENGTH];
	int thebonus = 0;
	
	if (IS_NPC(ch))		return;

	katana = get_eq_char(ch, WEAR_WIELD);
	
	if ((victim = ch->fighting) == NULL)
	{
		send_to_char("You find no need for this now.\n\r",ch);
		return;
	}
	
	if (IS_NPC(victim))		thebonus = 45;
		else				thebonus = 7;
	if (ch->mana < 30000)
	{
		send_to_char("You have not the 30000 mana power to use this.\n\r",ch);
		return;
	}
	
	if ((katana == NULL) || (katana->pIndexData->vnum != 33176))
	{
		send_to_char("Without a proper katana the energy will destroy your weapon.\n\r",ch);
		return;
	}
	ch->mana -= 30000;
	send_to_char("You channel mystical energy into your katana.\n\r",ch);
	do_say(ch,"#0SOUL #nSWORD!");
	
	act("A bolt of light shoots out of your katana and into $N",ch, NULL, victim, TO_CHAR);
	act("A bolt of light shoots out of $n's katana and into you!", ch, NULL, victim, TO_VICT);
	act("A bolt of light shoots out of $n's katana and into $N!", ch, NULL, victim, TO_NOTVICT);

	if (number_range(0,250) > (4 + thebonus))  // Was .5% now it's 5%/20%
	{
		act("Your attack was ineffective.", ch, NULL, victim, TO_CHAR);
		act("$n looks confused as nothing happens.", ch, NULL, NULL, TO_ROOM);
		multi_hit( ch, victim, TYPE_UNDEFINED );
		WAIT_STATE(ch, (PULSE_VIOLENCE * 5));
		return;
	}
	
	xprintf(buf,"$N screams as $E is ripped apart by the dark energy. #R[#y#b MORTAL #n#R]#n");
	act(buf, ch, NULL, victim, TO_CHAR);
	xprintf(buf,"$n looks on as you start screaming while dark energy rips you apart from the inside out. #R[#y#b MORTAL #n#R]#n");
	act(buf, ch, NULL, victim, TO_VICT);
	send_to_char("You crumple to the ground.\n\r", victim);
	act("$n looks on as $N starts screaming.  Weakened $N crumples to the ground.", ch, NULL, victim, TO_NOTVICT);
	WAIT_STATE(ch, (PULSE_VIOLENCE * 5));
	victim->hit = -10;
	hurt_person(ch, victim, 1);
	return;
}
Exemplo n.º 2
0
void drain_sword (CHAR_DATA *ch)
{
	//Drain Sword sucks health from a victim, and is moderately likely to hit. Avg Expense, Low Dmg
	CHAR_DATA *victim;
	OBJ_DATA *katana;
	char buf[MAX_STRING_LENGTH];
	int dmg;
	int heal;
	
	if (IS_NPC(ch))	return;

	katana = get_eq_char(ch, WEAR_WIELD);
	
	if ((victim = ch->fighting) == NULL)
	{
		send_to_char("You find no need for this now.\n\r",ch);
		return;
	}
	
	if (ch->mana < 4000)
	{
		send_to_char("You have not the 4000 mystical power to use this.\n\r",ch);
		return;
	}
	
	if ((katana == NULL) || (katana->pIndexData->vnum != 33176))
	{
		send_to_char("Without a proper katana the energy will destroy your weapon.\n\r",ch);
		return;
	}
	ch->mana -= 4000;
	send_to_char("You channel mystical energy into your katana.\n\r",ch);
	do_say(ch,"#nD#0R#yA#0I#nN #nSWORD!");
	send_to_char("A wave of energy launches itself from your katana.\n\r",ch);
	act("A wave of energy launches itself from $n's katana!", ch, NULL, NULL, TO_ROOM);

	if (number_range(0,100) < 20)
	{
		act("Your wave of energy goes through $N, continues on a bit then fades.", ch, NULL, victim, TO_CHAR);
		act("The wave of energy goes through you, continues on a bit then fades.", ch, NULL, victim, TO_VICT);
		act("The wave of energy goes through $N, continues on a bit then fades.", ch, NULL, victim, TO_NOTVICT);
		return;
	}

	dmg = number_range(ch->wpn[1], ch->wpn[1] * 2);
	heal = number_range(dmg / 3, dmg / 2);
	
	xprintf(buf,"Your wave of energy enters $N's body and drains %d health painfully from $N. #R[#R#b %d #n#R]#n", heal, dmg);
	act(buf, ch, NULL, victim, TO_CHAR);
	xprintf(buf,"$n's wave of energy enters your body and drains you painfully. #R[#R#b %d #n#R]#n", dmg);
	act(buf, ch, NULL, victim, TO_VICT);
	act("$n's wave of energy enters $N's body causing $N to look weak.", ch, NULL, victim, TO_NOTVICT);
	hurt_person(ch, victim, dmg);
	ch->hit += heal;
	if (ch->hit > ch->max_hit)	ch->hit = ch->max_hit;	
	WAIT_STATE(ch, (PULSE_VIOLENCE * 3));
	return;
}
Exemplo n.º 3
0
void fire_sword (CHAR_DATA *ch)
{
	//Flame Cone Sword sets victim aflame, and is VERY likely to hit. More Expense, Low Dmg
	CHAR_DATA *victim;
	OBJ_DATA *katana;
	char buf[MAX_STRING_LENGTH];
	int dmg;
	
	if (IS_NPC(ch))	return;

	katana = get_eq_char(ch, WEAR_WIELD);
	
	if ((victim = ch->fighting) == NULL)
	{
		send_to_char("You find no need for this now.\n\r",ch);
		return;
	}
	
	if (ch->mana < 3500)
	{
		send_to_char("You have not the 3500 mystical power to use this.\n\r",ch);
		return;
	}
	
	if ((katana == NULL) || (katana->pIndexData->vnum != 33176))
	{
		send_to_char("Without a proper katana the energy will destroy your weapon.\n\r",ch);
		return;
	}
	ch->mana -= 3500;
	send_to_char("You channel mystical energy into your katana.\n\r",ch);
	do_say(ch,"#rF#RIR#rE #nSWORD!");
	send_to_char("A tremendous cone of flame shoots from your katana.\n\r",ch);
	act("A tremendous cone of flame shoots from $n's katana!", ch, NULL, NULL, TO_ROOM);

	if (number_range(0,100) < 5)
	{
		act("Your cone of flame flashes past $N and scorches the ground.", ch, NULL, victim, TO_CHAR);
		act("The cone of flame flashes past you and scorches the ground.", ch, NULL, victim, TO_VICT);
		act("The cone of flame flashes past $N and scorches the ground.", ch, NULL, victim, TO_NOTVICT);
		return;
	}

	dmg = number_range(ch->wpn[1], ch->wpn[1] * 2);
	
	xprintf(buf,"Your cone of flame engulfs $N's in a sheet of flame. #R[#R#b %d #n#R]#n", dmg);
	act(buf, ch, NULL, victim, TO_CHAR);
	xprintf(buf,"$n's cone of flame engulfs you in a sheet of flame. #R[#R#b %d #n#R]#n", dmg);
	act(buf, ch, NULL, victim, TO_VICT);
	act("$n's engulfs $N's in a sheet of flame.", ch, NULL, victim, TO_NOTVICT);
	hurt_person(ch, victim, dmg);	
	WAIT_STATE(ch, (PULSE_VIOLENCE * 3));
	if (!IS_SET(victim->affected_by, AFF_FLAMING))
		SET_BIT(victim->affected_by, AFF_FLAMING);
	return;
}
Exemplo n.º 4
0
void lightning_sword (CHAR_DATA *ch)
{
	//Lightning Stuns Victim and is fairly likely to hit, Avg Expense, Avg Damage

	CHAR_DATA *victim;
	OBJ_DATA *katana;
	char buf[MAX_STRING_LENGTH];
	int dmg;
	
	if (IS_NPC(ch))	return;
	
	katana = get_eq_char(ch, WEAR_WIELD);
	
	if ((victim = ch->fighting) == NULL)
	{
		send_to_char("You find no need for this now.\n\r",ch);
		return;
	}
	
	if (ch->mana < 2500)
	{
		send_to_char("You have not the 2500 mana to use this.\n\r",ch);
		return;
	}
	
	if ((katana == NULL) || (katana->pIndexData->vnum != 33176))
	{
		send_to_char("Without a proper katana the energy will destroy your weapon.\n\r",ch);
		return;
	}
	ch->mana -= 2500;
	send_to_char("You channel mystical energy into your katana.\n\r",ch);
	do_say(ch,"#b#cL#CI#cG#CH#cT#CN#cI#CN#cG #nSWORD!");
	send_to_char("A humongous bolt of lightning blasts from your katana.\n\r",ch);
	act("A humongous bolt of lightning blasts from $n's katana!", ch, NULL, NULL, TO_ROOM);

	if (number_range(0,100) < 16)
	{
		act("Your lightning blast flies past $N and is absorbed by the ground.", ch, NULL, victim, TO_CHAR);
		act("The lightning blast slams into the ground and is absorbed.", ch, NULL, NULL, TO_ROOM);
		return;
	}

	dmg = number_range(ch->wpn[1], ch->wpn[1] * 3);
	
	xprintf(buf,"Your lightning blast slams into $N's and crackles around $S body sending them sprawling. #R[#C#b %d #n#R]#n", dmg);
		act(buf, ch, NULL, victim, TO_CHAR);
	xprintf(buf,"$n's lightning blast slams into you and crackles around your body sending you sprawling. #R[#C#b %d #n#R]#n", dmg);
		act(buf, ch, NULL, victim, TO_VICT);
		act("$n's lightning blast slams into $N's and crackles around $S body sending $N sprawling.", ch, NULL, victim, TO_NOTVICT);
	hurt_person(ch, victim, dmg);	
	WAIT_STATE(ch, (PULSE_VIOLENCE * 3));
	if (victim->position > POS_STUNNED)
		victim->position = POS_STUNNED;
	return;
}
Exemplo n.º 5
0
void do_chaossurge(CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *victim;
  char buf[MAX_STRING_LENGTH];
  char arg[MAX_INPUT_LENGTH];
  int dam;

  argument = one_argument( argument, arg );

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_TANARRI) && !IS_CLASS(ch, CLASS_LICH))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (IS_CLASS(ch, CLASS_LICH) && ch->pcdata->powers[CHAOS_MAGIC] < 3)
  {
    send_to_char("Yes Master.\n\r",ch);
    return;
  }
  if ((victim = get_char_room(ch, arg)) == NULL)
  {
    send_to_char("They are not here.\n\r", ch);
    return;
  }
  if (IS_NPC(victim))
  {
    send_to_char("Not on mobiles.\n\r",ch);
    return;
  }
  if (is_safe(ch,victim)) return;
  if (victim == ch)
  {
    send_to_char("That doesn't seem like a good idea.\n\r",ch);
    return;
  }
  if (victim->alignment < -500)
  {
    send_to_char("They are too evil, you cannot affect them.\n\r",ch);
    return;
  }
  if (victim->alignment > 500) dam = 1500;
  else if (victim->alignment > 0) dam = 1000;
  else dam = 500;
  sprintf(buf,"Your let chaos envelope $N and $S is hurt [%d]",dam);
  act(buf,ch,NULL,victim,TO_CHAR);
  sprintf(buf,"$n points a wicked finger at you and chaos strikes your mind! [%d]",dam);
  act(buf,ch,NULL,victim,TO_VICT);
  sprintf(buf,"$n strikes $N down with a burst of pure #RCHAOS!#n.");
  act(buf,ch,NULL,victim,TO_NOTVICT);
  hurt_person(ch,victim,dam);
  WAIT_STATE(ch,12);
  return;
}
Exemplo n.º 6
0
/* syntax : discharge
 * (drops all elementalshields in one BIG blast)
 */
void do_discharge (CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *vch;
  CHAR_DATA *vch_next;
  CHAR_DATA *mount;
  char buf1[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char buf3[MAX_STRING_LENGTH];
  int magic_power = ch->spl[RED_MAGIC] + ch->spl[BLUE_MAGIC] + ch->spl[GREEN_MAGIC] + ch->spl[PURPLE_MAGIC] + ch->spl[YELLOW_MAGIC];
  int dam;

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[PINVOKE] < 4) /* 4 is just a test */
  {
    send_to_char("You don't have that invoke yet.\n\r",ch);
    return;
  }
  if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) 
    magic_power +=100;
  if (IS_ITEMAFF(ch, ITEMA_MAGESHIELD))
  {
    REMOVE_BIT(ch->itemaffect, ITEMA_MAGESHIELD);
    for (vch = ch->in_room->people; vch != NULL; vch = vch_next)
    {
      vch_next = vch->next_in_room;
      if (vch != ch)
      {
        if (is_safe(ch,vch)) continue;
        if ((mount = ch->mount) != NULL)
          if (mount == vch) continue;
        dam = number_range(magic_power*7/2, magic_power*9/2) + ch->damroll;
        if (IS_AFFECTED(vch, AFF_SANCTUARY)) dam *= 0.5;
        sprintf(buf1,"$n's mystical shields explodes in a shower of flames striking $N [#C%d#n]",dam);
        sprintf(buf2,"Your mystical shields explodes in a shower of flames striking $N [#C%d#n]",dam);
        sprintf(buf3,"$n's mystical shields explodes in a shower of flames striking you [#C%d#n]",dam);
        act(buf1,ch,NULL,vch, TO_NOTVICT);
        act(buf2,ch,NULL,vch, TO_CHAR);
        act(buf3,ch,NULL,vch, TO_VICT);
        hurt_person(ch,vch,dam);
        if (vch->position > POS_STUNNED)
        {
          if (vch->fighting == NULL) set_fighting(vch, ch);
          if (ch->fighting == NULL) set_fighting(ch, vch);
        }
      }
    }
  }
  return;
}
Exemplo n.º 7
0
void do_touchofgod(CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    char arg[MAX_INPUT_LENGTH];
    int dam;

    argument = one_argument( argument, arg );
    dam = number_range(100,200);

    if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_ANGEL))
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }
    if (ch->pcdata->powers[ANGEL_JUSTICE] < 4)
    {
        send_to_char("You cannot channel the will of God yet.\n\r",ch);
        return;
    }
    if ((victim = get_char_room(ch, arg)) == NULL)
    {
        send_to_char("They are not here.\n\r", ch);
        return;
    }
    if (IS_NPC(victim))
    {
        send_to_char("Not on mobiles.\n\r",ch);
        return;
    }
    if (is_safe(ch,victim)) return;
    if (victim == ch)
    {
        send_to_char("That doesn't seem like a good idea.\n\r",ch);
        return;
    }
    WAIT_STATE(ch, 18);
    hurt_person(ch, victim, dam);
    act("You grab $N by the forehead and channel God's justice into $S body.",ch,NULL,victim,TO_CHAR);
    act("$n grabs you by your forehead and sends a prayer to God, DAMN THAT HURT.",ch,NULL,victim,TO_VICT);
    act("$n grabs $N by the forehead and sends a prayer to God.",ch,NULL,victim,TO_NOTVICT);
    if (number_range(1,3) == 1)
    {
        if (victim->position == POS_FIGHTING) stop_fighting(victim,TRUE);
        act("$N screams in pain and drops to the ground as God's justice wrecks $S body.",ch,NULL,victim,TO_CHAR);
        act("AARGH!!! The pain is to much, you drop to the ground.",ch,NULL,victim,TO_VICT);
        act("$N screams in agony and falls to the ground.",ch,NULL,victim,TO_NOTVICT);
        victim->position = POS_STUNNED;
    }
    return;
}
Exemplo n.º 8
0
void do_gbanish( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    CHAR_DATA *mount;
    char buf[MAX_STRING_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    int dam;

    argument = one_argument( argument, arg );

    if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_ANGEL))
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }
    if (ch->pcdata->powers[ANGEL_HARMONY] < 3)
    {
        send_to_char("Your not in contact with your inner harmonies.\n\r",ch);
        return;
    }
    if ((victim = get_char_room(ch, arg)) == NULL)
    {
        send_to_char("They are not here.\n\r", ch);
        return;
    }
    if (IS_NPC(victim))
    {
        send_to_char("Not on mobiles.\n\r",ch);
        return;
    }
    if (is_safe(ch,victim)) return;
    if (victim == ch)
    {
        send_to_char("That doesn't seem like a good idea.\n\r",ch);
        return;
    }
    if (victim->alignment > 500)
    {
        send_to_char("They are not evil, you cannot punish them.\n\r",ch);
        return;
    }
    if (victim->alignment > 0) dam = 500;
    else if (victim->alignment > - 500) dam = 1000;
    else dam = 1500;
    sprintf(buf,"Your call for God to banish $N and $S is hurt [%d]",dam);
    act(buf,ch,NULL,victim,TO_CHAR);
    sprintf(buf,"$n calls for God to banish you, and it hurts BAD! [%d]",dam);
    act(buf,ch,NULL,victim,TO_VICT);
    sprintf(buf,"$n calls for God to Banish $N.");
    act(buf,ch,NULL,victim,TO_NOTVICT);
    hurt_person(ch,victim,dam);
    if (number_range(1,10) > 7)
    {
        act( "$n is flung into a vortex and disappears.", victim, NULL, NULL, TO_ROOM );
        char_from_room( victim );
        char_to_room( victim, get_room_index(ROOM_VNUM_HELL));
        act( "$n is flung out of a vortex.", victim, NULL, NULL, TO_ROOM );
        do_look(victim, "auto");
        if ((mount = victim->mount) == NULL) return;
        char_from_room( mount );
        char_to_room(mount, victim->in_room);
        do_look(mount, "auto");
        return;
    }
    if (victim->position > POS_STUNNED)
    {
        if (victim->fighting == NULL) set_fighting(victim, ch);
        if (ch->fighting == NULL) set_fighting(ch, victim);
    }
    WAIT_STATE(ch,18);
    return;
}
Exemplo n.º 9
0
/* New strangle code -Beorn */
void do_strangle(CHAR_DATA *ch, char *argument)
{
    char arg[MAX_INPUT_LENGTH];
    CHAR_DATA *victim;
    char buf [MAX_STRING_LENGTH];
    int         dam;
    AFFECT_DATA af;

    argument = one_argument(argument, arg);

    if (IS_NPC(ch))

        if (!IS_CLASS(ch, CLASS_NINJA))
    {
        send_to_char("Huh?",ch);
        return;
    }

    if (ch->pcdata->powers[NPOWER_NINGENNO] < 2)
    {
        send_to_char("You do not have that ability yet.\n\r",ch);
        return;
    }
    if (arg[0] == '\0')
    {
        send_to_char("Hakunetsu who?\n\r",ch);
        return;
    }

    if ((victim = get_char_room( ch, arg )) == NULL)
    {
        send_to_char("They are not here.\n\r",ch);
        return;
    }
    if (!IS_SET(ch->act, PLR_SUPERINVIS))
    {
        send_to_char("You must using Kakusu to Hakunetsu!\n\r",ch);
        return;
    }
    if ( victim->fighting != NULL )
    {
        send_to_char( "You can't Hakunetsu a fighting person.\n\r", ch);
        return;
    }

    if (victim->hit <= (victim->max_hit *0.9))
    {
        send_to_char("They are already wounded.\n\r",ch);
        return;
    }

    if (is_safe(ch,victim))
        return;

    act("You step out from behind $N and cruelly stab them in the back.\n\r",ch,NULL,victim, TO_CHAR);
    act("$n steps out from behind you and plants a dagger between your shoulders.\n\r",ch,NULL,victim, TO_VICT);
    act("$n suddenly steps out from behind $N and stabs them in the back.\n\r",ch,NULL,victim, TO_NOTVICT);

    if (IS_SET(victim->act,PLR_HOLYLIGHT)) REMOVE_BIT(victim->act,PLR_HOLYLIGHT);
    if (IS_SET(victim->affected_by, AFF_DETECT_HIDDEN))
        REMOVE_BIT(victim->affected_by, AFF_DETECT_HIDDEN);
    if (IS_SET(victim->affected_by, AFF_DETECT_INVIS))
        REMOVE_BIT(victim->affected_by, AFF_DETECT_INVIS);
    af.type      = skill_lookup("blindness");
    af.location  = APPLY_HITROLL;
    af.modifier  = -50*(ch->pcdata->upgrade_level + 1);
    af.duration  = 60;
    af.bitvector = AFF_BLIND;
    affect_to_char( victim, &af );

    do_web(victim, "");
    do_web(victim, "");
    do_web(victim, "");
    do_web(victim, "");

    /*    spelltype = skill_table[sn].target;
        level = ch->spl[spelltype] * 1.5;
        (*skill_table[sn].spell_fun) ( sn, level, ch, victim );
    */
    dam = ((victim->hit) * .10);

    if (ch->generation == 5) dam *= 1.05;
    if (ch->generation == 4) dam *= 1.10;
    if (ch->generation == 3) dam *= 1.15;
    if (ch->generation == 2) dam *= 1.20;
    if (ch->generation == 1) dam *= 1.25;
    if (ch->generation == 0) dam *= 1.30;
    if (victim->position == POS_SLEEPING) dam *= 1.25;

    sprintf( buf, "You twist your blade cruelly in $N's back. #r[#l**#R%d#l**#r]#n",dam );
    act( buf, ch, NULL, victim, TO_CHAR );
    sprintf( buf, "$n's steps out from behind you and plants a dagger between your shoulders. #r[#l**#R%d#l**#r]#n",dam );
    act( buf, ch, NULL, victim, TO_VICT );
    act( "$n's steps out from behind $N and stabs them in the back.", ch, NULL, victim, TO_NOTVICT );
    hurt_person(ch, victim, dam);
    ch->fighting = victim;
    victim->fighting = ch;
    autodrop(ch);
    autodrop(victim);
    ch->position = POS_FIGHTING;
    victim->position = POS_FIGHTING;
    update_pos(ch);
    update_pos(victim);
    WAIT_STATE(ch,12);
    return;
}
Exemplo n.º 10
0
void do_firebolt( CHAR_DATA *ch, char *argument)
{
    CHAR_DATA *victim;
    char arg1[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    int dam;

    argument = one_argument( argument, arg1 );

    if (IS_NPC(ch) )
        return;

    if (!IS_CLASS(ch, CLASS_WIZARD))
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }
    if ( arg1[0] == '\0')
    {
        send_to_char( "#CCast #Rf#ri#Rr#re#Rb#ro#Rl#rt#n on whom?\n\r", ch );
        return;
    }

    if ( ( victim = get_char_room( ch, arg1 ) ) == NULL )
    {
        send_to_char( "#RThey aren't here.#n\n\r", ch );
        return;
    }

    if (victim->level < LEVEL_AVATAR)
    {
        stc("Not on mortals.\n\r",ch);
        return;
    }

    if ((victim == ch))
    {
        stc("#RYeah ok...\n\r",ch);
        return;
    }
    if (ch->pcdata->stats[WL_SPELLS] < 1)
    {
        stc("#RYou do not yet have mastery of this spell.\n\r",ch);
        return;
    }

    if (ch->mana < 1000)
    {
        stc("#RYou do not have the required 1000 mana.\n\r",ch);
        return;
    }

    dam = number_range(2000, 3500);
    if (ch->pcdata->powers[WL_SKILLS] > 3)
    {
        dam += number_range( 3000, 4000 );
    }
    if (IS_NPC(victim)) dam *= 1.5;

    if (number_percent() < 50)
    {
        act("#y$n#R points $s hands towards #y$N#R, releasing a powerful bolt of flame.", ch, NULL, victim, TO_NOTVICT);
        sprintf( buf, "#RYou point your hands toward $N, releasing a powerful blast of flame#n #y[#C%d#y]#n\n\r", dam);
        act( buf, ch,NULL,victim,TO_CHAR);
        sprintf( buf, "#y$n#R points his hands towards you, releasing a powerful bolt of flame.#n   #y[#C%d#y]#n\n\r", dam);
        act( buf, ch,NULL,victim,TO_VICT);        if (!IS_SET(victim->affected_by, AFF_FLAMING))
        SET_BIT(victim->affected_by, AFF_FLAMING);

        hurt_person(ch, victim, dam);
        if (victim->hit < -10) victim->hit = -10;
    }

    if (number_percent() < 10)
    {
        act("#y$n#R points $s hands towards #y$N#R, releasing a powerful bolt of flame.", ch, NULL, victim, TO_NOTVICT);
        sprintf( buf, "#RYou point your hands toward $N, releasing a powerful blast of flame#n #y[#C%d#y]#n\n\r", dam);
        act( buf, ch,NULL,victim,TO_CHAR);
        sprintf( buf, "#y$n#R points his hands towards you, releasing a powerful bolt of flame.#n   #y[#C%d#y]#n\n\r", dam);
        act( buf, ch,NULL,victim,TO_VICT);
        if (!IS_SET(victim->affected_by, AFF_FLAMING))
            SET_BIT(victim->affected_by, AFF_FLAMING);

        hurt_person(ch, victim, dam);
        if (victim->hit < -10) victim->hit = -10;
    }

    else
    {
        act("#y$n#R points $s hands towards #y$N#R, releasing a powerful bolt of flame.", ch, NULL, victim, TO_NOTVICT);
        sprintf( buf, "#RYou point your hands toward $N, releasing a powerful blase of flame#n #y[#C%d#y]#n\n\r", dam);
        act( buf, ch,NULL,victim,TO_CHAR);
        sprintf( buf, "#y$n#R points his hands towards you, releasing a powerful bolt of flame.#n   #y[#C%d#y]#n\n\r", dam);
        act( buf, ch,NULL,victim,TO_VICT);        if (!IS_SET(victim->affected_by, AFF_FLAMING))
        SET_BIT(victim->affected_by, AFF_FLAMING);
        ch->mana -= 1000;
        hurt_person(ch, victim, dam);
        if (victim->hit < -10) victim->hit = -10;
    }

    WAIT_STATE(ch, PULSE_VIOLENCE);
    if (ch->fighting == NULL) ch->fighting = victim;
    return;
}
Exemplo n.º 11
0
void do_wrath( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    char arg1[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    int dam;
    argument = one_argument( argument, arg1 );

    if (!IS_CLASS(ch, CLASS_WIZARD))
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }

    if ( arg1[0] == '\0')
    {
        send_to_char( "#CRelease the Wrath of the Damned on who?\n\r", ch );
        return;
    }

    if ((victim = get_char_room(ch, arg1)) == NULL)
    {
        stc("#CThey aren't here.\n\r", ch);
        return;
    }

    if (ch->pcdata->stats[WL_SPELLS] < 9)
    {
        stc("#CYou do not yet have mastery of this spell.\n\r",ch);
        return;
    }

    if ((victim = get_char_world(ch, arg1)) == NULL)
    {
        sprintf(buf, "#7%s#C is not here.\n\r",arg1);
        stc( buf, ch);
        return;
    }

    if (victim->level < LEVEL_AVATAR)
    {
        stc("#CNot on mortals.\n\r",ch);
        return;
    }

    if(IS_IMMORTAL(victim))
    {
        send_to_char("Not on immortals.\n\r", ch);
        stcf(victim,"%s tried to wrath you!\n\r",ch->name);
        return;
    }

    if (ch->mana < 5000)
    {
        stc("#CYou do not have the 5000 required mana.\n\r",ch);
        return;
    }

    if ((victim = get_char_room(ch, arg1)) == NULL)
    {
        send_to_char("They are not here.\n\r", ch);
        return;
    }

    if (IS_BODY(victim, BROKEN_SPINE))
    {
        sprintf(buf, "#7%s#C already has a broken spine.\n\r",victim->name);
        stc( buf, ch);
        return;
    }

    act("#CYou close your eyes and chant dark words, calling forth the damned to release their wrath upon #7$N#C.", ch, NULL, victim, TO_CHAR);
    act("#7$n#C chants dark words, calling forth the damned to release their wrath upon #7$N#C.", ch, NULL, victim, TO_NOTVICT);
    act("#7$n#C chants dark words, calling forth the damned to release their wrath upon you.#n", ch, NULL, victim, TO_VICT);
    SET_BIT(victim->loc_hp[1],BROKEN_SPINE);
    act("#7$N#C screams in agony as $S spine is snapped with a gruesome #C*#yPOP#C*#n.", ch, NULL, victim, TO_NOTVICT);
    act("#7$N#C screams in agony as $S spine is snapped with a gruesome #C*#yPOP#C*#n", ch, NULL, victim, TO_CHAR);
    stc("#CYou scream in agony as your spine is snapped with a gruesome #C*#yPOP#C*#n", victim);
    dam = (victim->hit) / 45;
    if (ch->pcdata->powers[WL_SKILLS] > 3) dam *= 2;
    hurt_person(ch, victim, dam);
    ch->mana -= 5000;

    if(!IS_NPC(victim))
    {
        ch->fight_timer += 5;
    }
    WAIT_STATE(ch, PULSE_VIOLENCE);

    return;
}
Exemplo n.º 12
0
void do_chaos( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *victim;
    AFFECT_DATA af;
    int chaos, dam;
    char arg[MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];

    argument = one_argument( argument, arg );

    if (IS_NPC(ch)) return;

    if (!IS_CLASS(ch, CLASS_WIZARD))
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }
    if (ch->pcdata->stats[WL_SPELLS] < 6)
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }

    if ( arg[0] == '\0')
    {
        send_to_char( "#RCast chaos orb on whom?\n\r", ch );
        return;
    }

    if ( ( victim = get_char_room( ch, arg ) ) == NULL )
    {
        send_to_char( "They are not here.\n\r", ch );
        return;
    }
    if (is_safe(ch, victim))
    {
        stc("You cannot attack them.\n\r",ch);
        return;
    }

    if (ch->mana < 5000)
    {
        stc("You do not ave the required 5000 mana.\n\r",ch);
        return;
    }

    chaos = number_range(1, 6);
    act("#r$n#0 begins chanting dark words, summoning forth a sphere of #rc#lh#pa#go#cs#0 to hurl at #r$N!#n", ch, NULL, victim, TO_NOTVICT);
    sprintf( buf, "#0You summon forth a perfect sphere of #rc#lh#pa#go#cs#0 and hurl it at #r$N!#n\n\r");
    act(buf, ch, NULL, victim, TO_CHAR);
    sprintf( buf, "#r$n#0 summons forth a perfect sphere of #rc#lh#pa#go#cs#0 and hurls it at you!#n\n\r");
    act(buf, ch, NULL, victim, TO_VICT);

    if (chaos == 1 || chaos == 6)
    {
        stc("The sphere explodes in a shower of #Ggreen bubbles#n.\n\r",victim);
        stc("Your sphere explodes in a shower of #Ggreen bubbles#n.\n\r",ch);
        if ( IS_AFFECTED(victim, AFF_POISON)) return;
        af.type      = gsn_poison;
        af.duration  = chaos * 10;
        af.location  = APPLY_STR;
        af.modifier  = 0 - number_range(1,3);
        af.bitvector = AFF_POISON;
        affect_join( victim, &af );
        WAIT_STATE(victim, number_range(5, 20));
        send_to_char( "#GYou are poisoned!#n\n\r", victim );
    }
    else if (chaos == 2 || chaos == 7 )
    {
        stc("The sphere explodes, forming a #yyellow haze#n.\n\r",victim);
        stc("Your sphere explodes, forming a #yyellow haze#n.\n\r",ch);
        if ( IS_AFFECTED(victim, AFF_BLIND))
        {
            af.type      = gsn_blindness;
            af.location  = APPLY_HITROLL;
            af.modifier  = -4;
            af.duration  =  chaos * 10;
            af.bitvector = AFF_BLIND;
            affect_to_char( victim, &af );
            WAIT_STATE(victim, number_range(5, 15));
            send_to_char( "#yYou are blinded!#n\n\r", victim );
        }
        else
        {
            stc("They are already blinded.\n\r",ch);
        }
    }
    else if (chaos == 3 || chaos == 8)
    {
        stc("The sphere explodes in a shower of #Rred flames#n.\n\r",victim);
        stc("Your sphere explodes in a shower of #Rred flames#n.\n\r",ch);
        WAIT_STATE(victim, number_range(5, 20));
        SET_BIT(victim->affected_by, AFF_FLAMING);
    }
    else if (chaos == 4 || chaos == 9)
    {
        dam = number_range(3750, 7500);
        sprintf(buf,"The sphere explodes in a scattering of #Lblue sparks#n. #R[#y%d#R]#n\n\r", dam);
        stc( buf, victim);
        sprintf(buf,"Your sphere explodes in a scattering of #Lblue sparks#n.  #R[#y%d#R]#n\n\r", dam);
        stc( buf, ch);
        WAIT_STATE(victim, number_range(5, 8));
        hurt_person(ch, victim, dam);
    }
    else if (chaos == 5 )
    {
        stc("The sphere dissipates before it hits you#n.\n\r",victim);
        stc("Your sphere dissipates shortly after casting#n.\n\r",ch);
    }

    one_hit(ch,victim, gsn_wrathofgod,1);
    one_hit(ch,victim, gsn_wrathofgod,1);

    WAIT_STATE(ch, 4);
    ch->mana -= 5000;
    if (victim->hit < -10) victim->hit = -10;
    return;
}
Exemplo n.º 13
0
/* Syntax : chant <type> <color> <target>
 * ex. chant bless red self 
 */
void do_chant (CHAR_DATA *ch, char *argument)
{
  char arg1[MAX_STRING_LENGTH];
  char arg2[MAX_STRING_LENGTH];
  char buf1[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char buf3[MAX_STRING_LENGTH];
  CHAR_DATA *victim;
  AFFECT_DATA af;
  int i, dam, count, sn;
  int red_magic = ch->spl[RED_MAGIC];
  int blue_magic = ch->spl[BLUE_MAGIC];
  int green_magic = ch->spl[GREEN_MAGIC];
  int purple_magic = ch->spl[PURPLE_MAGIC];
  int yellow_magic = ch->spl[YELLOW_MAGIC];
  int magic_power = ch->spl[RED_MAGIC] + ch->spl[BLUE_MAGIC] + ch->spl[GREEN_MAGIC] + ch->spl[PURPLE_MAGIC] + ch->spl[YELLOW_MAGIC];
    
  argument=one_argument(argument,arg1);
  strcpy(arg2,argument);

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_MAGE) && !IS_CLASS(ch, CLASS_LICH))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (arg1[0] == '\0')
  {  
    send_to_char("Syntax : chant <bless/curse/damage/heal> <target>.\n\r", ch);
    return;
  }  
  if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) 
  {
    magic_power +=100;
    red_magic +=20;
    yellow_magic +=20;
    purple_magic +=20;
    green_magic +=20;
    blue_magic +=20;
  }
  if (!str_cmp(arg1, "heal"))
  {
    if (arg2[0] == '\0') victim = ch;
    else if ((victim = get_char_room(ch, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana < 1500)
    {
      send_to_char("You need 1500 mana.\n\r",ch);
      return;
    }    
    act("$n channels lifeforce from the five elements into $N.",ch,NULL,victim,TO_NOTVICT);
    act("You channel lifeforce from the five elements into $N.",ch,NULL,victim,TO_CHAR);
    act("$n channels lifeforce from the five elements into you.",ch,NULL,victim,TO_VICT);
    WAIT_STATE(ch,8);
    ch->mana -= 1500;
    victim->hit = UMIN(victim->hit + (magic_power * 1.5), victim->max_hit);
    return;
  }
  else if (!str_cmp(arg1, "damage"))
  {
    if (arg2[0] == '\0' && ch->fighting != NULL) victim = ch->fighting;
    else if ((victim = get_char_room(ch, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana <1000)
    {
      send_to_char("You need 1000 mana.\n\r",ch);
      return;
    }
    if (victim == ch)
    {
      send_to_char("You really don't want to hurt yourself.\n\r", ch );
      return;
    }
    if (is_safe(ch, victim)) return;
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room)
      return;
    if (IS_AFFECTED(ch, AFF_PEACE)) REMOVE_BIT(ch->affected_by, AFF_PEACE);
    if (victim->position > POS_STUNNED)
    {
      if (victim->fighting == NULL) set_fighting(victim, ch);
      if (ch->fighting == NULL) set_fighting(ch, victim);
    }
    WAIT_STATE(ch,8);
    ch->mana -= 1000;
    dam = number_range(red_magic*4, red_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    sprintf(buf1,"$n calls for the forces of #Rhell#n to destroy $N [#C%d#n]" , dam);
    sprintf(buf2,"You call for the forces of #Rhell#n to destroy $N [#C%d#n]" , dam);
    sprintf(buf3,"$n calls for the forces of #Rhell#n to destroy you [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(blue_magic*4, blue_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    sprintf(buf1,"$n summons a supernatural #Lstorm#n to strike $N with lightning [#C%d#n]" , dam);
    sprintf(buf2,"You summon a supernatural #Lstorm#n to strike $N with lightning [#C%d#n]" , dam);
    sprintf(buf3,"$n summons a supernatural #Lstorm#n to strike you with lightning [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(green_magic*4, green_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    sprintf(buf1,"$n calls for #Gthorns#n to grow from the earth and pierce $N [#C%d#n]" , dam);
    sprintf(buf2,"You call for #Gthorns#n to grow from the earth and pierce $N [#C%d#n]" , dam);
    sprintf(buf3,"$n calls for #Gthorns#n to grow from the earth and pierce You [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(purple_magic*4, purple_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    sprintf(buf1,"$n calls on the powers of the #punderdark#n to shatter $N's bones [#C%d#n]" , dam);
    sprintf(buf2,"You call on the powers of the #punderdark#n to shatter $N's bones [#C%d#n]" , dam);
    sprintf(buf3,"$n calls on the powers of the #punderdark#n to shatter your bones [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room) return;
    dam = number_range(yellow_magic*4, yellow_magic*5);
    dam += char_damroll(ch);
    dam = cap_dam(ch,victim,dam);
    if (!IS_NPC(victim))
    {
//      if (IS_CLASS(ch, CLASS_MAGE) && dam > 600) dam = number_range(580,620);
      if (dam > 1000) dam = number_range(950,1050);
    }
    sprintf(buf1,"$n spews forth a shower of #yacid#n striking $N [#C%d#n]" , dam);
    sprintf(buf2,"you spew forth a shower of #yacid#n striking $N [#C%d#n]" , dam);
    sprintf(buf3,"$n spews forth a shower of #yacid#n striking you [#C%d#n]" , dam);
    act(buf1,ch,NULL,victim, TO_NOTVICT);
    act(buf2,ch,NULL,victim, TO_CHAR);
    act(buf3,ch,NULL,victim, TO_VICT);
    hurt_person(ch, victim, dam);
    return;
  }
  else if (!str_cmp(arg1, "bless"))
  {
    if ((victim = get_char_room(ch, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana <2500)
    {
      send_to_char("You need 2500 mana.\n\r",ch);
      return;
    }
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room)
      return;
    count = 0;
    for (i = 0; i<5 ; i++)
    {
      if (i==0) {sn = skill_lookup("purple sorcery");dam=purple_magic;}
      if (i==1) {sn = skill_lookup("yellow sorcery");dam=yellow_magic;}
      if (i==2) {sn = skill_lookup("green sorcery");dam=green_magic;}
      if (i==3) {sn = skill_lookup("red sorcery");dam=red_magic;}
      if (i==4) {sn = skill_lookup("blue sorcery");dam=blue_magic;}
      if (is_affected(victim, sn))
        continue;
      
      count++;
      
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HIT;
      af.modifier  = dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_AC;
      af.modifier  = -dam/2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MOVE;
      af.modifier  = dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MANA;
      af.modifier  = dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HITROLL;
      af.modifier  = dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_DAMROLL;
      af.modifier  = dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
    }
    ch->mana -= count * 500;
    WAIT_STATE(ch,6);
    sprintf(buf1, "You bless $N with the power of the elements.");
    sprintf(buf2, "The power of the five elements fills your body.");
    act(buf1, ch, NULL, victim, TO_CHAR);
    act(buf2, ch, NULL, victim, TO_VICT);
    return;
  }
  else if (!str_cmp(arg1, "curse"))
  {
    if ((victim = get_char_room(ch, arg2)) == NULL)
    {
      send_to_char("They are not here.\n\r", ch );
      return;
    }
    if (ch->mana <2500)
    {
      send_to_char("You need 2500 mana.\n\r",ch);
      return;
    }
    if (victim->level < 3)
    {
      send_to_char("Not on mortal, thier bodies cant handles the strain....poor little buggers.\n\r",ch);
      return;
    }
    if (victim->position == POS_DEAD || ch->in_room != victim->in_room)
      return;
    count = 0;
    for (i = 0;i<5;i++)
    {
      if (i==0) {sn = skill_lookup("purple sorcery");dam=purple_magic;}
      if (i==1) {sn = skill_lookup("yellow sorcery");dam=yellow_magic;}
      if (i==2) {sn = skill_lookup("green sorcery");dam=green_magic;}
      if (i==3) {sn = skill_lookup("red sorcery");dam=red_magic;}
      if (i==4) {sn = skill_lookup("blue sorcery");dam=blue_magic;}
      if (is_affected(victim, sn))
        continue;
      
      count++;

      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HIT;
      af.modifier  = -dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_AC;
      af.modifier  = dam/2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MOVE;
      af.modifier  = -dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_MANA;
      af.modifier  = -dam*2;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_HITROLL;
      af.modifier  = -dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
      af.type      = sn;
      af.duration  = dam/4;
      af.location  = APPLY_DAMROLL;
      af.modifier  = -dam/3;
      af.bitvector = 0;
      affect_to_char(victim, &af);
    }
    ch->mana -= count * 500;
    WAIT_STATE(ch,6);
    sprintf(buf1, "You curse $N with the power of the elements.");
    sprintf(buf2, "The power of the five elements wrecks your body.");
    act(buf1, ch, NULL, victim, TO_CHAR);
    act(buf2, ch, NULL, victim, TO_VICT);
    return;      
  }
  send_to_char("Syntax : chant <bless/curse/damage/heal> <target>.\n\r", ch);
  return;
}
Exemplo n.º 14
0
void do_swoop(CHAR_DATA *ch, char *argument)
{
    char arg[MAX_INPUT_LENGTH];
    CHAR_DATA *victim;
    int         dam;

    argument = one_argument(argument, arg);

    if (IS_NPC(ch))

        if (!IS_CLASS(ch, CLASS_ANGEL))
    {
        send_to_char("Huh?",ch);
        return;
    }

    if (arg[0] == '\0')
    {
        send_to_char("Swoop down upon whom?\n\r",ch);
        return;
    }
    if (ch->pcdata->powers[ANGEL_JUSTICE] < 1)
    {
        send_to_char("You haven't learned to fly yet.\n\r",ch);
        return;
    }
    if (!IS_SET(ch->pcdata->powers[ANGEL_POWERS], ANGEL_WINGS))
    {
        send_to_char("Where are your wings?\n\r",ch);
        return;
    }

    if ((victim = get_char_room( ch, arg )) == NULL)
    {
        send_to_char("They are not here.\n\r",ch);
        return;
    }

    if (is_safe(ch,victim))
        return;

    if (IS_CLASS(victim, CLASS_ANGEL))
    {
        send_to_char("You cannot swoop down upon the other chosen of God..",ch);
        act("#G$n just tried to swoop down upon you",ch,NULL,victim, TO_VICT);
        return;
    }

    act("You soar down from the clouds and strike $N with a righteous fury.\n\r",ch,NULL,victim, TO_CHAR);
    act("$n soars down from the clouds and strikes you with a righteous fury.\n\r",ch,NULL,victim, TO_VICT);
    act("$n soars down from the clouds and strikes $N with a righteous fury.\n\r",ch,NULL,victim, TO_NOTVICT);

    dam = (ch->generation - 10) * 1500;
    //  victim->hit -= dam;
    // hurt_person(ch, victim, dam);

    set_fighting(ch,victim);
    hurt_person(ch, victim, dam);
    WAIT_STATE(ch, 20);
    return;
}
Exemplo n.º 15
0
void ice_sword (CHAR_DATA *ch)
{
	//Frost Sword can freeze victims solid, and is highly damaging, and is likely to hit. Incredibly Expensive
	CHAR_DATA *victim;
	OBJ_DATA *katana;
	char buf[MAX_STRING_LENGTH];
	char spc[MAX_STRING_LENGTH];
	char spcV[MAX_STRING_LENGTH];
	int dmg;
	bool froze = FALSE;
	
	if (IS_NPC(ch))	return;

	katana = get_eq_char(ch, WEAR_WIELD);
	
	if ((victim = ch->fighting) == NULL)
	{
		send_to_char("You find no need for this now.\n\r",ch);
		return;
	}
	
	if (ch->mana < 5000)
	{
		send_to_char("You have not the 5000 mystical power to use this.\n\r",ch);
		return;
	}
	
	if ((katana == NULL) || (katana->pIndexData->vnum != 33176))
	{
		send_to_char("Without a proper katana the energy will destroy your weapon.\n\r",ch);
		return;
	}
	ch->mana -= 5000;
	send_to_char("You channel mystical energy into your katana.\n\r",ch);
	do_say(ch,"#lF#cR#LO#cS#lT #nSWORD!");
	send_to_char("A ray of frost lances out from your katana.\n\r",ch);
	act("A ray of frost lances out from $n's katana!", ch, NULL, NULL, TO_ROOM);

	if (number_range(0,100) < 10)
	{
		act("Your ray of frost shoots past $N and freezes the ground.", ch, NULL, victim, TO_CHAR);
		act("The ray of frost shoots past you and freezes the ground.", ch, NULL, victim, TO_VICT);
		act("The ray of frost shoots past $N and freezes the ground.", ch, NULL, victim, TO_NOTVICT);
		return;
	}
	
	if (number_range(0,100) > 90)
		froze = TRUE;

	if (!froze)		
	{
		xprintf(spc,"but $N recovers.");
		xprintf(spcV,"but you recover.");
	}
	else
	{
		xprintf(spc,"and $N freezes solid.");
		xprintf(spcV,"and you freeze solid.");
	}
		
	dmg = number_range(ch->wpn[1], ch->wpn[1] * 4);
	
	xprintf(buf,"Your ray of frost envelopes $N's in a block of ice, %s #R[#L#b %d #n#R]#n", spc, dmg);
	act(buf, ch, NULL, victim, TO_CHAR);
	xprintf(buf,"$n's ray of frost envelopes you in a block of ice, %s #R[#L#b %d #n#R]#n", spcV,dmg);
	act(buf, ch, NULL, victim, TO_VICT);
	xprintf(buf,"$n's ray of frost envelopes $N's in a block of ice, %s", spc);
	act(buf, ch, NULL, victim, TO_NOTVICT);
	hurt_person(ch, victim, dmg);	
	WAIT_STATE(ch, (PULSE_VIOLENCE * 3));
	if (froze)
	{
		if (!IS_AFF2(victim, AFF2_FROZEN))
			SET_AFF2(victim, AFF2_FROZEN);
	}
	return;
}
Exemplo n.º 16
0
void do_dragonx (CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *victim;
  char arg1[MAX_INPUT_LENGTH];
  char buf[MAX_STRING_LENGTH];
  int dam;

  argument = one_argument(argument, arg1);

  if (IS_NPC(ch)) return;

  if (!IS_CLASS(ch, CLASS_SKYBLADE))
  {
    stc("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[SKYBLADE_SKILLS] < 8)
  {
    send_to_char("You haven't mastered that skill yet.\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[SKYBLADE_DTIMER] != 10)
  {
    send_to_char("Your dragon power has not fully charged.\n\r",ch);
    return;
  }
  if (( victim = get_char_room(ch, NULL, arg1)) == NULL)
  {
    if (( victim = ch->fighting) == NULL)
    {
      send_to_char("Use the power of the dragon on whom?\n\r",ch);
      return;
    }
    else victim = ch->fighting;
  }
  if (is_safe(ch, victim))
  {
    send_to_char("They are safe from such a hostile action.\n\r",ch);
    return;
  }
  if (ch->mana < 10000)
  {
    send_to_char("You do not have the 10000 mana required to call on the dragon.\n\r",ch);
    return;
  }
  dam = victim->hit/3;
  if (IS_NPC(victim)) dam = victim->hit * .9;
  if (ch->pcdata->powers[SKYBLADE_MAGIC] >= 5) dam *= 1.5;
  if (IS_NPC(victim))
  {
    if (dam > 15000) dam = 5000 + (number_range(1,5) * number_range(1,7));
  }
  else
  {
    if (dam > 6000) dam = 6000 + (number_range(1,5) * number_range(1,7));
  }
  do_say(ch, "#LMighty dragon give me your POWER!!!!!!#n");
  act("#C$n #Lleaps high into the air.......#n\n\r",ch,NULL,victim,TO_ROOM);
  stc("#LYou leap high into the air!#n\n\r",ch);
  act("#0The #ylightning crackles#0 as a large dragon is seen in the horizon.#n\n\r",ch,NULL,victim,TO_ROOM);
  WAIT_STATE(ch, 6);
  WAIT_STATE(victim, 6);
  stc("#LYou charge down upon your victim riding a huge dragon!#n\n\r",ch);
  act("#C$n #0charges down upon you, riding a huge dragon!#n\n\r",ch,NULL,victim,TO_VICT);
  act("#C$n #0charges down upon $N, riding a huge dragon!#n\n\r",ch,NULL,victim,TO_NOTVICT);
  ch->mana -= 10000;
  ch->pcdata->powers[SKYBLADE_DTIMER] = 0;
  WAIT_STATE(ch, 12);
  WAIT_STATE(victim, 12);
  xprintf(buf, "#LYou return to the ground and your dragon fades away.#W[%d]\n\r",dam);
  stc(buf,ch);
  xprintf(buf, "#L%s returns to the ground and the dragon fades away.#W[%d]\n\r",ch->name,dam);
  stc(buf, victim);
  hurt_person(ch, victim, dam);
  WAIT_STATE(ch, 8);
  if (ch->fighting == NULL) ch->fighting = victim;
  return;
}
Exemplo n.º 17
0
void do_heavenlyrain(CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *victim;
  char buf[MAX_STRING_LENGTH];
  char arg1[MAX_INPUT_LENGTH];
  int dam;

  argument = one_argument(argument, arg1);

  if (IS_NPC(ch)) return;

  if (!IS_CLASS(ch, CLASS_SKYBLADE))
  {
    stc("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[SKYBLADE_MAGIC] < 3)
  {
    send_to_char("You haven't mastered that magic yet.\n\r",ch);
    return;
  }
  if (( victim = get_char_room(ch, NULL, arg1)) == NULL)
  {
    if (( victim = ch->fighting) == NULL)
    {
      send_to_char("Call heavenlyrain upon whom?\n\r",ch);
      return;
    }
    else victim = ch->fighting;
  }
  if (is_safe(ch, victim))
  {
    send_to_char("They are safe from such a hostile action.\n\r",ch);
    return;
  }
  if (ch->mana < 5000)
  {
    send_to_char("You do not have the 5000 mana required to call on the dragon.\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[SKYBLADE_MAGIC] >= 4) dam = number_range(5000, 7000);
  else dam = number_range(3000, 5000);
  if (!IS_NPC(victim) && victim->alignment == 1000) dam *= .5;
  if (IS_NPC(victim)) dam += victim->hit/10;
  xprintf(buf, "#CYou call upon a heavenly rain to harm your opponent!#W[%d]\n\r",dam);
  stc(buf,ch);
  xprintf(buf, "#C%s calls upon a heavenly rain to harm you!#W[%d]\n\r",ch->name,dam);
  stc(buf,victim);
  act("#C$n calls upon a heavenly rain to harm $N!#n\n\r",ch,NULL,victim,TO_NOTVICT);
  ch->mana -= 5000;
  if (number_range(1,4) == 4){
  if (ch->pcdata->powers[SKYBLADE_MAGIC] >= 4)
  ch->hit += dam;
  else
  ch->hit += dam/2;
  stc ("#LYour heavenly rain has healed you.#n\n\r",ch);}
  hurt_person(ch, victim, dam);
  if (victim->hit < -10) victim->hit = -10;
  WAIT_STATE(ch, 8);
  if (ch->fighting == NULL) ch->fighting = victim;
  return;
}
Exemplo n.º 18
0
void do_negativity( CHAR_DATA *ch, char *argument)
{
    CHAR_DATA *victim;
    char buf[MAX_STRING_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    int dam;

    argument = one_argument( argument, arg );

    if (IS_NPC(ch) )
        return;

    if (!IS_CLASS(ch, CLASS_WIZARD))
    {
        stc("Huh?\n\r",ch);
        return;
    }

    if ( arg[0] == '\0')
    {
        send_to_char( "#RCast negativity on who?\n\r", ch );
        return;
    }

    if ( ( victim = get_char_room( ch, arg ) ) == NULL )
    {
        send_to_char( "#RThey aren't here.#n\n\r", ch );
        return;
    }

    if ((victim == ch))
    {
        stc("#RYeah ok...\n\r",ch);
        return;
    }

    if (ch->pcdata->stats[WL_SPELLS] < 2)
    {
        stc("You do not yet have mastery of this spell.",ch);
        return;
    }

    dam = number_range(1750, 2500);
    if (ch->pcdata->powers[WL_SKILLS] > 3) dam *= 2;

    if (ch->mana < dam * 2)
    {
        stc("You do not have enough mana for this spell.",ch);
        return;
    }

    hurt_person(ch, victim, dam);
    ch->hit += dam;
    ch->mana -= dam;

    sprintf(buf, "#rYou place your hands on #R%s,#r sucking the life out of them. #B[#R%d#B]#n\n\r", victim->name, dam);
    stc(buf, ch);
    sprintf(buf, "#R%s#r places his hands on you, sucking out your life. #B[#R%d#B]#n\n\r", ch->name, dam);
    stc(buf, victim);
    WAIT_STATE(ch, 10);
    return;
}