コード例 #1
0
ファイル: sv_net.c プロジェクト: davmlaw/xtux
/* Checks to see if client cl needs it's statusbar updated */
static void sv_net_update_statusbar(client_t *cl)
{
    weap_type_t *wt;
    int change = 0;

    CHECK_CHANGE(health);
    if( change && cl->ent->health < 0 )
	cl->health = 0; /* Health is sent as byte, so no negative values */

    CHECK_CHANGE(weapon);
    CHECK_CHANGE(frags);

    wt = weapon_type( cl->ent->weapon );
    if( cl->ammo != cl->ent->ammo[ wt->ammo_type ] ) {
	cl->ammo = cl->ent->ammo[ wt->ammo_type ];
	change = 1;
    }

    if( change )
	sv_netmsg_send_update_statusbar(cl);

}
コード例 #2
0
ファイル: db2.c プロジェクト: MikeMayer/act-of-war
void load_objects(FILE * fp)
{
    OBJ_INDEX_DATA *pObjIndex;

    if (!area_last) {		/* OLC */
	bug("Load_objects: no #AREA seen yet.", 0);
	exit(1);
    }
    for (;;) {
	sh_int vnum;
	char letter;
	int iHash;

	letter = fread_letter(fp);
	if (letter != '#') {
	    bug("Load_objects: # not found.", 0);
	    exit(1);
	}
	vnum = fread_number(fp);
	if (vnum == 0)
	    break;

	fBootDb = FALSE;
	if (get_obj_index(vnum) != NULL) {
	    bug("Load_objects: vnum %d duplicated.", vnum);
	    exit(1);
	}
	fBootDb = TRUE;

	pObjIndex = alloc_perm(sizeof(*pObjIndex));
	pObjIndex->vnum = vnum;
	pObjIndex->area = area_last;	/* OLC */
	pObjIndex->new_format = TRUE;
	pObjIndex->reset_num = 0;
	newobjs++;
	pObjIndex->name = fread_string(fp);
	pObjIndex->short_descr = fread_string(fp);
	pObjIndex->description = fread_string(fp);
	pObjIndex->material = fread_string(fp);

	pObjIndex->item_type = item_lookup(fread_word(fp));
	pObjIndex->extra_flags = fread_flag(fp);
	pObjIndex->wear_flags = fread_flag(fp);
	switch (pObjIndex->item_type) {
	case ITEM_WEAPON:
	    pObjIndex->value[0] = weapon_type(fread_word(fp));
	    pObjIndex->value[1] = fread_number(fp);
	    pObjIndex->value[2] = fread_number(fp);
	    pObjIndex->value[3] = attack_lookup(fread_word(fp));
	    pObjIndex->value[4] = fread_flag(fp);
	    break;
	case ITEM_CONTAINER:
	    pObjIndex->value[0] = fread_number(fp);
	    pObjIndex->value[1] = fread_flag(fp);
	    pObjIndex->value[2] = fread_number(fp);
	    pObjIndex->value[3] = fread_number(fp);
	    pObjIndex->value[4] = fread_number(fp);
	    break;
	case ITEM_DRINK_CON:
	case ITEM_FOUNTAIN:
	    pObjIndex->value[0] = fread_number(fp);
	    pObjIndex->value[1] = fread_number(fp);
	    pObjIndex->value[2] = liq_lookup(fread_word(fp));
	    pObjIndex->value[3] = fread_number(fp);
	    pObjIndex->value[4] = fread_number(fp);
	    break;
	case ITEM_WAND:
	case ITEM_STAFF:
	    pObjIndex->value[0] = fread_number(fp);
	    pObjIndex->value[1] = fread_number(fp);
	    pObjIndex->value[2] = fread_number(fp);
	    pObjIndex->value[3] = skill_lookup(fread_word(fp));
	    pObjIndex->value[4] = fread_number(fp);
	    break;
	case ITEM_POTION:
	case ITEM_PILL:
	case ITEM_SCROLL:
	    pObjIndex->value[0] = fread_number(fp);
	    pObjIndex->value[1] = skill_lookup(fread_word(fp));
	    pObjIndex->value[2] = skill_lookup(fread_word(fp));
	    pObjIndex->value[3] = skill_lookup(fread_word(fp));
	    pObjIndex->value[4] = skill_lookup(fread_word(fp));
	    break;
	default:
	    pObjIndex->value[0] = fread_flag(fp);
	    pObjIndex->value[1] = fread_flag(fp);
	    pObjIndex->value[2] = fread_flag(fp);
	    pObjIndex->value[3] = fread_flag(fp);
	    pObjIndex->value[4] = fread_flag(fp);
	    break;
	}
	pObjIndex->level = fread_number(fp);
	pObjIndex->weight = fread_number(fp);
	pObjIndex->cost = fread_number(fp);

	/* condition */
	letter = fread_letter(fp);
	switch (letter) {
	case ('P'):
	    pObjIndex->condition = 100;
	    break;
	case ('G'):
	    pObjIndex->condition = 90;
	    break;
	case ('A'):
	    pObjIndex->condition = 75;
	    break;
	case ('W'):
	    pObjIndex->condition = 50;
	    break;
	case ('D'):
	    pObjIndex->condition = 25;
	    break;
	case ('B'):
	    pObjIndex->condition = 10;
	    break;
	case ('R'):
	    pObjIndex->condition = 0;
	    break;
	default:
	    pObjIndex->condition = 100;
	    break;
	}

	for (;;) {
	    char letter;

	    letter = fread_letter(fp);

	    if (letter == 'A') {
		AFFECT_DATA *paf;

		paf = alloc_perm(sizeof(*paf));
		paf->where = TO_OBJECT;
		paf->type = -1;
		paf->level = pObjIndex->level;
		paf->duration = -1;
		paf->location = fread_number(fp);
		paf->modifier = fread_number(fp);
		paf->bitvector = 0;
		paf->next = pObjIndex->affected;
		pObjIndex->affected = paf;
		top_affect++;
	    } else if (letter == 'F') {
		AFFECT_DATA *paf;

		paf = alloc_perm(sizeof(*paf));
		letter = fread_letter(fp);
		switch (letter) {
		case 'A':
		    paf->where = TO_AFFECTS;
		    break;
		case 'I':
		    paf->where = TO_IMMUNE;
		    break;
		case 'R':
		    paf->where = TO_RESIST;
		    break;
		case 'V':
		    paf->where = TO_VULN;
		    break;
		default:
		    bug("Load_objects: Bad where on flag set.", 0);
		    exit(1);
		}
		paf->type = -1;
		paf->level = pObjIndex->level;
		paf->duration = -1;
		paf->location = fread_number(fp);
		paf->modifier = fread_number(fp);
		paf->bitvector = fread_flag(fp);
		paf->next = pObjIndex->affected;
		pObjIndex->affected = paf;
		top_affect++;
	    } else if (letter == 'E') {
		EXTRA_DESCR_DATA *ed;

		ed = alloc_perm(sizeof(*ed));
		ed->keyword = fread_string(fp);
		ed->description = fread_string(fp);
		ed->next = pObjIndex->extra_descr;
		pObjIndex->extra_descr = ed;
		top_ed++;
	    } else {
		ungetc(letter, fp);
		break;
	    }
	}

	iHash = vnum % MAX_KEY_HASH;
	pObjIndex->next = obj_index_hash[iHash];
	obj_index_hash[iHash] = pObjIndex;
	top_obj_index++;
	top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj;	/* OLC */
	assign_area_vnum(vnum);	/* OLC */
    }

    return;
}
コード例 #3
0
/*
 * Snarf an obj section. new style
 */
