Exemplo n.º 1
0
/*
 * make some coinage
 */
OBJ_DATA *create_money( int amount )
{
   char buf[MAX_STRING_LENGTH];
   OBJ_DATA *obj;

   if( amount <= 0 )
   {
      bug( "Create_money: zero or negative money %d.", amount );
      amount = 1;
   }

   if( amount == 1 )
   {
      obj = create_object( get_obj_index( OBJ_VNUM_MONEY_ONE ), 0 );
   }
   else
   {
      obj = create_object( get_obj_index( OBJ_VNUM_MONEY_SOME ), 0 );
      snprintf( buf, MAX_STRING_LENGTH, obj->short_descr, amount );
      STRFREE( obj->short_descr );
      obj->short_descr = STRALLOC( buf );
      obj->value[0] = amount;
   }

   return obj;
}
Exemplo n.º 2
0
bool spec_auth(CHAR_DATA * ch)
{
	CHAR_DATA *victim;
	CHAR_DATA *v_next;
	char buf[MAX_STRING_LENGTH];
	OBJ_INDEX_DATA *pObjIndex;
	OBJ_DATA *obj;
	bool hasdiploma;

	for (victim = ch->in_room->first_person; victim; victim = v_next) {
		v_next = victim->next_in_room;

		if (!IS_NPC(victim)
		    && (pObjIndex =
			get_obj_index(OBJ_VNUM_SCHOOL_DIPLOMA)) != NULL) {
			hasdiploma = FALSE;

			for (obj = victim->last_carrying; obj;
			     obj = obj->prev_content)
				if (obj->pIndexData ==
				    get_obj_index(OBJ_VNUM_SCHOOL_DIPLOMA))
					hasdiploma = TRUE;

			if (!hasdiploma) {
				obj = create_object(pObjIndex, 1);
				obj = obj_to_char(obj, victim);
				send_to_char
				    ("&cThe schoolmaster gives you a diploma, and shakes your hand.\n\r&w",
				     victim);
			}
		}

		if (IS_NPC(victim)
		    || !IS_SET(victim->pcdata->flags, PCFLAG_UNAUTHED))
			continue;

		victim->pcdata->auth_state = 3;
		REMOVE_BIT(victim->pcdata->flags, PCFLAG_UNAUTHED);
		if (victim->pcdata->authed_by)
			STRFREE(victim->pcdata->authed_by);
		victim->pcdata->authed_by = QUICKLINK(ch->name);
		sprintf(buf, "%s authorized %s", ch->name, victim->name);
		to_channel(buf, CHANNEL_MONITOR, "Monitor", ch->top_level);

	}
	return FALSE;

}
Exemplo n.º 3
0
void do_katana( CHAR_DATA *ch, char *argument )
{
  OBJ_DATA *obj;
  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_SAMURAI))
  {         
    send_to_char("Huh?\n\r",ch);
    return;
  }  
  if ( 250 > ch->practice)
  {
    send_to_char("It costs 250 points of primal to create a Katana.\n\r",ch);
    return;
  }     
  ch->practice   -= 250;
  obj = create_object(get_obj_index(33176) ,50 );
  SET_BIT(obj->quest, QUEST_RELIC);
  obj->condition = 100;
  obj->toughness = 100;
  obj->resistance = 1;
  obj->value[1] = 65;
  obj->value[2] = 115;
  obj->questowner = str_dup(ch->pcdata->switchname);
  obj->ownerid = ch->pcdata->playerid;
  obj_to_char(obj, ch);
  act("A katana flashes into existance.",ch,NULL,NULL,TO_CHAR);
  act("A katana suddenly apear in $n's hands.",ch,NULL,NULL,TO_ROOM);
  return;
}
Exemplo n.º 4
0
void do_dridereq( CHAR_DATA *ch, char *argument )
{
    OBJ_INDEX_DATA *pObjIndex;
    OBJ_DATA *obj;
    char arg[MAX_INPUT_LENGTH];
    int vnum = 0;

    argument = one_argument( argument, arg );


    if (IS_NPC(ch)) return;

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

    if (arg[0] == '\0')
    {
        send_to_char("Please specify which piece of drider armor you wish to make: whip ring collar armor helmet leggings boots gloves sleeves cloak belt bracer mask.\n\r",ch);
        return;
    }

    if (!str_cmp(arg,"whip"        )) vnum = 33140;
    else if (!str_cmp(arg,"ring"     )) vnum = 33141;
    else if (!str_cmp(arg,"collar"   )) vnum = 33142;
    else if (!str_cmp(arg,"armor"    )) vnum = 33143;
    else if (!str_cmp(arg,"helmet"   )) vnum = 33144;
    else if (!str_cmp(arg,"leggings" )) vnum = 33145;
    else if (!str_cmp(arg,"boots"    )) vnum = 33146;
    else if (!str_cmp(arg,"gloves"   )) vnum = 33147;
    else if (!str_cmp(arg,"sleeves"  )) vnum = 33148;
    else if (!str_cmp(arg,"cloak"   )) vnum = 33149;
    else if (!str_cmp(arg,"belt"     )) vnum = 33150;
    else if (!str_cmp(arg,"bracer"    )) vnum = 33151;
    else if (!str_cmp(arg,"mask"      )) vnum = 33152;
    else
    {
        do_dridereq(ch,"");
        return;
    }
    if ( ch->practice < 150)
    {
        send_to_char("It costs 150 points of primal to create a piece of drider armour.\n\r",ch);
        return;
    }
    if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
    {
        send_to_char("Missing object, please inform Dracknuur.\n\r",ch);
        return;
    }
    ch->practice   -= 150;
    obj = create_object(pObjIndex, 50);
    obj->questowner = str_dup(ch->pcdata->switchname);
    obj_to_char(obj, ch);
    act("$p appears in your hands in a blast of flames.",ch,obj,NULL,TO_CHAR);
    act("$p appears in $n's hands in a blast of flames.",ch,obj,NULL,TO_ROOM);
    return;
}
Exemplo n.º 5
0
void spell_portal( int sn, int level, CHAR_DATA *ch, void *vo,int target)
{
    CHAR_DATA *victim;
    OBJ_DATA *portal, *stone;

        if ( ( victim = get_char_world( ch, target_name ) ) == NULL
    ||   victim == ch
    ||   victim->in_room == NULL
    ||   !can_see_room(ch,victim->in_room)
    ||   IS_SET(victim->in_room->room_flags, ROOM_SAFE)
    ||   IS_SET(victim->in_room->room_flags, ROOM_PRIVATE)
    ||   IS_SET(victim->in_room->room_flags, ROOM_SOLITARY)
    ||   IS_SET(victim->in_room->room_flags, ROOM_DRAGONPIT)
    ||   IS_SET(ch->in_room->room_flags, ROOM_DRAGONPIT)
    ||   IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL)
    ||   IS_SET(victim->in_room->area->area_flags, AREA_PROTO )
    ||   IS_SET(ch->in_room->room_flags, ROOM_NO_RECALL)
    ||   victim->level >= level + 3
    ||   (!IS_NPC(victim) && victim->level >= LEVEL_HERO) 
    ||   (IS_NPC(victim) && IS_SET(victim->imm_flags,IMM_SUMMON))
    ||   (IS_NPC(victim) && saves_spell( level, victim,DAM_NONE) )
    ||   (is_clan(victim) && !is_same_clan(ch,victim)))
    {
        send_to_char( "You failed.\n\r", ch );
        return;
    }   

 if (!IS_IMP(ch))
    {
    if (IS_IMMORTAL(ch))
      {
       send_to_char("\n\r{rIMMs can use {RGOTO{r so there is no reason to be opening {RPORTAL{r.{x\n\r",ch);
       return;
      }
    }

    stone = get_eq_char(ch,WEAR_HOLD);
    if (!IS_IMMORTAL(ch) 
    &&  (stone == NULL || stone->item_type != ITEM_WARP_STONE))
    {
	send_to_char("You lack the proper component for this spell.\n\r",ch);
	return;
    }

    if (stone != NULL && stone->item_type == ITEM_WARP_STONE)
    {
     	act("You draw upon the power of $p.",ch,stone,NULL,TO_CHAR);
     	//act("It flares brightly and vanishes!",ch,stone,NULL,TO_CHAR);
     	//extract_obj(stone);
    }

    portal = create_object(get_obj_index(OBJ_VNUM_PORTAL),0);
    portal->timer = 2 + level / 25; 
    portal->value[3] = victim->in_room->vnum;

    obj_to_room(portal,ch->in_room);

    act("$p rises up from the ground.",ch,portal,NULL,TO_ROOM);
    act("$p rises up before you.",ch,portal,NULL,TO_CHAR);
}
Exemplo n.º 6
0
void do_dstat( char_data* ch, char* argument )
{
  wizard_data*      imm  = (wizard_data*) ch;
  exit_data*       exit;
  obj_clss_data*    key;

  if( *argument == '\0' ) { 
    if( ( exit = imm->exit_edit ) == NULL ) {
      send( ch, "Use dedit to specify direction.\n\r" );
      return;
      }
    }
  else 
    if( ( exit = (exit_data*) one_thing( ch, argument, "dstat",
      (thing_array*) &ch->in_room->exits ) ) == NULL )
      return;
   
  send( ch, "[%s]\n\r", dir_table[ exit->direction ].name );
  send( ch, "  Leads to : %s (%d)\n\r",
    exit->to_room->name, exit->to_room->vnum );

  if( ( key = get_obj_index( exit->key ) ) == NULL )  
    send( ch, "       Key : None\n\r" );
  else  
    send( ch, "       Key : %s (%d)\n\r", key->Name( ), exit->key );

  send( ch, "      Name : %s\n\r",   exit->name );
  send( ch, "  Keywords : %s\n\r",   exit->keywords );
  send( ch, "  Strength : %d\n\r",   exit->strength );
  send( ch, "     Light : %d%%\n\r", exit->light );
  send( ch, "      Size : %s\n\r",   size_name[ exit->size ] );
}
Exemplo n.º 7
0
void do_olog( char_data* ch, char* argument )
{
  char*                tmp  = static_string( );
  wizard_data*      wizard  = (wizard_data*) ch;
  obj_clss_data*  obj_clss;
  int                    i;

  if( *argument == '\0' ) {
    if( ( obj_clss = wizard->obj_edit ) == NULL ) {
      send( ch,
        "You are not editting an object so must specify a vnum.\r\n" );
      return;
      }
    i = obj_clss->vnum;
    }
  else {
    if( get_obj_index( i = atoi( argument ) ) == NULL ) {
      send( ch, "There is no object with that vnum.\r\n" );
      return;
      }
    }

  sprintf( tmp, "%sobj.%d", OBJ_LOG_DIR, i );
  if( !view_file( ch, tmp ) )
    send( ch, "That object has no log.\r\n" );
 
  return;
}
Exemplo n.º 8
0
void do_magearmor( CHAR_DATA *ch, char *argument )
{
  OBJ_INDEX_DATA *pObjIndex;
  OBJ_DATA *obj;
  char arg[MAX_INPUT_LENGTH];
  int vnum = 0;

  argument = one_argument( argument, arg );
  if (IS_NPC(ch)) return;
 	if(!IS_IMMORTAL(ch))
	{
    if( !IS_CLASS(ch, CLASS_MAGE) )
    {
      send_to_char("What?\n\r",ch);
      return;
    }
	}
  if (arg[0] == '\0')
  {
    send_to_char("Please specify which piece of mage armor you wish to make: Dagger Staff Ring Collar Robe Cap Leggings Boots Gloves Sleeves Cape Belt Bracer Mask.\n\r",ch);
    return;
  }
  if ( ch->practice < 60 )
  {
    send_to_char("It costs 60 points of primal to create mage equipment.\n\r",ch);
    return;
  }
  if (!str_cmp(arg,"mask")) vnum = 33013;
  else if (!str_cmp(arg,"belt")) vnum = 33011;
  else if (!str_cmp(arg,"cape")) vnum = 33010;
  else if (!str_cmp(arg,"ring")) vnum = 33002;
  else if (!str_cmp(arg,"collar")) vnum = 33003;
  else if (!str_cmp(arg,"robe")) vnum = 33004;
  else if (!str_cmp(arg,"cap")) vnum = 33005;
  else if (!str_cmp(arg,"leggings")) vnum = 33006;
  else if (!str_cmp(arg,"boots")) vnum = 33007;
  else if (!str_cmp(arg,"gloves")) vnum = 33008;
  else if (!str_cmp(arg,"sleeves")) vnum = 33009;
  else if (!str_cmp(arg,"bracer")) vnum = 33012;
  else if (!str_cmp(arg,"staff")) vnum = 33000;
  else if (!str_cmp(arg,"dagger")) vnum = 33001;
  else
  {
    do_magearmor(ch,"");
    return;
  }
  if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
  {
    send_to_char("Missing object, please inform a God.\n\r",ch);
    return;
  }
  obj = create_object(pObjIndex, 50);
  obj->questowner = str_dup(ch->pcdata->switchname);
  obj_to_char(obj, ch);
  ch->practice -= 60;
  act("$p appears in your hands.",ch,obj,NULL,TO_CHAR);
  act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM);
  return;
}
Exemplo n.º 9
0
void make_bloodstain( CHAR_DATA * ch )
{
   OBJ_DATA *obj;

   obj = create_object( get_obj_index( OBJ_VNUM_BLOODSTAIN ), 0 );
   obj->timer = number_range( 1, 2 );
   obj_to_room( obj, ch->in_room );
}
Exemplo n.º 10
0
RENUMBER_DATA *gather_one_list( short type, int low, int high, int new_base, bool fill_gaps, int *max_vnum )
/* this function builds a list of renumber data for a type (obj, room, or mob) */
{
   int cur_vnum;
   RENUMBER_DATA *r_data, root;
   bool found;
   ROOM_INDEX_DATA *room;
   OBJ_INDEX_DATA *obj;
   MOB_INDEX_DATA *mob;
   int i;
   int highest;

   memset( &root, 0, sizeof( RENUMBER_DATA ) );
   r_data = &root;

   cur_vnum = new_base;
   highest = -1;
   for( i = low; i <= high; i++ )
   {
      found = FALSE;
      switch ( type )
      {
         case REN_ROOM:
            room = get_room_index( i );
            if( room != NULL )
               found = TRUE;
            break;
         case REN_OBJ:
            obj = get_obj_index( i );
            if( obj != NULL )
               found = TRUE;
            break;
         case REN_MOB:
            mob = get_mob_index( i );
            if( mob != NULL )
               found = TRUE;
            break;
      }

      if( found )
      {
         if( cur_vnum > highest )
            highest = cur_vnum;
         if( cur_vnum != i )
         {
            CREATE( r_data->next, RENUMBER_DATA, 1 );
            r_data = r_data->next;
            r_data->old_vnum = i;
            r_data->new_vnum = cur_vnum;
         }
         cur_vnum++;
      }
      else if( !fill_gaps )
         cur_vnum++;
   }
   *max_vnum = highest;
   return root.next;
}
Exemplo n.º 11
0
//heh zlicza ilosc po boot_db
//bo przez nieszczesne ladowanie pccorpsow moze sie ilosc zjebac...
void count_artefacts()
{
	ARTEFACT_DATA * atmp = NULL;
	ARTEFACT_OWNER *otmp = NULL;

    if ( !artefact_system )
    {
        log_string( "Artefact system: empty artefact list" );
        return ; //brak wpisow
    }

	append_file_format_daily( NULL, ARTEFACT_LOG_FILE, "PO REBOOCIE ZLICZANIE", NULL );

	for ( atmp = artefact_system;atmp;atmp = atmp->next )
	{
		if ( atmp->first_owner == NULL )
		{
			atmp->count = get_obj_index( atmp->avnum ) ->count;
			continue;
		}
		else
		{
			otmp = atmp->first_owner;
		}
		//to stwarza niebezpieczenstwo nie ruszac :)
		
		//while ( otmp )
		//{

		//	if ( otmp->status == 0 )   //zlicza tych co na rencie
		//		licznik++;
		//	otmp = otmp->next;
		//}
		//atmp->count = licznik;
		//licznik = 0;
		//a teraz ilosc
		//atmp->count += (get_obj_index( atmp->avnum )->count);

		append_file_format_daily( NULL, ARTEFACT_LOG_FILE, "%s vnum:%d count:%d max:%d", get_obj_index( atmp->avnum ) ->short_descr, atmp->avnum, atmp->count, atmp->max_count );
	}

	append_file_format_daily( NULL, ARTEFACT_LOG_FILE, "PO REBOOCIE KONIEC", NULL );

	return ;
}
Exemplo n.º 12
0
/*
 * Make a fire.
 */
