/*----------------------------------------------------------------------------------*\
* *
* This snippet was written by Kaine De'Arque of Vampire Wars: Embrace the Darkness *
* (VWETD). If you use this snippet all I ask is that you email me saying that you *
* used, benefited, didnt like, etc. from it ( shane@computers-mn.com ). Also *
* on your changes (helpfile or whatever it may be) just make recogonition to me. *
* *
* This snippet should work with any VW mud, if it doesnt let me know. *
* The original idea for diablerize came from Caine's mud Vampire Wars: The Final *
* Sunset, I did not see the code being published anywhere but I did see everyone *
* Using it so I decided to write one up. Thanks Caine! *
* *
* The concept is very simple, diablerize is a way for vampires to gain generation *
* by stealing it from another Vampire. What my particular code does is starts *
* everyone off at generation 13, the highest generation a vampire can go is *
* generation 3. When a vampire attacks another vampire and gets them to mortally *
* wounded position you are allowed to diablerize them IF the victim is a vampire *
* is avatar or higher, and is not in your clan. When a diablerize happens it *
* takes one generation away from the victim and gives one to the character. *
* The code is setup (by altering your code to this snippet) to make new vampires *
* generation 13, and old vampires the same generation they were when they got *
* staked. *
\*----------------------------------------------------------------------------------*/
/* In merc.h below DECLARE_DO_FUN ( do_deposit ); add the following line */
DECLARE_DO_FUN( do_diablerize );
/*** fight.c (or whatever suits you best, this file can be pretty much placed anywhere) ***/
void do_diablerize( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg [MAX_INPUT_LENGTH];
char buf [MAX_INPUT_LENGTH];
int agg=0;
int def=0;
one_argument( argument, arg, MAX_INPUT_LENGTH );
if ( IS_NPC(ch) ) return;
if ( arg[0] == '\0')
{
send_to_char( "Diablerize 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 ( ch == victim )
{
send_to_char( "You cant Diablerize yourself!\n\r", ch );
return;
}
if ( IS_NPC(victim) )
{
send_to_char( "You can only diablerize other vampires.\n\r", ch );
}
if( ch->level != 3 )
{
send_to_char( "You must be an avatar to diablerize someone.\n\r", ch );
return;
}
if ( victim->level != 3 )
{
send_to_char( "You can only diablerize other avatars.\n\r", ch );
return;
}
if ( !IS_SET(victim->act, PLR_VAMPIRE))
{
send_to_char( "Only on Vampires.\n\r", ch );
return;
}
if ( !IS_SET(ch->act, PLR_VAMPIRE))
{
send_to_char( "You are not a vampire.\n\r", ch );
return;
}
if ( victim->position > 1 )
{
send_to_char( "You can only do this to mortally wounded players.\n\r", ch );
return;
}
if (!str_cmp(ch->clan,victim->clan) && ch->clan != '\0' &&
ch->clan != str_dup("") )
{
send_to_char( "You cannot Diablerize someone of your own clan.\n\r", ch );
return;
}
/* Compare the generations of the victim and the character, if the characters generation
* is lower then the victims, dont allow the diablerize.
*/
if (ch->vampgen == 3 ) agg = 0;
else if( ch->vampgen == 4) agg = 1;
else if( ch->vampgen == 5) agg = 2;
else if( ch->vampgen == 6) agg = 3;
else if( ch->vampgen == 7) agg = 4;
else if( ch->vampgen == 8) agg = 5;
else if( ch->vampgen == 9) agg = 6;
else if( ch->vampgen == 10) agg = 7;
else if( ch->vampgen == 11) agg = 8;
else if( ch->vampgen == 12) agg = 9;
else if( ch->vampgen == 13) agg = 10;
if (victim->vampgen == 3) def = 0;
else if(victim->vampgen == 4 ) def = 1;
else if(victim->vampgen == 5 ) def = 2;
else if(victim->vampgen == 6 ) def = 3;
else if(victim->vampgen == 7 ) def = 4;
else if(victim->vampgen == 8 ) def = 5;
else if(victim->vampgen == 9 ) def = 6;
else if(victim->vampgen == 10 ) def = 7;
else if(victim->vampgen == 11 ) def = 8;
else if(victim->vampgen == 12 ) def = 9;
else if(victim->vampgen == 13 ) def = 10;
if (def>agg)
{
send_to_char("You can only diablerize someone of the same generation as you or lower!\n\r", ch );
return;
}
act( "You lay your hand down upon the chest of $N!", ch, NULL, victim, TO_CHAR );
send_to_char( "You feel your soul drain from your body!\n\r", victim);
act( "$n starts to drain the soul of $N!", ch, NULL, victim, TO_NOTVICT );
/* I figure if you lose your soul youll probably be weaker, so thats why this is here */
if(victim->pcdata->perm_str > 5) victim->pcdata->perm_str = victim->pcdata->perm_str - 1;
if(victim->pcdata->perm_wis > 5)victim->pcdata->perm_wis = victim->pcdata->perm_wis - 1;
if(victim->pcdata->perm_dex > 5) victim->pcdata->perm_dex = victim->pcdata->perm_dex - 1;
if(victim->pcdata->perm_int > 5) victim->pcdata->perm_int = victim->pcdata->perm_int - 1;
if(victim->pcdata->perm_con > 5) victim->pcdata->perm_con = victim->pcdata->perm_con - 1;
if(victim->pcdata->perm_con > 20) victim->pcdata->perm_con = victim->pcdata->perm_con - 1;
if(victim->pcdata->perm_str > 20) victim->pcdata->perm_con = victim->pcdata->perm_str - 5;
if(victim->pcdata->perm_dex > 20) victim->pcdata->perm_con = victim->pcdata->perm_dex - 5;
ch->exp = ch->exp + victim->exp / 2;
snprintf( buf, MAX_INPUT_LENGTH, "You receive %ld experience points.\n\r", victim->exp / 2);
send_to_char( buf, ch);
/* Give the victim 1k exp to train avatar */
victim->exp = 1000;
victim->level = victim->level - 1;
if (victim->vampgen == 13) victim->vampgen = victim->vampgen + 0;
else if (victim->vampgen < 13) victim->vampgen = victim->vampgen + 1;
if (ch->vampgen == 3) ch->vampgen = ch->vampgen - 0;
else if (ch->vampgen > 3) ch->vampgen = ch->vampgen - 1;
act( "The soul of $N drains from there body into yours.", ch, NULL, victim, TO_CHAR );
act( "$N's soul drains from there body and into $n's.", ch, NULL, victim, TO_NOTVICT );
act( "You feel all powerful as the soul sets in your bloodstream.", ch, NULL, NULL, TO_CHAR );
act( "You experience a jolt of fear as $n becomes more powerful.", ch, NULL, NULL, TO_NOTVICT );
if (IS_SET(victim->act, PLR_VAMPIRE))
do_mortalvamp(victim,"");
snprintf(buf, MAX_INPUT_LENGTH, "%s has been diablerized by %s.",victim->name,ch->name);
do_info(ch,buf);
return;
}
/* In the do_stake function look for the follwing line and remove it */
victim->vampgen = 0;
/* In do_bite look for this line: */
victim->vampgen = ch->vampgen + 1;
/* and change it to this: */
if ( victim->vampgen == 0 ) victim->vampgen = 13;
else victim->vampgen = victim->vampgen;
/* In interp.c look for do_decapitate, and right below it add this: */
{ "diablerize", do_diablerize, POS_STANDING,3, LOG_ALWAYS },
/* Finally save all the files, make, and do a reboot / copyover, should work dandy, but
if you already have players that ARE vampires youll have to set there generation back.
If you have trouble installing this code I will be more then happy to go over it with
you ( shane@computers-mn.com ). Also any comments, questions, flames, fixes, or addons
Id love to hear.
Thanks. -Kaine De'Arque
*/