#include <sys/types.h> #include <ctype.h> #include <math.h> #include <stdio.h> #include <string.h> #include <time.h> #include "mud.h" void do_fusiondance( CHAR_DATA * ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *vch; CHAR_DATA *dch; /*dominant fuse char */ CHAR_DATA *sch; /*stasis fuse char */ char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; bool cright = FALSE; bool vright = FALSE; bool cleft = FALSE; bool vleft = FALSE; OBJ_DATA *ro; OBJ_DATA *vo; OBJ_DATA *po; OBJ_DATA *o; OBJ_INDEX_DATA *pObjIndex; // int sn; // int value; bool saiyan1 = FALSE, saiyan2 = FALSE; bool namek1 = FALSE, namek2 = FALSE; bool human1 = FALSE, human2 = FALSE; bool halfb1 = FALSE, halfb2 = FALSE; bool genie1 = FALSE, genie2 = FALSE; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if( arg[0] == '\0' ) { ch_printf( ch, "\n\rSyntax: fusiondance (first person) (second person)\n\r" ); ch_printf( ch, "\n\rThe order in which you put the two people's names in does not matter.\n\r" ); return; } if( ( rch = get_char_room( ch, arg ) ) == NULL ) { ch_printf( ch, "There is nobody here named %s.\n\r", arg ); return; } if( ( vch = get_char_room( ch, arg2 ) ) == NULL ) { ch_printf( ch, "There is nobody here named %s.\n\r", arg2 ); return; } if( IS_NPC( rch ) || IS_NPC( vch ) ) { ch_printf( ch, "NPC's cannot fuse.\n\r" ); return; } if( is_fused( rch ) ) { ch_printf( ch, "%s has already fused before.\n\r", rch->name ); return; } if( is_fused( vch ) ) { ch_printf( ch, "%s has already fused before.\n\r", vch->name ); return; } if( IS_IMMORTAL( rch ) || IS_IMMORTAL( vch ) ) { ch_printf( ch, "Admins may not fuse.\n\r" ); return; } if( rch->pcdata->clan ) { ch_printf( ch, "%s must be outcasted from their clan first.\n\r", rch->name ); return; } if( vch->pcdata->clan ) { ch_printf( ch, "%s must be outcasted from their clan first.\n\r", vch->name ); return; } if( is_transformed( rch ) ) { ch_printf( ch, "%s must power down completely first.\n\r", rch->name ); return; } if( is_transformed( vch ) ) { ch_printf( ch, "%s must power down completely first.\n\r", vch->name ); return; } if( ( ro = fusion_item_1( rch ) ) == NULL ) { if( ( ro = fusion_item_2( rch ) ) == NULL ) { ch_printf( ch, "%s is not wearing a needed item..\n\r", rch->name ); return; } else cleft = TRUE; } else cright = TRUE; if( ( vo = fusion_item_1( vch ) ) == NULL ) { if( ( vo = fusion_item_2( vch ) ) == NULL ) { ch_printf( ch, "%s is not wearing a needed item.\n\r", vch->name ); return; } else vleft = TRUE; } else vright = TRUE; if( cright && vright ) { ch_printf( ch, "One of them must be wearing a needed item.\n\r" ); return; } if( cleft && vleft ) { ch_printf( ch, "One of them must be wearing a needed item.\n\r" ); return; } if( cright && vleft ) { dch = rch; sch = vch; } else if( cleft && vright ) { dch = vch; sch = rch; } else { ch_printf( ch, "Cyris fucked up. Let him know...\n\r" ); return; } unequip_char( rch, ro ); unequip_char( vch, vo ); extract_obj( ro ); extract_obj( vo ); pObjIndex = get_obj_index( 620 ); po = create_object_new( pObjIndex, 1, ORIGIN_OINVOKE, ch->name ); po = obj_to_char( po, dch ); dch->fused[dch->fusions] = STRALLOC( sch->name ); sch->fused[sch->fusions] = STRALLOC( dch->name ); dch->fusions++; sch->fusions++; dch->bck_name = STRALLOC( dch->name ); sch->bck_name = STRALLOC( sch->name ); dch->bck_race = dch->race; sch->bck_race = sch->race; dch->bck_pl = dch->exp; sch->bck_pl = sch->exp; dch->fusiontimer = 60; sch->fusiontimer = 60; /* Get fusion shit for this --Cyris*/ if( !str_cmp( get_race( dch ), "saiyan" ) ) saiyan1 = TRUE; if( !str_cmp( get_race( sch ), "saiyan" ) ) saiyan2 = TRUE; if( !str_cmp( get_race( dch ), "namek" ) ) namek1 = TRUE; if( !str_cmp( get_race( sch ), "namek" ) ) namek2 = TRUE; if( !str_cmp( get_race( dch ), "human" ) ) human1 = TRUE; if( !str_cmp( get_race( sch ), "human" ) ) human2 = TRUE; if( !str_cmp( get_race( dch ), "halfbreed" ) ) halfb1 = TRUE; if( !str_cmp( get_race( sch ), "halfbreed" ) ) halfb2 = TRUE; if( !str_cmp( get_race( sch ), "genie" ) ) genie2 = TRUE; if( !str_cmp( get_race( sch ), "genie" ) ) genie2 = TRUE; if( ( saiyan1 && namek2 ) ) { dch->race = get_race_num( "saiyan-n" ); dch->class = get_class_num( "saiyan-n" ); } else if( ( saiyan2 && namek1 ) ) { dch->race = get_race_num( "namek-s" ); dch->class = get_class_num( "namek-s" ); } else if( ( saiyan1 && human2 ) ) { dch->race = get_race_num( "saiyan-h" ); dch->class = get_class_num( "saiyan-h" ); } else if( ( saiyan2 && human1 ) ) { dch->race = get_race_num( "human-s" ); dch->class = get_class_num( "human-s" ); } else if( ( saiyan1 && halfb2 ) ) { dch->race = get_race_num( "saiyan-hb" ); dch->class = get_class_num( "saiyan-hb" ); } else if( ( saiyan2 && halfb1 ) ) { dch->race = get_race_num( "halfbreed-s" ); dch->class = get_class_num( "halfbreed-s" ); } else if( ( saiyan1 && saiyan2 ) ) { dch->race = get_race_num( "saiyan-s" ); dch->class = get_class_num( "saiyan-s" ); } else if( ( namek1 && halfb2 ) ) { dch->race = get_race_num( "namek-hb" ); dch->class = get_class_num( "namek-hb" ); } else if( ( namek2 && halfb1 ) ) { dch->race = get_race_num( "halfbreed-n" ); dch->class = get_class_num( "halfbreed-n" ); } else if( ( human1 && namek2 ) ) { dch->race = get_race_num( "human-n" ); dch->class = get_class_num( "human-n" ); } else if( ( human2 && namek1 ) ) { dch->race = get_race_num( "namek-h" ); dch->class = get_class_num( "namek-h" ); } else if( ( human1 && halfb2 ) ) { dch->race = get_race_num( "human-hb" ); dch->class = get_class_num( "human-hb" ); } else if( ( human2 && halfb1 ) ) { dch->race = get_race_num( "halfbreed-h" ); dch->class = get_class_num( "halfbreed-h" ); } else if( ( human1 && human2 ) ) { dch->race = get_race_num( "human-h" ); dch->class = get_class_num( "human-h" ); } else if( ( namek1 && namek2 ) ) { ch_printf( ch, "You cannot fuse like this." ); } else if( ( halfb1 && halfb2 ) ) { dch->race = get_race_num( "halfbreed-hb" ); dch->class = get_class_num( "halfbreed-hb" ); } else if( ( human1 && genie2 ) ) { dch->race = get_race_num( "Human-g" ); dch->class = get_class_num( "Human-g" ); } else if( ( genie1 && human2 ) ) { dch->race = get_race_num( "Human-g" ); dch->class = get_class_num( "Human-g" ); } dch->exp += sch->exp; dch->pl = dch->exp; /* * message sent to dch */ ch_printf( dch, "You life force fuses with %s's causing them to merge with you!\n\r", sch->name ); /* * message sent to sch */ ch_printf( sch, "Your body fuses with %s's and you agree to give your namekian power for some reason...\n\r", dch->name ); while( ( o = carrying_noquit( sch ) ) != NULL ) { obj_from_char( o ); obj_to_room( o, sch->in_room ); ch_printf( sch, "&wYou drop %s&w.\n\r", o->short_descr ); } SET_BIT( dch->fusionflags, FUSION_DANCE ); SET_BIT( sch->fusionflags, FUSION_STASIS ); do_reserve( ch, dch->name ); do_reserve( ch, sch->name ); char_to( sch, ROOM_VNUM_FUSIONSTASIS ); save_char_obj( dch ); save_char_obj( sch ); /* * do_sset(ch,strcat(dch->name," all 95")); */ ch_printf( ch, "%s and %s have been fused together.\n\r", dch->name, sch->name ); }