void make_fire( ROOM_INDEX_DATA * in_room, short timer )
{
   OBJ_DATA *fire;

   fire = create_object( get_obj_index( OBJ_VNUM_FIRE ), 0 );
   fire->timer = number_fuzzy( timer );
   obj_to_room( fire, in_room );
   return;
}
Exemplo n.º 13
0
void Character::spell_create_food (int sn, int lvl, void *vo)
{
  Object* mushroom = get_obj_index(OBJ_VNUM_MUSHROOM)->create_object(0);
  mushroom->value[0] = 5 + lvl;
  mushroom->obj_to_room (in_room);
  act ("$p suddenly appears.", mushroom, NULL, TO_ROOM);
  act ("$p suddenly appears.", mushroom, NULL, TO_CHAR);
  return;
}
Exemplo n.º 14
0
void make_blood( CHAR_DATA * ch )
{
   OBJ_DATA *obj;

   obj = create_object( get_obj_index( OBJ_VNUM_BLOOD ), 0 );
   obj->timer = number_range( 2, 4 );
   obj->value[1] = number_range( 3, UMIN( 5, ch->level ) );
   obj_to_room( obj, ch->in_room );
}
Exemplo n.º 15
0
void do_taneq(CHAR_DATA *ch, char *argument)
{
    OBJ_INDEX_DATA *pObjIndex;
    OBJ_DATA *obj;
    char arg[MAX_INPUT_LENGTH];
    int vnum = 0;

    argument = one_argument( argument, arg );
    if (IS_NPC(ch)) return;
    if( !IS_CLASS(ch, CLASS_TANARRI))
    {
        send_to_char("What?\n\r",ch);
        return;
    }
    if (arg[0] == '\0')
    {
        send_to_char("Please specify which piece of tanar'ri armor you wish to make: Claymore Bracer\n\r"
                     "Collar Ring Plate Helmet Leggings Boots Gauntlets Sleeves Cloak Belt Visor.\n\r",ch);
        return;
    }
    if ( ch->practice < 100 )
    {
        send_to_char("It costs 100 points of primal to create Tanar'ri equipment.\n\r",ch);
        return;
    }
    if (!str_cmp(arg,"claymore")) vnum = 33200;
    else if (!str_cmp(arg,"bracer")) vnum = 33202;
    else if (!str_cmp(arg,"collar")) vnum = 33203;
    else if (!str_cmp(arg,"ring")) vnum = 33201;
    else if (!str_cmp(arg,"plate")) vnum = 33204;
    else if (!str_cmp(arg,"helmet")) vnum = 33205;
    else if (!str_cmp(arg,"leggings")) vnum = 33209;
    else if (!str_cmp(arg,"boots")) vnum = 33206;
    else if (!str_cmp(arg,"gauntlets")) vnum = 33207;
    else if (!str_cmp(arg,"sleeves")) vnum = 33208;
    else if (!str_cmp(arg,"cloak")) vnum = 33210;
    else if (!str_cmp(arg,"belt")) vnum = 33211;
    else if (!str_cmp(arg,"visor")) vnum = 33212;
    else
    {
        do_taneq(ch,"");
        return;
    }
    if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
    {
        send_to_char("Missing object, please inform a God.\n\r",ch);
        return;
    }
    obj = create_object(pObjIndex, 50);
    obj->questowner = str_dup(ch->pcdata->switchname);
    obj->ownerid = ch->pcdata->playerid;
    obj_to_char(obj, ch);
    ch->practice -= 100;
    act("$p appears in your hands.",ch,obj,NULL,TO_CHAR);
    act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM);
    return;
}
Exemplo n.º 16
0
void Character::spell_create_spring (int sn, int lvl, void *vo)
{
  Object* spring = get_obj_index(OBJ_VNUM_SPRING)->create_object(0);
  spring->timer = lvl;
  spring->obj_to_room (in_room);
  act ("$p flows from the ground.", spring, NULL, TO_ROOM);
  act ("$p flows from the ground.", spring, NULL, TO_CHAR);
  return;
}
Exemplo n.º 17
0
void translate_objvals( CHAR_DATA * ch, AREA_DATA * area, RENUMBER_AREA * r_area, bool verbose )
{
   int i, new_vnum;
   OBJ_INDEX_DATA *obj;

   for( i = area->low_o_vnum; i <= area->hi_o_vnum; i++ )
   {
      obj = get_obj_index( i );
      if( !obj )
         continue;

      if( obj->item_type == ITEM_CONTAINER )
      {
         new_vnum = find_translation( obj->value[2], r_area->r_obj );
         if( new_vnum != NOT_FOUND )
         {
            if( verbose )
               pager_printf( ch, "...    container %d; fixing objval2 (key vnum) %d -> %d\r\n", i, obj->value[2], new_vnum );
            obj->value[2] = new_vnum;
         }
         else if( verbose )
            pager_printf( ch, "...    container %d; no need to fix.\r\n", i );
      }
      else if( obj->item_type == ITEM_SWITCH || obj->item_type == ITEM_LEVER ||
               obj->item_type == ITEM_PULLCHAIN || obj->item_type == ITEM_BUTTON )
      {
         /*
          * levers might have room vnum references in their objvals 
          */
         if( IS_SET( obj->value[0], TRIG_TELEPORT )
             || IS_SET( obj->value[0], TRIG_TELEPORTALL )
             || IS_SET( obj->value[0], TRIG_TELEPORTPLUS )
             || IS_SET( obj->value[0], TRIG_RAND4 )
             || IS_SET( obj->value[0], TRIG_RAND6 ) || IS_SET( obj->value[0], TRIG_DOOR ) )
         {
            new_vnum = find_translation( obj->value[1], r_area->r_room );
            if( new_vnum != NOT_FOUND )
            {
               if( verbose )
                  pager_printf( ch, "...    lever %d: fixing source room (%d -> %d)\r\n", i, obj->value[1], new_vnum );
               obj->value[1] = new_vnum;
            }
            if( IS_SET( obj->value[0], TRIG_DOOR ) && IS_SET( obj->value[0], TRIG_PASSAGE ) )
            {
               new_vnum = find_translation( obj->value[2], r_area->r_room );
               if( new_vnum != NOT_FOUND )
               {
                  if( verbose )
                     pager_printf( ch, "...    lever %d: fixing dest room (passage) (%d -> %d)\r\n",
                                   i, obj->value[2], new_vnum );
                  obj->value[2] = new_vnum;
               }
            }
         }
      }
   }
}
Exemplo n.º 18
0
void Character::spell_continual_light (int sn, int lvl, void *vo)
{
  Object *light;

  light = get_obj_index(OBJ_VNUM_LIGHT_BALL)->create_object(0);
  light->obj_to_room (in_room);
  act ("$n twiddles $s thumbs and $p appears.", light, NULL, TO_ROOM);
  act ("You twiddle your thumbs and $p appears.", light, NULL, TO_CHAR);
  return;
}
Exemplo n.º 19
0
Arquivo: token.c Projeto: verias/SRMud
void do_token(CHAR_DATA *ch, char *argument)
{

	OBJ_DATA *obj;
	char arg1[MSL];
	char arg2[MSL];
	char arg3[MSL];
	char arg4[MSL];
	CHAR_DATA *to,*to_next;

	argument = one_argument(argument,arg1);
	argument = one_argument(argument,arg2);
	argument = one_argument(argument,arg3);

	if( arg1[0] == '\0'||
		arg2[0] == '\0' ||
		arg3[0] == '\0' ||
		argument[0] == '\0')
	{
		send_to_one(ch,"Syntax: token <type> <winchance> <max_win> <min_win>\n\r"
			"Token Types are:\n\r"
			"Normal   0\n\r"
			"Practice 1\n\r"
			"Train    2\n\r"
			"Quest    3\n\r"
			"Exp      4\n\r"
			"All arguments must be numerical.");
		return;
	}

	obj = create_object(get_obj_index(OBJ_VNUM_TOKEN),0);


	obj->value[0] = atoi(arg1);
	obj->value[1] = atoi(arg2);
	obj->value[2] = atoi(arg3);
	obj->value[3] = atoi(argument);
	obj->name = str_dup(token_table[obj->value[0]].name);
	free_string(obj->short_descr);
	obj->short_descr = str_dup(token_table[obj->value[0]].short_descr);
	free_string(obj->description);
	obj->description = str_dup(token_table[obj->value[0]].long_descr);
	obj_to_char(obj,ch);

	send_to_one(ch,"You have created a %s token.",token_table[obj->value[0]].name);
	for(to = ch->in_room->people; to; to = to_next)
	{
			to_next = to->next_in_room;
			if(to->in_room == ch->in_room && to != ch)
			{
				send_to_one(to,"%s has created %s token.",PERS(ch,to),token_table[obj->value[0]].name);
			}
	}
	return;
}
Exemplo n.º 20
0
void do_angelicarmor( CHAR_DATA *ch, char *argument )
{
    OBJ_INDEX_DATA *pObjIndex;
    OBJ_DATA *obj;
    char arg[MAX_INPUT_LENGTH];
    int vnum = 0;

    argument = one_argument( argument, arg );
    if (IS_NPC(ch)) return;
    if( !IS_CLASS(ch, CLASS_ANGEL))
    {
        send_to_char("What?\n\r",ch);
        return;
    }
    if (arg[0] == '\0')
    {
        send_to_char("Please specify which piece of angel armor you wish to make: Sword Bracer Necklace Ring Plate Helmet Leggings Boots Gauntlets Sleeves Cloak Belt Visor.\n\r",ch);
        return;
    }
    if ( ch->practice < 150 )
    {
        send_to_char("It costs 150 points of primal to create angel equipment.\n\r",ch);
        return;
    }
    if (!str_cmp(arg,"sword")) vnum = 33192;
    else if (!str_cmp(arg,"bracer")) vnum = 33181;
    else if (!str_cmp(arg,"necklace")) vnum = 33182;
    else if (!str_cmp(arg,"ring")) vnum = 33180;
    else if (!str_cmp(arg,"plate")) vnum = 33187;
    else if (!str_cmp(arg,"helmet")) vnum = 33184;
    else if (!str_cmp(arg,"leggings")) vnum = 33188;
    else if (!str_cmp(arg,"boots")) vnum = 33189;
    else if (!str_cmp(arg,"gauntlets")) vnum = 33190;
    else if (!str_cmp(arg,"sleeves")) vnum = 33191;
    else if (!str_cmp(arg,"cloak")) vnum = 33185;
    else if (!str_cmp(arg,"belt")) vnum = 33183;
    else if (!str_cmp(arg,"visor")) vnum = 33186;
    else
    {
        do_angelicarmor(ch,"");
        return;
    }
    if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
    {
        send_to_char("Missing object, please inform a God.\n\r",ch);
        return;
    }
    obj = create_object(pObjIndex, 50);
    obj->questowner = str_dup(ch->pcdata->switchname);
    obj_to_char(obj, ch);
    ch->practice -= 150;
    act("$p appears in your hands.",ch,obj,NULL,TO_CHAR);
    act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM);
    return;
}
Exemplo n.º 21
0
/*
 * Make a trap.
 */