void load_objects ( FILE *fp )
{
	ItemData *pObjIndex;

	if ( !area_last ) { /* OLC */
		log_hd ( LOG_ERROR, "Load_objects: no #AREA seen yet." );
		exit ( 1 );
	}

	while ( true ) {
		int vnum;
		char letter;
		int iHash;

		letter                          = fread_letter ( fp );
		if ( letter != '#' ) {
			log_hd ( LOG_ERROR, "Load_objects: # not found." );
			exit ( 1 );
		}

		vnum                            = fread_number ( fp );
		if ( vnum == 0 )
		{ break; }

		fBootDb = FALSE;
		if ( get_obj_index ( vnum ) != NULL ) {
			log_hd ( LOG_ERROR, Format ( "Load_objects: vnum %d duplicated.", vnum ) );
			exit ( 1 );
		}
		fBootDb = TRUE;

		ALLOC_DATA ( pObjIndex, ItemData, 1 );

		pObjIndex->vnum                 = vnum;
		pObjIndex->area                 = area_last;            /* OLC */
		pObjIndex->new_format           = TRUE;
		pObjIndex->reset_num		= 0;
		newobjs++;
		pObjIndex->name                 = fread_string ( fp );
		pObjIndex->short_descr          = fread_string ( fp );
		pObjIndex->description          = fread_string ( fp );

		CHECK_POS ( pObjIndex->item_type, item_lookup ( fread_word ( fp ) ), "item_type" );
		pObjIndex->extra_flags          = fread_flag ( fp );
		pObjIndex->wear_flags           = fread_flag ( fp );
		pObjIndex->material_flags       = fread_flag ( fp );
		switch ( pObjIndex->item_type ) {
			case ITEM_WEAPON:
				pObjIndex->value[0]		= weapon_type ( fread_word ( fp ) );
				pObjIndex->value[1]		= fread_number ( fp );
				pObjIndex->value[2]		= fread_number ( fp );
				pObjIndex->value[3]		= attack_lookup ( fread_word ( fp ) );
				pObjIndex->value[4]		= fread_flag ( fp );
				break;
			case ITEM_CONTAINER:
				pObjIndex->value[0]		= fread_number ( fp );
				pObjIndex->value[1]		= fread_flag ( fp );
				pObjIndex->value[2]		= fread_number ( fp );
				pObjIndex->value[3]		= fread_number ( fp );
				pObjIndex->value[4]		= fread_number ( fp );
				break;
			case ITEM_DRINK_CON:
			case ITEM_FOUNTAIN:
				pObjIndex->value[0]         = fread_number ( fp );
				pObjIndex->value[1]         = fread_number ( fp );
				CHECK_POS ( pObjIndex->value[2], liq_lookup ( fread_word ( fp ) ), "liq_lookup" );
				pObjIndex->value[3]         = fread_number ( fp );
				pObjIndex->value[4]         = fread_number ( fp );
				break;
			case ITEM_WAND:
			case ITEM_STAFF:
				pObjIndex->value[0]		= fread_number ( fp );
				pObjIndex->value[1]		= fread_number ( fp );
				pObjIndex->value[2]		= fread_number ( fp );
				pObjIndex->value[3]		= skill_lookup ( fread_word ( fp ) );
				pObjIndex->value[4]		= fread_number ( fp );
				break;
			case ITEM_POTION:
			case ITEM_PILL:
			case ITEM_SCROLL:
				pObjIndex->value[0]		= fread_number ( fp );
				pObjIndex->value[1]		= skill_lookup ( fread_word ( fp ) );
				pObjIndex->value[2]		= skill_lookup ( fread_word ( fp ) );
				pObjIndex->value[3]		= skill_lookup ( fread_word ( fp ) );
				pObjIndex->value[4]		= skill_lookup ( fread_word ( fp ) );
				break;
			default:
				pObjIndex->value[0]             = fread_flag ( fp );
				pObjIndex->value[1]             = fread_flag ( fp );
				pObjIndex->value[2]             = fread_flag ( fp );
				pObjIndex->value[3]             = fread_flag ( fp );
				pObjIndex->value[4]		    = fread_flag ( fp );
				break;
		}
		pObjIndex->level		= fread_number ( fp );
		pObjIndex->weight               = fread_number ( fp );
		pObjIndex->cost                 = fread_number ( fp );

		/* condition */
		letter 				= fread_letter ( fp );
		switch ( letter ) {
			case ( 'P' ) :
				pObjIndex->condition = 100;
				break;
			case ( 'G' ) :
				pObjIndex->condition =  90;
				break;
			case ( 'A' ) :
				pObjIndex->condition =  75;
				break;
			case ( 'W' ) :
				pObjIndex->condition =  50;
				break;
			case ( 'D' ) :
				pObjIndex->condition =  25;
				break;
			case ( 'B' ) :
				pObjIndex->condition =  10;
				break;
			case ( 'R' ) :
				pObjIndex->condition =   0;
				break;
			default:
				pObjIndex->condition = 100;
				break;
		}

		while ( true ) {
			char letter;

			letter = fread_letter ( fp );

			if ( letter == 'A' ) {
				Affect *paf;

				ALLOC_DATA ( paf, Affect, 1 );

				paf->where		= TO_OBJECT;
				paf->type               = -1;
				paf->level              = pObjIndex->level;
				paf->duration           = -1;
				paf->location           = fread_number ( fp );
				paf->modifier           = fread_number ( fp );
				paf->bitvector          = 0;
				paf->next               = pObjIndex->affected;
				pObjIndex->affected     = paf;
				top_affect++;
			}

			else if ( letter == 'F' ) {
				Affect *paf;

				ALLOC_DATA ( paf, Affect, 1 );

				letter 			= fread_letter ( fp );
				switch ( letter ) {
					case 'A':
						paf->where          = TO_AFFECTS;
						break;
					case 'I':
						paf->where		= TO_IMMUNE;
						break;
					case 'R':
						paf->where		= TO_RESIST;
						break;
					case 'V':
						paf->where		= TO_VULN;
						break;
					default:
						log_hd ( LOG_ERROR, "Load_objects: Bad where on flag set." );
						exit ( 1 );
				}
				paf->type               = -1;
				paf->level              = pObjIndex->level;
				paf->duration           = -1;
				paf->location           = fread_number ( fp );
				paf->modifier           = fread_number ( fp );
				paf->bitvector          = fread_flag ( fp );
				paf->next               = pObjIndex->affected;
				pObjIndex->affected     = paf;
				top_affect++;
			}

			else if ( letter == 'E' ) {
				DescriptionData *ed;

				ALLOC_DATA ( ed, DescriptionData, 1 );

				ed->keyword             = fread_string ( fp );
				ed->description         = fread_string ( fp );
				ed->next                = pObjIndex->extra_descr;
				pObjIndex->extra_descr  = ed;
				top_ed++;
			} else if ( letter == 'R' ) {
				pObjIndex->requirements[SIZ_REQ]	= fread_number ( fp );
				pObjIndex->requirements[STR_REQ]	= fread_number ( fp );
				pObjIndex->requirements[DEX_REQ]	= fread_number ( fp );
				pObjIndex->requirements[CON_REQ]	= fread_number ( fp );
				pObjIndex->requirements[INT_REQ]	= fread_number ( fp );
				pObjIndex->requirements[WIS_REQ]	= fread_number ( fp );
			} else if ( letter == 'L' ) {
				pObjIndex->repop_percent = fread_number ( fp );
			} else {
				ungetc ( letter, fp );
				break;
			}
		}

		iHash                   = vnum % MAX_KEY_HASH;
		pObjIndex->next         = obj_index_hash[iHash];
		obj_index_hash[iHash]   = pObjIndex;
		top_obj_index++;
		top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj;   /* OLC */
		assign_area_vnum ( vnum );                                  /* OLC */
	}

	return;
}