OBJ_DATA *make_trap( int v0, int v1, int v2, int v3 )
{
   OBJ_DATA *trap;

   trap = create_object( get_obj_index( OBJ_VNUM_TRAP ), 0 );
   trap->timer = 0;
   trap->value[0] = v0;
   trap->value[1] = v1;
   trap->value[2] = v2;
   trap->value[3] = v3;
   return trap;
}
Exemplo n.º 22
0
/*
 * Make a campfire.
 */
void make_campfire( room_index * in_room, char_data * ch, short timer )
{
   obj_data *fire;

   if( !( fire = get_obj_index( OBJ_VNUM_CAMPFIRE )->create_object( 1 ) ) )
   {
      log_printf( "create_object: %s:%s, line %d.", __FILE__, __FUNCTION__, __LINE__ );
      return;
   }
   fire->timer = number_fuzzy( timer );
   fire->to_room( in_room, ch );
}
Exemplo n.º 23
0
/*
 * A healer spell that will allow the healer to create a bind stone that will stay in the
 * room with some of their healing power imbued into it.  The bind stone will be an object
 * that can't be moved or sacrificed.  Only one can exist in an area.  It will have a certain
 * amount of charges that it can be used.  When a player touches it, they will be healed.
 * when the bind stone's magic is used up it will disappear into the ether.  The item won't
 * disappear with time however.. it must be used.  For now, this will not survive copyover's
 * or reboots.
 */
void spell_healers_bind(int sn, int level, CHAR_DATA *ch, void *vo, int target)
{
    OBJ_DATA *obj;
    OBJ_DATA *objSearch;
    int charges = 0;

    // First, let's see if there are any other bind stones in the area, if so, we
    // are not going to cast this.  These will not be in containers.
    for (objSearch = object_list; objSearch != NULL; objSearch = objSearch->next)
    {
        // Can't be in a null room
        if (objSearch->in_room != NULL)
        {
            // Only one per area at a time.
            if (objSearch->pIndexData->vnum == OBJ_VNUM_HEALERS_BIND
                && objSearch->in_room->area->vnum == ch->in_room->area->vnum)
            {
                send_to_char("A healer's bind stone already exists somewhere in this area...\r\n", ch);
                return;
            }
        }
    }

    // Base is level / 5
    charges = ch->level / 5;

    // +1 for bless
    if (is_affected(ch, gsn_bless))
    {
        charges += 1;
    }

    // +1 for enhanced recovery, the healer can then pass that along.
    if (is_affected(ch, gsn_enhanced_recovery))
    {
        charges += 1;
    }

    // Cut in half if these are the case..
    if (is_affected(ch, gsn_curse) || is_affected(ch, gsn_weaken))
    {
        charges = charges / 2;
    }

    obj = create_object(get_obj_index(OBJ_VNUM_HEALERS_BIND));
    obj->value[0] = charges;  // The number of charges
    obj->value[1] = 50;       // The amount it heals

    obj_to_room(obj, ch->in_room);
    act("$p slowly fades into existence.", ch, obj, NULL, TO_ROOM);
    act("$p slowly fades into existence.", ch, obj, NULL, TO_CHAR);

} // end spell_create_healers_bind
Exemplo n.º 24
0
void do_skyforge( CHAR_DATA *ch, char *argument )
{
    OBJ_INDEX_DATA *pObjIndex;
    OBJ_DATA *obj;
    int vnum = 0;



    if (IS_NPC(ch)) return;

   	if(!IS_IMMORTAL(ch))
	{
    if (!IS_CLASS(ch, CLASS_SKYBLADE))
    {
        send_to_char("What?\n\r",ch);
        return;
    }
	}

    if (ch->pcdata->powers[SKYBLADE_MAGIC] < 1)
    {
    		send_to_char("You haven't mastered enough of the magic ability yet.\n\r",ch);
         return;
    }
    if ( ch->practice < 250 )
    {
        send_to_char("You don't have the 250 primal needed.\n\r",ch);
        return;
    }
    if (ch->pcdata->powers[SKYBLADE_MAGIC] == 1) vnum = 33178;
    if (ch->pcdata->powers[SKYBLADE_MAGIC] >= 2) vnum = 33179;
    if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
    {
    send_to_char("Missing object, please inform a God .\n\r",ch);
    return;
    }

    if( !IS_IMMORTAL(ch) )
	{
		ch->practice -= 250;
	}
    obj = create_object(pObjIndex, 50);
    SET_BIT(obj->spectype, SITEM_SKYBLADE);
    obj->questowner = str_dup(ch->pcdata->switchname);
    obj->ownerid = ch->pcdata->playerid;
    obj_to_char(obj, ch);
    act("$p falls from the heavens and lands before you.",ch,obj,NULL,TO_CHAR);
    act("$p falls from the heavens and lands before $n.",ch,obj,NULL,TO_ROOM);
    return;
}
Exemplo n.º 25
0
/*****************************************************************************
 Name:		save_objects
 Purpose:	Save #OBJECTS section of an area file.
 Called by:	save_area(olc_save.c).
 Notes:         Changed for ROM OLC.
 ****************************************************************************/
void save_objects( FILE *fp, AREA_DATA *pArea )
{
    int i;
    OBJ_INDEX_DATA *pObj;

    fprintf( fp, "#OBJECTS\n" );

    for( i = pArea->min_vnum; i <= pArea->max_vnum; i++ )
    {
	if ( (pObj = get_obj_index( i )) )
	    save_object( fp, pObj );
    }

    fprintf( fp, "#0\n\n\n\n" );
    return;
}
Exemplo n.º 26
0
void warn_progs( CHAR_DATA * ch, int low, int high, AREA_DATA * area, RENUMBER_AREA * r_area )
{
   ROOM_INDEX_DATA *room;
   OBJ_INDEX_DATA *obj;
   MOB_INDEX_DATA *mob;
   MPROG_DATA *mprog;
   int i;

   for( i = area->low_r_vnum; i <= area->hi_r_vnum; i++ )
   {
      room = get_room_index( i );
      if( !room )
         continue;
      mprog = room->mudprogs;
      while( mprog )
      {
         warn_in_prog( ch, low, high, "room", i, mprog, r_area );
         mprog = mprog->next;
      }
   }

   for( i = area->low_o_vnum; i <= area->hi_o_vnum; i++ )
   {
      obj = get_obj_index( i );
      if( !obj )
         continue;
      mprog = obj->mudprogs;
      while( mprog )
      {
         warn_in_prog( ch, low, high, "obj", i, mprog, r_area );
         mprog = mprog->next;
      }
   }

   for( i = area->low_m_vnum; i <= area->hi_m_vnum; i++ )
   {
      mob = get_mob_index( i );
      if( !mob )
         continue;
      mprog = mob->mudprogs;
      while( mprog )
      {
         warn_in_prog( ch, low, high, "mob", i, mprog, r_area );
         mprog = mprog->next;
      }
   }
}
Exemplo n.º 27
0
int artefact_new_count( ARTEFACT_DATA *art )
{
	//char buf[MAX_INPUT_LENGTH];
	OBJ_DATA * obj = NULL;
	ARTEFACT_OWNER *otmp = NULL;
	int licznik = 0;

	char *name = NULL;

	//wpierw to co w grze, jesli nosi je PC to nie liczymy

	name = get_obj_index( art->avnum ) ->name;

	for ( obj = object_list; obj != NULL; obj = obj->next )
	{
		if ( !is_name( name, obj->name ) )   //nie ten
			continue;

		//ten
		if ( obj->carried_by == NULL )   /*nie noszony*/
		{
			licznik++;
			continue;
		}
		else if ( obj->carried_by != NULL && IS_NPC( obj->carried_by ) )   /*przez NPC'a*/
		{
			licznik++;
			continue;
		}
		else continue; //nosi PC nie liczymy
	}

	//teraz te co na liscie czyli pc

	otmp = art->first_owner;

	while ( otmp )
	{
		licznik++;
		otmp = otmp->next;
	}

	return licznik;

}
Exemplo n.º 28
0
//na przyklad jak cialko sie robi, to calkiem z listy wywala
//ownera ale zostaje na mudzie artef. count sie nie zmienia
void all_artefact_from_char( CHAR_DATA *ch )
{
	ARTEFACT_DATA * atmp = NULL;
	ARTEFACT_OWNER *otmp, *prev = NULL;
	OBJ_DATA *obj = NULL;

	for ( atmp = artefact_system;atmp;atmp = atmp->next )
	{
		otmp = atmp->first_owner;
		for ( ;otmp; )
		{
			if ( !strcmp( ch->name, otmp->owner ) )
			{
				if ( prev != NULL )
					prev->next = otmp->next;
				else
					atmp->first_owner = otmp->next;

				obj = create_object( get_obj_index( atmp->avnum ), FALSE );
				wiznet( "$N STRACIL(a) artefact : $p.", ch, obj, WIZ_ARTEFACT, 0, get_trust( ch ) );

				append_file_format_daily( ch, ARTEFACT_LOG_FILE, "-> STRACIL (zgon):%s vnum:%d count:%d max: %d (move)", obj->short_descr, atmp->avnum, atmp->count, atmp->max_count );

				extract_obj( obj );

				otmp->next = NULL;
				free_artefact_owner( otmp );

				//nastepny element
				if ( prev != NULL )
					otmp = prev->next;
				else
					otmp = atmp->first_owner;


			}
			else //to nie ten
			{
				prev = otmp;
				otmp = otmp->next;
			}
		}
	}

}
Exemplo n.º 29
0
void add_coins( char_data* ch, int amount, char* message )
{
  obj_data*  obj;
  int        num  [ 4 ];
  int          i;

  for( i = MAX_COIN - 1; i >= 0; i-- ) {
    if( ( num[i] = amount/coin_value[i] ) > 0 ) {
      amount -= num[i]*coin_value[i];
      obj = create( get_obj_index( coin_vnum[i] ), num[i] ); 
      obj->To( ch );
      consolidate( obj );
      }
    }

  if( message != NULL ) 
    send( ch, "%s%s.\r\n", message, coin_phrase( num ) );
}
Exemplo n.º 30
0
void handle_waterwheel_destruction(OBJ_DATA & obj)
{
    // Verify a room
    ROOM_INDEX_DATA * room(get_room_for_obj(obj));
    if (room == NULL)
        return;

    // Load up the remains and transfer the contents
    OBJ_DATA * remains(create_object(get_obj_index(OBJ_VNUM_WATERWHEEL_REMAINS), 0));
    remains->level = obj.level;

    for (OBJ_DATA * item(obj.contains); item != NULL; item = obj.contains)
    {
        obj_from_obj(item);
        obj_to_obj(item, remains);
    }

    obj_to_room(remains, room);
}